Commit History
-
[NOTICKET] refactor(tools): single source of truth for data-access tool names + clarify input_schema is presence-only
R11 (TAB slice): the data-access tool-name set was duplicated between invoker.py and planner/registry.py, synced only by a keep-in-lockstep comment. A 5th/renamed tool added in one place but not the other would silently mis-route (registry knows it, CompositeToolInvoker rejects it). Define canonical DATA_ACCESS_TOOLS once in tools/data_access.py; invoker.py imports it. (planner/registry.py + _PLACEHOLDER_RE dedup are the agent-side remainder.) T1: ToolSpec.input_schema comment said "validates ToolCall.args" but TaskRunner._validate_args is presence-only; properties types are documentation, not enforced. Clarified so nobody assumes type-safety. Doc/comment + a constant move; no behavior change. 41 tool tests pass, ruff clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>90e80f9
-
[KM-627] Canonical ToolSpec + ToolOutput
Move ToolSpec/ToolRegistry/ToolOutput to src/tools/contracts.py as the single source of truth (owned by the tool team, KM-465). planner/contracts.py now re-exports them so the planner/slow_path importers are unchanged; shapes are identical to the prior stubs (zero field change). Records the data-flow decision: Pattern A (analyze_* take data="${t<id>}" placeholder, not self-fetch by source_id) and analyze_comparison.output_kind = "stats", aligning with the planner registry. Verified: imports OK, ruff + mypy strict clean, 72 analytics tests green. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>0cb4e6d