# Sīdus E1 Confirmation Protocol v1.0-RC4

**Status:** working-tree candidate under construction. Not frozen, not reviewed, not adopted.
**Decision state:** HOLD. Confirmation execution is prohibited; PCR-6 is NO-GO.
**Parents:** RC2 (estimands), RC3 (CF-4 HOLD), RC4 Author Decisions 01–04, RC4 Planning 01 and 02.
**Confirmation or sealed held-out outcomes examined in preparing RC4:** 0 (self-recorded).

## 1. Authority and Scope

RC4 is additive. It does not amend the frozen development protocol, PCR-5, reference v2, RC1, RC2, RC3, the CF-4 RC3 review, any planning or decision record, historical source, sealed pilot evidence or checkpoints.

RC4 explicitly supersedes two things:

- RC3's all-or-nothing failure handling, replaced by Author Decision 01;
- RC3's sample size and registry, replaced by Decisions 02–04 and Planning 02.

Everything else carried from RC2/RC3 is restated below and is unchanged unless stated otherwise.

Reference v2 remains adopted only for `rho=(0,0.25,0.5), k=4, C=0.8`. Its certification is not scientific confirmation. The X2 `return_J` discrepancy remains disclosed in PCR-5. `tau_share` is a V comparator-eligibility quantity only.

## 2. Claim Set

T1, T2, U and V are primary. The following are excluded: R, L, G, Arm R, `eta>0`, U2-T, the comparison fixture, and k=2/k=3. Exclusion is not rejection. No excluded quantity may be mined from confirmation outcomes, or used to rescue or broaden a primary claim.

## 3. Estimands (RC2, Unchanged)

The inferential unit is the registered training seed. The headrooms `H = full − public` come from the vendored `reference.py`: base 2.08125, shift 3.6, alpha 4.10625, beta 4.21875. Alpha and beta are used only for plateau thresholds.

- **T1(env):** `(J_env,C4.5 − J_env,C0.8) / H_env` for base and shift; margin 0.05.
- **T2:** source-2 rate share at shift C=0.8 minus at base C=0.8; margin 0.05; disconfirmation boundary 0.
- **U(env, v):** `(J_env,C4.5 − J_replaced,v) / H_env`, where `S_v` is replaced by an independent draw from the trained `q(S_v | I)`, holding state, `I` and the jointly generated `S_−v` fixed. Six cells; margin 0.02.
- **V(pair):** `L1(comparator, learned) − L1(v2, learned)` for the eleven fixed alpha/beta pairs; margin 0.05.

## 4. Inference (Author Decision 01)

All tests are one-sample Student t at family α = 0.05. Constant samples pass only strictly beyond a boundary; equality never passes.

**Confirmation: composite over all 501 registered seeds.** A seed whose component is invalid contributes exactly 0. This is a prospective outcome definition, not imputation.

- T1 requires both environments' one-sided lower bounds to exceed 0.05 (intersection–union).
- T2 requires its lower bound to exceed 0.05.
- U requires all six cells to exceed 0.02.
- V requires every pair to be classified v2-superior within an 11-pair Holm family.

**Disconfirmation and equivalence: valid seeds only.** These tests run only when the valid count reaches the frozen minimum: T1 20 per environment, T2 20, U 20 per cell, V 324 per pair. Below the minimum, the test is not performed and its p-value is set to 1, so every Holm family keeps its fixed size.

- T1 is disconfirmed if either environment is disconfirmed (Holm across the two environments).
- T2 is disconfirmed if its upper bound is below 0.
- U is disconfirmed per cell (Holm across the six cells), preserving RC2's rule that a cell disconfirms only on that cell's own valid prerequisite.
- V comparator-superiority and TOST equivalence use separate 11-pair Holm families on valid seeds.

A failed component can never create disconfirmation or equivalence. A claim that is both confirmed and disconfirmed is reported INCONCLUSIVE with a conflict flag.

**Overall result:** PASS iff all four claims are CONFIRMED; FAIL iff any is DISCONFIRMED; otherwise HOLD.

**Composite feasibility identity.** The composite mean is `(1−p)·μ_valid`, so U can clear 0.02 only if `μ_valid > 0.02/(1−p)`. That is 0.032 at p = 3/8, and 0.06915 (3.46× the margin) at the 3/8 one-sided 95% upper bound. This is an interpretive identity, not an acceptance threshold. Pilot U contrasts remain embargoed, so it cannot be calibrated before confirmation.

## 5. Sample Design

The registered n is **501**, using seeds **9201–9701**. Each seed is paired across six conditions: base C=4.5, base C=0.8, shift C=4.5, shift C=0.8, alpha C=0.8 and beta C=0.8. That gives **3,006 conditions**.

Derivation:

- Minimum valid counts are `max(20, precision minimum)`.
- V's minimum rests on a 2.0× standard-deviation transport multiplier, which is **an assumption, not an estimate**.
- Failure bounds are the one-sided 95% exact Clopper–Pearson upper bounds from the public pilot.
- n is the smallest value at which the dependence-free union bound gives at least 95% joint analyzability. n = 500 gives 0.94833 and fails; n = 501 gives 0.95544 and passes.

