Skip to content

Check the ambition against the published record, not just against this lab - #4

Open
di-omics wants to merge 3 commits into
mainfrom
feat/evidence-authority-cadence
Open

Check the ambition against the published record, not just against this lab#4
di-omics wants to merge 3 commits into
mainfrom
feat/evidence-authority-cadence

Conversation

@di-omics

Copy link
Copy Markdown
Owner

Three modules asking what the existing layers cannot, because it is not about this lab: is the plan supported by anything published, who is allowed to decide, and what does a stated throughput target actually cost?

literature.py

Autonomy claims get justified by pointing at famous papers whose scope is far narrower than the claim. Every entry carries what it does not establish, and support resolves by scope rather than fame.

Every citation was independently verified before encoding, and verification changed the content: the A-Lab paper was corrected (41 successes became 36 after four were reclassified as inconclusive, and the "43 new materials" figure in news coverage matches no version of the paper); Assay Guidance Manual chapters carry no DOI, so any citation supplying one is fabricated; PyLabRobot makes an architectural assertion about cross-family simulation rather than demonstrating it.

15 works: 13 confirmed, 2 partial, 11 carrying figures that could not be confirmed, listed rather than rounded away.

authority.py

"AI-native" gets read as "the model drives the instruments". The benchmark evidence is that no evaluated model exceeded 70% hazard-identification accuracy. The honest response is not that models are useless but that decision classes differ: 13 classes across MODEL / MODEL_PROPOSES / DETERMINISTIC / HUMAN, each justified against a specific published finding. Authority may be strengthened, never weakened, and that asymmetry is what violations() catches.

cadence.py

Refuses a target until it says whether it counts plates started, completed, QC-passed, or released -- those differ by exactly the failure and rerun rate. Given an endpoint it is arithmetic on the caller's inputs: 500/day is one every 172.8 s round the clock, 115.2 s over 16 h. headroom() is where "buy a faster robot" dies -- one intervention per two plates at 10 min each consumes 260% of the interval.

demonstrated_support() computes the absence of sustained-rate evidence from the table, so it flips the day someone publishes a counterexample.

131 new tests. Recreated after the PR history was reset; the branch is unchanged.

di-omics added 3 commits July 29, 2026 10:39
…s lab

Every layer here asks what this lab can prove. None could ask whether the plan is
supported by anything published, who is allowed to decide, or what a stated throughput
target actually costs. Those are the three questions that decide whether an autonomy
programme is engineering or aspiration, and all three are answerable from public evidence.

literature encodes fifteen works, each carrying what it does NOT establish, because
autonomous-lab claims are routinely justified by pointing at famous papers whose scope is
far narrower than the claim -- a materials campaign cited to justify a cell-assay
production line. Support resolves by scope rather than by fame.

Every citation was independently verified against the live record before it was encoded,
and the verification changed the content rather than confirming it. The A-Lab paper was
corrected: 41 successes became 36 after four were reclassified as inconclusive, and the
"43 new materials" figure that appears in news coverage matches no version of the paper.
Assay Guidance Manual chapters carry no DOI, so any citation supplying one is fabricated.
PyLabRobot makes an architectural assertion about cross-family simulation rather than
demonstrating it. Thirteen entries are confirmed, two partial, and eleven carry figures
that could not be confirmed -- listed rather than rounded away.

authority models which decisions a model may make. "AI-native" gets read as "the model
drives the instruments", and the benchmark evidence is that no evaluated model exceeded
70% hazard-identification accuracy. The honest response is not that models are useless but
that decision classes differ, so thirteen classes sit across four levels and each states
why it sits where it does against a specific published finding. Authority may be
strengthened and never weakened; the reverse is what violations() catches. The
qualification ladder is included because no rung implies the one above it, and a passed
simulation qualifies nothing physical.

cadence refuses a target until it says whether it counts plates started, completed,
QC-passed, or released, because those four differ by the failure and rerun rate and
resolving the ambiguity silently would pick the loosest reading. Given an endpoint it is
arithmetic on the caller's inputs and needs no measured durations. It refuses a buffer
depth for the same reason throughput refuses a makespan. demonstrated_support computes the
absence of sustained-rate evidence from the table rather than asserting it, so it flips the
day somebody publishes a counterexample.

131 new tests, 277 total.
…rclaiming

An independent audit of these three modules returned eleven blockers. The irony is the
useful part: the module written to stop autonomy claims outrunning their evidence was
doing it itself, in three separate ways.

literature never read Scope.material. `support_for` on a primary human hepatocyte claim
returned supported=True, citing a fifteen-hour yeast run whose own does_not_establish says
it establishes nothing about mammalian culture. Material is now compared first, before any
duration or attendance check, because a duration gap on the wrong organism is a rounding
error next to the organism. Comparison is exact-match and refuses on any difference, since
deciding that two material descriptions are equivalent IS the transfer question and a fuzzy
match would answer it silently in the direction of support.

The same function treated an unwritten claim as a satisfied one. Every comparison was gated
on the claim asserting something, so a Scope naming no material, duration, replication or
attendance produced zero shortfalls -- and zero shortfalls read as full support, making an
unwritten claim the easiest kind to support. That is the vacuous-pass failure qc already
guards against when a gate is evaluated with no measurements at all.

Three entries were CONFIRMED while their own unverified field said the figures in
demonstrates could not be checked at the cited source -- a paywall, a 403, a number that
appears only in secondary coverage. That is the enum's written definition of PARTIAL, so
they are PARTIAL now: ten confirmed, five partial.

authority let a duplicate assignment suppress a violation. Plan.assigned returned the first
matching row, so listing HUMAN before MODEL on batch release reported a clean plan -- a
field an author could set to silence a report, in the module whose docstring promises none
exists. Every row is judged now, and the duplication is its own finding rather than
resolved, because picking a winner answers "who decides" on the author's behalf.

cadence collapsed its own distinction one step after drawing it. cadence_for divided the
face value of a RELEASED target and returned the STARTED interval under a RELEASED label,
which is the exact substitution the endpoint refusal exists to prevent. It now asks
required_admissions, which already returned None rather than assuming a survival fraction
of 1.0, and refuses without one. An unverifiable date attached to a peak-day figure is
removed; a date is the kind of detail that makes a number look verified.

Adds the regression tests that would have caught all of them, including a behavioural test
that plants a sustained-rate work and asserts the standing negative claim flips, so it is a
computation rather than a permanently-false constant.

288 tests.
ruff E731. The helper was a lambda for brevity in a test that constructs the same
Assignment four times; a def reads the same and passes the gate the repo already runs.
@di-omics
di-omics force-pushed the feat/evidence-authority-cadence branch from 4d79c70 to 8654447 Compare July 29, 2026 17:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant