conexus 2.4.2__tar.gz → 2.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. {conexus-2.4.2 → conexus-2.5.0}/.claude-plugin/marketplace.json +1 -1
  2. {conexus-2.4.2 → conexus-2.5.0}/CHANGELOG.md +14 -0
  3. {conexus-2.4.2 → conexus-2.5.0}/PKG-INFO +1 -1
  4. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/README.md +1 -0
  5. conexus-2.5.0/docs/rdr/rdr-040-developer-agent-circuit-breaker.md +309 -0
  6. {conexus-2.4.2 → conexus-2.5.0}/nx/CHANGELOG.md +8 -0
  7. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/developer.md +36 -2
  8. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/development/SKILL.md +31 -0
  9. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/orchestration/SKILL.md +3 -0
  10. {conexus-2.4.2 → conexus-2.5.0}/pyproject.toml +1 -1
  11. {conexus-2.4.2 → conexus-2.5.0}/uv.lock +1 -1
  12. {conexus-2.4.2 → conexus-2.5.0}/.beads/.gitignore +0 -0
  13. {conexus-2.4.2 → conexus-2.5.0}/.beads/README.md +0 -0
  14. {conexus-2.4.2 → conexus-2.5.0}/.beads/config.yaml +0 -0
  15. {conexus-2.4.2 → conexus-2.5.0}/.beads/hooks/post-checkout +0 -0
  16. {conexus-2.4.2 → conexus-2.5.0}/.beads/hooks/post-merge +0 -0
  17. {conexus-2.4.2 → conexus-2.5.0}/.beads/hooks/pre-commit +0 -0
  18. {conexus-2.4.2 → conexus-2.5.0}/.beads/hooks/pre-push +0 -0
  19. {conexus-2.4.2 → conexus-2.5.0}/.beads/hooks/prepare-commit-msg +0 -0
  20. {conexus-2.4.2 → conexus-2.5.0}/.beads/interactions.jsonl +0 -0
  21. {conexus-2.4.2 → conexus-2.5.0}/.beads/issues.jsonl +0 -0
  22. {conexus-2.4.2 → conexus-2.5.0}/.beads/metadata.json +0 -0
  23. {conexus-2.4.2 → conexus-2.5.0}/.claude/skills/release.md +0 -0
  24. {conexus-2.4.2 → conexus-2.5.0}/.devcontainer/Dockerfile +0 -0
  25. {conexus-2.4.2 → conexus-2.5.0}/.devcontainer/devcontainer.json +0 -0
  26. {conexus-2.4.2 → conexus-2.5.0}/.dockerignore +0 -0
  27. {conexus-2.4.2 → conexus-2.5.0}/.env.example +0 -0
  28. {conexus-2.4.2 → conexus-2.5.0}/.gitattributes +0 -0
  29. {conexus-2.4.2 → conexus-2.5.0}/.github/workflows/ci.yml +0 -0
  30. {conexus-2.4.2 → conexus-2.5.0}/.github/workflows/release.yml +0 -0
  31. {conexus-2.4.2 → conexus-2.5.0}/.gitignore +0 -0
  32. {conexus-2.4.2 → conexus-2.5.0}/.markdownlint.json +0 -0
  33. {conexus-2.4.2 → conexus-2.5.0}/AGENTS.md +0 -0
  34. {conexus-2.4.2 → conexus-2.5.0}/CLAUDE.md +0 -0
  35. {conexus-2.4.2 → conexus-2.5.0}/Formula/nx.rb +0 -0
  36. {conexus-2.4.2 → conexus-2.5.0}/LICENSE +0 -0
  37. {conexus-2.4.2 → conexus-2.5.0}/README.md +0 -0
  38. {conexus-2.4.2 → conexus-2.5.0}/docs/README.md +0 -0
  39. {conexus-2.4.2 → conexus-2.5.0}/docs/architecture.md +0 -0
  40. {conexus-2.4.2 → conexus-2.5.0}/docs/cli-reference.md +0 -0
  41. {conexus-2.4.2 → conexus-2.5.0}/docs/configuration.md +0 -0
  42. {conexus-2.4.2 → conexus-2.5.0}/docs/contributing.md +0 -0
  43. {conexus-2.4.2 → conexus-2.5.0}/docs/getting-started.md +0 -0
  44. {conexus-2.4.2 → conexus-2.5.0}/docs/historical/README.md +0 -0
  45. {conexus-2.4.2 → conexus-2.5.0}/docs/historical/architecture.md +0 -0
  46. {conexus-2.4.2 → conexus-2.5.0}/docs/historical/plans/2026-02-23-rdr-workflow-skills-design.md +0 -0
  47. {conexus-2.4.2 → conexus-2.5.0}/docs/historical/plans/2026-02-23-rdr-workflow-skills-impl-plan.md +0 -0
  48. {conexus-2.4.2 → conexus-2.5.0}/docs/historical/plans/2026-02-24-nx-plugin-v0.4.0.md +0 -0
  49. {conexus-2.4.2 → conexus-2.5.0}/docs/historical/plans/2026-02-24-smart-repo-indexing-design.md +0 -0
  50. {conexus-2.4.2 → conexus-2.5.0}/docs/historical/plans/2026-02-24-smart-repo-indexing-impl-plan.md +0 -0
  51. {conexus-2.4.2 → conexus-2.5.0}/docs/historical/spec.md +0 -0
  52. {conexus-2.4.2 → conexus-2.5.0}/docs/memory-and-tasks.md +0 -0
  53. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-02-28-rdr-004-four-store-cloud-design.md +0 -0
  54. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-02-28-rdr-004-four-store-cloud-impl-plan.md +0 -0
  55. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-01-dry-run-pdf-design.md +0 -0
  56. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-01-dry-run-pdf-impl-plan.md +0 -0
  57. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-01-pdfplumber-tier-design.md +0 -0
  58. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-01-rc10-1.0.0-readiness-design.md +0 -0
  59. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-01-rc10-critique-findings.md +0 -0
  60. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-02-classifier-skip-design.md +0 -0
  61. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-03-chunk-byte-cap-design.md +0 -0
  62. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-03-chunk-byte-cap-impl-plan.md +0 -0
  63. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-03-force-reindex-impl-plan.md +0 -0
  64. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-03-rdr017-phase2-cli-monitor-design.md +0 -0
  65. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-03-rdr017-phase2-cli-monitor-impl-plan.md +0 -0
  66. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-03-rdr018-git-hooks-impl-plan.md +0 -0
  67. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-04-doc-ux-polish-design.md +0 -0
  68. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-04-rdr-doc-polish-design.md +0 -0
  69. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-07-rdr-023-agent-tool-permissions-design.md +0 -0
  70. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-07-rdr-023-agent-tool-permissions-impl-plan.md +0 -0
  71. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-08-rdr-025-language-agnostic-agents-impl-plan.md +0 -0
  72. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-09-rdr-027-search-ux-impl-plan.md +0 -0
  73. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-09-rdr-028-language-registry-impl-plan.md +0 -0
  74. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-09-rdr-029-pipeline-versioning-impl-plan.md +0 -0
  75. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-09-rdr-030-reliability-hardening-impl-plan.md +0 -0
  76. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-11-rdr-034-mcp-server-impl-plan.md +0 -0
  77. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-21-rdr039-phase2-hooks-impl-plan.md +0 -0
  78. {conexus-2.4.2 → conexus-2.5.0}/docs/plans/2026-03-23-rdr-040-impl-plan.md +0 -0
  79. {conexus-2.4.2 → conexus-2.5.0}/docs/postmortem/2026-03-23-pdf-index-collection-mismatch.md +0 -0
  80. {conexus-2.4.2 → conexus-2.5.0}/docs/postmortem/2026-03-24-pdf-index-fix-not-applied.md +0 -0
  81. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/001-rdr-process-validation.md +0 -0
  82. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/002-t2-status-synchronization.md +0 -0
  83. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/010-t1-http-server.md +0 -0
  84. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/011-pdf-ingest-test-coverage.md +0 -0
  85. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/012-pdfplumber-extraction-tier.md +0 -0
  86. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/014-knowledge-base-retrieval-quality.md +0 -0
  87. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/015-indexing-pipeline-rethink.md +0 -0
  88. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/016-ast-chunk-line-range-bug.md +0 -0
  89. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/017-indexing-progress-reporting.md +0 -0
  90. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/018-replace-serve-with-git-hooks.md +0 -0
  91. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/023-agent-tool-permissions-audit.md +0 -0
  92. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/024-rdr-process-guardrails.md +0 -0
  93. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/028-language-registry-unification.md +0 -0
  94. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/029-pipeline-versioning.md +0 -0
  95. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/post-mortem/cce-query-model-mismatch.md +0 -0
  96. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-001-rdr-process-validation.md +0 -0
  97. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-002-t2-status-synchronization.md +0 -0
  98. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-004-four-store-architecture.md +0 -0
  99. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-005-chromadb-cloud-quota-enforcement.md +0 -0
  100. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-006-chunk-size-configuration.md +0 -0
  101. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-007-claude-adoption-session-context-and-search-guidance.md +0 -0
  102. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-008-nx-workflow-integration.md +0 -0
  103. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-009-remove-agentic-and-answer-flags.md +0 -0
  104. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-010-t1-scratch-persistent-bounded-store.md +0 -0
  105. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-011-pdf-ingest-test-coverage.md +0 -0
  106. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-012-pdfplumber-extraction-tier.md +0 -0
  107. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-013-remove-nx-pm-layer.md +0 -0
  108. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-014-knowledge-base-retrieval-quality.md +0 -0
  109. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-015-indexing-pipeline-rethink.md +0 -0
  110. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-016-ast-chunk-line-range-bug.md +0 -0
  111. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-017-indexing-progress-reporting.md +0 -0
  112. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-018-replace-serve-with-git-hooks.md +0 -0
  113. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-019-chromadb-transient-retry.md +0 -0
  114. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-020-voyage-chromadb-read-timeout.md +0 -0
  115. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-021-docling-pdf-extraction.md +0 -0
  116. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-022-memory-delete-command.md +0 -0
  117. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-023-agent-tool-permissions-audit.md +0 -0
  118. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-024-rdr-process-guardrails.md +0 -0
  119. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-025-language-agnostic-agents.md +0 -0
  120. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-026-hybrid-search-fusion.md +0 -0
  121. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-027-search-results-ux.md +0 -0
  122. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-028-code-search-recall.md +0 -0
  123. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-029-pipeline-versioning.md +0 -0
  124. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-030-reliability-hardening.md +0 -0
  125. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-031-collection-portability.md +0 -0
  126. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-032-indexer-decomposition.md +0 -0
  127. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-033-pdf-agent-nx-index-alignment.md +0 -0
  128. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-034-mcp-server-agent-storage.md +0 -0
  129. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-035-plugin-agent-mcp-tool-access.md +0 -0
  130. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-036-post-accept-planning-workflow.md +0 -0
  131. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-037-t3-database-consolidation.md +0 -0
  132. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-038-local-t3-backend.md +0 -0
  133. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-039-claude-code-framework-alignment.md +0 -0
  134. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr/rdr-040-cce-postmortem-gaps-mcp-enhancement.md +0 -0
  135. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr-nexus-integration.md +0 -0
  136. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr-overview.md +0 -0
  137. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr-templates.md +0 -0
  138. {conexus-2.4.2 → conexus-2.5.0}/docs/rdr-workflow.md +0 -0
  139. {conexus-2.4.2 → conexus-2.5.0}/docs/repo-indexing.md +0 -0
  140. {conexus-2.4.2 → conexus-2.5.0}/docs/storage-tiers.md +0 -0
  141. {conexus-2.4.2 → conexus-2.5.0}/nx/.mcp.json +0 -0
  142. {conexus-2.4.2 → conexus-2.5.0}/nx/README.md +0 -0
  143. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/_shared/CONTEXT_PROTOCOL.md +0 -0
  144. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/_shared/ERROR_HANDLING.md +0 -0
  145. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/_shared/MAINTENANCE.md +0 -0
  146. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/_shared/README.md +0 -0
  147. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/_shared/RELAY_TEMPLATE.md +0 -0
  148. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/architect-planner.md +0 -0
  149. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/code-review-expert.md +0 -0
  150. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/codebase-deep-analyzer.md +0 -0
  151. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/debugger.md +0 -0
  152. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/deep-analyst.md +0 -0
  153. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/deep-research-synthesizer.md +0 -0
  154. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/knowledge-tidier.md +0 -0
  155. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/orchestrator.md +0 -0
  156. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/pdf-chromadb-processor.md +0 -0
  157. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/plan-auditor.md +0 -0
  158. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/plan-enricher.md +0 -0
  159. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/strategic-planner.md +0 -0
  160. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/substantive-critic.md +0 -0
  161. {conexus-2.4.2 → conexus-2.5.0}/nx/agents/test-validator.md +0 -0
  162. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/analyze-code.md +0 -0
  163. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/architecture.md +0 -0
  164. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/create-plan.md +0 -0
  165. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/debug.md +0 -0
  166. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/deep-analysis.md +0 -0
  167. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/enrich-plan.md +0 -0
  168. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/implement.md +0 -0
  169. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/knowledge-tidy.md +0 -0
  170. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/nx-preflight.md +0 -0
  171. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/pdf-process.md +0 -0
  172. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/plan-audit.md +0 -0
  173. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/rdr-accept.md +0 -0
  174. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/rdr-close.md +0 -0
  175. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/rdr-create.md +0 -0
  176. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/rdr-gate.md +0 -0
  177. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/rdr-list.md +0 -0
  178. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/rdr-research.md +0 -0
  179. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/rdr-show.md +0 -0
  180. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/research.md +0 -0
  181. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/review-code.md +0 -0
  182. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/substantive-critique.md +0 -0
  183. {conexus-2.4.2 → conexus-2.5.0}/nx/commands/test-validate.md +0 -0
  184. {conexus-2.4.2 → conexus-2.5.0}/nx/hooks/hooks.json +0 -0
  185. {conexus-2.4.2 → conexus-2.5.0}/nx/hooks/scripts/post_compact_hook.sh +0 -0
  186. {conexus-2.4.2 → conexus-2.5.0}/nx/hooks/scripts/rdr_hook.py +0 -0
  187. {conexus-2.4.2 → conexus-2.5.0}/nx/hooks/scripts/session_start_hook.py +0 -0
  188. {conexus-2.4.2 → conexus-2.5.0}/nx/hooks/scripts/stop_failure_hook.py +0 -0
  189. {conexus-2.4.2 → conexus-2.5.0}/nx/hooks/scripts/subagent-start.sh +0 -0
  190. {conexus-2.4.2 → conexus-2.5.0}/nx/hooks/scripts/t2_prefix_scan.py +0 -0
  191. {conexus-2.4.2 → conexus-2.5.0}/nx/registry.yaml +0 -0
  192. {conexus-2.4.2 → conexus-2.5.0}/nx/resources/rdr/README-TEMPLATE.md +0 -0
  193. {conexus-2.4.2 → conexus-2.5.0}/nx/resources/rdr/TEMPLATE.md +0 -0
  194. {conexus-2.4.2 → conexus-2.5.0}/nx/resources/rdr/post-mortem/TEMPLATE.md +0 -0
  195. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/architecture/SKILL.md +0 -0
  196. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/brainstorming-gate/SKILL.md +0 -0
  197. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/cli-controller/SKILL.md +0 -0
  198. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/code-review/SKILL.md +0 -0
  199. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/codebase-analysis/SKILL.md +0 -0
  200. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/debugging/SKILL.md +0 -0
  201. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/deep-analysis/SKILL.md +0 -0
  202. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/enrich-plan/SKILL.md +0 -0
  203. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/knowledge-tidying/SKILL.md +0 -0
  204. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/nexus/SKILL.md +0 -0
  205. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/nexus/reference.md +0 -0
  206. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/pdf-processing/SKILL.md +0 -0
  207. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/plan-validation/SKILL.md +0 -0
  208. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/rdr-accept/SKILL.md +0 -0
  209. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/rdr-close/SKILL.md +0 -0
  210. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/rdr-create/SKILL.md +0 -0
  211. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/rdr-gate/SKILL.md +0 -0
  212. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/rdr-list/SKILL.md +0 -0
  213. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/rdr-research/SKILL.md +0 -0
  214. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/rdr-show/SKILL.md +0 -0
  215. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/research-synthesis/SKILL.md +0 -0
  216. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/serena-code-nav/SKILL.md +0 -0
  217. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/strategic-planning/SKILL.md +0 -0
  218. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/substantive-critique/SKILL.md +0 -0
  219. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/test-validation/SKILL.md +0 -0
  220. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/using-nx-skills/SKILL.md +0 -0
  221. {conexus-2.4.2 → conexus-2.5.0}/nx/skills/writing-nx-skills/SKILL.md +0 -0
  222. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/__init__.py +0 -0
  223. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/chunker.py +0 -0
  224. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/classifier.py +0 -0
  225. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/cli.py +0 -0
  226. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/code_indexer.py +0 -0
  227. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/__init__.py +0 -0
  228. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/_helpers.py +0 -0
  229. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/_provision.py +0 -0
  230. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/collection.py +0 -0
  231. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/config_cmd.py +0 -0
  232. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/doctor.py +0 -0
  233. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/hook.py +0 -0
  234. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/hooks.py +0 -0
  235. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/index.py +0 -0
  236. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/memory.py +0 -0
  237. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/scratch.py +0 -0
  238. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/search_cmd.py +0 -0
  239. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/commands/store.py +0 -0
  240. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/config.py +0 -0
  241. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/corpus.py +0 -0
  242. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/db/__init__.py +0 -0
  243. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/db/chroma_quotas.py +0 -0
  244. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/db/local_ef.py +0 -0
  245. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/db/t1.py +0 -0
  246. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/db/t2.py +0 -0
  247. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/db/t3.py +0 -0
  248. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/doc_indexer.py +0 -0
  249. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/errors.py +0 -0
  250. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/exporter.py +0 -0
  251. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/formatters.py +0 -0
  252. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/frecency.py +0 -0
  253. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/hooks.py +0 -0
  254. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/index_context.py +0 -0
  255. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/indexer.py +0 -0
  256. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/indexer_utils.py +0 -0
  257. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/languages.py +0 -0
  258. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/mcp_server.py +0 -0
  259. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/md_chunker.py +0 -0
  260. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/pdf_chunker.py +0 -0
  261. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/pdf_extractor.py +0 -0
  262. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/prose_indexer.py +0 -0
  263. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/registry.py +0 -0
  264. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/retry.py +0 -0
  265. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/ripgrep_cache.py +0 -0
  266. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/scoring.py +0 -0
  267. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/search_engine.py +0 -0
  268. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/session.py +0 -0
  269. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/ttl.py +0 -0
  270. {conexus-2.4.2 → conexus-2.5.0}/src/nexus/types.py +0 -0
  271. {conexus-2.4.2 → conexus-2.5.0}/tests/__init__.py +0 -0
  272. {conexus-2.4.2 → conexus-2.5.0}/tests/__snapshots__/test_search_snapshot.ambr +0 -0
  273. {conexus-2.4.2 → conexus-2.5.0}/tests/conftest.py +0 -0
  274. {conexus-2.4.2 → conexus-2.5.0}/tests/e2e/auth-login.sh +0 -0
  275. {conexus-2.4.2 → conexus-2.5.0}/tests/e2e/lib.sh +0 -0
  276. {conexus-2.4.2 → conexus-2.5.0}/tests/e2e/run.sh +0 -0
  277. {conexus-2.4.2 → conexus-2.5.0}/tests/e2e/sandbox.sh +0 -0
  278. {conexus-2.4.2 → conexus-2.5.0}/tests/e2e/scenarios/00_debug_load.sh +0 -0
  279. {conexus-2.4.2 → conexus-2.5.0}/tests/e2e/scenarios/01_smoke.sh +0 -0
  280. {conexus-2.4.2 → conexus-2.5.0}/tests/e2e/scenarios/02_sequential_thinking.sh +0 -0
  281. {conexus-2.4.2 → conexus-2.5.0}/tests/e2e/scenarios/03_skills.sh +0 -0
  282. {conexus-2.4.2 → conexus-2.5.0}/tests/hooks/__init__.py +0 -0
  283. {conexus-2.4.2 → conexus-2.5.0}/tests/hooks/test_post_compact_hook.py +0 -0
  284. {conexus-2.4.2 → conexus-2.5.0}/tests/hooks/test_stop_failure_hook.py +0 -0
  285. {conexus-2.4.2 → conexus-2.5.0}/tests/test_ast_languages.py +0 -0
  286. {conexus-2.4.2 → conexus-2.5.0}/tests/test_chroma_quotas.py +0 -0
  287. {conexus-2.4.2 → conexus-2.5.0}/tests/test_chroma_retry.py +0 -0
  288. {conexus-2.4.2 → conexus-2.5.0}/tests/test_chunker.py +0 -0
  289. {conexus-2.4.2 → conexus-2.5.0}/tests/test_chunker_ast_languages.py +0 -0
  290. {conexus-2.4.2 → conexus-2.5.0}/tests/test_classifier.py +0 -0
  291. {conexus-2.4.2 → conexus-2.5.0}/tests/test_collection_cmd.py +0 -0
  292. {conexus-2.4.2 → conexus-2.5.0}/tests/test_config.py +0 -0
  293. {conexus-2.4.2 → conexus-2.5.0}/tests/test_config_cmd.py +0 -0
  294. {conexus-2.4.2 → conexus-2.5.0}/tests/test_corpus.py +0 -0
  295. {conexus-2.4.2 → conexus-2.5.0}/tests/test_doc_indexer.py +0 -0
  296. {conexus-2.4.2 → conexus-2.5.0}/tests/test_doc_indexer_hash_sync.py +0 -0
  297. {conexus-2.4.2 → conexus-2.5.0}/tests/test_doc_indexer_pagination.py +0 -0
  298. {conexus-2.4.2 → conexus-2.5.0}/tests/test_doctor_cmd.py +0 -0
  299. {conexus-2.4.2 → conexus-2.5.0}/tests/test_doctor_integrity.py +0 -0
  300. {conexus-2.4.2 → conexus-2.5.0}/tests/test_e2e.py +0 -0
  301. {conexus-2.4.2 → conexus-2.5.0}/tests/test_exporter.py +0 -0
  302. {conexus-2.4.2 → conexus-2.5.0}/tests/test_formatters.py +0 -0
  303. {conexus-2.4.2 → conexus-2.5.0}/tests/test_frecency.py +0 -0
  304. {conexus-2.4.2 → conexus-2.5.0}/tests/test_git_hooks.py +0 -0
  305. {conexus-2.4.2 → conexus-2.5.0}/tests/test_hooks.py +0 -0
  306. {conexus-2.4.2 → conexus-2.5.0}/tests/test_hybrid_boost.py +0 -0
  307. {conexus-2.4.2 → conexus-2.5.0}/tests/test_index_cmd.py +0 -0
  308. {conexus-2.4.2 → conexus-2.5.0}/tests/test_index_lock.py +0 -0
  309. {conexus-2.4.2 → conexus-2.5.0}/tests/test_index_rdr_cmd.py +0 -0
  310. {conexus-2.4.2 → conexus-2.5.0}/tests/test_index_reminder.py +0 -0
  311. {conexus-2.4.2 → conexus-2.5.0}/tests/test_indexer.py +0 -0
  312. {conexus-2.4.2 → conexus-2.5.0}/tests/test_indexer_chunk_flow.py +0 -0
  313. {conexus-2.4.2 → conexus-2.5.0}/tests/test_indexer_e2e.py +0 -0
  314. {conexus-2.4.2 → conexus-2.5.0}/tests/test_indexer_modules.py +0 -0
  315. {conexus-2.4.2 → conexus-2.5.0}/tests/test_integration.py +0 -0
  316. {conexus-2.4.2 → conexus-2.5.0}/tests/test_languages.py +0 -0
  317. {conexus-2.4.2 → conexus-2.5.0}/tests/test_local_mode.py +0 -0
  318. {conexus-2.4.2 → conexus-2.5.0}/tests/test_mcp_concurrency.py +0 -0
  319. {conexus-2.4.2 → conexus-2.5.0}/tests/test_mcp_integration.py +0 -0
  320. {conexus-2.4.2 → conexus-2.5.0}/tests/test_mcp_server.py +0 -0
  321. {conexus-2.4.2 → conexus-2.5.0}/tests/test_mcp_session.py +0 -0
  322. {conexus-2.4.2 → conexus-2.5.0}/tests/test_md_chunker.py +0 -0
  323. {conexus-2.4.2 → conexus-2.5.0}/tests/test_md_chunker_semantic_integrity.py +0 -0
  324. {conexus-2.4.2 → conexus-2.5.0}/tests/test_md_preservation.py +0 -0
  325. {conexus-2.4.2 → conexus-2.5.0}/tests/test_memory.py +0 -0
  326. {conexus-2.4.2 → conexus-2.5.0}/tests/test_minified_chunking.py +0 -0
  327. {conexus-2.4.2 → conexus-2.5.0}/tests/test_p0_regressions.py +0 -0
  328. {conexus-2.4.2 → conexus-2.5.0}/tests/test_pdf_chunker.py +0 -0
  329. {conexus-2.4.2 → conexus-2.5.0}/tests/test_pdf_chunker_integration.py +0 -0
  330. {conexus-2.4.2 → conexus-2.5.0}/tests/test_pdf_e2e.py +0 -0
  331. {conexus-2.4.2 → conexus-2.5.0}/tests/test_pdf_extractor.py +0 -0
  332. {conexus-2.4.2 → conexus-2.5.0}/tests/test_pdf_extractor_integration.py +0 -0
  333. {conexus-2.4.2 → conexus-2.5.0}/tests/test_pdf_extractor_normalization.py +0 -0
  334. {conexus-2.4.2 → conexus-2.5.0}/tests/test_pdf_normalization.py +0 -0
  335. {conexus-2.4.2 → conexus-2.5.0}/tests/test_pdf_subsystem.py +0 -0
  336. {conexus-2.4.2 → conexus-2.5.0}/tests/test_pipeline_version.py +0 -0
  337. {conexus-2.4.2 → conexus-2.5.0}/tests/test_plugin.py +0 -0
  338. {conexus-2.4.2 → conexus-2.5.0}/tests/test_plugin_install.py +0 -0
  339. {conexus-2.4.2 → conexus-2.5.0}/tests/test_plugin_structure.py +0 -0
  340. {conexus-2.4.2 → conexus-2.5.0}/tests/test_ppid_chain_hypothesis.py +0 -0
  341. {conexus-2.4.2 → conexus-2.5.0}/tests/test_provision.py +0 -0
  342. {conexus-2.4.2 → conexus-2.5.0}/tests/test_registry.py +0 -0
  343. {conexus-2.4.2 → conexus-2.5.0}/tests/test_ripgrep_cache.py +0 -0
  344. {conexus-2.4.2 → conexus-2.5.0}/tests/test_schema.py +0 -0
  345. {conexus-2.4.2 → conexus-2.5.0}/tests/test_scoring.py +0 -0
  346. {conexus-2.4.2 → conexus-2.5.0}/tests/test_scratch.py +0 -0
  347. {conexus-2.4.2 → conexus-2.5.0}/tests/test_scratch_cmd.py +0 -0
  348. {conexus-2.4.2 → conexus-2.5.0}/tests/test_search_cmd.py +0 -0
  349. {conexus-2.4.2 → conexus-2.5.0}/tests/test_search_engine.py +0 -0
  350. {conexus-2.4.2 → conexus-2.5.0}/tests/test_search_modules.py +0 -0
  351. {conexus-2.4.2 → conexus-2.5.0}/tests/test_search_snapshot.py +0 -0
  352. {conexus-2.4.2 → conexus-2.5.0}/tests/test_session.py +0 -0
  353. {conexus-2.4.2 → conexus-2.5.0}/tests/test_session_propagation_hypotheses.py +0 -0
  354. {conexus-2.4.2 → conexus-2.5.0}/tests/test_silent_error_logging.py +0 -0
  355. {conexus-2.4.2 → conexus-2.5.0}/tests/test_store_cmd.py +0 -0
  356. {conexus-2.4.2 → conexus-2.5.0}/tests/test_t1.py +0 -0
  357. {conexus-2.4.2 → conexus-2.5.0}/tests/test_t2.py +0 -0
  358. {conexus-2.4.2 → conexus-2.5.0}/tests/test_t2_prefix_scan.py +0 -0
  359. {conexus-2.4.2 → conexus-2.5.0}/tests/test_t3.py +0 -0
  360. {conexus-2.4.2 → conexus-2.5.0}/tests/test_t3_quota_enforcement.py +0 -0
  361. {conexus-2.4.2 → conexus-2.5.0}/tests/test_ttl.py +0 -0
  362. {conexus-2.4.2 → conexus-2.5.0}/tests/test_tuning_config.py +0 -0
  363. {conexus-2.4.2 → conexus-2.5.0}/tests/test_types_and_errors.py +0 -0
  364. {conexus-2.4.2 → conexus-2.5.0}/tests/test_voyage_retry.py +0 -0