These figures come from Planning 01 and 02 and Decisions 02–04. Decision 03's joint alpha/beta rule is a conservative design objective, not an inferential necessity (Decision 04).

The registry is a candidate until PCR-6 GO. There is no replacement, deletion or adaptive extension.

## 6. Execution

**Trainer.** Execution uses the byte-identical MB1-PCR4-v1 import closure, vendored under `vendor/historical/`: `train_mb1.py`, `rf4.py`, `retry.py`, `reference.py`, `checkpointed_feasibility.py` and `evaluator.py`. **`evaluator.py` was missing from every earlier lock**; RC4 adds it.

Runtime-only overrides follow the pilot runner:

- the fixture lookup, extended with the frozen alpha/beta weights;
- the output, checkpoint and log locations;
- the condition tag;
- the trainer's `ROOT`, which is used solely by a `relative_to` call in its log line.

**Schedule (MB1-PCR4-v1, unchanged):**

| Item | Value |
|---|---|
| Steps; batch | 28,000; 256 |
| Checkpoint; exact evaluation | every 2,000; every 500 |
| Warm-up | steps 0–3,999 at target 4.5, balanced coordinator weights |
| Ramp | 4,000–15,999, linear from 4.5 to C |
| Hold | 16,000–19,999 at C |
| EMA hold | 20,000–27,999, decay 0.9997, learning-rate factor `(1+(t−20000)/1000)^−2` |
| Base learning rates | (0.035, 0.004, 0.025, 0.035, 0.004) for shared_enc, residual_enc, prior, shared_head, residual_head |
| Gradient clip | 10 |
| Dual update | `max(0, dual + 0.005·f·(rate − target))`, where f is the learning-rate factor (finding 11) |
| Final scoring | EMA parameters |
| Stopping | fixed maximum only; no early stop or extension |

**Runner (`rc4/runner.py`).** One 2,000-step chunk is run per call, in a fixed order: seeds ascending, then conditions as listed.

- **Sealing.** Every outcome-bearing file of all six conditions is sealed per file as it is produced: checkpoints, trainer records, logs and readouts. The construction is RSA-OAEP with AES-256-GCM, and the additional authenticated data is the condition and file name.
- **Public status.** Only state, step and failure category are public.
- **Ledger.** An append-only, hash-chained ledger is the single source of truth.

**Resume.** A run resumes from the latest ledgered sealed checkpoint, after its ciphertext and plaintext hashes are verified. A mismatch is terminal and never triggers a restart. A trainer exception gets one retry from the same checkpoint; a second exception from the same step is terminal (`irrecoverable_crash`).

**Pre-first-checkpoint replay — ADOPTED by the author (16 October 2026).** A crash before the step-2,000 checkpoint is replayed from initialization. This is outcome-blind, and the result is identical because the trainer is bit-deterministic. The ledger records a `pre_first_checkpoint_replay` event. A crash after a checkpoint continues from that checkpoint. See `RC4_BUILD_AUTHOR_DECISIONS.md`.

**Early termination.** `rc4.assemble closeout` is the only path. It marks every non-terminal condition failed, irreversibly and outcome-blind.

**Embargo.** Assembly refuses until every registered seed-condition is terminal, so no interim look is possible. The private key belongs to the author and must never be placed in a run-root or package.

## 7. Readouts and Validity Gates

Readouts are computed inside the sealed context at step 28,000 (`rc4/readout.py`):

- `return_J`, the rates, the realized sum rate and `m_v`;
- the active-channel gaps `H(C_v|I) − m_v`, which must agree with the trainer to within 1e-12;
- the nine exact evaluations at steps 24,000–28,000;
- the reference upper bound;
- the trainer's own flags, for cross-checking only;
- for base and shift, exact total-reliance replacement returns. This is the same computation as RC3 planning, asserted to match the evaluated return to within 5e-12.

The analyzer recomputes every gate from raw fields using frozen contract constants (finding 05). It never trusts the trainer's flags.

| Condition | Valid iff |
|---|---|
| C=4.5, base/shift | completed; 28,000 steps; finite values; rates sum to the realized rate (tolerance 1e-9) and are positive; realized rate ≤ C+0.02; range of the nine evaluations < 0.002·H_env and budget met; reference upper equals the frozen full value; `full − J ≤ 0.01·H_env` (historical nonbinding gate, Decision 02) |
| C=0.8, all environments | the same, without the reference and nonbinding checks |

Component validity:

- **T1_env:** both of that environment's conditions are valid. A failure is component-specific, so a base failure doesn't affect shift.
- **T2:** both C=0.8 training conditions are valid.
- **U_env,v:** C4.5_env is valid, gap_v ≤ 0.01 bits, and the replacement return is finite and consistent.
- **V_env:** that environment's C=0.8 condition is valid.

## 8. Assembly and Analysis

`rc4/assemble.py` emits every seed-condition. Failures become placeholders with a failure reason; non-finite values become null and are named.

`analysis/run_analysis.py` proceeds in this order:

