Cohesion directive Mandate 6 (ADR-0244 §2.4). The Fibonacci search was already
~85% compliant (typed OptimizationFailure, fail-closed, bracketed contract,
never a bare float); this closes the two residuals honestly:
- Rename the failure reason unimodality_violation_multiple_extrema_detected ->
sampled_unimodality_violation_observed. A finite sample cannot prove global
unimodality; the check only *observes* a violation on the evaluated points.
Docstrings now state the Bracketed-Local contract explicitly.
- propose_kappa_from_search: kappa=1.0-on-failure IS the required "parameters
unchanged" no-op (thr = productive_threshold / 1.0), and the typed
OptimizationFailure is already returned as the second element — so the fix is
legibility, not a behavior change (the working seam is preserved, not broken):
the docstring names baseline as an explicit caller-side policy, and a new test
pins that a failed search surfaces the typed failure rather than a bare float.
tests: test_adr_0244_search_honesty pins the renamed reason end-to-end (a
cos(8*pi*x) objective whose golden-section samples are non-monotone triggers it;
a smooth bimodal instead converges to a local-min certificate — the honest
Bracketed-Local distinction), _unimodality_ok as a finite-sample check, kappa
failure legibility + no-op baseline, and that no stale reason string remains.
[Verification]: search-honesty 6 + adr_0242_fibonacci + third_door_cohesion +
carry_seams green; smoke + fast lane below.
Cohesion directive Mandates 1+2 (ADR-0244 §2.6 / §2.8).
Mandate 1 — Rust f64 geometric_product fast-path:
- core-rs/src/lib.rs: export a geometric_product_f64 PyO3 wrapper (mirrors the
f32 one; delegates to cl41::geometric_product_f64, itself a term-for-term
mirror of the pure-Python f64 kernel — same i-major scatter order, no FMA).
- algebra/backend.py: f64 branch in geometric_product, gated on CORE_BACKEND=rust
+ core_rs present (default stays pure-Python; older builds fall through on
AttributeError). The directive's f32 gate was already built; the real gap was f64.
- Contract is BIT-IDENTICAL, not tol-matched: a 1-ULP divergence would move the
f64 wave-field residual bytes and break I-02 replay under CORE_BACKEND=rust.
Verified: test_geometric_product_f64_parity N=10000 Rust-vs-Python bit-for-bit
+ CORE_BACKEND=rust subprocess hex match (core_rs built).
- Measured M1 speedup (sixth acceptance criterion): dense f64 GP ~120x
(Rust 4.3 us/call vs Python 520 us/call) with parity holding.
Mandate 2 — eigh memoization:
- cognitive_lifecycle.py: relax_to_ground's dense-branch np.linalg.eigh routed
through _cached_eigh (functools.lru_cache, keyed on the frozen hamiltonian_id +
matrix bytes), returning frozen read-only (evals, evecs) so a cache hit can
never be mutated — every hit is bit-identical. The diagonal (propositional)
fast path is untouched.
tests: test_adr_0244_mechanical_sympathy pins cached-eigh == fresh eigh,
read-only arrays, hit-returns-identical-objects, and relaxation determinism
through the cache; D9 extended with the N=10000 bit-identity gate and its
now-stale "f64 is Python-only" pins updated.
[Verification]: D9 22 passed (incl. bit-identity N=10000, core_rs built) +
mechanical-sympathy + cognitive_lifecycle green; smoke + fast lane below.
Cohesion directive Mandates 4+5. The ADR-0243 lifecycle modules were the only
content-address sites still truncating SHA-256 to 96 bits (24 hex) and passing
default=str to json.dumps — the rest of the codebase already uses full 64-hex
digests (claim_digest, cert_id, decision_id, pressure_id, ...). The default=str
+ [:24] drift had also just replicated into Lane C (biography_wiring.py).
- cognitive_lifecycle.py: _content_id drops default=str (non-serializable payload
now fails closed with TypeError) + full 64-hex; _psi_digest full 64-hex over
canonical little-endian f64 bytes via a new _le_f64_bytes helper (coercion, not
the assert form the ADR-0244 draft used — assert is stripped under -O);
matrix_sha routed through _le_f64_bytes too.
- biography_wiring.py, self_authorship.py: same _content_id hardening. Verified
every payload is JSON-safe after the existing float()/str() wrapping, so
removing default=str changes no current digest value — only future
non-serializable inputs fail closed.
- On little-endian targets the widening is an un-truncation: the new 64-hex
digest's 24-char prefix equals the old value (pinned).
tests: test_adr_0243_cognitive_lifecycle psi_digest gold updated to full+LE; new
test_adr_0244_semantic_rigor pins full-64 length, fail-closed TypeError, LE
byte-order canonicality (native vs >f8 hash-equal), and determinism.
[Verification]: D1-affected suites 66 + miner suites 23 green; smoke + fast lane below.
First step of the cohesion-directive arc (docs only; no code).
- docs/adr/ADR-0244-…md: committed Proposed, verbatim from the R&D export
(matching the ADR-0241/2/3 landing convention), plus a clearly-marked
governance annotation holding two items open for the D4 implementation plan:
(1) §2.3 Q_top is likely vacuous — central I5 in odd Cl(4,1) collapses the
charge on versor states (the #19 pseudoscalar failure mode); it must not be an
egress gate without an empirical discriminating counterexample; (2) §4's
conformed implementation contradicts §2.1-2.2 (per-axis resonance vs.
Gram-projection/leakage-norm/ManifoldConditioningError), references a dangling
ADR-0245, and uses a bare assert for the byte-order guard.
- docs/analysis/engineering_cohesion_refactoring_directive.md: the technical
directive moved to its own canonical path, verbatim (content byte-identical).
- docs/analysis/adr-0244-cohesion-directive-audit-2026-07-17.md: the code-level
audit of all 7 mandates vs. main@24078b11 — per-mandate verdicts, the six
spec-level wrinkles, the amended mandate→work-item mapping, the missing sixth
acceptance criterion (Mechanical-Sympathy gain), and the five decisions (Q1-Q5).
Notable finding: the default=str + 24-char-digest drift the directive flags was
replicated into Lane C (biography_wiring.py) AFTER the directive was written —
raising the priority of the D1 semantic-rigor batch.
[Verification]: docs-only; ADR governance provenance-guard green (unchanged).
Submits the ADR-0243 arc for Joshua's ruling: claims-vs-evidence, deviations
D-1..D-5, deferred items, and the arc gate results (Phase 4 fast lane 11808;
decisive falsifier wrong==0). Follows the ADR-0241/0242 packet convention.
The Proposed->Accepted flip is NOT made here: the anti-self-Accept guard
(test_adr_0241_governance_p12) requires a recorded human ruling with inline
provenance. Section 8 RULING RECORD is PENDING; the status flip is a separate
one-line governance commit carrying Joshua's ratification, made only after his
explicit ruling.
[Verification]: docs-only; ADR-0243 suite + provenance-guard green.
Completes ADR-0243 Phase 4 (plan §5). Adds the metrics benchmark scoring the
cognitive lifecycle against concrete falsifiable comparison classes, joining the
already-committed decisive propositional falsifier (bdf8146a) under one eval package.
evals/adr_0243_cognitive_lifecycle/benchmark.py — five falsifiable metrics, each
grounded in a live lifecycle primitive (no decorative numbers); typed
BenchmarkVerdict / MetricResult; deterministic, JSON-safe:
- fidelity: decode overlap |<psi_steady, target>| after relax_to_ground on a
quadratic well from a perturbed start (min >= 0.999; measured 1.0).
- surprise separation: energy-above-ground of ID (small rotations of the
identity axis) vs OOD (near-orthogonal rotations into distinct Cl(4,1)
planes) against a fixed identity well; strict margined separation
min_ood - max_id > 0.05 (measured 0.834); lam0 verified ~0, not assumed.
- insertion cost: relaxation certificate.steps_taken — all certified, bounded
(<= 256), real work (max_steps > 0; measured 22-23).
- f32 drift over T=1000: unit versor iterated by a fixed rotor with no renorm;
f64 holds versor closure to 1e-9 (~8e-14 measured) while f32 truncates to
~4.7e-5 (ratio ~5.9e8) — the gap motivating ADR-0244 §2.5/§2.6.
- falsifier: run_propositional_falsifier wrong == 0 (1008 ID + 18 refusal-parity).
evals/adr_0243_cognitive_lifecycle/__main__.py — subcommand dispatcher
(benchmark [default] / corridor / falsifier); non-zero exit on falsification.
tests/test_adr_0243_benchmark.py — pins overall pass, each metric's falsifiable
claim, the genuine f32/f64 drift gap, CLI routing + exit codes, and the A-04
off-serving quarantine.
[Verification]: in-worktree smoke gate 176 passed; fast lane
(-m "not quarantine and not slow" -n auto) 11808 passed, 108 skipped;
serve-quarantine + third-door cohesion + dispatch hygiene 22 passed; Phase 4
tests (benchmark + falsifier) 17 passed; benchmark overall_passed True
(deterministic across runs).
The propositional slice of ADR-0243's falsifiability benchmark (plan §5 Phase 4),
the arc's load-bearing evidence. Two mechanism-disjoint engines decide the SAME
enumerated propositional problems:
- Field decoder: propositional_entails (Cl(4,1) wave-field ground energy).
- Gold: generate.proof_chain.entail.evaluate_entailment (exact ROBDD tautology
check, ADR-0201 keystone) — genuinely independent, not the field checking itself.
A clause→string bridge (render_clause: `a | ~b | c`) lets both engines decide
byte-for-byte the same problem. Result over the enumerated panel (atoms a,b,c;
premise sets size ≤2):
- 1008 satisfiable-premise ID comparisons: field.entailed ⇔ gold is ENTAILED —
wrong == 0.
- 18 inconsistent-premise cases: field discloses satisfiable_premises=False
exactly where gold returns REFUSED — matched refusal, no ex-falso leak.
- OOD (>5 atoms): field decoder refuses by construction while gold still decides
— the honest ID/OOD scope boundary in the propositional domain.
Deterministic (enumerated, no randomness/wall-clock); off-serving (evals/ only,
chat/runtime non-import pinned).
[Verification]: tests/test_adr_0243_propositional_falsifier.py — 6 passed;
run_propositional_falsifier() → wrong=0 over 1026 field-vs-gold decisions.
Wire the ADR-0242 §5 pinned primitives into the contemplation runner
(ADR-0243 §2.4): contemplate_surprise_history() gates the newest
caller-timed ADR-0239 dual-operator observation through
is_discovery_eligible, the measured history through
cross_band_discovery_gate (F5/F6/F7 persistence), and only then emits a
DiscoveryCandidate via the existing emit_surprise_discovery ->
DiscoveryCandidateSink. Proposal-plumbing only: the sole side effect is
sink.emit().
Surprise-signal sourcing (the Lane A open question): ContemplationFinding
carries no surprise measurement and the report-mining paths have no
geometry, so nothing is fabricated for them — the canonical carrier is
the ADR-0239 dual audit dict (SelfAuthorshipMiner / ADR-0240 harness),
consumed as explicit SurpriseObservations with caller-supplied logical
time (deterministic, no wall clock).
Give propose_kappa_line_search its live caller (ADR-0242 §5-P1):
evals/analogical_transfer/kappa_calibration.py calibrate_transfer_kappa,
confined to the ADR-0240 calibration pipeline per R-04; kappa_search_event
fires exactly once when a sink is passed. Proposal-only — no
GoldTetherMonitor mutation.
A-04 hardening found during review: chat/runtime.py idle_tick lazily
imports core.contemplation.runner inside the serve process, and the
package __init__ eagerly pulled wave_seam -> holographic_vault (a
serve-banned module) — a PRE-EXISTING process-level quarantine breach.
Closed by making the wave-seam re-exports lazy (PEP 562) and keeping the
multi_scale_energy gate import function-local; pinned by a new dynamic
idle-tick-edge test in test_serve_quarantine_transitive.py.
Pinned primitives untouched: is_discovery_eligible,
cross_band_discovery_gate, candidate_from_surprise_dual signatures
unchanged; no changes to cognitive_lifecycle.py or chat/runtime.py.
New evals/adr_0243_cognitive_lifecycle/ composes AudioCompiler/VisionCompiler ->
sensorium_wave_feed -> relax_to_ground/CognitiveLifecycleEngine.egress ->
generate/realizer readback -> explicit GoldTetherMonitor.decide into one
deterministic fixed-replay corridor, per
docs/handoff/ADR-0243-PHASE3-BRIEF-PACK.md Brief B. Pure composition of
already-tested organs; no new core.physics module; OFF-SERVING (evals/ only,
never imported by chat/runtime.py).
Relaxation targets the full audio+vision integrated percept but starts from the
audio-only partial percept (engine.solve() is not used, since it ties start ==
target) so the relaxer decodes across real steps rather than starting
already-converged; stages are driven explicitly and reassembled into one
LifecycleOutcome keyed off the full percept.
[Verification]: uv run core test --suite smoke -q (176 passed); sensorium suite
(152 passed); algebra suite (82 passed, 50 skipped); new
tests/test_adr_0243_sensorium_corridor.py (6 passed, includes a
steps_taken > 0 pin against silent regression to a no-op relax, a cosine/ANN-free
static pin, and a chat/runtime.py non-import pin).
First live caller of integrate_biography (previously zero production call
sites). New core/physics/biography_wiring.py: report-level PASS gate
(report.wrong == 0 AND >=1 correct transfer; refusals don't block but
all-refused validates nothing), I-01 closure asserts re-checked at the
wiring seam (fail-closed typed BiographyIntegrationError), and a net-new
append-only BiographyProvenanceRecord binding report evidence to the
integrated trajectory hash (AuthorshipProposal-style closure proof in a
TurnEvent-style audit role).
Design ruling (Shay, 2026-07-17, brief open question): direct integration,
structurally pinned — integrate_biography is a pure recompute
(reconstruction-over-storage), so D-5/I-03 proposal gating does not attach;
the ruling is enforced by a test pinning that the wiring imports no vault
store and no evals package (report typed structurally, no core->evals
import). Module registered in the never-serve lazy tier + _BANNED +
third-door banned lists. cognitive_lifecycle.py untouched (Lane C touches
zero Phase-2 code).
Phase 2 merged (#56) after the brief pack was written; feat/adr-0243-phase2-lifecycle
no longer exists. Lane B's base/worktree instructions pointed at it. All three
lanes now branch off forgejo/main directly, per the actual current state.
Orthogonal docs-only fix, direct push (no code/tests touched).
Production-line brief pack for the three independent Phase 3 wiring lanes,
each grounded in fresh read-only research against the current worktree (not
assumed from the plan text):
- Lane A (discovery wiring): is_discovery_eligible + cross_band_discovery_gate
-> DiscoveryCandidate via the contemplation runner's existing sink; live
caller for propose_kappa_line_search so kappa_search_event fires. Flags a
real open question (what feeds surprise_norm for a contemplation finding)
rather than guessing.
- Lane B (sensorium corridor eval): first live consumer of the I-04 feed —
real Audio/Vision compilers -> cognitive_lifecycle -> readback -> GoldTether,
shaped like the adr_0242_v2_energy_compare fixed-replay template.
- Lane C (biography wiring): ADR-0240 harness PASS -> integrate_biography with
I-01 closure asserts and provenance recording. Flags a genuine
identity-substrate design question (mutation vs. proposal-only) for Shay
rather than picking silently.
Corrected dependency DAG: only Lane B actually depends on Phase 2's
cognitive_lifecycle module landing. Lanes A and C touch zero Phase-2 code —
every symbol they wire already exists on forgejo/main — so they can start
immediately, in parallel with Phase 2's own review, rather than waiting.
Also fixes a stale claim this research caught: the plan's substrate table
(Sec 2) named packs/en/readback_rules.py as already-landed §2.3 readback
rules. That file was deleted under audit ratchet W-006; the live substitute
is generate/realizer.py:energy_modulated_surface. Corrected in place.
Per standing production-line-pattern + no-self-dispatch doctrine: brief pack
only, dispatch is Shay's call.
[Verification]: docs-only change, no code touched; no test suite affected.
Implements ADR-0243 §2 honestly per the plan's deviations ledger, correcting
the §3 sketch's three pinned defects (SD-A/B/C):
- Ingress delegates superposition to sensorium_wave_feed, normalizes once at
the owned construction boundary (D-3).
- Relaxation is the imaginary-time semigroup psi <- normalize(exp(-(H-lam0)*dt)*psi)
(D-1) with a certified, never-assumed convergence certificate (D-2): exact
ground energy, achieved Rayleigh energy, eigen-residual, spectral gap, and a
psi_digest binding the certificate to the exact state it certifies.
- Two checkable problem domains: quadratic_well (convex target-decoding) and
propositional (Cl(4,1) blade lattice = assignment lattice of <=5 atoms;
diagonal penalty Hamiltonian; entailment via UNSAT(premises & !conclusion)
scored against independent truth-table gold).
- Egress composes unit-amplitude-density + certificate-binding + versor
closure (routes, does not admit, per the dual of SD-A) + ADR-0006 energy
classes + E0/E1 crystallization policy. Cold states emit a
CrystallizationProposal (epistemic_status pinned SPECULATIVE by the type;
D-5/I-03) — never a vault write.
- Quarantined off-serving (A-04): lazy barrel export, banned in the
transitive subprocess probe and the cohesion AST suite.
Adversarial verification (finder/verifier workflow; most verify agents lost
to a session limit, every surviving finding reproduced in-tree before acting)
surfaced and this closes two real defects beyond the plan text:
- egress_gate admitted any unit state paired with any converged certificate
from an unrelated run, so CrystallizationProposal could package a foreign
psi_digest next to an unrelated certificate_id as false provenance. Fixed
by binding the certificate to its state (psi_digest) and refusing mismatches
(certificate_state_mismatch).
- A state with a spectral gap below the requested tolerance could certify
with ZERO ground-space overlap (energy window alone can't resolve it).
Certification now also requires the excited weight (E-lam0)/gap <= tol
(refusal spectral_gap_below_tolerance), and the degeneracy cluster is
capped at the acceptance window so certificates report the honest
rate-limiting gap instead of absorbing a hairline split.
38 tests (31 original + 7 hardening: certificate-binding must-reject,
gap-refusal + true-ground pair, dense-branch (eigh) refusals, iterate-collapse,
Hamiltonian/egress shape must-rejects, E2 hold route, hardcoded canonical
entailment verdicts independent of the gold function's code shape).
[Verification]: lifecycle+pins+cohesion+transitive 58 passed; in-worktree
smoke 176 passed (131s); fast lane 11750 passed, 108 skipped (574s, exit 0).
Commits the ADR-0243 (Wave-Field Cognitive Lifecycle) proposal verbatim as
Proposed, and the arc-governing implementation plan derived from it plus
docs/analysis/core_cohesion_master_plan.md and the ADR-0241/0242 post-Accept
close audit findings.
The plan records that most of ADR-0243's organs already exist on main
(sensorium feed, WaveManifold, energy classes, GoldTether, surprise/discovery
plumbing, self-authorship, biography, packs/en readback) and that
tests/test_third_door_cohesion.py already pins I-01..I-05, A-02/A-04, and
core_ha absence from the cohesion master plan — so this arc is the §2.2
relaxation reasoner plus three wiring lanes, not a rebuild.
Also pins three defects in the ADR's §3 reference prototype so it can never
be ported verbatim: the egress gate's antisymmetric quadratic form is
identically zero (rejects every state, valid or not); the unitary
relaxation loop cannot dissipate toward a ground state (the honest
relaxer is the imaginary-time semigroup); and the prototype's block-matrix
"pseudoscalar proxy" is a different operator from the real Cl(4,1)
pseudoscalar action despite sharing I^2 = -Id.
[Verification]: uv run core test --suite smoke -q -> 176 passed (133.41s);
uv run python -m pytest tests/test_adr_0243_sketch_defect_pins.py tests/test_third_door_cohesion.py -q -> 19 passed (0.93s)
Complete remaining W5/post-pivot backlog without Docker CI: INV-21 allowlist
dedup, -n auto fast/full defaults, frozen f64 GP Python SOT suite, real
sensorium compiler → ψ → algebraic ρ feed, V2 fib/dyadic/log fixed-replay
evidence without production energy promotion, and project doctrine restored to
local-first + ubuntu-latest:host (no Docker CI for merge).
[Verification]: Smoke suite passed locally (145s, 176 passed); make test-fast
(-n auto) passed twice (11709 passed, 108 skipped each ~11–12 min).
Lands Shay's own correction (authored 2026-07-16 as commit 798c6d1c in
the primary checkout, never pushed): tea frequently hangs/times out
(Cloudflare 524) via HTTP/2 proxying and WAF handoffs — use the Forgejo
MCP tools instead. Also fixes two references the Local-First CI
Validation Protocol section had left stale: the smoke suite is 175
tests, not 108+ (parity-pinned by test_cli_smoke_suite_covers_ci_smoke_gate),
and PR creation goes through the Forgejo MCP tools, not `tea pr create`.
The operational W0-W5 plan that drove the arc was never committed — it
lived only as a gitignored .claude/plan/ artifact in an orphaned
worktree. This commits the durable plan-to-outcome record: phase-by-phase
status against the original plan, the unplanned CI-collapse/local-first
pivot that consumed the post-ratification session, and the remaining
backlog.
Ports the runner-migration doctrine (authored by the Gemini session against
a stale checkout; grafted here onto current main so the #40-era Local-First
protocol section is preserved, not clobbered):
- CI jobs dispatch to a local Act runner on the primary developer's Mac
(label ubuntu-latest:host = native macOS host execution; the ubuntu name
is a fiction — no Linux-only steps).
- The GCP e2-micro server-side runner was REMOVED 2026-07-16; never
re-provision it (1GB RAM, OOM class). A waiting queue while the Mac is
asleep is intentional — pre-push local gates are the real discipline.
- Workflows remain canonical and install the locked universe (uv sync
--locked, committed uv.lock). GitHub mirror Actions are billing-locked
dead signals.
- CLAUDE.md gains a one-line pointer (policy stays in AGENTS.md).
[Verification]: smoke suite passed locally (175 passed); docs-only.
A parallel session re-implemented the ADR-0241/0242 memo reference sketches
as 'production-ready' files and requested a commit, unaware the repo carries
the ratified implementations (Accepted 2026-07-15). Assessment: two genuine
defects in the memo SKETCH (index overflow; bracket-collapse ratio — now
pinned in the committed memo copy's §4 audit note), one wrong-math 'fix'
(diag[8:16] pseudo-reversion), one self-refuting verification claim (the
submitted orchestrator contains a syntax error and cannot import), and a
new module violating no-scipy-as-truth / P7-retired-polar / zero-fabrication
/ T1-T2. No live checkout was touched (verified). Recommendations: dispatch
briefs point at repo + living summary §12 before Drive docs; Accepted ADRs
get extensions, never re-implementations; unverifiable green claims are red.
[Verification]: docs-only; tree code byte-identical to gated main.
lane-shas.yml has intermittently failed under Act-runner contention with
truncated/ambiguous logs (see docs/plans/adr-0241-0242-session-completion-
summary-2026-07-15.md #38 postmortem: run #167 failed at ~22m39s, but local
verify_lane_shas.py showed 9/9 pins matching — the failure was never
conclusively attributed to a timeout vs an incomplete log, because the
script buffers all per-lane output until every lane finishes).
Two changes, no lane logic touched:
1. Stream progress per lane (`-> lane_id ... done (Ns)`, flush=True) instead
of buffering until the end, so a hang shows exactly which lane and for
how long even if the job is killed before the final summary prints.
2. Make the per-lane subprocess timeout configurable via
CORE_LANE_VERIFY_TIMEOUT_S (default unchanged at 900s — same knob shape
as CORE_SHOWCASE_HARD_BUDGET), and report a TimeoutExpired distinctly
from a genuine SHA mismatch so the remediation text stops suggesting
`--update` (re-pinning) for what is actually runner contention.
[Verification]: tests/test_lane_sha_verifier.py 6 passed; ruff clean;
scripts/verify_lane_shas.py run locally with the new streaming output
confirmed correct per-lane timing (e.g. demo_composition 154s) end to end.
Closes the two staged items recorded in the acceptance packet §7 (ruled
non-blocking at ratification, tracked work):
P1 — kappa_search_event(): JSONL-ready execution-telemetry envelope for
the Fibonacci κ search (kind=fibonacci_kappa_search; certificate payload
with content-addressed cert_id, or failure payload with baseline κ=1.0).
propose_kappa_line_search gains an optional sink (any emit(line) object,
e.g. chat.telemetry sinks) that writes one deterministic JSONL line.
Pure serialization — no state, no COHERENT standing (§6 sovereignty).
P2 — cross_band_discovery_gate(): persistence verdict over a surprise-
event history across the F5/F6/F7 Fibonacci bands (τ = {5,8,13}·τ0).
Eligible ⇔ history spans ≥ F5·τ0 (a single fresh spike has zero temporal
persistence) AND every band's decay-weighted accumulation ≥ γ. Typed
CrossBandVerdict; pure; PROPOSAL-side only. Lives in multi_scale_energy
(Tier-2, serve-quarantined) so the gate can never touch serving —
re-pinned by the module-level sys.modules probe in the new test file.
TDD RED→GREEN. [Verification]: carry-seam suite 10 passed; regression
(goldtether consumers + multi_scale + fibonacci + chiral + quarantine +
cohesion) 85 passed; smoke suite passed locally (133s, 175 passed).
#48 switched CI to 'uv sync --locked' but uv.lock was gitignored (an early
library-style choice; this repo is an application — the lock belongs in
git). Every run since failed at install: 'Unable to find lockfile'.
Un-ignore and commit the lock (217 packages, matches pyproject via
'uv lock --check'). CI now installs the exact universe local development
and all green verification ran against.
[Verification]: code tree byte-identical to the smoke-gated state
(175 passed); this commit adds a data file CI requires + one .gitignore
line removal.
#48 switched CI to 'uv sync --locked' but uv.lock was gitignored (an early
library-style choice; this repo is an application — the lock belongs in
git). Every run since failed at install: 'Unable to find lockfile'.
Un-ignore and commit the lock (217 packages, matches pyproject via
'uv lock --check'). CI now installs the exact universe local development
and all green verification ran against.
[Verification]: code tree byte-identical to the smoke-gated state
(175 passed); this commit adds a data file CI requires + one .gitignore
line removal.
Root cause of the simultaneous lane-shas failures on PRs #46 and #47:
workflows installed with unlocked 'uv pip install -e .' against floor-only
specs (numpy>=1.26, ...) while the repo maintains uv.lock — so a PyPI
release landing between runs shifts the runner's resolved set, and the
byte-exact lane SHA pins move with it. Timeline: main lane run green at
23:40Z, both PR runs (diffs no lane executes) red after 00:02Z; the
identical trees verify 9/9 locally against the locked venv, and
'uv lock --check' is clean.
All six workflows now 'uv sync --locked' (--extra dev where [dev] was
installed) — CI tests the locked universe, so lane pins can only move when
code moves. Locked-sync also fails loudly on a stale lock instead of
silently resolving fresh.
Self-validating: this PR's own lane-shas run uses this branch's workflow.
[Verification]: smoke suite passed locally (175 passed); lane repro on the
failing PRs' tree: 9/9 pinned SHAs; uv lock --check clean.
Slow-lane sweep (2026-07-15, 37m06s): 1 failed / 909 passed / 1 skipped /
1 xfailed. The single red was a stale constant pin (assert
MAX_RUNTIME_SECONDS == 30) missed when 640dbe8f deliberately re-budgeted
the public showcase to 60s — the slow lane hadn't been run since (nightly
lives on the billing-locked GitHub side). Pin updated to the deliberate,
comment-documented value; ledger Slow row completed. The historical '~31
full-suite reds' figure is fully retired: fast lane cleared by #45, slow
lane clean after this pin.
[Verification]: tests/test_public_showcase.py green; push held until the
CI locked-install fix lands (branch inherits it via main-merge).
The guard pinned 'ADRs stay Proposed — not self-Accepted', which was
correct until its own precondition was fulfilled: Joshua Shay ruled
'Ratify' on the D10 packet (2026-07-15, ruling record packet §8) and #43
flipped both ADRs to Accepted — turning this pin red on main (first
flagged by the W3 lane as a 'brand-new governance-doc red').
The guard's spirit survives, strengthened: the test now asserts Accepted
WITH inline ratification provenance on both ADR status lines AND the §8
ruling record in the packet — so a silent status flip in EITHER direction
(an Accept without provenance, or a quiet demotion) still fails.
[Verification]: tests/test_adr_0241_governance_p12.py 6 passed; smoke
gate queued behind the running slow-lane sweep, push held until green.
tests/test_teaching_queue.py::test_read_only_invariant hardcoded
`project_root / "engine_state"` (the real shared dir) in its read-only-
invariant snapshot, instead of reading `engine_state._DEFAULT_DIR` (the
root-conftest autouse fixture's per-test isolated dir). Same bug pattern
as test_workbench_replay.py::test_replay_leaves_no_trace, and this one
was caught red-handed: a full `-n auto` fast-lane run failed with
"Directory .../engine_state was mutated!" and passed cleanly in serial
isolation, the exact order-dependent-flake signature this wave hunts.
The other three snapshotted dirs (teaching/proposals, packs,
contemplation/runs) have no equivalent per-test isolation idiom in the
repo yet and are left as-is — this test's own hitl-queue commands don't
write to them, so they were not implicated in the observed failure.