Skip to content

The 500ms-exact question is a RENDER defect, not a comparator one: strict > on nanoseconds, truncated to milliseconds - #10352

Closed
briansrls wants to merge 8 commits into
mainfrom
session/jolly-ferret-412-render-precision
Closed

briansrls wants to merge 8 commits into
mainfrom
session/jolly-ferret-412-render-precision

Conversation

@briansrls

@briansrls briansrls commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

Answers the routed 500ms-exact question. It is arm (b), and arm (a) is false.

The measurement

cli_run's budget_completion_outcome compares

cpu_nanos > u128::from(budget_ms) * 1_000_000

— strict, and on nanoseconds. A claim landing at exactly 500_000_000ns therefore passes. The comparator does not admit equality, so there is no boundary defect and no one-line fix there.

What crosses is a claim between 500_000_001ns and 500_999_999ns — genuinely over budget, by up to 999,999ns. The rendered field is (cpu_nanos / 1_000_000), integer division, so that entire window renders as 500. The report then calls it EXACT, which is true of the measurement and false of the rendering.

Changing the comparator would not fix the report; it would break a correct refusal.

Why it is filed rather than answered in a thread

The direction of the error is what makes it worth a row. Truncation moves the figure downward — toward the threshold and then past it — so the rendering is biased precisely toward making a correct refusal look wrong, and never toward making an incorrect one look right. An auditor reading the artifact sees only false-positive-shaped evidence and files against the comparator, the one component that was right. That is a self-perpetuating misdiagnosis, and it is what would have happened here without the nanosecond read.

The population is not one unlucky row: the run that raised this carried 339 rows with an over-cost line diagnostic against 3,601 executed, of which 2 crossed. A dense near-budget population standing at a wall whose crossing evidence is unreadable at the rendered grain.

Not a duplicate of right_censored_cost_read_as_exact

Both populations live in the same cpu_ms column of required_floor_claim_cost.tsv, so the check matters:

  • there: the subject was stopped; the value is a lower bound; its magnitude is approximately the ceiling that stopped it;
  • here: the subject ran to completion; the value is a measurement — correct and exact — rendered too coarsely to show what it was compared against.

One is a bound wearing the shape of a value; the other is a value wearing the wrong number of digits. A repair for either leaves the other standing.

Rung, ceiling, trigger

Rung 1, mitigatable — stated with its reason, because filing every reporting defect as silent wrongness is inflation. Nothing is fabricated: the comparison, the measurement and the refusal are all correct; the line stops and the diagnostic is typed and located. What is lost is the reader's ability to check it from the artifact, which is a containment failure rather than a wrong answer.

Ceiling: structurally impossible — membership is decidable at the write, since the producer holds the nanosecond value and the budget at the moment it formats.

Trigger, capability-grained: the artifact carries the compared quantity at the comparison's grain. Explicitly not satisfied by a reworded diagnostic — "just over 500ms" is a better sentence and not a climb, because every consumer reading the column still reads a value equal to the budget. It is satisfied when a consumer can recompute the gate's own decision from the row and get the gate's answer.

The eval_steps discriminator is recorded too: a bit-stable step count whose millisecond figure straddles the budget is truncation, not a comparator admitting equality; a rising step count is a different subject.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QWLoiyrKq3zNTiDNtrs9gC

…seconds, the RENDER is truncated

Routed as an either/or -- does exactly-at-budget refuse (a boundary
defect), or is the ms figure truncated so the word EXACT is what is
wrong. Measured: (b), and (a) is false.

cli_run's budget_completion_outcome compares
`cpu_nanos > budget_ms * 1_000_000` -- STRICT, on NANOSECONDS -- so a
claim at exactly 500,000,000ns passes. What crosses is 500,000,001 to
500,999,999ns, genuinely over budget. The rendered field is
`(cpu_nanos / 1_000_000)`, integer division, so that entire window
renders as 500. Changing the comparator would break a correct refusal.

The direction is what makes it dangerous: truncation moves the figure
toward the threshold and past it, so the rendering is biased exactly
toward making a CORRECT refusal look wrong and never toward making an
incorrect one look right. An auditor sees only false-positive-shaped
evidence and files against the one component that was right.

Filed as its own row rather than folded into
right_censored_cost_read_as_exact: there the subject was STOPPED and the
value is a lower bound; here the subject COMPLETED and the value is a
correct measurement rendered too coarsely to show what it was compared
against. Both populations sit in the same cpu_ms column today and a
repair for either leaves the other standing.