1. Run the guard (§12).
2. Validate against the JSON Schema with the locked `jsonschema`, and check the exact ordered registry.
3. Apply the gates.
4. Run the inference.
5. Produce the reporting.

A structural failure is a recorded overall HOLD with exit code 2. It is never a crash and never a partial analysis. The output embeds the hashes of the decision, contract, manifest, CF-4 record, data, schema and code, plus the environment report (finding 08).

## 9. Required Reporting

For every T1 environment, T2, each U cell and each V pair, the analysis reports:

- the registered, valid and failed counts;
- the success proportion, with a two-sided 95% Clopper–Pearson interval;
- composite and valid-population summaries;
- measured values for gate-failed seeds, labelled descriptive only;
- failure reasons.

It also records the append-only ledger, and includes the selection-bias disclosure: valid-population analyses are conditional and do not identify an unconditional mechanism effect.

## 10. Mandatory Diagnostics (Finding 10)

These are descriptive and never change a primary label.

**Implemented:**
- T2: the source-1 and source-3 share changes, and full L1 displacement;
- U: binding-budget (C=0.8) total-reliance replacement.

**Final definitions from the author-delegated review** (implemented exactly; full text in `RC4_BUILD_AUTHOR_DECISIONS.md`):

- **Target-specific effects:** the per-target return change for every (replaced source v, target u). Each row sums to the total-reliance loss.
- **Action-TV:** at each `(I,S)`, compare the original coordinator policy with the policy averaged over `S_v′ ~ q(S_v|I)`, holding `S_−v` fixed; report both the joint-action TV for each source and each target marginal. This matches the hash-pinned historical exact evaluator and is not average pairwise TV.
- **Unique reliance:** the return loss when `S_v` is replaced by `q(S_v|I,S_−v)`. Under the registered independent-source fixture it equals total reliance exactly, so it serves as a structural check.

## 11. Environment and Provenance

`env/ENVIRONMENT_LOCK_RC4.json` locks:

- the interpreter version and executable hash, and the platform;
- **every installed distribution** (197) by name, version and RECORD-file hash. Two distributions have no RECORD file and are locked by name and version only;
- the import paths of the scientific stack;
- the torch build configuration hash;
- the vendored source hashes;
- the determinism variables.

`env/verify_environment.py` checks all of these, and the guard runs it before execution or analysis (finding 09). The runtime is the historical `.venv-e1-hel`, which uses system site-packages. Any drift is detected and refused; an isolated environment remains preferable and is optional.

Statements of zero access are **self-recorded** unless an access log supports them (finding 14).

## 12. Guard and Authorization Sequence

Execution, and adjudication, proceed only if all of the following hold:

1. The package manifest verifies and the package contains no unlisted file.
2. The contract matches `contract/EXECUTION_PIN_RC4.json`.
3. An adopted PCR-6 numbered `"PCR-6"` says GO and names the contract hash, the manifest hash, the CF-4 record hash and registry 9201–9701/501.
4. The CF-4 record has that hash, names the manifest, and states PASS.
5. The environment verifier passes.

The sequence is: complete RC4 → development dry run → freeze → eligible independent CF-4 PASS → author-adopted numbered PCR-6 GO → execution → assembly → adjudication.

## 13. CF-4 RC3 Finding Resolution

| # | Resolution in RC4 |
|---|---|
| 01 | Vendored closure, runner, readout, assembler, sealing and embargo; tested on development seeds |
| 02 | Decision 01 composite/valid strategy |
| 03 | Valid V bound, transport assumption, Planning 01/02, n = 501 |
| 04 | RC2 per-cell U disconfirmation preserved |
| 05 | Gates recomputed from raw fields with frozen thresholds; steps and checkpoint hash carried |
| 06 | Placeholders; structural HOLD instead of crash |
| 07 | Schema enforced with the locked `jsonschema` |
| 08 | Pinned contract, manifest, CF-4 and numbered-decision guard; full output provenance |
| 09 | Full distribution lock and complete verifier |
| 10 | All five diagnostics implemented; three definitions finalized, with action-TV aligned to the historical exact evaluator |
| 11 | Dual factor transcribed; ledger-hash resume; pre-first-checkpoint replay adopted |
| 12 | `nonbinding_pass` included in the T1 and U prerequisites (Decision 02) |
| 13 | Builders refuse overwrite; manifest builder refuses run artifacts and keys; flat archive layout at freeze |
| 14 | Zero-access statements labelled self-recorded |
| 15 | Strict boundaries retained |
| new | `evaluator.py` added to the locked closure |

## 14. Freeze Status and Remaining Gates

The final-code development dry run completed on seeds 9017 and 9018 only: 12/12 conditions, 168 chunks, zero failures. The locked-environment suite passed 38/38, including real-output assembly, gate recomputation and diagnostic identities. The contract was rebuilt after the final code change.

The remaining gates are external to this candidate:

1. an eligible independent CF-4 review of the exact frozen identities;
2. CF-4 PASS, if warranted;
3. an adopted numbered PCR-6 GO naming the exact contract, manifest, CF-4 record and registry.

No registered seed may execute before all three are satisfied.
