… pass — completes 7-of-7 B-0914 candidate substrate-engineering gap substrate (#5773)
* feat(B-0914.7): Falcon-style auto-research-doc template substrate (8-section scaffold + Markdown renderer); 19 tests pass — completes 7-of-7 B-0914 candidate gap substrate
Per Sakana Robin Falcon agent (Nature 2026): takes drug proposal + does
deep-dive literature review + writes comprehensive research report. TS-
side scaffold provides 8-section template structure that downstream LLM
substrate-engineering work populates (header / framing / background /
mechanism / evidence / risks / composes-with / test-plan).
What this adds:
- ResearchDocSection discriminated union (9 section kinds)
- ResearchDoc structure (id + proposalId + sections + composesWith)
- ResearchDocFeedback + ResearchDocResult<T> Result-shape
- renderSection(section): string — pure-function Markdown serializer
- renderResearchDoc(doc): ResearchDocResult<string> — full doc rendering
- buildSkeleton(context): ResearchDocResult<ResearchDoc> — 8-section scaffold
- buildAndRender(context): ResearchDocResult<string> — end-to-end convenience
Falcon-stage pending markers preserved (substrate-honest about what's
not yet auto-generated by LLM substrate-engineering):
- '[PENDING LITERATURE REVIEW — Falcon-stage auto-generated]'
- '[PENDING MECHANISM ANALYSIS — Falcon-stage auto-generated]'
- etc. (per section)
Tests (19; all pass):
- EmptyProposalId validation
- 8-section Falcon scaffold structure
- proposalId sanitized to filename-safe id
- composesWith pass-through to skeleton + composes-with section
- All 9 section-kind renderings tested (header/framing/background/
mechanism/evidence/risks/composes-with/test-plan/raw)
- renderResearchDoc empty → NoSectionsRendered
- buildAndRender end-to-end
- Pending markers preserved (substrate-honest)
- ResearchDocSection exhaustive switch
Composes with substrate:
- B-0914.7 backlog row (Falcon extension target)
- tools/save-ai-memory/ skill (existing substrate; future integration for
auto-write to docs/research/ + composes-with citation discipline)
- Amara consolidation ferry pattern (PR #5757)
- B-0914.2 PR #5769 closed-loop orchestrator (research-doc generation
at any cycle stage; template provides structure)
- substrate-or-it-didn't-happen + honor-those-that-came-before rules
- asymmetric-authorship + monad-propagation rules
**B-0914 7-of-7 candidate substrate-engineering gap substrate complete:**
- B-0914.1 PR #5764 TrueSkill ranking (S/M/L: ranking)
- B-0914.2 PR #5769 closed-loop orchestrator (S/M/L: L)
- B-0914.3 PR #5770 n-parallel + consensus (8-parallel-Finch)
- B-0914.4 PR #5768 generation-reflection pairing (S/M/L: M)
- B-0914.5 PR #5767 evolution mash-refine (S/M/L: S)
- B-0914.6 PR #5772 proximity-dedup (canonical + Jaccard clustering)
- B-0914.7 THIS PR Falcon-style auto-research-doc template
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(PR #5773): full rule paths + remove unreachable InvalidOperationalStatus variant (Copilot threads)
Two threads on tools/workflow-engine/research-doc.ts:
1. Composes-with docblock referenced rule files by short form
(`asymmetric-authorship`, `monad-propagation-pattern`) — actual
filenames are longer + .md-suffixed:
`.claude/rules/asymmetric-authorship-substrate-entity-defines-consent-channel-recipient-acknowledges.md`
`.claude/rules/monad-propagation-pattern-cross-language-substrate-shape.md`
Updated to full paths so cross-refs stay greppable + don't drift.
2. ResearchDocFeedback.InvalidOperationalStatus variant was
structurally unreachable: `operationalStatus` is a string-literal
union (`"research-grade" | "operational"`) at the type level, the
only constructor (line 179) fixes it to `"research-grade"`, and
no untrusted-string parse path exists. Variant was dead substrate.
Removed + added docblock naming the conditions under which a
future caller should add it back (JSON import of external
research-doc with operationalStatus parsed from untrusted input —
add validator AT THE PARSE BOUNDARY first, then add this variant).
Composes with asymmetric-authorship discipline: every TFeedback
variant should correspond to a real code path that can produce it.
Non-breaking: no callers reference the removed variant (grep clean).
Type-system continues to rule out invalid operationalStatus at
construction time.
Autonomous-loop tick 2026-05-28T12:16Z resolution of PR #5773 BLOCKED
gate (unresolved Copilot threads only blocker; required checks all green).
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Lior <lior@zeta.dev>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Summary
Sakana Robin's 8-parallel-Finch consensus pattern generalized to N parallel analyzers + configurable consensus mechanism (majority / supermajority / unanimous / first-n-agree).
18 tests pass / 0 fail.
Composes with substrate
🤖 Generated with Claude Code