[FIX] Dispatch Feasibility Immunity — Capability-Aware Admission Control#4130
Merged
Trecek merged 6 commits intoJun 27, 2026
Merged
Conversation
…ty bypass A capability gate whose guarded operations were all pruned by skip_when_false is vacuous and should not block dispatch. _compute_capability_feasibility now receives skip_resolutions and pre_prune_steps from load_and_validate, enabling it to distinguish gates that protect live steps from gates that guard nothing. dispatch_food_truck and _run_dispatch now inject _build_capability_overrides into load_and_validate's ingredient_overrides and check dispatch_feasible before proceeding, closing the bypass where capability-DOA recipes could still spawn subprocesses. Arch tests verify all four content-serving surfaces gate on dispatch_feasible, load_and_validate passes skip_resolutions, and dispatch_food_truck injects capability overrides. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ol count - Fix _is_vacuous_gate to skip the gate step itself when scanning for live capability references (gate_backend_write references its own capability ingredient in with_args, which was falsely preventing vacuous detection) - Fix import path violation: use autoskillit.core gateway instead of autoskillit.core.types subpackage directly - Fix deferred-recall test: add AsyncMock for ctx.disable_components to prevent "MagicMock can't be used in await" error - Update symbol count from 93 to 94 for new CAPABILITY_INGREDIENT_TO_SKIP_GUARD Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tch_feasible assertion Merge test_vacuous_gate_does_not_block_dispatch into test_codex_implementation_dispatch_infeasible (eliminating redundant load_and_validate call) and add explicit `assert dispatch_feasible is False` in the else branch of test_codex_capability_gate_recipes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ARD keys subset Add test_capability_ingredient_to_skip_guard_keys_subset to ensure every key in CAPABILITY_INGREDIENT_TO_SKIP_GUARD exists in BACKEND_CAPABILITY_INGREDIENTS, preventing silent vacuous-gate detection failures when new capability keys are added. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
43ab740 to
48977ee
Compare
…detection The vacuous-gate detection correctly identifies gate_backend_write as vacuous when all backend_supports_git_write-guarded steps are pruned. Update assertions to expect success=True and dispatch_feasible=True. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…-gate detection Same pattern as the prior commit — the e2e test expected dispatch_feasible=False for codex+implementation, but vacuous-gate detection now correctly returns True. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This was referenced Jun 30, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Three independent subsystems — step pruning (
_prune_skipped_steps), capability feasibility (_compute_capability_feasibility), and per-step backend override (run_skillprovider rerouting) — operate without cross-communication. The capability feasibility check uses a binary pipeline-level verdict even though step pruning already achieves per-step granularity. A gate step (gate_backend_write) that guards already-pruned operations survives pruning and blocks the entire recipe. Additionally,dispatch_food_trucksilently ignores thedispatch_feasiblefield and omits capability override injection, creating a bypass for the entire admission control system. The arch test falsely claims four surfaces gate ondispatch_feasiblewhen only three are tested.The immunity plan addresses these through three coordinated changes:
_compute_capability_feasibility— a gate whose guarded operations were all pruned is vacuously infeasible and should not block the pipelinedispatch_food_truckmust inject capability overrides and checkdispatch_feasible, closing the bypass;_run_dispatchmust also checkdispatch_feasibleas defense-in-depthdispatch_food_truckstructural assertion and registry-sync updatesCloses #4109
Implementation Plan
Plan file:
/home/talon/projects/autoskillit-runs/remediation-20260627-120516-576225/.autoskillit/temp/rectify/rectify_dispatch_feasibility_immunity_2026-06-27_130000.md🤖 Generated with Claude Code via AutoSkillit
Token Usage Summary
* Step used a non-Anthropic provider; caching behavior may differ.
Token Efficiency
Model Usage Breakdown