roam-code 12.46__tar.gz → 12.50__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {roam_code-12.46 → roam_code-12.50}/LICENSE +14 -12
- {roam_code-12.46 → roam_code-12.50}/PKG-INFO +74 -48
- {roam_code-12.46 → roam_code-12.50}/README.md +68 -44
- {roam_code-12.46 → roam_code-12.50}/pyproject.toml +11 -5
- {roam_code-12.46 → roam_code-12.50}/src/roam/__main__.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/ask/recipes.py +52 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/attest/__init__.py +1 -4
- {roam_code-12.46 → roam_code-12.50}/src/roam/capability.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/detectors.py +42 -42
- {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/python_idioms.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/cli.py +21 -14
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/audit_trail_helpers.py +1 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_adversarial.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_affected.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_agent_export.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_api.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_article_12_check.py +8 -7
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_audit.py +19 -8
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_audit_trail_export.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_auth_gaps.py +5 -5
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_capabilities.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_changelog.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_clones.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_compare.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_config.py +7 -9
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_context.py +9 -9
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_conventions.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_coverage_gaps.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_critique.py +4 -4
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dead.py +10 -10
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_debt.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_describe.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_diagnose.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_diff.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_disambiguate.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_doc_staleness.py +2 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_docs_coverage.py +5 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_doctor.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_eval_retrieve.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_exit_codes.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fan.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fn_coupling.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_graph_export.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_graph_stats.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_health.py +7 -7
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_help_search.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_hotspots.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_impact.py +5 -5
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_index_stats.py +1 -1
- roam_code-12.50/src/roam/commands/cmd_lsp.py +936 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_map.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_math.py +11 -11
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_mcp_setup.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_mcp_status.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_metrics_push.py +0 -2
- roam_code-12.50/src/roam/commands/cmd_migration_plan.py +303 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_migration_safety.py +2 -4
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_missing_index.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_oracle.py +4 -5
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_orphan_imports.py +4 -4
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_over_fetch.py +6 -6
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_permit.py +5 -6
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_plugins.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_postmortem.py +5 -12
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_analyze.py +1 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_comment_render.py +5 -5
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_prep.py +1 -1
- roam_code-12.50/src/roam/commands/cmd_pr_replay.py +811 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_risk.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pre_commit.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_preflight.py +4 -4
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_recipes.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_recommend.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_reset.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_retrieve.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_risk.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_rules.py +1 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_sbom.py +6 -6
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_search.py +8 -8
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_smells.py +6 -8
- roam_code-12.50/src/roam/commands/cmd_stale_refs.py +3389 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_stats.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_taint.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_telemetry.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_test_impact.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_test_pyramid.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_timeline.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_tour.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_version.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_watch.py +5 -5
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_weather.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_why_fail.py +1 -1
- roam_code-12.50/src/roam/commands/cmd_why_slow.py +209 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_workflow.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/metrics_history.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/next_steps.py +42 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/resolve.py +3 -3
- roam_code-12.50/src/roam/commands/stale_refs_anchors.py +230 -0
- roam_code-12.50/src/roam/commands/stale_refs_hints.py +417 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/competitor_site_data.py +5 -10
- {roam_code-12.46 → roam_code-12.50}/src/roam/config.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/db/connection.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/db/queries.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/fleet/__init__.py +2 -4
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/builder.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/cycles.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/partition.py +7 -7
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/complexity.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/indexer.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/parser.py +2 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/symbols.py +1 -1
- roam_code-12.50/src/roam/languages/dart_lang.py +119 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/query_engine.py +5 -5
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/registry.py +6 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/mcp-server-card.json +12 -12
- {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/concurrency.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/sampling.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_server.py +483 -36
- {roam_code-12.46 → roam_code-12.50}/src/roam/observability.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/confidence.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/file_role_hints.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/formatter.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/project_shape.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/sarif.py +71 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/plugins.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/pipeline.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/rerank.py +4 -7
- {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/seeds.py +3 -3
- {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/daemon.py +8 -11
- {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/lock_modes.py +3 -5
- {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/lockmgr.py +1 -2
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_engine.py +6 -8
- {roam_code-12.46 → roam_code-12.50}/src/roam/telemetry.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/PKG-INFO +74 -48
- {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/SOURCES.txt +15 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_ask.py +5 -3
- {roam_code-12.46 → roam_code-12.50}/tests/test_capability_registry.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_compare_cli.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_competitor_site_data.py +2 -3
- {roam_code-12.46 → roam_code-12.50}/tests/test_context_propagation.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_critique.py +5 -1
- roam_code-12.50/tests/test_dart.py +186 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_defer_loading.py +6 -6
- {roam_code-12.46 → roam_code-12.50}/tests/test_doc_consistency.py +55 -114
- roam_code-12.50/tests/test_docs_site_quality.py +45 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_doctor.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_exit_codes.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_health_gate.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_laravel_fp_fixes.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_math.py +8 -8
- {roam_code-12.46 → roam_code-12.50}/tests/test_math_fp_fixes.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/tests/test_mcp_extras.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/tests/test_mcp_server.py +2 -2
- roam_code-12.50/tests/test_migration_plan.py +98 -0
- roam_code-12.50/tests/test_no_internal_language.py +249 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pagerank_truncation.py +2 -2
- roam_code-12.46/tests/test_pivot_phase0_commands.py → roam_code-12.50/tests/test_phase0_commands.py +3 -4
- roam_code-12.50/tests/test_pr_replay.py +384 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_python_pivot.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_regression_fp_corpus.py +5 -5
- {roam_code-12.46 → roam_code-12.50}/tests/test_sarif_enrichment.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_search_explain.py +1 -1
- {roam_code-12.46 → roam_code-12.50}/tests/test_skill_generate.py +1 -1
- roam_code-12.50/tests/test_stale_refs.py +3942 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_surface_counts.py +14 -8
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1216_passes.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1216_passes_41_50.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1219_passes_91_100.py +5 -6
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1220_passes_101_110.py +7 -7
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1221_query_timeout.py +2 -2
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1221_untested_commands.py +1 -1
- roam_code-12.50/tests/test_why_slow.py +173 -0
- roam_code-12.46/tests/test_docs_site_quality.py +0 -81
- {roam_code-12.46 → roam_code-12.50}/setup.cfg +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/analysis/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/analysis/effects.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/analysis/taint.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/api.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/ask/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/ask/classifier.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/ask/runner.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/ask/workflow.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/attest/cga.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/base.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_config.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_django.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_protobuf.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_rest_api.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_salesforce.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/bridge_template.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/bridges/registry.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/fixes.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/smells.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/catalog/tasks.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/changed_files.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_adrs.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_affected_tests.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_agent_context.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_agent_plan.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ai_ratio.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ai_readiness.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_alerts.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_annotate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_api_changes.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_api_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ask.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_attest.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_audit_trail_conformance.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_audit_trail_verify.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_bisect.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_breaking.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_budget.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_bus_factor.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_capsule.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_cga.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_check_rules.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ci_setup.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_clean.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_closure.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_clusters.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_codeowners.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_complexity.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_congestion.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_coupling.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_cut.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dark_matter.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dashboard.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_deps.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dev_profile.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_dogfood.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_duplicates.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_effects.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_endpoints.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_entry_points.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_file.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fingerprint.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fitness.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_flag_dead.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_fleet.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_forecast.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_grep.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_guard.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_hooks.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_hover.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_index.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_index_bundle.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ingest_trace.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_init.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_intent.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_invariants.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_layers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_metrics.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_minimap.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_module.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_mutate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_n1.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_orchestrate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_orphan_routes.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_owner.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_partition.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_path_coverage.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_patterns.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_plan.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_plan_refactor.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pr_diff.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_py_modern.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_py_types.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_pytest_fixtures.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_relate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_report.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_rules_validate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_safe_delete.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_safe_zones.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_schema.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_search_semantic.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_secrets.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_semantic_diff.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_simulate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_simulate_departure.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_sketch.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_skill_generate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_spectral.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_split.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_suggest_refactoring.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_suggest_reviewers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_supply_chain.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_suppress.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_symbol.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_syntax_check.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_test_gaps.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_test_scaffold.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_testmap.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_trace.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_trends.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_triage.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_understand.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_uses.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_verify.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_verify_imports.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_vibe_check.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_visualize.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_vuln_map.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_vuln_reach.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_vulns.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_why.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_ws.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/cmd_xlang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/codeowners_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/context_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/finding_suppress.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/gate_presets.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/git_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/graph_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/pr_analyze/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/pr_analyze/audit_trail.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/pr_analyze/cache.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/pr_analyze/rules.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/commands/suppression.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/coverage_reports.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/critique/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/critique/aggregator.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/critique/checks.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/db/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/db/schema.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/eval/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/eval/harness.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/exit_codes.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/fleet/adapters.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/fleet/manifest.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/git_utils.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/anomaly.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/clone_detect.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/clusters.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/dark_matter.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/diff.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/fingerprint.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/layers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/pagerank.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/pathfinding.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/propagation.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/simulate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/spectral.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/graph/stats.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/discovery.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/django_post.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/file_roles.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/git_stats.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/gitignore.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/incremental.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/pytest_fixtures.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/registry_dispatch.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/relations.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/index/test_conventions.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/apex_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/aura_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/base.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/c_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/csharp_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/extractor_schema.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/extractors/kotlin.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/foxpro_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/generic_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/go_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/hcl_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/java_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/javascript_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/kotlin_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/php_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/python_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/ruby_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/rust_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/scala_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/sfxml_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/sql_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/swift_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/typescript_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/visualforce_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/languages/yaml_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/completions.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/progress.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/session.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/mcp_extras/watcher.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/errors.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/framework_filter.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/mermaid.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/output/schema_registry.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/refactor/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/refactor/codegen.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/refactor/transforms.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/learned_ranker.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/retrieve/semantic.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/rules/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/rules/ast_match.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/rules/builtin.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/rules/dataflow.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/rules/engine.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/graph_backend.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/hotspots.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/runtime/trace_ingest.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/search/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/search/framework_packs.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/search/index_embeddings.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/search/onnx_embeddings.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/search/tfidf.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/aibom_extension.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_classifier.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/api_error_leak.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/java_fileupload_path_traversal.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_insecure_jwt_decode.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_localstorage_secrets.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_prototype_pollution.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_ssrf.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/js_xss.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_basic.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_deserialization.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_path_traversal.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_socketio_remote_source.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_sqli.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/python_urllib_open_redirect.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/taint_rules/vue_v_html.yaml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/vuln_reach.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/security/vuln_store.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/surface_counts.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/templates/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/Jenkinsfile +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/agent-review.yml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/azure-pipelines.yml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/bitbucket-pipelines.yml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/templates/ci/gitlab-ci.yml +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/aggregator.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/api_scanner.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/config.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam/workspace/db.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/dependency_links.txt +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/entry_points.txt +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/requires.txt +0 -0
- {roam_code-12.46 → roam_code-12.50}/src/roam_code.egg-info/top_level.txt +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_adrs.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_adversarial.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_affected.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_agent_export.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_agent_mode.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_agent_plan_context.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_ai_ratio.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_ai_readiness.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_alerts_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_annotations.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_anomaly.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_api_changes.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_api_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_attest.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_audit_trail_aggregate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_audit_trail_conformance.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_audit_trail_sequence.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_audit_trail_verify.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_auth_gaps.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_backend_fixes_round2.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_backend_fixes_round3.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_basic.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_batch_mcp.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_bisect.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_bridge_django.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_bridges.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_bridges_extended.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_budget.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_budget_flag.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_budget_phase2.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_bus_factor.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_capsule.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_cga.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_check_rules.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_ci_gate_eval.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_ci_sarif_guard.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_ci_setup.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_clones.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_closure.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_codeowners.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_commands_architecture.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_commands_exploration.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_commands_health.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_commands_refactoring.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_commands_workflow.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_comprehensive.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_config.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_congestion.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_conventions_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_coverage_gaps_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_coverage_ingestion.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_cut.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_dark_matter.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_dark_matter_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_dashboard.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_dataflow_dead.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_dead_aging.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_demo_gif_asset.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_describe.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_detail_flag_hints.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_detector_precision.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_deterministic_output.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_dev_profile.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_difficulty_scoring.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_doc_staleness.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_docker_assets.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_docs_coverage.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_dogfood.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_drift_by_team.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_duplicates.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_effects.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_effects_propagation.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_endpoints.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_entry_points_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_eval_retrieve.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_except_pass_narrow.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_exclude_patterns.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_extractor_grammar_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_fallback_contracts.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_file_roles.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_finding_suppress.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_fingerprint.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_fixes.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_flag_dead.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_fleet.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_fn_coupling.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_forecast.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_formatters.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_foxpro.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_framework_detection.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_gate_presets.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_git_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_git_utils.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_guard.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_hooks.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_hotspots.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_hover.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_index.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_index_bundle.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_init_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_install_check.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_intent.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_invariants.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_json_contracts.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_json_error_envelope.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_kotlin_swift_extractors.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_language_corpus.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_languages.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_library_api.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_math_tips.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_mcp_setup.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_mermaid.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_metrics_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_metrics_push.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_migration_safety.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_minimap.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_missing_index.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_mutate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_n1.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_next_steps.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_onboard.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_oracle.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_orchestrate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_orphan_routes.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_oss_bench_harness.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_over_fetch.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_partition.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_path_coverage.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_patterns_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_performance.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_personalized_pagerank.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_plan.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_plugin_discovery.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze_cache.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze_edge_cases.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pr_analyze_v2_signals.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pr_comment_render.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pr_comment_script.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pr_diff.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pr_risk_author.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_progress.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_progressive_disclosure.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_properties.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_pytest_fixtures.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_python_extractor_v2.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_python_idioms_e2e.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_readme_surface_consistency.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_realworld_feedback.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_refactoring_intelligence.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_registry_dispatch.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_relate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_report.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_reset_clean.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_resolve.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_retrieve.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_retrieve_cross_repo.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_retrieve_seeds.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_risk.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_ruby.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_rule_profiles.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_rules.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_rules_ast_match.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_rules_community_pack.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_rules_dataflow.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_rules_symbol_requirements.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_rules_validate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_runtime.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_runtime_score.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_salesforce.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_sarif_flag.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_sbom.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_scala.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_schema_versioning.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_secrets.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_secrets_v2.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_semantic_diff.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_semantic_onnx.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_semantic_search.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_simulate.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_simulate_departure.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_sketch.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_smells.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_smoke.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_sna_metrics.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_spectral.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_split_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_sql.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_suggest_reviewers.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_supply_chain.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_syntax_check.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_taint.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_taint_analysis.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_taint_classifier.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_taint_intraprocedural.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_test_conventions.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_test_gaps.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_test_scaffold.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_testmap.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_top_flag_consistency.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_tour_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_trends.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_trends_cohort.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_triage.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_uses_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1215_passes.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1216_passes_51_60.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1217_passes_61_80.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v1218_passes_81_90.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v12_2.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v2_edge_cases.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v2_integration.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v6_features.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v71_features.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v7_features.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_v82_features.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_verify.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_verify_imports.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_vibe_check.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_visualize.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_vuln.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_vulns_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_watch.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_why.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_workspace.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_ws_resolve_fixes.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_xlang.py +0 -0
- {roam_code-12.46 → roam_code-12.50}/tests/test_yaml_hcl.py +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
Apache License
|
|
2
3
|
Version 2.0, January 2004
|
|
3
4
|
http://www.apache.org/licenses/
|
|
@@ -137,8 +138,8 @@
|
|
|
137
138
|
|
|
138
139
|
6. Trademarks. This License does not grant permission to use the trade
|
|
139
140
|
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
-
except as required for
|
|
141
|
-
reproducing the content of the NOTICE file.
|
|
141
|
+
except as required for reasonable and customary use in describing the
|
|
142
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
143
|
|
|
143
144
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
145
|
agreed to in writing, Licensor provides the Work (and each
|
|
@@ -162,15 +163,16 @@
|
|
|
162
163
|
other commercial damages or losses), even if such Contributor
|
|
163
164
|
has been advised of the possibility of such damages.
|
|
164
165
|
|
|
165
|
-
9. Accepting Warranty or
|
|
166
|
-
Derivative Works thereof, You may
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
166
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
167
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
168
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
169
|
+
or other liability obligations and/or rights consistent with this
|
|
170
|
+
License. However, in accepting such obligations, You may act only
|
|
171
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
172
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
171
173
|
defend, and hold each Contributor harmless for any liability
|
|
172
174
|
incurred by, or claims asserted against, such Contributor by reason
|
|
173
|
-
of your accepting any such warranty or
|
|
175
|
+
of your accepting any such warranty or additional liability.
|
|
174
176
|
|
|
175
177
|
END OF TERMS AND CONDITIONS
|
|
176
178
|
|
|
@@ -185,7 +187,7 @@
|
|
|
185
187
|
same "printed page" as the copyright notice for easier
|
|
186
188
|
identification within third-party archives.
|
|
187
189
|
|
|
188
|
-
Copyright
|
|
190
|
+
Copyright [yyyy] [name of copyright owner]
|
|
189
191
|
|
|
190
192
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
191
193
|
you may not use this file except in compliance with the License.
|
|
@@ -195,6 +197,6 @@
|
|
|
195
197
|
|
|
196
198
|
Unless required by applicable law or agreed to in writing, software
|
|
197
199
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
198
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
199
|
-
|
|
200
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
201
|
+
See the License for the specific language governing permissions and
|
|
200
202
|
limitations under the License.
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roam-code
|
|
3
|
-
Version: 12.
|
|
3
|
+
Version: 12.50
|
|
4
4
|
Summary: Instant codebase comprehension for AI coding agents
|
|
5
|
-
Author:
|
|
5
|
+
Author: Cranot
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://
|
|
8
|
-
Project-URL: Documentation, https://
|
|
7
|
+
Project-URL: Homepage, https://roam-code.com/
|
|
8
|
+
Project-URL: Documentation, https://roam-code.com/docs/
|
|
9
9
|
Project-URL: Repository, https://github.com/Cranot/roam-code
|
|
10
10
|
Project-URL: Issues, https://github.com/Cranot/roam-code/issues
|
|
11
11
|
Project-URL: Changelog, https://github.com/Cranot/roam-code/blob/main/CHANGELOG.md
|
|
12
|
+
Project-URL: Pricing, https://roam-code.com/pricing
|
|
13
|
+
Project-URL: Security, https://roam-code.com/security
|
|
12
14
|
Keywords: code-intelligence,static-analysis,mcp-server,tree-sitter,architecture,code-graph,ai-coding,graph-analysis,code-quality,cli,codebase,code-analysis,ai-tools,mcp,sql
|
|
13
15
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
16
|
Classifier: Environment :: Console
|
|
@@ -64,9 +66,9 @@ Dynamic: license-file
|
|
|
64
66
|
|
|
65
67
|
**Architectural sight for AI coding agents — before they edit.**
|
|
66
68
|
|
|
67
|
-
A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other
|
|
69
|
+
A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other 200 specialised commands are advanced surface for specialised workflows.
|
|
68
70
|
|
|
69
|
-
*
|
|
71
|
+
*205 commands · 137 MCP tools · 28 languages · 100% local · zero API keys*
|
|
70
72
|
|
|
71
73
|
[](https://pypi.org/project/roam-code/)
|
|
72
74
|
[](https://github.com/Cranot/roam-code/stargazers)
|
|
@@ -78,19 +80,37 @@ A local code graph (SQLite + tree-sitter + git history) that gives any agent —
|
|
|
78
80
|
|
|
79
81
|
---
|
|
80
82
|
|
|
83
|
+
### Killer use case: post-rename doc hygiene
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git mv docs/old-guide.md docs/new-guide.md
|
|
87
|
+
roam stale-refs --fix preview # see what auto-rewrites are safe
|
|
88
|
+
roam stale-refs --fix apply # rewrite README + CHANGELOG + everywhere
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`stale-refs` finds every dangling markdown link, HTML href, backtick path, and
|
|
92
|
+
broken `#anchor` across the repo, with confidence-tagged rename hints from git
|
|
93
|
+
history + basename match + LLM enrichment. Composable with `--gate` (CI),
|
|
94
|
+
`--diff` (branch-only), `--baseline-from` (acknowledged debt), `--watch` (live),
|
|
95
|
+
`--check-external` (HTTP validation), `--sarif` (Code Scanning), and a
|
|
96
|
+
companion `roam lsp` server for editor squiggles. See
|
|
97
|
+
[stale-refs in the command table](#commands).
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
81
101
|
## What is Roam?
|
|
82
102
|
|
|
83
103
|
Roam is a structural intelligence engine for software. It pre-indexes your codebase into a semantic graph -- symbols, dependencies, call graphs, architecture layers, git history, and runtime traces -- stored in a local SQLite DB. Agents query it via CLI or MCP instead of repeatedly grepping files and guessing structure.
|
|
84
104
|
|
|
85
|
-
> **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam
|
|
105
|
+
> **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam Review](#roam-review-pr-bot-for-ai-generated-changes)** (PR bot scoring AI-generated changes for structural risk) and **[Roam Cloud](#roam-cloud-metrics-history-no-source-upload)** (metrics-history dashboard, no source-code bodies uploaded). Both run on the OSS engine and are licensed separately.
|
|
86
106
|
|
|
87
107
|
Unlike LSPs (editor-bound, language-specific) or Sourcegraph (hosted search), Roam provides architecture-level graph queries -- offline, cross-language, and compact. It goes beyond comprehension: Roam governs architecture through budget gates, simulates refactoring outcomes, orchestrates multi-agent swarms with zero-conflict guarantees, maps vulnerability reachability paths, and enables graph-level code editing without syntax errors.
|
|
88
108
|
|
|
89
109
|
```
|
|
90
|
-
Codebase ──> [Index] ──> Semantic Graph ──>
|
|
110
|
+
Codebase ──> [Index] ──> Semantic Graph ──> 194 Commands ──> AI Agent
|
|
91
111
|
│ │ │
|
|
92
112
|
tree-sitter symbols comprehend
|
|
93
|
-
|
|
113
|
+
28 languages + edges govern
|
|
94
114
|
git history + metrics refactor
|
|
95
115
|
runtime traces + architecture orchestrate
|
|
96
116
|
```
|
|
@@ -160,7 +180,7 @@ $ roam diff # blast radius of uncommitted changes
|
|
|
160
180
|
- **`personalized_pagerank()`** in `graph/pagerank.py`: NetworkX `personalization=` wrapper with empty-seed fallback to global PR; biases ranking toward query-relevant nodes for the retrieve reranker.
|
|
161
181
|
- **`.roam/config.toml`** (new): zero-dep TOML loader (stdlib `tomllib` → `tomli` → in-tree subset parser). Tunable retrieve weights (`alpha`/`beta`/`gamma`/`delta`/`epsilon`), `tokens_per_line`, `lexical_baseline`, `first_stage_token_cap`, `default_budget`, `default_k`, `default_rerank`.
|
|
162
182
|
- **DX corrections from dogfood pass**: `roam --detail <cmd>` is the canonical group-level flag; misleading "use --detail" hints in 7 commands rewritten to point users at `roam --detail <cmd>`. `--top N` aliased on `complexity`/`algo`/`rules` (`--top 0` means unlimited on `rules`). `roam fingerprint` no longer refuses graphs ≥5,000 symbols (new soft-warn threshold 20k, hard cap 100k).
|
|
163
|
-
- **
|
|
183
|
+
- **205 CLI commands, 137 MCP tools** (`fleet`, `ask`, `workflow`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`), `roam_taint_classify`, `roam_pytest_fixtures`, and `roam_hover` as MCP tools). 35-tool `core` preset is the default for token-budget-conscious clients.
|
|
164
184
|
|
|
165
185
|
## What's New in v11
|
|
166
186
|
|
|
@@ -172,7 +192,7 @@ $ roam diff # blast radius of uncommitted changes
|
|
|
172
192
|
### v11.1.2 -- SQL + Scala Tier 1, 27 Languages
|
|
173
193
|
- **SQL DDL promoted to Tier 1** with dedicated `SqlExtractor` -- tables, columns, views, functions, triggers, schemas, types (enums), sequences, ALTER TABLE ADD COLUMN. Foreign keys produce graph edges; views and triggers reference source tables. Database-schema projects now work with `roam health`, `roam layers`, `roam impact`, `roam coupling` and all graph commands.
|
|
174
194
|
- **Scala promoted to Tier 1** with dedicated `ScalaExtractor` -- classes, traits, objects, case classes, sealed hierarchies, val/var properties, type aliases, imports, and inheritance. Full `extends` + `with` trait mixin resolution.
|
|
175
|
-
- **
|
|
195
|
+
- **28 languages** with 17 dedicated Tier 1 extractors.
|
|
176
196
|
- `server.json` for official MCP Registry submission.
|
|
177
197
|
|
|
178
198
|
### v11.1.1 -- Command Quality Audit
|
|
@@ -296,10 +316,10 @@ First index takes ~5s for 200 files, ~15s for 1,000 files. Subsequent runs are i
|
|
|
296
316
|
|
|
297
317
|
- **Set up your AI agent:** `roam describe --write` (auto-detects CLAUDE.md, AGENTS.md, .cursor/rules, etc. — see [integration instructions](#integration-with-ai-coding-tools))
|
|
298
318
|
- **Explore:** `roam health` → `roam weather` → `roam map`
|
|
299
|
-
- **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam
|
|
300
|
-
- **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail +
|
|
319
|
+
- **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam Review](#roam-review-pr-bot-for-ai-generated-changes))
|
|
320
|
+
- **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail + governance checks in one envelope)
|
|
301
321
|
- **Add to CI:** `roam init` already generated a GitHub Action
|
|
302
|
-
- **Customer-facing artifacts:** see
|
|
322
|
+
- **Customer-facing artifacts:** see starter rule packs at [`templates/rules/`](templates/rules/), the audit-report template + redacted sample at [`templates/audit-report/`](templates/audit-report/), and the security/procurement packet at [`templates/legal/security-procurement-packet.md`](templates/legal/security-procurement-packet.md).
|
|
303
323
|
|
|
304
324
|
<details>
|
|
305
325
|
<summary><strong>Try it on Roam itself</strong></summary>
|
|
@@ -334,7 +354,7 @@ roam health
|
|
|
334
354
|
|
|
335
355
|
## Commands
|
|
336
356
|
|
|
337
|
-
**Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining
|
|
357
|
+
**Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining ~200 commands are detail surface for specialised workflows (taint, fleet, cga, oracle, eval, …) — they're called by agents on demand, not memorised. This is intentional design; under the hood the canonical surface is **205 commands organised into 7 categories** (plus 7 aliases for muscle memory: `algo` → `math`, `weather` → `churn`, `digest` / `snapshot` / `trend` → `trends`, `onboard` → `understand`, `refs` → `uses`), but you don't need to know that to start.
|
|
338
358
|
|
|
339
359
|
<details>
|
|
340
360
|
<summary><strong>Full command reference</strong></summary>
|
|
@@ -376,28 +396,31 @@ roam health
|
|
|
376
396
|
| `roam stats` | Aggregate metrics over the index: count by language, file role, kind, plus recent commit activity |
|
|
377
397
|
| `roam timeline <symbol>` | Chronological commits that touched the file owning the symbol — author, date, lines added/removed |
|
|
378
398
|
| `roam pr-prep [<range>]` | One-shot pre-PR fitness check that bundles diff + critique + pr-risk into one envelope |
|
|
379
|
-
| `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK);
|
|
399
|
+
| `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK); governance audit trail via `--audit-trail` |
|
|
380
400
|
| `roam pr-comment-render --input F` | Render a markdown PR comment from a `pr-analyze` JSON envelope; styles: `github`, `gitlab`, `plain` |
|
|
381
|
-
| `roam
|
|
401
|
+
| `roam pr-replay [<sha>] [--audit-trail]` | Replay a PR's analysis at a specific commit (or HEAD); useful for reproducing audit decisions and validating cache stability |
|
|
402
|
+
| `roam metrics-push [--token T] [--anonymize] [--dry-run]` | Push metrics-only summary (no source-code bodies) from `roam audit` to a Roam Cloud endpoint; `--dry-run` prints the payload locally |
|
|
382
403
|
| `roam audit-trail-verify [--input F] [--gate]` | Walk the EU AI Act audit-trail JSONL and verify SHA-256 chain integrity; exit 5 on broken chain |
|
|
383
404
|
| `roam audit-trail-export [--format md\|json\|csv] [--since T] [--verdict V] [--aggregate]` | Export the audit trail for procurement / compliance review; `--aggregate` rolls up per actor / repo / verdict / month |
|
|
384
|
-
| `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against
|
|
385
|
-
| `roam article-12-check [--output F] [--pdf F]` |
|
|
405
|
+
| `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against governance-evidence checks (chain integrity, timestamps, actors, reproducibility, retention) |
|
|
406
|
+
| `roam article-12-check [--output F] [--pdf F]` | Article 12 scope/readiness assessment for actual Annex III high-risk AI-system buyers; produces a 1-page Markdown / PDF report. |
|
|
386
407
|
| `roam capabilities [--emit yaml\|json\|text] [--category X] [--ai-safe-only]` | Emit the decorator-driven capability registry — every command's machine-readable shape (inputs, outputs, ai_safe flag, since-version). For Roam Review GitHub App + MCP filtering. |
|
|
387
408
|
| `roam skill-generate [--target claude\|cursor\|continue\|aider] [--output F]` | Generate an agent-runtime skill manifest from the capability registry. SKILL.md / .mdc / config snippets — derived from decorators, never hand-edited. |
|
|
388
409
|
| `roam compare <baseline.db> <target.db> [--top N] [--threshold N]` | Structural delta between two indices: symbols added/removed/moved + per-file complexity deltas + IMPROVED/SIDEWAYS/REGRESSED verdict. The "did this refactor actually work?" tool. |
|
|
410
|
+
| `roam migration-plan [--target spec.yml] [--move SYMBOL=path] [--max-risk low\|medium\|high]` | Generate an ordered migration plan from current state to a target architecture. Each step annotated with blast-radius (caller count) + risk score (low/medium/high) + cross-layer detection. |
|
|
389
411
|
| `roam permit [--staged] [--input F] [--symbol N]` | Structural-permission verdict facade for AI agents: ALLOW/REVIEW/BLOCK over critique + preflight + blast-radius. Exit codes 0/5/6 for Cursor rules / Claude Code hooks / pre-commit / CI gates. |
|
|
390
412
|
| `roam postmortem <commit-range> [--limit N] [--show N]` | Replay current detectors against past commits; reports findings that would have surfaced pre-merge. The "would Roam have caught my Q1 incident?" demo. |
|
|
391
413
|
| `roam rules-validate [PATH] [--against DIFF] [--strict] [--gate] [--explain]` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs; optional dry-run against a sample diff |
|
|
392
|
-
| `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail +
|
|
414
|
+
| `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail + governance checks — first-touch demo for any repo |
|
|
393
415
|
| `roam suppress <finding-id> --reason "…"` | Suppress a math / over-fetch / missing-index / auth-gaps false positive with audit-trail-friendly record (`.roam/suppressions.json`); `--list` / `--remove` complete the workflow |
|
|
394
416
|
| `roam why-fail <test>` | Find recently-changed symbols transitively reachable from a failing test |
|
|
417
|
+
| `roam why-slow <symbol>` | Surface runtime hotspots and slow callers for a specific symbol (uses runtime traces if present) |
|
|
395
418
|
| `roam recommend <symbol>` | Surface related symbols using call-graph + co-change + clone signals |
|
|
396
419
|
| `roam graph-stats` | Graph-level invariants: density, weak components, non-trivial cycles, top inbound symbols |
|
|
397
420
|
| `roam api [--scope <dir>]` | List the public API surface (exported public symbols + signatures) |
|
|
398
421
|
| `roam exit-codes` | List every roam exit code with its meaning |
|
|
399
422
|
| `roam version [--check]` | Show installed version; with `--check` also queries PyPI for newer releases |
|
|
400
|
-
| `roam audit [--brief]` | One-shot AI
|
|
423
|
+
| `roam audit [--brief]` | One-shot AI-governance audit envelope — chains health + debt + dead + risk + test-pyramid + api into a single envelope |
|
|
401
424
|
| `roam disambiguate <name>` | List every symbol matching the name with file/line/kind/signature/docstring snippet to pick the right one |
|
|
402
425
|
| `roam pre-commit [--install\|--print]` | Install or preview a roam-critique git pre-commit hook |
|
|
403
426
|
| `roam mcp-status` | MCP server health: preset, registered tools, backpressure limits, cache entries, watcher state |
|
|
@@ -415,7 +438,7 @@ roam health
|
|
|
415
438
|
| `roam retrieve <task> [--budget N] [--k N] [--seed-files PATH]` | Graph-aware context for free-form tasks: FTS5 + structural rerank (PageRank + clones) + token budget |
|
|
416
439
|
| `roam critique [--input DIFF] [--intent TEXT] [--high-callers N]` | Verify a patch against the graph: clones-not-edited + blast radius + intent-vs-semantic-diff. Pipe `git diff` in. Exit 5 on high severity. |
|
|
417
440
|
| `roam fleet plan <goal> [--n-agents N] [--adapter raw\|composio\|copilot]` | Graph-aware planner: Louvain partition + co-change + PageRank anchors → `.roam-fleet.json` for Composio/Copilot CLI/raw. |
|
|
418
|
-
| `roam ask <query> [--list] [--explain] [--recipe NAME]` | One-phrase intent classifier over a
|
|
441
|
+
| `roam ask <query> [--list] [--explain] [--recipe NAME]` | One-phrase intent classifier over a 25-recipe registry with phase, review-lens, gate, and follow-up metadata — composes preflight/retrieve/critique/fleet/understand/diagnose/trace/trends/hotspots/debt/taint/dead/coupling/stale-refs to cover the most common workflows. |
|
|
419
442
|
| `roam workflow [RECIPE] [--list] [--query TEXT]` | Inspect a recipe DAG, review lenses, gates, rendered command arguments, and follow-up commands without running the workflow. |
|
|
420
443
|
| `roam taint [--rules-dir PATH] [--rule NAME] [--rules-pack PACK] [--ci]` | Graph-reach taint analysis with OpenVEX-correct VEX justifications. YAML rule packs (10 starter packs: sqli, xss, ssrf, path-traversal, command-injection, deserialization, open-redirect, urllib, socketio, fileupload). |
|
|
421
444
|
| `roam cga emit [--include-taint] [--sign --key]` | Code Graph Attestation — in-toto v1 statement with `roam-code.dev/CodeGraph/v1` predicate, Merkle root + edge bundle digest. `--include-taint` embeds OpenVEX-shaped reachability claims from `roam taint`. `--sign` signs with cosign (graceful skip if absent); `roam cga verify` round-trips both predicate digest and cosign signature. |
|
|
@@ -591,7 +614,7 @@ src/
|
|
|
591
614
|
formatter.py # to_json, json_envelope
|
|
592
615
|
cli.py # cli, LazyGroup
|
|
593
616
|
mcp_server.py
|
|
594
|
-
tests/ (
|
|
617
|
+
tests/ (267 files)
|
|
595
618
|
` ` `
|
|
596
619
|
|
|
597
620
|
**Key symbols** (PageRank): `open_db` · `ensure_index` · `json_envelope` · `to_json` · `LanguageExtractor`
|
|
@@ -660,6 +683,8 @@ The sentinel pair `<!-- roam:minimap -->` / `<!-- /roam:minimap -->` is replaced
|
|
|
660
683
|
| `roam bus-factor [--brain-methods]` | Knowledge loss risk per module |
|
|
661
684
|
| `roam doc-staleness` | Detect stale docstrings |
|
|
662
685
|
| `roam docs-coverage` | Public-symbol doc coverage + stale docs + PageRank-ranked missing-doc hotlist |
|
|
686
|
+
| `roam stale-refs [--gate] [--diff REF] [--fix preview\|apply]` | Find dangling file references AND markdown anchor mismatches — confidence-tagged rename hints from git history / basename / symbol graph; HIGH-confidence auto-fix; branch-diff filter for CI; SARIF export. Index-free. |
|
|
687
|
+
| `roam lsp` | Minimal LSP server (JSON-RPC over stdio). Wire into VS Code / Neovim / JetBrains as a custom server to get squiggly underlines on dangling links and missing anchors as you type. |
|
|
663
688
|
| `roam suggest-refactoring [--limit N] [--min-score N]` | Proactive refactoring recommendations ranked by complexity, coupling, churn, smells, coverage gaps, and debt |
|
|
664
689
|
| `roam plan-refactor <symbol> [--operation auto\|extract\|move]` | Ordered refactor plan with blast radius, test gaps, layer risk, and simulation-based strategy preview |
|
|
665
690
|
| `roam test-scaffold <name\|file> [--write] [--framework F]` | Generate test file/function/import skeletons from symbol data (pytest, jest, Go, JUnit, RSpec) |
|
|
@@ -984,7 +1009,7 @@ pip install "roam-code[mcp]"
|
|
|
984
1009
|
roam mcp
|
|
985
1010
|
```
|
|
986
1011
|
|
|
987
|
-
|
|
1012
|
+
137 tools, 10 resources, and 5 prompts are available in the full preset. Most tools are read-only index queries; side-effect tools are explicitly annotated.
|
|
988
1013
|
|
|
989
1014
|
**MCP v2 highlights (v11):**
|
|
990
1015
|
- In-process MCP execution (no subprocess shell-out per call)
|
|
@@ -1015,9 +1040,9 @@ ROAM_MCP_LITE=0 roam mcp
|
|
|
1015
1040
|
Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`, `roam_complete`, `roam_complexity_report`, `roam_context`, `roam_dead_code`, `roam_deps`, `roam_diagnose`, `roam_diagnose_issue`, `roam_diff`, `roam_expand_toolset`, `roam_explore`, `roam_file_info`, `roam_health`, `roam_impact`, `roam_pr_risk`, `roam_preflight`, `roam_prepare_change`, `roam_review_change`, `roam_search_symbol`, `roam_syntax_check`, `roam_trace`, `roam_understand`, `roam_uses`.
|
|
1016
1041
|
|
|
1017
1042
|
<details>
|
|
1018
|
-
<summary><strong>MCP tool list (all
|
|
1043
|
+
<summary><strong>MCP tool list (all 137)</strong></summary>
|
|
1019
1044
|
|
|
1020
|
-
*New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam
|
|
1045
|
+
*New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam Review + Cloud engines + governance audit-trail toolkit + production-grade rules linting + one-shot v2 stack runner.*
|
|
1021
1046
|
|
|
1022
1047
|
| Tool | Description |
|
|
1023
1048
|
|------|-------------|
|
|
@@ -1037,7 +1062,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
|
|
|
1037
1062
|
| `roam_oracle_is_test_only` | Boolean oracle: are ALL callers of this symbol in test files? |
|
|
1038
1063
|
| `roam_oracle_is_reachable_from_entry` | Boolean oracle: can BFS reach this symbol from any entry-point? |
|
|
1039
1064
|
| `roam_oracle_is_clone_of` | Boolean oracle: does this symbol participate in a persisted clone cluster? |
|
|
1040
|
-
| `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (
|
|
1065
|
+
| `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (shorter name) |
|
|
1041
1066
|
| `roam_oracle_batch` | Run multiple oracle queries in one call (tri-state envelopes per result) |
|
|
1042
1067
|
| `roam_taint_classify` | LLM-augmented taint classification (IDOR/AUTHZ/SQLI/...) via MCP sampling |
|
|
1043
1068
|
| `roam_taint` | Static taint analysis — graph-reach BFS with OpenVEX-correct findings |
|
|
@@ -1050,10 +1075,10 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
|
|
|
1050
1075
|
| `roam_pr_risk` | Risk score for pending changes |
|
|
1051
1076
|
| `roam_pr_analyze` | Agent-aware PR verdict: pr-prep + AI-likelihood + `.roam/rules.yml` + INTENTIONAL/SAFE/REVIEW/BLOCK |
|
|
1052
1077
|
| `roam_pr_comment_render` | Render a markdown PR comment from a `roam_pr_analyze` envelope |
|
|
1053
|
-
| `roam_metrics_push` | Push metrics-only summary (no source
|
|
1078
|
+
| `roam_metrics_push` | Push metrics-only summary (no source-code bodies) to Roam Cloud; default dry-run |
|
|
1054
1079
|
| `roam_audit_trail_verify` | Verify SHA-256 chain integrity of an EU AI Act audit-trail JSONL |
|
|
1055
1080
|
| `roam_audit_trail_export` | Export the audit trail as markdown / json / csv (with date / verdict filters) for procurement |
|
|
1056
|
-
| `roam_audit_trail_conformance_check` | Score the audit trail against
|
|
1081
|
+
| `roam_audit_trail_conformance_check` | Score the audit trail against governance-evidence checks (chain / timestamps / actors / reproducibility / retention) |
|
|
1057
1082
|
| `roam_rules_validate` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs |
|
|
1058
1083
|
| `roam_dogfood` | One-shot v2 stack runner — audit + pr-analyze + audit-trail + conformance in one envelope |
|
|
1059
1084
|
| `roam_breaking_changes` | Detect breaking changes between refs |
|
|
@@ -1108,6 +1133,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
|
|
|
1108
1133
|
| `roam_weather` | Code hotspots: churn x complexity ranking |
|
|
1109
1134
|
| `roam_debt` | Hotspot-weighted technical debt prioritization with optional ROI estimate |
|
|
1110
1135
|
| `roam_docs_coverage` | Doc coverage and stale-doc drift with PageRank-ranked missing docs |
|
|
1136
|
+
| `roam_stale_refs` | Find dangling file references — markdown links / HTML href-src / backtick paths whose target is missing |
|
|
1111
1137
|
| `roam_suggest_refactoring` | Rank proactive refactoring candidates using complexity, coupling, churn, smells, and coverage gaps |
|
|
1112
1138
|
| `roam_plan_refactor` | Build an ordered refactor plan for one symbol with risk/test/simulation context |
|
|
1113
1139
|
| `roam_n1` | Detect N+1 I/O patterns in ORM code |
|
|
@@ -1240,11 +1266,11 @@ Add to `.vscode/mcp.json`:
|
|
|
1240
1266
|
|
|
1241
1267
|
</details>
|
|
1242
1268
|
|
|
1243
|
-
## Roam
|
|
1269
|
+
## Roam Review (PR bot for AI-generated changes)
|
|
1244
1270
|
|
|
1245
|
-
Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam
|
|
1271
|
+
Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam Review fills that gap.
|
|
1246
1272
|
|
|
1247
|
-
`roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and
|
|
1273
|
+
`roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and a governance audit-trail record.
|
|
1248
1274
|
|
|
1249
1275
|
```bash
|
|
1250
1276
|
git diff main..HEAD | roam pr-analyze --explain --with-reviewers --audit-trail
|
|
@@ -1252,7 +1278,7 @@ roam pr-analyze main..HEAD --gate # exit 5 on BLOCK (CI gat
|
|
|
1252
1278
|
roam --json pr-analyze --input pr.diff | roam pr-comment-render # ready-to-post markdown
|
|
1253
1279
|
roam pr-analyze --batch ./diffs/ --cache --parallel 4 # 24-55x speedup on incremental re-runs
|
|
1254
1280
|
roam audit-trail-verify # check SHA-256 chain integrity
|
|
1255
|
-
roam audit-trail-conformance-check --gate #
|
|
1281
|
+
roam audit-trail-conformance-check --gate # governance-evidence score (CI)
|
|
1256
1282
|
```
|
|
1257
1283
|
|
|
1258
1284
|
**Nine weighted heuristic signals** score the diff for AI-likelihood: add/remove ratio, comment density, test coverage, function-size variance, generic naming, orphan imports, **placeholder density** (TODO/FIXME/NotImplementedError stubs), **LLM-phrase density** ("we use this approach because…"), **suspicious imports** (numbered modules, mass typing imports). Each carries **language-aware weights** across Python / TypeScript / JavaScript / Go / Rust / Java / Kotlin. Starter rule packs ship for Python, TypeScript, Go, and Java at [`templates/rules/`](templates/rules/) — drop one at `.roam/rules.yml` to enable. Custom rules look like:
|
|
@@ -1274,13 +1300,13 @@ rules:
|
|
|
1274
1300
|
|
|
1275
1301
|
A **drift baseline** (`--save-baseline` / `--baseline FILE`) compares the current PR's signals against the previous analysis and auto-escalates the verdict on regression — the GitHub App reads this to render `(+5 vs prev)` / `(-22 vs prev)` arrows on every push.
|
|
1276
1302
|
|
|
1277
|
-
The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports.
|
|
1303
|
+
The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports. This is best framed as SOC 2 CC8.1, ISO 42001, and internal AI-governance evidence. Article 12 is only relevant for actual Annex III high-risk AI-system buyers, and Roam's records are supporting evidence rather than complete runtime inference logs.
|
|
1278
1304
|
|
|
1279
1305
|
A hosted GitHub App is in development on top of this CLI engine. Until it ships, the CLI is usable today as a free CI gate (`roam pr-analyze --gate` exits 5 on BLOCK).
|
|
1280
1306
|
|
|
1281
|
-
## Roam Cloud
|
|
1307
|
+
## Roam Cloud (metrics history, no source upload)
|
|
1282
1308
|
|
|
1283
|
-
`roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud
|
|
1309
|
+
`roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud endpoint — numerical metrics, file paths (or SHA-256 hashes when `--anonymize`), and identifier names only. **No source-code bodies are transmitted**, ever. Inspect the exact payload locally with `--dry-run` before any token is set.
|
|
1284
1310
|
|
|
1285
1311
|
```bash
|
|
1286
1312
|
roam metrics-push --dry-run # local-only inspection
|
|
@@ -1515,7 +1541,7 @@ Codebase
|
|
|
1515
1541
|
|
|
|
1516
1542
|
[1] Discovery ──── git ls-files (respects .gitignore + .roamignore)
|
|
1517
1543
|
|
|
|
1518
|
-
[2] Parse ──────── tree-sitter AST per file (
|
|
1544
|
+
[2] Parse ──────── tree-sitter AST per file (28 languages)
|
|
1519
1545
|
|
|
|
1520
1546
|
[3] Extract ────── symbols + references (calls, imports, inheritance)
|
|
1521
1547
|
|
|
|
@@ -1614,11 +1640,11 @@ Each factor uses sigmoid health: `h = e^(-signal/scale)` (1 = pristine, approach
|
|
|
1614
1640
|
|
|
1615
1641
|
roam-code is the only tool that combines graph algorithms (PageRank, Tarjan SCC, Louvain clustering), git archaeology, architecture simulation, and multi-agent partitioning in a single local CLI with zero API keys.
|
|
1616
1642
|
|
|
1617
|
-
Documentation
|
|
1618
|
-
-
|
|
1619
|
-
-
|
|
1620
|
-
-
|
|
1621
|
-
-
|
|
1643
|
+
Documentation lives at <https://roam-code.com/docs/>:
|
|
1644
|
+
- Tutorial — <https://roam-code.com/docs/getting-started>
|
|
1645
|
+
- Command reference — <https://roam-code.com/docs/command-reference>
|
|
1646
|
+
- Architecture guide — <https://roam-code.com/docs/architecture>
|
|
1647
|
+
- Integration tutorials — <https://roam-code.com/docs/integration-tutorials>
|
|
1622
1648
|
|
|
1623
1649
|
| Capability | roam-code | AI IDEs (Cursor, Windsurf) | AI Agents (Claude Code, Codex) | SAST (SonarQube, CodeQL) |
|
|
1624
1650
|
|---|---|---|---|---|
|
|
@@ -1706,7 +1732,7 @@ Delete `.roam/` from your project root to clean up local data.
|
|
|
1706
1732
|
git clone https://github.com/Cranot/roam-code.git
|
|
1707
1733
|
cd roam-code
|
|
1708
1734
|
pip install -e ".[dev]" # includes pytest, ruff
|
|
1709
|
-
pytest tests/ # ~
|
|
1735
|
+
pytest tests/ # ~7,500 tests, Python 3.9-3.13
|
|
1710
1736
|
|
|
1711
1737
|
# Or use Make targets:
|
|
1712
1738
|
make dev # install with dev extras
|
|
@@ -1723,8 +1749,8 @@ roam-code/
|
|
|
1723
1749
|
├── action.yml # Reusable GitHub Action
|
|
1724
1750
|
├── src/roam/
|
|
1725
1751
|
│ ├── __init__.py # Version (from pyproject.toml)
|
|
1726
|
-
│ ├── cli.py # Click CLI (
|
|
1727
|
-
│ ├── mcp_server.py # MCP server (
|
|
1752
|
+
│ ├── cli.py # Click CLI (198 canonical + 7 aliases)
|
|
1753
|
+
│ ├── mcp_server.py # MCP server (137 tools, 10 resources, 5 prompts)
|
|
1728
1754
|
│ ├── db/
|
|
1729
1755
|
│ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
|
|
1730
1756
|
│ │ ├── schema.py # Tables, indexes, migrations
|
|
@@ -1795,7 +1821,7 @@ roam-code/
|
|
|
1795
1821
|
│ ├── formatter.py # Token-efficient formatting
|
|
1796
1822
|
│ ├── sarif.py # SARIF 2.1.0 output
|
|
1797
1823
|
│ └── schema_registry.py # JSON envelope schema versioning
|
|
1798
|
-
└── tests/ # ~
|
|
1824
|
+
└── tests/ # ~7,500 tests across 267 test files
|
|
1799
1825
|
```
|
|
1800
1826
|
|
|
1801
1827
|
</details>
|
|
@@ -1818,7 +1844,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
|
|
|
1818
1844
|
### Shipped
|
|
1819
1845
|
|
|
1820
1846
|
- [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
|
|
1821
|
-
- [x] Full command and MCP inventory parity in docs:
|
|
1847
|
+
- [x] Full command and MCP inventory parity in docs: 198 canonical CLI commands (205 with aliases) and 137 MCP tools.
|
|
1822
1848
|
- [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
|
|
1823
1849
|
- [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
|
|
1824
1850
|
- [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
|
|
@@ -1839,7 +1865,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
|
|
|
1839
1865
|
git clone https://github.com/Cranot/roam-code.git
|
|
1840
1866
|
cd roam-code
|
|
1841
1867
|
pip install -e .
|
|
1842
|
-
pytest tests/ # all ~
|
|
1868
|
+
pytest tests/ # all ~7,500 tests must pass
|
|
1843
1869
|
```
|
|
1844
1870
|
|
|
1845
1871
|
Good first contributions: add a [Tier 1 language](src/roam/languages/) (see `go_lang.py` or `php_lang.py` as templates), improve reference resolution, add benchmark repos, extend SARIF converters, add MCP tools.
|