Skip to content

feat(builder): forced self-refutation checklist before declaring done#252

Merged
eduralph merged 2 commits into
mainfrom
feat/247-builder-self-refutation
Jul 5, 2026
Merged

feat(builder): forced self-refutation checklist before declaring done#252
eduralph merged 2 commits into
mainfrom
feat/247-builder-self-refutation

Conversation

@eduralph

@eduralph eduralph commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Closes #247.

Problem

The builder repeatedly shipped tests that go green without binding the objective — each caught by the adversary reviewer at the cost of an iteration: a Jepsen leg that injects no nemesis (wyrd #257 Iter-1); a day-one test that hand-builds a healthy_fleet excluding the killed node (#366 Iter-2); a test driving MemMeta instead of the real backend (#366 Iter-3). builder.md already forbids this in prose but forces no check, so the pattern recurs and the adversary is the only backstop.

Change

agents/builder.md.jinja gains a "Before you declare done — refute your own test" section: Do answers three questions and records the answers in build-notes.md:

  • (a) does the test still pass with the fix reverted (a genuine red)?
  • (b) does it drive the production path, or a stand-in / copy?
  • (c) does the fixture include the failing element (killed node, real backend, injected nemesis) rather than curate it out?

Any "no" means not done. The answers are recorded even when all pass, so the human reads them at sign-off.

Single-source: .claude/agents/builder.md.jinja {% include %}s the body.

Verification

  • cd template && make check — 478 driver unit tests pass.
  • agents/builder.md.jinja parses cleanly (jinja2).
  • Render+run test skips locally without copier; runs in CI.

🤖 Generated with Claude Code


Review round 1 (Codex) — addressed in da429fd

  • Reverted-run answer polarity → rephrased all three checks to yes-polarity ("Does the test fail with your fix reverted?") with an explicit lead-in, so a valid regression test no longer trips the "any no means not done" rule.

…#247)

The builder repeatedly shipped tests that go green without binding the objective —
a Jepsen leg with no nemesis (wyrd #257 Iter-1), a fixture excluding the killed node
(#366 Iter-2), a test driving MemMeta instead of the real backend (#366 Iter-3) —
each caught only by the adversary at the cost of an iteration. builder.md already
forbids this in prose but forces no check. Add a "Before you declare done" step: Do
reverts the fix to confirm a genuine red, confirms the test drives production not a
stand-in, and confirms the fixture includes the failing element — recording all three
answers in build-notes.md so the human sees them at sign-off.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@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: dbccef2c41

ℹ️ 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
…review)

Codex flagged that question (a) "Does the test still pass with your fix reverted?" has
the desired answer "no" for a valid regression test, which contradicts the rule "any no
means not done". Rephrase all three questions so a sound fix answers yes ("Does the test
fail with your fix reverted?"), making the not-done rule coherent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

Builder: forced self-refutation checklist before declaring done

1 participant