R3 guards: parse_request (crash → ask_topic), bootstrap_research,
combine_findings (crash → fault-text findings; also lifts branch-local
PIPELINE-FAULT findings into pipeline_faults, deduped), reflexion_gate
(crash fails forward to synthesize), incorporate_feedback (crash still
loops with a generic feedback note), verify_sources (top-level guard +
pipeline_notes fold).
Fallbacks per the plan's naming pins: plan → plan_fault → end_fault
(fail-closed; gains state_updates plan_failure per the TASK-016 rule);
research_one_question → branch-local question_fault (map collects the
fault finding); vet_sources/critique → degrade-visibly markers that
continue to the stage each node's own next pointed to; synthesize →
synth_fault → end_fault. end_fault renders
'DEEP_RESEARCH FAILED — PIPELINE-FAULT: <fault text>'.
Accepted-path visibility: verify_sources folds pipeline_faults into
pipeline_notes ('' when fault-free), appended to end_accepted's output
and the approval question — happy-path output stays byte-identical.
initial_state seeds questions: [] so a dying plan inside the static
fan-out leaves the sibling knowledge_lookup lane mapping over zero
items while end_fault renders.
R5: 19 python3-guarded regression tests + GraphParser wiring test;
bundled warning baseline unchanged.
27 lines
928 B
Python
27 lines
928 B
Python
#!/usr/bin/env python3
|
|
"""Fan-out source for context loading.
|
|
|
|
Has no logic of its own. Exists so the static `next: [plan, knowledge_lookup]`
|
|
list on this node fans out into two parallel branches (the LLM planner and
|
|
the RAG knowledge lookup) as a single super-step. The validator requires
|
|
declared parallel-branch script outputs, so we emit an empty JSON object
|
|
explicitly here.
|
|
|
|
Fail-safe (R3): the node reads no state and computes nothing, so its
|
|
happy-path output IS the sane degraded output — the guard emits the same
|
|
empty object on any crash. No PIPELINE-FAULT is recorded: appending one
|
|
would require reading state (the very thing that crashed) or clobbering
|
|
faults recorded upstream by parse_request, and a crash here loses nothing.
|
|
"""
|
|
import json
|
|
|
|
|
|
def main():
|
|
print(json.dumps({}))
|
|
|
|
|
|
try:
|
|
main()
|
|
except Exception: # noqa: BLE001 — the fan-out source must never crash the graph
|
|
print(json.dumps({}))
|