Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
140 commits
Select commit Hold shift + click to select a range
93007af
refactor(contracts): move extension runtime descriptors to a neutral …
BenKurrek Aug 3, 2026
737cf50
refactor(sandbox): merge the sandbox lane into one crate (WS3)
BenKurrek Aug 3, 2026
adbbb58
docs(target-architecture): record the WS3 corrections with their evid…
BenKurrek Aug 3, 2026
38be2e2
chore(sandbox): drop imports the merge left unused
BenKurrek Aug 3, 2026
925e7e6
fix(ci): let the Reborn PR planner plan guidance edits and crate dele…
BenKurrek Aug 3, 2026
5ed3ac5
fix(arch): give the retained resource exceptions an owning issue, not…
BenKurrek Aug 3, 2026
50be425
test(contracts): pin the asset-path validator that moved into extensi…
BenKurrek Aug 3, 2026
84af779
test(coverage): re-capture the host_runtime floor and floor the new s…
BenKurrek Aug 3, 2026
bce21dc
docs(target-architecture): record the coverage ratchet as a move-sens…
BenKurrek Aug 3, 2026
5be9872
Merge origin/main into ws3/sandbox-and-mcp
BenKurrek Aug 3, 2026
8d89b41
fix(extension-manager): repoint ironhub onto the moved ExtensionAsset…
BenKurrek Aug 3, 2026
50712f0
test(coverage): exempt the WS3 move's no-region lines and record the …
BenKurrek Aug 3, 2026
a723345
docs(sandbox,mcp): correct the wiring inventory and record the projec…
BenKurrek Aug 3, 2026
9a250ff
refactor(extensions): move the skill-install executor to extension_su…
BenKurrek Aug 3, 2026
86b05a8
docs(sandbox): record that the Docker fail-closed switch is wired to …
BenKurrek Aug 3, 2026
f50504c
docs(host_runtime): record the executor/adapter seam in crate guidance
BenKurrek Aug 3, 2026
e07b3b0
refactor(host_runtime): keep the install-input error path log-free
BenKurrek Aug 3, 2026
8be0715
ci(coverage): re-capture the host_runtime floor for the WS3 executor …
BenKurrek Aug 3, 2026
482bea4
refactor(wasm): move wit/ inside its owning crate (Wave 3)
BenKurrek Aug 3, 2026
21533fd
build(wasm): rebuild first-party artifacts for the moved wit/ path
BenKurrek Aug 3, 2026
80daab9
docs(target-arch): record the WS7 artifact-rebuild cost of guest path…
BenKurrek Aug 3, 2026
5a1b315
Merge remote-tracking branch 'origin/main' into wave3/wit-move
BenKurrek Aug 3, 2026
f9b4ae7
Merge origin/main into ws3/sandbox-and-mcp
BenKurrek Aug 3, 2026
25e9aab
Merge origin/main into ws3/first-party-tools
BenKurrek Aug 4, 2026
1f66b58
ci(planner): classify the path classes that blocked the wit/ move
BenKurrek Aug 4, 2026
96d0d46
refactor(host-runtime): split obligations into its three chartered ow…
BenKurrek Aug 4, 2026
452a2d6
refactor(operator,contracts): route operator secrets through a produc…
BenKurrek Aug 4, 2026
ec1ba88
test(sandbox): put the Docker security check behind the fail-closed gate
BenKurrek Aug 4, 2026
6150a3f
docs(reborn): stop calling the unwired script lane an execution lane
BenKurrek Aug 4, 2026
756205f
fix(ci): pin the WIT scope probes and the embedded-asset owner pairing
BenKurrek Aug 4, 2026
043bc6c
docs(host-runtime): state the obligation visibility rule as it holds
BenKurrek Aug 4, 2026
c735e0c
fix(architecture): put the operator secrets boundary entry on the rig…
BenKurrek Aug 4, 2026
93ab9e6
docs(sandbox): state the Docker-gate claim as the search that checks it
BenKurrek Aug 4, 2026
d249a1d
Merge remote-tracking branch 'origin/main' into ws3/sandbox-and-mcp
BenKurrek Aug 4, 2026
847729d
refactor(triggers,conversations): scan trusted trigger prompts at the…
BenKurrek Aug 4, 2026
ae1162a
merge(ws3): sandbox lane + mcp contracts flip (#7065)
BenKurrek Aug 4, 2026
b4925fd
merge(wave3): move wit/ inside its owning crate (#7084)
BenKurrek Aug 4, 2026
e3a9724
merge(ws3): move the skill-install executor to extension_support (#7080)
BenKurrek Aug 4, 2026
177eee8
merge(ws3): route operator secrets through a product_contracts port (…
BenKurrek Aug 4, 2026
9ea9cf1
merge(ws3): split obligations into its three chartered owners (#7090)
BenKurrek Aug 4, 2026
935ffe1
fix(coverage): re-anchor the exemptions the merge shifted
BenKurrek Aug 4, 2026
75909be
Merge origin/main (#7094 Wave 2 close-out) and re-baseline the WS3 nu…
BenKurrek Aug 4, 2026
8e299a7
refactor(layers): re-layer processes -> kernel and skills -> substrat…
BenKurrek Aug 4, 2026
29aac22
docs(target-arch): close the WS3/WS4 rows this work satisfies, with e…
BenKurrek Aug 4, 2026
4512e03
Merge origin/main into the consolidated WS3/WS4 branch
BenKurrek Aug 4, 2026
3ed9c63
refactor(traces): drop the boundary-laundering re-export modules (WS6)
BenKurrek Aug 4, 2026
70ccbfc
refactor(llm): make providers.json a crate asset with a boundary rule…
BenKurrek Aug 4, 2026
8d638cc
Merge remote-tracking branch 'origin/ws6/conversations-trigger-safety…
BenKurrek Aug 4, 2026
939af48
ci(coverage): recapture the two composed floors from a real measurement
BenKurrek Aug 4, 2026
9008391
docs(skills): rewrite the stale v1 lib.rs charter note (WS6)
BenKurrek Aug 4, 2026
2349548
fix(network): compile the test rewrite seam out of production builds …
BenKurrek Aug 4, 2026
06c6224
refactor(crates): execute the WS6 crate renames, no shims (WS6)
BenKurrek Aug 4, 2026
9fbffd1
docs(coverage): verify the extension_support floor drop is compositio…
BenKurrek Aug 4, 2026
3c3189c
fix(host_runtime): collapse a duplicated obligation predicate and qui…
BenKurrek Aug 4, 2026
af14776
fix(ci): a shipped package prompt is an asset, not prose — it was sel…
BenKurrek Aug 4, 2026
02a4a9a
refactor(cli): move the binary crate to crates/app/ironclaw_cli (WS6)
BenKurrek Aug 4, 2026
ba79cb6
fix(harness): refresh the latency-runner lockfile after the sandbox c…
BenKurrek Aug 4, 2026
ff4de43
docs(target-arch): tick the three WS6 rename rows, amend four others …
BenKurrek Aug 4, 2026
b57ac8e
fix(skills): stop rejecting inline bundle installs and stop dropping …
BenKurrek Aug 4, 2026
1eebf13
Merge remote-tracking branch 'origin/main' into ws6/wave4-part2
BenKurrek Aug 4, 2026
3f1baf0
fix(ci): repoint the release-cut scripts at the moved CLI manifest
BenKurrek Aug 4, 2026
05534b6
refactor(capabilities): split host.rs along its six workflows (WS3 Ro…
BenKurrek Aug 4, 2026
f2e69ad
docs(target-arch): retract the "W7 is Wave 5" premise and tighten the…
BenKurrek Aug 4, 2026
8355cef
Merge branch 'ws3/row2-hostsplit' into ws3/consolidated
BenKurrek Aug 4, 2026
6cb6f1d
fix(ci): classify the Dockerfile in the Reborn PR test planner
BenKurrek Aug 4, 2026
85f55ee
test(architecture): fix drifted ratchet baselines and fail on slack (…
BenKurrek Aug 4, 2026
aaf6515
Merge remote-tracking branch 'origin/main' into ws3/consolidated
BenKurrek Aug 4, 2026
05fc53f
docs(checklist): strike the egress-threat text the same row already r…
BenKurrek Aug 4, 2026
31726cc
ci(composition): bound composition's absolute production LOC (#7151)
BenKurrek Aug 4, 2026
61fece8
refactor(host_runtime): shed the catalog defaults downward (WS3 row 3)
BenKurrek Aug 4, 2026
def71bf
fix(operator): name the port call in LlmKeyStoreError::Store
BenKurrek Aug 4, 2026
5079ca6
Merge branch 'ws3/row3-catalog' into ws3/consolidated
BenKurrek Aug 4, 2026
9d51cf5
refactor(cli): keep the rename flat; sever the app/ relocation to WS7…
BenKurrek Aug 4, 2026
fce5038
Merge remote-tracking branch 'origin/main' into ws6/wave4-part2
BenKurrek Aug 4, 2026
cd28d84
fix: repoint crate names reintroduced by the merge-down from main
BenKurrek Aug 4, 2026
324a1f6
test(architecture): inventory same-layer dependency edges (#7149)
BenKurrek Aug 4, 2026
05ad65a
revert(skills): restore the hidden-field install guards — the review …
BenKurrek Aug 4, 2026
f417a40
test(architecture): census LLM-vendor names in the contracts family (…
BenKurrek Aug 4, 2026
a2f9623
Merge remote-tracking branch 'origin/main' into ws3/consolidated
BenKurrek Aug 4, 2026
ca4acb3
test(architecture): make the two new gates visible to CI's test-name …
BenKurrek Aug 4, 2026
1a60f01
docs(target-architecture): record the four enforcement additions and …
BenKurrek Aug 4, 2026
24f96ab
Merge origin/main into ws/enforcement-gates-7147
BenKurrek Aug 4, 2026
5160b5e
Merge origin/main into ws6/wave4-part2
BenKurrek Aug 4, 2026
82191ea
ci(test-plan): classify the whole repo-root metadata class, not one f…
BenKurrek Aug 4, 2026
d60e94c
fix(ci): repoint the test-scope classifier off the dead `ironclaw_reb…
BenKurrek Aug 4, 2026
966061f
fix(capabilities): make the auth-required enrichment total, dropping …
BenKurrek Aug 4, 2026
7ba9c4e
refactor(capabilities): return the authorization policy helpers to au…
BenKurrek Aug 4, 2026
68ac1dd
fix(docs,ci): correct the guest WIT path and delete a test that never…
BenKurrek Aug 4, 2026
c133add
fix(ci): restore the composition-budget negative case the rename coll…
BenKurrek Aug 4, 2026
7f242ae
test(host-api): pin the process-sandbox capability literal as a valid id
BenKurrek Aug 4, 2026
54ceefd
Merge origin/main into ws/enforcement-gates-7147
BenKurrek Aug 4, 2026
f4f1236
test(ci): pin the pre-commit staged-path selector after the WIT move
BenKurrek Aug 4, 2026
cca5884
Merge origin/main (#7155, #7062) into ws6/wave4-part2 — WIP, UNVERIFIED
BenKurrek Aug 4, 2026
62862fc
style: cargo fmt after the #7155/#7062 merge
BenKurrek Aug 4, 2026
f39d086
Merge remote-tracking branch 'origin/main' into ws/enforcement-gates-…
BenKurrek Aug 4, 2026
1e971dc
chore(ci): re-seed composition loc_ceiling at the merged-tree count (…
BenKurrek Aug 4, 2026
c16d0f2
Merge remote-tracking branch 'origin/main' into ws3-consolidated-merge
BenKurrek Aug 4, 2026
9b4536c
chore(ci): move the absolute-mass record with its re-seeded ceiling (…
BenKurrek Aug 4, 2026
54e6757
Merge remote-tracking branch 'origin/main' into ws3-consolidated-merge
BenKurrek Aug 4, 2026
ace2fa7
WS5: repoint conversations' turn vocabulary to host_api; record the s…
BenKurrek Aug 4, 2026
20fcf8a
Merge ws3/consolidated (54e6757414) into ws5/conversations-turns-sever
BenKurrek Aug 4, 2026
57971c2
WS5: record the trigger-poller bound mapping and the step-1 blocker
BenKurrek Aug 4, 2026
790b739
WS3: lanes consume a narrow reserve/reconcile/release port (#7067)
BenKurrek Aug 4, 2026
7a89c2b
Merge remote-tracking branch 'origin/ws3/consolidated' into ws3-gover…
BenKurrek Aug 4, 2026
caa9fc8
WS5: descend SubmitTurnResponse to host_api::turn; record the port-in…
BenKurrek Aug 4, 2026
8b901f4
Merge remote-tracking branch 'origin/main' into ws3-consolidated-merge
BenKurrek Aug 4, 2026
2153f0b
WS10: convert the loud path-keyed gates to inventory keying before th…
BenKurrek Aug 4, 2026
f858cfb
WS10: pin the hermetic suite's WebUI frontend resolution
BenKurrek Aug 4, 2026
ccf284c
fix(ci): restore the entry tail the exemptions-union resolution dropped
BenKurrek Aug 4, 2026
23cabea
WS10: classify the repo-root scripts this PR touches in the test planner
BenKurrek Aug 4, 2026
d13fe3f
WS10: name the new gates so the Code Style lane actually runs them
BenKurrek Aug 4, 2026
3038fdf
docs(ws10): record the two gate defects this PR's own CI surfaced
BenKurrek Aug 4, 2026
2ce58fa
Merge remote-tracking branch 'origin/main' into ws3-consolidated-merge
BenKurrek Aug 4, 2026
cac037b
WS5: sever conversations -> turns by port inversion; register 4 -> 3
BenKurrek Aug 4, 2026
6563d80
chore(ci): exempt the consolidation's internal-move re-attributions t…
BenKurrek Aug 4, 2026
6769fd9
Merge remote-tracking branch 'origin/ws3/lane-governor-port' into ws/…
BenKurrek Aug 4, 2026
35388b1
Merge remote-tracking branch 'origin/ws5/conversations-turns-sever' i…
BenKurrek Aug 4, 2026
108344c
Merge remote-tracking branch 'origin/ws10/loud-path-inventory' into w…
BenKurrek Aug 4, 2026
6e82bc2
Merge remote-tracking branch 'origin/ws/enforcement-gates-7147' into …
BenKurrek Aug 4, 2026
89080c5
chore(arch): reconcile the same-layer inventory and downgrade pins wi…
BenKurrek Aug 4, 2026
2578e5d
WS2: clear the extension_host->product vocabulary residue (ports 4->1…
BenKurrek Aug 4, 2026
0b0eb31
WS2.5: gate + CHECKLIST reconciliation, and two pre-existing clippy reds
BenKurrek Aug 4, 2026
1f33886
WS2: invert channel_host's product-stack construction behind the D-A …
BenKurrek Aug 5, 2026
21647fa
Merge remote-tracking branch 'origin/main' into da-refresh
BenKurrek Aug 5, 2026
d420141
WS2 flip: extension_host products -> loops — manifest edge deleted, l…
BenKurrek Aug 5, 2026
5db7257
fix(arch): equality-assert the zeroed reference ledger; fmt
BenKurrek Aug 5, 2026
efdfdae
Merge the Waves 0-4 batch + D-A factory port into the WS6 renames
BenKurrek Aug 5, 2026
c2ec2cb
Merge remote-tracking branch 'origin/ws2/da-factory-port' into refres…
BenKurrek Aug 5, 2026
2541697
review(7181): architecture-gate hardening from CodeRabbit round 1
BenKurrek Aug 5, 2026
1cfb9c9
review(7181): MCP lane — arm the charter's failure-string rule, close…
BenKurrek Aug 5, 2026
9cddb17
review(7181): type the channel-connection port, and fix the trace-pru…
BenKurrek Aug 5, 2026
0262f3b
Re-arm the union's ratchets: recount, swap one same-layer edge, repoi…
BenKurrek Aug 5, 2026
620d785
Merge remote-tracking branch 'origin/ws/review-7181-round1' into da-r…
BenKurrek Aug 5, 2026
442d88a
ci(test-plan): classify the two path classes a rename PR reaches and …
BenKurrek Aug 5, 2026
3108d22
fix(ci): repoint changed-coverage exemption #113 past the flip's chan…
BenKurrek Aug 5, 2026
aa649ae
Merge the review-7181-round1 fold into the WS6 renames
BenKurrek Aug 5, 2026
43ca772
test(triggers): hold the workspace env mutex across the non-UTF-8 pre…
BenKurrek Aug 5, 2026
27a5571
Merge remote-tracking branch 'origin/ws2/da-factory-port' into refold…
BenKurrek Aug 5, 2026
9341107
Merge remote-tracking branch 'origin/main' into r7152
BenKurrek Aug 5, 2026
d7c38fb
ci(test-plan): classify the #7215 knowledge-graph paths the refresh's…
BenKurrek Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .claude/commands/add-sse-event.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ model: opus
> **This command needs rewriting onto the `ironclaw_webui` streaming path** —
> the Reborn projection/SSE frame served by `crates/ironclaw_webui`, with the
> client side in `crates/ironclaw_webui/frontend/`, over the event-stream
> substrate (`ironclaw_events` → `ironclaw_event_projections` →
> substrate (`ironclaw_event_log` → `ironclaw_event_projections` →
> `ironclaw_event_streams`). That rewrite has not been done: the correct
> Reborn procedure is **not** written down here, and this banner deliberately
> does not guess at it.
Expand Down
10 changes: 5 additions & 5 deletions .claude/commands/deslop-reborn.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ a legitimate Reborn target. Otherwise pick one per §1.
may be queued for deletion rather than for de-slopping (`grep -rl "<crate>" crates/*/Cargo.toml
Cargo.toml`). Verify each candidate's status with the orientation recipe (§1) before picking it.
- **Local gate reality.** You can prove `cargo fmt`, `cargo clippy`, per-crate `cargo test -p <crate>`,
the workspace unit-test tier, and the architecture-boundary test (`cargo test -p ironclaw_architecture`)
the workspace unit-test tier, and the architecture-boundary test (`cargo test -p ironclaw_architecture_tests`)
locally. The **integration tier** (`cargo test --features integration`) needs a running PostgreSQL;
the **live tier** (`-- --ignored`) needs Postgres + LLM API keys; **Reborn e2e**
(`scripts/reborn-e2e-rust.sh`) may need Docker. If a fix touches those paths, implement it fully and
Expand All @@ -57,7 +57,7 @@ List the crates (`ls crates/`). A crate is a **candidate** when ALL hold:
**Selection bias:** prefer **smaller / leaf crates first** — they fit entirely in context, gate
cleanly, and merge independently. A crate whose `src` is **under ~2k lines** can and SHOULD be read in
full (§3). Clear the small, high-leverage crates before taking on the giants (e.g.
`ironclaw_reborn_composition`, `ironclaw_product`, `ironclaw_extension_host`-scale surfaces need
`ironclaw_composition`, `ironclaw_assistant`, `ironclaw_extension_host`-scale surfaces need
targeted reading, not a full load, and may warrant splitting the de-slop across iterations
module-by-module). When unsure, prefer a crate that is **load-bearing for invariants** (turns,
dispatcher, authorization, approvals, secrets, run_state, event store) over a purely mechanical one —
Expand All @@ -76,7 +76,7 @@ If **every** Reborn crate is ledger-recorded or PR-held, this is a **no-de-slop
crate, a dependency edge, or a re-export, apply the `ironclaw-reborn-architecture-review` skill first.
- **Respect the Reborn layering.** Product/runtime composition flows **downward** through typed
contracts (`crates/AGENTS.md` → "Dependency Mental Model"). Never introduce an upstream dependency in
a lower-level crate to make a fix convenient — `cargo test -p ironclaw_architecture` enforces the
a lower-level crate to make a fix convenient — `cargo test -p ironclaw_architecture_tests` enforces the
boundaries and will fail. A de-slop that needs a new upward edge is out of scope; record it (§9).
- **Scope = ONE coherent, single-crate PR.** If the crate is huge and the findings sprawl, do the
**smallest self-contained slice** (one module / one invariant / one test gap) and record the rest in
Expand Down Expand Up @@ -222,7 +222,7 @@ the PR body. The bar is "every finding *resolved*" — fixed, or explicitly just
seal/delete whose fallout is confined to this crate (+ its own tests) is in-scope — just do it. But when
tightening a `pub` item would force edits to **other crates'** production code (routing their reads
through a new accessor), or would require a new dependency edge / re-export (which
`cargo test -p ironclaw_architecture` guards), that's a cross-crate change masquerading as de-slop:
`cargo test -p ironclaw_architecture_tests` guards), that's a cross-crate change masquerading as de-slop:
**defer it** rather than drag this PR into three crates. Likewise defer anything that **changes the
crate's observable contract or adds a dependency**. Fix the clean, contained findings now; hand off the
ripple-y ones per "Deferred findings" below.
Expand Down Expand Up @@ -262,7 +262,7 @@ detectors. A new test must actually pin behavior; a sealed `pub` must still comp
cargo fmt --all --check
cargo clippy -p <crate> --all-targets --all-features -- -D warnings
cargo test -p <crate>
cargo test -p ironclaw_architecture # dependency-boundary enforcement for crates/
cargo test -p ironclaw_architecture_tests # dependency-boundary enforcement for crates/
cargo build --workspace --all-targets # sealing a pub can break OTHER crates — this catches it
cargo clippy --all --benches --tests --examples --all-features
```
Expand Down
8 changes: 4 additions & 4 deletions .claude/commands/trace.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ Everything is **Reborn** (`crates/`) — the v1 `src/` monolith and its crates (
|---|---|---|
| Browser JS | `crates/ironclaw_webui/frontend/src` API client and page modules | `rg -n "apiFetch\(" crates/ironclaw_webui/frontend/src` |
| Route + policy | `crates/ironclaw_webui/src/webui_v2/descriptors.rs`, `router.rs`, `handlers.rs` | `grep -n "WEBUI_V2_PATTERN_\|_descriptor" crates/ironclaw_webui/src/webui_v2/descriptors.rs` |
| Product surface | `ProductSurface` in `ironclaw_host_api`, descriptors in `crates/ironclaw_product/src/reborn_services.rs` | `rg -n "ProductSurface|ProductView|ProductSurfaceCommandDescriptor" crates/ironclaw_host_api crates/ironclaw_product` |
| Composition | `crates/ironclaw_reborn_composition/src` | `rg -n "build_.*service|impl .*Service" crates/ironclaw_reborn_composition/src` |
| Product surface | `ProductSurface` in `ironclaw_host_api`, descriptors in `crates/ironclaw_assistant/src/reborn_services.rs` | `rg -n "ProductSurface|ProductView|ProductSurfaceCommandDescriptor" crates/ironclaw_host_api crates/ironclaw_assistant` |
| Composition | `crates/ironclaw_composition/src` | `rg -n "build_.*service|impl .*Service" crates/ironclaw_composition/src` |
| Turn accept | `SessionThreadService::accept_inbound_message` (`crates/ironclaw_threads`) → `TurnCoordinator::submit_turn` (`crates/ironclaw_turns/src/coordinator.rs`) | `grep -rn --include='*.rs' "submit_turn(" crates/` |
| Claim + execute | `TurnRunScheduler` → `RebornTurnRunExecutor` (`crates/ironclaw_runner/src/`) | `grep -n "claim_next_run\|invoke_driver" crates/ironclaw_runner/src/turn_scheduler.rs crates/ironclaw_runner/src/turn_run_executor.rs` |
| Loop | `PlannedDriver` (`crates/ironclaw_runner/src/planned_driver.rs`) → `CanonicalAgentLoopExecutor` (`crates/ironclaw_agent_loop/src/executor.rs`) → host ports (`crates/ironclaw_loop_host`) | `grep -rn "invoke_capability\|stream_model" crates/ironclaw_agent_loop/src/executor` |
| Claim + execute | `TurnRunScheduler` → `RebornTurnRunExecutor` (`crates/ironclaw_turn_runner/src/`) | `grep -n "claim_next_run\|invoke_driver" crates/ironclaw_turn_runner/src/turn_scheduler.rs crates/ironclaw_turn_runner/src/turn_run_executor.rs` |
| Loop | `PlannedDriver` (`crates/ironclaw_turn_runner/src/planned_driver.rs`) → `CanonicalAgentLoopExecutor` (`crates/ironclaw_agent_loop/src/executor.rs`) → host ports (`crates/ironclaw_loop_host`) | `grep -rn "invoke_capability\|stream_model" crates/ironclaw_agent_loop/src/executor` |
| Model call | `crates/ironclaw_loop_host/src/model_gateway.rs` → `ironclaw_llm` provider chain | `grep -n "complete_model_request\|CompletionRequest" crates/ironclaw_loop_host/src/model_gateway.rs` |
| Effects | `CapabilityHost::invoke_json` (`crates/ironclaw_capabilities/src/host.rs`) → dispatcher → wasm/scripts/mcp/first-party lanes | `grep -n "invoke_json" crates/ironclaw_capabilities/src/host.rs` |
| Reply to browser | SSE projection drain: `stream_events` (`crates/ironclaw_webui/src/webui_v2/handlers.rs`) over `ProjectionStream` | `grep -n "stream_events" crates/ironclaw_webui/src/webui_v2/handlers.rs` |
Expand Down
8 changes: 4 additions & 4 deletions .claude/commands/triage-prs.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,17 @@ For each open PR, determine the primary module it touches by examining the `file

| Category | Directories |
|----------|------------|
| **Reborn stack (most current work)** | `crates/ironclaw_runner/`, `crates/ironclaw_reborn_cli/`, `crates/ironclaw_reborn_composition/`, `crates/ironclaw_reborn_event_store/`, `crates/ironclaw_reborn_identity/`, `crates/ironclaw_reborn_openai_compat*/`, `crates/ironclaw_reborn_traces/`, `crates/ironclaw_webui/`, `crates/ironclaw_product/`, `crates/ironclaw_turns/`, `crates/ironclaw_threads/`, `crates/ironclaw_agent_loop/`, `crates/ironclaw_host_runtime/`, `crates/ironclaw_loop_host/`, `crates/ironclaw_capabilities/` |
| **Reborn stack (most current work)** | `crates/ironclaw_turn_runner/`, `crates/ironclaw_cli/`, `crates/ironclaw_composition/`, `crates/ironclaw_event_store/`, `crates/ironclaw_identity/`, `crates/ironclaw_openai_compat*/`, `crates/ironclaw_trace_commons/`, `crates/ironclaw_webui/`, `crates/ironclaw_assistant/`, `crates/ironclaw_turns/`, `crates/ironclaw_threads/`, `crates/ironclaw_agent_loop/`, `crates/ironclaw_host_runtime/`, `crates/ironclaw_loop_host/`, `crates/ironclaw_capabilities/` |
| **LLM & Inference** | `crates/ironclaw_llm/` |
| **Agent Core** | `crates/ironclaw_skills/` |
| **Tools & Extensions** | `crates/extensions/ironclaw_extension_support/`, `crates/ironclaw_extension_host/`, `crates/ironclaw_extensions/` |
| **Tools & Extensions** | `crates/extensions/ironclaw_extension_support/`, `crates/ironclaw_extension_host/`, `crates/ironclaw_extension_registry/` |
| **Channels** | `crates/extensions/packages/slack/`, `crates/extensions/packages/telegram/` |
| **Storage & Memory** | `crates/ironclaw_filesystem/`, `crates/ironclaw_memory*/`, `crates/ironclaw_libsql_runtime/`, `migrations/` |
| **Security** | `crates/ironclaw_safety/`, `crates/ironclaw_secrets/`, `crates/ironclaw_trust/`, `crates/ironclaw_authorization/`, `crates/ironclaw_approvals/` |
| **Config & Setup** | `crates/ironclaw_reborn_config/` |
| **Config & Setup** | `crates/ironclaw_config/` |
| **Sandbox & Processes** | `crates/ironclaw_sandbox/`, `crates/ironclaw_processes/`, `crates/ironclaw_wasm*/` |
| **Hooks** | `crates/ironclaw_hooks/` |
| **Events & Projections** | `crates/ironclaw_events/`, `crates/ironclaw_event_projections/`, `crates/ironclaw_event_streams/` |
| **Events & Projections** | `crates/ironclaw_event_log/`, `crates/ironclaw_event_projections/`, `crates/ironclaw_event_streams/` |
| **CI/CD & Docs** | `.github/`, `README.md`, `CLAUDE.md`, `*.md` (no src) |
| **Other** | Anything else |

Expand Down
12 changes: 6 additions & 6 deletions .claude/rules/gateway-events.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
paths:
- "crates/ironclaw_events/**"
- "crates/ironclaw_event_log/**"
- "crates/ironclaw_event_projections/**"
- "crates/ironclaw_event_streams/**"
- "crates/ironclaw_reborn_event_store/**"
- "crates/ironclaw_product/**"
- "crates/ironclaw_event_store/**"
- "crates/ironclaw_assistant/**"
- "crates/ironclaw_webui/**"
---
# Reborn events and transport projections
Expand All @@ -20,8 +20,8 @@ Re-derive the current ownership before changing the path:

```bash
rg -n "RuntimeEvent|EventLogEntry|Projection|StreamManager|subscribe|replay" \
crates/ironclaw_events crates/ironclaw_event_projections \
crates/ironclaw_event_streams crates/ironclaw_reborn_event_store
crates/ironclaw_event_log crates/ironclaw_event_projections \
crates/ironclaw_event_streams crates/ironclaw_event_store
```

## Rules
Expand Down Expand Up @@ -72,7 +72,7 @@ There is no annotation that makes a direct broadcast safe. Review the whole
producer-to-consumer path. Re-derive it with:

```bash
rg -n "append|EventSink|EventLog" crates/ironclaw_events crates/ironclaw_reborn_event_store
rg -n "append|EventSink|EventLog" crates/ironclaw_event_log crates/ironclaw_event_store
rg -n "ProjectionRequest|ProjectionCursor|snapshot|updates" crates/ironclaw_event_projections
rg -n "EventStreamManager|subscribe|rebase|lag|redaction" crates/ironclaw_event_streams
rg -n "Sse|WebSocket|stream" crates/ironclaw_webui
Expand Down
8 changes: 4 additions & 4 deletions .claude/rules/lifecycle.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
paths:
- "crates/ironclaw_extensions/**"
- "crates/ironclaw_extension_registry/**"
- "crates/extensions/ironclaw_extension_support/**"
- "crates/ironclaw_reborn_composition/**"
- "crates/ironclaw_composition/**"
- "crates/ironclaw_mcp/**"
- "crates/ironclaw_wasm/**"
---
Expand Down Expand Up @@ -63,6 +63,6 @@ succeeds, and shutdown paths that drop a handle without awaiting owned work.

```bash
rg -n "discover|install|activate|deactivate|remove" \
crates/ironclaw_extensions crates/extensions/ironclaw_extension_support \
crates/ironclaw_reborn_composition crates/ironclaw_extension_host
crates/ironclaw_extension_registry crates/extensions/ironclaw_extension_support \
crates/ironclaw_composition crates/ironclaw_extension_host
```
2 changes: 1 addition & 1 deletion .claude/rules/review-discipline.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ regression-check exemption rather than silently omitting coverage.
Run the narrowest crate tests and clippy first. Add:

```bash
cargo test -p ironclaw_architecture
cargo test -p ironclaw_architecture_tests
cargo clippy -p OWNING_CRATE --all-targets --all-features -- -D warnings
scripts/pre-commit-safety.sh
```
Expand Down
4 changes: 2 additions & 2 deletions .claude/rules/safety-and-sandbox.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ sensitive by default. Apply the owning Reborn redaction obligation before
logging, durable event append, projection, SSE/WebSocket delivery, model-visible
results, or user-visible errors. Never add an unredacted observability path in
parallel with the mediated host result. Re-verify the active redaction boundary
with `rg -n "redact_output|redaction|sanitize" crates/ironclaw_host_runtime crates/ironclaw_events crates/ironclaw_event_streams`.
with `rg -n "redact_output|redaction|sanitize" crates/ironclaw_host_runtime crates/ironclaw_event_log crates/ironclaw_event_streams`.

Ingress review checklist:

Expand Down Expand Up @@ -132,4 +132,4 @@ Any change touching process ports, the planner's process/filesystem backend rule
or the composition-profile → `(DeploymentMode, RuntimeProfile)` mapping requires a
**two-user cross-tenant escape test** driven through the caller: user B runs a shell
command and the test asserts it cannot read user A's files. Re-verify the current
wiring with `rg -n "HostProcessPort|TenantSandboxProcessPort|ProcessBackendKind::LocalHost|DeploymentMode::LocalSingleUser" crates/ironclaw_host_runtime crates/ironclaw_reborn_composition crates/ironclaw_runtime_policy`.
wiring with `rg -n "HostProcessPort|TenantSandboxProcessPort|ProcessBackendKind::LocalHost|DeploymentMode::LocalSingleUser" crates/ironclaw_host_runtime crates/ironclaw_composition crates/ironclaw_runtime_policy`.
2 changes: 1 addition & 1 deletion .claude/rules/skills.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
paths:
- "crates/ironclaw_skills/**"
- "crates/ironclaw_reborn_composition/src/extension_host/bundled_skills.rs"
- "crates/ironclaw_composition/src/extension_host/bundled_skills.rs"
- "skills/**"
---
# Skills System
Expand Down
4 changes: 2 additions & 2 deletions .claude/rules/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Read `.claude/skills/ironclaw-reborn-testing/SKILL.md` and
product orchestration, runner, loop, decorator chain, and in-memory filesystem —
`cargo test --test reborn_integration_SCENARIO`.
3. **Architecture:** dependency and composition boundaries —
`cargo test -p ironclaw_architecture`.
`cargo test -p ironclaw_architecture_tests`.
4. **Backend/runtime integration:** DB-, Docker-, or runtime-shaped behavior —
use the owning feature-gated suite and `cargo test --features integration`
when required by its guide.
Expand Down Expand Up @@ -88,4 +88,4 @@ workflow, or capability dispatch. Re-derive exact commands from
`crates/AGENTS.md` and the owning crate guide rather than copying stale commands.

Reborn dependency/composition boundary enforcement is
`cargo test -p ironclaw_architecture`.
`cargo test -p ironclaw_architecture_tests`.
6 changes: 3 additions & 3 deletions .claude/rules/type-placement.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ Placement decision, in order:
2. **Domain type** (thread/turn/run/resource/capability/... shapes shared
across crates) → the **domain vocabulary crate** that already owns that
concept: `ironclaw_turns`, `ironclaw_threads`, `ironclaw_resources`,
`ironclaw_events`, `ironclaw_processes`, `ironclaw_host_api`, ...
`ironclaw_event_log`, `ironclaw_processes`, `ironclaw_host_api`, ...
3. **API contract type** (request/response/config for a trait or HTTP surface)
→ the crate that **defines the contract**. ProductSurface DTOs and
descriptors live in `ironclaw_product`; host caller/error vocabulary lives
descriptors live in `ironclaw_assistant`; host caller/error vocabulary lives
in `ironclaw_host_api`; route-only wire types live in `ironclaw_webui`.
Consumers import from the contract owner.
4. **Cross-domain primitive** (identity newtypes, paths, hashing, attachment
Expand Down Expand Up @@ -104,7 +104,7 @@ path-preservation re-export §-item-1 and item-4 above forbid. A plain private
import, not a re-export); a crate-root `pub use` that keeps the old public path
alive is not. Worked example: the LLM cost table moved
`ironclaw_llm::costs` → `ironclaw_common::llm_costs`, and each consumer
(`ironclaw_llm` providers, `ironclaw_runner`, `ironclaw_reborn_composition`,
(`ironclaw_llm` providers, `ironclaw_turn_runner`, `ironclaw_composition`,
the root crate) had its import repointed — no shim was left behind.

## Duplicate detection — signatures, not names
Expand Down
Loading
Loading