Commit History
-
[NOTICKET][AI] refactor(planner): R11 - single-source placeholder regex + name-checked data-access specs
Rifqi Hafizuddin +1: Claude Opus 4.8Comments are not a sync mechanism. Remove the two duplicated definitions on the agent side. - PLACEHOLDER_RE: defined once in planner/schemas.py (it's part of the ToolCall ${t<id>} placeholder convention); planner/validator.py and slow_path/task_runner.py now import it instead of each compiling their own copy "kept in sync" by comment. - planner/registry.py still holds local data-access spec BODIES (stub pending KM-465 #4) but derives/validates their NAMES against the canonical src.tools.data_access.DATA_ACCESS_TOOLS: _data_access_slice() raises at default_registry() if a tool is added/renamed/removed upstream, instead of drifting silently. Registry output unchanged (same 12 tools, same order). Tests: 51 passed (planner + slow_path); ruff clean; registry builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>0f2b85e
-
[KM-626][AI] Slow-path agent: seam contracts + TaskRunner
Rifqi Hafizuddin +1: Claude Opus 4.8The execution half of the slow path (AGENT_ARCHITECTURE_CONTEXT_new.md §7.4, §8.2/§8.4). Deterministic, 0 LLM, tool-agnostic (INV-7). - schemas.py: TaskResult, RunState (the blackboard); TaskSummary, AnalysisRecord, AssembledOutput, AssemblerNarrative. Reuses planner ToolOutput. - invoker.py: ToolInvoker Protocol only -- the runtime seam the runner calls; the tool team owns the implementation (KM-418). - errors.py: SlowPathError, AssemblerError. - task_runner.py: wave-based dependency execution (asyncio.gather), ${t<id>} placeholder resolution, internal validate_args, never-throw invoke, status labeling, degrade-and-continue. No replanning, no mid-run LLM. Lives in agents/slow_path/ -- NOT "orchestrator" (that name is the entry dispatcher in agents/orchestration.py). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>ac310de