roam-code 12.46__tar.gz → 12.47__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 (675) hide show
  1. {roam_code-12.46 → roam_code-12.47}/LICENSE +14 -12
  2. {roam_code-12.46 → roam_code-12.47}/PKG-INFO +41 -37
  3. {roam_code-12.46 → roam_code-12.47}/README.md +35 -33
  4. {roam_code-12.46 → roam_code-12.47}/pyproject.toml +6 -4
  5. {roam_code-12.46 → roam_code-12.47}/src/roam/__main__.py +1 -1
  6. {roam_code-12.46 → roam_code-12.47}/src/roam/attest/__init__.py +1 -3
  7. {roam_code-12.46 → roam_code-12.47}/src/roam/capability.py +1 -1
  8. {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/detectors.py +42 -42
  9. {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/python_idioms.py +1 -1
  10. {roam_code-12.46 → roam_code-12.47}/src/roam/cli.py +14 -12
  11. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/audit_trail_helpers.py +1 -2
  12. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_adversarial.py +2 -2
  13. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_affected.py +1 -1
  14. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_agent_export.py +2 -2
  15. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_api.py +1 -1
  16. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_article_12_check.py +8 -7
  17. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_audit.py +7 -8
  18. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_audit_trail_export.py +3 -3
  19. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_auth_gaps.py +5 -5
  20. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_capabilities.py +1 -1
  21. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_changelog.py +1 -1
  22. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_clones.py +2 -2
  23. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_compare.py +1 -1
  24. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_config.py +7 -7
  25. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_context.py +9 -9
  26. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_conventions.py +1 -1
  27. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_coverage_gaps.py +1 -1
  28. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_critique.py +4 -4
  29. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dead.py +10 -10
  30. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_debt.py +2 -2
  31. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_describe.py +1 -1
  32. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_diagnose.py +2 -2
  33. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_diff.py +3 -3
  34. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_disambiguate.py +1 -1
  35. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_docs_coverage.py +2 -2
  36. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_doctor.py +3 -3
  37. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_eval_retrieve.py +1 -1
  38. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_exit_codes.py +1 -1
  39. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fan.py +1 -1
  40. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fn_coupling.py +2 -2
  41. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_graph_export.py +1 -1
  42. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_graph_stats.py +1 -1
  43. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_health.py +7 -7
  44. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_help_search.py +1 -1
  45. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_hotspots.py +2 -2
  46. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_impact.py +5 -5
  47. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_index_stats.py +1 -1
  48. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_map.py +3 -3
  49. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_math.py +11 -11
  50. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_mcp_status.py +1 -1
  51. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_metrics_push.py +0 -2
  52. roam_code-12.47/src/roam/commands/cmd_migration_plan.py +303 -0
  53. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_migration_safety.py +2 -4
  54. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_missing_index.py +2 -2
  55. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_oracle.py +4 -5
  56. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_orphan_imports.py +4 -4
  57. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_over_fetch.py +6 -6
  58. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_permit.py +5 -6
  59. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_plugins.py +1 -1
  60. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_postmortem.py +5 -12
  61. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_analyze.py +1 -3
  62. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_comment_render.py +5 -5
  63. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_prep.py +1 -1
  64. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_risk.py +2 -2
  65. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pre_commit.py +1 -1
  66. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_preflight.py +4 -4
  67. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_recipes.py +1 -1
  68. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_recommend.py +1 -1
  69. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_reset.py +2 -2
  70. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_retrieve.py +2 -2
  71. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_risk.py +1 -1
  72. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_rules.py +1 -2
  73. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_sbom.py +6 -6
  74. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_search.py +8 -8
  75. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_smells.py +6 -8
  76. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_stats.py +1 -1
  77. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_taint.py +1 -1
  78. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_telemetry.py +1 -1
  79. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_test_impact.py +1 -1
  80. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_test_pyramid.py +1 -1
  81. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_timeline.py +1 -1
  82. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_tour.py +2 -2
  83. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_version.py +2 -2
  84. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_watch.py +5 -5
  85. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_weather.py +1 -1
  86. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_why_fail.py +1 -1
  87. roam_code-12.47/src/roam/commands/cmd_why_slow.py +211 -0
  88. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_workflow.py +2 -2
  89. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/metrics_history.py +1 -1
  90. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/next_steps.py +1 -1
  91. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/resolve.py +3 -3
  92. {roam_code-12.46 → roam_code-12.47}/src/roam/competitor_site_data.py +4 -9
  93. {roam_code-12.46 → roam_code-12.47}/src/roam/config.py +1 -1
  94. {roam_code-12.46 → roam_code-12.47}/src/roam/db/connection.py +1 -1
  95. {roam_code-12.46 → roam_code-12.47}/src/roam/db/queries.py +1 -1
  96. {roam_code-12.46 → roam_code-12.47}/src/roam/fleet/__init__.py +2 -4
  97. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/builder.py +3 -3
  98. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/cycles.py +1 -1
  99. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/partition.py +7 -7
  100. {roam_code-12.46 → roam_code-12.47}/src/roam/index/complexity.py +1 -1
  101. {roam_code-12.46 → roam_code-12.47}/src/roam/index/indexer.py +3 -3
  102. {roam_code-12.46 → roam_code-12.47}/src/roam/index/parser.py +2 -1
  103. {roam_code-12.46 → roam_code-12.47}/src/roam/index/symbols.py +1 -1
  104. roam_code-12.47/src/roam/languages/dart_lang.py +119 -0
  105. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/query_engine.py +5 -5
  106. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/registry.py +6 -0
  107. {roam_code-12.46 → roam_code-12.47}/src/roam/mcp-server-card.json +5 -5
  108. {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/concurrency.py +2 -2
  109. {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/sampling.py +1 -1
  110. {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_server.py +27 -29
  111. {roam_code-12.46 → roam_code-12.47}/src/roam/observability.py +1 -1
  112. {roam_code-12.46 → roam_code-12.47}/src/roam/output/confidence.py +1 -1
  113. {roam_code-12.46 → roam_code-12.47}/src/roam/output/file_role_hints.py +3 -3
  114. {roam_code-12.46 → roam_code-12.47}/src/roam/output/formatter.py +3 -3
  115. {roam_code-12.46 → roam_code-12.47}/src/roam/output/project_shape.py +3 -3
  116. {roam_code-12.46 → roam_code-12.47}/src/roam/output/sarif.py +2 -2
  117. {roam_code-12.46 → roam_code-12.47}/src/roam/plugins.py +1 -1
  118. {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/pipeline.py +2 -2
  119. {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/rerank.py +4 -7
  120. {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/seeds.py +3 -3
  121. {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/daemon.py +1 -3
  122. {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/lock_modes.py +0 -1
  123. {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/lockmgr.py +1 -2
  124. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_engine.py +6 -8
  125. {roam_code-12.46 → roam_code-12.47}/src/roam/telemetry.py +1 -1
  126. {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/PKG-INFO +41 -37
  127. {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/SOURCES.txt +8 -1
  128. {roam_code-12.46 → roam_code-12.47}/tests/test_ask.py +2 -2
  129. {roam_code-12.46 → roam_code-12.47}/tests/test_capability_registry.py +1 -1
  130. {roam_code-12.46 → roam_code-12.47}/tests/test_compare_cli.py +1 -1
  131. {roam_code-12.46 → roam_code-12.47}/tests/test_competitor_site_data.py +2 -3
  132. {roam_code-12.46 → roam_code-12.47}/tests/test_context_propagation.py +1 -1
  133. roam_code-12.47/tests/test_dart.py +185 -0
  134. {roam_code-12.46 → roam_code-12.47}/tests/test_defer_loading.py +6 -6
  135. {roam_code-12.46 → roam_code-12.47}/tests/test_doc_consistency.py +10 -4
  136. roam_code-12.47/tests/test_docs_site_quality.py +86 -0
  137. {roam_code-12.46 → roam_code-12.47}/tests/test_doctor.py +1 -1
  138. {roam_code-12.46 → roam_code-12.47}/tests/test_exit_codes.py +1 -1
  139. {roam_code-12.46 → roam_code-12.47}/tests/test_health_gate.py +1 -1
  140. {roam_code-12.46 → roam_code-12.47}/tests/test_laravel_fp_fixes.py +1 -1
  141. {roam_code-12.46 → roam_code-12.47}/tests/test_math.py +8 -8
  142. {roam_code-12.46 → roam_code-12.47}/tests/test_math_fp_fixes.py +2 -2
  143. {roam_code-12.46 → roam_code-12.47}/tests/test_mcp_extras.py +2 -2
  144. {roam_code-12.46 → roam_code-12.47}/tests/test_mcp_server.py +2 -2
  145. roam_code-12.47/tests/test_migration_plan.py +98 -0
  146. roam_code-12.47/tests/test_no_internal_language.py +192 -0
  147. {roam_code-12.46 → roam_code-12.47}/tests/test_pagerank_truncation.py +2 -2
  148. roam_code-12.46/tests/test_pivot_phase0_commands.py → roam_code-12.47/tests/test_phase0_commands.py +3 -4
  149. {roam_code-12.46 → roam_code-12.47}/tests/test_python_pivot.py +1 -1
  150. {roam_code-12.46 → roam_code-12.47}/tests/test_regression_fp_corpus.py +5 -5
  151. {roam_code-12.46 → roam_code-12.47}/tests/test_sarif_enrichment.py +1 -1
  152. {roam_code-12.46 → roam_code-12.47}/tests/test_search_explain.py +1 -1
  153. {roam_code-12.46 → roam_code-12.47}/tests/test_skill_generate.py +1 -1
  154. {roam_code-12.46 → roam_code-12.47}/tests/test_surface_counts.py +14 -8
  155. {roam_code-12.46 → roam_code-12.47}/tests/test_v1216_passes.py +2 -2
  156. {roam_code-12.46 → roam_code-12.47}/tests/test_v1216_passes_41_50.py +2 -2
  157. {roam_code-12.46 → roam_code-12.47}/tests/test_v1219_passes_91_100.py +5 -6
  158. {roam_code-12.46 → roam_code-12.47}/tests/test_v1220_passes_101_110.py +7 -7
  159. {roam_code-12.46 → roam_code-12.47}/tests/test_v1221_query_timeout.py +2 -2
  160. {roam_code-12.46 → roam_code-12.47}/tests/test_v1221_untested_commands.py +1 -1
  161. roam_code-12.47/tests/test_why_slow.py +178 -0
  162. roam_code-12.46/tests/test_docs_site_quality.py +0 -81
  163. {roam_code-12.46 → roam_code-12.47}/setup.cfg +0 -0
  164. {roam_code-12.46 → roam_code-12.47}/src/roam/__init__.py +0 -0
  165. {roam_code-12.46 → roam_code-12.47}/src/roam/analysis/__init__.py +0 -0
  166. {roam_code-12.46 → roam_code-12.47}/src/roam/analysis/effects.py +0 -0
  167. {roam_code-12.46 → roam_code-12.47}/src/roam/analysis/taint.py +0 -0
  168. {roam_code-12.46 → roam_code-12.47}/src/roam/api.py +0 -0
  169. {roam_code-12.46 → roam_code-12.47}/src/roam/ask/__init__.py +0 -0
  170. {roam_code-12.46 → roam_code-12.47}/src/roam/ask/classifier.py +0 -0
  171. {roam_code-12.46 → roam_code-12.47}/src/roam/ask/recipes.py +0 -0
  172. {roam_code-12.46 → roam_code-12.47}/src/roam/ask/runner.py +0 -0
  173. {roam_code-12.46 → roam_code-12.47}/src/roam/ask/workflow.py +0 -0
  174. {roam_code-12.46 → roam_code-12.47}/src/roam/attest/cga.py +0 -0
  175. {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/__init__.py +0 -0
  176. {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/base.py +0 -0
  177. {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_config.py +0 -0
  178. {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_django.py +0 -0
  179. {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_protobuf.py +0 -0
  180. {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_rest_api.py +0 -0
  181. {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_salesforce.py +0 -0
  182. {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_template.py +0 -0
  183. {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/registry.py +0 -0
  184. {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/__init__.py +0 -0
  185. {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/fixes.py +0 -0
  186. {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/smells.py +0 -0
  187. {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/tasks.py +0 -0
  188. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/__init__.py +0 -0
  189. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/changed_files.py +0 -0
  190. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_adrs.py +0 -0
  191. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_affected_tests.py +0 -0
  192. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_agent_context.py +0 -0
  193. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_agent_plan.py +0 -0
  194. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ai_ratio.py +0 -0
  195. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ai_readiness.py +0 -0
  196. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_alerts.py +0 -0
  197. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_annotate.py +0 -0
  198. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_api_changes.py +0 -0
  199. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_api_drift.py +0 -0
  200. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ask.py +0 -0
  201. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_attest.py +0 -0
  202. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_audit_trail_conformance.py +0 -0
  203. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_audit_trail_verify.py +0 -0
  204. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_bisect.py +0 -0
  205. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_breaking.py +0 -0
  206. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_budget.py +0 -0
  207. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_bus_factor.py +0 -0
  208. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_capsule.py +0 -0
  209. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_cga.py +0 -0
  210. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_check_rules.py +0 -0
  211. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ci_setup.py +0 -0
  212. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_clean.py +0 -0
  213. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_closure.py +0 -0
  214. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_clusters.py +0 -0
  215. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_codeowners.py +0 -0
  216. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_complexity.py +0 -0
  217. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_congestion.py +0 -0
  218. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_coupling.py +0 -0
  219. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_cut.py +0 -0
  220. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dark_matter.py +0 -0
  221. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dashboard.py +0 -0
  222. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_deps.py +0 -0
  223. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dev_profile.py +0 -0
  224. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_doc_staleness.py +0 -0
  225. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dogfood.py +0 -0
  226. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_drift.py +0 -0
  227. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_duplicates.py +0 -0
  228. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_effects.py +0 -0
  229. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_endpoints.py +0 -0
  230. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_entry_points.py +0 -0
  231. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_file.py +0 -0
  232. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fingerprint.py +0 -0
  233. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fitness.py +0 -0
  234. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_flag_dead.py +0 -0
  235. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fleet.py +0 -0
  236. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_forecast.py +0 -0
  237. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_grep.py +0 -0
  238. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_guard.py +0 -0
  239. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_hooks.py +0 -0
  240. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_hover.py +0 -0
  241. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_index.py +0 -0
  242. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_index_bundle.py +0 -0
  243. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ingest_trace.py +0 -0
  244. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_init.py +0 -0
  245. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_intent.py +0 -0
  246. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_invariants.py +0 -0
  247. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_layers.py +0 -0
  248. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_mcp_setup.py +0 -0
  249. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_metrics.py +0 -0
  250. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_minimap.py +0 -0
  251. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_module.py +0 -0
  252. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_mutate.py +0 -0
  253. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_n1.py +0 -0
  254. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_orchestrate.py +0 -0
  255. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_orphan_routes.py +0 -0
  256. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_owner.py +0 -0
  257. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_partition.py +0 -0
  258. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_path_coverage.py +0 -0
  259. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_patterns.py +0 -0
  260. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_plan.py +0 -0
  261. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_plan_refactor.py +0 -0
  262. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_diff.py +0 -0
  263. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_py_modern.py +0 -0
  264. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_py_types.py +0 -0
  265. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pytest_fixtures.py +0 -0
  266. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_relate.py +0 -0
  267. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_report.py +0 -0
  268. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_rules_validate.py +0 -0
  269. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_safe_delete.py +0 -0
  270. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_safe_zones.py +0 -0
  271. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_schema.py +0 -0
  272. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_search_semantic.py +0 -0
  273. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_secrets.py +0 -0
  274. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_semantic_diff.py +0 -0
  275. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_simulate.py +0 -0
  276. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_simulate_departure.py +0 -0
  277. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_sketch.py +0 -0
  278. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_skill_generate.py +0 -0
  279. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_spectral.py +0 -0
  280. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_split.py +0 -0
  281. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_suggest_refactoring.py +0 -0
  282. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_suggest_reviewers.py +0 -0
  283. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_supply_chain.py +0 -0
  284. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_suppress.py +0 -0
  285. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_symbol.py +0 -0
  286. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_syntax_check.py +0 -0
  287. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_test_gaps.py +0 -0
  288. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_test_scaffold.py +0 -0
  289. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_testmap.py +0 -0
  290. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_trace.py +0 -0
  291. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_trends.py +0 -0
  292. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_triage.py +0 -0
  293. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_understand.py +0 -0
  294. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_uses.py +0 -0
  295. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_verify.py +0 -0
  296. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_verify_imports.py +0 -0
  297. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_vibe_check.py +0 -0
  298. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_visualize.py +0 -0
  299. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_vuln_map.py +0 -0
  300. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_vuln_reach.py +0 -0
  301. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_vulns.py +0 -0
  302. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_why.py +0 -0
  303. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ws.py +0 -0
  304. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_xlang.py +0 -0
  305. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/codeowners_helpers.py +0 -0
  306. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/context_helpers.py +0 -0
  307. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/finding_suppress.py +0 -0
  308. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/gate_presets.py +0 -0
  309. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/git_helpers.py +0 -0
  310. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/graph_helpers.py +0 -0
  311. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/pr_analyze/__init__.py +0 -0
  312. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/pr_analyze/audit_trail.py +0 -0
  313. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/pr_analyze/cache.py +0 -0
  314. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/pr_analyze/rules.py +0 -0
  315. {roam_code-12.46 → roam_code-12.47}/src/roam/commands/suppression.py +0 -0
  316. {roam_code-12.46 → roam_code-12.47}/src/roam/coverage_reports.py +0 -0
  317. {roam_code-12.46 → roam_code-12.47}/src/roam/critique/__init__.py +0 -0
  318. {roam_code-12.46 → roam_code-12.47}/src/roam/critique/aggregator.py +0 -0
  319. {roam_code-12.46 → roam_code-12.47}/src/roam/critique/checks.py +0 -0
  320. {roam_code-12.46 → roam_code-12.47}/src/roam/db/__init__.py +0 -0
  321. {roam_code-12.46 → roam_code-12.47}/src/roam/db/schema.py +0 -0
  322. {roam_code-12.46 → roam_code-12.47}/src/roam/eval/__init__.py +0 -0
  323. {roam_code-12.46 → roam_code-12.47}/src/roam/eval/harness.py +0 -0
  324. {roam_code-12.46 → roam_code-12.47}/src/roam/exit_codes.py +0 -0
  325. {roam_code-12.46 → roam_code-12.47}/src/roam/fleet/adapters.py +0 -0
  326. {roam_code-12.46 → roam_code-12.47}/src/roam/fleet/manifest.py +0 -0
  327. {roam_code-12.46 → roam_code-12.47}/src/roam/git_utils.py +0 -0
  328. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/__init__.py +0 -0
  329. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/anomaly.py +0 -0
  330. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/clone_detect.py +0 -0
  331. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/clusters.py +0 -0
  332. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/dark_matter.py +0 -0
  333. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/diff.py +0 -0
  334. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/fingerprint.py +0 -0
  335. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/layers.py +0 -0
  336. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/pagerank.py +0 -0
  337. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/pathfinding.py +0 -0
  338. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/propagation.py +0 -0
  339. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/simulate.py +0 -0
  340. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/spectral.py +0 -0
  341. {roam_code-12.46 → roam_code-12.47}/src/roam/graph/stats.py +0 -0
  342. {roam_code-12.46 → roam_code-12.47}/src/roam/index/__init__.py +0 -0
  343. {roam_code-12.46 → roam_code-12.47}/src/roam/index/discovery.py +0 -0
  344. {roam_code-12.46 → roam_code-12.47}/src/roam/index/django_post.py +0 -0
  345. {roam_code-12.46 → roam_code-12.47}/src/roam/index/file_roles.py +0 -0
  346. {roam_code-12.46 → roam_code-12.47}/src/roam/index/git_stats.py +0 -0
  347. {roam_code-12.46 → roam_code-12.47}/src/roam/index/gitignore.py +0 -0
  348. {roam_code-12.46 → roam_code-12.47}/src/roam/index/incremental.py +0 -0
  349. {roam_code-12.46 → roam_code-12.47}/src/roam/index/pytest_fixtures.py +0 -0
  350. {roam_code-12.46 → roam_code-12.47}/src/roam/index/registry_dispatch.py +0 -0
  351. {roam_code-12.46 → roam_code-12.47}/src/roam/index/relations.py +0 -0
  352. {roam_code-12.46 → roam_code-12.47}/src/roam/index/test_conventions.py +0 -0
  353. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/__init__.py +0 -0
  354. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/apex_lang.py +0 -0
  355. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/aura_lang.py +0 -0
  356. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/base.py +0 -0
  357. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/c_lang.py +0 -0
  358. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/csharp_lang.py +0 -0
  359. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/extractor_schema.py +0 -0
  360. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/extractors/kotlin.yaml +0 -0
  361. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/foxpro_lang.py +0 -0
  362. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/generic_lang.py +0 -0
  363. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/go_lang.py +0 -0
  364. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/hcl_lang.py +0 -0
  365. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/java_lang.py +0 -0
  366. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/javascript_lang.py +0 -0
  367. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/kotlin_lang.py +0 -0
  368. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/php_lang.py +0 -0
  369. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/python_lang.py +0 -0
  370. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/ruby_lang.py +0 -0
  371. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/rust_lang.py +0 -0
  372. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/scala_lang.py +0 -0
  373. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/sfxml_lang.py +0 -0
  374. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/sql_lang.py +0 -0
  375. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/swift_lang.py +0 -0
  376. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/typescript_lang.py +0 -0
  377. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/visualforce_lang.py +0 -0
  378. {roam_code-12.46 → roam_code-12.47}/src/roam/languages/yaml_lang.py +0 -0
  379. {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/__init__.py +0 -0
  380. {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/completions.py +0 -0
  381. {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/progress.py +0 -0
  382. {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/session.py +0 -0
  383. {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/watcher.py +0 -0
  384. {roam_code-12.46 → roam_code-12.47}/src/roam/output/__init__.py +0 -0
  385. {roam_code-12.46 → roam_code-12.47}/src/roam/output/errors.py +0 -0
  386. {roam_code-12.46 → roam_code-12.47}/src/roam/output/framework_filter.py +0 -0
  387. {roam_code-12.46 → roam_code-12.47}/src/roam/output/mermaid.py +0 -0
  388. {roam_code-12.46 → roam_code-12.47}/src/roam/output/schema_registry.py +0 -0
  389. {roam_code-12.46 → roam_code-12.47}/src/roam/refactor/__init__.py +0 -0
  390. {roam_code-12.46 → roam_code-12.47}/src/roam/refactor/codegen.py +0 -0
  391. {roam_code-12.46 → roam_code-12.47}/src/roam/refactor/transforms.py +0 -0
  392. {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/__init__.py +0 -0
  393. {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/learned_ranker.py +0 -0
  394. {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/semantic.py +0 -0
  395. {roam_code-12.46 → roam_code-12.47}/src/roam/rules/__init__.py +0 -0
  396. {roam_code-12.46 → roam_code-12.47}/src/roam/rules/ast_match.py +0 -0
  397. {roam_code-12.46 → roam_code-12.47}/src/roam/rules/builtin.py +0 -0
  398. {roam_code-12.46 → roam_code-12.47}/src/roam/rules/dataflow.py +0 -0
  399. {roam_code-12.46 → roam_code-12.47}/src/roam/rules/engine.py +0 -0
  400. {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/__init__.py +0 -0
  401. {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/graph_backend.py +0 -0
  402. {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/hotspots.py +0 -0
  403. {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/trace_ingest.py +0 -0
  404. {roam_code-12.46 → roam_code-12.47}/src/roam/search/__init__.py +0 -0
  405. {roam_code-12.46 → roam_code-12.47}/src/roam/search/framework_packs.py +0 -0
  406. {roam_code-12.46 → roam_code-12.47}/src/roam/search/index_embeddings.py +0 -0
  407. {roam_code-12.46 → roam_code-12.47}/src/roam/search/onnx_embeddings.py +0 -0
  408. {roam_code-12.46 → roam_code-12.47}/src/roam/search/tfidf.py +0 -0
  409. {roam_code-12.46 → roam_code-12.47}/src/roam/security/__init__.py +0 -0
  410. {roam_code-12.46 → roam_code-12.47}/src/roam/security/aibom_extension.py +0 -0
  411. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_classifier.py +0 -0
  412. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/api_error_leak.yaml +0 -0
  413. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/java_fileupload_path_traversal.yaml +0 -0
  414. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_insecure_jwt_decode.yaml +0 -0
  415. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_localstorage_secrets.yaml +0 -0
  416. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_prototype_pollution.yaml +0 -0
  417. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_ssrf.yaml +0 -0
  418. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_xss.yaml +0 -0
  419. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_basic.yaml +0 -0
  420. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_deserialization.yaml +0 -0
  421. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_path_traversal.yaml +0 -0
  422. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_socketio_remote_source.yaml +0 -0
  423. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_sqli.yaml +0 -0
  424. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_urllib_open_redirect.yaml +0 -0
  425. {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/vue_v_html.yaml +0 -0
  426. {roam_code-12.46 → roam_code-12.47}/src/roam/security/vuln_reach.py +0 -0
  427. {roam_code-12.46 → roam_code-12.47}/src/roam/security/vuln_store.py +0 -0
  428. {roam_code-12.46 → roam_code-12.47}/src/roam/surface_counts.py +0 -0
  429. {roam_code-12.46 → roam_code-12.47}/src/roam/templates/__init__.py +0 -0
  430. {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/Jenkinsfile +0 -0
  431. {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/__init__.py +0 -0
  432. {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/agent-review.yml +0 -0
  433. {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/azure-pipelines.yml +0 -0
  434. {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/bitbucket-pipelines.yml +0 -0
  435. {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/gitlab-ci.yml +0 -0
  436. {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/__init__.py +0 -0
  437. {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/aggregator.py +0 -0
  438. {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/api_scanner.py +0 -0
  439. {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/config.py +0 -0
  440. {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/db.py +0 -0
  441. {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/dependency_links.txt +0 -0
  442. {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/entry_points.txt +0 -0
  443. {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/requires.txt +0 -0
  444. {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/top_level.txt +0 -0
  445. {roam_code-12.46 → roam_code-12.47}/tests/test_adrs.py +0 -0
  446. {roam_code-12.46 → roam_code-12.47}/tests/test_adversarial.py +0 -0
  447. {roam_code-12.46 → roam_code-12.47}/tests/test_affected.py +0 -0
  448. {roam_code-12.46 → roam_code-12.47}/tests/test_agent_export.py +0 -0
  449. {roam_code-12.46 → roam_code-12.47}/tests/test_agent_mode.py +0 -0
  450. {roam_code-12.46 → roam_code-12.47}/tests/test_agent_plan_context.py +0 -0
  451. {roam_code-12.46 → roam_code-12.47}/tests/test_ai_ratio.py +0 -0
  452. {roam_code-12.46 → roam_code-12.47}/tests/test_ai_readiness.py +0 -0
  453. {roam_code-12.46 → roam_code-12.47}/tests/test_alerts_cmd.py +0 -0
  454. {roam_code-12.46 → roam_code-12.47}/tests/test_annotations.py +0 -0
  455. {roam_code-12.46 → roam_code-12.47}/tests/test_anomaly.py +0 -0
  456. {roam_code-12.46 → roam_code-12.47}/tests/test_api_changes.py +0 -0
  457. {roam_code-12.46 → roam_code-12.47}/tests/test_api_drift.py +0 -0
  458. {roam_code-12.46 → roam_code-12.47}/tests/test_attest.py +0 -0
  459. {roam_code-12.46 → roam_code-12.47}/tests/test_audit_trail_aggregate.py +0 -0
  460. {roam_code-12.46 → roam_code-12.47}/tests/test_audit_trail_conformance.py +0 -0
  461. {roam_code-12.46 → roam_code-12.47}/tests/test_audit_trail_sequence.py +0 -0
  462. {roam_code-12.46 → roam_code-12.47}/tests/test_audit_trail_verify.py +0 -0
  463. {roam_code-12.46 → roam_code-12.47}/tests/test_auth_gaps.py +0 -0
  464. {roam_code-12.46 → roam_code-12.47}/tests/test_backend_fixes_round2.py +0 -0
  465. {roam_code-12.46 → roam_code-12.47}/tests/test_backend_fixes_round3.py +0 -0
  466. {roam_code-12.46 → roam_code-12.47}/tests/test_basic.py +0 -0
  467. {roam_code-12.46 → roam_code-12.47}/tests/test_batch_mcp.py +0 -0
  468. {roam_code-12.46 → roam_code-12.47}/tests/test_bisect.py +0 -0
  469. {roam_code-12.46 → roam_code-12.47}/tests/test_bridge_django.py +0 -0
  470. {roam_code-12.46 → roam_code-12.47}/tests/test_bridges.py +0 -0
  471. {roam_code-12.46 → roam_code-12.47}/tests/test_bridges_extended.py +0 -0
  472. {roam_code-12.46 → roam_code-12.47}/tests/test_budget.py +0 -0
  473. {roam_code-12.46 → roam_code-12.47}/tests/test_budget_flag.py +0 -0
  474. {roam_code-12.46 → roam_code-12.47}/tests/test_budget_phase2.py +0 -0
  475. {roam_code-12.46 → roam_code-12.47}/tests/test_bus_factor.py +0 -0
  476. {roam_code-12.46 → roam_code-12.47}/tests/test_capsule.py +0 -0
  477. {roam_code-12.46 → roam_code-12.47}/tests/test_cga.py +0 -0
  478. {roam_code-12.46 → roam_code-12.47}/tests/test_check_rules.py +0 -0
  479. {roam_code-12.46 → roam_code-12.47}/tests/test_ci_gate_eval.py +0 -0
  480. {roam_code-12.46 → roam_code-12.47}/tests/test_ci_sarif_guard.py +0 -0
  481. {roam_code-12.46 → roam_code-12.47}/tests/test_ci_setup.py +0 -0
  482. {roam_code-12.46 → roam_code-12.47}/tests/test_clones.py +0 -0
  483. {roam_code-12.46 → roam_code-12.47}/tests/test_closure.py +0 -0
  484. {roam_code-12.46 → roam_code-12.47}/tests/test_codeowners.py +0 -0
  485. {roam_code-12.46 → roam_code-12.47}/tests/test_commands_architecture.py +0 -0
  486. {roam_code-12.46 → roam_code-12.47}/tests/test_commands_exploration.py +0 -0
  487. {roam_code-12.46 → roam_code-12.47}/tests/test_commands_health.py +0 -0
  488. {roam_code-12.46 → roam_code-12.47}/tests/test_commands_refactoring.py +0 -0
  489. {roam_code-12.46 → roam_code-12.47}/tests/test_commands_workflow.py +0 -0
  490. {roam_code-12.46 → roam_code-12.47}/tests/test_comprehensive.py +0 -0
  491. {roam_code-12.46 → roam_code-12.47}/tests/test_config.py +0 -0
  492. {roam_code-12.46 → roam_code-12.47}/tests/test_congestion.py +0 -0
  493. {roam_code-12.46 → roam_code-12.47}/tests/test_conventions_cmd.py +0 -0
  494. {roam_code-12.46 → roam_code-12.47}/tests/test_coverage_gaps_cmd.py +0 -0
  495. {roam_code-12.46 → roam_code-12.47}/tests/test_coverage_ingestion.py +0 -0
  496. {roam_code-12.46 → roam_code-12.47}/tests/test_critique.py +0 -0
  497. {roam_code-12.46 → roam_code-12.47}/tests/test_cut.py +0 -0
  498. {roam_code-12.46 → roam_code-12.47}/tests/test_dark_matter.py +0 -0
  499. {roam_code-12.46 → roam_code-12.47}/tests/test_dark_matter_helpers.py +0 -0
  500. {roam_code-12.46 → roam_code-12.47}/tests/test_dashboard.py +0 -0
  501. {roam_code-12.46 → roam_code-12.47}/tests/test_dataflow_dead.py +0 -0
  502. {roam_code-12.46 → roam_code-12.47}/tests/test_dead_aging.py +0 -0
  503. {roam_code-12.46 → roam_code-12.47}/tests/test_demo_gif_asset.py +0 -0
  504. {roam_code-12.46 → roam_code-12.47}/tests/test_describe.py +0 -0
  505. {roam_code-12.46 → roam_code-12.47}/tests/test_detail_flag_hints.py +0 -0
  506. {roam_code-12.46 → roam_code-12.47}/tests/test_detector_precision.py +0 -0
  507. {roam_code-12.46 → roam_code-12.47}/tests/test_deterministic_output.py +0 -0
  508. {roam_code-12.46 → roam_code-12.47}/tests/test_dev_profile.py +0 -0
  509. {roam_code-12.46 → roam_code-12.47}/tests/test_difficulty_scoring.py +0 -0
  510. {roam_code-12.46 → roam_code-12.47}/tests/test_doc_staleness.py +0 -0
  511. {roam_code-12.46 → roam_code-12.47}/tests/test_docker_assets.py +0 -0
  512. {roam_code-12.46 → roam_code-12.47}/tests/test_docs_coverage.py +0 -0
  513. {roam_code-12.46 → roam_code-12.47}/tests/test_dogfood.py +0 -0
  514. {roam_code-12.46 → roam_code-12.47}/tests/test_drift.py +0 -0
  515. {roam_code-12.46 → roam_code-12.47}/tests/test_drift_by_team.py +0 -0
  516. {roam_code-12.46 → roam_code-12.47}/tests/test_duplicates.py +0 -0
  517. {roam_code-12.46 → roam_code-12.47}/tests/test_effects.py +0 -0
  518. {roam_code-12.46 → roam_code-12.47}/tests/test_effects_propagation.py +0 -0
  519. {roam_code-12.46 → roam_code-12.47}/tests/test_endpoints.py +0 -0
  520. {roam_code-12.46 → roam_code-12.47}/tests/test_entry_points_cmd.py +0 -0
  521. {roam_code-12.46 → roam_code-12.47}/tests/test_eval_retrieve.py +0 -0
  522. {roam_code-12.46 → roam_code-12.47}/tests/test_except_pass_narrow.py +0 -0
  523. {roam_code-12.46 → roam_code-12.47}/tests/test_exclude_patterns.py +0 -0
  524. {roam_code-12.46 → roam_code-12.47}/tests/test_extractor_grammar_drift.py +0 -0
  525. {roam_code-12.46 → roam_code-12.47}/tests/test_fallback_contracts.py +0 -0
  526. {roam_code-12.46 → roam_code-12.47}/tests/test_file_roles.py +0 -0
  527. {roam_code-12.46 → roam_code-12.47}/tests/test_finding_suppress.py +0 -0
  528. {roam_code-12.46 → roam_code-12.47}/tests/test_fingerprint.py +0 -0
  529. {roam_code-12.46 → roam_code-12.47}/tests/test_fixes.py +0 -0
  530. {roam_code-12.46 → roam_code-12.47}/tests/test_flag_dead.py +0 -0
  531. {roam_code-12.46 → roam_code-12.47}/tests/test_fleet.py +0 -0
  532. {roam_code-12.46 → roam_code-12.47}/tests/test_fn_coupling.py +0 -0
  533. {roam_code-12.46 → roam_code-12.47}/tests/test_forecast.py +0 -0
  534. {roam_code-12.46 → roam_code-12.47}/tests/test_formatters.py +0 -0
  535. {roam_code-12.46 → roam_code-12.47}/tests/test_foxpro.py +0 -0
  536. {roam_code-12.46 → roam_code-12.47}/tests/test_framework_detection.py +0 -0
  537. {roam_code-12.46 → roam_code-12.47}/tests/test_gate_presets.py +0 -0
  538. {roam_code-12.46 → roam_code-12.47}/tests/test_git_helpers.py +0 -0
  539. {roam_code-12.46 → roam_code-12.47}/tests/test_git_utils.py +0 -0
  540. {roam_code-12.46 → roam_code-12.47}/tests/test_guard.py +0 -0
  541. {roam_code-12.46 → roam_code-12.47}/tests/test_hooks.py +0 -0
  542. {roam_code-12.46 → roam_code-12.47}/tests/test_hotspots.py +0 -0
  543. {roam_code-12.46 → roam_code-12.47}/tests/test_hover.py +0 -0
  544. {roam_code-12.46 → roam_code-12.47}/tests/test_index.py +0 -0
  545. {roam_code-12.46 → roam_code-12.47}/tests/test_index_bundle.py +0 -0
  546. {roam_code-12.46 → roam_code-12.47}/tests/test_init_cmd.py +0 -0
  547. {roam_code-12.46 → roam_code-12.47}/tests/test_install_check.py +0 -0
  548. {roam_code-12.46 → roam_code-12.47}/tests/test_intent.py +0 -0
  549. {roam_code-12.46 → roam_code-12.47}/tests/test_invariants.py +0 -0
  550. {roam_code-12.46 → roam_code-12.47}/tests/test_json_contracts.py +0 -0
  551. {roam_code-12.46 → roam_code-12.47}/tests/test_json_error_envelope.py +0 -0
  552. {roam_code-12.46 → roam_code-12.47}/tests/test_kotlin_swift_extractors.py +0 -0
  553. {roam_code-12.46 → roam_code-12.47}/tests/test_language_corpus.py +0 -0
  554. {roam_code-12.46 → roam_code-12.47}/tests/test_languages.py +0 -0
  555. {roam_code-12.46 → roam_code-12.47}/tests/test_library_api.py +0 -0
  556. {roam_code-12.46 → roam_code-12.47}/tests/test_math_tips.py +0 -0
  557. {roam_code-12.46 → roam_code-12.47}/tests/test_mcp_setup.py +0 -0
  558. {roam_code-12.46 → roam_code-12.47}/tests/test_mermaid.py +0 -0
  559. {roam_code-12.46 → roam_code-12.47}/tests/test_metrics_cmd.py +0 -0
  560. {roam_code-12.46 → roam_code-12.47}/tests/test_metrics_push.py +0 -0
  561. {roam_code-12.46 → roam_code-12.47}/tests/test_migration_safety.py +0 -0
  562. {roam_code-12.46 → roam_code-12.47}/tests/test_minimap.py +0 -0
  563. {roam_code-12.46 → roam_code-12.47}/tests/test_missing_index.py +0 -0
  564. {roam_code-12.46 → roam_code-12.47}/tests/test_mutate.py +0 -0
  565. {roam_code-12.46 → roam_code-12.47}/tests/test_n1.py +0 -0
  566. {roam_code-12.46 → roam_code-12.47}/tests/test_next_steps.py +0 -0
  567. {roam_code-12.46 → roam_code-12.47}/tests/test_onboard.py +0 -0
  568. {roam_code-12.46 → roam_code-12.47}/tests/test_oracle.py +0 -0
  569. {roam_code-12.46 → roam_code-12.47}/tests/test_orchestrate.py +0 -0
  570. {roam_code-12.46 → roam_code-12.47}/tests/test_orphan_routes.py +0 -0
  571. {roam_code-12.46 → roam_code-12.47}/tests/test_oss_bench_harness.py +0 -0
  572. {roam_code-12.46 → roam_code-12.47}/tests/test_over_fetch.py +0 -0
  573. {roam_code-12.46 → roam_code-12.47}/tests/test_partition.py +0 -0
  574. {roam_code-12.46 → roam_code-12.47}/tests/test_path_coverage.py +0 -0
  575. {roam_code-12.46 → roam_code-12.47}/tests/test_patterns_cmd.py +0 -0
  576. {roam_code-12.46 → roam_code-12.47}/tests/test_performance.py +0 -0
  577. {roam_code-12.46 → roam_code-12.47}/tests/test_personalized_pagerank.py +0 -0
  578. {roam_code-12.46 → roam_code-12.47}/tests/test_plan.py +0 -0
  579. {roam_code-12.46 → roam_code-12.47}/tests/test_plugin_discovery.py +0 -0
  580. {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze.py +0 -0
  581. {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze_cache.py +0 -0
  582. {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze_edge_cases.py +0 -0
  583. {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze_helpers.py +0 -0
  584. {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze_v2_signals.py +0 -0
  585. {roam_code-12.46 → roam_code-12.47}/tests/test_pr_comment_render.py +0 -0
  586. {roam_code-12.46 → roam_code-12.47}/tests/test_pr_comment_script.py +0 -0
  587. {roam_code-12.46 → roam_code-12.47}/tests/test_pr_diff.py +0 -0
  588. {roam_code-12.46 → roam_code-12.47}/tests/test_pr_risk_author.py +0 -0
  589. {roam_code-12.46 → roam_code-12.47}/tests/test_progress.py +0 -0
  590. {roam_code-12.46 → roam_code-12.47}/tests/test_progressive_disclosure.py +0 -0
  591. {roam_code-12.46 → roam_code-12.47}/tests/test_properties.py +0 -0
  592. {roam_code-12.46 → roam_code-12.47}/tests/test_pytest_fixtures.py +0 -0
  593. {roam_code-12.46 → roam_code-12.47}/tests/test_python_extractor_v2.py +0 -0
  594. {roam_code-12.46 → roam_code-12.47}/tests/test_python_idioms_e2e.py +0 -0
  595. {roam_code-12.46 → roam_code-12.47}/tests/test_readme_surface_consistency.py +0 -0
  596. {roam_code-12.46 → roam_code-12.47}/tests/test_realworld_feedback.py +0 -0
  597. {roam_code-12.46 → roam_code-12.47}/tests/test_refactoring_intelligence.py +0 -0
  598. {roam_code-12.46 → roam_code-12.47}/tests/test_registry_dispatch.py +0 -0
  599. {roam_code-12.46 → roam_code-12.47}/tests/test_relate.py +0 -0
  600. {roam_code-12.46 → roam_code-12.47}/tests/test_report.py +0 -0
  601. {roam_code-12.46 → roam_code-12.47}/tests/test_reset_clean.py +0 -0
  602. {roam_code-12.46 → roam_code-12.47}/tests/test_resolve.py +0 -0
  603. {roam_code-12.46 → roam_code-12.47}/tests/test_retrieve.py +0 -0
  604. {roam_code-12.46 → roam_code-12.47}/tests/test_retrieve_cross_repo.py +0 -0
  605. {roam_code-12.46 → roam_code-12.47}/tests/test_retrieve_seeds.py +0 -0
  606. {roam_code-12.46 → roam_code-12.47}/tests/test_risk.py +0 -0
  607. {roam_code-12.46 → roam_code-12.47}/tests/test_ruby.py +0 -0
  608. {roam_code-12.46 → roam_code-12.47}/tests/test_rule_profiles.py +0 -0
  609. {roam_code-12.46 → roam_code-12.47}/tests/test_rules.py +0 -0
  610. {roam_code-12.46 → roam_code-12.47}/tests/test_rules_ast_match.py +0 -0
  611. {roam_code-12.46 → roam_code-12.47}/tests/test_rules_community_pack.py +0 -0
  612. {roam_code-12.46 → roam_code-12.47}/tests/test_rules_dataflow.py +0 -0
  613. {roam_code-12.46 → roam_code-12.47}/tests/test_rules_symbol_requirements.py +0 -0
  614. {roam_code-12.46 → roam_code-12.47}/tests/test_rules_validate.py +0 -0
  615. {roam_code-12.46 → roam_code-12.47}/tests/test_runtime.py +0 -0
  616. {roam_code-12.46 → roam_code-12.47}/tests/test_runtime_score.py +0 -0
  617. {roam_code-12.46 → roam_code-12.47}/tests/test_salesforce.py +0 -0
  618. {roam_code-12.46 → roam_code-12.47}/tests/test_sarif_flag.py +0 -0
  619. {roam_code-12.46 → roam_code-12.47}/tests/test_sbom.py +0 -0
  620. {roam_code-12.46 → roam_code-12.47}/tests/test_scala.py +0 -0
  621. {roam_code-12.46 → roam_code-12.47}/tests/test_schema_versioning.py +0 -0
  622. {roam_code-12.46 → roam_code-12.47}/tests/test_secrets.py +0 -0
  623. {roam_code-12.46 → roam_code-12.47}/tests/test_secrets_v2.py +0 -0
  624. {roam_code-12.46 → roam_code-12.47}/tests/test_semantic_diff.py +0 -0
  625. {roam_code-12.46 → roam_code-12.47}/tests/test_semantic_onnx.py +0 -0
  626. {roam_code-12.46 → roam_code-12.47}/tests/test_semantic_search.py +0 -0
  627. {roam_code-12.46 → roam_code-12.47}/tests/test_simulate.py +0 -0
  628. {roam_code-12.46 → roam_code-12.47}/tests/test_simulate_departure.py +0 -0
  629. {roam_code-12.46 → roam_code-12.47}/tests/test_sketch.py +0 -0
  630. {roam_code-12.46 → roam_code-12.47}/tests/test_smells.py +0 -0
  631. {roam_code-12.46 → roam_code-12.47}/tests/test_smoke.py +0 -0
  632. {roam_code-12.46 → roam_code-12.47}/tests/test_sna_metrics.py +0 -0
  633. {roam_code-12.46 → roam_code-12.47}/tests/test_spectral.py +0 -0
  634. {roam_code-12.46 → roam_code-12.47}/tests/test_split_cmd.py +0 -0
  635. {roam_code-12.46 → roam_code-12.47}/tests/test_sql.py +0 -0
  636. {roam_code-12.46 → roam_code-12.47}/tests/test_suggest_reviewers.py +0 -0
  637. {roam_code-12.46 → roam_code-12.47}/tests/test_supply_chain.py +0 -0
  638. {roam_code-12.46 → roam_code-12.47}/tests/test_syntax_check.py +0 -0
  639. {roam_code-12.46 → roam_code-12.47}/tests/test_taint.py +0 -0
  640. {roam_code-12.46 → roam_code-12.47}/tests/test_taint_analysis.py +0 -0
  641. {roam_code-12.46 → roam_code-12.47}/tests/test_taint_classifier.py +0 -0
  642. {roam_code-12.46 → roam_code-12.47}/tests/test_taint_intraprocedural.py +0 -0
  643. {roam_code-12.46 → roam_code-12.47}/tests/test_test_conventions.py +0 -0
  644. {roam_code-12.46 → roam_code-12.47}/tests/test_test_gaps.py +0 -0
  645. {roam_code-12.46 → roam_code-12.47}/tests/test_test_scaffold.py +0 -0
  646. {roam_code-12.46 → roam_code-12.47}/tests/test_testmap.py +0 -0
  647. {roam_code-12.46 → roam_code-12.47}/tests/test_top_flag_consistency.py +0 -0
  648. {roam_code-12.46 → roam_code-12.47}/tests/test_tour_cmd.py +0 -0
  649. {roam_code-12.46 → roam_code-12.47}/tests/test_trends.py +0 -0
  650. {roam_code-12.46 → roam_code-12.47}/tests/test_trends_cohort.py +0 -0
  651. {roam_code-12.46 → roam_code-12.47}/tests/test_triage.py +0 -0
  652. {roam_code-12.46 → roam_code-12.47}/tests/test_uses_cmd.py +0 -0
  653. {roam_code-12.46 → roam_code-12.47}/tests/test_v1215_passes.py +0 -0
  654. {roam_code-12.46 → roam_code-12.47}/tests/test_v1216_passes_51_60.py +0 -0
  655. {roam_code-12.46 → roam_code-12.47}/tests/test_v1217_passes_61_80.py +0 -0
  656. {roam_code-12.46 → roam_code-12.47}/tests/test_v1218_passes_81_90.py +0 -0
  657. {roam_code-12.46 → roam_code-12.47}/tests/test_v12_2.py +0 -0
  658. {roam_code-12.46 → roam_code-12.47}/tests/test_v2_edge_cases.py +0 -0
  659. {roam_code-12.46 → roam_code-12.47}/tests/test_v2_integration.py +0 -0
  660. {roam_code-12.46 → roam_code-12.47}/tests/test_v6_features.py +0 -0
  661. {roam_code-12.46 → roam_code-12.47}/tests/test_v71_features.py +0 -0
  662. {roam_code-12.46 → roam_code-12.47}/tests/test_v7_features.py +0 -0
  663. {roam_code-12.46 → roam_code-12.47}/tests/test_v82_features.py +0 -0
  664. {roam_code-12.46 → roam_code-12.47}/tests/test_verify.py +0 -0
  665. {roam_code-12.46 → roam_code-12.47}/tests/test_verify_imports.py +0 -0
  666. {roam_code-12.46 → roam_code-12.47}/tests/test_vibe_check.py +0 -0
  667. {roam_code-12.46 → roam_code-12.47}/tests/test_visualize.py +0 -0
  668. {roam_code-12.46 → roam_code-12.47}/tests/test_vuln.py +0 -0
  669. {roam_code-12.46 → roam_code-12.47}/tests/test_vulns_cmd.py +0 -0
  670. {roam_code-12.46 → roam_code-12.47}/tests/test_watch.py +0 -0
  671. {roam_code-12.46 → roam_code-12.47}/tests/test_why.py +0 -0
  672. {roam_code-12.46 → roam_code-12.47}/tests/test_workspace.py +0 -0
  673. {roam_code-12.46 → roam_code-12.47}/tests/test_ws_resolve_fixes.py +0 -0
  674. {roam_code-12.46 → roam_code-12.47}/tests/test_xlang.py +0 -0
  675. {roam_code-12.46 → roam_code-12.47}/tests/test_yaml_hcl.py +0 -0
@@ -1,3 +1,4 @@
1
+
1
2
  Apache License
2
3
  Version 2.0, January 2004
3
4
  http://www.apache.org/licenses/
@@ -137,8 +138,8 @@
137
138
 
138
139
  6. Trademarks. This License does not grant permission to use the trade
139
140
  names, trademarks, service marks, or product names of the Licensor,
140
- except as required for describing the origin of the Work and
141
- reproducing the content of the NOTICE file.
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
142
143
 
143
144
  7. Disclaimer of Warranty. Unless required by applicable law or
144
145
  agreed to in writing, Licensor provides the Work (and each
@@ -162,15 +163,16 @@
162
163
  other commercial damages or losses), even if such Contributor
163
164
  has been advised of the possibility of such damages.
164
165
 
165
- 9. Accepting Warranty or Support. While redistributing the Work or
166
- Derivative Works thereof, You may accept warranty or support,
167
- indemnity, or other liability obligations and/or rights consistent
168
- with this License. However, in accepting such obligations, You may
169
- act only on Your own behalf and on Your sole responsibility, not on
170
- behalf of any other Contributor, and only if You agree to indemnify,
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
171
173
  defend, and hold each Contributor harmless for any liability
172
174
  incurred by, or claims asserted against, such Contributor by reason
173
- of your accepting any such warranty or support.
175
+ of your accepting any such warranty or additional liability.
174
176
 
175
177
  END OF TERMS AND CONDITIONS
176
178
 
@@ -185,7 +187,7 @@
185
187
  same "printed page" as the copyright notice for easier
186
188
  identification within third-party archives.
187
189
 
188
- Copyright 2025-2026 CosmoHac
190
+ Copyright [yyyy] [name of copyright owner]
189
191
 
190
192
  Licensed under the Apache License, Version 2.0 (the "License");
191
193
  you may not use this file except in compliance with the License.
@@ -195,6 +197,6 @@
195
197
 
196
198
  Unless required by applicable law or agreed to in writing, software
197
199
  distributed under the License is distributed on an "AS IS" BASIS,
198
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
199
- implied. See the License for the specific language governing permissions and
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
200
202
  limitations under the License.
@@ -1,14 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roam-code
3
- Version: 12.46
3
+ Version: 12.47
4
4
  Summary: Instant codebase comprehension for AI coding agents
5
- Author: CosmoHac
5
+ Author: Cranot
6
6
  License-Expression: Apache-2.0
7
- Project-URL: Homepage, https://github.com/Cranot/roam-code
8
- Project-URL: Documentation, https://cranot.github.io/roam-code/
7
+ Project-URL: Homepage, https://roam-code.com/
8
+ Project-URL: Documentation, https://roam-code.com/docs/
9
9
  Project-URL: Repository, https://github.com/Cranot/roam-code
10
10
  Project-URL: Issues, https://github.com/Cranot/roam-code/issues
11
11
  Project-URL: Changelog, https://github.com/Cranot/roam-code/blob/main/CHANGELOG.md
12
+ Project-URL: Pricing, https://roam-code.com/pricing
13
+ Project-URL: Security, https://roam-code.com/security
12
14
  Keywords: code-intelligence,static-analysis,mcp-server,tree-sitter,architecture,code-graph,ai-coding,graph-analysis,code-quality,cli,codebase,code-analysis,ai-tools,mcp,sql
13
15
  Classifier: Development Status :: 5 - Production/Stable
14
16
  Classifier: Environment :: Console
@@ -64,9 +66,9 @@ Dynamic: license-file
64
66
 
65
67
  **Architectural sight for AI coding agents — before they edit.**
66
68
 
67
- A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other 188 specialised commands are advanced surface for specialised workflows.
69
+ A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other 197 specialised commands are advanced surface for specialised workflows.
68
70
 
69
- *193 commands · 136 MCP tools · 27 languages · 100% local · zero API keys*
71
+ *202 commands · 136 MCP tools · 28 languages · 100% local · zero API keys*
70
72
 
71
73
  [![PyPI version](https://img.shields.io/pypi/v/roam-code?style=flat-square&color=blue)](https://pypi.org/project/roam-code/)
72
74
  [![GitHub stars](https://img.shields.io/github/stars/Cranot/roam-code?style=flat-square)](https://github.com/Cranot/roam-code/stargazers)
@@ -82,15 +84,15 @@ A local code graph (SQLite + tree-sitter + git history) that gives any agent —
82
84
 
83
85
  Roam is a structural intelligence engine for software. It pre-indexes your codebase into a semantic graph -- symbols, dependencies, call graphs, architecture layers, git history, and runtime traces -- stored in a local SQLite DB. Agents query it via CLI or MCP instead of repeatedly grepping files and guessing structure.
84
86
 
85
- > **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam Agent Review](#roam-agent-review-pr-bot-for-ai-generated-changes)** (PR bot scoring AI-generated changes for structural risk) and **[Roam Cloud Lite](#roam-cloud-lite-metrics-history-no-source-upload)** (metrics-history dashboard, no source code upload). Both run on the OSS engine and are licenced separately.
87
+ > **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam Review](#roam-review-pr-bot-for-ai-generated-changes)** (PR bot scoring AI-generated changes for structural risk) and **[Roam Cloud](#roam-cloud-metrics-history-no-source-upload)** (metrics-history dashboard, no source-code bodies uploaded). Both run on the OSS engine and are licensed separately.
86
88
 
87
89
  Unlike LSPs (editor-bound, language-specific) or Sourcegraph (hosted search), Roam provides architecture-level graph queries -- offline, cross-language, and compact. It goes beyond comprehension: Roam governs architecture through budget gates, simulates refactoring outcomes, orchestrates multi-agent swarms with zero-conflict guarantees, maps vulnerability reachability paths, and enables graph-level code editing without syntax errors.
88
90
 
89
91
  ```
90
- Codebase ──> [Index] ──> Semantic Graph ──> 177 Commands ──> AI Agent
92
+ Codebase ──> [Index] ──> Semantic Graph ──> 194 Commands ──> AI Agent
91
93
  │ │ │
92
94
  tree-sitter symbols comprehend
93
- 27 languages + edges govern
95
+ 28 languages + edges govern
94
96
  git history + metrics refactor
95
97
  runtime traces + architecture orchestrate
96
98
  ```
@@ -160,7 +162,7 @@ $ roam diff # blast radius of uncommitted changes
160
162
  - **`personalized_pagerank()`** in `graph/pagerank.py`: NetworkX `personalization=` wrapper with empty-seed fallback to global PR; biases ranking toward query-relevant nodes for the retrieve reranker.
161
163
  - **`.roam/config.toml`** (new): zero-dep TOML loader (stdlib `tomllib` → `tomli` → in-tree subset parser). Tunable retrieve weights (`alpha`/`beta`/`gamma`/`delta`/`epsilon`), `tokens_per_line`, `lexical_baseline`, `first_stage_token_cap`, `default_budget`, `default_k`, `default_rerank`.
162
164
  - **DX corrections from dogfood pass**: `roam --detail <cmd>` is the canonical group-level flag; misleading "use --detail" hints in 7 commands rewritten to point users at `roam --detail <cmd>`. `--top N` aliased on `complexity`/`algo`/`rules` (`--top 0` means unlimited on `rules`). `roam fingerprint` no longer refuses graphs ≥5,000 symbols (new soft-warn threshold 20k, hard cap 100k).
163
- - **177 CLI commands, 128 MCP tools** (`fleet`, `ask`, `workflow`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`), `roam_taint_classify`, `roam_pytest_fixtures`, and `roam_hover` as MCP tools). 35-tool `core` preset is the default for token-budget-conscious clients.
165
+ - **202 CLI commands, 136 MCP tools** (`fleet`, `ask`, `workflow`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`), `roam_taint_classify`, `roam_pytest_fixtures`, and `roam_hover` as MCP tools). 35-tool `core` preset is the default for token-budget-conscious clients.
164
166
 
165
167
  ## What's New in v11
166
168
 
@@ -172,7 +174,7 @@ $ roam diff # blast radius of uncommitted changes
172
174
  ### v11.1.2 -- SQL + Scala Tier 1, 27 Languages
173
175
  - **SQL DDL promoted to Tier 1** with dedicated `SqlExtractor` -- tables, columns, views, functions, triggers, schemas, types (enums), sequences, ALTER TABLE ADD COLUMN. Foreign keys produce graph edges; views and triggers reference source tables. Database-schema projects now work with `roam health`, `roam layers`, `roam impact`, `roam coupling` and all graph commands.
174
176
  - **Scala promoted to Tier 1** with dedicated `ScalaExtractor` -- classes, traits, objects, case classes, sealed hierarchies, val/var properties, type aliases, imports, and inheritance. Full `extends` + `with` trait mixin resolution.
175
- - **27 languages** with 16 dedicated Tier 1 extractors.
177
+ - **28 languages** with 17 dedicated Tier 1 extractors.
176
178
  - `server.json` for official MCP Registry submission.
177
179
 
178
180
  ### v11.1.1 -- Command Quality Audit
@@ -296,10 +298,10 @@ First index takes ~5s for 200 files, ~15s for 1,000 files. Subsequent runs are i
296
298
 
297
299
  - **Set up your AI agent:** `roam describe --write` (auto-detects CLAUDE.md, AGENTS.md, .cursor/rules, etc. — see [integration instructions](#integration-with-ai-coding-tools))
298
300
  - **Explore:** `roam health` → `roam weather` → `roam map`
299
- - **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam Agent Review](#roam-agent-review-pr-bot-for-ai-generated-risk))
300
- - **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail + EU AI Act conformance in one envelope)
301
+ - **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam Review](#roam-review-pr-bot-for-ai-generated-changes))
302
+ - **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail + governance checks in one envelope)
301
303
  - **Add to CI:** `roam init` already generated a GitHub Action
302
- - **Customer-facing artifacts:** see [`templates/`](templates/) — starter rule packs (Python / TypeScript / Go / Java / Kotlin / Rust at [`templates/rules/`](templates/rules/)), audit-report template ([`templates/audit-report/`](templates/audit-report/)), legal templates ([`templates/legal/`](templates/legal/)), v2 product specs ([`templates/products/`](templates/products/))
304
+ - **Customer-facing artifacts:** see starter rule packs at [`templates/rules/`](templates/rules/), the audit-report template + redacted sample at [`templates/audit-report/`](templates/audit-report/), and the security/procurement packet at [`templates/legal/security-procurement-packet.md`](templates/legal/security-procurement-packet.md).
303
305
 
304
306
  <details>
305
307
  <summary><strong>Try it on Roam itself</strong></summary>
@@ -334,7 +336,7 @@ roam health
334
336
 
335
337
  ## Commands
336
338
 
337
- **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 188 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 **193 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.
339
+ **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining ~197 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 **202 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.
338
340
 
339
341
  <details>
340
342
  <summary><strong>Full command reference</strong></summary>
@@ -376,28 +378,30 @@ roam health
376
378
  | `roam stats` | Aggregate metrics over the index: count by language, file role, kind, plus recent commit activity |
377
379
  | `roam timeline <symbol>` | Chronological commits that touched the file owning the symbol — author, date, lines added/removed |
378
380
  | `roam pr-prep [<range>]` | One-shot pre-PR fitness check that bundles diff + critique + pr-risk into one envelope |
379
- | `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK); EU AI Act Article 12 audit trail via `--audit-trail` |
381
+ | `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK); governance audit trail via `--audit-trail` |
380
382
  | `roam pr-comment-render --input F` | Render a markdown PR comment from a `pr-analyze` JSON envelope; styles: `github`, `gitlab`, `plain` |
381
- | `roam metrics-push [--token T] [--anonymize] [--dry-run]` | Push metrics-only summary (no source code) from `roam audit` to a Roam Cloud Lite endpoint; `--dry-run` prints the payload locally |
383
+ | `roam metrics-push [--token T] [--anonymize] [--dry-run]` | Push metrics-only summary (no source-code bodies) from `roam audit` to a Roam Cloud endpoint; `--dry-run` prints the payload locally |
382
384
  | `roam audit-trail-verify [--input F] [--gate]` | Walk the EU AI Act audit-trail JSONL and verify SHA-256 chain integrity; exit 5 on broken chain |
383
385
  | `roam audit-trail-export [--format md\|json\|csv] [--since T] [--verdict V] [--aggregate]` | Export the audit trail for procurement / compliance review; `--aggregate` rolls up per actor / repo / verdict / month |
384
- | `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against an EU AI Act Article 12 checklist (chain integrity, timestamps, actors, reproducibility, retention) |
385
- | `roam article-12-check [--output F] [--pdf F]` | EU AI Act Article 12 readiness assessment; 6-item checklist 1-page Markdown / PDF report. Captures Article-12-curious leads (Aug 2 2026 deadline). |
386
+ | `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against governance-evidence checks (chain integrity, timestamps, actors, reproducibility, retention) |
387
+ | `roam article-12-check [--output F] [--pdf F]` | Article 12 scope/readiness assessment for actual Annex III high-risk AI-system buyers; produces a 1-page Markdown / PDF report. |
386
388
  | `roam capabilities [--emit yaml\|json\|text] [--category X] [--ai-safe-only]` | Emit the decorator-driven capability registry — every command's machine-readable shape (inputs, outputs, ai_safe flag, since-version). For Roam Review GitHub App + MCP filtering. |
387
389
  | `roam skill-generate [--target claude\|cursor\|continue\|aider] [--output F]` | Generate an agent-runtime skill manifest from the capability registry. SKILL.md / .mdc / config snippets — derived from decorators, never hand-edited. |
388
390
  | `roam compare <baseline.db> <target.db> [--top N] [--threshold N]` | Structural delta between two indices: symbols added/removed/moved + per-file complexity deltas + IMPROVED/SIDEWAYS/REGRESSED verdict. The "did this refactor actually work?" tool. |
391
+ | `roam migration-plan [--target spec.yml] [--move SYMBOL=path] [--max-risk low\|medium\|high]` | Generate an ordered migration plan from current state to a target architecture. Each step annotated with blast-radius (caller count) + risk score (low/medium/high) + cross-layer detection. |
389
392
  | `roam permit [--staged] [--input F] [--symbol N]` | Structural-permission verdict facade for AI agents: ALLOW/REVIEW/BLOCK over critique + preflight + blast-radius. Exit codes 0/5/6 for Cursor rules / Claude Code hooks / pre-commit / CI gates. |
390
393
  | `roam postmortem <commit-range> [--limit N] [--show N]` | Replay current detectors against past commits; reports findings that would have surfaced pre-merge. The "would Roam have caught my Q1 incident?" demo. |
391
394
  | `roam rules-validate [PATH] [--against DIFF] [--strict] [--gate] [--explain]` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs; optional dry-run against a sample diff |
392
- | `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail + Article 12 conformance — first-touch demo for any repo |
395
+ | `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail + governance checks — first-touch demo for any repo |
393
396
  | `roam suppress <finding-id> --reason "…"` | Suppress a math / over-fetch / missing-index / auth-gaps false positive with audit-trail-friendly record (`.roam/suppressions.json`); `--list` / `--remove` complete the workflow |
394
397
  | `roam why-fail <test>` | Find recently-changed symbols transitively reachable from a failing test |
398
+ | `roam why-slow <symbol>` | Surface runtime hotspots and slow callers for a specific symbol (uses runtime traces if present) |
395
399
  | `roam recommend <symbol>` | Surface related symbols using call-graph + co-change + clone signals |
396
400
  | `roam graph-stats` | Graph-level invariants: density, weak components, non-trivial cycles, top inbound symbols |
397
401
  | `roam api [--scope <dir>]` | List the public API surface (exported public symbols + signatures) |
398
402
  | `roam exit-codes` | List every roam exit code with its meaning |
399
403
  | `roam version [--check]` | Show installed version; with `--check` also queries PyPI for newer releases |
400
- | `roam audit [--brief]` | One-shot AI Agent Readiness Audit — chains health + debt + dead + risk + test-pyramid + api into a single envelope |
404
+ | `roam audit [--brief]` | One-shot AI-governance audit envelope — chains health + debt + dead + risk + test-pyramid + api into a single envelope |
401
405
  | `roam disambiguate <name>` | List every symbol matching the name with file/line/kind/signature/docstring snippet to pick the right one |
402
406
  | `roam pre-commit [--install\|--print]` | Install or preview a roam-critique git pre-commit hook |
403
407
  | `roam mcp-status` | MCP server health: preset, registered tools, backpressure limits, cache entries, watcher state |
@@ -984,7 +988,7 @@ pip install "roam-code[mcp]"
984
988
  roam mcp
985
989
  ```
986
990
 
987
- 103 tools, 10 resources, and 5 prompts are available in the full preset. Most tools are read-only index queries; side-effect tools are explicitly annotated.
991
+ 136 tools, 10 resources, and 5 prompts are available in the full preset. Most tools are read-only index queries; side-effect tools are explicitly annotated.
988
992
 
989
993
  **MCP v2 highlights (v11):**
990
994
  - In-process MCP execution (no subprocess shell-out per call)
@@ -1017,7 +1021,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
1017
1021
  <details>
1018
1022
  <summary><strong>MCP tool list (all 136)</strong></summary>
1019
1023
 
1020
- *New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam Agent Review + Cloud Lite engines + EU AI Act audit-trail toolkit + production-grade rules linting + one-shot v2 stack runner.*
1024
+ *New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam Review + Cloud engines + governance audit-trail toolkit + production-grade rules linting + one-shot v2 stack runner.*
1021
1025
 
1022
1026
  | Tool | Description |
1023
1027
  |------|-------------|
@@ -1037,7 +1041,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
1037
1041
  | `roam_oracle_is_test_only` | Boolean oracle: are ALL callers of this symbol in test files? |
1038
1042
  | `roam_oracle_is_reachable_from_entry` | Boolean oracle: can BFS reach this symbol from any entry-point? |
1039
1043
  | `roam_oracle_is_clone_of` | Boolean oracle: does this symbol participate in a persisted clone cluster? |
1040
- | `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (round 4 #15 — accept the shorter name) |
1044
+ | `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (shorter name) |
1041
1045
  | `roam_oracle_batch` | Run multiple oracle queries in one call (tri-state envelopes per result) |
1042
1046
  | `roam_taint_classify` | LLM-augmented taint classification (IDOR/AUTHZ/SQLI/...) via MCP sampling |
1043
1047
  | `roam_taint` | Static taint analysis — graph-reach BFS with OpenVEX-correct findings |
@@ -1050,10 +1054,10 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
1050
1054
  | `roam_pr_risk` | Risk score for pending changes |
1051
1055
  | `roam_pr_analyze` | Agent-aware PR verdict: pr-prep + AI-likelihood + `.roam/rules.yml` + INTENTIONAL/SAFE/REVIEW/BLOCK |
1052
1056
  | `roam_pr_comment_render` | Render a markdown PR comment from a `roam_pr_analyze` envelope |
1053
- | `roam_metrics_push` | Push metrics-only summary (no source code) to Roam Cloud Lite; default dry-run |
1057
+ | `roam_metrics_push` | Push metrics-only summary (no source-code bodies) to Roam Cloud; default dry-run |
1054
1058
  | `roam_audit_trail_verify` | Verify SHA-256 chain integrity of an EU AI Act audit-trail JSONL |
1055
1059
  | `roam_audit_trail_export` | Export the audit trail as markdown / json / csv (with date / verdict filters) for procurement |
1056
- | `roam_audit_trail_conformance_check` | Score the audit trail against an EU AI Act Article 12 checklist (chain / timestamps / actors / reproducibility / retention) |
1060
+ | `roam_audit_trail_conformance_check` | Score the audit trail against governance-evidence checks (chain / timestamps / actors / reproducibility / retention) |
1057
1061
  | `roam_rules_validate` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs |
1058
1062
  | `roam_dogfood` | One-shot v2 stack runner — audit + pr-analyze + audit-trail + conformance in one envelope |
1059
1063
  | `roam_breaking_changes` | Detect breaking changes between refs |
@@ -1240,11 +1244,11 @@ Add to `.vscode/mcp.json`:
1240
1244
 
1241
1245
  </details>
1242
1246
 
1243
- ## Roam Agent Review (PR bot for AI-generated changes)
1247
+ ## Roam Review (PR bot for AI-generated changes)
1244
1248
 
1245
- Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam Agent Review fills that gap.
1249
+ Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam Review fills that gap.
1246
1250
 
1247
- `roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and an EU AI Act Article 12 audit-trail record.
1251
+ `roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and a governance audit-trail record.
1248
1252
 
1249
1253
  ```bash
1250
1254
  git diff main..HEAD | roam pr-analyze --explain --with-reviewers --audit-trail
@@ -1252,7 +1256,7 @@ roam pr-analyze main..HEAD --gate # exit 5 on BLOCK (CI gat
1252
1256
  roam --json pr-analyze --input pr.diff | roam pr-comment-render # ready-to-post markdown
1253
1257
  roam pr-analyze --batch ./diffs/ --cache --parallel 4 # 24-55x speedup on incremental re-runs
1254
1258
  roam audit-trail-verify # check SHA-256 chain integrity
1255
- roam audit-trail-conformance-check --gate # EU AI Act Article 12 score (CI)
1259
+ roam audit-trail-conformance-check --gate # governance-evidence score (CI)
1256
1260
  ```
1257
1261
 
1258
1262
  **Nine weighted heuristic signals** score the diff for AI-likelihood: add/remove ratio, comment density, test coverage, function-size variance, generic naming, orphan imports, **placeholder density** (TODO/FIXME/NotImplementedError stubs), **LLM-phrase density** ("we use this approach because…"), **suspicious imports** (numbered modules, mass typing imports). Each carries **language-aware weights** across Python / TypeScript / JavaScript / Go / Rust / Java / Kotlin. Starter rule packs ship for Python, TypeScript, Go, and Java at [`templates/rules/`](templates/rules/) — drop one at `.roam/rules.yml` to enable. Custom rules look like:
@@ -1274,13 +1278,13 @@ rules:
1274
1278
 
1275
1279
  A **drift baseline** (`--save-baseline` / `--baseline FILE`) compares the current PR's signals against the previous analysis and auto-escalates the verdict on regression — the GitHub App reads this to render `(+5 vs prev)` / `(-22 vs prev)` arrows on every push.
1276
1280
 
1277
- The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports. Built for **EU AI Act Article 12** compliance ahead of the August 2 2026 enforcement deadline.
1281
+ The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports. This is best framed as SOC 2 CC8.1, ISO 42001, and internal AI-governance evidence. Article 12 is only relevant for actual Annex III high-risk AI-system buyers, and Roam's records are supporting evidence rather than complete runtime inference logs.
1278
1282
 
1279
1283
  A hosted GitHub App is in development on top of this CLI engine. Until it ships, the CLI is usable today as a free CI gate (`roam pr-analyze --gate` exits 5 on BLOCK).
1280
1284
 
1281
- ## Roam Cloud Lite (metrics history, no source upload)
1285
+ ## Roam Cloud (metrics history, no source upload)
1282
1286
 
1283
- `roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud Lite endpoint — numerical metrics, file paths (or SHA-256 hashes when `--anonymize`), and identifier names only. **No source-code bodies are transmitted**, ever. Inspect the exact payload locally with `--dry-run` before any token is set.
1287
+ `roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud endpoint — numerical metrics, file paths (or SHA-256 hashes when `--anonymize`), and identifier names only. **No source-code bodies are transmitted**, ever. Inspect the exact payload locally with `--dry-run` before any token is set.
1284
1288
 
1285
1289
  ```bash
1286
1290
  roam metrics-push --dry-run # local-only inspection
@@ -1515,7 +1519,7 @@ Codebase
1515
1519
  |
1516
1520
  [1] Discovery ──── git ls-files (respects .gitignore + .roamignore)
1517
1521
  |
1518
- [2] Parse ──────── tree-sitter AST per file (27 languages)
1522
+ [2] Parse ──────── tree-sitter AST per file (28 languages)
1519
1523
  |
1520
1524
  [3] Extract ────── symbols + references (calls, imports, inheritance)
1521
1525
  |
@@ -1723,8 +1727,8 @@ roam-code/
1723
1727
  ├── action.yml # Reusable GitHub Action
1724
1728
  ├── src/roam/
1725
1729
  │ ├── __init__.py # Version (from pyproject.toml)
1726
- │ ├── cli.py # Click CLI (177 canonical + 7 aliases)
1727
- │ ├── mcp_server.py # MCP server (122 tools, 10 resources, 5 prompts)
1730
+ │ ├── cli.py # Click CLI (194 canonical + 7 aliases)
1731
+ │ ├── mcp_server.py # MCP server (136 tools, 10 resources, 5 prompts)
1728
1732
  │ ├── db/
1729
1733
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
1730
1734
  │ │ ├── schema.py # Tables, indexes, migrations
@@ -1818,7 +1822,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1818
1822
  ### Shipped
1819
1823
 
1820
1824
  - [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
1821
- - [x] Full command and MCP inventory parity in docs: 177 canonical CLI commands and 128 MCP tools.
1825
+ - [x] Full command and MCP inventory parity in docs: 197 canonical CLI commands and 136 MCP tools.
1822
1826
  - [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
1823
1827
  - [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
1824
1828
  - [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
@@ -4,9 +4,9 @@
4
4
 
5
5
  **Architectural sight for AI coding agents — before they edit.**
6
6
 
7
- A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other 188 specialised commands are advanced surface for specialised workflows.
7
+ A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other 197 specialised commands are advanced surface for specialised workflows.
8
8
 
9
- *193 commands · 136 MCP tools · 27 languages · 100% local · zero API keys*
9
+ *202 commands · 136 MCP tools · 28 languages · 100% local · zero API keys*
10
10
 
11
11
  [![PyPI version](https://img.shields.io/pypi/v/roam-code?style=flat-square&color=blue)](https://pypi.org/project/roam-code/)
12
12
  [![GitHub stars](https://img.shields.io/github/stars/Cranot/roam-code?style=flat-square)](https://github.com/Cranot/roam-code/stargazers)
@@ -22,15 +22,15 @@ A local code graph (SQLite + tree-sitter + git history) that gives any agent —
22
22
 
23
23
  Roam is a structural intelligence engine for software. It pre-indexes your codebase into a semantic graph -- symbols, dependencies, call graphs, architecture layers, git history, and runtime traces -- stored in a local SQLite DB. Agents query it via CLI or MCP instead of repeatedly grepping files and guessing structure.
24
24
 
25
- > **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam Agent Review](#roam-agent-review-pr-bot-for-ai-generated-changes)** (PR bot scoring AI-generated changes for structural risk) and **[Roam Cloud Lite](#roam-cloud-lite-metrics-history-no-source-upload)** (metrics-history dashboard, no source code upload). Both run on the OSS engine and are licenced separately.
25
+ > **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam Review](#roam-review-pr-bot-for-ai-generated-changes)** (PR bot scoring AI-generated changes for structural risk) and **[Roam Cloud](#roam-cloud-metrics-history-no-source-upload)** (metrics-history dashboard, no source-code bodies uploaded). Both run on the OSS engine and are licensed separately.
26
26
 
27
27
  Unlike LSPs (editor-bound, language-specific) or Sourcegraph (hosted search), Roam provides architecture-level graph queries -- offline, cross-language, and compact. It goes beyond comprehension: Roam governs architecture through budget gates, simulates refactoring outcomes, orchestrates multi-agent swarms with zero-conflict guarantees, maps vulnerability reachability paths, and enables graph-level code editing without syntax errors.
28
28
 
29
29
  ```
30
- Codebase ──> [Index] ──> Semantic Graph ──> 177 Commands ──> AI Agent
30
+ Codebase ──> [Index] ──> Semantic Graph ──> 194 Commands ──> AI Agent
31
31
  │ │ │
32
32
  tree-sitter symbols comprehend
33
- 27 languages + edges govern
33
+ 28 languages + edges govern
34
34
  git history + metrics refactor
35
35
  runtime traces + architecture orchestrate
36
36
  ```
@@ -100,7 +100,7 @@ $ roam diff # blast radius of uncommitted changes
100
100
  - **`personalized_pagerank()`** in `graph/pagerank.py`: NetworkX `personalization=` wrapper with empty-seed fallback to global PR; biases ranking toward query-relevant nodes for the retrieve reranker.
101
101
  - **`.roam/config.toml`** (new): zero-dep TOML loader (stdlib `tomllib` → `tomli` → in-tree subset parser). Tunable retrieve weights (`alpha`/`beta`/`gamma`/`delta`/`epsilon`), `tokens_per_line`, `lexical_baseline`, `first_stage_token_cap`, `default_budget`, `default_k`, `default_rerank`.
102
102
  - **DX corrections from dogfood pass**: `roam --detail <cmd>` is the canonical group-level flag; misleading "use --detail" hints in 7 commands rewritten to point users at `roam --detail <cmd>`. `--top N` aliased on `complexity`/`algo`/`rules` (`--top 0` means unlimited on `rules`). `roam fingerprint` no longer refuses graphs ≥5,000 symbols (new soft-warn threshold 20k, hard cap 100k).
103
- - **177 CLI commands, 128 MCP tools** (`fleet`, `ask`, `workflow`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`), `roam_taint_classify`, `roam_pytest_fixtures`, and `roam_hover` as MCP tools). 35-tool `core` preset is the default for token-budget-conscious clients.
103
+ - **202 CLI commands, 136 MCP tools** (`fleet`, `ask`, `workflow`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`), `roam_taint_classify`, `roam_pytest_fixtures`, and `roam_hover` as MCP tools). 35-tool `core` preset is the default for token-budget-conscious clients.
104
104
 
105
105
  ## What's New in v11
106
106
 
@@ -112,7 +112,7 @@ $ roam diff # blast radius of uncommitted changes
112
112
  ### v11.1.2 -- SQL + Scala Tier 1, 27 Languages
113
113
  - **SQL DDL promoted to Tier 1** with dedicated `SqlExtractor` -- tables, columns, views, functions, triggers, schemas, types (enums), sequences, ALTER TABLE ADD COLUMN. Foreign keys produce graph edges; views and triggers reference source tables. Database-schema projects now work with `roam health`, `roam layers`, `roam impact`, `roam coupling` and all graph commands.
114
114
  - **Scala promoted to Tier 1** with dedicated `ScalaExtractor` -- classes, traits, objects, case classes, sealed hierarchies, val/var properties, type aliases, imports, and inheritance. Full `extends` + `with` trait mixin resolution.
115
- - **27 languages** with 16 dedicated Tier 1 extractors.
115
+ - **28 languages** with 17 dedicated Tier 1 extractors.
116
116
  - `server.json` for official MCP Registry submission.
117
117
 
118
118
  ### v11.1.1 -- Command Quality Audit
@@ -236,10 +236,10 @@ First index takes ~5s for 200 files, ~15s for 1,000 files. Subsequent runs are i
236
236
 
237
237
  - **Set up your AI agent:** `roam describe --write` (auto-detects CLAUDE.md, AGENTS.md, .cursor/rules, etc. — see [integration instructions](#integration-with-ai-coding-tools))
238
238
  - **Explore:** `roam health` → `roam weather` → `roam map`
239
- - **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam Agent Review](#roam-agent-review-pr-bot-for-ai-generated-risk))
240
- - **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail + EU AI Act conformance in one envelope)
239
+ - **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam Review](#roam-review-pr-bot-for-ai-generated-changes))
240
+ - **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail + governance checks in one envelope)
241
241
  - **Add to CI:** `roam init` already generated a GitHub Action
242
- - **Customer-facing artifacts:** see [`templates/`](templates/) — starter rule packs (Python / TypeScript / Go / Java / Kotlin / Rust at [`templates/rules/`](templates/rules/)), audit-report template ([`templates/audit-report/`](templates/audit-report/)), legal templates ([`templates/legal/`](templates/legal/)), v2 product specs ([`templates/products/`](templates/products/))
242
+ - **Customer-facing artifacts:** see starter rule packs at [`templates/rules/`](templates/rules/), the audit-report template + redacted sample at [`templates/audit-report/`](templates/audit-report/), and the security/procurement packet at [`templates/legal/security-procurement-packet.md`](templates/legal/security-procurement-packet.md).
243
243
 
244
244
  <details>
245
245
  <summary><strong>Try it on Roam itself</strong></summary>
@@ -274,7 +274,7 @@ roam health
274
274
 
275
275
  ## Commands
276
276
 
277
- **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 188 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 **193 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.
277
+ **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining ~197 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 **202 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.
278
278
 
279
279
  <details>
280
280
  <summary><strong>Full command reference</strong></summary>
@@ -316,28 +316,30 @@ roam health
316
316
  | `roam stats` | Aggregate metrics over the index: count by language, file role, kind, plus recent commit activity |
317
317
  | `roam timeline <symbol>` | Chronological commits that touched the file owning the symbol — author, date, lines added/removed |
318
318
  | `roam pr-prep [<range>]` | One-shot pre-PR fitness check that bundles diff + critique + pr-risk into one envelope |
319
- | `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK); EU AI Act Article 12 audit trail via `--audit-trail` |
319
+ | `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK); governance audit trail via `--audit-trail` |
320
320
  | `roam pr-comment-render --input F` | Render a markdown PR comment from a `pr-analyze` JSON envelope; styles: `github`, `gitlab`, `plain` |
321
- | `roam metrics-push [--token T] [--anonymize] [--dry-run]` | Push metrics-only summary (no source code) from `roam audit` to a Roam Cloud Lite endpoint; `--dry-run` prints the payload locally |
321
+ | `roam metrics-push [--token T] [--anonymize] [--dry-run]` | Push metrics-only summary (no source-code bodies) from `roam audit` to a Roam Cloud endpoint; `--dry-run` prints the payload locally |
322
322
  | `roam audit-trail-verify [--input F] [--gate]` | Walk the EU AI Act audit-trail JSONL and verify SHA-256 chain integrity; exit 5 on broken chain |
323
323
  | `roam audit-trail-export [--format md\|json\|csv] [--since T] [--verdict V] [--aggregate]` | Export the audit trail for procurement / compliance review; `--aggregate` rolls up per actor / repo / verdict / month |
324
- | `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against an EU AI Act Article 12 checklist (chain integrity, timestamps, actors, reproducibility, retention) |
325
- | `roam article-12-check [--output F] [--pdf F]` | EU AI Act Article 12 readiness assessment; 6-item checklist 1-page Markdown / PDF report. Captures Article-12-curious leads (Aug 2 2026 deadline). |
324
+ | `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against governance-evidence checks (chain integrity, timestamps, actors, reproducibility, retention) |
325
+ | `roam article-12-check [--output F] [--pdf F]` | Article 12 scope/readiness assessment for actual Annex III high-risk AI-system buyers; produces a 1-page Markdown / PDF report. |
326
326
  | `roam capabilities [--emit yaml\|json\|text] [--category X] [--ai-safe-only]` | Emit the decorator-driven capability registry — every command's machine-readable shape (inputs, outputs, ai_safe flag, since-version). For Roam Review GitHub App + MCP filtering. |
327
327
  | `roam skill-generate [--target claude\|cursor\|continue\|aider] [--output F]` | Generate an agent-runtime skill manifest from the capability registry. SKILL.md / .mdc / config snippets — derived from decorators, never hand-edited. |
328
328
  | `roam compare <baseline.db> <target.db> [--top N] [--threshold N]` | Structural delta between two indices: symbols added/removed/moved + per-file complexity deltas + IMPROVED/SIDEWAYS/REGRESSED verdict. The "did this refactor actually work?" tool. |
329
+ | `roam migration-plan [--target spec.yml] [--move SYMBOL=path] [--max-risk low\|medium\|high]` | Generate an ordered migration plan from current state to a target architecture. Each step annotated with blast-radius (caller count) + risk score (low/medium/high) + cross-layer detection. |
329
330
  | `roam permit [--staged] [--input F] [--symbol N]` | Structural-permission verdict facade for AI agents: ALLOW/REVIEW/BLOCK over critique + preflight + blast-radius. Exit codes 0/5/6 for Cursor rules / Claude Code hooks / pre-commit / CI gates. |
330
331
  | `roam postmortem <commit-range> [--limit N] [--show N]` | Replay current detectors against past commits; reports findings that would have surfaced pre-merge. The "would Roam have caught my Q1 incident?" demo. |
331
332
  | `roam rules-validate [PATH] [--against DIFF] [--strict] [--gate] [--explain]` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs; optional dry-run against a sample diff |
332
- | `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail + Article 12 conformance — first-touch demo for any repo |
333
+ | `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail + governance checks — first-touch demo for any repo |
333
334
  | `roam suppress <finding-id> --reason "…"` | Suppress a math / over-fetch / missing-index / auth-gaps false positive with audit-trail-friendly record (`.roam/suppressions.json`); `--list` / `--remove` complete the workflow |
334
335
  | `roam why-fail <test>` | Find recently-changed symbols transitively reachable from a failing test |
336
+ | `roam why-slow <symbol>` | Surface runtime hotspots and slow callers for a specific symbol (uses runtime traces if present) |
335
337
  | `roam recommend <symbol>` | Surface related symbols using call-graph + co-change + clone signals |
336
338
  | `roam graph-stats` | Graph-level invariants: density, weak components, non-trivial cycles, top inbound symbols |
337
339
  | `roam api [--scope <dir>]` | List the public API surface (exported public symbols + signatures) |
338
340
  | `roam exit-codes` | List every roam exit code with its meaning |
339
341
  | `roam version [--check]` | Show installed version; with `--check` also queries PyPI for newer releases |
340
- | `roam audit [--brief]` | One-shot AI Agent Readiness Audit — chains health + debt + dead + risk + test-pyramid + api into a single envelope |
342
+ | `roam audit [--brief]` | One-shot AI-governance audit envelope — chains health + debt + dead + risk + test-pyramid + api into a single envelope |
341
343
  | `roam disambiguate <name>` | List every symbol matching the name with file/line/kind/signature/docstring snippet to pick the right one |
342
344
  | `roam pre-commit [--install\|--print]` | Install or preview a roam-critique git pre-commit hook |
343
345
  | `roam mcp-status` | MCP server health: preset, registered tools, backpressure limits, cache entries, watcher state |
@@ -924,7 +926,7 @@ pip install "roam-code[mcp]"
924
926
  roam mcp
925
927
  ```
926
928
 
927
- 103 tools, 10 resources, and 5 prompts are available in the full preset. Most tools are read-only index queries; side-effect tools are explicitly annotated.
929
+ 136 tools, 10 resources, and 5 prompts are available in the full preset. Most tools are read-only index queries; side-effect tools are explicitly annotated.
928
930
 
929
931
  **MCP v2 highlights (v11):**
930
932
  - In-process MCP execution (no subprocess shell-out per call)
@@ -957,7 +959,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
957
959
  <details>
958
960
  <summary><strong>MCP tool list (all 136)</strong></summary>
959
961
 
960
- *New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam Agent Review + Cloud Lite engines + EU AI Act audit-trail toolkit + production-grade rules linting + one-shot v2 stack runner.*
962
+ *New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam Review + Cloud engines + governance audit-trail toolkit + production-grade rules linting + one-shot v2 stack runner.*
961
963
 
962
964
  | Tool | Description |
963
965
  |------|-------------|
@@ -977,7 +979,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
977
979
  | `roam_oracle_is_test_only` | Boolean oracle: are ALL callers of this symbol in test files? |
978
980
  | `roam_oracle_is_reachable_from_entry` | Boolean oracle: can BFS reach this symbol from any entry-point? |
979
981
  | `roam_oracle_is_clone_of` | Boolean oracle: does this symbol participate in a persisted clone cluster? |
980
- | `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (round 4 #15 — accept the shorter name) |
982
+ | `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (shorter name) |
981
983
  | `roam_oracle_batch` | Run multiple oracle queries in one call (tri-state envelopes per result) |
982
984
  | `roam_taint_classify` | LLM-augmented taint classification (IDOR/AUTHZ/SQLI/...) via MCP sampling |
983
985
  | `roam_taint` | Static taint analysis — graph-reach BFS with OpenVEX-correct findings |
@@ -990,10 +992,10 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
990
992
  | `roam_pr_risk` | Risk score for pending changes |
991
993
  | `roam_pr_analyze` | Agent-aware PR verdict: pr-prep + AI-likelihood + `.roam/rules.yml` + INTENTIONAL/SAFE/REVIEW/BLOCK |
992
994
  | `roam_pr_comment_render` | Render a markdown PR comment from a `roam_pr_analyze` envelope |
993
- | `roam_metrics_push` | Push metrics-only summary (no source code) to Roam Cloud Lite; default dry-run |
995
+ | `roam_metrics_push` | Push metrics-only summary (no source-code bodies) to Roam Cloud; default dry-run |
994
996
  | `roam_audit_trail_verify` | Verify SHA-256 chain integrity of an EU AI Act audit-trail JSONL |
995
997
  | `roam_audit_trail_export` | Export the audit trail as markdown / json / csv (with date / verdict filters) for procurement |
996
- | `roam_audit_trail_conformance_check` | Score the audit trail against an EU AI Act Article 12 checklist (chain / timestamps / actors / reproducibility / retention) |
998
+ | `roam_audit_trail_conformance_check` | Score the audit trail against governance-evidence checks (chain / timestamps / actors / reproducibility / retention) |
997
999
  | `roam_rules_validate` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs |
998
1000
  | `roam_dogfood` | One-shot v2 stack runner — audit + pr-analyze + audit-trail + conformance in one envelope |
999
1001
  | `roam_breaking_changes` | Detect breaking changes between refs |
@@ -1180,11 +1182,11 @@ Add to `.vscode/mcp.json`:
1180
1182
 
1181
1183
  </details>
1182
1184
 
1183
- ## Roam Agent Review (PR bot for AI-generated changes)
1185
+ ## Roam Review (PR bot for AI-generated changes)
1184
1186
 
1185
- Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam Agent Review fills that gap.
1187
+ Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam Review fills that gap.
1186
1188
 
1187
- `roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and an EU AI Act Article 12 audit-trail record.
1189
+ `roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and a governance audit-trail record.
1188
1190
 
1189
1191
  ```bash
1190
1192
  git diff main..HEAD | roam pr-analyze --explain --with-reviewers --audit-trail
@@ -1192,7 +1194,7 @@ roam pr-analyze main..HEAD --gate # exit 5 on BLOCK (CI gat
1192
1194
  roam --json pr-analyze --input pr.diff | roam pr-comment-render # ready-to-post markdown
1193
1195
  roam pr-analyze --batch ./diffs/ --cache --parallel 4 # 24-55x speedup on incremental re-runs
1194
1196
  roam audit-trail-verify # check SHA-256 chain integrity
1195
- roam audit-trail-conformance-check --gate # EU AI Act Article 12 score (CI)
1197
+ roam audit-trail-conformance-check --gate # governance-evidence score (CI)
1196
1198
  ```
1197
1199
 
1198
1200
  **Nine weighted heuristic signals** score the diff for AI-likelihood: add/remove ratio, comment density, test coverage, function-size variance, generic naming, orphan imports, **placeholder density** (TODO/FIXME/NotImplementedError stubs), **LLM-phrase density** ("we use this approach because…"), **suspicious imports** (numbered modules, mass typing imports). Each carries **language-aware weights** across Python / TypeScript / JavaScript / Go / Rust / Java / Kotlin. Starter rule packs ship for Python, TypeScript, Go, and Java at [`templates/rules/`](templates/rules/) — drop one at `.roam/rules.yml` to enable. Custom rules look like:
@@ -1214,13 +1216,13 @@ rules:
1214
1216
 
1215
1217
  A **drift baseline** (`--save-baseline` / `--baseline FILE`) compares the current PR's signals against the previous analysis and auto-escalates the verdict on regression — the GitHub App reads this to render `(+5 vs prev)` / `(-22 vs prev)` arrows on every push.
1216
1218
 
1217
- The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports. Built for **EU AI Act Article 12** compliance ahead of the August 2 2026 enforcement deadline.
1219
+ The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports. This is best framed as SOC 2 CC8.1, ISO 42001, and internal AI-governance evidence. Article 12 is only relevant for actual Annex III high-risk AI-system buyers, and Roam's records are supporting evidence rather than complete runtime inference logs.
1218
1220
 
1219
1221
  A hosted GitHub App is in development on top of this CLI engine. Until it ships, the CLI is usable today as a free CI gate (`roam pr-analyze --gate` exits 5 on BLOCK).
1220
1222
 
1221
- ## Roam Cloud Lite (metrics history, no source upload)
1223
+ ## Roam Cloud (metrics history, no source upload)
1222
1224
 
1223
- `roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud Lite endpoint — numerical metrics, file paths (or SHA-256 hashes when `--anonymize`), and identifier names only. **No source-code bodies are transmitted**, ever. Inspect the exact payload locally with `--dry-run` before any token is set.
1225
+ `roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud endpoint — numerical metrics, file paths (or SHA-256 hashes when `--anonymize`), and identifier names only. **No source-code bodies are transmitted**, ever. Inspect the exact payload locally with `--dry-run` before any token is set.
1224
1226
 
1225
1227
  ```bash
1226
1228
  roam metrics-push --dry-run # local-only inspection
@@ -1455,7 +1457,7 @@ Codebase
1455
1457
  |
1456
1458
  [1] Discovery ──── git ls-files (respects .gitignore + .roamignore)
1457
1459
  |
1458
- [2] Parse ──────── tree-sitter AST per file (27 languages)
1460
+ [2] Parse ──────── tree-sitter AST per file (28 languages)
1459
1461
  |
1460
1462
  [3] Extract ────── symbols + references (calls, imports, inheritance)
1461
1463
  |
@@ -1663,8 +1665,8 @@ roam-code/
1663
1665
  ├── action.yml # Reusable GitHub Action
1664
1666
  ├── src/roam/
1665
1667
  │ ├── __init__.py # Version (from pyproject.toml)
1666
- │ ├── cli.py # Click CLI (177 canonical + 7 aliases)
1667
- │ ├── mcp_server.py # MCP server (122 tools, 10 resources, 5 prompts)
1668
+ │ ├── cli.py # Click CLI (194 canonical + 7 aliases)
1669
+ │ ├── mcp_server.py # MCP server (136 tools, 10 resources, 5 prompts)
1668
1670
  │ ├── db/
1669
1671
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
1670
1672
  │ │ ├── schema.py # Tables, indexes, migrations
@@ -1758,7 +1760,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1758
1760
  ### Shipped
1759
1761
 
1760
1762
  - [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
1761
- - [x] Full command and MCP inventory parity in docs: 177 canonical CLI commands and 128 MCP tools.
1763
+ - [x] Full command and MCP inventory parity in docs: 197 canonical CLI commands and 136 MCP tools.
1762
1764
  - [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
1763
1765
  - [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
1764
1766
  - [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "roam-code"
7
- version = "12.46"
7
+ version = "12.47"
8
8
  description = "Instant codebase comprehension for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
11
11
  license = "Apache-2.0"
12
12
  authors = [
13
- {name = "CosmoHac"},
13
+ {name = "Cranot"},
14
14
  ]
15
15
  keywords = ["code-intelligence", "static-analysis", "mcp-server", "tree-sitter", "architecture", "code-graph", "ai-coding", "graph-analysis", "code-quality", "cli", "codebase", "code-analysis", "ai-tools", "mcp", "sql"]
16
16
  classifiers = [
@@ -41,11 +41,13 @@ dependencies = [
41
41
  ]
42
42
 
43
43
  [project.urls]
44
- Homepage = "https://github.com/Cranot/roam-code"
45
- Documentation = "https://cranot.github.io/roam-code/"
44
+ Homepage = "https://roam-code.com/"
45
+ Documentation = "https://roam-code.com/docs/"
46
46
  Repository = "https://github.com/Cranot/roam-code"
47
47
  Issues = "https://github.com/Cranot/roam-code/issues"
48
48
  Changelog = "https://github.com/Cranot/roam-code/blob/main/CHANGELOG.md"
49
+ Pricing = "https://roam-code.com/pricing"
50
+ Security = "https://roam-code.com/security"
49
51
 
50
52
  [project.scripts]
51
53
  roam = "roam.cli:cli"
@@ -4,7 +4,7 @@ import sys
4
4
 
5
5
  from roam.cli import cli
6
6
 
7
- # Pass 40 — graceful Ctrl-C: exit 130 (SIGINT convention) without
7
+ # graceful Ctrl-C: exit 130 (SIGINT convention) without
8
8
  # spilling a Python traceback. Long-running commands still leave any
9
9
  # committed DB rows in place — this just suppresses the noise.
10
10
  try:
@@ -1,6 +1,4 @@
1
- """roam Code Graph Attestation (CGA).
2
-
3
- Phase-3/E.1 chain partner for ``roam taint`` (already shipped E.2).
1
+ """roam Code Graph Attestation (CGA)./E.1 chain partner for ``roam taint`` (already shipped E.2).
4
2
  Per the v12 brainstorm 05_security_enterprise.md and the senior review,
5
3
  this primitive becomes the moat for CRA Sep-2026 / EO 14028 / OSPS
6
4
  Baseline conformance: every PR ships a signed in-toto attestation
@@ -1,6 +1,6 @@
1
1
  """Capability Registry — decorator-driven introspection for roam commands.
2
2
 
3
- Phase 1 of the v2 monetization plan (per build_priorities.md). The
3
+ Capability Registry declarative manifest of public surface. The
4
4
  architect's correction: the per-command capability YAML must be derived
5
5
  from decorators, not hand-edited. This module implements the decorator
6
6
  plus an emitter that walks all registered commands and produces a