Skip to content

Navigation Menu

Sign in
Sign up

feat(skills): a new oracle may not introduce a fresh mirror - #186

Merged
avrabe merged 1 commit into
main from
skills/no-fresh-mirrors
Sep 6, 2026
Merged

feat(skills): a new oracle may not introduce a fresh mirror #186
avrabe merged 1 commit into
main from
skills/no-fresh-mirrors

Conversation

@avrabe

@avrabe avrabe commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Closes #180.

A test that hardcodes a value the implementation also defines — a base address, an ABI convention, a wire-format constant, a version — is a finding. Derive it at test time, or pin it in a ledger that fails on divergence.

The skill text keeps your correction, not the tidy version

The obvious hypothesis is a silent pass: the mirror drifts and the oracle tests the wrong thing. Your measurement killed that — moving synth's compiler constant made the oracle fail loudly, exit 1.

So the skill states the real damage: the failure is detected but not attributed. All 38 harnesses go red at once, each reporting its own subject — FAIL nested, FAIL br_table, FAIL spill — and none saying "a constant I copy from the implementation moved." You debug 38 oracles instead of reading one line, and the cost scales with how good your test suite is.

That gives the preference order, including your cheap-80% clause:

  1. Derive it — ask the tool.
  2. Pin it — a ledger that fails on divergence.
  3. Otherwise name the assumption in the harness's own failure message — one string per harness turns "38 red oracles" into "38 red oracles that all name the same constant."

Copying silently is the one option that isn't acceptable.

Where it landed

skill what
oracle-gate-a-change new step 3b, between the kill-criterion and gating the diff — with the mechanical check: grep implementation constants, grep the test tree, report the un-derived, un-pinned intersection
pulseengine-feature-loop step 4 oracle discipline — a new oracle may not introduce a fresh mirror
report-tool-friction a mirror you were forced to create is a tool gap. If you hardcoded it because the tool won't report it, the finding is "the compiler cannot print its own layout constants" — fixing it in the test only moves the debt

Your second finding is in there too

The negative-control fixtures banked with canonical register assignments the real selector never emits — "not wrong, unreachable, which is worse, because it looked like coverage" — is carried as a note pointing at gate-potency. A control you have not watched fail is a hypothesis.

Plugin 0.28.0 → 0.29.0.

🤖 Generated with Claude Code

https://claude.ai/code/session_01G5qpB7zvxLvdrvn5YRyj4R

...29.0)
Closes #180.
A test that hardcodes a value the implementation also defines — a base address,
an ABI convention, a wire-format constant, a version — is a finding. Derive it
at test time, or pin it in a ledger that fails on divergence.
The reporter's measurement corrected the obvious hypothesis, and the skill text
says so rather than stating the tidy version. The fear is a silent pass: the
mirror drifts, the oracle tests the wrong thing. Measured in synth, where 38
harnesses mirror one compiler constant, moving it made the oracle fail LOUDLY,
exit 1.
The real damage is that the failure is detected but NOT ATTRIBUTED: all 38 go
red at once, each naming its own subject (FAIL nested / FAIL br_table / FAIL
spill) and none naming the constant they share. You debug 38 oracles instead of
reading one line — and the cost scales with how good the suite is.
Hence the ordering: derive > pin > name-the-assumption-in-the-failure-message.
That last is the cheap 80%: one string per harness turns "38 red oracles" into
"38 red oracles that all name the same constant."
Also carries the reporter's second finding, which is a gate-potency instance:
negative-control fixtures banked with canonical register assignments the real
selector never emits were not wrong, they were UNREACHABLE — and looked like
coverage.
 oracle-gate-a-change new step 3b, before "Gate the diff"
 pulseengine-feature-loop step 4 oracle discipline
 report-tool-friction a mirror you were FORCED to create is a tool gap
 (the compiler cannot print its own layout constants),
 so fixing it in the test only moves the debt
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G5qpB7zvxLvdrvn5YRyj4R 
avrabe merged commit 8caf9f4 into main Sep 6, 2026
1 check passed
avrabe deleted the skills/no-fresh-mirrors branch September 6, 2026 17:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Principle: a value your tests mirror from the implementation must be derived or pinned — measured, and the obvious hypothesis was wrong

1 participant

AltStyle によって変換されたページ (->オリジナル) /