roam-code 12.3.1__tar.gz → 12.5.0__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 (541) hide show
  1. {roam_code-12.3.1/src/roam_code.egg-info → roam_code-12.5.0}/PKG-INFO +9 -8
  2. {roam_code-12.3.1 → roam_code-12.5.0}/README.md +8 -7
  3. {roam_code-12.3.1 → roam_code-12.5.0}/pyproject.toml +1 -1
  4. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/catalog/detectors.py +11 -0
  5. roam_code-12.5.0/src/roam/catalog/python_idioms.py +864 -0
  6. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/cli.py +2 -0
  7. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_agent_export.py +2 -1
  8. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_complexity.py +22 -2
  9. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_context.py +54 -0
  10. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_dead.py +1 -11
  11. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_fan.py +7 -15
  12. roam_code-12.5.0/src/roam/commands/cmd_py_types.py +196 -0
  13. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_search.py +55 -5
  14. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_smells.py +12 -8
  15. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/db/connection.py +3 -0
  16. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/db/schema.py +9 -1
  17. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/indexer.py +5 -2
  18. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/symbols.py +6 -1
  19. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/base.py +4 -0
  20. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/python_lang.py +40 -1
  21. roam_code-12.5.0/src/roam/output/file_role_hints.py +102 -0
  22. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/retrieve/rerank.py +60 -0
  23. {roam_code-12.3.1 → roam_code-12.5.0/src/roam_code.egg-info}/PKG-INFO +9 -8
  24. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam_code.egg-info/SOURCES.txt +4 -0
  25. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_agent_export.py +2 -1
  26. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_fingerprint.py +2 -1
  27. roam_code-12.5.0/tests/test_python_pivot.py +489 -0
  28. {roam_code-12.3.1 → roam_code-12.5.0}/LICENSE +0 -0
  29. {roam_code-12.3.1 → roam_code-12.5.0}/setup.cfg +0 -0
  30. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/__init__.py +0 -0
  31. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/__main__.py +0 -0
  32. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/analysis/__init__.py +0 -0
  33. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/analysis/effects.py +0 -0
  34. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/analysis/taint.py +0 -0
  35. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/api.py +0 -0
  36. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/ask/__init__.py +0 -0
  37. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/ask/classifier.py +0 -0
  38. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/ask/recipes.py +0 -0
  39. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/ask/runner.py +0 -0
  40. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/attest/__init__.py +0 -0
  41. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/attest/cga.py +0 -0
  42. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/bridges/__init__.py +0 -0
  43. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/bridges/base.py +0 -0
  44. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/bridges/bridge_config.py +0 -0
  45. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/bridges/bridge_django.py +0 -0
  46. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/bridges/bridge_protobuf.py +0 -0
  47. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/bridges/bridge_rest_api.py +0 -0
  48. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/bridges/bridge_salesforce.py +0 -0
  49. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/bridges/bridge_template.py +0 -0
  50. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/bridges/registry.py +0 -0
  51. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/catalog/__init__.py +0 -0
  52. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/catalog/fixes.py +0 -0
  53. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/catalog/smells.py +0 -0
  54. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/catalog/tasks.py +0 -0
  55. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/__init__.py +0 -0
  56. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/changed_files.py +0 -0
  57. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_adrs.py +0 -0
  58. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_adversarial.py +0 -0
  59. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_affected.py +0 -0
  60. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_affected_tests.py +0 -0
  61. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_agent_context.py +0 -0
  62. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_agent_plan.py +0 -0
  63. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_ai_ratio.py +0 -0
  64. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_ai_readiness.py +0 -0
  65. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_alerts.py +0 -0
  66. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_annotate.py +0 -0
  67. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_api_changes.py +0 -0
  68. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_api_drift.py +0 -0
  69. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_ask.py +0 -0
  70. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_attest.py +0 -0
  71. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_auth_gaps.py +0 -0
  72. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_bisect.py +0 -0
  73. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_breaking.py +0 -0
  74. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_budget.py +0 -0
  75. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_bus_factor.py +0 -0
  76. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_capsule.py +0 -0
  77. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_cga.py +0 -0
  78. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_check_rules.py +0 -0
  79. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_ci_setup.py +0 -0
  80. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_clean.py +0 -0
  81. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_clones.py +0 -0
  82. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_closure.py +0 -0
  83. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_clusters.py +0 -0
  84. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_codeowners.py +0 -0
  85. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_config.py +0 -0
  86. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_congestion.py +0 -0
  87. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_conventions.py +0 -0
  88. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_coupling.py +0 -0
  89. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_coverage_gaps.py +0 -0
  90. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_critique.py +0 -0
  91. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_cut.py +0 -0
  92. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_dark_matter.py +0 -0
  93. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_dashboard.py +0 -0
  94. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_debt.py +0 -0
  95. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_deps.py +0 -0
  96. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_describe.py +0 -0
  97. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_dev_profile.py +0 -0
  98. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_diagnose.py +0 -0
  99. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_diff.py +0 -0
  100. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_doc_staleness.py +0 -0
  101. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_docs_coverage.py +0 -0
  102. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_doctor.py +0 -0
  103. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_drift.py +0 -0
  104. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_duplicates.py +0 -0
  105. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_effects.py +0 -0
  106. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_endpoints.py +0 -0
  107. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_entry_points.py +0 -0
  108. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_eval_retrieve.py +0 -0
  109. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_file.py +0 -0
  110. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_fingerprint.py +0 -0
  111. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_fitness.py +0 -0
  112. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_flag_dead.py +0 -0
  113. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_fleet.py +0 -0
  114. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_fn_coupling.py +0 -0
  115. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_forecast.py +0 -0
  116. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_grep.py +0 -0
  117. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_guard.py +0 -0
  118. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_health.py +0 -0
  119. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_hooks.py +0 -0
  120. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_hotspots.py +0 -0
  121. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_impact.py +0 -0
  122. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_index.py +0 -0
  123. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_index_bundle.py +0 -0
  124. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_ingest_trace.py +0 -0
  125. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_init.py +0 -0
  126. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_intent.py +0 -0
  127. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_invariants.py +0 -0
  128. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_layers.py +0 -0
  129. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_map.py +0 -0
  130. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_math.py +0 -0
  131. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_mcp_setup.py +0 -0
  132. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_metrics.py +0 -0
  133. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_migration_safety.py +0 -0
  134. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_minimap.py +0 -0
  135. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_missing_index.py +0 -0
  136. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_module.py +0 -0
  137. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_mutate.py +0 -0
  138. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_n1.py +0 -0
  139. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_oracle.py +0 -0
  140. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_orchestrate.py +0 -0
  141. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_orphan_routes.py +0 -0
  142. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_over_fetch.py +0 -0
  143. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_owner.py +0 -0
  144. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_partition.py +0 -0
  145. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_path_coverage.py +0 -0
  146. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_patterns.py +0 -0
  147. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_plan.py +0 -0
  148. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_plan_refactor.py +0 -0
  149. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_pr_diff.py +0 -0
  150. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_pr_risk.py +0 -0
  151. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_preflight.py +0 -0
  152. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_relate.py +0 -0
  153. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_report.py +0 -0
  154. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_reset.py +0 -0
  155. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_retrieve.py +0 -0
  156. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_risk.py +0 -0
  157. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_rules.py +0 -0
  158. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_safe_delete.py +0 -0
  159. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_safe_zones.py +0 -0
  160. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_sbom.py +0 -0
  161. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_schema.py +0 -0
  162. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_search_semantic.py +0 -0
  163. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_secrets.py +0 -0
  164. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_semantic_diff.py +0 -0
  165. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_simulate.py +0 -0
  166. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_simulate_departure.py +0 -0
  167. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_sketch.py +0 -0
  168. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_spectral.py +0 -0
  169. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_split.py +0 -0
  170. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_suggest_refactoring.py +0 -0
  171. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_suggest_reviewers.py +0 -0
  172. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_supply_chain.py +0 -0
  173. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_symbol.py +0 -0
  174. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_syntax_check.py +0 -0
  175. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_taint.py +0 -0
  176. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_test_gaps.py +0 -0
  177. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_test_scaffold.py +0 -0
  178. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_testmap.py +0 -0
  179. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_tour.py +0 -0
  180. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_trace.py +0 -0
  181. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_trends.py +0 -0
  182. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_triage.py +0 -0
  183. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_understand.py +0 -0
  184. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_uses.py +0 -0
  185. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_verify.py +0 -0
  186. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_verify_imports.py +0 -0
  187. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_vibe_check.py +0 -0
  188. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_visualize.py +0 -0
  189. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_vuln_map.py +0 -0
  190. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_vuln_reach.py +0 -0
  191. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_vulns.py +0 -0
  192. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_watch.py +0 -0
  193. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_weather.py +0 -0
  194. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_why.py +0 -0
  195. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_ws.py +0 -0
  196. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/cmd_xlang.py +0 -0
  197. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/codeowners_helpers.py +0 -0
  198. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/context_helpers.py +0 -0
  199. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/gate_presets.py +0 -0
  200. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/graph_helpers.py +0 -0
  201. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/metrics_history.py +0 -0
  202. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/next_steps.py +0 -0
  203. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/resolve.py +0 -0
  204. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/commands/suppression.py +0 -0
  205. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/competitor_site_data.py +0 -0
  206. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/config.py +0 -0
  207. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/coverage_reports.py +0 -0
  208. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/critique/__init__.py +0 -0
  209. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/critique/aggregator.py +0 -0
  210. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/critique/checks.py +0 -0
  211. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/db/__init__.py +0 -0
  212. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/db/queries.py +0 -0
  213. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/eval/__init__.py +0 -0
  214. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/eval/harness.py +0 -0
  215. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/exit_codes.py +0 -0
  216. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/fleet/__init__.py +0 -0
  217. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/fleet/adapters.py +0 -0
  218. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/fleet/manifest.py +0 -0
  219. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/git_utils.py +0 -0
  220. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/__init__.py +0 -0
  221. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/anomaly.py +0 -0
  222. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/builder.py +0 -0
  223. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/clone_detect.py +0 -0
  224. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/clusters.py +0 -0
  225. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/cycles.py +0 -0
  226. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/dark_matter.py +0 -0
  227. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/diff.py +0 -0
  228. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/fingerprint.py +0 -0
  229. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/layers.py +0 -0
  230. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/pagerank.py +0 -0
  231. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/partition.py +0 -0
  232. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/pathfinding.py +0 -0
  233. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/propagation.py +0 -0
  234. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/simulate.py +0 -0
  235. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/spectral.py +0 -0
  236. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/graph/stats.py +0 -0
  237. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/__init__.py +0 -0
  238. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/complexity.py +0 -0
  239. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/discovery.py +0 -0
  240. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/django_post.py +0 -0
  241. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/file_roles.py +0 -0
  242. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/git_stats.py +0 -0
  243. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/gitignore.py +0 -0
  244. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/incremental.py +0 -0
  245. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/parser.py +0 -0
  246. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/relations.py +0 -0
  247. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/index/test_conventions.py +0 -0
  248. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/__init__.py +0 -0
  249. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/apex_lang.py +0 -0
  250. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/aura_lang.py +0 -0
  251. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/c_lang.py +0 -0
  252. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/csharp_lang.py +0 -0
  253. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/extractor_schema.py +0 -0
  254. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/foxpro_lang.py +0 -0
  255. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/generic_lang.py +0 -0
  256. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/go_lang.py +0 -0
  257. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/hcl_lang.py +0 -0
  258. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/java_lang.py +0 -0
  259. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/javascript_lang.py +0 -0
  260. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/kotlin_lang.py +0 -0
  261. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/php_lang.py +0 -0
  262. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/query_engine.py +0 -0
  263. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/registry.py +0 -0
  264. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/ruby_lang.py +0 -0
  265. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/rust_lang.py +0 -0
  266. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/scala_lang.py +0 -0
  267. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/sfxml_lang.py +0 -0
  268. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/sql_lang.py +0 -0
  269. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/swift_lang.py +0 -0
  270. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/typescript_lang.py +0 -0
  271. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/visualforce_lang.py +0 -0
  272. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/languages/yaml_lang.py +0 -0
  273. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/mcp_extras/__init__.py +0 -0
  274. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/mcp_extras/completions.py +0 -0
  275. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/mcp_extras/progress.py +0 -0
  276. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/mcp_extras/sampling.py +0 -0
  277. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/mcp_extras/session.py +0 -0
  278. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/mcp_extras/watcher.py +0 -0
  279. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/mcp_server.py +0 -0
  280. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/output/__init__.py +0 -0
  281. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/output/formatter.py +0 -0
  282. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/output/mermaid.py +0 -0
  283. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/output/sarif.py +0 -0
  284. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/output/schema_registry.py +0 -0
  285. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/plugins.py +0 -0
  286. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/refactor/__init__.py +0 -0
  287. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/refactor/codegen.py +0 -0
  288. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/refactor/transforms.py +0 -0
  289. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/retrieve/__init__.py +0 -0
  290. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/retrieve/learned_ranker.py +0 -0
  291. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/retrieve/pipeline.py +0 -0
  292. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/retrieve/seeds.py +0 -0
  293. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/retrieve/semantic.py +0 -0
  294. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/rules/__init__.py +0 -0
  295. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/rules/ast_match.py +0 -0
  296. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/rules/builtin.py +0 -0
  297. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/rules/dataflow.py +0 -0
  298. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/rules/engine.py +0 -0
  299. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/runtime/__init__.py +0 -0
  300. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/runtime/daemon.py +0 -0
  301. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/runtime/graph_backend.py +0 -0
  302. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/runtime/hotspots.py +0 -0
  303. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/runtime/lock_modes.py +0 -0
  304. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/runtime/lockmgr.py +0 -0
  305. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/runtime/trace_ingest.py +0 -0
  306. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/search/__init__.py +0 -0
  307. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/search/framework_packs.py +0 -0
  308. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/search/index_embeddings.py +0 -0
  309. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/search/onnx_embeddings.py +0 -0
  310. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/search/tfidf.py +0 -0
  311. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/security/__init__.py +0 -0
  312. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/security/aibom_extension.py +0 -0
  313. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/security/taint_classifier.py +0 -0
  314. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/security/taint_engine.py +0 -0
  315. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/security/vuln_reach.py +0 -0
  316. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/security/vuln_store.py +0 -0
  317. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/surface_counts.py +0 -0
  318. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/templates/__init__.py +0 -0
  319. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/templates/ci/__init__.py +0 -0
  320. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/workspace/__init__.py +0 -0
  321. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/workspace/aggregator.py +0 -0
  322. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/workspace/api_scanner.py +0 -0
  323. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/workspace/config.py +0 -0
  324. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam/workspace/db.py +0 -0
  325. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam_code.egg-info/dependency_links.txt +0 -0
  326. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam_code.egg-info/entry_points.txt +0 -0
  327. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam_code.egg-info/requires.txt +0 -0
  328. {roam_code-12.3.1 → roam_code-12.5.0}/src/roam_code.egg-info/top_level.txt +0 -0
  329. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_adrs.py +0 -0
  330. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_adversarial.py +0 -0
  331. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_affected.py +0 -0
  332. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_agent_mode.py +0 -0
  333. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_agent_plan_context.py +0 -0
  334. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_ai_ratio.py +0 -0
  335. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_ai_readiness.py +0 -0
  336. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_alerts_cmd.py +0 -0
  337. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_annotations.py +0 -0
  338. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_anomaly.py +0 -0
  339. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_api_changes.py +0 -0
  340. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_api_drift.py +0 -0
  341. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_ask.py +0 -0
  342. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_attest.py +0 -0
  343. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_auth_gaps.py +0 -0
  344. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_backend_fixes_round2.py +0 -0
  345. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_backend_fixes_round3.py +0 -0
  346. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_basic.py +0 -0
  347. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_batch_mcp.py +0 -0
  348. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_bisect.py +0 -0
  349. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_bridge_django.py +0 -0
  350. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_bridges.py +0 -0
  351. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_bridges_extended.py +0 -0
  352. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_budget.py +0 -0
  353. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_budget_flag.py +0 -0
  354. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_budget_phase2.py +0 -0
  355. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_bus_factor.py +0 -0
  356. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_capsule.py +0 -0
  357. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_cga.py +0 -0
  358. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_check_rules.py +0 -0
  359. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_ci_gate_eval.py +0 -0
  360. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_ci_sarif_guard.py +0 -0
  361. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_ci_setup.py +0 -0
  362. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_clones.py +0 -0
  363. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_closure.py +0 -0
  364. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_codeowners.py +0 -0
  365. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_commands_architecture.py +0 -0
  366. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_commands_exploration.py +0 -0
  367. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_commands_health.py +0 -0
  368. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_commands_refactoring.py +0 -0
  369. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_commands_workflow.py +0 -0
  370. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_competitor_site_data.py +0 -0
  371. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_comprehensive.py +0 -0
  372. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_config.py +0 -0
  373. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_congestion.py +0 -0
  374. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_context_propagation.py +0 -0
  375. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_conventions_cmd.py +0 -0
  376. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_coverage_gaps_cmd.py +0 -0
  377. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_coverage_ingestion.py +0 -0
  378. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_critique.py +0 -0
  379. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_cut.py +0 -0
  380. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_dark_matter.py +0 -0
  381. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_dark_matter_helpers.py +0 -0
  382. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_dashboard.py +0 -0
  383. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_dataflow_dead.py +0 -0
  384. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_dead_aging.py +0 -0
  385. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_defer_loading.py +0 -0
  386. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_demo_gif_asset.py +0 -0
  387. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_describe.py +0 -0
  388. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_detail_flag_hints.py +0 -0
  389. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_deterministic_output.py +0 -0
  390. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_dev_profile.py +0 -0
  391. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_difficulty_scoring.py +0 -0
  392. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_doc_staleness.py +0 -0
  393. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_docker_assets.py +0 -0
  394. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_docs_coverage.py +0 -0
  395. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_docs_site_quality.py +0 -0
  396. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_doctor.py +0 -0
  397. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_drift.py +0 -0
  398. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_duplicates.py +0 -0
  399. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_effects.py +0 -0
  400. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_effects_propagation.py +0 -0
  401. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_endpoints.py +0 -0
  402. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_entry_points_cmd.py +0 -0
  403. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_eval_retrieve.py +0 -0
  404. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_exclude_patterns.py +0 -0
  405. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_exit_codes.py +0 -0
  406. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_extractor_grammar_drift.py +0 -0
  407. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_fallback_contracts.py +0 -0
  408. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_file_roles.py +0 -0
  409. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_fixes.py +0 -0
  410. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_flag_dead.py +0 -0
  411. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_fleet.py +0 -0
  412. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_fn_coupling.py +0 -0
  413. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_forecast.py +0 -0
  414. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_formatters.py +0 -0
  415. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_foxpro.py +0 -0
  416. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_framework_detection.py +0 -0
  417. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_gate_presets.py +0 -0
  418. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_git_utils.py +0 -0
  419. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_guard.py +0 -0
  420. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_health_gate.py +0 -0
  421. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_hooks.py +0 -0
  422. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_hotspots.py +0 -0
  423. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_index.py +0 -0
  424. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_index_bundle.py +0 -0
  425. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_init_cmd.py +0 -0
  426. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_install_check.py +0 -0
  427. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_intent.py +0 -0
  428. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_invariants.py +0 -0
  429. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_json_contracts.py +0 -0
  430. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_json_error_envelope.py +0 -0
  431. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_kotlin_swift_extractors.py +0 -0
  432. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_language_corpus.py +0 -0
  433. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_languages.py +0 -0
  434. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_library_api.py +0 -0
  435. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_math.py +0 -0
  436. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_math_tips.py +0 -0
  437. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_mcp_extras.py +0 -0
  438. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_mcp_server.py +0 -0
  439. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_mcp_setup.py +0 -0
  440. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_mermaid.py +0 -0
  441. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_metrics_cmd.py +0 -0
  442. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_migration_safety.py +0 -0
  443. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_minimap.py +0 -0
  444. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_missing_index.py +0 -0
  445. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_mutate.py +0 -0
  446. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_n1.py +0 -0
  447. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_next_steps.py +0 -0
  448. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_onboard.py +0 -0
  449. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_oracle.py +0 -0
  450. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_orchestrate.py +0 -0
  451. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_orphan_routes.py +0 -0
  452. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_oss_bench_harness.py +0 -0
  453. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_over_fetch.py +0 -0
  454. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_pagerank_truncation.py +0 -0
  455. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_partition.py +0 -0
  456. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_path_coverage.py +0 -0
  457. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_patterns_cmd.py +0 -0
  458. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_performance.py +0 -0
  459. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_personalized_pagerank.py +0 -0
  460. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_plan.py +0 -0
  461. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_plugin_discovery.py +0 -0
  462. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_pr_comment_script.py +0 -0
  463. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_pr_diff.py +0 -0
  464. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_pr_risk_author.py +0 -0
  465. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_progress.py +0 -0
  466. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_progressive_disclosure.py +0 -0
  467. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_properties.py +0 -0
  468. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_python_extractor_v2.py +0 -0
  469. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_readme_surface_consistency.py +0 -0
  470. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_refactoring_intelligence.py +0 -0
  471. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_relate.py +0 -0
  472. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_report.py +0 -0
  473. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_reset_clean.py +0 -0
  474. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_resolve.py +0 -0
  475. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_retrieve.py +0 -0
  476. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_retrieve_cross_repo.py +0 -0
  477. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_retrieve_seeds.py +0 -0
  478. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_risk.py +0 -0
  479. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_ruby.py +0 -0
  480. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_rule_profiles.py +0 -0
  481. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_rules.py +0 -0
  482. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_rules_ast_match.py +0 -0
  483. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_rules_community_pack.py +0 -0
  484. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_rules_dataflow.py +0 -0
  485. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_rules_symbol_requirements.py +0 -0
  486. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_runtime.py +0 -0
  487. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_runtime_score.py +0 -0
  488. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_salesforce.py +0 -0
  489. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_sarif_flag.py +0 -0
  490. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_sbom.py +0 -0
  491. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_scala.py +0 -0
  492. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_schema_versioning.py +0 -0
  493. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_search_explain.py +0 -0
  494. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_secrets.py +0 -0
  495. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_secrets_v2.py +0 -0
  496. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_semantic_diff.py +0 -0
  497. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_semantic_onnx.py +0 -0
  498. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_semantic_search.py +0 -0
  499. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_simulate.py +0 -0
  500. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_simulate_departure.py +0 -0
  501. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_sketch.py +0 -0
  502. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_smells.py +0 -0
  503. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_smoke.py +0 -0
  504. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_sna_metrics.py +0 -0
  505. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_spectral.py +0 -0
  506. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_split_cmd.py +0 -0
  507. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_sql.py +0 -0
  508. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_suggest_reviewers.py +0 -0
  509. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_supply_chain.py +0 -0
  510. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_surface_counts.py +0 -0
  511. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_syntax_check.py +0 -0
  512. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_taint.py +0 -0
  513. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_taint_analysis.py +0 -0
  514. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_taint_classifier.py +0 -0
  515. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_test_conventions.py +0 -0
  516. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_test_gaps.py +0 -0
  517. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_test_scaffold.py +0 -0
  518. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_testmap.py +0 -0
  519. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_top_flag_consistency.py +0 -0
  520. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_tour_cmd.py +0 -0
  521. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_trends.py +0 -0
  522. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_trends_cohort.py +0 -0
  523. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_triage.py +0 -0
  524. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_uses_cmd.py +0 -0
  525. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_v12_2.py +0 -0
  526. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_v6_features.py +0 -0
  527. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_v71_features.py +0 -0
  528. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_v7_features.py +0 -0
  529. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_v82_features.py +0 -0
  530. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_verify.py +0 -0
  531. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_verify_imports.py +0 -0
  532. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_vibe_check.py +0 -0
  533. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_visualize.py +0 -0
  534. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_vuln.py +0 -0
  535. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_vulns_cmd.py +0 -0
  536. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_watch.py +0 -0
  537. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_why.py +0 -0
  538. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_workspace.py +0 -0
  539. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_ws_resolve_fixes.py +0 -0
  540. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_xlang.py +0 -0
  541. {roam_code-12.3.1 → roam_code-12.5.0}/tests/test_yaml_hcl.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roam-code
