codevira 2.0.0__tar.gz → 2.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. {codevira-2.0.0 → codevira-2.1.1}/CHANGELOG.md +58 -11
  2. {codevira-2.0.0/codevira.egg-info → codevira-2.1.1}/PKG-INFO +9 -1
  3. {codevira-2.0.0 → codevira-2.1.1/codevira.egg-info}/PKG-INFO +9 -1
  4. {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/SOURCES.txt +5 -1
  5. {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/requires.txt +9 -0
  6. codevira-2.1.1/docs/foolproof-product-charter.md +197 -0
  7. codevira-2.1.1/docs/internal/competitive-landscape.md +239 -0
  8. codevira-2.1.1/docs/release-process.md +335 -0
  9. {codevira-2.0.0 → codevira-2.1.1}/indexer/chunker.py +260 -71
  10. {codevira-2.0.0 → codevira-2.1.1}/indexer/index_codebase.py +661 -101
  11. {codevira-2.0.0 → codevira-2.1.1}/indexer/sqlite_graph.py +375 -152
  12. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/__init__.py +1 -1
  13. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli.py +746 -154
  14. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_configure.py +151 -29
  15. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_projects.py +62 -14
  16. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/crash_logger.py +119 -11
  17. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/detect.py +264 -66
  18. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/ide_inject.py +161 -33
  19. codevira-2.1.1/mcp_server/tools/_decision_embeddings.py +314 -0
  20. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/learning.py +16 -0
  21. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/search.py +60 -2
  22. {codevira-2.0.0 → codevira-2.1.1}/pyproject.toml +13 -1
  23. {codevira-2.0.0 → codevira-2.1.1}/tests/test_chunker.py +141 -17
  24. {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli.py +396 -228
  25. codevira-2.1.1/tests/test_decision_embeddings.py +218 -0
  26. {codevira-2.0.0 → codevira-2.1.1}/tests/test_detect.py +141 -15
  27. {codevira-2.0.0 → codevira-2.1.1}/tests/test_ide_inject.py +369 -119
  28. {codevira-2.0.0 → codevira-2.1.1}/tests/test_index_codebase.py +851 -165
  29. codevira-2.0.0/mcp_server/data/__pycache__/__init__.cpython-313.pyc +0 -0
  30. {codevira-2.0.0 → codevira-2.1.1}/LICENSE +0 -0
  31. {codevira-2.0.0 → codevira-2.1.1}/MANIFEST.in +0 -0
  32. {codevira-2.0.0 → codevira-2.1.1}/README.md +0 -0
  33. {codevira-2.0.0 → codevira-2.1.1}/agents/builder.md +0 -0
  34. {codevira-2.0.0 → codevira-2.1.1}/agents/developer.md +0 -0
  35. {codevira-2.0.0 → codevira-2.1.1}/agents/documenter.md +0 -0
  36. {codevira-2.0.0 → codevira-2.1.1}/agents/orchestrator.md +0 -0
  37. {codevira-2.0.0 → codevira-2.1.1}/agents/planner.md +0 -0
  38. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/01-code-review.md +0 -0
  39. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/02-adversarial-fix-review.md +0 -0
  40. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/03-cross-module-impact.md +0 -0
  41. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/06-doc-drift.md +0 -0
  42. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/07-security-audit.md +0 -0
  43. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/12-llm-redteam.md +0 -0
  44. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/13-multi-ide-schema.md +0 -0
  45. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/22-competitor-benchmark.md +0 -0
  46. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/README.md +0 -0
  47. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/tier2-scripts.md +0 -0
  48. {codevira-2.0.0 → codevira-2.1.1}/agents/qa/tier3-manual.md +0 -0
  49. {codevira-2.0.0 → codevira-2.1.1}/agents/reviewer.md +0 -0
  50. {codevira-2.0.0 → codevira-2.1.1}/agents/tester.md +0 -0
  51. {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/dependency_links.txt +0 -0
  52. {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/entry_points.txt +0 -0
  53. {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/top_level.txt +0 -0
  54. {codevira-2.0.0 → codevira-2.1.1}/config.example.yaml +0 -0
  55. {codevira-2.0.0 → codevira-2.1.1}/docs/alpha-tester-invites.md +0 -0
  56. {codevira-2.0.0 → codevira-2.1.1}/docs/demo/README.md +0 -0
  57. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/00-engine.md +0 -0
  58. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/01-decision-lock.md +0 -0
  59. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/02-anti-regression.md +0 -0
  60. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/03-scope-contract.md +0 -0
  61. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/04-blast-radius.md +0 -0
  62. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/05-cross-session.md +0 -0
  63. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/06-token-budget.md +0 -0
  64. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/07-live-style.md +0 -0
  65. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/08-decision-replay.md +0 -0
  66. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/09-intent-inference.md +0 -0
  67. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/10-ai-promotion.md +0 -0
  68. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/README.md +0 -0
  69. {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/pillar-1-setup.md +0 -0
  70. {codevira-2.0.0 → codevira-2.1.1}/docs/hn-launch-day.md +0 -0
  71. {codevira-2.0.0 → codevira-2.1.1}/docs/how-i-built-persistent-memory-for-ai-agents.md +0 -0
  72. {codevira-2.0.0 → codevira-2.1.1}/docs/linkedin-article-ai-agent-memory.md +0 -0
  73. {codevira-2.0.0 → codevira-2.1.1}/docs/linkedin-post-ai-agent-memory.md +0 -0
  74. {codevira-2.0.0 → codevira-2.1.1}/docs/local-pypi-https.md +0 -0
  75. {codevira-2.0.0 → codevira-2.1.1}/docs/medium-your-ai-coding-agent-has-amnesia.md +0 -0
  76. {codevira-2.0.0 → codevira-2.1.1}/docs/qa-playbook.md +0 -0
  77. {codevira-2.0.0 → codevira-2.1.1}/docs/roadmap.md +0 -0
  78. {codevira-2.0.0 → codevira-2.1.1}/docs/v2-completion-plan.md +0 -0
  79. {codevira-2.0.0 → codevira-2.1.1}/docs/v2-execution-log.md +0 -0
  80. {codevira-2.0.0 → codevira-2.1.1}/docs/v2-master-plan.md +0 -0
  81. {codevira-2.0.0 → codevira-2.1.1}/docs/vs-other-memory-tools.md +0 -0
  82. {codevira-2.0.0 → codevira-2.1.1}/graph/_schema.yaml +0 -0
  83. {codevira-2.0.0 → codevira-2.1.1}/indexer/__init__.py +0 -0
  84. {codevira-2.0.0 → codevira-2.1.1}/indexer/_dedupe_migration.py +0 -0
  85. {codevira-2.0.0 → codevira-2.1.1}/indexer/_fork_safety.py +0 -0
  86. {codevira-2.0.0 → codevira-2.1.1}/indexer/_sqlite_util.py +0 -0
  87. {codevira-2.0.0 → codevira-2.1.1}/indexer/fix_history.py +0 -0
  88. {codevira-2.0.0 → codevira-2.1.1}/indexer/global_db.py +0 -0
  89. {codevira-2.0.0 → codevira-2.1.1}/indexer/graph_generator.py +0 -0
  90. {codevira-2.0.0 → codevira-2.1.1}/indexer/outcome_tracker.py +0 -0
  91. {codevira-2.0.0 → codevira-2.1.1}/indexer/rule_learner.py +0 -0
  92. {codevira-2.0.0 → codevira-2.1.1}/indexer/treesitter_parser.py +0 -0
  93. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/__main__.py +0 -0
  94. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_ghost_check.py +0 -0
  95. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_project_inventory.py +0 -0
  96. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_prompts.py +0 -0
  97. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_repair_init.py +0 -0
  98. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_safe_crash.py +0 -0
  99. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/agents_md.py +0 -0
  100. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/auto_init.py +0 -0
  101. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_agents.py +0 -0
  102. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_budget.py +0 -0
  103. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_hooks_admin.py +0 -0
  104. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_insights.py +0 -0
  105. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_replay.py +0 -0
  106. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/__init__.py +0 -0
  107. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/builder.md +0 -0
  108. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/developer.md +0 -0
  109. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/documenter.md +0 -0
  110. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/orchestrator.md +0 -0
  111. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/planner.md +0 -0
  112. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/reviewer.md +0 -0
  113. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/tester.md +0 -0
  114. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/config.example.yaml +0 -0
  115. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/post_tool_use.sh +0 -0
  116. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/pre_tool_use.sh +0 -0
  117. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/session_start.sh +0 -0
  118. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/stop.sh +0 -0
  119. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/user_prompt_submit.sh +0 -0
  120. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/coding-standards.md +0 -0
  121. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/engineering-excellence.md +0 -0
  122. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/git-cicd-governance.md +0 -0
  123. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/git_commits.md +0 -0
  124. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/incremental-updates.md +0 -0
  125. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/master_rule.md +0 -0
  126. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/multi-language.md +0 -0
  127. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/persistence.md +0 -0
  128. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/resilience-observability.md +0 -0
  129. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/smoke-testing.md +0 -0
  130. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/testing-standards.md +0 -0
  131. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/agents_md.tmpl +0 -0
  132. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/canonical_block.md +0 -0
  133. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/claude_md.tmpl +0 -0
  134. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/copilot_instructions.tmpl +0 -0
  135. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/cursor_rules.mdc.tmpl +0 -0
  136. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/gemini_md.tmpl +0 -0
  137. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/windsurfrules.tmpl +0 -0
  138. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/decision_replay.py +0 -0
  139. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/doctor.py +0 -0
  140. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/__init__.py +0 -0
  141. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/demo_policy.py +0 -0
  142. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/events.py +0 -0
  143. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/intent_classifier.py +0 -0
  144. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/__init__.py +0 -0
  145. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/_signature_detect.py +0 -0
  146. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/ai_promotion.py +0 -0
  147. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/anti_regression.py +0 -0
  148. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/blast_radius.py +0 -0
  149. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/cross_session.py +0 -0
  150. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/decision_lock.py +0 -0
  151. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/intent_inference.py +0 -0
  152. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/live_style.py +0 -0
  153. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/scope_contract.py +0 -0
  154. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/token_budget.py +0 -0
  155. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policy.py +0 -0
  156. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/promotion_score.py +0 -0
  157. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/runner.py +0 -0
  158. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/scope_contract.py +0 -0
  159. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/signals.py +0 -0
  160. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/token_meter.py +0 -0
  161. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/wiring/__init__.py +0 -0
  162. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/wiring/claude_code_hooks.py +0 -0
  163. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/wiring/mcp_dispatch.py +0 -0
  164. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/gitignore.py +0 -0
  165. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/global_sync.py +0 -0
  166. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/http_server.py +0 -0
  167. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/launchd.py +0 -0
  168. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/log_retention.py +0 -0
  169. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/migrate.py +0 -0
  170. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/paths.py +0 -0
  171. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/prompts.py +0 -0
  172. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/roadmap_drift.py +0 -0
  173. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/server.py +0 -0
  174. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/setup_wizard.py +0 -0
  175. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/__init__.py +0 -0
  176. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/changesets.py +0 -0
  177. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/code_reader.py +0 -0
  178. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/graph.py +0 -0
  179. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/playbook.py +0 -0
  180. {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/roadmap.py +0 -0
  181. {codevira-2.0.0 → codevira-2.1.1}/rules/coding-standards.md +0 -0
  182. {codevira-2.0.0 → codevira-2.1.1}/rules/engineering-excellence.md +0 -0
  183. {codevira-2.0.0 → codevira-2.1.1}/rules/git-cicd-governance.md +0 -0
  184. {codevira-2.0.0 → codevira-2.1.1}/rules/git_commits.md +0 -0
  185. {codevira-2.0.0 → codevira-2.1.1}/rules/incremental-updates.md +0 -0
  186. {codevira-2.0.0 → codevira-2.1.1}/rules/master_rule.md +0 -0
  187. {codevira-2.0.0 → codevira-2.1.1}/rules/persistence.md +0 -0
  188. {codevira-2.0.0 → codevira-2.1.1}/rules/resilience-observability.md +0 -0
  189. {codevira-2.0.0 → codevira-2.1.1}/rules/smoke-testing.md +0 -0
  190. {codevira-2.0.0 → codevira-2.1.1}/rules/testing-standards.md +0 -0
  191. {codevira-2.0.0 → codevira-2.1.1}/setup.cfg +0 -0
  192. {codevira-2.0.0 → codevira-2.1.1}/tests/test__prompts.py +0 -0
  193. {codevira-2.0.0 → codevira-2.1.1}/tests/test_auto_init.py +0 -0
  194. {codevira-2.0.0 → codevira-2.1.1}/tests/test_call_edge_fk_safety.py +0 -0
  195. {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_agents.py +0 -0
  196. {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_configure.py +0 -0
  197. {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_insights.py +0 -0
  198. {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_projects.py +0 -0
  199. {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_replay.py +0 -0
  200. {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_version.py +0 -0
  201. {codevira-2.0.0 → codevira-2.1.1}/tests/test_crash_logger.py +0 -0
  202. {codevira-2.0.0 → codevira-2.1.1}/tests/test_dedupe_migration.py +0 -0
  203. {codevira-2.0.0 → codevira-2.1.1}/tests/test_doctor.py +0 -0
  204. {codevira-2.0.0 → codevira-2.1.1}/tests/test_fk_safety_extended.py +0 -0
  205. {codevira-2.0.0 → codevira-2.1.1}/tests/test_fork_safety.py +0 -0
  206. {codevira-2.0.0 → codevira-2.1.1}/tests/test_ghost_check.py +0 -0
  207. {codevira-2.0.0 → codevira-2.1.1}/tests/test_gitignore.py +0 -0
  208. {codevira-2.0.0 → codevira-2.1.1}/tests/test_global_db.py +0 -0
  209. {codevira-2.0.0 → codevira-2.1.1}/tests/test_global_sync.py +0 -0
  210. {codevira-2.0.0 → codevira-2.1.1}/tests/test_graph_generator.py +0 -0
  211. {codevira-2.0.0 → codevira-2.1.1}/tests/test_hook_resilience.py +0 -0
  212. {codevira-2.0.0 → codevira-2.1.1}/tests/test_http_server.py +0 -0
  213. {codevira-2.0.0 → codevira-2.1.1}/tests/test_launchd.py +0 -0
  214. {codevira-2.0.0 → codevira-2.1.1}/tests/test_log_retention.py +0 -0
  215. {codevira-2.0.0 → codevira-2.1.1}/tests/test_migrate.py +0 -0
  216. {codevira-2.0.0 → codevira-2.1.1}/tests/test_outcome_tracker.py +0 -0
  217. {codevira-2.0.0 → codevira-2.1.1}/tests/test_paths.py +0 -0
  218. {codevira-2.0.0 → codevira-2.1.1}/tests/test_prompts.py +0 -0
  219. {codevira-2.0.0 → codevira-2.1.1}/tests/test_record_decision.py +0 -0
  220. {codevira-2.0.0 → codevira-2.1.1}/tests/test_repair_init.py +0 -0
  221. {codevira-2.0.0 → codevira-2.1.1}/tests/test_retire_rule.py +0 -0
  222. {codevira-2.0.0 → codevira-2.1.1}/tests/test_roadmap_drift.py +0 -0
  223. {codevira-2.0.0 → codevira-2.1.1}/tests/test_rule_learner.py +0 -0
  224. {codevira-2.0.0 → codevira-2.1.1}/tests/test_server.py +0 -0
  225. {codevira-2.0.0 → codevira-2.1.1}/tests/test_setup_wizard.py +0 -0
  226. {codevira-2.0.0 → codevira-2.1.1}/tests/test_sqlite_graph.py +0 -0
  227. {codevira-2.0.0 → codevira-2.1.1}/tests/test_sqlite_util.py +0 -0
  228. {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_changesets.py +0 -0
  229. {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_code_reader.py +0 -0
  230. {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_graph.py +0 -0
  231. {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_learning.py +0 -0
  232. {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_playbook.py +0 -0
  233. {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_roadmap.py +0 -0
  234. {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_search.py +0 -0
  235. {codevira-2.0.0 → codevira-2.1.1}/tests/test_treesitter_parser.py +0 -0
  236. {codevira-2.0.0 → codevira-2.1.1}/tests/test_watcher_circuit.py +0 -0
@@ -11,19 +11,66 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [2.1.1] — 2026-05-17 — Hybrid decision search
15
+
16
+ ### Added
17
+ - **Hybrid search for `search_decisions`** (BM25 + ChromaDB semantic + RRF fusion).
18
+ Closes the UDAP-benchmark gap: queries like `"DDD architecture layer"` or
19
+ `"codevira backfill"` that returned 0 hits in v2.0/v2.1.0 now surface the
20
+ right decisions via semantic recall. Response includes a `retrieval` field
21
+ indicating which path contributed (hybrid / keyword / semantic).
22
+ - **`codevira heal --decisions`** — non-destructive backfill embedding all
23
+ existing decisions into the semantic index. Run once after upgrading from
24
+ v2.0/v2.1.0 to pick up hybrid recall on pre-existing decision history.
25
+ Idempotent (upsert pattern).
26
+ - **`mcp_server/tools/_decision_embeddings.py`** — new helper module:
27
+ embed_decision, semantic_search_decisions, rrf_merge, backfill_all_decisions.
28
+ P9 graceful degradation throughout — chromadb failures never block SQL
29
+ writes or BM25 reads.
30
+
31
+ ### Tests
32
+ - `tests/test_decision_embeddings.py` — 15 new regression tests covering
33
+ RRF math, graceful-degradation paths, and the explicit benchmark queries.
34
+
35
+ ## [2.1.0] — 2026-05-17 — Reliability hardening + Pillar 3 discipline scaffold
36
+
37
+ ### Added — Pillar 3: AI development discipline scaffold (2026-05-16)
38
+
39
+ The codevira repo now ships its own discipline scaffold — the same
40
+ pattern that will be exposed as `codevira discipline install` in
41
+ v2.2. This is the reference implementation, eaten as dog food.
42
+
43
+ - **`.claude/skills/`** — 4 SKILL.md files: `development-discipline`,
44
+ `open-source-quality`, `release-readiness`, `epistemic-honesty`.
45
+ - **`.claude/hooks/pre-release-block.sh`** — PreToolUse hard wall.
46
+ Refuses `twine upload`, `gh release ... --draft=false`,
47
+ `pipx publish`, etc. unless `.release-evidence/<version>.json`
48
+ shows G1–G5 pass. Bypass via `CODEVIRA_RELEASE_OVERRIDE=1`.
49
+ - **`Makefile`** — 12 targets including `release-verify-version`,
50
+ `release-gauntlet`, `release-build`, `release-dry-run`,
51
+ `release-publish`, `release-smoke`, `release-full`.
52
+ - **`.pre-commit-config.yaml`** — ruff lint+format, mypy, hygiene.
53
+ - **`tests/e2e/test_first_contact.py`** + 4 fixtures (docs_only,
54
+ code_only_python, polyglot, monorepo). G2 gate.
55
+ - **`.github/workflows/{ci,release-gate}.yml`** — CI hard wall.
56
+ - **`codevira.discipline.yaml`** — central scaffold config.
57
+ - **`scripts/check_real_ide_smoke.sh`** — G3 stub.
58
+ - **`docs/release-process.md`** — step-by-step foolproof release.
59
+
14
60
  ### Planned for v2.1
15
61
 
16
- See [ROADMAP.md](ROADMAP.md#-v21--honest-known-limitations-from-the-rc5-audit-2026-05-13).
17
-
18
- - **Multi-language `get_signature` / `get_code`**wire tree-sitter (already
19
- used for graph indexing) into these tools so non-Python projects stop
20
- getting "Python-only by design".
21
- - **`record_decisions_batch` API** — compress 50× ~800 B per-call overhead
22
- into one round-trip.
23
- - **CLI naming clarity** — pick a canonical hierarchy among `init` / `setup` /
24
- `register` / `configure`; add a `codevira inspect` umbrella; deprecate one
25
- of `--project-dir` (global) / `--project PATH` (per-subcommand) on a
26
- v2.1 v2.2 cycle.
62
+ See [ROADMAP.md](ROADMAP.md#-v21--new-user-first-contact--reliability-hardening).
63
+
64
+ - **Reliability hardening (23 bugs A–O)** silent-failure elimination
65
+ surfaced by the discipline-scaffold e2e fixtures.
66
+ - **Hybrid search (BM25 + semantic + rerank)** — natural-language
67
+ decision search.
68
+ - **Decision deduplication** (ADD/UPDATE/NOOP) + audit trail.
69
+ - **Conditional hook injection** — kill the always-on token tax.
70
+ - **Multi-language `get_signature` / `get_code`** wire tree-sitter.
71
+ - **`record_decisions_batch` API** compress protocol overhead.
72
+ - **CLI naming clarity** — `init` / `setup` / `register` / `configure`
73
+ canonical hierarchy.
27
74
 
28
75
  ---
29
76
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: codevira
3
- Version: 2.0.0
3
+ Version: 2.1.1
4
4
  Summary: Stop re-explaining your project to AI agents every session. Codevira gives Claude Code, Cursor, Windsurf, and Antigravity shared persistent memory of your codebase — locally, no signup, MIT-licensed. One install configures every AI tool.
5
5
  Author-email: Sachin Shelke <sachin.worldnet@gmail.com>
6
6
  License: MIT
@@ -36,6 +36,14 @@ Requires-Dist: chromadb>=0.5.0
36
36
  Requires-Dist: sentence-transformers>=2.7.0
37
37
  Provides-Extra: search
38
38
  Provides-Extra: all
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest>=7.0; extra == "dev"
41
+ Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
42
+ Requires-Dist: pytest-timeout>=2.1; extra == "dev"
43
+ Requires-Dist: ruff>=0.6.0; extra == "dev"
44
+ Requires-Dist: mypy>=1.10; extra == "dev"
45
+ Requires-Dist: types-PyYAML; extra == "dev"
46
+ Requires-Dist: pre-commit>=3.5; extra == "dev"
39
47
 
40
48
  # Codevira
41
49
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: codevira
3
- Version: 2.0.0
3
+ Version: 2.1.1
4
4
  Summary: Stop re-explaining your project to AI agents every session. Codevira gives Claude Code, Cursor, Windsurf, and Antigravity shared persistent memory of your codebase — locally, no signup, MIT-licensed. One install configures every AI tool.
5
5
  Author-email: Sachin Shelke <sachin.worldnet@gmail.com>
6
6
  License: MIT
@@ -36,6 +36,14 @@ Requires-Dist: chromadb>=0.5.0
36
36
  Requires-Dist: sentence-transformers>=2.7.0
37
37
  Provides-Extra: search
38
38
  Provides-Extra: all
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest>=7.0; extra == "dev"
41
+ Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
42
+ Requires-Dist: pytest-timeout>=2.1; extra == "dev"
43
+ Requires-Dist: ruff>=0.6.0; extra == "dev"
44
+ Requires-Dist: mypy>=1.10; extra == "dev"
45
+ Requires-Dist: types-PyYAML; extra == "dev"
46
+ Requires-Dist: pre-commit>=3.5; extra == "dev"
39
47
 
40
48
  # Codevira
41
49
 
@@ -29,6 +29,7 @@ codevira.egg-info/entry_points.txt
29
29
  codevira.egg-info/requires.txt
30
30
  codevira.egg-info/top_level.txt
31
31
  docs/alpha-tester-invites.md
32
+ docs/foolproof-product-charter.md
32
33
  docs/hn-launch-day.md
33
34
  docs/how-i-built-persistent-memory-for-ai-agents.md
34
35
  docs/linkedin-article-ai-agent-memory.md
@@ -36,6 +37,7 @@ docs/linkedin-post-ai-agent-memory.md
36
37
  docs/local-pypi-https.md
37
38
  docs/medium-your-ai-coding-agent-has-amnesia.md
38
39
  docs/qa-playbook.md
40
+ docs/release-process.md
39
41
  docs/roadmap.md
40
42
  docs/v2-completion-plan.md
41
43
  docs/v2-execution-log.md
@@ -55,6 +57,7 @@ docs/heroes/09-intent-inference.md
55
57
  docs/heroes/10-ai-promotion.md
56
58
  docs/heroes/README.md
57
59
  docs/heroes/pillar-1-setup.md
60
+ docs/internal/competitive-landscape.md
58
61
  graph/_schema.yaml
59
62
  indexer/__init__.py
60
63
  indexer/_dedupe_migration.py
@@ -104,7 +107,6 @@ mcp_server/server.py
104
107
  mcp_server/setup_wizard.py
105
108
  mcp_server/data/__init__.py
106
109
  mcp_server/data/config.example.yaml
107
- mcp_server/data/__pycache__/__init__.cpython-313.pyc
108
110
  mcp_server/data/agents/builder.md
109
111
  mcp_server/data/agents/developer.md
110
112
  mcp_server/data/agents/documenter.md
@@ -160,6 +162,7 @@ mcp_server/engine/wiring/__init__.py
160
162
  mcp_server/engine/wiring/claude_code_hooks.py
161
163
  mcp_server/engine/wiring/mcp_dispatch.py
162
164
  mcp_server/tools/__init__.py
165
+ mcp_server/tools/_decision_embeddings.py
163
166
  mcp_server/tools/changesets.py
164
167
  mcp_server/tools/code_reader.py
165
168
  mcp_server/tools/graph.py
@@ -189,6 +192,7 @@ tests/test_cli_projects.py
189
192
  tests/test_cli_replay.py
190
193
  tests/test_cli_version.py
191
194
  tests/test_crash_logger.py
195
+ tests/test_decision_embeddings.py
192
196
  tests/test_dedupe_migration.py
193
197
  tests/test_detect.py
194
198
  tests/test_doctor.py
@@ -12,4 +12,13 @@ sentence-transformers>=2.7.0
12
12
 
13
13
  [all]
14
14
 
15
+ [dev]
16
+ pytest>=7.0
17
+ pytest-asyncio>=0.21
18
+ pytest-timeout>=2.1
19
+ ruff>=0.6.0
20
+ mypy>=1.10
21
+ types-PyYAML
22
+ pre-commit>=3.5
23
+
15
24
  [search]
@@ -0,0 +1,197 @@
1
+ # Codevira Foolproof Product Charter
2
+
3
+ **The product, not just the release.** v2.0.0 shipped via a process
4
+ that satisfied "all unit tests pass," but the *product* shipped with
5
+ 23 silent-failure bugs. This document defines what "foolproof
6
+ product" means for codevira and how every code change must satisfy
7
+ it.
8
+
9
+ The release-discipline scaffold (Makefile + hook + CI + skills) is
10
+ the process. **This charter is the product**. They're complementary;
11
+ both are necessary.
12
+
13
+ ---
14
+
15
+ ## The 10 product principles (P1–P10)
16
+
17
+ | # | Principle | One-line rule |
18
+ |---|---|---|
19
+ | **P1** | No silent failures | Every 0-result code path emits a reason + `fix_command`. |
20
+ | **P2** | Self-diagnose on startup | Every entry point detects + reports known-bad states; never starts in a degraded state silently. |
21
+ | **P3** | Atomic state mutations | All external writes (files, DB, IDE configs) use atomic patterns. No half-written state. |
22
+ | **P4** | Defensive parsing | External input parses with fail-safe defaults; never crashes on malformed input. |
23
+ | **P5** | Bounded resources | No unbounded loops, retries, or log writes. Circuit breakers on every retry boundary. |
24
+ | **P6** | Predictable detection | One source of truth per concept. Two code paths that look at the same thing must agree. |
25
+ | **P7** | Reversible operations | Every install has a documented + tested uninstall. Every write merges, never overwrites user keys. |
26
+ | **P8** | Helpful error messages | WHAT failed + WHY + FIX. The `fix_command` pattern in every MCP tool response. |
27
+ | **P9** | Graceful degradation | Single-subsystem failure must not cascade. Document what still works when X is broken. |
28
+ | **P10** | Observability | Structured logging; `codevira doctor` reads actual state, never infers; logs auto-rotate. |
29
+
30
+ Full SKILL definitions live in
31
+ [`.claude/skills/foolproof-product/SKILL.md`](../.claude/skills/foolproof-product/SKILL.md).
32
+ Machine-checkable tests live in
33
+ [`tests/e2e/test_product_invariants.py`](../tests/e2e/test_product_invariants.py).
34
+
35
+ ---
36
+
37
+ ## How the principles map to the v2.0 bugs
38
+
39
+ Every v2.0 bug traces to one or more violated P-principle. The
40
+ post-mortem:
41
+
42
+ | Bug | What broke | Violated principles |
43
+ |---|---|---|
44
+ | **A** — discovery vs. indexing matcher mismatch | `configure` finds 8 files; `index` matches 0 | P6 (predictable detection) |
45
+ | **B** — `index` says "up to date" with 0 chunks | Lies about state | P1 (silent failure) |
46
+ | **C** — `status` shows 0/0 with no warning on uninitialized | No actionable state signal | P1, P10 |
47
+ | **D** — config split between in-repo and centralized | Two configs disagree silently | P3 (atomic), P6 |
48
+ | **E** — docs-only repos produce silent 0 chunks | No reason given | P1 |
49
+ | **F** — `init` drops top-level files (`.`) | Single-language filter on dirs | P6 |
50
+ | **G** — project keys are unreadable hashes | UX-hostile state representation | (UX, not a P violation) |
51
+ | **H** — no `--verbose` on `index` | No way to diagnose | P10 |
52
+ | **I** — "Auto-detected" promises detection but shows defaults | Misleading label | P1, P8 |
53
+ | **J/K** — sentence-transformers on critical path | Claude Desktop disconnects | P9 (graceful degradation) |
54
+ | **L** — init lists generic dirs not present | False positives in detection | P1, P6 |
55
+ | **M** — init shows all 80 extensions regardless of project | Same | P1 |
56
+ | **N** — init interactive but should match configure | Inconsistency | P6 |
57
+ | **O** — configure typing "1,3,5" not arrow-keys | UX (not P violation, but quality) |
58
+ | **HNSW writer crash storm** | 41 crashes in one session | P2 (startup detect), P5 (circuit breaker) |
59
+ | **41-crash log spam** | Grows unbounded | P5, P10 |
60
+ | **Claude Desktop config cleared (rare)** | Race in non-atomic write | P3 |
61
+ | **codevira clean leaves orphaned hooks** | Reverse incomplete | P7 |
62
+
63
+ **Lesson:** these aren't isolated bugs. They're a category. The
64
+ category is "we wrote code that satisfies the function signature but
65
+ not the product invariants."
66
+
67
+ ---
68
+
69
+ ## The mandatory checklist (every code change to mcp_server/ or indexer/)
70
+
71
+ ```
72
+ Subsystem touched: <indexer | MCP tool | hook | CLI | watcher>
73
+ Files in target list: <N files>
74
+
75
+ For each affected code path, answer:
76
+
77
+ P1 No silent failures [ ] All 0-result paths emit reason + fix_command
78
+ P2 Self-diagnose [ ] Doctor check added/updated if state added
79
+ P3 Atomic mutations [ ] Writes use tmp→fsync→rename or transactions
80
+ P4 Defensive parsing [ ] External input has try/except + safe default
81
+ P5 Bounded resources [ ] Loops bounded; retries have circuit breaker
82
+ P6 Predictable detection [ ] No parallel matcher; single source of truth
83
+ P7 Reversible [ ] Uninstall counterpart works (tested)
84
+ P8 Helpful errors [ ] Every error: WHAT + WHY + FIX
85
+ P9 Graceful degradation [ ] List what still works when this subsystem fails
86
+ P10 Observability [ ] Structured log; doctor surfaces new state
87
+
88
+ Justifications for any "N/A":
89
+ <e.g. "P3 N/A: no external state written">
90
+ ```
91
+
92
+ A code review (human OR AI) that doesn't see this checklist for a
93
+ mcp_server/indexer change is a discipline breach. The
94
+ `foolproof-product` SKILL.md enforces it conversationally; the
95
+ `test_product_invariants.py` suite enforces it mechanically.
96
+
97
+ ---
98
+
99
+ ## Subsystem-specific invariants
100
+
101
+ ### Indexer
102
+ - One matcher (`discover_source_files()` is THE matcher)
103
+ - 0-chunk results MUST include reason + fix_command
104
+ - Watcher: circuit-broken after 5 consecutive failures
105
+ - Crash log rate-limited: 1 entry per file per minute MAX
106
+
107
+ ### MCP server
108
+ - `tools/list` MUST respond in <1s (no chromadb / sentence-transformers
109
+ import on critical path)
110
+ - Every tool response includes `fix_command` on error
111
+ - Graceful degradation: keyword search works without ChromaDB
112
+ - Startup self-check: Chroma openable, DB tables present, version OK
113
+
114
+ ### CLI
115
+ - Every error message: WHAT + WHY + FIX
116
+ - Every command has `--help` + a docstring
117
+ - Status / doctor must reflect actual state, never lie
118
+
119
+ ### Hooks
120
+ - Hook scripts MUST be idempotent (re-running is safe)
121
+ - `hooks uninstall` removes everything `hooks install` wrote
122
+ - Hook injection respects user keys in `~/.claude/settings.json`
123
+
124
+ ### IDE config writes
125
+ - Atomic: tmp → fsync → rename
126
+ - Merge: never overwrite user keys
127
+ - Verify: read back after write to confirm
128
+
129
+ ---
130
+
131
+ ## Graceful degradation matrix
132
+
133
+ What still works when each subsystem fails:
134
+
135
+ | Down | Still works |
136
+ |---|---|
137
+ | **ChromaDB corrupt** | Keyword search via SQLite, decisions, graph, roadmap, changesets |
138
+ | **HuggingFace network down** | Cached model continues to work |
139
+ | **`~/.codevira/global.db` corrupt** | Auto-reinit + warn; per-project state preserved |
140
+ | **Watcher crash** | All MCP tools; manual `codevira index --full` available |
141
+ | **One hook script broken** | MCP server alone; other hooks continue |
142
+ | **Disk full** | Operations refuse with clear "disk full" message; never silently truncate |
143
+ | **Permission denied** | Clear error with `chmod` / `chown` remediation |
144
+
145
+ Every new feature: ask "if this fails, what continues to work?"
146
+ Document the answer in the docstring AND in the relevant cell of
147
+ this matrix.
148
+
149
+ ---
150
+
151
+ ## The continuous-foolproof loop
152
+
153
+ ```
154
+ 1. Bug found in production
155
+
156
+ 2. Identify which P-principle was violated
157
+
158
+ 3. Fix the bug
159
+
160
+ 4. Add a regression test to test_first_contact.py OR test_product_invariants.py
161
+
162
+ 5. If the test exposes a pattern (not just one bug), strengthen the
163
+ relevant P principle in the SKILL.md
164
+
165
+ 6. Update this charter's bug table (the post-mortem section above)
166
+ ```
167
+
168
+ Goal: every category of bug we ship gets encoded as a principle.
169
+ The next bug in that category fails the gauntlet before reaching users.
170
+
171
+ ---
172
+
173
+ ## Anti-patterns the charter forbids
174
+
175
+ These are non-negotiable. A PR that introduces any of these is
176
+ blocked at review:
177
+
178
+ 1. **Returning 0 results without a reason field.**
179
+ 2. **Catching exceptions and silently continuing without logging.**
180
+ 3. **Retry loops without a max-iteration limit.**
181
+ 4. **Error messages that say "failed" without saying WHY.**
182
+ 5. **New subsystems without a `codevira doctor` check.**
183
+ 6. **New subsystems without a clean uninstall path.**
184
+ 7. **Writes that overwrite user keys in shared config files.**
185
+ 8. **DB migrations without a rollback script.**
186
+ 9. **"It works in the happy path" without walking the sad paths.**
187
+ 10. **Skipping P1-P10 checklist with "looks fine."**
188
+
189
+ ---
190
+
191
+ ## Reference
192
+
193
+ - Skill enforcement: [`.claude/skills/foolproof-product/SKILL.md`](../.claude/skills/foolproof-product/SKILL.md)
194
+ - Machine tests: [`tests/e2e/test_product_invariants.py`](../tests/e2e/test_product_invariants.py)
195
+ - Bug catalog: [ROADMAP.md § v2.1](../ROADMAP.md#-v21--new-user-first-contact--reliability-hardening)
196
+ - Release process: [`docs/release-process.md`](release-process.md)
197
+ - Contributor guide: [`CONTRIBUTING.md`](../CONTRIBUTING.md)
@@ -0,0 +1,239 @@
1
+ # Competitive Landscape — Internal
2
+
3
+ > **NOT PUBLIC.** This file is in `.gitignore`. Never commit, never link
4
+ > from public docs, never reference by name in marketing copy. Used to
5
+ > drive internal v2.x prioritization.
6
+
7
+ **Last updated:** 2026-05-15
8
+ **Refresh cadence:** quarterly, or whenever a major competitor ships
9
+ something significant.
10
+
11
+ ---
12
+
13
+ ## Why this is private
14
+
15
+ The public `ROADMAP.md` is vision-led — capabilities framed by what
16
+ they do for codevira's users. This doc is intelligence-led —
17
+ capabilities framed by what competitors offer. The two should never
18
+ be merged: naming competitors in your own roadmap reads as reactive
19
+ follower-positioning. Keep this conversation internal.
20
+
21
+ Each public roadmap item maps back to one or more competitive gaps
22
+ listed here. Engineering knows the strategic intent without the
23
+ roadmap telegraphing our moves.
24
+
25
+ ---
26
+
27
+ ## mem0 (https://mem0.ai)
28
+
29
+ **Positioning:** the default conversational-memory layer for
30
+ general-purpose AI agents and chatbots. Optimized for fast
31
+ extraction-and-distillation of natural-language facts at scale across
32
+ 20+ vector stores.
33
+
34
+ **Mindshare:** ~55.7K GitHub stars, ~90K developer install base,
35
+ $19–249/mo cloud tiers, 114 open issues.
36
+
37
+ **Recent moves (Feb–May 2026):**
38
+ - May 13 — Memory Decay (recency-aware ranking)
39
+ - May 12 — Temporal Reasoning launch
40
+ - April — new memory algorithm with +20–27pt benchmark gains
41
+ - April 17 — security disclosure (CVSS 8.1)
42
+ - March 24 — official `mem0-mcp` archived; pivoted to hosted
43
+ `mcp.mem0.ai` (Platform-only)
44
+ - Recent — `graph_store` removed from OSS, replaced by in-vector-store
45
+ entity linking
46
+
47
+ ### mem0 capability matrix
48
+
49
+ | Capability | mem0 | codevira | Verdict | v2.x slot |
50
+ |---|---|---|---|---|
51
+ | `add` / `search` / `get` / `update` / `delete` | ✅ | ✅ (different naming) | parity | — |
52
+ | Hybrid search (BM25 + semantic) | ✅ | ❌ keyword only | **MUST CLOSE** | v2.1 — "natural-language decision search" |
53
+ | Re-ranking (Cohere, cross-encoder, LLM) | ✅ | ❌ | **MUST CLOSE** | v2.2 — "reranker integration" |
54
+ | ADD/UPDATE/DELETE/NOOP auto-decisioning | ✅ | ❌ append-only | **MUST CLOSE** | v2.1 — "decision deduplication" |
55
+ | Memory history per ID | ✅ | ❌ timestamps only | **MUST CLOSE** | v2.1 — "decision audit trail" |
56
+ | Feedback API (quality signals) | ✅ | ❌ | should close | v2.2 — "memory feedback API" |
57
+ | Batch ops (bulk update/delete) | ✅ | ❌ | should close | v2.2 — "batch ops" |
58
+ | Compound filter V2 (AND/OR on metadata) | ✅ Platform | partial | should close | v2.2 |
59
+ | Memory decay (recency ranking) | ✅ Platform | ❌ | nice to have | v2.2 if time |
60
+ | Temporal reasoning (point-in-time queries) | ✅ Platform | ❌ | nice to have | v2.3+ |
61
+ | Multi-vector-store adapters | ✅ 20+ | ❌ Chroma only | partial | v2.2 — pick top 3 (Pinecone/Qdrant/pgvector) |
62
+ | Memory compression (auto-condense) | ✅ | ❌ | nice to have | v2.3+ |
63
+ | JavaScript/Node SDK | ✅ | ❌ MCP only | **MUST CLOSE** | v2.2 — "Node SDK + Vercel AI SDK" |
64
+ | REST API (publicly addressable) | ✅ | partial (HTTP, not REST-shaped) | should close | v2.2 — "REST API surface" |
65
+ | Webhooks | ✅ | ❌ | nice to have | defer |
66
+ | LangChain / LlamaIndex / CrewAI / AutoGen adapters | ✅ | ❌ | should close | v2.2 — "framework adapters" |
67
+ | Multimodal (PDF, images) | ✅ Platform | ❌ | don't chase | — |
68
+ | Group chat / shared memory | ✅ Platform | ❌ | defer to cloud tier | v2.3 (cloud) |
69
+ | Custom categories / taxonomy | ✅ Platform | partial (decisions/preferences/rules) | don't chase | — |
70
+ | SSO / audit logs / SOC2 | ✅ Pro+ | ❌ | enterprise-only | defer |
71
+
72
+ ### Codevira's structural moats vs mem0
73
+
74
+ **These are things mem0 cannot copy without abandoning their core.
75
+ Never give them up chasing parity items.**
76
+
77
+ | Capability | Why it's a moat |
78
+ |---|---|
79
+ | Tree-sitter code graph (file/symbol/call edges) | Code-aware queries impossible in mem0; their model is conversational |
80
+ | Blast-radius / `get_impact` | Refactor safety mem0 cannot touch |
81
+ | `do_not_revert` decision protection | Active behavior shaping vs. passive retrieval |
82
+ | Hero policies (DecisionLock, ScopeContract, BlastRadius, CrossSession, TokenBudget, LiveStyle, IntentInference) | Completely different category — guardian, not RAG |
83
+ | Lifecycle hooks (PreToolUse, PostToolUse) | mem0 only sees what you `add()`; codevira observes the AI's actual behavior |
84
+ | Phase / roadmap tracking with dependencies | Project-state memory mem0 doesn't model |
85
+ | Confidence via outcome tracking (kept/modified/reverted) | Self-improving memory mem0 has no equivalent of |
86
+ | Fix-history auto-extraction from git | Codebase-grounded memory |
87
+ | Drift detection (commits ≠ phase claim) | Active monitoring, not passive storage |
88
+ | Free forever, no cloud, no caps | mem0 OSS works but graph is paywalled now; codevira's marginal cost per dev is zero |
89
+
90
+ ### mem0 weaknesses we can exploit
91
+
92
+ 1. **Graph dropped from OSS** — opens door for "the open-source memory tool that still has graph"
93
+ 2. **Pricing cliff** ($79 → $249 Pro) — cloud-graph is paywalled
94
+ 3. **Temporal LongMemEval = 49%** vs Zep 63.8%, Hindsight 91.4%
95
+ 4. **No implicit pattern learning** — only explicit facts
96
+ 5. **CVSS 8.1 SQL/Cypher injection** (April 2026) on PGVector / Azure MySQL / Neptune backends
97
+ 6. **TS SDK trails Python** — only 5 vector stores supported vs 20
98
+ 7. **Official MCP repo archived** — community forks fragmenting
99
+
100
+ ---
101
+
102
+ ## Zep (https://getzep.com)
103
+
104
+ **Positioning:** temporal knowledge graph for AI agents. Strongest at
105
+ "what was true at time T" queries.
106
+
107
+ **Capability differentiators:** Graphiti (temporal graph),
108
+ LongMemEval 63.8% (vs mem0's 49%), point-in-time queries.
109
+
110
+ **Weaknesses:** cloud-first (less compelling for solo devs);
111
+ SDK-first (no native MCP); enterprise positioning makes it expensive
112
+ for individuals.
113
+
114
+ **Threat to codevira:** medium. Different audience (enterprise/teams
115
+ vs solo devs). Watch their pricing if they go down-market.
116
+
117
+ ---
118
+
119
+ ## Letta (formerly MemGPT, https://letta.com)
120
+
121
+ **Positioning:** "stateful agents" — memory is the agent's persistent
122
+ state across reboots. MemGPT paper authors.
123
+
124
+ **Capability differentiators:** OS-style memory hierarchy
125
+ (working / archival), self-editing memory, agent-as-process model.
126
+
127
+ **Weaknesses:** opinionated agent framework lock-in; not just memory.
128
+ Adopting Letta means adopting their agent runtime.
129
+
130
+ **Threat to codevira:** low. Different category — they're an agent
131
+ framework that includes memory. Codevira is memory that any agent
132
+ framework can use.
133
+
134
+ ---
135
+
136
+ ## Cognee (https://cognee.ai)
137
+
138
+ **Positioning:** memory + reasoning over enterprise documents.
139
+
140
+ **Capability differentiators:** ECL (extract-cognify-load) pipeline,
141
+ ontology mapping, knowledge-graph extraction from unstructured docs.
142
+
143
+ **Weaknesses:** doc-centric, not code-centric; complex setup.
144
+
145
+ **Threat to codevira:** low. Different audience (enterprise document
146
+ intelligence vs developer code memory).
147
+
148
+ ---
149
+
150
+ ## Claude Projects + auto-memory (Anthropic)
151
+
152
+ **Positioning:** built-in memory for Claude Code users.
153
+
154
+ **Capability differentiators:** zero setup (Anthropic ships it),
155
+ deeply integrated into Claude Code UX.
156
+
157
+ **Weaknesses:** Claude-only (no Cursor/Windsurf reach), cloud-only,
158
+ no decision-shape primitives, no code graph.
159
+
160
+ **Threat to codevira:** medium-high. Anthropic could add MCP-tool-call
161
+ hooks to Claude Code that capture/replay memory automatically — would
162
+ neutralize codevira's session continuity story for Claude users
163
+ specifically. Mitigation: cross-tool reach + code-aware primitives
164
+ they can't easily replicate.
165
+
166
+ ---
167
+
168
+ ## CLAUDE.md / AGENTS.md / .windsurfrules / etc.
169
+
170
+ **Positioning:** static markdown files committed to the repo, loaded
171
+ into context on session start.
172
+
173
+ **Capability differentiators:** zero install, version-controlled,
174
+ team-shareable for free.
175
+
176
+ **Weaknesses:** static — can't track time-varying state; per-tool
177
+ mirrors duplicate content; ~2,500–3,000 token always-loaded cost;
178
+ human has to maintain.
179
+
180
+ **Threat to codevira:** low for time-varying memory; high for
181
+ "how to work in this repo" instructions. Codevira should NOT try to
182
+ replace CLAUDE.md — they coexist (CLAUDE.md = static rules,
183
+ codevira = dynamic memory). The benchmark proved this.
184
+
185
+ ---
186
+
187
+ ## Strategic conclusions (drives v2.x prioritization)
188
+
189
+ **Updated 2026-05-15:** v2.1 renamed to "new-user first contact +
190
+ reliability hardening" after fresh-install testing surfaced 23 silent-
191
+ failure bugs. Public launch (benchmark, demo video, hackathon,
192
+ partnership pitches) moves to v2.2. Hybrid search and the other
193
+ must-close mem0-parity items still ship in v2.1, but framed as
194
+ credibility blockers, not launch-day items.
195
+
196
+ 1. **Hybrid search is still the single highest-leverage capability fix.**
197
+ Every competitor has it; codevira doesn't; the benchmark publicly
198
+ fails without it. Ship in v2.1.
199
+
200
+ 2. **Don't try to match mem0 feature-by-feature.** Their wedge is
201
+ conversational memory at scale. Ours is code-aware behavior shaping.
202
+ Picking 4 must-close parity items is the right discipline.
203
+
204
+ 3. **mem0 dropping graph from OSS is the opening of the year.**
205
+ Marketing line for v2.2: "the open-source memory layer that still
206
+ has the graph." But say it about ourselves; never name them.
207
+
208
+ 4. **The benchmark is the moat.** Publishing a neutral, runnable
209
+ benchmark that includes mem0/Zep/Letta means we set the conversation.
210
+ Even when we lose on a dimension, we're the steward of the category.
211
+
212
+ 5. **Cross-tool is uncopiable.** mem0/Zep/Letta will not become
213
+ cross-tool because their business model assumes lock-in. Codevira's
214
+ MCP-only architecture makes this structural, not just a feature.
215
+
216
+ ---
217
+
218
+ ## Tracking template (when adding a new competitor)
219
+
220
+ ```
221
+ ## <name> (<url>)
222
+
223
+ **Positioning:** <one sentence>
224
+
225
+ **Capability differentiators:** <bullets>
226
+
227
+ **Weaknesses:** <bullets>
228
+
229
+ **Threat to codevira:** <low/medium/high>. <why>
230
+ ```
231
+
232
+ ---
233
+
234
+ ## Refresh log
235
+
236
+ - 2026-05-15 — initial creation. mem0 deep dive (Sachin + Claude
237
+ research agent, 19 tool calls, ~158k ms). Zep/Letta/Cognee/Claude
238
+ Projects/CLAUDE.md profiled from prior knowledge — refresh by
239
+ research agent next quarter.