roam-code 12.12.2__tar.gz → 12.12.4__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 (583) hide show
  1. {roam_code-12.12.2/src/roam_code.egg-info → roam_code-12.12.4}/PKG-INFO +5 -5
  2. {roam_code-12.12.2 → roam_code-12.12.4}/README.md +4 -4
  3. {roam_code-12.12.2 → roam_code-12.12.4}/pyproject.toml +1 -1
  4. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/competitor_site_data.py +1 -1
  5. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/mcp-server-card.json +4 -4
  6. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/mcp_server.py +37 -0
  7. {roam_code-12.12.2 → roam_code-12.12.4/src/roam_code.egg-info}/PKG-INFO +5 -5
  8. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_doc_consistency.py +27 -0
  9. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_json_contracts.py +4 -1
  10. {roam_code-12.12.2 → roam_code-12.12.4}/LICENSE +0 -0
  11. {roam_code-12.12.2 → roam_code-12.12.4}/setup.cfg +0 -0
  12. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/__init__.py +0 -0
  13. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/__main__.py +0 -0
  14. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/analysis/__init__.py +0 -0
  15. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/analysis/effects.py +0 -0
  16. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/analysis/taint.py +0 -0
  17. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/api.py +0 -0
  18. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/ask/__init__.py +0 -0
  19. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/ask/classifier.py +0 -0
  20. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/ask/recipes.py +0 -0
  21. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/ask/runner.py +0 -0
  22. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/ask/workflow.py +0 -0
  23. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/attest/__init__.py +0 -0
  24. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/attest/cga.py +0 -0
  25. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/bridges/__init__.py +0 -0
  26. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/bridges/base.py +0 -0
  27. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/bridges/bridge_config.py +0 -0
  28. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/bridges/bridge_django.py +0 -0
  29. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/bridges/bridge_protobuf.py +0 -0
  30. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/bridges/bridge_rest_api.py +0 -0
  31. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/bridges/bridge_salesforce.py +0 -0
  32. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/bridges/bridge_template.py +0 -0
  33. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/bridges/registry.py +0 -0
  34. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/catalog/__init__.py +0 -0
  35. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/catalog/detectors.py +0 -0
  36. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/catalog/fixes.py +0 -0
  37. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/catalog/python_idioms.py +0 -0
  38. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/catalog/smells.py +0 -0
  39. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/catalog/tasks.py +0 -0
  40. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/cli.py +0 -0
  41. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/__init__.py +0 -0
  42. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/changed_files.py +0 -0
  43. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_adrs.py +0 -0
  44. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_adversarial.py +0 -0
  45. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_affected.py +0 -0
  46. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_affected_tests.py +0 -0
  47. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_agent_context.py +0 -0
  48. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_agent_export.py +0 -0
  49. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_agent_plan.py +0 -0
  50. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_ai_ratio.py +0 -0
  51. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_ai_readiness.py +0 -0
  52. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_alerts.py +0 -0
  53. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_annotate.py +0 -0
  54. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_api_changes.py +0 -0
  55. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_api_drift.py +0 -0
  56. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_ask.py +0 -0
  57. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_attest.py +0 -0
  58. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_auth_gaps.py +0 -0
  59. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_bisect.py +0 -0
  60. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_breaking.py +0 -0
  61. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_budget.py +0 -0
  62. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_bus_factor.py +0 -0
  63. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_capsule.py +0 -0
  64. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_cga.py +0 -0
  65. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_check_rules.py +0 -0
  66. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_ci_setup.py +0 -0
  67. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_clean.py +0 -0
  68. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_clones.py +0 -0
  69. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_closure.py +0 -0
  70. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_clusters.py +0 -0
  71. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_codeowners.py +0 -0
  72. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_complexity.py +0 -0
  73. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_config.py +0 -0
  74. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_congestion.py +0 -0
  75. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_context.py +0 -0
  76. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_conventions.py +0 -0
  77. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_coupling.py +0 -0
  78. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_coverage_gaps.py +0 -0
  79. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_critique.py +0 -0
  80. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_cut.py +0 -0
  81. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_dark_matter.py +0 -0
  82. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_dashboard.py +0 -0
  83. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_dead.py +0 -0
  84. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_debt.py +0 -0
  85. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_deps.py +0 -0
  86. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_describe.py +0 -0
  87. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_dev_profile.py +0 -0
  88. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_diagnose.py +0 -0
  89. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_diff.py +0 -0
  90. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_doc_staleness.py +0 -0
  91. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_docs_coverage.py +0 -0
  92. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_doctor.py +0 -0
  93. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_drift.py +0 -0
  94. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_duplicates.py +0 -0
  95. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_effects.py +0 -0
  96. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_endpoints.py +0 -0
  97. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_entry_points.py +0 -0
  98. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_eval_retrieve.py +0 -0
  99. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_fan.py +0 -0
  100. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_file.py +0 -0
  101. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_fingerprint.py +0 -0
  102. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_fitness.py +0 -0
  103. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_flag_dead.py +0 -0
  104. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_fleet.py +0 -0
  105. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_fn_coupling.py +0 -0
  106. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_forecast.py +0 -0
  107. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_grep.py +0 -0
  108. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_guard.py +0 -0
  109. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_health.py +0 -0
  110. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_hooks.py +0 -0
  111. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_hotspots.py +0 -0
  112. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_hover.py +0 -0
  113. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_impact.py +0 -0
  114. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_index.py +0 -0
  115. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_index_bundle.py +0 -0
  116. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_ingest_trace.py +0 -0
  117. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_init.py +0 -0
  118. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_intent.py +0 -0
  119. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_invariants.py +0 -0
  120. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_layers.py +0 -0
  121. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_map.py +0 -0
  122. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_math.py +0 -0
  123. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_mcp_setup.py +0 -0
  124. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_metrics.py +0 -0
  125. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_migration_safety.py +0 -0
  126. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_minimap.py +0 -0
  127. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_missing_index.py +0 -0
  128. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_module.py +0 -0
  129. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_mutate.py +0 -0
  130. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_n1.py +0 -0
  131. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_oracle.py +0 -0
  132. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_orchestrate.py +0 -0
  133. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_orphan_routes.py +0 -0
  134. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_over_fetch.py +0 -0
  135. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_owner.py +0 -0
  136. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_partition.py +0 -0
  137. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_path_coverage.py +0 -0
  138. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_patterns.py +0 -0
  139. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_plan.py +0 -0
  140. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_plan_refactor.py +0 -0
  141. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_pr_diff.py +0 -0
  142. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_pr_risk.py +0 -0
  143. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_preflight.py +0 -0
  144. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_py_modern.py +0 -0
  145. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_py_types.py +0 -0
  146. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_pytest_fixtures.py +0 -0
  147. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_relate.py +0 -0
  148. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_report.py +0 -0
  149. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_reset.py +0 -0
  150. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_retrieve.py +0 -0
  151. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_risk.py +0 -0
  152. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_rules.py +0 -0
  153. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_safe_delete.py +0 -0
  154. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_safe_zones.py +0 -0
  155. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_sbom.py +0 -0
  156. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_schema.py +0 -0
  157. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_search.py +0 -0
  158. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_search_semantic.py +0 -0
  159. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_secrets.py +0 -0
  160. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_semantic_diff.py +0 -0
  161. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_simulate.py +0 -0
  162. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_simulate_departure.py +0 -0
  163. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_sketch.py +0 -0
  164. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_smells.py +0 -0
  165. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_spectral.py +0 -0
  166. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_split.py +0 -0
  167. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_suggest_refactoring.py +0 -0
  168. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_suggest_reviewers.py +0 -0
  169. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_supply_chain.py +0 -0
  170. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_symbol.py +0 -0
  171. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_syntax_check.py +0 -0
  172. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_taint.py +0 -0
  173. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_test_gaps.py +0 -0
  174. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_test_scaffold.py +0 -0
  175. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_testmap.py +0 -0
  176. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_tour.py +0 -0
  177. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_trace.py +0 -0
  178. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_trends.py +0 -0
  179. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_triage.py +0 -0
  180. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_understand.py +0 -0
  181. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_uses.py +0 -0
  182. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_verify.py +0 -0
  183. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_verify_imports.py +0 -0
  184. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_vibe_check.py +0 -0
  185. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_visualize.py +0 -0
  186. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_vuln_map.py +0 -0
  187. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_vuln_reach.py +0 -0
  188. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_vulns.py +0 -0
  189. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_watch.py +0 -0
  190. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_weather.py +0 -0
  191. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_why.py +0 -0
  192. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_workflow.py +0 -0
  193. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_ws.py +0 -0
  194. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/cmd_xlang.py +0 -0
  195. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/codeowners_helpers.py +0 -0
  196. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/context_helpers.py +0 -0
  197. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/gate_presets.py +0 -0
  198. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/graph_helpers.py +0 -0
  199. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/metrics_history.py +0 -0
  200. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/next_steps.py +0 -0
  201. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/resolve.py +0 -0
  202. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/commands/suppression.py +0 -0
  203. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/config.py +0 -0
  204. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/coverage_reports.py +0 -0
  205. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/critique/__init__.py +0 -0
  206. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/critique/aggregator.py +0 -0
  207. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/critique/checks.py +0 -0
  208. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/db/__init__.py +0 -0
  209. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/db/connection.py +0 -0
  210. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/db/queries.py +0 -0
  211. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/db/schema.py +0 -0
  212. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/eval/__init__.py +0 -0
  213. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/eval/harness.py +0 -0
  214. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/exit_codes.py +0 -0
  215. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/fleet/__init__.py +0 -0
  216. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/fleet/adapters.py +0 -0
  217. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/fleet/manifest.py +0 -0
  218. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/git_utils.py +0 -0
  219. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/__init__.py +0 -0
  220. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/anomaly.py +0 -0
  221. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/builder.py +0 -0
  222. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/clone_detect.py +0 -0
  223. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/clusters.py +0 -0
  224. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/cycles.py +0 -0
  225. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/dark_matter.py +0 -0
  226. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/diff.py +0 -0
  227. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/fingerprint.py +0 -0
  228. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/layers.py +0 -0
  229. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/pagerank.py +0 -0
  230. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/partition.py +0 -0
  231. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/pathfinding.py +0 -0
  232. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/propagation.py +0 -0
  233. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/simulate.py +0 -0
  234. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/spectral.py +0 -0
  235. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/graph/stats.py +0 -0
  236. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/__init__.py +0 -0
  237. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/complexity.py +0 -0
  238. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/discovery.py +0 -0
  239. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/django_post.py +0 -0
  240. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/file_roles.py +0 -0
  241. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/git_stats.py +0 -0
  242. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/gitignore.py +0 -0
  243. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/incremental.py +0 -0
  244. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/indexer.py +0 -0
  245. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/parser.py +0 -0
  246. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/pytest_fixtures.py +0 -0
  247. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/registry_dispatch.py +0 -0
  248. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/relations.py +0 -0
  249. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/symbols.py +0 -0
  250. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/index/test_conventions.py +0 -0
  251. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/__init__.py +0 -0
  252. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/apex_lang.py +0 -0
  253. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/aura_lang.py +0 -0
  254. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/base.py +0 -0
  255. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/c_lang.py +0 -0
  256. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/csharp_lang.py +0 -0
  257. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/extractor_schema.py +0 -0
  258. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/extractors/kotlin.yaml +0 -0
  259. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/foxpro_lang.py +0 -0
  260. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/generic_lang.py +0 -0
  261. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/go_lang.py +0 -0
  262. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/hcl_lang.py +0 -0
  263. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/java_lang.py +0 -0
  264. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/javascript_lang.py +0 -0
  265. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/kotlin_lang.py +0 -0
  266. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/php_lang.py +0 -0
  267. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/python_lang.py +0 -0
  268. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/query_engine.py +0 -0
  269. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/registry.py +0 -0
  270. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/ruby_lang.py +0 -0
  271. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/rust_lang.py +0 -0
  272. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/scala_lang.py +0 -0
  273. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/sfxml_lang.py +0 -0
  274. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/sql_lang.py +0 -0
  275. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/swift_lang.py +0 -0
  276. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/typescript_lang.py +0 -0
  277. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/visualforce_lang.py +0 -0
  278. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/languages/yaml_lang.py +0 -0
  279. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/mcp_extras/__init__.py +0 -0
  280. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/mcp_extras/completions.py +0 -0
  281. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/mcp_extras/concurrency.py +0 -0
  282. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/mcp_extras/progress.py +0 -0
  283. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/mcp_extras/sampling.py +0 -0
  284. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/mcp_extras/session.py +0 -0
  285. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/mcp_extras/watcher.py +0 -0
  286. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/__init__.py +0 -0
  287. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/confidence.py +0 -0
  288. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/errors.py +0 -0
  289. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/file_role_hints.py +0 -0
  290. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/formatter.py +0 -0
  291. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/framework_filter.py +0 -0
  292. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/mermaid.py +0 -0
  293. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/project_shape.py +0 -0
  294. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/sarif.py +0 -0
  295. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/output/schema_registry.py +0 -0
  296. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/plugins.py +0 -0
  297. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/refactor/__init__.py +0 -0
  298. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/refactor/codegen.py +0 -0
  299. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/refactor/transforms.py +0 -0
  300. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/retrieve/__init__.py +0 -0
  301. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/retrieve/learned_ranker.py +0 -0
  302. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/retrieve/pipeline.py +0 -0
  303. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/retrieve/rerank.py +0 -0
  304. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/retrieve/seeds.py +0 -0
  305. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/retrieve/semantic.py +0 -0
  306. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/rules/__init__.py +0 -0
  307. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/rules/ast_match.py +0 -0
  308. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/rules/builtin.py +0 -0
  309. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/rules/dataflow.py +0 -0
  310. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/rules/engine.py +0 -0
  311. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/runtime/__init__.py +0 -0
  312. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/runtime/daemon.py +0 -0
  313. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/runtime/graph_backend.py +0 -0
  314. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/runtime/hotspots.py +0 -0
  315. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/runtime/lock_modes.py +0 -0
  316. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/runtime/lockmgr.py +0 -0
  317. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/runtime/trace_ingest.py +0 -0
  318. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/search/__init__.py +0 -0
  319. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/search/framework_packs.py +0 -0
  320. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/search/index_embeddings.py +0 -0
  321. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/search/onnx_embeddings.py +0 -0
  322. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/search/tfidf.py +0 -0
  323. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/__init__.py +0 -0
  324. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/aibom_extension.py +0 -0
  325. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_classifier.py +0 -0
  326. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_engine.py +0 -0
  327. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/api_error_leak.yaml +0 -0
  328. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/java_fileupload_path_traversal.yaml +0 -0
  329. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/js_insecure_jwt_decode.yaml +0 -0
  330. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/js_localstorage_secrets.yaml +0 -0
  331. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/js_prototype_pollution.yaml +0 -0
  332. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/js_ssrf.yaml +0 -0
  333. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/js_xss.yaml +0 -0
  334. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/python_basic.yaml +0 -0
  335. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/python_deserialization.yaml +0 -0
  336. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/python_path_traversal.yaml +0 -0
  337. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/python_socketio_remote_source.yaml +0 -0
  338. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/python_sqli.yaml +0 -0
  339. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/python_urllib_open_redirect.yaml +0 -0
  340. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/taint_rules/vue_v_html.yaml +0 -0
  341. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/vuln_reach.py +0 -0
  342. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/security/vuln_store.py +0 -0
  343. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/surface_counts.py +0 -0
  344. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/templates/__init__.py +0 -0
  345. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/templates/ci/Jenkinsfile +0 -0
  346. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/templates/ci/__init__.py +0 -0
  347. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/templates/ci/azure-pipelines.yml +0 -0
  348. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/templates/ci/bitbucket-pipelines.yml +0 -0
  349. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/templates/ci/gitlab-ci.yml +0 -0
  350. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/workspace/__init__.py +0 -0
  351. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/workspace/aggregator.py +0 -0
  352. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/workspace/api_scanner.py +0 -0
  353. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/workspace/config.py +0 -0
  354. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam/workspace/db.py +0 -0
  355. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam_code.egg-info/SOURCES.txt +0 -0
  356. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam_code.egg-info/dependency_links.txt +0 -0
  357. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam_code.egg-info/entry_points.txt +0 -0
  358. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam_code.egg-info/requires.txt +0 -0
  359. {roam_code-12.12.2 → roam_code-12.12.4}/src/roam_code.egg-info/top_level.txt +0 -0
  360. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_adrs.py +0 -0
  361. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_adversarial.py +0 -0
  362. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_affected.py +0 -0
  363. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_agent_export.py +0 -0
  364. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_agent_mode.py +0 -0
  365. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_agent_plan_context.py +0 -0
  366. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_ai_ratio.py +0 -0
  367. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_ai_readiness.py +0 -0
  368. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_alerts_cmd.py +0 -0
  369. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_annotations.py +0 -0
  370. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_anomaly.py +0 -0
  371. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_api_changes.py +0 -0
  372. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_api_drift.py +0 -0
  373. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_ask.py +0 -0
  374. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_attest.py +0 -0
  375. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_auth_gaps.py +0 -0
  376. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_backend_fixes_round2.py +0 -0
  377. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_backend_fixes_round3.py +0 -0
  378. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_basic.py +0 -0
  379. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_batch_mcp.py +0 -0
  380. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_bisect.py +0 -0
  381. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_bridge_django.py +0 -0
  382. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_bridges.py +0 -0
  383. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_bridges_extended.py +0 -0
  384. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_budget.py +0 -0
  385. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_budget_flag.py +0 -0
  386. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_budget_phase2.py +0 -0
  387. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_bus_factor.py +0 -0
  388. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_capsule.py +0 -0
  389. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_cga.py +0 -0
  390. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_check_rules.py +0 -0
  391. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_ci_gate_eval.py +0 -0
  392. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_ci_sarif_guard.py +0 -0
  393. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_ci_setup.py +0 -0
  394. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_clones.py +0 -0
  395. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_closure.py +0 -0
  396. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_codeowners.py +0 -0
  397. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_commands_architecture.py +0 -0
  398. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_commands_exploration.py +0 -0
  399. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_commands_health.py +0 -0
  400. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_commands_refactoring.py +0 -0
  401. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_commands_workflow.py +0 -0
  402. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_competitor_site_data.py +0 -0
  403. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_comprehensive.py +0 -0
  404. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_config.py +0 -0
  405. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_congestion.py +0 -0
  406. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_context_propagation.py +0 -0
  407. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_conventions_cmd.py +0 -0
  408. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_coverage_gaps_cmd.py +0 -0
  409. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_coverage_ingestion.py +0 -0
  410. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_critique.py +0 -0
  411. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_cut.py +0 -0
  412. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_dark_matter.py +0 -0
  413. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_dark_matter_helpers.py +0 -0
  414. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_dashboard.py +0 -0
  415. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_dataflow_dead.py +0 -0
  416. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_dead_aging.py +0 -0
  417. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_defer_loading.py +0 -0
  418. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_demo_gif_asset.py +0 -0
  419. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_describe.py +0 -0
  420. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_detail_flag_hints.py +0 -0
  421. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_detector_precision.py +0 -0
  422. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_deterministic_output.py +0 -0
  423. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_dev_profile.py +0 -0
  424. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_difficulty_scoring.py +0 -0
  425. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_doc_staleness.py +0 -0
  426. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_docker_assets.py +0 -0
  427. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_docs_coverage.py +0 -0
  428. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_docs_site_quality.py +0 -0
  429. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_doctor.py +0 -0
  430. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_drift.py +0 -0
  431. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_drift_by_team.py +0 -0
  432. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_duplicates.py +0 -0
  433. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_effects.py +0 -0
  434. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_effects_propagation.py +0 -0
  435. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_endpoints.py +0 -0
  436. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_entry_points_cmd.py +0 -0
  437. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_eval_retrieve.py +0 -0
  438. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_except_pass_narrow.py +0 -0
  439. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_exclude_patterns.py +0 -0
  440. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_exit_codes.py +0 -0
  441. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_extractor_grammar_drift.py +0 -0
  442. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_fallback_contracts.py +0 -0
  443. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_file_roles.py +0 -0
  444. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_fingerprint.py +0 -0
  445. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_fixes.py +0 -0
  446. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_flag_dead.py +0 -0
  447. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_fleet.py +0 -0
  448. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_fn_coupling.py +0 -0
  449. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_forecast.py +0 -0
  450. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_formatters.py +0 -0
  451. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_foxpro.py +0 -0
  452. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_framework_detection.py +0 -0
  453. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_gate_presets.py +0 -0
  454. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_git_utils.py +0 -0
  455. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_guard.py +0 -0
  456. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_health_gate.py +0 -0
  457. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_hooks.py +0 -0
  458. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_hotspots.py +0 -0
  459. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_hover.py +0 -0
  460. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_index.py +0 -0
  461. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_index_bundle.py +0 -0
  462. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_init_cmd.py +0 -0
  463. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_install_check.py +0 -0
  464. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_intent.py +0 -0
  465. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_invariants.py +0 -0
  466. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_json_error_envelope.py +0 -0
  467. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_kotlin_swift_extractors.py +0 -0
  468. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_language_corpus.py +0 -0
  469. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_languages.py +0 -0
  470. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_library_api.py +0 -0
  471. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_math.py +0 -0
  472. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_math_tips.py +0 -0
  473. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_mcp_extras.py +0 -0
  474. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_mcp_server.py +0 -0
  475. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_mcp_setup.py +0 -0
  476. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_mermaid.py +0 -0
  477. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_metrics_cmd.py +0 -0
  478. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_migration_safety.py +0 -0
  479. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_minimap.py +0 -0
  480. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_missing_index.py +0 -0
  481. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_mutate.py +0 -0
  482. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_n1.py +0 -0
  483. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_next_steps.py +0 -0
  484. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_onboard.py +0 -0
  485. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_oracle.py +0 -0
  486. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_orchestrate.py +0 -0
  487. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_orphan_routes.py +0 -0
  488. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_oss_bench_harness.py +0 -0
  489. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_over_fetch.py +0 -0
  490. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_pagerank_truncation.py +0 -0
  491. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_partition.py +0 -0
  492. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_path_coverage.py +0 -0
  493. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_patterns_cmd.py +0 -0
  494. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_performance.py +0 -0
  495. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_personalized_pagerank.py +0 -0
  496. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_plan.py +0 -0
  497. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_plugin_discovery.py +0 -0
  498. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_pr_comment_script.py +0 -0
  499. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_pr_diff.py +0 -0
  500. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_pr_risk_author.py +0 -0
  501. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_progress.py +0 -0
  502. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_progressive_disclosure.py +0 -0
  503. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_properties.py +0 -0
  504. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_pytest_fixtures.py +0 -0
  505. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_python_extractor_v2.py +0 -0
  506. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_python_idioms_e2e.py +0 -0
  507. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_python_pivot.py +0 -0
  508. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_readme_surface_consistency.py +0 -0
  509. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_realworld_feedback.py +0 -0
  510. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_refactoring_intelligence.py +0 -0
  511. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_registry_dispatch.py +0 -0
  512. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_relate.py +0 -0
  513. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_report.py +0 -0
  514. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_reset_clean.py +0 -0
  515. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_resolve.py +0 -0
  516. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_retrieve.py +0 -0
  517. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_retrieve_cross_repo.py +0 -0
  518. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_retrieve_seeds.py +0 -0
  519. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_risk.py +0 -0
  520. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_ruby.py +0 -0
  521. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_rule_profiles.py +0 -0
  522. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_rules.py +0 -0
  523. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_rules_ast_match.py +0 -0
  524. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_rules_community_pack.py +0 -0
  525. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_rules_dataflow.py +0 -0
  526. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_rules_symbol_requirements.py +0 -0
  527. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_runtime.py +0 -0
  528. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_runtime_score.py +0 -0
  529. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_salesforce.py +0 -0
  530. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_sarif_flag.py +0 -0
  531. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_sbom.py +0 -0
  532. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_scala.py +0 -0
  533. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_schema_versioning.py +0 -0
  534. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_search_explain.py +0 -0
  535. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_secrets.py +0 -0
  536. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_secrets_v2.py +0 -0
  537. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_semantic_diff.py +0 -0
  538. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_semantic_onnx.py +0 -0
  539. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_semantic_search.py +0 -0
  540. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_simulate.py +0 -0
  541. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_simulate_departure.py +0 -0
  542. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_sketch.py +0 -0
  543. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_smells.py +0 -0
  544. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_smoke.py +0 -0
  545. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_sna_metrics.py +0 -0
  546. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_spectral.py +0 -0
  547. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_split_cmd.py +0 -0
  548. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_sql.py +0 -0
  549. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_suggest_reviewers.py +0 -0
  550. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_supply_chain.py +0 -0
  551. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_surface_counts.py +0 -0
  552. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_syntax_check.py +0 -0
  553. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_taint.py +0 -0
  554. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_taint_analysis.py +0 -0
  555. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_taint_classifier.py +0 -0
  556. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_taint_intraprocedural.py +0 -0
  557. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_test_conventions.py +0 -0
  558. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_test_gaps.py +0 -0
  559. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_test_scaffold.py +0 -0
  560. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_testmap.py +0 -0
  561. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_top_flag_consistency.py +0 -0
  562. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_tour_cmd.py +0 -0
  563. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_trends.py +0 -0
  564. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_trends_cohort.py +0 -0
  565. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_triage.py +0 -0
  566. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_uses_cmd.py +0 -0
  567. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_v12_2.py +0 -0
  568. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_v6_features.py +0 -0
  569. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_v71_features.py +0 -0
  570. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_v7_features.py +0 -0
  571. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_v82_features.py +0 -0
  572. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_verify.py +0 -0
  573. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_verify_imports.py +0 -0
  574. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_vibe_check.py +0 -0
  575. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_visualize.py +0 -0
  576. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_vuln.py +0 -0
  577. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_vulns_cmd.py +0 -0
  578. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_watch.py +0 -0
  579. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_why.py +0 -0
  580. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_workspace.py +0 -0
  581. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_ws_resolve_fixes.py +0 -0
  582. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_xlang.py +0 -0
  583. {roam_code-12.12.2 → roam_code-12.12.4}/tests/test_yaml_hcl.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roam-code
