Phase-E audit — scientific math workbench and repository state
How to read this page
Three ways to read this page. Precise is the document itself, exactly as it is written in the repository. Plain and Clear were written for this website to help you meet that document — they are about it. They are not it, and they are not evidence.
A laboratory built around the bacterial flagellar motor. It holds a deterministic reduced model of the motor, analysis of recorded single-motor events, and a cross-study parity programme. Alongside those sit the scientific gates the work has to clear, and independent audits of both the model and the repository around it. The framing throughout is hierarchical active inference.
It is for a reader with a scientific interest, and especially for one who has come to check whether a model fit has quietly become a claim about biology. The laboratory's central discipline is a labelling one: every visible layer carries exactly one class — recorded observation, structural reconstruction, reduced model, or physical teaching analogue — and those classes may not be blended. Behavioural observations of one species are held apart from structural work on another, so that nothing on the page can read as a single measured specimen.
Start with the Living Science Walkthrough, which sets out those classes and the truth contract they belong to. Then the scientific and mathematical contract, then the parity gates, which state what would have to hold before a parity claim could stand.
What it is not: a claim of biological parity. The walkthrough is explicit that the release does not turn a model fit into a biological identity claim, and full biological parity is recorded as false and printed as false. Passing this repository's software tests is necessary here and is not the same thing as agreement with a living motor.
Your browser cannot switch reading levels, so the document itself is shown.
Precise — the source document
This is the document. Rendered from the repository at the commit above, with nothing rewritten for the web. A gate re-renders it on every deploy and fails the build if a single byte differs.
Audited tree: feature/scientific-math-workbench at c23f686, worktree
UNI-FLAGELLUM-math-workbench.
Audit date: 2026-07-21.
Method: six parallel dimension audits (truth contract, numerical rederivation,
test adversarial, documentation drift, product/runtime, data provenance), each finding
then put to an independent adversarial verifier instructed to refute it by default;
plus a completeness critic tasked with finding what the six dimensions missed; plus
direct execution by the orchestrator.
Raw findings 74 · confirmed after adversarial verification 55 · refuted 19. Confirmed severities: 2 blocking, 9 major, 18 minor, 26 informational.
The two blocking findings were not produced by the six dimensions. They were found by the completeness critic and then confirmed by direct execution. This is itself the audit's most important methodological result: a dimension set aimed at the served page audited the shop window and missed the instrument behind it.
1. Observed outcomes
Every gate in the CLAUDE.md required-validation block was executed in this worktree
on 2026-07-21. Literal results:
| Gate | Result | Evidence |
|---|---|---|
npm test |
PASS | 103/103, then build, then tests/rendered-html.test.mjs 2/2 |
npm run build |
PASS | 5/5 vinext environments; routes /, /math-workbench |
npx tsc --noEmit |
PASS | no diagnostics |
npm run lint |
PASS | no diagnostics |
npm run science:verify |
PASS | 244 holdout intervals; mean log score -3.8380834245644038/interval; publicArtifactMismatchDetected: true |
npm run cross-study:verify |
PASS | 0 failures; itoLeaveOneBinOutRmse 0.8293641328245378, latticeFittedSse 0.04976772774792293, rftRmse 1.7274106879853608, 10 audit artifacts |
npm run cross-study:verify-raw |
BLOCKED | experiments/upstream-cache/ito-2021-raw-data.zip absent (4.09 GB, gitignored) |
npm audit --omit=dev --audit-level=moderate |
PASS | 0 vulnerabilities (production) |
npm audit (including dev) |
13 vulnerabilities, 8 high | vite 8.0.0–8.0.15, ws 8.0.0–8.20.1, undici/miniflare |
Production and development dependency risk are reported separately, as required.
cross-study:verify-raw is BLOCKED, not passed, and must never be reported as a
pass from this clone.
Executable-surface sweep (orchestrator, headless). 81 corner trajectories × 200
steps (16,200 agent steps) across all four declared slider ranges at min/default/max;
320 duration-calculator cells over eight states × ten durations spanning 1e-3–1e8 s;
72 DLT cells. Results: no non-finite value; posterior and policy posterior normalise to
1 within 1e-9; surprise never negative; stators within [0,11]; speed never negative; two
identical 100-step runs bit-identical; P₊ + P₋ = −dS/dt to <1e-4 relative; mean dwell
equals ∫S dt to <1e-3. No defect found in this sweep.
2. Blocking findings
E-B01 — A gate renders PASS with zero evidence on disk
- Severity: blocking. Affected claim:
X01_SOURCE_INTEGRITY: PASS, and by conjunction every cross-study parity claim that rests on source integrity. - File and line:
experiments/data/cross-study-motor-evidence.json(sourceIntegrity.localArtifacts), surfaced atapp/math-workbench/scientific-math-workbench.tsx:377viastatusClass; guard attests/cross-study-parity.test.mjs:37,45. - Reproduction and evidence:
The gate's own criterion begins "Every cached artifact matches its frozen SHA-256 and byte size; each ZIP passes CRC testing…". No cached artifact exists.X01_SOURCE_INTEGRITY -> PASS declared artifacts: 12 present on disk : 0 all verified==True? True experiments/upstream-cache: No such file or directorytests/red/c2-source-byte-gate.test.mjsalready fails at HEAD with exactly this diagnosis and is excluded fromnpm testby design. - Root cause: the gate result is derived from frozen
verified: trueclaims inside the evidence file rather than from current verification.tests/cross-study-parity.test.mjs:37assertsartifact.verified === true— reading the claim — and:45short-circuits oncheckedArtifacts === 0, making the block vacuous precisely when the evidence is absent. - Minimal correction: compute X01's status at report-generation time from artifacts
actually present. When
experiments/upstream-cache/is absent, X01 must emitBLOCKED_EXTERNAL, notPASS. Remove thecheckedArtifacts === 0short-circuit so the test fails rather than passes vacuously. - Required failing test: a test asserting that for every
sourceIntegrity.localArtifacts[]entry, either the file exists and its SHA-256 recomputes, or the gate status is notPASS. - Validation:
npm run cross-study:run && npm run cross-study:verify && npm test. - Rollback: revert the status-computation commit; the report regenerates.
- Scientific impact: this is a direct violation of the
CLAUDE.mdrequired-validation clause "If a required dataset, archive, instrument, credential, or service is absent, mark its gateBLOCKED,NOT RUN, orEXTERNAL VALIDATION REQUIRED; never report a pass." A green badge on the only served page currently asserts verified source integrity that has not been performed in this clone.
E-B02 — A green test enforces a truth-contract violation
- Severity: blocking. Affected claim: the
OBSERVEDtruth class itself. - File and line:
lib/walkthrough.js:356-359; enforced attests/walkthrough.test.mjs:41. - Evidence:
export function truthClassForMode(mode) { if (mode === "OBSERVED_REPLAY" || mode === "LIVE_INSTRUMENT") return "OBSERVED";assert.equal(truthClassForMode("LIVE_INSTRUMENT"), "OBSERVED"); - Root cause: an unpinned live serial stream is classified
OBSERVEDand written into every exported lesson record viacreateObserverRecord(lib/walkthrough.js:387).CLAUDE.mdpermitsOBSERVEDonly for source-pinned recorded measurements; a live instrument frame has no source pin, no protocol id and no hash.audits/phase-b/b1-mutation-ledger.jsonalready records this asM03b … SURVIVED— "the derived-labelled-OBSERVED route is live and unguarded" — an open, recorded, undischarged hole. - Minimal correction: introduce a distinct class for live instrument data
(
LIVE_UNPINNEDor equivalent) and updateTRUTH_CLASSES; or require a source pin beforeOBSERVEDis returned. Updatetests/walkthrough.test.mjs:41to assert the new class — the test currently pins the violation and must be changed with the code. - Required failing test: a semantic test asserting that no runtime mode without a
sourceBinding/pin can yieldOBSERVED. - Validation:
npm test. - Mitigating fact, recorded not used as an excuse: the walkthrough is not served at
HEAD (
/redirects to/math-workbench), so no user currently sees this label. The code path and the test that enforces it are both live in the tree. - Scientific impact: this is the exact truth-laundering the contract exists to prevent, and it is currently protected by a passing test.
3. Major findings
E-M01 — The shipped expected free energy double-counts ambiguity
Severity: major. Affected claim: the
EFEequation card (G(π) = risk + ambiguity − information gain + effort),docs/SCIENCE.md:83, and worksheet 5, which instructs the reader to compute a value the tool does not produce.File and line:
lib/uni-motor.js:328.Evidence.
informationGain = entropy(qOutcome) − ambiguity(:326), andrisk(:318) is a cross-entropy−Σ q(o) ln C(o), not a KL divergence. Substituting:G_code = crossEntropy + ambiguity − (H[q(o)] − ambiguity) + effort = (crossEntropy − H[q(o)]) + 2·ambiguity + effort = KL[q(o) ‖ C] + 2·ambiguity + effortIndependent numerical confirmation (
crossEntropy − H == KLverified to 1e-12;G_code == KL + 2·ambiguityverified to 1e-12). On the real model after 40 steps:policy Gshippedambiguity Gcanonicalinflation RUN 2.087727 0.802929 1.284799 +62.5 % TUMBLE 2.057086 0.776965 1.280121 +60.7 % The error does not cancel between policies, because the duplicated ambiguity differs per policy.
G(RUN) − G(TUMBLE)is0.030642shipped versus0.004678canonical — a 6.5× inflation of the decision-relevant difference, moving the policy posterior from[0.495322, 0.504678]to[0.469397, 0.530603]. This changes action selection.Root cause:
riskis a cross-entropy while the assembly at:328is written as if it were a KL divergence, so the epistemic term is both added (asambiguity) and subtracted-then-re-added (inside−informationGain).Minimal correction: delete the
+ ambiguityaddend at:328, givingefe = risk − informationGain + effort, which is identicallyKL + ambiguity + effort. Land this in one commit together withdocs/SCIENCE.md:83andscientific-math-workbench.tsx:125, so declared equation, implementation and UI never disagree mid-sequence.Required failing test: an independent-oracle test that computes
KL[q(o)‖C] + ambiguity + effortfrom the posterior without importingpolicyTerms, and asserts equality withagent.efeto 1e-12. It must fail on the current tree.Validation:
npm test; the closed-loop trajectory changes, so any pinned trajectory fixture must be regenerated and the regeneration recorded.Rollback: revert the single commit.
Scientific impact: a shipped scientific equation is wrong, and the repository's own record predicted this gap:
audits/phase-a/phase-a-findings.md:227-228states that independent rederivation of the EFE/VFE algebra "is Phase B (B2) work and has not been done", anddocs/audit/PHASE-A-FINDINGS.md:336lists "EFE algebra verdict" under Explicitly NOT done. This audit supplies that verdict, and it is adverse.
E-M02 — Four CSS custom properties are used and never declared
- Severity: major. Affected claim: the entire visual truth-status channel on the only served page.
- File and line:
app/globals.css— 21var()references to--cyan,--gold,--void,--failure; zero declarations anywhere in the repository.:rootdeclares sixteen different tokens (--signal,--prediction,--ground,--danger, …). - Evidence:
grep -c "var(--cyan\|var(--gold\|var(--void\|var(--failure)" → 21;grep "\-\-cyan:\|--gold:\|--void:\|--failure:" → no match. - Root cause: the workbench stylesheet was written against a token vocabulary that
differs from the one
:rootdefines. - Consequence: every one of the 21 declarations is invalid-at-computed-value-time.
The
ProbabilityRowbars render fully transparent (invisible), and the.workbench-status pass/fail/unresolvedbadges render identically — the PASS/FAIL/UNRESOLVED colour channel is dead. - Minimal correction: add four aliases to
:root(--cyan: var(--signal); --gold: var(--prediction); --void: var(--ground); --failure: var(--danger);) or rewrite the 21 call sites. Four lines, fully reversible. - Required failing test: parse
app/globals.css, extract everyvar(--name)reference and every--name:declaration, assert reference ⊆ declaration. Currently red for four names. - Scientific impact: the badge colour is one of the seven declared resonance axes ("UI truth badge and species label"). It is currently non-functional, and this was not detected by the reported live browser testing.
E-M03 — The strongest truth claim in the repository is guarded by a vacuous regex
- Severity: major. File and line:
tests/rendered-html.test.mjs:37. - Evidence:
assert.match(html, /full biological parity[\s\S]*?FALSE/i). The lazy any-character bridge plus/ilets the nav buttons'aria-pressed="false"satisfy the match. The assertion cannot fail even if the rendered parity value wereTRUE. - Minimal correction: assert the exact data-bound substring
(
/full biological parity <!-- -->FALSE<\/code>/), or parsecrossStudy.summary.fullBiologicalParityAchievedfrom the flight payload and assert=== false. Deleting the/iflag alone is the one-character stopgap. - Companion:
:36assert.match(html, /B3[\s\S]*?PENDING/)is satisfied by a hardcoded literalPENDINGspan in the flow tab, so it passes even if the data-bound B3 prospectivity string were replaced by a fabricated result (E-m10).
E-M04 — Truth-laundering on the product's badge surface is undetectable
- Severity: major. File and line:
app/math-workbench/scientific-math-workbench.tsx:80(modelCatalog). - Evidence: no test in the suite reads
modelCatalog. Relabelling all eleventruthstrings to"OBSERVED"leavesnpm test(103/103), the build,tscand lint green. - Root cause:
modelCatalogis a module-private literal inside a client component with no exported surface and no schema. - Minimal correction: move
modelCatalogto a plain data module, export it, constraintruthto a frozen allow-list, and assert that only entries whosesourceresolves into a source-pinned module may carry anOBSERVED-class label. - Scientific impact:
CLAUDE.mdnames this exact mutation class as one the suite must detect: "Mutation tests must demonstrate that truth laundering … [is] detected." It is not.
E-M05 — Five of six workbench views have zero rendered-HTML coverage
- Severity: major. File and line:
tests/rendered-html.test.mjs:29. - Evidence: the workbench is a client component whose default view is
"flow"; only the flow tab is server-rendered. The equation library, gate ledgers, both calculators, the planned/not-run panel and the twelve printable worksheets are never rendered by any test. - Minimal correction: either add a non-DOM structural test importing
modelCatalogand the gate-status classifier, or drive the initial view from a search parameter so/math-workbench?view=evidenceis server-renderable and assertable. The latter also makes each view deep-linkable and citable.
E-M06 — The analysis-code provenance pin is stale
- Severity: major. File and line:
experiments/results/observed-experiment-report.json:9(identities.analysisCodeSha256). - Evidence:
lib/observed-experiment.jswas refactored in09ec601and now hashes to85a4a2e9…; the frozen report,experiments/results/audit-manifest.jsonandpublic/observed-experiment-report.jsonall still declareb757971e…. No test innpm testre-verifies the pin. - Minimal correction: re-run
npm run experiment:runso all three carry the current digest, and add the manifest-verification loop (mirroringtests/science-gates.test.mjs:62-66) totests/observed-experiment.test.mjs. The numeric report must be unchanged; the existing replay test proves it. - Do not rewrite the
preMutationSha256: b757971e…entries underaudits/phase-candaudits/phase-d— those are append-only history.
E-M07 — The shipped worker bundle leaks build-machine absolute paths
- Severity: major. File and line:
dist/server/index.js:14546. - Evidence: the Cloudflare worker bundle hard-codes absolute Windows build-machine
filesystem paths — including the developer's username — as the
@font-facesrcURLs. Every deployed page emits them in its<head>, so all Geist/Geist Mono font requests fail and the local path is publicly disclosed. Eleven font files ship unreferenced. - Root cause: a path-separator bug inside
vinext's font plugin (node_modules/vinext/dist/plugins/fonts.js), not repository code. - Minimal correction: drop
next/font/googlefromapp/layout.tsxand reference the already-emittedwoff2files with hand-written@font-facerules using/assets/…URLs. This additionally removes a build-time network fetch tofonts.gstatic.com. - Note: established by reading the plugin source on a Windows build host. Linux/CI build behaviour is NOT VERIFIED.
E-M08 — "Prediction residual" is not a residual
- Severity: major. File and line:
app/math-workbench/scientific-math-workbench.tsx:325. - Evidence: the tile renders
observation.ligandUm − agent.predictedLigandUm, butpredictedLigandUmis computed from that same observation inside the samestepAgentcall (lib/uni-motor.js:375). The displayed number is algebraically−signedRate·0.25and can never be a prediction-versus-later-observation residual. - Root cause: the prediction and the observation it is differenced against are from the same tick.
- Minimal correction: either relabel to "model self-term (one-step extrapolation
offset)" and state that no prospective residual is computed, or carry the previous
step's
predictedLigandUminSystemStateand difference the current observation against the previous prediction — then the label is earned. - Scientific impact:
docs/VERUM.mddefinesRESIDUALas "observed minus predicted with units" andPREDICTEDas "committed forecast for comparison with a later observation." The shipped tile satisfies neither.
E-M09 — The documented reproduction path does not work
- Severity: major. File and line:
README.md:9-14;docs/LIVING-SCIENCE-WALKTHROUGH.md:132. - Evidence: both instruct the reader to complete the thirteen-step walkthrough at the
root URL.
/returns HTTP 307 to/math-workbench; the walkthrough is unreachable in the committed deploy. - Minimal correction: add a
STATUS: NOT SERVEDbanner to the walkthrough document and correct the README's surface inventory. See §6.
4. What the six dimensions missed
The completeness critic's findings, beyond the two blocking items already given. Each is grounded in a file read at HEAD; the first four were confirmed by the orchestrator.
docs/VERUM.mdcontradictsCLAUDE.mdon the definition ofOBSERVED. VERUM:6 — "crossed the declared sensor boundary with a timestamp". CLAUDE.md — "Only source-pinned recorded measurements may be labelled OBSERVED." These are different contracts, and VERUM's is what licenses both E-B02 and the "Observed ligand" label on synthetic data. Two governing documents disagree; the resolution decides whether several findings are defects at all. This must be settled before the builder's truth lattice is frozen.- VERUM declares a closed 11-class vocabulary and says "The UI must never upgrade
one class into another." The workbench invents roughly seventeen badge strings outside
it (
RUNNABLE MODEL,ADVERSE RETAINED,BLIND COVERAGE FAILURE,FALSE TODAY, …). The rule is unenforceable against an open vocabulary. - A fabricated timestamp in a provenance artifact.
scripts/verify-ito-raw-archive.py:71writes"verifiedAt": "2026-07-17T21:00:00Z"as a hardcoded literal on every run, intoexperiments/results/ito-raw-archive-verification.jsonand its public mirror, andtests/cross-study-parity.test.mjs:47-51reads that file as evidence. Whatever the byte-reproducibility motive, the field asserts a verification time that is not the verification time. - Two SHA-256 identities for one logical artifact.
experiments/data/wadhwa-2022-events.json(CRLF,32ec7ebf, 508 103 bytes) andpublic/wadhwa-2022-derived-events.json(LF,d119ca60, 487 890 bytes) are the same evidence pinned twice, inobserved-experiment-report.jsonand inlib/walkthrough.jsrespectively. - Circular oracles in the science suite, not just the workbench tests.
tests/cross-study-parity.test.mjs:68-73asserts on numbers the Python script under test computed about itself; nothing rebuilds the 175×175 GMC generator or recomputes its stationary eigenvector.scripts/independent-science-check.mjs:41containsassert.ok(Math.abs(x + (1 − x) − 1) < 1e-14), true for every finite double, and:48and:52emitstatus:"PASS"andpublicArtifactMismatchDetected:trueas hardcoded literals.science:verifyis a required gate. - Four of eight green cross-study gates have no independent rederivation.
scripts/independent-cross-study-check.mjsre-derives only X03, X06, X08, X09. X02, X04, X05 and X07 are not independently checked, contradicting "Numerically rederive important results through an independent implementation." - The Python side has no runtime identity.
requirements-experiments.txtpinsnumpy==2.3.5 scipy==1.16.3, but nothing binds any report to them, while the gates depend onleast_squares,brentqandlinalg.eig. The JS side already concluded "artifact identity includes runtime identity" (tests/red/README.md) and never applied it. This audit's environment matched by luck: Python 3.12.10, numpy 2.3.5, scipy 1.16.3. - Open, undischarged obligations in the ledgers.
SEMANTIC-COVERAGE-LEDGER.mdEntry 3: AC4 FAILS, headline is 20 credited not 22; AF1 is BLOCKING and its "whether to re-run is Codex's call" decision was never made; the blind battery remains 0/10.phase-b-roadmap.v2.jsonlists B1/B3/B4/B5 as NOT STARTED whileb1-mutation-ledger.jsonholds 16 results and B3/B4 results exist on a sibling branch (§5).b1-mutation-ledger.jsonrecords that the headline adverse lognormal result is defended by exactly one assertion (tests/observed-experiment.test.mjs:47-48), and that removing it leaves all three verify gates green. - The red tests are frozen to
9c3a644e…, four commits behind HEAD, so even when re-run they cannot measure the current tree. C2 was re-run during this audit and still fails. - Mathematical claims with no test at all:
lib/cad.jsgear geometry (144 lines, only three regex string matches); the GMC generator's stoichiometry and Arrhenius forms; the latticeJ-fit's profile likelihood;logGamma's Lanczos approximation (erfwas tested,logGammawas not); andlib/walkthrough.js:361-374, the only place in the repository where joules and nats appear together — tested circularly. lib/observed-experiment.d.tsomitsrunObservedExperiment, which the module exports. Nothing tests that declarations match runtime exports, sotsc --noEmitpasses over drifted types.
5. Cross-branch state divergence
Not a defect in this branch, but a repository-information fact that changes what this branch's surface means.
phase-2/b3-model-competition contains executed, committed results that this branch
renders as non-existent:
| this branch | phase-2/b3-model-competition |
|
|---|---|---|
| B3 prospectivity | PENDING |
PROSPECTIVE, flipped in the result commit against prediction commit e5b4969… |
| B3 result | absent; the page prints "B3 has no result in this accepted state" | audits/phase-b/b3-model-competition-result.json, 36 per-cell outcomes, CONFIRMED/UNRESOLVED |
| B4 robustness | NOT RUN |
result, runner, independent oracle, five evidence bundles |
CLAUDE.md |
159 lines | +72 lines: parity-ladder and execution-rigor sections |
The workbench is honest but stale: by the sibling branch's own rule — "Prospectivity is decided by the commit graph, not by prose" — flipping the badge on this branch would be wrong. But if this branch is what deploys, the public surface understates the completed science by two audit phases.
The B3 result also refines the headline adverse finding in a way this branch's prose does not capture: the ~0.0369-nat lognormal advantage is an event-pooled quantity, and the result file explicitly warns that motor-equal primary numbers "are NOT directly comparable to the repository's published event-pooled figures." The workbench presents the event-pooled numbers without that distinction.
Consequence for CLAUDE.md: this branch's copy is behind. Any edit here must extend
the sibling branch's version, or the merge will drop the earned execution-rigor lessons.
6. Minor and informational findings
Confirmed, with file and line. Corrections are given in the plan of record (§7).
| id | severity | site | finding |
|---|---|---|---|
| DOC-01 | minor | README.md:3 |
README never mentions /math-workbench, the workbench-only deploy, or the / redirect |
| DOC-03 | minor | README.md:44,61 |
describes the Observed-experiment and Science-gates surfaces in the present tense; both are inside the paused lab |
| DOC-04 | minor | README.md:23 |
npm install where CLAUDE.md:108 requires npm ci; recorded by Phase A and uncorrected |
| DOC-06 | minor | — | no document anywhere describes the math workbench |
| DOC-08 | minor | README.md:17 |
garbled duplicated phrase "Synthetic and recorded, synthetic, and live signals" |
| DOC-09 | minor | README.md:33-40 |
the npm test inventory omits the math-workbench bindings test and the root-redirect test |
| DOC-13 | info | CLAUDE_ULTRACODE_…:139-153 |
instructs an auditor to complete 13 walkthrough steps that no route serves |
| NR-04 | minor | lib/duration-models.js:65 |
A&S 7.1.26 erf has ~1.4e-7 absolute error → ~7e-8 in S(y), but survival is printed to 8 decimals |
| NR-05 | info | lib/uni-motor.js:188 |
the 0.995 clip means the motor can never stall; reports positive speed with torque < load |
| NR-07 | info | lib/source-first-passage.js:31 |
sourceTerms(0, …) yields NaN (kPlusByN has no key 0); unreachable from the UI today |
| NR-08 | info | lib/uni-motor.js:348 |
policy precision γ = 4 is an undeclared magic number with no sensitivity analysis |
| PRD-03 | minor | app/globals.css:698 |
native Ctrl+P from any tab other than Print worksheets prints nothing |
| PRD-09 | minor | …workbench.tsx:214 |
view is client state, so without JavaScript only the flow view exists |
| PRD-06 | info | app/math-workbench/page.tsx:20 |
throws on missing D1 accounting with no error.tsx anywhere |
| PRD-07 | info | …workbench.tsx:284 |
a <nav> of aria-pressed toggles, not a tablist; buttons are not associated with the panel |
| PRD-08 | info | …workbench.tsx:331 |
no scope on any <th>, no <caption> on any of the four tables |
| PRD-10 | info | app/page.tsx:9 |
VERIFIED SAFE — redirect() emits 307, not 308; no permanent-cache hazard |
| PRD-11 | info | app/chatgpt-auth.ts |
CPU-only sweep clean: no GPU/WebGL/WebGPU/Three.js/WebSocket/analytics anywhere in app/, lib/, public/. chatgpt-auth.ts is unreachable dead code; delete it |
| PRD-12 | info | — | VERIFIED: every retained laboratory component is fully eliminated from both bundles (JS); the laboratory CSS block is not |
| PRD-13 | info | …workbench.tsx:239 |
VERIFIED CLEAN: no Date.now(), new Date() or Math.random() reaches any rendered value |
| PROV-02 | minor | …workbench.tsx:406 |
the "Executable sources" footer omits lib/duration-models.js, which computes most of what the page shows |
| PROV-03 | minor | audit-manifest.json:11 |
written by the runner, never read or verified by any test in npm test |
| PROV-06 | info | …workbench.tsx:373 |
the M3−M2 and M3−M1 paired intervals both cross zero and the page never says so; M3−M1 is not rendered at all |
| PROV-07 | info | …workbench.tsx:352 |
the DLT calculator runs parameters from a fit whose recovery and held-out gates (G05, G06) FAILED |
| PROV-09 | info | lib/observed-experiment.js:225 |
CONFIRMED CORRECT with one nuance: parameters are training-only, but the set of eligible states is chosen using all data |
| PROV-10 | info | lib/observed-experiment.js:251 |
CONFIRMED CORRECT: intervals are motor-cluster bootstrap, not event resampling — no pseudoreplication |
| TC-04 | minor | page.tsx:26 |
the only served surface names no species anywhere; page.tsx drops observedReport.dataFlow, where the E. coli attribution lives |
| TC-05 | minor | …workbench.tsx:365 |
the four hypothesis records with explicit overclaim fences — including the guard against reading the workbench as evidence that a motor performs Bayesian inference — are unreachable |
| TC-06/TSA-07 | minor | …workbench.tsx:198 |
statusClass substring-matches "SUPPORTED", so NOT_SUPPORTED would render green. Latent today; fix before TC-05, whose correction makes it live |
| TC-07 | minor | …workbench.tsx:323 |
"Observed ligand"/"Observed speed" printed from a synthetic world with no marker, while a sibling tab uses a green OBSERVED badge for real measurements |
| TC-09/TSA-11 | info | …workbench.tsx:138 |
the DURATION card cites lib/observed-experiment.js, which only re-exports; the implementation and the component's import are lib/duration-models.js |
| TC-10/TSA-12 | info | …workbench.tsx:85 |
fᵣ shown with no unit (dimensionless, kT) one card from F[q] in nats; the equation shows steady-state aᵣ while the code applies a 0.12 s lag |
| TC-12 | info | …workbench.tsx:368 |
the card states 129 source motors while 80 + 19 = 99 are accounted for, with no on-screen reconciliation |
| TC-13/DOC-16 | info | …workbench.tsx:273 |
"Return to laboratory" targets /, which redirects back — a self-loop asserting a surface that is not served |
| TSA-04 | info | tests/math-workbench.test.mjs:54 |
tautology: sourceDensities returns total literally as plus + minus |
| TSA-06 | minor | tests/math-workbench.test.mjs:88 |
the shadow-implementation guard blocks only three exact names declared with function; an arrow function evades it |
| TSA-10 | info | tests/math-workbench.test.mjs:76 |
three of four assertions are weak or duplicated; a constant-returning stub passes the purity check |
| TC-14 | info | tests/math-workbench.test.mjs:82 |
nothing covers statusClass, any truth badge, the equation-card class, or species labelling |
7. Refuted candidates, kept visible
Nineteen candidate findings did not survive adversarial verification. The ones worth recording because a future reader will re-derive the suspicion:
- Weibull scale and lognormal
muinconsistency.logWeibullderives its scale fromweibullScale(shape)whilesurvival()readsmodels.weibull.scale; the same split exists for lognormalmu. Refuted by execution: for the frozen fitted parameters the derived and stored values are identical to relative error 0 (0.6996038164387606;mu = −1.245527443530609). Density and survival are the same distribution. The structural fragility remains — a future refit that writes only one of the two would silently diverge — but there is no live defect. redirect()emits a cacheable 308. Refuted: it emits 307.- Non-determinism from
Date.now()/Math.random()in rendered values. Refuted by sweep: two identical 100-step runs are bit-identical. - Pseudoreplication in the 95 % intervals. Refuted: motor-cluster bootstrap confirmed
in
lib/observed-experiment.js:251. - Train/holdout leakage. Refuted: the split is at motor granularity and parameters are training-only; proven by existing gates G1–G3.
- Mobile horizontal page overflow. Refuted: no page scroll occurs. The real symptom is narrower — the gate id overprints the title and badge at 320 px. Re-filed as minor.
8. Coverage limitations
Stated so that no reader mistakes this audit's scope for the repository's.
- No live browser testing was performed. The sandboxed browser in this environment
cannot reach the host loopback (
vinext devbinds[::1]only and ignores--host), and the proxy workaround was denied. All product findings are static-analysis or build-output based. Rendering, interaction and accessibility were not observed in a real browser. E-M02 in particular predicts a visual failure that has not been seen. - No automated accessibility run (no axe, no Lighthouse, no assistive technology).
- Linux/CI build behaviour is NOT VERIFIED. E-M07's confinement to Windows build hosts rests on reading the vinext plugin source, not on producing a POSIX build.
- No systematic mutation battery was run against
app/math-workbench/. E-M04's hole was demonstrated by hand-mutating scratch copies, not by executing the suite against a mutated repository. - The cross-study Python gates were not rederived (
scripts/run-cross-study-parity.py), nor the lattice/GMC/RFT modules beyond their catalogue citations, nor the CAD export. - No deployed artifact outside this worktree was checked.
git show main:app/page.tsxreturns<UniFlagellumLab />, so publishedmaindiffers from this branch; whether any live deployment serves either shape is NOT VERIFIED. - Sibling branches were enumerated only where they bore on B3 prospectivity (§5).
- Several findings were established by reconstructing code paths in a scratchpad. The
repository was never modified;
git statuswas clean before and after.
9. Adverse results
Kept visible, per contract, and not softened.
- A shipped scientific equation is wrong (E-M01), and the repository's own record shows it was known to be unverified.
- A gate reports PASS with zero evidence on disk (E-B01).
- A passing test enforces a truth-contract violation (E-B02).
- The strongest truth claim in the repository is guarded by an assertion that cannot fail (E-M03), and truth laundering on the badge surface is undetectable (E-M04).
- A published provenance pin is false (E-M06).
- The shipped bundle discloses the build machine's filesystem path including the OS username (E-M07).
- The truth-status colour channel is dead on the only served page (E-M02).
- Two secondary held-out comparisons cross zero and the served page says so nowhere; the M3−M1 interval is not rendered at all (PROV-06).
- Four hypothesis records carrying explicit overclaim fences are unreachable in the deployed product (TC-05).
- Two governing documents disagree on the definition of
OBSERVED(§4.1). AC4still FAILS andAF1remains BLOCKING and undecided (§4.8).- The Phase-C blind mutation battery remains 0/10.
M2lognormal still out-scoresM3on held-out point score.cross-study:verify-rawis BLOCKED; 8 high-severity dev-dependency advisories are open.
10. Release-claim status
Not established by this audit. One required gate (cross-study:verify-raw) is
BLOCKED_EXTERNAL from this clone, the raw-source byte chain is
EXTERNAL VALIDATION REQUIRED, and two blocking findings are open. Passing the software
tests is necessary but is not proof of biological parity. The repository's own reports
continue to record fullBiologicalParityAchieved: false, four of seven computational
gates passing, and B3 PENDING on this branch.
Correction order and the implementation plan that depends on it are in docs/UNI-STACK-BUILDER-PLAN.md §11 (Phase 0.5 onward) and in the working notes accompanying this audit.
sha256 9ea9cdd9b2095b37 — of the original file, so what was ingested stays checkable.
Plain — written for this website, not the source document
One screen, and the repository behind it, put under a long audit that was built to argue with itself. Every candidate finding was handed to a second reviewer whose instructions were to refute it, and the ones that did not survive are still printed at the end.
Its most important result is about itself. The audit was organised into six areas of attack, and neither of the two worst findings came from any of them. Both were found by a reviewer whose job was to ask what the six had missed. The audit's own phrase for this is that the six looked at the shop window and missed the instrument behind it.
The two worst findings are these. A gate reports a pass while none of the files it claims to have checked exist on disk. And a passing test enforces a labelling rule the project's own contract forbids, so a live, unpinned stream would be recorded as a measurement.
A shipped equation is also wrong in a way that changes which action gets chosen.
The audit does not clear anything for release. Its closing section says the release claim is not established from the copy it worked on, and names the gate that could not be run there.
Plain · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is 9ea9cdd9b2095b37
Clear — written for this website, not the source document
The audit was run against one working branch, on one date, by six parallel reviews: truth contract, numerical rederivation, adversarial testing, documentation drift, product behaviour and where the data came from. Each finding was then put to an independent verifier told to refute it by default, plus a completeness critic asked what the six had missed. It reports the raw finding count, the count that survived verification and the count refuted, and grades the survivors by severity.
It starts with observed outcomes rather than opinion: every required command run in that worktree, with its literal result. Most pass. One is blocked because a very large archive is absent, and the audit says plainly that it must never be reported as a pass from that copy. A large headless sweep of the executable surface found no defect at all: no non-finite value, distributions normalising, identical runs identical, several mathematical identities holding to tight tolerance.
Then the two blocking findings. The first is a gate rendering a pass while none of its declared cached artifacts exist on disk. Its status is derived from frozen claims inside the evidence file rather than from current verification, and a guard short-circuits exactly when the evidence is missing. The audit quotes the project's own rule that an absent archive must be marked blocked or not run and never reported as a pass. The second is a passing test that enforces a truth-contract violation: an unpinned live stream is classified as a recorded measurement, and written into every exported record. The audit records the mitigating fact that the affected page is not currently served as a fact rather than an excuse.
The major findings follow, each with file, line, evidence, root cause, smallest correction, the test that must fail first, validation, rollback and scientific impact. A shipped expected free energy adds one term twice, because a component written as a divergence is really a cross-entropy; the error does not cancel between the two policies, so it changes action selection. Four style properties are used and never declared, which makes the colour channel that distinguishes pass from fail non-functional. The repository's strongest truth claim is guarded by a pattern that cannot fail. Relabelling every truth string on the badge surface leaves the whole test suite green. Most of the screen's views have no rendered coverage. The shipped bundle discloses the build machine's filesystem path, including the operating-system user name. And a tile labelled as a prediction residual differences a prediction against the very observation it was computed from.
The completeness critic's list is arguably the most valuable section. Two governing documents disagree on what may be labelled a recorded measurement, and the audit says that disagreement must be settled before anything downstream is frozen, because it decides whether several findings are defects at all. A closed vocabulary is undermined by many invented badge strings. A artifact recording where things came from writes a fixed timestamp on every run, asserting a verification time that is not the verification time. Circular oracles exist in the science suite, not only in the screen's tests. Several green gates have no independent rederivation. Some red tests are frozen behind the current tree and cannot measure it, and several mathematical claims have no test whatsoever.
The audit then prints its refuted candidates and its coverage limitations, beginning with the admission that no live browser testing was performed at all, so one predicted visual failure has never been seen. Then its adverse results unsoftened, and a verdict of not established.
Clear · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is 9ea9cdd9b2095b37