Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
66b7d5a
refactor(contracts): complete the turn vocabulary in host_api and ret…
BenKurrek Jul 31, 2026
a8e8bfa
docs(target-architecture): tick WS1.1 and close PLAN decision round #1
BenKurrek Jul 31, 2026
e0888a8
Merge branch 'main' into ws1/turn-vocabulary
BenKurrek Jul 31, 2026
e532db0
refactor(contracts): repoint touched imports to host_api and pin the …
BenKurrek Jul 31, 2026
e1b5297
docs(target-architecture): remove the row-97 self-contradiction
BenKurrek Jul 31, 2026
bad94d6
ci(coverage): complete the WS1.1 changed-coverage exemptions
BenKurrek Jul 31, 2026
1591fd2
refactor(contracts): extract ironclaw_loop_contracts and flip agent_l…
BenKurrek Jul 31, 2026
b953e95
refactor(contracts): pin the loop-contract boundary and register the …
BenKurrek Jul 31, 2026
b29a853
Merge branch 'ws1/turn-vocabulary' into ws1/loop-contracts
BenKurrek Jul 31, 2026
92185e9
docs(reborn): split the loop-exit contract's ownership claim across t…
BenKurrek Jul 31, 2026
2bead8e
docs(contracts): repoint the three intra-doc links the crate split broke
BenKurrek Jul 31, 2026
0561973
fix(tests): repoint the loop-exit evidence imports the port rule moved
BenKurrek Jul 31, 2026
4d3c6d4
Merge origin/main into ws1/loop-contracts
BenKurrek Jul 31, 2026
5533099
fix(collapse): reconcile the lock pin and the moved failure-category …
BenKurrek Jul 31, 2026
12514f5
fix(ci): repoint the exact-test selector WS1.2 moved
BenKurrek Jul 31, 2026
55bb57c
fix(coverage): drop the exemption WS1.2 made stale
BenKurrek Jul 31, 2026
a7b8d0a
Merge origin/main into ws1/loop-contracts
BenKurrek Jul 31, 2026
3472ed4
fix(coverage): merge main and derive the WS1.2 changed-coverage exemp…
BenKurrek Jul 31, 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
  •  
  •  
  •  
