Summary
The two orchestrator-state completion gates disagree about one entry of required_mcp_tools on a bug
route. The portable PowerShell gate applies a bug-route substitution and demands the bug-variant
potential-entry tool name; the MCP validator does not apply it and demands the feature-variant name.
No single checkpoint can satisfy both.
Environment
- OS/version: Windows 11
- Python version: not applicable; the two implementations are PowerShell and the bundled MCP validator
- Command/flags used:
Test-OrchestratorStateCompletionReadiness from .claude/lib/orchestrator-state/OrchestratorStateCompletion.psm1, versus the MCP orchestration-artifact validator with require_complete and require_model_routing
- Data source or fixture: any
artifacts/orchestration/orchestrator-state.json whose promotion-type is bug and whose route_id is large
Steps to Reproduce
- Author a complete orchestrator-state checkpoint for a bug on route
large, satisfying every other completion requirement.
- Set
required_mcp_tools to the routing-matrix list with the bug-variant substitution applied, and record a matching successful receipt.
- Run the portable PowerShell readiness function. It returns exit code 0.
- Run the MCP validator with
require_complete. It fails.
- Reverse the substitution and re-run both. The results invert.
Expected Behavior
Both gates apply the same bug-route rule, so one checkpoint satisfies both. The PowerShell module
header describes itself as a row-by-row port of the validator surface, so the two are intended to
agree.
Actual Behavior
With the substitution applied, the PowerShell gate returns ExitCode 0 and the MCP validator returns:
Checkpoint required_mcp_tools must match routing matrix for route large.
Checkpoint missing successful MCP receipt: new_potential_entry.
Without the substitution, the PowerShell gate returns:
Checkpoint required_mcp_tools must match routing matrix for route large.
Logs / Screenshots
Impact / Severity
Medium rather than High: the authoritative gate is the PowerShell one, since that is what
.claude/hooks/validate-orchestrator-output.ps1 runs at SubagentStop. An orchestrator that conforms
to it completes correctly. The cost is that the MCP validator cannot be used as a green pre-check on
a bug route, so an agent that trusts it will either loop or fabricate a receipt to satisfy it.
Source
From: docs/features/potential/2026-08-29-completion-gates-disagree-on-bug-route-potential-entry-tool.md
Summary
The two orchestrator-state completion gates disagree about one entry of
required_mcp_toolson a bugroute. The portable PowerShell gate applies a bug-route substitution and demands the bug-variant
potential-entry tool name; the MCP validator does not apply it and demands the feature-variant name.
No single checkpoint can satisfy both.
Environment
Test-OrchestratorStateCompletionReadinessfrom.claude/lib/orchestrator-state/OrchestratorStateCompletion.psm1, versus the MCP orchestration-artifact validator withrequire_completeandrequire_model_routingartifacts/orchestration/orchestrator-state.jsonwhosepromotion-typeisbugand whoseroute_idislargeSteps to Reproduce
large, satisfying every other completion requirement.required_mcp_toolsto the routing-matrix list with the bug-variant substitution applied, and record a matching successful receipt.require_complete. It fails.Expected Behavior
Both gates apply the same bug-route rule, so one checkpoint satisfies both. The PowerShell module
header describes itself as a row-by-row port of the validator surface, so the two are intended to
agree.
Actual Behavior
With the substitution applied, the PowerShell gate returns
ExitCode 0and the MCP validator returns:Without the substitution, the PowerShell gate returns:
Logs / Screenshots
Impact / Severity
Medium rather than High: the authoritative gate is the PowerShell one, since that is what
.claude/hooks/validate-orchestrator-output.ps1runs at SubagentStop. An orchestrator that conformsto it completes correctly. The cost is that the MCP validator cannot be used as a green pre-check on
a bug route, so an agent that trusts it will either loop or fabricate a receipt to satisfy it.
Source
From: docs/features/potential/2026-08-29-completion-gates-disagree-on-bug-route-potential-entry-tool.md