Skip to content

feat(plan,do,check): identify, declare, and surface external dependencies#254

Merged
eduralph merged 2 commits into
mainfrom
feat/250-external-deps
Jul 5, 2026
Merged

feat(plan,do,check): identify, declare, and surface external dependencies#254
eduralph merged 2 commits into
mainfrom
feat/250-external-deps

Conversation

@eduralph

@eduralph eduralph commented Jul 5, 2026

Copy link
Copy Markdown
Owner

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:

Change — a responsibility across all three beats

  1. Plan (agents/planner.md.jinja + templates/brief.md.tpl): new External dependencies brief field; the planner enumerates build tools / runtime services / required topology and seeds them into the render's [[doctor.checks]] so they preflight.
  2. Do (agents/builder.md.jinja): a new "Hit an external dependency Plan didn't name?" step — Do MUST declare it in build-notes.md and raise NEEDS-HUMAN, never silently substitute a code-read, an alias, or a curated fixture.
  3. Check (agents/reviewer.md.jinja + templates/SUMMARY.md.tpl §6): the reviewer raises an undischarged external dependency NEEDS-HUMAN, which assemble routes 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.jinja parse cleanly (jinja2).
  • Render+run test skips locally without copier; runs in CI.

🤖 Generated with Claude Code


Review round 1 (Codex) — addressed in 7bd8009

  • Do-declared dependency never reached §6 → the builder writes a load-bearing NEEDS-HUMAN external dependency: … marker in build-notes.md, and assemble_summary scans for it (_declared_external_deps) and lifts it into §6 — deterministic, independent of the reviewer and gate set. New tests/test_external_dependency_section6.py.
  • External dependencies field missing from alternate templates → added to design-proposal.md.tpl and plan-pointer.md.tpl.

@eduralph eduralph added this to the Milestone 0.52.0 milestone Jul 5, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread template/agents/builder.md.jinja Outdated
Comment thread template/agents/planner.md.jinja
eduralph and others added 2 commits July 5, 2026 15:19
…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>
@eduralph eduralph force-pushed the feat/250-external-deps branch from 7bd8009 to 2da08d9 Compare July 5, 2026 13:20
@eduralph eduralph merged commit aafc2a8 into main Jul 5, 2026
2 checks passed
@eduralph eduralph deleted the feat/250-external-deps branch July 5, 2026 13:21
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.

External dependencies: Plan should identify them, Do must declare any it couldn't, Check must highlight them

1 participant