Session 253 — SPEC-033 §9 build-factory waves to done
Dates: 2026-07-22 → 2026-07-24 · Branch: feat/arch-canvas → promoted to master ·
Final suite: 28,232 passed / 0 failed / 0 errors / 0 skipped · 1431/1431 modules · kernel
required + gRPC-verified · Goal (SPEC-023): ACHIEVED 10/10 exit criteria.
The arc
The session goal was to drive the staged SPEC-033 §9 build-factory waves
(G: B4a/B5/B6/B21; H: B8/B9/B12/B2) to built+tested+committed, then promote
feat/arch-canvas to master on a green gated suite. Orchestration pattern
throughout: Opus designs/reviews/commits; Sonnet builders implement to settled
briefs; every deliverable independently re-verified (parallel per-file pytest
fan-out on isolated worker slots) before commit.
What shipped (all on origin/master, tip 8db55892)
| Commit | Deliverable |
|---|---|
7fda4378 |
B4a.2 — namespace-qualified AST fact ids (ns::{namespace}::…) in the KG syncer; namespace-scoped _clear_project; promote() de-qualifies into trunk via map-projection, 8 edge specs recreated |
a3564a66 |
B8 — decision phase + LLM design authority (factory/decision/), profiles pinned to claude-opus-4-8 / claude-sonnet-5 (user directive: latest models, never 4-6) |
5723f7b7 |
B2 — AST≡design conformance engine (ADR-0008 "structure, not intent"), reusing fastpath classifier surface helpers unmodified |
7163ec41 |
B9 — DAG scheduler: Kahn levels, real git worktree leases, strictly-serial merge queue + re-gate, level-parallel dispatch with duplication/staleness gates, ADR-0019 causal-watermark parking between levels; scripts/factory_pipeline.py CLI; 32 tests |
6e22c438 |
kimi (fleet-executed): 7 incremental table directives on prolog/kg_relevance.pl — first real task through the new IRC bridge |
c76ff0be |
KG enums gap #4 closed per the binding W3 RECONCILE ruling (plan + backlog updated; re-litigation forbidden) |
8add3728 |
ADR-0004 ruling documented — one factory per Neo4j database (see Decisions) |
3e5ae72d |
D13 graph-seam allowlist: promotion store + scheduler need raw neo4j.Bookmarks for ADR-0019 (seam doesn't expose causal bookmarks) |
17ca5a9a |
KG canonical-key alignment (root cause of recurring conformance failures — see below) |
a2edbffa |
Merge of kimi/fireflies-slice: Memgraph drop_chunk_label_schema() teardown hygiene (the 3,379-leaked-labels / 17-min boot-recovery fix), conflict-resolved against the 07-21 shared-fixture restructuring |
B5, B6, B21, B12 landed earlier in the session window (wave G) with the same verify-then-commit discipline.
Debugging stories worth keeping
The B9 "flake" that wasn't a scheduler race
One parallel verification run failed test_pipeline_e2e_diamond_stale_duplicate_and_gc
("trunk missing C"). Diagnosis: worker slots must be gwN-format
(ORCHESTRATA_WORKER_SLOT=gw1 → NEO4J_URI_GW1); bare 1/2/3 silently falls
back to the primary Neo4j, so all three concurrent test files shared one graph
— and PromotionStore.gc's graph-wide sweep deleted the sibling run's
in-flight namespaces between build and promote. Not a scheduler bug; verified
2× green under correct isolation. This incident produced the ADR-0004
deployment-contract ruling.
Why the kg_schema conformance test kept failing
Every suite run re-created the drift the canonical migration removes:
neo4j_audit._write_eventwrote all audit event nodes (Violation, Timeout, SessionStart/End, ToolCall, PolicyDecision, …) with no canonicalidkey → now stamped with uuid4 on both branches.fact_neo4jwrote Fact nodes keyed onlyfact_id; canon keys Fact onid→ now writes both.schema.pystill shipped the retired bare-namecomponent_nameconstraint (canon since 2026-07-19:component_idon id"{project}:{name}");sync.pyshipped a redundantproject_idbackstop (id==slug, soproject_slugcovers it transitively). Both retired; one test pin updated.
All four Neo4j instances (.11 primary + .13/.14/.19 workers) were remediated
via migrate_neo4j_canonical.py + sweep_test_pollution.py --apply and now
conform. Run 3 of the suite then went green with zero modules needing even
a solo retry.
Fleet delegation became real
The kimi IRC bot (kimi-irc-bot.service) gained a task-executor bridge:
kimi: TASK <desc> [in <dir>] on #agents spawns kimi-cli --print --yolo,
posts ack/done/FAILED + output tail; one task at a time, 30-min cap. Transport
bug fixed on the way (_irc_send.py ignored argv and bare-nick 433 collisions
silently dropped messages — senders now use ${IRC_NICK}-out). First
fleet-executed task (Prolog tabling) was delivered, reviewed, and committed.
Decisions made this session
See decisions — ADR-024 (one-factory-per-Neo4j-DB) plus the enforcement of the standing rulings-are-binding rule (gap #4 enums).
Handed off
- P2 backlog: ft-grpcio teardown SIGSEGV at pytest exit; B5 per-gate wiring wave; kg-schema gaps #2 #3 #6 #7 #8; B4a.2 same-path byte-race hardening.
- Both kimi worktrees removed and branches deleted after the merge landed.