Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions crates/ironclaw_capabilities/src/host.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ use ironclaw_host_api::{
ActivityId, AuthorizeResult, Authorized, Blocked, CapabilityAuthorizer, CapabilityDescriptor,
CapabilityDispatchRequest, CapabilityDispatchResult, CapabilityDispatcher, CapabilityGrantId,
CapabilityId, Decision, DenyReason, DenyRef, DispatchError, ExecutionContext, GateRef,
Invocation, InvocationFingerprint, InvocationId, InvocationOrigin, Obligation, ProcessId,
ProductKind, ResourceEstimate, ResourceReservation, ResourceReservationId, ResourceScope,
RuntimeLane,
GateWaypoint, Invocation, InvocationFingerprint, InvocationId, InvocationOrigin, Obligation,
ProcessId, ProductKind, ResourceEstimate, ResourceReservation, ResourceReservationId,
ResourceScope, RuntimeLane,
};
use ironclaw_processes::{ProcessManager, ProcessStart};
use ironclaw_run_state::{
Expand Down Expand Up @@ -729,8 +729,8 @@ where
}
}
Ok(AuthorizeFold::Blocked {
result: AuthorizeResult::Blocked(Blocked::Approval(GateRef::from_uuid(
approval_request_id.as_uuid(),
result: AuthorizeResult::Blocked(Blocked::Approval(GateWaypoint::new(
GateRef::from_uuid(approval_request_id.as_uuid()),
))),
})
}
Expand Down Expand Up @@ -2035,8 +2035,8 @@ where
}
}
Ok(AuthorizeFold::Blocked {
result: AuthorizeResult::Blocked(Blocked::Approval(GateRef::from_uuid(
approval_request_id.as_uuid(),
result: AuthorizeResult::Blocked(Blocked::Approval(GateWaypoint::new(
GateRef::from_uuid(approval_request_id.as_uuid()),
))),
})
}
Expand Down Expand Up @@ -2154,7 +2154,9 @@ where
// `AuthorizationRequiresApproval` with no persisted gate, so the
// forward-looking Blocked witness carries a fresh correlation id.
Ok(AuthorizeFold::Blocked {
result: AuthorizeResult::Blocked(Blocked::Approval(GateRef::new())),
result: AuthorizeResult::Blocked(Blocked::Approval(GateWaypoint::new(
GateRef::new(),
))),
})
}
}
Expand Down
9 changes: 9 additions & 0 deletions crates/ironclaw_host_api/src/gate_record.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,14 @@ pub enum GateRecord {
summary: SafeSummary,
result: ResultRef,
byte_len: u64,
/// The preserved originating loop result ref the staged result was
/// keyed under (§5.3 Stage 1 non-lossy carry): `result` is a freshly
/// minted uuid handle, so without this the child output the loop staged
/// under its own ref would become unreachable from the durable record a
/// later resume turn renders from. `None` on records persisted before
/// this field existed (serde default keeps old rows rehydratable).
#[serde(default, skip_serializing_if = "Option::is_none")]
result_origin: Option<crate::LoopRef>,
},
/// Awaiting a client-executed external tool the host does not run.
ExternalTool { summary: SafeSummary },
Expand Down Expand Up @@ -149,6 +157,7 @@ mod tests {
summary: summary(),
result,
byte_len: 2048,
result_origin: Some(crate::LoopRef::new("result:child-1").unwrap()),
},
"dependent_run",
),
Expand Down
2 changes: 2 additions & 0 deletions crates/ironclaw_host_api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ pub mod mount;
pub mod path;
pub mod resolution;
pub mod resource;
pub mod result_meta;
pub mod runtime;
pub mod runtime_policy;
pub mod safe_summary;
Expand Down Expand Up @@ -83,6 +84,7 @@ pub use mount::*;
pub use path::*;
pub use resolution::*;
pub use resource::*;
pub use result_meta::*;
pub use runtime::*;
pub use runtime_policy::*;
pub use safe_summary::*;
Expand Down
Loading
Loading