Results: premise refuted

The median expressible share across the 7 plugins with rules is 0.0%, below the pre-registered 25.0% bar: the premise is refuted: stage 2 is cancelled and the census is the result.

The pre-registered rule: median expressible share < 25% -> premise refuted; the census is the result. Measured from 2026-10-06T11:14:32.296Z to 2026-10-07T07:31:13.212Z; 188 census rules, each with its record; decided by the pinned census gate (variant refuted).

Per plugin

Final class per plugin, primary stratum
PluginRules (n)ExpressiblePartialNotErrorExpressible sharePartial share
hunch800710.0%0.0%
jev-pref402020.0%50.0%
abide430192310.0%44.2%
limpet1003700.0%30.0%
jev-belay00000no shareno share
jev-engineering16011500.0%68.8%
pi-verdict41137122.4%90.2%
jev-axi23014720.0%60.9%

No share (no rule in the primary stratum): jev-belay.

  • Median expressible share (the headline, strict): 0.0% across 7 plugins.
  • Median before the adjudicator's disputes: 0.0%.
  • Median with partial counted as 0.5 (sensitivity, not decisive): 25.0%.

Secondary sample

hunch's specification rules, 30 sampled: 0 expressible, 17 partial, 10 not, 3 error; expressible share 0.0%. Reported apart, never in the median.

pi-verdict by rule group

  • bash: 14 rules, 1 expressible, 12 partial, 0 not, 1 error; expressible share 7.1%
  • path: 26 rules, 0 expressible, 25 partial, 0 not, 1 error; expressible share 0.0%
  • jev: 1 rules, 0 expressible, 0 partial, 1 not, 0 error; expressible share 0.0%

Controls and calibration

at least 6 of 7 positive controls final expressible or partial, and at most 1 of 6 negative controls final expressible. Positive controls final expressible or partial: 6 of 7. Negative controls final expressible: 0 of 6. Calibrated: the bar is met.

  • control/01: expressible
  • control/02: expressible
  • control/03: expressible
  • control/04: expressible
  • control/05: partial
  • control/06: error
  • control/07: expressible
  • control/08: partial
  • control/09: not
  • control/10: not
  • control/11: not
  • control/12: not
  • control/13: partial

Translator and adjudicator agreement

Cohen's kappa 0.956 over 176 rules (observed agreement 97.7%, chance 48.3%); rules whose translator or adjudicator call ended in error are excluded; computed over all census rules including controls.

Disputes: 4 (pi-verdict/bash/chmod-777 partial → partial; pi-verdict/bash/git-reset-hard partial → partial; pi-verdict/bash/remote-exec partial → partial; pi-verdict/bash/gh-release partial → partial). Downgrades by the mechanical checks: 3 (hunch/spec/bips/bip322/to-sign-fields: schema; hunch/spec/bips/bip339/msg-wtx-announcements: schema; jev-axi/PUSH_QUESTIONS/generated_by_hand: teeth). Engine-limit refusals: 0.

