You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(perf): revision 3 of the calibration policy - two P0, two P1, still no numbers
Revision 2 was ruled PASS WITH MECHANICAL CORRECTIONS. None of the four
findings changes the statistical model, which the owner ratified as settled.
P0 - exact arithmetic never said how a constant is written down. The
document refused a floating-point LP solver on exactness grounds and then
left its constants as "a dimensionless number", so a committed decimal is a
float to one implementation and a rational to another, and they disagree on
every boundary. Every rational quantity is now a canonical integer pair:
reduced, positive denominator. Reading one through a binary float is a
refusal, ranges are expressed on the pair, and A_abs is not rounded to an
integer because rounding a bound is an undeclared adjustment to it.
P0 - the sequence allowed the implementation to be written after the
training data existed. That is a steering surface even with the prose
frozen. The implementation, its mutation review, its CI and its frozen
digest now all precede the training collection, in a twelve step sequence.
Code that decides admissibility must not have weaker provenance than code
that starts the stopwatch: either the change moves the measurement-harness
digest before any corpus exists, or the policy implementation's own digest
becomes a mandatory identity axis for the fit, the freeze and the
validation. Step 2 carries no constant defaults, so the code physically
cannot hold a number nobody ratified.
P1 - the tie-break rationale claimed more than the rule guarantees, and the
claim is withdrawn rather than softened. Tied optimal lines can cross, so a
smaller intercept can carry a steeper slope. Witness, found by search:
observations (8,20), (8,10), (3,11) at q=1/2 have two minimisers at equal
loss, A_abs=28/5 R_rel=9/5 and A_abs=11 R_rel=0; the rule picks the first,
which is looser for every t > 3. A first randomised sweep found nothing
because its generator kept driving ties onto the R_rel=0 boundary where the
claim happens to hold, which is a reminder that a search finding nothing is
evidence about the search. The rule stands unchanged as canonicalisation -
identical constants from identical bytes - and no scalar tie-break by
envelope area replaces it, since that would add an objective nobody asked
for.
P1 - N_max removed. A finite frozen ladder already ends somewhere; its last
element is the mandatory stop, and a second maximum expresses nothing but a
future argument about which one wins.
No implementation, no clock, no numbers.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYLNQy6tLXqsV1CbuNqsSb
**Status: PROPOSAL. Nothing here is ratified, and nothing here is a number.**
4
4
@@ -11,7 +11,25 @@ document where the value was chosen by whoever was holding the pen.
11
11
No clock authority is claimed or implied. No implementation authority is claimed.
12
12
No measurement is proposed here.
13
13
14
-
## Revision 2 — what the owner's review changed
14
+
## Revision 3 — what the owner's second review changed
15
+
16
+
Revision 2 was ruled **PASS WITH MECHANICAL CORRECTIONS**: the statistical
17
+
architecture accepted, the mechanism not yet ratified, on two P0 findings and two
18
+
P1.
19
+
20
+
| finding | fixed in |
21
+
|---|---|
22
+
| P0 — exact arithmetic never said how a design constant is *written down*, so one implementation could read a decimal as a float and another as a rational | §2.6 — a canonical exact-rational representation, and a refusal for anything else |
23
+
| P0 — the sequence let the implementation be written after the training data existed, which is a steering surface even with the prose frozen | §3.6 — the implementation, its controls and its frozen digest all precede the training collection |
24
+
| P1 — the tie-break rationale claimed more than the rule guarantees | §3.3 — the claim is **withdrawn** with a counterexample; the rule stands as canonicalisation only |
25
+
| P1 — `N_max` duplicated the last element of a finite frozen ladder and could contradict it | removed throughout; the ladder's last element **is** the mandatory stop |
26
+
27
+
Nothing else is reopened. The owner ratified the symmetric midpoint comparison,
28
+
the hybrid form, the quantile regression, the pooling, the four-way semantics,
29
+
the no-`K` aggregation, the holdout firewall and the per-`N` stratification as
30
+
settled, and reopening a settled choice is its own kind of drift.
31
+
32
+
## Revision 2 — what the owner's first review changed
15
33
16
34
Revision 1 was ruled **CHANGES REQUIRED** with four P0 findings and one P1. The
17
35
form was ratified in principle; the mechanism was not, because a reasonable
@@ -26,8 +44,7 @@ space between those two is where knobs hide.
26
44
| P0 — `N` selection was mathematically undefined: the model has no `N` in it | §3.4 — per-`N` envelopes and a deterministic selection rule |
27
45
| P1 — §6.3 inherited constants without naming their provenance | §6.3 — the source artifact, the digest that covers it, and why this policy may not touch them |
28
46
29
-
Three things are **not** reopened, because the owner ratified them in principle
30
-
and reopening a settled choice is its own kind of drift: the symmetric midpoint
47
+
Three things were **not** reopened in revision 2 either: the symmetric midpoint
31
48
comparison, the hybrid absolute-plus-relative form, and the no-`K` aggregation.
32
49
33
50
## Why this document exists, in the frozen brief's own terms
@@ -166,6 +183,38 @@ describes the instrument's own dispersion, not a budget of permitted failures. I
166
183
that proves impossible, the honest outcome is a failed policy under §4 and a
167
184
conversation with the owner, not a `K` that grows until the gate opens.
168
185
186
+
### 2.6 How a constant is written down
187
+
188
+
Revision 2 insisted on exact rational arithmetic and then left the constants as
189
+
"a dimensionless number", which settles nothing: a value written as a decimal —
190
+
say `0.95`, used here only as an illustration and not as a proposed value — is
191
+
read by one implementation as a binary float and by another as `19/20`, and the
192
+
two then disagree on every boundary case. That is a particularly silly gap in a document that already
193
+
refused a floating-point LP solver on exactness grounds.
194
+
195
+
**Every rational quantity in this policy — design constant, empirical constant,
196
+
and every intermediate — is represented canonically as a pair of integers:**
197
+
198
+
numerator, denominator
199
+
denominator > 0
200
+
gcd(|numerator|, denominator) = 1
201
+
202
+
The reduced form with a positive denominator is unique, so the representation is
203
+
itself canonical and two implementations cannot disagree about what was frozen.
204
+
205
+
Binding consequences:
206
+
207
+
- a constant is **committed as that integer pair**, never as a decimal string and
208
+
never as a float
209
+
- reading, writing or comparing any of these quantities through a binary
210
+
floating-point value is a **refusal**, not a rounding difference
211
+
- the admissible ranges are expressed on the pair: `q` in `(0, 1)` means
-`A_abs` is a rational count of nanoseconds in the same canonical form. It is
215
+
not rounded to an integer: rounding it would be an undeclared adjustment to a
216
+
bound, in whichever direction the rounding happened to go
217
+
169
218
## 3. How the constants will be obtained
170
219
171
220
### 3.1 Three corpora, and a firewall between them
@@ -223,12 +272,12 @@ already in hand.
223
272
|`q`| quantile level in `(0, 1)`| which quantile of the instrument's dispersion the inner bound claims to cover |
224
273
|`M`| dimensionless, `> 1`| the width of the inconclusive band, as the outer bound's multiple of the inner |
225
274
|`R_runs`| count, `≥ 2`| how many repeated runs per cell the fitting corpus collects |
226
-
| the `N` ladder | ordered counts | the repetition counts the instrument may use |
227
-
|`N_max`| count | the ladder's mandatory stop |
275
+
| the `N` ladder | a **finite**, ordered, frozen list of counts | the repetition counts the instrument may use; **its last element is the mandatory stop**, and there is no separate maximum — a second knob there would express nothing but a future argument about which maximum wins |
228
276
|`G`| dimensionless, `≥ 0`| the diminishing-returns margin used by §3.4 to select `N`|
229
277
230
-
No design constant may be derived from the fitting corpus, and none has a value
231
-
here.
278
+
No design constant may be derived from the fitting corpus, none has a value here,
279
+
and each is written in the canonical exact-rational form of §2.6 when it is
280
+
eventually ratified.
232
281
233
282
### 3.3 The empirical fit, specified as a single computable function
234
283
@@ -288,12 +337,30 @@ margin. Without a stated tie-break, two correct implementations of this document
288
337
would return materially different constants and both would be entitled to say
289
338
they followed it. That is precisely the defect this revision exists to remove.
290
339
291
-
**Tie-break, in order:** among all minimisers, take the smallest `A_abs`; among
292
-
those, the smallest `R_rel`.
340
+
**Tie-break, in order.** Among all objective minimisers represented by the
341
+
enumerated candidate set:
342
+
343
+
1. choose the smallest `A_abs`;
344
+
2. among those, choose the smallest `R_rel`.
345
+
346
+
This is a deterministic **canonicalisation** rule. It does not claim pointwise
347
+
dominance over every other minimiser. Its purpose is identical constants from
348
+
identical corpus bytes, and that is the whole of its purpose.
293
349
294
-
The governing principle, stated so the rule can be checked against it rather than
295
-
merely obeyed: **a tie is never resolved in the direction that makes the gate
296
-
easier to pass.** Both components select the tighter bound.
350
+
**A claim about this rule is withdrawn.** Revision 2 asserted that "a tie is
351
+
never resolved in the direction that makes the gate easier to pass". That is
352
+
false, and not merely overstated. Tied optima need not share a slope, so a
353
+
smaller intercept can come with a steeper one, and the two lines cross. A
354
+
concrete witness, found by search rather than argued: observations
355
+
`(t, y) = (8, 20), (8, 10), (3, 11)` at `q = 1/2` have two tied minimisers at
356
+
equal loss — `A_abs = 28/5, R_rel = 9/5` and `A_abs = 11, R_rel = 0`. The rule
357
+
selects the first, which is **looser** than the second for every `t > 3`.
358
+
359
+
The moral is the one this project keeps paying for: a rule may be perfectly good
360
+
at its actual job while the sentence justifying it quietly promises something
361
+
else. The rule stays; the promise goes. And no scalar tie-break by envelope area
362
+
or summed width replaces it, because that would introduce a second objective
363
+
nobody asked for, on top of the one that already decides.
297
364
298
365
**Fail-closed conditions of the fit**, each refusing rather than guessing:
299
366
@@ -356,24 +423,53 @@ under the current harness identity. Everything on hand is form evidence.
356
423
This is a normal outcome, not a setback, and the response is not to squeeze
357
424
constants out of the museum exhibit in `historical/`.
358
425
359
-
The required sequence, each step a separate owner decision:
426
+
### 3.6 The implementation is written before the data, not after
427
+
428
+
Revision 2 jumped from a ratified mechanism straight to a measurement, leaving
429
+
the code that applies the policy to be written afterwards. That is a steering
430
+
surface even when the prose is frozen: an implementation written with the
431
+
training data already on disk can be nudged, in a hundred defensible small ways,
432
+
toward the answer its author has already seen.
433
+
434
+
So the implementation, its controls and its **frozen digest** all precede the
435
+
training collection. And its provenance is not softer than the instrument's:
436
+
**code that decides admissibility must not have weaker provenance than code that
437
+
starts the stopwatch.**
438
+
439
+
- if the implementation changes `perf_baseline.py` or any source covered by the
440
+
**measurement-harness digest**, that digest moves — necessarily **before** any
441
+
training data exists, never after
442
+
- if it lives separately and the harness is untouched, that is equally fine, but
443
+
its **own digest becomes a mandatory identity axis** for the fit, for the
444
+
constant freeze and for the validation pair, exactly as the harness digest is
445
+
446
+
The required sequence, each numbered step a separate owner decision:
360
447
361
448
```text
362
-
1. ratify this mechanism (docs only; this document)
363
-
2. ratify the design constants q, M, R_runs,
364
-
the N ladder, N_max, G (owner decision; no data consulted)
365
-
3. preregister and authorise ONE
366
-
calibration-only training collection (a measurement; NOT authorised here)
367
-
4. fit per §3.3 per rung, select N per §3.4,
368
-
freeze and commit the constants (deterministic; no new data)
369
-
5. commit the validation protocol (before any validation data exists)
370
-
6. run ONE fresh holdout pair (a measurement; NOT authorised here)
371
-
7. verdict per §4
449
+
1. mechanism RATIFIED (docs only; this document)
450
+
2. implement pure policy / fitter / verdict (NO constant defaults anywhere)
451
+
3. mutation + control review, exact-head CI (the implementation's own adversary)
452
+
4. freeze policy-implementation digest
453
+
AND measurement-harness digest (both, before any corpus exists)
454
+
5. ratify the exact-rational design constants
455
+
q, M, R_runs, the finite N ladder, G (owner decision; no data consulted)
456
+
6. preregister the numeric training collection,
457
+
bound to BOTH frozen digests (before it is run)
458
+
7. separate authority -> ONE training collection (a measurement)
459
+
8. deterministic fit per rung, select N per §3.4 (no new data)
460
+
9. freeze the empirical constants (committed)
461
+
10. commit the fresh holdout protocol (before any validation data)
462
+
11. separate authority -> ONE validation pair (a measurement)
463
+
12. four-way verdict per §4
372
464
```
373
465
374
-
Steps 3 and 6 are measurements and neither is authorised by this document. Step 2
375
-
precedes step 3 deliberately: design constants chosen after seeing the training
376
-
corpus would be design constants chosen to flatter it.
466
+
Step 2 carries **no constant defaults**: the fitter and the verdict function take
467
+
`q`, `M`, `G`, `A_abs` and `R_rel` as required arguments with no fallback value,
468
+
so the code physically cannot carry a number that no one ratified.
469
+
470
+
Steps 7 and 11 are measurements and neither is authorised by this document.
471
+
Step 5 precedes step 6 deliberately: design constants chosen after seeing the
472
+
training corpus would be design constants chosen to flatter it.
377
473
378
474
## 4. The holdout firewall
379
475
@@ -507,7 +603,7 @@ it can record what it observed, and it must refuse rather than guess.
507
603
508
604
A GitHub-hosted Windows runner is already recorded as not measurement-grade — two
509
605
runs minutes apart on one commit disagreed about their own environment — so the
510
-
environment must be named explicitly in §4's protocol and in step 3's training
606
+
environment must be named explicitly in §4's protocol and in the step 6 training
511
607
preregistration.
512
608
513
609
### 6.6 Determinism and the re-run rule
@@ -547,17 +643,21 @@ Three binding consequences:
547
643
```text
548
644
policy mechanism frozen (this document, ratified)
549
645
↓
550
-
design constants ratified (§3.2; before any corpus is collected)
646
+
pure implementation written, mutation-reviewed, CI green
647
+
↓
648
+
policy-implementation digest AND measurement-harness digest frozen
649
+
↓
650
+
design constants ratified as exact rationals (§2.6, §3.2; no data consulted)
551
651
↓
552
-
training collection preregistered + authorised + run (§3.5 step 3)
652
+
training collection preregistered against both digests, authorised, run once
553
653
↓
554
-
empirical constants frozen, N selected (§3.3, §3.4; deterministic)
654
+
empirical constants frozen per rung, N selected (§3.3, §3.4; deterministic)
555
655
↓
556
656
validation protocol committed (§4; before any validation data)
0 commit comments