Skip to content

Latest commit

 

History

History
94 lines (71 loc) · 12.9 KB

File metadata and controls

94 lines (71 loc) · 12.9 KB

STAGE-2 RUN — Wave-2 Corpus Implemented, Gated, and Regressed

Dated: 2026-08-20. Implements STAGE2-CORPUS-DESIGN-2026-08-20.md (the Captain-approved Stage-2 design) on the frozen E2 script families, validates it through the design's wave gate, and runs the registered slope test against the new corpus with the filed machinery. No git commit made; the frozen E2 corpus (S1–S7 nights, wave-1 manifest, e2-field results, slope-regression results) is untouched and byte-verified. The only doc change is the dated registration addendum appended to research/topic.md (zeroclaw-dissertation repo; annotate-only).

1. What was implemented (files + changes)

File Change
scripts/e2_personas.py NEW_NAMES extended with new-1..new-6; the filed eight are drawn from the committed 20260819 stream (bit-identical, asserted), the six wave-2 draws from a fresh documented stream, seed 20260820 (wave date), same procedure
data/e2/e2-personas.json Regenerated: 14 new_personas; the filed 8 entries bit-identical (asserted by diff); w2_seed recorded; archetypes: new-1=drifter, new-2=essayist, new-3=writer, new-4=engineer, new-5=engineer, new-6=writer
scripts/e2_nights.py scripts() now returns the 9 T-tags (T1=S1, T2=S2, T3=A, T4a=S4a, T4b=S4b, T5=D, T5c=D-cold, T8=S3, T9=S5 — one log per ladder family); ATTENDANCE = the design §2 matrix (session-open rosters); staged drifter on T4a/T4b/T5/T5c (cold entry at first drifter speak, DRIFTER_LINES text preserved); generate() refuses overwrite (append-only), rebuilds the full manifest from disk, determinism-checked (all 9 byte-identical on re-run)
data/nights/night-T1..T9.jsonl The 9 wave-2 logs (generated, ~5.5 s; deterministic)
data/e2/e2-nights-manifest-w2.json New wave-2 manifest (the filed wave-1 manifest is untouched — design names no manifest file, append-only doctrine)
scripts/e2_instrument.py Adds W2_NIGHTS (T-tags → filenames + strata mirroring the mapped families), W2_NIGHT_LIST, FIELD_NIGHTS_W2 (the §2 matrix), COLD_ENTRY_W2 (drifter: T4a, T4b); Night falls back to W2_NIGHTS. PRIMARY_NIGHTS/FIELD_NIGHTS untouched
scripts/stage2_wave_gate.py New — the design §5.5 generation-time wave gate + the §3.1 precondition assertions (see §3)
scripts/slope_regression_w2.py New — wave-2 runner importing the unmodified scripts/slope_regression.py machinery (design §5.4's wiring change, implemented as an external runner so the filed script stays byte-identical); adds the §6-FM4 class-residual tripwire to the verdict
scripts/slope_regression.py UNMODIFIED (byte-identical; the working-tree state the Captain left it in)
research/topic.md (dissertation repo) Dated addendum appended verbatim from design §3 (see §5)

2. Wave-2 slope numbers (registered test on the new corpus)

PRIMARY (wave-2): slope = −0.3588, bootstrap 95% CI [−0.9354, +0.2817]; intercept 1.0690 [0.6773, 1.4110]; permutation null two-sided p = 0.2682. CI contains 0, excludes 1. All 21 readers pass the registered inclusion rule (n_nights ≥ 3 — the design's whole point; the wave-1 run had 7 of 15).

Per-reader points land exactly where the design's a priori x-table predicts (cold ≈0.465–0.507, mid ≈0.630–0.643, warm ≈0.697–0.718; 15 distinct x). y = baseline warmth-cos 0.515–0.999.

Sensitivities (labeled; the registered primary stands):

  • (a) actual-presence instrument: −0.2366 [−0.8071, +0.3645]
  • (b) class-residual y, E5-clean, 21 readers: −0.1261 [−0.2408, −0.0376]
  • (c) raw z-projection (units variant): −0.2198 [−1.2073, +0.7747]
  • (d) session-close room warmth: −0.2934 [−0.7270, +0.1254]

No variant contains 1 anywhere; all six readings sit at or near 0 (range −0.36…+0.03), small-negative.

Verdict: INDETERMINATE — leaning alignment; no collapse signal anywhere. The primary alone satisfies the registered alignment branch (CI contains 0, excludes 1, §3.1 preconditions hold), but the design's class-residual tripwire (§6 failure mode 4) fires: primary CI contains 0 while the class-residual CI [−0.2408, −0.0376] excludes 0 (upper bound −0.038, a knife-edge) — a CI-disposition divergence → per design, report both and make no alignment declaration on the primary. Both slopes are small-negative and exclude 1; the tripwire firing does not signal the imbalance pathology it guards against (the bands are balanced, no archetype majority; the residual slope is nearer zero than the primary, not spurious). Epistemic posture mirrors the wave-1 run: leaning alignment, not declared alignment — now with a 21-reader, Sxx = 0.197 corpus whose x-side is decisive (design power 0.95/0.80 at σ 0.117/0.15; SE = 0.264/0.338).

Guard re-file (attendance-dependent, new numbers per design §1/§5.5): wave-2 drift = 0.8084, E-cont spread = 0.4960 (wave-1 filed 0.7483/0.4556 — new rosters, new measurements, same mechanism). ICC re-measured before the slope was read: 0.9076, bootstrap CI [0.7832, 0.9112]above the filed 0.7714 CI [0.667, 0.810], so failure mode 6 (baseline instability) does not fire; baselines are stable reader constants under the new rosters.

3. Validation — wave gate + registered preconditions (all PASS)

python3 scripts/stage2_wave_gate.pydata/slope/stage2-wave-gate.json, ALL CHECKS PASS:

  1. Logged rosters == designed ATTENDANCE — 9/9 T-nights (session-open rosters match the §2 matrix exactly).
  2. corpus_sd reproduces 0.2367 (roster-invariant room side; engine-drift guard).
  3. Per-night warmth reproduces the filed ladder to 4 decimals — T1 +0.6551, T2 +0.3187, T3 +0.6551, T4a +0.4465, T4b +0.6319, T5 +0.6293, T5c +0.6293, T8 +0.7409, T9 +0.7589 — all exact.
  4. Band means within ±0.02 of targets — cold 0.4792 (0.48), mid 0.6384 (0.64), warm 0.7094 (0.71).
  5. All 21 readers ≥ 3 logged nights (attrition guard; mid band's 4-night buffer intact).

Task preconditions (design §3.1, void-by-rule), all PASS:

  • 21/21 unique visited-room sets — PASS (21 unique)
  • ≥ 3 distinct x — PASS (15 distinct; design claimed 15)
  • Sxx ≥ 0.19 — PASS (0.1971; design filed 0.1971, exact)
  • x-range ≥ 0.15 — PASS (0.2535; design filed 0.2535, exact)
  • no archetype majority per band — PASS (cold max 2/7, mid max 3/7, warm max 2/7)

Guard reproduction (engine undrifted): ran the filed scripts/slope_regression.py unmodified against the wave-1 corpus — its internal asserts reproduced corpus_sd 0.2367, E-cont spread 0.4556, drift 0.7483 exactly, and the results JSON was byte-identical before/after (sha256 374bcee9…), proving both the engine and the wave-1 artifacts are untouched.

4. Deviations from the design (each with reason; none improvised)

  1. T3 mapping (§5.1 text says "T3 = S3"). The design's own verified numbers force T3 ∈ {A, S1} (warmth +0.6551): tinker's a priori x = 0.4734 requires (0.3187+0.4465+T3)/3 = 0.4734 → T3 = 0.6551; T8 = S3 (+0.7409) is confirmed by essayist/captain/fiddler rows. With T3 = A (the A↔S1 warmth-identical pair, sanctioned by the design), every registered aggregate reproduces exactly (Sxx 0.1971, x-range 0.2535, 15 distinct x, band means). T3 and T1 are logs of the same canonical composition (SEG1+SEG2) under different tags/rosters.
  2. Three cosmetic typos in the design's x table (new-2 filed 0.5060 vs computed 0.5066; singer filed 0.6399 vs 0.6422; new-4 filed 0.6399 vs 0.6379). All registered aggregates (Sxx, range, band means, 15 distinct) reproduce exactly from correct arithmetic; the tabled cells are unused in any guard.
  3. Staged drifter on T5/T5c. The D/D-cold families contain DRIFTER_LINES by construction (night_d_script), and the ladder lists D/D-cold as +0.6293 — the lines are part of the family warmth (design's own T4a note). The drifter is not in the T5/T5c measurement matrix, so he is staged (cold entry @24) exactly as on S4a/S4b: text preserved, session-open rosters match the matrix, and FIELD_NIGHTS_W2 keeps drifter = {T4a, T4b, T2} per design (his staged T5/T5c readings are warmth content, not attendance).
  4. Persona draw seed. Seed-continuation (20260819 stream) drew new-3 = critic, giving the mid band critic 4/7 — a violation of the design's no-majority precondition (void-by-rule). The six wave-2 draws therefore use a fresh, documented seed 20260820 (the wave date; same procedure; w2_seed recorded in the JSON): new-1=drifter, new-2=essayist, new-3=writer, new-4=engineer, new-5=engineer, new-6=writer — 2/2/2 across bands, no majority. The filed eight remain bit-identical.
  5. slope_regression.py wiring. Design §5.4 names a --wave arg or wave-2 entry constant; the task rule keeps the filed script unmodified. The wiring is implemented as an external runner (slope_regression_w2.py) that imports the filed module unchanged — both constraints satisfied.
  6. Roster transcription errors caught during implementation (my first ATTENDANCE draft had critic on T1, missed blacksmith on T4b, and had engineer instead of new-4 on T5). All corrected to the design matrix; the gate asserts logged == designed, and it passes — the filed corpus reflects the design exactly.
  7. Manifest file. The design names no manifest file for wave-2; a new e2-nights-manifest-w2.json is used so the filed wave-1 manifest stays byte-identical (append-only doctrine).
  8. Class-residual tripwire in the verdict machinery (design §6 FM4, not §3): implemented as the design states — on divergence in sign or CI disposition, both slopes are reported and no alignment declaration is made on the primary. It fired (see §2); the verdict is INDETERMINATE, leaning alignment.

5. Registration addendum (appended verbatim to research/topic.md, dated, annotate-only)

### ADDENDUM 2026-08-20 (Stage-2 corpus wave — resolves the run's committee-open items; nothing above is altered)

  1. Corpus-design requirement (replaces the de-facto attendance degeneracy). Before analysis, the included set (n_nights ≥ 3) must satisfy: (i) no two readers share the same visited-room set; (ii) ≥ 3 distinct x values and Sxx ≥ 0.19; (iii) readers stratified into three x-bands (targets ≈ 0.48/0.64/0.71) with no archetype majority in any band. If (i)–(iii) fail, the run is VOID — INDETERMINATE BY RULE, and no branch reading is taken.
  2. Committee-open §1 (scalarization) — registered: PRIMARY = direction cosine of the z-standardized reliable-subspace baseline against the subspace-restricted, renormalized vmf.WARM (the run's choice; unit commensurability with warmth_vmf is what gives "slope ≈ 1" its meaning). Raw z-projection remains a labeled sensitivity.
  3. Committee-open §2 (room-warmth aggregation) — registered: PRIMARY = unweighted per-night mean of logged per-speak warmth_vmf. Exposure-weighting is rejected: night lengths are schedule-determined, and the registered object is the warmth of the rooms visited, not per-speak exposure. session_close final-window fit remains a labeled sensitivity.
  4. Committee-open §3 (x-side degeneracy) — resolved by design: inclusion rule unchanged (n_nights ≥ 3); the registration-relaxed all-readers variant remains a labeled sensitivity only. The corpus, not the rule, guarantees x-variance.
  5. Committee-open §6 (branch thresholds) — registered: ≈0 = bootstrap CI contains 0; ≈1 = CI contains 1. Alignment declared iff CI contains 0 AND excludes 1 AND §1 preconditions hold; collapse iff CI contains 1 AND excludes 0 AND preconditions hold; else INDETERMINATE.
  6. Power target (filed): n = 21 readers (7 per band), design Sxx = 0.197, x-range = 0.254; inference unchanged (bootstrap over readers, B = 2000; permutation null, 10,000).

6. What's left before this can be committed

  • Adjudication of the class-residual tripwire firing (knife-edge: residual CI upper −0.038): whether the primary's alignment-lean becomes a declared alignment under the addendum's branch rules, or stays INDETERMINATE-leaning-alignment. Committee decision; the design's letter says no declaration, which this run honors.
  • The design's own regeneration checks (e2_nights.py --verify determinism re-run) are green; a final git diff review of e2_personas.py / e2_nights.py / e2_instrument.py before commit.
  • The dissertation-side addendum in research/topic.md is uncommitted (annotate-only, no commit per rules).
  • Nothing in the frozen E2 corpus or the filed reports was modified; the wave-1 slope run remains the filed INDETERMINATE run under the original registration.

Reproduce

cd /home/eileen/projects/elephant
python3 scripts/e2_nights.py --verify        # determinism (all 9 T-nights)
python3 scripts/stage2_wave_gate.py          # wave gate + preconditions (<1 min)
python3 scripts/slope_regression_w2.py       # wave-2 slope + verdict (<1 min)
python3 scripts/slope_regression.py          # filed wave-1 run, guards re-asserted