pub struct RunKickRequest {
pub init_ctx_override: Option<Value>,
pub task_input_override: Option<TaskInputSpec>,
pub timeout_secs: Option<u64>,
pub detach: bool,
pub operator_sid: Option<String>,
}Expand description
Request body for POST /v1/tasks/:id/runs (issue #19 ST4) — every
field is optional, and the body itself is optional (see
task_rekick’s Option<Json<Self>> parameter); a caller that sends
no body, or {}, or omits a field gets exactly today’s rekick
behavior for that layer.
Fields§
§init_ctx_override: Option<Value>Per-Run override for the flow-ir initial ctx. Merged on top of
TaskRecord.input_ctx (itself already merged on top of
Blueprint.default_init_ctx at original launch time) via
merge_init_ctx_3layer — Run wins on key collision, same
shallow-merge / non-Object-fully-replaces rule as every other
layer in the cascade. None (absent field, or no body at all) is
a no-op: the BP+Task merge alone seeds this kick, identical to
pre-#19 rekick.
task_input_override: Option<TaskInputSpec>Per-Run override for the Task-level canonical fields
(project_root / work_dir / task_metadata). None falls back
to TaskRecord.task_input_spec (the spec resolved and snapshotted
at original POST /v1/tasks time); Some replaces it wholesale
for this kick only — the stored TaskRecord.task_input_spec is
never mutated by a rekick.
timeout_secs: Option<u64>Per-Run ceiling (seconds) for this kick’s synchronous dispatch
await (issue #35 ST3 — GH #33 Guard 2 parity). Some(0) is
rejected (400). None falls back to AppState.sync_timeout_secs
(the server-wide default), same cascade as
TaskLaunchRequest.timeout_secs (lib.rs:818-826).
detach: boolGH #37: opt into the detached (asynchronous) rekick — same
semantics as TaskLaunchRequest.detach. false (default) keeps
the synchronous dispatch; true spawns the flow eval as a
detached background task bounded by the run TTL alone and returns
202 Accepted with status: "running" immediately. Mutually
exclusive with timeout_secs (400 when combined).
operator_sid: Option<String>Per-Run pin to a live Operator session (rekick parity with
POST /v1/tasks’ operator_sid — see
crate::TaskLaunchRequest::operator_sid for the full
disconnected-vs-unknown / last-write-wins contract). Resolved
before any Task/Run store write: an unknown sid fails fast with a
400, never silently falling back to the BP-level alias lookup.
Some(sid) becomes this kick’s operator_backend_id (this handler
carries no other Operator-override field) and is persisted verbatim
into RunRecord.operator_sid; None (absent field, or no body at
all) preserves the pre-existing Operator-default rekick path
byte-for-byte.
Trait Implementations§
Source§impl Debug for RunKickRequest
impl Debug for RunKickRequest
Source§impl Default for RunKickRequest
impl Default for RunKickRequest
Source§fn default() -> RunKickRequest
fn default() -> RunKickRequest
Source§impl<'de> Deserialize<'de> for RunKickRequest
impl<'de> Deserialize<'de> for RunKickRequest
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for RunKickRequest
impl JsonSchema for RunKickRequest
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreAuto Trait Implementations§
impl Freeze for RunKickRequest
impl RefUnwindSafe for RunKickRequest
impl Send for RunKickRequest
impl Sync for RunKickRequest
impl Unpin for RunKickRequest
impl UnsafeUnpin for RunKickRequest
impl UnwindSafe for RunKickRequest
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more