@esbenwiberg/corpus-default 1.2.0 → 1.2.1
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/dist/probes/errors-actionability.d.ts.map +1 -1
- package/dist/probes/errors-actionability.js +132 -22
- package/dist/probes/errors-actionability.js.map +1 -1
- package/dist/probes/tests-agent-safe-command.d.ts.map +1 -1
- package/dist/probes/tests-agent-safe-command.js +92 -19
- package/dist/probes/tests-agent-safe-command.js.map +1 -1
- package/dist/probes/tests-cover-public-surface.d.ts.map +1 -1
- package/dist/probes/tests-cover-public-surface.js +93 -12
- package/dist/probes/tests-cover-public-surface.js.map +1 -1
- package/dist/probes/tests-deterministic.d.ts.map +1 -1
- package/dist/probes/tests-deterministic.js +59 -10
- package/dist/probes/tests-deterministic.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors-actionability.d.ts","sourceRoot":"","sources":["../../src/probes/errors-actionability.ts"],"names":[],"mappings":";AA+BA,
|
|
1
|
+
{"version":3,"file":"errors-actionability.d.ts","sourceRoot":"","sources":["../../src/probes/errors-actionability.ts"],"names":[],"mappings":";AA+BA,wBA2RG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineProbe } from "@esbenwiberg/repofit/sdk";
|
|
2
|
-
const PROBE_VERSION = "
|
|
2
|
+
const PROBE_VERSION = "2.0.0";
|
|
3
3
|
const MAX_INPUT_CHARS = 6_000;
|
|
4
4
|
const RUBRIC = {
|
|
5
5
|
task: "Judge whether the toolchain configured in this repo would produce error messages that help a coding agent fix problems — not just say 'something broke'.",
|
|
@@ -28,26 +28,30 @@ export default defineProbe({
|
|
|
28
28
|
version: PROBE_VERSION,
|
|
29
29
|
dimensions: [{ id: "feedback", weight: 1 }],
|
|
30
30
|
tier: "reasoned",
|
|
31
|
-
evidence: [
|
|
31
|
+
evidence: [
|
|
32
|
+
"node_package",
|
|
33
|
+
"python_project",
|
|
34
|
+
"dotnet_project",
|
|
35
|
+
"go_module",
|
|
36
|
+
"toolchain",
|
|
37
|
+
"files",
|
|
38
|
+
"judge",
|
|
39
|
+
],
|
|
32
40
|
rationale: `
|
|
33
41
|
When an agent makes a change and a script fails, the error message is
|
|
34
42
|
the only signal it has to act on. Tools that emit clear file:line
|
|
35
|
-
diagnostics (Biome, TSC strict, Vitest
|
|
36
|
-
tools run with --silent or homegrown shell
|
|
37
|
-
leave the agent guessing. This probe asks an LLM
|
|
38
|
-
toolchain — which tools are configured, how they're scripted,
|
|
39
|
-
whether common feedback loops are present — for diagnostic quality.
|
|
43
|
+
diagnostics (Biome, TSC strict, Vitest, pytest, mypy, ruff, dotnet, go)
|
|
44
|
+
let the agent self-correct; tools run with --silent or homegrown shell
|
|
45
|
+
scripts that just exit 1 leave the agent guessing. This probe asks an LLM
|
|
46
|
+
to judge the toolchain — which tools are configured, how they're scripted,
|
|
47
|
+
and whether common feedback loops are present — for diagnostic quality.
|
|
40
48
|
`,
|
|
41
49
|
remediation: "Use tools that emit file:line:col diagnostics (TSC strict, Biome, ESLint, Vitest, Pytest, rustc). Remove `--silent` / `--quiet` / `2>/dev/null` from scripts. Avoid parallel runners that interleave output during failure investigation. Wire up the full feedback loop: typecheck, lint, test, build — each with a clear script name.",
|
|
42
50
|
async detect(ev) {
|
|
43
|
-
if (!ev.node_package.present) {
|
|
44
|
-
return { kind: "na", reason: "no package.json" };
|
|
45
|
-
}
|
|
46
|
-
const scripts = ev.node_package.scripts;
|
|
47
|
-
if (Object.keys(scripts).length === 0) {
|
|
48
|
-
return { kind: "na", reason: "package.json has no scripts" };
|
|
51
|
+
if (!ev.toolchain.primary && !ev.node_package.present) {
|
|
52
|
+
return { kind: "na", reason: "no supported stack or package.json scripts" };
|
|
49
53
|
}
|
|
50
|
-
const
|
|
54
|
+
const nodeConfigs = [
|
|
51
55
|
"tsconfig.json",
|
|
52
56
|
"biome.json",
|
|
53
57
|
"biome.jsonc",
|
|
@@ -63,12 +67,51 @@ export default defineProbe({
|
|
|
63
67
|
".prettierrc",
|
|
64
68
|
"prettier.config.js",
|
|
65
69
|
];
|
|
66
|
-
const
|
|
67
|
-
const
|
|
70
|
+
const presentNodeConfigs = nodeConfigs.filter((p) => ev.files.has(p));
|
|
71
|
+
const pythonConfigs = [
|
|
72
|
+
ev.python_project.pyproject?.path,
|
|
73
|
+
...(ev.python_project.configFiles ?? []),
|
|
74
|
+
].filter((p) => typeof p === "string" && p.length > 0);
|
|
75
|
+
const dotnetConfigs = [
|
|
76
|
+
...ev.dotnet_project.solutions,
|
|
77
|
+
...ev.dotnet_project.projects.map((p) => p.path),
|
|
78
|
+
ev.dotnet_project.centralPackageManagement?.path,
|
|
79
|
+
].filter((p) => typeof p === "string" && p.length > 0);
|
|
80
|
+
const goConfigs = ev.go_module.modules.map((m) => m.path);
|
|
81
|
+
const lines = ["# supported stacks", ""];
|
|
82
|
+
lines.push(`primary: ${ev.toolchain.primary ?? "(none)"}`);
|
|
83
|
+
lines.push(`detected: ${ev.toolchain.stacks.length === 0 ? "(none)" : ev.toolchain.stacks.join(", ")}`);
|
|
84
|
+
lines.push("", "# resolved toolchain commands", "");
|
|
85
|
+
let commandCount = 0;
|
|
86
|
+
for (const [phase, cmd] of Object.entries(ev.toolchain.commands)) {
|
|
87
|
+
if (!cmd)
|
|
88
|
+
continue;
|
|
89
|
+
commandCount += 1;
|
|
90
|
+
lines.push(`${phase}: ${cmd.argv.join(" ")} (${cmd.source})`);
|
|
91
|
+
}
|
|
92
|
+
const scripts = ev.node_package.scripts;
|
|
93
|
+
const scriptEntries = Object.entries(scripts);
|
|
94
|
+
lines.push("", "# package.json scripts", "");
|
|
95
|
+
if (!ev.node_package.present) {
|
|
96
|
+
lines.push("(no package.json)");
|
|
97
|
+
}
|
|
98
|
+
else if (scriptEntries.length === 0) {
|
|
99
|
+
lines.push("(none detected)");
|
|
100
|
+
}
|
|
68
101
|
for (const [name, body] of Object.entries(scripts)) {
|
|
102
|
+
commandCount += 1;
|
|
69
103
|
lines.push(`${name}: ${shortString(body)}`);
|
|
70
104
|
}
|
|
105
|
+
if (commandCount === 0) {
|
|
106
|
+
return { kind: "na", reason: "no toolchain commands configured" };
|
|
107
|
+
}
|
|
71
108
|
lines.push("", "# tool configs present", "");
|
|
109
|
+
const presentConfigs = [
|
|
110
|
+
...presentNodeConfigs,
|
|
111
|
+
...pythonConfigs,
|
|
112
|
+
...dotnetConfigs,
|
|
113
|
+
...goConfigs,
|
|
114
|
+
];
|
|
72
115
|
lines.push(presentConfigs.length === 0 ? "(none detected)" : presentConfigs.join("\n"));
|
|
73
116
|
const deps = Object.keys({
|
|
74
117
|
...(ev.node_package.dependencies ?? {}),
|
|
@@ -76,7 +119,11 @@ export default defineProbe({
|
|
|
76
119
|
});
|
|
77
120
|
const toolDeps = deps.filter((d) => /^(?:@biomejs|biome|eslint|prettier|typescript|vitest|jest|mocha|tsx|tsc|tap)\b/.test(d));
|
|
78
121
|
lines.push("", "# tool-related dependencies", "");
|
|
79
|
-
lines.push(
|
|
122
|
+
lines.push([
|
|
123
|
+
...toolDeps.sort(),
|
|
124
|
+
...(ev.python_project.pyproject?.toolHints ?? []),
|
|
125
|
+
...(ev.python_project.requirementsToolHints ?? []),
|
|
126
|
+
].join("\n") || "(none detected)");
|
|
80
127
|
const input = lines.join("\n").slice(0, MAX_INPUT_CHARS);
|
|
81
128
|
const result = await ev.judge.score({
|
|
82
129
|
probeId: "errors.actionability",
|
|
@@ -95,16 +142,20 @@ export default defineProbe({
|
|
|
95
142
|
score: { kind: "judge" },
|
|
96
143
|
fixtures: [
|
|
97
144
|
{
|
|
98
|
-
name: "no-
|
|
99
|
-
evidence: { node_package: { present: false } },
|
|
100
|
-
expect: {
|
|
145
|
+
name: "no-supported-stack",
|
|
146
|
+
evidence: { node_package: { present: false }, toolchain: { primary: null } },
|
|
147
|
+
expect: {
|
|
148
|
+
reading: { kind: "na", reason: "no supported stack or package.json scripts" },
|
|
149
|
+
score: null,
|
|
150
|
+
},
|
|
101
151
|
},
|
|
102
152
|
{
|
|
103
|
-
name: "empty-
|
|
153
|
+
name: "empty-toolchain",
|
|
104
154
|
evidence: {
|
|
105
155
|
node_package: { present: true, scripts: {} },
|
|
156
|
+
toolchain: { stacks: ["node"], primary: "node", commands: {} },
|
|
106
157
|
},
|
|
107
|
-
expect: { reading: { kind: "na", reason: "
|
|
158
|
+
expect: { reading: { kind: "na", reason: "no toolchain commands configured" }, score: null },
|
|
108
159
|
},
|
|
109
160
|
{
|
|
110
161
|
name: "strong-toolchain",
|
|
@@ -114,6 +165,15 @@ export default defineProbe({
|
|
|
114
165
|
scripts: { typecheck: "tsc --noEmit", lint: "biome check .", test: "vitest run" },
|
|
115
166
|
devDependencies: { typescript: "^5", "@biomejs/biome": "^2", vitest: "^4" },
|
|
116
167
|
},
|
|
168
|
+
toolchain: {
|
|
169
|
+
stacks: ["node"],
|
|
170
|
+
primary: "node",
|
|
171
|
+
commands: {
|
|
172
|
+
typecheck: { source: "node", argv: ["npm", "run", "typecheck", "--silent"] },
|
|
173
|
+
lint: { source: "node", argv: ["npm", "run", "lint", "--silent"] },
|
|
174
|
+
test: { source: "node", argv: ["npm", "test", "--silent"] },
|
|
175
|
+
},
|
|
176
|
+
},
|
|
117
177
|
files: ["tsconfig.json", "biome.json", "vitest.config.ts"],
|
|
118
178
|
judge: {
|
|
119
179
|
score: 80,
|
|
@@ -141,6 +201,56 @@ export default defineProbe({
|
|
|
141
201
|
score: 80,
|
|
142
202
|
},
|
|
143
203
|
},
|
|
204
|
+
{
|
|
205
|
+
name: "strong-python-toolchain",
|
|
206
|
+
evidence: {
|
|
207
|
+
python_project: {
|
|
208
|
+
present: true,
|
|
209
|
+
pyproject: {
|
|
210
|
+
path: "pyproject.toml",
|
|
211
|
+
hasBuildSystem: true,
|
|
212
|
+
tools: ["mypy", "pytest", "ruff"],
|
|
213
|
+
toolHints: ["mypy", "pytest", "ruff"],
|
|
214
|
+
},
|
|
215
|
+
configFiles: ["pytest.ini"],
|
|
216
|
+
},
|
|
217
|
+
toolchain: {
|
|
218
|
+
stacks: ["python"],
|
|
219
|
+
primary: "python",
|
|
220
|
+
commands: {
|
|
221
|
+
build: { source: "python", argv: ["python", "-m", "build"] },
|
|
222
|
+
typecheck: { source: "python", argv: ["mypy", "."] },
|
|
223
|
+
lint: { source: "python", argv: ["ruff", "check", "."] },
|
|
224
|
+
test: { source: "python", argv: ["pytest"] },
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
files: ["pyproject.toml", "pytest.ini"],
|
|
228
|
+
judge: {
|
|
229
|
+
score: 80,
|
|
230
|
+
perCriterion: {
|
|
231
|
+
"tool-clarity": 80,
|
|
232
|
+
"output-discipline": 80,
|
|
233
|
+
"feedback-loop-coverage": 80,
|
|
234
|
+
},
|
|
235
|
+
rationale: "Pytest, Ruff, mypy, and python -m build provide clear diagnostics.",
|
|
236
|
+
model: "fixture",
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
expect: {
|
|
240
|
+
reading: {
|
|
241
|
+
kind: "judge",
|
|
242
|
+
score: 80,
|
|
243
|
+
perCriterion: {
|
|
244
|
+
"tool-clarity": 80,
|
|
245
|
+
"output-discipline": 80,
|
|
246
|
+
"feedback-loop-coverage": 80,
|
|
247
|
+
},
|
|
248
|
+
rationale: "Pytest, Ruff, mypy, and python -m build provide clear diagnostics.",
|
|
249
|
+
model: "fixture",
|
|
250
|
+
},
|
|
251
|
+
score: 80,
|
|
252
|
+
},
|
|
253
|
+
},
|
|
144
254
|
{
|
|
145
255
|
name: "opaque-scripts",
|
|
146
256
|
evidence: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors-actionability.js","sourceRoot":"","sources":["../../src/probes/errors-actionability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,aAAa,GAAG,OAAO,CAAC;AAC9B,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,0JAA0J;IAChK,QAAQ,EAAE;QACR;YACE,EAAE,EAAE,cAAc;YAClB,WAAW,EACT,+TAA+T;SAClU;QACD;YACE,EAAE,EAAE,mBAAmB;YACvB,WAAW,EACT,oRAAoR;SACvR;QACD;YACE,EAAE,EAAE,wBAAwB;YAC5B,WAAW,EACT,wRAAwR;SAC3R;KACF;CACO,CAAC;AAEX,SAAS,WAAW,CAAC,CAAU;IAC7B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACtC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,eAAe,WAAW,CAAC;IACzB,EAAE,EAAE,sBAAsB;IAC1B,OAAO,EAAE,aAAa;IACtB,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC3C,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"errors-actionability.js","sourceRoot":"","sources":["../../src/probes/errors-actionability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests-agent-safe-command.d.ts","sourceRoot":"","sources":["../../src/probes/tests-agent-safe-command.ts"],"names":[],"mappings":";AAMA,
|
|
1
|
+
{"version":3,"file":"tests-agent-safe-command.d.ts","sourceRoot":"","sources":["../../src/probes/tests-agent-safe-command.ts"],"names":[],"mappings":";AAMA,wBAoKG"}
|
|
@@ -3,33 +3,53 @@ const AGENT_SAFE_TEST_SCRIPTS = ["test:agent", "test:unit", "test:smoke", "test:
|
|
|
3
3
|
const E2E_TEST_HINT = /\b(playwright|cypress|testcafe|webdriver|selenium|detox|e2e)\b/i;
|
|
4
4
|
export default defineProbe({
|
|
5
5
|
id: "tests.agent-safe-command",
|
|
6
|
-
version: "
|
|
6
|
+
version: "2.0.0",
|
|
7
7
|
dimensions: [
|
|
8
8
|
{ id: "feedback", weight: 1 },
|
|
9
9
|
{ id: "latency", weight: 0.5 },
|
|
10
10
|
],
|
|
11
11
|
tier: "static",
|
|
12
|
-
evidence: ["node_package"],
|
|
12
|
+
evidence: ["node_package", "toolchain"],
|
|
13
13
|
rationale: `
|
|
14
14
|
Executed probes should not surprise a repo by running hundreds of browser
|
|
15
|
-
tests.
|
|
16
|
-
|
|
17
|
-
test
|
|
15
|
+
tests. Repofit resolves one test command for the primary stack (Node,
|
|
16
|
+
Python, .NET, or Go). For Node projects it prefers fast agent-safe scripts
|
|
17
|
+
(test:agent, test:unit, test:smoke, test:fast) before npm test. If the
|
|
18
|
+
resolved command looks e2e-heavy, this probe asks the repo to expose a
|
|
18
19
|
smaller verification command or configure toolchain.commands.test.
|
|
19
20
|
`,
|
|
20
|
-
remediation: "
|
|
21
|
+
remediation: "Expose a fast verification command for the primary stack. Node: add `test:agent`, `test:unit`, `test:smoke`, or `test:fast`, and keep full browser/e2e suites under `test:e2e` or an explicit CI-only command. Python/.NET/Go: keep the default test command focused on the fast suite, or set `toolchain.commands.test` in `repofit.config.json` to the exact command repofit should run in executed mode.",
|
|
21
22
|
async detect(ev) {
|
|
22
|
-
if (!ev.
|
|
23
|
-
return { kind: "na", reason: "no
|
|
24
|
-
const scripts = ev.node_package.scripts ?? {};
|
|
25
|
-
const hasSafe = AGENT_SAFE_TEST_SCRIPTS.some((script) => hasScript(scripts, script));
|
|
26
|
-
const test = scripts.test ?? "";
|
|
23
|
+
if (!ev.toolchain.primary)
|
|
24
|
+
return { kind: "na", reason: "no supported primary stack" };
|
|
27
25
|
const items = [];
|
|
28
|
-
|
|
26
|
+
const resolvedTest = ev.toolchain.commands.test;
|
|
27
|
+
if (!resolvedTest) {
|
|
29
28
|
items.push({
|
|
30
|
-
location: { path: "
|
|
29
|
+
location: { path: "repofit.config.json#toolchain.commands.test" },
|
|
31
30
|
severity: "warn",
|
|
32
|
-
message: "
|
|
31
|
+
message: "no fast test command resolved for the primary stack",
|
|
32
|
+
});
|
|
33
|
+
return { kind: "inventory", items };
|
|
34
|
+
}
|
|
35
|
+
if (ev.toolchain.primary === "node") {
|
|
36
|
+
const scripts = ev.node_package.scripts ?? {};
|
|
37
|
+
const hasSafe = AGENT_SAFE_TEST_SCRIPTS.some((script) => hasScript(scripts, script));
|
|
38
|
+
const test = scripts.test ?? "";
|
|
39
|
+
if (!hasSafe && E2E_TEST_HINT.test(test)) {
|
|
40
|
+
items.push({
|
|
41
|
+
location: { path: "package.json#scripts.test" },
|
|
42
|
+
severity: "warn",
|
|
43
|
+
message: "npm test looks e2e-heavy; add test:agent/test:unit/test:smoke or configure toolchain.commands.test",
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const argvText = resolvedTest.argv.join(" ");
|
|
48
|
+
if (resolvedTest.source !== "node" && E2E_TEST_HINT.test(argvText)) {
|
|
49
|
+
items.push({
|
|
50
|
+
location: { path: "repofit.config.json#toolchain.commands.test" },
|
|
51
|
+
severity: "warn",
|
|
52
|
+
message: "resolved test command looks e2e-heavy; configure toolchain.commands.test with a faster suite",
|
|
33
53
|
});
|
|
34
54
|
}
|
|
35
55
|
return { kind: "inventory", items };
|
|
@@ -41,13 +61,52 @@ export default defineProbe({
|
|
|
41
61
|
},
|
|
42
62
|
fixtures: [
|
|
43
63
|
{
|
|
44
|
-
name: "no-
|
|
45
|
-
evidence: {
|
|
46
|
-
expect: { reading: { kind: "na", reason: "no
|
|
64
|
+
name: "no-supported-stack",
|
|
65
|
+
evidence: { toolchain: { primary: null } },
|
|
66
|
+
expect: { reading: { kind: "na", reason: "no supported primary stack" }, score: null },
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "python-pytest-is-safe",
|
|
70
|
+
evidence: {
|
|
71
|
+
toolchain: {
|
|
72
|
+
stacks: ["python"],
|
|
73
|
+
primary: "python",
|
|
74
|
+
commands: { test: { source: "python", argv: ["pytest"] } },
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
expect: { reading: { kind: "inventory", items: [] }, score: 100 },
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: "primary-stack-without-test-command",
|
|
81
|
+
evidence: {
|
|
82
|
+
toolchain: {
|
|
83
|
+
stacks: ["python"],
|
|
84
|
+
primary: "python",
|
|
85
|
+
commands: { test: null },
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
expect: {
|
|
89
|
+
reading: {
|
|
90
|
+
kind: "inventory",
|
|
91
|
+
items: [
|
|
92
|
+
{
|
|
93
|
+
location: { path: "repofit.config.json#toolchain.commands.test" },
|
|
94
|
+
severity: "warn",
|
|
95
|
+
message: "no fast test command resolved for the primary stack",
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
score: 70,
|
|
100
|
+
},
|
|
47
101
|
},
|
|
48
102
|
{
|
|
49
103
|
name: "safe-test-script-present",
|
|
50
104
|
evidence: {
|
|
105
|
+
toolchain: {
|
|
106
|
+
stacks: ["node"],
|
|
107
|
+
primary: "node",
|
|
108
|
+
commands: { test: { source: "node", argv: ["npm", "run", "test:agent", "--silent"] } },
|
|
109
|
+
},
|
|
51
110
|
node_package: {
|
|
52
111
|
present: true,
|
|
53
112
|
scripts: { test: "playwright test", "test:agent": "vitest run" },
|
|
@@ -57,12 +116,26 @@ export default defineProbe({
|
|
|
57
116
|
},
|
|
58
117
|
{
|
|
59
118
|
name: "normal-npm-test",
|
|
60
|
-
evidence: {
|
|
119
|
+
evidence: {
|
|
120
|
+
toolchain: {
|
|
121
|
+
stacks: ["node"],
|
|
122
|
+
primary: "node",
|
|
123
|
+
commands: { test: { source: "node", argv: ["npm", "test", "--silent"] } },
|
|
124
|
+
},
|
|
125
|
+
node_package: { present: true, scripts: { test: "vitest run" } },
|
|
126
|
+
},
|
|
61
127
|
expect: { reading: { kind: "inventory", items: [] }, score: 100 },
|
|
62
128
|
},
|
|
63
129
|
{
|
|
64
130
|
name: "e2e-only-npm-test",
|
|
65
|
-
evidence: {
|
|
131
|
+
evidence: {
|
|
132
|
+
toolchain: {
|
|
133
|
+
stacks: ["node"],
|
|
134
|
+
primary: "node",
|
|
135
|
+
commands: { test: { source: "node", argv: ["npm", "test", "--silent"] } },
|
|
136
|
+
},
|
|
137
|
+
node_package: { present: true, scripts: { test: "playwright test" } },
|
|
138
|
+
},
|
|
66
139
|
expect: {
|
|
67
140
|
reading: {
|
|
68
141
|
kind: "inventory",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests-agent-safe-command.js","sourceRoot":"","sources":["../../src/probes/tests-agent-safe-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,uBAAuB,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAU,CAAC;AAChG,MAAM,aAAa,GAAG,iEAAiE,CAAC;AAExF,eAAe,WAAW,CAAC;IACzB,EAAE,EAAE,0BAA0B;IAC9B,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;QAC7B,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;KAC/B;IACD,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"tests-agent-safe-command.js","sourceRoot":"","sources":["../../src/probes/tests-agent-safe-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests-cover-public-surface.d.ts","sourceRoot":"","sources":["../../src/probes/tests-cover-public-surface.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"tests-cover-public-surface.d.ts","sourceRoot":"","sources":["../../src/probes/tests-cover-public-surface.ts"],"names":[],"mappings":";AAuGA,wBA8LG"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { defineProbe } from "@esbenwiberg/repofit/sdk";
|
|
2
|
-
const PROBE_VERSION = "
|
|
2
|
+
const PROBE_VERSION = "2.0.0";
|
|
3
3
|
const MAX_SOURCE_FILES = 30;
|
|
4
4
|
const MAX_TEST_FILES = 30;
|
|
5
5
|
const MAX_INPUT_CHARS = 12_000;
|
|
6
|
-
const TEST_FILE = /(?:\.test\.|\.spec\.|__tests__|^tests
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const IMPORT_LINE = /^\s*import\s.+?from\s+["'][^"']+["']/m;
|
|
10
|
-
const SOURCE_FILE = /\.(?:ts|tsx|js|mjs|cjs)$/;
|
|
11
|
-
const SKIP_DIRS = /(?:^|\/)(?:node_modules|dist|build|coverage|\.next|\.nuxt|out)\//;
|
|
6
|
+
const TEST_FILE = /(?:\.test\.|\.spec\.|__tests__|^tests?\/|(?:^|\/)test_[^/]+\.py$|(?:^|\/)[^/]+_test\.go$|(?:^|\/)[^/]+Tests?\.cs$)/i;
|
|
7
|
+
const SOURCE_FILE = /\.(?:ts|tsx|js|jsx|mjs|cjs|py|cs|go)$/i;
|
|
8
|
+
const SKIP_DIRS = /(?:^|\/)(?:node_modules|dist|build|coverage|\.next|\.nuxt|out|\.venv|venv|__pycache__|bin|obj)\//;
|
|
12
9
|
const RUBRIC = {
|
|
13
|
-
task: "Judge whether the test suite meaningfully covers this project's public surface — the
|
|
10
|
+
task: "Judge whether the test suite meaningfully covers this project's public surface — the exported/public functions, classes, types, and packages an agent would likely modify — based on what tests import or reference.",
|
|
14
11
|
criteria: [
|
|
15
12
|
{
|
|
16
13
|
id: "surface-named",
|
|
17
|
-
description: "Do the project's
|
|
14
|
+
description: "Do the project's public symbols (JS/TS exports, Python top-level public defs/classes, Go exported identifiers, .NET public types/members) appear by name in test imports or references? Tests that only run main entry points without reference to specific public symbols score low.",
|
|
18
15
|
},
|
|
19
16
|
{
|
|
20
17
|
id: "breadth",
|
|
@@ -34,6 +31,56 @@ function extract(text, pattern) {
|
|
|
34
31
|
}
|
|
35
32
|
return out;
|
|
36
33
|
}
|
|
34
|
+
function extractPublicSurface(path, text) {
|
|
35
|
+
if (/\.(?:ts|tsx|js|jsx|mjs|cjs)$/i.test(path)) {
|
|
36
|
+
return [
|
|
37
|
+
...extract(text, /^\s*export\s+(?:(?:async\s+)?function|class|const|let|var|interface|type|enum|default)\s+\w+/),
|
|
38
|
+
...extract(text, /^\s*export\s*\{[^}]+\}/),
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
if (/\.py$/i.test(path)) {
|
|
42
|
+
return [
|
|
43
|
+
...extract(text, /^(?:async\s+)?def\s+[A-Za-z]\w*\s*\(/),
|
|
44
|
+
...extract(text, /^class\s+[A-Za-z]\w*\b/),
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
if (/\.go$/i.test(path)) {
|
|
48
|
+
return [
|
|
49
|
+
...extract(text, /^func\s+(?:\([^)]*\)\s*)?[A-Z]\w*\s*\(/),
|
|
50
|
+
...extract(text, /^type\s+[A-Z]\w*\b/),
|
|
51
|
+
...extract(text, /^var\s+[A-Z]\w*\b/),
|
|
52
|
+
...extract(text, /^const\s+[A-Z]\w*\b/),
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
if (/\.cs$/i.test(path)) {
|
|
56
|
+
return [
|
|
57
|
+
...extract(text, /^\s*public\s+(?:sealed\s+|abstract\s+|static\s+|partial\s+)*(?:class|record|interface|enum|struct)\s+\w+/),
|
|
58
|
+
...extract(text, /^\s*public\s+(?:static\s+|virtual\s+|override\s+|async\s+)*[\w<>[\],.?]+\s+\w+\s*\(/),
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
function extractTestReferences(path, text) {
|
|
64
|
+
if (/\.(?:ts|tsx|js|jsx|mjs|cjs)$/i.test(path)) {
|
|
65
|
+
return extract(text, /^\s*import\s.+?from\s+["'][^"']+["']/);
|
|
66
|
+
}
|
|
67
|
+
if (/\.py$/i.test(path)) {
|
|
68
|
+
return [
|
|
69
|
+
...extract(text, /^\s*from\s+[A-Za-z_][\w.]*\s+import\s+.+/),
|
|
70
|
+
...extract(text, /^\s*import\s+[A-Za-z_][\w.]*(?:\s+as\s+\w+)?/),
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
if (/\.go$/i.test(path)) {
|
|
74
|
+
return [
|
|
75
|
+
...extract(text, /^\s*import\s+(?:\w+\s+)?".+"/),
|
|
76
|
+
...extract(text, /^\s*(?:\w+\s+)?".+"$/),
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
if (/\.cs$/i.test(path)) {
|
|
80
|
+
return extract(text, /^\s*using\s+[\w.]+;/);
|
|
81
|
+
}
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
37
84
|
export default defineProbe({
|
|
38
85
|
id: "tests.cover-public-surface",
|
|
39
86
|
version: PROBE_VERSION,
|
|
@@ -73,7 +120,7 @@ export default defineProbe({
|
|
|
73
120
|
const text = await ev.files.readText(p);
|
|
74
121
|
if (!text)
|
|
75
122
|
continue;
|
|
76
|
-
const lines =
|
|
123
|
+
const lines = extractPublicSurface(p, text);
|
|
77
124
|
for (const l of lines)
|
|
78
125
|
exportLines.push(`${p}: ${l}`);
|
|
79
126
|
}
|
|
@@ -83,7 +130,7 @@ export default defineProbe({
|
|
|
83
130
|
const text = await ev.files.readText(p);
|
|
84
131
|
if (!text)
|
|
85
132
|
continue;
|
|
86
|
-
const lines =
|
|
133
|
+
const lines = extractTestReferences(p, text);
|
|
87
134
|
for (const l of lines)
|
|
88
135
|
importLines.push(`${p}: ${l}`);
|
|
89
136
|
}
|
|
@@ -91,7 +138,7 @@ export default defineProbe({
|
|
|
91
138
|
return { kind: "na", reason: "no exports or test imports could be extracted" };
|
|
92
139
|
}
|
|
93
140
|
const inputParts = [];
|
|
94
|
-
inputParts.push(`# Project shape`, `${sourcePaths.length} source files, ${testPaths.length} test files`, `(showing exports from up to ${MAX_SOURCE_FILES} sources, imports from up to ${MAX_TEST_FILES} tests)`, "", "# Test file paths", testsToScan.join("\n"), "", "#
|
|
141
|
+
inputParts.push(`# Project shape`, `${sourcePaths.length} source files, ${testPaths.length} test files`, `(showing exports from up to ${MAX_SOURCE_FILES} sources, imports from up to ${MAX_TEST_FILES} tests)`, "", "# Test file paths", testsToScan.join("\n"), "", "# Public surface from source files", exportLines.join("\n"), "", "# Imports/references inside test files", importLines.join("\n"));
|
|
95
142
|
const input = inputParts.join("\n").slice(0, MAX_INPUT_CHARS);
|
|
96
143
|
const result = await ev.judge.score({
|
|
97
144
|
probeId: "tests.cover-public-surface",
|
|
@@ -167,6 +214,40 @@ export default defineProbe({
|
|
|
167
214
|
score: 80,
|
|
168
215
|
},
|
|
169
216
|
},
|
|
217
|
+
{
|
|
218
|
+
name: "python-public-surface",
|
|
219
|
+
evidence: {
|
|
220
|
+
size_stats: {
|
|
221
|
+
source: "git-ls-files",
|
|
222
|
+
totalBytes: 200,
|
|
223
|
+
totalFiles: 2,
|
|
224
|
+
files: [
|
|
225
|
+
{ path: "src/demo/scoring.py", bytes: 100, lines: 10, depth: 2 },
|
|
226
|
+
{ path: "tests/test_scoring.py", bytes: 100, lines: 10, depth: 1 },
|
|
227
|
+
],
|
|
228
|
+
},
|
|
229
|
+
files: {
|
|
230
|
+
"src/demo/scoring.py": "def score(value: int) -> int:\n return value * 2\n",
|
|
231
|
+
"tests/test_scoring.py": "from demo.scoring import score\n\ndef test_score():\n assert score(2) == 4\n",
|
|
232
|
+
},
|
|
233
|
+
judge: {
|
|
234
|
+
score: 80,
|
|
235
|
+
perCriterion: { "surface-named": 80, breadth: 80, discoverability: 80 },
|
|
236
|
+
rationale: "Python public function imported by name from mirrored tests.",
|
|
237
|
+
model: "fixture",
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
expect: {
|
|
241
|
+
reading: {
|
|
242
|
+
kind: "judge",
|
|
243
|
+
score: 80,
|
|
244
|
+
perCriterion: { "surface-named": 80, breadth: 80, discoverability: 80 },
|
|
245
|
+
rationale: "Python public function imported by name from mirrored tests.",
|
|
246
|
+
model: "fixture",
|
|
247
|
+
},
|
|
248
|
+
score: 80,
|
|
249
|
+
},
|
|
250
|
+
},
|
|
170
251
|
],
|
|
171
252
|
});
|
|
172
253
|
//# sourceMappingURL=tests-cover-public-surface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests-cover-public-surface.js","sourceRoot":"","sources":["../../src/probes/tests-cover-public-surface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,aAAa,GAAG,OAAO,CAAC;AAC9B,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"tests-cover-public-surface.js","sourceRoot":"","sources":["../../src/probes/tests-cover-public-surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests-deterministic.d.ts","sourceRoot":"","sources":["../../src/probes/tests-deterministic.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"tests-deterministic.d.ts","sourceRoot":"","sources":["../../src/probes/tests-deterministic.ts"],"names":[],"mappings":";AAsDA,wBA2KG"}
|
|
@@ -2,34 +2,40 @@ import { defineProbe } from "@esbenwiberg/repofit/sdk";
|
|
|
2
2
|
const TEST_FILE = /(?:\.test\.|\.spec\.|__tests__|^tests?\/|^e2e\/)/i;
|
|
3
3
|
const SOURCE_FILE = /\.(?:ts|tsx|js|jsx|mjs|cjs|py|cs|go|rs|java|kt)$/i;
|
|
4
4
|
const SKIP_DIRS = /(?:^|\/)(?:node_modules|dist|build|coverage|\.next|\.nuxt|out|target|bin|obj)\//;
|
|
5
|
+
const WALL_CLOCK_TIME = [
|
|
6
|
+
/\bDate\.now\s*\(/,
|
|
7
|
+
/\bnew\s+Date\s*\(\s*\)/,
|
|
8
|
+
/\btime\.time\s*\(/,
|
|
9
|
+
/\bInstant\.now\s*\(/,
|
|
10
|
+
];
|
|
5
11
|
const FLAKE_PATTERNS = [
|
|
6
12
|
{
|
|
7
|
-
|
|
13
|
+
matches: (line) => /\b(?:test|it|describe)\.only\s*\(/.test(line),
|
|
8
14
|
severity: "error",
|
|
9
15
|
message: "commits a focused-only test",
|
|
10
16
|
},
|
|
11
17
|
{
|
|
12
|
-
|
|
18
|
+
matches: (line) => /\b(?:test|it|describe)\.skip\s*\(/.test(line),
|
|
13
19
|
severity: "warn",
|
|
14
20
|
message: "skips a test without an executable signal",
|
|
15
21
|
},
|
|
16
22
|
{
|
|
17
|
-
|
|
23
|
+
matches: (line) => /\bMath\.random\s*\(|\brandomUUID\s*\(|\brandint\s*\(|\brandom\.\w+\s*\(/.test(line),
|
|
18
24
|
severity: "warn",
|
|
19
25
|
message: "uses randomness without an obvious seed",
|
|
20
26
|
},
|
|
21
27
|
{
|
|
22
|
-
|
|
28
|
+
matches: (line) => WALL_CLOCK_TIME.some((pattern) => pattern.test(line)),
|
|
23
29
|
severity: "warn",
|
|
24
30
|
message: "depends on wall-clock time",
|
|
25
31
|
},
|
|
26
32
|
{
|
|
27
|
-
|
|
33
|
+
matches: (line) => /\bsetTimeout\s*\([^,]+,\s*(?:[1-9]\d{2,}|[1-9]\d{3,})|\bwaitForTimeout\s*\(/.test(line),
|
|
28
34
|
severity: "warn",
|
|
29
35
|
message: "uses fixed sleeps instead of waiting on a condition",
|
|
30
36
|
},
|
|
31
37
|
{
|
|
32
|
-
|
|
38
|
+
matches: (line) => /\bfetch\s*\(\s*["'`]https?:\/\/|\baxios\.\w+\s*\(\s*["'`]https?:\/\//.test(line),
|
|
33
39
|
severity: "warn",
|
|
34
40
|
message: "calls an external network endpoint from a test",
|
|
35
41
|
},
|
|
@@ -48,9 +54,10 @@ export default defineProbe({
|
|
|
48
54
|
the last change broke behavior. This static probe avoids running large
|
|
49
55
|
suites and instead flags common flake smells in test files: focused tests,
|
|
50
56
|
skips, unseeded randomness, wall-clock time, fixed sleeps, and live
|
|
51
|
-
external network calls.
|
|
57
|
+
external network calls. Fixed date literals are allowed; ambient clock
|
|
58
|
+
reads should be injected, frozen, or otherwise made explicit.
|
|
52
59
|
`,
|
|
53
|
-
remediation: "Remove focused tests before committing, turn skips into tracked TODOs, seed randomness, inject clocks, replace fixed sleeps with condition waits, and mock or record external network calls. Deterministic failures are the currency agents can spend.",
|
|
60
|
+
remediation: "Remove focused tests before committing, turn skips into tracked TODOs, seed randomness, inject or freeze clocks for ambient time, replace fixed sleeps with condition waits, and mock or record external network calls. Deterministic failures are the currency agents can spend.",
|
|
54
61
|
async detect(ev) {
|
|
55
62
|
const testPaths = ev.size_stats.files
|
|
56
63
|
.map((f) => f.path)
|
|
@@ -67,8 +74,8 @@ export default defineProbe({
|
|
|
67
74
|
const lines = text.split(/\n/);
|
|
68
75
|
for (let i = 0; i < lines.length; i += 1) {
|
|
69
76
|
const line = lines[i] ?? "";
|
|
70
|
-
for (const {
|
|
71
|
-
if (
|
|
77
|
+
for (const { matches, severity, message } of FLAKE_PATTERNS) {
|
|
78
|
+
if (matches(line)) {
|
|
72
79
|
items.push({
|
|
73
80
|
location: { path, range: { startLine: i + 1 } },
|
|
74
81
|
severity,
|
|
@@ -150,6 +157,48 @@ export default defineProbe({
|
|
|
150
157
|
score: 0,
|
|
151
158
|
},
|
|
152
159
|
},
|
|
160
|
+
{
|
|
161
|
+
name: "fixed-date-literals",
|
|
162
|
+
evidence: {
|
|
163
|
+
files: {
|
|
164
|
+
"src/date-range.test.ts": 'test("formats fixed fiscal dates", () => {\n expect(formatRange(new Date("2026-05-21T00:00:00.000Z"), new Date(2026, 4, 22))).toBe("May 21-22, 2026");\n});\n',
|
|
165
|
+
},
|
|
166
|
+
size_stats: {
|
|
167
|
+
source: "git-ls-files",
|
|
168
|
+
totalBytes: 190,
|
|
169
|
+
totalFiles: 1,
|
|
170
|
+
files: [{ path: "src/date-range.test.ts", bytes: 190, lines: 3, depth: 1 }],
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
expect: { reading: { kind: "inventory", items: [] }, score: 100 },
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: "ambient-date-constructor",
|
|
177
|
+
evidence: {
|
|
178
|
+
files: {
|
|
179
|
+
"src/cache.test.ts": 'test("marks entries as fresh", () => {\n expect(isFresh(new Date(), ttl)).toBe(true);\n});\n',
|
|
180
|
+
},
|
|
181
|
+
size_stats: {
|
|
182
|
+
source: "git-ls-files",
|
|
183
|
+
totalBytes: 100,
|
|
184
|
+
totalFiles: 1,
|
|
185
|
+
files: [{ path: "src/cache.test.ts", bytes: 100, lines: 3, depth: 1 }],
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
expect: {
|
|
189
|
+
reading: {
|
|
190
|
+
kind: "inventory",
|
|
191
|
+
items: [
|
|
192
|
+
{
|
|
193
|
+
location: { path: "src/cache.test.ts", range: { startLine: 2 } },
|
|
194
|
+
severity: "warn",
|
|
195
|
+
message: "depends on wall-clock time",
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
},
|
|
199
|
+
score: 80,
|
|
200
|
+
},
|
|
201
|
+
},
|
|
153
202
|
],
|
|
154
203
|
});
|
|
155
204
|
//# sourceMappingURL=tests-deterministic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests-deterministic.js","sourceRoot":"","sources":["../../src/probes/tests-deterministic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,SAAS,GAAG,mDAAmD,CAAC;AACtE,MAAM,WAAW,GAAG,mDAAmD,CAAC;AACxE,MAAM,SAAS,GAAG,iFAAiF,CAAC;AAEpG,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"tests-deterministic.js","sourceRoot":"","sources":["../../src/probes/tests-deterministic.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esbenwiberg/corpus-default",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Default probe corpus for repofit.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -25,6 +25,6 @@
|
|
|
25
25
|
"@types/node": "^22.19.18"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@esbenwiberg/repofit": "^1.2.
|
|
28
|
+
"@esbenwiberg/repofit": "^1.2.1"
|
|
29
29
|
}
|
|
30
30
|
}
|