docs/adr/0001-dispatch-policy-module.md
We decided to centralize query dispatch outcomes in one Dispatch Policy Module that returns a structured union result (ok success or failure with typed kind, details, and final exit_code) instead of mixing throws and ad-hoc error mapping across CLI and SDK paths. This keeps fallback policy, timeout classification, and exit mapping in one place for better locality, prevents drift between native and fallback behavior, and makes callers thin adapters over a stable interface.
To complete the query architecture pass, we deepened adjacent seams around the Dispatch Policy Module:
projectDir + ws resolution policy..planning/config.json is absent, use built-in defaults and parity-aligned empty model ids for model-resolution surfaces.GSD_ENABLE_E2E=1) to keep default CI/local verification deterministic while preserving full-path validation when requested.Removed wrapper Modules after call-site convergence:
normalize-query-command.tscommand-resolution.tspolicy-convergence.tsquery-policy-snapshot.tsquery-registry-capability.tsThis amendment preserves the original ADR direction: keep policy depth high, adapters thin, and locality concentrated in explicit modules.
To make SDK dispatch a cleaner publishable seam, we deepened GSDTools dispatch behind one SDK Runtime Bridge Module (sdk/src/query-runtime-bridge.ts) and converged policy wiring into that seam:
GSDTools callers now route through one runtime bridge Interface for command resolution, execution, and hotpath dispatch.allowFallbackToSubprocess) instead of implicit transport behavior.strictSdk) so SDK consumers can fail fast when a command lacks a native adapter.onDispatchEvent) for dispatch mode, fallback reason, latency, outcome, and error kind.This continues the dispatch-policy design goal: deep policy Modules, thin Adapters, and high locality for behavior changes.