conexus 2.4.2__tar.gz → 2.6.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.
- {conexus-2.4.2 → conexus-2.6.0}/.claude-plugin/marketplace.json +1 -1
- {conexus-2.4.2 → conexus-2.6.0}/CHANGELOG.md +30 -0
- {conexus-2.4.2 → conexus-2.6.0}/PKG-INFO +1 -1
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/README.md +2 -0
- conexus-2.6.0/docs/rdr/rdr-040-developer-agent-circuit-breaker.md +309 -0
- conexus-2.6.0/docs/rdr/rdr-041-t1-scratch-inter-agent-context.md +342 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/CHANGELOG.md +18 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/_shared/CONTEXT_PROTOCOL.md +23 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/code-review-expert.md +8 -1
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/debugger.md +8 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/developer.md +45 -2
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/development/SKILL.md +59 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/orchestration/SKILL.md +3 -0
- {conexus-2.4.2 → conexus-2.6.0}/pyproject.toml +1 -1
- {conexus-2.4.2 → conexus-2.6.0}/uv.lock +1 -1
- {conexus-2.4.2 → conexus-2.6.0}/.beads/.gitignore +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/README.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/config.yaml +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/hooks/post-checkout +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/hooks/post-merge +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/hooks/pre-commit +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/hooks/pre-push +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/hooks/prepare-commit-msg +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/interactions.jsonl +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/issues.jsonl +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.beads/metadata.json +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.claude/skills/release.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.devcontainer/Dockerfile +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.devcontainer/devcontainer.json +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.dockerignore +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.env.example +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.gitattributes +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.github/workflows/ci.yml +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.github/workflows/release.yml +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.gitignore +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/.markdownlint.json +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/AGENTS.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/CLAUDE.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/Formula/nx.rb +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/LICENSE +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/README.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/README.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/architecture.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/cli-reference.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/configuration.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/contributing.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/getting-started.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/historical/README.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/historical/architecture.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/historical/plans/2026-02-23-rdr-workflow-skills-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/historical/plans/2026-02-23-rdr-workflow-skills-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/historical/plans/2026-02-24-nx-plugin-v0.4.0.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/historical/plans/2026-02-24-smart-repo-indexing-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/historical/plans/2026-02-24-smart-repo-indexing-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/historical/spec.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/memory-and-tasks.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-02-28-rdr-004-four-store-cloud-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-02-28-rdr-004-four-store-cloud-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-01-dry-run-pdf-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-01-dry-run-pdf-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-01-pdfplumber-tier-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-01-rc10-1.0.0-readiness-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-01-rc10-critique-findings.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-02-classifier-skip-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-03-chunk-byte-cap-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-03-chunk-byte-cap-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-03-force-reindex-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-03-rdr017-phase2-cli-monitor-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-03-rdr017-phase2-cli-monitor-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-03-rdr018-git-hooks-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-04-doc-ux-polish-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-04-rdr-doc-polish-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-07-rdr-023-agent-tool-permissions-design.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-07-rdr-023-agent-tool-permissions-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-08-rdr-025-language-agnostic-agents-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-09-rdr-027-search-ux-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-09-rdr-028-language-registry-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-09-rdr-029-pipeline-versioning-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-09-rdr-030-reliability-hardening-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-11-rdr-034-mcp-server-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-21-rdr039-phase2-hooks-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/plans/2026-03-23-rdr-040-impl-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/postmortem/2026-03-23-pdf-index-collection-mismatch.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/postmortem/2026-03-24-pdf-index-fix-not-applied.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/001-rdr-process-validation.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/002-t2-status-synchronization.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/010-t1-http-server.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/011-pdf-ingest-test-coverage.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/012-pdfplumber-extraction-tier.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/014-knowledge-base-retrieval-quality.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/015-indexing-pipeline-rethink.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/016-ast-chunk-line-range-bug.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/017-indexing-progress-reporting.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/018-replace-serve-with-git-hooks.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/023-agent-tool-permissions-audit.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/024-rdr-process-guardrails.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/028-language-registry-unification.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/029-pipeline-versioning.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/post-mortem/cce-query-model-mismatch.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-001-rdr-process-validation.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-002-t2-status-synchronization.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-004-four-store-architecture.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-005-chromadb-cloud-quota-enforcement.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-006-chunk-size-configuration.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-007-claude-adoption-session-context-and-search-guidance.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-008-nx-workflow-integration.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-009-remove-agentic-and-answer-flags.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-010-t1-scratch-persistent-bounded-store.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-011-pdf-ingest-test-coverage.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-012-pdfplumber-extraction-tier.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-013-remove-nx-pm-layer.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-014-knowledge-base-retrieval-quality.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-015-indexing-pipeline-rethink.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-016-ast-chunk-line-range-bug.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-017-indexing-progress-reporting.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-018-replace-serve-with-git-hooks.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-019-chromadb-transient-retry.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-020-voyage-chromadb-read-timeout.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-021-docling-pdf-extraction.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-022-memory-delete-command.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-023-agent-tool-permissions-audit.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-024-rdr-process-guardrails.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-025-language-agnostic-agents.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-026-hybrid-search-fusion.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-027-search-results-ux.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-028-code-search-recall.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-029-pipeline-versioning.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-030-reliability-hardening.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-031-collection-portability.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-032-indexer-decomposition.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-033-pdf-agent-nx-index-alignment.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-034-mcp-server-agent-storage.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-035-plugin-agent-mcp-tool-access.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-036-post-accept-planning-workflow.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-037-t3-database-consolidation.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-038-local-t3-backend.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-039-claude-code-framework-alignment.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr/rdr-040-cce-postmortem-gaps-mcp-enhancement.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr-nexus-integration.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr-overview.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr-templates.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/rdr-workflow.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/repo-indexing.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/docs/storage-tiers.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/.mcp.json +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/README.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/_shared/ERROR_HANDLING.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/_shared/MAINTENANCE.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/_shared/README.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/_shared/RELAY_TEMPLATE.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/architect-planner.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/codebase-deep-analyzer.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/deep-analyst.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/deep-research-synthesizer.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/knowledge-tidier.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/orchestrator.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/pdf-chromadb-processor.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/plan-auditor.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/plan-enricher.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/strategic-planner.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/substantive-critic.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/agents/test-validator.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/analyze-code.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/architecture.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/create-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/debug.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/deep-analysis.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/enrich-plan.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/implement.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/knowledge-tidy.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/nx-preflight.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/pdf-process.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/plan-audit.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/rdr-accept.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/rdr-close.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/rdr-create.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/rdr-gate.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/rdr-list.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/rdr-research.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/rdr-show.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/research.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/review-code.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/substantive-critique.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/commands/test-validate.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/hooks/hooks.json +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/hooks/scripts/post_compact_hook.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/hooks/scripts/rdr_hook.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/hooks/scripts/session_start_hook.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/hooks/scripts/stop_failure_hook.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/hooks/scripts/subagent-start.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/hooks/scripts/t2_prefix_scan.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/registry.yaml +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/resources/rdr/README-TEMPLATE.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/resources/rdr/TEMPLATE.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/resources/rdr/post-mortem/TEMPLATE.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/architecture/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/brainstorming-gate/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/cli-controller/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/code-review/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/codebase-analysis/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/debugging/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/deep-analysis/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/enrich-plan/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/knowledge-tidying/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/nexus/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/nexus/reference.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/pdf-processing/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/plan-validation/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/rdr-accept/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/rdr-close/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/rdr-create/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/rdr-gate/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/rdr-list/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/rdr-research/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/rdr-show/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/research-synthesis/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/serena-code-nav/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/strategic-planning/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/substantive-critique/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/test-validation/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/using-nx-skills/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/nx/skills/writing-nx-skills/SKILL.md +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/__init__.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/chunker.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/classifier.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/cli.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/code_indexer.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/__init__.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/_helpers.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/_provision.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/collection.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/config_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/doctor.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/hook.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/hooks.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/index.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/memory.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/scratch.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/search_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/commands/store.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/config.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/corpus.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/db/__init__.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/db/chroma_quotas.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/db/local_ef.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/db/t1.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/db/t2.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/db/t3.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/doc_indexer.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/errors.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/exporter.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/formatters.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/frecency.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/hooks.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/index_context.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/indexer.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/indexer_utils.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/languages.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/mcp_server.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/md_chunker.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/pdf_chunker.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/pdf_extractor.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/prose_indexer.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/registry.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/retry.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/ripgrep_cache.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/scoring.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/search_engine.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/session.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/ttl.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/src/nexus/types.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/__init__.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/__snapshots__/test_search_snapshot.ambr +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/conftest.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/e2e/auth-login.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/e2e/lib.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/e2e/run.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/e2e/sandbox.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/e2e/scenarios/00_debug_load.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/e2e/scenarios/01_smoke.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/e2e/scenarios/02_sequential_thinking.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/e2e/scenarios/03_skills.sh +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/hooks/__init__.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/hooks/test_post_compact_hook.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/hooks/test_stop_failure_hook.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_ast_languages.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_chroma_quotas.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_chroma_retry.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_chunker.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_chunker_ast_languages.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_classifier.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_collection_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_config.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_config_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_corpus.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_doc_indexer.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_doc_indexer_hash_sync.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_doc_indexer_pagination.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_doctor_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_doctor_integrity.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_e2e.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_exporter.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_formatters.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_frecency.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_git_hooks.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_hooks.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_hybrid_boost.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_index_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_index_lock.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_index_rdr_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_index_reminder.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_indexer.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_indexer_chunk_flow.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_indexer_e2e.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_indexer_modules.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_integration.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_languages.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_local_mode.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_mcp_concurrency.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_mcp_integration.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_mcp_server.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_mcp_session.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_md_chunker.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_md_chunker_semantic_integrity.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_md_preservation.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_memory.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_minified_chunking.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_p0_regressions.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_pdf_chunker.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_pdf_chunker_integration.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_pdf_e2e.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_pdf_extractor.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_pdf_extractor_integration.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_pdf_extractor_normalization.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_pdf_normalization.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_pdf_subsystem.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_pipeline_version.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_plugin.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_plugin_install.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_plugin_structure.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_ppid_chain_hypothesis.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_provision.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_registry.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_ripgrep_cache.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_schema.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_scoring.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_scratch.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_scratch_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_search_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_search_engine.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_search_modules.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_search_snapshot.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_session.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_session_propagation_hypotheses.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_silent_error_logging.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_store_cmd.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_t1.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_t2.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_t2_prefix_scan.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_t3.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_t3_quota_enforcement.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_ttl.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_tuning_config.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_types_and_errors.py +0 -0
- {conexus-2.4.2 → conexus-2.6.0}/tests/test_voyage_retry.py +0 -0
|
@@ -6,6 +6,36 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [2.6.0] - 2026-03-26
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **T1 scratch inter-agent context sharing** (RDR-041) — standardized scratch
|
|
13
|
+
tag vocabulary (`impl`, `checkpoint`, `failed-approach`, `hypothesis`,
|
|
14
|
+
`discovery`, `decision`), sibling context SHOULD for relay-reliant agents
|
|
15
|
+
with relay-over-scratch precedence rule, developer writes failed approaches
|
|
16
|
+
to scratch, code reviewer checks scratch for developer struggles before
|
|
17
|
+
reviewing, debugger checks scratch for predecessor findings.
|
|
18
|
+
- **Debugger escalation relay** includes `nx scratch` field for pre-escalation
|
|
19
|
+
failed-approach entries.
|
|
20
|
+
- **Re-dispatch developer relay template** with structured nx store/memory
|
|
21
|
+
artifact references from debugger output.
|
|
22
|
+
- **Escalation guard** — if developer circuit breaker fires twice for the same
|
|
23
|
+
bead, escalate to human instead of infinite developer→debugger loop.
|
|
24
|
+
|
|
25
|
+
## [2.5.0] - 2026-03-25
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
- **Developer agent circuit breaker** (RDR-040) — after 2 consecutive test
|
|
29
|
+
failures, the developer agent stops and outputs a structured ESCALATION
|
|
30
|
+
report. The parent dispatches the debugger with the failure context. Counter
|
|
31
|
+
tracks test runs (not root causes), resets on green or new invocation.
|
|
32
|
+
Supersedes the advisory "Recommend debugger" escalation trigger.
|
|
33
|
+
- **Debugger escalation relay template** in development skill — parent-side
|
|
34
|
+
dispatch instructions with field mapping from escalation report to debugger
|
|
35
|
+
relay.
|
|
36
|
+
- **Developer → debugger routing** in orchestration skill — escalation edge
|
|
37
|
+
in routing diagram and quick reference table.
|
|
38
|
+
|
|
9
39
|
## [2.4.2] - 2026-03-25
|
|
10
40
|
|
|
11
41
|
### Docs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: conexus
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.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,8 @@ 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 |
|
|
65
|
+
| [RDR-041](rdr-041-t1-scratch-inter-agent-context.md) | T1 Scratch Inter-Agent Context Sharing | Architecture | Closed | 2026-03-26 |
|
|
64
66
|
|
|
65
67
|
---
|
|
66
68
|
|
|
@@ -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
|