36 changes: 34 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
members = [".", "crates/ironclaw_common", "crates/ironclaw_observability", "crates/ironclaw_host_api", "crates/ironclaw_host_ingress", "crates/ironclaw_libsql_runtime", "crates/ironclaw_filesystem", "crates/ironclaw_attachments", "crates/ironclaw_extractors", "crates/ironclaw_memory", "crates/ironclaw_memory_native", "crates/ironclaw_memory_mem0", "crates/ironclaw_events", "crates/ironclaw_event_projections", "crates/ironclaw_event_streams", "crates/ironclaw_reborn_event_store", "crates/ironclaw_extensions", "crates/ironclaw_extension_host", "crates/ironclaw_processes", "crates/ironclaw_scripts", "crates/ironclaw_process_sandbox", "crates/ironclaw_mcp", "crates/ironclaw_wasm", "crates/ironclaw_wasm_limiter", "crates/ironclaw_capabilities", "crates/ironclaw_secrets", "crates/ironclaw_network", "crates/ironclaw_host_runtime", "crates/ironclaw_runtime_policy", "crates/ironclaw_authorization", "crates/ironclaw_approvals", "crates/ironclaw_resources", "crates/ironclaw_auth", "crates/ironclaw_trust", "crates/ironclaw_turns", "crates/ironclaw_agent_loop", "crates/ironclaw_threads", "crates/ironclaw_prompt_envelope", "crates/ironclaw_hooks", "crates/ironclaw_loop_host", "crates/ironclaw_runner", "crates/ironclaw_reborn_config", "crates/ironclaw_operator", "crates/ironclaw_reborn_composition", "crates/ironclaw_reborn_identity", "crates/ironclaw_first_party_extensions", "crates/ironclaw_first_party_extension_ports", "crates/ironclaw_reborn_cli", "crates/ironclaw_reborn_traces", "crates/ironclaw_webui", "crates/ironclaw_reborn_openai_compat", "crates/ironclaw_conversations", "crates/ironclaw_product", "crates/ironclaw_telegram_extension", "crates/ironclaw_telegram_v2_adapter", "crates/ironclaw_slack_extension", "crates/ironclaw_outbound", "crates/ironclaw_triggers", "crates/ironclaw_projects", "crates/ironclaw_architecture", "crates/ironclaw_safety", "crates/ironclaw_skills", "crates/ironclaw_llm", "tools/ironclaw_stress"]
members = [".", "crates/ironclaw_common", "crates/ironclaw_observability", "crates/ironclaw_host_api", "crates/ironclaw_host_ingress", "crates/ironclaw_libsql_runtime", "crates/ironclaw_filesystem", "crates/ironclaw_attachments", "crates/ironclaw_extractors", "crates/ironclaw_memory", "crates/ironclaw_memory_native", "crates/ironclaw_memory_mem0", "crates/ironclaw_events", "crates/ironclaw_event_projections", "crates/ironclaw_event_streams", "crates/ironclaw_reborn_event_store", "crates/ironclaw_extensions", "crates/ironclaw_extension_host", "crates/ironclaw_processes", "crates/ironclaw_scripts", "crates/ironclaw_process_sandbox", "crates/ironclaw_mcp", "crates/ironclaw_wasm", "crates/ironclaw_wasm_limiter", "crates/ironclaw_capabilities", "crates/ironclaw_secrets", "crates/ironclaw_network", "crates/ironclaw_host_runtime", "crates/ironclaw_runtime_policy", "crates/ironclaw_authorization", "crates/ironclaw_approvals", "crates/ironclaw_resources", "crates/ironclaw_auth", "crates/ironclaw_trust", "crates/ironclaw_turns", "crates/ironclaw_loop_contracts", "crates/ironclaw_agent_loop", "crates/ironclaw_threads", "crates/ironclaw_prompt_envelope", "crates/ironclaw_hooks", "crates/ironclaw_loop_host", "crates/ironclaw_runner", "crates/ironclaw_reborn_config", "crates/ironclaw_operator", "crates/ironclaw_reborn_composition", "crates/ironclaw_reborn_identity", "crates/ironclaw_first_party_extensions", "crates/ironclaw_first_party_extension_ports", "crates/ironclaw_reborn_cli", "crates/ironclaw_reborn_traces", "crates/ironclaw_webui", "crates/ironclaw_reborn_openai_compat", "crates/ironclaw_conversations", "crates/ironclaw_product", "crates/ironclaw_telegram_extension", "crates/ironclaw_telegram_v2_adapter", "crates/ironclaw_slack_extension", "crates/ironclaw_outbound", "crates/ironclaw_triggers", "crates/ironclaw_projects", "crates/ironclaw_architecture", "crates/ironclaw_safety", "crates/ironclaw_skills", "crates/ironclaw_llm", "tools/ironclaw_stress"]
default-members = ["crates/ironclaw_reborn_cli"]
exclude = [
"crates/ironclaw_silk_decoder",
Expand Down Expand Up @@ -188,6 +188,7 @@ ironclaw_threads = { path = "crates/ironclaw_threads", version = "0.1.0" }
# `test-support` unlocks the shared in-memory process-journal-backed turn
# runtime used by integration tests. cfg(test) does not propagate from an
# integration-test binary into its deps, so the feature is explicit here.
ironclaw_loop_contracts = { path = "crates/ironclaw_loop_contracts", version = "0.1.0" }
ironclaw_turns = { path = "crates/ironclaw_turns", version = "0.1.0", features = ["test-support"] }
# `InMemoryDurableEventLog` for the W5-WEBUI-API-1 SSE scenario's test-local
# `ProjectionStream` wiring (`build_webui_event_stream_for_test`).
Expand Down
3 changes: 2 additions & 1 deletion crates/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ Boundary rule: if you need an upstream crate in a low-level crate, stop and chec

| Crate | Load first | Owns / go here for | Avoid moving in |
| --- | --- | --- | --- |
| `ironclaw_turns` | `ironclaw_turns/AGENTS.md`, `ironclaw_turns/CLAUDE.md` | Host-layer turn coordination: requests/responses, coordinator, runner, run profiles, loop exit, memory/context handoff, turn store. | Product adapter rendering, raw runtime lanes, UI behavior. |
| `ironclaw_turns` | `ironclaw_turns/AGENTS.md`, `ironclaw_turns/CLAUDE.md` | Host-layer turn coordination and admission *authority*: requests/responses, coordinator, runner claim projection, loop-exit **validation** (applier, policy, violation taxonomy), turn store projection. | Product adapter rendering, raw runtime lanes, UI behavior, and the loop-tier contract itself (`ironclaw_loop_contracts`). |
| `ironclaw_loop_contracts` | `ironclaw_loop_contracts/CLAUDE.md`, `docs/reborn/target-architecture/families/contracts.md` | The loop-tier contract: the eleven `Loop*Port` traits + `AgentLoopDriverHost`, `AgentLoopDriver`, run-profile vocabulary, prompt/model/skill/instruction/milestone contract types, the `LoopExit` claim DTOs, the redacted checkpoint payload. | Any implementation of a port declared here, the turn coordinator/state store/exit applier, a dependency on `ironclaw_turns` (the direction inverts), any framework or driver crate. |
| `ironclaw_threads` | `ironclaw_threads/AGENTS.md`, `ironclaw_threads/CLAUDE.md` | Canonical session thread/transcript service contracts, identifiers, tool-result references, db/in-memory stores. | Product delivery policy or model/provider behavior. |
| `ironclaw_conversations` | `ironclaw_conversations/AGENTS.md`, `ironclaw_conversations/CLAUDE.md` | Conversation binding, session thread contracts, inbound/state store, libSQL/Postgres conversation persistence. | Capability runtime internals or UI transport. |
| `ironclaw_agent_loop` | `ironclaw_agent_loop/AGENTS.md`, `ironclaw_agent_loop/CLAUDE.md` | Agent-loop framework state, planner/executor, strategy/family contracts, test support. | Product adapters, transport, concrete provider auth. |
Expand Down
4 changes: 2 additions & 2 deletions crates/Architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -1004,8 +1004,8 @@ Partial or evolving:
- `crates/AGENTS.md`
- `crates/ironclaw_turns/src/lib.rs`
- `crates/ironclaw_turns/src/runner.rs`
- `crates/ironclaw_turns/src/run_profile/driver.rs`
- `crates/ironclaw_turns/src/run_profile/host/`
- `crates/ironclaw_loop_contracts/src/driver.rs`
- `crates/ironclaw_loop_contracts/src/host/`
- `crates/ironclaw_agent_loop/src/executor.rs`
- `crates/ironclaw_agent_loop/src/family.rs`
- `crates/ironclaw_agent_loop/src/state.rs`
Expand Down
2 changes: 1 addition & 1 deletion crates/ironclaw_agent_loop/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ async-trait = "0.1"
blake3 = "1"
ironclaw_common = { path = "../ironclaw_common", version = "0.4.2" }
ironclaw_host_api = { path = "../ironclaw_host_api", version = "0.1.0" }
ironclaw_turns = { path = "../ironclaw_turns", version = "0.1.0" }
ironclaw_loop_contracts = { path = "../ironclaw_loop_contracts", version = "0.1.0" }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_jcs = "0.2"
Expand Down
20 changes: 9 additions & 11 deletions crates/ironclaw_agent_loop/src/default_planner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -238,16 +238,14 @@ impl Default for DefaultStrategySlots {
mod tests {
use async_trait::async_trait;
use ironclaw_host_api::ids::{TenantId, ThreadId};
use ironclaw_turns::{
AgentLoopDriverDescriptor, RunProfileId, RunProfileVersion, TurnId, TurnRunId, TurnScope,
run_profile::{
CancellationPolicy, CapabilitySurfaceProfileId, CheckpointPolicy, CheckpointSchemaId,
ConcurrencyClass, ContextProfileId, LoopDriverId, LoopPromptBundleRequest,
LoopRunContext, ModelProfileId, PromptContextTokenBudget, PromptMode,
RedactedRunProfileProvenance, ResolvedRunProfile, ResourceBudgetPolicy,
ResourceBudgetTier, RunClassId, RunProfileFingerprint, RuntimeProfileConstraints,
SchedulingClass, SteeringPolicy,
},
use ironclaw_host_api::turn::{RunProfileId, RunProfileVersion, TurnId, TurnRunId, TurnScope};
use ironclaw_loop_contracts::{
AgentLoopDriverDescriptor, CancellationPolicy, CapabilitySurfaceProfileId,
CheckpointPolicy, CheckpointSchemaId, ConcurrencyClass, ContextProfileId, LoopDriverId,
LoopPromptBundleRequest, LoopRunContext, ModelProfileId, PromptContextTokenBudget,
PromptMode, RedactedRunProfileProvenance, ResolvedRunProfile, ResourceBudgetPolicy,
ResourceBudgetTier, RunClassId, RunProfileFingerprint, RuntimeProfileConstraints,
SchedulingClass, SteeringPolicy,
};

use crate::family::{ComponentDigest, LoopFamilyId};
Expand Down Expand Up @@ -462,7 +460,7 @@ mod tests {
max_model_calls: 32,
max_capability_invocations: 64,
},
personal_context_policy: ironclaw_turns::run_profile::PersonalContextPolicy::Excluded,
personal_context_policy: ironclaw_loop_contracts::PersonalContextPolicy::Excluded,
runtime_constraints: RuntimeProfileConstraints {
allow_raw_runtime_backend_selection: false,
allow_broad_capability_surface: false,
Expand Down
13 changes: 5 additions & 8 deletions crates/ironclaw_agent_loop/src/executor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,9 @@ use reply_admission::{ReplyAdmissionInput, ReplyAdmissionStage, ReplyAdmissionSt
use turn_stop::{StopInput, StopObservationInput, StopObservationStep, StopStage, StopStep};

use async_trait::async_trait;
use ironclaw_turns::{
LoopCancelledReasonKind, LoopExit,
run_profile::{
AgentLoopDriverHost, AgentLoopHostError, AgentLoopHostErrorKind,
AgentLoopHostErrorReasonKind, LoopInputAckToken, LoopSafeSummary,
},
use ironclaw_loop_contracts::{
AgentLoopDriverHost, AgentLoopHostError, AgentLoopHostErrorKind, AgentLoopHostErrorReasonKind,
LoopCancelledReasonKind, LoopExit, LoopInputAckToken, LoopSafeSummary,
};

use crate::{
Expand Down Expand Up @@ -185,8 +182,8 @@ impl AgentLoopExecutor for CanonicalAgentLoopExecutor {
#[derive(Debug)]
struct CheckpointWrite {
state: LoopExecutionState,
checkpoint_id: ironclaw_turns::TurnCheckpointId,
state_ref: ironclaw_turns::run_profile::LoopCheckpointStateRef,
checkpoint_id: ironclaw_host_api::turn::TurnCheckpointId,
state_ref: ironclaw_loop_contracts::LoopCheckpointStateRef,
}

#[derive(Debug)]
Expand Down
2 changes: 1 addition & 1 deletion crates/ironclaw_agent_loop/src/executor/assistant_reply.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use async_trait::async_trait;
use ironclaw_turns::run_profile::{AssistantReply, FinalizeAssistantMessage, LoopModelUsage};
use ironclaw_loop_contracts::{AssistantReply, FinalizeAssistantMessage, LoopModelUsage};

use crate::{state::LoopExecutionState, strategies::TurnSummary};

Expand Down
2 changes: 1 addition & 1 deletion crates/ironclaw_agent_loop/src/executor/budget.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use async_trait::async_trait;
use ironclaw_turns::{LoopExit, LoopFailureKind};
use ironclaw_loop_contracts::{LoopExit, LoopFailureKind};

use crate::state::{CheckpointKind, LoopExecutionState, TerminalWarningObservation};

Expand Down
5 changes: 2 additions & 3 deletions crates/ironclaw_agent_loop/src/executor/canonical.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use ironclaw_turns::{
LoopExit,
run_profile::{AgentLoopDriverHost, LoopDriverNoteKind, LoopProgressEvent, ParentLoopOutput},
use ironclaw_loop_contracts::{
AgentLoopDriverHost, LoopDriverNoteKind, LoopExit, LoopProgressEvent, ParentLoopOutput,
};
use tracing::debug;

Expand Down
Loading
Loading