idea-spark
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseIdea Spark Skill
Idea Spark 技能
Convert an under-specified research direction into ONE reviewer-defensible Oral-level research proposal — grounded in 1947 ICLR/ICML/NeurIPS 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.
This file is the operational runbook. Design rationale (the 7 design principles, why each contract is shaped this way, removed-check history) lives in references/design-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/regression-directions.md (deterministic subset: ; routing/merger branch fixtures — including every guard/retry branch that real runs rarely exercise: ; unit fixtures for the helpers every phase sits on — the multi-query round-robin and the tolerant LLM-JSON loader: ). First-time installation lives in references/setup.md.
python3 "$SKILL_DIR/scripts/regression_check.py" <run_dir>python3 "$SKILL_DIR/scripts/selftest_routing.py"python3 "$SKILL_DIR/scripts/selftest_units.py"将模糊的研究方向转化为一个审稿人认可、达到顶会口头报告级别的研究提案——基于2021-2025年ICLR/ICML/NeurIPS会议论文——通过5阶段工作流:检索最新文献、诊断瓶颈、利用语料库衍生的构思模式卡片选择并生成候选方案、通过质量检验、扩展为想法卡片。
本文件是操作手册。设计原理(7项设计原则、各规则的制定原因、移除检查的历史记录)存于 references/design-notes.md ——仅在修改或评估本技能时阅读,运行时无需查看。修改技能时,还需重放 references/regression-directions.md 中的跨形态回归集(确定性子集:;路由/合并分支测试用例——包括实际运行中很少触发的所有守卫/重试分支:;各阶段依赖工具的单元测试用例——多查询轮询和容错LLM-JSON加载器:)。首次安装说明存于 references/setup.md。
python3 "$SKILL_DIR/scripts/regression_check.py" <run_dir>python3 "$SKILL_DIR/scripts/selftest_routing.py"python3 "$SKILL_DIR/scripts/selftest_units.py"When to use
适用场景
- "Give me a research idea in {area} I could pursue." / "What's the most impactful next step in this direction?"
- "Help me sharpen this vague direction into an Oral-level proposal."
- "What's the bottleneck of this problem?" / "Run a novelty audit on this idea."
- "给我一个可研究的{领域}方向。" / "这个方向最有影响力的下一步是什么?"
- "帮我把这个模糊的方向打磨成口头报告级别的提案。"
- "这个问题的瓶颈是什么?" / "帮我审核这个想法的新颖性。"
When NOT to use
不适用场景
- Code review, debugging, refactoring. Summarizing one paper. Cross-decade survey writing.
- Free-association brainstorming with no research context. Engineering integration tasks ("ship this feature in our system").
- Pure benchmark / dataset construction work — the 15-pattern vocabulary handles benchmark audit (controlled_diagnostic_design) but not benchmark construction.
- 代码审查、调试、重构;单篇论文总结;跨十年综述撰写。
- 无研究背景的自由联想头脑风暴;工程集成任务("在我们的系统中部署这个功能")。
- 纯基准测试/数据集构建工作——15种模式词汇表仅处理基准测试审核(controlled_diagnostic_design),不处理基准测试构建。
Setup (first use only)
首次使用配置
Follow references/setup.md. Quick version — set two shell variables, install deps, verify:
bash
SKILL_DIR=<path to this folder> # e.g. ~/.claude/skills/idea-spark (Claude Code), ~/.codex/skills/idea_spark (Codex CLI), or any clone location
RUN_DIR="$PWD/ideaspark_run/<topic-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
python3 -m pip install feedparser openreview-py beautifulsoup4 pymupdf
python3 "$SKILL_DIR/scripts/run.py" check_connectors # from the SAME shell you'll run phases fromCredentials go in (OpenReview user/pass + Semantic Scholar key — see setup.md); the orchestrator auto-loads it. Optional: / for PDF cards.
.envxelatextectonic遵循 references/setup.md。快速版本——设置两个Shell变量、安装依赖、验证:
bash
SKILL_DIR=<本文件夹路径> # 示例:~/.claude/skills/idea-spark (Claude Code), ~/.codex/skills/idea_spark (Codex CLI), 或任何克隆位置
RUN_DIR="$PWD/ideaspark_run/<topic-slug>" # 以下为约定;任何绝对路径均可。无需手动创建目录——每个阶段会自动创建自己的--out目录,`next`命令会将不存在的目录视为新运行
python3 -m pip install feedparser openreview-py beautifulsoup4 pymupdf
python3 "$SKILL_DIR/scripts/run.py" check_connectors # 从运行各阶段的同一个Shell执行凭证需放在 文件中(OpenReview账号密码 + Semantic Scholar密钥——详见setup.md);编排器会自动加载。可选:安装/用于生成PDF卡片。
.envxelatextectonicHow to run: the next
loop
next运行方式:next
循环
nextThe canonical way to drive a run is the run-state navigator:
bash
python3 "$SKILL_DIR/scripts/run.py" next --dir "$RUN_DIR" --query "<user's research question>"Run-dir convention (one run = one directory, named by the host BEFORE the first command): — a short kebab-case slug distilled from the user's direction (e.g. ); if the slug is taken, append , not a timestamp. NEVER reuse a directory that already contains a — every phase writes into 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.
$PWD/ideaspark_run/<topic-slug>ideaspark_run/diffusion-watermark_2phase0/$RUN_DIRnext- Run .
next - Do what it says (→ run the command;
bash→ execute in an ISOLATED context per the Context discipline rules below).llm_subagent - Run again. Repeat until it reports a terminal state (
next,DONE, ordo_not_generate).phase_3_failed
Consume every emit WHOLE — never grep/filter/truncate the block. INPUT lists span unlabeled continuation lines; a label-keyed grep () 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 without ever seeing the executed evidence. If the emit must be captured into a bounded tool result, the WHOLE block — never filter by line labels.
grep -E "STEP|INPUT|..."advancehead -c 4000nextIf your host exposes a task/todo tool (e.g., TodoWrite), seed it with this checklist and tick phases as moves past them:
next- [ ] Phase 0: Literature grounding → lit_table.md, then Phase 0+ full-text fetch (MANDATORY — Phase 1 hard-gates on it)
- [ ] Phase 1: Bottleneck identification → phase1_output.json (routing: proceed | do_not_generate)
- [ ] Phase 2: Gap×pattern selection + candidate generation (ONE isolated context, TWO output files) → citation gate → coherence gate (dry-run trace, fresh context)
- [ ] 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]
- [ ] Phase 4: skeleton → fill (technical) → assemble partial → derive (plain, fast-tier) → assemble final + method view → implementability audit → validate → render → return 3 cards inlineThree outcomes per run: the rendered idea-card markdown returned inline (LaTeX + per-phase JSON left under ), a (Phase 1 OOD), or a (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.
$RUN_DIRdo_not_generate.mdphase_3_failed.md驱动运行的标准方式是运行状态导航器:
bash
python3 "$SKILL_DIR/scripts/run.py" next --dir "$RUN_DIR" --query "<用户的研究问题>"运行目录约定(一次运行对应一个目录,由宿主在首次命令前命名): ——从用户方向提炼的短横线命名标识(例如 );如果标识已被占用,追加,不要使用时间戳。切勿复用已包含的目录——每个阶段都会写入,会覆盖之前的运行内容。技能本身不会命名目录(任何绝对路径均可);此约定是为了让不同工具的运行结果存放在可预测的位置,而非由每个Agent自行决定。
$PWD/ideaspark_run/<topic-slug>ideaspark_run/diffusion-watermark_2phase0/$RUN_DIRnext- 运行命令。
next - 执行输出内容(→ 运行命令;
bash→ 按照下文的上下文规则在隔离环境中执行)。llm_subagent - 再次运行命令。重复直到报告终端状态(
next、DONE或do_not_generate)。phase_3_failed
完整接收所有输出内容——切勿过滤/截断。输入列表可能包含未标记的续行;按标签过滤()会静默丢弃这些内容。在实际运行中曾出现过此类问题:导航器列出了一致性检查的阻塞结果作为审核输入,宿主的grep命令丢弃了该内容,导致审核错误地发出指令,却未查看执行证据。如果必须将输出捕获到有限的工具结果中,请对整个输出执行——切勿按行标签过滤。
grep -E "STEP|INPUT|..."advancehead -c 4000next如果宿主提供任务/待办工具(如TodoWrite),可将以下清单导入并在命令推进阶段时勾选:
next- [ ] 阶段0:文献基础构建 → lit_table.md,然后执行阶段0+全文获取(**必填**——阶段1会强制检查)
- [ ] 阶段1:瓶颈识别 → phase1_output.json(路由:proceed | do_not_generate)
- [ ] 阶段2:缺口×模式选择 + 候选方案生成(一个隔离上下文,两个输出文件)→ 引用检查 → 一致性检查(试运行跟踪,全新上下文)
- [ ] 阶段3:碰撞检索(signature@10个月 + alias@48个月——可与2.3并行启动)→ 审核(5项检查)→ [修订 → 合并 → 若证伪内容重写则重审核] | [放弃 → 信息增益重试:每次失败产生新的约束教训时重新生成,最多3次候选循环;重复归并教训 → 1次瓶颈重新诊断 + 1次尝试;无新信息或达到上限 → phase_3_failed]
- [ ] 阶段4:骨架 → 填充(技术内容)→ 组装部分内容 → 衍生(简洁快速版)→ 组装最终版本 + 方法视图 → 可实施性审核 → 验证 → 渲染 → 返回3个卡片内容每次运行有三种结果:返回内联的渲染想法卡片Markdown(LaTeX + 各阶段JSON存于下)、(阶段1判定为超出范围)或(审核两次放弃)。运行过程中切勿询问用户——缺失的输入字段会自动推断;修订、证伪重审核和单次内部重试均无需用户重新调用。
$RUN_DIRdo_not_generate.mdphase_3_failed.mdInvocation contract
调用规则
No is required. self-locates its skill root, so every orchestrator command can be invoked from ANY working directory by absolute script path: . The legacy form works identically. Do NOT use relative script or paths — CWD is not stable across host-LLM Bash invocations, and the orchestrator rejects a relative outright.
cdscripts/run.pypython3 "$SKILL_DIR/scripts/run.py" <subcommand> --out "$RUN_DIR/<phase>/" ...cd "$SKILL_DIR" && python3 -m scripts.run <subcommand> ...--out--outExit codes 10 and 11 are NOT errors — they are sentinel handshakes. When the orchestrator can't call an LLM itself (no ), it writes a sentinel JSON describing what the host LLM should do, then exits rc=10 (intent / pattern-summary) or rc=11 (signature_terms). Read the sentinel (), read the file at its field (absolute path), produce the expected output, re-invoke per its field. Do not stop on these codes. (The default Phase 0 flow below avoids the rc=10 intent sentinel entirely by passing up front.)
NOVELTY_LLM_CLASSIFY_FAST_CMD$RUN_DIR/<phase>/.<step>_pendingrubric_filere_invocation--queries无需执行命令。会自动定位技能根目录,因此可从任何工作目录通过绝对脚本路径调用所有编排器命令:。旧形式效果相同。请勿使用相对脚本或路径——宿主LLM的Bash调用间的当前工作目录(CWD)不稳定,编排器会直接拒绝相对路径。
cdscripts/run.pypython3 "$SKILL_DIR/scripts/run.py" <subcommand> --out "$RUN_DIR/<phase>/" ...cd "$SKILL_DIR" && python3 -m scripts.run <subcommand> ...--out--out退出码10和11不是错误——它们是标记握手信号。当编排器无法自行调用LLM(未设置)时,会写入一个标记JSON,描述宿主LLM应执行的操作,然后退出码为10(意图/模式总结)或11(signature_terms)。读取标记文件(),读取其字段指向的文件(绝对路径),生成预期输出,再按其字段重新调用。无需因这些代码停止运行。(下文的默认阶段0流程通过提前传入完全避免了rc=10意图标记路径。)
NOVELTY_LLM_CLASSIFY_FAST_CMD$RUN_DIR/<phase>/.<step>_pendingrubric_filere_invocation--queriesContext discipline (read BEFORE running any LLM-driven phase)
上下文规则(运行任何LLM驱动阶段前必读)
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 / 2.2 / 4.fill calls routinely hit the backend request timeout () and the retry times out again. Apply ALL three rules on every run:
[API Error · Request timed out · Retrying...]Rule 1 — Run every LLM-driven phase in an ISOLATED context. Phases 1 / 2 (2.1+2.2) / 2.3 / 3.2 / 3.3 / 4.fill / 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:
- (a) Subprocess LLM — set /
NOVELTY_LLM_REASONING_LARGE_CMD(see § Configuration); each phase runs as its own subprocess, fresh context by construction, on any harness.NOVELTY_LLM_CLASSIFY_FAST_CMD - (b) Sub-agent tool (Claude Code 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,
Agents 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.Write - (c) Manual context reset — run inline but clear/compact at the four points in Rule 3.
Whichever mechanism, the parent context stays ≤ ~30k tokens for the whole run because it never holds a phase's structured output.
Rule 2 — every phase artifact directly to disk; never paraphrase it into chat. Output convention: . Use your harness's file-write tool (Claude Code: ) — no Bash heredocs (permission prompts + silent truncation), no , no pasting JSON into replies. Bound tool-result captures from large files to ≤ 4 KB ( / / ); never 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).
Write$RUN_DIR/<phase>/<phase>_output.jsonWriteechohead -c 4000jqsedReadRule 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 , use it there; Rule 1 mechanisms (a)/(b) achieve the same on their own.
/compactDiagnostic for "Request timed out" mid-phase: inspect your harness's session transcript/log (Claude Code: , look for ; 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.
~/.claude/projects/<project-slug>/<session-id>.jsonlisApiErrorMessage: true一次完整运行会累积约180-250k tokens的中间状态。如果宿主LLM在各阶段间保留对话上下文,阶段1/2.2/4.fill调用通常会触发后端请求超时(),且重试仍会超时。运行时必须遵守以下三条规则:
[API Error · Request timed out · Retrying...]规则1——在隔离上下文运行每个LLM驱动阶段。阶段1/2(2.1+2.2)/2.3/3.2/3.3/4.fill/4.1.5均有文件路径输入和一个JSON输出;任何阶段都不需要之前对话的历史记录。优先使用宿主工具支持的第一种隔离机制:
- (a) 子进程LLM——设置/
NOVELTY_LLM_REASONING_LARGE_CMD(见§配置);每个阶段作为独立子进程运行,天生具备全新上下文,适用于任何工具。NOVELTY_LLM_CLASSIFY_FAST_CMD - (b) 子Agent工具(Claude Code 或等效工具)——每个阶段生成一个子Agent,仅传递阶段提示列表中的文件路径——不传递对话历史,不内联文件内容。子Agent从磁盘读取内容,通过
Agent写入磁盘,返回≤250字(输出路径 + 路由信号)。设计例外:阶段2.1和2.2在同一个子Agent中运行并写入两个输出文件——两者都属于生成侧;对抗性分离(3.2 vs 3.3,4.fill vs 4.1.5)必须保持独立调用。Write - (c) 手动重置上下文——内联运行,但在规则3的四个节点压缩/清空上下文。
无论使用哪种机制,父上下文在整个运行过程中都会保持≤约30k tokens,因为它从不保存阶段的结构化输出。
规则2——将每个阶段的产物直接写入磁盘;切勿转述到聊天中。输出约定:。使用宿主的文件写入工具(Claude Code:)——不要使用Bash heredocs(权限提示 + 静默截断)、或在回复中粘贴JSON。对大文件的工具结果捕获限制为≤4 KB(//);切勿将>10 KB的中间转储文件到父上下文中——转储内容会缓存到后续每个回合(这种反模式导致了之前的超时运行)。
$RUN_DIR/<phase>/<phase>_output.jsonWriteechohead -c 4000jqsedRead规则3——阶段间压缩上下文。自然压缩节点:阶段0+之后、阶段1之后、阶段2之后、阶段3.2之后。每个阶段都会重新读取磁盘输入,因此压缩不会丢失任何内容。如果支持命令,在这些节点使用;规则1的(a)/(b)机制本身就实现了相同效果。
/compact阶段中出现“Request timed out”的诊断方法:检查宿主的会话记录/日志(Claude Code:,查找;其他工具:查看对应的会话日志);之前的工具调用会显示哪个提示过大。修复方法是三条规则之一——通常是规则1。
~/.claude/projects/<project-slug>/<session-id>.jsonlisApiErrorMessage: truePhase reference
阶段参考
nextnextOrchestrator entry points
编排器入口点
| Phase | Entry point ( |
|---|---|
| navigator | |
| Phase 0 | |
| user-ref registration (title-named anchor papers; BEFORE phase0_fulltext) | |
| relevance partition apply (Phase 0.4; archives off_topic + stamps core/adjacent, BEFORE tagging) | |
| host-ref resolution (Phase 0.5 coverage check; verifies + merges host-nominated missing papers) | |
| Phase 0+ full-text (mandatory, the moment lit_table.md lands) | |
| Phase 1 anchor top-up (optional, when the #1 closest_adjacent fell outside the fulltext pool or came back method-thin) | |
Phase 2 prep (deterministic; | |
| lit_table shard assembly (deterministic; after parallel pattern tagging) | |
| Phase 3.1 collision | |
| Phase 3.3 merger | |
| Phase 2.3 merger (same tool; only when coherence verdict=patched) | |
| Phase 4 skeleton | |
Phase 4 assemble (repeat | |
Phase 4 method view (before 4.1.5; | |
| Phase 4 render | |
| Validators | |
The LLM-driven phases (1 / 2.1 / 2.2 / 2.3 / 3.2 / 3.3 / 4.fill / 4.1.5 / falsification re-audit) have no orchestrator subcommand (a wrapper would add fragility without determinism): read the prompt at , gather the inputs listed at its top, the JSON described under to . Run each under the Context discipline rules — Phase 4.fill is the largest output and the most timeout-prone; never in the parent context.
cat prompt | llmreferences/system-prompts/<phase>.txtWriteOutput:$RUN_DIR/<phase>/<phase>_output.json| 阶段 | 入口点( |
|---|---|
| 导航器 | |
| 阶段0 | `phase0 --query "<用户文本>" --queries "q1\ |
| 用户参考注册(标题命名的锚定论文;在phase0_fulltext之前) | |
| 相关性分区应用(阶段0.4;归档off_topic并标记core/adjacent,在标记之前) | |
| 宿主参考解析(阶段0.5覆盖检查;验证并合并宿主提名的缺失论文) | |
| 阶段0+全文获取(必填,lit_table.md生成后立即执行) | |
| 阶段1锚定补充(可选,当排名第一的closest_adjacent不在全文池或方法内容过少时) | |
阶段2准备(确定性; | |
| lit_table分片组装(确定性;并行模式标记后执行) | |
| 阶段3.1碰撞检索 | |
| 阶段3.3合并修订 | |
| 阶段2.3合并修订(同一工具;仅当一致性判定为patched时) | |
| 阶段4骨架生成 | |
阶段4组装(最终传递时重复 | |
阶段4方法视图(在4.1.5之前; | |
| 阶段4渲染 | |
| 验证器 | |
LLM驱动阶段(1/2.1/2.2/2.3/3.2/3.3/4.fill/4.1.5/证伪重审核)没有编排器子命令(包装器会增加脆弱性且无法保证确定性):读取中的提示,收集其顶部列出的输入,将下描述的JSON写入。每个阶段都需遵守上下文规则——阶段4.fill是最大的输出,最容易超时;切勿在父上下文中运行。
cat prompt | llmreferences/system-prompts/<phase>.txtOutput:$RUN_DIR/<phase>/<phase>_output.jsonPhase 0 — Literature grounding
阶段0 — 文献基础构建
Phase 0 and 3.1 require real external retrieval via the bundled connector scripts () — never WebSearch or ad-hoc fetch (downstream phases reject unstructured output). Gate sentinel: = vs (halt with diagnostic; exists as a flagged, lower-confidence escape).
scripts/search_*.py.lit_grounding_moderealconnector_failure--allow-webfallbackDefault flow (skips one sentinel round-trip): BEFORE invoking , read (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 " challenges/overview/landscape" 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 / #2 No-anchor → route to do_not_generate instead of retrieving). Then invoke with BOTH flags:
phase0references/intent-recognition.md<topic>bash
python3 "$SKILL_DIR/scripts/run.py" phase0 --query "<user's research question>" --queries "q1|q2|q3|q4" --out $RUN_DIR/phase0/The rc=10 sentinel path still exists as fallback when 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 (see § Configuration). Pass whenever the query name-drops a paper or system without a link: the URL/ID regex only sees links, so a bare name is otherwise invisible to the U fetch tier and never becomes an anchor the candidate is differentiated against (add one later with ). Each name is resolved against the connectors by CONTAINMENT — the paper's title must lead with the name, since a user writes the nickname and not the title — and a name two papers lead with is reported AMBIGUOUS and left unresolved rather than guessed, because a wrong U-tier entry is uncapped, always deep-read and becomes an anchor. Pass that one as a URL instead. It writes the user's question verbatim to — the 0.4 partition, the 0.5 coverage check, Phase 1 and Phase 2.1 are all pointed at that FILE rather than at a string the host retypes, so a paraphrase cannot silently propagate and a compacted run can still recover what was asked. It also extracts URL/ID user-refs from the query into ; emits for the host.
--queriesIDEASPARK_POOL--named-papersadd_user_refphase0/user_query.txtphase0/user_refs.json.pattern_summary_pendingPhase 0.4 relevance partition (host precision gate; DEFAULT ON, disable with ): because retrieval now over-fetches, the host — in ONE compact pass over every record's title+abstract — labels each , writing . 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/recommendation/NLP), pure surveys, or unrelated fields (a wrong off_topic is an unrecoverable recall loss). Then (deterministic) stamps on each record, archives off_topic to and drops it from , and touches , and writes — the Phase 0.4 labels joined back onto the provenance the connectors stamp, i.e. each query's core/adjacent/off_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/intent-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 tag as the precision gate. alone feeds the deep-read pool; stays as a citeable baseline/backbone but never consumes a fetch slot. drives the sub-flow; the marker guards re-runs.
IDEASPARK_RELEVANCE_PARTITION=offcore | adjacent | off_topicphase0/relevance_partition.json[{paper_id, relevance, reason}]apply_partition --out phase0/ --partition <file>relevanceoff_topic.mdlit_results.json.partition_appliedquery_yield.mdfrom_queryoutside_taxonomycoreadjacentnextRetrieval takes 3-10 min (the openreview connector alone budgets 600s) — set your Bash timeout ≥ 600s or run it in the background.
Pattern tagging (host step): classify each paper per into 1-3 of the 15 patterns → write with columns . Pure classification — it does not need the large reasoning model: route it to a cheaper/faster model tier or a lower reasoning effort BY DEFAULT (the same tier 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 — 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.
lit_results.jsonreferences/pattern-summary-rubric.mdlit_table.mdpaper_id | year_month | venue | title | ideation pattern tags | bottleneck this paper targets | open issue / unresolved gap | resolves_problem | retrieved_viaNOVELTY_LLM_CLASSIFY_FAST_CMDlit_table_merge --out $RUN_DIR/phase0/ --shards <row-file>...Phase 0.5 coverage check (host-recall channel, host step; DEFAULT ON, disable with ): after tagging, before fulltext, the host — having read the whole table — names up to 8 clearly load-bearing works the retrieval pool MISSED, writing . It PRIORITIZES the last ~12 months (recent/frontier 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/baseline 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 (deterministic) VERIFIES each nomination via the SS/arXiv connectors (>=0.9 title match) — verified records merge into with ; unresolvable titles (likely hallucinations) are NOT admitted, they land in ; admitted ids are recorded in for provenance. Newly-admitted rows get tagged (fast tier) and d in; guards against re-running. This keeps honestly (every record is connector-verified) while letting host knowledge repair a thin or stale pool. drives the whole sub-flow. Admitted refs feed the fulltext H tier (below).
IDEASPARK_COVERAGE_CHECK=offphase0/host_refs_nominations.json[{title, id_hint?, why, source: parametric|websearch}][]add_host_refs --out phase0/ --refs <noms>lit_results.jsonretrieved_via=host_recall|host_webhost_refs_unresolved.mdhost_refs.jsonlit_table_merge.coverage_check_donelit_grounding_moderealnextTitle-named user refs: if the user query names anchor papers by TITLE ("based on the LoRA paper" — anything the URL/ID regex can't catch), register each BEFORE via (entry-point table). It does a deterministic dedup-merge into — 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).
phase0_fulltextadd_user_refuser_refs.jsonPhase 0+ full-text fetch — MANDATORY. The instant lands (and after the coverage check), run (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/T2 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 -tagged papers are eligible (Phase 0.4 relevance stamp; U bypasses, H needs its nomination tagged core) — 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; reserve size, default 6). Output keyed by paper_id (); fetch failures degrade to abstract + warning. Phase 1 hard-gates on this file (). Alongside the blob it writes a derived per-paper read view ( + one per paper, same content, index carries tier/source_used/warning) — Phase 1 reads the index then only the papers it needs; the blob stays canonical and refreshes both. Fetches hit a cross-run content cache (, successful fetches only, 30-day TTL; disable with ), so papers recurring across runs on adjacent topics cost zero network time.
lit_table.mdphase0_fulltextcoreadjacent--backfillfulltext_cache.json{tier, intro, method, source_used, warning}error: fulltext_not_fetchedphase0/fulltext/index.json.mdphase1_fulltext_topup~/.cache/ideaspark/fulltext/IDEASPARK_FETCH_CACHE=off阶段0和3.1需要通过捆绑的连接器脚本()进行真实外部检索——切勿使用WebSearch或临时获取(下游阶段会拒绝非结构化输出)。检查标记: = vs (停止并输出诊断信息;作为标记的低置信度备选方案存在)。
scripts/search_*.py.lit_grounding_moderealconnector_failure--allow-webfallback默认流程(跳过一次标记往返):调用之前,自行阅读(Map模式)并生成4个搜索查询(有明确理由时可3-5个)——包括一个用解决方案词汇表述的逃逸机制查询(召回已解决瓶颈并在标题中明确解决方案的论文;基于问题的查询恰好会遗漏这些论文),并对每个查询应用该文件中的两个查询测试——VOCABULARY-OWNERSHIP和CONCRETE-OBJECT,不仅限于逃逸查询;其计数规则根据每个槽位的质量决定是否添加第5个查询,而非仅根据数量。优先以机制为核心表述查询:通用的“挑战/概述/现状”表述会吸引大量综述,稀释语料库密度——编排器会将综述标题的结果降级到lit_results底部(保留,不丢弃),但每个连接器的上限槽位仍会被它们占用。同时应用OOD短路规则(intake-routing.md触发#1过于宽泛/#2无锚点 → 路由到do_not_generate而非检索)。然后同时使用两个标记调用:
phase0references/intent-recognition.md<主题>bash
python3 "$SKILL_DIR/scripts/run.py" phase0 --query "<用户的研究问题>" --queries "q1|q2|q3|q4" --out $RUN_DIR/phase0/当省略时,rc=10标记路径仍作为备选存在。编排器:检查时钟是否正常;运行一系列检索任务(一个连接器可能运行多个时间窗口)并按SS优先级合并结果。默认任务:arxiv 0-6个月 上限40 · ss_recent 0-6个月 上限30(新鲜度窗口由两个引擎覆盖——arXiv的弱词汇API和SS的强近期搜索——因为缺口新鲜度在此处体现,单个检索器的排名是单点故障)· openalex 6-24个月 上限30 仅已发表 · semanticscholar 6-24个月 上限30 仅已发表 · openreview 0-6个月 上限10 评审中 · oa_recent 0-6个月 上限0(默认关闭)。上限设置得较宽是有意为之——较窄的上限会饱和,阶段0.4分区(下文)会在缺口语料库生成前去除多余噪声(设计说明)。去重前约140条,去重后约110-130条,分区去除off_topic后约50-75条。窗口重叠是当前有意设计(第二个引擎重新覆盖新鲜度窗口;SS优先去重会合并重复项并为arXiv记录补充externalIds)——旧的非重叠规则已废弃。所有上限均可通过按任务覆盖(见§配置)。当查询中提及无链接的论文或系统名称时,传递:URL/ID正则表达式仅识别链接,因此裸名称无法被U获取层识别,也不会成为候选方案差异化对比的锚点(之后可通过添加)。每个名称会通过包含关系与连接器解析——论文标题必须以该名称开头,因为用户使用的是昵称而非完整标题——如果有两篇论文标题均以该名称开头,会报告为AMBIGUOUS且不解析,而非猜测,因为错误的U层条目无上限,会被深度阅读并成为锚点。请改为传递URL。它会将用户的问题原封不动写入——0.4分区、0.5覆盖检查、阶段1和阶段2.1均指向该文件,而非宿主重新输入的字符串,因此转述不会静默传播,压缩后的运行仍可恢复原始请求。它还会从查询中提取URL/ID用户参考到;向宿主输出标记。
--queriesIDEASPARK_POOL--named-papersadd_user_refphase0/user_query.txtphase0/user_refs.json.pattern_summary_pending阶段0.4相关性分区(宿主精度检查;默认开启,可通过关闭):由于检索现在会过度获取,宿主需一次性快速检查每条记录的标题+摘要,将每条标记为,写入 。使用你自己的模型(开放式相关性判断——切勿降级);保持保守——不确定core和adjacent时选择core,仅对明确的跨领域误报(来自无线/推荐/NLP的宽泛“memory-augmented”匹配)、纯综述或无关领域(错误的off_topic是不可恢复的召回损失)硬标记为off_topic。然后执行(确定性)为每条记录标记,将off_topic归档到并从中移除,创建标记,并写入**——阶段0.4标记与连接器标记的来源关联,即每个查询的core/adjacent/off_topic产出。该报告可让查询集设计不再是主观判断:产出主要为off_topic的查询会浪费固定的轮询槽位在噪声上,下次运行应丢弃或重新表述(见references/intent-recognition.md中的VOCABULARY-OWNERSHIP TEST)。可从多个查询获取的论文会被计入每个查询。此步骤在标记之前运行,因此每篇论文的模式标记仅针对留存结果,它替代了弱Haiku 标记作为精度检查**。仅会进入深度阅读池;作为可引用的基线/骨架保留,但不会占用获取槽位。命令会驱动子流程;标记会防止重复运行。
IDEASPARK_RELEVANCE_PARTITION=offcore | adjacent | off_topicphase0/relevance_partition.json[{paper_id, relevance, reason}]apply_partition --out phase0/ --partition <file>relevanceoff_topic.mdlit_results.json.partition_appliedquery_yield.mdfrom_queryoutside_taxonomycoreadjacentnext检索需要3-10分钟(仅openreview连接器就预算600秒)——设置Bash超时≥600秒或在后台运行。
模式标记(宿主步骤):根据将中的每篇论文分类为1-3种15种模式之一 → 写入,列包括。纯分类任务——不需要大推理模型:默认路由到更便宜/更快的模型层或更低推理强度(与§配置中命名的层相同;在此处使用大模型纯粹是浪费);仅当没有更便宜的层时,在宿主模型的隔离环境中运行。每行论文独立,因此对于40+篇论文,标记可分片到2-3个并行快速层子Agent(连续切片;通过确定性组装——它会验证9列结构、行数与论文数一致、paper_id覆盖lit_results.json,替代手动检查)——节省时间,且无质量差异。
references/pattern-summary-rubric.mdlit_results.jsonlit_table.mdpaper_id | year_month | venue | title | ideation pattern tags | bottleneck this paper targets | open issue / unresolved gap | resolves_problem | retrieved_viaNOVELTY_LLM_CLASSIFY_FAST_CMDlit_table_merge --out $RUN_DIR/phase0/ --shards <row-file>...阶段0.5覆盖检查(宿主召回通道,宿主步骤;默认开启,可通过关闭):标记完成后、全文获取前,宿主需阅读整个表格,命名检索池遗漏的最多8个明显重要的成果,写入 。优先选择最近~12个月的成果(过时检索窗口采样不足的近期/前沿工作——这是保持诊断缺口时效性的目标);较旧的基础论文(经典基础策略、>12个月的里程碑)主要是阶段1谱系的工作,仅应作为少数提名,且仅当候选方案基于或与之对比的重要基线/骨架时。使用你自己的模型(开放式意图判断——切勿降级到便宜层);仅在此步骤允许使用WebSearch,且仅用于查找标题,切勿伪造记录;空是有效的诚实输出。然后执行(确定性)通过SS/arXiv连接器验证每个提名(标题匹配度≥0.9)——验证通过的记录会合并到,;无法解析的标题(可能是幻觉)不会被纳入,会存入;已纳入的id会记录在中用于溯源。新纳入的行会被标记(快速层)并通过合并;标记防止重复运行。这既保持真实(每条记录均经连接器验证),又让宿主知识修复薄弱或过时的池。命令会驱动整个子流程。已纳入的参考会进入全文H层(下文)。
IDEASPARK_COVERAGE_CHECK=offphase0/host_refs_nominations.json[{title, id_hint?, why, source: parametric|websearch}][]add_host_refs --out phase0/ --refs <noms>lit_results.jsonretrieved_via=host_recall|host_webhost_refs_unresolved.mdhost_refs.jsonlit_table_merge.coverage_check_donelit_grounding_modenext标题命名的用户参考:如果用户查询通过标题命名锚定论文(“基于LoRA论文”——任何URL/ID正则表达式无法捕获的内容),请在之前通过(入口点表格)注册每个参考。它会确定性地去重合并到——切勿手动编辑该文件(某些工具的文件写入工具会拒绝覆盖从未读取的文件,格式错误的编辑会静默丢弃U获取层)。
phase0_fulltextadd_user_refuser_refs.json阶段0+全文获取 — 必填。生成后(覆盖检查完成后)立即运行(入口点表格),再进行阶段1。池 = U(用户参考,无上限) + H(宿主召回参考,retrieved_via host_*,上限6) + T2(已发表的相关论文,上限10) + T3(arxiv近期相关论文,上限15;也会吸收未使用的H/T2槽位),上限25(不含U),按方法优先排序,并发获取(优先HTML路径,pymupdf PDF备选;每篇论文有预算,因此单个慢PDF不会阻塞步骤)。仅标记的论文符合条件(阶段0.4相关性标记;U绕过,H需要其提名标记为core)——论文在摘要级别可引用,但不会占用深度阅读槽位。任何池中的论文如果获取到空方法部分会被回填——替换为下一个有方法部分的core储备论文(一出一入,保持上限;储备大小,默认6)。输出以paper_id为键();获取失败会降级为摘要+警告。阶段1强制检查该文件()。除了二进制大对象,它还会写入派生的每篇论文阅读视图( + 每篇论文对应一个,内容相同,索引包含tier/source_used/warning)——阶段1读取索引后仅读取需要的论文;二进制大对象保持规范,会刷新两者。获取会命中跨运行内容缓存(,仅成功获取的内容,30天TTL;可通过关闭),因此相邻主题的跨运行重复论文无需网络时间。
lit_table.mdphase0_fulltextcoreadjacent--backfillfulltext_cache.json{tier, intro, method, source_used, warning}error: fulltext_not_fetchedphase0/fulltext/index.json.mdphase1_fulltext_topup~/.cache/ideaspark/fulltext/IDEASPARK_FETCH_CACHE=offPhase 1 — Bottleneck identification
阶段1 — 瓶颈识别
One isolated LLM call. Prompt: references/system-prompts/bottleneck_identify.txt. Inputs: user query + intake, , (all-failed cache → continue with , abstract-level residue confidence), . Output : (+ — missing fields are inferred, never asked), (≥2 paper_id cited inline), (), (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), .
phase0/lit_table.mdphase0/fulltext_cache.jsonfulltext_degraded: truephase0/lit_results.jsonphase1/phase1_output.jsonintake_inferred_fields[]bottleneck_statementclosest_adjacent[]{paper_id, summary_and_residue}what_phase_0_did_not_address[]state ∈ {proceed, do_not_generate}Routing: proceed (literature-groundable, no OOD trigger) or do_not_generate (too-broad / no-anchor OOD, <5 truly-relevant papers, genuinely blank space, or benchmark/system construction) → write with concrete remedial steps — terminal.
do_not_generate.md一次隔离LLM调用。提示:references/system-prompts/bottleneck_identify.txt。输入:用户查询 + 输入信息、、(全失败缓存 → 以继续,基于摘要级残留置信度)、。输出:(+——缺失字段会被推断,不会询问用户)、(≥2个paper_id内联引用)、()、(每个缺口末尾有内联风险条款——从业者成本和学术成本同等重要;当真实情况如此时,缺口被表述为问题类的结构属性,以锚点为主要实例,否则声明为单一案例)、。
phase0/lit_table.mdphase0/fulltext_cache.jsonfulltext_degraded: truephase0/lit_results.jsonphase1/phase1_output.jsonintake_inferred_fields[]bottleneck_statementclosest_adjacent[]{paper_id, summary_and_residue}what_phase_0_did_not_address[]state ∈ {proceed, do_not_generate}路由:proceed(有文献支撑,无OOD触发)或do_not_generate(过于宽泛/无锚点OOD、<5篇真正相关论文、真正空白领域或基准测试/系统构建)→ 写入并提供具体补救步骤——终端状态。
do_not_generate.mdPhase 2 — Selection + generation (ONE isolated context, TWO outputs)
阶段2 — 选择 + 生成(一个隔离上下文,两个输出)
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):
2.1 — prompt references/system-prompts/ideate_select.txt; inputs , (all 15 patterns' Definition / Operational signature / When to apply — selection at WHAT/WHEN level), , . Pick the anchor gap (type-bound to ); 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/or 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 defense (validator presence-checks it; audit weighs it). Record saturation (transparency, not a filter). Output : (index 0 = anchor) + (or when anchor-only) + + + . Retry mode: when 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: 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 .
phase1_output.jsonreferences/ideation-patterns/overview.mdreferences/ideation-patterns/companion-combos.mdlit_table.mdintake.contribution_typecomposition_notephase2_select/phase2_select_output.jsonselected_gaps[]coherence_thread_typen_acomposition_notepattern_saturationdeferred_gaps[]$RUN_DIR/attempt_1/nextIDEASPARK_CROSS_RUN_DEDUP=off2.2 — prompt references/system-prompts/ideate_generate.txt; inputs 2.1 output, , (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 (compare + via its overview.md; then read the picked card's + Step-by-Step). Output — ONE candidate, 12 flat fields: / / / / ; (, mirrors selected_gaps one-for-one); (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); (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 / 5 months, ~$10k API — overridable per user via , see § Configuration); (substantive deltas, not "different pattern"); + ; (own vocabulary — recent collision channel); (other communities' names for the same mechanism, from parametric knowledge — multi-year alias collision channel); (echoed verbatim from 2.1). Reality constraints at writing time: carries three mandatory blocks — a PREMISES ledger (load-bearing premises + domain justification; bets tagged ; WHEN the mechanism consumes sampled/observed data, at least one OBSERVATION-MODEL premise — how are the inputs sampled, is that unbiased here — else the literal ; 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 / model-access level / annotation / 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 / / is forbidden — an unnamed quantity cannot be swept or graded), while states metric + direction + control and may carry a numeric bar ONLY when tagged or ; invented bars are fabrication. Artifact versions, algebraic constants, definitional settings and experiment-scale counts are not parameters and are unaffected. Both kill-switch fields (, ) are locked from here on — see Phase 3 for the single audited exception.
phase1_output.jsonlit_results.jsonreferences/ideation-sub-patterns/when_to_pick_this_onedifferentiation_within_parenttactical_patternphase2_generate/phase2_generate_output.jsontitlehookcore_mechanismcore_mechanism_reasoningcore_mechanism_stepsgap_closure[]{gap, main_pattern, sub_pattern: "C## (parent pattern name)", how_closed}falsification_predictioncompute_budgetIDEASPARK_DEFAULT_COMPUTEdifferentiation_from_lit[]almost_prior_paper_idwhat_step_was_missedsignature_terms[]alias_terms[]composition_notecore_mechanism_reasoninguntested — falsification targetobservation-model: n/a>= 95%top 5every 2e3falsification_predictionderived:measured in <paper_id>falsification_predictioncompute_budgetCitation gate (deterministic, MANDATORY before Phase 3):
bash
python3 "$SKILL_DIR/scripts/run.py" validate --phase2 $RUN_DIR/phase2_generate/phase2_generate_output.jsonAny = a citation was guessed from the parent's gist, not read from . Fix against (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 . ( runs this gate automatically.)
failsub_patternoverview.mdreferences/ideation-sub-patterns/overview.mdrecipe_application_checknextCoherence 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/system-prompts/coherence_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/default/selection rule, the form a magic constant takes to evade every symbol-keyed check; method fields only, numbers belong to the audit), numeric dry-run on one small concrete instance (magnitude/probability 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 ), degenerate probes (empty/k=0/ties), claim→step mapping AND grading (every asserted property mapped to the step that establishes it AND graded / — assumptions listed / — wording downgraded / ; 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: / / ). OBSTACLE HOLES — findings whose honest fix is a redesign, or which coincide with the obstacle the candidate declares it exists to solve (incl. ) — must NOT be patched around with avoidance-style repairs (abstain/clamp/skip); they go to as blocking, verbatim. Verdict | ; repairs are patch-only via the SAME merger (), scoped to making the written procedure sound (core_mechanism*, how_closed narrative, signature/alias 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 for the audit to weigh. Single pass, never abandons. The 3.2 audit stays blind to this report's trace/verdict/patches — with ONE exception: blocking entries are executed evidence, so the gate ALSO writes them to (self-contained: verbatim step quote + script excerpt + measured numbers + reading_dependence + per entry — what it would TAKE to pass this obstacle: the identifying condition any mechanism here needs, which sources of it are available vs excluded and why, and what is worth salvaging; diagnosis, not the redesign the repair contract forbids, and honestly empty when the evidence supports nothing concrete — passes it to the retry as a directive), which lists as a 3.2 input; the audit must disposition each (uphold, or refute by naming a concrete modeling/arithmetic flaw — 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 exists it is the canonical candidate for every later phase ( wires this automatically). It validates that the algorithm survives on paper — NOT that it works empirically (falsification experiment) or is novel (audit).
falsification_predictionunexecutedestablishedconditionaloverclaimempiricalconfronts_obstacleequivalent_to_naiven_aequivalent_to_naiveunrepaired[]passpatched--out-name refined_candidate.jsonunrepaired[]unrepaired[]phase2_coherence/blocking_findings.jsonstructural_requirementnextnextnextrefined_candidate.jsonnext在一个隔离上下文连续运行2.1和2.2,写入两个输出文件(两者均属于生成侧;仅对抗性对需要独立调用):
2.1 — 提示references/system-prompts/ideate_select.txt;输入、(所有15种模式的定义/操作特征/适用场景——在WHAT/WHEN级别选择)、、。选择锚定缺口(类型绑定到);提交模式组合——默认≥2种不同模式,优先作为锚定的链式组合(来自companion-combos的已验证第二种模式,带有命名中间对象)和/或通过移除测试证明其必要性的兄弟模式(“没有它,锚定的故事不完整”)——仅锚定是合法且常见的(总共1-3个缺口,≤2个兄弟模式);单一模式选择需要辩护(验证器会检查其存在;审核会权衡)。记录饱和度(透明,非过滤)。输出:(索引0=锚定) + (仅锚定时为) + + + 。重试模式:当存在时,提示的可选重试输入生效——归档的审核+选择成为负约束;仅锚定是有效的重试结果。跨运行去重:命令会扫描兄弟运行目录并添加软负锚输入行(其标准候选方案的标题+特征词,最近5个),因此相邻方向的运行不会静默重复发明相同机制家族;设计为软约束(见ideate_select.txt的可选跨运行输入),可通过关闭。
phase1_output.jsonreferences/ideation-patterns/overview.mdreferences/ideation-patterns/companion-combos.mdlit_table.mdintake.contribution_typecomposition_notephase2_select/phase2_select_output.jsonselected_gaps[]coherence_thread_typen_acomposition_notepattern_saturationdeferred_gaps[]$RUN_DIR/attempt_1/nextIDEASPARK_CROSS_RUN_DEDUP=off2.2 — 提示references/system-prompts/ideate_generate.txt;输入2.1输出、、(仅closest_adjacent条目——读取前过滤到这些paper_ids;提示禁止将完整转储拉入上下文),以及每个缺口对应的一个中的子模式卡片(通过其overview.md比较+;然后读取选中卡片的+Step-by-Step)。输出——一个候选方案,12个扁平字段:////;(,与selected_gaps一一对应);(单段:最小实验+带方向的指标+一个命名的关键变量+针对该变量的负控制,预测下游结果指标回到基线——非同义反复);(用户相对值,GPU天+API美元线,当使用付费API时;默认输入范围=80GB级GPU,≤8并发,≈150 GPU天/5个月,~$10k API——可通过按用户覆盖,见§配置);(实质性差异,而非“不同模式”);+;(自有词汇——近期碰撞通道);(其他社区对同一机制的命名,来自参数化知识——多年别名碰撞通道);(与2.1完全相同)。写入时的现实约束:包含三个必填块——前提 ledger(关键前提+领域理由;标记为的假设;当机制使用采样/观测数据时,至少有一个OBSERVATION-MODEL前提——输入如何采样,在此处是否无偏——否则为字面;当机制估计任何数量时,精确声明ESTIMAND)、NAIVE-BASELINE AUDIT(陈述朴素版本;为什么它不生效——分支(i)朴素版本依赖错误前提→直面它就是贡献,附带STANDARD-TOOL FOLLOW-UP:如果直面是其他领域的教科书工具,命名使该实例未解决的领域特定结构或声明贡献为应用级,(ii)朴素版本足够→诚实地展示增量信号,(iii)朴素版本有效但领域不相信→极简主义+证据),然后是设计理由——此外,每个调用的数据集/模型访问级别/标注/工具必须是可命名的现有产物(硬规则3;适度的自建资源允许,成本计入compute_budget),每个声明以可辩护的强度表述——仅当假设明确时使用保证级措辞(硬规则4;一致性检查会对此评分,带有诚实假设的强声明优于含糊的弱声明),每个数字带有溯源(硬规则5):方法参数是带有默认值+选择规则的命名符号(禁止裸//——未命名的数量无法被扫描或评分),而声明指标+方向+控制,仅当标记为或时可带有数值阈值;虚构阈值是伪造。产物版本、代数常数、定义设置和实验规模计数不是参数,不受影响。两个终止开关字段(、)从此处锁定——见阶段3的唯一审核例外。
phase1_output.jsonlit_results.jsonreferences/ideation-sub-patterns/when_to_pick_this_onedifferentiation_within_parenttactical_patternphase2_generate/phase2_generate_output.jsontitlehookcore_mechanismcore_mechanism_reasoningcore_mechanism_stepsgap_closure[]{gap, main_pattern, sub_pattern: "C## (parent pattern name)", how_closed}falsification_predictioncompute_budgetIDEASPARK_DEFAULT_COMPUTEdifferentiation_from_lit[]almost_prior_paper_idwhat_step_was_missedsignature_terms[]alias_terms[]composition_notecore_mechanism_reasoninguntested — falsification targetobservation-model: n/a>= 95%top 5every 2e3falsification_predictionderived:measured in <paper_id>falsification_predictioncompute_budget引用检查(确定性,阶段3前必填):
bash
python3 "$SKILL_DIR/scripts/run.py" validate --phase2 $RUN_DIR/phase2_generate/phase2_generate_output.json任何 = 引用是从父模式要点猜测的,而非从读取的。对照修复(或打开卡片重新生成2.2)并重新运行直到通过——该检查仅证明父模式一致性;core_mechanism是否执行集群的实际策略是阶段3.2的。(命令会自动运行此检查。)
failsub_patternoverview.mdreferences/ideation-sub-patterns/overview.mdrecipe_application_checknext一致性检查(2.3 — 一次隔离LLM调用,引用检查后、3.2审核前必填;3.1碰撞可与它并行运行):提示references/system-prompts/coherence_trace.txt;输入:2.2候选方案+2.1规范;必须是全新上下文,切勿使用2.1+2.2的Agent(编写逻辑错误的上下文会自我验证)。它通过执行而非审查来验证内部程序有效性——五个跟踪操作:形式化数据流(未定义符号、缺失生产者、循环依赖和UNBOUND PARAMETERS——程序读取的参数但无名称/默认值/选择规则,这是魔法常量逃避所有符号键检查的形式;仅方法字段,中的数字属于审核)、在一个小型具体实例上进行数值试运行(量级/概率荒谬——逻辑错误读起来流畅,仅在计算时显现;当有代码执行工具时,检查会编写并运行标准库Python脚本并粘贴脚本+输出,否则手动计算并标记)、退化探测(空/k=0/平局)、声明→步骤映射与评分(每个断言属性映射到建立它的步骤并评分/——列出假设/——措辞降级/;统计声明由执行的蒙特卡洛和测量数字解决,定理式声明记录为证明义务——最多为conditional;评分从不奖励模糊性:全含糊的声明本身就是弱点),以及NAIVE-BASELINE COMPARISON(独立构建朴素版本——切勿使用候选方案自己声明的版本——在同一实例上运行,并与候选方案声明的分支对比://)。OBSTACLE HOLES——诚实修复需要重新设计的发现,或与候选方案声明要解决的障碍一致的发现(包括)——切勿通过规避式修复(弃权/钳位/跳过)修补;它们会作为阻塞项写入,原文保留。判定|;修复仅通过同一合并器()进行补丁,范围限于使书面程序合理(core_mechanism*、how_closed叙述、签名/别名术语当修复改变机制时)——新颖性表面、模式绑定和终止开关字段不在范围内;无法通过补丁修复的发现会写入供审核权衡。单次运行,永不放弃。3.2审核对该报告的跟踪/判定/补丁保持盲态——唯一例外:阻塞的条目是执行证据,因此检查还会将其写入(自包含:原文步骤引用+脚本摘录+测量数字+reading_dependence+每个条目的——通过此障碍需要什么:此处任何机制需要的识别条件,哪些来源可用/排除及原因,以及哪些值得保留;诊断,而非修复规则禁止的重新设计,当证据不支持具体内容时诚实地留空——命令会将其作为指令传递给重试),命令会将其列为3.2输入;审核必须处理每个条目(支持,或通过命名具体建模/算术缺陷反驳——命令会确定性地退回跳过处理或在支持的发现上推进的审核报告)。形式化歧义通过检查的双读取协议控制(对模糊操作术语的每个可辩护解读都会执行;发现标记为reading_robust或reading_dependent)。当存在时,它是后续所有阶段的标准候选方案(命令会自动连接)。它验证算法在纸面上可行——不验证其经验有效性(证伪实验)或新颖性(审核)。
falsification_predictionunexecutedestablishedconditionaloverclaimempiricalconfronts_obstacleequivalent_to_naiven_aequivalent_to_naiveunrepaired[]passpatched--out-name refined_candidate.jsonunrepaired[]unrepaired[]phase2_coherence/blocking_findings.jsonstructural_requirementnextnextnextrefined_candidate.jsonnextPhase 3 — Quality gauntlet
阶段3 — 质量检验
3.1 collision (orchestrator, no LLM): entry-point table. May be LAUNCHED IN PARALLEL with the 2.3 gate (on the 2.2 output — emits the background launch alongside the 2.3 step): collision reads only /, a sidecar records the terms actually used, and 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 with a per-hit tag: signature — the candidate's over a 10-month window (contemporaneous scoop risk); alias — the candidate's (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 → 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 → 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/channel by lexical overlap with the channel's own terms; zero-relevance BM25 noise dropped unconditionally; drops printed; untruncated pool preserved as ), so the audit can consume in a few sequential Read chunks — no jq two-pass triage needed.
nextsignature_terms[]alias_terms[].collision_terms.jsonnextcollision_hits.jsoncollision_channelsignature_terms[]alias_terms[]signature_terms[]alias_terms[]collision_hits.full.jsoncollision_hits.json3.2 audit (one isolated LLM call): prompt references/system-prompts/critique.txt; inputs: candidate, 2.1 spec, , , , 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 disposition additionally triggers a bounded refutation re-check (, fresh call) that requires before trusting the verdict — an invalid refutation counts as upheld and bounces the audit), and each cited sub-pattern card (strip the leading code from ; typically 1-3 cards, others NOT loaded). Five corpus-anchored checks:
lit_table.mdcollision_hits.jsonreferences/anti-patterns.mdphase2_coherence/blocking_findings.jsonrefutedrefutation_recheck.txtnextreferences/ideation-sub-patterns/<C##>.mdsub_pattern| Check | Question |
|---|---|
| gap_closure_reject_check | does the candidate match a documented Reject lesson in each cited sub-pattern card ( |
| recipe_application_check | does |
| anti_pattern_check | if the SET of |
| paper_pointed_threat | most specific subsuming/competing paper in |
| falsification_structure_check | does |
Verdict is two-layer. Hard floor (LLM cannot override) → : triggered Reject lesson / unmitigatable anti-pattern / exact-mechanism collision. Soft judgment otherwise → (only trivial borderlines; concerns surface in Phase 4's reviewer_concerns) or with concrete (scopes: / / ). must cite specific check findings. The audit judges only — it never modifies the candidate.
abandonadvancereviserevision_targets[]tacticalsub_patternfalsificationverdict_rationaleRouting on verdict:
-
advance → Phase 4 reads the 2.2 candidate directly.
-
revise → 3.3 (one isolated LLM call, prompt references/system-prompts/revise.txt): reads candidate + 2.1 spec + the revision brief (—
phase3_revise_briefmaterializesnext, the audit minus the bulky reject-lesson quotations; full report stays on disk for lesson-specific lookups); emits patch-onlyrevise_brief.json— one entry per revision_target, opsapplied_revisions[]/replace/append_sentence/append_items/swap_sub_pattern, never echoes the candidate, never re-judges the verdict. Then run the merger (entry-point table, WITHrewrite_falsification) → writes--critique+ back-injects it into the patch file. Kill-switch fields are merger-refused with ONE audited exception: aphase3_revise/final_candidate.jsontarget fromscope=falsificationis applied via the dedicatedfalsification_structure_checkop (authorization verified against the audit report viarewrite_falsification; same experiment/metric/claim, structure repaired; max one per run). When the merger prints--critique, run the falsification re-audit (self-contained prompt references/system-prompts/falsification_reaudit.txt, reading thefalsification_rewrittenslice ofphase3_falsification_view→final_candidate.json):phase3_critique/falsification_reaudit.json→ Phase 4;advance→abandon.phase_3_failed.mdhas no revision route under any scope. Nocompute_budgetscope — gap-level changes route through the abandon-retry below, never through patches.composition -
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/anti-pattern/recipe 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;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).
do_not_generatecomputes all of this deterministically from the archived critique reports. On the first abandon, archive the attempt and regenerate —nextbashmkdir -p "$RUN_DIR/attempt_1" && \ mv "$RUN_DIR/phase2_select" "$RUN_DIR/phase2_generate" "$RUN_DIR/phase2_coherence" "$RUN_DIR/phase3_collision" \ "$RUN_DIR/phase3_critique" "$RUN_DIR/phase3_revise" "$RUN_DIR/attempt_1/" 2>/dev/null; \ touch "$RUN_DIR/.retry_used"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/1 artifacts are reused as-is.Laters → the same rule, deterministically (abandoncompares this attempt's lesson set against the union overnextarchives): new mechanism-level lessons → directed retry to the nextattempt_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.attempt_N, touchphase1/; the re-diagnosed framing gets ONE attempt); no new lessons / cap reached / post-bottleneck failure → write.bottleneck_retry_usedciting EVERY attempt's verdict_rationale + triggering checks + user-side options — terminal.phase_3_failed.md
3.1碰撞检索(编排器,无LLM):入口点表格。可与2.3检查并行启动(基于2.2输出——命令会在2.3步骤旁输出后台启动指令):碰撞检索仅读取/,副记录实际使用的术语,如果一致性补丁改变了这些术语,命令会重新执行碰撞检索(罕见——术语修复仅限于改变机制的补丁)。通过所有4个连接器的两个检索通道,合并到并带有每个结果的标记:signature——候选方案的在10个月窗口内(同期抢先风险);alias——候选方案的(其他社区对同一机制的命名,在2.2从参数化知识生成)在48个月窗口内(重命名祖先风险——“目标条件成功检测器vs目标图像条件评分器”盲点是词汇性的,而非时间性的,因此仅扩大signature窗口无法捕获)。缺失→rc=11标记:根据intent-recognition.md的Collision模式生成两个术语集(每个术语3-7词——长句子会破坏URL编码),编辑候选方案JSON,重新调用。仅缺失→强烈警告,跳过alias通道(添加该字段并重新运行以关闭盲点)。面向审核的池按通道进行相关性截断(每个通道≤120条结果,基于与通道自身术语的词汇重叠;零相关性BM25噪声无条件丢弃;丢弃情况会打印;未截断的池保留为),因此审核可通过几次连续Read块消费——无需jq两次分类。
nextsignature_terms[]alias_terms[].collision_terms.jsonnextcollision_hits.jsoncollision_channelsignature_terms[]alias_terms[]signature_terms[]alias_terms[]collision_hits.full.jsoncollision_hits.json3.2审核(一次隔离LLM调用):提示references/system-prompts/critique.txt;输入:候选方案、2.1规范、、、、(如果存在——2.3检查的执行阻塞证据——报告必须处理每个条目,支持时禁止推进;处理会触发有限反驳重检查(,全新调用),命令要求在信任判定前执行——无效反驳视为支持并退回审核),以及每个引用的子模式卡片(从中去除前导代码;通常1-3张卡片,不加载其他卡片)。五个语料库锚定检查:
lit_table.mdcollision_hits.jsonreferences/anti-patterns.mdphase2_coherence/blocking_findings.jsonrefutedrefutation_recheck.txtnextreferences/ideation-sub-patterns/<C##>.mdsub_pattern| 检查项 | 问题 |
|---|---|
| gap_closure_reject_check | 候选方案是否匹配每个引用子模式卡片中记录的Reject教训( |
| recipe_application_check | |
| anti_pattern_check | 如果 |
| paper_pointed_threat | |
| falsification_structure_check | |
判定分为两层。硬下限(LLM无法覆盖)→:触发Reject教训/无法缓解的反模式/精确机制碰撞。软判断否则→(仅轻微边界问题;问题会在阶段4的reviewer_concerns中体现)或并附带具体(范围://)。必须引用具体检查发现。审核仅做判断——从不修改候选方案。
abandonadvancereviserevision_targets[]tacticalsub_patternfalsificationverdict_rationale判定路由:
-
advance→阶段4直接读取2.2候选方案。
-
revise→3.3(一次隔离LLM调用,提示references/system-prompts/revise.txt):读取候选方案+2.1规范+修订摘要(——
phase3_revise_brief命令会生成next,即去除冗长拒绝教训引用的审核报告;完整报告保留在磁盘供教训特定查找);输出仅补丁的revise_brief.json——每个revision_target对应一个条目,操作applied_revisions[]/replace/append_sentence/append_items/swap_sub_pattern,从不回显候选方案,从不重新判断判定。然后运行合并器(入口点表格,带rewrite_falsification)→写入--critique+将其回填到补丁文件。终止开关字段被合并器拒绝,唯一审核例外:来自phase3_revise/final_candidate.json的falsification_structure_check目标通过专用scope=falsification操作应用(通过rewrite_falsification验证审核报告授权;相同实验/指标/声明,修复结构;每次运行最多一次)。当合并器打印--critique时,运行证伪重审核(自包含提示references/system-prompts/falsification_reaudit.txt,读取falsification_rewritten的final_candidate.json切片→phase3_falsification_view):phase3_critique/falsification_reaudit.json→阶段4;advance→abandon。phase_3_failed.md在任何范围内都无修订路径。无compute_budget范围——缺口级更改通过下文的放弃-重试路由,从不通过补丁。composition -
abandon→信息增益重试规则(一条规则,无失败类型分类;一次性保证禁止询问用户,而非内部重新生成)。每次失败尝试的审核会被简化为教训集——支持的执行阻塞发现(机制级正指令)、无法解决的归并论文(机制家族负锚点)、触发的拒绝/反模式/配方教训(生成质量约束)。重试必须携带之前生成没有的新教训:第一次放弃总会重试(生成时无审核信息);后续放弃仅当其教训集添加了所有归档尝试教训集之外的条目时才重试,新教训作为指令注入。跨尝试重复出现的无法解决归并教训会在框架级别绑定→一次瓶颈重新诊断(阶段1重试模式;仍是合法退出),新框架获得一次候选方案尝试。终止条件:无新教训,或达到候选循环上限(每个框架3次;最坏情况每次运行4次检验循环)。
do_not_generate命令会根据归档的审核报告确定性地计算所有这些。第一次放弃时,归档尝试并重新生成——nextbashmkdir -p "$RUN_DIR/attempt_1" && \\ mv "$RUN_DIR/phase2_select" "$RUN_DIR/phase2_generate" "$RUN_DIR/phase2_coherence" "$RUN_DIR/phase3_collision" \\ "$RUN_DIR/phase3_critique" "$RUN_DIR/phase3_revise" "$RUN_DIR/attempt_1/" 2>/dev/null; \\ touch "$RUN_DIR/.retry_used"然后在重试模式下重新运行阶段2(归档的审核+选择=负约束;阻塞障碍发现=新机制必须面对的正指令)、引用检查、3.1、3.2。阶段0/1产物会原样复用。后续s→同一规则,确定性(abandon命令会将此尝试的教训集与next归档的并集对比):新机制级教训→定向重试到下一个attempt_N/(所有归档审核+选择作为约束;新教训会在输出中命名);重复归并教训→瓶颈重新诊断(归档包括attempt_N,创建phase1/标记;重新诊断的框架获得一次尝试);无新教训/达到上限/瓶颈后失败→写入.bottleneck_retry_used,引用每次尝试的verdict_rationale+触发检查+用户侧选项——终端状态。phase_3_failed.md
Phase 4 — Expansion + packaging
阶段4 — 扩展 + 打包
Six steps in order ( emits each with the correct flags for the advance vs revise path — on the revise path is and 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):
next--candidatefinal_candidate.json--phase3-revise- skeleton (orchestrator): populates every mechanical field — kill-switch echoes (byte-identical from the candidate), venue_years,
differentiation_from_lit,almost_prior_venue_year,why_prior_stopped[].paper_id/venue_year(pattern_distribution + candidate_uses),domain_landscape,literature_breakdown(lifted from audit + patch),reviewer_concerns_and_responses[].attack/severity/fields_changed_to_address(bucketed againstfeasibility_validation.compute) — and marks every prose fieldintake.compute.<TODO[path]: hint> - fill (one isolated LLM call, prompt references/system-prompts/expand.txt): author the TECHNICAL TODO paths as one flat map →
{path: value}. The derive-owned paths (phase4/fill_map.json+ alltitle_zh) are explicitly EXCLUDED — the derive step owns them. No calendar projections; no experiment matrix / ablation plan / baseline table — the skill produces IDEA + falsifiability + feasibility judgment, not experimental engineering.plain_* - assemble (partial) → derive → assemble (final): the orchestrator assembles the technical map first (, derive-owned placeholders remain — the WARN is expected); then derive (one isolated LLM call, prompt references/system-prompts/derive_plain.txt) mechanically rewrites the finished technical fields into the plain register (
phase4_expansion.json+title_zh→plain_*) — register transformation + translation with NO new facts, so it runs on the CLASSIFY_FAST tier by default (fallback ladder:phase4/derive_map.json→ 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 (NOVELTY_LLM_CLASSIFY_FAST_CMD— overlapping paths are a hard error) and extractsphase4_assemble --fill-map <tech> --fill-map <derive>(phase4/method_view.json— 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.phase4_method_view - implementability audit (4.1.5, one isolated LLM call, default on): prompt references/system-prompts/implementability_audit.txt — fresh skeptical-engineer persona (separate from the 4.fill author) reads (fallback: the full expansion) and rewrites each method step into a buildable spec:
method_view.json(one per step, same ids/order,enriched_steps[]+what_changes+what_to_do_en) +what_to_do_zh(underspecified_points[]— unfillable holes stay honest as{step_id, hole, fill, severity: filled|open}). Compute-agnostic by design (resource feasibility is 4.1's job); never adds/removes/renames steps; never carries kill-switch fields. Outputopen.phase4/phase4_implementability.json - validate + render: run the validators (below), then — templating only, no model call; auto-detects the sibling implementability file and merges
phase4_renderby step_id into the rendered Method (deterministic; no-op when absent). Writesenriched_steps(plain Chinese, domain-newcomer register) +idea.std.zh.md(plain English) +idea.std.en.md(rigorous English — the novelty + validity defense) +idea.detail.en.md(auto-compiled to PDF when xelatex/tectonic is on PATH; skipped with a hint otherwise).idea.std.{en,zh}.tex
Final response: read all three markdown cards and return them inline under headings 中文版 / English / Reviewer version. Other phase outputs stay on disk for inspection, not echoed.
六个步骤按顺序执行(命令会根据advance或revise路径输出正确的标志——revise路径下是并传递;advance路径下是标准候选方案(2.3补丁时为refined_candidate.json,否则为2.2输出)且省略该标志):
next--candidatefinal_candidate.json--phase3-revise- 骨架生成(编排器):填充所有机械字段——终止开关回显(与候选方案字节相同)、会议年份、
differentiation_from_lit、almost_prior_venue_year、why_prior_stopped[].paper_id/venue_year(pattern_distribution+candidate_uses)、domain_landscape、literature_breakdown(从审核+补丁提取)、reviewer_concerns_and_responses[].attack/severity/fields_changed_to_address(与feasibility_validation.compute对比分类)——并将所有 prose 字段标记为intake.compute。<TODO[path]: hint> - 填充(一次隔离LLM调用,提示references/system-prompts/expand.txt):将技术TODO路径编写为一个扁平的映射→
{path: value}。derive专属路径(phase4/fill_map.json+所有title_zh)明确排除——derive步骤负责这些。无日历预测;无实验矩阵/消融计划/基线表格——技能生成想法+可证伪性+可行性判断,而非实验工程。plain_* - 组装(部分)→衍生→组装(最终):编排器先组装技术映射(,derive专属占位符保留——WARN是预期的);然后衍生(一次隔离LLM调用,提示references/system-prompts/derive_plain.txt)将完成的技术字段机械重写为简洁版本(
phase4_expansion.json+title_zh→plain_*)——仅寄存器转换+翻译,无新事实,因此默认在CLASSIFY_FAST tier运行(备选阶梯:phase4/derive_map.json→宿主便宜模型→宿主模型隔离;即使最后一级也保持低成本,因为输入仅为完成的prose);然后最终组装合并两个映射(NOVELTY_LLM_CLASSIFY_FAST_CMD——重叠路径是硬错误)并提取phase4_assemble --fill-map <tech> --fill-map <derive>(phase4/method_view.json——4.1.5审核读取的仅方法切片:method_flow+简洁步骤+关键方程+声明)。组装器会验证每个路径都对应真实的TODO,并拒绝每个映射中的终止开关根路径。phase4_method_view - 可实施性审核(4.1.5,一次隔离LLM调用,默认开启):提示references/system-prompts/implementability_audit.txt——全新的怀疑工程师角色(与4.fill作者分离)读取(备选:完整扩展内容)并将每个方法步骤重写为可构建的规范:
method_view.json(每个步骤对应一个,id/顺序相同,enriched_steps[]+what_changes+what_to_do_en)+what_to_do_zh(underspecified_points[]——无法填充的漏洞诚实地标记为{step_id, hole, fill, severity: filled|open})。设计为与计算无关(资源可行性是4.1的工作);从不添加/删除/重命名步骤;从不包含终止开关字段。输出open。phase4/phase4_implementability.json - 验证 + 渲染:运行验证器(下文),然后执行——仅模板化,无模型调用;自动检测兄弟可实施性文件并按step_id将
phase4_render合并到渲染的Method中(确定性;不存在时无操作)。写入enriched_steps(简洁中文,领域新手版)+idea.std.zh.md(简洁英文)+idea.std.en.md(严谨英文——新颖性+有效性辩护)+idea.detail.en.md(当xelatex/tectonic在PATH中时自动编译为PDF;否则跳过并提示)。idea.std.{en,zh}.tex
最终响应:读取所有三个Markdown卡片并在标题“中文版 / English / Reviewer version”下返回内联内容。其他阶段输出保留在磁盘供检查,不回显。
Validators
验证器
bash
undefinedbash
undefinedadvance path: --phase3 = phase3_critique_output.json; revise path: --phase3 = phase3_revise_output.json
advance路径:--phase3 = phase3_critique_output.json; revise路径:--phase3 = phase3_revise_output.json
--phase2 = the CANONICAL candidate (refined_candidate.json when 2.3 patched, else the 2.2 output)
--phase2 = 标准候选方案(2.3补丁时为refined_candidate.json,否则为2.2输出)
python3 "$SKILL_DIR/scripts/run.py" validate
--phase1 $RUN_DIR/phase1/phase1_output.json
--phase2-select $RUN_DIR/phase2_select/phase2_select_output.json
--phase2 <canonical candidate file>
--phase3 <see comment>
--phase4 $RUN_DIR/phase4/phase4_expansion.json
--phase4-impl $RUN_DIR/phase4/phase4_implementability.json # optional; enables implementability checks
--phase1 $RUN_DIR/phase1/phase1_output.json
--phase2-select $RUN_DIR/phase2_select/phase2_select_output.json
--phase2 <canonical candidate file>
--phase3 <see comment>
--phase4 $RUN_DIR/phase4/phase4_expansion.json
--phase4-impl $RUN_DIR/phase4/phase4_implementability.json # optional; enables implementability checks
| Validator | Check | Severity |
|---|---|---|
| **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) |
| **alias_collateral_coverage** | `alias_terms[]` actually queries the cross-community families Phase 1 pinned as `is_collateral` nodes in `method_lineage`. Needs BOTH phase1 and phase2 paths. Runs in the Phase 2.2 citation gate — i.e. BEFORE 3.1 collision, which consumes `alias_terms[]` verbatim, so a miss caught later is a wasted retrieval budget. Zero coverage = fail; partial = warn naming the unqueried families (a family can be genuinely unreachable, and a forced fabricated term would evict real ones from a channel that truncates by lexical relevance — `composition_note` carries the skip defense, the 3.2 audit weighs it). | fail (zero) / warn (partial) |
| **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) |
| **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) |
| **implementability_completeness** | `enriched_steps[]` one-per-step (same ids/order, EN+ZH), `underspecified_points[]` present (`[]` allowed), NO kill-switch field in the file. | fail (hard) |
| **user_direction** | when `intake.user_direction` is set, `phase2_select` must carry a `user_direction_disposition` (adopted/departed, `why_departed` required on departed), and both quoted spans must appear in `phase0/user_query.txt`. Hard rule 10 keeps a user-named solution OUT of gap selection on purpose; this only forbids dropping it silently. | fail (hard) |
| **implementability_readability** | std-register fields: no `占位`/`placeholder` leak, no bare English jargon dropped into Chinese prose. | warn |
**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.python3 "$SKILL_DIR/scripts/run.py" validate \
--phase1 $RUN_DIR/phase1/phase1_output.json \
--phase2-select $RUN_DIR/phase2_select/phase2_select_output.json \
--phase2 <标准候选方案文件> \
--phase3 <见注释> \
--phase4 $RUN_DIR/phase4/phase4_expansion.json \
--phase4-impl $RUN_DIR/phase4/phase4_implementability.json # 可选;启用可实施性检查
| 验证器 | 检查内容 | 严重程度 |
|---|---|---|
| **subpattern_citation_consistency** | 每个`gap_closure[].sub_pattern`解析到overview.md中真实的C##集群,其真实父模式==引用的`main_pattern`,且括号内容==该集群的父显示名称。主要用途:阶段2.2引用检查;在此处重新运行无害。 | 失败(硬) |
| **alias_collateral_coverage** | `alias_terms[]`实际查询了阶段1在`method_lineage`中标记为`is_collateral`节点的跨社区家族。需要同时提供phase1和phase2路径。在阶段2.2引用检查中运行——即3.1碰撞检索之前,后者会原样使用`alias_terms[]`,因此后期发现遗漏会浪费检索预算。零覆盖=失败;部分覆盖=警告,命名未查询的家族(家族可能确实无法访问,强制伪造术语会从按词汇相关性截断的通道中驱逐真实术语——`composition_note`包含跳过辩护,3.2审核会权衡)。 | 失败(零覆盖)/警告(部分覆盖) |
| **kill_switch_integrity** | `falsification_prediction`+`compute_budget`在阶段2.2→[3.3 final_candidate→]4中字节相同。经过审核的证伪重写(`falsification_rewritten`标记+匹配的`rewrite_falsification`应用条目——不一致则失败)后,`falsification_prediction`的锚点重新基于3.3 final_candidate(3.3→4必须匹配);`compute_budget`始终全链相同。 | 失败(硬) |
| **expansion_completeness** | motivation(≥2个`why_prior_stopped`)、`method_flow.steps[]`(每个带有`linked_component`+`linked_falsification`)、`feasibility_validation`(5个子判定+`overall`)、非空`abstract_draft`+`core_claim`+`sub_claims[]`——缺失部分会渲染为空白。 | 失败(硬) |
| **implementability_completeness** | `enriched_steps[]`与步骤一一对应(id/顺序相同,中英双语)、`underspecified_points[]`存在(`[]`允许)、文件中无终止开关字段。 | 失败(硬) |
| **user_direction** | 当`intake.user_direction`设置时,`phase2_select`必须带有`user_direction_disposition`(adopted/departed,departed时需要`why_departed`),且两个引用片段必须出现在`phase0/user_query.txt`中。硬规则10有意将用户命名的解决方案排除在缺口选择之外;此规则仅禁止静默丢弃。 | 失败(硬) |
| **implementability_readability** | 标准寄存器字段:无`占位`/`placeholder`泄漏,无裸英文行话混入中文prose。 | 警告 |
**`fail`时的重试预算(上限=2)**。仅修复命名的规则,重新验证;重试2次后仍失败→停止修订,原样渲染,并附加简短说明列出失败的验证器(标记为不完善的卡片优于看门狗终止的无输出运行)。切勿通过编辑受保护字段“修复”`kill_switch_integrity`或`subpattern_citation_consistency`——而是将其作为主要警告呈现。Configuration
配置
By default every model-driven phase runs on the host LLM. To route phases to a different backend (Gemini, open-weights, custom):
- — Phase 1 / 2.1 / 2.2 / 3.2 / 3.3 / 4.fill (needs ≥ 200k context, JSON output)
NOVELTY_LLM_REASONING_LARGE_CMD - — Phase 0 intent extraction + per-paper pattern tagging (smaller context, JSON output)
NOVELTY_LLM_CLASSIFY_FAST_CMD
Which tier a step tolerates — the split is by TASK KIND, not by cost (both directions measured; see design-notes):
- 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.
- 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.
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.
Each is a CLI taking a stdin prompt () 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.
<<SYSTEM>>...<<USER>>...- — per-job Phase 0 retrieval caps,
IDEASPARK_POOL(jobs: arxiv, ss_recent, oa_recent, openalex, semanticscholar, openreview). A job at 0 is skipped (this is how oa_recent stays off; setjob=N,...for journal-heavy fields). Malformed values fail-fast.oa_recent=6 - — cross-run Phase 0 retrieval cache (default
IDEASPARK_RETRIEVAL_CACHE, 24h TTL via~/.cache/ideaspark/retrieval); set toIDEASPARK_RETRIEVAL_CACHE_TTL_Sto bypass, or to a path to relocate. Keyed on connector + queries + window + caps +off, 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.--as-of - — 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).
IDEASPARK_RETRY_PAUSE_S - — set to
IDEASPARK_RELEVANCE_PARTITIONto disable the Phase 0.4 host relevance-partition (default: on). When off, retrieval's wide net flows straight to tagging with no core/adjacent/off_topic gate (the oldoff-only behavior); deep-read then falls back to on-topic (non-outside_taxonomy) rather thanoutside_taxonomy-gated.core - — set to
IDEASPARK_COVERAGE_CHECKto disable the Phase 0.5 host-recall coverage check (default: on).off - — set to
IDEASPARK_CROSS_RUN_DEDUPto disable the sibling-run soft-negative-anchor scan in the Phase 2 emit (default: on).off - — optional standing compute profile for the user (free text, e.g.
IDEASPARK_DEFAULT_COMPUTE). Put it in"8×H100 node, ~300 GPU-days, $50k API budget"(auto-loaded);.envsurfaces 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 / 5 months, ~$10k API campaign). Use this instead of editing the factory default — the default is the feasibility yardstick for users who state nothing.next
默认情况下,每个模型驱动阶段都在宿主LLM上运行。要将阶段路由到不同后端(Gemini、开源权重、自定义):
- ——阶段1/2.1/2.2/3.2/3.3/4.fill(需要≥200k上下文,JSON输出)
NOVELTY_LLM_REASONING_LARGE_CMD - ——阶段0意图提取+每篇论文模式标记(较小上下文,JSON输出)
NOVELTY_LLM_CLASSIFY_FAST_CMD
步骤可容忍的层级——按任务类型划分,而非成本(双向测量;见设计说明):
- 基于书面规则的机械分类——每个项目独立,“这些N个命名类别中的哪一个”,标准已在规则中。模式标记属于此类。 最便宜的层级在此处是正确的,且可分片到并行子Agent。
- 无枚举答案集的开放式判断——“这篇论文是否相关”,“哪些重要工作缺失”,“这个候选方案是否被归并”。阶段0.4分区、阶段0.5覆盖检查和所有检验阶段属于此类。 切勿降级这些,这就是它们的输出明确说明的原因——便宜层级的过度严格丢弃是不可恢复的召回损失,而过度包含的成本下一阶段仍可弥补。
如果没有单独的便宜模型,为机械类降低推理强度,而非处处</think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934>"</think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934></think_never_used_51bce0c785ca2f68081bfa7d91973934>"</think_never_used_51bce0c785ca2f68081bfa7d91973934>"