Errors (counted as not): 12.

  • hunch/failures/misleading-success: the adjudicator's answer does not fit its schema (unknown fields: verdict2)
  • hunch/spec/bips/bip352/eligible-inputs-only: the adjudicator's answer does not fit its schema (not JSON: Unterminated string in JSON at position 501 (line 1 column 502))
  • hunch/spec/nuts/nut00/v3-version-and-encoding: the adjudicator's answer does not fit its schema (not JSON: Unterminated string in JSON at position 457 (line 1 column 458))
  • hunch/spec/nuts/nut21/localhost-redirect-url: the adjudicator's answer does not fit its schema (unknown fields: verdict2)
  • jev-pref/secrets/sec_pii: the adjudicator's answer does not fit its schema (unknown fields: class)
  • jev-pref/prefs/no_real_keys: the adjudicator's answer does not fit its schema (unknown fields: classAfterMechanicalChecks)
  • abide/typed-domain-errors: the adjudicator's answer does not fit its schema (not JSON: Unterminated string in JSON at position 413 (line 1 column 414))
  • pi-verdict/bash/rm-recursive: the adjudicator's answer does not fit its schema (reason is missing or over 80 words)
  • pi-verdict/path/S1-03: the adjudicator's answer does not fit its schema (not JSON: Unterminated string in JSON at position 427 (line 1 column 428))
  • jev-axi/GUARD_QUESTIONS/destructive: the adjudicator's answer does not fit its schema (unknown fields: classAfterMechanicalChecks)
  • jev-axi/PROGRESS_WORKER/work_off_track: the adjudicator's answer does not fit its schema (not JSON: Unexpected token '`', "```json {""... is not valid JSON)
  • control/06: the adjudicator's answer does not fit its schema (not JSON: Unexpected token '`', "```json {""... is not valid JSON)

Abide's own type, compared

lint ~ expressible; model ~ partial or not; unenforceable and deferred reported as-is: 25 of 31 agree (80.6%).

Amendment 01

During the counted census the model client stopped answering: its account had reached its monthly spend limit. From that moment every translator call ended at once with a non-zero exit and the same one-line message, so 37 rules got class error (counted as not) without the translator ever seeing them. This amendment is written after the counted run and before any census result is published; it shows no result. 37 rules were eligible under its rule and 37 were re-called once; for them the attempt-2 record is the one scored. Amendment sha256 c3d2c883c06592d55e585505d05ec6f1b0b93ea47784d072e1d21768383aba11, not-before 2026-10-07T06:30:26Z. The amendment as published.

Spend

  • Counted census calls: 413, $33.0017458.
  • Canary and practice calls (outside the census): 4, $0.1030394.
  • Total: $33.1047852, against the census ceiling of $40 and the experiment's cap of $100.
  • API-equivalent total_cost_usd under subscription auth; an unknown cost is charged its pre-registered bound

Disclosed with these results

  • When a translator call ends in error, its adjudicator call is not made (the final class is error either way), so the census makes fewer than 2 calls for that rule and fewer than 376 calls in all.
  • A failed spawn that may not have been paid is still charged its upper bound (conservative); this departs from "an unpaid round gets no line".
  • If the practice run stops for an ASK-FORK and is run again, the canaries are paid again; every practice and canary line is in the ledger and listed.
  • The pinned adapter does not return the engine's reports, so records keep the validation message's sha256 and teeth's per-probe labels and per-constraint results instead of report sha256s.
  • bce-engine's own third-party dependencies are pinned only by the lockfile (bundle-1 scope).
  • A reported (known) cost can overshoot the $40 ceiling by at most one call's cost minus its reserve; the pre-registered rule, refuse a call when spend + reserve > $40, is met as written.
  • The ledger binds one repository clone: a fresh clone has its own run state; the published census is the one whose records and ledger are committed and pushed with the results.
  • A call that may not have been paid (a failed spawn or a failed run-directory creation) is still charged its upper bound.
  • From 2026-10-06T12:38:20Z the model client's account had reached its monthly spend limit; 37 translator calls (the 30 secondary-sample rules and 7 primary rules) ended at once with the client's limit message and no answer.
  • Those 37 calls were charged the pre-registered unknown-cost bound, $0.5000000 each ($18.5000000), although the client reported no cost; their lines stay in the ledger.
  • Under this amendment each of those 37 rules is re-called once (attempt 2) and the attempt-2 record is the one scored; a re-call that fails again stays class error.
  • The re-call runs on code that differs from the code published with this amendment only in freeze.mjs's values (this amendment's sha256 and not-before) and the re-pinned runners.sha256.
  • The attempt-2 answers come from a later session and date than the attempt-1 answers of the other rules (a time confound); which rules are re-called does not depend on any answer, only on the client's refusal message.

Found in review after the run

