docs: removed references to individual task files in the code documentation

This commit is contained in:
Dark-Alex-17 committed 2026-09-14 10:50:33 -06:00
1 parent 13b8eb87a9
commit f230c28bf4
6 files changed
+18 -27

No files matched your search

+3 -3
View File
@@ -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
-3
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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)));
} }
} }
+1 -1
View File
@@ -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"
), ),