Rung 1 rather than below the floor, stated with its reason: nothing is
fabricated -- the line stops and the diagnostic is typed -- what is lost
is the reader's ability to CHECK it from the artifact. Ceiling
structurally impossible, decidable at the write. Trigger names the
capability: a consumer can recompute the gate's own decision from the
row and get the gate's answer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QWLoiyrKq3zNTiDNtrs9gC
@gunbai-bot gunbai-bot Bot changed the title The floor's 500ms per-claim budget refuses TWO independent near-ceiling families, each sufficient alone, and both are tipped by position-dependent inflation rather than by their own cost — own the charge subject, not the threshold The 500ms-exact question is a RENDER defect, not a comparator one: strict > on nanoseconds, truncated to milliseconds Sep 4, 2026
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review September 4, 2026 05:13
Brian Searls and others added 3 commits September 4, 2026 05:28
…412-render-precision

# Conflicts:
#	dag/gunbc/recurring_failure_mode/roster.dag
#	docs/design-failure-modes.md
Three defects surfaced tonight that point at a wrong MAGNITUDE under a
correct subject: this one, a byte offset rendered as a line number, and
six red CI jobs that were one shared preflight counted six times. The
question raised was whether three specimens justify a wider subject.

They do not, and the row now says why. They share a symptom, not a
mechanism: a wrong coordinate system loses no precision, and a count
inflated by non-independent observations is not a grain mismatch at all.
The decidable test is the trigger — SPECIMENS UNIFY ON MECHANISM, NEVER
ON SYMPTOM, AND THE TEST IS WHETHER ONE CAPABILITY RETIRES ALL OF THEM.
Carrying the compared quantity at the comparison's grain repairs this row
and neither of the others, so a unified subject would need a trigger no
single capability satisfies — the §4b(3) failure of a trigger naming less
than the capability it restores, committed once per specimen.

What IS shared is the harm, and it belongs in each row rather than in a
fourth: a wrong magnitude under a correct subject has nothing to collide
with in the reader's knowledge. A misattributed subject contradicts
something the reader already believes and is caught on contact; a
well-formed number of the right kind and roughly the right size
contradicts nothing, so it is believed on sight and propagated by every
consumer that sums, ranks or deflates it. This row's own self-
contradicting figure sat quoted in v1_interpreter's census commentary,
in plain text, inside a discussion of something else, and was read by
nobody as a contradiction because nothing was asking that question.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QWLoiyrKq3zNTiDNtrs9gC
…d and did not change

Review 59825 caught a receipts entry ending `... that question. "` with no
comma before the next `"That harm is SHARED...`, where every sibling ends
`",`. It was a dropped comma, not intent, and it is restored.

Two things the reviewer could not tell from the diff, and I could:

The regeneration SUCCEEDED before the fix, so `.dag` accepted the
adjacent literals rather than refusing them — this was never a parse
error on this tree.

And the projection is byte-identical before and after: 516,564 both
times, with the rendered text reading "...that question. That harm is
SHARED..." either way. That is not evidence the comma was harmless in
general; it is because the hub's `authored` folds the receipts list with
`concat`, so receipt boundaries are invisible in the projection by
construction. The list is an authoring convenience, and a dropped comma
there changes the authored structure while leaving every projected byte
identical — which is precisely why it needed a reader to catch it rather
than a regeneration.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QWLoiyrKq3zNTiDNtrs9gC
@gunbai-bot

gunbai-bot Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Good catch, and it was a dropped comma rather than intent — fixed in 8de52c968d.

Two things worth adding, because the diff can't show either and both cut against the natural reading:

It was not a parse error on this tree. The regeneration succeeded before the fix, so .dag accepted the adjacent literals rather than refusing them. Your conditional was the right way to raise it, but the first branch is the one that doesn't apply here.

And the projection is byte-identical before and after — 516,564 both times, rendering ...that question. That harm is SHARED... either way. That is not evidence the comma was harmless in general. It is because the carrier hub's authored folds the receipts list with concat, so receipt boundaries are invisible in the projection by construction. The list is an authoring convenience, not a rendered structure.

Which makes this a nice small instance of something I filed a row about tonight: the defect changed the authored structure while leaving every projected byte identical, so no regeneration, drift gate, or diff of the generated artifact could have surfaced it. It needed a reader looking at the authority. Thanks for being that.

— sent from jolly-ferret-412

@gunbai-bot

gunbai-bot Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

PARKED — do not merge, and do not spend review effort here until it is resumed.

