#1776 smoke log (accumulates across rounds A-D; round D reads this for the report)
updated: 2026-09-03
Round A (Phase 0 infrastructure) — 2026-07-28
Env prefix on every command: OMP_NUM_THREADS=8 MKL_NUM_THREADS=8 OPENBLAS_NUM_THREADS=8 NUMEXPR_NUM_THREADS=8 MALLOC_ARENA_MAX=2; all run from the worktree root, timeout-bound; smoke outputs diverted to /tmp/issue-1776-smoke/ (scratch-dir redirect — no canonical eval_results//figures/ paths touched).
vendored jacobian-lens
external/jacobian-lens/@ commit581d398613e5602a5af361e1c34d3a92ea82ba8e(VENDOR_INFO.txt; Apache-2.0; 55 files, 2.5 MB, no nested.git). jlens auto-layout resolves Qwen2 (Layout("model"));ActivationRecorderhooksmodel.model.layers[k]OUTPUT = the plan §4 slot-pinned block-output convention.
lint
uv run ruff check scripts/issue1776_*.py && uv run ruff format --check scripts/issue1776_*.py→ rc=0 (5 files clean).
stage — probe-only at the run-start pin (REAL Hub)
uv run python scripts/issue1776_stage.py --report /tmp/issue-1776-smoke/stage_report.json→ rc=0.- Pin resolved:
superkaiba1/explore-persona-space-data@4bab2ac9f5a7b06f417d4cfb5834fc9da84ed405; all 6 reused stems ≥1 file at the pin (final_token_capture 1920 files — matches plan §10's 1,920; sampling_manifest 88; n1m_readout/weights 12; r_b 6; pass_a 78; pass_b bundle present by exact name). - Provenance chain (check (j)) re-run at the pin: monotone-coherent — pass_b 2026-07-01 ≤ manifest 2026-07-15 ≤ capture chunks 2026-07-15 ≤ weights 2026-07-22 (matches plan §10 dates).
- NOT-RUN at smoke:
--stage-bundle(6.02 GB download + verify_reused_artifact_keys mmap probe + {14,19}⊆layers assert),--parity-chunks N— pod-side staging phase; commands wired, copy-pasteable:uv run python scripts/issue1776_stage.py --stage-bundle --stage-weights --stage-rb --stage-manifest --parity-chunks 4.
jlens fit wrapper — tiny-real CPU (from-config 4-layer Qwen2, REAL Qwen tokenizer vocab space)
- fit (2 prompts, layers 1-2, dim_batch 16, max_seq_len 32): rc=0 →
lens_full.pt. - shard fits (2 shards × 1 prompt) +
merge: rc=0; merge-vs-full equivalence per layer cos ≥ 0.9999998, max|diff| 9.8e-4 (fp16 save round-trip) → MERGE_EQUIV_OK. sanity(G-LENS command path,--gate-informational): rc=0; verdict FAIL on the random tiny model (trend=0.000 with only 2 fitted layers; lastQ agreement 0.1386 vs chance 6.59e-6) — informational demotion works; the binding run is the pod-side 28-layer real-model gate.build-prompts(REAL C4 stream, n=3, bounded fetch): rc=0, 3 rows persisted + meta sidecar.
parity rig — tiny self-test (full rig body, layers scaled to 1/3 on the 4-layer model)
uv run python scripts/issue1776_parity.py --tiny-self-test --out-dir /tmp/issue-1776-smoke/parity→ rc=0.- Leg 1 (self-parity, capture-once=stored vs re-capture): 2/2 rows min_cos=1.000000 ≥ 0.999 → PASS; per-unit JSONL + progress lines + exclusion list written.
- Leg 2 (degenerate-gate probe): perturbed stored v_x row → 1/2 failed → exclusion list non-empty + sample-level HALT rc=8 branch fired as designed.
- Data-gate coverage: threshold-exclusion branch EXERCISED; >5% sample HALT branch EXERCISED; zero-norm assert not separately probed (guarded by assert, production-only).
comparator fit — synthetic CPU smoke (full fit body, H=64, n=2600, tr=2000/val=300/te=300)
uv run python scripts/issue1776_comparator_fit.py --smoke-synthetic --out-dir /tmp/issue-1776-smoke/comparator→ rc=0.- Reused #779 Gram-shared
fit_ridge_with_weightson the EXTENDED 28-pt grid 1e-6..1e8: selected λ=0.153 INTERIOR (edge=None), val R²=0.9895, test R²=0.9901; guideline-11 companions computed (identity+bias R²=−0.98 on the rotated synthetic map — expected; kNN euclid+cosine emitted). - Equivalence probe:
fit_ridgevsfit_ridge_with_weights— same selected λ, predictions allclose atol=1e-10. - n_train>d guard asserted in-path (
n_train=2000 > d=64; production 50,000 > 3,584).
NOT-RUN in round A (GPU-bound / pod-side; wired, not executed)
- Real-model jlens fit (8-GPU shard fan-out), real G-LENS gate, real 200-row G-PARITY, real m_ridge_x50k / m_ridge_lmsys50k fits via
N1M.assemble_multilayer(n1m chunk stream). Dispatcher (issue1776_dispatch.py/.sh) = round B.
Round B — J estimator + Phase 1-2 drivers (2026-07-28)
uv run python scripts/issue1776_jacobian.py smoke --out-dir /tmp/i1776_smoke_jac— rc=0. Digest: batched-vs-serial grad equality (max rel diff <=1e-6, all 3 arms); G-NONZERO PASS on tiny src=1/ro=3 (ctx_maxabs ~0.0258, validates block-output slot convention e2e); half-sum round-trip exact (J == count-weighted half mean); resume manifest MATCH branch skipped 2/2 done pairs; MISMATCH branch (perturbed seeds_sha) quarantined ckpt to stale-*/ + recomputed; same-layer (src==ro) construction refused (assert); G-NONZERO HALT branch fired rc-path on zero-field probe. Outputs: /tmp/i1776_smoke_jac/J_{prefix,ctx,last}.pt (5x64 rows), splithalf.json, gate_gnonzero.json.uv run python scripts/issue1776_phase1.py --smoke --out-dir /tmp/i1776_smoke_p1— rc=0. Digest: synthetic M' payload SVD -> 4 u_i seeds; per-direction table K=4 with nonzero gain_last on every row; phase1_table.json written.- Fenced-branch probes (not covered by the two smokes) — rc=0:
build-seeds(16x64 unit-norm seeds: 10 v-PCs + 4 M' u_i + 2 Gaussian, names correct);merge-shards(1-shard merge rows == shard rows, (64,64) per arm); full-mode cyclic pair->seed assignment uniform at 350 seeds/pair (3584 seeds x m=150 / 1536 pairs); deferred non-tiny imports (AutoModelForCausalLM/AutoTokenizer, issue1776_jlens_fit) resolved on the real branch. - Invariant scans: tests/test_no_direct_task_path_construction.py + test_no_pod_side_task_py_shellout.py + test_no_dollar_budget_caps.py — 21 passed. select_step9c_tests --map-files on both new files: 0 hits.
- NOTE (plan-prose delta, for round D report):
jca_lastreads index prompt_len-1 (last token of the add_generation_prompt=True render) — the exact cx_last(14)/DeltaHook slot per the §4 slot-pinning block; the plan bullet's literal "context_end-1" (end of query text) is a different, non-unit-matched index and was read as prose shorthand for "last prompt token".
Round C1 — Phase 3 steered generation + off-pod judge (2026-07-28)
uv run python scripts/issue1776_phase3.py --mode smoke --out-root /tmp/i1776_smoke_p3— rc=0. Digest: tiny from-config Qwen2 (H=64, src=1/ro=3), 2 ctx × 1 α × 2 directions (evil r_B row + w1_mprime from a synthetic ridge payload) × K=2 + baseline; DeltaHook prefill-only fired (n_hook_edits=2/steered stratum); rollout text persisted BEFORE capture (raw_completions/steered/{baseline_a0,evil_a50,w1_mprime_a50}.json, 2 ctx × 2 samples each); per-sample v_{L'} summaries persisted (summaries/*.pt, (n_kept,64)); per-cell table EXACT 6 rows (2 ctx × 3 strata) with cos_pred_{jlast,mprime} computed on every steered row; resume MATCH skipped 3/3 done strata; MISMATCH (perturbed seed_base) REFUSED as designed; degenerate gates: non-square (sketch) J refused at prediction_legs + all-empty-samples cell row (n_kept=0, None reads, coherence_pass=False). Smoke-only params α=50/temp=0.05 (documented in-code: the 0.02-init tiny net's near-uniform logits flip NO token at temp 1.0 even α=5000 — measured; temp 0.05 keeps the do_sample=True production branch and flips 4/4).uv run python scripts/issue1776_judge.py --mode smoke --out-dir /tmp/i1776_smoke_judge— rc=0. Digest: remote API mocked ONLY at the transport seam (anthropic.AsyncAnthropic/.Anthropic client classes; EPS_JUDGE_DISABLE_MULTIORG=1 for the deterministic single-client sync path); REAL evil rubric artifacts + judge_rollouts_n5 N=5 draw fan-out + custom_id scheme + parse + drop-never-coerce; 35 wire calls (7 kept completions × 5 draws; 1 empty completion skipped); splits EXACT per (trait,stratum): evil_a1 valid=10/content=5 (REFUSAL)/transport=5 (real anthropic.APIConnectionError → transport:True flag → is_transport_error_dict); baseline content=5 (malformed)/transport=0/n_empty=1; steered−baseline delta 0.0 (both arms mean 85); OTPM probe served by the fake sync client header; rc=4 transport-threshold gate fired WITH judge_scores.json written (route-on-artifact).- Post-checks: ruff +
test_ruff_policy::test_live_workflow_helpers_clean_under_full_rulesetPASS;select_step9c_tests.py --map-fileson both new files: 0 hits (sweep_scope: selector-universe); tests/ literal grep: 0 hits (new files, no deletions); repo-wide invariants (no_direct_task_path, no_pod_side_shellout, no_dollar_caps) 21 passed; deferred real-branch imports (AutoModelForCausalLM/AutoTokenizer) resolved + load_model signature bound. - NOT-RUN (GPU/pod/API-bound, round C2/D): real-model Phase-3 grid, HF upload of raw_completions/steered (dispatcher wiring — manifest carries hf_dest_prefix), real Batch-API judge run. NOTE for round D: judge default judges the 7 control strata (baseline/w1/random) under all 3 rubrics ≈30k×5 calls vs plan §9's 16k×5 one-rubric-per-completion pricing — trim via --control-rubrics if the budget binds.
Round C2a — Phase 4 J-space mediation + §5 contexts builder (resume of dead spawn; 2026-07-28)
uv run python scripts/issue1776_phase4.py smoke --out-dir /tmp/i1776-p4-smoke— rc=0. Digest: synthetic V=200×H=32 unit-row dicts (L14/L19); in-dictionary probes reconstruct (span>0.99, pursuit mean>0.9); energy read over 2 read-side + 2 write-side probe sets × BOTH projectors × all 3 null families (rotation/isotropic/cov, 8 draws, per-ROW re-selection inside every draw) — null bands sane (~0.58–0.62, p975<0.99 asserted, band-to-ceiling ≥0 next to every energy); refit-split round-trip on a planted P_J-subspace map (pj R²=0.998 > perp R²=−0.003 +0.3 margin; full/random_subspace_ref + variance fractions emitted); jdelta-split round-trip on a synthetic phase-3 root (δ_J/δ_⊥ split, 0<frac<1). TWO smoke-found fixes: (a) cov null now bound on the read side too (smoke passed acts14=None → fail-loud assert; production MUST pass --acts14 AND --acts19); (b) smoke dict RNG seed decoupled from ns.seed (shared seed=0 made null_probe_rows REPLAY the dict's randn stream → null rows == dict atoms, null pinned 1.0; now asserted <0.99).uv run python scripts/issue1776_phase4.py build-dict --tiny --lens <tiny fitted lens> --layer 2 --out ... --device cpu— rc=0 after a REAL bug fix:JF.load_lens_modelreturns a 3-TUPLE (lens_model, hf, tok); the dead spawn's tiny branch treated it as a model (lens_model.model→ AttributeError on the tuple). Digest: (151665, 64) fp16 unit-row dictionary (unit-norm ok, row_norms>0), from a tiny lens fitted viaissue1776_jlens_fit fit --tinyon 2 prompts (rc=0). Deferredfrom jlens.lens import JacobianLensexecuted on the real branch; non-tiny branch'sAutoModelForCausalLMimport +dtype=kwarg verified against pinned transformers 4.57.6 (dtype is a real honored param).uv run python scripts/issue1776_contexts.py --out ... --smoke— rc=0. Digest: 200 rows = 100 lmsys_test_pool (synthetic round-1 stream under --smoke; ctx0/sha pins skipped by design) + 100 trait_rig_{evil,sycophancy,hallucination} (REAL in-repo #779 banks, eval_questions-first round-robin); schema {context_id,user,system,source}; meta.json with order_sha + repro. Cross-module contract probe: emitted JSONL round-trips throughissue1776_phase3.load_contexts(200 rows, exact key set). STAGING NOTE for C2b dispatcher: trait leg readsdata/issue_779/artifacts/{sycophancy,hallucination}.json— a GITIGNORED local cache (copied repo-root→worktree for this smoke); the pod/GCE lane must stage it (or run the builder VM-side) — it does NOT travel with the branch clone.uv run python scripts/issue1776_phase3.py --mode smoke --out-root /tmp/i1776-p3-smoke— rc=0 on the MODIFIED phase3 (sharding flags default-off → e2e + resume MATCH/MISMATCH + degenerate gates all re-pass). New--finalize-onlyprobed against the smoke's sharded-shape out_root: rc=0, steered_shift_summaries.json + raw_completions_manifest.json rebuilt under a fresh --eval-out (bank/manifest read from the run's own persisted artifacts; done-count floor 3≥3).--baseline-only/--strata-shardlegs are early-return + list-filter (audited; exercised e2e by the C2b dispatcher).measured_shifts(phase4 write-side) probed against the REAL phase3 smoke root: 2 strata, (64,)-dim Δv̄, norms 0.030/0.038.- Common.py delta:
atomic_write_jsontmp now PID-unique (concurrent shard writers of manifest.json cannot truncate each other mid-write). - Post-checks: ruff + format clean on all 4 files;
select_step9c_tests.py --map-fileson the 4 files: 0 hits (sweep_scope: selector-universe); repo-wide invariants (no_direct_task_path, no_pod_side_shellout, no_dollar_caps) 21 passed. - NOT-RUN (GPU/pod-bound, C2b/D): real lens dictionary at 3584-dim, energy at k=25/100 draws on GPU, refit-split on the real pass_b assembly (n=50k), real LMSYS round-1 re-stream + sha-pin assert (bounded ~5k-row fetch; runs where the dispatcher builds contexts).
Round C2b-i — Phase 5 transfer + free analyses (2026-07-28)
- NEW
scripts/issue1776_phase5.py(7 subcommands: stream / capture / transfer / leakage / lens-vocab / chain / smoke). All smokes CPU, thread-cap prefixed, timeout-bound, outputs diverted to/tmp/i1776-p5-smoke/(scratch-dir redirect;git status --porcelain -- eval_results/ figures/clean). smoke --legs stream(tiny-REAL WildChat, network): rc=0. Done-line reject counters per filter (rej_empty/rej_excluded/rej_dup); kept=2>0 asserted; fingerprint-resume complete-cache branch fired (RESUMED complete cache, stream skipped); exclusion branch exercised on REAL rows (excluding pass-1's 2 prompts →rej_excluded=2, next 2 kept, disjointness asserted). Data-gate probes: scan-cap assert + 0-kept assert are the same counters path (exercised at tiny n by construction of the 2-keep run); short-pool RuntimeError production-only (needs exhaustion).smoke --legs transfer(synthetic planted map, H=32 n=400, full production body): rc=0. Ridge op viaN1M.apply_map+ J-affine arm both recover the planted map (R²>0.9); vectorized bootstrap CI (subset-sum GEMM, 200 draws) brackets R²; identity+bias + kNN (euclid+cosine, acc@1>0.9) per §6 guideline-11; decay block emitsrelative_decaygated on base-leg-clears-identity-bias (§6 diagnostic).smoke --legs leakage(REAL committedeval_results/issue_532/{predictors.json,per_cell/}; synthetic H=32 centroids keyed to REAL pool persona names + synthetic unit-row dict @ L21): rc=0. Label→pool mapping by EXACT persona-prompt text match: 5 mapped (A1→assistant, A2→software_engineer, A3→pirate, A4→comedian, A5→villain; B/C/D + instructed panel unrepresentable in the bank — coverage reported per arm: 20/416 loc_ep1, 20/140 loc_ep2 pairs). Four similarity legs (raw/pj/perp centered-cosine + predictors.json reference cosine) × Spearman ρ + vectorized bootstrap CI (rankdata axis=1), finite on both arms. Centroid sha-pin branch skipped ONLY under--allow-unpinned-centroids(smoke flag); production asserts sha vsmatrix_v1_L21_raw.json built_from.centroids_sha256.smoke --legs lens(5c+5d on a REAL tiny fitted lens —jlens_fit fit --tiny2 prompts--skip-first 2→phase4 build-dict --tiny@ layer 2, (151665,64) real-Qwen-vocab dictionary): rc=0. 5c word tables: M′ SVD input/output dirs + synthetic r_B row decoded to real token strings. 5d chain: planted v̂ (lstsq onto each context's own response-token dictionary row) → MRR=1.000 vs shuffled-pairing null 0.190, recall@50 0.267 vs null 0.050 — planted signal ≫ null, null machinery exercised (50 draws). SMOKE-FOUND BUG:P4.main()ends in unconditionalsys.exit(rc)— the in-process call silently terminated the smoke rc=0 (false-pass shape); fixed by callingP4.cmd_build_dictdirectly (comment in-code).smoke --legs binds: 7 GPU-only capture-path call shapes signature-bind (_capture_stage_chunk/_flush_upload_batch/_build_capture_engine/_filter_overlength_prompts/_rendered_prompt_token_len/N50._remote_index/N10._generate); deferred non-smoke imports executed on the real branch (AutoModelForCausalLM/AutoTokenizer,datasets.load_dataset,scipy.stats,HfApi) +N1M.apply_map/assemble_multilayerbinds.- NOT-RUN (GPU/pod-bound, C2b-ii dispatcher): real WildChat 1,000-row stream+capture (vLLM gen via the verbatim #779 n1m rig; raw text + capture .pt flushed in the SAME batched Hub commit under
issue1776_jacobian/wildchat_fresh/{final_token_capture,raw_completions}/),transfer --assemble(n1m chunk stream → test-1000 leg + LMSYS-train anchors), real dictionaries @ L14/L19/L21, real centroid bundle staging (centroids_v1_L21.ptsha-pinned), pass_a battery leg (re-capture fallback =capture --poolon battery prompts). - Cross-round gate fix (carrying rounds A–C2a):
tests/test_shared_vm_thread_caps.py::test_no_new_torch_before_dotenv_vm_entrypoints(mapped byselect_step9c_tests --map-fileson the new file; frozen allowlist, no new entries permitted) flags every tracked issue1776 script with module-top numpy/torch and no LITERAL in-fileload_dotenv(— the sharedissue1776_commonimport binds the caps functionally but the scan is per-file. Inserted the 2-line literalload_dotenv()(idempotent) into all 8 heavy-import issue1776 scripts; suite now 19/19 PASS with the new file staged; all 8 re-import + quick smokes re-ran green. - Post-checks: ruff + format clean (12 files);
test_ruff_policy::test_live_workflow_helpers_clean_under_full_rulesetPASS; repo-wide invariants (no_direct_task_path, no_pod_side_shellout, no_dollar_caps) 21 passed; pin-sweep--map-files→ 1 hit (tests/test_shared_vm_thread_caps.py, run above; sweep_scope: selector-universe); tests/ literal grep: new file only, no deletions.
Round C2b-ii — run-orchestration dispatcher (2026-07-28)
- NEW
scripts/issue1776_dispatch.sh(plan §10 workload command:REPO_ROOT="${WORKLOAD_ROOT:-$PWD}" bash scripts/issue1776_dispatch.sh --mode full|smoke). Sequences per §9: p0_stage (stage.py + trait-artifactsissue779_monitoring/artifacts/{sycophancy,hallucination}.jsonstaged todata/issue_779/artifacts/at the pin + centroidsissue483_canonical_persona_pool/centroids_v1_L21.ptsha-asserted vs bank meta) → p5a stream BG launch (CPU/network, §9-concurrent) → G-PARITY (rc=8 → program halt) → comparator x50k+lmsys50k BG on last GPU (§9: concurrent with P0.1 tail) → jlens build-prompts/fit-fan(N−1 GPUs)/merge/G-LENS (rc=8 → LENS_OK=0, dict/p4/5b legs skipped, terminal[phase=gate_halted]+ exit 8) → build-dict L14/L19/L21 (phase4 via SUBPROCESS only — its main() sys.exits) → p04 J-pair manifest (seeded chunk-permutation lazy download of #779 raw_completions at the pin; LMSYS train rows viaN1G.read_manifest_poolcorpus labels; digest-only report) + sharded teacher-forced capture (parityrecompute_rowrig; cx14/cx19/v19 → v_pool/acts14/acts19) → contexts → sketch (build-seeds + shard fan + merge; G-NONZERO rc=8 halt) → phase1 → EARLY upload (#825: all pre-P2b tensors+manifests, batched create_commit +verify_repo_paths_uploaded) → full-rank (seed-block shard fan ×NGPU, m=150) → J upload → phase3 (baseline-only → strata shards ×NGPU → finalize) → rollout-TEXT upload BEFORE p4/judge → phase4 energy/refit-split/jdelta (3-way BG) → stream join → wildchat capture fan (self-uploads, explicit --hf-prefix) → transfer (--assemble; ops mprime_x50k/lmsys50k@14 + shipped-M glob*l19*if resolvable + J_{last,ctx,prefix}; legs lmsys_test1000+wildchat_fresh — covers P2c reads) → p5b leakage POD-side (§9 lists it off-pod p7; deviation recorded in the final sentinel — inputs all local here) → results commit (#1205 rev-list push-verify + #1325 per-file ls-tree assert; SKIPPED in smoke/dry — smoke EVAL_DIR + HF prefix divert to$OUT_ROOT/...+issue1776_jacobian/smoke_probe/) → terminalepm:results/epm:smoke-resultsentinel then[phase=done]. Judge EXCLUDED (off-pod p6); final sentinel carries the handoff +--control-rubricsone-rubric-per-completion pricing trim note. G-PILOT rc=7 routed as designed halt. Progress ticks: write-onceissue-1776-phase-*-<ms>.json(kind epm:progress, gatephase-*→ drain posts verbatim); never re-read (state under $OUT_ROOT). Phase-script stdout redirected to per-phase logs (reserved-token lint clean). launch preambleassert_out_root_headroom(full 40 GB / smoke 15 GB); UV_NO_SYNC=1 on fan-out (§8). - Smokes:
bash -nOK; dry-run (--dry-run, /tmp root, no GPU/Hub/model, NGPU=8) → DRY-RUN-OK: 23 phases exactly EXPECTED_ORDER (§9 order asserted in-script), 46 sentinels round-trip_SENTINEL_REQUIRED_KEYSparse (45 epm:progress + 1 epm:smoke-result), final-sentinel §10 shape asserted (eval_json_paths/hf_prefixes/offpod_handoffs/gates/wandb/git_commit + control-rubrics note); standalone tick+final re-parse OK; full-mode dry cmds spot-checked (parity n=200, m=150, 8 shards, CVD 0..7). - Lint-driven sibling fixes (workflow_lint no-flags was FAIL(10) pre-round on the branch): phase3/judge reserved
[phase=done]emissions renamed[phase=phase3_done]/[phase=judge_done](#545 reserved-token class; dispatcher redirects their stdout anyway); phase5 capture--hf-prefixdefault None + fail-loud assert unless --no-upload (#1005 upload-prefix clobber class; assert fire verified); 7 RC_CAPTURE_EXEMPT waivers on non-blocking progress-tick/run||rccaptures. workflow_lint now PASS. - Post-checks: ruff + format clean (3 touched .py);
select_step9c_tests --map-files(path-list form) → 1 hittests/test_shared_vm_thread_caps.py(sweep_scope: selector-universe; WARN: no mapped test for the new .sh — src/scripts dependency floor) — ran it + the 3 repo-wide invariants (no_direct_task_path, no_pod_side_shellout incl. .sh scan, no_dollar_caps): 40 passed. - NOT-RUN (pod-side, round D / launch):
--mode smokeon the pod (real model, same chain/width, tiny slices: parity n=8/1 chunk, jlens n=4 --limit 4, 8 pairs, seeds 12/topk4/gauss2, sketch limit 2, m=1, n_train=3600 (>d=3584 well-posed floor), p3 2 ctx × K1 × α4 (3 strata ≥ finalize floor 3), wc keep 2 --allow-short, nboot 50, ndraws 8, smoke_probe Hub prefix); real Hub uploads; shipped-M weights-file glob resolution (report notes fallback if unresolved).
Round D — closing verification (2026-07-29; no feature code)
- Smoke-coverage audit vs pipeline phases (stage/parity/comparator/lens/contexts/sketch+full-rank J/phase1/phase3/judge/phase4/phase5 stream+capture+transfer+leakage+vocab+chain/dispatcher): all CPU-smokeable phases evidenced above; GPU/pod-bound legs enumerated (binding smoke = pod-side
--mode smoke). No new smokes needed. - Gate-scope:
select_step9c_tests.py --map-files <path-list of the 61 branch-diff files>→ 12 pairs → 1 hit filetests/test_shared_vm_thread_caps.py(sweep_scope: selector-universe; WARN no mapped test for dispatch.sh — covered by no_pod_side_shellout .sh scan); tests/ grepissue1776→ 0 hits, diff has 0 deletions (grep supplement empty). Union run: hit file + 3 repo-wide invariants + ruff-policy pin → 41 passed in 95.6s. Ruff + format clean (12 py files);bash -ndispatch.sh OK.slow_tests_selected= tests/test_workflow_lint.py → deferred to Step 9c gate (workflow_lint no-flags green in C2b-ii). - Concerns persisted (concerns.jsonl, CONCERN ×3): shipped-m-l19-glob-fallback / p5b-podside-vs-offpod-deviation / judge-control-rubrics-pricing. Handled-in-plan (no row): pass_a re-capture fallback (§9 budgeted), --serial-grads fallback (§8 risk row, batched==serial smoke-verified).
- Markers posted:
epm:smoke-architecture-check v1= PASS_UNIFIED (per-arm: all §5 arms REAL; phase5 GPU capture N/A carve-out);epm:experiment-implementation v1(report via --file).
Round 2 — code-review v1 fix round (2026-07-29)
(Log relocated from repo-root .claude-1776-smoke-log.md to docs/issue_1776_smoke_log.md per review v1 Minor 7.)
- C1 sketch-shard fix — reviewer reproduction re-run GREEN. Pre-fix repro (exact reviewer command):
uv run python scripts/issue1776_jacobian.py smoke --num-shards 2 --out-dir /tmp/i1776-r2-shardrepro→RuntimeError: index_add_(): Number of indices (2) should be equal to source.size(dim): (5)atjacobian.py:245(rc=1, reproduced pre-fix this round). Fix:seed_mat, local_idx = seeds[lo:hi], shard_seeds - lo(per-shard seed slice; also removes the NGPU× redundant backward). Post-fix same command → rc=0, all legs PASS incl. the NEW smoke leg 6: the SAME sketch run as 2 shards +merge-shards, asserting merged J == single-shard J per arm to ≤1e-6 rel (merged prefix/ctx/last: torch.Size([5, 64]) from 2 shards). merge_shards now sizes rows by max(hi) (a sketch merge is (n_seeds, H), keeping phase3's non-square-sketch refusal meaningful) + an all-rows-covered assert (clamp(min=1) no longer silently zeroes a missing shard's rows). - C2 phase2 deliverables. NEW
scripts/issue1776_phase2_battery.py(§4 P2c(ii)): raw operator cosine + rotation null (raw_cosine_with_rotation_null), Procrustes-aligned cosine =spectrum_cosinetwo-sided operator-Procrustes optimum vs the #825 anchor 0.6864, descriptive spectrum rows (shipped-M cross-slot spectrum-ONLY row), all direction-aware reads restricted to the top---n-pcsinput PCs of cx_last(14) over the J-pair corpus (acts14.pt; on-support Frobenius mass reported). Smoke:uv run python scripts/issue1776_phase2_battery.py --smoke→ rc=0 (identical operators: raw cos > 0.99 ≫ null p975+0.5, Procrustes ≡ 1.0; independent operator inside 4σ of the null mean; non-square-J refusal fires) — also executes the REALissue1345_operator_comparisonimport chain. Dispatcher: newp2c_batteryphase after p2_upload writeseval_results/issue_1776/phase2/operator_battery.json(smoke--n-pcs 4— acts14 has 8 rows; full n_pcs=256, n_draws=100); SHIPPED_M resolution hoisted there.phase2/jvm_heldout.jsonemitted by transfer via new--jvm-heldout-out(base-leg operators block + pointer to transfer.json), verified in the phase5 transfer smoke (below). Both land in EVAL_DIR → p_results_commit push+ls-tree assert covers the §6.5 globs. - C3 upload parity.
list_add_required(fail-loud; DRY delegates to list_add) for every expected-present artifact; conditionallist_addkept ONLY for LENS_OK-gated dicts + glob loops. Fixed the silentcontexts/meta.json→contexts/contexts.meta.jsontypo (contexts.py writes<stem>.meta.json). Addedjlens/jlens_prompts.jsonl+.meta.jsonto EARLY_LIST. Added ap5a_pool_uploadbatch inside p5a_stream_join (pool + pool.meta + stream_report →wildchat_fresh/BEFORE the GPU capture consumes it, #825 ordering). - M1 all_positions arm wired. Full mode
P3_EXTRA=(--all-positions-subset 50)(plan §4 50-context exploratory subset); smoke mode adds--all-positions-subset 1(per-arm-class smoke coverage). Off-pod judge handoff now names--include-allpos. - M2 hook-parity probe (phase3 smoke):
uv run python scripts/issue1776_phase3.py --mode smoke --out-root /tmp/i1776-r2-p3smoke→ rc=0. Probe: DeltaHook armed at L=source_layer on the tiny model; a capture hook registered AFTER the DeltaHook reads blocks[L]'s post-edit output == ref hidden_states[L+1] + α·Δ EXACTLY at T−1 (atol 1e-4), byte-zero elsewhere; blocks[L−1] outputtorch.equalto ref hidden_states[L] (re-verifies the slot convention in passing); readout hidden_states[L'+1] moved at T−1 ONLY. Measurement finding (surfaced BY the probe, first draft failed on it): on transformers 4.57.6 theoutput_hidden_statesrecorder captures each block's output BEFORE later-registered user forward hooks mutate it — the recorder tuple at the EDIT layer keeps the pre-hook value (edit visible only downstream). Production unaffected (all phase-3 captures run UNHOOKED); recorded in-code + probe printsrecorder sees the edit at L: False. - Exclusion-list consumers (concern
parity-exclusion-list-unconsumed): (a) P0.4 jpairs builder loadsexclusion_list.json(fail-loud if missing) and skips failed-parity cis at the CORPUS (both arms, J and M′, never see them; count in jpairs_build_report); (b) comparator--parity-exclusiondrops the ci-mapped rows (via the assembleci.npymemmap) from the train pool, threaded on both comparator_job invocations,n_parity_excludedin the report; smoke probe:select_train_rows(extra_excluded=[0,1,2])→ excluded rows never in tr (comparator smoke rc=0); (c) transfer.json records the domain fact: the test-1000 leg is pass_b head rows (ci=−1), structurally OUTSIDE the parity sample — no exclusion can apply there by construction. - Shipped-M reproduction (assumption 3): pinned ref
SHIPPED_M_TEST_R2_REF=0.7541708417500051(source cited in issue1776_common.py: committed n1m_fits.json per_point.mixed_1m ridge whole_map_r2) ± 0.005; recorded in transfer.json + jvm_heldout.json asshipped_m_reproductionwith the m_shipped row labeledreference_validated; WARN (not a halt — §7 names no such gate). Phase5 transfer smoke:uv run python scripts/issue1776_phase5.py smoke --out-dir /tmp/i1776-r2-p5smoke --legs transfer→ rc=0 (planted map recovered; jvm_heldout.json written; the OUT-of-tol WARN branch exercised via an m_shipped alias whose r2 ≫ ref). - Other minors: phase1 output renamed
phase1_table.json→directional_table.json(§9 name; phase1 smoke rc=0 →directional_table.json); build_prompts pins + records the C4dataset_revision(tiny-real probe:build-prompts --n 2 --min-chars 100 --shuffle-buffer 8→ rc=0, metadataset_revision=1588ec454efa…); phase3 validates--contextsBEFORE the 7B load; final-sentinelplan_deviationnow records BOTH deltas (p5b pod-side; 5c/5d off-pod move). - Dispatcher dry-run:
bash scripts/issue1776_dispatch.sh --dry-run→DRY-RUN-OK: 24 phases in §9 order; 48 sentinels parse (1 epm:smoke-result + 47 epm:progress)(EXPECTED_ORDER now includesp2c_battery);bash -nOK. - Lint/gates:
uv run ruff check+ruff format --checkclean on all 13 issue1776 files (repo-wide 35 pre-existing errors in UNRELATED legacy files — none in this round's diff);tests/test_ruff_policy.py::test_live_workflow_helpers_clean_under_full_rulesetPASS;workflow_lint.py(no-flags) PASS. Pin-sweep:select_step9c_tests.py --map-files <round-2 diff files>→ 1 hit filetests/test_shared_vm_thread_caps.py(sweep_scope: selector-universe); moved/renamed-literal greps (phase1_table,claude-1776-smoke-log) → 0 hits in tests/scripts. Union run: hit file + 3 repo-wide invariants (no_direct_task_path, no_pod_side_shellout, no_dollar_caps) → 40 passed in 79.7s.
Round 3 — concern-closure (post-PASS; 2026-07-29)
Four open persisted CONCERNs closed; no other changes. Verification runs:
shipped-m-l19-glob-fallback: exact staged pathWEIGHTS_DIR/L19/ridge.pt(plan §10 layout,issue779_n1m_readout.py:201) is now PRIMARY; glob is fallback; unresolved reference arm FAILS LOUD unless--allow-missing-reference-arm(omission then recorded atphase2/shipped_m_reference_omitted.json— committed with the eval JSONs — + the final sentinel). Smoke:bash /tmp/i1776_r3_shippedm_harness.sh(sed-extracts the SHIPPED block fromissue1776_dispatch.sh— tested bytes are shipped bytes) → rc=0, 4/4 scenarios: S1 exact-path wins; S2 glob fallback + NOTE; S3 unresolved+no-flag → rc=1 FATAL; S4 unresolved+flag → rc=0 + omission JSON withallow_missing_reference_arm: true. Fails-pre-fix evidence: the OLDfind -name '*l19*.pt'glob on the canonicalL19/ridge.ptlayout resolves NOTHING (basename-only, case-sensitive match) — the reference arm would have silently dropped in EVERY production run.p5b-podside-vs-offpod-deviation: pod-side stays DEFAULT (inputs local: centroids + L21 dict staged/built on-pod);EPS_1776_P5B_OFFPOD=1skips the pod-side leg; the final sentineloffpod_handoffs.p5b_leakagenow carries the exact off-pod invocation (issue1776_phase5.py leakage --centroids … --dict … --n-boot … --out …) in BOTH branches, andplan_deviationrecords the deviation + rationale per branch (dispatcher comment updated too; analyzer carries as ops/scope caveat). Smoke:bash scripts/issue1776_dispatch.sh --dry-run→ rc=0DRY-RUN-OK: 24 phases; 48 sentinels parseANDEPS_1776_P5B_OFFPOD=1 bash scripts/issue1776_dispatch.sh --dry-run→ rc=0 same; sentinel inspection: default variant says "ran POD-side … EPS_1776_P5B_OFFPOD=1 selects the plan-literal off-pod lane", offpod variant says "SKIPPED pod-side (EPS_1776_P5B_OFFPOD=1)"; new dry-run asserts pin the handoff (issue1776_phase5.py leakagesubstring) + deviation note.judge-control-rubrics-pricing: DEFAULT is now the plan-§9-pricedcontrastpolicy — trait strata under own rubric; baseline under EVERY trait rubric (the α=0 term of each registered per-trait contrast, plan §6 PRIMARY DV); w1_mprime/random contexts ONE rubric each, deterministic round-robin over--traitsin persisted context order (≈18k×5 calls ≈ plan's 80k+5k-headroom estimate, vs ~30k×5 before). Opt-in--all-control-rubricsrestores the all-rubrics mode; explicit--control-rubricsstill overrides. Report recordscontrol_rubric_policy. Smoke:uv run python scripts/issue1776_judge.py --mode smoke --out-dir /tmp/i1776_r3_judge_smoke→ rc=0PASS (35 wire calls; splits exact; contrast partition disjoint+covering+deterministic)— main leg runs under the DEFAULT contrast policy (1-trait == pre-policy counts, 35 wire calls exact) + a zero-wire 3-trait partition check (7 random-stratum contexts → exactly one rubric each, disjoint+covering, identical on a second pass; baseline 2 contexts × 3 rubrics).p2c-battery-no-idempotency-skip:run()now skips when the output exists with a MATCHING regime fingerprint (theinputsblock: jlast/mprime/acts14/shipped_m paths + n_pcs/n_draws/seed — n_pcs newly added to the manifest),--forcerecomputes, MISMATCH/unreadable prior recomputes (sibling jacobiantry_resume/phase3-manifest convention, #722 r3 regime-key rule). Smoke:uv run python scripts/issue1776_phase2_battery.py --smoke→ rc=0PASS (… resume skip/--force/mismatch exercised)— run()-level leg on real tiny .pt fixtures: fresh write → matching re-run leaves mtime_ns unchanged →--forcerewrites →n_drawschange rewrites with the new fingerprint persisted.- Lint/gates:
bash -n issue1776_dispatch.shOK;ruff check+ruff format --checkclean onissue1776_judge.py+issue1776_phase2_battery.py. Pin-sweep:select_step9c_tests.py --map-files <4 round-3 files>→ 0 hit files (sweep_scope: selector-universe).
Crash-fix round — p0_stage centroids 404 + heredoc migration (2026-07-29)
Crash under fix: att-20260729-060640 died rc=1 at phase=p0_stage, third sub-command (the inline
stdin-python heredoc staging centroids_v1_L21.pt); its stderr lived only under $PHASE_LOGS
($OUT_ROOT/logs), which the GCE crash trap does not persist.
- Root-cause reproduction (pre-fix rc=1): heredoc body extracted verbatim
(
sed -n '309,347p' issue1776_dispatch.sh) and run with the dispatcher's exact invocation shape (uv run python - "$PWD" /tmp/... < body.py, cwd = repo root,PYTHONPATH=$PWD/scriptsas the dispatcher exports) → deterministic rc=1 in ~5 s:huggingface_hub.errors.EntryNotFoundError: 404 ... /resolve/main/issue483_canonical_persona_pool/centroids_v1_L21.pt. The heredoc's Hub path omitted thecentroids/directory segment — a scopedlist_hf_files_under_pathshows the bundle atissue483_canonical_persona_pool/centroids/centroids_v1_L21.pt. (A PYTHONPATH-less first repro instead diedModuleNotFoundError: issue1776_common— stdin-mode python resolves repo modules only via the dispatcher's PYTHONPATH export; a second latent hazard of the inline form, though NOT the production killer.) - Fix (structural, per "committed scripts invoked by path, never inline interpreter bodies"):
centroids + trait-artifact staging moved into
issue1776_stage.py(--stage-trait-artifacts --stage-centroids --centroids-dest, correctedCENTROIDS_HF_PATHconstant, sha-assert unchanged), folded into the single p0_stage stage.py call. The other three repo-import heredocs migrated the same way:issue1776_jpairs.py(build/capture-shard/merge— merge included for phase cohesion) +issue1776_upload_batch.py(batched create_commit + scoped verify). The three stdlib-only dispatcher-glue heredocs (progress sentinel, final sentinel, trace assert) stay: no repo-import surface, and all three execute in every dry-run. - Post-fix staging smoke (real Hub → /tmp):
uv run python scripts/issue1776_stage.py --stage-trait-artifacts --stage-centroids --centroids-dest /tmp/issue-1776-smoke/stagepy/centroids_v1_L21.pt --report /tmp/.../stage_report.json→ rc=0;[stage-extra] centroids staged + sha-verified; torch.load(mmap) assertscentroids (186, 3584),layer == 21; reportcentroids_sha256== committed meta pin2c71204d…. - jpairs smokes:
buildtiny-real vs the real Hub (staged sampling_manifest, synthetic empty exclusion,--n-pairs 2) → rc=0, 2 pairs from 3 lazily-fetched chunks, report + sha written (digest-only; no row text printed).mergetiny-real CPU (synthetic 2-shard fixture, H=8) → rc=0, manifest order + shapes asserted.capture-shardis GPU-bound (7B bf16device_map={"":0}) — carve-out:--helpargparse probe rc=0; every deferred import executed (read_manifest_pool,transformers.AutoModelForCausalLM/AutoTokenizer,issue779_common,issue1776_parity,CommitOperationAdd/HfApi); the dispatcher-composed argv shapes bound through the real parser + dispatch table (handlers no-op'd), incl.--shard-index 0 --num-shards 8. - upload_batch live probe (scratch prefix, never canonical): 1-file listfile →
issue1776_jacobian/smoke_probe/crashfix_r1→ rc=0[upload] 1 files ... (verified); the run also live-exercisedretry_transient(one 429 on the verify listing, retried, recovered). - Diagnosis-gap fix + SECOND root-caused defect (runner harness):
run()/bg_run()now tee every sub-command's stdout+stderr to$LOG_DIR/issue-1776-phase-<phase>.log(append;/workspace/logsis crash-persisted on the GCE lane), payload rc pinned via pipefail+PIPESTATUS[0](foreground) / process substitution (bg,$!stays the payload). The harness (functions sed-extracted from the shipped dispatcher — tested bytes are shipped bytes) exposed a PRE-EXISTING launch-killer:p="$(bg_run ...)"spawns the bg job inside a command-substitution SUBSHELL, so every laterwait_rcfailswait: pid ... is not a child of this shell(rc=127) at the FIRST fan-out join — reproduced pre-fix (harness leg (c) rc=1). Fix:bg_runsets a globalBG_PIDin the current shell; all 11 call sites rewritten (bg_run ...; p="$BG_PID"). Post-fix harness → TEE-OK / RC7-OK (distinct gate rc preserved through the pipe) / BG3-OK / FANOUT-OK (parallel joins, mixed rcs 0+8) / DRY-OK (empty BG_PID). - Dispatcher dry-run re-trace:
bash scripts/issue1776_dispatch.sh --mode full --dry-run→ rc=0,DRY-RUN-OK: 24 phases in §9 order; 48 sentinels parse; dry_cmds.txt shows all new by-path commands (stage flags; jpairs build/capture-shard×8/merge; upload_batch).bash -nOK. - Lint/gates:
ruff check+ruff format --checkclean on the 3 touched/new .py files;tests/test_ruff_policy.py::test_live_workflow_helpers_clean_under_full_rulesetPASS;workflow_lint.py(no-flags) PASS. Pin-sweep:select_step9c_tests.py --map-files <4 diff files>→ 1 hit filetests/test_shared_vm_thread_caps.py(19 passed; sweep_scope: selector-universe); deleted/moved-literal grep over tests/ → 0 hits (sweep_scope: repo-wide (grep-only supplement)). Repo-wide invariants union (scripts/** touched): no_direct_task_path + no_pod_side_shellout + no_dollar_caps → 21 passed.git status --porcelain -- eval_results/ figures/→ empty (all smoke outputs under /tmp; trait-artifact/pin writes land in gitignored data/).