Found in review after the run: each call ran in a fresh temp directory whose name began 'exp007-census', so the models could see the experiment id (never the hypothesis, plugin, rule label or expected class); the R6-1 canary terms did not include 'exp007'. A neutral prefix and the id in the canary terms are adopted for stage 2.

Limits, as pre-registered

  • The target language is bce-engine 0.3.1's static vocabulary and nothing more: four constraint types for plugin rules. A newer engine or a different checker may decide more.
  • The adapter maps non-diff inputs to files (a tool call to JSON and command text, a transcript to JSON lines and a final message, a document to a file). That mapping is a choice we made; another mapping could change what is expressible.
  • The checker parses every read file as TypeScript, the .floor files included [m01, m03, m07, m15]. forbiddenDependency fires where that text parses as code: import, require and import() in plain prose [m01], a final message [m03], a command [m07] and the removed lines of .floor/diff.patch [m15]; not inside comments or string literals [m13, m14], so never from transcript.jsonl or tool-call.json values [m05, m06] or a quoted shell argument [m08], and not after an apostrophe earlier on a prose line [m02]; a type-only import never fires [m12]. forbiddenEgress fires on fetch, http.request, request(), axios.get, new Client() and got with a literal host [m18, m19, m20, m21, m22, m23], in prose too [m27], not on curl, lookalike hosts, string literals or non-literal hosts [m24, m26, m28, m38], and takes no file scope [m27]. A constraint that should judge only what a change adds must be scoped to post-patch src/** or .floor/added/** [m16, m17]. For tool calls, transcripts and documents, forbiddenPattern and forbiddenFile remain the precise vocabulary.
  • A partial floor still needs a model for its residual; expressible is the only class that removes the model for that rule.
  • The translator is itself a model. The adjudicator and the mechanical checks guard it, but teeth is self-consistency (the translator writes both the constraint and its probes), not proof over every input.
  • The dispute rule can only lower a class, which biases the census toward the kill criterion; the median before disputes is reported beside it.
  • Some plugins have few rules (jev-pref has 4), so their shares move in large steps.
  • Which items count as rules is our application of the pinned inclusion test. At the pin jev-belay has no rule that decides by itself (its four questions feed one combined decision), so its primary stratum is empty and the median runs over the other plugins.
  • The positive controls are shown the module-graph contract (their materialisation differs), so a translator could tell them apart from plugin rules; the controls are outside every median.
  • A line checker cannot join a tool's name to its path argument or resolve the working directory and real path, so pi-verdict's 8 write-only path rules are capped at partial mechanically: an expressible answer (no residual) drops to not, and they reach partial only when the translator answers partial with a residual. They can never be expressible, so the cap moves the partial-as-0.5 sensitivity figure, not the strict median; the adjudicator is told the condition in the rule's 'Applies to' line.
  • The positive controls run on the module-graph path, so they do not calibrate the plugin-surface diff path the plugin rules take.
  • Blinding hides names, not families: input kind and regex-versus-prose correlate with the plugin (limpet's rules are all stopTranscript; toolCall regexes come only from pi-verdict and jev-engineering), so a translator can guess a rule's family.
  • One rule's verbatim text names its own plugin (abide/key-write-targets); the blindness check excludes a rule's own text, which is shown verbatim by design.
  • The negative controls were written by the experimenters; the positive controls come from EXP 005, whose rules were written for bce.
  • Case folding uses JavaScript's toLowerCase (Unicode default) and the source regexes are JavaScript /i (pi-verdict); the two fold a few special cases differently (e.g. the Turkish dotted I, the German sharp s), so a rare input could be matched by one and not the other.
  • Each line is matched on its own, so a construct spread over several lines (a multi-line signature, a string split across lines) cannot be matched as one [m31].
  • The checker matches one line at a time [m31], while the source regexes (and jev-engineering's re.search) run over the whole command; a multi-line command can be matched differently.
  • jev-engineering's patterns are Python regular expressions and the checker compiles JavaScript ones; where the dialects differ, only the mechanical checks on the translator's own probes can catch it, and only when a probe exercises the difference.
  • Probe patches can only add files, because the contract lists the base tree's files but not their contents.
  • One translator model, one adjudicator model, one attempt per rule and one client version.
  • Upstream plugin labels, where stage 2 uses them, are written by each plugin's authors and are not independent.
  • pi-verdict's command rules and path rules are also reported apart; that breakdown does not change the median.
  • The "Applies to" line's presence and shape correlate with abide's own type (model rules carry a "Checked ..." sentence, lint rules a scope only, unenforceable and deferred none); the abide comparison is reported with that caveat.

Provenance: results.json (sha256 26eb7287e88f3bbf97b6311dc1d355195bb98901c8135569aa9a56c827404a44), computed by the pinned scorer from the committed census records and spend ledger and opened by the pinned census gate; the build re-runs the gate and refuses a record it does not open.

Pre-registered, not yet run. For every rule the eight plugins ship that meets the inclusion test (51 items excluded, listed; hunch's 1,011 spec rules sampled 30), how much could a deterministic checker decide on its own, before any model is asked? This record fixes stage 1, the census, before any census call is made: the rules, the translator's inputs and its output, the checks that can only lower its answer, the scorer, the controls and the bar that would refute the premise. Stage 2, the cascade with Jev, is pre-registered by a dated amendment before any paid Jev call. Measured — premise refuted, 7 Oct 2026: see the results.

The question

Take the rules that eight listed Jev plugins ship with their own code. For each rule, can a deterministic static checker (bce-engine 0.3.1, no model) decide it as written (expressible), decide a strict part of it and leave the rest to a model (partial), or decide no non-trivial part of it (not)? Per plugin, what share of its rules is expressible, and what is the median share across the plugins?

Stage 1 of 2 (census); stage 2 pre-registered by amendment before any paid Jev call.

Why ask it

In EXP 005 a model-free line linter written from the same seven architecture rules missed none of the 30 drift items, and Jev missed one, so its criterion against the better model-free baseline was refuted. Those rules were ones a static check can decide. (EXP 005: its better model-free baseline missed 0 of 30 drift items; results record sha256 7388556049b7639e2a251edcf3fb8feb782213b78e71a02cddb687f12b09dccd.)

If many of the rules a gate asks a model about are decidable by a static check, a gate could settle those first, for nothing, and ask the model only about the rest. EXP 007 first counts how many such rules the gates people actually ship contain.

The rules: eight plugins, pinned

Each plugin's own rule files, read at a pinned commit and vendored with the sha256 of every source file. An item is a rule of the primary stratum when its answer by itself gates, blocks, flags or denies an action or a change. Locators, triage, category, severity and kind classifiers, score-only dials that feed a combined decision, and templated questions with runtime placeholders are excluded and listed with their reasons. Allow-rules (fast paths, allowlists) are excluded: the bce vocabulary is forbid-only and an allow-rule is a different decision. One regex, one question, one prose line or one rubric entry is one rule.

145 rules in the primary stratum across 7 plugins; jev-belay has none that passes the inclusion test at the pin, so it has no share in the median. hunch's specification rules (rules/bips-spec.json, nips-spec.json, nuts-spec.json) are a secondary stratum: a seeded sample of 30 (seed 7007; the sampling code is committed in extract.mjs), reported separately and never in the median. Out of scope: DiffJury (no license); Blink (no public repository or license found); jev-guard (MIT, but not named by the council verdict; kept out to hold the council's 6 to 8 range (out of scope, not a finding)).

The translator is blind

Exactly: an opaque id (item-<first 12 hex of sha256("exp007-census-v1:" + ruleId)>, mapped back to the ruleId by the runner), the rule's verbatim text (the single text field pinned per plugin in selection.json), its input kind, its regex flags when it is a regex, the rule's match target and application condition as an 'Applies to' line where the source defines one (the context field, one factual sentence per source group plus the rule's own file globs, where a glob that names the rule's own plugin shows that name as <tool>), and the materialisation contract with the accepted constraint types (the whitelist) and one generic example each (contract.md; contract-module-graph.md for the positive controls); plus the pinned system prompt.

It never sees: Any case, any label, any plugin evaluation file, abide's own type field, another rule's class, or any result. Every other field of a source item is stored under withheld in the rule file and never rendered into a prompt. The prompt builder (protocol.mjs) reads exactly five fields of a rule, {ruleId, text, inputKind, flags, context}, and shows the ruleId only as the opaque id. A test hands it a rule whose other fields throw when read, and renders both prompts for every rule to show that no plugin name, no stratum or control word and no segment of the ruleId appears outside the rule's own text (six generic words of the fixed contract and system prompt are listed as exceptions).

One JSON object: {ruleId, class: expressible | partial | not, constraints: [bce constraint objects], coverage, residual (a yes/no question when the class is partial or not, otherwise empty), probes: {violating, compliant} (empty when the class is not), rationale of at most 80 words}.

The three classes, defined before any call:

What can only lower an answer

Mechanical checks, in code, in this order:

The first failing check lowers the class once: expressible becomes partial if a residual was given, else not; partial becomes not. Each downgrade is recorded with the failing check. A pattern the engine's safe-compile guard refuses fails validation and is counted in a separate engine-limit category. An answer that is not a JSON object with a valid class, a timeout, a model id other than the pin, or any other harness failure is class error, counted as not (conservative) and listed.

A separate process on a different pinned model, no tools. Exactly what the prompt builder sends: the pinned system prompt; the same opaque id; the input kind; the 'Applies to' line (the rule's match target and application condition, where the source defines one); the regex flags (regex rules only); the rule's verbatim text; the translator's answer verbatim; a mechanical summary with schema, vocabulary, the checker's validation, teeth, the flags check (flagged rules only), the translator's class and the class after the checks; the flag-semantics sentence (flagged rules only); and the stated class to confirm or dispute. No case. It answers {ruleId, verdict: confirm | dispute, proposedClass, reason of at most 80 words}. Confirmed: the class after the mechanical checks. Disputed: the lower of that class and the proposed class (not < partial < expressible), so a dispute can only lower expressibility. Translator-adjudicator agreement is reported as Cohen's kappa over the three classes, with the number of rules it is computed on and the list of disputes: rules whose translator or adjudicator call ended in error are excluded; computed over all census rules including controls.

The checker and the adapter

bce-engine 0.3.1. The vocabulary is the constraint types bce-engine 0.3.1's evaluate() implements and grades statically on the pinned profile, derived from the installed engine source and cited by file and line in whitelist.json with the engine files' sha256. package.json and the lockfile pin 0.3.1 and are unchanged; any engine change is an operator decision. customPolicy is declared by 0.3.1's schema but evaluate() has no branch for it, so it enforces nothing; the adapter refuses it (and every other type outside the vocabulary) with a typed error.

Plugin rules run on the plugin-surface profile with the ast extractor, scanning .floor/** and src/**/*.ts for diff inputs and .floor/** otherwise, with minFiles equal to the files the engine resolves for the materialised input. The positive controls run as EXP 005 ran them: typescript-module-graph over src/**/*.ts. Scoring reuses EXP 005's contract (bce-contract.mjs: materialise, run, interpret), imported, not copied.