@@ -9,7 +9,7 @@
9
9
  "name": "nx",
10
10
  "source": "./nx",
11
11
  "description": "Self-hosted three-tier knowledge management with 15 specialized agents, semantic search, and RDR decision tracking for Claude Code.",
12
- "version": "2.4.2"
12
+ "version": "2.5.0"
13
13
  }
14
14
  ]
15
15
  }
@@ -6,6 +6,20 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.5.0] - 2026-03-25
10
+
11
+ ### Added
12
+ - **Developer agent circuit breaker** (RDR-040) — after 2 consecutive test
13
+ failures, the developer agent stops and outputs a structured ESCALATION
14
+ report. The parent dispatches the debugger with the failure context. Counter
15
+ tracks test runs (not root causes), resets on green or new invocation.
16
+ Supersedes the advisory "Recommend debugger" escalation trigger.
17
+ - **Debugger escalation relay template** in development skill — parent-side
18
+ dispatch instructions with field mapping from escalation report to debugger
19
+ relay.
20
+ - **Developer → debugger routing** in orchestration skill — escalation edge
21
+ in routing diagram and quick reference table.
22
+
9
23
  ## [2.4.2] - 2026-03-25
10
24
 
11
25
  ### Docs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: conexus
3
- Version: 2.4.2
3
+ Version: 2.5.0
4
4
  Summary: Self-hosted semantic search and knowledge management for LLM-driven development
