Repository navigation
refactor(reborn): triggered-run-delivery store over RootFilesystem, delete InMemoryTriggeredRunDeliveryStore (§4.3) - #6213
Conversation
🔎 IronLoop Review StatusHead: Current reviewers:
Reviewer summaries
Recent activity
Available commands
Run metadataAdmission: webhook accepted the request and IronLoop persisted reviewer state before this projection. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (11)
💤 Files with no reviewable changes (1)
📝 WalkthroughSummary by CodeRabbit
WalkthroughLegacy in-memory delivered-route and triggered-delivery stores are removed. Production workflow defaults use a noop route store, while tests and integration seams use the ChangesOutbound store consolidation
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 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 |
There was a problem hiding this comment.
Code Review
This pull request removes the InMemoryTriggeredRunDeliveryStore implementation from ironclaw_outbound and refactors tests and compositions to use the in_memory_backed_outbound_state_store() helper (backed by FilesystemOutboundStateStore<InMemoryBackend>). This cleanup includes enabling the test-support feature for ironclaw_outbound in Cargo.toml and removing the deleted store from the architecture ratchet. I have no feedback to provide as there are no review comments and the changes are clean and consistent.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
There was a problem hiding this comment.
⚠️ IronLoop Review: reviewer
Review at a glance
| Verdict | Blocking | Notes | Inline | Head |
|---|---|---|---|---|
| 0 | 1 | 1 | cf3ad9a0b3f2 |
Head: cf3ad9a0b3f2db845abe1059674ead1f1c6e4923
Next: Human review or validation is required before merging.
Run details
Status: Current
Needs human: no
Needs validation: yes
Summary
Completed the focused stack-layer review of all 7 changed files. The filesystem-backed test-store substitution is consistent with the existing trait implementation, and no correctness or security regression was found. One non-blocking stale manifest comment remains. Runtime validation could not be performed because the Rust toolchain is unavailable in the review environment.
Findings
Blocking: 0 / Notes: 1
Non-blocking notes (1)
1. 💬 [LOW] Update the comment for the new test-support feature
Location: Cargo.toml:308
Enabling test-support here is now required for in_memory_backed_outbound_state_store, but the related comment remains at lines 356–358, still names the deleted InMemoryTriggeredRunDeliveryStore, and now appears to annotate ironclaw_embeddings. Move and update that explanation next to this dependency so the manifest accurately documents the feature.
Developer follow-up
After fixing this feedback:
- Push the fix to this PR branch.
- Re-run this reviewer with
@ironloopai review --agent reviewerif you only changed this reviewer's findings. - Re-run all reviewers with
@ironloopai reviewwhen the fix may affect multiple areas.
| # W6-COLD-SPOTS: `CommunicationPreferenceRecord`/`CommunicationPreferenceKey` | ||
| # for the outbound-store-durability reopen test. | ||
| ironclaw_outbound = { path = "crates/ironclaw_outbound", version = "0.1.0" } | ||
| ironclaw_outbound = { path = "crates/ironclaw_outbound", version = "0.1.0", features = ["test-support"] } |
There was a problem hiding this comment.
Please move/update the related comment from lines 356–358. It still names the deleted InMemoryTriggeredRunDeliveryStore and now appears to describe ironclaw_embeddings; this feature enables in_memory_backed_outbound_state_store for the integration test.
There was a problem hiding this comment.
Fixed in the follow-up commit on this branch: the root Cargo.toml dev-dep comment now describes what the integration proof actually injects (ironclaw_outbound/test-support's in-memory-backed FilesystemOutboundStateStore) instead of the deleted InMemoryTriggeredRunDeliveryStore, and it no longer reads as if it described the embeddings dep. Same commit also repoints main's new ironclaw_channel_delivery tests (landed via #6159 after this branch was cut) off the deleted store — the whole stack (#6212→#6218) is being restacked onto current main.
|
🚅 Deployed to the ironclaw-pr-6213 environment in ironclaw-ci-preview
|
148039e to
07377bd
Compare
cf3ad9a to
699ce05
Compare
…ete InMemoryDeliveredGateRouteStore (§4.3) Completes the §4.3 outbound-store consolidation (last of the outbound family after A6 OutboundState + A7 TriggeredRunDelivery). Deletes the hand-written `InMemoryDeliveredGateRouteStore` — a ~200-line HashMap store that `FilesystemOutboundStateStore` already duplicates via its `DeliveredGateRouteStore` impl. The blocker (recorded in the worklog) was a load-bearing PRODUCTION default: `DefaultProductWorkflow::new` (79 callers) set `InMemoryDeliveredGateRouteStore::default()`, relied on by the OpenAI-compat surface — which never routes gates (never produces approval/auth resolution payloads), so the store is only ever READ (returns empty) there. Rather than a 79-caller DI refactor OR pulling a mandatory `ironclaw_filesystem` dep into `product_workflow` (its filesystem dep is deliberately optional), the default becomes a new filesystem-free **`NoopDeliveredGateRouteStore`** null object: reads return empty, best-effort `remove`/`sweep` are no-ops, and `record` fails **loud** (the workflow never records — verified: no `record_delivered_gate_route` call in `product_workflow/src`; recording happens in the composition slack-delivery path via a setter-injected real store). This is behavior-identical to the old empty-in-memory default for the non-routing surface, with no fail-silent hazard. Changes: - `ironclaw_outbound`: delete `InMemoryDeliveredGateRouteStore` struct+impl + its now-orphaned `RouteKey`/`ConversationIndexKey` helpers and `HashMap`/`Mutex`/`BTreeSet` imports; add `NoopDeliveredGateRouteStore` (null object next to the trait); own tests use the `crate::test_support` filesystem helper. - `DefaultProductWorkflow::new` default → `NoopDeliveredGateRouteStore` (field type + signature + 79 callers all UNCHANGED — only the default value). - Test doubles (composition slack_delivery/e2e_tests/delivered_gate_routing, product_workflow_contract) → the A6 `in_memory_backed_outbound_state_store()` helper (real storage, impls the trait). - R1 ratchet: drop `InMemoryDeliveredGateRouteStore` from the frozen allowlist — the outbound family is now fully consolidated. Net -178 lines. Verified: outbound 110, product_workflow 114, composition slack 387 + delivered_gate_routing 7 — all pass; `cargo build -p ironclaw_reborn_composition` default (the Noop production-default path) clean; clippy -D warnings clean on outbound + product_workflow + composition; ratchet 4; fmt + pre-commit clean. Stacked on #6213. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
07377bd to
cf89c39
Compare
…moryOutboundStateStore Semantic rebase conflict: #6159 landed the new ironclaw_channel_delivery crate on main with tests built against InMemoryOutboundStateStore, which this slice deletes. Repointed to the test-support helper / FilesystemOutboundStateStore<InMemoryBackend> (dev-dep feature added); InMemoryTriggeredRunDeliveryStore / InMemoryDeliveredGateRouteStore refs stay — their slices (#6213/#6214) own those repoints. 92 tests green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-delivery store; fix Cargo dev-dep comment - ironclaw_channel_delivery (landed on main via #6159 after this branch was cut) had tests built against InMemoryTriggeredRunDeliveryStore; repointed to the all-roles FilesystemOutboundStateStore via the test-support helper, matching this slice's other repoints. 92 tests green. - Root Cargo.toml: the dev-dep comment still named the deleted store and read as if it described ironclaw_embeddings (IronLoop finding on #6213) — it now describes the test-support helper the outcome-seam integration proof actually injects. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
699ce05 to
dff3188
Compare
522001b to
e88508f
Compare
dff3188 to
5a9134c
Compare
…ete InMemoryDeliveredGateRouteStore (§4.3) Completes the §4.3 outbound-store consolidation (last of the outbound family after A6 OutboundState + A7 TriggeredRunDelivery). Deletes the hand-written `InMemoryDeliveredGateRouteStore` — a ~200-line HashMap store that `FilesystemOutboundStateStore` already duplicates via its `DeliveredGateRouteStore` impl. The blocker (recorded in the worklog) was a load-bearing PRODUCTION default: `DefaultProductWorkflow::new` (79 callers) set `InMemoryDeliveredGateRouteStore::default()`, relied on by the OpenAI-compat surface — which never routes gates (never produces approval/auth resolution payloads), so the store is only ever READ (returns empty) there. Rather than a 79-caller DI refactor OR pulling a mandatory `ironclaw_filesystem` dep into `product_workflow` (its filesystem dep is deliberately optional), the default becomes a new filesystem-free **`NoopDeliveredGateRouteStore`** null object: reads return empty, best-effort `remove`/`sweep` are no-ops, and `record` fails **loud** (the workflow never records — verified: no `record_delivered_gate_route` call in `product_workflow/src`; recording happens in the composition slack-delivery path via a setter-injected real store). This is behavior-identical to the old empty-in-memory default for the non-routing surface, with no fail-silent hazard. Changes: - `ironclaw_outbound`: delete `InMemoryDeliveredGateRouteStore` struct+impl + its now-orphaned `RouteKey`/`ConversationIndexKey` helpers and `HashMap`/`Mutex`/`BTreeSet` imports; add `NoopDeliveredGateRouteStore` (null object next to the trait); own tests use the `crate::test_support` filesystem helper. - `DefaultProductWorkflow::new` default → `NoopDeliveredGateRouteStore` (field type + signature + 79 callers all UNCHANGED — only the default value). - Test doubles (composition slack_delivery/e2e_tests/delivered_gate_routing, product_workflow_contract) → the A6 `in_memory_backed_outbound_state_store()` helper (real storage, impls the trait). - R1 ratchet: drop `InMemoryDeliveredGateRouteStore` from the frozen allowlist — the outbound family is now fully consolidated. Net -178 lines. Verified: outbound 110, product_workflow 114, composition slack 387 + delivered_gate_routing 7 — all pass; `cargo build -p ironclaw_reborn_composition` default (the Noop production-default path) clean; clippy -D warnings clean on outbound + product_workflow + composition; ratchet 4; fmt + pre-commit clean. Stacked on #6213. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…deleted store Addresses the IronLoop finding on #6213. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ete InMemoryDeliveredGateRouteStore (§4.3) Completes the §4.3 outbound-store consolidation (last of the outbound family after A6 OutboundState + A7 TriggeredRunDelivery). Deletes the hand-written `InMemoryDeliveredGateRouteStore` — a ~200-line HashMap store that `FilesystemOutboundStateStore` already duplicates via its `DeliveredGateRouteStore` impl. The blocker (recorded in the worklog) was a load-bearing PRODUCTION default: `DefaultProductWorkflow::new` (79 callers) set `InMemoryDeliveredGateRouteStore::default()`, relied on by the OpenAI-compat surface — which never routes gates (never produces approval/auth resolution payloads), so the store is only ever READ (returns empty) there. Rather than a 79-caller DI refactor OR pulling a mandatory `ironclaw_filesystem` dep into `product_workflow` (its filesystem dep is deliberately optional), the default becomes a new filesystem-free **`NoopDeliveredGateRouteStore`** null object: reads return empty, best-effort `remove`/`sweep` are no-ops, and `record` fails **loud** (the workflow never records — verified: no `record_delivered_gate_route` call in `product_workflow/src`; recording happens in the composition slack-delivery path via a setter-injected real store). This is behavior-identical to the old empty-in-memory default for the non-routing surface, with no fail-silent hazard. Changes: - `ironclaw_outbound`: delete `InMemoryDeliveredGateRouteStore` struct+impl + its now-orphaned `RouteKey`/`ConversationIndexKey` helpers and `HashMap`/`Mutex`/`BTreeSet` imports; add `NoopDeliveredGateRouteStore` (null object next to the trait); own tests use the `crate::test_support` filesystem helper. - `DefaultProductWorkflow::new` default → `NoopDeliveredGateRouteStore` (field type + signature + 79 callers all UNCHANGED — only the default value). - Test doubles (composition slack_delivery/e2e_tests/delivered_gate_routing, product_workflow_contract) → the A6 `in_memory_backed_outbound_state_store()` helper (real storage, impls the trait). - R1 ratchet: drop `InMemoryDeliveredGateRouteStore` from the frozen allowlist — the outbound family is now fully consolidated. Net -178 lines. Verified: outbound 110, product_workflow 114, composition slack 387 + delivered_gate_routing 7 — all pass; `cargo build -p ironclaw_reborn_composition` default (the Noop production-default path) clean; clippy -D warnings clean on outbound + product_workflow + composition; ratchet 4; fmt + pre-commit clean. Stacked on #6213. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…deleted store Addresses the IronLoop finding on #6213. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
baa5deb to
0979acf
Compare
…ete InMemoryDeliveredGateRouteStore (§4.3) Completes the §4.3 outbound-store consolidation (last of the outbound family after A6 OutboundState + A7 TriggeredRunDelivery). Deletes the hand-written `InMemoryDeliveredGateRouteStore` — a ~200-line HashMap store that `FilesystemOutboundStateStore` already duplicates via its `DeliveredGateRouteStore` impl. The blocker (recorded in the worklog) was a load-bearing PRODUCTION default: `DefaultProductWorkflow::new` (79 callers) set `InMemoryDeliveredGateRouteStore::default()`, relied on by the OpenAI-compat surface — which never routes gates (never produces approval/auth resolution payloads), so the store is only ever READ (returns empty) there. Rather than a 79-caller DI refactor OR pulling a mandatory `ironclaw_filesystem` dep into `product_workflow` (its filesystem dep is deliberately optional), the default becomes a new filesystem-free **`NoopDeliveredGateRouteStore`** null object: reads return empty, best-effort `remove`/`sweep` are no-ops, and `record` fails **loud** (the workflow never records — verified: no `record_delivered_gate_route` call in `product_workflow/src`; recording happens in the composition slack-delivery path via a setter-injected real store). This is behavior-identical to the old empty-in-memory default for the non-routing surface, with no fail-silent hazard. Changes: - `ironclaw_outbound`: delete `InMemoryDeliveredGateRouteStore` struct+impl + its now-orphaned `RouteKey`/`ConversationIndexKey` helpers and `HashMap`/`Mutex`/`BTreeSet` imports; add `NoopDeliveredGateRouteStore` (null object next to the trait); own tests use the `crate::test_support` filesystem helper. - `DefaultProductWorkflow::new` default → `NoopDeliveredGateRouteStore` (field type + signature + 79 callers all UNCHANGED — only the default value). - Test doubles (composition slack_delivery/e2e_tests/delivered_gate_routing, product_workflow_contract) → the A6 `in_memory_backed_outbound_state_store()` helper (real storage, impls the trait). - R1 ratchet: drop `InMemoryDeliveredGateRouteStore` from the frozen allowlist — the outbound family is now fully consolidated. Net -178 lines. Verified: outbound 110, product_workflow 114, composition slack 387 + delivered_gate_routing 7 — all pass; `cargo build -p ironclaw_reborn_composition` default (the Noop production-default path) clean; clippy -D warnings clean on outbound + product_workflow + composition; ratchet 4; fmt + pre-commit clean. Stacked on #6213. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
e88508f to
e987437
Compare
✅ Ready for mergeCI green (all checks pass) on the restacked head. Stacked on #6212.
🤖 Generated with Claude Code |
…ete InMemoryDeliveredGateRouteStore (§4.3) (#6214) * refactor(reborn): delivered-gate-route store over RootFilesystem, delete InMemoryDeliveredGateRouteStore (§4.3) Completes the §4.3 outbound-store consolidation (last of the outbound family after A6 OutboundState + A7 TriggeredRunDelivery). Deletes the hand-written `InMemoryDeliveredGateRouteStore` — a ~200-line HashMap store that `FilesystemOutboundStateStore` already duplicates via its `DeliveredGateRouteStore` impl. The blocker (recorded in the worklog) was a load-bearing PRODUCTION default: `DefaultProductWorkflow::new` (79 callers) set `InMemoryDeliveredGateRouteStore::default()`, relied on by the OpenAI-compat surface — which never routes gates (never produces approval/auth resolution payloads), so the store is only ever READ (returns empty) there. Rather than a 79-caller DI refactor OR pulling a mandatory `ironclaw_filesystem` dep into `product_workflow` (its filesystem dep is deliberately optional), the default becomes a new filesystem-free **`NoopDeliveredGateRouteStore`** null object: reads return empty, best-effort `remove`/`sweep` are no-ops, and `record` fails **loud** (the workflow never records — verified: no `record_delivered_gate_route` call in `product_workflow/src`; recording happens in the composition slack-delivery path via a setter-injected real store). This is behavior-identical to the old empty-in-memory default for the non-routing surface, with no fail-silent hazard. Changes: - `ironclaw_outbound`: delete `InMemoryDeliveredGateRouteStore` struct+impl + its now-orphaned `RouteKey`/`ConversationIndexKey` helpers and `HashMap`/`Mutex`/`BTreeSet` imports; add `NoopDeliveredGateRouteStore` (null object next to the trait); own tests use the `crate::test_support` filesystem helper. - `DefaultProductWorkflow::new` default → `NoopDeliveredGateRouteStore` (field type + signature + 79 callers all UNCHANGED — only the default value). - Test doubles (composition slack_delivery/e2e_tests/delivered_gate_routing, product_workflow_contract) → the A6 `in_memory_backed_outbound_state_store()` helper (real storage, impls the trait). - R1 ratchet: drop `InMemoryDeliveredGateRouteStore` from the frozen allowlist — the outbound family is now fully consolidated. Net -178 lines. Verified: outbound 110, product_workflow 114, composition slack 387 + delivered_gate_routing 7 — all pass; `cargo build -p ironclaw_reborn_composition` default (the Noop production-default path) clean; clippy -D warnings clean on outbound + product_workflow + composition; ratchet 4; fmt + pre-commit clean. Stacked on #6213. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor(reborn): Clone/Copy the Noop route store; refresh stale e2e harness doc Gemini note on #6214 (stateless unit-struct null object derives Copy) and the harness doc no longer describes the deleted store as the default. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…elete InMemoryTriggeredRunDeliveryStore (§4.3) Continues the §4.3 store consolidation and builds directly on the A6 outbound work: delete the hand-written `InMemoryTriggeredRunDeliveryStore` and use the one production `FilesystemOutboundStateStore` — which already implements `TriggeredRunDeliveryStore` (filesystem_store.rs) — over an in-memory backend. `InMemoryTriggeredRunDeliveryStore` is entirely test-only (unlike its sibling `InMemoryDeliveredGateRouteStore`, which has a production default in `DefaultProductWorkflow::new` blocked on a DI refactor — deferred). After A6 closed the no-durable outbound gap, the production factory already uses `FilesystemOutboundStateStore` for the triggered-run-delivery role; only test doubles remained. Changes: - `ironclaw_outbound`: delete the `InMemoryTriggeredRunDeliveryStore` struct+impl from `triggered_run_delivery.rs` (keep the trait/record/enum) + its `pub use`; remove now-unused `HashMap`/`Mutex` imports. Own tests use the `crate::test_support` helper. - Test doubles (composition `slack_delivery.rs`, `slack_serve/e2e_tests.rs`, root `tests/integration/triggered_delivery_outcome.rs`) repointed to the A6 `in_memory_backed_outbound_state_store()` helper (impls the trait). Composition dev-dep already had `ironclaw_outbound/test-support` from A6; added it to the root crate's dev-dep for the integration test. - R1 ratchet: drop `InMemoryTriggeredRunDeliveryStore` from the frozen allowlist. Net -40 lines. Verified: ratchet 4, outbound 110, composition slack 387, `reborn_integration_triggered_delivery_outcome` 1 (the caller-supplied-store seam now injects the filesystem-backed store) — all pass; clippy -D warnings clean on outbound + composition; fmt + pre-commit clean. Stacked on #6212. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…deleted store Addresses the IronLoop finding on #6213. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ete InMemoryDeliveredGateRouteStore (§4.3) (#6214) * refactor(reborn): delivered-gate-route store over RootFilesystem, delete InMemoryDeliveredGateRouteStore (§4.3) Completes the §4.3 outbound-store consolidation (last of the outbound family after A6 OutboundState + A7 TriggeredRunDelivery). Deletes the hand-written `InMemoryDeliveredGateRouteStore` — a ~200-line HashMap store that `FilesystemOutboundStateStore` already duplicates via its `DeliveredGateRouteStore` impl. The blocker (recorded in the worklog) was a load-bearing PRODUCTION default: `DefaultProductWorkflow::new` (79 callers) set `InMemoryDeliveredGateRouteStore::default()`, relied on by the OpenAI-compat surface — which never routes gates (never produces approval/auth resolution payloads), so the store is only ever READ (returns empty) there. Rather than a 79-caller DI refactor OR pulling a mandatory `ironclaw_filesystem` dep into `product_workflow` (its filesystem dep is deliberately optional), the default becomes a new filesystem-free **`NoopDeliveredGateRouteStore`** null object: reads return empty, best-effort `remove`/`sweep` are no-ops, and `record` fails **loud** (the workflow never records — verified: no `record_delivered_gate_route` call in `product_workflow/src`; recording happens in the composition slack-delivery path via a setter-injected real store). This is behavior-identical to the old empty-in-memory default for the non-routing surface, with no fail-silent hazard. Changes: - `ironclaw_outbound`: delete `InMemoryDeliveredGateRouteStore` struct+impl + its now-orphaned `RouteKey`/`ConversationIndexKey` helpers and `HashMap`/`Mutex`/`BTreeSet` imports; add `NoopDeliveredGateRouteStore` (null object next to the trait); own tests use the `crate::test_support` filesystem helper. - `DefaultProductWorkflow::new` default → `NoopDeliveredGateRouteStore` (field type + signature + 79 callers all UNCHANGED — only the default value). - Test doubles (composition slack_delivery/e2e_tests/delivered_gate_routing, product_workflow_contract) → the A6 `in_memory_backed_outbound_state_store()` helper (real storage, impls the trait). - R1 ratchet: drop `InMemoryDeliveredGateRouteStore` from the frozen allowlist — the outbound family is now fully consolidated. Net -178 lines. Verified: outbound 110, product_workflow 114, composition slack 387 + delivered_gate_routing 7 — all pass; `cargo build -p ironclaw_reborn_composition` default (the Noop production-default path) clean; clippy -D warnings clean on outbound + product_workflow + composition; ratchet 4; fmt + pre-commit clean. Stacked on #6213. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor(reborn): Clone/Copy the Noop route store; refresh stale e2e harness doc Gemini note on #6214 (stateless unit-struct null object derives Copy) and the harness doc no longer describes the deleted store as the default. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fb2bc20 to
6bbbbd2
Compare
|
Restack note: #6212 merged (squash), and #6214 was merged into this PR's branch (it was this branch's base child), so this PR now delivers both the triggered-run-delivery and delivered-gate-route slices; rebased onto current main — conflict resolved, MERGEABLE again. CI rerunning on the restacked head. |
|
Post-restack confirmation: rebased onto main after #6212's squash-merge; this PR now carries both the triggered-run-delivery and delivered-gate-route slices (#6214 was merged into this branch). All CI checks green — 57 pass / 0 fail (only the Railway preview status finishing) on head |
Coverage ratchetReborn integration-tier coverageLine coverage (Reborn crates): 85.58% — 306520 / 358149 lines Per-crate breakdown (65 crates, lowest-covered first)
This table itself is informational and never gates the PR on its own — not the percentage, not the per-crate holes, not the 0-coverage callout. A separate coverage ratchet (dry-run until enforce=true; see tests/integration/coverage-floor.toml) can fail the build on specific configured floors. Exemptions (3 entry/entries excluded from the accounting above)
|
What
Continues the §4.3 store consolidation, building directly on the A6 outbound work: deletes the hand-written
InMemoryTriggeredRunDeliveryStoreand uses the one productionFilesystemOutboundStateStore— which already implementsTriggeredRunDeliveryStore— over an in-memory backend.InMemoryTriggeredRunDeliveryStoreis entirely test-only (unlike its siblingInMemoryDeliveredGateRouteStore, which has a production default inDefaultProductWorkflow::newblocked on a 79-caller DI refactor — deferred with a plan in the worklog). After A6 closed the no-durable outbound gap, the production factory already usesFilesystemOutboundStateStorefor the triggered-run-delivery role; only test doubles remained.Changes
ironclaw_outbound: delete theInMemoryTriggeredRunDeliveryStorestruct+impl fromtriggered_run_delivery.rs(keep the trait/record/enum) + itspub use; drop now-unusedHashMap/Muteximports. Own tests use thecrate::test_supporthelper.slack_delivery.rs,slack_serve/e2e_tests.rs, roottests/integration/triggered_delivery_outcome.rs) repointed to the A6in_memory_backed_outbound_state_store()helper. Composition dev-dep already hadironclaw_outbound/test-supportfrom A6; added it to the root crate's dev-dep for the integration test.InMemoryTriggeredRunDeliveryStorefrom the frozen allowlist.Net −40 lines.
Verification
reborn_integration_triggered_delivery_outcome1 (the caller-supplied-store seam now injects the filesystem-backed store) — all pass-D warningsclean on outbound + compositionStack
Stacked on #6212. Part of the incremental arch-simplification refactor.
🤖 Generated with Claude Code