codevira 2.1.1__tar.gz → 2.1.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.
Files changed (246) hide show
  1. {codevira-2.1.1 → codevira-2.1.2}/CHANGELOG.md +206 -0
  2. {codevira-2.1.1/codevira.egg-info → codevira-2.1.2}/PKG-INFO +56 -12
  3. {codevira-2.1.1 → codevira-2.1.2}/README.md +55 -11
  4. {codevira-2.1.1 → codevira-2.1.2/codevira.egg-info}/PKG-INFO +56 -12
  5. {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/SOURCES.txt +9 -0
  6. codevira-2.1.2/docs/plans/v2.1.2.md +1342 -0
  7. codevira-2.1.2/docs/troubleshooting/antigravity.md +131 -0
  8. {codevira-2.1.1 → codevira-2.1.2}/indexer/chunker.py +4 -0
  9. {codevira-2.1.1 → codevira-2.1.2}/indexer/global_db.py +78 -21
  10. {codevira-2.1.1 → codevira-2.1.2}/indexer/rule_learner.py +178 -28
  11. {codevira-2.1.1 → codevira-2.1.2}/indexer/sqlite_graph.py +98 -20
  12. {codevira-2.1.1 → codevira-2.1.2}/indexer/treesitter_parser.py +118 -65
  13. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/__init__.py +1 -1
  14. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_prompts.py +47 -0
  15. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/agents_md.py +33 -27
  16. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli.py +545 -47
  17. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_agents.py +33 -21
  18. codevira-2.1.2/mcp_server/cli_calibrate.py +140 -0
  19. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_configure.py +3 -3
  20. codevira-2.1.2/mcp_server/cli_export.py +318 -0
  21. codevira-2.1.2/mcp_server/data/rules/coding-standards-generic.md +60 -0
  22. codevira-2.1.2/mcp_server/data/rules/coding-standards-go.md +63 -0
  23. codevira-2.1.2/mcp_server/data/rules/coding-standards-typescript.md +56 -0
  24. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/__init__.py +18 -9
  25. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/cross_session.py +280 -52
  26. codevira-2.1.2/mcp_server/engine/policies/post_edit_refresh.py +91 -0
  27. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/runner.py +17 -10
  28. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/token_meter.py +15 -6
  29. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/prompts.py +12 -3
  30. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/server.py +524 -75
  31. codevira-2.1.2/mcp_server/tools/_decision_embeddings.py +694 -0
  32. codevira-2.1.2/mcp_server/tools/check_conflict.py +175 -0
  33. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/code_reader.py +24 -18
  34. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/graph.py +285 -108
  35. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/learning.py +435 -42
  36. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/playbook.py +53 -11
  37. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/roadmap.py +297 -22
  38. codevira-2.1.2/mcp_server/tools/search.py +897 -0
  39. {codevira-2.1.1 → codevira-2.1.2}/pyproject.toml +11 -1
  40. {codevira-2.1.1 → codevira-2.1.2}/tests/test_decision_embeddings.py +51 -16
  41. {codevira-2.1.1 → codevira-2.1.2}/tests/test_global_db.py +96 -19
  42. {codevira-2.1.1 → codevira-2.1.2}/tests/test_server.py +533 -286
  43. {codevira-2.1.1 → codevira-2.1.2}/tests/test_sqlite_graph.py +530 -181
  44. {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_graph.py +235 -53
  45. {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_learning.py +332 -124
  46. {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_roadmap.py +128 -51
  47. codevira-2.1.1/mcp_server/tools/_decision_embeddings.py +0 -314
  48. codevira-2.1.1/mcp_server/tools/search.py +0 -507
  49. {codevira-2.1.1 → codevira-2.1.2}/LICENSE +0 -0
  50. {codevira-2.1.1 → codevira-2.1.2}/MANIFEST.in +0 -0
  51. {codevira-2.1.1 → codevira-2.1.2}/agents/builder.md +0 -0
  52. {codevira-2.1.1 → codevira-2.1.2}/agents/developer.md +0 -0
  53. {codevira-2.1.1 → codevira-2.1.2}/agents/documenter.md +0 -0
  54. {codevira-2.1.1 → codevira-2.1.2}/agents/orchestrator.md +0 -0
  55. {codevira-2.1.1 → codevira-2.1.2}/agents/planner.md +0 -0
  56. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/01-code-review.md +0 -0
  57. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/02-adversarial-fix-review.md +0 -0
  58. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/03-cross-module-impact.md +0 -0
  59. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/06-doc-drift.md +0 -0
  60. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/07-security-audit.md +0 -0
  61. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/12-llm-redteam.md +0 -0
  62. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/13-multi-ide-schema.md +0 -0
  63. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/22-competitor-benchmark.md +0 -0
  64. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/README.md +0 -0
  65. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/tier2-scripts.md +0 -0
  66. {codevira-2.1.1 → codevira-2.1.2}/agents/qa/tier3-manual.md +0 -0
  67. {codevira-2.1.1 → codevira-2.1.2}/agents/reviewer.md +0 -0
  68. {codevira-2.1.1 → codevira-2.1.2}/agents/tester.md +0 -0
  69. {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/dependency_links.txt +0 -0
  70. {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/entry_points.txt +0 -0
  71. {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/requires.txt +0 -0
  72. {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/top_level.txt +0 -0
  73. {codevira-2.1.1 → codevira-2.1.2}/config.example.yaml +0 -0
  74. {codevira-2.1.1 → codevira-2.1.2}/docs/alpha-tester-invites.md +0 -0
  75. {codevira-2.1.1 → codevira-2.1.2}/docs/demo/README.md +0 -0
  76. {codevira-2.1.1 → codevira-2.1.2}/docs/foolproof-product-charter.md +0 -0
  77. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/00-engine.md +0 -0
  78. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/01-decision-lock.md +0 -0
  79. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/02-anti-regression.md +0 -0
  80. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/03-scope-contract.md +0 -0
  81. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/04-blast-radius.md +0 -0
  82. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/05-cross-session.md +0 -0
  83. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/06-token-budget.md +0 -0
  84. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/07-live-style.md +0 -0
  85. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/08-decision-replay.md +0 -0
  86. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/09-intent-inference.md +0 -0
  87. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/10-ai-promotion.md +0 -0
  88. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/README.md +0 -0
  89. {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/pillar-1-setup.md +0 -0
  90. {codevira-2.1.1 → codevira-2.1.2}/docs/hn-launch-day.md +0 -0
  91. {codevira-2.1.1 → codevira-2.1.2}/docs/how-i-built-persistent-memory-for-ai-agents.md +0 -0
  92. {codevira-2.1.1 → codevira-2.1.2}/docs/internal/competitive-landscape.md +0 -0
  93. {codevira-2.1.1 → codevira-2.1.2}/docs/linkedin-article-ai-agent-memory.md +0 -0
  94. {codevira-2.1.1 → codevira-2.1.2}/docs/linkedin-post-ai-agent-memory.md +0 -0
  95. {codevira-2.1.1 → codevira-2.1.2}/docs/local-pypi-https.md +0 -0
  96. {codevira-2.1.1 → codevira-2.1.2}/docs/medium-your-ai-coding-agent-has-amnesia.md +0 -0
  97. {codevira-2.1.1 → codevira-2.1.2}/docs/qa-playbook.md +0 -0
  98. {codevira-2.1.1 → codevira-2.1.2}/docs/release-process.md +0 -0
  99. {codevira-2.1.1 → codevira-2.1.2}/docs/roadmap.md +0 -0
  100. {codevira-2.1.1 → codevira-2.1.2}/docs/v2-completion-plan.md +0 -0
  101. {codevira-2.1.1 → codevira-2.1.2}/docs/v2-execution-log.md +0 -0
  102. {codevira-2.1.1 → codevira-2.1.2}/docs/v2-master-plan.md +0 -0
  103. {codevira-2.1.1 → codevira-2.1.2}/docs/vs-other-memory-tools.md +0 -0
  104. {codevira-2.1.1 → codevira-2.1.2}/graph/_schema.yaml +0 -0
  105. {codevira-2.1.1 → codevira-2.1.2}/indexer/__init__.py +0 -0
  106. {codevira-2.1.1 → codevira-2.1.2}/indexer/_dedupe_migration.py +0 -0
  107. {codevira-2.1.1 → codevira-2.1.2}/indexer/_fork_safety.py +0 -0
  108. {codevira-2.1.1 → codevira-2.1.2}/indexer/_sqlite_util.py +0 -0
  109. {codevira-2.1.1 → codevira-2.1.2}/indexer/fix_history.py +0 -0
  110. {codevira-2.1.1 → codevira-2.1.2}/indexer/graph_generator.py +0 -0
  111. {codevira-2.1.1 → codevira-2.1.2}/indexer/index_codebase.py +0 -0
  112. {codevira-2.1.1 → codevira-2.1.2}/indexer/outcome_tracker.py +0 -0
  113. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/__main__.py +0 -0
  114. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_ghost_check.py +0 -0
  115. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_project_inventory.py +0 -0
  116. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_repair_init.py +0 -0
  117. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_safe_crash.py +0 -0
  118. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/auto_init.py +0 -0
  119. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_budget.py +0 -0
  120. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_hooks_admin.py +0 -0
  121. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_insights.py +0 -0
  122. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_projects.py +0 -0
  123. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_replay.py +0 -0
  124. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/crash_logger.py +0 -0
  125. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/__init__.py +0 -0
  126. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/builder.md +0 -0
  127. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/developer.md +0 -0
  128. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/documenter.md +0 -0
  129. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/orchestrator.md +0 -0
  130. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/planner.md +0 -0
  131. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/reviewer.md +0 -0
  132. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/tester.md +0 -0
  133. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/config.example.yaml +0 -0
  134. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/post_tool_use.sh +0 -0
  135. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/pre_tool_use.sh +0 -0
  136. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/session_start.sh +0 -0
  137. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/stop.sh +0 -0
  138. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/user_prompt_submit.sh +0 -0
  139. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/coding-standards.md +0 -0
  140. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/engineering-excellence.md +0 -0
  141. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/git-cicd-governance.md +0 -0
  142. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/git_commits.md +0 -0
  143. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/incremental-updates.md +0 -0
  144. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/master_rule.md +0 -0
  145. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/multi-language.md +0 -0
  146. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/persistence.md +0 -0
  147. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/resilience-observability.md +0 -0
  148. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/smoke-testing.md +0 -0
  149. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/testing-standards.md +0 -0
  150. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/agents_md.tmpl +0 -0
  151. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/canonical_block.md +0 -0
  152. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/claude_md.tmpl +0 -0
  153. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/copilot_instructions.tmpl +0 -0
  154. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/cursor_rules.mdc.tmpl +0 -0
  155. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/gemini_md.tmpl +0 -0
  156. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/windsurfrules.tmpl +0 -0
  157. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/decision_replay.py +0 -0
  158. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/detect.py +0 -0
  159. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/doctor.py +0 -0
  160. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/demo_policy.py +0 -0
  161. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/events.py +0 -0
  162. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/intent_classifier.py +0 -0
  163. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/__init__.py +0 -0
  164. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/_signature_detect.py +0 -0
  165. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/ai_promotion.py +0 -0
  166. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/anti_regression.py +0 -0
  167. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/blast_radius.py +0 -0
  168. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/decision_lock.py +0 -0
  169. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/intent_inference.py +0 -0
  170. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/live_style.py +0 -0
  171. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/scope_contract.py +0 -0
  172. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/token_budget.py +0 -0
  173. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policy.py +0 -0
  174. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/promotion_score.py +0 -0
  175. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/scope_contract.py +0 -0
  176. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/signals.py +0 -0
  177. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/wiring/__init__.py +0 -0
  178. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/wiring/claude_code_hooks.py +0 -0
  179. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/wiring/mcp_dispatch.py +0 -0
  180. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/gitignore.py +0 -0
  181. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/global_sync.py +0 -0
  182. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/http_server.py +0 -0
  183. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/ide_inject.py +0 -0
  184. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/launchd.py +0 -0
  185. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/log_retention.py +0 -0
  186. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/migrate.py +0 -0
  187. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/paths.py +0 -0
  188. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/roadmap_drift.py +0 -0
  189. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/setup_wizard.py +0 -0
  190. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/__init__.py +0 -0
  191. {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/changesets.py +0 -0
  192. {codevira-2.1.1 → codevira-2.1.2}/rules/coding-standards.md +0 -0
  193. {codevira-2.1.1 → codevira-2.1.2}/rules/engineering-excellence.md +0 -0
  194. {codevira-2.1.1 → codevira-2.1.2}/rules/git-cicd-governance.md +0 -0
  195. {codevira-2.1.1 → codevira-2.1.2}/rules/git_commits.md +0 -0
  196. {codevira-2.1.1 → codevira-2.1.2}/rules/incremental-updates.md +0 -0
  197. {codevira-2.1.1 → codevira-2.1.2}/rules/master_rule.md +0 -0
  198. {codevira-2.1.1 → codevira-2.1.2}/rules/persistence.md +0 -0
  199. {codevira-2.1.1 → codevira-2.1.2}/rules/resilience-observability.md +0 -0
  200. {codevira-2.1.1 → codevira-2.1.2}/rules/smoke-testing.md +0 -0
  201. {codevira-2.1.1 → codevira-2.1.2}/rules/testing-standards.md +0 -0
  202. {codevira-2.1.1 → codevira-2.1.2}/setup.cfg +0 -0
  203. {codevira-2.1.1 → codevira-2.1.2}/tests/test__prompts.py +0 -0
  204. {codevira-2.1.1 → codevira-2.1.2}/tests/test_auto_init.py +0 -0
  205. {codevira-2.1.1 → codevira-2.1.2}/tests/test_call_edge_fk_safety.py +0 -0
  206. {codevira-2.1.1 → codevira-2.1.2}/tests/test_chunker.py +0 -0
  207. {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli.py +0 -0
  208. {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_agents.py +0 -0
  209. {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_configure.py +0 -0
  210. {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_insights.py +0 -0
  211. {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_projects.py +0 -0
  212. {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_replay.py +0 -0
  213. {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_version.py +0 -0
  214. {codevira-2.1.1 → codevira-2.1.2}/tests/test_crash_logger.py +0 -0
  215. {codevira-2.1.1 → codevira-2.1.2}/tests/test_dedupe_migration.py +0 -0
  216. {codevira-2.1.1 → codevira-2.1.2}/tests/test_detect.py +0 -0
  217. {codevira-2.1.1 → codevira-2.1.2}/tests/test_doctor.py +0 -0
  218. {codevira-2.1.1 → codevira-2.1.2}/tests/test_fk_safety_extended.py +0 -0
  219. {codevira-2.1.1 → codevira-2.1.2}/tests/test_fork_safety.py +0 -0
  220. {codevira-2.1.1 → codevira-2.1.2}/tests/test_ghost_check.py +0 -0
  221. {codevira-2.1.1 → codevira-2.1.2}/tests/test_gitignore.py +0 -0
  222. {codevira-2.1.1 → codevira-2.1.2}/tests/test_global_sync.py +0 -0
  223. {codevira-2.1.1 → codevira-2.1.2}/tests/test_graph_generator.py +0 -0
  224. {codevira-2.1.1 → codevira-2.1.2}/tests/test_hook_resilience.py +0 -0
  225. {codevira-2.1.1 → codevira-2.1.2}/tests/test_http_server.py +0 -0
  226. {codevira-2.1.1 → codevira-2.1.2}/tests/test_ide_inject.py +0 -0
  227. {codevira-2.1.1 → codevira-2.1.2}/tests/test_index_codebase.py +0 -0
  228. {codevira-2.1.1 → codevira-2.1.2}/tests/test_launchd.py +0 -0
  229. {codevira-2.1.1 → codevira-2.1.2}/tests/test_log_retention.py +0 -0
  230. {codevira-2.1.1 → codevira-2.1.2}/tests/test_migrate.py +0 -0
  231. {codevira-2.1.1 → codevira-2.1.2}/tests/test_outcome_tracker.py +0 -0
  232. {codevira-2.1.1 → codevira-2.1.2}/tests/test_paths.py +0 -0
  233. {codevira-2.1.1 → codevira-2.1.2}/tests/test_prompts.py +0 -0
  234. {codevira-2.1.1 → codevira-2.1.2}/tests/test_record_decision.py +0 -0
  235. {codevira-2.1.1 → codevira-2.1.2}/tests/test_repair_init.py +0 -0
  236. {codevira-2.1.1 → codevira-2.1.2}/tests/test_retire_rule.py +0 -0
  237. {codevira-2.1.1 → codevira-2.1.2}/tests/test_roadmap_drift.py +0 -0
  238. {codevira-2.1.1 → codevira-2.1.2}/tests/test_rule_learner.py +0 -0
  239. {codevira-2.1.1 → codevira-2.1.2}/tests/test_setup_wizard.py +0 -0
  240. {codevira-2.1.1 → codevira-2.1.2}/tests/test_sqlite_util.py +0 -0
  241. {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_changesets.py +0 -0
  242. {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_code_reader.py +0 -0
  243. {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_playbook.py +0 -0
  244. {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_search.py +0 -0
  245. {codevira-2.1.1 → codevira-2.1.2}/tests/test_treesitter_parser.py +0 -0
  246. {codevira-2.1.1 → codevira-2.1.2}/tests/test_watcher_circuit.py +0 -0
@@ -11,6 +11,212 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [2.1.2] — 2026-05-19 — Trust recovery + QoL
15
+
16
+ Trust-recovery release based on **four independent field-test reports** that
17
+ converged on "trust" as the gap (not capability). Full plan:
18
+ [docs/plans/v2.1.2.md](docs/plans/v2.1.2.md).
19
+
20
+ ### Added — Smart similarity threshold (Item 1)
21
+
22
+ - `search_decisions` now applies a per-project, self-calibrating similarity
23
+ threshold before RRF fusion. Gibberish queries (`"zzzzzz xqzv9"`,
24
+ `"how to make a cake"`, `""`) return zero results with
25
+ `retrieval: "semantic-no-results-above-threshold"` instead of the
26
+ v2.1.1 regression where they surfaced the "least bad" matches.
27
+ - New `codevira calibrate` CLI command for manual threshold re-fit.
28
+ Auto-recalibration runs in a daemon thread every ~10 decisions added.
29
+ - Per-project `<data_dir>/calibration.json` (search threshold + hook
30
+ threshold + positive-sample count + ISO timestamp).
31
+ - Cross-session hook injection (`CrossSessionConsistency`) applies the
32
+ stricter `hook` threshold (search − 0.10). Commit-message-shaped
33
+ prompts (`feat(api):` / `fix:` / etc.) skipped entirely.
34
+
35
+ ### Added — Honest cleanup (Item 3)
36
+
37
+ - `codevira reset --vectors / --graph / --all` — destructive operations
38
+ split out of `codevira heal` (whose name implied fix-in-place).
39
+ - Auto-export of decisions + outcomes + preferences + learned_rules to
40
+ `<data_dir>/exports/<ts>-pre-<target>.json` BEFORE any wipe of `graph/`.
41
+ Pass `--no-backup` to skip.
42
+ - Typed confirmation: user must type `reset` / `graph` / `vectors` /
43
+ `all` (not just `y`) to proceed. `--yes` skips for scripts.
44
+ - `codevira heal --vectors / --graph / --all` deprecation cycle:
45
+ forwards to `cmd_reset` with a one-time warning. Removal planned v2.2.
46
+ - New `codevira export decisions [--format json|sql] [--out PATH]`
47
+ standalone backup command. Closes Report 1 §7 gap.
48
+ - New `confirm_typed(...)` helper in `_prompts.py`.
49
+
50
+ ### Added — Proactive correctness
51
+
52
+ - **Item 20**: `check_conflict(decision_text, file_path?)` MCP tool detects
53
+ duplicates and conflicts vs `do_not_revert=True` decisions. Uses Item 1's
54
+ calibrated threshold. `record_decision` runs it automatically pre-write
55
+ and surfaces `_conflict_warning` in the response (suppressible with
56
+ `force=True`).
57
+ - **Item 26**: `supersede_decision(old_id, new_decision, reason)` retires
58
+ a prior decision with auditable history. Schema auto-migrates with
59
+ `is_superseded INTEGER + superseded_by INTEGER`. `list_decisions` filters
60
+ superseded rows by default; `include_superseded=True` opts back in.
61
+
62
+ ### Added — Enumeration + filtering
63
+
64
+ - **Item 11**: `list_decisions(limit, since_date, file_pattern,
65
+ protected_only, session_id, tags, include_superseded, full)` MCP tool.
66
+ Closes Report 3 "remembers but can't list" gap.
67
+ - **Item 27 (partial)**: `tags=[...]` on `record_decision`; `list_tags()`
68
+ MCP tool; tag filter on `list_decisions`. `decision_tags` table
69
+ auto-migrated.
70
+ - **Item 25**: `since="YYYY-MM-DD"` (or ISO 8601) filter on
71
+ `search_decisions`, `get_history`, `get_session_context`. SQL-layer
72
+ for BM25, post-filter for semantic results.
73
+
74
+ ### Added — Batch APIs (Items 23 + 24)
75
+
76
+ - `record_decisions([...])` and `write_session_logs([...])` cut
77
+ memory-dump sessions from ~26 separate round trips to 1. Returns
78
+ `{count, recorded:[ids], errors:[{idx, error}]}` with per-item
79
+ partial-failure surfacing.
80
+
81
+ ### Added — Trust + correctness fixes
82
+
83
+ - **Item 2**: `get_node` / `get_impact` / `query_graph` / `update_node`
84
+ return `not_indexed: True` + null counts instead of misleading 0 for
85
+ un-indexed paths.
86
+ - **Item 4**: New `PostEditGraphRefresh` policy refreshes graph nodes in
87
+ a daemon thread after Edit/Write/MultiEdit so subsequent
88
+ `get_node` / `get_impact` calls see fresh data.
89
+ - **Item 9**: `global_db.get_rules()` strict-language match by default
90
+ (was `language = ? OR language IS NULL`). Prevents Go-project rules
91
+ with NULL language from leaking into Python projects. Pass
92
+ `strict_language=False` for legacy behavior.
93
+ - **Item 17**: Rule extractor noise filter — stopword filter + minimum
94
+ content-density gate + substring suppression in `_find_common_phrases`.
95
+ Pre-code projects (0 indexed source files) skip
96
+ `_infer_decision_pattern_rules` entirely.
97
+ - **Item 18**: `add_phase()` silently replaces the bootstrap
98
+ "Getting Started" placeholder when called with the SAME number (and
99
+ the placeholder is pristine — status=pending, no changesets, default
100
+ description).
101
+ - **Item 19**: Regression test for `file_path` serialization round-trip
102
+ through `get_session_context`'s `recent_decisions`.
103
+ - **Item 22**: `write_session_log` / `log_session` auto-suffix
104
+ `session_id` on content collision (was: silent `INSERT OR REPLACE`).
105
+ Same id + same summary remains idempotent; different summary returns
106
+ the new suffixed id with `collision_resolved: True`.
107
+ - **Item 33**: Hook commit-message pre-filter suppresses injection on
108
+ prompts matching `^(feat|fix|chore|docs|refactor|test|style|perf|build|ci|revert)(\(.*\))?:`.
109
+
110
+ ### Added — Roadmap workflow
111
+
112
+ - **Item 10**: `complete_phase(backfill=True, completed_at='YYYY-MM-DD')`
113
+ for retroactive phase completion (current / upcoming / synthetic
114
+ cases).
115
+ - **Item 12**: `complete_phase(git_ref="...")` links a commit sha or PR
116
+ reference to the completion entry.
117
+ - **Item 29**: `bulk_import_phases([...])` for adopting codevira on a
118
+ project that already shipped N phases in git. Idempotent.
119
+
120
+ ### Added — QoL
121
+
122
+ - **Item 5**: `do_not_revert` int→bool coercion at SQLite read boundary
123
+ (`search_decisions`, missing-rows fetch path). API contract now
124
+ matches schema.
125
+ - **Item 6**: Smart truncation in `top_signals.rules` (word-boundary +
126
+ path-aware, 160-char limit).
127
+ - **Item 7**: `summary` derived from first 80 chars of decision text
128
+ instead of `"ad-hoc record_decision"` placeholder.
129
+ - **Item 8**: `get_session_context` returns `confidence_note` instead of
130
+ `confidence=null` on fresh projects.
131
+ - **Item 28**: `summary_only=True` mode on `search_decisions` returns
132
+ id + summary + score + do_not_revert only — ~70% smaller payload for
133
+ AI triage queries.
134
+ - **Item 30**: `record_decision` input-coerced echo — when
135
+ `do_not_revert` is passed as a non-bool (int 1, string "true"),
136
+ response carries `_input_coerced_warning`.
137
+ - **Item 31**: Bundled non-Python playbooks (TypeScript / Go / generic)
138
+ in `mcp_server/data/rules/coding-standards-<lang>.md`. Auto-selected
139
+ by detected project language. Closes Report 1 §3.5.
140
+ - **Items 13 + 14**: `clean --orphans` catches bare global.db rows (no
141
+ data dir + path missing on disk). `clean --ghosts` catches truly-
142
+ empty data dirs (<10 KB, status='stale').
143
+
144
+ ### Added — Plan + governance (Item 16)
145
+
146
+ - `docs/plans/v2.1.2.md` mirrors the master plan (33 items + 4 deferred
147
+ v2.2-class items). Establishes release-planning discipline: every
148
+ vX.Y.Z release with 3+ items gets its own `docs/plans/` doc.
149
+ - `ROADMAP.md` v2.1.2 section.
150
+ - `CONTRIBUTING.md` Release planning + Documentation discipline.
151
+
152
+ ### Fixed
153
+
154
+ - **Item 21**: Multi-language `get_signature` / `get_code` confirmed
155
+ working in v2.1.1 (15+ languages via tree-sitter-language-pack). No
156
+ new code needed; doc fix only.
157
+ - **Item 32**: All 42 pre-existing mypy errors cleared via real fixes
158
+ (type narrowing, missing imports, `Counter` / `dict[str, Any]`
159
+ annotations, AST isinstance gating) and targeted
160
+ `# type: ignore[code]` for invariant pre-existing patterns. mypy is
161
+ now a hard pre-commit gate.
162
+
163
+ ### Late additions (caught by post-tag smoke testing)
164
+
165
+ These three patches landed AFTER the initial v2.1.2 release commit but
166
+ BEFORE shipping the wheel. They're all part of the v2.1.2 line:
167
+
168
+ - **bulk_import_phases placeholder fix**: importing `phase=1` on a
169
+ fresh project was silently SKIPPING phase 1 because the bootstrap
170
+ "Getting Started" placeholder occupies that number. Adopters
171
+ migrating multi-phase git history (Report 3 #5 — the exact use case
172
+ Item 29 exists for) would hit this. Fixed by applying Item 18's
173
+ placeholder-recognition logic to bulk_import too.
174
+ - **calibrate doc range fix**: `codevira calibrate --help` said
175
+ "Clamped to [0.20, 0.55]" but actual code clamps to [0.35, 0.80]
176
+ (the empirically-tuned values from Item 1 after measuring
177
+ all-MiniLM-L6-v2's distance distribution on real query/decision
178
+ pairs). Doc string corrected.
179
+ - **Issue #10 — Antigravity sandbox + torch dlopen**: graceful
180
+ degradation across 3 tiers. (1) Removed `prewarm_embedding_model()`
181
+ from MCP server startup — torch loads lazily on first
182
+ `search_codebase` / `search_decisions` call. MCP `initialize` and
183
+ `tools/list` complete instantly without touching torch. All
184
+ non-search tools work in Antigravity. (2) `_decisions_collection_or_none()`
185
+ traps `OSError` (macOS dlopen errors arrive as OSError, not
186
+ ImportError) and surfaces `_semantic_warning` in `search_decisions`
187
+ responses with a clear explanation + issue link.
188
+ (3) `docs/troubleshooting/antigravity.md` documents the root cause
189
+ and four user-side workarounds. Closes
190
+ [#10](https://github.com/sachinshelke/codevira/issues/10).
191
+
192
+ ### Tests
193
+
194
+ - 2401/2401 unit tests pass + 4/4 e2e cross-tool universality.
195
+ - Replaced: `test_log_session_replaces_on_duplicate` → idempotent +
196
+ auto-suffix variants (Item 22).
197
+ - Renamed: `test_8_evaluation_under_5ms_p95` → `_50ms_p95` (semantic
198
+ gate is inherently slower than BM25-only).
199
+ - Updated: all `test_default_heroes_*` / `test_*_default_policies_*`
200
+ acceptance tests to expect `post_edit_graph_refresh` in the default
201
+ set; `test_dispatch_complete_phase` (×2) + `test_dispatch_get_history`
202
+ for new kwarg defaults.
203
+ - New positive tests: `test_get_node_not_indexed`,
204
+ `test_get_impact_not_indexed`,
205
+ `test_gibberish_query_returns_zero_above_threshold`,
206
+ `test_session_context_recent_decisions_preserve_file_path`,
207
+ `test_add_phase_replaces_pristine_placeholder`,
208
+ `test_log_session_idempotent_on_same_content`,
209
+ `test_log_session_auto_suffixes_on_different_content`,
210
+ `test_language_filter_strict_excludes_null_language`,
211
+ `test_language_filter_loose_includes_null_language`.
212
+
213
+ ### Deferred to v2.1.3 / v2.2
214
+
215
+ - Full README rewrite with animated 60-second demo GIF (Item 15) — pair
216
+ with v2.2 launch / benchmark publishing once benchmark suite ships.
217
+ - Bundled `coding-standards-<lang>.md` for Rust / Java / etc. — extend
218
+ the per-language playbook system as adopters request.
219
+
14
220
  ## [2.1.1] — 2026-05-17 — Hybrid decision search
15
221
 
16
222
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: codevira
3
- Version: 2.1.1
3
+ Version: 2.1.2
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
@@ -92,6 +92,35 @@ Your AI agent reads the same 12 files every session before doing any actual work
92
92
 
93
93
  ---
94
94
 
95
+ ## What's new in v2.1.2 — trust recovery
96
+
97
+ v2.1.1 shipped hybrid search (BM25 + semantic) but without a similarity floor, so off-topic prompts kept surfacing irrelevant decisions. v2.1.2 is a **trust-recovery release** based on four independent field-test reports: every fix restores confidence in something codevira already does.
98
+
99
+ | Area | What changed |
100
+ |---|---|
101
+ | **Smart similarity threshold** | `search_decisions` self-calibrates a per-project distance threshold from your protected decisions. Gibberish queries return zero results, not "least bad" matches. `codevira calibrate` to manually re-fit. |
102
+ | **Honest cleanup** | `codevira reset --vectors / --graph / --all` replaces destructive `heal` flags (which `rm -rf`'d decisions). Decisions auto-exported to `<data_dir>/exports/` before any wipe. Typed confirmation required (`reset` / `graph` / `vectors` / `all`). |
103
+ | **Backup-first by default** | `codevira export decisions [--format json|sql]` — standalone backup any time. |
104
+ | **Proactive conflict detection** | New `check_conflict(decision_text)` MCP tool flags duplicate or contradictory decisions BEFORE you write. `record_decision` runs it automatically and surfaces `_conflict_warning`. |
105
+ | **Enumerate decisions** | New `list_decisions(limit, since_date, file_pattern, protected_only, session_id, tags)` MCP tool. Closes the "remembers but can't list" gap. |
106
+ | **Batch APIs** | `record_decisions([…])` + `write_session_logs([…])` cut memory-dump sessions from ~26 round trips to 1. |
107
+ | **Tags + supersede** | Decisions can carry tags (`record_decision(tags=[…])`); `list_tags()` enumerates. `supersede_decision(old_id, new_decision, reason)` retires a prior decision with auditable history. |
108
+ | **since= filter** | `search_decisions`, `get_history`, `get_session_context` all accept `since="YYYY-MM-DD"` so "what's new since I was last here" is a one-call query. |
109
+ | **Rule extractor noise filter** | `top_signals.rules` no longer emits sliding-window n-grams as fake patterns. Stopwords + density gate + substring suppression. Skipped entirely on pre-code projects. |
110
+ | **Cross-project rules leak fix** | `language IS NULL` rules no longer fan out to every project. A Go-project rule stays in the Go project. |
111
+ | **Post-edit graph refresh** | New PostToolUse policy refreshes graph nodes after Edit/Write/MultiEdit so `get_node` / `get_impact` see current data without `index --full`. |
112
+ | **Auto-clear placeholder phase** | `add_phase(phase=1, …)` on a fresh project silently replaces the bootstrap "Getting Started" stub instead of refusing as duplicate. |
113
+ | **`complete_phase` enhancements** | `backfill=True` + `completed_at` for retroactive completion; `git_ref` to link to a commit/PR. `bulk_import_phases([…])` for migrating multi-phase git history in one call. |
114
+ | **Hook regex precision** | Commit-message-shaped prompts (`feat(api):` / `fix:` / etc.) no longer trigger context injection. |
115
+ | **Bundled non-Python playbooks** | `coding-standards-typescript.md`, `coding-standards-go.md`, `coding-standards-generic.md` auto-selected by detected language. |
116
+ | **session_id collision** | `write_session_log` auto-suffixes on conflict and returns the actual id (vs silent overwrite). |
117
+ | **`do_not_revert` echo** | When passed as a non-bool (int 1, string "true"), the response carries `_input_coerced_warning` so you see what got stored. |
118
+ | **mypy baseline** | All 42 pre-existing type errors cleared; mypy is now a hard gate. |
119
+
120
+ Full plan + design rationale: [docs/plans/v2.1.2.md](docs/plans/v2.1.2.md).
121
+
122
+ ---
123
+
95
124
  ## What's new in v2.0
96
125
 
97
126
  > 30-second demo: **[docs/demo/codevira-demo.mp4](docs/demo/codevira-demo.mp4)**
@@ -229,20 +258,35 @@ summary: 14 pass · 0 warn · 0 fail
229
258
 
230
259
  ### Daily-use commands you'll actually run
231
260
 
232
- | Command | What it does |
233
- |---|---|
234
- | `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) |
235
- | `codevira doctor` | Health check |
236
- | `codevira projects` | List every project codevira knows about on this machine |
237
- | `codevira projects --ghosts-only` | Find half-initialised project dirs |
238
- | `codevira clean --ghosts` | Remove ghost dirs (preserves real ones) |
239
- | `codevira insights` | Stable + reverted decisions across past sessions |
240
- | `codevira replay` | Decisions timeline (terminal / markdown / html output) |
241
- | `codevira budget` | Per-session token usage |
242
- | `codevira hooks list` | Show installed Claude Code lifecycle hooks |
261
+ | Command | What it does | Since |
262
+ |---|---|---|
263
+ | `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) | v2.0 |
264
+ | `codevira doctor` | Health check | v2.0 |
265
+ | `codevira projects` | List every project codevira knows about on this machine | v2.0 |
266
+ | `codevira projects --ghosts-only` | Find half-initialised project dirs | v2.0 |
267
+ | `codevira clean --ghosts` | Remove ghost dirs AND truly-empty data dirs | v2.0 (+ v2.1.2 #14) |
268
+ | `codevira clean --orphans` | Remove orphan data dirs AND bare global.db rows | v2.0 (+ v2.1.2 #13) |
269
+ | `codevira insights` | Stable + reverted decisions across past sessions | v2.0 |
270
+ | `codevira replay` | Decisions timeline (terminal / markdown / html output) | v2.0 |
271
+ | `codevira budget` | Per-session token usage | v2.0 |
272
+ | `codevira hooks list` | Show installed Claude Code lifecycle hooks | v2.0 |
273
+ | `codevira heal --decisions` | Backfill semantic embeddings for existing decisions | v2.1.0 |
274
+ | `codevira reset --vectors/--graph/--all` | Destructive cleanup (auto-exports decisions first) | **v2.1.2** |
275
+ | `codevira export decisions [--format json\|sql]` | Standalone backup of decisions / outcomes / preferences | **v2.1.2** |
276
+ | `codevira calibrate` | Re-fit per-project similarity threshold | **v2.1.2** |
243
277
 
244
278
  Run `codevira --help` for the full subcommand list.
245
279
 
280
+ ### What's production-stable vs best-effort
281
+
282
+ | Production-stable | Best-effort / coming soon |
283
+ |---|---|
284
+ | Cross-tool decision memory (search_decisions, get_session_context) | Multi-language code graph for languages OTHER than Python / TypeScript / Go / Rust / Java / C# / Ruby / C++ / Kotlin / Swift / PHP / JS — extend via tree-sitter language pack |
285
+ | do_not_revert guarding via Decision Lock + Anti-Regression hero | Animated demo GIF (coming v2.2 launch) |
286
+ | Hybrid BM25 + semantic search with self-calibrating threshold | Native MCP Apps UI (`ui://` URIs) — when MCP SDK exposes the scheme |
287
+ | Per-project + cross-project preferences via global.db | Real-time multi-machine sync — local-first is by design; if you need it, export/import is the path |
288
+ | All MCP tools (graph, roadmap, changesets, learning, decisions) | Web UI for browsing decisions (use the `codevira://decisions` MCP resource in Claude Desktop today) |
289
+
246
290
  ### Customizing what's indexed
247
291
 
248
292
  By default codevira indexes every common source / config / docs extension
@@ -45,6 +45,35 @@ Your AI agent reads the same 12 files every session before doing any actual work
45
45
 
46
46
  ---
47
47
 
48
+ ## What's new in v2.1.2 — trust recovery
49
+
50
+ v2.1.1 shipped hybrid search (BM25 + semantic) but without a similarity floor, so off-topic prompts kept surfacing irrelevant decisions. v2.1.2 is a **trust-recovery release** based on four independent field-test reports: every fix restores confidence in something codevira already does.
51
+
52
+ | Area | What changed |
53
+ |---|---|
54
+ | **Smart similarity threshold** | `search_decisions` self-calibrates a per-project distance threshold from your protected decisions. Gibberish queries return zero results, not "least bad" matches. `codevira calibrate` to manually re-fit. |
55
+ | **Honest cleanup** | `codevira reset --vectors / --graph / --all` replaces destructive `heal` flags (which `rm -rf`'d decisions). Decisions auto-exported to `<data_dir>/exports/` before any wipe. Typed confirmation required (`reset` / `graph` / `vectors` / `all`). |
56
+ | **Backup-first by default** | `codevira export decisions [--format json|sql]` — standalone backup any time. |
57
+ | **Proactive conflict detection** | New `check_conflict(decision_text)` MCP tool flags duplicate or contradictory decisions BEFORE you write. `record_decision` runs it automatically and surfaces `_conflict_warning`. |
58
+ | **Enumerate decisions** | New `list_decisions(limit, since_date, file_pattern, protected_only, session_id, tags)` MCP tool. Closes the "remembers but can't list" gap. |
59
+ | **Batch APIs** | `record_decisions([…])` + `write_session_logs([…])` cut memory-dump sessions from ~26 round trips to 1. |
60
+ | **Tags + supersede** | Decisions can carry tags (`record_decision(tags=[…])`); `list_tags()` enumerates. `supersede_decision(old_id, new_decision, reason)` retires a prior decision with auditable history. |
61
+ | **since= filter** | `search_decisions`, `get_history`, `get_session_context` all accept `since="YYYY-MM-DD"` so "what's new since I was last here" is a one-call query. |
62
+ | **Rule extractor noise filter** | `top_signals.rules` no longer emits sliding-window n-grams as fake patterns. Stopwords + density gate + substring suppression. Skipped entirely on pre-code projects. |
63
+ | **Cross-project rules leak fix** | `language IS NULL` rules no longer fan out to every project. A Go-project rule stays in the Go project. |
64
+ | **Post-edit graph refresh** | New PostToolUse policy refreshes graph nodes after Edit/Write/MultiEdit so `get_node` / `get_impact` see current data without `index --full`. |
65
+ | **Auto-clear placeholder phase** | `add_phase(phase=1, …)` on a fresh project silently replaces the bootstrap "Getting Started" stub instead of refusing as duplicate. |
66
+ | **`complete_phase` enhancements** | `backfill=True` + `completed_at` for retroactive completion; `git_ref` to link to a commit/PR. `bulk_import_phases([…])` for migrating multi-phase git history in one call. |
67
+ | **Hook regex precision** | Commit-message-shaped prompts (`feat(api):` / `fix:` / etc.) no longer trigger context injection. |
68
+ | **Bundled non-Python playbooks** | `coding-standards-typescript.md`, `coding-standards-go.md`, `coding-standards-generic.md` auto-selected by detected language. |
69
+ | **session_id collision** | `write_session_log` auto-suffixes on conflict and returns the actual id (vs silent overwrite). |
70
+ | **`do_not_revert` echo** | When passed as a non-bool (int 1, string "true"), the response carries `_input_coerced_warning` so you see what got stored. |
71
+ | **mypy baseline** | All 42 pre-existing type errors cleared; mypy is now a hard gate. |
72
+
73
+ Full plan + design rationale: [docs/plans/v2.1.2.md](docs/plans/v2.1.2.md).
74
+
75
+ ---
76
+
48
77
  ## What's new in v2.0
49
78
 
50
79
  > 30-second demo: **[docs/demo/codevira-demo.mp4](docs/demo/codevira-demo.mp4)**
@@ -182,20 +211,35 @@ summary: 14 pass · 0 warn · 0 fail
182
211
 
183
212
  ### Daily-use commands you'll actually run
184
213
 
185
- | Command | What it does |
186
- |---|---|
187
- | `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) |
188
- | `codevira doctor` | Health check |
189
- | `codevira projects` | List every project codevira knows about on this machine |
190
- | `codevira projects --ghosts-only` | Find half-initialised project dirs |
191
- | `codevira clean --ghosts` | Remove ghost dirs (preserves real ones) |
192
- | `codevira insights` | Stable + reverted decisions across past sessions |
193
- | `codevira replay` | Decisions timeline (terminal / markdown / html output) |
194
- | `codevira budget` | Per-session token usage |
195
- | `codevira hooks list` | Show installed Claude Code lifecycle hooks |
214
+ | Command | What it does | Since |
215
+ |---|---|---|
216
+ | `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) | v2.0 |
217
+ | `codevira doctor` | Health check | v2.0 |
218
+ | `codevira projects` | List every project codevira knows about on this machine | v2.0 |
219
+ | `codevira projects --ghosts-only` | Find half-initialised project dirs | v2.0 |
220
+ | `codevira clean --ghosts` | Remove ghost dirs AND truly-empty data dirs | v2.0 (+ v2.1.2 #14) |
221
+ | `codevira clean --orphans` | Remove orphan data dirs AND bare global.db rows | v2.0 (+ v2.1.2 #13) |
222
+ | `codevira insights` | Stable + reverted decisions across past sessions | v2.0 |
223
+ | `codevira replay` | Decisions timeline (terminal / markdown / html output) | v2.0 |
224
+ | `codevira budget` | Per-session token usage | v2.0 |
225
+ | `codevira hooks list` | Show installed Claude Code lifecycle hooks | v2.0 |
226
+ | `codevira heal --decisions` | Backfill semantic embeddings for existing decisions | v2.1.0 |
227
+ | `codevira reset --vectors/--graph/--all` | Destructive cleanup (auto-exports decisions first) | **v2.1.2** |
228
+ | `codevira export decisions [--format json\|sql]` | Standalone backup of decisions / outcomes / preferences | **v2.1.2** |
229
+ | `codevira calibrate` | Re-fit per-project similarity threshold | **v2.1.2** |
196
230
 
197
231
  Run `codevira --help` for the full subcommand list.
198
232
 
233
+ ### What's production-stable vs best-effort
234
+
235
+ | Production-stable | Best-effort / coming soon |
236
+ |---|---|
237
+ | Cross-tool decision memory (search_decisions, get_session_context) | Multi-language code graph for languages OTHER than Python / TypeScript / Go / Rust / Java / C# / Ruby / C++ / Kotlin / Swift / PHP / JS — extend via tree-sitter language pack |
238
+ | do_not_revert guarding via Decision Lock + Anti-Regression hero | Animated demo GIF (coming v2.2 launch) |
239
+ | Hybrid BM25 + semantic search with self-calibrating threshold | Native MCP Apps UI (`ui://` URIs) — when MCP SDK exposes the scheme |
240
+ | Per-project + cross-project preferences via global.db | Real-time multi-machine sync — local-first is by design; if you need it, export/import is the path |
241
+ | All MCP tools (graph, roadmap, changesets, learning, decisions) | Web UI for browsing decisions (use the `codevira://decisions` MCP resource in Claude Desktop today) |
242
+
199
243
  ### Customizing what's indexed
200
244
 
201
245
  By default codevira indexes every common source / config / docs extension
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: codevira
3
- Version: 2.1.1
3
+ Version: 2.1.2
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
@@ -92,6 +92,35 @@ Your AI agent reads the same 12 files every session before doing any actual work
92
92
 
93
93
  ---
94
94
 
95
+ ## What's new in v2.1.2 — trust recovery
96
+
97
+ v2.1.1 shipped hybrid search (BM25 + semantic) but without a similarity floor, so off-topic prompts kept surfacing irrelevant decisions. v2.1.2 is a **trust-recovery release** based on four independent field-test reports: every fix restores confidence in something codevira already does.
98
+
99
+ | Area | What changed |
100
+ |---|---|
101
+ | **Smart similarity threshold** | `search_decisions` self-calibrates a per-project distance threshold from your protected decisions. Gibberish queries return zero results, not "least bad" matches. `codevira calibrate` to manually re-fit. |
102
+ | **Honest cleanup** | `codevira reset --vectors / --graph / --all` replaces destructive `heal` flags (which `rm -rf`'d decisions). Decisions auto-exported to `<data_dir>/exports/` before any wipe. Typed confirmation required (`reset` / `graph` / `vectors` / `all`). |
103
+ | **Backup-first by default** | `codevira export decisions [--format json|sql]` — standalone backup any time. |
104
+ | **Proactive conflict detection** | New `check_conflict(decision_text)` MCP tool flags duplicate or contradictory decisions BEFORE you write. `record_decision` runs it automatically and surfaces `_conflict_warning`. |
105
+ | **Enumerate decisions** | New `list_decisions(limit, since_date, file_pattern, protected_only, session_id, tags)` MCP tool. Closes the "remembers but can't list" gap. |
106
+ | **Batch APIs** | `record_decisions([…])` + `write_session_logs([…])` cut memory-dump sessions from ~26 round trips to 1. |
107
+ | **Tags + supersede** | Decisions can carry tags (`record_decision(tags=[…])`); `list_tags()` enumerates. `supersede_decision(old_id, new_decision, reason)` retires a prior decision with auditable history. |
108
+ | **since= filter** | `search_decisions`, `get_history`, `get_session_context` all accept `since="YYYY-MM-DD"` so "what's new since I was last here" is a one-call query. |
109
+ | **Rule extractor noise filter** | `top_signals.rules` no longer emits sliding-window n-grams as fake patterns. Stopwords + density gate + substring suppression. Skipped entirely on pre-code projects. |
110
+ | **Cross-project rules leak fix** | `language IS NULL` rules no longer fan out to every project. A Go-project rule stays in the Go project. |
111
+ | **Post-edit graph refresh** | New PostToolUse policy refreshes graph nodes after Edit/Write/MultiEdit so `get_node` / `get_impact` see current data without `index --full`. |
112
+ | **Auto-clear placeholder phase** | `add_phase(phase=1, …)` on a fresh project silently replaces the bootstrap "Getting Started" stub instead of refusing as duplicate. |
113
+ | **`complete_phase` enhancements** | `backfill=True` + `completed_at` for retroactive completion; `git_ref` to link to a commit/PR. `bulk_import_phases([…])` for migrating multi-phase git history in one call. |
114
+ | **Hook regex precision** | Commit-message-shaped prompts (`feat(api):` / `fix:` / etc.) no longer trigger context injection. |
115
+ | **Bundled non-Python playbooks** | `coding-standards-typescript.md`, `coding-standards-go.md`, `coding-standards-generic.md` auto-selected by detected language. |
116
+ | **session_id collision** | `write_session_log` auto-suffixes on conflict and returns the actual id (vs silent overwrite). |
117
+ | **`do_not_revert` echo** | When passed as a non-bool (int 1, string "true"), the response carries `_input_coerced_warning` so you see what got stored. |
118
+ | **mypy baseline** | All 42 pre-existing type errors cleared; mypy is now a hard gate. |
119
+
120
+ Full plan + design rationale: [docs/plans/v2.1.2.md](docs/plans/v2.1.2.md).
121
+
122
+ ---
123
+
95
124
  ## What's new in v2.0
96
125
 
97
126
  > 30-second demo: **[docs/demo/codevira-demo.mp4](docs/demo/codevira-demo.mp4)**
@@ -229,20 +258,35 @@ summary: 14 pass · 0 warn · 0 fail
229
258
 
230
259
  ### Daily-use commands you'll actually run
231
260
 
232
- | Command | What it does |
233
- |---|---|
234
- | `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) |
235
- | `codevira doctor` | Health check |
236
- | `codevira projects` | List every project codevira knows about on this machine |
237
- | `codevira projects --ghosts-only` | Find half-initialised project dirs |
238
- | `codevira clean --ghosts` | Remove ghost dirs (preserves real ones) |
239
- | `codevira insights` | Stable + reverted decisions across past sessions |
240
- | `codevira replay` | Decisions timeline (terminal / markdown / html output) |
241
- | `codevira budget` | Per-session token usage |
242
- | `codevira hooks list` | Show installed Claude Code lifecycle hooks |
261
+ | Command | What it does | Since |
262
+ |---|---|---|
263
+ | `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) | v2.0 |
264
+ | `codevira doctor` | Health check | v2.0 |
265
+ | `codevira projects` | List every project codevira knows about on this machine | v2.0 |
266
+ | `codevira projects --ghosts-only` | Find half-initialised project dirs | v2.0 |
267
+ | `codevira clean --ghosts` | Remove ghost dirs AND truly-empty data dirs | v2.0 (+ v2.1.2 #14) |
268
+ | `codevira clean --orphans` | Remove orphan data dirs AND bare global.db rows | v2.0 (+ v2.1.2 #13) |
269
+ | `codevira insights` | Stable + reverted decisions across past sessions | v2.0 |
270
+ | `codevira replay` | Decisions timeline (terminal / markdown / html output) | v2.0 |
271
+ | `codevira budget` | Per-session token usage | v2.0 |
272
+ | `codevira hooks list` | Show installed Claude Code lifecycle hooks | v2.0 |
273
+ | `codevira heal --decisions` | Backfill semantic embeddings for existing decisions | v2.1.0 |
274
+ | `codevira reset --vectors/--graph/--all` | Destructive cleanup (auto-exports decisions first) | **v2.1.2** |
275
+ | `codevira export decisions [--format json\|sql]` | Standalone backup of decisions / outcomes / preferences | **v2.1.2** |
276
+ | `codevira calibrate` | Re-fit per-project similarity threshold | **v2.1.2** |
243
277
 
244
278
  Run `codevira --help` for the full subcommand list.
245
279
 
280
+ ### What's production-stable vs best-effort
281
+
282
+ | Production-stable | Best-effort / coming soon |
283
+ |---|---|
284
+ | Cross-tool decision memory (search_decisions, get_session_context) | Multi-language code graph for languages OTHER than Python / TypeScript / Go / Rust / Java / C# / Ruby / C++ / Kotlin / Swift / PHP / JS — extend via tree-sitter language pack |
285
+ | do_not_revert guarding via Decision Lock + Anti-Regression hero | Animated demo GIF (coming v2.2 launch) |
286
+ | Hybrid BM25 + semantic search with self-calibrating threshold | Native MCP Apps UI (`ui://` URIs) — when MCP SDK exposes the scheme |
287
+ | Per-project + cross-project preferences via global.db | Real-time multi-machine sync — local-first is by design; if you need it, export/import is the path |
288
+ | All MCP tools (graph, roadmap, changesets, learning, decisions) | Web UI for browsing decisions (use the `codevira://decisions` MCP resource in Claude Desktop today) |
289
+
246
290
  ### Customizing what's indexed
247
291
 
248
292
  By default codevira indexes every common source / config / docs extension
@@ -58,6 +58,8 @@ docs/heroes/10-ai-promotion.md
58
58
  docs/heroes/README.md
59
59
  docs/heroes/pillar-1-setup.md
60
60
  docs/internal/competitive-landscape.md
61
+ docs/plans/v2.1.2.md
62
+ docs/troubleshooting/antigravity.md
61
63
  graph/_schema.yaml
62
64
  indexer/__init__.py
63
65
  indexer/_dedupe_migration.py
@@ -84,7 +86,9 @@ mcp_server/auto_init.py
84
86
  mcp_server/cli.py
85
87
  mcp_server/cli_agents.py
86
88
  mcp_server/cli_budget.py
89
+ mcp_server/cli_calibrate.py
87
90
  mcp_server/cli_configure.py
91
+ mcp_server/cli_export.py
88
92
  mcp_server/cli_hooks_admin.py
89
93
  mcp_server/cli_insights.py
90
94
  mcp_server/cli_projects.py
@@ -119,6 +123,9 @@ mcp_server/data/hooks/pre_tool_use.sh
119
123
  mcp_server/data/hooks/session_start.sh
120
124
  mcp_server/data/hooks/stop.sh
121
125
  mcp_server/data/hooks/user_prompt_submit.sh
126
+ mcp_server/data/rules/coding-standards-generic.md
127
+ mcp_server/data/rules/coding-standards-go.md
128
+ mcp_server/data/rules/coding-standards-typescript.md
122
129
  mcp_server/data/rules/coding-standards.md
123
130
  mcp_server/data/rules/engineering-excellence.md
124
131
  mcp_server/data/rules/git-cicd-governance.md
@@ -156,6 +163,7 @@ mcp_server/engine/policies/cross_session.py
156
163
  mcp_server/engine/policies/decision_lock.py
157
164
  mcp_server/engine/policies/intent_inference.py
158
165
  mcp_server/engine/policies/live_style.py
166
+ mcp_server/engine/policies/post_edit_refresh.py
159
167
  mcp_server/engine/policies/scope_contract.py
160
168
  mcp_server/engine/policies/token_budget.py
161
169
  mcp_server/engine/wiring/__init__.py
@@ -164,6 +172,7 @@ mcp_server/engine/wiring/mcp_dispatch.py
164
172
  mcp_server/tools/__init__.py
165
173
  mcp_server/tools/_decision_embeddings.py
166
174
  mcp_server/tools/changesets.py
175
+ mcp_server/tools/check_conflict.py
167
176
  mcp_server/tools/code_reader.py
168
177
  mcp_server/tools/graph.py
169
178
  mcp_server/tools/learning.py