claude-dev-env 8.11.1 → 8.12.0
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.
- package/.agents/skills/e-code-review/SKILL.md +24 -71
- package/.agents/skills/e-code-review/reference/fix.md +7 -78
- package/.agents/skills/e-code-review/reference/high.md +129 -0
- package/.agents/skills/e-code-review/reference/low.md +20 -51
- package/.agents/skills/e-code-review/reference/max.md +169 -0
- package/.agents/skills/e-code-review/reference/medium.md +7 -191
- package/.agents/skills/e-code-review/reference/xhigh.md +47 -91
- package/bin/install.agents-home.test.mjs +9 -9
- package/commands/sr-loop.md +3 -1
- package/hooks/hooks_constants/code_rules_path_utils_constants.py +0 -1
- package/package.json +1 -1
- package/.agents/skills/e-code-review/preflight-proposal.contract.test.mjs +0 -20
- package/.agents/skills/e-code-review/reference/effort-evaluation.md +0 -35
- package/.agents/skills/e-code-review/reference/loop.md +0 -261
- package/.agents/skills/e-code-review/reference/mode-contract.test.mjs +0 -67
- package/.agents/skills/e-code-review/reference/preflight-proposal.md +0 -75
- package/.agents/skills/e-code-review/reference/runner-selection.md +0 -40
- package/.agents/skills/e-code-review/scripts/config/e_code_review_effort_constants/__init__.py +0 -41
- package/.agents/skills/e-code-review/scripts/config/e_code_review_effort_constants/effort_constants.py +0 -40
- package/.agents/skills/e-code-review/scripts/e_code_review_scripts_constants/__init__.py +0 -1
- package/.agents/skills/e-code-review/scripts/e_code_review_scripts_constants/finding_pipeline_constants.py +0 -49
- package/.agents/skills/e-code-review/scripts/e_code_review_scripts_constants/grok_code_review_constants.py +0 -55
- package/.agents/skills/e-code-review/scripts/effort_defaults_evidence.json +0 -186
- package/.agents/skills/e-code-review/scripts/effort_evaluation.py +0 -362
- package/.agents/skills/e-code-review/scripts/finding_pipeline.py +0 -140
- package/.agents/skills/e-code-review/scripts/fixtures/demanding.json +0 -26
- package/.agents/skills/e-code-review/scripts/fixtures/easy.json +0 -14
- package/.agents/skills/e-code-review/scripts/fixtures/medium.json +0 -20
- package/.agents/skills/e-code-review/scripts/grok_code_review.py +0 -230
- package/.agents/skills/e-code-review/scripts/test_effort_evaluation.py +0 -180
- package/.agents/skills/e-code-review/scripts/test_finding_pipeline.py +0 -197
- package/.agents/skills/e-code-review/scripts/test_grok_code_review.py +0 -289
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
"""Behavioral tests for Grok medium-review discovery and verification."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import sys
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
|
|
8
|
-
import pytest
|
|
9
|
-
|
|
10
|
-
_SCRIPTS = Path(__file__).resolve().parent
|
|
11
|
-
if str(_SCRIPTS) not in sys.path:
|
|
12
|
-
sys.path.insert(0, str(_SCRIPTS))
|
|
13
|
-
|
|
14
|
-
from e_code_review_scripts_constants.grok_code_review_constants import ( # noqa: E402
|
|
15
|
-
ALL_MEDIUM_FINDER_ANGLES,
|
|
16
|
-
MEDIUM_REVIEW_FINDER_COUNT,
|
|
17
|
-
VERDICT_CONFIRMED,
|
|
18
|
-
VERDICT_PLAUSIBLE,
|
|
19
|
-
VERDICT_REFUTED,
|
|
20
|
-
)
|
|
21
|
-
from grok_code_review import ( # noqa: E402
|
|
22
|
-
FinderCandidate,
|
|
23
|
-
deduplicate_candidates,
|
|
24
|
-
require_exact_finder_set,
|
|
25
|
-
retain_verified_findings,
|
|
26
|
-
run_medium_review,
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def _candidate(
|
|
31
|
-
angle: str,
|
|
32
|
-
*,
|
|
33
|
-
file_path: str = "a.py",
|
|
34
|
-
line_number: int = 1,
|
|
35
|
-
mechanism: str = "m",
|
|
36
|
-
scenario: str = "short",
|
|
37
|
-
suffix: str = "",
|
|
38
|
-
head: str = "head1",
|
|
39
|
-
) -> FinderCandidate:
|
|
40
|
-
token = suffix or angle
|
|
41
|
-
return FinderCandidate(
|
|
42
|
-
angle=angle,
|
|
43
|
-
file_path=file_path,
|
|
44
|
-
line_number=line_number,
|
|
45
|
-
mechanism=mechanism,
|
|
46
|
-
scenario=scenario,
|
|
47
|
-
worktree_path=f"/wt/{token}",
|
|
48
|
-
leader_socket=f"sock-{token}",
|
|
49
|
-
advisor_session_id=f"adv-{token}",
|
|
50
|
-
reviewed_head=head,
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def test_require_exact_finder_set_accepts_all_angles() -> None:
|
|
55
|
-
require_exact_finder_set(ALL_MEDIUM_FINDER_ANGLES)
|
|
56
|
-
with pytest.raises(ValueError):
|
|
57
|
-
require_exact_finder_set(ALL_MEDIUM_FINDER_ANGLES[:-1])
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def test_deduplicate_keeps_most_concrete_scenario() -> None:
|
|
61
|
-
short = _candidate("correctness", scenario="short")
|
|
62
|
-
long = _candidate("security", scenario="much more concrete failure path")
|
|
63
|
-
# same key different angles - force same file/line/mech
|
|
64
|
-
short = FinderCandidate(
|
|
65
|
-
angle="correctness",
|
|
66
|
-
file_path="a.py",
|
|
67
|
-
line_number=3,
|
|
68
|
-
mechanism="null",
|
|
69
|
-
scenario="x",
|
|
70
|
-
worktree_path="/wt/a",
|
|
71
|
-
leader_socket="s1",
|
|
72
|
-
advisor_session_id="a1",
|
|
73
|
-
reviewed_head="h",
|
|
74
|
-
)
|
|
75
|
-
long = FinderCandidate(
|
|
76
|
-
angle="security",
|
|
77
|
-
file_path="a.py",
|
|
78
|
-
line_number=3,
|
|
79
|
-
mechanism="null",
|
|
80
|
-
scenario="concrete long scenario",
|
|
81
|
-
worktree_path="/wt/b",
|
|
82
|
-
leader_socket="s2",
|
|
83
|
-
advisor_session_id="a2",
|
|
84
|
-
reviewed_head="h",
|
|
85
|
-
)
|
|
86
|
-
kept = deduplicate_candidates([short, long])
|
|
87
|
-
assert len(kept) == 1
|
|
88
|
-
assert kept[0].scenario == "concrete long scenario"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def test_run_medium_review_happy_path() -> None:
|
|
92
|
-
head = "abc123"
|
|
93
|
-
all_finders = [
|
|
94
|
-
_candidate(each_angle, head=head, suffix=each_angle)
|
|
95
|
-
for each_angle in ALL_MEDIUM_FINDER_ANGLES
|
|
96
|
-
]
|
|
97
|
-
# make unique keys per angle
|
|
98
|
-
all_finders = [
|
|
99
|
-
FinderCandidate(
|
|
100
|
-
angle=each_angle,
|
|
101
|
-
file_path=f"{each_angle}.py",
|
|
102
|
-
line_number=1,
|
|
103
|
-
mechanism="m",
|
|
104
|
-
scenario=f"scenario {each_angle}",
|
|
105
|
-
worktree_path=f"/wt/{each_angle}",
|
|
106
|
-
leader_socket=f"sock-{each_angle}",
|
|
107
|
-
advisor_session_id=f"adv-{each_angle}",
|
|
108
|
-
reviewed_head=head,
|
|
109
|
-
)
|
|
110
|
-
for each_angle in ALL_MEDIUM_FINDER_ANGLES
|
|
111
|
-
]
|
|
112
|
-
verdicts = {
|
|
113
|
-
(f"{each}.py", 1, "m"): VERDICT_CONFIRMED
|
|
114
|
-
for each in ALL_MEDIUM_FINDER_ANGLES
|
|
115
|
-
}
|
|
116
|
-
severities = {
|
|
117
|
-
(f"{each}.py", 1, "m"): "medium" for each in ALL_MEDIUM_FINDER_ANGLES
|
|
118
|
-
}
|
|
119
|
-
# refute one
|
|
120
|
-
first = ALL_MEDIUM_FINDER_ANGLES[0]
|
|
121
|
-
verdicts[(f"{first}.py", 1, "m")] = VERDICT_REFUTED
|
|
122
|
-
batch = run_medium_review(
|
|
123
|
-
target_head=head,
|
|
124
|
-
diff_base="base",
|
|
125
|
-
all_finder_candidates=all_finders,
|
|
126
|
-
verdict_by_key=verdicts,
|
|
127
|
-
severity_by_key=severities,
|
|
128
|
-
live_head=head,
|
|
129
|
-
)
|
|
130
|
-
assert batch.is_rejected is False
|
|
131
|
-
assert len(batch.all_finder_angles) == MEDIUM_REVIEW_FINDER_COUNT
|
|
132
|
-
assert all(each.reviewed_head == head for each in batch.all_retained_findings)
|
|
133
|
-
assert all(each.verdict in {VERDICT_CONFIRMED, VERDICT_PLAUSIBLE} for each in batch.all_retained_findings)
|
|
134
|
-
assert len(batch.all_retained_findings) == MEDIUM_REVIEW_FINDER_COUNT - 1
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def _one_candidate_per_angle(head: str) -> list[FinderCandidate]:
|
|
138
|
-
return [
|
|
139
|
-
FinderCandidate(
|
|
140
|
-
angle=each_angle,
|
|
141
|
-
file_path=f"{each_angle}.py",
|
|
142
|
-
line_number=1,
|
|
143
|
-
mechanism="m",
|
|
144
|
-
scenario=f"scenario {each_angle}",
|
|
145
|
-
worktree_path=f"/wt/{each_angle}",
|
|
146
|
-
leader_socket=f"sock-{each_angle}",
|
|
147
|
-
advisor_session_id=f"adv-{each_angle}",
|
|
148
|
-
reviewed_head=head,
|
|
149
|
-
)
|
|
150
|
-
for each_angle in ALL_MEDIUM_FINDER_ANGLES
|
|
151
|
-
]
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
def test_a_finder_reporting_several_candidates_is_not_a_identity_clash() -> None:
|
|
155
|
-
head = "abc123"
|
|
156
|
-
all_finders = _one_candidate_per_angle(head)
|
|
157
|
-
first = all_finders[0]
|
|
158
|
-
second_from_first_finder = FinderCandidate(
|
|
159
|
-
angle=first.angle,
|
|
160
|
-
file_path="second.py",
|
|
161
|
-
line_number=9,
|
|
162
|
-
mechanism="m",
|
|
163
|
-
scenario="a second finding from the same finder",
|
|
164
|
-
worktree_path=first.worktree_path,
|
|
165
|
-
leader_socket=first.leader_socket,
|
|
166
|
-
advisor_session_id=first.advisor_session_id,
|
|
167
|
-
reviewed_head=head,
|
|
168
|
-
)
|
|
169
|
-
all_finders.append(second_from_first_finder)
|
|
170
|
-
all_keys = [
|
|
171
|
-
(each.file_path, each.line_number, each.mechanism) for each in all_finders
|
|
172
|
-
]
|
|
173
|
-
batch = run_medium_review(
|
|
174
|
-
target_head=head,
|
|
175
|
-
diff_base="base",
|
|
176
|
-
all_finder_candidates=all_finders,
|
|
177
|
-
verdict_by_key={each_key: VERDICT_CONFIRMED for each_key in all_keys},
|
|
178
|
-
severity_by_key={each_key: "medium" for each_key in all_keys},
|
|
179
|
-
live_head=head,
|
|
180
|
-
)
|
|
181
|
-
assert batch.is_rejected is False
|
|
182
|
-
assert batch.rejection_reason is None
|
|
183
|
-
assert len(batch.all_retained_findings) == len(all_finders)
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
def test_two_finders_sharing_one_socket_reject_the_batch() -> None:
|
|
187
|
-
head = "abc123"
|
|
188
|
-
all_finders = _one_candidate_per_angle(head)
|
|
189
|
-
first = all_finders[0]
|
|
190
|
-
second = all_finders[1]
|
|
191
|
-
all_finders[1] = FinderCandidate(
|
|
192
|
-
angle=second.angle,
|
|
193
|
-
file_path=second.file_path,
|
|
194
|
-
line_number=second.line_number,
|
|
195
|
-
mechanism=second.mechanism,
|
|
196
|
-
scenario=second.scenario,
|
|
197
|
-
worktree_path=second.worktree_path,
|
|
198
|
-
leader_socket=first.leader_socket,
|
|
199
|
-
advisor_session_id=second.advisor_session_id,
|
|
200
|
-
reviewed_head=head,
|
|
201
|
-
)
|
|
202
|
-
batch = run_medium_review(
|
|
203
|
-
target_head=head,
|
|
204
|
-
diff_base="base",
|
|
205
|
-
all_finder_candidates=all_finders,
|
|
206
|
-
verdict_by_key={},
|
|
207
|
-
severity_by_key={},
|
|
208
|
-
live_head=head,
|
|
209
|
-
)
|
|
210
|
-
assert batch.is_rejected is True
|
|
211
|
-
assert batch.rejection_reason == "non_unique_finder_identity"
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
def test_head_drift_rejects_batch() -> None:
|
|
215
|
-
head = "h1"
|
|
216
|
-
all_finders = [
|
|
217
|
-
FinderCandidate(
|
|
218
|
-
angle=each_angle,
|
|
219
|
-
file_path=f"{each_angle}.py",
|
|
220
|
-
line_number=1,
|
|
221
|
-
mechanism="m",
|
|
222
|
-
scenario="s",
|
|
223
|
-
worktree_path=f"/wt/{each_angle}",
|
|
224
|
-
leader_socket=f"sock-{each_angle}",
|
|
225
|
-
advisor_session_id=f"adv-{each_angle}",
|
|
226
|
-
reviewed_head=head,
|
|
227
|
-
)
|
|
228
|
-
for each_angle in ALL_MEDIUM_FINDER_ANGLES
|
|
229
|
-
]
|
|
230
|
-
batch = run_medium_review(
|
|
231
|
-
target_head=head,
|
|
232
|
-
diff_base="b",
|
|
233
|
-
all_finder_candidates=all_finders,
|
|
234
|
-
verdict_by_key={},
|
|
235
|
-
severity_by_key={},
|
|
236
|
-
live_head="other",
|
|
237
|
-
)
|
|
238
|
-
assert batch.is_rejected is True
|
|
239
|
-
assert batch.rejection_reason == "head_drift"
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
def test_advisor_blocked_rejects_batch() -> None:
|
|
243
|
-
head = "h1"
|
|
244
|
-
all_finders = [
|
|
245
|
-
FinderCandidate(
|
|
246
|
-
angle=each_angle,
|
|
247
|
-
file_path=f"{each_angle}.py",
|
|
248
|
-
line_number=1,
|
|
249
|
-
mechanism="m",
|
|
250
|
-
scenario="s",
|
|
251
|
-
worktree_path=f"/wt/{each_angle}",
|
|
252
|
-
leader_socket=f"sock-{each_angle}",
|
|
253
|
-
advisor_session_id=f"adv-{each_angle}",
|
|
254
|
-
reviewed_head=head,
|
|
255
|
-
)
|
|
256
|
-
for each_angle in ALL_MEDIUM_FINDER_ANGLES
|
|
257
|
-
]
|
|
258
|
-
batch = run_medium_review(
|
|
259
|
-
target_head=head,
|
|
260
|
-
diff_base="b",
|
|
261
|
-
all_finder_candidates=all_finders,
|
|
262
|
-
verdict_by_key={},
|
|
263
|
-
severity_by_key={},
|
|
264
|
-
live_head=head,
|
|
265
|
-
is_any_advisor_blocked=True,
|
|
266
|
-
)
|
|
267
|
-
assert batch.is_rejected is True
|
|
268
|
-
assert batch.rejection_reason == "advisor_blocked"
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
def test_retain_verified_findings_keeps_confirmed() -> None:
|
|
272
|
-
candidate = FinderCandidate(
|
|
273
|
-
angle="correctness",
|
|
274
|
-
file_path="a.py",
|
|
275
|
-
line_number=2,
|
|
276
|
-
mechanism="null",
|
|
277
|
-
scenario="boom",
|
|
278
|
-
worktree_path="/wt/x",
|
|
279
|
-
leader_socket="s",
|
|
280
|
-
advisor_session_id="a",
|
|
281
|
-
reviewed_head="h",
|
|
282
|
-
)
|
|
283
|
-
kept = retain_verified_findings(
|
|
284
|
-
all_candidates=[candidate],
|
|
285
|
-
verdict_by_key={("a.py", 2, "null"): VERDICT_CONFIRMED},
|
|
286
|
-
severity_by_key={("a.py", 2, "null"): "high"},
|
|
287
|
-
)
|
|
288
|
-
assert len(kept) == 1
|
|
289
|
-
assert kept[0].verdict == VERDICT_CONFIRMED
|