Declare CB-WP-0019: the AM-4 family's last two defects, tier M
Both owed numbers measured BEFORE declaring, so the work is scoped against facts. AM-4b's scope: 29 crates / 317,021 lines instrumented against 57 / 725,258 real, so 28 crates and 408,237 lines are uncounted -- more than its own 350,000 target. AM-4b's proc-macro share: 109,585 lines, 15.1%. That 15.1% vindicates ADR-0008 D2, which refused to correct AM-4b using AM-4a's measured 36.2% because 'correcting a second instrument on the strength of the first one's ratio is the error this change exists to fix'. Borrowing would have been wrong by more than a factor of two. Also carries the self-quoting rule, which is six-for-six under-reported by never less than 30% with both causes diagnosed, and still lives only in evidence files. Structural tier M: changes a budget's scope and target and a reporting rule. Chaos d8=5, no override -- the first roll at the new rate. Declaration 2 of window 2. Meta budget 0%; ADR-0006 D2 exempts instrument repair regardless. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
c84cf37025
commit
d8b4398096
1 changed files with 163 additions and 0 deletions
163
workplans/CB-WP-0019-the-am4-family.md
Normal file
163
workplans/CB-WP-0019-the-am4-family.md
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
---
|
||||
id: CB-WP-0019
|
||||
kind: meta
|
||||
title: "The AM-4 family's last two defects, and the self-quoting rule"
|
||||
status: todo
|
||||
---
|
||||
|
||||
# Purpose
|
||||
|
||||
```
|
||||
structural tier M (changes how the loop constrains its own operation:
|
||||
a budget's scope and target, and a reporting rule)
|
||||
chaos d8 = 5 → no override
|
||||
declared tier M
|
||||
```
|
||||
|
||||
Declaration 2 of chaos window 2, and **the first roll at d8**.
|
||||
|
||||
**Meta budget is 0%** over the trailing three, all product. ADR-0006 D2
|
||||
exempts instrument repair anyway, and this is the repair four evidence
|
||||
files have listed as owed.
|
||||
|
||||
## Two numbers that have been owed for five passes
|
||||
|
||||
Both were measured before this declaration, so the work is scoped against
|
||||
facts rather than an intention to find them.
|
||||
|
||||
**AM-4b's scope**, owed since CB-EV-0012 §3:
|
||||
|
||||
| | crates | lines |
|
||||
|---|---:|---:|
|
||||
| AM-4b as instrumented (`games-ground`, `--edges normal`) | 29 | 317,021 |
|
||||
| the whole workspace, dev edges included | 57 | 725,258 |
|
||||
| **uncounted** | **28** | **408,237** |
|
||||
|
||||
**The dev-toolchain budget is blind to more source than its own target
|
||||
of 350,000.** `criterion`, `clap`, `ciborium`, `quick-js` and now
|
||||
`cb-game-runtime`'s dev graph are all invisible to it.
|
||||
|
||||
**AM-4b's proc-macro share**, owed since ADR-0008 D2: **109,585 lines,
|
||||
15.1%** of the real graph.
|
||||
|
||||
That 15.1% is worth stating plainly, because it **vindicates a decision
|
||||
made for the right reason**. ADR-0008 D2 refused to correct AM-4b using
|
||||
AM-4a's measured 36.2%, saying *"correcting a second instrument on the
|
||||
strength of the first one's ratio is the error this change exists to
|
||||
fix."* The shares are 36.2% and 15.1%. Borrowing would have been wrong by
|
||||
a factor of more than two.
|
||||
|
||||
## Task: give AM-4b a scope, and a target that matches it
|
||||
|
||||
```task
|
||||
id: CB-WP-0019-T01
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
Decide what AM-4b is **for**, then instrument that.
|
||||
|
||||
The two honest candidates, and the choice needs an argument rather than a
|
||||
default:
|
||||
|
||||
- **Widen it** to the whole workspace with dev edges — everything a
|
||||
contributor's `cargo test` acquires. Then the target must move with the
|
||||
instrument, exactly as ADR-0008 D3 moved AM-4a's, and **the target moves
|
||||
to fit the measurement, not the measurement to fit the target.**
|
||||
- **Narrow the claim** to what it actually measures and rename it, if
|
||||
"one package's non-dev graph" is the thing worth bounding.
|
||||
|
||||
Whichever wins, **do not repeat ADR-0008 D3's generosity by reflex.** That
|
||||
decision gave back a small rounding-up because a target with 1.5% of room
|
||||
fails on a patch release; a target set 130% above the current reading
|
||||
would not be a budget at all.
|
||||
|
||||
**Controls:**
|
||||
- the mutation must still go red — AM-4b's row is currently enforced and
|
||||
must stay so;
|
||||
- a test that the configuration measures what its name says: if it claims
|
||||
dev edges, a dev-only dependency must move the number. `quick-js` is the
|
||||
case to use, because it is dev-only and it is what exposed this.
|
||||
|
||||
## Task: the proc-macro share, decided not just measured
|
||||
|
||||
```task
|
||||
id: CB-WP-0019-T02
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
15.1% is measured. What is owed is the **decision**: does the dev budget
|
||||
exclude proc-macro crates as the shipped one does?
|
||||
|
||||
The shipped case was easy — a proc-macro never reaches a shipped binary,
|
||||
so counting it in "what a game ships" was simply wrong. **The dev case is
|
||||
not the same question.** A proc-macro *is* acquired, *is* compiled, *is*
|
||||
unaudited third-party source on a contributor's machine, and the
|
||||
acquisition rule (ADR-0007 D3) counts what the build causes to be fetched.
|
||||
|
||||
So the arguments point opposite ways and the answer is not inherited.
|
||||
Decide it, and say which of the two rules governs when they disagree.
|
||||
|
||||
**Whatever is decided, ADR-0008 D2's note that AM-4b's share is unmeasured
|
||||
must stop being true in the source.**
|
||||
|
||||
## Task: write the self-quoting rule down
|
||||
|
||||
```task
|
||||
id: CB-WP-0019-T03
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
Six passes, six under-reports, both halves of the defect diagnosed, and
|
||||
the rule still lives only in evidence files:
|
||||
|
||||
| pass | reported mid-flight | settled | under by |
|
||||
|---|---|---|---|
|
||||
| CB-WP-0009 | $6.73 | $11.31 | 40% |
|
||||
| CB-WP-0011 | $4.23 | $7.02 | 40% |
|
||||
| CB-WP-0012 | $8.82 | $14.52 | 39% |
|
||||
| CB-WP-0013 | $5.78 | $8.26 | 30% |
|
||||
| CB-WP-0015 | $15.14 | $22.70 | 33% |
|
||||
| CB-WP-0017 | $5.19 | $9.48 | 45% |
|
||||
|
||||
**Six for six, always low, never by less than 30%.** That is not noise;
|
||||
it is a systematic bias with two identified causes (CB-EV-0013 §5,
|
||||
CB-EV-0015 §6):
|
||||
|
||||
1. a pass's window runs to the **next** pass's first commit, so the
|
||||
previous pass is not final until the one after it starts;
|
||||
2. **a figure read earlier in a session is an in-flight figure regardless
|
||||
of whose name is on it** — quoting from memory defeats the rule even
|
||||
when the boundary is right.
|
||||
|
||||
Put it in `specs/InnerLoop.md` as a rule with both halves, and make
|
||||
`loop-lint` check what it can. A rule that lives only in prose has been
|
||||
re-derived three times already.
|
||||
|
||||
**The honest question to answer while writing it:** is the right rule
|
||||
"quote two passes back", or "re-run the instrument at quote time", or
|
||||
both? T03 of CB-WP-0018 used the second and it worked. Say which is load
|
||||
bearing.
|
||||
|
||||
## Task: evidence
|
||||
|
||||
```task
|
||||
id: CB-WP-0019-T04
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
`evidence/CB-EV-0017-*.md`.
|
||||
|
||||
- **The AM-4 family, closed or not.** Four defects found across five
|
||||
passes, none by looking for them. State whether any remain and whether
|
||||
the family is now trustworthy — and if a fifth is plausible, say where.
|
||||
- **What five passes of being "owed" cost.** These two numbers were
|
||||
carried as open items in four consecutive evidence files. Either the
|
||||
carrying was cheap and correct, or it was a way of not doing the work;
|
||||
say which, with the cost.
|
||||
- **Quote CB-WP-0018's cost by re-running the instrument.** Under the rule
|
||||
T03 writes down.
|
||||
- **Chaos: declaration 2 of 12 in window 2, first roll at d8.**
|
||||
Loading…
Add table
Add a link
Reference in a new issue