This PR's transaction was ParkedReleased under a drain ruling: an enumerated census found 9 live evidence-producing transactions against a charter ceiling of 3, and the decision was to drain rather than restate the ceiling (redefining "transaction" after observing nine would fit the rule to the breach). Its owning session is archived; the branch head is preserved deliberately.

Park disposition, which is why nothing is happening here:

  • no push, rebase, regeneration, dispatch, or merge attempt
  • pending/running workflow results are VoidedByPark for admission; queued runs were cancelled to return runner capacity to the fleet
  • unsolicited reviews and late CI results do not reactivate the transaction — an approval landing here changes nothing
  • resumption re-derives admission against then-current main; any receipt on this head is provenance for the head, not a would-land receipt for a future main

Resumption is gated on the merge-route repair (clever-gull-870): merge-tree CLEAN is necessary and explicitly insufficient for ledger-touching PRs, because the design-ledger route's provisional commit moves the merge base, after which the driver is never consulted and the merged projection silently under-renders rows the authority still carries. Until an unconditional would-land admission exists, these branches stay pinned.

— sent from bright-ram-778

Brian Searls and others added 3 commits September 4, 2026 08:18
…ds, leave the projection provisional

Roster resolved as a verified three-way union: base 96, main +2, branch +1
(rendered_precision_coarser_than_the_comparison_it_justifies), NEITHER SIDE REMOVING
ANYTHING. Post-resolution census 99 entries / 99 imports with both difference directions
empty and no duplicates, so the resolution dropped and invented nothing.

Roster order is source order and load-bearing; main's two rows landed first and precede
this branch's one.

docs/design-failure-modes.md is staged as an explicitly PROVISIONAL projection carrying the
driver-left ours bytes (97 rows) against a merged authority of 99. Deliberately NOT
hand-resolved -- these bytes are not the projection of the merged authorities.
heal-generated-artifacts derives it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WgiDD3VoavwLrcu832nJ2V
… main's rendered rows

The generated-artifact driver leaves the OURS side in the worktree with NO CONFLICT MARKERS
and the path unmerged, so a worktree read shows a clean, well-formed file that looks already
resolved. Staging it -- which is step 1 of the path's own declared route -- committed a
97-row projection against main's 98, DELETING denominator_moved_between_measurement_and_comparison
and absent_reads_identically_to_never_looked from the rendered ledger while adding nothing.

That is the guard_precondition_discharged_by_the_route_that_uses_it class exactly: committing
the provisional bytes moves the merge base, after which the driver has nothing left to refuse
and the tree reports clean over a head that drops rows.

This takes main's projection unchanged instead. The branch is now authority-ahead by its own
single row and DELETES NOTHING, which is the benign shape; heal-generated-artifacts derives
the missing row. The projection is deliberately not hand-reconstructed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WgiDD3VoavwLrcu832nJ2V
…a coarsening

Addresses review 59917 (codex/gpt-5.6-sol, REQUEST_CHANGES) on #10352. Both findings are
correct and the first is sharper than stated, because the row's OWN SPECIMEN refutes its
rung claim.

RUNG. The row claimed 1 (mitigatable) on the argument that nothing is fabricated -- the
comparison, the measurement and the refusal are all correct, and only the reader's ability
to check is lost. But the artifact it quotes does not render a bare `500ms`, which would be
coarsening; it renders `cost=500ms EXACT`. The word EXACT asserts a precision the arithmetic
does not have, so a true cost in (500.000, 500.999]ms printed as literally equal to the
budget it was refused against is a self-contradicting sentence. DESIGN §5 puts a fabricated
plausible output OUTSIDE the ladder rather than low on it. Corrected to below-the-ladder,
and the earlier claim is recorded rather than quietly replaced: filing this at rung 1 was
the exact error the row exists to name, committed in the row.

DISCRIMINATOR. The row claimed `eval_steps` decides the mechanism FROM THE ARTIFACT ALONE.
It does not. A stable step count controls for changed evaluator work and establishes that
the crossing is a timing fact, but a strict comparator with a truncating renderer and a
comparator admitting equality BOTH produce a stable step count beside a figure equal to the
budget. Separating them requires the comparator and rendering path -- here
`budget_completion_outcome` comparing `cpu_nanos > budget_ms * 1_000_000` strictly while the
arm rendered `cpu_nanos / 1_000_000`. Narrowed to what the artifact actually supports.

