CB-WP-0006 T02: instrument AM-2; report AM-3 blocked, with the argument
Both rows were unmutatable for the same stated reason. They resolved
differently, and the difference is the point.
AM-2 is instrumented and enforced — tools/size-metrics.py, in `make all`:
AM-2: 27.2 LOC/rule [ok target <= 40] (1.47x headroom)
1,575 impl lines / 58 rules
Tests are excluded because AM-2 asks what a rule costs, not how much it is
exercised; lib.rs is ~18% test code and including it would have flattered
the number. This matters because AM-2 is AM-1's anti-gaming pair: 100%
rule coverage means nothing if the rules are trivially small, and AM-1 has
been reported met since CB-WP-0001 with its pair uninstrumented.
Verified red by a property mutation — ~800 lines of filler injected into
the impl, pushing the ratio past 40 — not a threshold tweak. The expect
string is the precise failure signature "FAIL target <= 40"; my first
attempt used "AM-2", which also matches passing output and would have
made the FA guard vacuous.
AM-3 is BLOCKED, not uninstrumented, and that is a finding rather than a
deferral. It measures LOC to express the CB-RES-0001 synthetic game on our
kernel, against a boardgame.io baseline of ~36 LOC for a declarative 3p
commit/reveal game object. That artifact has never been built: games/
contains only ground, and benches/synthetic.rs drives GROUND rather than
defining a synthetic game. Measuring GROUND's 1,575 impl lines against a
36-line synthetic game object would compare two different games and call
the difference a D1 result.
So the tool ships the measurement — a marker-delimited region, self-tested
— and reports the row blocked, naming the missing artifact. A number would
have been worse than a blank. It stays unmutatable and still counts
against M-D1-MUT per ADR-0005 §1: a row that cannot fail asserts nothing,
however good the reason.
M-D1-MUT: 5 -> 6 of 14.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
a12861b85c
commit
1c3019c7e8
8 changed files with 301 additions and 10 deletions
|
|
@ -124,6 +124,45 @@ AM-3 depends on K18 (benches driven from scenario files); if K18 resolves
|
|||
toward amending the spec rather than implementing it, AM-3 must be
|
||||
restated or withdrawn with an argument rather than left unmeasured.
|
||||
|
||||
**Delivered — but the two rows resolved differently, and the difference is
|
||||
the point.**
|
||||
|
||||
**AM-2 is instrumented and enforced.** `tools/size-metrics.py` +
|
||||
`make size-metrics`, in `make all`:
|
||||
|
||||
```text
|
||||
AM-2: 27.2 LOC/rule [ok target <= 40] (1.47x headroom)
|
||||
1,575 code lines before the first #[cfg(test)] / 58 numbered rules
|
||||
```
|
||||
|
||||
Tests are excluded because AM-2 asks what a rule *costs*, not how much it
|
||||
is exercised — `lib.rs` is ~18% test code and including it would have
|
||||
flattered the number. Verified red by a **property** mutation: ~800 lines
|
||||
of filler injected into the impl, pushing the ratio past 40. `expect` is
|
||||
the precise failure signature `FAIL target <= 40`, not the row name, which
|
||||
would have matched passing output too.
|
||||
|
||||
**AM-3 is BLOCKED, not uninstrumented — and this is a finding, not a
|
||||
deferral.** The row measures "LOC to express the CB-RES-0001 synthetic
|
||||
game on our kernel" against a boardgame.io baseline of ~36 LOC for a
|
||||
declarative **3p commit/reveal game object**. That artifact has never been
|
||||
built: `games/` contains only `ground`, and `benches/synthetic.rs`
|
||||
*drives* GROUND rather than *defining* a synthetic game.
|
||||
|
||||
Measuring GROUND's 1,575 impl lines against a 36-line synthetic game
|
||||
object would compare **two different games** and call the difference a D1
|
||||
result. So the tool ships the measurement mechanism — a marker-delimited
|
||||
`// AM-3:BEGIN` / `// AM-3:END` region, self-tested — and **reports the row
|
||||
blocked, naming the missing artifact**. A number here would have been
|
||||
worse than a blank.
|
||||
|
||||
It therefore stays `unmutatable` and **still counts against M-D1-MUT**, per
|
||||
ADR-0005 §1: a row that cannot fail asserts nothing, however good the
|
||||
reason. Resolving it needs an artifact, not a metric tweak — carried
|
||||
forward, not silently dropped.
|
||||
|
||||
**M-D1-MUT: 5 → 6 of 14.**
|
||||
|
||||
## Task: AM-5, AM-9 — measure or withdraw, but stop leaving them blank
|
||||
|
||||
```task
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue