feat(plan,do,check): identify, declare, and surface external dependencies#254
Merged
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c0c5f95719
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…cies (#250) External dependencies — build tools (protoc), runtime services (Docker/etcd/TiKV), and topology shape (≥3-replica cluster) — are a recurring blind spot that surfaces late, and the builder tends to silently work around an unmet one. In the wyrd render, #365 verified split-brain freedom by code-reading for two iterations because protoc wasn't present, and produce the fault — neither declared as a missing dependency. Make it a responsibility across all three beats: Plan enumerates them in a new brief field (seeding doctor.checks); Do must declare any Plan missed and raise NEEDS-HUMAN rather than substitute a code-read / alias / curated fixture; the reviewer flags an undischarged external dependency so it lands in SUMMARY §6 at sign-off. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… all templates (#250 review) Two Codex findings: 1. A Do-discovered external dependency recorded only in build-notes.md was lost: the reviewer never sees build-notes (independence contract), sign-off/assemble build §6 from review + gate rows only, so in stub/unrelated-gate configs the declaration never reached §6. Standardise a `NEEDS-HUMAN external dependency: …` marker the builder writes, and have assemble_summary scan build-notes.md for it and lift it into §6 — deterministic and independent of the gate set. New test_external_dependency_section6.py covers the routing, bullet/case-insensitive matching, false-positive avoidance, and the missing-file case. 2. Only brief.md.tpl carried the parsed External dependencies field; add it to design-proposal.md.tpl and plan-pointer.md.tpl so every template that can become brief.md carries it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7bd8009 to
2da08d9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #250. Complements #246 (Falsifiability) and #247 (builder self-refutation) — this one is specifically about identifying and declaring the external dependencies those checks presuppose.
Pattern
External dependencies — build tools (
protoc), runtime services (Docker, a live etcd/TiKV), and environment/topology shape (a ≥3-replica cluster) — surface late, and the builder tends to silently work around an unmet one:store.rs(noprotoc) and quietly verified split-brain freedom by code-reading for two iterations.Change — a responsibility across all three beats
agents/planner.md.jinja+templates/brief.md.tpl): newExternal dependenciesbrief field; the planner enumerates build tools / runtime services / required topology and seeds them into the render's[[doctor.checks]]so they preflight.agents/builder.md.jinja): a new "Hit an external dependency Plan didn't name?" step — Do MUST declare it inbuild-notes.mdand raise NEEDS-HUMAN, never silently substitute a code-read, an alias, or a curated fixture.agents/reviewer.md.jinja+templates/SUMMARY.md.tpl§6): the reviewer raises an undischarged external dependency NEEDS-HUMAN, whichassembleroutes into §6 (§6 is fed from reviewer NEEDS-HUMAN rows — the SUMMARY edit documents the shape).Single-source:
.claude/agents/*{% include %}the bodies.Verification
cd template && make check— 478 driver unit tests pass.builder/planner/reviewer.md.jinjaparse cleanly (jinja2).🤖 Generated with Claude Code
Review round 1 (Codex) — addressed in 7bd8009
NEEDS-HUMAN external dependency: …marker in build-notes.md, andassemble_summaryscans for it (_declared_external_deps) and lifts it into §6 — deterministic, independent of the reviewer and gate set. Newtests/test_external_dependency_section6.py.design-proposal.md.tplandplan-pointer.md.tpl.