conexus 4.1.2__tar.gz → 4.2.2__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-4.1.2 → conexus-4.2.2}/.claude-plugin/marketplace.json +2 -2
- {conexus-4.1.2 → conexus-4.2.2}/.github/workflows/ci.yml +1 -1
- {conexus-4.1.2 → conexus-4.2.2}/CHANGELOG.md +63 -0
- {conexus-4.1.2 → conexus-4.2.2}/CLAUDE.md +29 -5
- {conexus-4.1.2 → conexus-4.2.2}/PKG-INFO +4 -3
- {conexus-4.1.2 → conexus-4.2.2}/README.md +3 -2
- {conexus-4.1.2 → conexus-4.2.2}/docs/architecture.md +19 -8
- {conexus-4.1.2 → conexus-4.2.2}/docs/cli-reference.md +34 -1
- {conexus-4.1.2 → conexus-4.2.2}/docs/contributing.md +1 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/README.md +2 -0
- conexus-4.2.2/docs/rdr/rdr-075-cross-collection-topic-projection.md +315 -0
- conexus-4.2.2/docs/rdr/rdr-076-idempotent-upgrade-mechanism.md +365 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/.claude-plugin/plugin.json +1 -1
- {conexus-4.1.2 → conexus-4.2.2}/nx/CHANGELOG.md +20 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/rdr-close.md +15 -11
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/hooks.json +5 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/rdr-close/SKILL.md +1 -1
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/rdr-create/SKILL.md +1 -1
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/rdr-gate/SKILL.md +6 -4
- {conexus-4.1.2 → conexus-4.2.2}/pyproject.toml +1 -1
- {conexus-4.1.2 → conexus-4.2.2}/sn/.claude-plugin/plugin.json +1 -1
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/cli.py +2 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/code_indexer.py +8 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/doctor.py +93 -1
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/index.py +61 -2
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/taxonomy_cmd.py +244 -15
- conexus-4.2.2/src/nexus/commands/upgrade.py +159 -0
- conexus-4.2.2/src/nexus/db/migrations.py +572 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/t2/__init__.py +31 -7
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/t2/catalog_taxonomy.py +528 -76
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/t2/memory_store.py +8 -42
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/t2/plan_library.py +8 -47
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/doc_indexer.py +30 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/health.py +59 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/indexer.py +19 -15
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/indexer_utils.py +64 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/mcp/catalog.py +2 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/mcp/core.py +2 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/mcp_infra.py +114 -1
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/pipeline_stages.py +10 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/prose_indexer.py +8 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/registry.py +36 -0
- conexus-4.2.2/tests/test_indexer_utils_repo.py +168 -0
- conexus-4.2.2/tests/test_migrations.py +883 -0
- conexus-4.2.2/tests/test_phase5_integration.py +183 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_post_store_hook.py +33 -9
- conexus-4.2.2/tests/test_rdr_close_gate.py +448 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_taxonomy.py +466 -27
- conexus-4.2.2/tests/test_upgrade_cmd.py +185 -0
- conexus-4.2.2/tests/test_upgrade_e2e.py +274 -0
- {conexus-4.1.2 → conexus-4.2.2}/uv.lock +9 -1
- {conexus-4.1.2 → conexus-4.2.2}/.beads/.gitignore +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/README.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/config.yaml +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/hooks/post-checkout +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/hooks/post-merge +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/hooks/pre-commit +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/hooks/pre-push +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/hooks/prepare-commit-msg +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/interactions.jsonl +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/issues.jsonl +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.beads/metadata.json +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.claude/skills/release.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.devcontainer/Dockerfile +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.devcontainer/devcontainer.json +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.dockerignore +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.env.example +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.gitattributes +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.github/workflows/release.yml +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.gitignore +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.markdownlint.json +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/.plans/rdr-066-plan.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/AGENTS.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/Formula/nx.rb +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/LICENSE +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/README.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/catalog.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/configuration.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/getting-started.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/historical.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/logging.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/mcp-servers.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/memory-and-tasks.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/postmortem/2026-03-23-pdf-index-collection-mismatch.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/postmortem/2026-03-24-pdf-index-fix-not-applied.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/querying-guide.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/001-rdr-process-validation.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/002-t2-status-synchronization.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/010-t1-http-server.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/011-pdf-ingest-test-coverage.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/012-pdfplumber-extraction-tier.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/014-knowledge-base-retrieval-quality.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/015-indexing-pipeline-rethink.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/016-ast-chunk-line-range-bug.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/017-indexing-progress-reporting.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/018-replace-serve-with-git-hooks.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/023-agent-tool-permissions-audit.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/024-rdr-process-guardrails.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/028-language-registry-unification.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/029-pipeline-versioning.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/048-streaming-pdf-pipeline.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/049-git-backed-catalog.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/050-catalog-query-integration.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/051-link-lifecycle.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/052-catalog-first-query-routing.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/053-xanadu-fidelity.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/058-pipeline-orchestration-plan-reuse.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/060-catalog-path-rationalization-link-usability.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/063-t2-domain-split.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/065-close-time-funnel-hardening.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/067-cross-project-rdr-audit-loop.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/post-mortem/cce-query-model-mismatch.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-001-rdr-process-validation.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-002-t2-status-synchronization.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-004-four-store-architecture.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-005-chromadb-cloud-quota-enforcement.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-006-chunk-size-configuration.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-007-claude-adoption-session-context-and-search-guidance.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-008-nx-workflow-integration.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-009-remove-agentic-and-answer-flags.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-010-t1-scratch-persistent-bounded-store.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-011-pdf-ingest-test-coverage.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-012-pdfplumber-extraction-tier.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-013-remove-nx-pm-layer.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-014-knowledge-base-retrieval-quality.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-015-indexing-pipeline-rethink.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-016-ast-chunk-line-range-bug.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-017-indexing-progress-reporting.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-018-replace-serve-with-git-hooks.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-019-chromadb-transient-retry.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-020-voyage-chromadb-read-timeout.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-021-docling-pdf-extraction.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-022-memory-delete-command.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-023-agent-tool-permissions-audit.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-024-rdr-process-guardrails.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-025-language-agnostic-agents.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-026-hybrid-search-fusion.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-027-search-results-ux.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-028-code-search-recall.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-029-pipeline-versioning.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-030-reliability-hardening.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-031-collection-portability.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-032-indexer-decomposition.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-033-pdf-agent-nx-index-alignment.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-034-mcp-server-agent-storage.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-035-plugin-agent-mcp-tool-access.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-036-post-accept-planning-workflow.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-037-t3-database-consolidation.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-038-local-t3-backend.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-039-claude-code-framework-alignment.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-040-cce-postmortem-gaps-mcp-enhancement.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-040-developer-agent-circuit-breaker.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-041-t1-scratch-inter-agent-context.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-042-agenticscholar-enhancements.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-043-plan-enricher-scope.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-044-math-aware-pdf-extraction.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-045-post-implementation-verification.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-046-mineru-server-backed-extraction.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-047-large-pdf-extraction-resilience.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-048-streaming-pdf-pipeline.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-049-consolidation-plan.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-049-git-backed-catalog.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-050-knowledge-graph-query-planning.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-051-link-lifecycle.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-052-catalog-first-query-routing.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-053-xanadu-fidelity.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-054-chunk-boundary-equation-splitting.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-055-section-type-metadata-quality-scoring.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-056-search-robustness-result-clustering.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-057-progressive-formalization-memory-tiers.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-058-pipeline-orchestration-plan-reuse.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-059-code-search-embedding-mismatch.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-060-catalog-path-rationalization-link-usability.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-061-literature-grounded-search-knowledge-enhancement.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-062-mcp-interface-tiering.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-063-t2-domain-split.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-064-nx-console-embedded-web-ui.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-065-close-time-funnel-hardening.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-066-composition-smoke-probe-at-coordinator-beads.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-067-cross-project-rdr-audit-loop.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-068-dimensional-contracts-at-enrichment.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-069-automatic-substantive-critic-at-close.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-070-incremental-taxonomy-clustered-search.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-071-query-sanitizer-permanence-mode.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-072-progressive-context-loading.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-073-temporal-entity-knowledge-graph.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr/rdr-074-permanence-mode.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr-nexus-integration.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr-overview.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr-templates.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/rdr-workflow.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/repo-indexing.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/storage-tiers.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/taxonomy.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/docs/xanadu-in-nexus.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/.mcp.json +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/README.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/_shared/CONTEXT_PROTOCOL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/_shared/ERROR_HANDLING.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/_shared/MAINTENANCE.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/_shared/README.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/_shared/RELAY_TEMPLATE.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/analytical-operator.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/architect-planner.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/code-review-expert.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/codebase-deep-analyzer.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/debugger.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/deep-analyst.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/deep-research-synthesizer.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/developer.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/knowledge-tidier.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/pdf-chromadb-processor.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/plan-auditor.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/plan-enricher.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/query-planner.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/strategic-planner.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/substantive-critic.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/agents/test-validator.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/analyze-code.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/architecture.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/create-plan.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/debug.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/deep-analysis.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/enrich-plan.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/implement.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/knowledge-tidy.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/nx-preflight.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/pdf-process.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/plan-audit.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/rdr-accept.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/rdr-audit.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/rdr-create.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/rdr-gate.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/rdr-list.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/rdr-research.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/rdr-show.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/research.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/review-code.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/substantive-critique.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/commands/test-validate.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/auto-approve-nx-mcp.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/divergence-language-guard.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/post_compact_hook.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/pre_close_verification_hook.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/rdr_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/read_verification_config.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/session_start_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/stop_failure_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/stop_verification_hook.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/subagent-start.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/hooks/scripts/t2_prefix_scan.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/registry.yaml +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/resources/rdr/README-TEMPLATE.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/resources/rdr/TEMPLATE.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/resources/rdr/post-mortem/TEMPLATE.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/resources/rdr_process/INCIDENT-TEMPLATE.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/architecture/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/brainstorming-gate/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/catalog/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/cli-controller/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/code-review/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/codebase-analysis/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/composition-probe/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/debugging/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/deep-analysis/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/development/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/enrich-plan/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/finishing-branch/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/git-worktrees/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/knowledge-tidying/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/nexus/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/nexus/reference.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/orchestration/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/orchestration/reference.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/pdf-processing/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/plan-validation/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/query/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/rdr-accept/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/rdr-audit/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/rdr-list/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/rdr-research/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/rdr-show/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/receiving-review/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/research-synthesis/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/serena-code-nav/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/strategic-planning/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/substantive-critique/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/test-validation/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/using-nx-skills/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/nx/skills/writing-nx-skills/SKILL.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/scripts/batch-label-taxonomy.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/scripts/cron/README.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/scripts/cron/rdr-audit.crontab +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/scripts/cron-rdr-audit.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/scripts/launchd/README.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/scripts/launchd/com.nexus.rdr-audit.PROJECT.plist +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/scripts/reinstall-tool.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/scripts/smoke-test-taxonomy.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/sn/.mcp.json +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/sn/README.md +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/sn/hooks/hooks.json +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/sn/hooks/scripts/auto-approve-sn-mcp.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/sn/hooks/scripts/mcp-inject.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/sn/hooks/scripts/session-start.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/bib_enricher.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/catalog/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/catalog/auto_linker.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/catalog/catalog.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/catalog/catalog_db.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/catalog/consolidation.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/catalog/link_generator.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/catalog/tumbler.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/checkpoint.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/chunker.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/classifier.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/_helpers.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/_provision.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/catalog.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/collection.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/config_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/console.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/context_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/enrich.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/hooks.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/memory.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/mineru.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/scratch.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/search_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/commands/store.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/config.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/app.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/config.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/routes/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/routes/activity.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/routes/campaigns.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/routes/health.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/routes/partials.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/static/alpine.min.js +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/static/console.css +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/static/htmx.min.js +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/static/pico.min.css +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/templates/activity/_detail.html +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/templates/activity/_stream.html +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/templates/activity/index.html +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/templates/base.html +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/templates/campaigns/detail.html +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/templates/campaigns/index.html +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/templates/health/_cards.html +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/templates/health/index.html +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/console/watchers.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/context.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/corpus.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/chroma_quotas.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/local_ef.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/t1.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/t2/telemetry.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/db/t3.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/errors.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/exporter.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/filters.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/formatters.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/frecency.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/hooks.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/index_context.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/languages.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/logging_setup.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/mcp/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/mcp_server.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/md_chunker.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/pdf_chunker.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/pdf_extractor.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/pipeline_buffer.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/retry.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/ripgrep_cache.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/scoring.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/search_clusterer.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/search_engine.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/session.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/taxonomy.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/ttl.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/src/nexus/types.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/__snapshots__/test_search_cmd.ambr +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/benchmarks/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/benchmarks/corpus.json +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/benchmarks/queries.json +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/benchmarks/test_retrieval_ndcg.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/conftest.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/e2e/auth-login.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/e2e/lib.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/e2e/run.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/e2e/sandbox.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/e2e/scenarios/00_debug_load.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/e2e/scenarios/01_smoke.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/e2e/scenarios/02_sequential_thinking.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/e2e/scenarios/03_skills.sh +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/hooks/__init__.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/hooks/test_permission_request_hooks.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/hooks/test_post_compact_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/hooks/test_pre_close_verification_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/hooks/test_read_verification_config.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/hooks/test_stop_failure_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/hooks/test_stop_verification_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/hooks/test_verification_integration.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_activity_stream.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_ast_languages.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_auto_linker.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_backfill_hash.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_bib_enricher.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_campaigns_panel.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_backfill.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_cli.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_consolidation.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_db.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_e2e.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_git.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_indexer_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_jsonl.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_knowledge_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_link_generation.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_links.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_mcp.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_path.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_pdf_hook.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_catalog_prefilter.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_checkpoint.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_chroma_quotas.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_chroma_retry.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_chunker.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_chunker_ast_languages.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_classifier.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_cli_registration.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_collection_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_config.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_config_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_console_app.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_console_deps.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_context.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_contradiction_flag.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_corpus.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_distance_thresholds.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_doc_indexer.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_doc_indexer_hash_sync.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_doc_indexer_pagination.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_doctor_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_doctor_integrity.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_e2e.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_enrich_command.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_exporter.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_formatters.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_frecency.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_git_hooks.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_health.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_health_panel.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_hooks.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_hybrid_boost.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_index_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_index_lock.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_index_pdf_batch.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_index_rdr_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_index_reminder.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_index_taxonomy.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_indexer.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_indexer_chunk_flow.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_indexer_e2e.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_indexer_modules.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_integration.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_jsonl.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_languages.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_link_generator.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_local_mode.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_logging_setup.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_mcp_concurrency.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_mcp_package.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_mcp_server.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_md_chunker.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_md_chunker_semantic_integrity.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_md_preservation.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_memory.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_memory_consolidation.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_mineru_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_mineru_extractor.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_minified_chunking.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_overfetch_pipeline.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_p0_regressions.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pdf_chunker.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pdf_chunker_integration.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pdf_e2e.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pdf_extractor.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pdf_extractor_integration.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pdf_extractor_normalization.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pdf_extractor_server.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pdf_subsystem.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pipeline_buffer.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pipeline_stages.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_pipeline_version.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_plan_library.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_plugin.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_plugin_install.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_plugin_structure.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_ppid_chain_hypothesis.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_provision.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_quality_score.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_query_sanitizer.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_rdr052_verification.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_rdr053_verification.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_rdr_audit_incident_template.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_rdr_audit_scheduling.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_rdr_audit_skill.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_registry.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_relevance_log.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_ripgrep_cache.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_schema.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_scoring.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_scratch.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_scratch_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_search_clusterer.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_search_clustering_integration.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_search_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_search_engine.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_session.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_session_propagation_hypotheses.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_silent_error_logging.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_sn_plugin.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_store_cmd.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_structlog_events.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_t1.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_t2.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_t2_concurrency.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_t2_prefix_scan.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_t3.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_t3_hnsw_ef.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_t3_quota_enforcement.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_table_extraction.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_taxonomy_e2e.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_ttl.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_tumbler.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_tuning_config.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_verify_multiprobe.py +0 -0
- {conexus-4.1.2 → conexus-4.2.2}/tests/test_voyage_retry.py +0 -0
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
"name": "nx",
|
|
10
10
|
"source": "./nx",
|
|
11
11
|
"description": "Self-hosted three-tier knowledge management with 16 specialized agents, analytical query pipelines, semantic search, and RDR decision tracking for Claude Code.",
|
|
12
|
-
"version": "4.
|
|
12
|
+
"version": "4.2.2"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"name": "sn",
|
|
16
16
|
"source": "./sn",
|
|
17
17
|
"description": "Injects Serena and Context7 MCP tool usage guidance into subagents via SubagentStart hook.",
|
|
18
|
-
"version": "4.
|
|
18
|
+
"version": "4.2.2"
|
|
19
19
|
}
|
|
20
20
|
]
|
|
21
21
|
}
|
|
@@ -6,6 +6,69 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [4.2.2] - 2026-04-14
|
|
10
|
+
|
|
11
|
+
(Note: v4.2.1 was tagged but never published due to a test failure. v4.2.2 supersedes it and includes all 4.2.1 changes plus the ChromaDB Cloud quota audit and observability improvements found during a live shakeout.)
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`nx doctor` PyPI version check**: `_check_cli_version` queries https://pypi.org/pypi/conexus/json (3-second timeout) and reports current vs latest. When behind, suggests `uv tool upgrade conexus`. Network failures are silent (offline-tolerant).
|
|
16
|
+
- **`nx upgrade --skip-t3` flag**: skip T3 upgrade steps (e.g., heavy cross-collection projection backfill) for fast T2-only migrations.
|
|
17
|
+
- **`backfill_projection` per-collection progress**: prints `[i/N] collection: chunks, matches, attempted (elapsed)` to stderr during the T3 backfill, plus a final summary with total time and actual rows stored. Previously the backfill was silent for many minutes on large repos.
|
|
18
|
+
- **`CatalogTaxonomy._paginated_get`** + **`_batched_upsert`** helpers: wrap ChromaDB calls with the 300-record per-call cap (`MAX_QUERY_RESULTS` / `MAX_RECORDS_PER_WRITE`).
|
|
19
|
+
- **CLAUDE.md "External Service Limits" section**: documents ChromaDB Cloud + Voyage AI quotas with a reference table. Mandatory consult before any new ChromaDB call.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- **`project_against` paginated `coll.get()`**: `_PAGE = 2000` exceeded the ChromaDB Cloud Get quota of 300, causing `nx taxonomy project` to fail on real cloud collections. Now `_PAGE = 300` with paginated source-collection fetch via `_paginated_get`.
|
|
24
|
+
- **4 unbounded `coll.get()` calls** in `catalog_taxonomy.py` (`_discover_cross_links`, `project_against` centroid filter, `rebuild_taxonomy` rebuild + cleanup paths) wrapped in `_paginated_get` to avoid OOM and quota errors at scale.
|
|
25
|
+
- **3 `centroid_coll.upsert()` sites** wrapped in `_batched_upsert` (defensive against `MAX_RECORDS_PER_WRITE = 300`).
|
|
26
|
+
- **`rebuild_taxonomy` cleanup**: paginated GET + batched DELETE so collections with >300 centroids don't fail rebuild.
|
|
27
|
+
- **`nx taxonomy links` invisible cross-collection links**: command queried `compute_topic_links` (catalog-derived only) and ignored the `topic_links` table. Cross-collection projection links written by `_discover_cross_links` and `generate_cooccurrence_links` were invisible. Now displays all rows in `topic_links` with `[collection]` prefix on each topic. New `--refresh` flag re-runs catalog-derived computation explicitly.
|
|
28
|
+
- **`backfill_projection` misleading count**: reported "X assignments" using the per-call attempt count, but `INSERT OR IGNORE` deduplicates. Now reports "X stored (Y attempted)" using `COUNT(*) FROM topic_assignments WHERE assigned_by = 'projection'`.
|
|
29
|
+
- **Plugin/CLI version mismatch UX**: when the nx plugin is upgraded but the conexus CLI is not, the `nx upgrade --auto` SessionStart hook would print a cryptic Click error. Now prints a helpful message: `nx plugin requires conexus >= 4.2.0 — run: uv tool upgrade conexus`.
|
|
30
|
+
|
|
31
|
+
## [4.2.0] - 2026-04-14
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- **Idempotent upgrade mechanism** (RDR-076): centralised T2 schema migration registry in `src/nexus/db/migrations.py` with version-gated `Migration(introduced, name, fn)` entries. `apply_pending(conn, current_version)` runs migrations between last-seen version (stored in `_nexus_version` table) and current CLI version. Each migration is idempotent via `PRAGMA table_info()` / `sqlite_master` guards.
|
|
36
|
+
- **`nx upgrade` CLI command** with `--dry-run`, `--force`, `--auto` flags for applying pending T2 migrations and T3 upgrade steps.
|
|
37
|
+
- **Auto-upgrade on SessionStart**: `nx upgrade --auto` runs as the first SessionStart hook — T2 migrations apply silently on every session start.
|
|
38
|
+
- **`T3UpgradeStep` typed interface** for ChromaDB operations (backfills, re-indexing) that require a `T3Database` client.
|
|
39
|
+
- **`nx doctor --check-schema`** validates T2 database schema and reports pending migrations.
|
|
40
|
+
- **MCP version compatibility check**: synchronous check in MCP `main()` that warns on major/minor version divergence between CLI and stored version.
|
|
41
|
+
- **Cross-collection topic projection** (RDR-075): `nx taxonomy project SOURCE` command computes cosine similarity between source chunk embeddings and target collection centroids via normalized matrix multiply. Flags: `--against TARGETS`, `--threshold N` (default 0.85), `--top-k N`, `--persist`, `--backfill`.
|
|
42
|
+
- **Automatic cross-collection projection** in `taxonomy_assign_hook`: every `store_put` now projects against foreign collection centroids in addition to same-collection assignment. New rows use `assigned_by='projection'`.
|
|
43
|
+
- **Cross-collection topic links**: `_discover_cross_links` (centroid-level similarity at discover time) and `generate_cooccurrence_links` (SQL self-join on shared doc co-assignments) populate the `topic_links` table with `link_types=["projection"]` or `["cooccurrence"]`.
|
|
44
|
+
- **`list_sibling_collections()`** in `registry.py` auto-detects related collections from the `{prefix}{name}-{hash8}` naming scheme. Used as the default `--against` target for `nx taxonomy project`.
|
|
45
|
+
- **T3 projection backfill**: `T3UpgradeStep("4.2.0", "Backfill cross-collection projection", ...)` runs via `nx upgrade` (not `--auto`) to populate cross-collection assignments and links for existing installs.
|
|
46
|
+
- **`cross_collection` parameter** on `assign_single` and `assign_batch` — when True, queries only foreign centroids (`$ne collection_name` filter) for cross-collection projection.
|
|
47
|
+
- **Incremental taxonomy assignment during indexing** (RDR-070): `taxonomy_assign_batch` wired into `code_indexer`, `prose_indexer`, `pipeline_stages` uploader, and `doc_indexer`. Chunks assigned to nearest topics immediately after upsert.
|
|
48
|
+
- **`indexer_utils`** gitignore/repo-root helpers: `find_repo_root()`, `should_ignore()`, `load_ignore_patterns()`, `is_gitignored()`. PDF batch mode now respects `.nexusignore`.
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- RDR close gate heading normalization: `_extract_section` now accepts both `## Problem` and `## Problem Statement` heading variants; gap regex broadened from `^#### Gap \d+:` to `^#{3,5} Gap \d+:` (accepts h3–h5).
|
|
53
|
+
- `doctor --check-schema` uses `PRAGMA busy_timeout=2000` to prevent `database is locked` during concurrent upgrades.
|
|
54
|
+
- `upsert_topic_links` no longer deletes all rows before inserting — preserves projection links from `_discover_cross_links`.
|
|
55
|
+
- `_parse_version` normalizes to 3-component tuples (`(3, 7)` → `(3, 7, 0)`) to avoid unexpected ordering.
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
|
|
59
|
+
- `assign_batch` batches all embeddings into a single ChromaDB query (was N individual queries).
|
|
60
|
+
- `project_against` paginates source collection fetch (2000-chunk pages) to prevent OOM on large collections.
|
|
61
|
+
- `generate_cooccurrence_links` uses a SQL self-join on `topic_assignments` instead of loading the full table into Python memory.
|
|
62
|
+
- Domain store `_migrate_*_if_needed()` methods now delegate to the centralised migration registry.
|
|
63
|
+
|
|
64
|
+
### Docs
|
|
65
|
+
|
|
66
|
+
- Full `nx upgrade` section added to `docs/cli-reference.md`
|
|
67
|
+
- `nx taxonomy project` subcommand documented in `docs/cli-reference.md`
|
|
68
|
+
- Migration Registry section added to `docs/architecture.md` replacing old ad-hoc migration paragraph
|
|
69
|
+
- Source Layout in `CLAUDE.md` updated with `migrations.py`, `upgrade.py`, and updated descriptions
|
|
70
|
+
- Release checklist in `docs/contributing.md` now includes `migrations.py` verification
|
|
71
|
+
|
|
9
72
|
## [4.1.2] - 2026-04-13
|
|
10
73
|
|
|
11
74
|
### Fixed
|
|
@@ -105,12 +105,13 @@ src/nexus/ # Core package
|
|
|
105
105
|
config_cmd.py # nx config
|
|
106
106
|
hooks.py # nx hooks (user-facing hook management)
|
|
107
107
|
hook.py # nx hook (hidden; git hook stanza management)
|
|
108
|
-
doctor.py # nx doctor
|
|
108
|
+
doctor.py # nx doctor (includes --check-schema for T2 validation, RDR-076)
|
|
109
|
+
upgrade.py # nx upgrade (--dry-run, --force, --auto; T2 migrations + T3 upgrade steps, RDR-076)
|
|
109
110
|
enrich.py # nx enrich
|
|
110
111
|
catalog.py # nx catalog
|
|
111
112
|
mineru.py # nx mineru
|
|
112
113
|
console.py # nx console (embedded web UI server)
|
|
113
|
-
taxonomy_cmd.py # nx taxonomy (topic browsing
|
|
114
|
+
taxonomy_cmd.py # nx taxonomy (topic browsing, discovery, cross-collection projection via project subcommand)
|
|
114
115
|
_helpers.py # Shared CLI helpers (default_db_path)
|
|
115
116
|
_provision.py # ChromaDB Cloud provisioning helpers
|
|
116
117
|
catalog/ # Xanadu-inspired document catalog (JSONL truth + SQLite cache)
|
|
@@ -126,6 +127,7 @@ src/nexus/ # Core package
|
|
|
126
127
|
watchers.py # File/event watchers for live UI updates
|
|
127
128
|
routes/ # FastAPI routers (activity, campaigns, health, partials)
|
|
128
129
|
db/ # Storage tier implementations
|
|
130
|
+
migrations.py # Centralised T2 migration registry: Migration dataclass, apply_pending(), T3UpgradeStep, version tracking (RDR-076)
|
|
129
131
|
t1.py # T1 ChromaDB client (ephemeral or HTTP)
|
|
130
132
|
t2/ # T2 SQLite package: MemoryStore, PlanLibrary, CatalogTaxonomy, Telemetry domain stores + T2Database facade
|
|
131
133
|
t3.py # T3 ChromaDB client (persistent local or cloud)
|
|
@@ -138,7 +140,7 @@ src/nexus/ # Core package
|
|
|
138
140
|
code_indexer.py # Code file indexing: AST chunking, context extraction, Voyage AI embedding (extracted from indexer.py, RDR-032)
|
|
139
141
|
prose_indexer.py # Prose file indexing: semantic markdown chunking, CCE embedding (extracted from indexer.py, RDR-032)
|
|
140
142
|
index_context.py # IndexContext dataclass: shared indexing parameters replacing 12-parameter signatures
|
|
141
|
-
indexer_utils.py # Shared indexing utilities: staleness checks, context-prefix building
|
|
143
|
+
indexer_utils.py # Shared indexing utilities: staleness checks, context-prefix building, gitignore/repo-root helpers
|
|
142
144
|
classifier.py # File classification: CODE / PROSE / PDF / SKIP
|
|
143
145
|
chunker.py # Tree-sitter AST chunking (31 languages)
|
|
144
146
|
languages.py # LANGUAGE_REGISTRY: unified extension→language map (single source of truth)
|
|
@@ -160,7 +162,7 @@ src/nexus/ # Core package
|
|
|
160
162
|
ripgrep_cache.py # ripgrep integration for hybrid search
|
|
161
163
|
session.py # Session lifecycle (T1 server start/connect)
|
|
162
164
|
config.py # Config hierarchy + .nexus.yml
|
|
163
|
-
registry.py # Collection → database routing
|
|
165
|
+
registry.py # Collection → database routing + list_sibling_collections() for cross-collection scoping (RDR-075)
|
|
164
166
|
corpus.py # Corpus naming utilities
|
|
165
167
|
formatters.py # Result display formatting
|
|
166
168
|
types.py # Shared type definitions
|
|
@@ -171,12 +173,34 @@ src/nexus/ # Core package
|
|
|
171
173
|
logging_setup.py # Structured logging configuration (cli/console/mcp/hook modes, rotating file handler)
|
|
172
174
|
taxonomy.py # Deprecation shim — imports forwarded to db.t2.catalog_taxonomy (RDR-070)
|
|
173
175
|
mcp_server.py # Backward-compat shim — re-exports all MCP tools from nexus.mcp package
|
|
174
|
-
mcp_infra.py # MCP server infrastructure: singletons, caching, test injection, taxonomy_assign_hook (post-store topic assignment)
|
|
176
|
+
mcp_infra.py # MCP server infrastructure: singletons, caching, test injection, taxonomy_assign_hook (post-store topic assignment + cross-collection projection), check_version_compatibility (RDR-076)
|
|
175
177
|
nx/ # Claude Code plugin (skills, agents, hooks, slash commands)
|
|
176
178
|
tests/ # pytest suite (unit + integration + e2e/)
|
|
177
179
|
docs/ # Documentation (architecture.md is the module map)
|
|
178
180
|
```
|
|
179
181
|
|
|
182
|
+
## External Service Limits — CHECK BEFORE EVERY CALL
|
|
183
|
+
|
|
184
|
+
**ALWAYS** consult `src/nexus/db/chroma_quotas.py` (the `QUOTAS` dataclass and `QuotaValidator`) before writing any ChromaDB call. Violating these at runtime produces `ChromaError: Quota exceeded` — costly to debug, embarrassing in release.
|
|
185
|
+
|
|
186
|
+
**ChromaDB Cloud free-tier caps** (single source of truth: `chroma_quotas.py`):
|
|
187
|
+
|
|
188
|
+
| Operation | Limit | Notes |
|
|
189
|
+
|-----------|-------|-------|
|
|
190
|
+
| `coll.get(limit=N)` | N ≤ 300 | Same cap as queries. `_PAGE = 300` max for pagination |
|
|
191
|
+
| `coll.query(n_results=N)` | N ≤ 300 | `MAX_QUERY_RESULTS` |
|
|
192
|
+
| `coll.upsert/add(ids=[...])` | ≤ 300 records | `MAX_RECORDS_PER_WRITE` |
|
|
193
|
+
| Concurrent reads per coll | ≤ 10 | `MAX_CONCURRENT_READS` |
|
|
194
|
+
| Concurrent writes per coll | ≤ 10 | `MAX_CONCURRENT_WRITES` |
|
|
195
|
+
| Document size | ≤ 16384 bytes | `MAX_DOCUMENT_BYTES` (use `SAFE_CHUNK_BYTES = 12288`) |
|
|
196
|
+
| Query string | ≤ 256 chars | `MAX_QUERY_STRING_CHARS` |
|
|
197
|
+
| `where` predicates | ≤ 8 top-level | `MAX_WHERE_PREDICATES` |
|
|
198
|
+
| Embedding dims | ≤ 4096 | `MAX_EMBEDDING_DIMENSIONS` |
|
|
199
|
+
|
|
200
|
+
**Voyage AI**: `voyage-3` / `voyage-code-3` / `voyage-context-3` = 1024 dims, 32k tokens/request. Batch requests up to 128 inputs. Use `nexus.retry._voyage_with_retry` for transient failure handling.
|
|
201
|
+
|
|
202
|
+
**Rule of thumb**: paginating through a large ChromaDB collection requires `limit ≤ 300` per call. When fetching N documents, use `offset += 300` in a loop. `MAX_RECORDS_PER_WRITE = 300` means upsert batches must also be capped.
|
|
203
|
+
|
|
180
204
|
## Development Conventions
|
|
181
205
|
|
|
182
206
|
- **Python 3.12+**: use `match/case`, `tomllib`, `typing.Protocol`, walrus operator freely
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: conexus
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.2.2
|
|
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
|
|
@@ -183,10 +183,11 @@ The `nx` command provides direct access to all storage tiers, indexing, and sear
|
|
|
183
183
|
| `nx scratch` | Inter-agent session context (in-memory, no API keys) |
|
|
184
184
|
| `nx collection` | Inspect and manage cloud collections |
|
|
185
185
|
| `nx config` | Credentials and settings |
|
|
186
|
-
| `nx
|
|
186
|
+
| `nx upgrade` | Run pending database migrations and T3 upgrade steps |
|
|
187
|
+
| `nx doctor` | Health check — verifies dependencies, credentials, connectivity, schema |
|
|
187
188
|
| `nx hooks` | Install git hooks for automatic re-indexing on commit |
|
|
188
189
|
| `nx catalog` | Document registry — search, link, audit the catalog metadata layer |
|
|
189
|
-
| `nx taxonomy` | Topic taxonomy —
|
|
190
|
+
| `nx taxonomy` | Topic taxonomy — discover, project across collections, review, merge, split |
|
|
190
191
|
| `nx context` | Project context cache — topic map for agent cold-start acceleration |
|
|
191
192
|
| `nx mineru` | MinerU server lifecycle (start/stop/status) for PDF extraction |
|
|
192
193
|
|
|
@@ -135,10 +135,11 @@ The `nx` command provides direct access to all storage tiers, indexing, and sear
|
|
|
135
135
|
| `nx scratch` | Inter-agent session context (in-memory, no API keys) |
|
|
136
136
|
| `nx collection` | Inspect and manage cloud collections |
|
|
137
137
|
| `nx config` | Credentials and settings |
|
|
138
|
-
| `nx
|
|
138
|
+
| `nx upgrade` | Run pending database migrations and T3 upgrade steps |
|
|
139
|
+
| `nx doctor` | Health check — verifies dependencies, credentials, connectivity, schema |
|
|
139
140
|
| `nx hooks` | Install git hooks for automatic re-indexing on commit |
|
|
140
141
|
| `nx catalog` | Document registry — search, link, audit the catalog metadata layer |
|
|
141
|
-
| `nx taxonomy` | Topic taxonomy —
|
|
142
|
+
| `nx taxonomy` | Topic taxonomy — discover, project across collections, review, merge, split |
|
|
142
143
|
| `nx context` | Project context cache — topic map for agent cold-start acceleration |
|
|
143
144
|
| `nx mineru` | MinerU server lifecycle (start/stop/status) for PDF extraction |
|
|
144
145
|
|
|
@@ -242,14 +242,25 @@ Phase 2 consequences:
|
|
|
242
242
|
own `threading.Lock` plus the SQLite file-level write lock -- callers
|
|
243
243
|
never see `OperationalError: database is locked`.
|
|
244
244
|
|
|
245
|
-
**
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
245
|
+
**Migration Registry** (RDR-076): All T2 schema migrations are centralised in
|
|
246
|
+
`src/nexus/db/migrations.py`. The `MIGRATIONS` list contains version-tagged
|
|
247
|
+
`Migration(introduced, name, fn)` entries. `apply_pending(conn, current_version)`
|
|
248
|
+
runs migrations between the last-seen version (stored in `_nexus_version` table)
|
|
249
|
+
and the current CLI version. Each migration function is idempotent via
|
|
250
|
+
`PRAGMA table_info()` or `sqlite_master` guards.
|
|
251
|
+
|
|
252
|
+
`T2Database.__init__()` opens a transient connection, calls `apply_pending()`,
|
|
253
|
+
closes it, then constructs the four domain stores. The `_upgrade_done` set
|
|
254
|
+
(guarded by `_upgrade_lock`) provides a process-level fast path — subsequent
|
|
255
|
+
constructions skip all DB access. Domain stores retain their own
|
|
256
|
+
`_migrated_paths` guards for standalone construction outside `T2Database`.
|
|
257
|
+
|
|
258
|
+
**T3 Upgrade Steps**: `T3UpgradeStep(introduced, name, fn)` entries in the
|
|
259
|
+
`T3_UPGRADES` list handle ChromaDB operations (backfills, re-indexing) that
|
|
260
|
+
require a `T3Database` client. These run via `nx upgrade` (not `--auto` mode).
|
|
261
|
+
|
|
262
|
+
**Auto-upgrade**: `nx upgrade --auto` runs as the first SessionStart hook,
|
|
263
|
+
applying T2 migrations silently. T3 steps are skipped in auto mode.
|
|
253
264
|
|
|
254
265
|
**In-memory SQLite**: Tests that want an ephemeral database should use
|
|
255
266
|
a temp file path, not `":memory:"` -- `:memory:` databases are
|
|
@@ -325,6 +325,9 @@ nx taxonomy merge "source" "target" # merge topics
|
|
|
325
325
|
nx taxonomy split "label" --k 3 # split into sub-topics
|
|
326
326
|
nx taxonomy links # show inter-topic relationships
|
|
327
327
|
nx taxonomy rebuild -c docs__nexus # full rebuild
|
|
328
|
+
nx taxonomy project code__nexus # project against sibling collections
|
|
329
|
+
nx taxonomy project code__nexus --against knowledge__art # explicit targets
|
|
330
|
+
nx taxonomy project --backfill --persist # project all collections
|
|
328
331
|
```
|
|
329
332
|
|
|
330
333
|
| Subcommand | Description |
|
|
@@ -341,6 +344,7 @@ nx taxonomy rebuild -c docs__nexus # full rebuild
|
|
|
341
344
|
| `split LABEL --k N` | Split into N sub-topics via KMeans. `-c NAME` scopes label lookup |
|
|
342
345
|
| `links` | Inter-topic link counts from catalog graph. `-c NAME` filters by collection |
|
|
343
346
|
| `rebuild` | Full re-cluster (alias for `discover --force`). `-c NAME` required |
|
|
347
|
+
| `project SOURCE` | Cross-collection projection: match chunks against other collections' centroids. `--against TARGETS` for explicit targets (default: sibling collections). `--threshold N` (default 0.85). `--persist` to write assignments. `--backfill` to project all collections against each other |
|
|
344
348
|
|
|
345
349
|
**Configuration** (in `.nexus.yml`):
|
|
346
350
|
|
|
@@ -350,7 +354,7 @@ taxonomy:
|
|
|
350
354
|
local_exclude_collections: [] # default: ["code__*"] — MiniLM clusters poorly on code
|
|
351
355
|
```
|
|
352
356
|
|
|
353
|
-
**Upgrade path**: Run `nx taxonomy discover --all`
|
|
357
|
+
**Upgrade path**: Run `nx upgrade` after upgrading to apply pending migrations and T3 upgrade steps (including cross-collection projection backfill). Run `nx taxonomy discover --all` to populate topics for new collections.
|
|
354
358
|
|
|
355
359
|
---
|
|
356
360
|
|
|
@@ -621,6 +625,35 @@ nx doctor --fix-paths --dry-run # Preview migration without applying
|
|
|
621
625
|
|
|
622
626
|
The `--fix` flag retroactively applies HNSW `search_ef` tuning to all existing local-mode collections. New collections get this automatically. In cloud mode (SPANN), prints a skip message — SPANN defaults are adequate.
|
|
623
627
|
|
|
628
|
+
```
|
|
629
|
+
nx doctor --check-schema # Validate T2 database schema and report pending migrations
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
---
|
|
633
|
+
|
|
634
|
+
## nx upgrade
|
|
635
|
+
|
|
636
|
+
Run pending database migrations and T3 upgrade steps.
|
|
637
|
+
|
|
638
|
+
```
|
|
639
|
+
nx upgrade # Apply all pending T2 + T3 migrations
|
|
640
|
+
nx upgrade --dry-run # List pending migrations without executing
|
|
641
|
+
nx upgrade --force # Reset version gate and re-run all migrations
|
|
642
|
+
nx upgrade --auto # Quiet mode for hook invocation (T2 only, exit 0 always)
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
| Flag | Description |
|
|
646
|
+
|------|-------------|
|
|
647
|
+
| `--dry-run` | List pending migrations without executing (creates base tables if absent) |
|
|
648
|
+
| `--force` | Reset version gate to 0.0.0 and re-run all migrations. Per-migration idempotency guards still apply |
|
|
649
|
+
| `--auto` | Quiet mode for SessionStart hook. T2 migrations only (T3 skipped — may exceed hook timeout). Exit 0 always |
|
|
650
|
+
|
|
651
|
+
**How it works**: The CLI version (`importlib.metadata.version("conexus")`) is compared against the last-seen version stored in T2 (`_nexus_version` table). Migrations tagged with versions between last-seen and current are executed. Each migration is idempotent via `PRAGMA table_info()` / `sqlite_master` guards.
|
|
652
|
+
|
|
653
|
+
**Auto-upgrade**: `nx upgrade --auto` runs as the first SessionStart hook in the Claude Code plugin. T2 migrations apply silently on every session start. T3 upgrade steps (e.g., cross-collection projection backfill) run only via explicit `nx upgrade`.
|
|
654
|
+
|
|
655
|
+
**Adding new migrations**: Append a `Migration("x.y.z", "description", fn)` entry to the `MIGRATIONS` list in `src/nexus/db/migrations.py`. For T3 operations, use `T3UpgradeStep`.
|
|
656
|
+
|
|
624
657
|
---
|
|
625
658
|
|
|
626
659
|
## nx console
|
|
@@ -254,6 +254,7 @@ Every step below is **required**. Missing any one of them has caused problems in
|
|
|
254
254
|
| `docs/configuration.md` | new config keys or tuning parameters |
|
|
255
255
|
| `docs/storage-tiers.md` | new storage capabilities |
|
|
256
256
|
| `README.md` | high-level feature descriptions |
|
|
257
|
+
| `src/nexus/db/migrations.py` | verify `PRE_REGISTRY_VERSION` matches previous release; new T2 migrations in `MIGRATIONS` list; new T3 steps in `T3_UPGRADES` |
|
|
257
258
|
|
|
258
259
|
### Pre-push release checklist
|
|
259
260
|
|
|
@@ -96,6 +96,8 @@ An RDR (Research-Design-Review) is a short document that records a technical dec
|
|
|
96
96
|
| [RDR-072](rdr-072-progressive-context-loading.md) | Progressive Context Loading | Feature | Closed | 2026-04-13 |
|
|
97
97
|
| [RDR-073](rdr-073-temporal-entity-knowledge-graph.md) | Temporal Entity Knowledge Graph | Feature | Deferred | 2026-04-13 |
|
|
98
98
|
| [RDR-074](rdr-074-permanence-mode.md) | Permanence Mode | Feature | Deferred | 2026-04-13 |
|
|
99
|
+
| [RDR-075](rdr-075-cross-collection-topic-projection.md) | Cross-Collection Topic Projection | Feature | Closed (implemented) | 2026-04-13 |
|
|
100
|
+
| [RDR-076](rdr-076-idempotent-upgrade-mechanism.md) | Idempotent Upgrade Mechanism | Architecture | Closed (implemented) | 2026-04-13 |
|
|
99
101
|
|
|
100
102
|
---
|
|
101
103
|
|