judge() takes the rule's final class: expressible gives pass or fail from the engine; partial gives fail from the engine and otherwise abstains; not always abstains. A rule with an empty constraint set abstains. teeth(constraints, {violating, compliant}) passes only if every violating probe (one input or a list) makes the constraints FAIL, the compliant probe makes them PASS, and each constraint alone makes at least one violating probe FAIL, through the adapter and the real engine. A vacuous constraint fails teeth, alone or beside a real one. Every diff input is a patch against EXP 005's base tree (experiments/jev-gate/base), committed as EXP 005's scoring contract commits a tree (baseCommit; baseTree is its git tree id). Its file list, not its contents, is in the translator's contract, so probes add files. Base commit 2c55f16e20ccc27e60d5c53e25661acafb82133f, tree 957b5e10c099ef2c86bb4543a8560aba59290d62.

Controls

Calibration bar. At least 6 of 7 positive controls final expressible or partial, and at most 1 of 6 negative controls final expressible. A miss is published and the census reported as "translator uncalibrated"; the run continues and nothing is silently re-run. Controls are outside every median.

What is measured

The census: 188 rules (145 primary, 30 secondary, 13 controls), two calls each, 376 calls.

The bar that would refute it

Median expressible share below 25%: the premise is refuted, stage 2 is cancelled, and the census is the result.

