HD-1 · v1 · status: published

HD-1 · The lit-mass floor

The attackable claim: a measurement instrument that returns a clean pass on an empty input is worse than no instrument, and every drift meter we have seen — including ours, on 2026-08-14 — does exactly that until someone forces it to refuse. This document fixes the conditions under which the meter is permitted to return a verdict at all, and the conditions under which it MUST refuse.

You do not have to take the rule on faith. Run it:

npx -y thetacog-mcp@latest trigger-battery

Two of the eight rows in that corpus are pure noise. If either of them comes back with a grade instead of REFUSED, this document has been violated by the code that claims to implement it, and the battery exits red.


Why this is hard at all

A verdict about the behaviour of an arbitrary program is undecidable. Rice settled that in 1953, and the result did not lapse when the program started being written by a model. The book states the consequence without softening it:

That is Rice's theorem in one sentence: a monitor that shares the failure domain of what it watches cannot certify it, and its certificate is a story about a story.

The second difficulty is growth, and it is measured rather than asserted:

The divergence is real and it is measured: walk the definer chain out and the lit-cell mass per ply runs one, twelve, a hundred and forty-four, one thousand six hundred and sixty-six, nineteen thousand one hundred and fifty-six. Roughly twelvefold per ply, compounding. Left alone, that unbounded growth does not sharpen the instrument — it blinds it.

So this instrument does not answer whether the work was good. It answers the measurable half: not whether the work was good, but the degree of drift, and where. That half is provably decidable, and it is worth nothing unless the instrument also states when it is entitled to speak. A meter that will not name its own eligibility and failure conditions is worthless: every reading it returns is indistinguishable from a reading it should have refused.


What this document fixes

On 2026-08-14 a 52-word off-lane document was fed to the panel and scored 0 / 0 / 0 · off 0% · ok — a full-length adversary reading as a flawless submission. Nothing was wrong with the arithmetic. The input was simply too thin to build lattice mass, no cells lit on either side, and absence classified as a clean pass.

That is the single most dangerous failure a settlement trigger can have, because it inverts the incentive of every party the trigger is pointed at. If silence grades green, the cheapest strategy is silence: ship nothing measurable, declare nothing specific, and collect a passing receipt. A trigger with that property does not merely mismeasure; it actively selects for the behaviour it exists to detect.

Downstream, the same hole is an unpriced tail. A pool referencing a print whose zero-information state reads IN_LANE is not writing the risk it thinks it is writing — it is writing a free option to the deployer, exercisable by producing nothing.

So the floor is not a quality-of-service nicety. It is the eligibility condition for a receipt to enter any downstream product at all.


The requirement

Normative language: MUST, MUST NOT, SHOULD as in RFC 2119. Every requirement is numbered so it can be cited in a defect report, an audit finding, or a pool's wording.

R1 — Absence is never a pass

An implementation MUST distinguish three verdicts, and MUST NOT collapse the third into the first:

verdict meaning
IN_LANE / GREEN measured, and the reality mass sits inside the intent shape
OFF_DOMAIN / RED measured, and it does not
UNMEASURED / REFUSED not measured — the instrument declines to grade

UNMEASURED MUST propagate to every consumer as a non-verdict. Any gate, premium, payout or dashboard that treats it as a pass is non-conformant.

R2 — The cell floor

A panel MUST refuse to grade unless both sides — the intent matrix and the reality matrix — carry at least 24 significant cells on the 144×144 lattice.

A cell (i, j) is significant when its edge weight is positive and at or above its own row's threshold μ + k·σ (k = 1.0), computed over the positive weights in that row only. A row carrying fewer than three lit jumps is exempt from the threshold: everything it has is signal.

The floor is symmetric by construction. A thin intent against a rich reality refuses, and a rich intent against a thin reality refuses. There is no configuration in which one side's mass excuses the other's absence.

R3 — The floor is a ratchet

The floor MAY be raised by calibration. It MUST NOT be lowered or removed without publishing, in this document, the labelled corpus and the measured false-pass rate that justify the lower value. A floor that can be tuned downward under commercial pressure is not a floor.

R4 — Refusal is legible

A refusal MUST carry, in the receipt: the measured mass on each side, the floor that was applied, and a human-readable reason. offPct MUST be null — not zero — so that a consumer performing arithmetic on the field fails loudly rather than quietly averaging a refusal into a portfolio as a good reading.

R5 — The series floor

A premium, rate or index reading derived from a series of receipts MUST refuse when the series carries fewer than 30 rows. The cell floor governs one reading; this governs the statistics computed over many. Both are aperture conditions and neither substitutes for the other.

R6 — The shape floor

The intent shape against which reality is matched MUST be selected by a heat floor — cells clearing 0.30 of peak heat — and not by the full flood of the walk. Without a shape floor the shape becomes the flood, every commit scores near 100%, and the instrument reads green in perpetuity. This is the failure mode that most resembles success.

R7 — The floor applies before conditioning

Where a reading is conditional — a step judged inside a board, a commit judged inside a repo — the naked subject MUST clear the floor on its own mass before any conditioning is applied. A rich context MUST NOT be able to launder a contentless subject into a graded pass.

R8 — No silent downstream reinterpretation

A consumer of a receipt MUST NOT re-derive a verdict from the receipt's component fields in a way that produces a pass where the receipt refused. If the receipt refused, the answer is that the question was not measured.

What is not claimed

The floor decides eligibility. It does not widen the claim the meter makes once a reading is eligible, and that claim is deliberately small. The perimeter below is printed verbatim by the running instrument (scripts/pmu/attest-demo.mjs) so that it cannot drift away from the document that states it.