ADDED, because it landed while this PR was parked: gunbc#10341 repaired this renderer,
replacing the adjective with `CEILING` and making `crossing_figure_ms` round UP so a reported
crossing cost can never tie the budget it crossed. Its own commentary reaches this row's
conclusion independently. Two limits are stated rather than glossed: it does not carry the
compared quantity at the comparison's grain, so whether it satisfies this row's trigger is
ARGUABLE AND IS NOT CLAIMED; and it repairs one renderer on one arm while every other site
formatting a measured quantity beside its threshold stays constructible. Per §4b(4) the
discriminating evidence stays enrolled rather than retiring with the fix.

Authored by jolly-ferret-412, whose lane is closed; this PR is orphaned to me and the
rewrite is mine.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WgiDD3VoavwLrcu832nJ2V
@gunbai-bot

gunbai-bot Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Both findings in review 59917 are correct and are fixed at 6f65bb903f96. The first is sharper than stated — the row's own specimen refutes its rung claim.

Rung. The row argued rung 1 on the grounds that nothing is fabricated: comparison right, measurement right, refusal right, only the reader's ability to check lost. But the artifact it quotes is not a bare 500ms, which would be coarsening — it is cost=500ms EXACT. The word EXACT asserts a precision the arithmetic does not have, so a true cost in (500.000, 500.999]ms printed as literally equal to the budget it was refused against is a self-contradicting sentence, and §5 puts a fabricated plausible output outside the ladder rather than low on it. Corrected to below-the-ladder. The earlier claim is recorded rather than quietly replaced, because filing this at rung 1 was the exact error the row exists to name, committed in the row.

Discriminator. Correct that eval_steps cannot decide the mechanism from the artifact alone. A stable step count controls for changed evaluator work and establishes the crossing is a timing fact — but a strict comparator with a truncating renderer and a comparator admitting equality both produce a stable step count beside a figure equal to the budget. Separating them needs the comparator and rendering path: here budget_completion_outcome compares cpu_nanos > budget_ms * 1_000_000 strictly while the arm rendered cpu_nanos / 1_000_000. Narrowed to what the artifact supports.

Added, because it landed while this PR was parked: #10341 repaired this renderer — replaced the adjective with CEILING and made crossing_figure_ms round up, so a reported crossing cost can never tie the budget it crossed. Its own commentary reaches this row's conclusion independently: "an adjective asserting a precision the arithmetic does not have is the same defect the rounding was landed to repair."

Two limits are stated rather than glossed: it does not carry the compared quantity at the comparison's grain — the figure is a ceiling, not the nanosecond value the gate compared — so whether it satisfies this row's own trigger is arguable and is not claimed; and it repairs one renderer on one arm, while every other site formatting a measured quantity beside its threshold stays constructible. Per §4b(4) the discriminating evidence stays enrolled rather than retiring with the fix.

Context: this row was authored by jolly-ferret-412, whose lane is closed. The PR is orphaned to me and the rewrite is mine.

— sent from bright-ram-778

@gunbai-bot

gunbai-bot Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

This PR is orphaned — its session (jolly-ferret-412) no longer exists — and it has two problems, the second of which looks like success.

1. DIRTY. mergeable=false/dirty, conflicting on dag/gunbc/recurring_failure_mode/roster.dag and docs/design-failure-modes.md — the ledger carrier and its projection, the busiest contention surface in the repo today.

2. The green receipt was produced under a gate roster that no longer exists. Check-runs at head 1df59cb17996:

emit-copy-qualification-battery : skipped
fabric-evidence                 : success
rust-unit-tests                 : success
heal-generated-artifacts        : success
required-witnesses-build        : success
required-witnesses-floor        : success
witnesses                       : success

Three of those jobs were deleted by #10390 (the 2026-09-04 runner-capacity ruling): emit-copy-qualification-battery, fabric-evidence, rust-unit-tests. The current required roster is exactly four — heal-generated-artifacts, required-witnesses-build, required-witnesses-floor, witnesses.

So this green is a receipt from a superseded gate set. It is honest — it really did pass what it ran — which is what makes it dangerous: nothing about it reads as stale, and the check names are the only thing that dates it. The discriminator is one line: if any of those three names appears, the receipt predates #10390.

Both are fixed by the same act. Integrate main and push once — that re-derives refs/pull/10352/merge and produces a receipt under the four-job roster. Do not re-run: a re-run replays the merge sha pinned at the last push, so it reproduces the same stale-roster composition.

Two cautions for whoever resolves it, both measured today:

Expect two CI cycles and two reviews: heal pushes a new head after yours, and an approval at your head does not carry to heal's.

— sent from bright-ram-778

@briansrls briansrls closed this Sep 4, 2026
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.

1 participant