docs: removed references to individual task files in the code documentation
This commit is contained in:
6 files changed
+18
-27
No files matched your search
@@ -38,7 +38,7 @@ initial_state:
|
|||||||
research_attempts: 0
|
research_attempts: 0
|
||||||
local_context: ''
|
local_context: ''
|
||||||
local_sources: ''
|
local_sources: ''
|
||||||
# Fault-path defaults (TASK-023 hardening). `questions: []` also keeps the
|
# Fault-path defaults. `questions: []` also keeps the
|
||||||
# knowledge_lookup lane alive for one super-step when `plan` dies inside the
|
# knowledge_lookup lane alive for one super-step when `plan` dies inside the
|
||||||
# static fan-out: research_each_question maps over zero items while the
|
# static fan-out: research_each_question maps over zero items while the
|
||||||
# plan_fault → end_fault route renders the failure sentinel.
|
# plan_fault → end_fault route renders the failure sentinel.
|
||||||
@@ -100,7 +100,7 @@ nodes:
|
|||||||
description: 3-5 specific, self-contained sub-questions.
|
description: 3-5 specific, self-contained sub-questions.
|
||||||
required: [research_plan, questions]
|
required: [research_plan, questions]
|
||||||
# On success plan_failure holds the node's structured JSON output; on
|
# On success plan_failure holds the node's structured JSON output; on
|
||||||
# failure the engine writes "LLM node …failed: <chain>" into it BEFORE
|
# failure the engine writes "LLM node ...failed: <chain>" into it BEFORE
|
||||||
# routing to the fallback (schema properties are only merged on success).
|
# routing to the fallback (schema properties are only merged on success).
|
||||||
state_updates:
|
state_updates:
|
||||||
plan_failure: '{{output}}'
|
plan_failure: '{{output}}'
|
||||||
@@ -175,7 +175,7 @@ nodes:
|
|||||||
max_attempts: 2
|
max_attempts: 2
|
||||||
state_updates:
|
state_updates:
|
||||||
finding: '{{output}}'
|
finding: '{{output}}'
|
||||||
# On failure the engine writes "LLM node …failed: <chain>" into `finding`
|
# On failure the engine writes "LLM node ...failed: <chain>" into `finding`
|
||||||
# via the state_updates above BEFORE routing to the fallback. The marker
|
# via the state_updates above BEFORE routing to the fallback. The marker
|
||||||
# is branch-local: a map branch's fallback must stay inside the branch.
|
# is branch-local: a map branch's fallback must stay inside the branch.
|
||||||
fallback: question_fault
|
fallback: question_fault
|
||||||
|
|||||||
@@ -8157,9 +8157,6 @@ mod tests {
|
|||||||
assert!(paths::skill_file("frontend-ui-ux").exists());
|
assert!(paths::skill_file("frontend-ui-ux").exists());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// TASK-021 pinned prose: the task-queue guidance added to the shipped
|
|
||||||
/// artifacts must not silently erode. Each anchor quotes the shipped text
|
|
||||||
/// verbatim (chosen to avoid line-wrap boundaries in the YAML sources).
|
|
||||||
#[test]
|
#[test]
|
||||||
#[serial]
|
#[serial]
|
||||||
fn bundled_assets_pin_task_queue_guidance() {
|
fn bundled_assets_pin_task_queue_guidance() {
|
||||||
|
|||||||
+7
-9
@@ -20,8 +20,6 @@ const DEFAULT_TIMEOUT_SECS: u64 = 300;
|
|||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
pub(super) enum AgentExecutionOutcome {
|
pub(super) enum AgentExecutionOutcome {
|
||||||
/// Carries the raw agent output for tests; the executor's agent arm
|
|
||||||
/// ignores the payload.
|
|
||||||
Continue(String),
|
Continue(String),
|
||||||
FellBack(String),
|
FellBack(String),
|
||||||
}
|
}
|
||||||
@@ -49,8 +47,8 @@ impl AgentNodeExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Turns the node run's final result into a routing outcome. With a
|
/// Turns the node run's final result into a routing outcome. With a
|
||||||
/// `fallback` declared, any failure — retries exhausted, hard error, or
|
/// `fallback` declared, any failure (e.g. retries exhausted, hard error, or
|
||||||
/// extraction failure — is written into state as
|
/// extraction failure) is written into state as
|
||||||
/// `"Agent node failed: <chain>"` and routes to the fallback. Only the
|
/// `"Agent node failed: <chain>"` and routes to the fallback. Only the
|
||||||
/// node's `state_updates` can capture that string (bound as `{{output}}`
|
/// node's `state_updates` can capture that string (bound as `{{output}}`
|
||||||
/// during interpolation); the output-schema auto-merge never applies to it,
|
/// during interpolation); the output-schema auto-merge never applies to it,
|
||||||
@@ -192,11 +190,11 @@ fn boxed_attempt<'a>(fut: impl Future<Output = Result<String>> + Send + 'a) -> A
|
|||||||
/// failures that `is_transient_error` recognizes.
|
/// failures that `is_transient_error` recognizes.
|
||||||
///
|
///
|
||||||
/// `run_agent_for_graph` takes the peer identity off the ctx and never
|
/// `run_agent_for_graph` takes the peer identity off the ctx and never
|
||||||
/// restores it, so BOTH halves — the (id, inbox) assignment and the registry
|
/// restores it, so BOTH halves, the (id, inbox) assignment and the registry,
|
||||||
/// — are captured up front and re-armed before every retry; re-arming only
|
/// are captured up front and re-armed before every retry; re-arming only
|
||||||
/// the assignment would give a retried attempt its identity back but no
|
/// the assignment would give a retried attempt its identity back but no
|
||||||
/// roster and a broken `agent__send_message`. A frontier peer is retired
|
/// roster and a broken `agent__send_message`. A frontier peer is retired
|
||||||
/// exactly once, after the final attempt, the moment the agent stops — not
|
/// exactly once, after the final attempt, the moment the agent stops, not
|
||||||
/// after extraction. Chains re-arm the same identity for later steps and
|
/// after extraction. Chains re-arm the same identity for later steps and
|
||||||
/// leave retirement to the chain runner.
|
/// leave retirement to the chain runner.
|
||||||
async fn run_with_retries(
|
async fn run_with_retries(
|
||||||
@@ -259,8 +257,8 @@ async fn retry_transient(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Applies the wall-clock bound and the human-readable failure contexts to a
|
/// Applies the wall-clock bound and the human-readable failure contexts to a
|
||||||
/// single attempt. The contexts land here — before the caller inspects the
|
/// single attempt. The contexts land here, before the caller inspects the
|
||||||
/// error — because `tokio::time::error::Elapsed` renders as "deadline has
|
/// error, because `tokio::time::error::Elapsed` renders as "deadline has
|
||||||
/// elapsed", which the transient matcher would not recognize as a timeout.
|
/// elapsed", which the transient matcher would not recognize as a timeout.
|
||||||
async fn bounded_attempt(
|
async fn bounded_attempt(
|
||||||
agent_name: &str,
|
agent_name: &str,
|
||||||
|
|||||||
+3
-3
@@ -294,8 +294,8 @@ async fn run_chain_step(
|
|||||||
branch_nodes.sort_unstable();
|
branch_nodes.sort_unstable();
|
||||||
bail!(
|
bail!(
|
||||||
"routed to '{target}' which is outside the branch subgraph rooted at \
|
"routed to '{target}' which is outside the branch subgraph rooted at \
|
||||||
'{}' (branch nodes: {}). Routing targets inside a map branch — script \
|
'{}' (branch nodes: {}). Routing targets inside a map branch (script \
|
||||||
`_next` or node fallback — must stay within the branch.",
|
`_next` or node fallback) must stay within the branch.",
|
||||||
chain.entry,
|
chain.entry,
|
||||||
branch_nodes.join(", ")
|
branch_nodes.join(", ")
|
||||||
);
|
);
|
||||||
@@ -1282,7 +1282,7 @@ nodes:
|
|||||||
);
|
);
|
||||||
assert!(
|
assert!(
|
||||||
chain.contains(
|
chain.contains(
|
||||||
"Routing targets inside a map branch — script `_next` or node fallback — \
|
"Routing targets inside a map branch (script `_next` or node fallback) \
|
||||||
must stay within the branch."
|
must stay within the branch."
|
||||||
),
|
),
|
||||||
"{chain}"
|
"{chain}"
|
||||||
|
|||||||
+4
-8
@@ -23,6 +23,7 @@ pub use executor::GraphExecutor;
|
|||||||
pub use parser::{GraphParser, agent_has_graph};
|
pub use parser::{GraphParser, agent_has_graph};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
use anyhow::Error;
|
||||||
pub use types::{Graph, NodeType};
|
pub use types::{Graph, NodeType};
|
||||||
|
|
||||||
pub const GRAPH_SCHEMA_VERSION: &str = "1.0";
|
pub const GRAPH_SCHEMA_VERSION: &str = "1.0";
|
||||||
@@ -34,12 +35,7 @@ pub(crate) fn wall_clock(secs: u64) -> Option<Duration> {
|
|||||||
(secs != 0).then(|| Duration::from_secs(secs))
|
(secs != 0).then(|| Duration::from_secs(secs))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Whether an error looks like a transient transport/provider failure worth
|
pub(crate) fn is_transient_error(err: &Error) -> bool {
|
||||||
/// retrying. Typed transport errors anywhere in the chain (reqwest
|
|
||||||
/// connect/timeout failures and tokio's `Elapsed`) are recognized first;
|
|
||||||
/// providers that surface failures only as rendered text fall back to
|
|
||||||
/// substring matching over the whole context chain.
|
|
||||||
pub(crate) fn is_transient_error(err: &anyhow::Error) -> bool {
|
|
||||||
if err.chain().any(|c| {
|
if err.chain().any(|c| {
|
||||||
c.downcast_ref::<reqwest::Error>()
|
c.downcast_ref::<reqwest::Error>()
|
||||||
.is_some_and(|e| e.is_connect() || e.is_timeout())
|
.is_some_and(|e| e.is_connect() || e.is_timeout())
|
||||||
@@ -136,7 +132,7 @@ mod tests {
|
|||||||
let elapsed = tokio::time::timeout(Duration::from_secs(1), std::future::pending::<()>())
|
let elapsed = tokio::time::timeout(Duration::from_secs(1), std::future::pending::<()>())
|
||||||
.await
|
.await
|
||||||
.expect_err("pending future must time out");
|
.expect_err("pending future must time out");
|
||||||
let err = anyhow::Error::new(elapsed).context("calling provider");
|
let err = Error::new(elapsed).context("calling provider");
|
||||||
|
|
||||||
// "deadline has elapsed" contains no recognized substring, so only
|
// "deadline has elapsed" contains no recognized substring, so only
|
||||||
// the typed pre-check can classify this as transient.
|
// the typed pre-check can classify this as transient.
|
||||||
@@ -157,6 +153,6 @@ mod tests {
|
|||||||
.expect_err("closed local port must refuse the connection");
|
.expect_err("closed local port must refuse the connection");
|
||||||
|
|
||||||
assert!(err.is_connect());
|
assert!(err.is_connect());
|
||||||
assert!(is_transient_error(&anyhow::Error::new(err)));
|
assert!(is_transient_error(&Error::new(err)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -416,7 +416,7 @@ impl GraphValidator {
|
|||||||
node_id,
|
node_id,
|
||||||
format!(
|
format!(
|
||||||
"{kind} node declares `fallback` with `output_schema` but no \
|
"{kind} node declares `fallback` with `output_schema` but no \
|
||||||
`state_updates`; on failure the \"…failed: <chain>\" string is \
|
`state_updates`; on failure the \"...failed: <chain>\" string is \
|
||||||
only written through `state_updates`, so the fallback node \
|
only written through `state_updates`, so the fallback node \
|
||||||
cannot see why it was reached"
|
cannot see why it was reached"
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in new issue
Block a user