5
5
  Project-URL: Homepage, https://github.com/Hellblazer/nexus
6
6
  Project-URL: Repository, https://github.com/Hellblazer/nexus
@@ -61,6 +61,7 @@ An RDR (Research-Design-Review) is a short document that records a technical dec
61
61
  | [RDR-037](rdr-037-t3-database-consolidation.md) | T3 Database Consolidation | Enhancement | Accepted | 2026-03-14 |
62
62
  | [RDR-038](rdr-038-local-t3-backend.md) | Local T3 Backend | Architecture | Accepted | 2026-03-14 |
63
63
  | [RDR-039](rdr-039-claude-code-framework-alignment.md) | Claude Code Framework Alignment (v2.1.72–v2.1.81) | Technical Debt | Accepted | 2026-03-21 |
64
+ | [RDR-040](rdr-040-developer-agent-circuit-breaker.md) | Developer Agent Circuit Breaker for Test Failure Escalation | Architecture | Closed | 2026-03-25 |
64
65
 
65
66
  ---
66
67
 
@@ -0,0 +1,309 @@
1
+ ---
2
+ title: "Developer Agent Circuit Breaker for Test Failure Escalation"
3
+ id: RDR-040
4
+ type: Architecture
5
+ status: closed
6
+ priority: high
7
+ author: Hal Hildebrand
8
+ reviewed-by: self
9
+ created: 2026-03-25
10
+ accepted_date: 2026-03-25
11
+ closed_date: 2026-03-25
12
+ close_reason: implemented
13
+ related_issues: []
14
+ ---
15
+
16
+ # RDR-040: Developer Agent Circuit Breaker for Test Failure Escalation
17
+
18
+ > Revise during planning; lock at implementation.
19
+ > If wrong, abandon code and iterate RDR.
20
+
21
+ ## Problem Statement
22
+
23
+ The `nx:developer` agent thrashes on test failures instead of escalating to the debugger. The existing "Automatic Escalation Triggers" section in the developer agent prompt says to *recommend* debugger after 2 failures, but this is advisory — the agent outputs a "Next Step" recommendation at the *end* of its run, by which point it has already wasted 10+ minutes going in circles.
24
+
25
+ Observed: developer agent spent 400+ lines of output (10+ minutes) re-reading source code and hypothesizing without running diagnostics. After manual intervention, the debugger agent solved the same issue in 3 minutes with a 2-line fix.
26
+
27
+ ## Context
28
+
29
+ ### Background
30
+
31
+ Incident: 2026-03-25, ART project, RDR-029 Wave 5. Developer agent implementing Chunk Representation POC (ART-63hr). 3 of 6 tests failing — `MaskingField.update()` called sequentially didn't form chunks because ShuntingDynamics decayed first node's activation before second pattern was presented.
32
+
33
+ The developer agent:
34
+ - Read MaskingField source code repeatedly
35
+ - Hypothesized about activation wash-out
36
+ - Re-read the same methods looking for the "real" cause
37
+ - Self-admitted "I'm going in circles"
38
+ - Never wrote a diagnostic test
39
+
40
+ The debugger agent:
41
+ 1. Confirmed the hypothesis (sequential `update()` vs batch `processTemporalPattern()`)
42
+ 2. Checked the passing Wave 3 POC test that used the batch API
43
+ 3. Changed both production code and test to use `processTemporalPattern()`
44
+ 4. All 6 tests green in ~3 minutes
45
+
46
+ Full incident memo: T2 `nexus_active/investigation-developer-agent-thrashing-debugger-underuse`
47
+
48
+ ### Technical Environment
49
+
50
+ - Developer agent: `nx/agents/developer.md` (sonnet model)
51
+ - Debugger agent: `nx/agents/debugger.md` (opus model)
52
+ - Development skill: `nx/skills/development/SKILL.md`
53
+ - Orchestration skill: `nx/skills/orchestration/SKILL.md`
54
+ - Known constraint: subagents cannot spawn other subagents
55
+
56
+ ## Research Findings
57
+
58
+ ### Investigation
59
+
60
+ Reviewed developer agent prompt (`developer.md`):
61
+
62
+ - Lines 187-195: "Automatic Escalation Triggers" — advisory only. Says "Recommend **debugger** (via Next Step output) if test failures after 2 fix attempts." This fires at completion time, not at failure time.
63
+ - Lines 103-116: "Recommended Next Step (MANDATORY output)" — mechanism is output-only; the agent continues working until it finishes, then suggests what to do next.
64
+ - Lines 169-175: "Problem-Solving Approach" — says to use sequential thinking but has no hard stop.
65
+
66
+ Reviewed development skill (`development/SKILL.md`):
67
+ - No instructions for the parent to detect failure escalation from the developer agent.
68
+ - No convention for structured failure output.
69
+
70
+ Reviewed orchestration skill (`orchestration/SKILL.md`):
71
+ - Pipeline shows `developer → code-review-expert → test-validator` but no `developer → debugger` escalation path.
72
+
73
+ ### Key Discoveries
74
+
75
+ - **Verified** — Developer agent's escalation is output-only, fires at end of turn. By then, the damage (wasted context, wasted time) is done.
76
+ - **Verified** — Debugger agent solves these problems efficiently when given clear context (failing test, error, hypothesis). The gap is invocation timing, not capability.
77
+ - **Verified** — Subagents cannot spawn other subagents. The developer cannot launch a debugger; it can only signal the parent.
78
+ - **Documented** — The `using-nx-skills` routing table already says "Test fails → /nx:debug IMMEDIATELY" but this is advisory to the human, not enforced in agent prompts.
79
+
80
+ ### Critical Assumptions
81
+
82
+ - [x] Developer agent will obey a hard stop instruction in its system prompt — **Status**: Verified — **Method**: Documented (Claude agents follow system prompt constraints when stated as mandatory/non-negotiable)
83
+ - [x] Parent conversation can parse a structured failure block from agent output and dispatch debugger — **Status**: Verified — **Method**: Documented (standard relay pattern already works this way)
84
+
85
+ ## Proposed Solution
86
+
87
+ ### Approach
88
+
89
+ Add a hard circuit breaker to the developer agent prompt that fires *during* execution, not at completion. After 2 consecutive test run failures (any run where one or more tests fail), the agent must stop and output a structured failure report. The parent conversation (or skill) then dispatches the debugger. The counter tracks test runs, not root causes — no ambiguity about "same issue" classification.
90
+
91
+ ### Technical Design
92
+
93
+ #### 1. Developer agent (`developer.md`) — Circuit Breaker section
94
+
95
+ Add a new `## Circuit Breaker` section that overrides the advisory escalation:
96
+
97
+ ```markdown
98
+ ## Circuit Breaker (MANDATORY — overrides all other behavior including Completion Protocol)
99
+
100
+ **Track consecutive test failures.** Every time you run the test command and
101
+ one or more tests fail, increment your failure counter. A partial pass (some
102
+ tests pass, some fail) counts as a failure.
103
+
104
+ **Counter resets to 0 when:**
105
+ - Any test run ends with ALL tests green
106
+ - You are dispatched as a new agent invocation (fresh start)
107
+
108
+ Do not try to classify "same issue" vs "different issue." Count test runs,
109
+ not root causes.
110
+
111
+ **After 2 consecutive failures (counter reaches 2):**
112
+
113
+ 1. **STOP immediately.** Do not read more source code. Do not try another fix.
114
+ 2. **Output ONLY the escalation report below.** Do NOT output the normal
115
+ `## Next Step: code-review-expert` block — the circuit breaker supersedes
116
+ the Completion Protocol.
117
+ 3. **End your turn.**
118
+
119
+ <!-- ESCALATION -->
120
+ ## ESCALATION: Debugger Required
121
+
122
+ **Failing test(s)**: [test name(s)]
123
+ **Error**: [exact error message or assertion failure]
124
+ **What I tried**:
125
+ 1. [first attempt and result]
126
+ 2. [second attempt and result]
127
+ **Hypothesis**: [your best guess at the root cause]
128
+ **Diagnostic suggestion**: [what a debugger should investigate first, or "none" if truly lost]
129
+
130
+ **This is not optional.** The debugger agent solves these problems in minutes.
131
+ Continuing past 2 failures wastes time — observed in production (ART RDR-029
132
+ Wave 5: developer thrashed 10+ min, debugger solved in 3 min).
133
+ ```
134
+
135
+ Replace the current advisory "Recommend **debugger**" in the Automatic Escalation Triggers section with a cross-reference to the Circuit Breaker. Also add an exception clause to the Completion Protocol: "Exception: If the Circuit Breaker fires, do not output `## Next Step: code-review-expert` — the escalation block is your sole terminal output."
136
+
137
+ #### 2. Development skill (`development/SKILL.md`) — Parent-side dispatch
138
+
139
+ Add a `## Debugger Escalation` section after Agent Invocation:
140
+
141
+ ```markdown
142
+ ## Debugger Escalation
143
+
144
+ If the developer agent returns with an `## ESCALATION: Debugger Required` block
145
+ (detected by the `<!-- ESCALATION -->` sentinel or the H2 header):
146
+
147
+ 1. **Do not re-dispatch the developer.** The circuit breaker fired for a reason.
148
+ 2. **Dispatch the debugger immediately** using this relay template:
149
+
150
+ ## Relay: debugger
151
+
152
+ **Task**: Diagnose test failure that developer could not resolve: [Failing test(s)]
153
+ **Bead**: [same bead as developer]
154
+
155
+ ### Input Artifacts
156
+ - Error: [Error field from escalation report]
157
+ - Hypothesis: [Hypothesis field from escalation report]
158
+ - What was tried: [What I tried field — both attempts]
159
+ - Diagnostic suggestion: [Diagnostic suggestion field]
160
+ - Files: [files from original developer relay]
161
+
162
+ ### Deliverable
163
+ Root cause analysis and fix with all tests passing
164
+
165
+ ### Quality Criteria
166
+ - [ ] Root cause identified with evidence
167
+ - [ ] Fix implemented
168
+ - [ ] All failing tests now pass
169
+
170
+ 3. After debugger resolves the issue, re-dispatch developer to continue
171
+ the remaining plan steps.
172
+ ```
173
+
174
+ #### 3. Orchestration skill — Add escalation edge
175
+
176
+ Add `developer → debugger` escalation path to the routing diagram (labeled `[on escalation]` — this is conditional, not equal-weight) and add a row to the quick reference table: `| Implement code (escalation) | debugger | developer circuit breaker → debugger → developer resumes |`
177
+
178
+ ### Decision Rationale
179
+
180
+ The circuit breaker is in the agent prompt because that's where the behavior needs to change. The agent itself must stop; the parent cannot force-stop a running subagent. The structured failure report gives the debugger agent maximum context with minimum overhead.
181
+
182
+ A PostToolUse hook was considered and rejected — it would require regex-matching test output across multiple languages and build systems, is fragile, and doesn't solve the core problem (the agent is still running when the hook fires).
183
+
184
+ ## Alternatives Considered
185
+
186
+ ### Alternative 1: PostToolUse hook for test failure detection
187
+
188
+ **Description**: Hook watches Bash tool output for test failure patterns, warns the parent.
189
+
190
+ **Pros**: Works without changing agent prompts.
191
+
192
+ **Cons**: Fragile (regex across languages), doesn't stop the agent, adds complexity.
193
+
194
+ **Reason for rejection**: The agent-level circuit breaker is simpler and more reliable.
195
+
196
+ ### Alternative 2: Developer agent spawns debugger subagent
197
+
198
+ **Description**: Developer agent directly launches debugger as a child agent.
199
+
200
+ **Pros**: No parent involvement needed.
201
+
202
+ **Cons**: Subagents cannot spawn other subagents — this is a known platform limitation.
203
+
204
+ **Reason for rejection**: Not currently possible.
205
+
206
+ ### Briefly Rejected
207
+
208
+ - **Reduce developer agent to 1 failure attempt**: Too aggressive — legitimate first-attempt failures (typos, import order) would trigger unnecessary escalation.
209
+
210
+ ## Trade-offs
211
+
212
+ ### Consequences
213
+
214
+ - Positive: Developer agent stops wasting time on failures it can't solve
215
+ - Positive: Debugger agent gets invoked early with structured context
216
+ - Positive: Observed improvement in ART incident — 10+ min thrashing → 3 min resolution (N=1; Phase 2 validation should track additional incidents)
217
+ - Negative: Adds complexity to the agent prompt and skill
218
+ - Negative: 2-failure threshold may occasionally escalate prematurely for simple issues
219
+
220
+ ### Risks and Mitigations
221
+
222
+ - **Risk**: Developer agent ignores the circuit breaker instruction
223
+ **Mitigation**: Use strong language (MANDATORY, overrides all other behavior). If this proves insufficient, escalate to a PreToolUse hook.
224
+ - **Risk**: Structured failure report is malformed, debugger can't use it
225
+ **Mitigation**: The template is simple (5 fields). Even partial output gives the debugger more than nothing.
226
+
227
+ ### Failure Modes
228
+
229
+ - **Agent doesn't count failures correctly**: Worst case, it continues past 2 failures — same as current behavior. No regression.
230
+ - **Parent doesn't detect the escalation block**: The `## ESCALATION:` header is distinctive. If missed, the developer's output still contains the diagnostic, which the human can use to manually invoke debugger.
231
+
232
+ ## Implementation Plan
233
+
234
+ ### Prerequisites
235
+
236
+ - [ ] All Critical Assumptions verified (done — both verified)
237
+
238
+ ### Phase 1: Prompt Changes
239
+
240
+ #### Step 1: Add Circuit Breaker to developer.md
241
+
242
+ Add `## Circuit Breaker` section. Update Automatic Escalation Triggers to cross-reference it.
243
+
244
+ #### Step 2: Add Debugger Escalation to development/SKILL.md
245
+
246
+ Add parent-side dispatch instructions with relay template.
247
+
248
+ #### Step 3: Update orchestration/SKILL.md
249
+
250
+ Add `developer → debugger` escalation edge to routing diagram and table.
251
+
252
+ ### Phase 2: Validation
253
+
254
+ #### Step 1: Manual test
255
+
256
+ Dispatch developer agent on a task with a known test failure (e.g., the ART MaskingField scenario). Verify it stops after 2 failures and outputs the structured report. Verify parent can dispatch debugger with the report.
257
+
258
+ ## Test Plan
259
+
260
+ - **Scenario**: Developer agent hits 2 consecutive test failures — **Verify**: Agent stops, outputs `## ESCALATION: Debugger Required` with all 5 fields populated
261
+ - **Scenario**: Developer agent hits 1 failure then succeeds — **Verify**: No escalation, work continues normally
262
+ - **Scenario**: Parent receives escalation block — **Verify**: Debugger dispatched with failure context, resolves issue
263
+ - **Scenario**: Developer agent hits 1 failure, then all tests go green, then a different test fails — **Verify**: Counter reset by the green run; new failure starts counter at 1, not 2
264
+ - **Scenario**: Partial pass (3 of 5 tests pass, 2 fail) — **Verify**: Counts as a failure, counter increments
265
+
266
+ ## References
267
+
268
+ - T2 incident memo: `nexus_active/investigation-developer-agent-thrashing-debugger-underuse`
269
+ - Developer agent: `nx/agents/developer.md`
270
+ - Development skill: `nx/skills/development/SKILL.md`
271
+ - Orchestration skill: `nx/skills/orchestration/SKILL.md`
272
+ - Known limitation: subagents cannot spawn other subagents (CLAUDE.md)
273
+
274
+ ## Revision History
275
+
276
+ ### Gate Review (2026-03-25)
277
+
278
+ ### Critical — Resolved
279
+
280
+ **C1. Counter-reset semantics undefined — RESOLVED.** "Same issue" vs
281
+ "different issue" was ambiguous. Fixed: counter tracks consecutive test runs
282
+ (not root causes). Resets to 0 on any fully green run or new agent invocation.
283
+ Partial passes (some tests fail) count as failures. No "same issue"
284
+ classification needed.
285
+
286
+ **C2. `## ESCALATION:` header conflicts with mandatory Completion Protocol —
287
+ RESOLVED.** The Circuit Breaker said "end your turn" but the Completion
288
+ Protocol mandated `## Next Step: code-review-expert`. Fixed: Circuit Breaker
289
+ explicitly supersedes Completion Protocol. Added `<!-- ESCALATION -->` HTML
290
+ sentinel for reliable detection. Added exception clause to Completion Protocol
291
+ in implementation plan.
292
+
293
+ ### Significant — Resolved
294
+
295
+ **S1. No debugger relay template — RESOLVED.** The skill addition said
296
+ "dispatch debugger" but didn't show how to map escalation fields to the relay.
297
+ Fixed: full relay template added with explicit field mapping (Failing tests →
298
+ Task, Error/Hypothesis/Attempts → Input Artifacts).
299
+
300
+ **S2. Partial pass definition missing — RESOLVED.** "Consecutive test
301
+ failures" didn't define partial passes. Fixed: "A partial pass (some tests
302
+ pass, some fail) counts as a failure." Added test plan scenario for this case.
303
+
304
+ ### Observations — Applied
305
+
306
+ - O1: Orchestration diagram edge labeled `[on escalation]` (not equal-weight)
307
+ - O2: "Diagnostic suggestion" field marked as accepting "none" if agent is lost
308
+ - O3: "3 minute resolution" reworded as N=1 observation with note to track more
309
+ - O4: Critical assumptions acknowledged as "Documented" pre-verification; Phase 2 manual test is the real verification
@@ -6,6 +6,14 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.5.0] - 2026-03-25
10
+
11
+ ### Added
12
+ - **Developer agent circuit breaker** — hard stop after 2 consecutive test
13
+ failures with structured ESCALATION report for debugger dispatch.
14
+ - **Debugger escalation section** in development skill with relay template.
15
+ - **Developer → debugger escalation edge** in orchestration routing.
16
+
9
17
  ## [2.4.2] - 2026-03-25
