roam-code 11.1.0__tar.gz → 11.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. {roam_code-11.1.0/src/roam_code.egg-info → roam_code-11.1.2}/PKG-INFO +89 -39
  2. roam_code-11.1.0/PKG-INFO → roam_code-11.1.2/README.md +85 -82
  3. {roam_code-11.1.0 → roam_code-11.1.2}/pyproject.toml +11 -4
  4. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/catalog/detectors.py +182 -21
  5. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/cli.py +18 -8
  6. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/changed_files.py +38 -5
  7. roam_code-11.1.2/src/roam/commands/cmd_adrs.py +555 -0
  8. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_adversarial.py +8 -0
  9. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_affected.py +3 -5
  10. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_affected_tests.py +16 -1
  11. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_agent_context.py +7 -1
  12. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_agent_export.py +4 -0
  13. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_agent_plan.py +7 -1
  14. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_ai_ratio.py +9 -27
  15. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_ai_readiness.py +8 -1
  16. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_alerts.py +22 -10
  17. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_annotate.py +3 -0
  18. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_api_changes.py +6 -7
  19. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_api_drift.py +4 -0
  20. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_attest.py +4 -0
  21. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_auth_gaps.py +5 -0
  22. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_bisect.py +5 -1
  23. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_breaking.py +27 -1
  24. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_budget.py +5 -1
  25. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_bus_factor.py +25 -2
  26. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_capsule.py +6 -0
  27. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_check_rules.py +4 -1
  28. roam_code-11.1.2/src/roam/commands/cmd_ci_setup.py +440 -0
  29. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_clean.py +4 -3
  30. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_closure.py +4 -12
  31. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_clusters.py +20 -2
  32. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_codeowners.py +14 -179
  33. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_complexity.py +30 -1
  34. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_config.py +4 -0
  35. roam_code-11.1.2/src/roam/commands/cmd_congestion.py +341 -0
  36. roam_code-11.1.2/src/roam/commands/cmd_context.py +1100 -0
  37. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_conventions.py +21 -1
  38. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_coupling.py +37 -2
  39. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_coverage_gaps.py +20 -4
  40. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_cut.py +22 -0
  41. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_dark_matter.py +6 -0
  42. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_dashboard.py +7 -2
  43. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_dead.py +6 -1
  44. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_debt.py +33 -3
  45. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_deps.py +12 -1
  46. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_describe.py +42 -32
  47. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_dev_profile.py +9 -20
  48. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_diagnose.py +5 -1
  49. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_diff.py +24 -3
  50. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_doc_staleness.py +25 -2
  51. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_docs_coverage.py +10 -1
  52. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_doctor.py +5 -1
  53. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_drift.py +8 -2
  54. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_duplicates.py +29 -0
  55. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_effects.py +4 -0
  56. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_endpoints.py +3 -3
  57. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_entry_points.py +15 -1
  58. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_fan.py +55 -5
  59. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_file.py +31 -26
  60. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_fingerprint.py +25 -0
  61. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_fitness.py +10 -4
  62. roam_code-11.1.2/src/roam/commands/cmd_flag_dead.py +556 -0
  63. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_fn_coupling.py +17 -0
  64. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_forecast.py +7 -7
  65. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_grep.py +25 -11
  66. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_guard.py +11 -1
  67. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_hooks.py +5 -1
  68. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_hotspots.py +6 -0
  69. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_impact.py +8 -3
  70. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_index.py +12 -4
  71. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_ingest_trace.py +4 -1
  72. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_init.py +12 -1
  73. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_intent.py +39 -4
  74. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_invariants.py +4 -0
  75. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_layers.py +6 -1
  76. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_map.py +17 -49
  77. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_math.py +49 -4
  78. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_mcp_setup.py +4 -0
  79. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_metrics.py +3 -1
  80. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_migration_safety.py +4 -2
  81. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_minimap.py +5 -0
  82. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_missing_index.py +10 -5
  83. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_module.py +12 -1
  84. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_mutate.py +4 -0
  85. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_n1.py +6 -6
  86. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_orchestrate.py +6 -0
  87. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_orphan_routes.py +4 -0
  88. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_over_fetch.py +4 -0
  89. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_owner.py +41 -7
  90. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_partition.py +6 -7
  91. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_path_coverage.py +63 -45
  92. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_patterns.py +15 -0
  93. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_plan.py +7 -0
  94. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_plan_refactor.py +18 -3
  95. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_pr_diff.py +6 -2
  96. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_preflight.py +7 -0
  97. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_relate.py +6 -1
  98. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_report.py +24 -3
  99. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_reset.py +4 -4
  100. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_risk.py +22 -2
  101. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_rules.py +8 -2
  102. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_safe_delete.py +8 -10
  103. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_safe_zones.py +13 -0
  104. roam_code-11.1.2/src/roam/commands/cmd_sbom.py +517 -0
  105. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_schema.py +6 -1
  106. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_search.py +17 -3
  107. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_search_semantic.py +7 -1
  108. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_secrets.py +5 -1
  109. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_semantic_diff.py +4 -5
  110. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_simulate.py +11 -0
  111. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_simulate_departure.py +28 -90
  112. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_sketch.py +33 -4
  113. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_smells.py +8 -1
  114. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_spectral.py +28 -1
  115. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_split.py +26 -1
  116. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_suggest_refactoring.py +8 -3
  117. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_suggest_reviewers.py +5 -74
  118. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_supply_chain.py +18 -5
  119. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_symbol.py +21 -2
  120. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_syntax_check.py +10 -40
  121. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_test_gaps.py +3 -0
  122. roam_code-11.1.2/src/roam/commands/cmd_test_scaffold.py +825 -0
  123. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_testmap.py +50 -1
  124. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_tour.py +35 -12
  125. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_trace.py +48 -2
  126. roam_code-11.1.2/src/roam/commands/cmd_trends.py +1723 -0
  127. roam_code-11.1.2/src/roam/commands/cmd_triage.py +338 -0
  128. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_understand.py +374 -36
  129. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_uses.py +19 -2
  130. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_verify.py +6 -2
  131. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_verify_imports.py +264 -0
  132. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_vibe_check.py +8 -1
  133. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_visualize.py +12 -2
  134. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_vuln_map.py +4 -0
  135. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_vuln_reach.py +5 -2
  136. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_vulns.py +26 -10
  137. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_watch.py +7 -3
  138. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_weather.py +29 -3
  139. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_why.py +5 -0
  140. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_ws.py +6 -1
  141. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_xlang.py +48 -2
  142. roam_code-11.1.2/src/roam/commands/codeowners_helpers.py +109 -0
  143. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/context_helpers.py +0 -1
  144. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/metrics_history.py +4 -0
  145. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/resolve.py +85 -0
  146. roam_code-11.1.2/src/roam/commands/suppression.py +309 -0
  147. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/competitor_site_data.py +19 -38
  148. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/db/connection.py +2 -0
  149. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/db/schema.py +1 -1
  150. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/fingerprint.py +1 -20
  151. roam_code-11.1.2/src/roam/graph/stats.py +24 -0
  152. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/discovery.py +26 -23
  153. roam_code-11.1.2/src/roam/index/gitignore.py +141 -0
  154. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/indexer.py +4 -2
  155. roam_code-11.1.2/src/roam/languages/extractor_schema.py +237 -0
  156. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/generic_lang.py +1 -1
  157. roam_code-11.1.2/src/roam/languages/query_engine.py +563 -0
  158. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/registry.py +6 -1
  159. roam_code-11.1.2/src/roam/languages/scala_lang.py +582 -0
  160. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/mcp_server.py +2 -0
  161. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/rules/dataflow.py +1 -2
  162. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/search/tfidf.py +11 -3
  163. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/surface_counts.py +9 -2
  164. roam_code-11.1.2/src/roam/templates/__init__.py +1 -0
  165. roam_code-11.1.2/src/roam/templates/ci/__init__.py +1 -0
  166. roam_code-11.1.0/README.md → roam_code-11.1.2/src/roam_code.egg-info/PKG-INFO +132 -36
  167. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam_code.egg-info/SOURCES.txt +52 -4
  168. roam_code-11.1.2/tests/test_adrs.py +108 -0
  169. roam_code-11.1.2/tests/test_alerts_cmd.py +591 -0
  170. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_anomaly.py +18 -18
  171. roam_code-11.1.2/tests/test_api_drift.py +88 -0
  172. roam_code-11.1.2/tests/test_auth_gaps.py +230 -0
  173. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_budget.py +2 -2
  174. roam_code-11.1.2/tests/test_bus_factor.py +483 -0
  175. roam_code-11.1.2/tests/test_ci_setup.py +93 -0
  176. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_commands_health.py +50 -50
  177. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_commands_workflow.py +15 -16
  178. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_competitor_site_data.py +12 -2
  179. roam_code-11.1.2/tests/test_congestion.py +90 -0
  180. roam_code-11.1.2/tests/test_conventions_cmd.py +500 -0
  181. roam_code-11.1.2/tests/test_coverage_gaps_cmd.py +399 -0
  182. roam_code-11.1.2/tests/test_describe.py +172 -0
  183. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_dev_profile.py +2 -0
  184. roam_code-11.1.2/tests/test_doc_staleness.py +70 -0
  185. roam_code-11.1.2/tests/test_docs_coverage.py +134 -0
  186. roam_code-11.1.2/tests/test_entry_points_cmd.py +325 -0
  187. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_exclude_patterns.py +214 -0
  188. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_exit_codes.py +1 -1
  189. roam_code-11.1.2/tests/test_flag_dead.py +125 -0
  190. roam_code-11.1.2/tests/test_fn_coupling.py +88 -0
  191. roam_code-11.1.2/tests/test_hotspots.py +335 -0
  192. roam_code-11.1.2/tests/test_init_cmd.py +178 -0
  193. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_json_contracts.py +0 -4
  194. roam_code-11.1.2/tests/test_language_corpus.py +245 -0
  195. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_math.py +191 -0
  196. roam_code-11.1.2/tests/test_migration_safety.py +482 -0
  197. roam_code-11.1.2/tests/test_missing_index.py +484 -0
  198. roam_code-11.1.2/tests/test_n1.py +256 -0
  199. roam_code-11.1.2/tests/test_onboard.py +349 -0
  200. roam_code-11.1.2/tests/test_orphan_routes.py +103 -0
  201. roam_code-11.1.2/tests/test_over_fetch.py +92 -0
  202. roam_code-11.1.2/tests/test_patterns_cmd.py +378 -0
  203. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_performance.py +8 -8
  204. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_pr_diff.py +2 -2
  205. roam_code-11.1.2/tests/test_report.py +211 -0
  206. roam_code-11.1.2/tests/test_risk.py +326 -0
  207. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_rules.py +2 -1
  208. roam_code-11.1.2/tests/test_sbom.py +108 -0
  209. roam_code-11.1.2/tests/test_scala.py +354 -0
  210. roam_code-11.1.2/tests/test_sketch.py +232 -0
  211. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_smoke.py +1 -2
  212. roam_code-11.1.2/tests/test_split_cmd.py +286 -0
  213. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_suggest_reviewers.py +12 -12
  214. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_supply_chain.py +5 -2
  215. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_surface_counts.py +8 -7
  216. roam_code-11.1.2/tests/test_test_scaffold.py +104 -0
  217. roam_code-11.1.2/tests/test_testmap.py +393 -0
  218. roam_code-11.1.2/tests/test_tour_cmd.py +209 -0
  219. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_trends.py +39 -23
  220. roam_code-11.1.2/tests/test_triage.py +149 -0
  221. roam_code-11.1.2/tests/test_uses_cmd.py +245 -0
  222. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_v6_features.py +23 -23
  223. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_v7_features.py +14 -22
  224. roam_code-11.1.2/tests/test_why.py +271 -0
  225. roam_code-11.1.2/tests/test_xlang.py +230 -0
  226. roam_code-11.1.0/src/roam/commands/cmd_context.py +0 -1151
  227. roam_code-11.1.0/src/roam/commands/cmd_digest.py +0 -214
  228. roam_code-11.1.0/src/roam/commands/cmd_onboard.py +0 -740
  229. roam_code-11.1.0/src/roam/commands/cmd_snapshot.py +0 -50
  230. roam_code-11.1.0/src/roam/commands/cmd_trend.py +0 -461
  231. roam_code-11.1.0/src/roam/commands/cmd_trends.py +0 -929
  232. roam_code-11.1.0/tests/test_docs_coverage.py +0 -58
  233. roam_code-11.1.0/tests/test_onboard.py +0 -533
  234. {roam_code-11.1.0 → roam_code-11.1.2}/LICENSE +0 -0
  235. {roam_code-11.1.0 → roam_code-11.1.2}/setup.cfg +0 -0
  236. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/__init__.py +0 -0
  237. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/__main__.py +0 -0
  238. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/analysis/__init__.py +0 -0
  239. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/analysis/effects.py +0 -0
  240. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/analysis/taint.py +0 -0
  241. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/api.py +0 -0
  242. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/bridges/__init__.py +0 -0
  243. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/bridges/base.py +0 -0
  244. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/bridges/bridge_config.py +0 -0
  245. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/bridges/bridge_protobuf.py +0 -0
  246. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/bridges/bridge_rest_api.py +0 -0
  247. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/bridges/bridge_salesforce.py +0 -0
  248. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/bridges/bridge_template.py +0 -0
  249. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/bridges/registry.py +0 -0
  250. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/catalog/__init__.py +0 -0
  251. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/catalog/fixes.py +0 -0
  252. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/catalog/smells.py +0 -0
  253. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/catalog/tasks.py +0 -0
  254. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/__init__.py +0 -0
  255. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_health.py +0 -0
  256. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/cmd_pr_risk.py +0 -0
  257. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/gate_presets.py +0 -0
  258. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/graph_helpers.py +0 -0
  259. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/commands/next_steps.py +0 -0
  260. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/coverage_reports.py +0 -0
  261. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/db/__init__.py +0 -0
  262. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/db/queries.py +0 -0
  263. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/exit_codes.py +0 -0
  264. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/__init__.py +0 -0
  265. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/anomaly.py +0 -0
  266. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/builder.py +0 -0
  267. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/clusters.py +0 -0
  268. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/cycles.py +0 -0
  269. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/dark_matter.py +0 -0
  270. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/diff.py +0 -0
  271. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/layers.py +0 -0
  272. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/pagerank.py +0 -0
  273. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/partition.py +0 -0
  274. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/pathfinding.py +0 -0
  275. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/propagation.py +0 -0
  276. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/simulate.py +0 -0
  277. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/graph/spectral.py +0 -0
  278. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/__init__.py +0 -0
  279. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/complexity.py +0 -0
  280. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/file_roles.py +0 -0
  281. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/git_stats.py +0 -0
  282. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/incremental.py +0 -0
  283. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/parser.py +0 -0
  284. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/relations.py +0 -0
  285. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/symbols.py +0 -0
  286. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/index/test_conventions.py +0 -0
  287. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/__init__.py +0 -0
  288. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/apex_lang.py +0 -0
  289. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/aura_lang.py +0 -0
  290. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/base.py +0 -0
  291. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/c_lang.py +0 -0
  292. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/csharp_lang.py +0 -0
  293. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/foxpro_lang.py +0 -0
  294. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/go_lang.py +0 -0
  295. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/hcl_lang.py +0 -0
  296. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/java_lang.py +0 -0
  297. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/javascript_lang.py +0 -0
  298. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/kotlin_lang.py +0 -0
  299. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/php_lang.py +0 -0
  300. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/python_lang.py +0 -0
  301. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/ruby_lang.py +0 -0
  302. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/rust_lang.py +0 -0
  303. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/sfxml_lang.py +0 -0
  304. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/swift_lang.py +0 -0
  305. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/typescript_lang.py +0 -0
  306. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/visualforce_lang.py +0 -0
  307. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/languages/yaml_lang.py +0 -0
  308. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/output/__init__.py +0 -0
  309. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/output/formatter.py +0 -0
  310. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/output/mermaid.py +0 -0
  311. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/output/sarif.py +0 -0
  312. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/output/schema_registry.py +0 -0
  313. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/plugins.py +0 -0
  314. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/refactor/__init__.py +0 -0
  315. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/refactor/codegen.py +0 -0
  316. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/refactor/transforms.py +0 -0
  317. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/rules/__init__.py +0 -0
  318. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/rules/ast_match.py +0 -0
  319. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/rules/builtin.py +0 -0
  320. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/rules/engine.py +0 -0
  321. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/runtime/__init__.py +0 -0
  322. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/runtime/hotspots.py +0 -0
  323. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/runtime/trace_ingest.py +0 -0
  324. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/search/__init__.py +0 -0
  325. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/search/framework_packs.py +0 -0
  326. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/search/index_embeddings.py +0 -0
  327. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/search/onnx_embeddings.py +0 -0
  328. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/security/__init__.py +0 -0
  329. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/security/vuln_reach.py +0 -0
  330. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/security/vuln_store.py +0 -0
  331. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/workspace/__init__.py +0 -0
  332. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/workspace/aggregator.py +0 -0
  333. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/workspace/api_scanner.py +0 -0
  334. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/workspace/config.py +0 -0
  335. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam/workspace/db.py +0 -0
  336. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam_code.egg-info/dependency_links.txt +0 -0
  337. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam_code.egg-info/entry_points.txt +0 -0
  338. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam_code.egg-info/requires.txt +0 -0
  339. {roam_code-11.1.0 → roam_code-11.1.2}/src/roam_code.egg-info/top_level.txt +0 -0
  340. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_adversarial.py +0 -0
  341. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_affected.py +0 -0
  342. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_agent_export.py +0 -0
  343. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_agent_mode.py +0 -0
  344. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_agent_plan_context.py +0 -0
  345. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_ai_ratio.py +0 -0
  346. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_ai_readiness.py +0 -0
  347. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_annotations.py +0 -0
  348. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_api_changes.py +0 -0
  349. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_attest.py +0 -0
  350. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_backend_fixes_round2.py +0 -0
  351. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_backend_fixes_round3.py +0 -0
  352. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_basic.py +0 -0
  353. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_batch_mcp.py +0 -0
  354. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_bisect.py +0 -0
  355. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_bridges.py +0 -0
  356. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_bridges_extended.py +0 -0
  357. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_budget_flag.py +0 -0
  358. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_budget_phase2.py +0 -0
  359. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_capsule.py +0 -0
  360. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_check_rules.py +0 -0
  361. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_ci_gate_eval.py +0 -0
  362. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_ci_sarif_guard.py +0 -0
  363. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_closure.py +0 -0
  364. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_codeowners.py +0 -0
  365. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_commands_architecture.py +0 -0
  366. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_commands_exploration.py +0 -0
  367. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_commands_refactoring.py +0 -0
  368. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_comprehensive.py +0 -0
  369. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_context_propagation.py +0 -0
  370. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_coverage_ingestion.py +0 -0
  371. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_cut.py +0 -0
  372. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_dark_matter.py +0 -0
  373. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_dashboard.py +0 -0
  374. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_dataflow_dead.py +0 -0
  375. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_dead_aging.py +0 -0
  376. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_defer_loading.py +0 -0
  377. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_demo_gif_asset.py +0 -0
  378. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_deterministic_output.py +0 -0
  379. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_difficulty_scoring.py +0 -0
  380. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_docker_assets.py +0 -0
  381. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_docs_site_quality.py +0 -0
  382. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_doctor.py +0 -0
  383. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_drift.py +0 -0
  384. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_duplicates.py +0 -0
  385. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_effects.py +0 -0
  386. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_effects_propagation.py +0 -0
  387. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_endpoints.py +0 -0
  388. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_file_roles.py +0 -0
  389. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_fingerprint.py +0 -0
  390. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_fixes.py +0 -0
  391. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_forecast.py +0 -0
  392. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_formatters.py +0 -0
  393. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_foxpro.py +0 -0
  394. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_framework_detection.py +0 -0
  395. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_gate_presets.py +0 -0
  396. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_guard.py +0 -0
  397. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_health_gate.py +0 -0
  398. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_hooks.py +0 -0
  399. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_index.py +0 -0
  400. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_install_check.py +0 -0
  401. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_intent.py +0 -0
  402. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_invariants.py +0 -0
  403. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_kotlin_swift_extractors.py +0 -0
  404. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_languages.py +0 -0
  405. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_library_api.py +0 -0
  406. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_math_tips.py +0 -0
  407. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_mcp_server.py +0 -0
  408. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_mcp_setup.py +0 -0
  409. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_mermaid.py +0 -0
  410. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_metrics_cmd.py +0 -0
  411. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_minimap.py +0 -0
  412. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_mutate.py +0 -0
  413. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_next_steps.py +0 -0
  414. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_orchestrate.py +0 -0
  415. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_oss_bench_harness.py +0 -0
  416. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_pagerank_truncation.py +0 -0
  417. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_partition.py +0 -0
  418. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_path_coverage.py +0 -0
  419. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_plan.py +0 -0
  420. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_plugin_discovery.py +0 -0
  421. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_pr_comment_script.py +0 -0
  422. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_pr_risk_author.py +0 -0
  423. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_progress.py +0 -0
  424. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_progressive_disclosure.py +0 -0
  425. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_properties.py +0 -0
  426. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_python_extractor_v2.py +0 -0
  427. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_readme_surface_consistency.py +0 -0
  428. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_refactoring_intelligence.py +0 -0
  429. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_relate.py +0 -0
  430. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_reset_clean.py +0 -0
  431. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_resolve.py +0 -0
  432. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_ruby.py +0 -0
  433. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_rule_profiles.py +0 -0
  434. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_rules_ast_match.py +0 -0
  435. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_rules_community_pack.py +0 -0
  436. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_rules_dataflow.py +0 -0
  437. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_rules_symbol_requirements.py +0 -0
  438. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_runtime.py +0 -0
  439. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_salesforce.py +0 -0
  440. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_sarif_flag.py +0 -0
  441. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_schema_versioning.py +0 -0
  442. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_search_explain.py +0 -0
  443. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_secrets.py +0 -0
  444. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_secrets_v2.py +0 -0
  445. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_semantic_diff.py +0 -0
  446. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_semantic_onnx.py +0 -0
  447. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_semantic_search.py +0 -0
  448. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_simulate.py +0 -0
  449. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_simulate_departure.py +0 -0
  450. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_smells.py +0 -0
  451. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_sna_metrics.py +0 -0
  452. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_spectral.py +0 -0
  453. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_syntax_check.py +0 -0
  454. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_taint_analysis.py +0 -0
  455. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_test_conventions.py +0 -0
  456. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_test_gaps.py +0 -0
  457. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_trends_cohort.py +0 -0
  458. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_v71_features.py +0 -0
  459. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_v82_features.py +0 -0
  460. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_verify.py +0 -0
  461. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_verify_imports.py +0 -0
  462. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_vibe_check.py +0 -0
  463. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_visualize.py +0 -0
  464. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_vuln.py +0 -0
  465. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_vulns_cmd.py +0 -0
  466. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_watch.py +0 -0
  467. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_workspace.py +0 -0
  468. {roam_code-11.1.0 → roam_code-11.1.2}/tests/test_yaml_hcl.py +0 -0
