@shadowclone/cli 0.0.9 → 0.0.12
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/README.md +50 -76
- package/bin/shadowclone.mjs +5 -0
- package/dist/_.._/web/client/index.html +150 -0
- package/dist/shadowclone.js +922 -254
- package/dist/web/index-174jt7gq.css +1 -0
- package/dist/web/index-1ezbn24z.js +133 -0
- package/dist/web/shadowclone-mark-w6a76wqy.svg +42 -0
- package/evals.md +230 -57
- package/package.json +2 -2
- package/skills/design-deep-modules/SKILL.md +10 -20
- package/skills/diagnose-before-editing/SKILL.md +12 -23
- package/skills/prove-regression-tests/SKILL.md +9 -18
- package/skills/research-primary-sources/SKILL.md +9 -18
- package/skills/resolve-conflicts-by-intent/SKILL.md +10 -19
- package/skills/scope-confirmed-changes/SKILL.md +9 -19
- package/skills/testing-first/SKILL.md +10 -21
- package/skills/testing-risk-based/SKILL.md +9 -16
- package/skills/typescript-type-safety/SKILL.md +12 -18
- package/skills/verify-and-review/SKILL.md +10 -19
package/evals.md
CHANGED
|
@@ -1,89 +1,262 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Evaluation results
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The preference study measures whether a coding agent follows an anonymized participant's engineering preferences on ordinary requests, and whether Shadowclone changes that. Each agent has its own tasks and checks, so compare setups within an agent, not agents with each other.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Results
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
The headline rate weights every task equally. Percentages in parentheses are 95% intervals.
|
|
8
8
|
|
|
9
|
-
|
|
|
10
|
-
| --- |
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
9
|
+
| Share of preferences followed | GPT-6 Sol | GPT-6 Luna | Sonnet 5.5 | Opus 5.5 |
|
|
10
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
11
|
+
| Agent alone | 72% (52% to 89%) | 73% (54% to 90%) | 55% (27% to 80%) | 57% (32% to 82%) |
|
|
12
|
+
| With existing skills | 87% (70% to 100%) | 91% (79% to 99%) | 70% (42% to 96%) | 79% (56% to 100%) |
|
|
13
|
+
| With Shadowclone skills | 84% (68% to 98%) | 83% (68% to 95%) | 68% (40% to 92%) | 68% (42% to 90%) |
|
|
14
|
+
| With Shadowclone skills and deep learning | 97% (88% to 100%) | 88% (74% to 99%) | 76% (54% to 95%) | 82% (64% to 97%) |
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
Each cell below compares the agent alone with Shadowclone skills and deep learning.
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
| Preference | GPT-6 Sol | GPT-6 Luna | Sonnet 5.5 | Opus 5.5 |
|
|
19
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
20
|
+
| Review reply preferences | 2 of 6 → 6 of 6 | 2 of 6 → 6 of 6 | 0 of 6 → 6 of 6 | 0 of 6 → 6 of 6 |
|
|
21
|
+
| Failing test first | 0 of 3 → 3 of 3 | 0 of 3 → 2 of 3 | 0 of 3 → 0 of 3 | 0 of 3 → 2 of 3 |
|
|
22
|
+
| Pull request checklist | 0 of 3 → 3 of 3 | 3 of 3 → 3 of 3 | 0 of 3 → 1 of 3 | 2 of 3 → 3 of 3 |
|
|
18
23
|
|
|
19
|
-
|
|
24
|
+
**How to read this.** Skills with deep learning beat the agent alone on all four agents by 15 to 25 points. The gain is statistically clear on GPT-6 Sol and Opus 5.5, and directional on GPT-6 Luna and Sonnet 5.5. Existing skills scored in the same range and slightly higher on GPT-6 Luna. The intervals are wide because each agent has four to ten tasks.
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
## Setups
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
| Setup | What the agent has |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| Without Shadowclone or user skills | Repository guidance only, with personal memory disabled |
|
|
31
|
+
| With user skills | The participant's existing skills and instructions |
|
|
32
|
+
| With Shadowclone skills | The existing skills plus Shadowclone setup with a scripted agent build |
|
|
33
|
+
| With Shadowclone skills and deep learning | The same setup after learning from a consented 14-day session sample until none remained |
|
|
24
34
|
|
|
25
|
-
|
|
35
|
+
Each setup runs in an isolated agent home. The setups with user skills start from identical native memory, and no setup receives an aggregated profile.
|
|
26
36
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
| 4. Bounded undo/redo | Implement immutable generic history with a positive safe-integer undo capacity, recording, undo, redo, and availability queries. Trim old history, clear redo on branching, and preserve state and redo for Object.is-equal recordings. Test capacity, identity, no-op behavior, and immutability. |
|
|
37
|
+
**Existing skills.** The participant's library was frozen before the study and not tuned for it. The third setup adds generic Shadowclone skills and edits the native instruction files to route to them. The study does not separate those two changes.
|
|
38
|
+
|
|
39
|
+
## How the tasks and checks were chosen
|
|
40
|
+
|
|
41
|
+
**Preference key.** One frozen key of 17 items has four provenance groups: rules in the existing skill library, behavior the wizard build selects, preferences evidenced at least twice in the consented session sample, and decisions on pending proposals. Key items never come from the deep-learning skills. Session text is not stored, only counts.
|
|
33
42
|
|
|
34
|
-
|
|
43
|
+
**Requests.** Ten candidate requests run on a synthetic repository, a usage-reporting tool. Each is written in the short style people use with coding agents: a terse first request that carries most of the detail and, on two tasks, one short follow-up. No request states a preference. Prompts are sent verbatim with no evaluation preamble.
|
|
35
44
|
|
|
36
|
-
|
|
45
|
+
**Repository.** The repository has modules near the file-length limit, tests, release notes, Git history on a ticketed branch, a local remote, and an offline `gh` stub that records pull request creation. Code tasks carry hidden acceptance tests.
|
|
37
46
|
|
|
38
|
-
|
|
47
|
+
**Kinds of tasks.** The requests cover the work an agent does in a day, and each kind exercises different preferences.
|
|
39
48
|
|
|
40
|
-
|
|
49
|
+
| Kind | Requests | Preferences checked |
|
|
50
|
+
| --- | --- | --- |
|
|
51
|
+
| Feature work | Add a second export format; parse older config files | One options object for several parameters; no unsafe types; no added comments |
|
|
52
|
+
| Bug fix | Successful jobs still get retried | Failing test first; fix proven by inversion; commit message proposed, not committed |
|
|
53
|
+
| Git and pull requests | Rename a variable, then "commit it"; create the pull request | Lowercase conventional subject with no body; an Overview of Changes checklist |
|
|
54
|
+
| Questions | Which change broke exports, then "do we need a hotfix?"; is a delay capped; what would a change take | Short, direct answers |
|
|
55
|
+
| Review replies | Reply to an automated review comment | One sentence with the key fact, no colons, semicolons, or dashes |
|
|
56
|
+
| Documentation | Remove a deprecated command and sweep the docs | No em dashes in prose; no added comments |
|
|
41
57
|
|
|
42
|
-
|
|
58
|
+
**Checks.** Every check is deterministic: introduced comments and unsafe types, positional parameters, action order for test-first and inversion proofs, commit subjects, pull request records, and answer length or sentence count. Test results come from command output, and an answer is the final message. Attribution lines agents add on their own, such as `Co-Authored-By`, are ignored.
|
|
43
59
|
|
|
44
|
-
|
|
60
|
+
**Controls.** Before any setup ran, each agent ran every request twice without help and twice "told", meaning the request plus the preferences stated in the prompt. A check is achievable when told passes both runs. Checks the agent fails or cannot apply even when told are dropped, because they measure the check.
|
|
45
61
|
|
|
46
|
-
|
|
62
|
+
**Two views.** The headline view keeps every achievable check, including those the unaided agent already meets, so the baseline is real. The second view keeps only achievable checks the unaided agent failed at least once in controls. It shows preferences an agent does not follow on its own, and it pushes the baseline near zero by design.
|
|
47
63
|
|
|
48
|
-
|
|
64
|
+
**Order of decisions.** The second view was the first analysis. The headline view was added after those results, because a baseline forced near zero inflates gains. Sessions did not change, and both views are reported.
|
|
49
65
|
|
|
50
|
-
|
|
51
|
-
| --- | ---: | ---: | ---: |
|
|
52
|
-
| 1. Byte quantities | 11/17 | 14/17 | 15/17 |
|
|
53
|
-
| 2. Integer ranges | 15/17 | 14/17 | 16/17 |
|
|
54
|
-
| 3. Ordered query parameters | 15/17 | 16/17 | 16/17 |
|
|
55
|
-
| 4. Bounded undo/redo | 14/17 | 15/17 | 15/17 |
|
|
56
|
-
| Total | 55/68 (80.9%) | 59/68 (86.8%) | 62/68 (91.2%) |
|
|
66
|
+
**Per-agent suites.** Agents differ in what they do by default, so each agent has its own checks.
|
|
57
67
|
|
|
58
|
-
|
|
68
|
+
| Agent | Candidate checks | Already met | Failed or n/a when told | Achievable | Missed by default | Tasks (achievable, missed) |
|
|
69
|
+
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
70
|
+
| GPT-6 Sol, medium effort | 25 | 14 | 1 | 24 | 10 | 10, 8 |
|
|
71
|
+
| GPT-6 Luna, high effort | 25 | 18 | 1 | 24 | 6 | 10, 4 |
|
|
72
|
+
| Sonnet 5.5, high effort | 25 | 14 | 4 | 21 | 7 | 8, 4 |
|
|
73
|
+
| Opus 5.5, medium effort | 25 | 13 | 4 | 21 | 8 | 8, 4 |
|
|
59
74
|
|
|
60
|
-
|
|
75
|
+
**Answer length.** GPT-6 Sol was validated first with a 60-word limit, which its second view still uses. Sonnet 5.5 and Opus 5.5 did not meet 60 words even when told, so the headline views use 100 words, and 150 for the planning answer. Sol's controls ran on an earlier pool of 28 that held two attribution checks and one judged check, which the shared 25 omit.
|
|
61
76
|
|
|
62
|
-
|
|
77
|
+
**Coverage gate.** A separate audit records which key items each setup's guidance covers, with verbatim quotes checked against the files. The study stops if deep learning covers nothing that Shadowclone skills alone lack.
|
|
63
78
|
|
|
64
|
-
|
|
65
|
-
| --- | --- | --- | --- |
|
|
66
|
-
| Byte quantities | Lost checks for a prohibited cast, positional arguments, comments, uppercase constants under two naming rules, and names repeating the module context. | Used options objects and avoided prohibited casts and comments. Lost two naming checks for an uppercase constant and one for redundant module context. | Passed the corrected casing rule. Lost checks for redundant module context and mutable test setup. |
|
|
67
|
-
| Integer ranges | Lost checks for positional arguments and redundant module context. | Had the same two failures plus a forbidden documentation comment. | Used options objects and no comments. Lost only the module-local naming check. |
|
|
68
|
-
| Ordered query parameters | Lost checks for positional replacement arguments and redundant module context. | Used an options object. Lost only the module-local naming check. | Used an options object. Lost only the module-local naming check. |
|
|
69
|
-
| Bounded undo/redo | Lost checks for non-null assertions, positional arguments, and redundant module context. | Avoided the first two violations. Lost checks for redundant module context and setup placed after assertions. | Avoided non-null assertions and positional arguments. Lost checks for redundant module context and reassigned test variables. |
|
|
79
|
+
**Analysis.** Each setup ran three sessions per task. Rates weight tasks equally. Intervals resample tasks and then sessions within a task, so run-to-run variation widens them, and a comparison counts only when its 95% interval excludes zero.
|
|
70
80
|
|
|
71
|
-
|
|
81
|
+
**Noise.** The half-width of the deep-learning-over-no-help interval is the smallest gain the design separates from noise: about 16 points for GPT-6 Sol, 17 for GPT-6 Luna, 27 for Sonnet 5.5, and 25 for Opus 5.5.
|
|
72
82
|
|
|
73
|
-
##
|
|
83
|
+
## Detailed results
|
|
74
84
|
|
|
75
|
-
|
|
85
|
+
Cells show checks followed out of checks run and the corresponding percentage, pooled over sessions. Errored sessions are excluded from the counts.
|
|
76
86
|
|
|
77
|
-
|
|
87
|
+
| Setup | GPT-6 Sol | GPT-6 Luna | Sonnet 5.5 | Opus 5.5 |
|
|
88
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
89
|
+
| Without Shadowclone or user skills | 47 of 72 (65%) | 46 of 69 (67%) | 35 of 60 (58%) | 35 of 60 (58%) |
|
|
90
|
+
| With user skills | 58 of 68 (85%) | 62 of 72 (86%) | 44 of 63 (70%) | 50 of 63 (79%) |
|
|
91
|
+
| With Shadowclone skills | 59 of 71 (83%) | 57 of 72 (79%) | 43 of 61 (70%) | 42 of 60 (70%) |
|
|
92
|
+
| With Shadowclone skills and deep learning | 65 of 69 (94%) | 61 of 72 (85%) | 47 of 61 (77%) | 50 of 60 (83%) |
|
|
78
93
|
|
|
79
|
-
|
|
94
|
+
Deep learning followed the highest pooled share on GPT-6 Sol, Sonnet 5.5, and Opus 5.5. Existing skills followed the highest share on GPT-6 Luna. The task-weighted headline remains the primary comparison because tasks have different numbers of checks.
|
|
80
95
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
96
|
+
Differences in points, with 95% intervals. An asterisk marks an interval that excludes zero.
|
|
97
|
+
|
|
98
|
+
| Comparison | GPT-6 Sol | GPT-6 Luna | Sonnet 5.5 | Opus 5.5 |
|
|
99
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
100
|
+
| Deep learning over no help | +25 (+10 to +42) * | +15 (-1 to +33) | +22 (-3 to +50) | +25 (+1 to +52) * |
|
|
101
|
+
| Deep learning over user skills | +10 (+0 to +25) | -3 (-14 to +8) | +6 (-20 to +38) | +3 (-16 to +26) |
|
|
102
|
+
| Deep learning over Shadowclone skills | +12 (+0 to +29) | +6 (-7 to +19) | +8 (-16 to +40) | +15 (-6 to +42) |
|
|
103
|
+
| Shadowclone skills over no help | +13 (-1 to +27) | +9 (-5 to +24) | +13 (-7 to +38) | +10 (-5 to +27) |
|
|
86
104
|
|
|
87
|
-
|
|
105
|
+
**What is clear.** Deep learning over no help is clear on GPT-6 Sol and Opus 5.5 and not on GPT-6 Luna or Sonnet 5.5. Shadowclone skills over no help is not clear on any agent. No comparison between two setups with skills is clear.
|
|
106
|
+
|
|
107
|
+
**Where the gains come from.** Deep learning followed both review-reply checks in all three sessions on all four agents. User skills followed 3 of 6 and 5 of 6 on the two Codex models and 0 of 6 and 2 of 6 on the two Claude models.
|
|
108
|
+
|
|
109
|
+
**Where it fell short.** On Sonnet 5.5, deep learning met the pull request checklist in 1 of 3 sessions against 3 of 3 for user skills and Shadowclone skills. On GPT-6 Luna, user skills led. On GPT-6 Luna and Opus 5.5, Shadowclone skills alone followed a lower share than user skills.
|
|
110
|
+
|
|
111
|
+
### GPT-6 Sol
|
|
88
112
|
|
|
89
|
-
|
|
113
|
+
| Task | Without Shadowclone or user skills | With user skills | With Shadowclone skills | With Shadowclone skills and deep learning |
|
|
114
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
115
|
+
| Add TSV export | 9 of 12 (75%) | 8 of 8 (100%) | 11 of 11 (100%) | 9 of 9 (100%) |
|
|
116
|
+
| Fix retries | 3 of 12 (25%) | 6 of 12 (50%) | 8 of 12 (67%) | 8 of 12 (67%) |
|
|
117
|
+
| Explain a regression | 3 of 3 (100%) | 3 of 3 (100%) | 3 of 3 (100%) | 3 of 3 (100%) |
|
|
118
|
+
| Reply to a review comment | 2 of 6 (33%) | 3 of 6 (50%) | 2 of 6 (33%) | 6 of 6 (100%) |
|
|
119
|
+
| Create a pull request | 3 of 6 (50%) | 6 of 6 (100%) | 4 of 6 (67%) | 6 of 6 (100%) |
|
|
120
|
+
| Rename and commit | 6 of 9 (67%) | 9 of 9 (100%) | 7 of 9 (78%) | 9 of 9 (100%) |
|
|
121
|
+
| Parse older configs | 6 of 9 (67%) | 9 of 9 (100%) | 9 of 9 (100%) | 9 of 9 (100%) |
|
|
122
|
+
| Remove a deprecated command | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) |
|
|
123
|
+
| Answer a question | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) |
|
|
124
|
+
| Plan a change | 3 of 3 (100%) | 2 of 3 (67%) | 3 of 3 (100%) | 3 of 3 (100%) |
|
|
125
|
+
| **All checks** | 47 of 72 (65%) | 58 of 68 (85%) | 59 of 71 (83%) | 65 of 69 (94%) |
|
|
126
|
+
|
|
127
|
+
### GPT-6 Luna
|
|
128
|
+
|
|
129
|
+
| Task | Without Shadowclone or user skills | With user skills | With Shadowclone skills | With Shadowclone skills and deep learning |
|
|
130
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
131
|
+
| Add TSV export | 9 of 12 (75%) | 10 of 12 (83%) | 9 of 12 (75%) | 9 of 12 (75%) |
|
|
132
|
+
| Fix retries | 3 of 12 (25%) | 6 of 12 (50%) | 6 of 12 (50%) | 6 of 12 (50%) |
|
|
133
|
+
| Explain a regression | 3 of 3 (100%) | 3 of 3 (100%) | 3 of 3 (100%) | 3 of 3 (100%) |
|
|
134
|
+
| Reply to a review comment | 2 of 6 (33%) | 5 of 6 (83%) | 4 of 6 (67%) | 6 of 6 (100%) |
|
|
135
|
+
| Create a pull request | 3 of 3 (100%) | 3 of 3 (100%) | 3 of 3 (100%) | 3 of 3 (100%) |
|
|
136
|
+
| Rename and commit | 6 of 9 (67%) | 8 of 9 (89%) | 6 of 9 (67%) | 8 of 9 (89%) |
|
|
137
|
+
| Parse older configs | 6 of 9 (67%) | 12 of 12 (100%) | 12 of 12 (100%) | 12 of 12 (100%) |
|
|
138
|
+
| Remove a deprecated command | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) |
|
|
139
|
+
| Answer a question | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) |
|
|
140
|
+
| Plan a change | 2 of 3 (67%) | 3 of 3 (100%) | 2 of 3 (67%) | 2 of 3 (67%) |
|
|
141
|
+
| **All checks** | 46 of 69 (67%) | 62 of 72 (86%) | 57 of 72 (79%) | 61 of 72 (85%) |
|
|
142
|
+
|
|
143
|
+
### Sonnet 5.5
|
|
144
|
+
|
|
145
|
+
| Task | Without Shadowclone or user skills | With user skills | With Shadowclone skills | With Shadowclone skills and deep learning |
|
|
146
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
147
|
+
| Add TSV export | 8 of 8 (100%) | 9 of 9 (100%) | 9 of 9 (100%) | 9 of 9 (100%) |
|
|
148
|
+
| Fix retries | 3 of 12 (25%) | 3 of 12 (25%) | 3 of 12 (25%) | 3 of 12 (25%) |
|
|
149
|
+
| Reply to a review comment | 0 of 6 (0%) | 0 of 6 (0%) | 0 of 6 (0%) | 6 of 6 (100%) |
|
|
150
|
+
| Create a pull request | 1 of 6 (17%) | 6 of 6 (100%) | 6 of 6 (100%) | 4 of 6 (67%) |
|
|
151
|
+
| Rename and commit | 9 of 9 (100%) | 9 of 9 (100%) | 9 of 9 (100%) | 9 of 9 (100%) |
|
|
152
|
+
| Parse older configs | 7 of 9 (78%) | 8 of 9 (89%) | 9 of 9 (100%) | 9 of 9 (100%) |
|
|
153
|
+
| Remove a deprecated command | 4 of 4 (100%) | 6 of 6 (100%) | 4 of 4 (100%) | 4 of 4 (100%) |
|
|
154
|
+
| Answer a question | 3 of 6 (50%) | 3 of 6 (50%) | 3 of 6 (50%) | 3 of 6 (50%) |
|
|
155
|
+
| **All checks** | 35 of 60 (58%) | 44 of 63 (70%) | 43 of 61 (70%) | 47 of 61 (77%) |
|
|
156
|
+
|
|
157
|
+
### Opus 5.5
|
|
158
|
+
|
|
159
|
+
| Task | Without Shadowclone or user skills | With user skills | With Shadowclone skills | With Shadowclone skills and deep learning |
|
|
160
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
161
|
+
| Add TSV export | 9 of 9 (100%) | 9 of 9 (100%) | 9 of 9 (100%) | 9 of 9 (100%) |
|
|
162
|
+
| Fix retries | 3 of 12 (25%) | 6 of 12 (50%) | 5 of 12 (42%) | 6 of 12 (50%) |
|
|
163
|
+
| Reply to a review comment | 0 of 6 (0%) | 2 of 6 (33%) | 0 of 6 (0%) | 6 of 6 (100%) |
|
|
164
|
+
| Create a pull request | 2 of 3 (67%) | 3 of 3 (100%) | 3 of 3 (100%) | 3 of 3 (100%) |
|
|
165
|
+
| Rename and commit | 6 of 6 (100%) | 9 of 9 (100%) | 6 of 6 (100%) | 6 of 6 (100%) |
|
|
166
|
+
| Parse older configs | 6 of 12 (50%) | 12 of 12 (100%) | 10 of 12 (83%) | 11 of 12 (92%) |
|
|
167
|
+
| Remove a deprecated command | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) | 6 of 6 (100%) |
|
|
168
|
+
| Answer a question | 3 of 6 (50%) | 3 of 6 (50%) | 3 of 6 (50%) | 3 of 6 (50%) |
|
|
169
|
+
| **All checks** | 35 of 60 (58%) | 50 of 63 (79%) | 42 of 60 (70%) | 50 of 60 (83%) |
|
|
170
|
+
|
|
171
|
+
## Preferences each agent misses by default
|
|
172
|
+
|
|
173
|
+
This view keeps only checks the unaided agent failed at least once in controls. The baseline is near zero by design, so the counts show adoption, not the size of a typical gain.
|
|
174
|
+
|
|
175
|
+
| Setup | GPT-6 Sol | GPT-6 Luna | Sonnet 5.5 | Opus 5.5 |
|
|
176
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
177
|
+
| Without Shadowclone or user skills | 6 of 30 (20%) | 2 of 18 (11%) | 0 of 21 (0%) | 0 of 24 (0%) |
|
|
178
|
+
| With user skills | 16 of 27 (59%) | 9 of 18 (50%) | 3 of 21 (14%) | 11 of 24 (46%) |
|
|
179
|
+
| With Shadowclone skills | 17 of 29 (59%) | 5 of 18 (28%) | 3 of 21 (14%) | 6 of 24 (25%) |
|
|
180
|
+
| With Shadowclone skills and deep learning | 21 of 27 (78%) | 7 of 18 (39%) | 7 of 21 (33%) | 14 of 24 (58%) |
|
|
181
|
+
|
|
182
|
+
**Not met by any setup.** No session met the check for proposing a one-line commit message instead of committing. No setup kept Sonnet 5.5 or Opus 5.5 answers to a direct question within 100 words. On Sonnet 5.5, no setup produced a failing test first or an inversion proof.
|
|
183
|
+
|
|
184
|
+
### GPT-6 Sol
|
|
185
|
+
|
|
186
|
+
| Task | Preference checked | Without Shadowclone or user skills | With user skills | With Shadowclone skills | With Shadowclone skills and deep learning |
|
|
187
|
+
| --- | --- | ---: | ---: | ---: | ---: |
|
|
188
|
+
| Add TSV export | One options object for several parameters | 0 of 3 | n/a | 2 of 2 | n/a |
|
|
189
|
+
| Fix retries | Failing test first | 0 of 3 | 2 of 3 | 3 of 3 | 3 of 3 |
|
|
190
|
+
| Fix retries | Fix proven by inversion | 0 of 3 | 1 of 3 | 2 of 3 | 2 of 3 |
|
|
191
|
+
| Fix retries | Commit message proposed, not committed | 0 of 3 | 0 of 3 | 0 of 3 | 0 of 3 |
|
|
192
|
+
| Explain a regression | Hotfix answer within 60 words | 3 of 3 | 1 of 3 | 1 of 3 | 1 of 3 |
|
|
193
|
+
| Reply to a review comment | One-sentence reply | 0 of 3 | 0 of 3 | 0 of 3 | 3 of 3 |
|
|
194
|
+
| Create a pull request | Overview of Changes checklist | 0 of 3 | 3 of 3 | 2 of 3 | 3 of 3 |
|
|
195
|
+
| Rename and commit | Lowercase conventional subject, no body | 0 of 3 | 3 of 3 | 1 of 3 | 3 of 3 |
|
|
196
|
+
| Parse older configs | No unsafe type syntax | 0 of 3 | 3 of 3 | 3 of 3 | 3 of 3 |
|
|
197
|
+
| Answer a question | Answer within 60 words | 3 of 3 | 3 of 3 | 3 of 3 | 3 of 3 |
|
|
198
|
+
|
|
199
|
+
### GPT-6 Luna
|
|
200
|
+
|
|
201
|
+
| Task | Preference checked | Without Shadowclone or user skills | With user skills | With Shadowclone skills | With Shadowclone skills and deep learning |
|
|
202
|
+
| --- | --- | ---: | ---: | ---: | ---: |
|
|
203
|
+
| Add TSV export | One options object for several parameters | 0 of 3 | 1 of 3 | 0 of 3 | 0 of 3 |
|
|
204
|
+
| Fix retries | Failing test first | 0 of 3 | 1 of 3 | 0 of 3 | 2 of 3 |
|
|
205
|
+
| Fix retries | Fix proven by inversion | 0 of 3 | 2 of 3 | 3 of 3 | 1 of 3 |
|
|
206
|
+
| Fix retries | Commit message proposed, not committed | 0 of 3 | 0 of 3 | 0 of 3 | 0 of 3 |
|
|
207
|
+
| Rename and commit | Lowercase conventional subject, no body | 0 of 3 | 2 of 3 | 0 of 3 | 2 of 3 |
|
|
208
|
+
| Plan a change | Plan within 150 words | 2 of 3 | 3 of 3 | 2 of 3 | 2 of 3 |
|
|
209
|
+
|
|
210
|
+
### Sonnet 5.5
|
|
211
|
+
|
|
212
|
+
| Task | Preference checked | Without Shadowclone or user skills | With user skills | With Shadowclone skills | With Shadowclone skills and deep learning |
|
|
213
|
+
| --- | --- | ---: | ---: | ---: | ---: |
|
|
214
|
+
| Fix retries | Failing test first | 0 of 3 | 0 of 3 | 0 of 3 | 0 of 3 |
|
|
215
|
+
| Fix retries | Fix proven by inversion | 0 of 3 | 0 of 3 | 0 of 3 | 0 of 3 |
|
|
216
|
+
| Fix retries | Commit message proposed, not committed | 0 of 3 | 0 of 3 | 0 of 3 | 0 of 3 |
|
|
217
|
+
| Reply to a review comment | One-sentence reply | 0 of 3 | 0 of 3 | 0 of 3 | 3 of 3 |
|
|
218
|
+
| Reply to a review comment | Key fact, no colons, semicolons, or dashes | 0 of 3 | 0 of 3 | 0 of 3 | 3 of 3 |
|
|
219
|
+
| Create a pull request | Overview of Changes checklist | 0 of 3 | 3 of 3 | 3 of 3 | 1 of 3 |
|
|
220
|
+
| Answer a question | Answer within 100 words | 0 of 3 | 0 of 3 | 0 of 3 | 0 of 3 |
|
|
221
|
+
|
|
222
|
+
### Opus 5.5
|
|
223
|
+
|
|
224
|
+
| Task | Preference checked | Without Shadowclone or user skills | With user skills | With Shadowclone skills | With Shadowclone skills and deep learning |
|
|
225
|
+
| --- | --- | ---: | ---: | ---: | ---: |
|
|
226
|
+
| Fix retries | Failing test first | 0 of 3 | 0 of 3 | 1 of 3 | 2 of 3 |
|
|
227
|
+
| Fix retries | Fix proven by inversion | 0 of 3 | 3 of 3 | 1 of 3 | 1 of 3 |
|
|
228
|
+
| Fix retries | Commit message proposed, not committed | 0 of 3 | 0 of 3 | 0 of 3 | 0 of 3 |
|
|
229
|
+
| Reply to a review comment | One-sentence reply | 0 of 3 | 0 of 3 | 0 of 3 | 3 of 3 |
|
|
230
|
+
| Reply to a review comment | Key fact, no colons, semicolons, or dashes | 0 of 3 | 2 of 3 | 0 of 3 | 3 of 3 |
|
|
231
|
+
| Parse older configs | No added comments | 0 of 3 | 3 of 3 | 2 of 3 | 3 of 3 |
|
|
232
|
+
| Parse older configs | One options object for several parameters | 0 of 3 | 3 of 3 | 2 of 3 | 2 of 3 |
|
|
233
|
+
| Answer a question | Answer within 100 words | 0 of 3 | 0 of 3 | 0 of 3 | 0 of 3 |
|
|
234
|
+
|
|
235
|
+
## Run notes
|
|
236
|
+
|
|
237
|
+
**Versions.** GPT-6 Sol and Luna ran through Codex CLI 0.156.1. Sonnet 5.5 ran through Claude Code 2.1.277. Opus 5.5 ran through Claude Code 2.1.284.
|
|
238
|
+
|
|
239
|
+
**Sessions.** The tables cover 432 sessions. Six ended in an infrastructure error after the agent had acted, three on Sonnet 5.5 and three on Opus 5.5, and are excluded from the counts. No session had a correctness or safety failure.
|
|
240
|
+
|
|
241
|
+
**Replacements.** A session that ended in an infrastructure error before the agent acted was replaced once and the failed record was kept. A session with an agent action kept its result.
|
|
242
|
+
|
|
243
|
+
**Not reported.** Sessions on tasks outside an agent's achievable tasks also ran. They are not scored here.
|
|
244
|
+
|
|
245
|
+
**GPT-6 Sol.** Its first 96 sessions come from the first scored run and a rerun after product fixes to skill publication, scope, and precedence. The [design record](docs/design/027-preference-study.md) describes them. Rescoring them with the final scorer changed no verdict.
|
|
246
|
+
|
|
247
|
+
## Repository harness pilot (2026-09-26)
|
|
248
|
+
|
|
249
|
+
Two synthetic repositories each ran once with existing guidance and once after repository setup. Claude Code used `--model sonnet` and `acceptEdits`. Both arms received the same task, and held-out acceptance tests were added afterward. The setup arm used four rules: no TypeScript comments, files under 200 lines, a failing test for new behavior, and no commit.
|
|
250
|
+
|
|
251
|
+
| Repository | Arm | Held-out acceptance | Gate | Tests added | Agent committed |
|
|
252
|
+
| --- | --- | --- | --- | --- | --- |
|
|
253
|
+
| Bun task list | baseline | 3 of 3 | pass | yes | no |
|
|
254
|
+
| Bun task list | setup | 3 of 3 | pass | yes | no |
|
|
255
|
+
| Python config | baseline | pass | pass | no | no |
|
|
256
|
+
| Python config | setup | pass | pass | yes | no |
|
|
257
|
+
|
|
258
|
+
Both arms solved both tasks. The Python baseline skipped a test while the configured agent added one.
|
|
259
|
+
|
|
260
|
+
## Reproduce
|
|
261
|
+
|
|
262
|
+
The [evaluation guide](docs/architecture/09-evaluation.md) lists the phases and commands. Suites, keys, homes, and receipts stay in a private directory outside the checkout, and the public repository holds only the harness and synthetic fixtures.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shadowclone/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"module": "src/cli/index.ts",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "bun@1.3.3",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"prepack": "bun run build"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@biomejs/biome": "2.5.
|
|
22
|
+
"@biomejs/biome": "2.5.14",
|
|
23
23
|
"@types/bun": "latest",
|
|
24
24
|
"typescript": "~5.9"
|
|
25
25
|
},
|
|
@@ -10,33 +10,23 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
## Use when
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
A module is any implementation presented through an interface. Depth means the caller learns a small interface and receives substantial coherent behavior. A seam is the place where one implementation can be replaced without editing its callers.
|
|
13
|
+
Callers coordinate too many steps, an abstraction only forwards arguments, or tests must reach through layers to observe behavior. A deep module provides substantial behavior through a small interface.
|
|
16
14
|
|
|
17
15
|
## Process
|
|
18
16
|
|
|
19
|
-
1.
|
|
20
|
-
2.
|
|
21
|
-
3.
|
|
22
|
-
4.
|
|
23
|
-
5.
|
|
24
|
-
6.
|
|
25
|
-
7. Move orchestration behind the interface and remove pass-through layers that add no decision or isolation.
|
|
26
|
-
8. Test behavior through the chosen interface with dependencies replaced only at real external seams.
|
|
27
|
-
9. Read every caller again and remove knowledge that now belongs inside the module.
|
|
17
|
+
1. Read the callers and identify the state, ordering, and policy they currently coordinate.
|
|
18
|
+
2. Put related state and decisions under one owner. Define an operation that expresses the caller's intent.
|
|
19
|
+
3. When the boundary is unclear, compare two placements by caller burden, error handling, and testability.
|
|
20
|
+
4. Move internal sequencing behind the interface. Remove forwarding layers that provide no useful variation or isolation.
|
|
21
|
+
5. Test through the public interface, replacing dependencies only at real external boundaries.
|
|
22
|
+
6. Revisit callers and remove knowledge now owned by the module.
|
|
28
23
|
|
|
29
24
|
## Guardrails
|
|
30
25
|
|
|
31
|
-
|
|
32
|
-
- Keep invariants, ordering, error modes, and configuration inside the interface contract.
|
|
33
|
-
- Prefer one options object over sequences of primitive arguments that callers must correlate.
|
|
34
|
-
- Return results when callers need outcomes; contain side effects behind the owning interface.
|
|
35
|
-
- Avoid wrappers whose public surface repeats the implementation beneath them.
|
|
36
|
-
- Keep repository and domain terms in names so the interface matches the system users recognize.
|
|
26
|
+
Keep invariants and error behavior in the interface contract. Use an options object when callers would otherwise correlate primitive arguments. Return outcomes callers need, and contain side effects within their owner.
|
|
37
27
|
|
|
38
|
-
|
|
28
|
+
Add an abstraction for a concrete variation or isolation need. A short interface still imposes complexity if callers must know a hidden sequence of calls.
|
|
39
29
|
|
|
40
30
|
## Completion
|
|
41
31
|
|
|
42
|
-
|
|
32
|
+
Callers express intent without coordinating internal steps, and tests exercise behavior without depending on that sequence.
|
|
@@ -10,37 +10,26 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
## Use when
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
A defect or performance regression has no demonstrated cause yet.
|
|
14
14
|
|
|
15
15
|
## Process
|
|
16
16
|
|
|
17
|
-
1.
|
|
18
|
-
2.
|
|
19
|
-
3.
|
|
20
|
-
4.
|
|
21
|
-
5.
|
|
22
|
-
6.
|
|
23
|
-
7.
|
|
24
|
-
8. Remove disproved causes. Stop when one cause predicts the observed failure and a controlled change removes it.
|
|
25
|
-
9. Turn the reduced reproduction into a regression test at the public seam when that seam can express the defect.
|
|
26
|
-
10. Apply the smallest fix at the point where the invalid state originates.
|
|
27
|
-
11. Re-run the reduced test and the original reproduction, then remove diagnostic artifacts.
|
|
17
|
+
1. State the input, actual result, and expected result. Find the fastest repeatable command that reaches the failing path.
|
|
18
|
+
2. Reproduce the reported failure, then remove inputs or steps while preserving it.
|
|
19
|
+
3. Trace where correct state first becomes incorrect. List plausible causes and an observation that would disprove each.
|
|
20
|
+
4. Probe one cause at a time with a debugger, targeted instrumentation, timings, or controlled inputs.
|
|
21
|
+
5. Stop when a cause predicts the symptom and a controlled change removes it.
|
|
22
|
+
6. Preserve the reproduction as a regression test through a stable public interface where practical. Fix the cause at its origin.
|
|
23
|
+
7. Run the reduced and original reproductions, then remove temporary diagnostics.
|
|
28
24
|
|
|
29
|
-
For
|
|
30
|
-
|
|
31
|
-
For a performance regression, establish a baseline measurement before forming a theory. Use profiling, timings, or query plans that separate the suspected cost from unrelated work.
|
|
25
|
+
For flaky behavior, measure the reproduction rate and control clocks, randomness, concurrency, or external responses. For performance work, establish a baseline and measure the suspected cost before changing it.
|
|
32
26
|
|
|
33
27
|
## Guardrails
|
|
34
28
|
|
|
35
|
-
|
|
36
|
-
- Instrument only boundaries that distinguish current hypotheses.
|
|
37
|
-
- Change one causal variable per probe.
|
|
38
|
-
- Treat a nearby error as a separate defect unless it explains the reported symptom.
|
|
39
|
-
- Fix the origin of invalid state rather than adding a downstream fallback that hides it.
|
|
40
|
-
- Preserve a reduced reproduction as a test only when it exercises the real failure through a stable seam.
|
|
29
|
+
Redact sensitive traces and paths before reporting them. Change one causal variable per probe. Keep unrelated defects out of the fix and avoid fallbacks that merely hide invalid state.
|
|
41
30
|
|
|
42
|
-
If
|
|
31
|
+
If reproduction fails, report what was tried and the missing evidence. Do not turn an unverified theory into a production change.
|
|
43
32
|
|
|
44
33
|
## Completion
|
|
45
34
|
|
|
46
|
-
|
|
35
|
+
The cause explains the original symptom, the fix passes both reproductions and affected checks, and temporary instrumentation is gone.
|
|
@@ -10,31 +10,22 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
## Use when
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
A confirmed defect has a focused test and a fix. Verify that the test can detect the original failure.
|
|
14
14
|
|
|
15
15
|
## Process
|
|
16
16
|
|
|
17
|
-
1. Identify the smallest production
|
|
18
|
-
2.
|
|
19
|
-
3.
|
|
20
|
-
4.
|
|
21
|
-
5.
|
|
22
|
-
6. Reject the test if it passes, fails during setup, or fails for an unrelated reason. Improve the seam or assertion before continuing.
|
|
23
|
-
7. Restore the enforcing line exactly.
|
|
24
|
-
8. Print the restored lines and run the same test again.
|
|
25
|
-
9. Run the affected suite to ensure the proof mutation left no residue.
|
|
17
|
+
1. Identify the smallest production change that enforces the fix.
|
|
18
|
+
2. Temporarily invert it to restore the defect while keeping the code compilable.
|
|
19
|
+
3. Print the changed lines with file and line numbers. Run the narrow test and confirm its assertion fails on the original symptom.
|
|
20
|
+
4. If it passes or fails for another reason, improve the test before claiming coverage.
|
|
21
|
+
5. Restore and display the enforcing lines, then rerun the same test and affected suite.
|
|
26
22
|
|
|
27
23
|
## Guardrails
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
- Mutate production behavior rather than weakening the test.
|
|
31
|
-
- Preserve a clean working tree outside the lines involved in the proof.
|
|
32
|
-
- Avoid destructive history commands to simulate the regression.
|
|
33
|
-
- Treat a setup error, compiler error, timeout, or different assertion as a failed proof.
|
|
34
|
-
- Restore before changing anything else so later failures cannot inherit the mutation.
|
|
25
|
+
Keep the mutation local and reversible. Preserve unrelated work and avoid destructive Git operations. Mutate production behavior, not the assertion.
|
|
35
26
|
|
|
36
|
-
|
|
27
|
+
A setup error, compilation failure, timeout, or unrelated assertion does not prove the regression. Restore the code before starting other work. Broaden the proof only when the fix covers distinct public behaviors.
|
|
37
28
|
|
|
38
29
|
## Completion
|
|
39
30
|
|
|
40
|
-
The
|
|
31
|
+
The visible inverse fails the intended assertion, restoration passes, and the final diff contains no proof mutation.
|
|
@@ -10,31 +10,22 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
## Use when
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
An implementation decision depends on external facts or behavior that varies by version.
|
|
14
14
|
|
|
15
15
|
## Process
|
|
16
16
|
|
|
17
|
-
1.
|
|
18
|
-
2.
|
|
19
|
-
3.
|
|
20
|
-
4.
|
|
21
|
-
5.
|
|
22
|
-
6. Compare the evidence with the repository's installed version and current code path.
|
|
23
|
-
7. Resolve disagreements by authority and applicability. State when the sources describe different versions or environments.
|
|
24
|
-
8. Write the conclusion beside links that directly support each consequential claim.
|
|
25
|
-
9. Translate the conclusion into the smallest implementation constraint the code needs.
|
|
17
|
+
1. State the decision as an answerable question. Record the project's relevant version, runtime, platform, and constraints.
|
|
18
|
+
2. Find the specification, official documentation, implementation, release note, or first-party issue that defines the behavior.
|
|
19
|
+
3. Open the exact source and check its version and date. Trace consequential claims back from summaries.
|
|
20
|
+
4. Compare the evidence with the installed version and code path. Explain disagreements caused by different environments or versions.
|
|
21
|
+
5. Give the conclusion with direct supporting links and the implementation constraint it creates.
|
|
26
22
|
|
|
27
23
|
## Guardrails
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
- Prefer current first-party sources for changing APIs and compatibility claims.
|
|
31
|
-
- Distinguish a documented guarantee from behavior inferred from source code.
|
|
32
|
-
- Mark an inference as an inference and name the observations it connects.
|
|
33
|
-
- Quote only the minimum words needed to preserve exact terminology.
|
|
34
|
-
- Keep credentials, private URLs, and captured user data out of research notes.
|
|
25
|
+
Search snippets are leads; read the underlying source. Distinguish documented guarantees from inferences and identify the observations supporting an inference.
|
|
35
26
|
|
|
36
|
-
|
|
27
|
+
Quote sparingly and keep credentials, private URLs, and captured user data out of research notes. If authoritative evidence is unavailable, state the unknown and contain it behind a reversible implementation choice.
|
|
37
28
|
|
|
38
29
|
## Completion
|
|
39
30
|
|
|
40
|
-
|
|
31
|
+
The question has a supported answer or an explicit unknown, and the resulting constraint is clear enough to implement.
|