3
- Version: 12.3.1
3
+ Version: 12.5.0
4
4
  Summary: Instant codebase comprehension for AI coding agents
5
5
  Author: CosmoHac
6
6
  License-Expression: MIT
@@ -62,7 +62,7 @@ Dynamic: license-file
62
62
 
63
63
  **The architectural intelligence layer for AI coding agents. Structural graph, architecture governance, multi-agent orchestration, vulnerability mapping, runtime analysis -- one CLI, zero API keys.**
64
64
 
65
- *150 commands · 116 MCP tools · 27 languages · 100% local*
65
+ *151 commands · 116 MCP tools · 27 languages · 100% local*
66
66
 
67
67
  [![PyPI version](https://img.shields.io/pypi/v/roam-code?style=flat-square&color=blue)](https://pypi.org/project/roam-code/)
68
68
  [![GitHub stars](https://img.shields.io/github/stars/Cranot/roam-code?style=flat-square)](https://github.com/Cranot/roam-code/stargazers)
@@ -139,7 +139,7 @@ $ roam diff # blast radius of uncommitted changes
139
139
  - **`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.
140
140
  - **`.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`.
141
141
  - **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).
142
- - **150 CLI commands, 116 MCP tools** (`fleet`, `ask`, `taint`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`) and `roam_taint_classify` as MCP tools). 33-tool `core` preset is the default for token-budget-conscious clients.
142
+ - **151 CLI commands, 116 MCP tools** (`fleet`, `ask`, `taint`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`) and `roam_taint_classify` as MCP tools). 33-tool `core` preset is the default for token-budget-conscious clients.
143
143
 
144
144
  ## What's New in v11
145
145
 
@@ -155,7 +155,7 @@ $ roam diff # blast radius of uncommitted changes
155
155
  - `server.json` for official MCP Registry submission.
156
156
 
157
157
  ### v11.1.1 -- Command Quality Audit
158
- - **Full command audit**: all 150 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.
158
+ - **Full command audit**: all 151 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.
159
159
  - **Kotlin promoted to Tier 1** via new YAML-based declarative extractor architecture. Classes, interfaces, enums, objects, functions, methods, properties, and inheritance fully extracted.
160
160
  - **7 new commands**: `roam congestion`, `roam adrs`, `roam flag-dead`, `roam test-scaffold`, `roam sbom`, `roam triage`, `roam ci-setup`.
161
161
  - **CI templates**: `roam ci-setup` generates pipelines for GitHub Actions, GitLab CI, Azure Pipelines, Jenkins, and Bitbucket.
@@ -310,7 +310,7 @@ roam health
310
310
 
311
311
  ## Commands
312
312
 
313
- **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 145 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 **150 commands organised into 7 categories**, but you don't need to know that to start.
313
+ **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 146 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 **151 commands organised into 7 categories**, but you don't need to know that to start.
314
314
 
315
315
  <details>
316
316
  <summary><strong>Full command reference</strong></summary>
@@ -399,7 +399,8 @@ roam health
399
399
  | `roam ai-readiness` | 0-100 score for how well this codebase supports AI coding agents |
400
400
  | `roam ai-ratio [--since N]` | Statistical estimate of AI-generated code ratio using commit-behavior signals |
401
401
  | `roam trends [--record] [--days N] [--metric M]` | Historical metrics snapshots with sparklines and trend deltas |
402
- | `roam complexity [--bumpy-road]` | Per-function cognitive complexity (SonarSource-compatible, triangular nesting penalty) + Halstead metrics (volume, difficulty, effort, bugs) + cyclomatic density |
402
+ | `roam complexity [--bumpy-road] [--include-tooling]` | Per-function cognitive complexity (SonarSource-compatible, triangular nesting penalty) + Halstead metrics (volume, difficulty, effort, bugs) + cyclomatic density |
403
+ | `roam py-types [--detail] [--include-tests]` | Python type-annotation health: % of public functions with full annotations, ``Any`` usage, legacy ``typing.Optional/Dict/List`` (PEP 585/604 modernisation candidates), per-file worst offenders. Default-excludes test files |
403
404
  | `roam algo [--task T] [--confidence C] [--profile P]` | Algorithm anti-pattern detection: 23-pattern catalog detects suboptimal algorithms (O(n^2) loops, N+1 queries, quadratic string building, branching recursion, loop-invariant calls) and suggests better approaches with Big-O improvements. Confidence calibration via caller-count + runtime traces, evidence paths, impact scoring, framework-aware N+1 packs, and language-aware fix templates. Alias: `roam math` |
404
405
  | `roam n1 [--confidence C] [--verbose]` | Implicit N+1 I/O detection: finds ORM model computed properties (`$appends`/accessors) that trigger lazy-loaded DB queries in collection contexts. Cross-references with eager loading config. Supports Laravel, Django, Rails, SQLAlchemy, JPA |
405
406
  | `roam over-fetch [--threshold N] [--confidence C]` | Detect models serializing too many fields: large `$fillable` without `$hidden`/`$visible`, direct controller returns bypassing API Resources, poor exposed-to-hidden ratio |
@@ -1582,7 +1583,7 @@ roam-code/
1582
1583
  ├── action.yml # Reusable GitHub Action
1583
1584
  ├── src/roam/
1584
1585
  │ ├── __init__.py # Version (from pyproject.toml)
1585
- │ ├── cli.py # Click CLI (150 commands)
1586
+ │ ├── cli.py # Click CLI (151 commands)
1586
1587
  │ ├── mcp_server.py # MCP server (116 tools, 10 resources, 5 prompts)
1587
1588
  │ ├── db/
1588
1589
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
@@ -1677,7 +1678,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1677
1678
  ### Shipped
1678
1679
 
1679
1680
  - [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
1680
- - [x] Full command and MCP inventory parity in docs: 150 CLI commands and 116 MCP tools.
1681
+ - [x] Full command and MCP inventory parity in docs: 151 CLI commands and 116 MCP tools.
1681
1682
  - [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
1682
1683
  - [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
1683
1684
  - [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
@@ -4,7 +4,7 @@
4
4
 
5
5
  **The architectural intelligence layer for AI coding agents. Structural graph, architecture governance, multi-agent orchestration, vulnerability mapping, runtime analysis -- one CLI, zero API keys.**
6
6
 
7
- *150 commands · 116 MCP tools · 27 languages · 100% local*
7
+ *151 commands · 116 MCP tools · 27 languages · 100% local*
8
8
 
9
9
  [![PyPI version](https://img.shields.io/pypi/v/roam-code?style=flat-square&color=blue)](https://pypi.org/project/roam-code/)
10
10
  [![GitHub stars](https://img.shields.io/github/stars/Cranot/roam-code?style=flat-square)](https://github.com/Cranot/roam-code/stargazers)
@@ -81,7 +81,7 @@ $ roam diff # blast radius of uncommitted changes
81
81
  - **`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.
82
82
  - **`.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`.
83
83
  - **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).
84
- - **150 CLI commands, 116 MCP tools** (`fleet`, `ask`, `taint`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`) and `roam_taint_classify` as MCP tools). 33-tool `core` preset is the default for token-budget-conscious clients.
84
+ - **151 CLI commands, 116 MCP tools** (`fleet`, `ask`, `taint`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`) and `roam_taint_classify` as MCP tools). 33-tool `core` preset is the default for token-budget-conscious clients.
85
85
 
86
86
  ## What's New in v11
87
87
 
@@ -97,7 +97,7 @@ $ roam diff # blast radius of uncommitted changes
97
97
  - `server.json` for official MCP Registry submission.
98
98
 
99
99
  ### v11.1.1 -- Command Quality Audit
100
- - **Full command audit**: all 150 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.
100
+ - **Full command audit**: all 151 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.
101
101
  - **Kotlin promoted to Tier 1** via new YAML-based declarative extractor architecture. Classes, interfaces, enums, objects, functions, methods, properties, and inheritance fully extracted.
102
102
  - **7 new commands**: `roam congestion`, `roam adrs`, `roam flag-dead`, `roam test-scaffold`, `roam sbom`, `roam triage`, `roam ci-setup`.
103
103
  - **CI templates**: `roam ci-setup` generates pipelines for GitHub Actions, GitLab CI, Azure Pipelines, Jenkins, and Bitbucket.
@@ -252,7 +252,7 @@ roam health
252
252
 
253
253
  ## Commands
254
254
 
255
- **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 145 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 **150 commands organised into 7 categories**, but you don't need to know that to start.
255
+ **Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining 146 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 **151 commands organised into 7 categories**, but you don't need to know that to start.
256
256
 
257
257
  <details>
258
258
  <summary><strong>Full command reference</strong></summary>
@@ -341,7 +341,8 @@ roam health
341
341
  | `roam ai-readiness` | 0-100 score for how well this codebase supports AI coding agents |
342
342
  | `roam ai-ratio [--since N]` | Statistical estimate of AI-generated code ratio using commit-behavior signals |
343
343
  | `roam trends [--record] [--days N] [--metric M]` | Historical metrics snapshots with sparklines and trend deltas |
344
- | `roam complexity [--bumpy-road]` | Per-function cognitive complexity (SonarSource-compatible, triangular nesting penalty) + Halstead metrics (volume, difficulty, effort, bugs) + cyclomatic density |
344
+ | `roam complexity [--bumpy-road] [--include-tooling]` | Per-function cognitive complexity (SonarSource-compatible, triangular nesting penalty) + Halstead metrics (volume, difficulty, effort, bugs) + cyclomatic density |
345
+ | `roam py-types [--detail] [--include-tests]` | Python type-annotation health: % of public functions with full annotations, ``Any`` usage, legacy ``typing.Optional/Dict/List`` (PEP 585/604 modernisation candidates), per-file worst offenders. Default-excludes test files |
345
346
  | `roam algo [--task T] [--confidence C] [--profile P]` | Algorithm anti-pattern detection: 23-pattern catalog detects suboptimal algorithms (O(n^2) loops, N+1 queries, quadratic string building, branching recursion, loop-invariant calls) and suggests better approaches with Big-O improvements. Confidence calibration via caller-count + runtime traces, evidence paths, impact scoring, framework-aware N+1 packs, and language-aware fix templates. Alias: `roam math` |
346
347
  | `roam n1 [--confidence C] [--verbose]` | Implicit N+1 I/O detection: finds ORM model computed properties (`$appends`/accessors) that trigger lazy-loaded DB queries in collection contexts. Cross-references with eager loading config. Supports Laravel, Django, Rails, SQLAlchemy, JPA |
347
348
  | `roam over-fetch [--threshold N] [--confidence C]` | Detect models serializing too many fields: large `$fillable` without `$hidden`/`$visible`, direct controller returns bypassing API Resources, poor exposed-to-hidden ratio |
@@ -1524,7 +1525,7 @@ roam-code/
1524
1525
  ├── action.yml # Reusable GitHub Action
1525
1526
  ├── src/roam/
1526
1527
  │ ├── __init__.py # Version (from pyproject.toml)
1527
- │ ├── cli.py # Click CLI (150 commands)
1528
+ │ ├── cli.py # Click CLI (151 commands)
1528
1529
  │ ├── mcp_server.py # MCP server (116 tools, 10 resources, 5 prompts)
1529
1530
  │ ├── db/
1530
1531
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
@@ -1619,7 +1620,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
1619
1620
  ### Shipped
1620
1621
 
1621
1622
  - [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
1622
- - [x] Full command and MCP inventory parity in docs: 150 CLI commands and 116 MCP tools.
1623
+ - [x] Full command and MCP inventory parity in docs: 151 CLI commands and 116 MCP tools.
1623
1624
  - [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
1624
1625
  - [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
1625
1626
  - [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "roam-code"
7
- version = "12.3.1"
7
+ version = "12.5.0"
8
8
  description = "Instant codebase comprehension for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -2300,6 +2300,17 @@ def _iter_registered_detectors():
2300
2300
  for det in _MATH_DETECTORS:
2301
2301
  yield det
2302
2302
 
2303
+ # Python pivot v12.4 — language-specific idiom detectors. Wrapped
2304
+ # in try/except so a regex bug in one detector can't block the
2305
+ # algorithm pass.
2306
+ try:
2307
+ from roam.catalog.python_idioms import PYTHON_IDIOM_DETECTORS
2308
+
2309
+ for det in PYTHON_IDIOM_DETECTORS:
2310
+ yield det
2311
+ except Exception:
2312
+ pass
2313
+
2303
2314
  try:
2304
2315
  from roam.plugins import get_plugin_detectors
2305
2316