Skip to content

fix(skills): correct Stage 8 exporter path in research.md - #40

Merged
brandon-behring merged 2 commits into
mainfrom
fix/stage8-exporter-path
Jul 20, 2026
Merged

fix(skills): correct Stage 8 exporter path in research.md#40
brandon-behring merged 2 commits into
mainfrom
fix/stage8-exporter-path

Conversation

@brandon-behring

Copy link
Copy Markdown
Owner

On main, Stage 8 of the /research orchestrator references scripts/research_kb_export.py, which does not exist — the real exporter is scripts/synthesis_export.py. Runs currently work only because checkouts sit on this branch; a fresh clone of main fails at export.

  • 9409601 fix(skills): correct Stage 8 exporter path in research.md (+ repo-wide skill-consistency test, tests/test_skill_outputs.py)
  • 727f4e0 docs(validators): note content-age strict escalation is intentional (the F4 retraction record)

🤖 Generated with Claude Code

https://claude.ai/code/session_014jpLr4doRxvoh6eBrpGavX

brandon-behring and others added 2 commits July 19, 2026 08:20
RS1 renamed the exporter to scripts/synthesis_export.py with no shim, but
research.md kept invoking scripts/research_kb_export.py in both its Stage 8
heading and its Stage 8 command. A literal /research run therefore died at the
final stage.

It survived because the only test touching the rename asserted on the export
skill (synthesis-export.md), not on the orchestrator that calls it.

The added test is deliberately repo-wide rather than a research.md assertion:
the defect is a class -- a skill naming a module that does not exist -- and a
targeted test would not catch the next rename. It carries an allowlist for the
one deliberately-unimplemented module, asserted in both directions so the list
cannot rot.

Note validators/research_kb_export.py legitimately keeps its historical name and
must continue to resolve; that asymmetry is what made the original bug easy to
miss by eye.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014jpLr4doRxvoh6eBrpGavX
Comment only; no behaviour change.

A plan review concluded that freshness.py promoting content age to a hard error
under --strict contradicted content_age_warning_for_entry's docstring ("This
NEVER returns an error") and docs/architecture.md, and was a copy-paste bug. An
external review confirmed that reading. Both were wrong.

tests/test_v2_strict_live.py:105-127 holds a deliberately paired contract: warn
in normal mode, escalate under --strict. Someone wrote both halves on purpose.
The docstring is accurate about the helper, which returns a warning string and
never an error -- the caller decides severity, and that is the design.

The change was made, the full suite caught it, and it was reverted. This comment
records the reasoning at the site so the next reader does not repeat the
diagnosis.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014jpLr4doRxvoh6eBrpGavX
@brandon-behring
brandon-behring merged commit 2df1978 into main Jul 20, 2026
2 checks passed
@brandon-behring
brandon-behring deleted the fix/stage8-exporter-path branch July 20, 2026 15:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant