code-mower 0.5.0b5__py3-none-any.whl

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 (185) hide show
  1. code_mower/__init__.py +3 -0
  2. code_mower/adapters/__init__.py +39 -0
  3. code_mower/adapters/_base.py +148 -0
  4. code_mower/adapters/cursor_bugbot.py +97 -0
  5. code_mower/adapters/gitar.py +111 -0
  6. code_mower/adapters/greptile.py +191 -0
  7. code_mower/adapters/qodo.py +140 -0
  8. code_mower/antigravity_cli_audit_pr.py +241 -0
  9. code_mower/audit_handoff_log.py +345 -0
  10. code_mower/audit_labeler_lib.py +311 -0
  11. code_mower/audit_progress.py +203 -0
  12. code_mower/blind_review_artifacts.py +562 -0
  13. code_mower/blind_review_coordinator.py +276 -0
  14. code_mower/bootstrap.py +524 -0
  15. code_mower/builder_experiment.py +539 -0
  16. code_mower/calibration/__init__.py +181 -0
  17. code_mower/calibration/arms.py +267 -0
  18. code_mower/calibration/auto_discovery.py +348 -0
  19. code_mower/calibration/commands.py +192 -0
  20. code_mower/calibration/context_inputs.py +199 -0
  21. code_mower/calibration/corpus.py +91 -0
  22. code_mower/calibration/evidence.py +20 -0
  23. code_mower/calibration/evidence_report.py +360 -0
  24. code_mower/calibration/identity.py +27 -0
  25. code_mower/calibration/metrics.py +18 -0
  26. code_mower/calibration/overlap.py +103 -0
  27. code_mower/calibration/planning.py +309 -0
  28. code_mower/calibration/policy.py +207 -0
  29. code_mower/calibration/results.py +315 -0
  30. code_mower/calibration/run_results.py +147 -0
  31. code_mower/calibration/run_status.py +64 -0
  32. code_mower/calibration/runner.py +360 -0
  33. code_mower/calibration/truth.py +188 -0
  34. code_mower/calibration/value_report.py +142 -0
  35. code_mower/checks.py +402 -0
  36. code_mower/claude_audit_pr.py +1126 -0
  37. code_mower/claude_cli_bounce.py +303 -0
  38. code_mower/claude_cli_environment.py +73 -0
  39. code_mower/clear_stale.py +374 -0
  40. code_mower/cli.py +537 -0
  41. code_mower/cloud.py +674 -0
  42. code_mower/cloud_client/__init__.py +173 -0
  43. code_mower/cloud_client/bundle.py +155 -0
  44. code_mower/cloud_client/doctor.py +206 -0
  45. code_mower/cloud_client/dogfood.py +78 -0
  46. code_mower/cloud_client/endpoints.py +114 -0
  47. code_mower/cloud_client/errors.py +7 -0
  48. code_mower/cloud_client/events.py +278 -0
  49. code_mower/cloud_client/export.py +272 -0
  50. code_mower/cloud_client/git_metadata.py +46 -0
  51. code_mower/cloud_client/manifest.py +39 -0
  52. code_mower/cloud_client/operations.py +448 -0
  53. code_mower/cloud_client/reports.py +45 -0
  54. code_mower/cloud_client/setup.py +205 -0
  55. code_mower/cloud_client/upload.py +97 -0
  56. code_mower/code_mower_calibration.py +598 -0
  57. code_mower/code_mower_context_packs.py +591 -0
  58. code_mower/code_mower_merge.py +227 -0
  59. code_mower/code_mower_telemetry.py +561 -0
  60. code_mower/coderabbit_cli_audit_pr.py +526 -0
  61. code_mower/codex_audit_env_preflight.py +220 -0
  62. code_mower/codex_audit_pr.py +1738 -0
  63. code_mower/codex_audit_schema_smoke.py +160 -0
  64. code_mower/codex_audit_verdict.schema.json +44 -0
  65. code_mower/config.py +655 -0
  66. code_mower/doctor.py +161 -0
  67. code_mower/doctor_checks/__init__.py +104 -0
  68. code_mower/doctor_checks/cloud.py +129 -0
  69. code_mower/doctor_checks/common.py +215 -0
  70. code_mower/doctor_checks/github.py +128 -0
  71. code_mower/doctor_checks/github_actions.py +11 -0
  72. code_mower/doctor_checks/github_actions_cost.py +99 -0
  73. code_mower/doctor_checks/github_actions_cost_summary.py +111 -0
  74. code_mower/doctor_checks/github_actions_failure_annotations.py +27 -0
  75. code_mower/doctor_checks/github_actions_failure_models.py +47 -0
  76. code_mower/doctor_checks/github_actions_failure_scan.py +200 -0
  77. code_mower/doctor_checks/github_actions_failure_selection.py +63 -0
  78. code_mower/doctor_checks/github_actions_failures.py +103 -0
  79. code_mower/doctor_checks/github_actions_permissions.py +55 -0
  80. code_mower/doctor_checks/github_api.py +79 -0
  81. code_mower/doctor_checks/github_branch.py +56 -0
  82. code_mower/doctor_checks/github_config.py +25 -0
  83. code_mower/doctor_checks/github_provider.py +61 -0
  84. code_mower/doctor_checks/github_repo.py +120 -0
  85. code_mower/doctor_checks/groups.py +36 -0
  86. code_mower/doctor_checks/models.py +96 -0
  87. code_mower/doctor_checks/output.py +86 -0
  88. code_mower/doctor_checks/presets.py +64 -0
  89. code_mower/doctor_checks/privacy.py +20 -0
  90. code_mower/doctor_checks/provider_api_model.py +138 -0
  91. code_mower/doctor_checks/provider_api_model_openai.py +29 -0
  92. code_mower/doctor_checks/provider_api_model_profiles.py +137 -0
  93. code_mower/doctor_checks/provider_env.py +113 -0
  94. code_mower/doctor_checks/provider_env_required.py +56 -0
  95. code_mower/doctor_checks/provider_env_tokens.py +100 -0
  96. code_mower/doctor_checks/provider_local_cli.py +162 -0
  97. code_mower/doctor_checks/provider_local_cli_commands.py +47 -0
  98. code_mower/doctor_checks/provider_local_cli_probe_config.py +70 -0
  99. code_mower/doctor_checks/provider_probe.py +20 -0
  100. code_mower/doctor_checks/provider_probe_auth.py +52 -0
  101. code_mower/doctor_checks/provider_probe_evaluation.py +109 -0
  102. code_mower/doctor_checks/provider_probe_json.py +45 -0
  103. code_mower/doctor_checks/provider_probe_remediation.py +39 -0
  104. code_mower/doctor_checks/providers.py +159 -0
  105. code_mower/doctor_checks/registry.py +69 -0
  106. code_mower/doctor_checks/runner.py +188 -0
  107. code_mower/doctor_checks/runtime.py +89 -0
  108. code_mower/doctor_checks/runtime_github_auth.py +148 -0
  109. code_mower/gemini_cli_audit_pr.py +897 -0
  110. code_mower/hermes_cli_audit_pr.py +436 -0
  111. code_mower/init.py +888 -0
  112. code_mower/lane_configs/__init__.py +37 -0
  113. code_mower/lane_configs/aider.py +32 -0
  114. code_mower/lane_configs/antigravity_cli.py +35 -0
  115. code_mower/lane_configs/claude.py +35 -0
  116. code_mower/lane_configs/codex.py +32 -0
  117. code_mower/lane_configs/devin.py +33 -0
  118. code_mower/lane_configs/gemini_cli.py +35 -0
  119. code_mower/lane_configs/hermes_cli.py +35 -0
  120. code_mower/lane_configs/local_llm.py +31 -0
  121. code_mower/local_llm_audit_pr.py +1364 -0
  122. code_mower/local_llm_bakeoff.py +458 -0
  123. code_mower/local_llm_calibration.py +441 -0
  124. code_mower/local_llm_profiles.py +66 -0
  125. code_mower/migration.py +508 -0
  126. code_mower/migration_install.py +292 -0
  127. code_mower/migration_mirror.py +392 -0
  128. code_mower/migration_readiness.py +237 -0
  129. code_mower/migration_rehearsal.py +718 -0
  130. code_mower/next_steps.py +441 -0
  131. code_mower/package.py +673 -0
  132. code_mower/package_content.py +444 -0
  133. code_mower/package_manifest.py +452 -0
  134. code_mower/package_paths.py +53 -0
  135. code_mower/package_rendering.py +90 -0
  136. code_mower/package_static.py +585 -0
  137. code_mower/prompts.py +267 -0
  138. code_mower/provider_registry.py +469 -0
  139. code_mower/provider_runners/__init__.py +60 -0
  140. code_mower/provider_runners/comments.py +31 -0
  141. code_mower/provider_runners/git.py +46 -0
  142. code_mower/provider_runners/github_auth.py +61 -0
  143. code_mower/provider_runners/github_pr.py +120 -0
  144. code_mower/provider_runners/process.py +58 -0
  145. code_mower/provider_runners/repo_paths.py +23 -0
  146. code_mower/provider_runners/text_schema.py +41 -0
  147. code_mower/provider_runners/verdict_artifacts.py +103 -0
  148. code_mower/provider_runners/workspace.py +57 -0
  149. code_mower/release_readiness.py +549 -0
  150. code_mower/reviewer_metrics.py +389 -0
  151. code_mower/saas_reviewer_labeler.py +809 -0
  152. code_mower/secrets.py +89 -0
  153. code_mower/templates/builder-experiment.example.json +55 -0
  154. code_mower/templates/calibration-corpus.example.json +129 -0
  155. code_mower/templates/calibration-corpus.json +129 -0
  156. code_mower/templates/code-mower.example.yml +423 -0
  157. code_mower/templates/context-packs.example.json +150 -0
  158. code_mower/templates/lane_prompts/base-audit.md +22 -0
  159. code_mower/templates/lane_prompts/calibration-policy.md +21 -0
  160. code_mower/templates/lane_prompts/context-driven-quality.md +21 -0
  161. code_mower/templates/lane_prompts/docs-design.md +12 -0
  162. code_mower/templates/lane_prompts/generic-programming.md +21 -0
  163. code_mower/templates/lane_prompts/operability.md +22 -0
  164. code_mower/templates/lane_prompts/package-runtime.md +12 -0
  165. code_mower/templates/lane_prompts/security-threat-model.md +22 -0
  166. code_mower/templates/product-support/code_mower +216 -0
  167. code_mower/templates/product-support/code_mower_standalone_pin.env +7 -0
  168. code_mower/templates/product-support/code_mower_standalone_shadow.sh +151 -0
  169. code_mower/templates/product-support/run_claude_audit_pr.sh +32 -0
  170. code_mower/templates/product-support/run_codex_audit_pr.sh +32 -0
  171. code_mower/templates/product-support/safe_gh_comment.py +96 -0
  172. code_mower/templates/providers.yml +454 -0
  173. code_mower/templates/reviewer-spend.example.json +28 -0
  174. code_mower/templates/reviewer-value-report.example.md +20 -0
  175. code_mower/templates/workflows/private-standalone-shadow.yml.j2 +106 -0
  176. code_mower/templates/workflows/review-clear-stale.yml.j2 +83 -0
  177. code_mower/trailer_comment_labeler.py +207 -0
  178. code_mower/versioning.py +32 -0
  179. code_mower-0.5.0b5.dist-info/METADATA +302 -0
  180. code_mower-0.5.0b5.dist-info/RECORD +185 -0
  181. code_mower-0.5.0b5.dist-info/WHEEL +5 -0
  182. code_mower-0.5.0b5.dist-info/entry_points.txt +2 -0
  183. code_mower-0.5.0b5.dist-info/licenses/LICENSE +202 -0
  184. code_mower-0.5.0b5.dist-info/licenses/NOTICE +10 -0
  185. code_mower-0.5.0b5.dist-info/top_level.txt +1 -0