10
18
 
11
19
  Plugin version aligned with Nexus CLI 2.4.2. No plugin-level functional changes.
@@ -184,11 +184,43 @@ When facing complexity:
184
184
  - Write code that is easy to understand and maintain
185
185
  - Use patterns appropriately - never overengineer
186
186
 
187
+ ## Circuit Breaker (MANDATORY — overrides all other behavior including Completion Protocol)
188
+
189
+ **Track consecutive test failures.** Every time you run the test command and one or more tests fail, increment your failure counter. A partial pass (some tests pass, some fail) counts as a failure.
190
+
191
+ **Counter resets to 0 when:**
192
+ - Any test run ends with ALL tests green
193
+ - You are dispatched as a new agent invocation (fresh start)
194
+
195
+ Do not try to classify "same issue" vs "different issue." Count test runs, not root causes.
196
+
197
+ **After 2 consecutive failures (counter reaches 2):**
198
+
199
+ 1. **STOP immediately.** Do not read more source code. Do not try another fix.
200
+ 2. **Output ONLY the escalation report below.** Do NOT output the normal `## Next Step: code-review-expert` block — the circuit breaker supersedes the Completion Protocol.
201
+ 3. **End your turn.** Your failure counter starts at 0 when you are dispatched.
202
+
203
+ Output this exactly (fill in the bracketed fields):
204
+
205
+ <!-- ESCALATION -->
206
+ ## ESCALATION: Debugger Required
207
+
208
+ **Failing test(s)**: [test name(s)]
209
+ **Error**: [exact error message or assertion failure]
210
+ **What I tried**:
211
+ 1. [first attempt and result]
212
+ 2. [second attempt and result]
213
+ **Hypothesis**: [your best guess at the root cause]
214
+ **Diagnostic suggestion**: [what a debugger should investigate first, or "none" if truly lost]
215
+
216
+ **This is not optional.** The debugger agent solves these problems in minutes. Continuing past 2 failures wastes time.
217
+
187
218
  ## Automatic Escalation Triggers