@@ -1,15 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roam-code
3
- Version: 11.1.0
3
+ Version: 11.1.2
4
4
  Summary: Instant codebase comprehension for AI coding agents
5
5
  Author: CosmoHac
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/Cranot/roam-code
8
- Project-URL: Documentation, https://github.com/Cranot/roam-code#readme
8
+ Project-URL: Documentation, https://cranot.github.io/roam-code/
9
9
  Project-URL: Repository, https://github.com/Cranot/roam-code
10
10
  Project-URL: Issues, https://github.com/Cranot/roam-code/issues
11
+ Project-URL: Changelog, https://github.com/Cranot/roam-code/blob/main/CHANGELOG.md
11
12
  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
12
- Classifier: Development Status :: 4 - Beta
13
+ Classifier: Development Status :: 5 - Production/Stable
13
14
  Classifier: Environment :: Console
14
15
  Classifier: Intended Audience :: Developers
15
16
  Classifier: Operating System :: OS Independent
@@ -50,7 +51,7 @@ Dynamic: license-file
50
51
 
51
52
  **The architectural intelligence layer for AI coding agents. Structural graph, architecture governance, multi-agent orchestration, vulnerability mapping, runtime analysis -- one CLI, zero API keys.**
52
53
 
53
- *137 commands · 101 MCP tools · 26 languages · 100% local*
54
+ *139 commands · 101 MCP tools · 26 languages · 100% local*
54
55
 