@@ -0,0 +1,181 @@
1
+ """Calibration runner internals.
2
+
3
+ The stable user surface is still the ``code-mower calibration`` CLI. These
4
+ modules are intentionally small seams for corpus parsing, evidence handling,
5
+ metrics, pilot planning, result normalization, truth matching, and
6
+ policy/reporting code as the runner is split out of the legacy command adapter.
7
+ """
8
+
9
+ from .corpus import load_corpus, load_json_object, parse_int
10
+ from .evidence import (
11
+ KNOWN_EVIDENCE_DISPOSITIONS,
12
+ NON_BLOCKING_CODERABBIT_SEVERITIES,
13
+ USEFUL_EVIDENCE_DISPOSITIONS,
14
+ )
15
+ from .evidence_report import build_reviewer_evidence_report, render_evidence_text
16
+ from .arms import DEFAULT_CLI_LANES, DEFAULT_LOCAL_LLM_PROFILES, default_arms
17
+ from .commands import (
18
+ command_lane_id,
19
+ command_metadata_for_run,
20
+ local_llm_profiles_from_command,
21
+ materialize_command,
22
+ option_value,
23
+ parse_repo_path_map,
24
+ repo_path_for_item,
25
+ resolve_path_for_cwd,
26
+ reviewer_id_from_command,
27
+ summary_path_for_command,
28
+ text_from_timeout_stream,
29
+ )
30
+ from .context_inputs import (
31
+ CONTEXT_PACK_CLI_LANES,
32
+ changed_files_from_checkout,
33
+ context_pack_file_for_command,
34
+ render_materialized_context_pack_prompt_text,
35
+ repo_roots_from_path_map,
36
+ selected_context_pack_manifest,
37
+ )
38
+ from .identity import head_slug, safe_slug
39
+ from .metrics import float_or_zero
40
+ from .overlap import build_overlap_report, finding_key, render_overlap_text
41
+ from .policy import (
42
+ MERGE_GATE_MIN_CLEAN_RUNS,
43
+ MERGE_GATE_MIN_FINDINGS,
44
+ MERGE_GATE_USEFUL_RATE,
45
+ SELECTIVE_USEFUL_RATE,
46
+ build_lane_policy_report,
47
+ render_policy_text,
48
+ )
49
+ from .planning import build_pilot_plan, render_plan_text
50
+ from .results import (
51
+ AUDIT_INPUT_INSUFFICIENT_PATTERNS,
52
+ audit_input_insufficient_result,
53
+ coderabbit_blocking_findings,
54
+ infra_run_record,
55
+ local_llm_findings,
56
+ run_records_from_summary,
57
+ )
58
+ from .run_results import (
59
+ CALIBRATION_RUN_RESULTS_MODE,
60
+ CALIBRATION_RUN_RESULTS_SCHEMA,
61
+ apply_run_disposition_rules,
62
+ corpus_with_run_results,
63
+ csv_values,
64
+ load_run_results,
65
+ normalize_disposition,
66
+ run_matches_disposition_rule,
67
+ )
68
+ from .runner import (
69
+ default_code_mower_command,
70
+ load_summary,
71
+ result_command_dir,
72
+ run_calibration_commands,
73
+ utc_now_iso,
74
+ write_json,
75
+ )
76
+ from .run_status import (
77
+ RUN_STATUS_AUDIT_INPUT_INSUFFICIENT,
78
+ RUN_STATUS_BLOCKED,
79
+ RUN_STATUS_CATEGORY_ALIASES,
80
+ RUN_STATUS_INFRA_ERROR,
81
+ RUN_STATUS_PASS,
82
+ RUN_STATUS_UNKNOWN,
83
+ count_normalized_findings,
84
+ normalize_run_status_category,
85
+ status_from_verdict,
86
+ )
87
+ from .truth import (
88
+ TRUTH_EXPECTATION_ALIASES,
89
+ TRUTH_EXPECTATION_KNOWN_BLOCKED,
90
+ TRUTH_EXPECTATION_KNOWN_CLEAN,
91
+ TRUTH_EXPECTATION_UNKNOWN,
92
+ expected_finding_matches,
93
+ normalize_truth,
94
+ normalize_truth_expectation,
95
+ truth_for_item,
96
+ )
97
+ from .value_report import build_value_report, render_value_report_text
98
+
99
+ __all__ = [
100
+ "KNOWN_EVIDENCE_DISPOSITIONS",
101
+ "AUDIT_INPUT_INSUFFICIENT_PATTERNS",
102
+ "CALIBRATION_RUN_RESULTS_MODE",
103
+ "CALIBRATION_RUN_RESULTS_SCHEMA",
104
+ "CONTEXT_PACK_CLI_LANES",
105
+ "DEFAULT_CLI_LANES",
106
+ "DEFAULT_LOCAL_LLM_PROFILES",
107
+ "MERGE_GATE_MIN_CLEAN_RUNS",
108
+ "MERGE_GATE_MIN_FINDINGS",
109
+ "MERGE_GATE_USEFUL_RATE",
110
+ "NON_BLOCKING_CODERABBIT_SEVERITIES",
111
+ "RUN_STATUS_AUDIT_INPUT_INSUFFICIENT",
112
+ "RUN_STATUS_BLOCKED",
113
+ "RUN_STATUS_CATEGORY_ALIASES",
114
+ "RUN_STATUS_INFRA_ERROR",
115
+ "RUN_STATUS_PASS",
116
+ "RUN_STATUS_UNKNOWN",
117
+ "SELECTIVE_USEFUL_RATE",
118
+ "TRUTH_EXPECTATION_ALIASES",
119
+ "TRUTH_EXPECTATION_KNOWN_BLOCKED",
120
+ "TRUTH_EXPECTATION_KNOWN_CLEAN",
121
+ "TRUTH_EXPECTATION_UNKNOWN",
122
+ "USEFUL_EVIDENCE_DISPOSITIONS",
123
+ "build_lane_policy_report",
124
+ "build_reviewer_evidence_report",
125
+ "build_value_report",
126
+ "build_pilot_plan",
127
+ "command_lane_id",
128
+ "command_metadata_for_run",
129
+ "context_pack_file_for_command",
130
+ "count_normalized_findings",
131
+ "changed_files_from_checkout",
132
+ "audit_input_insufficient_result",
133
+ "coderabbit_blocking_findings",
134
+ "apply_run_disposition_rules",
135
+ "corpus_with_run_results",
136
+ "csv_values",
137
+ "default_code_mower_command",
138
+ "default_arms",
139
+ "expected_finding_matches",
140
+ "finding_key",
141
+ "float_or_zero",
142
+ "head_slug",
143
+ "infra_run_record",
144
+ "load_summary",
145
+ "load_corpus",
146
+ "load_json_object",
147
+ "load_run_results",
148
+ "local_llm_findings",
149
+ "local_llm_profiles_from_command",
150
+ "materialize_command",
151
+ "normalize_disposition",
152
+ "normalize_run_status_category",
153
+ "normalize_truth",
154
+ "normalize_truth_expectation",
155
+ "option_value",
156
+ "parse_int",
157
+ "parse_repo_path_map",
158
+ "build_overlap_report",
159
+ "render_overlap_text",
160
+ "render_evidence_text",
161
+ "render_materialized_context_pack_prompt_text",
162
+ "render_plan_text",
163
+ "render_policy_text",
164
+ "render_value_report_text",
165
+ "run_records_from_summary",
166
+ "run_matches_disposition_rule",
167
+ "repo_path_for_item",
168
+ "repo_roots_from_path_map",
169
+ "result_command_dir",
170
+ "resolve_path_for_cwd",
171
+ "reviewer_id_from_command",
172
+ "run_calibration_commands",
173
+ "safe_slug",
174
+ "selected_context_pack_manifest",
175
+ "status_from_verdict",
176
+ "summary_path_for_command",
177
+ "text_from_timeout_stream",
178
+ "truth_for_item",
179
+ "utc_now_iso",
180
+ "write_json",
181
+ ]
@@ -0,0 +1,267 @@
1
+ """Built-in calibration arm catalog and command-lane defaults."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+
8
+ DEFAULT_LOCAL_LLM_PROFILES = (
9
+ "qwen3-coder-next-lmstudio",
10
+ "gemma4-ollama",
11
+ )
12
+ DEFAULT_CLI_LANES = ("gemini_cli", "antigravity_cli", "hermes_cli", "coderabbit_cli")
13
+
14
+
15
+ def default_arms() -> list[dict[str, Any]]:
16
+ return [
17
+ {
18
+ "arm_id": "topology-baseline",
19
+ "kind": "cross-provider",
20
+ "reviewers": [
21
+ {"reviewer_id": "codex-audit", "provider": "codex", "lenses": ["base-audit"]},
22
+ {"reviewer_id": "claude-audit", "provider": "claude", "lenses": ["base-audit"]},
23
+ ],
24
+ "purpose": "Measure decorrelation from different model families.",
25
+ },
26
+ {
27
+ "arm_id": "same-provider-lenses",
28
+ "kind": "lens-shift",
29
+ "reviewers": [
30
+ {"reviewer_id": "claude-base-audit", "provider": "claude", "lenses": ["base-audit"]},
31
+ {
32
+ "reviewer_id": "claude-package-runtime",
33
+ "provider": "claude",
34
+ "lenses": ["base-audit", "package-runtime"],
35
+ },
36
+ ],
37
+ "purpose": "Measure whether prompt lenses create useful disagreement.",
38
+ },
39
+ {
40
+ "arm_id": "same-provider-doctrine-lenses",
41
+ "kind": "lens-shift",
42
+ "reviewers": [
43
+ {"reviewer_id": "claude-base-audit", "provider": "claude", "lenses": ["base-audit"]},
44
+ {
45
+ "reviewer_id": "claude-generic-programming",
46
+ "provider": "claude",
47
+ "lenses": ["base-audit", "generic-programming"],
48
+ },
49
+ {
50
+ "reviewer_id": "claude-context-driven-quality",
51
+ "provider": "claude",
52
+ "lenses": ["base-audit", "context-driven-quality"],
53
+ },
54
+ ],
55
+ "purpose": (
56
+ "Measure whether the same model with materially different review "
57
+ "doctrine creates useful disagreement beyond the same-model noise floor."
58
+ ),
59
+ },
60
+ {
61
+ "arm_id": "same-provider-risk-ops-lenses",
62
+ "kind": "lens-shift",
63
+ "reviewers": [
64
+ {"reviewer_id": "claude-base-audit", "provider": "claude", "lenses": ["base-audit"]},
65
+ {
66
+ "reviewer_id": "claude-security-threat-model",
67
+ "provider": "claude",
68
+ "lenses": ["base-audit", "security-threat-model"],
69
+ },
70
+ {
71
+ "reviewer_id": "claude-operability",
72
+ "provider": "claude",
73
+ "lenses": ["base-audit", "operability"],
74
+ },
75
+ ],
76
+ "purpose": (
77
+ "Measure whether security and operability lenses catch useful "
78
+ "production-risk findings beyond the base audit and same-model noise floor."
79
+ ),
80
+ },
81
+ {
82
+ "arm_id": "gemini-risk-ops-lens-fanout",
83
+ "kind": "executable-lens-fanout",
84
+ "reviewers": [
85
+ {
86
+ "reviewer_id": "gemini-base-audit",
87
+ "provider": "local-cli",
88
+ "lane_id": "gemini_cli",
89
+ "lenses": ["base-audit"],
90
+ },
91
+ {
92
+ "reviewer_id": "gemini-security-threat-model",
93
+ "provider": "local-cli",
94
+ "lane_id": "gemini_cli",
95
+ "lenses": ["base-audit", "security-threat-model"],
96
+ },
97
+ {
98
+ "reviewer_id": "gemini-operability",
99
+ "provider": "local-cli",
100
+ "lane_id": "gemini_cli",
101
+ "lenses": ["base-audit", "operability"],
102
+ },
103
+ ],
104
+ "purpose": (
105
+ "Execute Gemini CLI against the same head with base, security, "
106
+ "and operability lenses so lens evidence can be collected without "
107
+ "manual command fan-out."
108
+ ),
109
+ "requires_explicit_arm": True,
110
+ },
111
+ {
112
+ "arm_id": "gemini-doctrine-lens-fanout",
113
+ "kind": "executable-lens-fanout",
114
+ "reviewers": [
115
+ {
116
+ "reviewer_id": "gemini-base-audit",
117
+ "provider": "local-cli",
118
+ "lane_id": "gemini_cli",
119
+ "lenses": ["base-audit"],
120
+ },
121
+ {
122
+ "reviewer_id": "gemini-generic-programming",
123
+ "provider": "local-cli",
124
+ "lane_id": "gemini_cli",
125
+ "lenses": ["base-audit", "generic-programming"],
126
+ },
127
+ {
128
+ "reviewer_id": "gemini-context-driven-quality",
129
+ "provider": "local-cli",
130
+ "lane_id": "gemini_cli",
131
+ "lenses": ["base-audit", "context-driven-quality"],
132
+ },
133
+ ],
134
+ "purpose": (
135
+ "Execute Gemini CLI against the same head with base, generic "
136
+ "programming, and context-driven quality lenses so same-model "
137
+ "doctrine shifts can be measured with real lane outputs."
138
+ ),
139
+ "requires_explicit_arm": True,
140
+ },
141
+ {
142
+ "arm_id": "antigravity-risk-ops-lens-fanout",
143
+ "kind": "executable-lens-fanout",
144
+ "reviewers": [
145
+ {
146
+ "reviewer_id": "antigravity-base-audit",
147
+ "provider": "local-cli",
148
+ "lane_id": "antigravity_cli",
149
+ "lenses": ["base-audit"],
150
+ },
151
+ {
152
+ "reviewer_id": "antigravity-security-threat-model",
153
+ "provider": "local-cli",
154
+ "lane_id": "antigravity_cli",
155
+ "lenses": ["base-audit", "security-threat-model"],
156
+ },
157
+ {
158
+ "reviewer_id": "antigravity-operability",
159
+ "provider": "local-cli",
160
+ "lane_id": "antigravity_cli",
161
+ "lenses": ["base-audit", "operability"],
162
+ },
163
+ ],
164
+ "purpose": (
165
+ "Execute Antigravity CLI against the same head with base, "
166
+ "security, and operability lenses so the forward Google CLI "
167
+ "lane can be calibrated separately from Gemini compatibility."
168
+ ),
169
+ "requires_explicit_arm": True,
170
+ },
171
+ {
172
+ "arm_id": "antigravity-doctrine-lens-fanout",
173
+ "kind": "executable-lens-fanout",
174
+ "reviewers": [
175
+ {
176
+ "reviewer_id": "antigravity-base-audit",
177
+ "provider": "local-cli",
178
+ "lane_id": "antigravity_cli",
179
+ "lenses": ["base-audit"],
180
+ },
181
+ {
182
+ "reviewer_id": "antigravity-generic-programming",
183
+ "provider": "local-cli",
184
+ "lane_id": "antigravity_cli",
185
+ "lenses": ["base-audit", "generic-programming"],
186
+ },
187
+ {
188
+ "reviewer_id": "antigravity-context-driven-quality",
189
+ "provider": "local-cli",
190
+ "lane_id": "antigravity_cli",
191
+ "lenses": ["base-audit", "context-driven-quality"],
192
+ },
193
+ ],
194
+ "purpose": (
195
+ "Execute Antigravity CLI against the same head with base, "
196
+ "generic programming, and context-driven quality lenses so "
197
+ "same-provider doctrine shifts can be measured on the forward "
198
+ "Google CLI lane."
199
+ ),
200
+ "requires_explicit_arm": True,
201
+ },
202
+ {
203
+ "arm_id": "hermes-doctrine-lens-fanout",
204
+ "kind": "executable-lens-fanout",
205
+ "reviewers": [
206
+ {
207
+ "reviewer_id": "hermes-base-audit",
208
+ "provider": "local-cli",
209
+ "lane_id": "hermes_cli",
210
+ "lenses": ["base-audit"],
211
+ },
212
+ {
213
+ "reviewer_id": "hermes-generic-programming",
214
+ "provider": "local-cli",
215
+ "lane_id": "hermes_cli",
216
+ "lenses": ["base-audit", "generic-programming"],
217
+ },
218
+ {
219
+ "reviewer_id": "hermes-context-driven-quality",
220
+ "provider": "local-cli",
221
+ "lane_id": "hermes_cli",
222
+ "lenses": ["base-audit", "context-driven-quality"],
223
+ },
224
+ ],
225
+ "purpose": (
226
+ "Execute Hermes CLI against the same head with base, generic "
227
+ "programming, and context-driven quality lenses so its one-shot "
228
+ "agent profile can be compared with Gemini/Claude doctrine "
229
+ "evidence without granting merge authority."
230
+ ),
231
+ "requires_explicit_arm": True,
232
+ },
233
+ {
234
+ "arm_id": "same-provider-control",
235
+ "kind": "noise-floor",
236
+ "reviewers": [
237
+ {"reviewer_id": "claude-base-audit-a", "provider": "claude", "lenses": ["base-audit"]},
238
+ {"reviewer_id": "claude-base-audit-b", "provider": "claude", "lenses": ["base-audit"]},
239
+ ],
240
+ "purpose": "Measure repeated-run variance for the same model and same lens.",
241
+ },
242
+ {
243
+ "arm_id": "local-cli-models",
244
+ "kind": "informational-bakeoff",
245
+ "reviewers": [
246
+ *(
247
+ {
248
+ "reviewer_id": profile_id,
249
+ "provider": "local-llm",
250
+ "profile_id": profile_id,
251
+ "lenses": ["base-audit"],
252
+ }
253
+ for profile_id in DEFAULT_LOCAL_LLM_PROFILES
254
+ ),
255
+ *(
256
+ {
257
+ "reviewer_id": lane_id,
258
+ "provider": "local-cli",
259
+ "lane_id": lane_id,
260
+ "lenses": ["base-audit"],
261
+ }
262
+ for lane_id in DEFAULT_CLI_LANES
263
+ ),
264
+ ],
265
+ "purpose": "Compare cheap informational reviewers before promotion.",
266
+ },
267
+ ]