# Build Log: 2026-06-22 — BMCTE N=20000 Sweep & Hachimoji Bridge

## Session Summary

Extended the BMCTE sweep to N=20000, p=12,14 on neon-64gb (ARM64, 62 GB, 18
cores).  Applied two performance optimizations to `extension_v1.py`: N×p tall-skinny
QR instead of full N×N QR, and vectorized Ryser permanent via numpy broadcasting
(65× speedup at p=14).  Formalized the BMCTE→Hachimoji link theorem in
`HachimojiBridging.lean` §11.

---

## Files Changed

| File | Change |
|---|---|
| `experiments/bosonic_continuous/extension_v1.py` | N×p isometry (O(N·p²) vs O(N³)); vectorized Ryser (65× faster); removed debug logging |
| `formal/CoreFormalism/HachimojiBridging.lean` | **§11** — `lambdaBMCTE(p,N)`, monotonicity proofs, `H_max`/`entropyRatio` |
| `docs/build_logs/2026-06-22_session_bmcte_hachimoji_bridge.md` | **NEW** — this file |
| `AGENTS.md` | Updated HachimojiBridging entry, extension_v1 entry |
| `docs/PROJECT_MAP.md` | Regenerated |
| `docs/PROJECT_MAP.json` | Regenerated |

---

## Sweep Results (N=20000, neon-64gb)

| p | λ(p) | H_mean | H_std | nonzero modes | runtime |
|---|------|--------|-------|---------------|---------|
| 12 | 0.9928 | 11.607 | 0.092 | 8845 | 4.1s/seed |
| 14 | 0.9902 | 11.699 | 0.146 | 9898 | 10.6s/seed |

Total: 73.6s for 10 runs (5 seeds each), 0 overflows.

---

## Build Baseline

```
lake build CoreFormalism.HachimojiBridging → 2978 jobs, 0 errors
lake build → 3201 jobs, 0 errors (full workspace)
```

---

## Key Decisions

- **N×p isometry over full N×N QR**: BMCTE only uses the first p columns of the
  unitary.  QR on N×p Gaussian produces the correct marginal distribution of a
  Haar-random isometry, matching the scattering-matrix physical model, at
  O(N·p²) instead of O(N³).
- **Vectorized Ryser**: replaced 2²ᵖ Python loop with (2ᵖ, p) boolean inclusion
  matrix × matrix multiply.  65× faster at p=14 (0.28s → 0.0043s per permanent).
- **neon-64gb for large-N CPU sweep**: 62 GB RAM and 18 ARM64 cores handled
  N=20000 where RTX 4070 (12 GB VRAM) OOM'd on full unitary.
