#3467 delete · second-order defect confirmed by #3352's 2026-08-12 re-verification · #3466 pulled the last thread

the block that could never fire

task-existence-gate Case 3 was a BLOCK branch guarded by getActivePipeline(). It was already doubly unreachable before this PR — 0 running pipelines ever observed on disk, and the sole registry.pipelines writer sat behind a Teams-yield gate that fired on every one of 699 checks. #3466 then deleted that writer's only caller outright, making the precondition structurally impossible, not just practically dead. CLAUDE.md's "blocks them in active pipelines" claim was false either way.

gate checkat HEAD (before this PR)verdict
registry.pipelines writerszero — registerPipeline had no production callerscan never populate
getActivePipeline() callerstask-existence-gate.ts onlyalways returns undefined
Case 3 (BLOCK) preconditionif (activePipeline) — never truthydead branch
~/.claude/orchestration/*.json on disk0 running pipelines, everconfirms it live too
CLAUDE.md:66 claim"blocks them in active pipelines"false claim

Recommended option 1 (reword CLAUDE.md) folded into option 2 (delete Case 3 outright) once #3466 made registry.pipelines unpopulatable from any caller. PipelineExecution type and the registry.pipelines field stay — #3353 owns that call, not this issue.

What was cut

task-existence-gate.ts   −18   Case 3 (BLOCK) branch + getActivePipeline
                                import/usage + outputDeny import;
                                doc comments reworded to match shipped
                                behavior (advisory-only, never blocks)
task-integration.ts      −16   registerPipeline · getActivePipeline
                                (zero production callers post-#3466)
CLAUDE.md                 −1   "blocks them in active pipelines" ->
                                "advisory nudge ... never blocking"
KEPT                            PipelineExecution type + registry.pipelines
                                field + cleanupOldTasks' pipeline-cleanup —
                                #3353 owns registry.pipelines, not this issue

Gate now has exactly two outcomes: task exists -> silent pass, no task found -> advisory outputWithContext nudge. No blocking path remains.

Try the caller census yourself

verification   315 test files, 7,536 tests passed (2 pre-existing skips)
               typecheck clean · root build clean
               validate-counts PASSED (105 skills / 36 agents / 216 hooks —
               unaffected, no hooks.json registration touched)
               grep -rn "registerPipeline|getActivePipeline" dist/*.mjs -> 0 hits