roam-code 12.46__tar.gz → 12.50__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 (682) hide show
  1. {roam_code-12.46 → roam_code-12.50}/LICENSE +14 -12
  2. {roam_code-12.46 → roam_code-12.50}/PKG-INFO +74 -48
  3. {roam_code-12.46 → roam_code-12.50}/README.md +68 -44
  4. {roam_code-12.46 → roam_code-12.50}/pyproject.toml +11 -5
  5. {roam_code-12.46 → roam_code-12.50}/src/roam/__main__.py +1 -1
  6. {roam_code-12.46 → roam_code-12.50}/src/roam/ask/recipes.py +52 -1
  7. {roam_code-12.46 → roam_code-12.50}/src/roam/attest/__init__.py +1 -4
  8. {roam_code-12.46 → roam_code-12.50}/src/roam/capability.py +1 -1
  9. {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/detectors.py +42 -42
  10. {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/python_idioms.py +1 -1
  11. {roam_code-12.46 → roam_code-12.50}/src/roam/cli.py +21 -14
  12. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/audit_trail_helpers.py +1 -2
  13. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_adversarial.py +2 -2
  14. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_affected.py +1 -1
  15. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_agent_export.py +2 -2
  16. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_api.py +1 -1
  17. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_article_12_check.py +8 -7
  18. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_audit.py +19 -8
  19. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_audit_trail_export.py +3 -3
  20. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_auth_gaps.py +5 -5
  21. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_capabilities.py +2 -2
  22. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_changelog.py +1 -1
  23. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_clones.py +2 -2
  24. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_compare.py +1 -1
  25. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_config.py +7 -9
  26. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_context.py +9 -9
  27. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_conventions.py +1 -1
  28. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_coverage_gaps.py +1 -1
  29. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_critique.py +4 -4
  30. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dead.py +10 -10
  31. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_debt.py +2 -2
  32. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_describe.py +1 -1
  33. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_diagnose.py +2 -2
  34. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_diff.py +3 -3
  35. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_disambiguate.py +1 -1
  36. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_doc_staleness.py +2 -1
  37. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_docs_coverage.py +5 -3
  38. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_doctor.py +3 -3
  39. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_eval_retrieve.py +1 -1
  40. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_exit_codes.py +1 -1
  41. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fan.py +1 -1
  42. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fn_coupling.py +2 -2
  43. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_graph_export.py +1 -1
  44. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_graph_stats.py +1 -1
  45. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_health.py +7 -7
  46. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_help_search.py +1 -1
  47. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_hotspots.py +2 -2
  48. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_impact.py +5 -5
  49. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_index_stats.py +1 -1
  50. roam_code-12.50/src/roam/commands/cmd_lsp.py +936 -0
  51. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_map.py +3 -3
  52. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_math.py +11 -11
  53. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_mcp_setup.py +3 -3
  54. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_mcp_status.py +1 -1
  55. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_metrics_push.py +0 -2
  56. roam_code-12.50/src/roam/commands/cmd_migration_plan.py +303 -0
  57. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_migration_safety.py +2 -4
  58. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_missing_index.py +2 -2
  59. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_oracle.py +4 -5
  60. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_orphan_imports.py +4 -4
  61. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_over_fetch.py +6 -6
  62. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_permit.py +5 -6
  63. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_plugins.py +1 -1
  64. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_postmortem.py +5 -12
  65. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_analyze.py +1 -3
  66. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_comment_render.py +5 -5
  67. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_prep.py +1 -1
  68. roam_code-12.50/src/roam/commands/cmd_pr_replay.py +811 -0
  69. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_risk.py +2 -2
  70. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pre_commit.py +1 -1
  71. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_preflight.py +4 -4
  72. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_recipes.py +1 -1
  73. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_recommend.py +1 -1
  74. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_reset.py +2 -2
  75. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_retrieve.py +2 -2
  76. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_risk.py +1 -1
  77. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_rules.py +1 -2
  78. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_sbom.py +6 -6
  79. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_search.py +8 -8
  80. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_smells.py +6 -8
  81. roam_code-12.50/src/roam/commands/cmd_stale_refs.py +3389 -0
  82. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_stats.py +1 -1
  83. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_taint.py +1 -1
  84. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_telemetry.py +1 -1
  85. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_test_impact.py +1 -1
  86. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_test_pyramid.py +1 -1
  87. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_timeline.py +1 -1
  88. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_tour.py +2 -2
  89. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_version.py +2 -2
  90. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_watch.py +5 -5
  91. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_weather.py +1 -1
  92. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_why_fail.py +1 -1
  93. roam_code-12.50/src/roam/commands/cmd_why_slow.py +209 -0
  94. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_workflow.py +2 -2
  95. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/metrics_history.py +1 -1
  96. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/next_steps.py +42 -1
  97. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/resolve.py +3 -3
  98. roam_code-12.50/src/roam/commands/stale_refs_anchors.py +230 -0
  99. roam_code-12.50/src/roam/commands/stale_refs_hints.py +417 -0
  100. {roam_code-12.46 → roam_code-12.50}/src/roam/competitor_site_data.py +5 -10
  101. {roam_code-12.46 → roam_code-12.50}/src/roam/config.py +1 -1
  102. {roam_code-12.46 → roam_code-12.50}/src/roam/db/connection.py +1 -1
  103. {roam_code-12.46 → roam_code-12.50}/src/roam/db/queries.py +1 -1
  104. {roam_code-12.46 → roam_code-12.50}/src/roam/fleet/__init__.py +2 -4
  105. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/builder.py +3 -3
  106. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/cycles.py +1 -1
  107. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/partition.py +7 -7
  108. {roam_code-12.46 → roam_code-12.50}/src/roam/index/complexity.py +1 -1
  109. {roam_code-12.46 → roam_code-12.50}/src/roam/index/indexer.py +3 -3
  110. {roam_code-12.46 → roam_code-12.50}/src/roam/index/parser.py +2 -1
  111. {roam_code-12.46 → roam_code-12.50}/src/roam/index/symbols.py +1 -1
  112. roam_code-12.50/src/roam/languages/dart_lang.py +119 -0
  113. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/query_engine.py +5 -5
  114. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/registry.py +6 -0
  115. {roam_code-12.46 → roam_code-12.50}/src/roam/mcp-server-card.json +12 -12
  116. {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/concurrency.py +2 -2
  117. {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/sampling.py +1 -1
  118. {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_server.py +483 -36
  119. {roam_code-12.46 → roam_code-12.50}/src/roam/observability.py +1 -1
  120. {roam_code-12.46 → roam_code-12.50}/src/roam/output/confidence.py +1 -1
  121. {roam_code-12.46 → roam_code-12.50}/src/roam/output/file_role_hints.py +3 -3
  122. {roam_code-12.46 → roam_code-12.50}/src/roam/output/formatter.py +3 -3
  123. {roam_code-12.46 → roam_code-12.50}/src/roam/output/project_shape.py +3 -3
  124. {roam_code-12.46 → roam_code-12.50}/src/roam/output/sarif.py +71 -3
  125. {roam_code-12.46 → roam_code-12.50}/src/roam/plugins.py +1 -1
  126. {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/pipeline.py +2 -2
  127. {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/rerank.py +4 -7
  128. {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/seeds.py +3 -3
  129. {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/daemon.py +8 -11
  130. {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/lock_modes.py +3 -5
  131. {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/lockmgr.py +1 -2
  132. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_engine.py +6 -8
  133. {roam_code-12.46 → roam_code-12.50}/src/roam/telemetry.py +1 -1
  134. {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/PKG-INFO +74 -48
  135. {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/SOURCES.txt +15 -1
  136. {roam_code-12.46 → roam_code-12.50}/tests/test_ask.py +5 -3
  137. {roam_code-12.46 → roam_code-12.50}/tests/test_capability_registry.py +1 -1
  138. {roam_code-12.46 → roam_code-12.50}/tests/test_compare_cli.py +1 -1
  139. {roam_code-12.46 → roam_code-12.50}/tests/test_competitor_site_data.py +2 -3
  140. {roam_code-12.46 → roam_code-12.50}/tests/test_context_propagation.py +1 -1
  141. {roam_code-12.46 → roam_code-12.50}/tests/test_critique.py +5 -1
  142. roam_code-12.50/tests/test_dart.py +186 -0
  143. {roam_code-12.46 → roam_code-12.50}/tests/test_defer_loading.py +6 -6
  144. {roam_code-12.46 → roam_code-12.50}/tests/test_doc_consistency.py +55 -114
  145. roam_code-12.50/tests/test_docs_site_quality.py +45 -0
  146. {roam_code-12.46 → roam_code-12.50}/tests/test_doctor.py +1 -1
  147. {roam_code-12.46 → roam_code-12.50}/tests/test_exit_codes.py +1 -1
  148. {roam_code-12.46 → roam_code-12.50}/tests/test_health_gate.py +1 -1
  149. {roam_code-12.46 → roam_code-12.50}/tests/test_laravel_fp_fixes.py +1 -1
  150. {roam_code-12.46 → roam_code-12.50}/tests/test_math.py +8 -8
  151. {roam_code-12.46 → roam_code-12.50}/tests/test_math_fp_fixes.py +2 -2
  152. {roam_code-12.46 → roam_code-12.50}/tests/test_mcp_extras.py +2 -2
  153. {roam_code-12.46 → roam_code-12.50}/tests/test_mcp_server.py +2 -2
  154. roam_code-12.50/tests/test_migration_plan.py +98 -0
  155. roam_code-12.50/tests/test_no_internal_language.py +249 -0
  156. {roam_code-12.46 → roam_code-12.50}/tests/test_pagerank_truncation.py +2 -2
  157. roam_code-12.46/tests/test_pivot_phase0_commands.py → roam_code-12.50/tests/test_phase0_commands.py +3 -4
  158. roam_code-12.50/tests/test_pr_replay.py +384 -0
  159. {roam_code-12.46 → roam_code-12.50}/tests/test_python_pivot.py +1 -1
  160. {roam_code-12.46 → roam_code-12.50}/tests/test_regression_fp_corpus.py +5 -5
  161. {roam_code-12.46 → roam_code-12.50}/tests/test_sarif_enrichment.py +1 -1
  162. {roam_code-12.46 → roam_code-12.50}/tests/test_search_explain.py +1 -1
  163. {roam_code-12.46 → roam_code-12.50}/tests/test_skill_generate.py +1 -1
  164. roam_code-12.50/tests/test_stale_refs.py +3942 -0
  165. {roam_code-12.46 → roam_code-12.50}/tests/test_surface_counts.py +14 -8
  166. {roam_code-12.46 → roam_code-12.50}/tests/test_v1216_passes.py +2 -2
  167. {roam_code-12.46 → roam_code-12.50}/tests/test_v1216_passes_41_50.py +2 -2
  168. {roam_code-12.46 → roam_code-12.50}/tests/test_v1219_passes_91_100.py +5 -6
  169. {roam_code-12.46 → roam_code-12.50}/tests/test_v1220_passes_101_110.py +7 -7
  170. {roam_code-12.46 → roam_code-12.50}/tests/test_v1221_query_timeout.py +2 -2
  171. {roam_code-12.46 → roam_code-12.50}/tests/test_v1221_untested_commands.py +1 -1
  172. roam_code-12.50/tests/test_why_slow.py +173 -0
  173. roam_code-12.46/tests/test_docs_site_quality.py +0 -81
  174. {roam_code-12.46 → roam_code-12.50}/setup.cfg +0 -0
  175. {roam_code-12.46 → roam_code-12.50}/src/roam/__init__.py +0 -0
  176. {roam_code-12.46 → roam_code-12.50}/src/roam/analysis/__init__.py +0 -0
  177. {roam_code-12.46 → roam_code-12.50}/src/roam/analysis/effects.py +0 -0
  178. {roam_code-12.46 → roam_code-12.50}/src/roam/analysis/taint.py +0 -0
  179. {roam_code-12.46 → roam_code-12.50}/src/roam/api.py +0 -0
  180. {roam_code-12.46 → roam_code-12.50}/src/roam/ask/__init__.py +0 -0
  181. {roam_code-12.46 → roam_code-12.50}/src/roam/ask/classifier.py +0 -0
  182. {roam_code-12.46 → roam_code-12.50}/src/roam/ask/runner.py +0 -0
  183. {roam_code-12.46 → roam_code-12.50}/src/roam/ask/workflow.py +0 -0
  184. {roam_code-12.46 → roam_code-12.50}/src/roam/attest/cga.py +0 -0
  185. {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/__init__.py +0 -0
  186. {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/base.py +0 -0
  187. {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_config.py +0 -0
  188. {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_django.py +0 -0
  189. {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_protobuf.py +0 -0
  190. {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_rest_api.py +0 -0
  191. {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_salesforce.py +0 -0
  192. {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_template.py +0 -0
  193. {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/registry.py +0 -0
  194. {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/__init__.py +0 -0
  195. {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/fixes.py +0 -0
  196. {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/smells.py +0 -0
  197. {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/tasks.py +0 -0
  198. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/__init__.py +0 -0
  199. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/changed_files.py +0 -0
  200. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_adrs.py +0 -0
  201. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_affected_tests.py +0 -0
  202. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_agent_context.py +0 -0
  203. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_agent_plan.py +0 -0
  204. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ai_ratio.py +0 -0
  205. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ai_readiness.py +0 -0
  206. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_alerts.py +0 -0
  207. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_annotate.py +0 -0
  208. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_api_changes.py +0 -0
  209. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_api_drift.py +0 -0
  210. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ask.py +0 -0
  211. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_attest.py +0 -0
  212. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_audit_trail_conformance.py +0 -0
  213. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_audit_trail_verify.py +0 -0
  214. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_bisect.py +0 -0
  215. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_breaking.py +0 -0
  216. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_budget.py +0 -0
  217. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_bus_factor.py +0 -0
  218. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_capsule.py +0 -0
  219. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_cga.py +0 -0
  220. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_check_rules.py +0 -0
  221. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ci_setup.py +0 -0
  222. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_clean.py +0 -0
  223. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_closure.py +0 -0
  224. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_clusters.py +0 -0
  225. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_codeowners.py +0 -0
  226. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_complexity.py +0 -0
  227. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_congestion.py +0 -0
  228. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_coupling.py +0 -0
  229. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_cut.py +0 -0
  230. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dark_matter.py +0 -0
  231. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dashboard.py +0 -0
  232. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_deps.py +0 -0
  233. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dev_profile.py +0 -0
  234. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dogfood.py +0 -0
  235. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_drift.py +0 -0
  236. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_duplicates.py +0 -0
  237. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_effects.py +0 -0
  238. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_endpoints.py +0 -0
  239. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_entry_points.py +0 -0
  240. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_file.py +0 -0
  241. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fingerprint.py +0 -0
  242. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fitness.py +0 -0
  243. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_flag_dead.py +0 -0
  244. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fleet.py +0 -0
  245. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_forecast.py +0 -0
  246. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_grep.py +0 -0
  247. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_guard.py +0 -0
  248. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_hooks.py +0 -0
  249. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_hover.py +0 -0
  250. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_index.py +0 -0
  251. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_index_bundle.py +0 -0
  252. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ingest_trace.py +0 -0
  253. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_init.py +0 -0
  254. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_intent.py +0 -0
  255. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_invariants.py +0 -0
  256. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_layers.py +0 -0
  257. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_metrics.py +0 -0
  258. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_minimap.py +0 -0
  259. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_module.py +0 -0
  260. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_mutate.py +0 -0
  261. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_n1.py +0 -0
  262. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_orchestrate.py +0 -0
  263. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_orphan_routes.py +0 -0
  264. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_owner.py +0 -0
  265. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_partition.py +0 -0
  266. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_path_coverage.py +0 -0
  267. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_patterns.py +0 -0
  268. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_plan.py +0 -0
  269. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_plan_refactor.py +0 -0
  270. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_diff.py +0 -0
  271. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_py_modern.py +0 -0
  272. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_py_types.py +0 -0
  273. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pytest_fixtures.py +0 -0
  274. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_relate.py +0 -0
  275. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_report.py +0 -0
  276. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_rules_validate.py +0 -0
  277. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_safe_delete.py +0 -0
  278. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_safe_zones.py +0 -0
  279. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_schema.py +0 -0
  280. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_search_semantic.py +0 -0
  281. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_secrets.py +0 -0
  282. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_semantic_diff.py +0 -0
  283. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_simulate.py +0 -0
  284. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_simulate_departure.py +0 -0
  285. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_sketch.py +0 -0
  286. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_skill_generate.py +0 -0
  287. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_spectral.py +0 -0
  288. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_split.py +0 -0
  289. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_suggest_refactoring.py +0 -0
  290. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_suggest_reviewers.py +0 -0
  291. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_supply_chain.py +0 -0
  292. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_suppress.py +0 -0
  293. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_symbol.py +0 -0
  294. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_syntax_check.py +0 -0
  295. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_test_gaps.py +0 -0
  296. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_test_scaffold.py +0 -0
  297. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_testmap.py +0 -0
  298. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_trace.py +0 -0
  299. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_trends.py +0 -0
  300. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_triage.py +0 -0
  301. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_understand.py +0 -0
  302. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_uses.py +0 -0
  303. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_verify.py +0 -0
  304. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_verify_imports.py +0 -0
  305. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_vibe_check.py +0 -0
  306. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_visualize.py +0 -0
  307. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_vuln_map.py +0 -0
  308. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_vuln_reach.py +0 -0
  309. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_vulns.py +0 -0
  310. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_why.py +0 -0
  311. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ws.py +0 -0
  312. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_xlang.py +0 -0
  313. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/codeowners_helpers.py +0 -0
  314. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/context_helpers.py +0 -0
  315. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/finding_suppress.py +0 -0
  316. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/gate_presets.py +0 -0
  317. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/git_helpers.py +0 -0
  318. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/graph_helpers.py +0 -0
  319. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/pr_analyze/__init__.py +0 -0
  320. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/pr_analyze/audit_trail.py +0 -0
  321. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/pr_analyze/cache.py +0 -0
  322. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/pr_analyze/rules.py +0 -0
  323. {roam_code-12.46 → roam_code-12.50}/src/roam/commands/suppression.py +0 -0
  324. {roam_code-12.46 → roam_code-12.50}/src/roam/coverage_reports.py +0 -0
  325. {roam_code-12.46 → roam_code-12.50}/src/roam/critique/__init__.py +0 -0
  326. {roam_code-12.46 → roam_code-12.50}/src/roam/critique/aggregator.py +0 -0
  327. {roam_code-12.46 → roam_code-12.50}/src/roam/critique/checks.py +0 -0
  328. {roam_code-12.46 → roam_code-12.50}/src/roam/db/__init__.py +0 -0
  329. {roam_code-12.46 → roam_code-12.50}/src/roam/db/schema.py +0 -0
  330. {roam_code-12.46 → roam_code-12.50}/src/roam/eval/__init__.py +0 -0
  331. {roam_code-12.46 → roam_code-12.50}/src/roam/eval/harness.py +0 -0
  332. {roam_code-12.46 → roam_code-12.50}/src/roam/exit_codes.py +0 -0
  333. {roam_code-12.46 → roam_code-12.50}/src/roam/fleet/adapters.py +0 -0
  334. {roam_code-12.46 → roam_code-12.50}/src/roam/fleet/manifest.py +0 -0
  335. {roam_code-12.46 → roam_code-12.50}/src/roam/git_utils.py +0 -0
  336. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/__init__.py +0 -0
  337. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/anomaly.py +0 -0
  338. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/clone_detect.py +0 -0
  339. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/clusters.py +0 -0
  340. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/dark_matter.py +0 -0
  341. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/diff.py +0 -0
  342. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/fingerprint.py +0 -0
  343. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/layers.py +0 -0
  344. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/pagerank.py +0 -0
  345. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/pathfinding.py +0 -0
  346. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/propagation.py +0 -0
  347. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/simulate.py +0 -0
  348. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/spectral.py +0 -0
  349. {roam_code-12.46 → roam_code-12.50}/src/roam/graph/stats.py +0 -0
  350. {roam_code-12.46 → roam_code-12.50}/src/roam/index/__init__.py +0 -0
  351. {roam_code-12.46 → roam_code-12.50}/src/roam/index/discovery.py +0 -0
  352. {roam_code-12.46 → roam_code-12.50}/src/roam/index/django_post.py +0 -0
  353. {roam_code-12.46 → roam_code-12.50}/src/roam/index/file_roles.py +0 -0
  354. {roam_code-12.46 → roam_code-12.50}/src/roam/index/git_stats.py +0 -0
  355. {roam_code-12.46 → roam_code-12.50}/src/roam/index/gitignore.py +0 -0
  356. {roam_code-12.46 → roam_code-12.50}/src/roam/index/incremental.py +0 -0
  357. {roam_code-12.46 → roam_code-12.50}/src/roam/index/pytest_fixtures.py +0 -0
  358. {roam_code-12.46 → roam_code-12.50}/src/roam/index/registry_dispatch.py +0 -0
  359. {roam_code-12.46 → roam_code-12.50}/src/roam/index/relations.py +0 -0
  360. {roam_code-12.46 → roam_code-12.50}/src/roam/index/test_conventions.py +0 -0
  361. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/__init__.py +0 -0
  362. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/apex_lang.py +0 -0
  363. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/aura_lang.py +0 -0
  364. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/base.py +0 -0
  365. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/c_lang.py +0 -0
  366. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/csharp_lang.py +0 -0
  367. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/extractor_schema.py +0 -0
  368. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/extractors/kotlin.yaml +0 -0
  369. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/foxpro_lang.py +0 -0
  370. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/generic_lang.py +0 -0
  371. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/go_lang.py +0 -0
  372. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/hcl_lang.py +0 -0
  373. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/java_lang.py +0 -0
  374. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/javascript_lang.py +0 -0
  375. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/kotlin_lang.py +0 -0
  376. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/php_lang.py +0 -0
  377. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/python_lang.py +0 -0
  378. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/ruby_lang.py +0 -0
  379. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/rust_lang.py +0 -0
  380. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/scala_lang.py +0 -0
  381. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/sfxml_lang.py +0 -0
  382. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/sql_lang.py +0 -0
  383. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/swift_lang.py +0 -0
  384. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/typescript_lang.py +0 -0
  385. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/visualforce_lang.py +0 -0
  386. {roam_code-12.46 → roam_code-12.50}/src/roam/languages/yaml_lang.py +0 -0
  387. {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/__init__.py +0 -0
  388. {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/completions.py +0 -0
  389. {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/progress.py +0 -0
  390. {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/session.py +0 -0
  391. {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/watcher.py +0 -0
  392. {roam_code-12.46 → roam_code-12.50}/src/roam/output/__init__.py +0 -0
  393. {roam_code-12.46 → roam_code-12.50}/src/roam/output/errors.py +0 -0
  394. {roam_code-12.46 → roam_code-12.50}/src/roam/output/framework_filter.py +0 -0
  395. {roam_code-12.46 → roam_code-12.50}/src/roam/output/mermaid.py +0 -0
  396. {roam_code-12.46 → roam_code-12.50}/src/roam/output/schema_registry.py +0 -0
  397. {roam_code-12.46 → roam_code-12.50}/src/roam/refactor/__init__.py +0 -0
  398. {roam_code-12.46 → roam_code-12.50}/src/roam/refactor/codegen.py +0 -0
  399. {roam_code-12.46 → roam_code-12.50}/src/roam/refactor/transforms.py +0 -0
  400. {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/__init__.py +0 -0
  401. {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/learned_ranker.py +0 -0
  402. {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/semantic.py +0 -0
  403. {roam_code-12.46 → roam_code-12.50}/src/roam/rules/__init__.py +0 -0
  404. {roam_code-12.46 → roam_code-12.50}/src/roam/rules/ast_match.py +0 -0
  405. {roam_code-12.46 → roam_code-12.50}/src/roam/rules/builtin.py +0 -0
  406. {roam_code-12.46 → roam_code-12.50}/src/roam/rules/dataflow.py +0 -0
  407. {roam_code-12.46 → roam_code-12.50}/src/roam/rules/engine.py +0 -0
  408. {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/__init__.py +0 -0
  409. {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/graph_backend.py +0 -0
  410. {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/hotspots.py +0 -0
  411. {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/trace_ingest.py +0 -0
  412. {roam_code-12.46 → roam_code-12.50}/src/roam/search/__init__.py +0 -0
  413. {roam_code-12.46 → roam_code-12.50}/src/roam/search/framework_packs.py +0 -0
  414. {roam_code-12.46 → roam_code-12.50}/src/roam/search/index_embeddings.py +0 -0
  415. {roam_code-12.46 → roam_code-12.50}/src/roam/search/onnx_embeddings.py +0 -0
  416. {roam_code-12.46 → roam_code-12.50}/src/roam/search/tfidf.py +0 -0
  417. {roam_code-12.46 → roam_code-12.50}/src/roam/security/__init__.py +0 -0
  418. {roam_code-12.46 → roam_code-12.50}/src/roam/security/aibom_extension.py +0 -0
  419. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_classifier.py +0 -0
  420. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/api_error_leak.yaml +0 -0
  421. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/java_fileupload_path_traversal.yaml +0 -0
  422. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_insecure_jwt_decode.yaml +0 -0
  423. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_localstorage_secrets.yaml +0 -0
  424. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_prototype_pollution.yaml +0 -0
  425. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_ssrf.yaml +0 -0
  426. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_xss.yaml +0 -0
  427. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_basic.yaml +0 -0
  428. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_deserialization.yaml +0 -0
  429. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_path_traversal.yaml +0 -0
  430. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_socketio_remote_source.yaml +0 -0
  431. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_sqli.yaml +0 -0
  432. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_urllib_open_redirect.yaml +0 -0
  433. {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/vue_v_html.yaml +0 -0
  434. {roam_code-12.46 → roam_code-12.50}/src/roam/security/vuln_reach.py +0 -0
  435. {roam_code-12.46 → roam_code-12.50}/src/roam/security/vuln_store.py +0 -0
  436. {roam_code-12.46 → roam_code-12.50}/src/roam/surface_counts.py +0 -0
  437. {roam_code-12.46 → roam_code-12.50}/src/roam/templates/__init__.py +0 -0
  438. {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/Jenkinsfile +0 -0
  439. {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/__init__.py +0 -0
  440. {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/agent-review.yml +0 -0
  441. {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/azure-pipelines.yml +0 -0
  442. {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/bitbucket-pipelines.yml +0 -0
  443. {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/gitlab-ci.yml +0 -0
  444. {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/__init__.py +0 -0
  445. {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/aggregator.py +0 -0
  446. {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/api_scanner.py +0 -0
  447. {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/config.py +0 -0
  448. {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/db.py +0 -0
  449. {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/dependency_links.txt +0 -0
  450. {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/entry_points.txt +0 -0
  451. {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/requires.txt +0 -0
  452. {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/top_level.txt +0 -0
  453. {roam_code-12.46 → roam_code-12.50}/tests/test_adrs.py +0 -0
  454. {roam_code-12.46 → roam_code-12.50}/tests/test_adversarial.py +0 -0
  455. {roam_code-12.46 → roam_code-12.50}/tests/test_affected.py +0 -0
  456. {roam_code-12.46 → roam_code-12.50}/tests/test_agent_export.py +0 -0
  457. {roam_code-12.46 → roam_code-12.50}/tests/test_agent_mode.py +0 -0
  458. {roam_code-12.46 → roam_code-12.50}/tests/test_agent_plan_context.py +0 -0
  459. {roam_code-12.46 → roam_code-12.50}/tests/test_ai_ratio.py +0 -0
  460. {roam_code-12.46 → roam_code-12.50}/tests/test_ai_readiness.py +0 -0
  461. {roam_code-12.46 → roam_code-12.50}/tests/test_alerts_cmd.py +0 -0
  462. {roam_code-12.46 → roam_code-12.50}/tests/test_annotations.py +0 -0
  463. {roam_code-12.46 → roam_code-12.50}/tests/test_anomaly.py +0 -0
  464. {roam_code-12.46 → roam_code-12.50}/tests/test_api_changes.py +0 -0
  465. {roam_code-12.46 → roam_code-12.50}/tests/test_api_drift.py +0 -0
  466. {roam_code-12.46 → roam_code-12.50}/tests/test_attest.py +0 -0
  467. {roam_code-12.46 → roam_code-12.50}/tests/test_audit_trail_aggregate.py +0 -0
  468. {roam_code-12.46 → roam_code-12.50}/tests/test_audit_trail_conformance.py +0 -0
  469. {roam_code-12.46 → roam_code-12.50}/tests/test_audit_trail_sequence.py +0 -0
  470. {roam_code-12.46 → roam_code-12.50}/tests/test_audit_trail_verify.py +0 -0
  471. {roam_code-12.46 → roam_code-12.50}/tests/test_auth_gaps.py +0 -0
  472. {roam_code-12.46 → roam_code-12.50}/tests/test_backend_fixes_round2.py +0 -0
  473. {roam_code-12.46 → roam_code-12.50}/tests/test_backend_fixes_round3.py +0 -0
  474. {roam_code-12.46 → roam_code-12.50}/tests/test_basic.py +0 -0
  475. {roam_code-12.46 → roam_code-12.50}/tests/test_batch_mcp.py +0 -0
  476. {roam_code-12.46 → roam_code-12.50}/tests/test_bisect.py +0 -0
  477. {roam_code-12.46 → roam_code-12.50}/tests/test_bridge_django.py +0 -0
  478. {roam_code-12.46 → roam_code-12.50}/tests/test_bridges.py +0 -0
  479. {roam_code-12.46 → roam_code-12.50}/tests/test_bridges_extended.py +0 -0
  480. {roam_code-12.46 → roam_code-12.50}/tests/test_budget.py +0 -0
  481. {roam_code-12.46 → roam_code-12.50}/tests/test_budget_flag.py +0 -0
  482. {roam_code-12.46 → roam_code-12.50}/tests/test_budget_phase2.py +0 -0
  483. {roam_code-12.46 → roam_code-12.50}/tests/test_bus_factor.py +0 -0
  484. {roam_code-12.46 → roam_code-12.50}/tests/test_capsule.py +0 -0
  485. {roam_code-12.46 → roam_code-12.50}/tests/test_cga.py +0 -0
  486. {roam_code-12.46 → roam_code-12.50}/tests/test_check_rules.py +0 -0
  487. {roam_code-12.46 → roam_code-12.50}/tests/test_ci_gate_eval.py +0 -0
  488. {roam_code-12.46 → roam_code-12.50}/tests/test_ci_sarif_guard.py +0 -0
  489. {roam_code-12.46 → roam_code-12.50}/tests/test_ci_setup.py +0 -0
  490. {roam_code-12.46 → roam_code-12.50}/tests/test_clones.py +0 -0
  491. {roam_code-12.46 → roam_code-12.50}/tests/test_closure.py +0 -0
  492. {roam_code-12.46 → roam_code-12.50}/tests/test_codeowners.py +0 -0
  493. {roam_code-12.46 → roam_code-12.50}/tests/test_commands_architecture.py +0 -0
  494. {roam_code-12.46 → roam_code-12.50}/tests/test_commands_exploration.py +0 -0
  495. {roam_code-12.46 → roam_code-12.50}/tests/test_commands_health.py +0 -0
  496. {roam_code-12.46 → roam_code-12.50}/tests/test_commands_refactoring.py +0 -0
  497. {roam_code-12.46 → roam_code-12.50}/tests/test_commands_workflow.py +0 -0
  498. {roam_code-12.46 → roam_code-12.50}/tests/test_comprehensive.py +0 -0
  499. {roam_code-12.46 → roam_code-12.50}/tests/test_config.py +0 -0
  500. {roam_code-12.46 → roam_code-12.50}/tests/test_congestion.py +0 -0
  501. {roam_code-12.46 → roam_code-12.50}/tests/test_conventions_cmd.py +0 -0
  502. {roam_code-12.46 → roam_code-12.50}/tests/test_coverage_gaps_cmd.py +0 -0
  503. {roam_code-12.46 → roam_code-12.50}/tests/test_coverage_ingestion.py +0 -0
  504. {roam_code-12.46 → roam_code-12.50}/tests/test_cut.py +0 -0
  505. {roam_code-12.46 → roam_code-12.50}/tests/test_dark_matter.py +0 -0
  506. {roam_code-12.46 → roam_code-12.50}/tests/test_dark_matter_helpers.py +0 -0
  507. {roam_code-12.46 → roam_code-12.50}/tests/test_dashboard.py +0 -0
  508. {roam_code-12.46 → roam_code-12.50}/tests/test_dataflow_dead.py +0 -0
  509. {roam_code-12.46 → roam_code-12.50}/tests/test_dead_aging.py +0 -0
  510. {roam_code-12.46 → roam_code-12.50}/tests/test_demo_gif_asset.py +0 -0
  511. {roam_code-12.46 → roam_code-12.50}/tests/test_describe.py +0 -0
  512. {roam_code-12.46 → roam_code-12.50}/tests/test_detail_flag_hints.py +0 -0
  513. {roam_code-12.46 → roam_code-12.50}/tests/test_detector_precision.py +0 -0
  514. {roam_code-12.46 → roam_code-12.50}/tests/test_deterministic_output.py +0 -0
  515. {roam_code-12.46 → roam_code-12.50}/tests/test_dev_profile.py +0 -0
  516. {roam_code-12.46 → roam_code-12.50}/tests/test_difficulty_scoring.py +0 -0
  517. {roam_code-12.46 → roam_code-12.50}/tests/test_doc_staleness.py +0 -0
  518. {roam_code-12.46 → roam_code-12.50}/tests/test_docker_assets.py +0 -0
  519. {roam_code-12.46 → roam_code-12.50}/tests/test_docs_coverage.py +0 -0
  520. {roam_code-12.46 → roam_code-12.50}/tests/test_dogfood.py +0 -0
  521. {roam_code-12.46 → roam_code-12.50}/tests/test_drift.py +0 -0
  522. {roam_code-12.46 → roam_code-12.50}/tests/test_drift_by_team.py +0 -0
  523. {roam_code-12.46 → roam_code-12.50}/tests/test_duplicates.py +0 -0
  524. {roam_code-12.46 → roam_code-12.50}/tests/test_effects.py +0 -0
  525. {roam_code-12.46 → roam_code-12.50}/tests/test_effects_propagation.py +0 -0
  526. {roam_code-12.46 → roam_code-12.50}/tests/test_endpoints.py +0 -0
  527. {roam_code-12.46 → roam_code-12.50}/tests/test_entry_points_cmd.py +0 -0
  528. {roam_code-12.46 → roam_code-12.50}/tests/test_eval_retrieve.py +0 -0
  529. {roam_code-12.46 → roam_code-12.50}/tests/test_except_pass_narrow.py +0 -0
  530. {roam_code-12.46 → roam_code-12.50}/tests/test_exclude_patterns.py +0 -0
  531. {roam_code-12.46 → roam_code-12.50}/tests/test_extractor_grammar_drift.py +0 -0
  532. {roam_code-12.46 → roam_code-12.50}/tests/test_fallback_contracts.py +0 -0
  533. {roam_code-12.46 → roam_code-12.50}/tests/test_file_roles.py +0 -0
  534. {roam_code-12.46 → roam_code-12.50}/tests/test_finding_suppress.py +0 -0
  535. {roam_code-12.46 → roam_code-12.50}/tests/test_fingerprint.py +0 -0
  536. {roam_code-12.46 → roam_code-12.50}/tests/test_fixes.py +0 -0
  537. {roam_code-12.46 → roam_code-12.50}/tests/test_flag_dead.py +0 -0
  538. {roam_code-12.46 → roam_code-12.50}/tests/test_fleet.py +0 -0
  539. {roam_code-12.46 → roam_code-12.50}/tests/test_fn_coupling.py +0 -0
  540. {roam_code-12.46 → roam_code-12.50}/tests/test_forecast.py +0 -0
  541. {roam_code-12.46 → roam_code-12.50}/tests/test_formatters.py +0 -0
  542. {roam_code-12.46 → roam_code-12.50}/tests/test_foxpro.py +0 -0
  543. {roam_code-12.46 → roam_code-12.50}/tests/test_framework_detection.py +0 -0
  544. {roam_code-12.46 → roam_code-12.50}/tests/test_gate_presets.py +0 -0
  545. {roam_code-12.46 → roam_code-12.50}/tests/test_git_helpers.py +0 -0
  546. {roam_code-12.46 → roam_code-12.50}/tests/test_git_utils.py +0 -0
  547. {roam_code-12.46 → roam_code-12.50}/tests/test_guard.py +0 -0
  548. {roam_code-12.46 → roam_code-12.50}/tests/test_hooks.py +0 -0
  549. {roam_code-12.46 → roam_code-12.50}/tests/test_hotspots.py +0 -0
  550. {roam_code-12.46 → roam_code-12.50}/tests/test_hover.py +0 -0
  551. {roam_code-12.46 → roam_code-12.50}/tests/test_index.py +0 -0
  552. {roam_code-12.46 → roam_code-12.50}/tests/test_index_bundle.py +0 -0
  553. {roam_code-12.46 → roam_code-12.50}/tests/test_init_cmd.py +0 -0
  554. {roam_code-12.46 → roam_code-12.50}/tests/test_install_check.py +0 -0
  555. {roam_code-12.46 → roam_code-12.50}/tests/test_intent.py +0 -0
  556. {roam_code-12.46 → roam_code-12.50}/tests/test_invariants.py +0 -0
  557. {roam_code-12.46 → roam_code-12.50}/tests/test_json_contracts.py +0 -0
  558. {roam_code-12.46 → roam_code-12.50}/tests/test_json_error_envelope.py +0 -0
  559. {roam_code-12.46 → roam_code-12.50}/tests/test_kotlin_swift_extractors.py +0 -0
  560. {roam_code-12.46 → roam_code-12.50}/tests/test_language_corpus.py +0 -0
  561. {roam_code-12.46 → roam_code-12.50}/tests/test_languages.py +0 -0
  562. {roam_code-12.46 → roam_code-12.50}/tests/test_library_api.py +0 -0
  563. {roam_code-12.46 → roam_code-12.50}/tests/test_math_tips.py +0 -0
  564. {roam_code-12.46 → roam_code-12.50}/tests/test_mcp_setup.py +0 -0
  565. {roam_code-12.46 → roam_code-12.50}/tests/test_mermaid.py +0 -0
  566. {roam_code-12.46 → roam_code-12.50}/tests/test_metrics_cmd.py +0 -0
  567. {roam_code-12.46 → roam_code-12.50}/tests/test_metrics_push.py +0 -0
  568. {roam_code-12.46 → roam_code-12.50}/tests/test_migration_safety.py +0 -0
  569. {roam_code-12.46 → roam_code-12.50}/tests/test_minimap.py +0 -0
  570. {roam_code-12.46 → roam_code-12.50}/tests/test_missing_index.py +0 -0
  571. {roam_code-12.46 → roam_code-12.50}/tests/test_mutate.py +0 -0
  572. {roam_code-12.46 → roam_code-12.50}/tests/test_n1.py +0 -0
  573. {roam_code-12.46 → roam_code-12.50}/tests/test_next_steps.py +0 -0
  574. {roam_code-12.46 → roam_code-12.50}/tests/test_onboard.py +0 -0
  575. {roam_code-12.46 → roam_code-12.50}/tests/test_oracle.py +0 -0
  576. {roam_code-12.46 → roam_code-12.50}/tests/test_orchestrate.py +0 -0
  577. {roam_code-12.46 → roam_code-12.50}/tests/test_orphan_routes.py +0 -0
  578. {roam_code-12.46 → roam_code-12.50}/tests/test_oss_bench_harness.py +0 -0
  579. {roam_code-12.46 → roam_code-12.50}/tests/test_over_fetch.py +0 -0
  580. {roam_code-12.46 → roam_code-12.50}/tests/test_partition.py +0 -0
  581. {roam_code-12.46 → roam_code-12.50}/tests/test_path_coverage.py +0 -0
  582. {roam_code-12.46 → roam_code-12.50}/tests/test_patterns_cmd.py +0 -0
  583. {roam_code-12.46 → roam_code-12.50}/tests/test_performance.py +0 -0
  584. {roam_code-12.46 → roam_code-12.50}/tests/test_personalized_pagerank.py +0 -0
  585. {roam_code-12.46 → roam_code-12.50}/tests/test_plan.py +0 -0
  586. {roam_code-12.46 → roam_code-12.50}/tests/test_plugin_discovery.py +0 -0
  587. {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze.py +0 -0
  588. {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze_cache.py +0 -0
  589. {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze_edge_cases.py +0 -0
  590. {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze_helpers.py +0 -0
  591. {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze_v2_signals.py +0 -0
  592. {roam_code-12.46 → roam_code-12.50}/tests/test_pr_comment_render.py +0 -0
  593. {roam_code-12.46 → roam_code-12.50}/tests/test_pr_comment_script.py +0 -0
  594. {roam_code-12.46 → roam_code-12.50}/tests/test_pr_diff.py +0 -0
  595. {roam_code-12.46 → roam_code-12.50}/tests/test_pr_risk_author.py +0 -0
  596. {roam_code-12.46 → roam_code-12.50}/tests/test_progress.py +0 -0
  597. {roam_code-12.46 → roam_code-12.50}/tests/test_progressive_disclosure.py +0 -0
  598. {roam_code-12.46 → roam_code-12.50}/tests/test_properties.py +0 -0
  599. {roam_code-12.46 → roam_code-12.50}/tests/test_pytest_fixtures.py +0 -0
  600. {roam_code-12.46 → roam_code-12.50}/tests/test_python_extractor_v2.py +0 -0
  601. {roam_code-12.46 → roam_code-12.50}/tests/test_python_idioms_e2e.py +0 -0
  602. {roam_code-12.46 → roam_code-12.50}/tests/test_readme_surface_consistency.py +0 -0
  603. {roam_code-12.46 → roam_code-12.50}/tests/test_realworld_feedback.py +0 -0
  604. {roam_code-12.46 → roam_code-12.50}/tests/test_refactoring_intelligence.py +0 -0
  605. {roam_code-12.46 → roam_code-12.50}/tests/test_registry_dispatch.py +0 -0
  606. {roam_code-12.46 → roam_code-12.50}/tests/test_relate.py +0 -0
  607. {roam_code-12.46 → roam_code-12.50}/tests/test_report.py +0 -0
  608. {roam_code-12.46 → roam_code-12.50}/tests/test_reset_clean.py +0 -0
  609. {roam_code-12.46 → roam_code-12.50}/tests/test_resolve.py +0 -0
  610. {roam_code-12.46 → roam_code-12.50}/tests/test_retrieve.py +0 -0
  611. {roam_code-12.46 → roam_code-12.50}/tests/test_retrieve_cross_repo.py +0 -0
  612. {roam_code-12.46 → roam_code-12.50}/tests/test_retrieve_seeds.py +0 -0
  613. {roam_code-12.46 → roam_code-12.50}/tests/test_risk.py +0 -0
  614. {roam_code-12.46 → roam_code-12.50}/tests/test_ruby.py +0 -0
  615. {roam_code-12.46 → roam_code-12.50}/tests/test_rule_profiles.py +0 -0
  616. {roam_code-12.46 → roam_code-12.50}/tests/test_rules.py +0 -0
  617. {roam_code-12.46 → roam_code-12.50}/tests/test_rules_ast_match.py +0 -0
  618. {roam_code-12.46 → roam_code-12.50}/tests/test_rules_community_pack.py +0 -0
  619. {roam_code-12.46 → roam_code-12.50}/tests/test_rules_dataflow.py +0 -0
  620. {roam_code-12.46 → roam_code-12.50}/tests/test_rules_symbol_requirements.py +0 -0
  621. {roam_code-12.46 → roam_code-12.50}/tests/test_rules_validate.py +0 -0
  622. {roam_code-12.46 → roam_code-12.50}/tests/test_runtime.py +0 -0
  623. {roam_code-12.46 → roam_code-12.50}/tests/test_runtime_score.py +0 -0
  624. {roam_code-12.46 → roam_code-12.50}/tests/test_salesforce.py +0 -0
  625. {roam_code-12.46 → roam_code-12.50}/tests/test_sarif_flag.py +0 -0
  626. {roam_code-12.46 → roam_code-12.50}/tests/test_sbom.py +0 -0
  627. {roam_code-12.46 → roam_code-12.50}/tests/test_scala.py +0 -0
  628. {roam_code-12.46 → roam_code-12.50}/tests/test_schema_versioning.py +0 -0
  629. {roam_code-12.46 → roam_code-12.50}/tests/test_secrets.py +0 -0
  630. {roam_code-12.46 → roam_code-12.50}/tests/test_secrets_v2.py +0 -0
  631. {roam_code-12.46 → roam_code-12.50}/tests/test_semantic_diff.py +0 -0
  632. {roam_code-12.46 → roam_code-12.50}/tests/test_semantic_onnx.py +0 -0
  633. {roam_code-12.46 → roam_code-12.50}/tests/test_semantic_search.py +0 -0
  634. {roam_code-12.46 → roam_code-12.50}/tests/test_simulate.py +0 -0
  635. {roam_code-12.46 → roam_code-12.50}/tests/test_simulate_departure.py +0 -0
  636. {roam_code-12.46 → roam_code-12.50}/tests/test_sketch.py +0 -0
  637. {roam_code-12.46 → roam_code-12.50}/tests/test_smells.py +0 -0
  638. {roam_code-12.46 → roam_code-12.50}/tests/test_smoke.py +0 -0
  639. {roam_code-12.46 → roam_code-12.50}/tests/test_sna_metrics.py +0 -0
  640. {roam_code-12.46 → roam_code-12.50}/tests/test_spectral.py +0 -0
  641. {roam_code-12.46 → roam_code-12.50}/tests/test_split_cmd.py +0 -0
  642. {roam_code-12.46 → roam_code-12.50}/tests/test_sql.py +0 -0
  643. {roam_code-12.46 → roam_code-12.50}/tests/test_suggest_reviewers.py +0 -0
  644. {roam_code-12.46 → roam_code-12.50}/tests/test_supply_chain.py +0 -0
  645. {roam_code-12.46 → roam_code-12.50}/tests/test_syntax_check.py +0 -0
  646. {roam_code-12.46 → roam_code-12.50}/tests/test_taint.py +0 -0
  647. {roam_code-12.46 → roam_code-12.50}/tests/test_taint_analysis.py +0 -0
  648. {roam_code-12.46 → roam_code-12.50}/tests/test_taint_classifier.py +0 -0
  649. {roam_code-12.46 → roam_code-12.50}/tests/test_taint_intraprocedural.py +0 -0
  650. {roam_code-12.46 → roam_code-12.50}/tests/test_test_conventions.py +0 -0
  651. {roam_code-12.46 → roam_code-12.50}/tests/test_test_gaps.py +0 -0
  652. {roam_code-12.46 → roam_code-12.50}/tests/test_test_scaffold.py +0 -0
  653. {roam_code-12.46 → roam_code-12.50}/tests/test_testmap.py +0 -0
  654. {roam_code-12.46 → roam_code-12.50}/tests/test_top_flag_consistency.py +0 -0
  655. {roam_code-12.46 → roam_code-12.50}/tests/test_tour_cmd.py +0 -0
  656. {roam_code-12.46 → roam_code-12.50}/tests/test_trends.py +0 -0
  657. {roam_code-12.46 → roam_code-12.50}/tests/test_trends_cohort.py +0 -0
  658. {roam_code-12.46 → roam_code-12.50}/tests/test_triage.py +0 -0
  659. {roam_code-12.46 → roam_code-12.50}/tests/test_uses_cmd.py +0 -0
  660. {roam_code-12.46 → roam_code-12.50}/tests/test_v1215_passes.py +0 -0
  661. {roam_code-12.46 → roam_code-12.50}/tests/test_v1216_passes_51_60.py +0 -0
  662. {roam_code-12.46 → roam_code-12.50}/tests/test_v1217_passes_61_80.py +0 -0
  663. {roam_code-12.46 → roam_code-12.50}/tests/test_v1218_passes_81_90.py +0 -0
  664. {roam_code-12.46 → roam_code-12.50}/tests/test_v12_2.py +0 -0
  665. {roam_code-12.46 → roam_code-12.50}/tests/test_v2_edge_cases.py +0 -0
  666. {roam_code-12.46 → roam_code-12.50}/tests/test_v2_integration.py +0 -0
  667. {roam_code-12.46 → roam_code-12.50}/tests/test_v6_features.py +0 -0
  668. {roam_code-12.46 → roam_code-12.50}/tests/test_v71_features.py +0 -0
  669. {roam_code-12.46 → roam_code-12.50}/tests/test_v7_features.py +0 -0
  670. {roam_code-12.46 → roam_code-12.50}/tests/test_v82_features.py +0 -0
  671. {roam_code-12.46 → roam_code-12.50}/tests/test_verify.py +0 -0
  672. {roam_code-12.46 → roam_code-12.50}/tests/test_verify_imports.py +0 -0
  673. {roam_code-12.46 → roam_code-12.50}/tests/test_vibe_check.py +0 -0
  674. {roam_code-12.46 → roam_code-12.50}/tests/test_visualize.py +0 -0
  675. {roam_code-12.46 → roam_code-12.50}/tests/test_vuln.py +0 -0
  676. {roam_code-12.46 → roam_code-12.50}/tests/test_vulns_cmd.py +0 -0
  677. {roam_code-12.46 → roam_code-12.50}/tests/test_watch.py +0 -0
  678. {roam_code-12.46 → roam_code-12.50}/tests/test_why.py +0 -0
  679. {roam_code-12.46 → roam_code-12.50}/tests/test_workspace.py +0 -0
  680. {roam_code-12.46 → roam_code-12.50}/tests/test_ws_resolve_fixes.py +0 -0
  681. {roam_code-12.46 → roam_code-12.50}/tests/test_xlang.py +0 -0
  682. {roam_code-12.46 → roam_code-12.50}/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.50
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 200 specialised commands are advanced surface for specialised workflows.
68
70
 
69
- *193 commands · 136 MCP tools · 27 languages · 100% local · zero API keys*
71
+ *205 commands · 137 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)
@@ -78,19 +80,37 @@ A local code graph (SQLite + tree-sitter + git history) that gives any agent —
78
80
 
79
81
  ---
80
82
 
83
+ ### Killer use case: post-rename doc hygiene
84
+
85
+ ```bash
86
+ git mv docs/old-guide.md docs/new-guide.md
87
+ roam stale-refs --fix preview # see what auto-rewrites are safe
88
+ roam stale-refs --fix apply # rewrite README + CHANGELOG + everywhere
89
+ ```
90
+
91
+ `stale-refs` finds every dangling markdown link, HTML href, backtick path, and
92
+ broken `#anchor` across the repo, with confidence-tagged rename hints from git
93
+ history + basename match + LLM enrichment. Composable with `--gate` (CI),
94
+ `--diff` (branch-only), `--baseline-from` (acknowledged debt), `--watch` (live),
95
+ `--check-external` (HTTP validation), `--sarif` (Code Scanning), and a
96
+ companion `roam lsp` server for editor squiggles. See
97
+ [stale-refs in the command table](#commands).
98
+
99
+ ---
100
+
81
101
  ## What is Roam?
82
102
 
83
103
  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
104
 
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.
105
+ > **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
106
 
87
107
  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
108
 
89
109
  ```
90
- Codebase ──> [Index] ──> Semantic Graph ──> 177 Commands ──> AI Agent
110
+ Codebase ──> [Index] ──> Semantic Graph ──> 194 Commands ──> AI Agent
91
111
  │ │ │
92
112
  tree-sitter symbols comprehend
93
- 27 languages + edges govern
113
+ 28 languages + edges govern
94
114
  git history + metrics refactor
95
115
  runtime traces + architecture orchestrate
96
116
  ```
@@ -160,7 +180,7 @@ $ roam diff # blast radius of uncommitted changes
160
180
  - **`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
181
  - **`.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
182
  - **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.
183
+ - **205 CLI commands, 137 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
184
 
165
185
  ## What's New in v11
166
186
 
@@ -172,7 +192,7 @@ $ roam diff # blast radius of uncommitted changes
172
192
  ### v11.1.2 -- SQL + Scala Tier 1, 27 Languages
173
193
  - **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
194
  - **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.
195
+ - **28 languages** with 17 dedicated Tier 1 extractors.
176
196
  - `server.json` for official MCP Registry submission.
177
197
 
178
198
  ### v11.1.1 -- Command Quality Audit
@@ -296,10 +316,10 @@ First index takes ~5s for 200 files, ~15s for 1,000 files. Subsequent runs are i
296
316
 
297
317
  - **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
318
  - **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)
319
+ - **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))
320
+ - **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail + governance checks in one envelope)
301
321
  - **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/))
322
+ - **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
323
 
304
324
  <details>
305
325
  <summary><strong>Try it on Roam itself</strong></summary>
@@ -334,7 +354,7 @@ roam health
334
354
 
335
355
  ## Commands
336
356
 
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.
357
+ **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining ~200 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 **205 commands organised into 7 categories** (plus 7 aliases for muscle memory: `algo` → `math`, `weather` → `churn`, `digest` / `snapshot` / `trend` → `trends`, `onboard` → `understand`, `refs` → `uses`), but you don't need to know that to start.
338
358
 
339
359
  <details>
340
360
  <summary><strong>Full command reference</strong></summary>
@@ -376,28 +396,31 @@ roam health
376
396
  | `roam stats` | Aggregate metrics over the index: count by language, file role, kind, plus recent commit activity |
377
397
  | `roam timeline <symbol>` | Chronological commits that touched the file owning the symbol — author, date, lines added/removed |
378
398
  | `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` |
399
+ | `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
400
  | `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 |
401
+ | `roam pr-replay [<sha>] [--audit-trail]` | Replay a PR's analysis at a specific commit (or HEAD); useful for reproducing audit decisions and validating cache stability |
402
+ | `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
403
  | `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
404
  | `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). |
405
+ | `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against governance-evidence checks (chain integrity, timestamps, actors, reproducibility, retention) |
406
+ | `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
407
  | `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
408
  | `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
409
  | `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. |
410
+ | `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
411
  | `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
412
  | `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
413
  | `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 |
414
+ | `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
415
  | `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
416
  | `roam why-fail <test>` | Find recently-changed symbols transitively reachable from a failing test |
417
+ | `roam why-slow <symbol>` | Surface runtime hotspots and slow callers for a specific symbol (uses runtime traces if present) |
395
418
  | `roam recommend <symbol>` | Surface related symbols using call-graph + co-change + clone signals |
396
419
  | `roam graph-stats` | Graph-level invariants: density, weak components, non-trivial cycles, top inbound symbols |
397
420
  | `roam api [--scope <dir>]` | List the public API surface (exported public symbols + signatures) |
398
421
  | `roam exit-codes` | List every roam exit code with its meaning |
399
422
  | `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 |
423
+ | `roam audit [--brief]` | One-shot AI-governance audit envelope — chains health + debt + dead + risk + test-pyramid + api into a single envelope |
401
424
  | `roam disambiguate <name>` | List every symbol matching the name with file/line/kind/signature/docstring snippet to pick the right one |
402
425
  | `roam pre-commit [--install\|--print]` | Install or preview a roam-critique git pre-commit hook |
403
426
  | `roam mcp-status` | MCP server health: preset, registered tools, backpressure limits, cache entries, watcher state |
@@ -415,7 +438,7 @@ roam health
415
438
  | `roam retrieve <task> [--budget N] [--k N] [--seed-files PATH]` | Graph-aware context for free-form tasks: FTS5 + structural rerank (PageRank + clones) + token budget |
416
439
  | `roam critique [--input DIFF] [--intent TEXT] [--high-callers N]` | Verify a patch against the graph: clones-not-edited + blast radius + intent-vs-semantic-diff. Pipe `git diff` in. Exit 5 on high severity. |
417
440
  | `roam fleet plan <goal> [--n-agents N] [--adapter raw\|composio\|copilot]` | Graph-aware planner: Louvain partition + co-change + PageRank anchors → `.roam-fleet.json` for Composio/Copilot CLI/raw. |
418
- | `roam ask <query> [--list] [--explain] [--recipe NAME]` | One-phrase intent classifier over a 24-recipe registry with phase, review-lens, gate, and follow-up metadata — composes preflight/retrieve/critique/fleet/understand/diagnose/trace/trends/hotspots/debt/taint/dead/coupling to cover the most common workflows. |
441
+ | `roam ask <query> [--list] [--explain] [--recipe NAME]` | One-phrase intent classifier over a 25-recipe registry with phase, review-lens, gate, and follow-up metadata — composes preflight/retrieve/critique/fleet/understand/diagnose/trace/trends/hotspots/debt/taint/dead/coupling/stale-refs to cover the most common workflows. |
419
442
  | `roam workflow [RECIPE] [--list] [--query TEXT]` | Inspect a recipe DAG, review lenses, gates, rendered command arguments, and follow-up commands without running the workflow. |
420
443
  | `roam taint [--rules-dir PATH] [--rule NAME] [--rules-pack PACK] [--ci]` | Graph-reach taint analysis with OpenVEX-correct VEX justifications. YAML rule packs (10 starter packs: sqli, xss, ssrf, path-traversal, command-injection, deserialization, open-redirect, urllib, socketio, fileupload). |
421
444
  | `roam cga emit [--include-taint] [--sign --key]` | Code Graph Attestation — in-toto v1 statement with `roam-code.dev/CodeGraph/v1` predicate, Merkle root + edge bundle digest. `--include-taint` embeds OpenVEX-shaped reachability claims from `roam taint`. `--sign` signs with cosign (graceful skip if absent); `roam cga verify` round-trips both predicate digest and cosign signature. |
@@ -591,7 +614,7 @@ src/
591
614
  formatter.py # to_json, json_envelope
592
615
  cli.py # cli, LazyGroup
593
616
  mcp_server.py
594
- tests/ (186 files)
617
+ tests/ (267 files)
595
618
  ` ` `
596
619
 
597
620
  **Key symbols** (PageRank): `open_db` · `ensure_index` · `json_envelope` · `to_json` · `LanguageExtractor`
@@ -660,6 +683,8 @@ The sentinel pair `<!-- roam:minimap -->` / `<!-- /roam:minimap -->` is replaced
660
683
  | `roam bus-factor [--brain-methods]` | Knowledge loss risk per module |
661
684
  | `roam doc-staleness` | Detect stale docstrings |
662
685
  | `roam docs-coverage` | Public-symbol doc coverage + stale docs + PageRank-ranked missing-doc hotlist |
686
+ | `roam stale-refs [--gate] [--diff REF] [--fix preview\|apply]` | Find dangling file references AND markdown anchor mismatches — confidence-tagged rename hints from git history / basename / symbol graph; HIGH-confidence auto-fix; branch-diff filter for CI; SARIF export. Index-free. |
687
+ | `roam lsp` | Minimal LSP server (JSON-RPC over stdio). Wire into VS Code / Neovim / JetBrains as a custom server to get squiggly underlines on dangling links and missing anchors as you type. |
663
688
  | `roam suggest-refactoring [--limit N] [--min-score N]` | Proactive refactoring recommendations ranked by complexity, coupling, churn, smells, coverage gaps, and debt |
664
689
  | `roam plan-refactor <symbol> [--operation auto\|extract\|move]` | Ordered refactor plan with blast radius, test gaps, layer risk, and simulation-based strategy preview |
665
690
  | `roam test-scaffold <name\|file> [--write] [--framework F]` | Generate test file/function/import skeletons from symbol data (pytest, jest, Go, JUnit, RSpec) |
@@ -984,7 +1009,7 @@ pip install "roam-code[mcp]"
984
1009
  roam mcp
985
1010
  ```
986
1011
 
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.
1012
+ 137 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
1013
 
989
1014
  **MCP v2 highlights (v11):**
990
1015
  - In-process MCP execution (no subprocess shell-out per call)
@@ -1015,9 +1040,9 @@ ROAM_MCP_LITE=0 roam mcp
1015
1040
  Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`, `roam_complete`, `roam_complexity_report`, `roam_context`, `roam_dead_code`, `roam_deps`, `roam_diagnose`, `roam_diagnose_issue`, `roam_diff`, `roam_expand_toolset`, `roam_explore`, `roam_file_info`, `roam_health`, `roam_impact`, `roam_pr_risk`, `roam_preflight`, `roam_prepare_change`, `roam_review_change`, `roam_search_symbol`, `roam_syntax_check`, `roam_trace`, `roam_understand`, `roam_uses`.
1016
1041
 
1017
1042
  <details>
1018
- <summary><strong>MCP tool list (all 136)</strong></summary>
1043
+ <summary><strong>MCP tool list (all 137)</strong></summary>
1019
1044
 
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.*
1045
+ *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
1046
 
1022
1047
  | Tool | Description |
1023
1048
  |------|-------------|
@@ -1037,7 +1062,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
1037
1062
  | `roam_oracle_is_test_only` | Boolean oracle: are ALL callers of this symbol in test files? |
1038
1063
  | `roam_oracle_is_reachable_from_entry` | Boolean oracle: can BFS reach this symbol from any entry-point? |
1039
1064
  | `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) |
1065
+ | `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (shorter name) |
1041
1066
  | `roam_oracle_batch` | Run multiple oracle queries in one call (tri-state envelopes per result) |
1042
1067
  | `roam_taint_classify` | LLM-augmented taint classification (IDOR/AUTHZ/SQLI/...) via MCP sampling |
1043
1068
  | `roam_taint` | Static taint analysis — graph-reach BFS with OpenVEX-correct findings |
@@ -1050,10 +1075,10 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
1050
1075
  | `roam_pr_risk` | Risk score for pending changes |
1051
1076
  | `roam_pr_analyze` | Agent-aware PR verdict: pr-prep + AI-likelihood + `.roam/rules.yml` + INTENTIONAL/SAFE/REVIEW/BLOCK |
1052
1077
  | `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 |
1078
+ | `roam_metrics_push` | Push metrics-only summary (no source-code bodies) to Roam Cloud; default dry-run |
1054
1079
  | `roam_audit_trail_verify` | Verify SHA-256 chain integrity of an EU AI Act audit-trail JSONL |
1055
1080
  | `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) |
1081
+ | `roam_audit_trail_conformance_check` | Score the audit trail against governance-evidence checks (chain / timestamps / actors / reproducibility / retention) |
1057
1082
  | `roam_rules_validate` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs |
1058
1083
  | `roam_dogfood` | One-shot v2 stack runner — audit + pr-analyze + audit-trail + conformance in one envelope |
1059
1084
  | `roam_breaking_changes` | Detect breaking changes between refs |
@@ -1108,6 +1133,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
1108
1133
  | `roam_weather` | Code hotspots: churn x complexity ranking |
1109
1134
  | `roam_debt` | Hotspot-weighted technical debt prioritization with optional ROI estimate |
1110
1135
  | `roam_docs_coverage` | Doc coverage and stale-doc drift with PageRank-ranked missing docs |
1136
+ | `roam_stale_refs` | Find dangling file references — markdown links / HTML href-src / backtick paths whose target is missing |
1111
1137
  | `roam_suggest_refactoring` | Rank proactive refactoring candidates using complexity, coupling, churn, smells, and coverage gaps |
1112
1138
  | `roam_plan_refactor` | Build an ordered refactor plan for one symbol with risk/test/simulation context |
1113
1139
  | `roam_n1` | Detect N+1 I/O patterns in ORM code |
@@ -1240,11 +1266,11 @@ Add to `.vscode/mcp.json`:
1240
1266
 
1241
1267
  </details>
1242
1268
 
1243
- ## Roam Agent Review (PR bot for AI-generated changes)
1269
+ ## Roam Review (PR bot for AI-generated changes)
1244
1270
 
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.
1271
+ 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
1272
 
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.
1273
+ `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
1274
 
1249
1275
  ```bash
1250
1276
  git diff main..HEAD | roam pr-analyze --explain --with-reviewers --audit-trail
@@ -1252,7 +1278,7 @@ roam pr-analyze main..HEAD --gate # exit 5 on BLOCK (CI gat
1252
1278
  roam --json pr-analyze --input pr.diff | roam pr-comment-render # ready-to-post markdown
1253
1279
  roam pr-analyze --batch ./diffs/ --cache --parallel 4 # 24-55x speedup on incremental re-runs
1254
1280
  roam audit-trail-verify # check SHA-256 chain integrity
1255
- roam audit-trail-conformance-check --gate # EU AI Act Article 12 score (CI)
1281
+ roam audit-trail-conformance-check --gate # governance-evidence score (CI)
1256
1282
  ```
1257
1283
 
1258
1284
  **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 +1300,13 @@ rules:
1274
1300
 
1275
1301
  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
1302
 
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.
1303
+ 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
1304
 
1279
1305
  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
1306
 
1281
- ## Roam Cloud Lite (metrics history, no source upload)
1307
+ ## Roam Cloud (metrics history, no source upload)
1282
1308
 
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.
1309
+ `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
1310
 
1285
1311
  ```bash
1286
1312
  roam metrics-push --dry-run # local-only inspection
@@ -1515,7 +1541,7 @@ Codebase
1515
1541
  |
1516
1542
  [1] Discovery ──── git ls-files (respects .gitignore + .roamignore)
1517
1543
  |
1518
- [2] Parse ──────── tree-sitter AST per file (27 languages)
1544
+ [2] Parse ──────── tree-sitter AST per file (28 languages)
1519
1545
  |
1520
1546
  [3] Extract ────── symbols + references (calls, imports, inheritance)
1521
1547
  |
@@ -1614,11 +1640,11 @@ Each factor uses sigmoid health: `h = e^(-signal/scale)` (1 = pristine, approach
1614
1640
 
1615
1641
  roam-code is the only tool that combines graph algorithms (PageRank, Tarjan SCC, Louvain clustering), git archaeology, architecture simulation, and multi-agent partitioning in a single local CLI with zero API keys.
1616
1642
 
1617
- Documentation (local HTML in `docs/site/`, CI-deployed via `.github/workflows/pages.yml`):
1618
- - `docs/site/getting-started.html` — tutorial
1619
- - `docs/site/command-reference.html` — examples
1620
- - `docs/site/architecture.html` — diagram + internals
1621
- - `docs/site/landscape.html`competitor matrix
1643
+ Documentation lives at <https://roam-code.com/docs/>:
1644
+ - Tutorial — <https://roam-code.com/docs/getting-started>
1645
+ - Command reference — <https://roam-code.com/docs/command-reference>
1646
+ - Architecture guide — <https://roam-code.com/docs/architecture>
1647
+ - Integration tutorials <https://roam-code.com/docs/integration-tutorials>
1622
1648
 
1623
1649
  | Capability | roam-code | AI IDEs (Cursor, Windsurf) | AI Agents (Claude Code, Codex) | SAST (SonarQube, CodeQL) |
1624
1650
  |---|---|---|---|---|
@@ -1706,7 +1732,7 @@ Delete `.roam/` from your project root to clean up local data.
1706
1732
  git clone https://github.com/Cranot/roam-code.git
1707
1733
  cd roam-code
1708
1734
  pip install -e ".[dev]" # includes pytest, ruff
1709
- pytest tests/ # ~5500 tests, Python 3.9-3.13
1735
+ pytest tests/ # ~7,500 tests, Python 3.9-3.13
1710
1736
 
1711
1737
  # Or use Make targets:
1712
1738
  make dev # install with dev extras
@@ -1723,8 +1749,8 @@ roam-code/
1723
1749
  ├── action.yml # Reusable GitHub Action
1724
1750
  ├── src/roam/
1725
1751
  │ ├── __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)
1752
+ │ ├── cli.py # Click CLI (198 canonical + 7 aliases)
1753
+ │ ├── mcp_server.py # MCP server (137 tools, 10 resources, 5 prompts)
1728
1754
  │ ├── db/
1729
1755
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
1730
1756
  │ │ ├── schema.py # Tables, indexes, migrations
@@ -1795,7 +1821,7 @@ roam-code/
1795
1821
  │ ├── formatter.py # Token-efficient formatting
1796
1822
  │ ├── sarif.py # SARIF 2.1.0 output
1797
1823
  │ └── schema_registry.py # JSON envelope schema versioning
1798
- └── tests/ # ~5500 tests across 186 test files
1824
+ └── tests/ # ~7,500 tests across 267 test files
1799
1825
  ```
1800
1826
 
1801
1827
  </details>
@@ -1818,7 +1844,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1818
1844
  ### Shipped
1819
1845
 
1820
1846
  - [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.
1847
+ - [x] Full command and MCP inventory parity in docs: 198 canonical CLI commands (205 with aliases) and 137 MCP tools.
1822
1848
  - [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
1823
1849
  - [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
1824
1850
  - [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
@@ -1839,7 +1865,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1839
1865
  git clone https://github.com/Cranot/roam-code.git
1840
1866
  cd roam-code
1841
1867
  pip install -e .
1842
- pytest tests/ # all ~5500 tests must pass
1868
+ pytest tests/ # all ~7,500 tests must pass
1843
1869
  ```
1844
1870
 
1845
1871
  Good first contributions: add a [Tier 1 language](src/roam/languages/) (see `go_lang.py` or `php_lang.py` as templates), improve reference resolution, add benchmark repos, extend SARIF converters, add MCP tools.