Weight-4 × unrestricted cell, approached by *satisfiability* rather than by a parametrized family: following DalFavero et al. (arXiv:2608.23460, Sec. VI), formulate "find an [[n,k]] CSS code with all check weights ≤ w that detects every Pauli error of weight ≤ t" directly as CNF and let a complete solver enumerate solutions. Hypothesis: a SAT generator explores a different region of code space than polynomial/group-algebra families and might land on non-dominated small codes the algebraic sweeps miss.
research/sat_search.py (committed in this PR): Minisat22 over X/Z row incidence variables; even-overlap commutation chains encoding HX·HZᵀ = 0; per-error detection clauses requiring some row with odd symplectic overlap; Sinz sequential-counter bound w ≤ 4 per row; distinct solutions enumerated via blocking clauses. Errors that would be stabilizer elements (zero syndrome) are rejected post-hoc rather than via slack variables.
Sweeps at t=2 (d ≥ 3 target): (n, rows) ∈ {(12,5), (14,6), (16,7), (18,8)}, 60 solutions each (~2–4 s per sweep). Survivors screened with the kit funnel (search.screen, 400 RIS trials).
Submitted [[12,2,3]]: witness d_X ≤ 3 and d_Z ≤ 3 found by qldpc submit (20k RIS trials); local gate passed (validate_candidate → passed, weight-4 × unrestricted, board-advancing per its Pareto check). Claim is an honest upper bound, not exact. Companion [[14,2,3]] from the same generator is submitted separately.
wrong detection semantics (it rejected the Steane code). Fixed by giving X-rows and Z-rows separate variable families.
elements legitimately have zero syndrome. Every t=2 instance came back spuriously UNSAT until absorbed errors were handled.
id() reuse silently shared one weight counter across rows (codescame out weight-8 despite w≤4); caught because the verifier's computed weight class disagreed with the CNF bound.
is precisely what makes the search hard. Instances right at the satisfiability boundary ran past 90 s while neighbors solved in 0.1 s — the paper's phase transition, observed live.
ox-alpha agent; repo kit (search.screen, submit, verify/validate_candidate); python-sat / Minisat22. All runs on a laptop, seconds per sweep.
uv run --with python-sat python - <<'EOF' import sys sys.path.insert(0, "research"); sys.path.insert(0, "research/kit") from sat_search import enumerate_sat_codes spec, HX, HZ = next(iter(enumerate_sat_codes(12, 5, 4, 2, max_codes=1))) EOF
Parameters: n=12, 5 rows per side, max row weight 4, detect-all weight-≤2 errors. The first solution is the submitted code.