188
219
 
220
+ For conditions NOT covered by the Circuit Breaker (which handles test failures), recommend via Next Step output:
221
+
189
222
  Recommend **debugger** (via Next Step output) if ANY of:
190
- - Test failures after 2 fix attempts
191
- - Non-deterministic test failures (intermittent, timing-dependent)
223
+ - Non-deterministic test failures (intermittent, timing-dependent) escalate immediately via Next Step if intermittency is confirmed; Circuit Breaker only catches consecutive failures
192
224
  - Exception with unclear cause (stack trace doesn't reveal issue)
193
225
  - Performance degradation >20% from baseline
194
226
  - Memory leaks or resource exhaustion
@@ -214,6 +246,8 @@ Before marking any work complete:
214
246
  5. Update bead status via bd close <id>
215
247
  6. Commit beads file with code changes
216
248
 
249
+ **Exception**: If the Circuit Breaker fires, do not output `## Next Step: code-review-expert` — the escalation block is your sole terminal output.
250
+
217
251
  ## Workflow Position
218
252
 
219
253
  ### I Receive From:
@@ -59,6 +59,37 @@ Working implementation with tests
59
59
 
60
60
  For full relay structure and optional fields, see [RELAY_TEMPLATE.md](../../agents/_shared/RELAY_TEMPLATE.md).
61
61
 
62
+ ## Debugger Escalation
63
+
64
+ If the developer agent returns with `## ESCALATION: Debugger Required` in its output (detect by scanning for `<!-- ESCALATION -->` or the literal string `ESCALATION: Debugger Required`):
65
+
66
+ 1. **Do not re-dispatch the developer.** The circuit breaker fired for a reason.
67
+ 2. **Dispatch the debugger immediately** using this relay:
68
+
69
+ ```markdown
70
+ ## Relay: debugger
71
+
72
+ **Task**: Diagnose test failure that developer could not resolve: [Failing test(s) from escalation]
73
+ **Bead**: [same bead as developer]
74
+
75
+ ### Input Artifacts
76
+ - Error: [Error field from escalation report]
77
+ - Hypothesis: [Hypothesis field from escalation report]
78
+ - What was tried: [What I tried field — both attempts]
79
+ - Diagnostic suggestion: [Diagnostic suggestion field]
80
+ - Files: [files from original developer relay]
81
+
82
+ ### Deliverable
83
+ Root cause analysis and fix with all tests passing
84
+
85
+ ### Quality Criteria
86
+ - [ ] Root cause identified with evidence
87
+ - [ ] Fix implemented
88
+ - [ ] All failing tests now pass
89
+ ```
90
+
91
+ 3. After the debugger resolves the issue, re-dispatch the developer to continue the remaining plan steps. Include the debugger's fix as context: "Circuit breaker previously fired; debugger resolved [summary of fix]. Continue from [remaining plan step]."
92
+
62
93
  ## TDD Methodology
63
94
 
64
95
  The developer agent follows test-driven development:
@@ -54,6 +54,8 @@ digraph routing {
54
54
 
55
55
  "Implement code" -> "developer";
56
56
  "developer" -> "code-review-expert" [label="then"];
57
+ "developer" -> "debugger" [label="on escalation"];
58
+ "debugger" -> "developer" [label="fix applied, resume"];
57
59
  "code-review-expert" -> "test-validator" [label="then"];
58
60
 
59
61
  "Debug issue" -> "debugger";
@@ -100,6 +102,7 @@ For full relay structure and optional fields, see [RELAY_TEMPLATE.md](../../agen
100
102
  |-------------|---------------|----------|
101
103
  | Plan a feature | strategic-planner | -> plan-auditor -> architect-planner |
102
104
  | Implement code | developer | -> code-review-expert -> test-validator |
105
+ | Implement code (circuit breaker fired) | debugger | [after developer stops] -> debugger -> developer resumes |
103
106
  | Debug issue | debugger | -> (if cross-cutting) deep-analyst |
104
107
  | Review code | code-review-expert | -> (if critical) substantive-critic |
105
108
  | Research topic | deep-research-synthesizer | -> knowledge-tidier |
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "conexus"
7
- version = "2.4.2"
7
+ version = "2.5.0"
8
8
  description = "Self-hosted semantic search and knowledge management for LLM-driven development"
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.12,<3.14"
@@ -403,7 +403,7 @@ wheels = [
403
403
 
404
404
  [[package]]
405
405
  name = "conexus"
406
- version = "2.4.2"
406
+ version = "2.5.0"
407
407
  source = { editable = "." }
408
408
  dependencies = [
409
409
  { name = "chromadb" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes