[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-idea-spark":3,"mdc-a1lb9u-key":41,"related-org-microsoft-idea-spark":5321,"related-repo-microsoft-idea-spark":5516},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":36,"sourceUrl":39,"mdContent":40},"idea-spark","generate research ideas with falsification plans","Generate ONE reviewer-defensible, implementable research idea with a concrete method and falsification plan from a stated research direction. Use when the user asks for a research idea, novelty analysis, bottleneck diagnosis, or paper-shape suggestion. Skip code review, debugging, and unconstrained brainstorming without research context.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Research","research","tag",{"name":17,"slug":18,"type":15},"Ideation","ideation",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Strategy","strategy",122,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FResearchStudio","2026-07-31T05:55:12.079424",null,6,[29,30,31,32,33,34,35],"blog-generation","idea-generation","poster-generation","presentation","researchstudio-idea","researchstudio-reel","video-generation",{"repoUrl":24,"stars":23,"forks":27,"topics":37,"description":38},[29,30,31,32,33,34,35],"ResearchStudio: Our AI co-author, from research problem to final publication.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FResearchStudio\u002Ftree\u002FHEAD\u002FResearchStudio-Idea\u002Fskills\u002Fidea_spark","---\nname: idea-spark\ndescription: >-\n  Generate ONE reviewer-defensible, implementable research idea with a concrete\n  method and falsification plan from a stated research direction. Use when the\n  user asks for a research idea, novelty analysis, bottleneck diagnosis, or\n  paper-shape suggestion. Skip code review, debugging, and unconstrained\n  brainstorming without research context.\n---\n\n# Idea Spark Skill\n\nConvert an under-specified research direction into ONE reviewer-defensible Oral-level research proposal — grounded in 1947 ICLR\u002FICML\u002FNeurIPS papers (2021-2025) — via a 5-phase workflow: retrieve recent literature, diagnose the bottleneck, select + generate a candidate using corpus-derived ideation pattern cards, run it through a quality gauntlet, expand into an idea card.\n\nThis file is the operational runbook. Design rationale (the 7 design principles, why each contract is shaped this way, removed-check history) lives in [references\u002Fdesign-notes.md](references\u002Fdesign-notes.md) — read it only when modifying or evaluating the skill, never needed to run it. When MODIFYING the skill, also replay the cross-shape regression set in [references\u002Fregression-directions.md](references\u002Fregression-directions.md) (deterministic subset: `python3 \"$SKILL_DIR\u002Fscripts\u002Fregression_check.py\" \u003Crun_dir>`; routing\u002Fmerger branch fixtures — including every guard\u002Fretry branch that real runs rarely exercise: `python3 \"$SKILL_DIR\u002Fscripts\u002Fselftest_routing.py\"`; unit fixtures for the helpers every phase sits on — the multi-query round-robin and the tolerant LLM-JSON loader: `python3 \"$SKILL_DIR\u002Fscripts\u002Fselftest_units.py\"`). First-time installation lives in [references\u002Fsetup.md](references\u002Fsetup.md).\n\n## When to use\n\n- \"Give me a research idea in {area} I could pursue.\" \u002F \"What's the most impactful next step in this direction?\"\n- \"Help me sharpen this vague direction into an Oral-level proposal.\"\n- \"What's the bottleneck of this problem?\" \u002F \"Run a novelty audit on this idea.\"\n\n## When NOT to use\n\n- Code review, debugging, refactoring. Summarizing one paper. Cross-decade survey writing.\n- Free-association brainstorming with no research context. Engineering integration tasks (\"ship this feature in our system\").\n- Pure benchmark \u002F dataset construction work — the 15-pattern vocabulary handles benchmark *audit* (controlled_diagnostic_design) but not benchmark *construction*.\n\n## Setup (first use only)\n\nFollow [references\u002Fsetup.md](references\u002Fsetup.md). Quick version — set two shell variables, install deps, verify:\n\n```bash\nSKILL_DIR=\u003Cpath to this folder>                  # e.g. ~\u002F.claude\u002Fskills\u002Fidea-spark (Claude Code), ~\u002F.codex\u002Fskills\u002Fidea_spark (Codex CLI), or any clone location\nRUN_DIR=\"$PWD\u002Fideaspark_run\u002F\u003Ctopic-slug>\"   # convention below; any absolute dir works. No mkdir needed — every phase mkdir -p's its own --out, and `next` treats a missing dir as a fresh run\npython3 -m pip install feedparser openreview-py beautifulsoup4 pymupdf\npython3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" check_connectors   # from the SAME shell you'll run phases from\n```\n\nCredentials go in `.env` (OpenReview user\u002Fpass + Semantic Scholar key — see setup.md); the orchestrator auto-loads it. Optional: `xelatex`\u002F`tectonic` for PDF cards.\n\n---\n\n## How to run: the `next` loop\n\nThe canonical way to drive a run is the **run-state navigator**:\n\n```bash\npython3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" next --dir \"$RUN_DIR\" --query \"\u003Cuser's research question>\"\n```\n\n**Run-dir convention (one run = one directory, named by the host BEFORE the first command):** `$PWD\u002Fideaspark_run\u002F\u003Ctopic-slug>` — a short kebab-case slug distilled from the user's direction (e.g. `ideaspark_run\u002Fdiffusion-watermark`); if the slug is taken, append `_2`, not a timestamp. NEVER reuse a directory that already contains a `phase0\u002F` — every phase writes into `$RUN_DIR` and would clobber the prior run. The skill itself never names the dir (any absolute path works); this convention exists so runs from different harnesses land in one predictable place instead of each agent improvising.\n\n`next` inspects the artifacts already on disk and prints EXACTLY one next step — either a Bash command to run verbatim, or an LLM sub-agent spec (system-prompt path + input file paths + output path + the routing signal to report back). It is read-only and idempotent (safe to re-run anytime, including to resume an interrupted run) — including on a run dir that does not exist yet, which it reports as a fresh run and answers with the Phase 0 step rather than an error. You never need to create the directory before calling it. The host loop is:\n\n1. Run `next`.\n2. Do what it says (`bash` → run the command; `llm_subagent` → execute in an ISOLATED context per the Context discipline rules below).\n3. Run `next` again. Repeat until it reports a terminal state (`DONE`, `do_not_generate`, or `phase_3_failed`).\n\n**Consume every emit WHOLE — never grep\u002Ffilter\u002Ftruncate the block.** INPUT lists span unlabeled continuation lines; a label-keyed grep (`grep -E \"STEP|INPUT|...\"`) silently drops them. This exact failure occurred in a live run: the navigator listed the coherence gate's blocking findings as an audit input, the host's grep dropped the line, and the audit issued a false `advance` without ever seeing the executed evidence. If the emit must be captured into a bounded tool result, `head -c 4000` the WHOLE block — never filter by line labels.\n\n`next` encodes the full phase graph — the mandatory full-text gate, the citation gate, the abandon-retry branch, the falsification re-audit branch, and the correct Phase 4 flags per path — so you do not need to memorize the reference tables below; they exist for deviation and debugging.\n\nIf your host exposes a task\u002Ftodo tool (e.g., TodoWrite), seed it with this checklist and tick phases as `next` moves past them:\n\n```\n- [ ] Phase 0: Literature grounding → lit_table.md, then Phase 0+ full-text fetch (MANDATORY — Phase 1 hard-gates on it)\n- [ ] Phase 1: Bottleneck identification → phase1_output.json (routing: proceed | do_not_generate)\n- [ ] Phase 2: Gap×pattern selection + candidate generation (ONE isolated context, TWO output files) → citation gate → coherence gate (dry-run trace, fresh context)\n- [ ] Phase 3: Collision retrieval (signature@10mo + alias@48mo — launchable in parallel with 2.3) → audit (5 checks) → [revise → merge → re-audit if falsification rewritten] | [abandon → information-gain retry: regenerate while each failure yields NEW binding lessons, ≤3 candidate cycles; repeated subsumption lesson → 1 bottleneck re-diagnosis + 1 attempt; no new information or cap → phase_3_failed]\n- [ ] Phase 4: skeleton → fill (technical) → assemble partial → derive (plain, fast-tier) → assemble final + method view → implementability audit → validate → render → return 3 cards inline\n```\n\nThree outcomes per run: the rendered idea-card markdown returned inline (LaTeX + per-phase JSON left under `$RUN_DIR`), a `do_not_generate.md` (Phase 1 OOD), or a `phase_3_failed.md` (audit abandons twice). **Never ask the user mid-flow** — missing intake fields are inferred; revision, falsification re-audit, and the single internal retry all run without user re-invocation.\n\n### Invocation contract\n\n**No `cd` is required.** `scripts\u002Frun.py` self-locates its skill root, so every orchestrator command can be invoked from ANY working directory by absolute script path: `python3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" \u003Csubcommand> --out \"$RUN_DIR\u002F\u003Cphase>\u002F\" ...`. The legacy form `cd \"$SKILL_DIR\" && python3 -m scripts.run \u003Csubcommand> ...` works identically. Do NOT use relative script or `--out` paths — CWD is not stable across host-LLM Bash invocations, and the orchestrator rejects a relative `--out` outright.\n\n**Exit codes 10 and 11 are NOT errors — they are sentinel handshakes.** When the orchestrator can't call an LLM itself (no `NOVELTY_LLM_CLASSIFY_FAST_CMD`), it writes a sentinel JSON describing what the host LLM should do, then exits rc=10 (intent \u002F pattern-summary) or rc=11 (signature_terms). Read the sentinel (`$RUN_DIR\u002F\u003Cphase>\u002F.\u003Cstep>_pending`), read the file at its `rubric_file` field (absolute path), produce the expected output, re-invoke per its `re_invocation` field. Do not stop on these codes. (The default Phase 0 flow below avoids the rc=10 intent sentinel entirely by passing `--queries` up front.)\n\n### Context discipline (read BEFORE running any LLM-driven phase)\n\nA full run accumulates ~180-250k tokens of intermediate state. If the host LLM carries that in its own conversation context across phases, the Phase 1 \u002F 2.2 \u002F 4.fill calls routinely hit the backend request timeout (`[API Error · Request timed out · Retrying...]`) and the retry times out again. Apply ALL three rules on every run:\n\n**Rule 1 — Run every LLM-driven phase in an ISOLATED context.** Phases 1 \u002F 2 (2.1+2.2) \u002F 2.3 \u002F 3.2 \u002F 3.3 \u002F 4.fill \u002F 4.1.5 each have file-path inputs and one JSON output; no phase needs the conversation that produced an earlier one. Use the FIRST isolation mechanism your harness supports:\n\n- **(a) Subprocess LLM** — set `NOVELTY_LLM_REASONING_LARGE_CMD` \u002F `NOVELTY_LLM_CLASSIFY_FAST_CMD` (see § Configuration); each phase runs as its own subprocess, fresh context by construction, on any harness.\n- **(b) Sub-agent tool** (Claude Code `Agent` or equivalent) — spawn one per phase, passing ONLY the file paths the phase prompt lists — not conversation history, not file contents inline. The sub-agent reads from disk, `Write`s to disk, returns ≤ 250 words (output path + routing signal). Exception by design: Phase 2.1 and 2.2 run in ONE sub-agent writing both output files — both are generation-side; the adversarial separations (3.2 vs 3.3, 4.fill vs 4.1.5) must stay separate calls.\n- **(c) Manual context reset** — run inline but clear\u002Fcompact at the four points in Rule 3.\n\nWhichever mechanism, the parent context stays ≤ ~30k tokens for the whole run because it never holds a phase's structured output.\n\n**Rule 2 — `Write` every phase artifact directly to disk; never paraphrase it into chat.** Output convention: `$RUN_DIR\u002F\u003Cphase>\u002F\u003Cphase>_output.json`. Use your harness's file-write tool (Claude Code: `Write`) — no Bash heredocs (permission prompts + silent truncation), no `echo`, no pasting JSON into replies. Bound tool-result captures from large files to ≤ 4 KB (`head -c 4000` \u002F `jq` \u002F `sed`); never `Read` a >10 KB intermediate dump into the parent context — the dump gets cached into every subsequent turn (this exact anti-pattern caused prior timeout runs).\n\n**Rule 3 — Compact between phases.** Natural compact points: after Phase 0+, after Phase 1, after Phase 2, after Phase 3.2. Every phase re-reads its disk inputs, so compacting loses nothing. With `\u002Fcompact`, use it there; Rule 1 mechanisms (a)\u002F(b) achieve the same on their own.\n\n**Diagnostic for \"Request timed out\" mid-phase:** inspect your harness's session transcript\u002Flog (Claude Code: `~\u002F.claude\u002Fprojects\u002F\u003Cproject-slug>\u002F\u003Csession-id>.jsonl`, look for `isApiErrorMessage: true`; other harnesses: their session-log equivalent); the prior tool call shows which prompt got too big. The fix is one of the three rules — usually Rule 1.\n\n---\n\n## Phase reference\n\n`next` prints each of these steps at the right moment with concrete paths; the tables below are the full contract for deviation\u002Fdebugging.\n\n### Orchestrator entry points\n\n| Phase | Entry point (`python3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" ...`, any CWD) |\n|---|---|\n| navigator | `next --dir \"$RUN_DIR\" [--query \"...\"]` |\n| Phase 0 | `phase0 --query \"\u003Cuser text>\" --queries \"q1\\|q2\\|q3\\|q4\" --out $RUN_DIR\u002Fphase0\u002F` |\n| user-ref registration (title-named anchor papers; BEFORE phase0_fulltext) | `add_user_ref --out $RUN_DIR\u002Fphase0\u002F --title \"\u003Cfull title>\" [--raw-match \"\u003Cuser phrasing>\"] [--id \u003Carxiv\u002FDOI\u002FURL>]` |\n| relevance partition apply (Phase 0.4; archives off_topic + stamps core\u002Fadjacent, BEFORE tagging) | `apply_partition --out $RUN_DIR\u002Fphase0\u002F --partition \u003Crelevance_partition.json>` |\n| host-ref resolution (Phase 0.5 coverage check; verifies + merges host-nominated missing papers) | `add_host_refs --out $RUN_DIR\u002Fphase0\u002F --refs \u003Cnoms.json>` |\n| Phase 0+ full-text (**mandatory**, the moment lit_table.md lands) | `phase0_fulltext --out $RUN_DIR\u002Fphase0\u002F` |\n| Phase 1 anchor top-up (optional, when the #1 closest_adjacent fell outside the fulltext pool) | `phase1_fulltext_topup --out $RUN_DIR\u002Fphase0\u002F --paper-id \u003Canchor paper_id>` |\n| Phase 2 prep (deterministic; `next` emits it with the Phase 2 step) | `phase2_prepare --dir $RUN_DIR` |\n| lit_table shard assembly (deterministic; after parallel pattern tagging) | `lit_table_merge --out $RUN_DIR\u002Fphase0\u002F --shards \u003Crows1.md> \u003Crows2.md> ...` |\n| Phase 3.1 collision | `phase3_collision --idea-json \u003Ccanonical candidate> --out $RUN_DIR\u002Fphase3_collision\u002F` |\n| Phase 3.3 merger | `phase3_merge_revisions --phase2 \u003Ccanonical candidate> --revisions \u003Cp3.3-patch> --critique \u003Cp3.2-report> --out $RUN_DIR\u002Fphase3_revise\u002F` |\n| Phase 2.3 merger (same tool; only when coherence verdict=patched) | `phase3_merge_revisions --phase2 \u003Cp2.2-output> --revisions \u003Cp2.3-output> --out $RUN_DIR\u002Fphase2_coherence\u002F --out-name refined_candidate.json` |\n| Phase 4 skeleton | `phase4_skeleton --candidate \u003Cfinal_candidate-or-p2.2> --phase1 ... --phase2-select ... --phase3-critique ... [--phase3-revise ...] --phase0-dir $RUN_DIR\u002Fphase0\u002F [--collision ...] --out $RUN_DIR\u002Fphase4\u002F` |\n| Phase 4 assemble (repeat `--fill-map` to merge the derive_map on the final pass) | `phase4_assemble --skeleton $RUN_DIR\u002Fphase4\u002Fphase4_skeleton.json --fill-map $RUN_DIR\u002Fphase4\u002Ffill_map.json [--fill-map $RUN_DIR\u002Fphase4\u002Fderive_map.json] --out $RUN_DIR\u002Fphase4\u002F` |\n| Phase 4 method view (before 4.1.5; `next` bundles it with the final assemble) | `phase4_method_view --expansion $RUN_DIR\u002Fphase4\u002Fphase4_expansion.json --out $RUN_DIR\u002Fphase4\u002F` |\n| Phase 4 render | `phase4_render --expansion $RUN_DIR\u002Fphase4\u002Fphase4_expansion.json --out $RUN_DIR\u002Fphase4\u002F` |\n| Validators | `validate --phase2 ... [--phase3 ...] [--phase4 ...] [--phase4-impl ...]` |\n\nThe LLM-driven phases (1 \u002F 2.1 \u002F 2.2 \u002F 2.3 \u002F 3.2 \u002F 3.3 \u002F 4.fill \u002F 4.1.5 \u002F falsification re-audit) have no orchestrator subcommand (a `cat prompt | llm` wrapper would add fragility without determinism): read the prompt at `references\u002Fsystem-prompts\u002F\u003Cphase>.txt`, gather the inputs listed at its top, `Write` the JSON described under `Output:` to `$RUN_DIR\u002F\u003Cphase>\u002F\u003Cphase>_output.json`. Run each under the Context discipline rules — Phase 4.fill is the largest output and the most timeout-prone; never in the parent context.\n\n### Phase 0 — Literature grounding\n\nPhase 0 and 3.1 require **real external retrieval** via the bundled connector scripts (`scripts\u002Fsearch_*.py`) — never WebSearch or ad-hoc fetch (downstream phases reject unstructured output). Gate sentinel: `.lit_grounding_mode` = `real` vs `connector_failure` (halt with diagnostic; `--allow-webfallback` exists as a flagged, lower-confidence escape).\n\n**Default flow (skips one sentinel round-trip):** BEFORE invoking `phase0`, read `references\u002Fintent-recognition.md` (Map mode) yourself and produce **4** search queries (3-5 only with a stated reason) — including one ESCAPE-MECHANISM query phrased in solution vocabulary (recalls papers that already fixed the bottleneck and title themselves by their fix; problem-keyed queries miss exactly those), and apply that file's two query tests — VOCABULARY-OWNERSHIP and CONCRETE-OBJECT — to EVERY query, not only the escape one; its count rule gates a 5th query on quality per slot, not on the count. Phrase queries mechanism-first: generic \"`\u003Ctopic>` challenges\u002Foverview\u002Flandscape\" phrasings are survey magnets that dilute corpus density — the orchestrator demotes survey-titled hits to the bottom of lit_results (kept, never dropped), but each connector's cap slots are still spent on them. Also apply the OOD short-circuit (intake-routing.md triggers #1 Too-broad \u002F #2 No-anchor → route to do_not_generate instead of retrieving). Then invoke with BOTH flags:\n\n```bash\npython3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" phase0 --query \"\u003Cuser's research question>\" --queries \"q1|q2|q3|q4\" --out $RUN_DIR\u002Fphase0\u002F\n```\n\nThe rc=10 sentinel path still exists as fallback when `--queries` is omitted. The orchestrator: asserts a sane clock; runs a list of retrieval JOBS (a connector may run more than one window) and merges them SS-priority. Default jobs: arxiv 0-6mo cap 40 · **ss_recent 0-6mo cap 30** (the freshness window is covered by TWO engines — arXiv's weak lexical API AND SS's stronger recent search — because gap freshness lives here and one retriever's ranking is a single point of failure) · openalex 6-24mo cap 30 published-only · semanticscholar 6-24mo cap 30 published-only · openreview 0-6mo cap 10 in-review · oa_recent 0-6mo **cap 0 (off by default)**. Caps are **wide on purpose** — narrower ones saturated, and the Phase 0.4 partition (below) drops the extra noise before it reaches the gap corpus (design-notes). ~140 pre-dedup, ~110-130 after dedup, ~50-75 after the partition drops off_topic. Window OVERLAP is intentional now (a second engine re-covers the freshness window; SS-first dedup collapses duplicates and enriches arXiv records with externalIds) — the old non-overlapping rule is retired. All caps are overridable per job via `IDEASPARK_POOL` (see § Configuration). It also extracts URL\u002FID user-refs from the query into `phase0\u002Fuser_refs.json`; emits `.pattern_summary_pending` for the host.\n\n**Phase 0.4 relevance partition (host precision gate; DEFAULT ON, disable with `IDEASPARK_RELEVANCE_PARTITION=off`):** because retrieval now over-fetches, the host — in ONE compact pass over every record's title+abstract — labels each `core | adjacent | off_topic`, writing `phase0\u002Frelevance_partition.json` `[{paper_id, relevance, reason}]`. Use YOUR OWN model (open-ended relevance judgment — do NOT downgrade); be CONSERVATIVE — when unsure between core and adjacent pick core, hard-label off_topic ONLY for clear cross-domain false positives (broad \"memory-augmented\" matches from wireless\u002Frecommendation\u002FNLP), pure surveys, or unrelated fields (a wrong off_topic is an unrecoverable recall loss). Then `apply_partition --out phase0\u002F --partition \u003Cfile>` (deterministic) stamps `relevance` on each record, **archives off_topic to `off_topic.md` and drops it from `lit_results.json`**, and touches `.partition_applied`, and writes **`query_yield.md`** — the Phase 0.4 labels joined back onto the `from_query` provenance the connectors stamp, i.e. each query's core\u002Fadjacent\u002Foff_topic yield. That report is how the query-set design question stops being a judgement call: a query whose share is mostly off_topic is spending guaranteed round-robin slots on noise and should be dropped or rephrased next run (see the VOCABULARY-OWNERSHIP TEST in references\u002Fintent-recognition.md). Papers reachable from several queries are credited to each. This runs BEFORE tagging so the per-paper pattern-tag pass only sees survivors, and it **replaces the weak Haiku `outside_taxonomy` tag** as the precision gate. `core` alone feeds the deep-read pool; `adjacent` stays as a citeable baseline\u002Fbackbone but never consumes a fetch slot. `next` drives the sub-flow; the marker guards re-runs.\n\nRetrieval takes 3-10 min (the openreview connector alone budgets 600s) — set your Bash timeout ≥ 600s or run it in the background.\n\n**Pattern tagging (host step):** classify each `lit_results.json` paper per `references\u002Fpattern-summary-rubric.md` into 1-3 of the 15 patterns → write `lit_table.md` with columns `paper_id | year_month | venue | title | ideation pattern tags | bottleneck this paper targets | open issue \u002F unresolved gap | resolves_problem | retrieved_via`. Pure classification — it does not need the large reasoning model: route it to a cheaper\u002Ffaster model tier or a lower reasoning effort BY DEFAULT (the same tier `NOVELTY_LLM_CLASSIFY_FAST_CMD` names in § Configuration; spending the large model here is pure waste); only when no cheaper tier exists, run it isolated on the host model. Rows are per-paper independent, so for 40+ papers the tagging MAY be sharded across 2-3 parallel fast-tier sub-agents (contiguous slices; assemble with the deterministic `lit_table_merge --out $RUN_DIR\u002Fphase0\u002F --shards \u003Crow-file>...` — it validates 9-column shape, row count == paper count, and paper_id coverage against lit_results.json, replacing hand-checks) — wall-clock win, no quality delta.\n\n**Phase 0.5 coverage check (host-recall channel, host step; DEFAULT ON, disable with `IDEASPARK_COVERAGE_CHECK=off`):** after tagging, before fulltext, the host — having read the whole table — names up to 8 clearly load-bearing works the retrieval pool MISSED, writing `phase0\u002Fhost_refs_nominations.json` `[{title, id_hint?, why, source: parametric|websearch}]`. It PRIORITIZES the last ~12 months (recent\u002Ffrontier work the dated retrieval windows under-sampled — the target that keeps the diagnosed gap current); older foundational papers (canonical base policies, >12-month landmarks) are mostly Phase 1 lineage's job and should be nominated only as a small minority, and only when a load-bearing backbone\u002Fbaseline the candidate builds on or is measured against. Use YOUR OWN model here (open-ended intent judgment — do NOT downgrade to a cheap tier); WebSearch is allowed ONLY in this step and ONLY to find titles, never to fabricate a record; an empty `[]` is a valid honest output. Then `add_host_refs --out phase0\u002F --refs \u003Cnoms>` (deterministic) VERIFIES each nomination via the SS\u002FarXiv connectors (>=0.9 title match) — verified records merge into `lit_results.json` with `retrieved_via=host_recall|host_web`; unresolvable titles (likely hallucinations) are NOT admitted, they land in `host_refs_unresolved.md`; admitted ids are recorded in `host_refs.json` for provenance. Newly-admitted rows get tagged (fast tier) and `lit_table_merge`d in; `.coverage_check_done` guards against re-running. This keeps `lit_grounding_mode` honestly `real` (every record is connector-verified) while letting host knowledge repair a thin or stale pool. `next` drives the whole sub-flow. Admitted refs feed the fulltext H tier (below).\n\n**Title-named user refs:** if the user query names anchor papers by TITLE (\"based on the LoRA paper\" — anything the URL\u002FID regex can't catch), register each BEFORE `phase0_fulltext` via `add_user_ref` (entry-point table). It does a deterministic dedup-merge into `user_refs.json` — do NOT hand-edit that file (some harnesses' file-write tools refuse to overwrite a file that was never read, and a malformed edit silently drops the U fetch tier).\n\n**Phase 0+ full-text fetch — MANDATORY.** The instant `lit_table.md` lands (and after the coverage check), run `phase0_fulltext` (entry-point table) before touching Phase 1. Pool = U (user refs, never capped) + **H (host-recall refs, retrieved_via host_*, cap 6)** + T2 (published on-topic, cap 10) + T3 (arxiv recent on-topic, cap 15; also absorbs unused H\u002FT2 slots), ceiling **25** excluding U, method-first ordering, concurrent fetch (HTML path first, pymupdf PDF fallback; per-paper budget so one slow PDF can't stall the step). **Only `core`-tagged papers are eligible** (Phase 0.4 relevance stamp; U bypasses, H needs its nomination tagged core) — `adjacent` papers stay citeable at abstract level but never consume a deep-read slot. Any pooled paper that fetches to an **empty method section is backfilled** — swapped for the next-ranked core reserve that has one (one-out-one-in, ceiling held; `--backfill` reserve size, default 6). Output `fulltext_cache.json` keyed by paper_id (`{tier, intro, method, source_used, warning}`); fetch failures degrade to abstract + warning. Phase 1 **hard-gates** on this file (`error: fulltext_not_fetched`). Alongside the blob it writes a derived per-paper read view (`phase0\u002Ffulltext\u002Findex.json` + one `.md` per paper, same content, index carries tier\u002Fsource_used\u002Fwarning) — Phase 1 reads the index then only the papers it needs; the blob stays canonical and `phase1_fulltext_topup` refreshes both. Fetches hit a cross-run content cache (`~\u002F.cache\u002Fideaspark\u002Ffulltext\u002F`, successful fetches only, 30-day TTL; disable with `IDEASPARK_FETCH_CACHE=off`), so papers recurring across runs on adjacent topics cost zero network time.\n\n### Phase 1 — Bottleneck identification\n\nOne isolated LLM call. Prompt: [references\u002Fsystem-prompts\u002Fbottleneck_identify.txt](references\u002Fsystem-prompts\u002Fbottleneck_identify.txt). Inputs: user query + intake, `phase0\u002Flit_table.md`, `phase0\u002Ffulltext_cache.json` (all-failed cache → continue with `fulltext_degraded: true`, abstract-level residue confidence), `phase0\u002Flit_results.json`. Output `phase1\u002Fphase1_output.json`: `intake` (+`_inferred_fields[]` — missing fields are inferred, never asked), `bottleneck_statement` (≥2 paper_id cited inline), `closest_adjacent[]` (`{paper_id, summary_and_residue}`), `what_phase_0_did_not_address[]` (each gap ends with an inline stakes clause — practitioner costs and intellectual costs are coequal; gaps are framed as structural properties of a problem class when honestly true, with the anchor as primary instance, else declared class-of-one), `state ∈ {proceed, do_not_generate}`.\n\nRouting: **proceed** (literature-groundable, no OOD trigger) or **do_not_generate** (too-broad \u002F no-anchor OOD, \u003C5 truly-relevant papers, genuinely blank space, or benchmark\u002Fsystem construction) → write `do_not_generate.md` with concrete remedial steps — terminal.\n\n### Phase 2 — Selection + generation (ONE isolated context, TWO outputs)\n\nRun 2.1 and 2.2 back-to-back in one isolated context, writing BOTH output files (they are both generation-side; only adversarial pairs need separate calls):\n\n**2.1** — prompt [references\u002Fsystem-prompts\u002Fideate_select.txt](references\u002Fsystem-prompts\u002Fideate_select.txt); inputs `phase1_output.json`, `references\u002Fideation-patterns\u002Foverview.md` (all 15 patterns' Definition \u002F Operational signature \u002F When to apply — selection at WHAT\u002FWHEN level), `references\u002Fideation-patterns\u002Fcompanion-combos.md`, `lit_table.md`. Pick the anchor gap (type-bound to `intake.contribution_type`); commit the PATTERN COMPOSITION — ≥2 distinct patterns by default, realized preferentially as a CHAIN on the anchor (attested second pattern from companion-combos, with a named intermediate object) and\u002For via a sibling that EARNS its seat through the removal test (\"the anchor's story is incomplete without it\") — anchor-only is legitimate and common (1-3 gaps total, ≤2 siblings); a single-pattern selection requires a `composition_note` defense (validator presence-checks it; audit weighs it). Record saturation (transparency, not a filter). Output `phase2_select\u002Fphase2_select_output.json`: `selected_gaps[]` (index 0 = anchor) + `coherence_thread_type` (or `n_a` when anchor-only) + `composition_note` + `pattern_saturation` + `deferred_gaps[]`. **Retry mode:** when `$RUN_DIR\u002Fattempt_1\u002F` exists, the prompt's OPTIONAL retry input applies — the archived audit + selection become negative constraints; anchor-only is a valid retry outcome. **Cross-run dedup:** `next` scans sibling run dirs and appends a soft-negative-anchor input line (titles + signature terms of their canonical candidates, 5 most recent) so adjacent-direction runs don't silently re-invent the same mechanism family; soft by design (see ideate_select.txt's OPTIONAL cross-run input), disable with `IDEASPARK_CROSS_RUN_DEDUP=off`.\n\n**2.2** — prompt [references\u002Fsystem-prompts\u002Fideate_generate.txt](references\u002Fsystem-prompts\u002Fideate_generate.txt); inputs 2.1 output, `phase1_output.json`, `lit_results.json` (closest_adjacent entries ONLY — filter to those paper_ids before reading; the prompt forbids pulling the full dump into context), plus for each gap ONE picked sub-pattern card from `references\u002Fideation-sub-patterns\u002F` (compare `when_to_pick_this_one` + `differentiation_within_parent` via its overview.md; then read the picked card's `tactical_pattern` + Step-by-Step). Output `phase2_generate\u002Fphase2_generate_output.json` — ONE candidate, 12 flat fields: `title` \u002F `hook` \u002F `core_mechanism` \u002F `core_mechanism_reasoning` \u002F `core_mechanism_steps`; `gap_closure[]` (`{gap, main_pattern, sub_pattern: \"C## (parent pattern name)\", how_closed}`, mirrors selected_gaps one-for-one); `falsification_prediction` (single paragraph: minimal experiment + metric-with-direction + ONE named load-bearing variable + negative control on that variable predicting the DOWNSTREAM outcome metric returns to baseline — non-tautological); `compute_budget` (user-relative, GPU-day line + API-dollar line when the campaign calls paid APIs; default intake envelope = 80GB-class GPUs, ≤8 concurrent, ≈150 GPU-days \u002F 5 months, ~$10k API — overridable per user via `IDEASPARK_DEFAULT_COMPUTE`, see § Configuration); `differentiation_from_lit[]` (substantive deltas, not \"different pattern\"); `almost_prior_paper_id` + `what_step_was_missed`; `signature_terms[]` (own vocabulary — recent collision channel); `alias_terms[]` (other communities' names for the same mechanism, from parametric knowledge — multi-year alias collision channel); `composition_note` (echoed verbatim from 2.1). Reality constraints at writing time: `core_mechanism_reasoning` carries three mandatory blocks — a PREMISES ledger (load-bearing premises + domain justification; bets tagged `untested — falsification target`; WHEN the mechanism consumes sampled\u002Fobserved data, at least one OBSERVATION-MODEL premise — how are the inputs sampled, is that unbiased here — else the literal `observation-model: n\u002Fa`; WHEN the mechanism estimates any quantity, declare the ESTIMAND precisely), a NAIVE-BASELINE AUDIT (state the naive version; why doesn't it already work — branch (i) naive relies on a false premise → confronting it IS the contribution, with a STANDARD-TOOL FOLLOW-UP: if the confrontation is a textbook tool from another field, name the domain-specific structure that makes this instance unsolved or declare the contribution application-grade, (ii) naive suffices → incremental signal surfaced honestly, (iii) naive works but the field disbelieves → minimalism with evidence), then design rationale — plus every invoked dataset \u002F model-access level \u002F annotation \u002F tool must be a nameable EXISTING artifact (hard rule 3; modest self-built resources allowed with cost counted in compute_budget) and every claim stated at its defensible strength — guarantee-grade wording only with assumptions stated where it appears (hard rule 4; the coherence gate grades this, and a strong claim with honest assumptions beats a hedged weak one) — and every NUMBER carrying provenance (hard rule 5): method parameters are named symbols with a default + selection rule (a bare `>= 95%` \u002F `top 5` \u002F `every 2e3` is forbidden — an unnamed quantity cannot be swept or graded), while `falsification_prediction` states metric + direction + control and may carry a numeric bar ONLY when tagged `derived:` or `measured in \u003Cpaper_id>`; invented bars are fabrication. Artifact versions, algebraic constants, definitional settings and experiment-scale counts are not parameters and are unaffected. Both kill-switch fields (`falsification_prediction`, `compute_budget`) are locked from here on — see Phase 3 for the single audited exception.\n\n**Citation gate (deterministic, MANDATORY before Phase 3):**\n\n```bash\npython3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" validate --phase2 $RUN_DIR\u002Fphase2_generate\u002Fphase2_generate_output.json\n```\n\nAny `fail` = a `sub_pattern` citation was guessed from the parent's gist, not read from `overview.md`. Fix against `references\u002Fideation-sub-patterns\u002Foverview.md` (or regenerate 2.2 with the card open) and re-run until clean — the gate proves parent-consistency only; whether core_mechanism performs the cluster's actual tactic is Phase 3.2's `recipe_application_check`. (`next` runs this gate automatically.)\n\n**Coherence gate (2.3 — one isolated LLM call, MANDATORY after the citation gate, before the 3.2 audit; 3.1 collision may run CONCURRENTLY with it):** prompt [references\u002Fsystem-prompts\u002Fcoherence_trace.txt](references\u002Fsystem-prompts\u002Fcoherence_trace.txt); inputs: the 2.2 candidate + the 2.1 spec; MUST be a FRESH context, never the 2.1+2.2 agent (the context that wrote a logic bug rubber-stamps it). It verifies internal procedural validity by EXECUTION, not review — five trace actions: formalize the dataflow (undefined symbols, missing producers, circular deps, and UNBOUND PARAMETERS — a number the procedure reads as a parameter but that carries no name\u002Fdefault\u002Fselection rule, the form a magic constant takes to evade every symbol-keyed check; method fields only, `falsification_prediction` numbers belong to the audit), numeric dry-run on one small concrete instance (magnitude\u002Fprobability absurdities — logic bugs read fluently and only surface when computed; when a code-execution tool exists the gate WRITES AND RUNS a stdlib Python script and pastes script+output, else hand-computes marked `unexecuted`), degenerate probes (empty\u002Fk=0\u002Fties), claim→step mapping AND grading (every asserted property mapped to the step that establishes it AND graded `established` \u002F `conditional` — assumptions listed \u002F `overclaim` — wording downgraded \u002F `empirical`; statistical claims settled by an executed Monte Carlo with the measured number, theorem-shaped claims recorded as proof obligations — at best conditional; grading never rewards vagueness: all-hedged claims are themselves a weakness finding), and a NAIVE-BASELINE COMPARISON (independently construct the naive version — never the candidate's own stated one — run it on the same instance, and judge against the candidate's declared branch: `confronts_obstacle` \u002F `equivalent_to_naive` \u002F `n_a`). OBSTACLE HOLES — findings whose honest fix is a redesign, or which coincide with the obstacle the candidate declares it exists to solve (incl. `equivalent_to_naive`) — must NOT be patched around with avoidance-style repairs (abstain\u002Fclamp\u002Fskip); they go to `unrepaired[]` as blocking, verbatim. Verdict `pass` | `patched`; repairs are patch-only via the SAME merger (`--out-name refined_candidate.json`), scoped to making the written procedure sound (core_mechanism*, how_closed narrative, signature\u002Falias terms when the repair changed what the mechanism is) — novelty surface, pattern bindings, and kill-switch fields are out of scope; unfixable-without-redesign findings go to `unrepaired[]` for the audit to weigh. Single pass, never abandons. The 3.2 audit stays blind to this report's trace\u002Fverdict\u002Fpatches — with ONE exception: blocking `unrepaired[]` entries are executed evidence, so the gate ALSO writes them to `phase2_coherence\u002Fblocking_findings.json` (self-contained: verbatim step quote + script excerpt + measured numbers + reading_dependence per entry), which `next` lists as a 3.2 input; the audit must disposition each (uphold, or refute by naming a concrete modeling\u002Farithmetic flaw — `next` deterministically bounces an audit report that skipped dispositions or advanced over an upheld finding). Formalization ambiguity is controlled by the gate's dual-reading protocol (every defensible reading of an ambiguous operative term is executed; findings are tagged reading_robust vs reading_dependent). When `refined_candidate.json` exists it is the canonical candidate for every later phase (`next` wires this automatically). It validates that the algorithm survives on paper — NOT that it works empirically (falsification experiment) or is novel (audit).\n\n### Phase 3 — Quality gauntlet\n\n**3.1 collision (orchestrator, no LLM):** entry-point table. May be LAUNCHED IN PARALLEL with the 2.3 gate (on the 2.2 output — `next` emits the background launch alongside the 2.3 step): collision reads only `signature_terms[]`\u002F`alias_terms[]`, a `.collision_terms.json` sidecar records the terms actually used, and `next` re-issues collision if a coherence patch changed those terms (rare — term repairs are scoped to mechanism-changing patches). TWO retrieval channels over all 4 connectors, merged into `collision_hits.json` with a per-hit `collision_channel` tag: **signature** — the candidate's `signature_terms[]` over a 10-month window (contemporaneous scoop risk); **alias** — the candidate's `alias_terms[]` (other communities' names for the same mechanism, produced from parametric knowledge at 2.2) over a 48-month window (renamed-ancestor risk — the \"goal-conditioned success detector vs goal-image conditioned scorer\" blind spot is lexical, not temporal, so widening the signature window alone cannot catch it). Missing `signature_terms[]` → rc=11 sentinel: produce BOTH term sets per intent-recognition.md Collision mode (terms 3-7 words each — long sentences break URL encoding), edit the candidate JSON, re-invoke. Missing only `alias_terms[]` → loud warning, alias channel skipped (add the field and re-run to close the blind spot). The audit-facing pool is relevance-truncated per channel (≤120 hits\u002Fchannel by lexical overlap with the channel's own terms; zero-relevance BM25 noise dropped unconditionally; drops printed; untruncated pool preserved as `collision_hits.full.json`), so the audit can consume `collision_hits.json` in a few sequential Read chunks — no jq two-pass triage needed.\n\n**3.2 audit (one isolated LLM call):** prompt [references\u002Fsystem-prompts\u002Fcritique.txt](references\u002Fsystem-prompts\u002Fcritique.txt); inputs: candidate, 2.1 spec, `lit_table.md`, `collision_hits.json`, `references\u002Fanti-patterns.md`, `phase2_coherence\u002Fblocking_findings.json` when it exists (the 2.3 gate's executed blocking evidence — the report must disposition each entry, and advance is forbidden while one is upheld; a `refuted` disposition additionally triggers a bounded refutation re-check (`refutation_recheck.txt`, fresh call) that `next` requires before trusting the verdict — an invalid refutation counts as upheld and bounces the audit), and each cited sub-pattern card `references\u002Fideation-sub-patterns\u002F\u003CC##>.md` (strip the leading code from `sub_pattern`; typically 1-3 cards, others NOT loaded). Five corpus-anchored checks:\n\n| Check | Question |\n|---|---|\n| gap_closure_reject_check | does the candidate match a documented Reject lesson in each cited sub-pattern card (`## Tactical failure mode` + ALL `### Reject lessons` bullets)? |\n| recipe_application_check | does `core_mechanism` actually perform the cited C## cluster's `## Tactical pattern` signature move, or only the parent's generic idea (`bypassed` — the leading cause of incremental output)? |\n| anti_pattern_check | if the SET of `gap_closure[].main_pattern` matches a reject-favored composition, is the required mitigation substantively delivered (artifact, not keyword)? |\n| paper_pointed_threat | most specific subsuming\u002Fcompeting paper in `lit_table ∪ collision_hits` (both channels; alias-channel threats are NOT discounted for age); `no_threat_found` is valid — fabricating a generic threat is forbidden. Side output `parametric_family_concern`: a named un-retrieved mechanism family from parametric knowledge (family name + query vocabulary, never specific paper cites) — soft signal only, flows to Phase 4 reviewer_concerns as a \"scoop-check X first\" flag |\n| falsification_structure_check | does `falsification_prediction` name the minimal experiment, the outcome metric + direction, ONE load-bearing variable, and a NON-tautological negative control targeting the downstream metric — and is every numeric outcome bar sourced (`numeric_bar_provenance` ∈ none \u002F derived \u002F measured \u002F asserted \u002F invented — cost bars count, qualitative magnitude claims and design\u002Fscale\u002Fconditioning numbers do not; `invented` is a deficiency repaired by STRIKING the bar, which the contract states is a fabrication repair rather than a claim weakening, while `asserted` — a derivation claimed but left uncheckable — only routes to borderline, so a judgment call never forces a kill-switch edit)? |\n\nVerdict is two-layer. **Hard floor** (LLM cannot override) → `abandon`: triggered Reject lesson \u002F unmitigatable anti-pattern \u002F exact-mechanism collision. **Soft judgment** otherwise → `advance` (only trivial borderlines; concerns surface in Phase 4's reviewer_concerns) or `revise` with concrete `revision_targets[]` (scopes: `tactical` \u002F `sub_pattern` \u002F `falsification`). `verdict_rationale` must cite specific check findings. The audit judges only — it never modifies the candidate.\n\n**Routing on verdict:**\n\n- **advance** → Phase 4 reads the 2.2 candidate directly.\n- **revise** → **3.3** (one isolated LLM call, prompt [references\u002Fsystem-prompts\u002Frevise.txt](references\u002Fsystem-prompts\u002Frevise.txt)): reads candidate + 2.1 spec + the revision brief (`phase3_revise_brief` — `next` materializes `revise_brief.json`, the audit minus the bulky reject-lesson quotations; full report stays on disk for lesson-specific lookups); emits patch-only `applied_revisions[]` — one entry per revision_target, ops `replace` \u002F `append_sentence` \u002F `append_items` \u002F `swap_sub_pattern` \u002F `rewrite_falsification`, never echoes the candidate, never re-judges the verdict. Then run the **merger** (entry-point table, WITH `--critique`) → writes `phase3_revise\u002Ffinal_candidate.json` + back-injects it into the patch file. Kill-switch fields are merger-refused with ONE audited exception: a `scope=falsification` target from `falsification_structure_check` is applied via the dedicated `rewrite_falsification` op (authorization verified against the audit report via `--critique`; same experiment\u002Fmetric\u002Fclaim, structure repaired; max one per run). When the merger prints `falsification_rewritten`, run the **falsification re-audit** (self-contained prompt [references\u002Fsystem-prompts\u002Ffalsification_reaudit.txt](references\u002Fsystem-prompts\u002Ffalsification_reaudit.txt), reading the `phase3_falsification_view` slice of `final_candidate.json` → `phase3_critique\u002Ffalsification_reaudit.json`): `advance` → Phase 4; `abandon` → `phase_3_failed.md`. `compute_budget` has no revision route under any scope. No `composition` scope — gap-level changes route through the abandon-retry below, never through patches.\n- **abandon** → **information-gain retry rule** (ONE rule, no death-type taxonomy; the one-shot guarantee bars asking the user, not internal regeneration). Every failed attempt's audit is reduced to a LESSON SET — upheld executed blocking findings (mechanism-level positive directives), unaddressable subsuming papers (mechanism-family negative anchors), triggered reject\u002Fanti-pattern\u002Frecipe lessons (generation-quality constraints). A retry must carry NEW lessons the previous generation did not have: the first abandon always retries (generation ran with zero audit information); a later abandon retries only if its lesson set adds entries beyond the union of all archived attempts' lessons, with the new lessons injected as directives. A REPEATED unaddressable-subsumption lesson across attempts binds at the FRAMING level instead → one bottleneck re-diagnosis (Phase 1 retry mode; `do_not_generate` remains a legitimate exit), whose new framing gets exactly ONE candidate attempt. Termination: no new lessons, or the candidate-cycle cap (3 per framing; worst case 4 gauntlet cycles per run). `next` computes all of this deterministically from the archived critique reports. On the first abandon, archive the attempt and regenerate —\n\n  ```bash\n  mkdir -p \"$RUN_DIR\u002Fattempt_1\" && \\\n  mv \"$RUN_DIR\u002Fphase2_select\" \"$RUN_DIR\u002Fphase2_generate\" \"$RUN_DIR\u002Fphase2_coherence\" \"$RUN_DIR\u002Fphase3_collision\" \\\n     \"$RUN_DIR\u002Fphase3_critique\" \"$RUN_DIR\u002Fphase3_revise\" \"$RUN_DIR\u002Fattempt_1\u002F\" 2>\u002Fdev\u002Fnull; \\\n  touch \"$RUN_DIR\u002F.retry_used\"\n  ```\n\n  then re-run Phase 2 in retry mode (archived audit + selection = negative constraints; blocking obstacle findings = POSITIVE directives the new mechanism must confront), citation gate, 3.1, 3.2. Phase 0\u002F1 artifacts are reused as-is.\n\n  **Later `abandon`s → the same rule, deterministically** (`next` compares this attempt's lesson set against the union over `attempt_N\u002F` archives): new mechanism-level lessons → directed retry to the next `attempt_N` (all archived audits + selections ride along as constraints; the fresh lessons are named in the emit); repeated subsumption lesson → bottleneck re-diagnosis (archive incl. `phase1\u002F`, touch `.bottleneck_retry_used`; the re-diagnosed framing gets ONE attempt); no new lessons \u002F cap reached \u002F post-bottleneck failure → write `phase_3_failed.md` citing EVERY attempt's verdict_rationale + triggering checks + user-side options — terminal.\n\n### Phase 4 — Expansion + packaging\n\nSix steps in order (`next` emits each with the correct flags for the advance vs revise path — on the revise path `--candidate` is `final_candidate.json` and `--phase3-revise` is passed; on advance it's the CANONICAL candidate (refined_candidate.json when 2.3 patched, else the 2.2 output) and the flag is omitted):\n\n1. **skeleton** (orchestrator): populates every mechanical field — kill-switch echoes (byte-identical from the candidate), `differentiation_from_lit` venue_years, `almost_prior_venue_year`, `why_prior_stopped[].paper_id\u002Fvenue_year`, `domain_landscape` (pattern_distribution + candidate_uses), `literature_breakdown`, `reviewer_concerns_and_responses[].attack\u002Fseverity\u002Ffields_changed_to_address` (lifted from audit + patch), `feasibility_validation.compute` (bucketed against `intake.compute`) — and marks every prose field `\u003CTODO[path]: hint>`.\n2. **fill** (one isolated LLM call, prompt [references\u002Fsystem-prompts\u002Fexpand.txt](references\u002Fsystem-prompts\u002Fexpand.txt)): author the TECHNICAL TODO paths as one flat `{path: value}` map → `phase4\u002Ffill_map.json`. The derive-owned paths (`title_zh` + all `plain_*`) are explicitly EXCLUDED — the derive step owns them. No calendar projections; no experiment matrix \u002F ablation plan \u002F baseline table — the skill produces IDEA + falsifiability + feasibility judgment, not experimental engineering.\n3. **assemble (partial) → derive → assemble (final)**: the orchestrator assembles the technical map first (`phase4_expansion.json`, derive-owned placeholders remain — the WARN is expected); then **derive** (one isolated LLM call, prompt [references\u002Fsystem-prompts\u002Fderive_plain.txt](references\u002Fsystem-prompts\u002Fderive_plain.txt)) mechanically rewrites the finished technical fields into the plain register (`title_zh` + `plain_*` → `phase4\u002Fderive_map.json`) — register transformation + translation with NO new facts, so it runs on the CLASSIFY_FAST tier by default (fallback ladder: `NOVELTY_LLM_CLASSIFY_FAST_CMD` → host cheap model → host model isolated; even the last rung keeps it cheap since the input is only the finished prose); then the final assemble merges both maps (`phase4_assemble --fill-map \u003Ctech> --fill-map \u003Cderive>` — overlapping paths are a hard error) and extracts `phase4\u002Fmethod_view.json` (`phase4_method_view` — the method-only slice the 4.1.5 audit reads: method_flow + plain steps + key_equations + claims). The assembler validates every path resolves to a real TODO and refuses kill-switch roots per map.\n4. **implementability audit (4.1.5, one isolated LLM call, default on):** prompt [references\u002Fsystem-prompts\u002Fimplementability_audit.txt](references\u002Fsystem-prompts\u002Fimplementability_audit.txt) — fresh skeptical-engineer persona (separate from the 4.fill author) reads `method_view.json` (fallback: the full expansion) and rewrites each method step into a buildable spec: `enriched_steps[]` (one per step, same ids\u002Forder, `what_changes` + `what_to_do_en` + `what_to_do_zh`) + `underspecified_points[]` (`{step_id, hole, fill, severity: filled|open}` — unfillable holes stay honest as `open`). Compute-agnostic by design (resource feasibility is 4.1's job); never adds\u002Fremoves\u002Frenames steps; never carries kill-switch fields. Output `phase4\u002Fphase4_implementability.json`.\n5. **validate + render:** run the validators (below), then `phase4_render` — templating only, no model call; auto-detects the sibling implementability file and merges `enriched_steps` by step_id into the rendered Method (deterministic; no-op when absent). Writes `idea.std.zh.md` (plain Chinese, domain-newcomer register) + `idea.std.en.md` (plain English) + `idea.detail.en.md` (rigorous English — the novelty + validity defense) + `idea.std.{en,zh}.tex` (auto-compiled to PDF when xelatex\u002Ftectonic is on PATH; skipped with a hint otherwise).\n\n**Final response:** read all three markdown cards and return them inline under headings 中文版 \u002F English \u002F Reviewer version. Other phase outputs stay on disk for inspection, not echoed.\n\n## Validators\n\n```bash\n# advance path: --phase3 = phase3_critique_output.json; revise path: --phase3 = phase3_revise_output.json\n# --phase2 = the CANONICAL candidate (refined_candidate.json when 2.3 patched, else the 2.2 output)\npython3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" validate \\\n  --phase2 \u003Ccanonical candidate file> \\\n  --phase3 \u003Csee comment> \\\n  --phase4 $RUN_DIR\u002Fphase4\u002Fphase4_expansion.json \\\n  --phase4-impl $RUN_DIR\u002Fphase4\u002Fphase4_implementability.json   # optional; enables implementability checks\n```\n\n| Validator | Check | Severity |\n|---|---|---|\n| **subpattern_citation_consistency** | each `gap_closure[].sub_pattern` resolves to a real C## cluster in overview.md whose true parent == the cited `main_pattern` and whose parenthetical == that cluster's parent display name. Primary use: the Phase 2.2 citation gate; re-runs harmlessly here. | fail (hard) |\n| **kill_switch_integrity** | `falsification_prediction` + `compute_budget` byte-identical along Phase 2.2 → [3.3 final_candidate →] 4. After an audited falsification rewrite (`falsification_rewritten` marker + matching applied `rewrite_falsification` entry — disagreement fails), the anchor for `falsification_prediction` re-bases at the 3.3 final_candidate (3.3 → 4 must match); `compute_budget` stays full-chain always. | fail (hard) |\n| **expansion_completeness** | motivation (≥2 `why_prior_stopped`), `method_flow.steps[]` (each with `linked_component` + `linked_falsification`), `feasibility_validation` (5 sub-verdicts + `overall`), non-empty `abstract_draft` + `core_claim` + `sub_claims[]` — missing sections would render as silent blanks. | fail (hard) |\n| **implementability_completeness** | `enriched_steps[]` one-per-step (same ids\u002Forder, EN+ZH), `underspecified_points[]` present (`[]` allowed), NO kill-switch field in the file. | fail (hard) |\n| **implementability_readability** | std-register fields: no `占位`\u002F`placeholder` leak, no bare English jargon dropped into Chinese prose. | warn |\n\n**Retry budget on `fail` (cap = 2).** Fix only the named contract, re-validate; still failing after the 2nd retry → stop revising, render as-is, and append a short note listing the failing validators (a flagged-imperfect card beats a watchdog-killed run with zero output). Never \"fix\" `kill_switch_integrity` or `subpattern_citation_consistency` by editing a guarded field — surface them as the headline caveat instead.\n\n## Configuration\n\nBy default every model-driven phase runs on the host LLM. To route phases to a different backend (Gemini, open-weights, custom):\n\n- `NOVELTY_LLM_REASONING_LARGE_CMD` — Phase 1 \u002F 2.1 \u002F 2.2 \u002F 3.2 \u002F 3.3 \u002F 4.fill (needs ≥ 200k context, JSON output)\n- `NOVELTY_LLM_CLASSIFY_FAST_CMD` — Phase 0 intent extraction + per-paper pattern tagging (smaller context, JSON output)\n\n**Which tier a step tolerates — the split is by TASK KIND, not by cost** (both directions measured; see design-notes):\n\n- **Mechanical classification against a written rubric** — per-item independent, \"which of these N named categories\", criteria already in the rubric. *Pattern tagging is the whole of this class.* **Cheapest tier is correct here**, and shardable across parallel sub-agents.\n- **Open-ended judgement with no enumerated answer set** — \"is this paper on-topic\", \"what load-bearing work is MISSING\", \"is this candidate subsumed\". *Phase 0.4 partition, Phase 0.5 coverage check, and every gauntlet phase are this class.* **Do NOT downgrade these**, which is why their emits say so explicitly — a cheap tier's over-strict drop is an unrecoverable recall loss, while an over-inclusion costs one row the next stage can still catch.\n\nWith no separate cheap model, lower the REASONING EFFORT for the mechanical class rather than reaching for the largest configuration everywhere; reserve full effort for the open-ended class.\n\nEach is a CLI taking a stdin prompt (`\u003C\u003CSYSTEM>>...\u003C\u003CUSER>>...`) and emitting JSON on stdout. When unset (the default when running inside any host LLM), the orchestrator emits sentinel files and the host LLM handles those steps natively.\n\n- `IDEASPARK_POOL` — per-job Phase 0 retrieval caps, `job=N,...` (jobs: arxiv, ss_recent, oa_recent, openalex, semanticscholar, openreview). A job at 0 is skipped (this is how oa_recent stays off; set `oa_recent=6` for journal-heavy fields). Malformed values fail-fast.\n- `IDEASPARK_RETRIEVAL_CACHE` — cross-run Phase 0 retrieval cache (default `~\u002F.cache\u002Fideaspark\u002Fretrieval`, 24h TTL via `IDEASPARK_RETRIEVAL_CACHE_TTL_S`); set to `off` to bypass, or to a path to relocate. Keyed on connector + queries + window + caps + `--as-of`, so any real change to the request misses; successful non-empty results only. Exists because re-running Phase 0 otherwise re-hammers every API — three runs in ~15 min rate-limited arXiv and Semantic Scholar into returning zero records.\n- `IDEASPARK_RETRY_PAUSE_S` — pause before the single bounded per-job retry (default 45s). A failed job also hands its cap to the surviving job covering the same window (≤2x).\n- `IDEASPARK_RELEVANCE_PARTITION` — set to `off` to disable the Phase 0.4 host relevance-partition (default: on). When off, retrieval's wide net flows straight to tagging with no core\u002Fadjacent\u002Foff_topic gate (the old `outside_taxonomy`-only behavior); deep-read then falls back to on-topic (non-`outside_taxonomy`) rather than `core`-gated.\n- `IDEASPARK_COVERAGE_CHECK` — set to `off` to disable the Phase 0.5 host-recall coverage check (default: on).\n- `IDEASPARK_CROSS_RUN_DEDUP` — set to `off` to disable the sibling-run soft-negative-anchor scan in the Phase 2 emit (default: on).\n- `IDEASPARK_DEFAULT_COMPUTE` — optional standing compute profile for the user (free text, e.g. `\"8×H100 node, ~300 GPU-days, $50k API budget\"`). Put it in `.env` (auto-loaded); `next` surfaces it to Phase 1 as intake context. Precedence: compute stated in the user's query > this value > the factory default (80GB-class GPUs, ≤8 concurrent, ≈150 GPU-days \u002F 5 months, ~$10k API campaign). Use this instead of editing the factory default — the default is the feasibility yardstick for users who state nothing.\n",{"data":42,"body":43},{"name":4,"description":6},{"type":44,"children":45},"root",[46,55,61,113,120,140,146,178,184,195,381,410,414,428,441,513,562,572,642,676,686,698,708,743,750,806,856,862,875,885,949,954,1023,1041,1067,1070,1076,1086,1092,1446,1489,1495,1547,1588,1672,1729,1872,1877,1933,2050,2084,2229,2235,2341,2366,2372,2377,2527,2796,2804,2853,2905,3079,3085,3202,3282,3469,3548,3556,4112,4118,4153,4505,4515,4520,4695,4986,5016,5022,5027,5050,5060,5109,5114,5127,5315],{"type":47,"tag":48,"props":49,"children":51},"element","h1",{"id":50},"idea-spark-skill",[52],{"type":53,"value":54},"text","Idea Spark Skill",{"type":47,"tag":56,"props":57,"children":58},"p",{},[59],{"type":53,"value":60},"Convert an under-specified research direction into ONE reviewer-defensible Oral-level research proposal — grounded in 1947 ICLR\u002FICML\u002FNeurIPS papers (2021-2025) — via a 5-phase workflow: retrieve recent literature, diagnose the bottleneck, select + generate a candidate using corpus-derived ideation pattern cards, run it through a quality gauntlet, expand into an idea card.",{"type":47,"tag":56,"props":62,"children":63},{},[64,66,72,74,79,81,88,90,96,98,104,106,111],{"type":53,"value":65},"This file is the operational runbook. Design rationale (the 7 design principles, why each contract is shaped this way, removed-check history) lives in ",{"type":47,"tag":67,"props":68,"children":70},"a",{"href":69},"references\u002Fdesign-notes.md",[71],{"type":53,"value":69},{"type":53,"value":73}," — read it only when modifying or evaluating the skill, never needed to run it. When MODIFYING the skill, also replay the cross-shape regression set in ",{"type":47,"tag":67,"props":75,"children":77},{"href":76},"references\u002Fregression-directions.md",[78],{"type":53,"value":76},{"type":53,"value":80}," (deterministic subset: ",{"type":47,"tag":82,"props":83,"children":85},"code",{"className":84},[],[86],{"type":53,"value":87},"python3 \"$SKILL_DIR\u002Fscripts\u002Fregression_check.py\" \u003Crun_dir>",{"type":53,"value":89},"; routing\u002Fmerger branch fixtures — including every guard\u002Fretry branch that real runs rarely exercise: ",{"type":47,"tag":82,"props":91,"children":93},{"className":92},[],[94],{"type":53,"value":95},"python3 \"$SKILL_DIR\u002Fscripts\u002Fselftest_routing.py\"",{"type":53,"value":97},"; unit fixtures for the helpers every phase sits on — the multi-query round-robin and the tolerant LLM-JSON loader: ",{"type":47,"tag":82,"props":99,"children":101},{"className":100},[],[102],{"type":53,"value":103},"python3 \"$SKILL_DIR\u002Fscripts\u002Fselftest_units.py\"",{"type":53,"value":105},"). First-time installation lives in ",{"type":47,"tag":67,"props":107,"children":109},{"href":108},"references\u002Fsetup.md",[110],{"type":53,"value":108},{"type":53,"value":112},".",{"type":47,"tag":114,"props":115,"children":117},"h2",{"id":116},"when-to-use",[118],{"type":53,"value":119},"When to use",{"type":47,"tag":121,"props":122,"children":123},"ul",{},[124,130,135],{"type":47,"tag":125,"props":126,"children":127},"li",{},[128],{"type":53,"value":129},"\"Give me a research idea in {area} I could pursue.\" \u002F \"What's the most impactful next step in this direction?\"",{"type":47,"tag":125,"props":131,"children":132},{},[133],{"type":53,"value":134},"\"Help me sharpen this vague direction into an Oral-level proposal.\"",{"type":47,"tag":125,"props":136,"children":137},{},[138],{"type":53,"value":139},"\"What's the bottleneck of this problem?\" \u002F \"Run a novelty audit on this idea.\"",{"type":47,"tag":114,"props":141,"children":143},{"id":142},"when-not-to-use",[144],{"type":53,"value":145},"When NOT to use",{"type":47,"tag":121,"props":147,"children":148},{},[149,154,159],{"type":47,"tag":125,"props":150,"children":151},{},[152],{"type":53,"value":153},"Code review, debugging, refactoring. Summarizing one paper. Cross-decade survey writing.",{"type":47,"tag":125,"props":155,"children":156},{},[157],{"type":53,"value":158},"Free-association brainstorming with no research context. Engineering integration tasks (\"ship this feature in our system\").",{"type":47,"tag":125,"props":160,"children":161},{},[162,164,170,172,177],{"type":53,"value":163},"Pure benchmark \u002F dataset construction work — the 15-pattern vocabulary handles benchmark ",{"type":47,"tag":165,"props":166,"children":167},"em",{},[168],{"type":53,"value":169},"audit",{"type":53,"value":171}," (controlled_diagnostic_design) but not benchmark ",{"type":47,"tag":165,"props":173,"children":174},{},[175],{"type":53,"value":176},"construction",{"type":53,"value":112},{"type":47,"tag":114,"props":179,"children":181},{"id":180},"setup-first-use-only",[182],{"type":53,"value":183},"Setup (first use only)",{"type":47,"tag":56,"props":185,"children":186},{},[187,189,193],{"type":53,"value":188},"Follow ",{"type":47,"tag":67,"props":190,"children":191},{"href":108},[192],{"type":53,"value":108},{"type":53,"value":194},". Quick version — set two shell variables, install deps, verify:",{"type":47,"tag":196,"props":197,"children":202},"pre",{"className":198,"code":199,"language":200,"meta":201,"style":201},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SKILL_DIR=\u003Cpath to this folder>                  # e.g. ~\u002F.claude\u002Fskills\u002Fidea-spark (Claude Code), ~\u002F.codex\u002Fskills\u002Fidea_spark (Codex CLI), or any clone location\nRUN_DIR=\"$PWD\u002Fideaspark_run\u002F\u003Ctopic-slug>\"   # convention below; any absolute dir works. No mkdir needed — every phase mkdir -p's its own --out, and `next` treats a missing dir as a fresh run\npython3 -m pip install feedparser openreview-py beautifulsoup4 pymupdf\npython3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" check_connectors   # from the SAME shell you'll run phases from\n","bash","",[203],{"type":47,"tag":82,"props":204,"children":205},{"__ignoreMap":201},[206,262,300,344],{"type":47,"tag":207,"props":208,"children":211},"span",{"class":209,"line":210},"line",1,[212,218,224,230,236,241,246,251,256],{"type":47,"tag":207,"props":213,"children":215},{"style":214},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[216],{"type":53,"value":217},"SKILL_DIR",{"type":47,"tag":207,"props":219,"children":221},{"style":220},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[222],{"type":53,"value":223},"=\u003C",{"type":47,"tag":207,"props":225,"children":227},{"style":226},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[228],{"type":53,"value":229},"path",{"type":47,"tag":207,"props":231,"children":233},{"style":232},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[234],{"type":53,"value":235}," to",{"type":47,"tag":207,"props":237,"children":238},{"style":226},[239],{"type":53,"value":240}," this",{"type":47,"tag":207,"props":242,"children":243},{"style":226},[244],{"type":53,"value":245}," folde",{"type":47,"tag":207,"props":247,"children":248},{"style":214},[249],{"type":53,"value":250},"r",{"type":47,"tag":207,"props":252,"children":253},{"style":220},[254],{"type":53,"value":255},">",{"type":47,"tag":207,"props":257,"children":259},{"style":258},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[260],{"type":53,"value":261},"                  # e.g. ~\u002F.claude\u002Fskills\u002Fidea-spark (Claude Code), ~\u002F.codex\u002Fskills\u002Fidea_spark (Codex CLI), or any clone location\n",{"type":47,"tag":207,"props":263,"children":265},{"class":209,"line":264},2,[266,271,276,281,286,291,295],{"type":47,"tag":207,"props":267,"children":268},{"style":214},[269],{"type":53,"value":270},"RUN_DIR",{"type":47,"tag":207,"props":272,"children":273},{"style":220},[274],{"type":53,"value":275},"=",{"type":47,"tag":207,"props":277,"children":278},{"style":220},[279],{"type":53,"value":280},"\"",{"type":47,"tag":207,"props":282,"children":283},{"style":214},[284],{"type":53,"value":285},"$PWD",{"type":47,"tag":207,"props":287,"children":288},{"style":226},[289],{"type":53,"value":290},"\u002Fideaspark_run\u002F\u003Ctopic-slug>",{"type":47,"tag":207,"props":292,"children":293},{"style":220},[294],{"type":53,"value":280},{"type":47,"tag":207,"props":296,"children":297},{"style":258},[298],{"type":53,"value":299},"   # convention below; any absolute dir works. No mkdir needed — every phase mkdir -p's its own --out, and `next` treats a missing dir as a fresh run\n",{"type":47,"tag":207,"props":301,"children":303},{"class":209,"line":302},3,[304,309,314,319,324,329,334,339],{"type":47,"tag":207,"props":305,"children":306},{"style":232},[307],{"type":53,"value":308},"python3",{"type":47,"tag":207,"props":310,"children":311},{"style":226},[312],{"type":53,"value":313}," -m",{"type":47,"tag":207,"props":315,"children":316},{"style":226},[317],{"type":53,"value":318}," pip",{"type":47,"tag":207,"props":320,"children":321},{"style":226},[322],{"type":53,"value":323}," install",{"type":47,"tag":207,"props":325,"children":326},{"style":226},[327],{"type":53,"value":328}," feedparser",{"type":47,"tag":207,"props":330,"children":331},{"style":226},[332],{"type":53,"value":333}," openreview-py",{"type":47,"tag":207,"props":335,"children":336},{"style":226},[337],{"type":53,"value":338}," beautifulsoup4",{"type":47,"tag":207,"props":340,"children":341},{"style":226},[342],{"type":53,"value":343}," pymupdf\n",{"type":47,"tag":207,"props":345,"children":347},{"class":209,"line":346},4,[348,352,357,362,367,371,376],{"type":47,"tag":207,"props":349,"children":350},{"style":232},[351],{"type":53,"value":308},{"type":47,"tag":207,"props":353,"children":354},{"style":220},[355],{"type":53,"value":356}," \"",{"type":47,"tag":207,"props":358,"children":359},{"style":214},[360],{"type":53,"value":361},"$SKILL_DIR",{"type":47,"tag":207,"props":363,"children":364},{"style":226},[365],{"type":53,"value":366},"\u002Fscripts\u002Frun.py",{"type":47,"tag":207,"props":368,"children":369},{"style":220},[370],{"type":53,"value":280},{"type":47,"tag":207,"props":372,"children":373},{"style":226},[374],{"type":53,"value":375}," check_connectors",{"type":47,"tag":207,"props":377,"children":378},{"style":258},[379],{"type":53,"value":380},"   # from the SAME shell you'll run phases from\n",{"type":47,"tag":56,"props":382,"children":383},{},[384,386,392,394,400,402,408],{"type":53,"value":385},"Credentials go in ",{"type":47,"tag":82,"props":387,"children":389},{"className":388},[],[390],{"type":53,"value":391},".env",{"type":53,"value":393}," (OpenReview user\u002Fpass + Semantic Scholar key — see setup.md); the orchestrator auto-loads it. Optional: ",{"type":47,"tag":82,"props":395,"children":397},{"className":396},[],[398],{"type":53,"value":399},"xelatex",{"type":53,"value":401},"\u002F",{"type":47,"tag":82,"props":403,"children":405},{"className":404},[],[406],{"type":53,"value":407},"tectonic",{"type":53,"value":409}," for PDF cards.",{"type":47,"tag":411,"props":412,"children":413},"hr",{},[],{"type":47,"tag":114,"props":415,"children":417},{"id":416},"how-to-run-the-next-loop",[418,420,426],{"type":53,"value":419},"How to run: the ",{"type":47,"tag":82,"props":421,"children":423},{"className":422},[],[424],{"type":53,"value":425},"next",{"type":53,"value":427}," loop",{"type":47,"tag":56,"props":429,"children":430},{},[431,433,439],{"type":53,"value":432},"The canonical way to drive a run is the ",{"type":47,"tag":434,"props":435,"children":436},"strong",{},[437],{"type":53,"value":438},"run-state navigator",{"type":53,"value":440},":",{"type":47,"tag":196,"props":442,"children":444},{"className":198,"code":443,"language":200,"meta":201,"style":201},"python3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" next --dir \"$RUN_DIR\" --query \"\u003Cuser's research question>\"\n",[445],{"type":47,"tag":82,"props":446,"children":447},{"__ignoreMap":201},[448],{"type":47,"tag":207,"props":449,"children":450},{"class":209,"line":210},[451,455,459,463,467,471,476,481,485,490,494,499,503,508],{"type":47,"tag":207,"props":452,"children":453},{"style":232},[454],{"type":53,"value":308},{"type":47,"tag":207,"props":456,"children":457},{"style":220},[458],{"type":53,"value":356},{"type":47,"tag":207,"props":460,"children":461},{"style":214},[462],{"type":53,"value":361},{"type":47,"tag":207,"props":464,"children":465},{"style":226},[466],{"type":53,"value":366},{"type":47,"tag":207,"props":468,"children":469},{"style":220},[470],{"type":53,"value":280},{"type":47,"tag":207,"props":472,"children":473},{"style":226},[474],{"type":53,"value":475}," next",{"type":47,"tag":207,"props":477,"children":478},{"style":226},[479],{"type":53,"value":480}," --dir",{"type":47,"tag":207,"props":482,"children":483},{"style":220},[484],{"type":53,"value":356},{"type":47,"tag":207,"props":486,"children":487},{"style":214},[488],{"type":53,"value":489},"$RUN_DIR",{"type":47,"tag":207,"props":491,"children":492},{"style":220},[493],{"type":53,"value":280},{"type":47,"tag":207,"props":495,"children":496},{"style":226},[497],{"type":53,"value":498}," --query",{"type":47,"tag":207,"props":500,"children":501},{"style":220},[502],{"type":53,"value":356},{"type":47,"tag":207,"props":504,"children":505},{"style":226},[506],{"type":53,"value":507},"\u003Cuser's research question>",{"type":47,"tag":207,"props":509,"children":510},{"style":220},[511],{"type":53,"value":512},"\"\n",{"type":47,"tag":56,"props":514,"children":515},{},[516,521,523,529,531,537,539,545,547,553,555,560],{"type":47,"tag":434,"props":517,"children":518},{},[519],{"type":53,"value":520},"Run-dir convention (one run = one directory, named by the host BEFORE the first command):",{"type":53,"value":522}," ",{"type":47,"tag":82,"props":524,"children":526},{"className":525},[],[527],{"type":53,"value":528},"$PWD\u002Fideaspark_run\u002F\u003Ctopic-slug>",{"type":53,"value":530}," — a short kebab-case slug distilled from the user's direction (e.g. ",{"type":47,"tag":82,"props":532,"children":534},{"className":533},[],[535],{"type":53,"value":536},"ideaspark_run\u002Fdiffusion-watermark",{"type":53,"value":538},"); if the slug is taken, append ",{"type":47,"tag":82,"props":540,"children":542},{"className":541},[],[543],{"type":53,"value":544},"_2",{"type":53,"value":546},", not a timestamp. NEVER reuse a directory that already contains a ",{"type":47,"tag":82,"props":548,"children":550},{"className":549},[],[551],{"type":53,"value":552},"phase0\u002F",{"type":53,"value":554}," — every phase writes into ",{"type":47,"tag":82,"props":556,"children":558},{"className":557},[],[559],{"type":53,"value":489},{"type":53,"value":561}," and would clobber the prior run. The skill itself never names the dir (any absolute path works); this convention exists so runs from different harnesses land in one predictable place instead of each agent improvising.",{"type":47,"tag":56,"props":563,"children":564},{},[565,570],{"type":47,"tag":82,"props":566,"children":568},{"className":567},[],[569],{"type":53,"value":425},{"type":53,"value":571}," inspects the artifacts already on disk and prints EXACTLY one next step — either a Bash command to run verbatim, or an LLM sub-agent spec (system-prompt path + input file paths + output path + the routing signal to report back). It is read-only and idempotent (safe to re-run anytime, including to resume an interrupted run) — including on a run dir that does not exist yet, which it reports as a fresh run and answers with the Phase 0 step rather than an error. You never need to create the directory before calling it. The host loop is:",{"type":47,"tag":573,"props":574,"children":575},"ol",{},[576,587,607],{"type":47,"tag":125,"props":577,"children":578},{},[579,581,586],{"type":53,"value":580},"Run ",{"type":47,"tag":82,"props":582,"children":584},{"className":583},[],[585],{"type":53,"value":425},{"type":53,"value":112},{"type":47,"tag":125,"props":588,"children":589},{},[590,592,597,599,605],{"type":53,"value":591},"Do what it says (",{"type":47,"tag":82,"props":593,"children":595},{"className":594},[],[596],{"type":53,"value":200},{"type":53,"value":598}," → run the command; ",{"type":47,"tag":82,"props":600,"children":602},{"className":601},[],[603],{"type":53,"value":604},"llm_subagent",{"type":53,"value":606}," → execute in an ISOLATED context per the Context discipline rules below).",{"type":47,"tag":125,"props":608,"children":609},{},[610,611,616,618,624,626,632,634,640],{"type":53,"value":580},{"type":47,"tag":82,"props":612,"children":614},{"className":613},[],[615],{"type":53,"value":425},{"type":53,"value":617}," again. Repeat until it reports a terminal state (",{"type":47,"tag":82,"props":619,"children":621},{"className":620},[],[622],{"type":53,"value":623},"DONE",{"type":53,"value":625},", ",{"type":47,"tag":82,"props":627,"children":629},{"className":628},[],[630],{"type":53,"value":631},"do_not_generate",{"type":53,"value":633},", or ",{"type":47,"tag":82,"props":635,"children":637},{"className":636},[],[638],{"type":53,"value":639},"phase_3_failed",{"type":53,"value":641},").",{"type":47,"tag":56,"props":643,"children":644},{},[645,650,652,658,660,666,668,674],{"type":47,"tag":434,"props":646,"children":647},{},[648],{"type":53,"value":649},"Consume every emit WHOLE — never grep\u002Ffilter\u002Ftruncate the block.",{"type":53,"value":651}," INPUT lists span unlabeled continuation lines; a label-keyed grep (",{"type":47,"tag":82,"props":653,"children":655},{"className":654},[],[656],{"type":53,"value":657},"grep -E \"STEP|INPUT|...\"",{"type":53,"value":659},") silently drops them. This exact failure occurred in a live run: the navigator listed the coherence gate's blocking findings as an audit input, the host's grep dropped the line, and the audit issued a false ",{"type":47,"tag":82,"props":661,"children":663},{"className":662},[],[664],{"type":53,"value":665},"advance",{"type":53,"value":667}," without ever seeing the executed evidence. If the emit must be captured into a bounded tool result, ",{"type":47,"tag":82,"props":669,"children":671},{"className":670},[],[672],{"type":53,"value":673},"head -c 4000",{"type":53,"value":675}," the WHOLE block — never filter by line labels.",{"type":47,"tag":56,"props":677,"children":678},{},[679,684],{"type":47,"tag":82,"props":680,"children":682},{"className":681},[],[683],{"type":53,"value":425},{"type":53,"value":685}," encodes the full phase graph — the mandatory full-text gate, the citation gate, the abandon-retry branch, the falsification re-audit branch, and the correct Phase 4 flags per path — so you do not need to memorize the reference tables below; they exist for deviation and debugging.",{"type":47,"tag":56,"props":687,"children":688},{},[689,691,696],{"type":53,"value":690},"If your host exposes a task\u002Ftodo tool (e.g., TodoWrite), seed it with this checklist and tick phases as ",{"type":47,"tag":82,"props":692,"children":694},{"className":693},[],[695],{"type":53,"value":425},{"type":53,"value":697}," moves past them:",{"type":47,"tag":196,"props":699,"children":703},{"className":700,"code":702,"language":53},[701],"language-text","- [ ] Phase 0: Literature grounding → lit_table.md, then Phase 0+ full-text fetch (MANDATORY — Phase 1 hard-gates on it)\n- [ ] Phase 1: Bottleneck identification → phase1_output.json (routing: proceed | do_not_generate)\n- [ ] Phase 2: Gap×pattern selection + candidate generation (ONE isolated context, TWO output files) → citation gate → coherence gate (dry-run trace, fresh context)\n- [ ] Phase 3: Collision retrieval (signature@10mo + alias@48mo — launchable in parallel with 2.3) → audit (5 checks) → [revise → merge → re-audit if falsification rewritten] | [abandon → information-gain retry: regenerate while each failure yields NEW binding lessons, ≤3 candidate cycles; repeated subsumption lesson → 1 bottleneck re-diagnosis + 1 attempt; no new information or cap → phase_3_failed]\n- [ ] Phase 4: skeleton → fill (technical) → assemble partial → derive (plain, fast-tier) → assemble final + method view → implementability audit → validate → render → return 3 cards inline\n",[704],{"type":47,"tag":82,"props":705,"children":706},{"__ignoreMap":201},[707],{"type":53,"value":702},{"type":47,"tag":56,"props":709,"children":710},{},[711,713,718,720,726,728,734,736,741],{"type":53,"value":712},"Three outcomes per run: the rendered idea-card markdown returned inline (LaTeX + per-phase JSON left under ",{"type":47,"tag":82,"props":714,"children":716},{"className":715},[],[717],{"type":53,"value":489},{"type":53,"value":719},"), a ",{"type":47,"tag":82,"props":721,"children":723},{"className":722},[],[724],{"type":53,"value":725},"do_not_generate.md",{"type":53,"value":727}," (Phase 1 OOD), or a ",{"type":47,"tag":82,"props":729,"children":731},{"className":730},[],[732],{"type":53,"value":733},"phase_3_failed.md",{"type":53,"value":735}," (audit abandons twice). ",{"type":47,"tag":434,"props":737,"children":738},{},[739],{"type":53,"value":740},"Never ask the user mid-flow",{"type":53,"value":742}," — missing intake fields are inferred; revision, falsification re-audit, and the single internal retry all run without user re-invocation.",{"type":47,"tag":744,"props":745,"children":747},"h3",{"id":746},"invocation-contract",[748],{"type":53,"value":749},"Invocation contract",{"type":47,"tag":56,"props":751,"children":752},{},[753,766,767,773,775,781,783,789,791,797,799,804],{"type":47,"tag":434,"props":754,"children":755},{},[756,758,764],{"type":53,"value":757},"No ",{"type":47,"tag":82,"props":759,"children":761},{"className":760},[],[762],{"type":53,"value":763},"cd",{"type":53,"value":765}," is required.",{"type":53,"value":522},{"type":47,"tag":82,"props":768,"children":770},{"className":769},[],[771],{"type":53,"value":772},"scripts\u002Frun.py",{"type":53,"value":774}," self-locates its skill root, so every orchestrator command can be invoked from ANY working directory by absolute script path: ",{"type":47,"tag":82,"props":776,"children":778},{"className":777},[],[779],{"type":53,"value":780},"python3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" \u003Csubcommand> --out \"$RUN_DIR\u002F\u003Cphase>\u002F\" ...",{"type":53,"value":782},". The legacy form ",{"type":47,"tag":82,"props":784,"children":786},{"className":785},[],[787],{"type":53,"value":788},"cd \"$SKILL_DIR\" && python3 -m scripts.run \u003Csubcommand> ...",{"type":53,"value":790}," works identically. Do NOT use relative script or ",{"type":47,"tag":82,"props":792,"children":794},{"className":793},[],[795],{"type":53,"value":796},"--out",{"type":53,"value":798}," paths — CWD is not stable across host-LLM Bash invocations, and the orchestrator rejects a relative ",{"type":47,"tag":82,"props":800,"children":802},{"className":801},[],[803],{"type":53,"value":796},{"type":53,"value":805}," outright.",{"type":47,"tag":56,"props":807,"children":808},{},[809,814,816,822,824,830,832,838,840,846,848,854],{"type":47,"tag":434,"props":810,"children":811},{},[812],{"type":53,"value":813},"Exit codes 10 and 11 are NOT errors — they are sentinel handshakes.",{"type":53,"value":815}," When the orchestrator can't call an LLM itself (no ",{"type":47,"tag":82,"props":817,"children":819},{"className":818},[],[820],{"type":53,"value":821},"NOVELTY_LLM_CLASSIFY_FAST_CMD",{"type":53,"value":823},"), it writes a sentinel JSON describing what the host LLM should do, then exits rc=10 (intent \u002F pattern-summary) or rc=11 (signature_terms). Read the sentinel (",{"type":47,"tag":82,"props":825,"children":827},{"className":826},[],[828],{"type":53,"value":829},"$RUN_DIR\u002F\u003Cphase>\u002F.\u003Cstep>_pending",{"type":53,"value":831},"), read the file at its ",{"type":47,"tag":82,"props":833,"children":835},{"className":834},[],[836],{"type":53,"value":837},"rubric_file",{"type":53,"value":839}," field (absolute path), produce the expected output, re-invoke per its ",{"type":47,"tag":82,"props":841,"children":843},{"className":842},[],[844],{"type":53,"value":845},"re_invocation",{"type":53,"value":847}," field. Do not stop on these codes. (The default Phase 0 flow below avoids the rc=10 intent sentinel entirely by passing ",{"type":47,"tag":82,"props":849,"children":851},{"className":850},[],[852],{"type":53,"value":853},"--queries",{"type":53,"value":855}," up front.)",{"type":47,"tag":744,"props":857,"children":859},{"id":858},"context-discipline-read-before-running-any-llm-driven-phase",[860],{"type":53,"value":861},"Context discipline (read BEFORE running any LLM-driven phase)",{"type":47,"tag":56,"props":863,"children":864},{},[865,867,873],{"type":53,"value":866},"A full run accumulates ~180-250k tokens of intermediate state. If the host LLM carries that in its own conversation context across phases, the Phase 1 \u002F 2.2 \u002F 4.fill calls routinely hit the backend request timeout (",{"type":47,"tag":82,"props":868,"children":870},{"className":869},[],[871],{"type":53,"value":872},"[API Error · Request timed out · Retrying...]",{"type":53,"value":874},") and the retry times out again. Apply ALL three rules on every run:",{"type":47,"tag":56,"props":876,"children":877},{},[878,883],{"type":47,"tag":434,"props":879,"children":880},{},[881],{"type":53,"value":882},"Rule 1 — Run every LLM-driven phase in an ISOLATED context.",{"type":53,"value":884}," Phases 1 \u002F 2 (2.1+2.2) \u002F 2.3 \u002F 3.2 \u002F 3.3 \u002F 4.fill \u002F 4.1.5 each have file-path inputs and one JSON output; no phase needs the conversation that produced an earlier one. Use the FIRST isolation mechanism your harness supports:",{"type":47,"tag":121,"props":886,"children":887},{},[888,913,939],{"type":47,"tag":125,"props":889,"children":890},{},[891,896,898,904,906,911],{"type":47,"tag":434,"props":892,"children":893},{},[894],{"type":53,"value":895},"(a) Subprocess LLM",{"type":53,"value":897}," — set ",{"type":47,"tag":82,"props":899,"children":901},{"className":900},[],[902],{"type":53,"value":903},"NOVELTY_LLM_REASONING_LARGE_CMD",{"type":53,"value":905}," \u002F ",{"type":47,"tag":82,"props":907,"children":909},{"className":908},[],[910],{"type":53,"value":821},{"type":53,"value":912}," (see § Configuration); each phase runs as its own subprocess, fresh context by construction, on any harness.",{"type":47,"tag":125,"props":914,"children":915},{},[916,921,923,929,931,937],{"type":47,"tag":434,"props":917,"children":918},{},[919],{"type":53,"value":920},"(b) Sub-agent tool",{"type":53,"value":922}," (Claude Code ",{"type":47,"tag":82,"props":924,"children":926},{"className":925},[],[927],{"type":53,"value":928},"Agent",{"type":53,"value":930}," or equivalent) — spawn one per phase, passing ONLY the file paths the phase prompt lists — not conversation history, not file contents inline. The sub-agent reads from disk, ",{"type":47,"tag":82,"props":932,"children":934},{"className":933},[],[935],{"type":53,"value":936},"Write",{"type":53,"value":938},"s to disk, returns ≤ 250 words (output path + routing signal). Exception by design: Phase 2.1 and 2.2 run in ONE sub-agent writing both output files — both are generation-side; the adversarial separations (3.2 vs 3.3, 4.fill vs 4.1.5) must stay separate calls.",{"type":47,"tag":125,"props":940,"children":941},{},[942,947],{"type":47,"tag":434,"props":943,"children":944},{},[945],{"type":53,"value":946},"(c) Manual context reset",{"type":53,"value":948}," — run inline but clear\u002Fcompact at the four points in Rule 3.",{"type":47,"tag":56,"props":950,"children":951},{},[952],{"type":53,"value":953},"Whichever mechanism, the parent context stays ≤ ~30k tokens for the whole run because it never holds a phase's structured output.",{"type":47,"tag":56,"props":955,"children":956},{},[957,969,971,977,979,984,986,992,994,999,1000,1006,1007,1013,1015,1021],{"type":47,"tag":434,"props":958,"children":959},{},[960,962,967],{"type":53,"value":961},"Rule 2 — ",{"type":47,"tag":82,"props":963,"children":965},{"className":964},[],[966],{"type":53,"value":936},{"type":53,"value":968}," every phase artifact directly to disk; never paraphrase it into chat.",{"type":53,"value":970}," Output convention: ",{"type":47,"tag":82,"props":972,"children":974},{"className":973},[],[975],{"type":53,"value":976},"$RUN_DIR\u002F\u003Cphase>\u002F\u003Cphase>_output.json",{"type":53,"value":978},". Use your harness's file-write tool (Claude Code: ",{"type":47,"tag":82,"props":980,"children":982},{"className":981},[],[983],{"type":53,"value":936},{"type":53,"value":985},") — no Bash heredocs (permission prompts + silent truncation), no ",{"type":47,"tag":82,"props":987,"children":989},{"className":988},[],[990],{"type":53,"value":991},"echo",{"type":53,"value":993},", no pasting JSON into replies. Bound tool-result captures from large files to ≤ 4 KB (",{"type":47,"tag":82,"props":995,"children":997},{"className":996},[],[998],{"type":53,"value":673},{"type":53,"value":905},{"type":47,"tag":82,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":53,"value":1005},"jq",{"type":53,"value":905},{"type":47,"tag":82,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":53,"value":1012},"sed",{"type":53,"value":1014},"); never ",{"type":47,"tag":82,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":53,"value":1020},"Read",{"type":53,"value":1022}," a >10 KB intermediate dump into the parent context — the dump gets cached into every subsequent turn (this exact anti-pattern caused prior timeout runs).",{"type":47,"tag":56,"props":1024,"children":1025},{},[1026,1031,1033,1039],{"type":47,"tag":434,"props":1027,"children":1028},{},[1029],{"type":53,"value":1030},"Rule 3 — Compact between phases.",{"type":53,"value":1032}," Natural compact points: after Phase 0+, after Phase 1, after Phase 2, after Phase 3.2. Every phase re-reads its disk inputs, so compacting loses nothing. With ",{"type":47,"tag":82,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":53,"value":1038},"\u002Fcompact",{"type":53,"value":1040},", use it there; Rule 1 mechanisms (a)\u002F(b) achieve the same on their own.",{"type":47,"tag":56,"props":1042,"children":1043},{},[1044,1049,1051,1057,1059,1065],{"type":47,"tag":434,"props":1045,"children":1046},{},[1047],{"type":53,"value":1048},"Diagnostic for \"Request timed out\" mid-phase:",{"type":53,"value":1050}," inspect your harness's session transcript\u002Flog (Claude Code: ",{"type":47,"tag":82,"props":1052,"children":1054},{"className":1053},[],[1055],{"type":53,"value":1056},"~\u002F.claude\u002Fprojects\u002F\u003Cproject-slug>\u002F\u003Csession-id>.jsonl",{"type":53,"value":1058},", look for ",{"type":47,"tag":82,"props":1060,"children":1062},{"className":1061},[],[1063],{"type":53,"value":1064},"isApiErrorMessage: true",{"type":53,"value":1066},"; other harnesses: their session-log equivalent); the prior tool call shows which prompt got too big. The fix is one of the three rules — usually Rule 1.",{"type":47,"tag":411,"props":1068,"children":1069},{},[],{"type":47,"tag":114,"props":1071,"children":1073},{"id":1072},"phase-reference",[1074],{"type":53,"value":1075},"Phase reference",{"type":47,"tag":56,"props":1077,"children":1078},{},[1079,1084],{"type":47,"tag":82,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":53,"value":425},{"type":53,"value":1085}," prints each of these steps at the right moment with concrete paths; the tables below are the full contract for deviation\u002Fdebugging.",{"type":47,"tag":744,"props":1087,"children":1089},{"id":1088},"orchestrator-entry-points",[1090],{"type":53,"value":1091},"Orchestrator entry points",{"type":47,"tag":1093,"props":1094,"children":1095},"table",{},[1096,1123],{"type":47,"tag":1097,"props":1098,"children":1099},"thead",{},[1100],{"type":47,"tag":1101,"props":1102,"children":1103},"tr",{},[1104,1110],{"type":47,"tag":1105,"props":1106,"children":1107},"th",{},[1108],{"type":53,"value":1109},"Phase",{"type":47,"tag":1105,"props":1111,"children":1112},{},[1113,1115,1121],{"type":53,"value":1114},"Entry point (",{"type":47,"tag":82,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":53,"value":1120},"python3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" ...",{"type":53,"value":1122},", any CWD)",{"type":47,"tag":1124,"props":1125,"children":1126},"tbody",{},[1127,1145,1162,1179,1196,1213,1237,1254,1278,1295,1312,1329,1346,1363,1388,1412,1429],{"type":47,"tag":1101,"props":1128,"children":1129},{},[1130,1136],{"type":47,"tag":1131,"props":1132,"children":1133},"td",{},[1134],{"type":53,"value":1135},"navigator",{"type":47,"tag":1131,"props":1137,"children":1138},{},[1139],{"type":47,"tag":82,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":53,"value":1144},"next --dir \"$RUN_DIR\" [--query \"...\"]",{"type":47,"tag":1101,"props":1146,"children":1147},{},[1148,1153],{"type":47,"tag":1131,"props":1149,"children":1150},{},[1151],{"type":53,"value":1152},"Phase 0",{"type":47,"tag":1131,"props":1154,"children":1155},{},[1156],{"type":47,"tag":82,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":53,"value":1161},"phase0 --query \"\u003Cuser text>\" --queries \"q1|q2|q3|q4\" --out $RUN_DIR\u002Fphase0\u002F",{"type":47,"tag":1101,"props":1163,"children":1164},{},[1165,1170],{"type":47,"tag":1131,"props":1166,"children":1167},{},[1168],{"type":53,"value":1169},"user-ref registration (title-named anchor papers; BEFORE phase0_fulltext)",{"type":47,"tag":1131,"props":1171,"children":1172},{},[1173],{"type":47,"tag":82,"props":1174,"children":1176},{"className":1175},[],[1177],{"type":53,"value":1178},"add_user_ref --out $RUN_DIR\u002Fphase0\u002F --title \"\u003Cfull title>\" [--raw-match \"\u003Cuser phrasing>\"] [--id \u003Carxiv\u002FDOI\u002FURL>]",{"type":47,"tag":1101,"props":1180,"children":1181},{},[1182,1187],{"type":47,"tag":1131,"props":1183,"children":1184},{},[1185],{"type":53,"value":1186},"relevance partition apply (Phase 0.4; archives off_topic + stamps core\u002Fadjacent, BEFORE tagging)",{"type":47,"tag":1131,"props":1188,"children":1189},{},[1190],{"type":47,"tag":82,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":53,"value":1195},"apply_partition --out $RUN_DIR\u002Fphase0\u002F --partition \u003Crelevance_partition.json>",{"type":47,"tag":1101,"props":1197,"children":1198},{},[1199,1204],{"type":47,"tag":1131,"props":1200,"children":1201},{},[1202],{"type":53,"value":1203},"host-ref resolution (Phase 0.5 coverage check; verifies + merges host-nominated missing papers)",{"type":47,"tag":1131,"props":1205,"children":1206},{},[1207],{"type":47,"tag":82,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":53,"value":1212},"add_host_refs --out $RUN_DIR\u002Fphase0\u002F --refs \u003Cnoms.json>",{"type":47,"tag":1101,"props":1214,"children":1215},{},[1216,1228],{"type":47,"tag":1131,"props":1217,"children":1218},{},[1219,1221,1226],{"type":53,"value":1220},"Phase 0+ full-text (",{"type":47,"tag":434,"props":1222,"children":1223},{},[1224],{"type":53,"value":1225},"mandatory",{"type":53,"value":1227},", the moment lit_table.md lands)",{"type":47,"tag":1131,"props":1229,"children":1230},{},[1231],{"type":47,"tag":82,"props":1232,"children":1234},{"className":1233},[],[1235],{"type":53,"value":1236},"phase0_fulltext --out $RUN_DIR\u002Fphase0\u002F",{"type":47,"tag":1101,"props":1238,"children":1239},{},[1240,1245],{"type":47,"tag":1131,"props":1241,"children":1242},{},[1243],{"type":53,"value":1244},"Phase 1 anchor top-up (optional, when the #1 closest_adjacent fell outside the fulltext pool)",{"type":47,"tag":1131,"props":1246,"children":1247},{},[1248],{"type":47,"tag":82,"props":1249,"children":1251},{"className":1250},[],[1252],{"type":53,"value":1253},"phase1_fulltext_topup --out $RUN_DIR\u002Fphase0\u002F --paper-id \u003Canchor paper_id>",{"type":47,"tag":1101,"props":1255,"children":1256},{},[1257,1269],{"type":47,"tag":1131,"props":1258,"children":1259},{},[1260,1262,1267],{"type":53,"value":1261},"Phase 2 prep (deterministic; ",{"type":47,"tag":82,"props":1263,"children":1265},{"className":1264},[],[1266],{"type":53,"value":425},{"type":53,"value":1268}," emits it with the Phase 2 step)",{"type":47,"tag":1131,"props":1270,"children":1271},{},[1272],{"type":47,"tag":82,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":53,"value":1277},"phase2_prepare --dir $RUN_DIR",{"type":47,"tag":1101,"props":1279,"children":1280},{},[1281,1286],{"type":47,"tag":1131,"props":1282,"children":1283},{},[1284],{"type":53,"value":1285},"lit_table shard assembly (deterministic; after parallel pattern tagging)",{"type":47,"tag":1131,"props":1287,"children":1288},{},[1289],{"type":47,"tag":82,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":53,"value":1294},"lit_table_merge --out $RUN_DIR\u002Fphase0\u002F --shards \u003Crows1.md> \u003Crows2.md> ...",{"type":47,"tag":1101,"props":1296,"children":1297},{},[1298,1303],{"type":47,"tag":1131,"props":1299,"children":1300},{},[1301],{"type":53,"value":1302},"Phase 3.1 collision",{"type":47,"tag":1131,"props":1304,"children":1305},{},[1306],{"type":47,"tag":82,"props":1307,"children":1309},{"className":1308},[],[1310],{"type":53,"value":1311},"phase3_collision --idea-json \u003Ccanonical candidate> --out $RUN_DIR\u002Fphase3_collision\u002F",{"type":47,"tag":1101,"props":1313,"children":1314},{},[1315,1320],{"type":47,"tag":1131,"props":1316,"children":1317},{},[1318],{"type":53,"value":1319},"Phase 3.3 merger",{"type":47,"tag":1131,"props":1321,"children":1322},{},[1323],{"type":47,"tag":82,"props":1324,"children":1326},{"className":1325},[],[1327],{"type":53,"value":1328},"phase3_merge_revisions --phase2 \u003Ccanonical candidate> --revisions \u003Cp3.3-patch> --critique \u003Cp3.2-report> --out $RUN_DIR\u002Fphase3_revise\u002F",{"type":47,"tag":1101,"props":1330,"children":1331},{},[1332,1337],{"type":47,"tag":1131,"props":1333,"children":1334},{},[1335],{"type":53,"value":1336},"Phase 2.3 merger (same tool; only when coherence verdict=patched)",{"type":47,"tag":1131,"props":1338,"children":1339},{},[1340],{"type":47,"tag":82,"props":1341,"children":1343},{"className":1342},[],[1344],{"type":53,"value":1345},"phase3_merge_revisions --phase2 \u003Cp2.2-output> --revisions \u003Cp2.3-output> --out $RUN_DIR\u002Fphase2_coherence\u002F --out-name refined_candidate.json",{"type":47,"tag":1101,"props":1347,"children":1348},{},[1349,1354],{"type":47,"tag":1131,"props":1350,"children":1351},{},[1352],{"type":53,"value":1353},"Phase 4 skeleton",{"type":47,"tag":1131,"props":1355,"children":1356},{},[1357],{"type":47,"tag":82,"props":1358,"children":1360},{"className":1359},[],[1361],{"type":53,"value":1362},"phase4_skeleton --candidate \u003Cfinal_candidate-or-p2.2> --phase1 ... --phase2-select ... --phase3-critique ... [--phase3-revise ...] --phase0-dir $RUN_DIR\u002Fphase0\u002F [--collision ...] --out $RUN_DIR\u002Fphase4\u002F",{"type":47,"tag":1101,"props":1364,"children":1365},{},[1366,1379],{"type":47,"tag":1131,"props":1367,"children":1368},{},[1369,1371,1377],{"type":53,"value":1370},"Phase 4 assemble (repeat ",{"type":47,"tag":82,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":53,"value":1376},"--fill-map",{"type":53,"value":1378}," to merge the derive_map on the final pass)",{"type":47,"tag":1131,"props":1380,"children":1381},{},[1382],{"type":47,"tag":82,"props":1383,"children":1385},{"className":1384},[],[1386],{"type":53,"value":1387},"phase4_assemble --skeleton $RUN_DIR\u002Fphase4\u002Fphase4_skeleton.json --fill-map $RUN_DIR\u002Fphase4\u002Ffill_map.json [--fill-map $RUN_DIR\u002Fphase4\u002Fderive_map.json] --out $RUN_DIR\u002Fphase4\u002F",{"type":47,"tag":1101,"props":1389,"children":1390},{},[1391,1403],{"type":47,"tag":1131,"props":1392,"children":1393},{},[1394,1396,1401],{"type":53,"value":1395},"Phase 4 method view (before 4.1.5; ",{"type":47,"tag":82,"props":1397,"children":1399},{"className":1398},[],[1400],{"type":53,"value":425},{"type":53,"value":1402}," bundles it with the final assemble)",{"type":47,"tag":1131,"props":1404,"children":1405},{},[1406],{"type":47,"tag":82,"props":1407,"children":1409},{"className":1408},[],[1410],{"type":53,"value":1411},"phase4_method_view --expansion $RUN_DIR\u002Fphase4\u002Fphase4_expansion.json --out $RUN_DIR\u002Fphase4\u002F",{"type":47,"tag":1101,"props":1413,"children":1414},{},[1415,1420],{"type":47,"tag":1131,"props":1416,"children":1417},{},[1418],{"type":53,"value":1419},"Phase 4 render",{"type":47,"tag":1131,"props":1421,"children":1422},{},[1423],{"type":47,"tag":82,"props":1424,"children":1426},{"className":1425},[],[1427],{"type":53,"value":1428},"phase4_render --expansion $RUN_DIR\u002Fphase4\u002Fphase4_expansion.json --out $RUN_DIR\u002Fphase4\u002F",{"type":47,"tag":1101,"props":1430,"children":1431},{},[1432,1437],{"type":47,"tag":1131,"props":1433,"children":1434},{},[1435],{"type":53,"value":1436},"Validators",{"type":47,"tag":1131,"props":1438,"children":1439},{},[1440],{"type":47,"tag":82,"props":1441,"children":1443},{"className":1442},[],[1444],{"type":53,"value":1445},"validate --phase2 ... [--phase3 ...] [--phase4 ...] [--phase4-impl ...]",{"type":47,"tag":56,"props":1447,"children":1448},{},[1449,1451,1457,1459,1465,1467,1472,1474,1480,1482,1487],{"type":53,"value":1450},"The LLM-driven phases (1 \u002F 2.1 \u002F 2.2 \u002F 2.3 \u002F 3.2 \u002F 3.3 \u002F 4.fill \u002F 4.1.5 \u002F falsification re-audit) have no orchestrator subcommand (a ",{"type":47,"tag":82,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":53,"value":1456},"cat prompt | llm",{"type":53,"value":1458}," wrapper would add fragility without determinism): read the prompt at ",{"type":47,"tag":82,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":53,"value":1464},"references\u002Fsystem-prompts\u002F\u003Cphase>.txt",{"type":53,"value":1466},", gather the inputs listed at its top, ",{"type":47,"tag":82,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":53,"value":936},{"type":53,"value":1473}," the JSON described under ",{"type":47,"tag":82,"props":1475,"children":1477},{"className":1476},[],[1478],{"type":53,"value":1479},"Output:",{"type":53,"value":1481}," to ",{"type":47,"tag":82,"props":1483,"children":1485},{"className":1484},[],[1486],{"type":53,"value":976},{"type":53,"value":1488},". Run each under the Context discipline rules — Phase 4.fill is the largest output and the most timeout-prone; never in the parent context.",{"type":47,"tag":744,"props":1490,"children":1492},{"id":1491},"phase-0-literature-grounding",[1493],{"type":53,"value":1494},"Phase 0 — Literature grounding",{"type":47,"tag":56,"props":1496,"children":1497},{},[1498,1500,1505,1507,1513,1515,1521,1523,1529,1531,1537,1539,1545],{"type":53,"value":1499},"Phase 0 and 3.1 require ",{"type":47,"tag":434,"props":1501,"children":1502},{},[1503],{"type":53,"value":1504},"real external retrieval",{"type":53,"value":1506}," via the bundled connector scripts (",{"type":47,"tag":82,"props":1508,"children":1510},{"className":1509},[],[1511],{"type":53,"value":1512},"scripts\u002Fsearch_*.py",{"type":53,"value":1514},") — never WebSearch or ad-hoc fetch (downstream phases reject unstructured output). Gate sentinel: ",{"type":47,"tag":82,"props":1516,"children":1518},{"className":1517},[],[1519],{"type":53,"value":1520},".lit_grounding_mode",{"type":53,"value":1522}," = ",{"type":47,"tag":82,"props":1524,"children":1526},{"className":1525},[],[1527],{"type":53,"value":1528},"real",{"type":53,"value":1530}," vs ",{"type":47,"tag":82,"props":1532,"children":1534},{"className":1533},[],[1535],{"type":53,"value":1536},"connector_failure",{"type":53,"value":1538}," (halt with diagnostic; ",{"type":47,"tag":82,"props":1540,"children":1542},{"className":1541},[],[1543],{"type":53,"value":1544},"--allow-webfallback",{"type":53,"value":1546}," exists as a flagged, lower-confidence escape).",{"type":47,"tag":56,"props":1548,"children":1549},{},[1550,1555,1557,1563,1565,1571,1573,1578,1580,1586],{"type":47,"tag":434,"props":1551,"children":1552},{},[1553],{"type":53,"value":1554},"Default flow (skips one sentinel round-trip):",{"type":53,"value":1556}," BEFORE invoking ",{"type":47,"tag":82,"props":1558,"children":1560},{"className":1559},[],[1561],{"type":53,"value":1562},"phase0",{"type":53,"value":1564},", read ",{"type":47,"tag":82,"props":1566,"children":1568},{"className":1567},[],[1569],{"type":53,"value":1570},"references\u002Fintent-recognition.md",{"type":53,"value":1572}," (Map mode) yourself and produce ",{"type":47,"tag":434,"props":1574,"children":1575},{},[1576],{"type":53,"value":1577},"4",{"type":53,"value":1579}," search queries (3-5 only with a stated reason) — including one ESCAPE-MECHANISM query phrased in solution vocabulary (recalls papers that already fixed the bottleneck and title themselves by their fix; problem-keyed queries miss exactly those), and apply that file's two query tests — VOCABULARY-OWNERSHIP and CONCRETE-OBJECT — to EVERY query, not only the escape one; its count rule gates a 5th query on quality per slot, not on the count. Phrase queries mechanism-first: generic \"",{"type":47,"tag":82,"props":1581,"children":1583},{"className":1582},[],[1584],{"type":53,"value":1585},"\u003Ctopic>",{"type":53,"value":1587}," challenges\u002Foverview\u002Flandscape\" phrasings are survey magnets that dilute corpus density — the orchestrator demotes survey-titled hits to the bottom of lit_results (kept, never dropped), but each connector's cap slots are still spent on them. Also apply the OOD short-circuit (intake-routing.md triggers #1 Too-broad \u002F #2 No-anchor → route to do_not_generate instead of retrieving). Then invoke with BOTH flags:",{"type":47,"tag":196,"props":1589,"children":1591},{"className":198,"code":1590,"language":200,"meta":201,"style":201},"python3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" phase0 --query \"\u003Cuser's research question>\" --queries \"q1|q2|q3|q4\" --out $RUN_DIR\u002Fphase0\u002F\n",[1592],{"type":47,"tag":82,"props":1593,"children":1594},{"__ignoreMap":201},[1595],{"type":47,"tag":207,"props":1596,"children":1597},{"class":209,"line":210},[1598,1602,1606,1610,1614,1618,1623,1627,1631,1635,1639,1644,1648,1653,1657,1662,1667],{"type":47,"tag":207,"props":1599,"children":1600},{"style":232},[1601],{"type":53,"value":308},{"type":47,"tag":207,"props":1603,"children":1604},{"style":220},[1605],{"type":53,"value":356},{"type":47,"tag":207,"props":1607,"children":1608},{"style":214},[1609],{"type":53,"value":361},{"type":47,"tag":207,"props":1611,"children":1612},{"style":226},[1613],{"type":53,"value":366},{"type":47,"tag":207,"props":1615,"children":1616},{"style":220},[1617],{"type":53,"value":280},{"type":47,"tag":207,"props":1619,"children":1620},{"style":226},[1621],{"type":53,"value":1622}," phase0",{"type":47,"tag":207,"props":1624,"children":1625},{"style":226},[1626],{"type":53,"value":498},{"type":47,"tag":207,"props":1628,"children":1629},{"style":220},[1630],{"type":53,"value":356},{"type":47,"tag":207,"props":1632,"children":1633},{"style":226},[1634],{"type":53,"value":507},{"type":47,"tag":207,"props":1636,"children":1637},{"style":220},[1638],{"type":53,"value":280},{"type":47,"tag":207,"props":1640,"children":1641},{"style":226},[1642],{"type":53,"value":1643}," --queries",{"type":47,"tag":207,"props":1645,"children":1646},{"style":220},[1647],{"type":53,"value":356},{"type":47,"tag":207,"props":1649,"children":1650},{"style":226},[1651],{"type":53,"value":1652},"q1|q2|q3|q4",{"type":47,"tag":207,"props":1654,"children":1655},{"style":220},[1656],{"type":53,"value":280},{"type":47,"tag":207,"props":1658,"children":1659},{"style":226},[1660],{"type":53,"value":1661}," --out",{"type":47,"tag":207,"props":1663,"children":1664},{"style":214},[1665],{"type":53,"value":1666}," $RUN_DIR",{"type":47,"tag":207,"props":1668,"children":1669},{"style":226},[1670],{"type":53,"value":1671},"\u002Fphase0\u002F\n",{"type":47,"tag":56,"props":1673,"children":1674},{},[1675,1677,1682,1684,1689,1691,1696,1698,1703,1705,1711,1713,1719,1721,1727],{"type":53,"value":1676},"The rc=10 sentinel path still exists as fallback when ",{"type":47,"tag":82,"props":1678,"children":1680},{"className":1679},[],[1681],{"type":53,"value":853},{"type":53,"value":1683}," is omitted. The orchestrator: asserts a sane clock; runs a list of retrieval JOBS (a connector may run more than one window) and merges them SS-priority. Default jobs: arxiv 0-6mo cap 40 · ",{"type":47,"tag":434,"props":1685,"children":1686},{},[1687],{"type":53,"value":1688},"ss_recent 0-6mo cap 30",{"type":53,"value":1690}," (the freshness window is covered by TWO engines — arXiv's weak lexical API AND SS's stronger recent search — because gap freshness lives here and one retriever's ranking is a single point of failure) · openalex 6-24mo cap 30 published-only · semanticscholar 6-24mo cap 30 published-only · openreview 0-6mo cap 10 in-review · oa_recent 0-6mo ",{"type":47,"tag":434,"props":1692,"children":1693},{},[1694],{"type":53,"value":1695},"cap 0 (off by default)",{"type":53,"value":1697},". Caps are ",{"type":47,"tag":434,"props":1699,"children":1700},{},[1701],{"type":53,"value":1702},"wide on purpose",{"type":53,"value":1704}," — narrower ones saturated, and the Phase 0.4 partition (below) drops the extra noise before it reaches the gap corpus (design-notes). ~140 pre-dedup, ~110-130 after dedup, ~50-75 after the partition drops off_topic. Window OVERLAP is intentional now (a second engine re-covers the freshness window; SS-first dedup collapses duplicates and enriches arXiv records with externalIds) — the old non-overlapping rule is retired. All caps are overridable per job via ",{"type":47,"tag":82,"props":1706,"children":1708},{"className":1707},[],[1709],{"type":53,"value":1710},"IDEASPARK_POOL",{"type":53,"value":1712}," (see § Configuration). It also extracts URL\u002FID user-refs from the query into ",{"type":47,"tag":82,"props":1714,"children":1716},{"className":1715},[],[1717],{"type":53,"value":1718},"phase0\u002Fuser_refs.json",{"type":53,"value":1720},"; emits ",{"type":47,"tag":82,"props":1722,"children":1724},{"className":1723},[],[1725],{"type":53,"value":1726},".pattern_summary_pending",{"type":53,"value":1728}," for the host.",{"type":47,"tag":56,"props":1730,"children":1731},{},[1732,1745,1747,1753,1755,1761,1762,1768,1770,1776,1778,1784,1786,1805,1807,1813,1815,1824,1826,1832,1834,1847,1849,1855,1857,1863,1865,1870],{"type":47,"tag":434,"props":1733,"children":1734},{},[1735,1737,1743],{"type":53,"value":1736},"Phase 0.4 relevance partition (host precision gate; DEFAULT ON, disable with ",{"type":47,"tag":82,"props":1738,"children":1740},{"className":1739},[],[1741],{"type":53,"value":1742},"IDEASPARK_RELEVANCE_PARTITION=off",{"type":53,"value":1744},"):",{"type":53,"value":1746}," because retrieval now over-fetches, the host — in ONE compact pass over every record's title+abstract — labels each ",{"type":47,"tag":82,"props":1748,"children":1750},{"className":1749},[],[1751],{"type":53,"value":1752},"core | adjacent | off_topic",{"type":53,"value":1754},", writing ",{"type":47,"tag":82,"props":1756,"children":1758},{"className":1757},[],[1759],{"type":53,"value":1760},"phase0\u002Frelevance_partition.json",{"type":53,"value":522},{"type":47,"tag":82,"props":1763,"children":1765},{"className":1764},[],[1766],{"type":53,"value":1767},"[{paper_id, relevance, reason}]",{"type":53,"value":1769},". Use YOUR OWN model (open-ended relevance judgment — do NOT downgrade); be CONSERVATIVE — when unsure between core and adjacent pick core, hard-label off_topic ONLY for clear cross-domain false positives (broad \"memory-augmented\" matches from wireless\u002Frecommendation\u002FNLP), pure surveys, or unrelated fields (a wrong off_topic is an unrecoverable recall loss). Then ",{"type":47,"tag":82,"props":1771,"children":1773},{"className":1772},[],[1774],{"type":53,"value":1775},"apply_partition --out phase0\u002F --partition \u003Cfile>",{"type":53,"value":1777}," (deterministic) stamps ",{"type":47,"tag":82,"props":1779,"children":1781},{"className":1780},[],[1782],{"type":53,"value":1783},"relevance",{"type":53,"value":1785}," on each record, ",{"type":47,"tag":434,"props":1787,"children":1788},{},[1789,1791,1797,1799],{"type":53,"value":1790},"archives off_topic to ",{"type":47,"tag":82,"props":1792,"children":1794},{"className":1793},[],[1795],{"type":53,"value":1796},"off_topic.md",{"type":53,"value":1798}," and drops it from ",{"type":47,"tag":82,"props":1800,"children":1802},{"className":1801},[],[1803],{"type":53,"value":1804},"lit_results.json",{"type":53,"value":1806},", and touches ",{"type":47,"tag":82,"props":1808,"children":1810},{"className":1809},[],[1811],{"type":53,"value":1812},".partition_applied",{"type":53,"value":1814},", and writes ",{"type":47,"tag":434,"props":1816,"children":1817},{},[1818],{"type":47,"tag":82,"props":1819,"children":1821},{"className":1820},[],[1822],{"type":53,"value":1823},"query_yield.md",{"type":53,"value":1825}," — the Phase 0.4 labels joined back onto the ",{"type":47,"tag":82,"props":1827,"children":1829},{"className":1828},[],[1830],{"type":53,"value":1831},"from_query",{"type":53,"value":1833}," provenance the connectors stamp, i.e. each query's core\u002Fadjacent\u002Foff_topic yield. That report is how the query-set design question stops being a judgement call: a query whose share is mostly off_topic is spending guaranteed round-robin slots on noise and should be dropped or rephrased next run (see the VOCABULARY-OWNERSHIP TEST in references\u002Fintent-recognition.md). Papers reachable from several queries are credited to each. This runs BEFORE tagging so the per-paper pattern-tag pass only sees survivors, and it ",{"type":47,"tag":434,"props":1835,"children":1836},{},[1837,1839,1845],{"type":53,"value":1838},"replaces the weak Haiku ",{"type":47,"tag":82,"props":1840,"children":1842},{"className":1841},[],[1843],{"type":53,"value":1844},"outside_taxonomy",{"type":53,"value":1846}," tag",{"type":53,"value":1848}," as the precision gate. ",{"type":47,"tag":82,"props":1850,"children":1852},{"className":1851},[],[1853],{"type":53,"value":1854},"core",{"type":53,"value":1856}," alone feeds the deep-read pool; ",{"type":47,"tag":82,"props":1858,"children":1860},{"className":1859},[],[1861],{"type":53,"value":1862},"adjacent",{"type":53,"value":1864}," stays as a citeable baseline\u002Fbackbone but never consumes a fetch slot. ",{"type":47,"tag":82,"props":1866,"children":1868},{"className":1867},[],[1869],{"type":53,"value":425},{"type":53,"value":1871}," drives the sub-flow; the marker guards re-runs.",{"type":47,"tag":56,"props":1873,"children":1874},{},[1875],{"type":53,"value":1876},"Retrieval takes 3-10 min (the openreview connector alone budgets 600s) — set your Bash timeout ≥ 600s or run it in the background.",{"type":47,"tag":56,"props":1878,"children":1879},{},[1880,1885,1887,1892,1894,1900,1902,1908,1910,1916,1918,1923,1925,1931],{"type":47,"tag":434,"props":1881,"children":1882},{},[1883],{"type":53,"value":1884},"Pattern tagging (host step):",{"type":53,"value":1886}," classify each ",{"type":47,"tag":82,"props":1888,"children":1890},{"className":1889},[],[1891],{"type":53,"value":1804},{"type":53,"value":1893}," paper per ",{"type":47,"tag":82,"props":1895,"children":1897},{"className":1896},[],[1898],{"type":53,"value":1899},"references\u002Fpattern-summary-rubric.md",{"type":53,"value":1901}," into 1-3 of the 15 patterns → write ",{"type":47,"tag":82,"props":1903,"children":1905},{"className":1904},[],[1906],{"type":53,"value":1907},"lit_table.md",{"type":53,"value":1909}," with columns ",{"type":47,"tag":82,"props":1911,"children":1913},{"className":1912},[],[1914],{"type":53,"value":1915},"paper_id | year_month | venue | title | ideation pattern tags | bottleneck this paper targets | open issue \u002F unresolved gap | resolves_problem | retrieved_via",{"type":53,"value":1917},". Pure classification — it does not need the large reasoning model: route it to a cheaper\u002Ffaster model tier or a lower reasoning effort BY DEFAULT (the same tier ",{"type":47,"tag":82,"props":1919,"children":1921},{"className":1920},[],[1922],{"type":53,"value":821},{"type":53,"value":1924}," names in § Configuration; spending the large model here is pure waste); only when no cheaper tier exists, run it isolated on the host model. Rows are per-paper independent, so for 40+ papers the tagging MAY be sharded across 2-3 parallel fast-tier sub-agents (contiguous slices; assemble with the deterministic ",{"type":47,"tag":82,"props":1926,"children":1928},{"className":1927},[],[1929],{"type":53,"value":1930},"lit_table_merge --out $RUN_DIR\u002Fphase0\u002F --shards \u003Crow-file>...",{"type":53,"value":1932}," — it validates 9-column shape, row count == paper count, and paper_id coverage against lit_results.json, replacing hand-checks) — wall-clock win, no quality delta.",{"type":47,"tag":56,"props":1934,"children":1935},{},[1936,1948,1950,1956,1957,1963,1965,1971,1973,1979,1981,1986,1988,1994,1996,2002,2004,2010,2012,2018,2020,2026,2028,2034,2036,2041,2043,2048],{"type":47,"tag":434,"props":1937,"children":1938},{},[1939,1941,1947],{"type":53,"value":1940},"Phase 0.5 coverage check (host-recall channel, host step; DEFAULT ON, disable with ",{"type":47,"tag":82,"props":1942,"children":1944},{"className":1943},[],[1945],{"type":53,"value":1946},"IDEASPARK_COVERAGE_CHECK=off",{"type":53,"value":1744},{"type":53,"value":1949}," after tagging, before fulltext, the host — having read the whole table — names up to 8 clearly load-bearing works the retrieval pool MISSED, writing ",{"type":47,"tag":82,"props":1951,"children":1953},{"className":1952},[],[1954],{"type":53,"value":1955},"phase0\u002Fhost_refs_nominations.json",{"type":53,"value":522},{"type":47,"tag":82,"props":1958,"children":1960},{"className":1959},[],[1961],{"type":53,"value":1962},"[{title, id_hint?, why, source: parametric|websearch}]",{"type":53,"value":1964},". It PRIORITIZES the last ~12 months (recent\u002Ffrontier work the dated retrieval windows under-sampled — the target that keeps the diagnosed gap current); older foundational papers (canonical base policies, >12-month landmarks) are mostly Phase 1 lineage's job and should be nominated only as a small minority, and only when a load-bearing backbone\u002Fbaseline the candidate builds on or is measured against. Use YOUR OWN model here (open-ended intent judgment — do NOT downgrade to a cheap tier); WebSearch is allowed ONLY in this step and ONLY to find titles, never to fabricate a record; an empty ",{"type":47,"tag":82,"props":1966,"children":1968},{"className":1967},[],[1969],{"type":53,"value":1970},"[]",{"type":53,"value":1972}," is a valid honest output. Then ",{"type":47,"tag":82,"props":1974,"children":1976},{"className":1975},[],[1977],{"type":53,"value":1978},"add_host_refs --out phase0\u002F --refs \u003Cnoms>",{"type":53,"value":1980}," (deterministic) VERIFIES each nomination via the SS\u002FarXiv connectors (>=0.9 title match) — verified records merge into ",{"type":47,"tag":82,"props":1982,"children":1984},{"className":1983},[],[1985],{"type":53,"value":1804},{"type":53,"value":1987}," with ",{"type":47,"tag":82,"props":1989,"children":1991},{"className":1990},[],[1992],{"type":53,"value":1993},"retrieved_via=host_recall|host_web",{"type":53,"value":1995},"; unresolvable titles (likely hallucinations) are NOT admitted, they land in ",{"type":47,"tag":82,"props":1997,"children":1999},{"className":1998},[],[2000],{"type":53,"value":2001},"host_refs_unresolved.md",{"type":53,"value":2003},"; admitted ids are recorded in ",{"type":47,"tag":82,"props":2005,"children":2007},{"className":2006},[],[2008],{"type":53,"value":2009},"host_refs.json",{"type":53,"value":2011}," for provenance. Newly-admitted rows get tagged (fast tier) and ",{"type":47,"tag":82,"props":2013,"children":2015},{"className":2014},[],[2016],{"type":53,"value":2017},"lit_table_merge",{"type":53,"value":2019},"d in; ",{"type":47,"tag":82,"props":2021,"children":2023},{"className":2022},[],[2024],{"type":53,"value":2025},".coverage_check_done",{"type":53,"value":2027}," guards against re-running. This keeps ",{"type":47,"tag":82,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":53,"value":2033},"lit_grounding_mode",{"type":53,"value":2035}," honestly ",{"type":47,"tag":82,"props":2037,"children":2039},{"className":2038},[],[2040],{"type":53,"value":1528},{"type":53,"value":2042}," (every record is connector-verified) while letting host knowledge repair a thin or stale pool. ",{"type":47,"tag":82,"props":2044,"children":2046},{"className":2045},[],[2047],{"type":53,"value":425},{"type":53,"value":2049}," drives the whole sub-flow. Admitted refs feed the fulltext H tier (below).",{"type":47,"tag":56,"props":2051,"children":2052},{},[2053,2058,2060,2066,2068,2074,2076,2082],{"type":47,"tag":434,"props":2054,"children":2055},{},[2056],{"type":53,"value":2057},"Title-named user refs:",{"type":53,"value":2059}," if the user query names anchor papers by TITLE (\"based on the LoRA paper\" — anything the URL\u002FID regex can't catch), register each BEFORE ",{"type":47,"tag":82,"props":2061,"children":2063},{"className":2062},[],[2064],{"type":53,"value":2065},"phase0_fulltext",{"type":53,"value":2067}," via ",{"type":47,"tag":82,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":53,"value":2073},"add_user_ref",{"type":53,"value":2075}," (entry-point table). It does a deterministic dedup-merge into ",{"type":47,"tag":82,"props":2077,"children":2079},{"className":2078},[],[2080],{"type":53,"value":2081},"user_refs.json",{"type":53,"value":2083}," — do NOT hand-edit that file (some harnesses' file-write tools refuse to overwrite a file that was never read, and a malformed edit silently drops the U fetch tier).",{"type":47,"tag":56,"props":2085,"children":2086},{},[2087,2092,2094,2099,2101,2106,2108,2113,2115,2120,2122,2134,2136,2141,2143,2148,2150,2156,2158,2164,2166,2172,2174,2179,2181,2187,2189,2195,2197,2203,2205,2211,2213,2219,2221,2227],{"type":47,"tag":434,"props":2088,"children":2089},{},[2090],{"type":53,"value":2091},"Phase 0+ full-text fetch — MANDATORY.",{"type":53,"value":2093}," The instant ",{"type":47,"tag":82,"props":2095,"children":2097},{"className":2096},[],[2098],{"type":53,"value":1907},{"type":53,"value":2100}," lands (and after the coverage check), run ",{"type":47,"tag":82,"props":2102,"children":2104},{"className":2103},[],[2105],{"type":53,"value":2065},{"type":53,"value":2107}," (entry-point table) before touching Phase 1. Pool = U (user refs, never capped) + ",{"type":47,"tag":434,"props":2109,"children":2110},{},[2111],{"type":53,"value":2112},"H (host-recall refs, retrieved_via host_*, cap 6)",{"type":53,"value":2114}," + T2 (published on-topic, cap 10) + T3 (arxiv recent on-topic, cap 15; also absorbs unused H\u002FT2 slots), ceiling ",{"type":47,"tag":434,"props":2116,"children":2117},{},[2118],{"type":53,"value":2119},"25",{"type":53,"value":2121}," excluding U, method-first ordering, concurrent fetch (HTML path first, pymupdf PDF fallback; per-paper budget so one slow PDF can't stall the step). ",{"type":47,"tag":434,"props":2123,"children":2124},{},[2125,2127,2132],{"type":53,"value":2126},"Only ",{"type":47,"tag":82,"props":2128,"children":2130},{"className":2129},[],[2131],{"type":53,"value":1854},{"type":53,"value":2133},"-tagged papers are eligible",{"type":53,"value":2135}," (Phase 0.4 relevance stamp; U bypasses, H needs its nomination tagged core) — ",{"type":47,"tag":82,"props":2137,"children":2139},{"className":2138},[],[2140],{"type":53,"value":1862},{"type":53,"value":2142}," papers stay citeable at abstract level but never consume a deep-read slot. Any pooled paper that fetches to an ",{"type":47,"tag":434,"props":2144,"children":2145},{},[2146],{"type":53,"value":2147},"empty method section is backfilled",{"type":53,"value":2149}," — swapped for the next-ranked core reserve that has one (one-out-one-in, ceiling held; ",{"type":47,"tag":82,"props":2151,"children":2153},{"className":2152},[],[2154],{"type":53,"value":2155},"--backfill",{"type":53,"value":2157}," reserve size, default 6). Output ",{"type":47,"tag":82,"props":2159,"children":2161},{"className":2160},[],[2162],{"type":53,"value":2163},"fulltext_cache.json",{"type":53,"value":2165}," keyed by paper_id (",{"type":47,"tag":82,"props":2167,"children":2169},{"className":2168},[],[2170],{"type":53,"value":2171},"{tier, intro, method, source_used, warning}",{"type":53,"value":2173},"); fetch failures degrade to abstract + warning. Phase 1 ",{"type":47,"tag":434,"props":2175,"children":2176},{},[2177],{"type":53,"value":2178},"hard-gates",{"type":53,"value":2180}," on this file (",{"type":47,"tag":82,"props":2182,"children":2184},{"className":2183},[],[2185],{"type":53,"value":2186},"error: fulltext_not_fetched",{"type":53,"value":2188},"). Alongside the blob it writes a derived per-paper read view (",{"type":47,"tag":82,"props":2190,"children":2192},{"className":2191},[],[2193],{"type":53,"value":2194},"phase0\u002Ffulltext\u002Findex.json",{"type":53,"value":2196}," + one ",{"type":47,"tag":82,"props":2198,"children":2200},{"className":2199},[],[2201],{"type":53,"value":2202},".md",{"type":53,"value":2204}," per paper, same content, index carries tier\u002Fsource_used\u002Fwarning) — Phase 1 reads the index then only the papers it needs; the blob stays canonical and ",{"type":47,"tag":82,"props":2206,"children":2208},{"className":2207},[],[2209],{"type":53,"value":2210},"phase1_fulltext_topup",{"type":53,"value":2212}," refreshes both. Fetches hit a cross-run content cache (",{"type":47,"tag":82,"props":2214,"children":2216},{"className":2215},[],[2217],{"type":53,"value":2218},"~\u002F.cache\u002Fideaspark\u002Ffulltext\u002F",{"type":53,"value":2220},", successful fetches only, 30-day TTL; disable with ",{"type":47,"tag":82,"props":2222,"children":2224},{"className":2223},[],[2225],{"type":53,"value":2226},"IDEASPARK_FETCH_CACHE=off",{"type":53,"value":2228},"), so papers recurring across runs on adjacent topics cost zero network time.",{"type":47,"tag":744,"props":2230,"children":2232},{"id":2231},"phase-1-bottleneck-identification",[2233],{"type":53,"value":2234},"Phase 1 — Bottleneck identification",{"type":47,"tag":56,"props":2236,"children":2237},{},[2238,2240,2245,2247,2253,2254,2260,2262,2268,2270,2276,2278,2284,2286,2292,2294,2300,2302,2308,2310,2316,2318,2324,2326,2332,2334,2340],{"type":53,"value":2239},"One isolated LLM call. Prompt: ",{"type":47,"tag":67,"props":2241,"children":2243},{"href":2242},"references\u002Fsystem-prompts\u002Fbottleneck_identify.txt",[2244],{"type":53,"value":2242},{"type":53,"value":2246},". Inputs: user query + intake, ",{"type":47,"tag":82,"props":2248,"children":2250},{"className":2249},[],[2251],{"type":53,"value":2252},"phase0\u002Flit_table.md",{"type":53,"value":625},{"type":47,"tag":82,"props":2255,"children":2257},{"className":2256},[],[2258],{"type":53,"value":2259},"phase0\u002Ffulltext_cache.json",{"type":53,"value":2261}," (all-failed cache → continue with ",{"type":47,"tag":82,"props":2263,"children":2265},{"className":2264},[],[2266],{"type":53,"value":2267},"fulltext_degraded: true",{"type":53,"value":2269},", abstract-level residue confidence), ",{"type":47,"tag":82,"props":2271,"children":2273},{"className":2272},[],[2274],{"type":53,"value":2275},"phase0\u002Flit_results.json",{"type":53,"value":2277},". Output ",{"type":47,"tag":82,"props":2279,"children":2281},{"className":2280},[],[2282],{"type":53,"value":2283},"phase1\u002Fphase1_output.json",{"type":53,"value":2285},": ",{"type":47,"tag":82,"props":2287,"children":2289},{"className":2288},[],[2290],{"type":53,"value":2291},"intake",{"type":53,"value":2293}," (+",{"type":47,"tag":82,"props":2295,"children":2297},{"className":2296},[],[2298],{"type":53,"value":2299},"_inferred_fields[]",{"type":53,"value":2301}," — missing fields are inferred, never asked), ",{"type":47,"tag":82,"props":2303,"children":2305},{"className":2304},[],[2306],{"type":53,"value":2307},"bottleneck_statement",{"type":53,"value":2309}," (≥2 paper_id cited inline), ",{"type":47,"tag":82,"props":2311,"children":2313},{"className":2312},[],[2314],{"type":53,"value":2315},"closest_adjacent[]",{"type":53,"value":2317}," (",{"type":47,"tag":82,"props":2319,"children":2321},{"className":2320},[],[2322],{"type":53,"value":2323},"{paper_id, summary_and_residue}",{"type":53,"value":2325},"), ",{"type":47,"tag":82,"props":2327,"children":2329},{"className":2328},[],[2330],{"type":53,"value":2331},"what_phase_0_did_not_address[]",{"type":53,"value":2333}," (each gap ends with an inline stakes clause — practitioner costs and intellectual costs are coequal; gaps are framed as structural properties of a problem class when honestly true, with the anchor as primary instance, else declared class-of-one), ",{"type":47,"tag":82,"props":2335,"children":2337},{"className":2336},[],[2338],{"type":53,"value":2339},"state ∈ {proceed, do_not_generate}",{"type":53,"value":112},{"type":47,"tag":56,"props":2342,"children":2343},{},[2344,2346,2351,2353,2357,2359,2364],{"type":53,"value":2345},"Routing: ",{"type":47,"tag":434,"props":2347,"children":2348},{},[2349],{"type":53,"value":2350},"proceed",{"type":53,"value":2352}," (literature-groundable, no OOD trigger) or ",{"type":47,"tag":434,"props":2354,"children":2355},{},[2356],{"type":53,"value":631},{"type":53,"value":2358}," (too-broad \u002F no-anchor OOD, \u003C5 truly-relevant papers, genuinely blank space, or benchmark\u002Fsystem construction) → write ",{"type":47,"tag":82,"props":2360,"children":2362},{"className":2361},[],[2363],{"type":53,"value":725},{"type":53,"value":2365}," with concrete remedial steps — terminal.",{"type":47,"tag":744,"props":2367,"children":2369},{"id":2368},"phase-2-selection-generation-one-isolated-context-two-outputs",[2370],{"type":53,"value":2371},"Phase 2 — Selection + generation (ONE isolated context, TWO outputs)",{"type":47,"tag":56,"props":2373,"children":2374},{},[2375],{"type":53,"value":2376},"Run 2.1 and 2.2 back-to-back in one isolated context, writing BOTH output files (they are both generation-side; only adversarial pairs need separate calls):",{"type":47,"tag":56,"props":2378,"children":2379},{},[2380,2385,2387,2392,2394,2400,2401,2407,2409,2415,2416,2421,2423,2429,2431,2437,2439,2445,2446,2452,2454,2460,2462,2468,2470,2475,2477,2483,2484,2490,2492,2497,2499,2505,2507,2512,2513,2518,2520,2526],{"type":47,"tag":434,"props":2381,"children":2382},{},[2383],{"type":53,"value":2384},"2.1",{"type":53,"value":2386}," — prompt ",{"type":47,"tag":67,"props":2388,"children":2390},{"href":2389},"references\u002Fsystem-prompts\u002Fideate_select.txt",[2391],{"type":53,"value":2389},{"type":53,"value":2393},"; inputs ",{"type":47,"tag":82,"props":2395,"children":2397},{"className":2396},[],[2398],{"type":53,"value":2399},"phase1_output.json",{"type":53,"value":625},{"type":47,"tag":82,"props":2402,"children":2404},{"className":2403},[],[2405],{"type":53,"value":2406},"references\u002Fideation-patterns\u002Foverview.md",{"type":53,"value":2408}," (all 15 patterns' Definition \u002F Operational signature \u002F When to apply — selection at WHAT\u002FWHEN level), ",{"type":47,"tag":82,"props":2410,"children":2412},{"className":2411},[],[2413],{"type":53,"value":2414},"references\u002Fideation-patterns\u002Fcompanion-combos.md",{"type":53,"value":625},{"type":47,"tag":82,"props":2417,"children":2419},{"className":2418},[],[2420],{"type":53,"value":1907},{"type":53,"value":2422},". Pick the anchor gap (type-bound to ",{"type":47,"tag":82,"props":2424,"children":2426},{"className":2425},[],[2427],{"type":53,"value":2428},"intake.contribution_type",{"type":53,"value":2430},"); commit the PATTERN COMPOSITION — ≥2 distinct patterns by default, realized preferentially as a CHAIN on the anchor (attested second pattern from companion-combos, with a named intermediate object) and\u002For via a sibling that EARNS its seat through the removal test (\"the anchor's story is incomplete without it\") — anchor-only is legitimate and common (1-3 gaps total, ≤2 siblings); a single-pattern selection requires a ",{"type":47,"tag":82,"props":2432,"children":2434},{"className":2433},[],[2435],{"type":53,"value":2436},"composition_note",{"type":53,"value":2438}," defense (validator presence-checks it; audit weighs it). Record saturation (transparency, not a filter). Output ",{"type":47,"tag":82,"props":2440,"children":2442},{"className":2441},[],[2443],{"type":53,"value":2444},"phase2_select\u002Fphase2_select_output.json",{"type":53,"value":2285},{"type":47,"tag":82,"props":2447,"children":2449},{"className":2448},[],[2450],{"type":53,"value":2451},"selected_gaps[]",{"type":53,"value":2453}," (index 0 = anchor) + ",{"type":47,"tag":82,"props":2455,"children":2457},{"className":2456},[],[2458],{"type":53,"value":2459},"coherence_thread_type",{"type":53,"value":2461}," (or ",{"type":47,"tag":82,"props":2463,"children":2465},{"className":2464},[],[2466],{"type":53,"value":2467},"n_a",{"type":53,"value":2469}," when anchor-only) + ",{"type":47,"tag":82,"props":2471,"children":2473},{"className":2472},[],[2474],{"type":53,"value":2436},{"type":53,"value":2476}," + ",{"type":47,"tag":82,"props":2478,"children":2480},{"className":2479},[],[2481],{"type":53,"value":2482},"pattern_saturation",{"type":53,"value":2476},{"type":47,"tag":82,"props":2485,"children":2487},{"className":2486},[],[2488],{"type":53,"value":2489},"deferred_gaps[]",{"type":53,"value":2491},". ",{"type":47,"tag":434,"props":2493,"children":2494},{},[2495],{"type":53,"value":2496},"Retry mode:",{"type":53,"value":2498}," when ",{"type":47,"tag":82,"props":2500,"children":2502},{"className":2501},[],[2503],{"type":53,"value":2504},"$RUN_DIR\u002Fattempt_1\u002F",{"type":53,"value":2506}," exists, the prompt's OPTIONAL retry input applies — the archived audit + selection become negative constraints; anchor-only is a valid retry outcome. ",{"type":47,"tag":434,"props":2508,"children":2509},{},[2510],{"type":53,"value":2511},"Cross-run dedup:",{"type":53,"value":522},{"type":47,"tag":82,"props":2514,"children":2516},{"className":2515},[],[2517],{"type":53,"value":425},{"type":53,"value":2519}," scans sibling run dirs and appends a soft-negative-anchor input line (titles + signature terms of their canonical candidates, 5 most recent) so adjacent-direction runs don't silently re-invent the same mechanism family; soft by design (see ideate_select.txt's OPTIONAL cross-run input), disable with ",{"type":47,"tag":82,"props":2521,"children":2523},{"className":2522},[],[2524],{"type":53,"value":2525},"IDEASPARK_CROSS_RUN_DEDUP=off",{"type":53,"value":112},{"type":47,"tag":56,"props":2528,"children":2529},{},[2530,2535,2536,2541,2543,2548,2549,2554,2556,2562,2564,2570,2571,2577,2579,2585,2587,2593,2595,2601,2602,2608,2609,2615,2616,2622,2623,2629,2631,2637,2638,2644,2646,2652,2654,2660,2662,2668,2670,2676,2678,2684,2685,2691,2692,2698,2700,2706,2708,2713,2715,2720,2722,2728,2730,2736,2738,2744,2745,2751,2752,2758,2760,2765,2767,2773,2775,2781,2783,2788,2789,2794],{"type":47,"tag":434,"props":2531,"children":2532},{},[2533],{"type":53,"value":2534},"2.2",{"type":53,"value":2386},{"type":47,"tag":67,"props":2537,"children":2539},{"href":2538},"references\u002Fsystem-prompts\u002Fideate_generate.txt",[2540],{"type":53,"value":2538},{"type":53,"value":2542},"; inputs 2.1 output, ",{"type":47,"tag":82,"props":2544,"children":2546},{"className":2545},[],[2547],{"type":53,"value":2399},{"type":53,"value":625},{"type":47,"tag":82,"props":2550,"children":2552},{"className":2551},[],[2553],{"type":53,"value":1804},{"type":53,"value":2555}," (closest_adjacent entries ONLY — filter to those paper_ids before reading; the prompt forbids pulling the full dump into context), plus for each gap ONE picked sub-pattern card from ",{"type":47,"tag":82,"props":2557,"children":2559},{"className":2558},[],[2560],{"type":53,"value":2561},"references\u002Fideation-sub-patterns\u002F",{"type":53,"value":2563}," (compare ",{"type":47,"tag":82,"props":2565,"children":2567},{"className":2566},[],[2568],{"type":53,"value":2569},"when_to_pick_this_one",{"type":53,"value":2476},{"type":47,"tag":82,"props":2572,"children":2574},{"className":2573},[],[2575],{"type":53,"value":2576},"differentiation_within_parent",{"type":53,"value":2578}," via its overview.md; then read the picked card's ",{"type":47,"tag":82,"props":2580,"children":2582},{"className":2581},[],[2583],{"type":53,"value":2584},"tactical_pattern",{"type":53,"value":2586}," + Step-by-Step). Output ",{"type":47,"tag":82,"props":2588,"children":2590},{"className":2589},[],[2591],{"type":53,"value":2592},"phase2_generate\u002Fphase2_generate_output.json",{"type":53,"value":2594}," — ONE candidate, 12 flat fields: ",{"type":47,"tag":82,"props":2596,"children":2598},{"className":2597},[],[2599],{"type":53,"value":2600},"title",{"type":53,"value":905},{"type":47,"tag":82,"props":2603,"children":2605},{"className":2604},[],[2606],{"type":53,"value":2607},"hook",{"type":53,"value":905},{"type":47,"tag":82,"props":2610,"children":2612},{"className":2611},[],[2613],{"type":53,"value":2614},"core_mechanism",{"type":53,"value":905},{"type":47,"tag":82,"props":2617,"children":2619},{"className":2618},[],[2620],{"type":53,"value":2621},"core_mechanism_reasoning",{"type":53,"value":905},{"type":47,"tag":82,"props":2624,"children":2626},{"className":2625},[],[2627],{"type":53,"value":2628},"core_mechanism_steps",{"type":53,"value":2630},"; ",{"type":47,"tag":82,"props":2632,"children":2634},{"className":2633},[],[2635],{"type":53,"value":2636},"gap_closure[]",{"type":53,"value":2317},{"type":47,"tag":82,"props":2639,"children":2641},{"className":2640},[],[2642],{"type":53,"value":2643},"{gap, main_pattern, sub_pattern: \"C## (parent pattern name)\", how_closed}",{"type":53,"value":2645},", mirrors selected_gaps one-for-one); ",{"type":47,"tag":82,"props":2647,"children":2649},{"className":2648},[],[2650],{"type":53,"value":2651},"falsification_prediction",{"type":53,"value":2653}," (single paragraph: minimal experiment + metric-with-direction + ONE named load-bearing variable + negative control on that variable predicting the DOWNSTREAM outcome metric returns to baseline — non-tautological); ",{"type":47,"tag":82,"props":2655,"children":2657},{"className":2656},[],[2658],{"type":53,"value":2659},"compute_budget",{"type":53,"value":2661}," (user-relative, GPU-day line + API-dollar line when the campaign calls paid APIs; default intake envelope = 80GB-class GPUs, ≤8 concurrent, ≈150 GPU-days \u002F 5 months, ~$10k API — overridable per user via ",{"type":47,"tag":82,"props":2663,"children":2665},{"className":2664},[],[2666],{"type":53,"value":2667},"IDEASPARK_DEFAULT_COMPUTE",{"type":53,"value":2669},", see § Configuration); ",{"type":47,"tag":82,"props":2671,"children":2673},{"className":2672},[],[2674],{"type":53,"value":2675},"differentiation_from_lit[]",{"type":53,"value":2677}," (substantive deltas, not \"different pattern\"); ",{"type":47,"tag":82,"props":2679,"children":2681},{"className":2680},[],[2682],{"type":53,"value":2683},"almost_prior_paper_id",{"type":53,"value":2476},{"type":47,"tag":82,"props":2686,"children":2688},{"className":2687},[],[2689],{"type":53,"value":2690},"what_step_was_missed",{"type":53,"value":2630},{"type":47,"tag":82,"props":2693,"children":2695},{"className":2694},[],[2696],{"type":53,"value":2697},"signature_terms[]",{"type":53,"value":2699}," (own vocabulary — recent collision channel); ",{"type":47,"tag":82,"props":2701,"children":2703},{"className":2702},[],[2704],{"type":53,"value":2705},"alias_terms[]",{"type":53,"value":2707}," (other communities' names for the same mechanism, from parametric knowledge — multi-year alias collision channel); ",{"type":47,"tag":82,"props":2709,"children":2711},{"className":2710},[],[2712],{"type":53,"value":2436},{"type":53,"value":2714}," (echoed verbatim from 2.1). Reality constraints at writing time: ",{"type":47,"tag":82,"props":2716,"children":2718},{"className":2717},[],[2719],{"type":53,"value":2621},{"type":53,"value":2721}," carries three mandatory blocks — a PREMISES ledger (load-bearing premises + domain justification; bets tagged ",{"type":47,"tag":82,"props":2723,"children":2725},{"className":2724},[],[2726],{"type":53,"value":2727},"untested — falsification target",{"type":53,"value":2729},"; WHEN the mechanism consumes sampled\u002Fobserved data, at least one OBSERVATION-MODEL premise — how are the inputs sampled, is that unbiased here — else the literal ",{"type":47,"tag":82,"props":2731,"children":2733},{"className":2732},[],[2734],{"type":53,"value":2735},"observation-model: n\u002Fa",{"type":53,"value":2737},"; WHEN the mechanism estimates any quantity, declare the ESTIMAND precisely), a NAIVE-BASELINE AUDIT (state the naive version; why doesn't it already work — branch (i) naive relies on a false premise → confronting it IS the contribution, with a STANDARD-TOOL FOLLOW-UP: if the confrontation is a textbook tool from another field, name the domain-specific structure that makes this instance unsolved or declare the contribution application-grade, (ii) naive suffices → incremental signal surfaced honestly, (iii) naive works but the field disbelieves → minimalism with evidence), then design rationale — plus every invoked dataset \u002F model-access level \u002F annotation \u002F tool must be a nameable EXISTING artifact (hard rule 3; modest self-built resources allowed with cost counted in compute_budget) and every claim stated at its defensible strength — guarantee-grade wording only with assumptions stated where it appears (hard rule 4; the coherence gate grades this, and a strong claim with honest assumptions beats a hedged weak one) — and every NUMBER carrying provenance (hard rule 5): method parameters are named symbols with a default + selection rule (a bare ",{"type":47,"tag":82,"props":2739,"children":2741},{"className":2740},[],[2742],{"type":53,"value":2743},">= 95%",{"type":53,"value":905},{"type":47,"tag":82,"props":2746,"children":2748},{"className":2747},[],[2749],{"type":53,"value":2750},"top 5",{"type":53,"value":905},{"type":47,"tag":82,"props":2753,"children":2755},{"className":2754},[],[2756],{"type":53,"value":2757},"every 2e3",{"type":53,"value":2759}," is forbidden — an unnamed quantity cannot be swept or graded), while ",{"type":47,"tag":82,"props":2761,"children":2763},{"className":2762},[],[2764],{"type":53,"value":2651},{"type":53,"value":2766}," states metric + direction + control and may carry a numeric bar ONLY when tagged ",{"type":47,"tag":82,"props":2768,"children":2770},{"className":2769},[],[2771],{"type":53,"value":2772},"derived:",{"type":53,"value":2774}," or ",{"type":47,"tag":82,"props":2776,"children":2778},{"className":2777},[],[2779],{"type":53,"value":2780},"measured in \u003Cpaper_id>",{"type":53,"value":2782},"; invented bars are fabrication. Artifact versions, algebraic constants, definitional settings and experiment-scale counts are not parameters and are unaffected. Both kill-switch fields (",{"type":47,"tag":82,"props":2784,"children":2786},{"className":2785},[],[2787],{"type":53,"value":2651},{"type":53,"value":625},{"type":47,"tag":82,"props":2790,"children":2792},{"className":2791},[],[2793],{"type":53,"value":2659},{"type":53,"value":2795},") are locked from here on — see Phase 3 for the single audited exception.",{"type":47,"tag":56,"props":2797,"children":2798},{},[2799],{"type":47,"tag":434,"props":2800,"children":2801},{},[2802],{"type":53,"value":2803},"Citation gate (deterministic, MANDATORY before Phase 3):",{"type":47,"tag":196,"props":2805,"children":2807},{"className":198,"code":2806,"language":200,"meta":201,"style":201},"python3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" validate --phase2 $RUN_DIR\u002Fphase2_generate\u002Fphase2_generate_output.json\n",[2808],{"type":47,"tag":82,"props":2809,"children":2810},{"__ignoreMap":201},[2811],{"type":47,"tag":207,"props":2812,"children":2813},{"class":209,"line":210},[2814,2818,2822,2826,2830,2834,2839,2844,2848],{"type":47,"tag":207,"props":2815,"children":2816},{"style":232},[2817],{"type":53,"value":308},{"type":47,"tag":207,"props":2819,"children":2820},{"style":220},[2821],{"type":53,"value":356},{"type":47,"tag":207,"props":2823,"children":2824},{"style":214},[2825],{"type":53,"value":361},{"type":47,"tag":207,"props":2827,"children":2828},{"style":226},[2829],{"type":53,"value":366},{"type":47,"tag":207,"props":2831,"children":2832},{"style":220},[2833],{"type":53,"value":280},{"type":47,"tag":207,"props":2835,"children":2836},{"style":226},[2837],{"type":53,"value":2838}," validate",{"type":47,"tag":207,"props":2840,"children":2841},{"style":226},[2842],{"type":53,"value":2843}," --phase2",{"type":47,"tag":207,"props":2845,"children":2846},{"style":214},[2847],{"type":53,"value":1666},{"type":47,"tag":207,"props":2849,"children":2850},{"style":226},[2851],{"type":53,"value":2852},"\u002Fphase2_generate\u002Fphase2_generate_output.json\n",{"type":47,"tag":56,"props":2854,"children":2855},{},[2856,2858,2864,2866,2872,2874,2880,2882,2888,2890,2896,2898,2903],{"type":53,"value":2857},"Any ",{"type":47,"tag":82,"props":2859,"children":2861},{"className":2860},[],[2862],{"type":53,"value":2863},"fail",{"type":53,"value":2865}," = a ",{"type":47,"tag":82,"props":2867,"children":2869},{"className":2868},[],[2870],{"type":53,"value":2871},"sub_pattern",{"type":53,"value":2873}," citation was guessed from the parent's gist, not read from ",{"type":47,"tag":82,"props":2875,"children":2877},{"className":2876},[],[2878],{"type":53,"value":2879},"overview.md",{"type":53,"value":2881},". Fix against ",{"type":47,"tag":82,"props":2883,"children":2885},{"className":2884},[],[2886],{"type":53,"value":2887},"references\u002Fideation-sub-patterns\u002Foverview.md",{"type":53,"value":2889}," (or regenerate 2.2 with the card open) and re-run until clean — the gate proves parent-consistency only; whether core_mechanism performs the cluster's actual tactic is Phase 3.2's ",{"type":47,"tag":82,"props":2891,"children":2893},{"className":2892},[],[2894],{"type":53,"value":2895},"recipe_application_check",{"type":53,"value":2897},". (",{"type":47,"tag":82,"props":2899,"children":2901},{"className":2900},[],[2902],{"type":53,"value":425},{"type":53,"value":2904}," runs this gate automatically.)",{"type":47,"tag":56,"props":2906,"children":2907},{},[2908,2913,2915,2920,2922,2927,2929,2935,2937,2943,2944,2950,2952,2958,2960,2966,2968,2974,2975,2981,2982,2987,2989,2994,2996,3002,3004,3010,3012,3018,3020,3026,3028,3033,3035,3040,3042,3048,3050,3055,3057,3062,3064,3070,3072,3077],{"type":47,"tag":434,"props":2909,"children":2910},{},[2911],{"type":53,"value":2912},"Coherence gate (2.3 — one isolated LLM call, MANDATORY after the citation gate, before the 3.2 audit; 3.1 collision may run CONCURRENTLY with it):",{"type":53,"value":2914}," prompt ",{"type":47,"tag":67,"props":2916,"children":2918},{"href":2917},"references\u002Fsystem-prompts\u002Fcoherence_trace.txt",[2919],{"type":53,"value":2917},{"type":53,"value":2921},"; inputs: the 2.2 candidate + the 2.1 spec; MUST be a FRESH context, never the 2.1+2.2 agent (the context that wrote a logic bug rubber-stamps it). It verifies internal procedural validity by EXECUTION, not review — five trace actions: formalize the dataflow (undefined symbols, missing producers, circular deps, and UNBOUND PARAMETERS — a number the procedure reads as a parameter but that carries no name\u002Fdefault\u002Fselection rule, the form a magic constant takes to evade every symbol-keyed check; method fields only, ",{"type":47,"tag":82,"props":2923,"children":2925},{"className":2924},[],[2926],{"type":53,"value":2651},{"type":53,"value":2928}," numbers belong to the audit), numeric dry-run on one small concrete instance (magnitude\u002Fprobability absurdities — logic bugs read fluently and only surface when computed; when a code-execution tool exists the gate WRITES AND RUNS a stdlib Python script and pastes script+output, else hand-computes marked ",{"type":47,"tag":82,"props":2930,"children":2932},{"className":2931},[],[2933],{"type":53,"value":2934},"unexecuted",{"type":53,"value":2936},"), degenerate probes (empty\u002Fk=0\u002Fties), claim→step mapping AND grading (every asserted property mapped to the step that establishes it AND graded ",{"type":47,"tag":82,"props":2938,"children":2940},{"className":2939},[],[2941],{"type":53,"value":2942},"established",{"type":53,"value":905},{"type":47,"tag":82,"props":2945,"children":2947},{"className":2946},[],[2948],{"type":53,"value":2949},"conditional",{"type":53,"value":2951}," — assumptions listed \u002F ",{"type":47,"tag":82,"props":2953,"children":2955},{"className":2954},[],[2956],{"type":53,"value":2957},"overclaim",{"type":53,"value":2959}," — wording downgraded \u002F ",{"type":47,"tag":82,"props":2961,"children":2963},{"className":2962},[],[2964],{"type":53,"value":2965},"empirical",{"type":53,"value":2967},"; statistical claims settled by an executed Monte Carlo with the measured number, theorem-shaped claims recorded as proof obligations — at best conditional; grading never rewards vagueness: all-hedged claims are themselves a weakness finding), and a NAIVE-BASELINE COMPARISON (independently construct the naive version — never the candidate's own stated one — run it on the same instance, and judge against the candidate's declared branch: ",{"type":47,"tag":82,"props":2969,"children":2971},{"className":2970},[],[2972],{"type":53,"value":2973},"confronts_obstacle",{"type":53,"value":905},{"type":47,"tag":82,"props":2976,"children":2978},{"className":2977},[],[2979],{"type":53,"value":2980},"equivalent_to_naive",{"type":53,"value":905},{"type":47,"tag":82,"props":2983,"children":2985},{"className":2984},[],[2986],{"type":53,"value":2467},{"type":53,"value":2988},"). OBSTACLE HOLES — findings whose honest fix is a redesign, or which coincide with the obstacle the candidate declares it exists to solve (incl. ",{"type":47,"tag":82,"props":2990,"children":2992},{"className":2991},[],[2993],{"type":53,"value":2980},{"type":53,"value":2995},") — must NOT be patched around with avoidance-style repairs (abstain\u002Fclamp\u002Fskip); they go to ",{"type":47,"tag":82,"props":2997,"children":2999},{"className":2998},[],[3000],{"type":53,"value":3001},"unrepaired[]",{"type":53,"value":3003}," as blocking, verbatim. Verdict ",{"type":47,"tag":82,"props":3005,"children":3007},{"className":3006},[],[3008],{"type":53,"value":3009},"pass",{"type":53,"value":3011}," | ",{"type":47,"tag":82,"props":3013,"children":3015},{"className":3014},[],[3016],{"type":53,"value":3017},"patched",{"type":53,"value":3019},"; repairs are patch-only via the SAME merger (",{"type":47,"tag":82,"props":3021,"children":3023},{"className":3022},[],[3024],{"type":53,"value":3025},"--out-name refined_candidate.json",{"type":53,"value":3027},"), scoped to making the written procedure sound (core_mechanism*, how_closed narrative, signature\u002Falias terms when the repair changed what the mechanism is) — novelty surface, pattern bindings, and kill-switch fields are out of scope; unfixable-without-redesign findings go to ",{"type":47,"tag":82,"props":3029,"children":3031},{"className":3030},[],[3032],{"type":53,"value":3001},{"type":53,"value":3034}," for the audit to weigh. Single pass, never abandons. The 3.2 audit stays blind to this report's trace\u002Fverdict\u002Fpatches — with ONE exception: blocking ",{"type":47,"tag":82,"props":3036,"children":3038},{"className":3037},[],[3039],{"type":53,"value":3001},{"type":53,"value":3041}," entries are executed evidence, so the gate ALSO writes them to ",{"type":47,"tag":82,"props":3043,"children":3045},{"className":3044},[],[3046],{"type":53,"value":3047},"phase2_coherence\u002Fblocking_findings.json",{"type":53,"value":3049}," (self-contained: verbatim step quote + script excerpt + measured numbers + reading_dependence per entry), which ",{"type":47,"tag":82,"props":3051,"children":3053},{"className":3052},[],[3054],{"type":53,"value":425},{"type":53,"value":3056}," lists as a 3.2 input; the audit must disposition each (uphold, or refute by naming a concrete modeling\u002Farithmetic flaw — ",{"type":47,"tag":82,"props":3058,"children":3060},{"className":3059},[],[3061],{"type":53,"value":425},{"type":53,"value":3063}," deterministically bounces an audit report that skipped dispositions or advanced over an upheld finding). Formalization ambiguity is controlled by the gate's dual-reading protocol (every defensible reading of an ambiguous operative term is executed; findings are tagged reading_robust vs reading_dependent). When ",{"type":47,"tag":82,"props":3065,"children":3067},{"className":3066},[],[3068],{"type":53,"value":3069},"refined_candidate.json",{"type":53,"value":3071}," exists it is the canonical candidate for every later phase (",{"type":47,"tag":82,"props":3073,"children":3075},{"className":3074},[],[3076],{"type":53,"value":425},{"type":53,"value":3078}," wires this automatically). It validates that the algorithm survives on paper — NOT that it works empirically (falsification experiment) or is novel (audit).",{"type":47,"tag":744,"props":3080,"children":3082},{"id":3081},"phase-3-quality-gauntlet",[3083],{"type":53,"value":3084},"Phase 3 — Quality gauntlet",{"type":47,"tag":56,"props":3086,"children":3087},{},[3088,3093,3095,3100,3102,3107,3108,3113,3115,3121,3123,3128,3130,3136,3138,3144,3146,3151,3153,3158,3160,3165,3166,3171,3173,3178,3180,3185,3187,3193,3195,3200],{"type":47,"tag":434,"props":3089,"children":3090},{},[3091],{"type":53,"value":3092},"3.1 collision (orchestrator, no LLM):",{"type":53,"value":3094}," entry-point table. May be LAUNCHED IN PARALLEL with the 2.3 gate (on the 2.2 output — ",{"type":47,"tag":82,"props":3096,"children":3098},{"className":3097},[],[3099],{"type":53,"value":425},{"type":53,"value":3101}," emits the background launch alongside the 2.3 step): collision reads only ",{"type":47,"tag":82,"props":3103,"children":3105},{"className":3104},[],[3106],{"type":53,"value":2697},{"type":53,"value":401},{"type":47,"tag":82,"props":3109,"children":3111},{"className":3110},[],[3112],{"type":53,"value":2705},{"type":53,"value":3114},", a ",{"type":47,"tag":82,"props":3116,"children":3118},{"className":3117},[],[3119],{"type":53,"value":3120},".collision_terms.json",{"type":53,"value":3122}," sidecar records the terms actually used, and ",{"type":47,"tag":82,"props":3124,"children":3126},{"className":3125},[],[3127],{"type":53,"value":425},{"type":53,"value":3129}," re-issues collision if a coherence patch changed those terms (rare — term repairs are scoped to mechanism-changing patches). TWO retrieval channels over all 4 connectors, merged into ",{"type":47,"tag":82,"props":3131,"children":3133},{"className":3132},[],[3134],{"type":53,"value":3135},"collision_hits.json",{"type":53,"value":3137}," with a per-hit ",{"type":47,"tag":82,"props":3139,"children":3141},{"className":3140},[],[3142],{"type":53,"value":3143},"collision_channel",{"type":53,"value":3145}," tag: ",{"type":47,"tag":434,"props":3147,"children":3148},{},[3149],{"type":53,"value":3150},"signature",{"type":53,"value":3152}," — the candidate's ",{"type":47,"tag":82,"props":3154,"children":3156},{"className":3155},[],[3157],{"type":53,"value":2697},{"type":53,"value":3159}," over a 10-month window (contemporaneous scoop risk); ",{"type":47,"tag":434,"props":3161,"children":3162},{},[3163],{"type":53,"value":3164},"alias",{"type":53,"value":3152},{"type":47,"tag":82,"props":3167,"children":3169},{"className":3168},[],[3170],{"type":53,"value":2705},{"type":53,"value":3172}," (other communities' names for the same mechanism, produced from parametric knowledge at 2.2) over a 48-month window (renamed-ancestor risk — the \"goal-conditioned success detector vs goal-image conditioned scorer\" blind spot is lexical, not temporal, so widening the signature window alone cannot catch it). Missing ",{"type":47,"tag":82,"props":3174,"children":3176},{"className":3175},[],[3177],{"type":53,"value":2697},{"type":53,"value":3179}," → rc=11 sentinel: produce BOTH term sets per intent-recognition.md Collision mode (terms 3-7 words each — long sentences break URL encoding), edit the candidate JSON, re-invoke. Missing only ",{"type":47,"tag":82,"props":3181,"children":3183},{"className":3182},[],[3184],{"type":53,"value":2705},{"type":53,"value":3186}," → loud warning, alias channel skipped (add the field and re-run to close the blind spot). The audit-facing pool is relevance-truncated per channel (≤120 hits\u002Fchannel by lexical overlap with the channel's own terms; zero-relevance BM25 noise dropped unconditionally; drops printed; untruncated pool preserved as ",{"type":47,"tag":82,"props":3188,"children":3190},{"className":3189},[],[3191],{"type":53,"value":3192},"collision_hits.full.json",{"type":53,"value":3194},"), so the audit can consume ",{"type":47,"tag":82,"props":3196,"children":3198},{"className":3197},[],[3199],{"type":53,"value":3135},{"type":53,"value":3201}," in a few sequential Read chunks — no jq two-pass triage needed.",{"type":47,"tag":56,"props":3203,"children":3204},{},[3205,3210,3211,3216,3218,3223,3224,3229,3230,3236,3237,3242,3244,3250,3252,3258,3260,3265,3267,3273,3275,3280],{"type":47,"tag":434,"props":3206,"children":3207},{},[3208],{"type":53,"value":3209},"3.2 audit (one isolated LLM call):",{"type":53,"value":2914},{"type":47,"tag":67,"props":3212,"children":3214},{"href":3213},"references\u002Fsystem-prompts\u002Fcritique.txt",[3215],{"type":53,"value":3213},{"type":53,"value":3217},"; inputs: candidate, 2.1 spec, ",{"type":47,"tag":82,"props":3219,"children":3221},{"className":3220},[],[3222],{"type":53,"value":1907},{"type":53,"value":625},{"type":47,"tag":82,"props":3225,"children":3227},{"className":3226},[],[3228],{"type":53,"value":3135},{"type":53,"value":625},{"type":47,"tag":82,"props":3231,"children":3233},{"className":3232},[],[3234],{"type":53,"value":3235},"references\u002Fanti-patterns.md",{"type":53,"value":625},{"type":47,"tag":82,"props":3238,"children":3240},{"className":3239},[],[3241],{"type":53,"value":3047},{"type":53,"value":3243}," when it exists (the 2.3 gate's executed blocking evidence — the report must disposition each entry, and advance is forbidden while one is upheld; a ",{"type":47,"tag":82,"props":3245,"children":3247},{"className":3246},[],[3248],{"type":53,"value":3249},"refuted",{"type":53,"value":3251}," disposition additionally triggers a bounded refutation re-check (",{"type":47,"tag":82,"props":3253,"children":3255},{"className":3254},[],[3256],{"type":53,"value":3257},"refutation_recheck.txt",{"type":53,"value":3259},", fresh call) that ",{"type":47,"tag":82,"props":3261,"children":3263},{"className":3262},[],[3264],{"type":53,"value":425},{"type":53,"value":3266}," requires before trusting the verdict — an invalid refutation counts as upheld and bounces the audit), and each cited sub-pattern card ",{"type":47,"tag":82,"props":3268,"children":3270},{"className":3269},[],[3271],{"type":53,"value":3272},"references\u002Fideation-sub-patterns\u002F\u003CC##>.md",{"type":53,"value":3274}," (strip the leading code from ",{"type":47,"tag":82,"props":3276,"children":3278},{"className":3277},[],[3279],{"type":53,"value":2871},{"type":53,"value":3281},"; typically 1-3 cards, others NOT loaded). Five corpus-anchored checks:",{"type":47,"tag":1093,"props":3283,"children":3284},{},[3285,3301],{"type":47,"tag":1097,"props":3286,"children":3287},{},[3288],{"type":47,"tag":1101,"props":3289,"children":3290},{},[3291,3296],{"type":47,"tag":1105,"props":3292,"children":3293},{},[3294],{"type":53,"value":3295},"Check",{"type":47,"tag":1105,"props":3297,"children":3298},{},[3299],{"type":53,"value":3300},"Question",{"type":47,"tag":1124,"props":3302,"children":3303},{},[3304,3333,3368,3389,3426],{"type":47,"tag":1101,"props":3305,"children":3306},{},[3307,3312],{"type":47,"tag":1131,"props":3308,"children":3309},{},[3310],{"type":53,"value":3311},"gap_closure_reject_check",{"type":47,"tag":1131,"props":3313,"children":3314},{},[3315,3317,3323,3325,3331],{"type":53,"value":3316},"does the candidate match a documented Reject lesson in each cited sub-pattern card (",{"type":47,"tag":82,"props":3318,"children":3320},{"className":3319},[],[3321],{"type":53,"value":3322},"## Tactical failure mode",{"type":53,"value":3324}," + ALL ",{"type":47,"tag":82,"props":3326,"children":3328},{"className":3327},[],[3329],{"type":53,"value":3330},"### Reject lessons",{"type":53,"value":3332}," bullets)?",{"type":47,"tag":1101,"props":3334,"children":3335},{},[3336,3340],{"type":47,"tag":1131,"props":3337,"children":3338},{},[3339],{"type":53,"value":2895},{"type":47,"tag":1131,"props":3341,"children":3342},{},[3343,3345,3350,3352,3358,3360,3366],{"type":53,"value":3344},"does ",{"type":47,"tag":82,"props":3346,"children":3348},{"className":3347},[],[3349],{"type":53,"value":2614},{"type":53,"value":3351}," actually perform the cited C## cluster's ",{"type":47,"tag":82,"props":3353,"children":3355},{"className":3354},[],[3356],{"type":53,"value":3357},"## Tactical pattern",{"type":53,"value":3359}," signature move, or only the parent's generic idea (",{"type":47,"tag":82,"props":3361,"children":3363},{"className":3362},[],[3364],{"type":53,"value":3365},"bypassed",{"type":53,"value":3367}," — the leading cause of incremental output)?",{"type":47,"tag":1101,"props":3369,"children":3370},{},[3371,3376],{"type":47,"tag":1131,"props":3372,"children":3373},{},[3374],{"type":53,"value":3375},"anti_pattern_check",{"type":47,"tag":1131,"props":3377,"children":3378},{},[3379,3381,3387],{"type":53,"value":3380},"if the SET of ",{"type":47,"tag":82,"props":3382,"children":3384},{"className":3383},[],[3385],{"type":53,"value":3386},"gap_closure[].main_pattern",{"type":53,"value":3388}," matches a reject-favored composition, is the required mitigation substantively delivered (artifact, not keyword)?",{"type":47,"tag":1101,"props":3390,"children":3391},{},[3392,3397],{"type":47,"tag":1131,"props":3393,"children":3394},{},[3395],{"type":53,"value":3396},"paper_pointed_threat",{"type":47,"tag":1131,"props":3398,"children":3399},{},[3400,3402,3408,3410,3416,3418,3424],{"type":53,"value":3401},"most specific subsuming\u002Fcompeting paper in ",{"type":47,"tag":82,"props":3403,"children":3405},{"className":3404},[],[3406],{"type":53,"value":3407},"lit_table ∪ collision_hits",{"type":53,"value":3409}," (both channels; alias-channel threats are NOT discounted for age); ",{"type":47,"tag":82,"props":3411,"children":3413},{"className":3412},[],[3414],{"type":53,"value":3415},"no_threat_found",{"type":53,"value":3417}," is valid — fabricating a generic threat is forbidden. Side output ",{"type":47,"tag":82,"props":3419,"children":3421},{"className":3420},[],[3422],{"type":53,"value":3423},"parametric_family_concern",{"type":53,"value":3425},": a named un-retrieved mechanism family from parametric knowledge (family name + query vocabulary, never specific paper cites) — soft signal only, flows to Phase 4 reviewer_concerns as a \"scoop-check X first\" flag",{"type":47,"tag":1101,"props":3427,"children":3428},{},[3429,3434],{"type":47,"tag":1131,"props":3430,"children":3431},{},[3432],{"type":53,"value":3433},"falsification_structure_check",{"type":47,"tag":1131,"props":3435,"children":3436},{},[3437,3438,3443,3445,3451,3453,3459,3461,3467],{"type":53,"value":3344},{"type":47,"tag":82,"props":3439,"children":3441},{"className":3440},[],[3442],{"type":53,"value":2651},{"type":53,"value":3444}," name the minimal experiment, the outcome metric + direction, ONE load-bearing variable, and a NON-tautological negative control targeting the downstream metric — and is every numeric outcome bar sourced (",{"type":47,"tag":82,"props":3446,"children":3448},{"className":3447},[],[3449],{"type":53,"value":3450},"numeric_bar_provenance",{"type":53,"value":3452}," ∈ none \u002F derived \u002F measured \u002F asserted \u002F invented — cost bars count, qualitative magnitude claims and design\u002Fscale\u002Fconditioning numbers do not; ",{"type":47,"tag":82,"props":3454,"children":3456},{"className":3455},[],[3457],{"type":53,"value":3458},"invented",{"type":53,"value":3460}," is a deficiency repaired by STRIKING the bar, which the contract states is a fabrication repair rather than a claim weakening, while ",{"type":47,"tag":82,"props":3462,"children":3464},{"className":3463},[],[3465],{"type":53,"value":3466},"asserted",{"type":53,"value":3468}," — a derivation claimed but left uncheckable — only routes to borderline, so a judgment call never forces a kill-switch edit)?",{"type":47,"tag":56,"props":3470,"children":3471},{},[3472,3474,3479,3481,3487,3489,3494,3496,3501,3503,3509,3511,3517,3519,3525,3526,3531,3532,3538,3540,3546],{"type":53,"value":3473},"Verdict is two-layer. ",{"type":47,"tag":434,"props":3475,"children":3476},{},[3477],{"type":53,"value":3478},"Hard floor",{"type":53,"value":3480}," (LLM cannot override) → ",{"type":47,"tag":82,"props":3482,"children":3484},{"className":3483},[],[3485],{"type":53,"value":3486},"abandon",{"type":53,"value":3488},": triggered Reject lesson \u002F unmitigatable anti-pattern \u002F exact-mechanism collision. ",{"type":47,"tag":434,"props":3490,"children":3491},{},[3492],{"type":53,"value":3493},"Soft judgment",{"type":53,"value":3495}," otherwise → ",{"type":47,"tag":82,"props":3497,"children":3499},{"className":3498},[],[3500],{"type":53,"value":665},{"type":53,"value":3502}," (only trivial borderlines; concerns surface in Phase 4's reviewer_concerns) or ",{"type":47,"tag":82,"props":3504,"children":3506},{"className":3505},[],[3507],{"type":53,"value":3508},"revise",{"type":53,"value":3510}," with concrete ",{"type":47,"tag":82,"props":3512,"children":3514},{"className":3513},[],[3515],{"type":53,"value":3516},"revision_targets[]",{"type":53,"value":3518}," (scopes: ",{"type":47,"tag":82,"props":3520,"children":3522},{"className":3521},[],[3523],{"type":53,"value":3524},"tactical",{"type":53,"value":905},{"type":47,"tag":82,"props":3527,"children":3529},{"className":3528},[],[3530],{"type":53,"value":2871},{"type":53,"value":905},{"type":47,"tag":82,"props":3533,"children":3535},{"className":3534},[],[3536],{"type":53,"value":3537},"falsification",{"type":53,"value":3539},"). ",{"type":47,"tag":82,"props":3541,"children":3543},{"className":3542},[],[3544],{"type":53,"value":3545},"verdict_rationale",{"type":53,"value":3547}," must cite specific check findings. The audit judges only — it never modifies the candidate.",{"type":47,"tag":56,"props":3549,"children":3550},{},[3551],{"type":47,"tag":434,"props":3552,"children":3553},{},[3554],{"type":53,"value":3555},"Routing on verdict:",{"type":47,"tag":121,"props":3557,"children":3558},{},[3559,3568,3789],{"type":47,"tag":125,"props":3560,"children":3561},{},[3562,3566],{"type":47,"tag":434,"props":3563,"children":3564},{},[3565],{"type":53,"value":665},{"type":53,"value":3567}," → Phase 4 reads the 2.2 candidate directly.",{"type":47,"tag":125,"props":3569,"children":3570},{},[3571,3575,3577,3582,3584,3589,3591,3597,3599,3604,3606,3612,3614,3620,3622,3628,3629,3635,3636,3642,3643,3649,3650,3656,3658,3663,3665,3671,3673,3679,3681,3687,3689,3694,3696,3701,3703,3708,3710,3716,3718,3723,3725,3730,3732,3738,3740,3746,3747,3753,3755,3760,3762,3767,3768,3773,3774,3779,3781,3787],{"type":47,"tag":434,"props":3572,"children":3573},{},[3574],{"type":53,"value":3508},{"type":53,"value":3576}," → ",{"type":47,"tag":434,"props":3578,"children":3579},{},[3580],{"type":53,"value":3581},"3.3",{"type":53,"value":3583}," (one isolated LLM call, prompt ",{"type":47,"tag":67,"props":3585,"children":3587},{"href":3586},"references\u002Fsystem-prompts\u002Frevise.txt",[3588],{"type":53,"value":3586},{"type":53,"value":3590},"): reads candidate + 2.1 spec + the revision brief (",{"type":47,"tag":82,"props":3592,"children":3594},{"className":3593},[],[3595],{"type":53,"value":3596},"phase3_revise_brief",{"type":53,"value":3598}," — ",{"type":47,"tag":82,"props":3600,"children":3602},{"className":3601},[],[3603],{"type":53,"value":425},{"type":53,"value":3605}," materializes ",{"type":47,"tag":82,"props":3607,"children":3609},{"className":3608},[],[3610],{"type":53,"value":3611},"revise_brief.json",{"type":53,"value":3613},", the audit minus the bulky reject-lesson quotations; full report stays on disk for lesson-specific lookups); emits patch-only ",{"type":47,"tag":82,"props":3615,"children":3617},{"className":3616},[],[3618],{"type":53,"value":3619},"applied_revisions[]",{"type":53,"value":3621}," — one entry per revision_target, ops ",{"type":47,"tag":82,"props":3623,"children":3625},{"className":3624},[],[3626],{"type":53,"value":3627},"replace",{"type":53,"value":905},{"type":47,"tag":82,"props":3630,"children":3632},{"className":3631},[],[3633],{"type":53,"value":3634},"append_sentence",{"type":53,"value":905},{"type":47,"tag":82,"props":3637,"children":3639},{"className":3638},[],[3640],{"type":53,"value":3641},"append_items",{"type":53,"value":905},{"type":47,"tag":82,"props":3644,"children":3646},{"className":3645},[],[3647],{"type":53,"value":3648},"swap_sub_pattern",{"type":53,"value":905},{"type":47,"tag":82,"props":3651,"children":3653},{"className":3652},[],[3654],{"type":53,"value":3655},"rewrite_falsification",{"type":53,"value":3657},", never echoes the candidate, never re-judges the verdict. Then run the ",{"type":47,"tag":434,"props":3659,"children":3660},{},[3661],{"type":53,"value":3662},"merger",{"type":53,"value":3664}," (entry-point table, WITH ",{"type":47,"tag":82,"props":3666,"children":3668},{"className":3667},[],[3669],{"type":53,"value":3670},"--critique",{"type":53,"value":3672},") → writes ",{"type":47,"tag":82,"props":3674,"children":3676},{"className":3675},[],[3677],{"type":53,"value":3678},"phase3_revise\u002Ffinal_candidate.json",{"type":53,"value":3680}," + back-injects it into the patch file. Kill-switch fields are merger-refused with ONE audited exception: a ",{"type":47,"tag":82,"props":3682,"children":3684},{"className":3683},[],[3685],{"type":53,"value":3686},"scope=falsification",{"type":53,"value":3688}," target from ",{"type":47,"tag":82,"props":3690,"children":3692},{"className":3691},[],[3693],{"type":53,"value":3433},{"type":53,"value":3695}," is applied via the dedicated ",{"type":47,"tag":82,"props":3697,"children":3699},{"className":3698},[],[3700],{"type":53,"value":3655},{"type":53,"value":3702}," op (authorization verified against the audit report via ",{"type":47,"tag":82,"props":3704,"children":3706},{"className":3705},[],[3707],{"type":53,"value":3670},{"type":53,"value":3709},"; same experiment\u002Fmetric\u002Fclaim, structure repaired; max one per run). When the merger prints ",{"type":47,"tag":82,"props":3711,"children":3713},{"className":3712},[],[3714],{"type":53,"value":3715},"falsification_rewritten",{"type":53,"value":3717},", run the ",{"type":47,"tag":434,"props":3719,"children":3720},{},[3721],{"type":53,"value":3722},"falsification re-audit",{"type":53,"value":3724}," (self-contained prompt ",{"type":47,"tag":67,"props":3726,"children":3728},{"href":3727},"references\u002Fsystem-prompts\u002Ffalsification_reaudit.txt",[3729],{"type":53,"value":3727},{"type":53,"value":3731},", reading the ",{"type":47,"tag":82,"props":3733,"children":3735},{"className":3734},[],[3736],{"type":53,"value":3737},"phase3_falsification_view",{"type":53,"value":3739}," slice of ",{"type":47,"tag":82,"props":3741,"children":3743},{"className":3742},[],[3744],{"type":53,"value":3745},"final_candidate.json",{"type":53,"value":3576},{"type":47,"tag":82,"props":3748,"children":3750},{"className":3749},[],[3751],{"type":53,"value":3752},"phase3_critique\u002Ffalsification_reaudit.json",{"type":53,"value":3754},"): ",{"type":47,"tag":82,"props":3756,"children":3758},{"className":3757},[],[3759],{"type":53,"value":665},{"type":53,"value":3761}," → Phase 4; ",{"type":47,"tag":82,"props":3763,"children":3765},{"className":3764},[],[3766],{"type":53,"value":3486},{"type":53,"value":3576},{"type":47,"tag":82,"props":3769,"children":3771},{"className":3770},[],[3772],{"type":53,"value":733},{"type":53,"value":2491},{"type":47,"tag":82,"props":3775,"children":3777},{"className":3776},[],[3778],{"type":53,"value":2659},{"type":53,"value":3780}," has no revision route under any scope. No ",{"type":47,"tag":82,"props":3782,"children":3784},{"className":3783},[],[3785],{"type":53,"value":3786},"composition",{"type":53,"value":3788}," scope — gap-level changes route through the abandon-retry below, never through patches.",{"type":47,"tag":125,"props":3790,"children":3791},{},[3792,3796,3797,3802,3804,3809,3811,3816,3818,4044,4048,4050,4053,4065,4066,4071,4073,4079,4081,4087,4089,4095,4097,4103,4105,4110],{"type":47,"tag":434,"props":3793,"children":3794},{},[3795],{"type":53,"value":3486},{"type":53,"value":3576},{"type":47,"tag":434,"props":3798,"children":3799},{},[3800],{"type":53,"value":3801},"information-gain retry rule",{"type":53,"value":3803}," (ONE rule, no death-type taxonomy; the one-shot guarantee bars asking the user, not internal regeneration). Every failed attempt's audit is reduced to a LESSON SET — upheld executed blocking findings (mechanism-level positive directives), unaddressable subsuming papers (mechanism-family negative anchors), triggered reject\u002Fanti-pattern\u002Frecipe lessons (generation-quality constraints). A retry must carry NEW lessons the previous generation did not have: the first abandon always retries (generation ran with zero audit information); a later abandon retries only if its lesson set adds entries beyond the union of all archived attempts' lessons, with the new lessons injected as directives. A REPEATED unaddressable-subsumption lesson across attempts binds at the FRAMING level instead → one bottleneck re-diagnosis (Phase 1 retry mode; ",{"type":47,"tag":82,"props":3805,"children":3807},{"className":3806},[],[3808],{"type":53,"value":631},{"type":53,"value":3810}," remains a legitimate exit), whose new framing gets exactly ONE candidate attempt. Termination: no new lessons, or the candidate-cycle cap (3 per framing; worst case 4 gauntlet cycles per run). ",{"type":47,"tag":82,"props":3812,"children":3814},{"className":3813},[],[3815],{"type":53,"value":425},{"type":53,"value":3817}," computes all of this deterministically from the archived critique reports. On the first abandon, archive the attempt and regenerate —",{"type":47,"tag":196,"props":3819,"children":3821},{"className":198,"code":3820,"language":200,"meta":201,"style":201},"mkdir -p \"$RUN_DIR\u002Fattempt_1\" && \\\nmv \"$RUN_DIR\u002Fphase2_select\" \"$RUN_DIR\u002Fphase2_generate\" \"$RUN_DIR\u002Fphase2_coherence\" \"$RUN_DIR\u002Fphase3_collision\" \\\n   \"$RUN_DIR\u002Fphase3_critique\" \"$RUN_DIR\u002Fphase3_revise\" \"$RUN_DIR\u002Fattempt_1\u002F\" 2>\u002Fdev\u002Fnull; \\\ntouch \"$RUN_DIR\u002F.retry_used\"\n",[3822],{"type":47,"tag":82,"props":3823,"children":3824},{"__ignoreMap":201},[3825,3865,3945,4019],{"type":47,"tag":207,"props":3826,"children":3827},{"class":209,"line":210},[3828,3833,3838,3842,3846,3851,3855,3860],{"type":47,"tag":207,"props":3829,"children":3830},{"style":232},[3831],{"type":53,"value":3832},"mkdir",{"type":47,"tag":207,"props":3834,"children":3835},{"style":226},[3836],{"type":53,"value":3837}," -p",{"type":47,"tag":207,"props":3839,"children":3840},{"style":220},[3841],{"type":53,"value":356},{"type":47,"tag":207,"props":3843,"children":3844},{"style":214},[3845],{"type":53,"value":489},{"type":47,"tag":207,"props":3847,"children":3848},{"style":226},[3849],{"type":53,"value":3850},"\u002Fattempt_1",{"type":47,"tag":207,"props":3852,"children":3853},{"style":220},[3854],{"type":53,"value":280},{"type":47,"tag":207,"props":3856,"children":3857},{"style":220},[3858],{"type":53,"value":3859}," &&",{"type":47,"tag":207,"props":3861,"children":3862},{"style":214},[3863],{"type":53,"value":3864}," \\\n",{"type":47,"tag":207,"props":3866,"children":3867},{"class":209,"line":264},[3868,3873,3877,3881,3886,3890,3894,3898,3903,3907,3911,3915,3920,3924,3928,3932,3937,3941],{"type":47,"tag":207,"props":3869,"children":3870},{"style":232},[3871],{"type":53,"value":3872},"mv",{"type":47,"tag":207,"props":3874,"children":3875},{"style":220},[3876],{"type":53,"value":356},{"type":47,"tag":207,"props":3878,"children":3879},{"style":214},[3880],{"type":53,"value":489},{"type":47,"tag":207,"props":3882,"children":3883},{"style":226},[3884],{"type":53,"value":3885},"\u002Fphase2_select",{"type":47,"tag":207,"props":3887,"children":3888},{"style":220},[3889],{"type":53,"value":280},{"type":47,"tag":207,"props":3891,"children":3892},{"style":220},[3893],{"type":53,"value":356},{"type":47,"tag":207,"props":3895,"children":3896},{"style":214},[3897],{"type":53,"value":489},{"type":47,"tag":207,"props":3899,"children":3900},{"style":226},[3901],{"type":53,"value":3902},"\u002Fphase2_generate",{"type":47,"tag":207,"props":3904,"children":3905},{"style":220},[3906],{"type":53,"value":280},{"type":47,"tag":207,"props":3908,"children":3909},{"style":220},[3910],{"type":53,"value":356},{"type":47,"tag":207,"props":3912,"children":3913},{"style":214},[3914],{"type":53,"value":489},{"type":47,"tag":207,"props":3916,"children":3917},{"style":226},[3918],{"type":53,"value":3919},"\u002Fphase2_coherence",{"type":47,"tag":207,"props":3921,"children":3922},{"style":220},[3923],{"type":53,"value":280},{"type":47,"tag":207,"props":3925,"children":3926},{"style":220},[3927],{"type":53,"value":356},{"type":47,"tag":207,"props":3929,"children":3930},{"style":214},[3931],{"type":53,"value":489},{"type":47,"tag":207,"props":3933,"children":3934},{"style":226},[3935],{"type":53,"value":3936},"\u002Fphase3_collision",{"type":47,"tag":207,"props":3938,"children":3939},{"style":220},[3940],{"type":53,"value":280},{"type":47,"tag":207,"props":3942,"children":3943},{"style":214},[3944],{"type":53,"value":3864},{"type":47,"tag":207,"props":3946,"children":3947},{"class":209,"line":302},[3948,3953,3957,3962,3966,3970,3974,3979,3983,3987,3991,3996,4000,4005,4010,4015],{"type":47,"tag":207,"props":3949,"children":3950},{"style":220},[3951],{"type":53,"value":3952},"   \"",{"type":47,"tag":207,"props":3954,"children":3955},{"style":214},[3956],{"type":53,"value":489},{"type":47,"tag":207,"props":3958,"children":3959},{"style":226},[3960],{"type":53,"value":3961},"\u002Fphase3_critique",{"type":47,"tag":207,"props":3963,"children":3964},{"style":220},[3965],{"type":53,"value":280},{"type":47,"tag":207,"props":3967,"children":3968},{"style":220},[3969],{"type":53,"value":356},{"type":47,"tag":207,"props":3971,"children":3972},{"style":214},[3973],{"type":53,"value":489},{"type":47,"tag":207,"props":3975,"children":3976},{"style":226},[3977],{"type":53,"value":3978},"\u002Fphase3_revise",{"type":47,"tag":207,"props":3980,"children":3981},{"style":220},[3982],{"type":53,"value":280},{"type":47,"tag":207,"props":3984,"children":3985},{"style":220},[3986],{"type":53,"value":356},{"type":47,"tag":207,"props":3988,"children":3989},{"style":214},[3990],{"type":53,"value":489},{"type":47,"tag":207,"props":3992,"children":3993},{"style":226},[3994],{"type":53,"value":3995},"\u002Fattempt_1\u002F",{"type":47,"tag":207,"props":3997,"children":3998},{"style":220},[3999],{"type":53,"value":280},{"type":47,"tag":207,"props":4001,"children":4002},{"style":220},[4003],{"type":53,"value":4004}," 2>",{"type":47,"tag":207,"props":4006,"children":4007},{"style":226},[4008],{"type":53,"value":4009},"\u002Fdev\u002Fnull",{"type":47,"tag":207,"props":4011,"children":4012},{"style":220},[4013],{"type":53,"value":4014},";",{"type":47,"tag":207,"props":4016,"children":4017},{"style":214},[4018],{"type":53,"value":3864},{"type":47,"tag":207,"props":4020,"children":4021},{"class":209,"line":346},[4022,4027,4031,4035,4040],{"type":47,"tag":207,"props":4023,"children":4024},{"style":232},[4025],{"type":53,"value":4026},"touch",{"type":47,"tag":207,"props":4028,"children":4029},{"style":220},[4030],{"type":53,"value":356},{"type":47,"tag":207,"props":4032,"children":4033},{"style":214},[4034],{"type":53,"value":489},{"type":47,"tag":207,"props":4036,"children":4037},{"style":226},[4038],{"type":53,"value":4039},"\u002F.retry_used",{"type":47,"tag":207,"props":4041,"children":4042},{"style":220},[4043],{"type":53,"value":512},{"type":47,"tag":4045,"props":4046,"children":4047},"br",{},[],{"type":53,"value":4049},"then re-run Phase 2 in retry mode (archived audit + selection = negative constraints; blocking obstacle findings = POSITIVE directives the new mechanism must confront), citation gate, 3.1, 3.2. Phase 0\u002F1 artifacts are reused as-is.",{"type":47,"tag":4045,"props":4051,"children":4052},{},[],{"type":47,"tag":434,"props":4054,"children":4055},{},[4056,4058,4063],{"type":53,"value":4057},"Later ",{"type":47,"tag":82,"props":4059,"children":4061},{"className":4060},[],[4062],{"type":53,"value":3486},{"type":53,"value":4064},"s → the same rule, deterministically",{"type":53,"value":2317},{"type":47,"tag":82,"props":4067,"children":4069},{"className":4068},[],[4070],{"type":53,"value":425},{"type":53,"value":4072}," compares this attempt's lesson set against the union over ",{"type":47,"tag":82,"props":4074,"children":4076},{"className":4075},[],[4077],{"type":53,"value":4078},"attempt_N\u002F",{"type":53,"value":4080}," archives): new mechanism-level lessons → directed retry to the next ",{"type":47,"tag":82,"props":4082,"children":4084},{"className":4083},[],[4085],{"type":53,"value":4086},"attempt_N",{"type":53,"value":4088}," (all archived audits + selections ride along as constraints; the fresh lessons are named in the emit); repeated subsumption lesson → bottleneck re-diagnosis (archive incl. ",{"type":47,"tag":82,"props":4090,"children":4092},{"className":4091},[],[4093],{"type":53,"value":4094},"phase1\u002F",{"type":53,"value":4096},", touch ",{"type":47,"tag":82,"props":4098,"children":4100},{"className":4099},[],[4101],{"type":53,"value":4102},".bottleneck_retry_used",{"type":53,"value":4104},"; the re-diagnosed framing gets ONE attempt); no new lessons \u002F cap reached \u002F post-bottleneck failure → write ",{"type":47,"tag":82,"props":4106,"children":4108},{"className":4107},[],[4109],{"type":53,"value":733},{"type":53,"value":4111}," citing EVERY attempt's verdict_rationale + triggering checks + user-side options — terminal.",{"type":47,"tag":744,"props":4113,"children":4115},{"id":4114},"phase-4-expansion-packaging",[4116],{"type":53,"value":4117},"Phase 4 — Expansion + packaging",{"type":47,"tag":56,"props":4119,"children":4120},{},[4121,4123,4128,4130,4136,4138,4143,4145,4151],{"type":53,"value":4122},"Six steps in order (",{"type":47,"tag":82,"props":4124,"children":4126},{"className":4125},[],[4127],{"type":53,"value":425},{"type":53,"value":4129}," emits each with the correct flags for the advance vs revise path — on the revise path ",{"type":47,"tag":82,"props":4131,"children":4133},{"className":4132},[],[4134],{"type":53,"value":4135},"--candidate",{"type":53,"value":4137}," is ",{"type":47,"tag":82,"props":4139,"children":4141},{"className":4140},[],[4142],{"type":53,"value":3745},{"type":53,"value":4144}," and ",{"type":47,"tag":82,"props":4146,"children":4148},{"className":4147},[],[4149],{"type":53,"value":4150},"--phase3-revise",{"type":53,"value":4152}," is passed; on advance it's the CANONICAL candidate (refined_candidate.json when 2.3 patched, else the 2.2 output) and the flag is omitted):",{"type":47,"tag":573,"props":4154,"children":4155},{},[4156,4234,4282,4363,4447],{"type":47,"tag":125,"props":4157,"children":4158},{},[4159,4164,4166,4172,4174,4180,4181,4187,4188,4194,4196,4202,4203,4209,4211,4217,4219,4225,4227,4233],{"type":47,"tag":434,"props":4160,"children":4161},{},[4162],{"type":53,"value":4163},"skeleton",{"type":53,"value":4165}," (orchestrator): populates every mechanical field — kill-switch echoes (byte-identical from the candidate), ",{"type":47,"tag":82,"props":4167,"children":4169},{"className":4168},[],[4170],{"type":53,"value":4171},"differentiation_from_lit",{"type":53,"value":4173}," venue_years, ",{"type":47,"tag":82,"props":4175,"children":4177},{"className":4176},[],[4178],{"type":53,"value":4179},"almost_prior_venue_year",{"type":53,"value":625},{"type":47,"tag":82,"props":4182,"children":4184},{"className":4183},[],[4185],{"type":53,"value":4186},"why_prior_stopped[].paper_id\u002Fvenue_year",{"type":53,"value":625},{"type":47,"tag":82,"props":4189,"children":4191},{"className":4190},[],[4192],{"type":53,"value":4193},"domain_landscape",{"type":53,"value":4195}," (pattern_distribution + candidate_uses), ",{"type":47,"tag":82,"props":4197,"children":4199},{"className":4198},[],[4200],{"type":53,"value":4201},"literature_breakdown",{"type":53,"value":625},{"type":47,"tag":82,"props":4204,"children":4206},{"className":4205},[],[4207],{"type":53,"value":4208},"reviewer_concerns_and_responses[].attack\u002Fseverity\u002Ffields_changed_to_address",{"type":53,"value":4210}," (lifted from audit + patch), ",{"type":47,"tag":82,"props":4212,"children":4214},{"className":4213},[],[4215],{"type":53,"value":4216},"feasibility_validation.compute",{"type":53,"value":4218}," (bucketed against ",{"type":47,"tag":82,"props":4220,"children":4222},{"className":4221},[],[4223],{"type":53,"value":4224},"intake.compute",{"type":53,"value":4226},") — and marks every prose field ",{"type":47,"tag":82,"props":4228,"children":4230},{"className":4229},[],[4231],{"type":53,"value":4232},"\u003CTODO[path]: hint>",{"type":53,"value":112},{"type":47,"tag":125,"props":4235,"children":4236},{},[4237,4242,4243,4248,4250,4256,4258,4264,4266,4272,4274,4280],{"type":47,"tag":434,"props":4238,"children":4239},{},[4240],{"type":53,"value":4241},"fill",{"type":53,"value":3583},{"type":47,"tag":67,"props":4244,"children":4246},{"href":4245},"references\u002Fsystem-prompts\u002Fexpand.txt",[4247],{"type":53,"value":4245},{"type":53,"value":4249},"): author the TECHNICAL TODO paths as one flat ",{"type":47,"tag":82,"props":4251,"children":4253},{"className":4252},[],[4254],{"type":53,"value":4255},"{path: value}",{"type":53,"value":4257}," map → ",{"type":47,"tag":82,"props":4259,"children":4261},{"className":4260},[],[4262],{"type":53,"value":4263},"phase4\u002Ffill_map.json",{"type":53,"value":4265},". The derive-owned paths (",{"type":47,"tag":82,"props":4267,"children":4269},{"className":4268},[],[4270],{"type":53,"value":4271},"title_zh",{"type":53,"value":4273}," + all ",{"type":47,"tag":82,"props":4275,"children":4277},{"className":4276},[],[4278],{"type":53,"value":4279},"plain_*",{"type":53,"value":4281},") are explicitly EXCLUDED — the derive step owns them. No calendar projections; no experiment matrix \u002F ablation plan \u002F baseline table — the skill produces IDEA + falsifiability + feasibility judgment, not experimental engineering.",{"type":47,"tag":125,"props":4283,"children":4284},{},[4285,4290,4292,4298,4300,4305,4306,4311,4313,4318,4319,4324,4325,4331,4333,4338,4340,4346,4348,4354,4355,4361],{"type":47,"tag":434,"props":4286,"children":4287},{},[4288],{"type":53,"value":4289},"assemble (partial) → derive → assemble (final)",{"type":53,"value":4291},": the orchestrator assembles the technical map first (",{"type":47,"tag":82,"props":4293,"children":4295},{"className":4294},[],[4296],{"type":53,"value":4297},"phase4_expansion.json",{"type":53,"value":4299},", derive-owned placeholders remain — the WARN is expected); then ",{"type":47,"tag":434,"props":4301,"children":4302},{},[4303],{"type":53,"value":4304},"derive",{"type":53,"value":3583},{"type":47,"tag":67,"props":4307,"children":4309},{"href":4308},"references\u002Fsystem-prompts\u002Fderive_plain.txt",[4310],{"type":53,"value":4308},{"type":53,"value":4312},") mechanically rewrites the finished technical fields into the plain register (",{"type":47,"tag":82,"props":4314,"children":4316},{"className":4315},[],[4317],{"type":53,"value":4271},{"type":53,"value":2476},{"type":47,"tag":82,"props":4320,"children":4322},{"className":4321},[],[4323],{"type":53,"value":4279},{"type":53,"value":3576},{"type":47,"tag":82,"props":4326,"children":4328},{"className":4327},[],[4329],{"type":53,"value":4330},"phase4\u002Fderive_map.json",{"type":53,"value":4332},") — register transformation + translation with NO new facts, so it runs on the CLASSIFY_FAST tier by default (fallback ladder: ",{"type":47,"tag":82,"props":4334,"children":4336},{"className":4335},[],[4337],{"type":53,"value":821},{"type":53,"value":4339}," → host cheap model → host model isolated; even the last rung keeps it cheap since the input is only the finished prose); then the final assemble merges both maps (",{"type":47,"tag":82,"props":4341,"children":4343},{"className":4342},[],[4344],{"type":53,"value":4345},"phase4_assemble --fill-map \u003Ctech> --fill-map \u003Cderive>",{"type":53,"value":4347}," — overlapping paths are a hard error) and extracts ",{"type":47,"tag":82,"props":4349,"children":4351},{"className":4350},[],[4352],{"type":53,"value":4353},"phase4\u002Fmethod_view.json",{"type":53,"value":2317},{"type":47,"tag":82,"props":4356,"children":4358},{"className":4357},[],[4359],{"type":53,"value":4360},"phase4_method_view",{"type":53,"value":4362}," — the method-only slice the 4.1.5 audit reads: method_flow + plain steps + key_equations + claims). The assembler validates every path resolves to a real TODO and refuses kill-switch roots per map.",{"type":47,"tag":125,"props":4364,"children":4365},{},[4366,4371,4372,4377,4379,4385,4387,4393,4395,4401,4402,4408,4409,4415,4417,4423,4424,4430,4432,4438,4440,4446],{"type":47,"tag":434,"props":4367,"children":4368},{},[4369],{"type":53,"value":4370},"implementability audit (4.1.5, one isolated LLM call, default on):",{"type":53,"value":2914},{"type":47,"tag":67,"props":4373,"children":4375},{"href":4374},"references\u002Fsystem-prompts\u002Fimplementability_audit.txt",[4376],{"type":53,"value":4374},{"type":53,"value":4378}," — fresh skeptical-engineer persona (separate from the 4.fill author) reads ",{"type":47,"tag":82,"props":4380,"children":4382},{"className":4381},[],[4383],{"type":53,"value":4384},"method_view.json",{"type":53,"value":4386}," (fallback: the full expansion) and rewrites each method step into a buildable spec: ",{"type":47,"tag":82,"props":4388,"children":4390},{"className":4389},[],[4391],{"type":53,"value":4392},"enriched_steps[]",{"type":53,"value":4394}," (one per step, same ids\u002Forder, ",{"type":47,"tag":82,"props":4396,"children":4398},{"className":4397},[],[4399],{"type":53,"value":4400},"what_changes",{"type":53,"value":2476},{"type":47,"tag":82,"props":4403,"children":4405},{"className":4404},[],[4406],{"type":53,"value":4407},"what_to_do_en",{"type":53,"value":2476},{"type":47,"tag":82,"props":4410,"children":4412},{"className":4411},[],[4413],{"type":53,"value":4414},"what_to_do_zh",{"type":53,"value":4416},") + ",{"type":47,"tag":82,"props":4418,"children":4420},{"className":4419},[],[4421],{"type":53,"value":4422},"underspecified_points[]",{"type":53,"value":2317},{"type":47,"tag":82,"props":4425,"children":4427},{"className":4426},[],[4428],{"type":53,"value":4429},"{step_id, hole, fill, severity: filled|open}",{"type":53,"value":4431}," — unfillable holes stay honest as ",{"type":47,"tag":82,"props":4433,"children":4435},{"className":4434},[],[4436],{"type":53,"value":4437},"open",{"type":53,"value":4439},"). Compute-agnostic by design (resource feasibility is 4.1's job); never adds\u002Fremoves\u002Frenames steps; never carries kill-switch fields. Output ",{"type":47,"tag":82,"props":4441,"children":4443},{"className":4442},[],[4444],{"type":53,"value":4445},"phase4\u002Fphase4_implementability.json",{"type":53,"value":112},{"type":47,"tag":125,"props":4448,"children":4449},{},[4450,4455,4457,4463,4465,4471,4473,4479,4481,4487,4489,4495,4497,4503],{"type":47,"tag":434,"props":4451,"children":4452},{},[4453],{"type":53,"value":4454},"validate + render:",{"type":53,"value":4456}," run the validators (below), then ",{"type":47,"tag":82,"props":4458,"children":4460},{"className":4459},[],[4461],{"type":53,"value":4462},"phase4_render",{"type":53,"value":4464}," — templating only, no model call; auto-detects the sibling implementability file and merges ",{"type":47,"tag":82,"props":4466,"children":4468},{"className":4467},[],[4469],{"type":53,"value":4470},"enriched_steps",{"type":53,"value":4472}," by step_id into the rendered Method (deterministic; no-op when absent). Writes ",{"type":47,"tag":82,"props":4474,"children":4476},{"className":4475},[],[4477],{"type":53,"value":4478},"idea.std.zh.md",{"type":53,"value":4480}," (plain Chinese, domain-newcomer register) + ",{"type":47,"tag":82,"props":4482,"children":4484},{"className":4483},[],[4485],{"type":53,"value":4486},"idea.std.en.md",{"type":53,"value":4488}," (plain English) + ",{"type":47,"tag":82,"props":4490,"children":4492},{"className":4491},[],[4493],{"type":53,"value":4494},"idea.detail.en.md",{"type":53,"value":4496}," (rigorous English — the novelty + validity defense) + ",{"type":47,"tag":82,"props":4498,"children":4500},{"className":4499},[],[4501],{"type":53,"value":4502},"idea.std.{en,zh}.tex",{"type":53,"value":4504}," (auto-compiled to PDF when xelatex\u002Ftectonic is on PATH; skipped with a hint otherwise).",{"type":47,"tag":56,"props":4506,"children":4507},{},[4508,4513],{"type":47,"tag":434,"props":4509,"children":4510},{},[4511],{"type":53,"value":4512},"Final response:",{"type":53,"value":4514}," read all three markdown cards and return them inline under headings 中文版 \u002F English \u002F Reviewer version. Other phase outputs stay on disk for inspection, not echoed.",{"type":47,"tag":114,"props":4516,"children":4518},{"id":4517},"validators",[4519],{"type":53,"value":1436},{"type":47,"tag":196,"props":4521,"children":4523},{"className":198,"code":4522,"language":200,"meta":201,"style":201},"# advance path: --phase3 = phase3_critique_output.json; revise path: --phase3 = phase3_revise_output.json\n# --phase2 = the CANONICAL candidate (refined_candidate.json when 2.3 patched, else the 2.2 output)\npython3 \"$SKILL_DIR\u002Fscripts\u002Frun.py\" validate \\\n  --phase2 \u003Ccanonical candidate file> \\\n  --phase3 \u003Csee comment> \\\n  --phase4 $RUN_DIR\u002Fphase4\u002Fphase4_expansion.json \\\n  --phase4-impl $RUN_DIR\u002Fphase4\u002Fphase4_implementability.json   # optional; enables implementability checks\n",[4524],{"type":47,"tag":82,"props":4525,"children":4526},{"__ignoreMap":201},[4527,4535,4543,4574,4615,4651,4672],{"type":47,"tag":207,"props":4528,"children":4529},{"class":209,"line":210},[4530],{"type":47,"tag":207,"props":4531,"children":4532},{"style":258},[4533],{"type":53,"value":4534},"# advance path: --phase3 = phase3_critique_output.json; revise path: --phase3 = phase3_revise_output.json\n",{"type":47,"tag":207,"props":4536,"children":4537},{"class":209,"line":264},[4538],{"type":47,"tag":207,"props":4539,"children":4540},{"style":258},[4541],{"type":53,"value":4542},"# --phase2 = the CANONICAL candidate (refined_candidate.json when 2.3 patched, else the 2.2 output)\n",{"type":47,"tag":207,"props":4544,"children":4545},{"class":209,"line":302},[4546,4550,4554,4558,4562,4566,4570],{"type":47,"tag":207,"props":4547,"children":4548},{"style":232},[4549],{"type":53,"value":308},{"type":47,"tag":207,"props":4551,"children":4552},{"style":220},[4553],{"type":53,"value":356},{"type":47,"tag":207,"props":4555,"children":4556},{"style":214},[4557],{"type":53,"value":361},{"type":47,"tag":207,"props":4559,"children":4560},{"style":226},[4561],{"type":53,"value":366},{"type":47,"tag":207,"props":4563,"children":4564},{"style":220},[4565],{"type":53,"value":280},{"type":47,"tag":207,"props":4567,"children":4568},{"style":226},[4569],{"type":53,"value":2838},{"type":47,"tag":207,"props":4571,"children":4572},{"style":214},[4573],{"type":53,"value":3864},{"type":47,"tag":207,"props":4575,"children":4576},{"class":209,"line":346},[4577,4582,4587,4592,4597,4602,4607,4611],{"type":47,"tag":207,"props":4578,"children":4579},{"style":226},[4580],{"type":53,"value":4581},"  --phase2",{"type":47,"tag":207,"props":4583,"children":4584},{"style":220},[4585],{"type":53,"value":4586}," \u003C",{"type":47,"tag":207,"props":4588,"children":4589},{"style":226},[4590],{"type":53,"value":4591},"canonical",{"type":47,"tag":207,"props":4593,"children":4594},{"style":226},[4595],{"type":53,"value":4596}," candidate",{"type":47,"tag":207,"props":4598,"children":4599},{"style":226},[4600],{"type":53,"value":4601}," fil",{"type":47,"tag":207,"props":4603,"children":4604},{"style":214},[4605],{"type":53,"value":4606},"e",{"type":47,"tag":207,"props":4608,"children":4609},{"style":220},[4610],{"type":53,"value":255},{"type":47,"tag":207,"props":4612,"children":4613},{"style":214},[4614],{"type":53,"value":3864},{"type":47,"tag":207,"props":4616,"children":4618},{"class":209,"line":4617},5,[4619,4624,4628,4633,4638,4643,4647],{"type":47,"tag":207,"props":4620,"children":4621},{"style":226},[4622],{"type":53,"value":4623},"  --phase3",{"type":47,"tag":207,"props":4625,"children":4626},{"style":220},[4627],{"type":53,"value":4586},{"type":47,"tag":207,"props":4629,"children":4630},{"style":226},[4631],{"type":53,"value":4632},"see",{"type":47,"tag":207,"props":4634,"children":4635},{"style":226},[4636],{"type":53,"value":4637}," commen",{"type":47,"tag":207,"props":4639,"children":4640},{"style":214},[4641],{"type":53,"value":4642},"t",{"type":47,"tag":207,"props":4644,"children":4645},{"style":220},[4646],{"type":53,"value":255},{"type":47,"tag":207,"props":4648,"children":4649},{"style":214},[4650],{"type":53,"value":3864},{"type":47,"tag":207,"props":4652,"children":4653},{"class":209,"line":27},[4654,4659,4663,4668],{"type":47,"tag":207,"props":4655,"children":4656},{"style":226},[4657],{"type":53,"value":4658},"  --phase4",{"type":47,"tag":207,"props":4660,"children":4661},{"style":214},[4662],{"type":53,"value":1666},{"type":47,"tag":207,"props":4664,"children":4665},{"style":226},[4666],{"type":53,"value":4667},"\u002Fphase4\u002Fphase4_expansion.json",{"type":47,"tag":207,"props":4669,"children":4670},{"style":214},[4671],{"type":53,"value":3864},{"type":47,"tag":207,"props":4673,"children":4675},{"class":209,"line":4674},7,[4676,4681,4685,4690],{"type":47,"tag":207,"props":4677,"children":4678},{"style":226},[4679],{"type":53,"value":4680},"  --phase4-impl",{"type":47,"tag":207,"props":4682,"children":4683},{"style":214},[4684],{"type":53,"value":1666},{"type":47,"tag":207,"props":4686,"children":4687},{"style":226},[4688],{"type":53,"value":4689},"\u002Fphase4\u002Fphase4_implementability.json",{"type":47,"tag":207,"props":4691,"children":4692},{"style":258},[4693],{"type":53,"value":4694},"   # optional; enables implementability checks\n",{"type":47,"tag":1093,"props":4696,"children":4697},{},[4698,4718],{"type":47,"tag":1097,"props":4699,"children":4700},{},[4701],{"type":47,"tag":1101,"props":4702,"children":4703},{},[4704,4709,4713],{"type":47,"tag":1105,"props":4705,"children":4706},{},[4707],{"type":53,"value":4708},"Validator",{"type":47,"tag":1105,"props":4710,"children":4711},{},[4712],{"type":53,"value":3295},{"type":47,"tag":1105,"props":4714,"children":4715},{},[4716],{"type":53,"value":4717},"Severity",{"type":47,"tag":1124,"props":4719,"children":4720},{},[4721,4758,4824,4911,4950],{"type":47,"tag":1101,"props":4722,"children":4723},{},[4724,4732,4753],{"type":47,"tag":1131,"props":4725,"children":4726},{},[4727],{"type":47,"tag":434,"props":4728,"children":4729},{},[4730],{"type":53,"value":4731},"subpattern_citation_consistency",{"type":47,"tag":1131,"props":4733,"children":4734},{},[4735,4737,4743,4745,4751],{"type":53,"value":4736},"each ",{"type":47,"tag":82,"props":4738,"children":4740},{"className":4739},[],[4741],{"type":53,"value":4742},"gap_closure[].sub_pattern",{"type":53,"value":4744}," resolves to a real C## cluster in overview.md whose true parent == the cited ",{"type":47,"tag":82,"props":4746,"children":4748},{"className":4747},[],[4749],{"type":53,"value":4750},"main_pattern",{"type":53,"value":4752}," and whose parenthetical == that cluster's parent display name. Primary use: the Phase 2.2 citation gate; re-runs harmlessly here.",{"type":47,"tag":1131,"props":4754,"children":4755},{},[4756],{"type":53,"value":4757},"fail (hard)",{"type":47,"tag":1101,"props":4759,"children":4760},{},[4761,4769,4820],{"type":47,"tag":1131,"props":4762,"children":4763},{},[4764],{"type":47,"tag":434,"props":4765,"children":4766},{},[4767],{"type":53,"value":4768},"kill_switch_integrity",{"type":47,"tag":1131,"props":4770,"children":4771},{},[4772,4777,4778,4783,4785,4790,4792,4797,4799,4804,4806,4811,4813,4818],{"type":47,"tag":82,"props":4773,"children":4775},{"className":4774},[],[4776],{"type":53,"value":2651},{"type":53,"value":2476},{"type":47,"tag":82,"props":4779,"children":4781},{"className":4780},[],[4782],{"type":53,"value":2659},{"type":53,"value":4784}," byte-identical along Phase 2.2 → ",{"type":47,"tag":207,"props":4786,"children":4787},{},[4788],{"type":53,"value":4789},"3.3 final_candidate →",{"type":53,"value":4791}," 4. After an audited falsification rewrite (",{"type":47,"tag":82,"props":4793,"children":4795},{"className":4794},[],[4796],{"type":53,"value":3715},{"type":53,"value":4798}," marker + matching applied ",{"type":47,"tag":82,"props":4800,"children":4802},{"className":4801},[],[4803],{"type":53,"value":3655},{"type":53,"value":4805}," entry — disagreement fails), the anchor for ",{"type":47,"tag":82,"props":4807,"children":4809},{"className":4808},[],[4810],{"type":53,"value":2651},{"type":53,"value":4812}," re-bases at the 3.3 final_candidate (3.3 → 4 must match); ",{"type":47,"tag":82,"props":4814,"children":4816},{"className":4815},[],[4817],{"type":53,"value":2659},{"type":53,"value":4819}," stays full-chain always.",{"type":47,"tag":1131,"props":4821,"children":4822},{},[4823],{"type":53,"value":4757},{"type":47,"tag":1101,"props":4825,"children":4826},{},[4827,4835,4907],{"type":47,"tag":1131,"props":4828,"children":4829},{},[4830],{"type":47,"tag":434,"props":4831,"children":4832},{},[4833],{"type":53,"value":4834},"expansion_completeness",{"type":47,"tag":1131,"props":4836,"children":4837},{},[4838,4840,4846,4847,4853,4855,4861,4862,4868,4869,4875,4877,4883,4885,4891,4892,4898,4899,4905],{"type":53,"value":4839},"motivation (≥2 ",{"type":47,"tag":82,"props":4841,"children":4843},{"className":4842},[],[4844],{"type":53,"value":4845},"why_prior_stopped",{"type":53,"value":2325},{"type":47,"tag":82,"props":4848,"children":4850},{"className":4849},[],[4851],{"type":53,"value":4852},"method_flow.steps[]",{"type":53,"value":4854}," (each with ",{"type":47,"tag":82,"props":4856,"children":4858},{"className":4857},[],[4859],{"type":53,"value":4860},"linked_component",{"type":53,"value":2476},{"type":47,"tag":82,"props":4863,"children":4865},{"className":4864},[],[4866],{"type":53,"value":4867},"linked_falsification",{"type":53,"value":2325},{"type":47,"tag":82,"props":4870,"children":4872},{"className":4871},[],[4873],{"type":53,"value":4874},"feasibility_validation",{"type":53,"value":4876}," (5 sub-verdicts + ",{"type":47,"tag":82,"props":4878,"children":4880},{"className":4879},[],[4881],{"type":53,"value":4882},"overall",{"type":53,"value":4884},"), non-empty ",{"type":47,"tag":82,"props":4886,"children":4888},{"className":4887},[],[4889],{"type":53,"value":4890},"abstract_draft",{"type":53,"value":2476},{"type":47,"tag":82,"props":4893,"children":4895},{"className":4894},[],[4896],{"type":53,"value":4897},"core_claim",{"type":53,"value":2476},{"type":47,"tag":82,"props":4900,"children":4902},{"className":4901},[],[4903],{"type":53,"value":4904},"sub_claims[]",{"type":53,"value":4906}," — missing sections would render as silent blanks.",{"type":47,"tag":1131,"props":4908,"children":4909},{},[4910],{"type":53,"value":4757},{"type":47,"tag":1101,"props":4912,"children":4913},{},[4914,4922,4946],{"type":47,"tag":1131,"props":4915,"children":4916},{},[4917],{"type":47,"tag":434,"props":4918,"children":4919},{},[4920],{"type":53,"value":4921},"implementability_completeness",{"type":47,"tag":1131,"props":4923,"children":4924},{},[4925,4930,4932,4937,4939,4944],{"type":47,"tag":82,"props":4926,"children":4928},{"className":4927},[],[4929],{"type":53,"value":4392},{"type":53,"value":4931}," one-per-step (same ids\u002Forder, EN+ZH), ",{"type":47,"tag":82,"props":4933,"children":4935},{"className":4934},[],[4936],{"type":53,"value":4422},{"type":53,"value":4938}," present (",{"type":47,"tag":82,"props":4940,"children":4942},{"className":4941},[],[4943],{"type":53,"value":1970},{"type":53,"value":4945}," allowed), NO kill-switch field in the file.",{"type":47,"tag":1131,"props":4947,"children":4948},{},[4949],{"type":53,"value":4757},{"type":47,"tag":1101,"props":4951,"children":4952},{},[4953,4961,4981],{"type":47,"tag":1131,"props":4954,"children":4955},{},[4956],{"type":47,"tag":434,"props":4957,"children":4958},{},[4959],{"type":53,"value":4960},"implementability_readability",{"type":47,"tag":1131,"props":4962,"children":4963},{},[4964,4966,4972,4973,4979],{"type":53,"value":4965},"std-register fields: no ",{"type":47,"tag":82,"props":4967,"children":4969},{"className":4968},[],[4970],{"type":53,"value":4971},"占位",{"type":53,"value":401},{"type":47,"tag":82,"props":4974,"children":4976},{"className":4975},[],[4977],{"type":53,"value":4978},"placeholder",{"type":53,"value":4980}," leak, no bare English jargon dropped into Chinese prose.",{"type":47,"tag":1131,"props":4982,"children":4983},{},[4984],{"type":53,"value":4985},"warn",{"type":47,"tag":56,"props":4987,"children":4988},{},[4989,5001,5003,5008,5009,5014],{"type":47,"tag":434,"props":4990,"children":4991},{},[4992,4994,4999],{"type":53,"value":4993},"Retry budget on ",{"type":47,"tag":82,"props":4995,"children":4997},{"className":4996},[],[4998],{"type":53,"value":2863},{"type":53,"value":5000}," (cap = 2).",{"type":53,"value":5002}," Fix only the named contract, re-validate; still failing after the 2nd retry → stop revising, render as-is, and append a short note listing the failing validators (a flagged-imperfect card beats a watchdog-killed run with zero output). Never \"fix\" ",{"type":47,"tag":82,"props":5004,"children":5006},{"className":5005},[],[5007],{"type":53,"value":4768},{"type":53,"value":2774},{"type":47,"tag":82,"props":5010,"children":5012},{"className":5011},[],[5013],{"type":53,"value":4731},{"type":53,"value":5015}," by editing a guarded field — surface them as the headline caveat instead.",{"type":47,"tag":114,"props":5017,"children":5019},{"id":5018},"configuration",[5020],{"type":53,"value":5021},"Configuration",{"type":47,"tag":56,"props":5023,"children":5024},{},[5025],{"type":53,"value":5026},"By default every model-driven phase runs on the host LLM. To route phases to a different backend (Gemini, open-weights, custom):",{"type":47,"tag":121,"props":5028,"children":5029},{},[5030,5040],{"type":47,"tag":125,"props":5031,"children":5032},{},[5033,5038],{"type":47,"tag":82,"props":5034,"children":5036},{"className":5035},[],[5037],{"type":53,"value":903},{"type":53,"value":5039}," — Phase 1 \u002F 2.1 \u002F 2.2 \u002F 3.2 \u002F 3.3 \u002F 4.fill (needs ≥ 200k context, JSON output)",{"type":47,"tag":125,"props":5041,"children":5042},{},[5043,5048],{"type":47,"tag":82,"props":5044,"children":5046},{"className":5045},[],[5047],{"type":53,"value":821},{"type":53,"value":5049}," — Phase 0 intent extraction + per-paper pattern tagging (smaller context, JSON output)",{"type":47,"tag":56,"props":5051,"children":5052},{},[5053,5058],{"type":47,"tag":434,"props":5054,"children":5055},{},[5056],{"type":53,"value":5057},"Which tier a step tolerates — the split is by TASK KIND, not by cost",{"type":53,"value":5059}," (both directions measured; see design-notes):",{"type":47,"tag":121,"props":5061,"children":5062},{},[5063,5086],{"type":47,"tag":125,"props":5064,"children":5065},{},[5066,5071,5073,5078,5079,5084],{"type":47,"tag":434,"props":5067,"children":5068},{},[5069],{"type":53,"value":5070},"Mechanical classification against a written rubric",{"type":53,"value":5072}," — per-item independent, \"which of these N named categories\", criteria already in the rubric. ",{"type":47,"tag":165,"props":5074,"children":5075},{},[5076],{"type":53,"value":5077},"Pattern tagging is the whole of this class.",{"type":53,"value":522},{"type":47,"tag":434,"props":5080,"children":5081},{},[5082],{"type":53,"value":5083},"Cheapest tier is correct here",{"type":53,"value":5085},", and shardable across parallel sub-agents.",{"type":47,"tag":125,"props":5087,"children":5088},{},[5089,5094,5096,5101,5102,5107],{"type":47,"tag":434,"props":5090,"children":5091},{},[5092],{"type":53,"value":5093},"Open-ended judgement with no enumerated answer set",{"type":53,"value":5095}," — \"is this paper on-topic\", \"what load-bearing work is MISSING\", \"is this candidate subsumed\". ",{"type":47,"tag":165,"props":5097,"children":5098},{},[5099],{"type":53,"value":5100},"Phase 0.4 partition, Phase 0.5 coverage check, and every gauntlet phase are this class.",{"type":53,"value":522},{"type":47,"tag":434,"props":5103,"children":5104},{},[5105],{"type":53,"value":5106},"Do NOT downgrade these",{"type":53,"value":5108},", which is why their emits say so explicitly — a cheap tier's over-strict drop is an unrecoverable recall loss, while an over-inclusion costs one row the next stage can still catch.",{"type":47,"tag":56,"props":5110,"children":5111},{},[5112],{"type":53,"value":5113},"With no separate cheap model, lower the REASONING EFFORT for the mechanical class rather than reaching for the largest configuration everywhere; reserve full effort for the open-ended class.",{"type":47,"tag":56,"props":5115,"children":5116},{},[5117,5119,5125],{"type":53,"value":5118},"Each is a CLI taking a stdin prompt (",{"type":47,"tag":82,"props":5120,"children":5122},{"className":5121},[],[5123],{"type":53,"value":5124},"\u003C\u003CSYSTEM>>...\u003C\u003CUSER>>...",{"type":53,"value":5126},") and emitting JSON on stdout. When unset (the default when running inside any host LLM), the orchestrator emits sentinel files and the host LLM handles those steps natively.",{"type":47,"tag":121,"props":5128,"children":5129},{},[5130,5156,5199,5210,5249,5266,5283],{"type":47,"tag":125,"props":5131,"children":5132},{},[5133,5138,5140,5146,5148,5154],{"type":47,"tag":82,"props":5134,"children":5136},{"className":5135},[],[5137],{"type":53,"value":1710},{"type":53,"value":5139}," — per-job Phase 0 retrieval caps, ",{"type":47,"tag":82,"props":5141,"children":5143},{"className":5142},[],[5144],{"type":53,"value":5145},"job=N,...",{"type":53,"value":5147}," (jobs: arxiv, ss_recent, oa_recent, openalex, semanticscholar, openreview). A job at 0 is skipped (this is how oa_recent stays off; set ",{"type":47,"tag":82,"props":5149,"children":5151},{"className":5150},[],[5152],{"type":53,"value":5153},"oa_recent=6",{"type":53,"value":5155}," for journal-heavy fields). Malformed values fail-fast.",{"type":47,"tag":125,"props":5157,"children":5158},{},[5159,5165,5167,5173,5175,5181,5183,5189,5191,5197],{"type":47,"tag":82,"props":5160,"children":5162},{"className":5161},[],[5163],{"type":53,"value":5164},"IDEASPARK_RETRIEVAL_CACHE",{"type":53,"value":5166}," — cross-run Phase 0 retrieval cache (default ",{"type":47,"tag":82,"props":5168,"children":5170},{"className":5169},[],[5171],{"type":53,"value":5172},"~\u002F.cache\u002Fideaspark\u002Fretrieval",{"type":53,"value":5174},", 24h TTL via ",{"type":47,"tag":82,"props":5176,"children":5178},{"className":5177},[],[5179],{"type":53,"value":5180},"IDEASPARK_RETRIEVAL_CACHE_TTL_S",{"type":53,"value":5182},"); set to ",{"type":47,"tag":82,"props":5184,"children":5186},{"className":5185},[],[5187],{"type":53,"value":5188},"off",{"type":53,"value":5190}," to bypass, or to a path to relocate. Keyed on connector + queries + window + caps + ",{"type":47,"tag":82,"props":5192,"children":5194},{"className":5193},[],[5195],{"type":53,"value":5196},"--as-of",{"type":53,"value":5198},", so any real change to the request misses; successful non-empty results only. Exists because re-running Phase 0 otherwise re-hammers every API — three runs in ~15 min rate-limited arXiv and Semantic Scholar into returning zero records.",{"type":47,"tag":125,"props":5200,"children":5201},{},[5202,5208],{"type":47,"tag":82,"props":5203,"children":5205},{"className":5204},[],[5206],{"type":53,"value":5207},"IDEASPARK_RETRY_PAUSE_S",{"type":53,"value":5209}," — pause before the single bounded per-job retry (default 45s). A failed job also hands its cap to the surviving job covering the same window (≤2x).",{"type":47,"tag":125,"props":5211,"children":5212},{},[5213,5219,5221,5226,5228,5233,5235,5240,5242,5247],{"type":47,"tag":82,"props":5214,"children":5216},{"className":5215},[],[5217],{"type":53,"value":5218},"IDEASPARK_RELEVANCE_PARTITION",{"type":53,"value":5220}," — set to ",{"type":47,"tag":82,"props":5222,"children":5224},{"className":5223},[],[5225],{"type":53,"value":5188},{"type":53,"value":5227}," to disable the Phase 0.4 host relevance-partition (default: on). When off, retrieval's wide net flows straight to tagging with no core\u002Fadjacent\u002Foff_topic gate (the old ",{"type":47,"tag":82,"props":5229,"children":5231},{"className":5230},[],[5232],{"type":53,"value":1844},{"type":53,"value":5234},"-only behavior); deep-read then falls back to on-topic (non-",{"type":47,"tag":82,"props":5236,"children":5238},{"className":5237},[],[5239],{"type":53,"value":1844},{"type":53,"value":5241},") rather than ",{"type":47,"tag":82,"props":5243,"children":5245},{"className":5244},[],[5246],{"type":53,"value":1854},{"type":53,"value":5248},"-gated.",{"type":47,"tag":125,"props":5250,"children":5251},{},[5252,5258,5259,5264],{"type":47,"tag":82,"props":5253,"children":5255},{"className":5254},[],[5256],{"type":53,"value":5257},"IDEASPARK_COVERAGE_CHECK",{"type":53,"value":5220},{"type":47,"tag":82,"props":5260,"children":5262},{"className":5261},[],[5263],{"type":53,"value":5188},{"type":53,"value":5265}," to disable the Phase 0.5 host-recall coverage check (default: on).",{"type":47,"tag":125,"props":5267,"children":5268},{},[5269,5275,5276,5281],{"type":47,"tag":82,"props":5270,"children":5272},{"className":5271},[],[5273],{"type":53,"value":5274},"IDEASPARK_CROSS_RUN_DEDUP",{"type":53,"value":5220},{"type":47,"tag":82,"props":5277,"children":5279},{"className":5278},[],[5280],{"type":53,"value":5188},{"type":53,"value":5282}," to disable the sibling-run soft-negative-anchor scan in the Phase 2 emit (default: on).",{"type":47,"tag":125,"props":5284,"children":5285},{},[5286,5291,5293,5299,5301,5306,5308,5313],{"type":47,"tag":82,"props":5287,"children":5289},{"className":5288},[],[5290],{"type":53,"value":2667},{"type":53,"value":5292}," — optional standing compute profile for the user (free text, e.g. ",{"type":47,"tag":82,"props":5294,"children":5296},{"className":5295},[],[5297],{"type":53,"value":5298},"\"8×H100 node, ~300 GPU-days, $50k API budget\"",{"type":53,"value":5300},"). Put it in ",{"type":47,"tag":82,"props":5302,"children":5304},{"className":5303},[],[5305],{"type":53,"value":391},{"type":53,"value":5307}," (auto-loaded); ",{"type":47,"tag":82,"props":5309,"children":5311},{"className":5310},[],[5312],{"type":53,"value":425},{"type":53,"value":5314}," surfaces it to Phase 1 as intake context. Precedence: compute stated in the user's query > this value > the factory default (80GB-class GPUs, ≤8 concurrent, ≈150 GPU-days \u002F 5 months, ~$10k API campaign). Use this instead of editing the factory default — the default is the feasibility yardstick for users who state nothing.",{"type":47,"tag":5316,"props":5317,"children":5318},"style",{},[5319],{"type":53,"value":5320},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":5322,"total":5515},[5323,5345,5366,5387,5402,5419,5430,5443,5458,5471,5490,5503],{"slug":5324,"name":5324,"fn":5325,"description":5326,"org":5327,"tags":5328,"stars":5342,"repoUrl":5343,"updatedAt":5344},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5329,5332,5335,5336,5339],{"name":5330,"slug":5331,"type":15},"Engineering","engineering",{"name":5333,"slug":5334,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":5337,"slug":5338,"type":15},"Project Management","project-management",{"name":5340,"slug":5341,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":5346,"name":5346,"fn":5347,"description":5348,"org":5349,"tags":5350,"stars":5363,"repoUrl":5364,"updatedAt":5365},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5351,5354,5357,5360],{"name":5352,"slug":5353,"type":15},".NET","net",{"name":5355,"slug":5356,"type":15},"Agents","agents",{"name":5358,"slug":5359,"type":15},"Azure","azure",{"name":5361,"slug":5362,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":5367,"name":5367,"fn":5368,"description":5369,"org":5370,"tags":5371,"stars":5363,"repoUrl":5364,"updatedAt":5386},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5372,5375,5376,5379,5382,5383],{"name":5373,"slug":5374,"type":15},"Analytics","analytics",{"name":5358,"slug":5359,"type":15},{"name":5377,"slug":5378,"type":15},"Data Analysis","data-analysis",{"name":5380,"slug":5381,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":5384,"slug":5385,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":5388,"name":5388,"fn":5389,"description":5390,"org":5391,"tags":5392,"stars":5363,"repoUrl":5364,"updatedAt":5401},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5393,5396,5397,5398],{"name":5394,"slug":5395,"type":15},"AI Infrastructure","ai-infrastructure",{"name":5358,"slug":5359,"type":15},{"name":5380,"slug":5381,"type":15},{"name":5399,"slug":5400,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":5403,"name":5403,"fn":5404,"description":5405,"org":5406,"tags":5407,"stars":5363,"repoUrl":5364,"updatedAt":5418},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5408,5409,5412,5413,5414,5417],{"name":5358,"slug":5359,"type":15},{"name":5410,"slug":5411,"type":15},"Compliance","compliance",{"name":5361,"slug":5362,"type":15},{"name":9,"slug":8,"type":15},{"name":5415,"slug":5416,"type":15},"Python","python",{"name":5399,"slug":5400,"type":15},"2026-07-18T05:14:23.017504",{"slug":5420,"name":5420,"fn":5421,"description":5422,"org":5423,"tags":5424,"stars":5363,"repoUrl":5364,"updatedAt":5429},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5425,5426,5427,5428],{"name":5373,"slug":5374,"type":15},{"name":5358,"slug":5359,"type":15},{"name":5361,"slug":5362,"type":15},{"name":5415,"slug":5416,"type":15},"2026-07-31T05:54:29.068751",{"slug":5431,"name":5431,"fn":5432,"description":5433,"org":5434,"tags":5435,"stars":5363,"repoUrl":5364,"updatedAt":5442},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5436,5439,5440,5441],{"name":5437,"slug":5438,"type":15},"API Development","api-development",{"name":5358,"slug":5359,"type":15},{"name":9,"slug":8,"type":15},{"name":5415,"slug":5416,"type":15},"2026-07-18T05:14:16.988376",{"slug":5444,"name":5444,"fn":5445,"description":5446,"org":5447,"tags":5448,"stars":5363,"repoUrl":5364,"updatedAt":5457},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5449,5450,5453,5456],{"name":5358,"slug":5359,"type":15},{"name":5451,"slug":5452,"type":15},"Computer Vision","computer-vision",{"name":5454,"slug":5455,"type":15},"Images","images",{"name":5415,"slug":5416,"type":15},"2026-07-18T05:14:18.007737",{"slug":5459,"name":5459,"fn":5460,"description":5461,"org":5462,"tags":5463,"stars":5363,"repoUrl":5364,"updatedAt":5470},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5464,5465,5466,5469],{"name":5358,"slug":5359,"type":15},{"name":5021,"slug":5018,"type":15},{"name":5467,"slug":5468,"type":15},"Feature Flags","feature-flags",{"name":5380,"slug":5381,"type":15},"2026-07-03T16:32:01.278468",{"slug":5472,"name":5472,"fn":5473,"description":5474,"org":5475,"tags":5476,"stars":5363,"repoUrl":5364,"updatedAt":5489},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5477,5480,5483,5486],{"name":5478,"slug":5479,"type":15},"Cosmos DB","cosmos-db",{"name":5481,"slug":5482,"type":15},"Database","database",{"name":5484,"slug":5485,"type":15},"NoSQL","nosql",{"name":5487,"slug":5488,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":5491,"name":5491,"fn":5473,"description":5492,"org":5493,"tags":5494,"stars":5363,"repoUrl":5364,"updatedAt":5502},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5495,5496,5497,5498,5499],{"name":5478,"slug":5479,"type":15},{"name":5481,"slug":5482,"type":15},{"name":9,"slug":8,"type":15},{"name":5484,"slug":5485,"type":15},{"name":5500,"slug":5501,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":5504,"name":5504,"fn":5505,"description":5506,"org":5507,"tags":5508,"stars":5363,"repoUrl":5364,"updatedAt":5514},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5509,5510,5511,5512,5513],{"name":5358,"slug":5359,"type":15},{"name":5478,"slug":5479,"type":15},{"name":5481,"slug":5482,"type":15},{"name":5380,"slug":5381,"type":15},{"name":5484,"slug":5485,"type":15},"2026-05-13T06:14:17.582229",267,{"items":5517,"total":210},[5518],{"slug":4,"name":4,"fn":5,"description":6,"org":5519,"tags":5520,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5521,5522,5523,5524],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15}]