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.
- code_mower/__init__.py +3 -0
- code_mower/adapters/__init__.py +39 -0
- code_mower/adapters/_base.py +148 -0
- code_mower/adapters/cursor_bugbot.py +97 -0
- code_mower/adapters/gitar.py +111 -0
- code_mower/adapters/greptile.py +191 -0
- code_mower/adapters/qodo.py +140 -0
- code_mower/antigravity_cli_audit_pr.py +241 -0
- code_mower/audit_handoff_log.py +345 -0
- code_mower/audit_labeler_lib.py +311 -0
- code_mower/audit_progress.py +203 -0
- code_mower/blind_review_artifacts.py +562 -0
- code_mower/blind_review_coordinator.py +276 -0
- code_mower/bootstrap.py +524 -0
- code_mower/builder_experiment.py +539 -0
- code_mower/calibration/__init__.py +181 -0
- code_mower/calibration/arms.py +267 -0
- code_mower/calibration/auto_discovery.py +348 -0
- code_mower/calibration/commands.py +192 -0
- code_mower/calibration/context_inputs.py +199 -0
- code_mower/calibration/corpus.py +91 -0
- code_mower/calibration/evidence.py +20 -0
- code_mower/calibration/evidence_report.py +360 -0
- code_mower/calibration/identity.py +27 -0
- code_mower/calibration/metrics.py +18 -0
- code_mower/calibration/overlap.py +103 -0
- code_mower/calibration/planning.py +309 -0
- code_mower/calibration/policy.py +207 -0
- code_mower/calibration/results.py +315 -0
- code_mower/calibration/run_results.py +147 -0
- code_mower/calibration/run_status.py +64 -0
- code_mower/calibration/runner.py +360 -0
- code_mower/calibration/truth.py +188 -0
- code_mower/calibration/value_report.py +142 -0
- code_mower/checks.py +402 -0
- code_mower/claude_audit_pr.py +1126 -0
- code_mower/claude_cli_bounce.py +303 -0
- code_mower/claude_cli_environment.py +73 -0
- code_mower/clear_stale.py +374 -0
- code_mower/cli.py +537 -0
- code_mower/cloud.py +674 -0
- code_mower/cloud_client/__init__.py +173 -0
- code_mower/cloud_client/bundle.py +155 -0
- code_mower/cloud_client/doctor.py +206 -0
- code_mower/cloud_client/dogfood.py +78 -0
- code_mower/cloud_client/endpoints.py +114 -0
- code_mower/cloud_client/errors.py +7 -0
- code_mower/cloud_client/events.py +278 -0
- code_mower/cloud_client/export.py +272 -0
- code_mower/cloud_client/git_metadata.py +46 -0
- code_mower/cloud_client/manifest.py +39 -0
- code_mower/cloud_client/operations.py +448 -0
- code_mower/cloud_client/reports.py +45 -0
- code_mower/cloud_client/setup.py +205 -0
- code_mower/cloud_client/upload.py +97 -0
- code_mower/code_mower_calibration.py +598 -0
- code_mower/code_mower_context_packs.py +591 -0
- code_mower/code_mower_merge.py +227 -0
- code_mower/code_mower_telemetry.py +561 -0
- code_mower/coderabbit_cli_audit_pr.py +526 -0
- code_mower/codex_audit_env_preflight.py +220 -0
- code_mower/codex_audit_pr.py +1738 -0
- code_mower/codex_audit_schema_smoke.py +160 -0
- code_mower/codex_audit_verdict.schema.json +44 -0
- code_mower/config.py +655 -0
- code_mower/doctor.py +161 -0
- code_mower/doctor_checks/__init__.py +104 -0
- code_mower/doctor_checks/cloud.py +129 -0
- code_mower/doctor_checks/common.py +215 -0
- code_mower/doctor_checks/github.py +128 -0
- code_mower/doctor_checks/github_actions.py +11 -0
- code_mower/doctor_checks/github_actions_cost.py +99 -0
- code_mower/doctor_checks/github_actions_cost_summary.py +111 -0
- code_mower/doctor_checks/github_actions_failure_annotations.py +27 -0
- code_mower/doctor_checks/github_actions_failure_models.py +47 -0
- code_mower/doctor_checks/github_actions_failure_scan.py +200 -0
- code_mower/doctor_checks/github_actions_failure_selection.py +63 -0
- code_mower/doctor_checks/github_actions_failures.py +103 -0
- code_mower/doctor_checks/github_actions_permissions.py +55 -0
- code_mower/doctor_checks/github_api.py +79 -0
- code_mower/doctor_checks/github_branch.py +56 -0
- code_mower/doctor_checks/github_config.py +25 -0
- code_mower/doctor_checks/github_provider.py +61 -0
- code_mower/doctor_checks/github_repo.py +120 -0
- code_mower/doctor_checks/groups.py +36 -0
- code_mower/doctor_checks/models.py +96 -0
- code_mower/doctor_checks/output.py +86 -0
- code_mower/doctor_checks/presets.py +64 -0
- code_mower/doctor_checks/privacy.py +20 -0
- code_mower/doctor_checks/provider_api_model.py +138 -0
- code_mower/doctor_checks/provider_api_model_openai.py +29 -0
- code_mower/doctor_checks/provider_api_model_profiles.py +137 -0
- code_mower/doctor_checks/provider_env.py +113 -0
- code_mower/doctor_checks/provider_env_required.py +56 -0
- code_mower/doctor_checks/provider_env_tokens.py +100 -0
- code_mower/doctor_checks/provider_local_cli.py +162 -0
- code_mower/doctor_checks/provider_local_cli_commands.py +47 -0
- code_mower/doctor_checks/provider_local_cli_probe_config.py +70 -0
- code_mower/doctor_checks/provider_probe.py +20 -0
- code_mower/doctor_checks/provider_probe_auth.py +52 -0
- code_mower/doctor_checks/provider_probe_evaluation.py +109 -0
- code_mower/doctor_checks/provider_probe_json.py +45 -0
- code_mower/doctor_checks/provider_probe_remediation.py +39 -0
- code_mower/doctor_checks/providers.py +159 -0
- code_mower/doctor_checks/registry.py +69 -0
- code_mower/doctor_checks/runner.py +188 -0
- code_mower/doctor_checks/runtime.py +89 -0
- code_mower/doctor_checks/runtime_github_auth.py +148 -0
- code_mower/gemini_cli_audit_pr.py +897 -0
- code_mower/hermes_cli_audit_pr.py +436 -0
- code_mower/init.py +888 -0
- code_mower/lane_configs/__init__.py +37 -0
- code_mower/lane_configs/aider.py +32 -0
- code_mower/lane_configs/antigravity_cli.py +35 -0
- code_mower/lane_configs/claude.py +35 -0
- code_mower/lane_configs/codex.py +32 -0
- code_mower/lane_configs/devin.py +33 -0
- code_mower/lane_configs/gemini_cli.py +35 -0
- code_mower/lane_configs/hermes_cli.py +35 -0
- code_mower/lane_configs/local_llm.py +31 -0
- code_mower/local_llm_audit_pr.py +1364 -0
- code_mower/local_llm_bakeoff.py +458 -0
- code_mower/local_llm_calibration.py +441 -0
- code_mower/local_llm_profiles.py +66 -0
- code_mower/migration.py +508 -0
- code_mower/migration_install.py +292 -0
- code_mower/migration_mirror.py +392 -0
- code_mower/migration_readiness.py +237 -0
- code_mower/migration_rehearsal.py +718 -0
- code_mower/next_steps.py +441 -0
- code_mower/package.py +673 -0
- code_mower/package_content.py +444 -0
- code_mower/package_manifest.py +452 -0
- code_mower/package_paths.py +53 -0
- code_mower/package_rendering.py +90 -0
- code_mower/package_static.py +585 -0
- code_mower/prompts.py +267 -0
- code_mower/provider_registry.py +469 -0
- code_mower/provider_runners/__init__.py +60 -0
- code_mower/provider_runners/comments.py +31 -0
- code_mower/provider_runners/git.py +46 -0
- code_mower/provider_runners/github_auth.py +61 -0
- code_mower/provider_runners/github_pr.py +120 -0
- code_mower/provider_runners/process.py +58 -0
- code_mower/provider_runners/repo_paths.py +23 -0
- code_mower/provider_runners/text_schema.py +41 -0
- code_mower/provider_runners/verdict_artifacts.py +103 -0
- code_mower/provider_runners/workspace.py +57 -0
- code_mower/release_readiness.py +549 -0
- code_mower/reviewer_metrics.py +389 -0
- code_mower/saas_reviewer_labeler.py +809 -0
- code_mower/secrets.py +89 -0
- code_mower/templates/builder-experiment.example.json +55 -0
- code_mower/templates/calibration-corpus.example.json +129 -0
- code_mower/templates/calibration-corpus.json +129 -0
- code_mower/templates/code-mower.example.yml +423 -0
- code_mower/templates/context-packs.example.json +150 -0
- code_mower/templates/lane_prompts/base-audit.md +22 -0
- code_mower/templates/lane_prompts/calibration-policy.md +21 -0
- code_mower/templates/lane_prompts/context-driven-quality.md +21 -0
- code_mower/templates/lane_prompts/docs-design.md +12 -0
- code_mower/templates/lane_prompts/generic-programming.md +21 -0
- code_mower/templates/lane_prompts/operability.md +22 -0
- code_mower/templates/lane_prompts/package-runtime.md +12 -0
- code_mower/templates/lane_prompts/security-threat-model.md +22 -0
- code_mower/templates/product-support/code_mower +216 -0
- code_mower/templates/product-support/code_mower_standalone_pin.env +7 -0
- code_mower/templates/product-support/code_mower_standalone_shadow.sh +151 -0
- code_mower/templates/product-support/run_claude_audit_pr.sh +32 -0
- code_mower/templates/product-support/run_codex_audit_pr.sh +32 -0
- code_mower/templates/product-support/safe_gh_comment.py +96 -0
- code_mower/templates/providers.yml +454 -0
- code_mower/templates/reviewer-spend.example.json +28 -0
- code_mower/templates/reviewer-value-report.example.md +20 -0
- code_mower/templates/workflows/private-standalone-shadow.yml.j2 +106 -0
- code_mower/templates/workflows/review-clear-stale.yml.j2 +83 -0
- code_mower/trailer_comment_labeler.py +207 -0
- code_mower/versioning.py +32 -0
- code_mower-0.5.0b5.dist-info/METADATA +302 -0
- code_mower-0.5.0b5.dist-info/RECORD +185 -0
- code_mower-0.5.0b5.dist-info/WHEEL +5 -0
- code_mower-0.5.0b5.dist-info/entry_points.txt +2 -0
- code_mower-0.5.0b5.dist-info/licenses/LICENSE +202 -0
- code_mower-0.5.0b5.dist-info/licenses/NOTICE +10 -0
- code_mower-0.5.0b5.dist-info/top_level.txt +1 -0
code_mower/secrets.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Small helpers for local Code Mower secret files."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import AbstractSet
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
GEMINI_SECRET_ENV_NAMES = frozenset({"GEMINI_API_KEY", "GOOGLE_API_KEY"})
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True)
|
|
15
|
+
class SecretFileParseResult:
|
|
16
|
+
value: str
|
|
17
|
+
assignment_name: str | None = None
|
|
18
|
+
rejected_assignment_name: str | None = None
|
|
19
|
+
|
|
20
|
+
@property
|
|
21
|
+
def ok(self) -> bool:
|
|
22
|
+
return bool(self.value)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def looks_like_secret_assignment_name(name: str) -> bool:
|
|
26
|
+
return (
|
|
27
|
+
bool(name)
|
|
28
|
+
and name.upper() == name
|
|
29
|
+
and all(char.isalnum() or char == "_" for char in name)
|
|
30
|
+
and (
|
|
31
|
+
name.endswith("_API_KEY")
|
|
32
|
+
or name.endswith("_TOKEN")
|
|
33
|
+
or name.endswith("_SECRET")
|
|
34
|
+
)
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def first_non_comment_line(text: str) -> str:
|
|
39
|
+
for line in text.splitlines():
|
|
40
|
+
stripped = line.strip()
|
|
41
|
+
if stripped and not stripped.startswith("#"):
|
|
42
|
+
return stripped
|
|
43
|
+
return ""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def strip_shell_quotes(value: str) -> str:
|
|
47
|
+
stripped = value.strip()
|
|
48
|
+
if len(stripped) >= 2 and stripped[0] == stripped[-1] and stripped[0] in {'"', "'"}:
|
|
49
|
+
return stripped[1:-1].strip()
|
|
50
|
+
return stripped
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def parse_secret_file_text(
|
|
54
|
+
text: str,
|
|
55
|
+
*,
|
|
56
|
+
supported_env_names: AbstractSet[str],
|
|
57
|
+
) -> SecretFileParseResult:
|
|
58
|
+
"""Parse a raw secret file or a one-line shell-style secret assignment."""
|
|
59
|
+
|
|
60
|
+
stripped = first_non_comment_line(text)
|
|
61
|
+
if not stripped:
|
|
62
|
+
return SecretFileParseResult("")
|
|
63
|
+
if stripped.startswith("export "):
|
|
64
|
+
stripped = stripped[len("export ") :].strip()
|
|
65
|
+
if "=" in stripped:
|
|
66
|
+
name, value = stripped.split("=", 1)
|
|
67
|
+
assignment_name = name.strip()
|
|
68
|
+
if assignment_name in supported_env_names:
|
|
69
|
+
return SecretFileParseResult(
|
|
70
|
+
strip_shell_quotes(value),
|
|
71
|
+
assignment_name=assignment_name,
|
|
72
|
+
)
|
|
73
|
+
if looks_like_secret_assignment_name(assignment_name):
|
|
74
|
+
return SecretFileParseResult(
|
|
75
|
+
"",
|
|
76
|
+
rejected_assignment_name=assignment_name,
|
|
77
|
+
)
|
|
78
|
+
return SecretFileParseResult(strip_shell_quotes(stripped))
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def read_secret_file(
|
|
82
|
+
path: Path,
|
|
83
|
+
*,
|
|
84
|
+
supported_env_names: AbstractSet[str],
|
|
85
|
+
) -> SecretFileParseResult:
|
|
86
|
+
return parse_secret_file_text(
|
|
87
|
+
path.expanduser().read_text(encoding="utf-8"),
|
|
88
|
+
supported_env_names=supported_env_names,
|
|
89
|
+
)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"name": "starter-builder-loop",
|
|
4
|
+
"description": "Starter Code Mower builder experiment for one bounded task.",
|
|
5
|
+
"tasks": [
|
|
6
|
+
{
|
|
7
|
+
"task_id": "small-package-runtime-change",
|
|
8
|
+
"repo": "owner/repo",
|
|
9
|
+
"base_ref": "origin/main",
|
|
10
|
+
"task_class": "package-runtime",
|
|
11
|
+
"prompt": "Make one small Code Mower package-runtime improvement.",
|
|
12
|
+
"success_criteria": [
|
|
13
|
+
"focused tests pass",
|
|
14
|
+
"full Code Mower tests pass",
|
|
15
|
+
"normal Code Mower audit protocol passes",
|
|
16
|
+
"post-merge health is verified"
|
|
17
|
+
],
|
|
18
|
+
"context_packs": [
|
|
19
|
+
"package-runtime"
|
|
20
|
+
],
|
|
21
|
+
"review_classes": [
|
|
22
|
+
"package-runtime"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"builders": [
|
|
27
|
+
{
|
|
28
|
+
"builder_id": "codex-base",
|
|
29
|
+
"provider": "codex",
|
|
30
|
+
"tool": "codex-desktop",
|
|
31
|
+
"prompt_lenses": [
|
|
32
|
+
"base-audit"
|
|
33
|
+
],
|
|
34
|
+
"cost_policy": "provider-dependent"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"builder_id": "codex-context-driven-quality",
|
|
38
|
+
"provider": "codex",
|
|
39
|
+
"tool": "codex-desktop",
|
|
40
|
+
"prompt_lenses": [
|
|
41
|
+
"context-driven-quality"
|
|
42
|
+
],
|
|
43
|
+
"cost_policy": "provider-dependent"
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"metrics": [
|
|
47
|
+
"elapsed_seconds",
|
|
48
|
+
"cost_usd",
|
|
49
|
+
"user_interventions",
|
|
50
|
+
"audit_blockers",
|
|
51
|
+
"resolved_blockers",
|
|
52
|
+
"tests_passed",
|
|
53
|
+
"post_merge_health"
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"name": "small-known-pr-pilot",
|
|
4
|
+
"description": "Small calibration corpus for comparing reviewer overlap, useful findings, and noise before promoting informational lanes.",
|
|
5
|
+
"corpus": [
|
|
6
|
+
{
|
|
7
|
+
"repo": "owner/repo",
|
|
8
|
+
"pr_number": 123,
|
|
9
|
+
"head_sha": "0123456789abcdef0123456789abcdef01234567",
|
|
10
|
+
"difficulty": "medium",
|
|
11
|
+
"source": "known-pr",
|
|
12
|
+
"truth": {
|
|
13
|
+
"expectation": "known_clean",
|
|
14
|
+
"notes": "A merged/control PR that should not produce blocking findings."
|
|
15
|
+
},
|
|
16
|
+
"expected_findings": [],
|
|
17
|
+
"reviewer_runs": [
|
|
18
|
+
{
|
|
19
|
+
"reviewer": "codex-audit",
|
|
20
|
+
"status": "pass",
|
|
21
|
+
"finding_count": 0,
|
|
22
|
+
"known_clean": true,
|
|
23
|
+
"duration_seconds": 120
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"notes": "Replace with a recent merged PR whose final outcome is known."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"repo": "owner/repo",
|
|
30
|
+
"pr_number": 124,
|
|
31
|
+
"head_sha": "fedcba9876543210fedcba9876543210fedcba98",
|
|
32
|
+
"base_ref": "main",
|
|
33
|
+
"difficulty": "hard",
|
|
34
|
+
"source": "seeded-bug-history-quota",
|
|
35
|
+
"truth": {
|
|
36
|
+
"expectation": "known_blocked",
|
|
37
|
+
"expected_themes": [
|
|
38
|
+
"history quota enforcement"
|
|
39
|
+
],
|
|
40
|
+
"notes": "A seeded or historical blocker that reviewers should catch."
|
|
41
|
+
},
|
|
42
|
+
"expected_findings": [
|
|
43
|
+
{
|
|
44
|
+
"path": "tools/example.py",
|
|
45
|
+
"summary": "Seeded bug description used for adjudication."
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"context_packs": [
|
|
49
|
+
"package-runtime"
|
|
50
|
+
],
|
|
51
|
+
"notes": "Seeded-bug entries make catch rate measurable. Keep the seed branch and base ref available so local CLI lanes can reproduce the same diff."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"repo": "owner/repo",
|
|
55
|
+
"pr_number": 125,
|
|
56
|
+
"head_sha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
57
|
+
"base_ref": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
58
|
+
"difficulty": "hard",
|
|
59
|
+
"source": "seeded-bug-auth-or-secret",
|
|
60
|
+
"truth": {
|
|
61
|
+
"expectation": "known_blocked",
|
|
62
|
+
"expected_themes": [
|
|
63
|
+
"auth or secret boundary"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"expected_findings": [
|
|
67
|
+
{
|
|
68
|
+
"path": "src/auth/session.ts",
|
|
69
|
+
"summary": "Seeded auth or secret-handling bug expected to block merge."
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"context_packs": [
|
|
73
|
+
"auth-context"
|
|
74
|
+
],
|
|
75
|
+
"notes": "Use for token leakage, auth-state drift, RLS, or permission-boundary calibration."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"repo": "owner/repo",
|
|
79
|
+
"pr_number": 126,
|
|
80
|
+
"head_sha": "cccccccccccccccccccccccccccccccccccccccc",
|
|
81
|
+
"base_ref": "dddddddddddddddddddddddddddddddddddddddd",
|
|
82
|
+
"difficulty": "hard",
|
|
83
|
+
"review_class": "package-runtime",
|
|
84
|
+
"source": "seeded-bug-runtime-packaging",
|
|
85
|
+
"truth": {
|
|
86
|
+
"expectation": "known_blocked",
|
|
87
|
+
"expected_themes": [
|
|
88
|
+
"runtime packaging"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"expected_findings": [
|
|
92
|
+
{
|
|
93
|
+
"path": "tools/code_mower_doctor.py",
|
|
94
|
+
"summary": "Seeded runtime setup bug expected to be caught by package/runtime lenses."
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"context_packs": [
|
|
98
|
+
"package-runtime",
|
|
99
|
+
"calibration-policy"
|
|
100
|
+
],
|
|
101
|
+
"notes": "Use for Python version, CLI auth, subprocess isolation, package extraction, or artifact durability calibration."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"repo": "owner/repo",
|
|
105
|
+
"pr_number": 127,
|
|
106
|
+
"head_sha": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
107
|
+
"base_ref": "ffffffffffffffffffffffffffffffffffffffff",
|
|
108
|
+
"difficulty": "hard",
|
|
109
|
+
"review_class": "calibration-policy",
|
|
110
|
+
"source": "seeded-bug-calibration-privacy",
|
|
111
|
+
"truth": {
|
|
112
|
+
"expectation": "known_blocked",
|
|
113
|
+
"expected_themes": [
|
|
114
|
+
"shareable report privacy"
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
"expected_findings": [
|
|
118
|
+
{
|
|
119
|
+
"path": "tools/code_mower_doctor.py",
|
|
120
|
+
"summary": "Seeded privacy bug where auth probe output is persisted in shareable reports."
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
"context_packs": [
|
|
124
|
+
"calibration-policy"
|
|
125
|
+
],
|
|
126
|
+
"notes": "Use for output-preview redaction, metrics trust, value report, and lane policy calibration."
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"name": "small-known-pr-pilot",
|
|
4
|
+
"description": "Small calibration corpus for comparing reviewer overlap, useful findings, and noise before promoting informational lanes.",
|
|
5
|
+
"corpus": [
|
|
6
|
+
{
|
|
7
|
+
"repo": "owner/repo",
|
|
8
|
+
"pr_number": 123,
|
|
9
|
+
"head_sha": "0123456789abcdef0123456789abcdef01234567",
|
|
10
|
+
"difficulty": "medium",
|
|
11
|
+
"source": "known-pr",
|
|
12
|
+
"truth": {
|
|
13
|
+
"expectation": "known_clean",
|
|
14
|
+
"notes": "A merged/control PR that should not produce blocking findings."
|
|
15
|
+
},
|
|
16
|
+
"expected_findings": [],
|
|
17
|
+
"reviewer_runs": [
|
|
18
|
+
{
|
|
19
|
+
"reviewer": "codex-audit",
|
|
20
|
+
"status": "pass",
|
|
21
|
+
"finding_count": 0,
|
|
22
|
+
"known_clean": true,
|
|
23
|
+
"duration_seconds": 120
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"notes": "Replace with a recent merged PR whose final outcome is known."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"repo": "owner/repo",
|
|
30
|
+
"pr_number": 124,
|
|
31
|
+
"head_sha": "fedcba9876543210fedcba9876543210fedcba98",
|
|
32
|
+
"base_ref": "main",
|
|
33
|
+
"difficulty": "hard",
|
|
34
|
+
"source": "seeded-bug-history-quota",
|
|
35
|
+
"truth": {
|
|
36
|
+
"expectation": "known_blocked",
|
|
37
|
+
"expected_themes": [
|
|
38
|
+
"history quota enforcement"
|
|
39
|
+
],
|
|
40
|
+
"notes": "A seeded or historical blocker that reviewers should catch."
|
|
41
|
+
},
|
|
42
|
+
"expected_findings": [
|
|
43
|
+
{
|
|
44
|
+
"path": "tools/example.py",
|
|
45
|
+
"summary": "Seeded bug description used for adjudication."
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"context_packs": [
|
|
49
|
+
"package-runtime"
|
|
50
|
+
],
|
|
51
|
+
"notes": "Seeded-bug entries make catch rate measurable. Keep the seed branch and base ref available so local CLI lanes can reproduce the same diff."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"repo": "owner/repo",
|
|
55
|
+
"pr_number": 125,
|
|
56
|
+
"head_sha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
57
|
+
"base_ref": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
58
|
+
"difficulty": "hard",
|
|
59
|
+
"source": "seeded-bug-auth-or-secret",
|
|
60
|
+
"truth": {
|
|
61
|
+
"expectation": "known_blocked",
|
|
62
|
+
"expected_themes": [
|
|
63
|
+
"auth or secret boundary"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"expected_findings": [
|
|
67
|
+
{
|
|
68
|
+
"path": "src/auth/session.ts",
|
|
69
|
+
"summary": "Seeded auth or secret-handling bug expected to block merge."
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"context_packs": [
|
|
73
|
+
"auth-context"
|
|
74
|
+
],
|
|
75
|
+
"notes": "Use for token leakage, auth-state drift, RLS, or permission-boundary calibration."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"repo": "owner/repo",
|
|
79
|
+
"pr_number": 126,
|
|
80
|
+
"head_sha": "cccccccccccccccccccccccccccccccccccccccc",
|
|
81
|
+
"base_ref": "dddddddddddddddddddddddddddddddddddddddd",
|
|
82
|
+
"difficulty": "hard",
|
|
83
|
+
"review_class": "package-runtime",
|
|
84
|
+
"source": "seeded-bug-runtime-packaging",
|
|
85
|
+
"truth": {
|
|
86
|
+
"expectation": "known_blocked",
|
|
87
|
+
"expected_themes": [
|
|
88
|
+
"runtime packaging"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"expected_findings": [
|
|
92
|
+
{
|
|
93
|
+
"path": "tools/code_mower_doctor.py",
|
|
94
|
+
"summary": "Seeded runtime setup bug expected to be caught by package/runtime lenses."
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"context_packs": [
|
|
98
|
+
"package-runtime",
|
|
99
|
+
"calibration-policy"
|
|
100
|
+
],
|
|
101
|
+
"notes": "Use for Python version, CLI auth, subprocess isolation, package extraction, or artifact durability calibration."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"repo": "owner/repo",
|
|
105
|
+
"pr_number": 127,
|
|
106
|
+
"head_sha": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
107
|
+
"base_ref": "ffffffffffffffffffffffffffffffffffffffff",
|
|
108
|
+
"difficulty": "hard",
|
|
109
|
+
"review_class": "calibration-policy",
|
|
110
|
+
"source": "seeded-bug-calibration-privacy",
|
|
111
|
+
"truth": {
|
|
112
|
+
"expectation": "known_blocked",
|
|
113
|
+
"expected_themes": [
|
|
114
|
+
"shareable report privacy"
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
"expected_findings": [
|
|
118
|
+
{
|
|
119
|
+
"path": "tools/code_mower_doctor.py",
|
|
120
|
+
"summary": "Seeded privacy bug where auth probe output is persisted in shareable reports."
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
"context_packs": [
|
|
124
|
+
"calibration-policy"
|
|
125
|
+
],
|
|
126
|
+
"notes": "Use for output-preview redaction, metrics trust, value report, and lane policy calibration."
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
}
|