diff --git a/README.md b/README.md index b277784..6079feb 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ curl -fsSL https://feynman.is/install | bash irm https://feynman.is/install.ps1 | iex ``` -The one-line installer fetches the latest tagged release. To pin a version, pass it explicitly, for example `curl -fsSL https://feynman.is/install | bash -s -- 0.2.19`. +The one-line installer fetches the latest tagged release. To pin a version, pass it explicitly, for example `curl -fsSL https://feynman.is/install | bash -s -- 0.2.20`. The installer downloads a standalone native bundle with its own Node.js runtime. diff --git a/package-lock.json b/package-lock.json index ab61688..24921b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@companion-ai/feynman", - "version": "0.2.19", + "version": "0.2.20", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@companion-ai/feynman", - "version": "0.2.19", + "version": "0.2.20", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index e7fb9bb..7bc820c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@companion-ai/feynman", - "version": "0.2.19", + "version": "0.2.20", "description": "Research-first CLI agent built on Pi and alphaXiv", "license": "MIT", "type": "module", diff --git a/prompts/draft.md b/prompts/draft.md index d739b0d..1302285 100644 --- a/prompts/draft.md +++ b/prompts/draft.md @@ -12,14 +12,9 @@ Requirements: - Before writing, outline the draft structure: proposed title, sections, key claims to make, source material to draw from, and a verification log for the critical claims, figures, and calculations. Write the outline to `outputs/.plans/.md`. Present the outline to the user. If this is an unattended or one-shot run, continue automatically. If the user is actively interacting, give them a brief chance to request changes before proceeding. - Use the `writer` subagent when the draft should be produced from already-collected notes, then use the `verifier` subagent to add inline citations and verify sources. - Include at minimum: title, abstract, problem statement, related work, method or synthesis, evidence or experiments, limitations, conclusion. -- **Never invent experimental results, scores, figures, images, charts, tables, datasets, or benchmarks.** If no raw artifact, cited source, or prior research note provides the value, write a clearly labeled placeholder such as `TODO: run experiment` or `No experimental results are available yet` instead of fabricating plausible numbers. -- The `evidence or experiments` section must contain only one of: - - cited results from primary sources, - - results computed from explicit raw artifacts/scripts already present in the workspace, - - a proposed experimental plan with no claimed outcomes. -- Every figure, chart, image, or table must have provenance in its caption: source URL, research-file reference, raw artifact path, or script path. If provenance is missing, omit the figure. - Use clean Markdown with LaTeX where equations materially help. -- Generate charts with `pi-charts` only for quantitative data, benchmarks, and comparisons that already exist in the source material or raw artifacts. Use Mermaid for architectures and pipelines only when the structure is supported by sources. Every figure needs a provenance-bearing caption. +- Follow the system prompt's provenance rules for all results, figures, charts, images, tables, benchmarks, and quantitative comparisons. If evidence is missing, leave a placeholder or proposed experimental plan instead of claiming an outcome. +- Generate charts with `pi-charts` only for source-backed quantitative data, benchmarks, and comparisons. Use Mermaid for architectures and pipelines only when the structure is supported by sources. Every figure needs a provenance-bearing caption. - Before delivery, sweep the draft for any claim that sounds stronger than its support. Mark tentative results as tentative and remove unsupported numerics instead of letting the verifier discover them later. - Save exactly one draft to `papers/.md`. - End with a `Sources` appendix with direct URLs for all primary references. diff --git a/scripts/install/install.ps1 b/scripts/install/install.ps1 index 2032c1f..dd0c095 100644 --- a/scripts/install/install.ps1 +++ b/scripts/install/install.ps1 @@ -110,7 +110,7 @@ This usually means the release exists, but not all platform bundles were uploade Workarounds: - try again after the release finishes publishing - pass the latest published version explicitly, e.g.: - & ([scriptblock]::Create((irm https://feynman.is/install.ps1))) -Version 0.2.19 + & ([scriptblock]::Create((irm https://feynman.is/install.ps1))) -Version 0.2.20 "@ } diff --git a/scripts/install/install.sh b/scripts/install/install.sh index 41febfd..d7d80d4 100644 --- a/scripts/install/install.sh +++ b/scripts/install/install.sh @@ -261,7 +261,7 @@ This usually means the release exists, but not all platform bundles were uploade Workarounds: - try again after the release finishes publishing - pass the latest published version explicitly, e.g.: - curl -fsSL https://feynman.is/install | bash -s -- 0.2.19 + curl -fsSL https://feynman.is/install | bash -s -- 0.2.20 EOF exit 1 fi diff --git a/tests/content-policy.test.ts b/tests/content-policy.test.ts index 12c7078..3e53122 100644 --- a/tests/content-policy.test.ts +++ b/tests/content-policy.test.ts @@ -31,7 +31,7 @@ test("bundled prompts and skills do not contain blocked promotional product cont } }); -test("draft workflow explicitly forbids fabricated results and unproven figures", () => { +test("research writing prompts forbid fabricated results and unproven figures", () => { const draftPrompt = readFileSync(join(repoRoot, "prompts", "draft.md"), "utf8"); const systemPrompt = readFileSync(join(repoRoot, ".feynman", "SYSTEM.md"), "utf8"); const writerPrompt = readFileSync(join(repoRoot, ".feynman", "agents", "writer.md"), "utf8"); @@ -39,7 +39,6 @@ test("draft workflow explicitly forbids fabricated results and unproven figures" for (const [label, content] of [ ["system prompt", systemPrompt], - ["draft prompt", draftPrompt], ["writer prompt", writerPrompt], ["verifier prompt", verifierPrompt], ] as const) { @@ -47,4 +46,8 @@ test("draft workflow explicitly forbids fabricated results and unproven figures" assert.match(content, /(figure|chart|image|table)/i, `${label} must cover visual/table provenance`); assert.match(content, /(provenance|source|artifact|script|raw)/i, `${label} must require traceable support`); } + + assert.match(draftPrompt, /system prompt's provenance rules/i); + assert.match(draftPrompt, /placeholder or proposed experimental plan/i); + assert.match(draftPrompt, /source-backed quantitative data/i); }); diff --git a/website/public/install b/website/public/install index 41febfd..d7d80d4 100644 --- a/website/public/install +++ b/website/public/install @@ -261,7 +261,7 @@ This usually means the release exists, but not all platform bundles were uploade Workarounds: - try again after the release finishes publishing - pass the latest published version explicitly, e.g.: - curl -fsSL https://feynman.is/install | bash -s -- 0.2.19 + curl -fsSL https://feynman.is/install | bash -s -- 0.2.20 EOF exit 1 fi diff --git a/website/public/install.ps1 b/website/public/install.ps1 index 2032c1f..dd0c095 100644 --- a/website/public/install.ps1 +++ b/website/public/install.ps1 @@ -110,7 +110,7 @@ This usually means the release exists, but not all platform bundles were uploade Workarounds: - try again after the release finishes publishing - pass the latest published version explicitly, e.g.: - & ([scriptblock]::Create((irm https://feynman.is/install.ps1))) -Version 0.2.19 + & ([scriptblock]::Create((irm https://feynman.is/install.ps1))) -Version 0.2.20 "@ } diff --git a/website/src/content/docs/getting-started/installation.md b/website/src/content/docs/getting-started/installation.md index 2de3522..0a5bc25 100644 --- a/website/src/content/docs/getting-started/installation.md +++ b/website/src/content/docs/getting-started/installation.md @@ -117,13 +117,13 @@ These installers download the bundled `skills/` and `prompts/` trees plus the re The one-line installer already targets the latest tagged release. To pin an exact version, pass it explicitly: ```bash -curl -fsSL https://feynman.is/install | bash -s -- 0.2.19 +curl -fsSL https://feynman.is/install | bash -s -- 0.2.20 ``` On Windows: ```powershell -& ([scriptblock]::Create((irm https://feynman.is/install.ps1))) -Version 0.2.19 +& ([scriptblock]::Create((irm https://feynman.is/install.ps1))) -Version 0.2.20 ``` ## Post-install setup