board+v3+planner: #689 hygiene, the 2026-07-17 ack arc, and the ACK ELIMINATION (batch_writer → pure intent recorder)#706
Conversation
…; OGAR #201 companion noted) Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
|
Warning Review limit reached
Next review available in: 47 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughBatchWriter is now an intent-only recorder: acknowledgement APIs and state are removed, ordered casts remain observable, and probes validate replayable intents. Documentation defines kanbanstep-driven reasoning, temporal durability evidence, membrane boundaries, and ACK-elimination guardrails. ChangesACK elimination
Board inventory records
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_7464d8ec-3f0e-4251-8254-bb271123a7ef) |
…ed advance + the stream tier's quantified economics (operator ruling, 2026-07-17) The ack-gated advance is regraded from "correct code, wrong tier" to a hard architecture violation: a duplicate of the pre-existing batch-writer->kanbanstep route, built while ignoring that reasoning has no outer ack at all; operator hard-break + internal reversal. Newly banked (not in the prior four entries): the quantified arithmetic (40 ns-class stream ops vs 10-400 us acks; ractor messaging = Tokio = 1e4-1e7x, hence ractor stays compile-time-ownership-only, never belittled in code/docs); the SPO 2^3 amortization mechanism (one SPO cache load + <=8 L1-resident cycles -> CausalEdge64 NARS candidates); kanbanstep = auto-progression on the Rubicon aktionale phase (Heckhausen goalstate, Libet timing, 550->200 ms window); the ONLY ack home = the external ontology membrane (lance-graph-callcenter Supabase-realtime tickets/SLA + OGAR actionhandler queues). Live consequence: the chess/expert-iteration Phase-1 wording corrected before work starts. FUTURE-DESIGN fifth-wave row mirrors the entry. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
…5 guardrail, /v3-audit check 7, read-through pointer, 'dummy' wording retired
Four surfaces agents actually load now carry the protection (not just
the board): (1) mailbox-kanban-model.md gains 'The trigger: kanbanstep,
never an ack' (Rubicon aktionale auto-progression, the 40ns vs 10-400us
arithmetic, the SPO 2^3 amortization, the tier test, the membrane);
(2) sonnet-worker-guardrails.md F15 + STOP trigger 7 (any awaited event
before an advance = STOP+report) — pasted into every worker brief;
(3) /v3-audit check 7 = mechanical ack-paced-advance scan;
(4) FUTURE-DESIGN read-through pointer over the superseded first-wave
'ack pumps' row (append-only, row not edited). Per operator instruction
the 'compile-time ownership dummy' wording is retired in all four
occurrences (kanban model, primer x2, write-on-behalf) — the role is
named ('SOLELY the compile-time ownership guarantee') so the attestation
stays authoritative to the compiler.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
…on banked (sidecar kanban state outside the SoA; M24's gate already forbids it)
Operator ruling 2026-07-17: the ack model also violates 'every SoA has
its own kanban board INSIDE the SoA' — BatchWriter's board/acked
BTreeMaps are a heap sidecar (not tenant bytes, not owner-serialized,
not Lance-versioned, invisible to temporal.rs). M24's own mechanical
gate ('grep writer-internal intent queues = zero') forbids exactly this
shape; the post-ruling correction commits were doc-only. The positive
ruling banked: the SoA is a self-controlling actor model — ownership
proof + board + budget live in the owned rows; a sidecar reintroduces
convention-kept consistency, the risk class the compile-time model
deletes. Fix design recorded two-stage: Stage A excises ack_and_propose
(zero production callers) and re-homes the SLA gate at the callcenter
membrane; Stage B (gated on the W2a board-tenant mint) migrates the
sidecar into board-tenant rows — ack = the row's LanceVersion, unacked
= a temporal.rs Strict projection, M24 green. W2a priority raised: it
now gates closing both ack violations. FUTURE-DESIGN fifth-wave row
added.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
…ion boundary; membrane state = a Tasks SoA at callcenter; multi-SoA reasoning first-class; P64 64x64 tenant era superseded by the 4+12 facet Operator ruling 2026-07-17 (third message of the ack arc): ACK's positive role is the outer serialization boundary of INCOMING tasks, which split into SoAs — inside the membrane stays kanbanstep-only. Multi-SoA reasoning is first-class: chess models a 'mirror neuron'-like opponent SoA beside the self SoA; Odoo-class business logic spans multiple reasoning loops and is never evicted from them. The membrane's own state is a Tasks SoA at the lance-graph-callcenter outer ontology zone (task = V3 row: 32-bit classid + 96-bit payload; the task board lives INSIDE the Tasks SoA — the no-sidecar rule is universal; ack = an admission advance on the task row's board; SLA audit = row Lance versions + temporal.rs reads). This revises Stage A's membrane home: a Tasks SoA design (envelope-auditor + batched-mint gated), never a module wrapping relocated BTreeMaps. P64 supersession noted: the 64x64=4096 gridlake was the tenant atom of its era; V3 tenants cast directly into the 4+12 facet — gridlake remains a measured batch topology (1BRC lane J), not the tenant shape. FUTURE-DESIGN fifth-wave row added. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_384ca032-95b5-44a9-9a05-23ee5383fc26) |
…e kanban-at-membrane error; kanban is reasoning-interior only
Operator correction 2026-07-17 ('Why did you move kanban to the outer
membrane that's unacceptable'). E-TASKS-SOA-AT-THE-MEMBRANE-1's body
wrongly wrote 'the task's kanban board lives INSIDE the Tasks SoA' and
'ack = an admission/phase advance on the task row's own board' — that
attaches the Rubicon reasoning kanban (auto-progressive, nobody-waits)
to the membrane's task rows, dragging the reasoning-tier construct out
to the ticket tier and making the membrane look like it runs cognition.
That re-crosses the exact boundary E-ACK-VIOLATION-REGRADE-1 set, in the
opposite direction.
Corrected: kanban is REASONING-INTERIOR ONLY, never at the membrane.
The membrane does ACK-serialization only — admits, serializes, and
SPLITS tasks into reasoning SoAs (where cognition + kanban happen). The
Tasks SoA holds task-admission + SLA/ack ledger + fan-out edges in its
rows (no sidecar — that rule holds); its progression is ack-gated (the
SLA-gate/actionhandler-queue tier), categorically NOT a Rubicon
KanbanColumn. Everything else in E-TASKS-SOA-AT-THE-MEMBRANE-1 stands
(ack = outer boundary, Tasks SoA at callcenter, multi-SoA reasoning
first-class, P64 4+12 supersession). A partial-retraction pointer is
added over the retracted clauses (append-only; original not edited);
the FUTURE-DESIGN row is corrected in place with the retraction row
appended.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
…a pure intent recorder; doctrine, guards, and plans corrected Code: batch_writer.rs loses ack/ack_and_propose/acked/unacked/ acked_version (zero production callers existed) and their scheduler imports; it records intent (cast/casts/intent_moves/on_behalf_of) and caches delegation — nothing else. W1e probes and the driver cast-pairing tests are rewritten to pin exactly that. Durability evidence is the written row's own LanceVersion in Lance, read through temporal.rs; crash-replay is a temporal READ comparing recorded intents against what Lance holds — never a stored ledger. Planner lib tests green (214); driver lib tests green (103); the two pre-existing nars_engine clippy deprecation errors on main are untouched. Doctrine: mailbox-kanban-model trigger section, VISION §5, INTEGRATION-PLAN Addendum-14, temporal-markov plan correction, M24 Status (PARTIAL: confirmation half deleted; intent-board collapse still gated on the W2a mint), FUTURE-DESIGN sixth-wave row. Dead with it: D-AHG-1, the 'SLA gate' and 'actionhandler queue' concepts (retired unbuilt) — the membrane admits/serializes/splits tasks with the transcode's own native semantics. Guards: /v3-audit check 7 is now the elimination scan; guardrails F15 + STOP trigger 7 ban rebuilding the mechanism under any name. Board: E-ACK-ELIMINATED-1 (terse, by design). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_b38acee0-7975-44e9-a5f2-0efa56e134df) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c4f7d741e2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| (E-ACK-ELIMINATED-1, operator 2026-07-17; after E-ACK-VIOLATION-REGRADE-1 | ||
| + E-SOA-OWN-BOARD-NO-SIDECAR-1): patterns `ack_and_propose`, | ||
| `\bunacked\b`, `\backed\b`, `fn ack\b`, `\.ack\(`, `ack-gated`, | ||
| `actionhandler`, `SLA gate` in code or live doctrine — ANY hit is a |
There was a problem hiding this comment.
Exempt live history rows from the ack scan
With this wording, running /v3-audit on the clean tree will report false violations because the new forbidden terms also appear in live docs added/kept by this commit, e.g. .claude/v3/FUTURE-DESIGN.md lines 18/24/27 and .claude/v3/INTEGRATION-PLAN.md line 722 contain actionhandler, while the only stated exemptions are board-history/plan-addenda files. Unless the scan excludes these historical summary rows or narrows to production code/new doctrine, agents following the command must flag the repository's own post-elimination documentation as a violation.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
.claude/v3/knowledge/mailbox-kanban-model.md (1)
70-76: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winDescribe this as intent recording, not a kanban update.
cast()records proposedKanbanMoves inBatchWriter; it does not invokeMailboxSoaOwner::advance_phaseor mutate the mailbox tenant. Saying the board is updated contradicts the sole-mutator rule on Line 21.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.claude/v3/knowledge/mailbox-kanban-model.md around lines 70 - 76, Revise the description of step 4 to state that cast() records proposed KanbanMove intent in BatchWriter immediately, before the write lands. Do not describe this as a kanban board update or tenant mutation; preserve MailboxSoaOwner::advance_phase as the sole mutator.crates/lance-graph-planner/src/batch_writer.rs (1)
61-62: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winAdd a drain lifecycle for pending payloads.
Every cast appends a payload, but this implementation has no sink-facing drain or removal API. A long-lived writer therefore retains every payload indefinitely despite the documented eager drain.
Proposed payload handoff
+ /// Remove payloads handed to the sink, preserving cast order. + pub fn drain_pending_payloads(&mut self) -> impl Iterator<Item = (CastId, P)> + '_ { + self.pending_payloads.drain(..) + }Also applies to: 88-93
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@crates/lance-graph-planner/src/batch_writer.rs` around lines 61 - 62, Update the writer’s pending-payload lifecycle around pending_payloads and its append logic so accumulated payloads can be handed to the sink and removed after draining. Add a sink-facing drain or removal API that returns the recorded (CastId, P) entries and clears the writer’s retained state, preserving payload order and the documented eager-drain behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.claude/board/LATEST_STATE.md:
- Around line 49-56: Restore append-only ordering for the MERGED `#689` record: in
.claude/board/LATEST_STATE.md (lines 49-56), move the block to the end of the
historical ledger; in .claude/board/PR_ARC_INVENTORY.md (lines 108-129), append
the corresponding PR Arc entry after all existing records, preserving its
content and provenance.
In @.claude/commands/v3-audit.md:
- Around line 52-55: Update the audit guidance around confirmation-ledger
detection to avoid claiming name-independent coverage while relying only on
“retire,” “confirm,” and “settle” keywords. Define a structural check for
writer-owned persisted version maps, or narrow the wording to explicitly
describe the supported name-specific heuristics.
- Around line 46-58: The elimination scan must not report its own rule
definitions in .claude/commands/v3-audit.md. Update the scan guidance or
implementation referenced by the elimination scan to exclude this rule
block/file from findings, or otherwise distinguish documented pattern
definitions from matching violations while continuing to scan actual code and
live doctrine.
- Around line 55-56: Distinguish sanctioned owner-stamped, fire-and-forget
intent casts from ACK-style pacing: in .claude/commands/v3-audit.md lines 55-56,
flag only call!/awaited responses or explicit blocking dependencies, not every
ractor::cast; in .claude/v3/knowledge/sonnet-worker-guardrails.md lines 97 and
127-132, state that immediate intent-recording casts remain allowed and apply
the same exception to escalation trigger `#7`.
- Around line 48-49: Correct the regex entry in the E-SOA-OWN-BOARD-NO-SIDECAR-1
pattern list so it matches the complete word “backed” rather than “acked” after
a boundary; preserve the surrounding ack-related patterns unchanged.
In @.claude/v3/ENTROPY-MILESTONES.md:
- Line 49: Update the M24 milestone row in ENTROPY-MILESTONES.md to remove the
retired “kill-after-cast-before-ack replay test green” evidence and append the
current temporal replay gate, using its actual name and behavior as defined by
the implementation. Preserve the existing notes about the deleted confirmation
half and remaining SoA collapse.
In `@crates/lance-graph-planner/src/batch_writer.rs`:
- Around line 7-12: Provide a durable intent source before claiming crash
replay: in crates/lance-graph-planner/src/batch_writer.rs#L7-L12, persist
intents before cast() returns or narrow the documented failure guarantee; in
.claude/v3/knowledge/mailbox-kanban-model.md#L45-L51, document the durable
source used after restart; and in
crates/lance-graph-planner/tests/w1_probes.rs#L52-L75, reconstruct intents from
that source and compare them through temporal.rs rather than reusing the same
BatchWriter instance.
---
Outside diff comments:
In @.claude/v3/knowledge/mailbox-kanban-model.md:
- Around line 70-76: Revise the description of step 4 to state that cast()
records proposed KanbanMove intent in BatchWriter immediately, before the write
lands. Do not describe this as a kanban board update or tenant mutation;
preserve MailboxSoaOwner::advance_phase as the sole mutator.
In `@crates/lance-graph-planner/src/batch_writer.rs`:
- Around line 61-62: Update the writer’s pending-payload lifecycle around
pending_payloads and its append logic so accumulated payloads can be handed to
the sink and removed after draining. Add a sink-facing drain or removal API that
returns the recorded (CastId, P) entries and clears the writer’s retained state,
preserving payload order and the documented eager-drain behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 9116bd3a-7211-455a-a9cc-7748382c62df
📒 Files selected for processing (16)
.claude/board/EPIPHANIES.md.claude/board/LATEST_STATE.md.claude/board/PR_ARC_INVENTORY.md.claude/commands/v3-audit.md.claude/plans/temporal-markov-and-style-classes-v1.md.claude/v3/ENTROPY-MILESTONES.md.claude/v3/FUTURE-DESIGN.md.claude/v3/INTEGRATION-PLAN.md.claude/v3/VISION.md.claude/v3/knowledge/mailbox-kanban-model.md.claude/v3/knowledge/sonnet-worker-guardrails.md.claude/v3/knowledge/v3-substrate-primer.md.claude/v3/knowledge/write-on-behalf.mdcrates/cognitive-shader-driver/src/mailbox_soa.rscrates/lance-graph-planner/src/batch_writer.rscrates/lance-graph-planner/tests/w1_probes.rs
| ## 2026-07-14 — MERGED #689 (merge `a260ff98`) — rung-content ladder ruled + persona demarcated + `contract::legacy_outliers` + `NodeGuid↔FacetCascade` bridge + D-TSC-1 alias fix | ||
|
|
||
| - **Ruling doc (MANDATORY read, linked from CLAUDE.md):** `.claude/v3/knowledge/persona-vs-rung-ladder.md` — rung 0–1 observation / 2 = 144 verb atoms / 3 = the 34 tactic recipes (= THE runbooks: `contract::recipes` + ndarray `hpc/styles`) / 4 = StyleFamily macros (frozen×learned×exploration). The adjective-36 = separate unwired persona storyline, never rung 3. Open items O1–O6 live there. | ||
| - **Contract inventory adds:** `legacy_outliers::LegacyOutlier` (G1/G2/G3 grace carvings, le-contract §3a); `From<FacetCascade> for NodeGuid` + inverse + `NodeGuid::facet()` (byte-identical, no registry detour). | ||
| - **Planner:** `thinking::ThinkingStyle` deprecated alias + `PlannerStyleExt` re-exported again (old import path compiles, deprecation warning steers). | ||
| - **Probes flipped:** TD-STYLE-TABLE-RESIDUE item 3 → DORMANT; UNIFIED_STYLES tethered-not-collapsed. | ||
| - **Companion:** OGAR #201 (D‑V1‑GRACE‑CARVINGS canon mirror, merged). | ||
|
|
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Preserve append-only board history.
Both records are inserted into historical ledgers instead of appended, violating the repository’s provenance and audit-history contract.
.claude/board/LATEST_STATE.md#L49-L56: move the#689block to the append position..claude/board/PR_ARC_INVENTORY.md#L108-L129: append the PR Arc entry after existing records.
📍 Affects 2 files
.claude/board/LATEST_STATE.md#L49-L56(this comment).claude/board/PR_ARC_INVENTORY.md#L108-L129
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/board/LATEST_STATE.md around lines 49 - 56, Restore append-only
ordering for the MERGED `#689` record: in .claude/board/LATEST_STATE.md (lines
49-56), move the block to the end of the historical ledger; in
.claude/board/PR_ARC_INVENTORY.md (lines 108-129), append the corresponding PR
Arc entry after all existing records, preserving its content and provenance.
Sources: Coding guidelines, Learnings
| //! **There is no confirmation bookkeeping here — by ruling (operator, | ||
| //! 2026-07-17, E-ACK-ELIMINATED-1).** Durability evidence is the written | ||
| //! row's own `LanceVersion` in Lance, read through `crate::temporal` | ||
| //! (`QueryReference::at` + deinterlace). Crash-replay is a temporal READ — | ||
| //! compare recorded intents against what Lance holds — never a stored | ||
| //! ledger in this struct. Do not add a confirmation method under any name. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
Provide a durable intent source before claiming crash replay.
The current intent records exist only in the live BatchWriter, so a crash before the row write loses both the intent and the state needed for reconciliation.
crates/lance-graph-planner/src/batch_writer.rs#L7-L12: persist intents before returning fromcast(), or narrow the documented failure guarantee..claude/v3/knowledge/mailbox-kanban-model.md#L45-L51: identify the durable intent source used after process restart.crates/lance-graph-planner/tests/w1_probes.rs#L52-L75: reconstruct from that durable source and compare throughtemporal.rs; keeping the same writer alive is not a crash probe.
📍 Affects 3 files
crates/lance-graph-planner/src/batch_writer.rs#L7-L12(this comment).claude/v3/knowledge/mailbox-kanban-model.md#L45-L51crates/lance-graph-planner/tests/w1_probes.rs#L52-L75
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/lance-graph-planner/src/batch_writer.rs` around lines 7 - 12, Provide
a durable intent source before claiming crash replay: in
crates/lance-graph-planner/src/batch_writer.rs#L7-L12, persist intents before
cast() returns or narrow the documented failure guarantee; in
.claude/v3/knowledge/mailbox-kanban-model.md#L45-L51, document the durable
source used after restart; and in
crates/lance-graph-planner/tests/w1_probes.rs#L52-L75, reconstruct intents from
that source and compare them through temporal.rs rather than reusing the same
BatchWriter instance.
… (valid subset) Fixed (all confirmed against current code): - /v3-audit check-7: regex typo \backed\b -> \bbacked\b; the confirmation-ledger check is now STRUCTURAL (a persisted id->version writer field, by shape) not a keyword list; the await check flags an awaited call!/response a cycle-advance depends on, NOT a bare fire-and-forget cast; and v3-audit.md exempts its own rule block from the scan (was self-flagging by construction). - guardrails F15 + STOP trigger 7: distinguish the sanctioned fire-and-forget BatchWriter::cast (owner-stamped intent recording, never waits) from an awaited response — only the latter is forbidden. - mailbox-kanban step 4: cast RECORDS proposed intent, does not mutate the board; advance_phase stays the sole mutator. Durability paragraph narrowed: the writer's intent list is ephemeral staging, not a durable WAL; the durable record is the Lance row's version; recovery is a temporal read, not a replay from the struct. - batch_writer.rs: module doc narrowed likewise; added drain_pending_payloads() so the documented eager drain is real and the staging vector cannot grow unbounded (+ test). - ENTROPY-MILESTONES M24: removed the retired 'kill-after-cast-before-ack replay test' evidence; the gate is now the pinned-reference temporal.rs read. Skipped with reason: - 'move #689 board entries to the end': this repo's append-only convention is PREPEND newest-first (CLAUDE.md 'APPEND-ONLY (prepend new entries)'); the chronological placement is correct, the bot misread the convention. - 'persist intents before cast() returns (durable WAL)': the whole point of E-ACK-ELIMINATED-1 is that durability is Lance's row version, not the writer's — narrowing the doc claim (done above) is the correct response, not building a second WAL. Planner lib batch_writer tests 4/4, w1_probes 4/4, fmt clean. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
What
Seven commits: board hygiene, the full 2026-07-17 ack arc (rulings → correction → elimination), and the code cut that closes it. No longer doc-only — commit 7 removes code.
1.
8f73e03a— the mandatory post-merge hygiene for #689, rescued from the old branch tip and rebased onto current main (PR_ARC_INVENTORY.mdprepend +LATEST_STATE.mdrow, prepend-collision resolved keeping both sides).2.
19cdda4a—E-ACK-VIOLATION-REGRADE-1: the ack-gated advance regraded to a hard architecture violation (duplicate of batch-writer→kanbanstep); the 40 ns-op vs 10–400 µs arithmetic; the SPO 2³ amortization; kanbanstep = auto-progression on the Rubicon aktionale phase.3.
08fa86c6— agent-proofing: kanban-model trigger section, guardrails F15 + STOP trigger 7,/v3-auditcheck 7, FUTURE-DESIGN read-through pointer, "ownership dummy" wording retired (role named instead).4.
debc795a—E-SOA-OWN-BOARD-NO-SIDECAR-1: the writer'sboard/ackedBTreeMaps identified as a sidecar M24's own gate already forbids; self-controlling actor-SoA ruling banked.5.
ab416ecf—E-TASKS-SOA-AT-THE-MEMBRANE-1: tasks split into SoAs at the callcenter membrane; multi-SoA reasoning first-class (chess opponent "mirror neuron" SoA; Odoo multi-loop); P64's 64×64-tenant era superseded by the 4+12 facet.6.
26451180—E-KANBAN-STAYS-INTERIOR-MEMBRANE-IS-ACK-ONLY-1: operator correction — kanban never moves to the membrane; entry 5's "board on the task row" clauses retracted (⊘ pointer, append-only).7.
c4f7d741— ACK ELIMINATED (E-ACK-ELIMINATED-1, operator directive: "remove the ack from everywhere, completely eliminate it").batch_writer.rsbecomes a pure intent recorder:ack/ack_and_propose/acked/unacked/acked_versiondeleted (zero production callers existed); remaining surface =cast/casts/intent_moves/on_behalf_of+ the delegation cache.LanceVersionin Lance, read throughtemporal.rs; crash-replay = a temporal READ of recorded intents vs what Lance holds — never a stored ledger./v3-auditcheck 7 is now a flat elimination scan; guardrails ban rebuilding the mechanism under any name.Verification
Planner lib tests 214 green; driver lib tests 103 green (
--features with-planner); W1e probes 4/4 green; fmt clean. The only clippy-D warningsfailures are two pre-existing deprecation errors incache/nars_engine.rsalready present on main (verified via stash), untouched by this diff. Elimination grep overcrates/ --include='*.rs'for the mechanism tokens returns zero hits.🤖 Generated with Claude Code
https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
Summary by CodeRabbit
New Features
Bug Fixes
Documentation