changedOutput schema / additionalProperties
Previous value: -{}New value: +true
removedOutput schema / description
Removed value: -"Deterministic query plan: best_tool + ordered recommended_sequence over the DC Hub tool registry — keyword/regex routing, no LLM, same intent → same plan — plus a versioned replay decision-trail, alongside the DC Hub envelope keys."
removedOutput schema / properties / _entity
Removed value: -{
- "description": "Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.",
- "type": "string"
-}
removedOutput schema / properties / _front_door
Removed value: -{
- "additionalProperties": {},
- "description": "First-tool hint: plan_query(intent) returns the ordered plan.",
- "properties": {},
- "type": "object"
-}
removedOutput schema / properties / _return_loop
Removed value: -{
- "additionalProperties": {},
- "description": "Next-session delta call (get_changes).",
- "properties": {},
- "type": "object"
-}
removedOutput schema / properties / alternatives / anyOf
Removed value: -[
- {
- "items": {
- "additionalProperties": {},
- "properties": {
- "rejected_because": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Why the planner did NOT make this the primary route — the deterministic rejection reason"
- },
- "tool": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Alternative tool name"
- },
- "when": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "When to prefer this tool over the recommended sequence"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / alternatives / description
Removed value: -"Adjacent tools for nearby intents, including runner-up intent classes"
removedOutput schema / properties / best_tool / anyOf
Removed value: -[
- {
- "type": "string"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / best_tool / description
Removed value: -"The single best first tool to call for this intent (exact name from tools/list)"
removedOutput schema / properties / chaining / description
Removed value: -"Zero-drift chaining guidance (candidate_id contract) when the plan crosses get_refined_queue → analyze_site / rank_sites"
removedOutput schema / properties / citation
Removed value: -{
- "anyOf": [
- {
- "additionalProperties": {},
- "properties": {},
- "type": "object"
- },
- {
- "type": "string"
- }
- ],
- "description": "How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
-}
removedOutput schema / properties / confidence / anyOf
Removed value: -[
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- }
- ]
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / confidence / description
Removed value: -"Deterministic router confidence, 0-1 — same intent always yields the same score; low values mean the intent was ambiguous (check alternatives). Alias of intent_confidence (v1 back-compat)."
removedOutput schema / properties / coverage_notes / description
Removed value: -"Tier/coverage caveats for the recommended tools (free-tier previews, depth gates, honest-unknown semantics)"
removedOutput schema / properties / estimated_calls / anyOf
Removed value: -[
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- }
- ]
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / estimated_calls / description
Removed value: -"Total estimated API calls for the whole plan (sum of per-step estimates)"
removedOutput schema / properties / execution_estimate / description
Removed value: -"r-planner-v3 deterministic cost preview: {estimated_calls (plan NODE count — one per step; the top-level estimated_calls is the fan-out-weighted API-call total), estimated_latency_ms (sum over waves of the SLOWEST tool in each wave, from a static 3-tier table: heavy synthesis 3000ms / standard read 1200ms / light free read 500ms), parallelizable (any wave holds 2+ steps)}"
removedOutput schema / properties / execution_strategy / description
Removed value: -"r-planner-v3 explicit strategy: {parallel_groups: string[][] — execution_waves rendered as TOOL-NAME arrays (e.g. [[\"get_grid_intelligence\",\"get_interconnection_queue\",\"get_refined_queue\"]]), note: plan-only disclaimer — this tool only plans; execute the sequence yourself}"
removedOutput schema / properties / execution_waves / description
Removed value: -"The execution graph as concurrency waves: array of arrays of step numbers; every step in a wave can run concurrently once earlier waves finish (derived from depends_on)"
removedOutput schema / properties / intent / anyOf
Removed value: -[
- {
- "type": "string"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / intent / description
Removed value: -"The natural-language intent that was routed (echoed back)"
removedOutput schema / properties / intent_class / anyOf
Removed value: -[
- {
- "type": "string"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / intent_class / description
Removed value: -"The matched intent class (market_ranking | capacity_search | market_comparison | grid_headroom | interconnection_queue | hosting_capacity | water_climate | site_analysis | deals_ma | fiber_power_pairing | fiber | price | incentives_tax | power_timeline | changes_delta | facility_search | unknown)"
removedOutput schema / properties / intent_confidence / anyOf
Removed value: -[
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- }
- ]
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / intent_confidence / description
Removed value: -"How confident the router is that it read the QUESTION right (0-1, deterministic) — driven by keyword score + margin over the runner-up class"
removedOutput schema / properties / matched_classes / description
Removed value: -"Every intent class that scored, with its score — the router's full deterministic trace"
removedOutput schema / properties / note / anyOf
Removed value: -[
- {
- "type": "string"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / note / description
Removed value: -"Router disclaimer — deterministic keyword routing, tools/list stays canonical"
removedOutput schema / properties / ok / anyOf
Removed value: -[
- {
- "type": "boolean"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / ok / description
Removed value: -"true when the intent was routed"
removedOutput schema / properties / parallelizable / anyOf
Removed value: -[
- {
- "type": "boolean"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / parallelizable / description
Removed value: -"true when at least one execution wave holds 2+ steps — the plan is not purely sequential"
removedOutput schema / properties / planner_rationale / anyOf
Removed value: -[
- {
- "type": "string"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / planner_rationale / description
Removed value: -"One sentence on why the PLAN has this shape (ordering / parallelism / what mints what) — distinct from reason, which covers intent routing"
removedOutput schema / properties / provenance
Removed value: -{
- "additionalProperties": {},
- "description": "Source, method, as_of, verification_counts, license, cite_as; quote it when citing.",
- "properties": {},
- "type": "object"
-}
removedOutput schema / properties / quota
Removed value: -{
- "additionalProperties": {},
- "description": "Caller quota state (remaining calls, tier).",
- "properties": {},
- "type": "object"
-}
removedOutput schema / properties / reason / anyOf
Removed value: -[
- {
- "type": "string"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / reason / description
Removed value: -"Why the router chose best_tool — the matched keywords / context signals"
removedOutput schema / properties / recommended_sequence / anyOf
Removed value: -[
- {
- "items": {
- "additionalProperties": {},
- "properties": {
- "args_hint": {
- "description": "Suggested arguments — values in <angle brackets> are produced by an earlier step (e.g. \"<metro_slug from step 1>\")"
- },
- "depends_on": {
- "description": "Step numbers this step has a HARD DATA dependency on (it consumes a value they mint — slug, candidate_id, chosen ISO). Empty = can start immediately; user-supplied placeholders are not dependencies."
- },
- "estimated_calls": {
- "anyOf": [
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- }
- ]
- },
- {
- "type": "null"
- }
- ],
- "description": "Estimated API calls this step costs (fan-out steps like per-finalist reads are > 1)"
- },
- "step": {
- "anyOf": [
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- }
- ]
- },
- {
- "type": "null"
- }
- ],
- "description": "1-based step order"
- },
- "tool": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Tool name (exact, from tools/list)"
- },
- "why": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "What this step contributes to answering the intent"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / recommended_sequence / description
Removed value: -"Ordered tool sequence mirroring the DC Hub recipe for the matched intent class"
removedOutput schema / properties / replay / additionalProperties
Removed value: -{}
removedOutput schema / properties / replay / description
Removed value: -"FIRST-CLASS VERSIONED replay object (r-planner-v5.1, ChatGPT schema review): the planner's auditable decision trail — routing + per-step selection + rejections + concurrency graph, each decision with a stable id + status, keyed by planner_version so an agent can cite \"Decision D2 selected rank_markets because…\" and downstream tooling survives planner upgrades."
removedOutput schema / properties / replay / properties
Removed value: -{
- "compatibility": {
- "description": "The stability contract, published in-object: schema v1 is additive-only (no removals / semantic changes); planner_version may change routing/confidence/sequences/coverage without a schema bump; breaking changes only ever at a new schema_version. Pin schema_version, not planner_version."
- },
- "decisions": {
- "anyOf": [
- {
- "items": {
- "additionalProperties": {},
- "properties": {
- "decision": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "What the planner decided (route to a class / call a tool)"
- },
- "decision_confidence": {
- "anyOf": [
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- }
- ]
- },
- {
- "type": "null"
- }
- ],
- "description": "0-1 — intent_confidence for the routing decision, workflow_confidence for step decisions"
- },
- "depends_on": {
- "description": "Step numbers this step depends on (step decisions only)"
- },
- "id": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Stable decision id — D0 = routing decision, D1..Dn = per-step selections; cite as \"Decision D2\""
- },
- "kind": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "\"route\" (the intent→class decision) or \"step\" (a tool selection)"
- },
- "rationale": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "The deterministic reason for the decision"
- },
- "status": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Decision lifecycle — one of planned | running | completed | failed | skipped | cancelled. plan_query only ever emits \"planned\" (it never executes); the full enum is published now so consumers can code the whole lifecycle without an SDK bump later."
- },
- "step": {
- "anyOf": [
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- }
- ]
- },
- {
- "type": "null"
- }
- ],
- "description": "0 for the routing decision, else the 1-based step number"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- {
- "type": "null"
- }
- ],
- "description": "The ordered, auditable decision trail — one route decision + one per recommended step"
- },
- "execution_graph": {
- "description": "{waves: number[][], parallel_groups: string[][]} — the concurrency graph the plan executes as"
- },
- "intent": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "The routed intent (echoed) — duplicated so replay is self-contained"
- },
- "intent_class": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "The matched intent class (duplicated from plan_query.intent_class so replay deserializes alone)"
- },
- "note": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "How to read + cite the replay; plan-only disclaimer"
- },
- "planner_version": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Semantic version of the PLANNER BEHAVIOR (routing/output) — bumps when routing changes (e.g. 5.1 replay field renames → 5.2 capacity_search/market_comparison → 5.4 fiber_power_pairing → 5.5 the hosting_capacity distribution class → 5.6 the incentives_tax class + stateFromPlace arg signal → 5.7 rank-vs-incentives arbitration: ranking language demotes the statutory class, \"rank markets by\" credits market_ranking → 5.8 reversed-order timing vocabulary: \"timeline for power …\" reaches power_timeline on state-phrased asks while the ISO boost holds operator-phrased asks on grid_headroom → 5.9 replay.why_live_data, an additive per-class \"why this answer needed live data\" reason; routing unchanged → 5.10 why_live enum-ized: why_live_code from the canonical taxonomy why_live_reasons + phrase resolved from the snapshot; routing unchanged → 5.11 GEOGRAPHY SCOPING: a market_ranking intent naming a US state (or a city whose slug carries one) leads with site_selection_canvas region=<ST> — the only ranking tool with a state parameter; ai_capacity_index takes only horizon/limit and rank_markets region accepts only global/us/canada/eu/apac/americas, so both previously answered state-scoped questions nationally. _execConstraintIsoSet also resolves a named state to its ISO set, so the C1 constraint_check can finally fire on state-phrased intents → 5.12 CORRIDORS: named corridor places (Loudoun, Prince William, Ashburn, Secaucus, Piscataway …) bind a centroid + radius for ARGUMENTS only — never class scoring — reported as replay.place_scope; a county or metro that could only be scoped to a state/ISO is reported as replay.scope_widened {widened_from, to}; execute_plan step results slim STRUCTURED (arrays to their first rows) and relay/upgrade/unlock fields pass through byte-identical → 5.13 GEOGRAPHY BINDS: every execute_plan step whose tool accepts a point, radius or state gets the plan geography when unset (executed[].geo_injected names what was set; _EXEC_GEO_ARGS pinned to toolspec.json); VA/NJ counties join the corridor table (Middlesex only beside New Jersey); the corridor radius cap is 300 km; step slimming is ALWAYS structured (no JSON-prefix fallback) and machine_pay, retry_*, persist_command and auto_trial_key join the never-cut fields). Distinct from schema_version."
- },
- "rejected": {
- "anyOf": [
- {
- "items": {
- "additionalProperties": {},
- "properties": {
- "id": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Stable rejection id (R1..Rn)"
- },
- "reason": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Why it was rejected — the deterministic rejected_because"
- },
- "tool": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "The tool/route the planner did NOT take"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- {
- "type": "null"
- }
- ],
- "description": "Roads not taken, with reasons — the \"why not\" half of the audit trail"
- },
- "schema_version": {
- "anyOf": [
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- }
- ]
- },
- {
- "type": "null"
- }
- ],
- "description": "Version of the REPLAY OBJECT SHAPE (field set) — independent of planner_version; pin THIS in an SDK. Bumps only on a breaking shape change, so the planner routing revs so far (5.1 → 5.6) have all left it at 1."
- },
- "why_live_code": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "ENUM (v5.10): why this plan needs LIVE data — one of the requires_* codes published in the canonical taxonomy (/api/v1/canon/taxonomy why_live_reasons). Enumerated so stamped replays aggregate (\"N% of executions needed live queue data\"); count THIS, not the phrase. Absent when intent_class=unknown."
- },
- "why_live_data": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Human phrase for why_live_code, resolved from the same canonical taxonomy — display it, never parse it. Additive at schema v1 (introduced 5.9 as class-keyed prose; enum-backed since 5.10)."
- }
-}
removedOutput schema / properties / routing_hint / anyOf
Removed value: -[
- {
- "additionalProperties": {},
- "properties": {
- "advisory": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "States that this recommends an entry point and asserts nothing about success"
- },
- "best_path": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Where to start: `execute_plan` for a multi-capability question, or the one tool name for a single-capability lookup"
- },
- "expected_outputs": {
- "anyOf": [
- {
- "items": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "An output CLASS to expect — not a tool name"
- },
- "type": "array"
- },
- {
- "type": "null"
- }
- ],
- "description": "Bounded list of what the recommended path returns"
- },
- "external_sources_recommended": {
- "anyOf": [
- {
- "items": {
- "anyOf": [
- {
- "additionalProperties": {},
- "properties": {
- "source_class": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Closed enum: brokerage_research | market_analytics | financial_context | utility_or_iso_filing | operator_disclosure"
- },
- "why": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "What that class of source holds that DC Hub does not, quoting our own published limit"
- }
- },
- "type": "object"
- },
- {
- "type": "null"
- }
- ]
- },
- "type": "array"
- },
- {
- "type": "null"
- }
- ],
- "description": "What this question needs that DC Hub does NOT hold, named by SOURCE CLASS and never by vendor. An EMPTY array is an answer: DC Hub covers this class end to end."
- },
- "problem": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "The matched intent class — the SAME closed enum as intent_class, so it is branchable, not free text"
- },
- "why": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Short deterministic rationale for that entry point"
- }
- },
- "type": "object"
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / routing_hint / description
Removed value: -"ADVISORY router: collapses 94 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version — those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."
removedOutput schema / properties / site_evaluation_handoff
Removed value: -{
- "anyOf": [
- {
- "items": {
- "additionalProperties": {},
- "properties": {},
- "type": "object"
- },
- "type": "array"
- },
- {
- "additionalProperties": {},
- "properties": {},
- "type": "object"
- }
- ],
- "description": "Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
-}
removedOutput schema / properties / workflow_confidence / anyOf
Removed value: -[
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- }
- ]
- },
- {
- "type": "null"
- }
-]
removedOutput schema / properties / workflow_confidence / description
Removed value: -"How confident the router is that the plan can EXECUTE cleanly with the signals in hand (0-1, deterministic) — boosted by resolved context signals, docked for placeholder args the user must still supply; step-minted placeholders don't dock"
removedOutput schema / properties / workflow_confidence_basis / description
Removed value: -"The arithmetic behind workflow_confidence: {resolved_signals, minted_placeholders, user_supplied_placeholders}"