What is claimed, and only this: a decidable, bounded, distributional-semantic region match against a fixed pre-published specification, reproducible and signed. It is small on purpose. The bound is what makes it decidable, and this document is the statement of where that bound stops.


Conformance against the running code

Graded against the meter as shipped (thetacog-mcp, this repo's scripts/pmu/) on 2026-08-17. ABSENT rows are the specification doing its job — they are the work list, not an embarrassment.

req status evidence gap
R1 MET at the floor, VIOLATED downstream once attest-demo-lifecycle.mjs maps a null offPct to UNMEASURED, never IN_LANE; verify-baseline.mjs exits 1 on a missing current receipt; simulate-payout.mjs refuses to simulate without the real gate. On 2026-08-18 the advisory premium was found coercing those same nulls to 0 via Number(null), pricing 33 refused rows as perfect readings (HD-2 hole 10) the requirement was correct and unguarded at the consumer; now ratcheted by tests/pmu-simulator/absence-is-never-a-pass.test.mjs
R2 MET triptych-render.mjsLIT_MASS_FLOOR = 24, checked on isMass and rsMass before any classification; returns pattern: 'REFUSED', refused: true the constant is conservative-by-choice, not fitted (see Known holes)
R3 PARTIAL the constant is a single named value in one file, and the comment records "calibration may raise it, never remove it" no test asserts the ratchet; a lowered floor would go unnoticed by CI
R4 MET the refusal object carries litMass: { intent, reality, floor }, offPct: null, and a refusal string naming both counts
R5 MET advisory-premium.mjsCURVE.minRows = 30; below it the receipt is REFUSED with the reason attached and no premium is emitted
R6 MET per-vector-competence-map.mjsREEF_FLOOR = 0.30 selects the shape from the walk's heat before the containment match
R7 MET trigger-battery.mjs runs a two-leg rack: leg 1 grades the naked instruction for its own mass, and only a non-refusing leg 1 proceeds to leg 2's conditional placement
R8 PARTIAL consumers in this repo honour the refusal nothing prevents a third-party consumer from re-deriving a pass; R8 is a licence condition today, not a mechanism

Two requirements are not met. R3 has no guard, which means the ratchet is currently a comment rather than a property — the first defect this document creates work for. R8 cannot be enforced by the meter at all: once a receipt leaves the building, its interpretation is the consumer's. The honest form of R8 is a term in the settlement-reference licence plus a conformance test a pool runs against itself, and neither exists yet.


How to recompute this yourself

Nothing here requires our cooperation, our servers, or a model.

# 1. The floor, exercised end to end. Two of the eight corpus rows are noise
#    and must come back REFUSED. A noise row that grades is a REGRESSION and exits 2.
npx -y thetacog-mcp@latest trigger-battery

# 2. The series floor. Point it at a series with fewer than 30 rows and it must
#    refuse rather than price it.
npx -y thetacog-mcp@latest advisory-premium

# 3. The constants, read directly out of the source you just ran:
grep -n "LIT_MASS_FLOOR" scripts/pmu/triptych-render.mjs
grep -n "minRows"        scripts/pmu/advisory-premium.mjs
grep -n "REEF_FLOOR"     scripts/pmu/per-vector-competence-map.mjs

The battery writes attest-out/trigger-battery.json with no timestamp in it, so two runs over the same corpus produce files that diff to zero bytes. If yours differs from ours on the same inputs, that is a defect report and we want it.


Known holes

Stated first, before anyone has to find them.

  1. 24 is conservative, not fitted. It was chosen as roughly two blocks' worth of mass on each side, then held. We have not published a curve of false-pass rate against floor value, because we do not have a labelled corpus large enough to fit one. The number is defensible as a floor and indefensible as an optimum, and we say so rather than implying a calibration that has not happened.

  2. The floor measures mass, not honesty. A submission padded with 24 cells of irrelevant-but-lit content clears R2. The floor closes the silence attack; it does not close a stuffing attack. Whether stuffing produces a green or a red is then the placement's problem, not the floor's — and the placement's answer to that is HD-3's business.

  3. No adversarial search has been run against the floor. Nobody has yet tried, systematically, to construct the thinnest input that clears 24 cells and still grades green. That search is the obvious next attack and we have not performed it.

  4. R3 is unguarded (see conformance). Until a test pins it, the ratchet is a convention.

  5. R8 is unenforceable by us (see conformance). A downstream consumer can ignore a refusal and we will not know.

  6. The three floors are calibrated independently. 24 cells, 30 rows and 0.30 of peak were each set for their own surface at different times. No joint analysis exists showing they are coherent with one another.


  1. A floor is only as good as the cast downstream of it. R1 was written, met at the panel, and broken one function call later by Number(null) — a coercion no reader of the floor's own source would ever see. We found it in our own published rate on 2026-08-18. The general form is hole 5 wearing different clothes: this document can specify what a refusal means and cannot make a consumer honour it, which is why R8 exists and why R8 is still the requirement we cannot enforce.

How this document changes

This is v1. It changes in one of three ways, all public:

Every version stays reachable in the repository's history; the current version is whichever one this URL serves. Corrections, counterexamples and constructed attacks on the floor go to elias@thetadriven.com and are answered in the next version, credited.

The meter is MIT-licensed. If you think the floor is wrong, the fastest possible way to prove it is to fork it and show us the input that beats it.


Where this sits

Three hardening documents, read in this order, because each one is only meaningful once the previous one holds.

Around them: