Pre-registered — not yet run. Does hot load, unload and reconfigure of research components leave the harness indistinguishable from a fresh process, and does every unmet need show up as a named inactive component instead of silently doing nothing? Written, hashed and published before the counted run. Nothing in this record may change after publication; a later change is a new, dated amendment, refuted and published first, and it resets the not-before.

The question

The kernel is our kernel implementing Cordis semantics: a small subset, written here, that uses Cordis (github.com/cordiverse/cordis) as the semantic reference only. It is not a dependency, and nothing here claims Cordis's guarantees. The kernel is pinned by sha256 in the file map. Inspired by arXiv 2608.25512.

The components

The items

200 items: EXP 005 (60 items) and EXP 008-X (140 items). Corpus identity sha256 4d0273836696f751272276fe1004ebfc8312d5397fbdaa09ee58232ac48c5acd; sha256 over the ordered "set\tid\tstateSha256\n" lines, computed by harness/services/corpus.mjs, which asserts every item state by its committed sha256. The study measures equivalence, not accuracy: the runner never opens a labels file, and earlier exposure to these items cannot bias an equality.

The arms

ArmWhat runs
R0A fresh process per (active set, pin, item), cached: the reference.
H1One long-lived kernel. Each trial runs 20 seeded operations (at least 25% of them reconfigures, including pin swaps) with 40 evaluations interleaved.
H2The same component specs on a plain registry with hand-written register and unregister, written by a blind author (secondary).
K1H1 plus 12 pre-registered planted leaks (for example a raw setInterval, a listener outside ctx, a stale prefix cache after a pin swap, an MLX child that was never reified): the teeth.
K2The K1 effects routed through reifying coeffects.

The schedule

The claims

P1, equivalence in time. H1 diverges from R0 in 0 of n = 400 trials. Any difference, after any operation, in a decision, in p to 6 decimal places, or in any inside-boundary snapshot field: the component registry and statuses, provided services, listeners, timers, memo keys and prefix-cache keys. With 0 divergences in 400, the 95% Wilson upper bound is 0.95% (at most 1% from n = 381). Refuted by: Any single divergence.

P2, soundness in space. On the blind-authored corpus of 120 configurations, the kernel's census shows 0 silent-inert components and 0 false-inactive components. A component the census reports active although, by the corpus construction, a need it has is unmet (or its provider was withdrawn). A component the census reports inactive although, by construction, every need it has is met. absent ⇔ excluded: the kernel never loads a plugin that is not enabled and unloads a withdrawn one, so either is absent from the census, which the corpus calls "excluded". Every other status compares one to one (analysis/SPEC.md §P2). Refuted by: Any silent-inert or false-inactive kernel configuration among the 120.

P2 was computed before registration

P2 has no seed and is deterministic, so its outcome was computable before this record. It was computed once, before registration: while validating the pipeline on the real corpus, the instrument author ran it a single time, with output to the terminal only and nothing committed. What it showed: the kernel was correct on 120 of 120 configurations, with 0 silent-inert and 0 false-inactive; against the baseline, McNemar b = 60, c = 0. P2 is registered for the record. Its evidential weight rests on the blind authorship of the 120 configurations (written by a history-free agent from the corpus spec alone, fence audit above) and on the real, unmodified filter baseline, not on any claim about an unseen outcome. Only P1 (seeded from the merge commit of this record) and the validity gates are predictive: they test outcomes that are unknown when this record is frozen. Source: experiments/composable-harness/analysis/SPEC.md §P2 "Disclosure".

Secondary, deciding nothing

Secondary results decide nothing; they are reported as they come out.

When a result is uninformative

If any gate fails, the result is published as uninformative, never as a pass.

The analysis

The confirmatory analysis is the pinned analyse.mjs, frozen in this record with its synthetic-row tests. No analysis is added after freeze; a change to it is a dated amendment that resets the not-before. Spec experiments/composable-harness/analysis/SPEC.md (sha256 8a1a48269b1a49354bdcab968f740745b8085a395e1749b6e886350535eb1558). File experiments/composable-harness/analysis/analyse.mjs (sha256 436b434ff3ef59fa082ea1f991a1e52181a2e1480ec7e55c2e086354cea0394d), tests scripts/composable-harness-analyse.test.mjs (sha256 a69c72cf6868b2c2948ae01326933ee6645f7b9c36f1e545b35d8bd35aa4de90).

Fences

Memory, spend and the not-before

What this does not establish

Provenance

This page is rendered from preregistration.json, the committed record at experiments/composable-harness/preregistration.json, whose sha256 is d25f7f3fe9f802b19ed5caa9a437126109b20f83fe993086854a20bb902e7e7e. The site publishes that file byte for byte, and a repository test re-renders this page from it and fails if they differ. A validator rebuilds the record from the harness files and refuses any difference; it pins 188 files by sha256.

The counted run has not started. The results, when they exist, will be judged against this record as published, and reported as they come out.