3
- Version: 12.12.2
3
+ Version: 12.12.4
4
4
  Summary: Instant codebase comprehension for AI coding agents
5
5
  Author: CosmoHac
6
6
  License-Expression: MIT
@@ -327,7 +327,7 @@ roam health
327
327
 
328
328
  ## Commands
329
329
 
330
- **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 150 commands are detail surface for specialised workflows (taint, fleet, cga, oracle, eval, …) — they're called by agents on demand, not memorised. This is intentional design; under the hood the canonical surface is **155 commands organised into 7 categories**, but you don't need to know that to start.
330
+ **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 150 commands are detail surface for specialised workflows (taint, fleet, cga, oracle, eval, …) — they're called by agents on demand, not memorised. This is intentional design; under the hood the canonical surface is **155 commands organised into 7 categories** (plus 6 aliases for muscle memory: `algo` → `math`, `weather` → `churn`, `digest` / `snapshot` / `trend` → `trends`, `onboard` → `understand`), but you don't need to know that to start.
331
331
 
332
332
  <details>
333
333
  <summary><strong>Full command reference</strong></summary>
@@ -1610,8 +1610,8 @@ roam-code/
1610
1610
  ├── action.yml # Reusable GitHub Action
1611
1611
  ├── src/roam/
1612
1612
  │ ├── __init__.py # Version (from pyproject.toml)