55
56
  [![PyPI version](https://img.shields.io/pypi/v/roam-code?style=flat-square&color=blue)](https://pypi.org/project/roam-code/)
56
57
  [![GitHub stars](https://img.shields.io/github/stars/Cranot/roam-code?style=flat-square)](https://github.com/Cranot/roam-code/stargazers)
@@ -69,7 +70,7 @@ Roam is a structural intelligence engine for software. It pre-indexes your codeb
69
70
  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.
70
71
 
71
72
  ```
72
- Codebase ──> [Index] ──> Semantic Graph ──> 137 Commands ──> AI Agent
73
+ Codebase ──> [Index] ──> Semantic Graph ──> 139 Commands ──> AI Agent
73
74
  │ │ │
74
75
  tree-sitter symbols comprehend
75
76
  26 languages + edges govern
@@ -110,7 +111,15 @@ $ roam diff # blast radius of uncommitted changes
110
111
 
111
112
  ## What's New in v11
112
113
 
113
- ### MCP v2 for Agent-First Workflows
114
+ ### v11.1.1 -- Command Quality Audit
115
+ - **Full command audit**: all 139 commands reviewed for usefulness, duplicates, and test coverage. ~20 bugs fixed, 21 new test files (700+ tests), every command docstring updated with cross-references to related commands.
116
+ - **Kotlin promoted to Tier 1** via new YAML-based declarative extractor architecture. Classes, interfaces, enums, objects, functions, methods, properties, and inheritance fully extracted.
117
+ - **7 new commands**: `roam congestion`, `roam adrs`, `roam flag-dead`, `roam test-scaffold`, `roam sbom`, `roam triage`, `roam ci-setup`.
118
+ - **CI templates**: `roam ci-setup` generates pipelines for GitHub Actions, GitLab CI, Azure Pipelines, Jenkins, and Bitbucket.
119
+ - **Bug fixes**: `--undocumented` mode in `intent` (wrong DB table), `--changed` flag in `verify` (was permanently dead), lazy-load violation in `visualize` (~500ms penalty), exit code inconsistency in `rules`, VERDICT-first convention enforced across all commands.
120
+ - **Code quality**: 15 unused variables removed, dead code swept (4 orphaned cmd files, 2 dead helper functions), algo detector false-positive rate reduced (regex-in-loop: 7 to 1, list-prepend deque suppression), 6 regex patterns pre-compiled for loop performance.
121
+
122
+ ### v11.0 -- MCP v2 for Agent-First Workflows
114
123
  - In-process MCP execution removes per-call subprocess overhead.
115
124
  - 4 compound operations (`roam_explore`, `roam_prepare_change`, `roam_review_change`, `roam_diagnose_issue`) reduce multi-step agent workflows to single calls.
116
125
  - Preset-based tool surfacing (`core`, `review`, `refactor`, `debug`, `architecture`, `full`) keeps default tool choice tight for agents while retaining full depth on demand.
@@ -258,7 +267,7 @@ roam health
258
267
 
259
268
  ## Commands
260
269
 
261
- The [5 core commands](#core-commands) shown above cover ~80% of agent workflows. All 137 commands are organized into 7 categories.
270
+ The [5 core commands](#core-commands) shown above cover ~80% of agent workflows. All 139 commands are organized into 7 categories.
262
271
 
263
272
  <details>
264
273
  <summary><strong>Full command reference</strong></summary>
@@ -275,7 +284,7 @@ The [5 core commands](#core-commands) shown above cover ~80% of agent workflows.
275
284
  | `roam reset [--hard]` | Reset the roam index and cached data. `--hard` removes all `.roam/` artifacts |
276
285
  | `roam clean [--all]` | Remove stale or orphaned index entries without a full rebuild |
277
286
  | `roam understand` | Full codebase briefing: tech stack, architecture, key abstractions, health, conventions, complexity overview, entry points |
278
- | `roam onboard` | Structured onboarding guide: architecture map, key files, suggested reading order, and first tasks |
287
+ | `roam onboard` | Alias for `understand` |
279
288
  | `roam tour [--write PATH]` | Auto-generated onboarding guide: top symbols, reading order, entry points, language breakdown. `--write` saves to Markdown |
280
289
  | `roam describe [--write] [--force] [-o PATH] [--agent-prompt]` | Auto-generate project description for AI agents. `--write` auto-detects your agent's config file. `--agent-prompt` returns a compact (<500 token) system prompt |
281
290
  | `roam agent-export [--format F] [--write]` | Generate agent-context bundle from project analysis (`AGENTS.md` + provider-specific overlays) |
@@ -285,6 +294,8 @@ The [5 core commands](#core-commands) shown above cover ~80% of agent workflows.
285
294
  | `roam schema [--diff] [--version V]` | JSON envelope schema versioning: view, diff, and validate output schemas |
286
295
  | `roam mcp [--list-tools] [--transport T]` | Start MCP server (stdio/SSE/streamable-http), inspect available tools, and expose roam to coding agents |
287
296
  | `roam mcp-setup <platform>` | Generate MCP config snippets for AI platforms: claude-code, cursor, windsurf, vscode, gemini-cli, codex-cli |
297
+ | `roam ci-setup [--platform P] [--write]` | Generate CI/CD pipeline config (GitHub Actions, GitLab CI, Azure Pipelines, Jenkins, Bitbucket) with SARIF + quality gates |
298
+ | `roam adrs [--status S] [--limit N]` | Discover Architecture Decision Records, link to affected code modules, show status and coverage |
288
299
 
289
300
  ### Daily Workflow
290
301
 
@@ -316,6 +327,7 @@ The [5 core commands](#core-commands) shown above cover ~80% of agent workflows.
316
327
  | `roam syntax-check [--changed] [PATHS...]` | Tree-sitter syntax integrity check for changed files and multi-agent judge workflows |
317
328
  | `roam verify [--threshold N]` | Pre-commit AI-code consistency check across naming, imports, error handling, and duplication signals |
318
329
  | `roam verify-imports [--file F]` | Import hallucination firewall: validate all imports against indexed symbol table, suggest corrections via FTS5 fuzzy matching |
330
+ | `roam triage list\|add\|stats\|check` | Security finding suppression workflow: manage `.roam-suppressions.yml` (SAFE/ACKNOWLEDGED/WONT-FIX status lifecycle) |
319
331
  | `roam safe-delete <symbol>` | Safe deletion check: SAFE/REVIEW/UNSAFE verdict |
320
332
  | `roam test-map <name>` | Map a symbol or file to its test coverage |
321
333
  | `roam adversarial [--staged] [--range R]` | Adversarial architecture review: generates targeted challenges based on changes |
@@ -343,11 +355,8 @@ The [5 core commands](#core-commands) shown above cover ~80% of agent workflows.
343
355
  | `roam debt [--roi]` | Hotspot-weighted tech debt prioritization with SQALE remediation costs and optional refactoring ROI estimates |
344
356
  | `roam fitness [--explain]` | Architectural fitness functions from `.roam/fitness.yaml` |
345
357
  | `roam alerts` | Health degradation trend detection (Mann-Kendall + Sen's slope) |
346
- | `roam snapshot [--tag TAG]` | Persist health metrics snapshot for trend tracking |
347
- | `roam trend` | Health score history with sparkline visualization |
348
- | `roam digest [--brief] [--since TAG]` | Compare current metrics against last snapshot |
349
358
  | `roam forecast [--symbol S] [--horizon N] [--alert-only]` | Predict when metrics will exceed thresholds: Theil-Sen regression on snapshot history + churn-weighted per-symbol risk |
350
- | `roam budget [--init] [--staged] [--range R]` | Architectural budget enforcement: per-PR delta limits on health, cycles, complexity. CI gate (exit 1 on violation) |
359
+ | `roam budget [--init] [--staged] [--range R]` | Architectural budget enforcement: per-PR delta limits on health, cycles, complexity. CI gate (exit 5 on violation) |
351
360
  | `roam bisect [--metric M] [--range R]` | Architectural git bisect: find the commit that degraded a specific metric |
352
361
  | `roam ingest-trace <file> [--otel\|--jaeger\|--zipkin\|--generic]` | Ingest runtime trace data (OpenTelemetry, Jaeger, Zipkin) for hotspot overlay |
353
362
  | `roam hotspots [--runtime] [--discrepancy]` | Runtime hotspot analysis: find symbols missed by static analysis but critical at runtime |
@@ -450,19 +459,19 @@ src/
450
459
  bridges/
451
460
  base.py # LanguageBridge
452
461
  registry.py # register_bridge, detect_bridges
453
- commands/ (134 files) # is_test_file, get_changed_files
462
+ commands/ (137 cmd files) # is_test_file, get_changed_files
454
463
  db/
455
464
  connection.py # find_project_root, batched_in
456
465
  schema.py
457
466
  graph/
458
467
  builder.py # build_symbol_graph, build_file_graph
459
468
  pagerank.py # compute_pagerank, compute_centrality
460
- languages/ (20 files) # ApexExtractor
469
+ languages/ (21 files) # ApexExtractor
461
470
  output/
462
471
  formatter.py # to_json, json_envelope
463
472
  cli.py # cli, LazyGroup
464
473
  mcp_server.py
465
- tests/ (151 files)
474
+ tests/ (186 files)
466
475
  ` ` `
467
476
 
468
477
  **Key symbols** (PageRank): `open_db` · `ensure_index` · `json_envelope` · `to_json` · `LanguageExtractor`
@@ -498,6 +507,7 @@ The sentinel pair `<!-- roam:minimap -->` / `<!-- /roam:minimap -->` is replaced
498
507
  | `roam spectral [--depth N] [--compare] [--gap-only] [--k K]` | Spectral bisection: Fiedler vector partition tree with algebraic connectivity gap verdict |
499
508
  | `roam layers` | Topological dependency layers + upward violations + Gini balance |
500
509
  | `roam dead [--all] [--summary] [--clusters]` | Unreferenced exported symbols with safety verdicts + confidence scoring (60-95%) |
510
+ | `roam flag-dead [--config FILE] [--include-tests]` | Feature flag dead code detection: stale LaunchDarkly/Unleash/Split/custom flags with staleness analysis |
501
511
  | `roam fan [symbol\|file] [-n N] [--no-framework]` | Fan-in/fan-out: most connected symbols or files |
502
512
  | `roam risk [-n N] [--domain KW] [--explain]` | Domain-weighted risk ranking |
503
513
  | `roam why <name> [name2 ...]` | Role classification (Hub/Bridge/Core/Leaf), reach, criticality |
@@ -531,6 +541,7 @@ The sentinel pair `<!-- roam:minimap -->` / `<!-- /roam:minimap -->` is replaced
531
541
  | `roam docs-coverage` | Public-symbol doc coverage + stale docs + PageRank-ranked missing-doc hotlist |
532
542
  | `roam suggest-refactoring [--limit N] [--min-score N]` | Proactive refactoring recommendations ranked by complexity, coupling, churn, smells, coverage gaps, and debt |
533
543
  | `roam plan-refactor <symbol> [--operation auto\|extract\|move]` | Ordered refactor plan with blast radius, test gaps, layer risk, and simulation-based strategy preview |
544
+ | `roam test-scaffold <name\|file> [--write] [--framework F]` | Generate test file/function/import skeletons from symbol data (pytest, jest, Go, JUnit, RSpec) |
534
545
  | `roam conventions` | Auto-detect naming styles, import preferences. Flags outliers |
535
546
  | `roam breaking [REV_RANGE]` | Breaking change detection: removed exports, signature changes |
536
547
  | `roam affected-tests <symbol\|file>` | Trace reverse call graph to test files |
@@ -565,6 +576,8 @@ The sentinel pair `<!-- roam:minimap -->` / `<!-- /roam:minimap -->` is replaced
565
576
  | `roam vuln-map --generic\|--npm-audit\|--trivy F` | Ingest vulnerability reports and match to codebase symbols |
566
577
  | `roam vuln-reach [--cve C] [--from E]` | Vulnerability reachability: exact paths from entry points to vulnerable calls |
567
578
  | `roam supply-chain [--top N]` | Dependency risk dashboard: pin coverage, risk scoring, supply-chain health |
579
+ | `roam sbom [--format cyclonedx\|spdx] [--no-reachability] [-o FILE]` | SBOM generation (CycloneDX 1.5 / SPDX 2.3) enriched with call-graph reachability per dependency |
580
+ | `roam congestion [--window N] [--min-authors N]` | Developer congestion detection: concurrent authors per file, coordination risk scoring |
568
581
  | `roam invariants [--staged] [--range R]` | Discover architectural contracts (invariants) from the codebase structure |
569
582
 
570
583
  ### Multi-Repo Workspace
@@ -586,7 +599,7 @@ The sentinel pair `<!-- roam:minimap -->` / `<!-- /roam:minimap -->` is replaced
586
599
  | `roam --json <command>` | Structured JSON output with consistent envelope |
587
600
  | `roam --compact <command>` | Token-efficient output: TSV tables, minimal JSON envelope |
588
601
  | `roam --sarif <command>` | SARIF 2.1.0 output for dead, health, complexity, rules, secrets, and algo (GitHub/CI integration) |
589
- | `roam <command> --gate EXPR` | CI quality gate (e.g., `--gate score>=70`). Exit code 1 on failure |
602
+ | `roam health --gate` | CI quality gate. Reads `.roam-gates.yml` thresholds. Exit code 5 on failure |
590
603
 
591
604
  </details>
592
605
 
@@ -731,7 +744,7 @@ Blueprint Bridge fan-in:18 reach:34 moderate Coupling point between
731
744
  $ roam describe --write
732
745
  Wrote CLAUDE.md (98 lines) # auto-detects: CLAUDE.md, AGENTS.md, .cursor/rules, etc.
733
746
 
734
- $ roam health --gate score>=70
747
+ $ roam health --gate
735
748
  Health: 78/100 — PASS
736
749
  ```
737
750
 
@@ -837,7 +850,7 @@ Run `roam --help` for all commands. Use `roam --json <cmd>` for structured outpu
837
850
  | "What breaks if I change X?" | `roam impact <symbol>` | No direct equivalent |
838
851
  | "What tests to run?" | `roam affected-tests <name>` | Grep for imports (misses indirect) |
839
852
  | "What's causing this bug?" | `roam diagnose <name>` | Manual call-chain tracing |
840
- | "Codebase health score for CI" | `roam health --gate score>=70` | No equivalent |
853
+ | "Codebase health score for CI" | `roam health --gate` | No equivalent |
841
854
 
842
855
  </details>
843
856
 
@@ -1083,20 +1096,24 @@ jobs:
1083
1096
 
1084
1097
  - uses: Cranot/roam-code@main
1085
1098
  with:
1086
- command: health --gate score>=70
1099
+ commands: health
1100
+ gate: "score>=70"
1101
+ sarif: true
1087
1102
  comment: true
1088
- fail-on-violation: true
1089
1103
  ```
1090
1104
 
1091
1105
  Use `roam init` to auto-generate this workflow.
1092
1106
 
1093
1107
  | Input | Default | Description |
1094
1108
  |-------|---------|-------------|
1095
- | `command` | `health` | Roam command to run |
1096
- | `python-version` | `3.12` | Python version |
1097
- | `comment` | `false` | Post results as PR comment |
1098
- | `fail-on-violation` | `false` | Fail the job on violations |
1099
- | `roam-version` | (latest) | Pin to a specific version |
1109
+ | `commands` | `health` | Space-separated roam commands to run |
1110
+ | `gate` | (empty) | Quality gate expression (e.g., `score>=70`). Exit 5 on failure |
1111
+ | `sarif` | `false` | Upload SARIF results to GitHub Code Scanning |
1112
+ | `comment` | `true` | Post sticky PR comment with results |
1113
+ | `python-version` | `3.11` | Python version |
1114
+ | `version` | `latest` | Pin to a specific roam-code version |
1115
+ | `cache` | `true` | Cache the SQLite index between runs |
1116
+ | `changed-only` | `false` | Incremental mode: adapt commands to changed files |
1100
1117
 
1101
1118
  <details>
1102
1119
  <summary><strong>GitLab CI</strong></summary>
@@ -1109,7 +1126,7 @@ roam-analysis:
1109
1126
  - pip install roam-code
1110
1127
  script:
1111
1128
  - roam index
1112
- - roam health --gate score>=70
1129
+ - roam health --gate
1113
1130
  - roam --json pr-risk origin/main..HEAD > roam-report.json
1114
1131
  artifacts:
1115
1132
  paths:
@@ -1128,7 +1145,7 @@ Universal pattern:
1128
1145
  ```bash
1129
1146
  pip install roam-code
1130
1147
  roam index
1131
- roam health --gate score>=70 # exit 1 on failure
1148
+ roam health --gate # exit 5 on failure (reads .roam-gates.yml)
1132
1149
  roam --json health > report.json
1133
1150
  ```
1134
1151
 
@@ -1167,9 +1184,9 @@ Zero infrastructure, zero vendor lock-in, zero data leaving your network.
1167
1184
 
1168
1185
  **Week 1-2 (pilot):** 1-2 developers run `roam init` on one repo. Use `roam preflight` before changes, `roam pr-risk` before PRs.
1169
1186
 
1170
- **Week 3-4 (expand):** Add `roam health --gate score>=60` to CI as a non-blocking check.
1187
+ **Week 3-4 (expand):** Add `roam health --gate` to CI as a non-blocking check (configure thresholds in `.roam-gates.yml`).
1171
1188
 
1172
- **Month 2+ (standardize):** Tighten to `--gate score>=70`. Expand to additional repos. Track trajectory with `roam trend`.
1189
+ **Month 2+ (standardize):** Tighten gate thresholds. Expand to additional repos. Track trajectory with `roam trends`.
1173
1190
 
1174
1191
  </details>
1175
1192
 
@@ -1222,12 +1239,14 @@ Cross-language edges mean `roam impact AccountService` shows blast radius across
1222
1239
  </details>
1223
1240
 
1224
1241
  | Ruby | `.rb` | classes, modules, methods, singleton methods, constants | require, require_relative, include/extend, calls, ClassName.new | class inheritance |
1242
+ | Kotlin | `.kt` `.kts` | classes, interfaces, enums, objects, functions, methods, properties | imports, calls, type refs | extends, implements |
1243
+ | Swift | `.swift` | classes, structs, enums, protocols, functions, methods, properties | imports, calls, type refs | extends, conforms |
1225
1244
  | JSONC | `.jsonc` | via JSON grammar | -- | -- |
1226
1245
  | MDX | `.mdx` | via Markdown grammar | -- | -- |
1227
1246
 
1228
1247
  ### Tier 2 -- Generic extraction
1229
1248
 
1230
- Kotlin (`.kt` `.kts`), Swift (`.swift`), Scala (`.scala` `.sc`)
1249
+ Scala (`.scala` `.sc`)
1231
1250
 
1232
1251
  Tier 2 languages get symbol extraction and basic inheritance via a generic tree-sitter walker.
1233
1252
 
@@ -1304,6 +1323,37 @@ Codebase
1304
1323
 
1305
1324
  After the first full index, `roam index` only re-processes changed files (mtime + SHA-256 hash). Incremental updates are near-instant.
1306
1325
 
1326
+ ### .roamignore
1327
+
1328
+ Create a `.roamignore` file in your project root to exclude files from indexing. It uses **full gitignore syntax**:
1329
+
1330
+ | Pattern | Meaning |
1331
+ |---------|---------|
1332
+ | `*.log` | Exclude all `.log` files (basename match) |
1333
+ | `vendor/` | Exclude the `vendor` directory and everything under it |
1334
+ | `/build/` | Exclude `build/` at repo root only (anchored) |
1335
+ | `src/**/*.pb.go` | Exclude `.pb.go` files at any depth under `src/` |
1336
+ | `**/test_*.py` | Exclude `test_*.py` files anywhere |
1337
+ | `?` | Match any single character (not `/`) |
1338
+ | `[abc]` / `[!abc]` | Character class / negated character class |
1339
+ | `!important.log` | Un-exclude (re-include) `important.log` |
1340
+ | `# comment` | Lines starting with `#` are comments |
1341
+
1342
+ Key rules: `*` matches within a single path segment (not across `/`). `**` matches across `/` boundaries. Last matching pattern wins (for negation). Patterns containing `/` are anchored to the repo root.
1343
+
1344
+ ```
1345
+ # .roamignore example
1346
+ *_pb2.py
1347
+ *_pb2_grpc.py
1348
+ vendor/
1349
+ node_modules/
1350
+ *.generated.*
1351
+ /build/
1352
+ !build/keep/
1353
+ ```
1354
+
1355
+ You can also exclude patterns via `roam config --exclude "*.proto"` (stored in `.roam/config.json`) or inspect active patterns with `roam config --show`.
1356
+
1307
1357
  <details>
1308
1358
  <summary><strong>Graph algorithms</strong></summary>
1309
1359
 
@@ -1406,7 +1456,7 @@ Static analysis trade-offs:
1406
1456
  - **Static analysis primarily** -- can't trace dynamic dispatch, reflection, or eval'd code. Runtime trace ingestion (`roam ingest-trace`) adds production data but requires external trace export
1407
1457
  - **Import resolution is heuristic** -- complex re-exports or conditional imports may not resolve
1408
1458
  - **Limited cross-language edges** -- Salesforce, Protobuf, REST API, and multi-repo edges are supported, but not arbitrary FFI
1409
- - **Tier 2 languages** (Kotlin, Swift, Scala) get basic symbol extraction only
1459
+ - **Tier 2 languages** (Scala) get basic symbol extraction only
1410
1460
  - **Large monorepos** (100k+ files) may have slow initial indexing
1411
1461
 
1412
1462
  ## Troubleshooting
@@ -1418,7 +1468,7 @@ Static analysis trade-offs:
1418
1468
  | `database is locked` | `roam index --force` to rebuild |
1419
1469
  | Unicode errors on Windows | `chcp 65001` for UTF-8 |
1420
1470
  | Symbol resolves to wrong file | Use `file:symbol` syntax: `roam symbol myfile:MyFunction` |
1421
- | Health score seems wrong | `roam health --json` for factor breakdown |
1471
+ | Health score seems wrong | `roam --json health` for factor breakdown |
1422
1472
  | Index stale after `git pull` | `roam index` (incremental). After major refactors: `roam index --force` |
1423
1473
 
1424
1474
  ## Update / Uninstall
@@ -1443,7 +1493,7 @@ Delete `.roam/` from your project root to clean up local data.
1443
1493
  git clone https://github.com/Cranot/roam-code.git
1444
1494
  cd roam-code
1445
1495
  pip install -e ".[dev]" # includes pytest, ruff
1446
- pytest tests/ # ~5000 tests, Python 3.9-3.13
1496
+ pytest tests/ # ~5500 tests, Python 3.9-3.13
1447
1497
 
1448
1498
  # Or use Make targets:
1449
1499
  make dev # install with dev extras
@@ -1460,7 +1510,7 @@ roam-code/
1460
1510
  ├── action.yml # Reusable GitHub Action
1461
1511
  ├── src/roam/
1462
1512
  │ ├── __init__.py # Version (from pyproject.toml)
1463
- │ ├── cli.py # Click CLI (137 commands)
1513
+ │ ├── cli.py # Click CLI (139 commands)
1464
1514
  │ ├── mcp_server.py # MCP server (101 tools, 10 resources, 5 prompts)
1465
1515
  │ ├── db/
1466
1516
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
@@ -1480,7 +1530,7 @@ roam-code/
1480
1530
  │ ├── languages/
1481
1531
  │ │ ├── base.py # Abstract LanguageExtractor
1482
1532
  │ │ ├── registry.py # Language detection + aliasing
1483
- │ │ ├── *_lang.py # One file per language (19 dedicated + generic)
1533
+ │ │ ├── *_lang.py # One file per language (20 dedicated + generic)
1484
1534
  │ │ └── generic_lang.py # Tier 2 fallback
1485
1535
  │ ├── bridges/
1486
1536
  │ │ ├── base.py, registry.py # Cross-language bridge framework
@@ -1517,7 +1567,7 @@ roam-code/
1517
1567
  │ │ ├── engine.py # YAML rule parser + graph query evaluator
1518
1568
  │ │ ├── builtin.py # 10 built-in governance rules
1519
1569
  │ │ ├── ast_match.py # AST pattern matching with $METAVAR captures
1520
- │ │ └── dataflow.py # Inter-procedural dataflow analysis
1570
+ │ │ └── dataflow.py # Intra-procedural dataflow analysis
1521
1571
  │ ├── runtime/
1522
1572
  │ │ ├── trace_ingest.py # OpenTelemetry/Jaeger/Zipkin ingestion
1523
1573
  │ │ └── hotspots.py # Runtime hotspot analysis
@@ -1532,7 +1582,7 @@ roam-code/
1532
1582
  │ ├── formatter.py # Token-efficient formatting
1533
1583
  │ ├── sarif.py # SARIF 2.1.0 output
1534
1584
  │ └── schema_registry.py # JSON envelope schema versioning
1535
- └── tests/ # ~5000 tests across 151 test files
1585
+ └── tests/ # ~5500 tests across 186 test files
1536
1586
  ```
1537
1587
 
1538
1588
  </details>
@@ -1555,7 +1605,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1555
1605
  ### Shipped
1556
1606
 
1557
1607
  - [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
1558
- - [x] Full command and MCP inventory parity in docs: 137 CLI commands and 101 MCP tools.
1608
+ - [x] Full command and MCP inventory parity in docs: 139 CLI commands and 101 MCP tools.
1559
1609
  - [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
1560
1610
  - [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
1561
1611
  - [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
@@ -1576,7 +1626,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1576
1626
  git clone https://github.com/Cranot/roam-code.git
1577
1627
  cd roam-code
1578
1628
  pip install -e .
1579
- pytest tests/ # all ~5000 tests must pass
1629
+ pytest tests/ # all ~5500 tests must pass
1580
1630
  ```
1581
1631
 
1582
1632
  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.