Repository navigation
process: systemic premature-closure pattern — 7+ feature trackers closed before integration (orchestration audit evidence) #6836
Description
Discovered during
User correctly pushed back during issue #4048 closure: the code I called "orphans" is not abandoned — it's completed, unit-tested, design-documented functionality whose tracker issues were closed before integration.
This is a process bug, not just individual tech debt.
Evidence
| Module | LOC | Tracker | State | Wired in production? |
|---|---|---|---|---|
| orchestration/causal_executor.py (+ 4 sibling files) | 1,722 | #2154 | CLOSED | ❌ NO |
| orchestration/workflow_planner.py | 282 | #381 | CLOSED | ❌ NO |
| orchestration/workflow_documentation.py | 390 | #381 | CLOSED | ❌ NO |
| orchestration/workflow_memory.py | 286 | #3019 | CLOSED | ❌ NO |
| orchestration/agent_registry.py | 302 | #381 | CLOSED | ❌ NO |
| agents/agent_orchestration/topology.py | 242 | #2137 | CLOSED | ❌ NO |
| agents/agent_orchestration/topology_routing.py | 94 | #2138 | CLOSED | ❌ NO |
| agents/agent_orchestration/rl_router.py | 354 | #2092 | CLOSED | ❌ NO |
| enhanced_orchestration/success_criteria.py | 234 | #3293 | CLOSED | |
| Total unwired | 3,906 |
Each docstring explicitly cites a tracker issue. Each tracker is marked closed. None of the corresponding code is reachable from a production request path.
Plus #3228 (graph executor unification) — also CLOSED while code comments still reference it as "tracked in #3228" for unfinished work — see #6826.
Pattern
Issues are being closed when code is written and unit-tested, not when acceptance criteria for integration are met. The CLAUDE.md "Issue Closure Verification Gate (MANDATORY)" rule exists exactly to prevent this:
Verify each acceptance criterion: Is the feature/fix actually implemented? Does it work correctly?
"Working correctly" requires reaching production code, not just test code.
Why it matters
- ~3,900 LOC of unused completed features sit in the tree, contributing to god-class metrics, increasing build time, confusing readers about what's canonical
- Stakeholders who closed those issues think the features shipped — they didn't
- The original goals of the issues (e.g., "shared memory between parallel workflow agents" enhancement: no shared memory between parallel workflow agents #3019) are not actually delivered to users
Recommendation
Process changes
- Add an "integrated" acceptance criterion as a default in CLAUDE.md "Issue Closure Verification Gate":
Closure requires: (a) code merged, (b) at least one production code path imports the new module, (c) integration test exists.
- Closure audit: when closing a feature issue, run
grep -rn 'from <new_module>' autobot-backend --include="*.py" | grep -v _test— must return ≥1 hit.
Tactical follow-up
- Reopen trackers Enhancement: Q-Learning reinforcement router for agent task routing #2092, feat: Agent mesh topology — dynamic DAG with Hebbian evolution (Neural Mesh RAG Phase 5) #2137, feat: Topology-aware routing + agent specialization (Neural Mesh RAG Phase 5) #2138, Enhancement: Workflow resume-from-failure and step-level error handlers #2154, enhancement: no shared memory between parallel workflow agents #3019, feat(backend): custom success criteria definitions for workflow orchestrator #3293, plus Code Smell: Refactor 178 god class patterns #381 sub-trackers — none meet integration acceptance criteria.
- The 14 follow-up issues from refactor(backend): complete orchestrator consolidation (7→4 target) #4048 closure (discovery(orchestration): wire in or retire abandoned causal subsystem (5 files, 1,722 LOC, 0 production callers) #6816–discovery(orchestration): subagent_dispatcher.py is test-only, lives in services/ instead of orchestration/ (layering violation) #6822, discovery(orchestration): #3228 closed prematurely — executor fragmentation persists (5 files, 3,223 LOC, no unified strategy) #6826–discovery(orchestration): low-utilization composability — SuccessCriteriaEvaluator + CollaborationCoordinator are single-caller modules #6832) collectively represent the wire-in work. They are the path to making each reopened tracker actually deliverable.
Acceptance criteria
- CLAUDE.md updated with explicit integration check in closure gate
- Reopen the 7 prematurely-closed feature trackers OR document why each was correctly closed despite zero production callers
- Each of discovery(orchestration): wire in or retire abandoned causal subsystem (5 files, 1,722 LOC, 0 production callers) #6816, discovery(orchestration): wire in 4 orphaned modules — workflow_planner, workflow_documentation, workflow_memory, agent_registry (~1,260 LOC, 0 production callers) #6820, discovery(agents): wire in or retire topology modules — AgentTopology + TopologyAwareRouter (336 LOC, 0 callers, #2137/#2138) #6821, discovery(agents): RLRouter (Issue #2092) infrastructure-complete but unreachable in production paths (354 LOC) #6829, discovery(orchestration): low-utilization composability — SuccessCriteriaEvaluator + CollaborationCoordinator are single-caller modules #6832 cross-links its corresponding reopened tracker
Priority
P1 — process correction. Blocks credibility of "closed" issue counts as a measure of delivered features.
Activity
feat(closure-gate): layered defense against premature feature-issue c…
mrveiss commentedon May 4, 2026
✅ Closed with proof — PR #6875 merged in commit
f118ace17Implementation acceptance criteria:
.github/ISSUE_TEMPLATE/feature_request.md(Tier 1)CLAUDE.mdIssue Closure Verification Gate extended (Tier 2)pipeline-scripts/audit-unwired-trackers.py(Tier 3 script).github/workflows/unwired-tracker-audit.yml(Tier 3 cron — Mon 06:00 UTC)~/.claude/skills/{implement,issue,dead-code-audit}/SKILL.mdIntegration acceptance criteria (#6836 gate):
python3 pipeline-scripts/audit-unwired-trackers.py --json— entry point wired.github/workflows/unwired-tracker-audit.yml— discoverable by GitHub Actions/implementand/issueskills, and/dead-code-auditPhase 0The pattern is now prevented at four layers: (1) feature template surfaces the integration AC at issue creation, (2) skills run a grep at closure time and block on zero callers, (3) cron runs weekly to catch anything that slips, (4) future dashboard (#6871) for visibility. Retroactive sweep tracked as #6872.
feat(frontend): wire AutomationWorkflowStep into useWorkflowBuilder.W…
feat(frontend): wire AutomationWorkflowStep into useWorkflowBuilder.W…
feat(tooling): minimal frontend codegen pipeline + drift CI guard (cl…
feat(tooling): minimal frontend codegen pipeline + drift CI guard (cl…
fix(async): pre-commit hook blocking sync I/O in async paths (#7444 g…
fix(async): pre-commit hook blocking sync I/O in async paths (#7444 g…
refactor(tooling): DRY closure-gate wiring check into check-new-modul…