1613
- │ ├── cli.py # Click CLI (152 commands)
1614
- │ ├── mcp_server.py # MCP server (118 tools, 10 resources, 5 prompts)
1613
+ │ ├── cli.py # Click CLI (155 canonical + 6 aliases)
1614
+ │ ├── mcp_server.py # MCP server (122 tools, 10 resources, 5 prompts)
1615
1615
  │ ├── db/
1616
1616
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
1617
1617
  │ │ ├── schema.py # Tables, indexes, migrations
@@ -1705,7 +1705,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1705
1705
  ### Shipped
1706
1706
 
1707
1707
  - [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
1708
- - [x] Full command and MCP inventory parity in docs: 152 CLI commands and 118 MCP tools.
1708
+ - [x] Full command and MCP inventory parity in docs: 155 canonical CLI commands and 122 MCP tools.
1709
1709
  - [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
1710
1710
  - [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
1711
1711
  - [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
@@ -269,7 +269,7 @@ roam health
269
269
 
270
270
  ## Commands
271
271
 
272
- **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 150 commands are detail surface for specialised workflows (taint, fleet, cga, oracle, eval, …) — they're called by agents on demand, not memorised. This is intentional design; under the hood the canonical surface is **155 commands organised into 7 categories**, but you don't need to know that to start.
272
+ **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 150 commands are detail surface for specialised workflows (taint, fleet, cga, oracle, eval, …) — they're called by agents on demand, not memorised. This is intentional design; under the hood the canonical surface is **155 commands organised into 7 categories** (plus 6 aliases for muscle memory: `algo` → `math`, `weather` → `churn`, `digest` / `snapshot` / `trend` → `trends`, `onboard` → `understand`), but you don't need to know that to start.
273
273
 
274
274
  <details>
275
275
  <summary><strong>Full command reference</strong></summary>
@@ -1552,8 +1552,8 @@ roam-code/
1552
1552
  ├── action.yml # Reusable GitHub Action
1553
1553
  ├── src/roam/
1554
1554
  │ ├── __init__.py # Version (from pyproject.toml)
1555
- │ ├── cli.py # Click CLI (152 commands)
1556
- │ ├── mcp_server.py # MCP server (118 tools, 10 resources, 5 prompts)
1555
+ │ ├── cli.py # Click CLI (155 canonical + 6 aliases)
1556
+ │ ├── mcp_server.py # MCP server (122 tools, 10 resources, 5 prompts)
1557
1557
  │ ├── db/
1558
1558
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
1559
1559
  │ │ ├── schema.py # Tables, indexes, migrations
@@ -1647,7 +1647,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1647
1647
  ### Shipped
1648
1648
 
1649
1649
  - [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
1650
- - [x] Full command and MCP inventory parity in docs: 152 CLI commands and 118 MCP tools.
1650
+ - [x] Full command and MCP inventory parity in docs: 155 canonical CLI commands and 122 MCP tools.
1651
1651
  - [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
1652
1652
  - [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
1653
1653
  - [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "roam-code"
7
- version = "12.12.2"
7
+ version = "12.12.4"
8
8
  description = "Instant codebase comprehension for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1364,7 +1364,7 @@ MAP_METADATA: dict[str, dict[str, object]] = {
1364
1364
  "peer": True,
1365
1365
  "graph": "PageRank + Tarjan + Louvain + layers",
1366
1366
  "note": "Graph algorithms (PageRank, SCC, Louvain, Fiedler) on tree-sitter ASTs fused with git history in SQLite. 122 MCP tools, 155 CLI commands. 19 Python idiom detectors (v12.7+).",
1367
- "version_evaluated": "12.12.2",
1367
+ "version_evaluated": "12.12.4",
1368
1368
  "repo_url": "https://github.com/Cranot/roam-code",
1369
1369
  },
1370
1370
  "CKB/CodeMCP": {
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://schemas.modelcontextprotocol.io/server-card/v1",
3
3
  "name": "roam-code",
4
4
  "display_name": "roam — instant codebase intelligence",
5
- "version": "12.12.2",
5
+ "version": "12.12.4",
6
6
  "description": "Architectural sight for AI agents before they edit. Pre-indexes symbols, call graphs, dependencies, architecture layers, and git history into a local SQLite DB. 122 MCP tools, 10 resources, 5 prompts, 27 languages. 100% local, zero API keys.",
7
7
  "vendor": {
8
8
  "name": "Cranot",
@@ -51,15 +51,15 @@
51
51
  },
52
52
  "capabilities": {
53
53
  "tools": {
54
- "total": 120,
54
+ "total": 122,
55
55
  "presets": {
56
- "core": 33,
56
+ "core": 35,
57
57
  "review": 50,
58
58
  "refactor": 60,
59
59
  "debug": 55,
60
60
  "architecture": 70,
61
61
  "compliance": 14,
62
- "full": 120
62
+ "full": 122
63
63
  },
64
64
  "tasks_api": {
65
65
  "supported": true,
@@ -2250,6 +2250,7 @@ def retrieve_context(
2250
2250
  k: int = 0,
2251
2251
  rerank: str = "fast",
2252
2252
  seed_files: str = "",
2253
+ dry_run: bool = False,
2253
2254
  root: str = ".",
2254
2255
  ctx: _Context | None = None,
2255
2256
  ) -> dict:
@@ -2281,6 +2282,15 @@ def retrieve_context(
2281
2282
  seed_files: comma-separated file paths to seed personalised PageRank
2282
2283
  (e.g. ``"src/auth.py,src/session.py"``). Falls back to
2283
2284
  symbol-token inference from *task* when empty.
2285
+ dry_run: return the search plan (candidate ids, scores, locations)
2286
+ without fetching span content. Useful when an agent wants to
2287
+ preview what *would* be retrieved before paying the token cost.
2288
+
2289
+ The response's ``summary.low_confidence`` boolean is True when
2290
+ the top result probably doesn't match the task — branch on this
2291
+ to ask the user for clarification rather than chasing a likely
2292
+ red herring. (v12.12: this was previously only available by
2293
+ parsing the verdict string.)
2284
2294
  """
2285
2295
  if _mcp_session is not None:
2286
2296
  _mcp_session.remember_task_hint(ctx, task)
@@ -2303,6 +2313,8 @@ def retrieve_context(
2303
2313
  path = raw.strip()
2304
2314
  if path:
2305
2315
  args.extend(["--seed-files", path])
2316
+ if dry_run:
2317
+ args.append("--dry-run")
2306
2318
  return _run_roam(args, root)
2307
2319
 
2308
2320
 
@@ -2356,6 +2368,7 @@ def fleet_plan(
2356
2368
  def critique_patch(
2357
2369
  diff_text: str,
2358
2370
  high_callers: int = 10,
2371
+ intent: str = "",
2359
2372
  root: str = ".",
2360
2373
  ) -> dict:
2361
2374
  """Verify a unified diff against the indexed roam graph.
@@ -2371,6 +2384,12 @@ def critique_patch(
2371
2384
  (which produces a vibe score). Critique grounds every finding in a
2372
2385
  DB query.
2373
2386
 
2387
+ The response carries ``bench_hint`` at top level and inside
2388
+ ``summary`` when the diff touches a structurally hot path
2389
+ (retrieve/, graph/, languages/, taint, critique). Branch on this
2390
+ field to suggest the right validation step alongside the standard
2391
+ findings.
2392
+
2374
2393
  Parameters
2375
2394
  ----------
2376
2395
  diff_text:
@@ -2378,6 +2397,11 @@ def critique_patch(
2378
2397
  ``gh pr diff <id>``.
2379
2398
  high_callers:
2380
2399
  Threshold for the blast-radius warning. Default 10.
2400
+ intent:
2401
+ Optional PR title or commit subject. When supplied, the
2402
+ intent-vs-semantic-diff check fires (a rename intent that
2403
+ produces non-rename changes flags as misalignment). Falls
2404
+ back to the latest git commit subject when empty.
2381
2405
  """
2382
2406
  import json as _json
2383
2407
  import subprocess
@@ -2415,6 +2439,8 @@ def critique_patch(
2415
2439
  args = [sys.executable, "-m", "roam", "--json", "critique"]
2416
2440
  if high_callers != 10:
2417
2441
  args += ["--high-callers", str(high_callers)]
2442
+ if intent:
2443
+ args += ["--intent", intent]
2418
2444
  proc = subprocess.run(
2419
2445
  args,
2420
2446
  cwd=root,
@@ -2693,6 +2719,7 @@ def oracle_batch(items: list, root: str = ".") -> dict:
2693
2719
  def taint(
2694
2720
  rules_dir: str = "",
2695
2721
  rule: str = "",
2722
+ rules_pack: str = "",
2696
2723
  ci: bool = False,
2697
2724
  root: str = ".",
2698
2725
  ) -> dict:
@@ -2702,12 +2729,22 @@ def taint(
2702
2729
  the LLM-augmented ``roam_taint_classify``. Returns reach-only
2703
2730
  findings with OpenVEX-shaped status/justification fields ready for
2704
2731
  SBOM/CGA embedding.
2732
+
2733
+ Parameters
2734
+ ----------
2735
+ rules_pack: shorthand for filtering to a single starter pack.
2736
+ Accepts ``sqli``, ``xss``, ``ssrf``, ``path-traversal``,
2737
+ ``command-injection``, ``deserialization``, ``open-redirect``,
2738
+ ``urllib``, ``socketio``, ``fileupload``. Equivalent to
2739
+ passing ``--rules-pack`` on the CLI.
2705
2740
  """
2706
2741
  args = ["taint"]
2707
2742
  if rules_dir:
2708
2743
  args.extend(["--rules-dir", rules_dir])
2709
2744
  if rule:
2710
2745
  args.extend(["--rule", rule])
2746
+ if rules_pack:
2747
+ args.extend(["--rules-pack", rules_pack])
2711
2748
  if ci:
2712
2749
  args.append("--ci")
2713
2750
  return _run_roam(args, root)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roam-code
3
- Version: 12.12.2
3
+ Version: 12.12.4
4
4
  Summary: Instant codebase comprehension for AI coding agents
5
5
  Author: CosmoHac
6
6
  License-Expression: MIT
@@ -327,7 +327,7 @@ roam health
327
327
 
328
328
  ## Commands
329
329
 
330
- **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 150 commands are detail surface for specialised workflows (taint, fleet, cga, oracle, eval, …) — they're called by agents on demand, not memorised. This is intentional design; under the hood the canonical surface is **155 commands organised into 7 categories**, but you don't need to know that to start.
330
+ **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 150 commands are detail surface for specialised workflows (taint, fleet, cga, oracle, eval, …) — they're called by agents on demand, not memorised. This is intentional design; under the hood the canonical surface is **155 commands organised into 7 categories** (plus 6 aliases for muscle memory: `algo` → `math`, `weather` → `churn`, `digest` / `snapshot` / `trend` → `trends`, `onboard` → `understand`), but you don't need to know that to start.
331
331
 
332
332
  <details>
333
333
  <summary><strong>Full command reference</strong></summary>
@@ -1610,8 +1610,8 @@ roam-code/
1610
1610
  ├── action.yml # Reusable GitHub Action
1611
1611
  ├── src/roam/
1612
1612
  │ ├── __init__.py # Version (from pyproject.toml)
1613
- │ ├── cli.py # Click CLI (152 commands)
1614
- │ ├── mcp_server.py # MCP server (118 tools, 10 resources, 5 prompts)
1613
+ │ ├── cli.py # Click CLI (155 canonical + 6 aliases)
1614
+ │ ├── mcp_server.py # MCP server (122 tools, 10 resources, 5 prompts)
1615
1615
  │ ├── db/
1616
1616
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
1617
1617
  │ │ ├── schema.py # Tables, indexes, migrations
@@ -1705,7 +1705,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1705
1705
  ### Shipped
1706
1706
 
1707
1707
  - [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
1708
- - [x] Full command and MCP inventory parity in docs: 152 CLI commands and 118 MCP tools.
1708
+ - [x] Full command and MCP inventory parity in docs: 155 canonical CLI commands and 122 MCP tools.
1709
1709
  - [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
1710
1710
  - [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
1711
1711
  - [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
@@ -204,6 +204,33 @@ class TestVersionConsistency:
204
204
  "re-copy after editing either file."
205
205
  )
206
206
 
207
+ def test_card_tool_count_matches_live_count(self):
208
+ """v12.12.4 — the card's ``capabilities.tools.total`` must
209
+ match the live MCP tool count from ``surface_counts``. The
210
+ card had been at 120 with 33-tool ``core`` preset for several
211
+ releases while the live numbers had grown to 122 / 35.
212
+ """
213
+ try:
214
+ from roam.surface_counts import collect_surface_counts
215
+ except ImportError:
216
+ pytest.skip("surface_counts unavailable")
217
+ live = collect_surface_counts()
218
+ card = json.loads((ROOT / "docs" / "site" / ".well-known" / "mcp-server-card.json").read_text(encoding="utf-8"))
219
+ live_total = live["mcp"]["registered_tools"]
220
+ live_core = live["mcp"]["core_tools"]
221
+ card_total = card["capabilities"]["tools"]["total"]
222
+ card_core = card["capabilities"]["tools"]["presets"]["core"]
223
+ card_full = card["capabilities"]["tools"]["presets"]["full"]
224
+ assert card_total == live_total, (
225
+ f"card capabilities.tools.total = {card_total} but live MCP tool count = {live_total}"
226
+ )
227
+ assert card_core == live_core, (
228
+ f"card capabilities.tools.presets.core = {card_core} but live core preset count = {live_core}"
229
+ )
230
+ assert card_full == live_total, (
231
+ f"card capabilities.tools.presets.full = {card_full} but live total = {live_total}"
232
+ )
233
+
207
234
  def test_landscape_json_self_row_version_matches(self):
208
235
  """The roam-code row in landscape.json should show the current
209
236
  package version (or a recent nearby tag)."""
@@ -120,11 +120,14 @@ COMMAND_ARGS = {
120
120
  FRAGILE_COMMANDS = {
121
121
  "affected-tests", # needs staged changes or a target with test coverage
122
122
  "coverage-gaps", # needs test file mapping
123
- "dead", # summary envelope misses 'verdict' on the minimal fixture
124
123
  "deps", # symbol resolution against minimal `models`/`service`/`utils`
125
124
  "diff", # needs uncommitted changes
126
125
  "pr-risk", # needs uncommitted changes or PR context
127
126
  "report", # may need specific report config or flags
127
+ # ``dead`` was xfailed in v11.x because its summary envelope was
128
+ # missing ``verdict``. v12.x added the verdict field; --runxfail
129
+ # confirms all four parametrized tests pass on the minimal
130
+ # fixture. Removed from the fragile set in v12.12.2.
128
131
  }
129
132
 
130
133
 
File without changes
File without changes
File without changes
File without changes