The council verdict adopted by the founder on 2026-09-30, quoted verbatim, line break included. The stage-2 criteria and negatives are stated now and bind the stage-2 amendment.

Kill criteria (pre-registered, published either way): median expressible share < 25% → premise refuted, census is the result;
  cascade adds false rejects > 2 pts over plugin-alone, or avoids < 20% of Jev calls → refuted.
Discriminating negatives: sham floor must collapse to Jev-alone; floor must abstain on ≥95% of non-expressible rules;
  lint-floor tie is published as "any deterministic floor works".

Every outcome is published, including "premise refuted" and "translator uncalibrated".

Calls, spend and the clock

claude -p --model <pin> --effort high --tools "" --strict-mcp-config --setting-sources project --no-session-persistence --system-prompt-file <pinned prompt file> --output-format json

Stage 1 calls no Jev model. Two Claude calls per rule, a translator and an independent adjudicator, are metered against the experiment's $100 cap.

The pre-registration's own wording of the same point, quoted verbatim from the plan:

"$0 / no model" in COUNCIL-VERDICT STAGE 1 and STEER S5 = no Jev and no paid call before the stage-1 prereg is live; the census translator + adjudicator are METERED model calls under the $100 cap (council's cost line counts them as agent labour).

What this does not establish

Bracketed ids such as [m01] refer to rows of the engine matrix, each run through the real checker in the repository's tests.

Sources

Amendment 01 (2026-10-06): one re-call for the translator calls the client's spend limit refused

Founder decision, verbatim: “Amend, then re-call once (Recommended)”

During the counted census the model client stopped answering: its account had reached its monthly spend limit. From that moment every translator call ended at once with a non-zero exit and the same one-line message, so 37 rules got class error (counted as not) without the translator ever seeing them. This amendment is written after the counted run and before any census result is published; it shows no result.

From 2026-10-06T12:38:20Z the pinned client (Claude Code 2.1.280) answered every call with this message and a non-zero exit:

You've hit your monthly spend limit · raise it at claude.ai/settings/usage?from=cc_cli_limit_message · your weekly limit resets Oct 9 at 3am (Europe/Amsterdam)

Affected: 37 translator calls, 30 of the 30 secondary-sample rules and 7 of the 145 primary rules, no control; their 37 adjudicator calls were not made. Each of the 37 calls was charged the pre-registered unknown-cost bound, $0.5000000 ($18.5000000 in all), and its adjudicator call was not made (the translator ended in error). The other 151 census rules (the 13 controls and 138 primary rules) were called and answered before the limit was reached; their records are not changed by this amendment.

Which rules are re-called

A census rule is eligible for exactly one re-call when its committed attempt-1 record's translator call ended with harnessFailure nonzero-exit AND that call's raw client output (translator.raw) is byte for byte the message below, which begins with the stable prefix, AND translator.rawSha256 is the sha256 of that text. Any other failure (another message, a timeout, a parse error, a model mismatch) is not eligible and keeps its class error.

The re-call

  • Each eligible (ruleId, translator) pair is called again ONCE, with the pinned argv, models, prompts, environment and checks of the counted run, then its adjudicator if the translator answers (no error class).
  • The attempt-1 record is kept unchanged as the attempt-1 record; the re-call writes an attempt-2 record (experiments/blueprint-floor/census-attempt-2/<ruleId>.json) that names the attempt-1 translator call it amends.
  • The original ledger lines stay as they are (charged the bound, disclosed); every re-call call gets its own new ledger line (kind counted, attempt 2, amends: the attempt-1 translator call id).
  • A re-call that fails again, for any reason, keeps class error: there is no third attempt, and a (ruleId, role) pair with an attempt-2 ledger line is never called again.
  • For an eligible rule the attempt-2 record is the one scored; every other rule must have no attempt-2 record, and an attempt-2 record or ledger line for an ineligible rule keeps the result unpublishable.
  • The re-call runs under the same guards as the counted run (the frozen pre-registration and this amendment, both served byte for byte, after this amendment's not-before; the pinned code; the base tree by its bytes; the shared ledger), and under the same spend rules: the $100 cap, the $40 census ceiling and the reserve rule.
  • The re-call stops at the first call the client refuses with a usage-limit message ("You've hit your ... limit"): that call keeps its ledger line and its record (class error, no further attempt), and the remaining eligible rules stay uncalled and can be re-called by a later invocation. A dry run (--mode recall --dry-run) lists the eligible set and the projected spend without any call.

Unchanged: the calibration bar and the kill criterion; the prompts, the contracts and the vocabulary; the models, the client version, the effort and the command; the scorer (scorer.mjs, byte for byte); the strata, the rules and the controls; the mechanical checks and the adjudicator rule; the cap, the census ceiling and the reserve rule. This is the only post-run change to EXP 007 stage 1.

No re-call before the merge time of the odin-rnd pull request that adds this file (gh pr view <n> -R odin-labs-ai/odin-rnd --json mergedAt, UTC), and only while the site serves this record and the pre-registration byte for byte.

Disclosed with the results

  • From 2026-10-06T12:38:20Z the model client's account had reached its monthly spend limit; 37 translator calls (the 30 secondary-sample rules and 7 primary rules) ended at once with the client's limit message and no answer.
  • Those 37 calls were charged the pre-registered unknown-cost bound, $0.5000000 each ($18.5000000), although the client reported no cost; their lines stay in the ledger.
  • Under this amendment each of those 37 rules is re-called once (attempt 2) and the attempt-2 record is the one scored; a re-call that fails again stays class error.
  • The re-call runs on code that differs from the code published with this amendment only in freeze.mjs's values (this amendment's sha256 and not-before) and the re-pinned runners.sha256.
  • The attempt-2 answers come from a later session and date than the attempt-1 answers of the other rules (a time confound); which rules are re-called does not depend on any answer, only on the client's refusal message.

This section is rendered from amendment-01.json (sha256 c3d2c883c06592d55e585505d05ec6f1b0b93ea47784d072e1d21768383aba11), whose parent is the pre-registration above (sha256 ee56929ab38de831d618a41b9a2f359d814fc01849d273060e590669e94c9edb).

Provenance

This page is rendered from preregistration.json, the committed record at experiments/blueprint-floor/preregistration.json, whose sha256 is ee56929ab38de831d618a41b9a2f359d814fc01849d273060e590669e94c9edb. The build publishes that file byte for byte, and a repository test re-renders this page from it and fails if they differ. A validator rebuilds every file fact in the record from the files on disk.

No census call has been made. The results, when they exist, will be judged against this record as published, and reported as they come out, including if the premise is refuted. Measured — premise refuted, 7 Oct 2026: see the results.