STRC Overnight Research Routine

Self-contained spec for a session triggered from a scheduled Telegram message in @super_claudecode_bot. The routine is the synthesis + morning-report layer that runs once a day after strc-lit-watch (05:33 local) has already pulled new literature into the vault. It does NOT do its own paper scanning.

Output destination: ~/STRC/notes/STRC Morning Report YYYY-MM-DD.md.


Step 0 — orient

  1. Read ~/STRC/AGENTS.md end-to-end. Hard rules to honour every step:
    • §0 ranking discipline (S/A/B/C/D, hub-first, every proof closes with ## Ranking delta).
    • §0b scripts inventory (any new/modified script under ~/STRC/hypotheses/*/scripts/ or ~/STRC/models/ adds a row to STRC Computational Scripts Inventory the same turn).
    • §0c literature-first (no numerical input without primary-literature backing — if missing, retrieve the literature first; never fabricate “estimates”).
    • §0d AF3/interface-screen + Apple Silicon first for heavy compute.
  2. Read ~/STRC/notes/STRC Hypothesis Ranking.md (the live Dataview hub-of-hubs). This is the ground-truth ranking for the session.
  3. Read the most recent ~/STRC/notes/STRC Morning Report *.md to understand what was already shipped overnight before today.
  4. Read ~/STRC/notes/STRC Computational Scripts Inventory.md to know which scripts are active vs scaffold.
  5. Tail ~/.cache/strc-lit-watch/log.txt (last 200 lines) and list the newest files in ~/STRC/sources/lit/ modified in the last 24 h — this is what the literature watcher delivered overnight.

If any required file is missing, log a one-line warning at the top of the morning report and proceed with best-effort.

Step 1 — pick the highest-leverage move

After step 0 you have: current ranking, what shipped recently, what new literature appeared, current scripts state. Pick one primary move for this run:

A. Synthesis-only (default). New lit is interesting but no new compute is justified. Produce the morning report and propose decisions for Egor.

B. Tight computational add-on. Only if the move is small (≤ 30 min wall, no AF3, no overnight MD), is well-scoped, and is clearly unblocked by what came in overnight. Examples: a parameter-fill ODE update, a small APBS rescore, a feasibility sketch. If it touches models/ or hypotheses/*/scripts/, follow §0b same turn.

C. Hub maintenance. If a hypothesis tier should genuinely change (e.g. new lit kills a B-tier or promotes a D-tier), do the hub edit and write a ## Ranking delta. No silent re-tiering.

Do NOT kick off long compute (any AF3 submission, full MD, off-target panels, library expansions) without an explicit go-ahead in the Telegram message itself. Default refuses long compute and lists it under “Egor decisions needed” instead.

Step 2 — literature-first sanity gate

If the chosen move uses any numerical parameter (Kd, IC50, expression level, half-life, anything), confirm that every number traces to a sources/lit/ file. If not, retrieve the literature first via:

  • qmd query "<term>" --sources strc booklibrary research (fast local hybrid search).
  • If still missing, escalate to the relevant skill: annas-archive for books / paywalled, sci-hub for PMC-walled, Crossref/PubMed for DOI hunts.
  • Never invent values from training data. If a parameter cannot be sourced this run, log it under “Open lit gaps” in the morning report and skip the move that needs it.

Step 3 — execute

Carry out the chosen move in the appropriate location:

  • New atomic notes → ~/STRC/notes/.
  • Phase proofs → ~/STRC/hypotheses/h{N}-{slug}/phases/. Required: full frontmatter, ## Connections block with at least one wikilink, and a ## Ranking delta at the bottom (record “no change” if applicable).
  • New / modified scripts → ~/STRC/hypotheses/h{N}-{slug}/scripts/ or ~/STRC/models/, then add a row in STRC Computational Scripts Inventory.md the same turn.
  • New external tool / API / software introduced this run → ~/STRC/tools/<tool>.md card before first use (the strc-rank skill enforces this if you invoke it).
  • Hub frontmatter edits (tier, score, next_step) → only via §0 ranking discipline.

If the move closes a phase that cites primary literature, every [source] wikilink must point to an existing sources/lit/ file (literature-first rule).

Step 4 — write the morning report

File: ~/STRC/notes/STRC Morning Report <YYYY-MM-DD>.md where the date is date +%Y-%m-%d at the moment the routine starts.

Required frontmatter:

---
date: YYYY-MM-DD
type: note
tags: [strc, morning-report, routine, autonomous]
sites: [strc]
---

Body sections, in order:

  1. TL;DR (3 lines max) — what shipped, the most important number or decision, the top open question.
  2. Ranking state (before → after) — short table: tier / mech / deliv / misha_fit per affected hypothesis. If nothing changed, say so.
  3. What shipped this run — verdict per phase / note / model / script touched. Each entry links the proof file.
  4. New literature relevant to current S/A tier — bullets of any sources/lit/ files added in the last 24 h that move an S/A hypothesis. Skip if none.
  5. Open lit gaps — any unsourced parameter the routine refused to fabricate.
  6. Egor decisions needed — numbered list. Each item is concrete: “approve N hours of MD on X”, “review wet-lab shortlist Y”, “decide v5.3 scaffold direction Z”. Empty list is a valid morning report.
  7. Compute summary — wall time + which device (CPU / MPS / Metal / MLX / CoreML) for any work this run actually did. Skip if synthesis-only.
  8. Sanity check — wikilink balance (grep -c '\[\[' vs grep -c '\]\]'), that hub frontmatter changes match the ## Ranking delta, that the scripts inventory has rows for every new script.
  9. ## Connections — at least one wikilink. Use the 7-label vocabulary from STRC AGENTS.md ([part-of], [references], [supports], [contradicts], [see-also], [about], [audience]). Bare wikilinks for anything outside that vocabulary.

Style: clipped bullets, named numbers, no marketing prose, no emoji. The Morning Report 2026-04-25 is the reference template (~/STRC/notes/STRC Morning Report 2026-04-25.md).

Step 5 — lint + close

  1. Run cd ~/STRC && python3 scripts/brain-lint.py and fix anything the routine itself introduced. Pre-existing lint debt is logged but not auto-fixed unless trivial.
  2. If any tier / score / next-step changed in a hub: prepend the entry to the relevant ~/STRC/hypotheses/h{N}-{slug}/log.md.
  3. Final stdout: one line summary in this exact shape so Telegram footer is parseable:
strc-routine done: <move-class> | <N hypotheses touched> | <M lit gaps> | <K decisions for Egor>

Where <move-class> is synthesis / compute / hub-only / noop.

Hard constraints (do NOT violate)

  • No long compute (>30 min wall) without explicit go-ahead in the trigger message.
  • No fabricated numerical values. Literature-first or refuse the move.
  • No silent re-tiering. Every hub frontmatter change is paired with a ## Ranking delta.
  • No writes outside ~/STRC/. If a Brain note must be touched, surface it as a decision item instead of editing.
  • No new wet-lab content (Phase 8+ vendor selection, SOPs, costs, patch-clamp protocols) unless the trigger message explicitly asks. Default is computation + verification only.
  • Stay on Apple Silicon for any compute (MPS / Metal / MLX / CoreML); never silently land on CPU for jobs ≥ 30 min.

Trigger override grammar

The Telegram trigger message can extend the default behaviour with one of these qualifiers:

  • ... focus h01 — restrict the move to that hypothesis only.
  • ... compute ok up to Nh — allow longer compute, capped at N hours wall.
  • ... synthesis only — force move-class A; no model / script writes.
  • ... include af3 — allow AF3 submission this run.

Without qualifiers, defaults above hold.

Connections