lastlight-evals 0.10.0 → 0.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.
Files changed (56) hide show
  1. package/dashboard/dist/assets/index-B4TAaIUR.css +1 -0
  2. package/dashboard/dist/assets/index-LFdFc6Z9.js +109 -0
  3. package/dashboard/dist/index.html +2 -2
  4. package/datasets/aacr-bench/README.md +146 -0
  5. package/datasets/pr-review/README.md +41 -0
  6. package/datasets/pr-review/anchors.json +3709 -0
  7. package/dist/add-case.js.map +1 -1
  8. package/dist/arm.js +14 -5
  9. package/dist/arm.js.map +1 -1
  10. package/dist/bootstrap.js +14 -0
  11. package/dist/bootstrap.js.map +1 -1
  12. package/dist/clean.js.map +1 -1
  13. package/dist/config.js +59 -20
  14. package/dist/config.js.map +1 -1
  15. package/dist/fake-github.js +72 -0
  16. package/dist/fake-github.js.map +1 -1
  17. package/dist/grade.js +308 -64
  18. package/dist/grade.js.map +1 -1
  19. package/dist/init.js.map +1 -1
  20. package/dist/judge.js +19 -0
  21. package/dist/judge.js.map +1 -1
  22. package/dist/mechanism.test.js +303 -13
  23. package/dist/mechanism.test.js.map +1 -1
  24. package/dist/metrics.js +88 -9
  25. package/dist/metrics.js.map +1 -1
  26. package/dist/paths.js +135 -1
  27. package/dist/paths.js.map +1 -1
  28. package/dist/phase-models.js +56 -0
  29. package/dist/phase-models.js.map +1 -0
  30. package/dist/pool.js +32 -0
  31. package/dist/pool.js.map +1 -0
  32. package/dist/pool.test.js +180 -0
  33. package/dist/pool.test.js.map +1 -0
  34. package/dist/pr-context.js +77 -6
  35. package/dist/pr-context.js.map +1 -1
  36. package/dist/repeats.test.js +317 -0
  37. package/dist/repeats.test.js.map +1 -0
  38. package/dist/report.js +99 -5
  39. package/dist/report.js.map +1 -1
  40. package/dist/review-metrics.js +571 -0
  41. package/dist/review-metrics.js.map +1 -0
  42. package/dist/review-metrics.test.js +634 -0
  43. package/dist/review-metrics.test.js.map +1 -0
  44. package/dist/review-pipeline-stats.js +455 -0
  45. package/dist/review-pipeline-stats.js.map +1 -0
  46. package/dist/review-pipeline-stats.test.js +413 -0
  47. package/dist/review-pipeline-stats.test.js.map +1 -0
  48. package/dist/run-instance.js +176 -45
  49. package/dist/run-instance.js.map +1 -1
  50. package/dist/run.js +637 -122
  51. package/dist/run.js.map +1 -1
  52. package/dist/schema.js +22 -1
  53. package/dist/schema.js.map +1 -1
  54. package/package.json +9 -8
  55. package/dashboard/dist/assets/index-B1jNgf2P.js +0 -313
  56. package/dashboard/dist/assets/index-Sic0jI7y.css +0 -1
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Map a runner phase ROW back to the YAML `model:` template that governed it,
3
+ * for scorecard RECORDING (`PhaseMetric.model`) in `config` runs.
4
+ *
5
+ * `wf.phases` rows carry LEDGER labels, not YAML phase names: a `type: fanout`
6
+ * phase's branches come back as `<parent>_branch_<name>` (plus `_retry` /
7
+ * `_check` — see `packages/workflow-engine/src/core/phase-ref.ts`, the single
8
+ * authority for those labels). A naive `def.phases`-by-name lookup therefore
9
+ * missed every branch row, and `recordPhaseModel(undefined, <label>)` fell all
10
+ * the way through to `models.default` — the scorecard said surveys ran the
11
+ * default model while the session envelopes proved otherwise (money trap 12
12
+ * in `docs/plans/deterministic-pr-levers.md`; journal §2j in git history).
13
+ * Execution was always correct (`fanout.ts:776` resolves
14
+ * `branch.model ?? phase.model`); only the recording lied.
15
+ *
16
+ * So the label is parsed back through core's own `PhaseRef.parse`, and a branch
17
+ * row resolves its template exactly as core's executor does
18
+ * (`apps/server/src/workflows/handlers/fanout.ts` `branchConfig`):
19
+ * `branch.model ?? phase.model`, with the PARENT phase name as the resolver's
20
+ * fallback task. Non-branch rows keep the old behaviour byte-for-byte
21
+ * (a declared name maps to its own `model:`; a loop-derived `_fix_`/`_iter_`
22
+ * label maps to no template, as before — those run `fix_model`/the loop's own
23
+ * config, which this recorder has never modelled).
24
+ */
25
+ import { PhaseRef } from "lastlight-workflow-engine";
26
+ /** Resolve the `model:` template (and fallback task) for one `wf.phases` row. */
27
+ export function modelTemplateForRow(phases, label) {
28
+ // A declared phase name wins outright — even one that happens to look like a
29
+ // generated label — matching the old exact-name map.
30
+ const declared = phases.find((p) => p.name === label);
31
+ if (declared)
32
+ return { template: declared.model, fallbackPhase: undefined };
33
+ const ref = PhaseRef.parse(label);
34
+ if (ref.kind === "branch" || ref.kind === "branchRetry" || ref.kind === "branchCheck") {
35
+ const parent = phases.find((p) => p.name === ref.base);
36
+ const branch = parent?.branches?.find((b) => b.name === ref.branch);
37
+ // `branch.model ?? phase.model` — the branch may declare its own override
38
+ // (none do today, but core honours it, so the recorder must too).
39
+ return { template: branch?.model ?? parent?.model, fallbackPhase: ref.base };
40
+ }
41
+ // A generic-loop iteration re-runs ITS OWN phase — `adjudicate_iter_1` is the
42
+ // `adjudicate` phase, template and all — so it resolves the base phase's
43
+ // `model:` exactly like the plain row. Without this, the one workflow phase
44
+ // that always runs as `_iter_N` (adjudicate) stamped `models.default` while
45
+ // the session envelope proved it ran the `{{#if models.review-adjudicate}}`
46
+ // template's answer — the same lie as the branch rows, one label shape over.
47
+ if (ref.kind === "iter" || ref.kind === "retry" || ref.kind === "check") {
48
+ const parent = phases.find((p) => p.name === ref.base);
49
+ return { template: parent?.model, fallbackPhase: ref.base };
50
+ }
51
+ // Reviewer-loop rows (`_fix_N` / `_recheck_N`): no template, as before —
52
+ // those run `fix_model`/the loop's own config, which this recorder has never
53
+ // modelled; recordPhaseModel then resolves models[<label>] → models.default.
54
+ return { template: undefined, fallbackPhase: undefined };
55
+ }
56
+ //# sourceMappingURL=phase-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-models.js","sourceRoot":"","sources":["../src/phase-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAkBrD,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CAAC,MAAmC,EAAE,KAAa;IACpF,6EAA6E;IAC7E,qDAAqD;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IACtD,IAAI,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;IAE5E,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACtF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;QACpE,0EAA0E;QAC1E,kEAAkE;QAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IAC/E,CAAC;IAED,8EAA8E;IAC9E,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9D,CAAC;IAED,yEAAyE;IACzE,6EAA6E;IAC7E,6EAA6E;IAC7E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AAC3D,CAAC"}
package/dist/pool.js ADDED
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Bounded-concurrency map that preserves input order.
3
+ *
4
+ * One implementation, two callers: the eval runner's within-arm case concurrency
5
+ * (`--concurrency N`) and `scripts/aacr-adjudicate.ts`. Order preservation is the
6
+ * load-bearing property — results index-align with `items`, so a caller can zip
7
+ * them back against its own list without threading ids through.
8
+ *
9
+ * `limit <= 1` degenerates to a single worker draining the queue in order, which
10
+ * is exactly a serial `for` loop. That is what makes the default safe: nothing
11
+ * about the surrounding run changes when concurrency is off.
12
+ *
13
+ * Errors are NOT caught here. A caller that must not let one bad item take the
14
+ * batch down returns the failure as a value (both callers do — an eval case
15
+ * records `result.error`, an adjudicated row records an `error` field), which
16
+ * keeps "this item failed" distinguishable from "this item was never attempted".
17
+ */
18
+ export async function mapPool(items, limit, fn) {
19
+ const out = new Array(items.length);
20
+ let next = 0;
21
+ const workers = Array.from({ length: Math.max(1, Math.min(limit, items.length)) }, async () => {
22
+ for (;;) {
23
+ const i = next++;
24
+ if (i >= items.length)
25
+ return;
26
+ out[i] = await fn(items[i], i);
27
+ }
28
+ });
29
+ await Promise.all(workers);
30
+ return out;
31
+ }
32
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAU,EACV,KAAa,EACb,EAAsC;IAEtC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAC5F,SAAS,CAAC;YACR,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAO;YAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,180 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { mapPool } from "./pool.js";
6
+ import { bucketSessionsByPhase, listSessionFiles } from "./metrics.js";
7
+ /**
8
+ * `mapPool` is what makes `--concurrency N` safe to default to 1: the whole
9
+ * "byte-identical when the flag is absent" claim rests on limit<=1 being an
10
+ * ordinary serial loop, and on results index-aligning with their inputs.
11
+ */
12
+ describe("mapPool", () => {
13
+ it("preserves input order regardless of completion order", async () => {
14
+ // Later items finish FIRST, so any implementation that pushes on completion
15
+ // rather than assigning by index comes back reversed.
16
+ const items = [40, 30, 20, 10];
17
+ const out = await mapPool(items, 4, async (ms) => {
18
+ await new Promise((r) => setTimeout(r, ms));
19
+ return ms;
20
+ });
21
+ expect(out).toEqual([40, 30, 20, 10]);
22
+ });
23
+ it("never exceeds the concurrency bound", async () => {
24
+ let inFlight = 0;
25
+ let peak = 0;
26
+ await mapPool(Array.from({ length: 20 }, (_, i) => i), 3, async (i) => {
27
+ inFlight++;
28
+ peak = Math.max(peak, inFlight);
29
+ await new Promise((r) => setTimeout(r, 5));
30
+ inFlight--;
31
+ return i;
32
+ });
33
+ expect(peak).toBe(3);
34
+ });
35
+ it("limit 1 is a serial loop — the default's no-op property", async () => {
36
+ const order = [];
37
+ let peak = 0;
38
+ let inFlight = 0;
39
+ await mapPool([1, 2, 3, 4], 1, async (i) => {
40
+ inFlight++;
41
+ peak = Math.max(peak, inFlight);
42
+ await new Promise((r) => setTimeout(r, 1));
43
+ order.push(i);
44
+ inFlight--;
45
+ return i;
46
+ });
47
+ expect(peak).toBe(1);
48
+ // Started AND finished strictly in order — no interleaving at all.
49
+ expect(order).toEqual([1, 2, 3, 4]);
50
+ });
51
+ it("handles an empty list without spawning a worker", async () => {
52
+ expect(await mapPool([], 8, async () => 1)).toEqual([]);
53
+ });
54
+ it("propagates a rejection rather than swallowing it", async () => {
55
+ await expect(mapPool([1, 2], 2, async (i) => {
56
+ if (i === 2)
57
+ throw new Error("boom");
58
+ return i;
59
+ })).rejects.toThrow("boom");
60
+ });
61
+ });
62
+ /**
63
+ * Phase attribution is the other half of the instrument: a session file belongs
64
+ * to the last phase that started at or before its first line.
65
+ */
66
+ describe("bucketSessionsByPhase", () => {
67
+ const starts = [
68
+ { phase: "facts", start: 1_000 },
69
+ { phase: "seed", start: 2_000 },
70
+ { phase: "survey", start: 3_000 },
71
+ ];
72
+ it("attributes each session to the phase whose window it falls in", () => {
73
+ const { buckets, order } = bucketSessionsByPhase([
74
+ { file: "a.jsonl", firstTs: 1_100 },
75
+ { file: "b.jsonl", firstTs: 2_500 },
76
+ { file: "c.jsonl", firstTs: 3_200 },
77
+ ], starts);
78
+ expect(order).toEqual(["facts", "seed", "survey"]);
79
+ expect(buckets.get("facts")).toEqual(["a.jsonl"]);
80
+ expect(buckets.get("seed")).toEqual(["b.jsonl"]);
81
+ expect(buckets.get("survey")).toEqual(["c.jsonl"]);
82
+ });
83
+ it("collapses an UNSTAMPED fan-out onto one phase — the limit the stamp exists to fix", () => {
84
+ // Six concurrent branches, no stamps: the window rule can only answer with
85
+ // the last phase started before each file, so all six land on the parent.
86
+ // That is exactly the misattribution that hid $1.23 of a $2.01 case, and it
87
+ // is why this is the FALLBACK. The stamped case below is the real rule.
88
+ const files = [3_050, 3_060, 3_070, 3_080, 3_090, 3_100].map((t, i) => ({
89
+ file: `s${i}.jsonl`,
90
+ firstTs: t,
91
+ }));
92
+ const { buckets, order } = bucketSessionsByPhase(files, starts);
93
+ expect(order).toEqual(["survey"]);
94
+ expect(buckets.get("survey")).toHaveLength(6);
95
+ });
96
+ it("gives a session 50ms of slack against its phase's start", () => {
97
+ // The write lands fractionally before the callback records the start.
98
+ const { buckets } = bucketSessionsByPhase([{ file: "x.jsonl", firstTs: 1_970 }], starts);
99
+ expect(buckets.get("seed")).toEqual(["x.jsonl"]);
100
+ });
101
+ it("falls back to the first phase for a session that predates every start", () => {
102
+ const { buckets } = bucketSessionsByPhase([{ file: "early.jsonl", firstTs: 5 }], starts);
103
+ expect(buckets.get("facts")).toEqual(["early.jsonl"]);
104
+ });
105
+ it("is total on an empty phase list", () => {
106
+ const { buckets } = bucketSessionsByPhase([{ file: "o.jsonl", firstTs: 9 }], []);
107
+ expect(buckets.get("session")).toEqual(["o.jsonl"]);
108
+ });
109
+ it("prefers the stamp over the window when they disagree", () => {
110
+ // `writeCommandSession` writes a command's session AFTER it finishes, so
111
+ // `facts`' jsonl can land at `seed`'s start. The window rule bills it to
112
+ // `seed` — a model-free bash phase reporting agent time. The stamp does not.
113
+ const { buckets } = bucketSessionsByPhase([{ file: "facts.jsonl", firstTs: 2_400, phase: "facts" }], starts);
114
+ expect(buckets.get("facts")).toEqual(["facts.jsonl"]);
115
+ expect(buckets.has("seed")).toBe(false);
116
+ });
117
+ it("gives every stamped fan-out branch its own bucket", () => {
118
+ const families = ["contract", "enforcement", "security", "state", "tests", "spec"];
119
+ // Launched within 35ms of each other — indistinguishable to a start-time
120
+ // lookup, exact under the stamp.
121
+ const files = families.map((f, i) => ({
122
+ file: `${f}.jsonl`,
123
+ firstTs: 3_050 + i * 7,
124
+ phase: `survey_branch_${f}`,
125
+ }));
126
+ const { buckets, order } = bucketSessionsByPhase(files, starts);
127
+ expect(order).toEqual(families.map((f) => `survey_branch_${f}`));
128
+ for (const f of families)
129
+ expect(buckets.get(`survey_branch_${f}`)).toEqual([`${f}.jsonl`]);
130
+ });
131
+ it("mixes stamped and unstamped sessions in one run", () => {
132
+ // What a re-scored historical run looks like mid-migration.
133
+ const { buckets } = bucketSessionsByPhase([
134
+ { file: "old.jsonl", firstTs: 1_100 },
135
+ { file: "new.jsonl", firstTs: 1_200, phase: "survey_branch_spec" },
136
+ ], starts);
137
+ expect(buckets.get("facts")).toEqual(["old.jsonl"]);
138
+ expect(buckets.get("survey_branch_spec")).toEqual(["new.jsonl"]);
139
+ });
140
+ it("ignores an empty stamp rather than bucketing under the empty string", () => {
141
+ const { buckets } = bucketSessionsByPhase([{ file: "e.jsonl", firstTs: 1_100, phase: "" }], starts);
142
+ expect(buckets.get("facts")).toEqual(["e.jsonl"]);
143
+ });
144
+ });
145
+ describe("listSessionFiles", () => {
146
+ const write = (dir, name, lines) => {
147
+ mkdirSync(dir, { recursive: true });
148
+ writeFileSync(join(dir, name), lines.map((l) => JSON.stringify(l)).join("\n") + "\n");
149
+ };
150
+ it("reads the phase stamp off the opening envelope", () => {
151
+ const root = mkdtempSync(join(tmpdir(), "ll-sessions-"));
152
+ const proj = join(root, "projects", "-w");
153
+ write(proj, "a.jsonl", [
154
+ { type: "user", timestamp: "2026-08-22T14:40:10.500Z", phase: "survey_branch_contract" },
155
+ { type: "result", timestamp: "2026-08-22T14:40:26.000Z", phase: "survey_branch_contract" },
156
+ ]);
157
+ const [f] = listSessionFiles(root);
158
+ expect(f.phase).toBe("survey_branch_contract");
159
+ expect(f.firstTs).toBe(Date.parse("2026-08-22T14:40:10.500Z"));
160
+ });
161
+ it("finds a stamp that only appears on the closing envelope", () => {
162
+ // A session bootstrapped from a stub `session` record carries no stamp on
163
+ // line 1, so the scan must not stop at the first timestamp.
164
+ const root = mkdtempSync(join(tmpdir(), "ll-sessions-"));
165
+ write(join(root, "projects", "-w"), "b.jsonl", [
166
+ { type: "session", timestamp: "2026-08-22T14:40:10.500Z" },
167
+ { type: "result", timestamp: "2026-08-22T14:40:26.000Z", phase: "review" },
168
+ ]);
169
+ expect(listSessionFiles(root)[0].phase).toBe("review");
170
+ });
171
+ it("leaves phase undefined for a pre-stamp session", () => {
172
+ const root = mkdtempSync(join(tmpdir(), "ll-sessions-"));
173
+ write(join(root, "projects", "-w"), "c.jsonl", [
174
+ { type: "user", timestamp: "2026-08-20T10:00:00.000Z" },
175
+ { type: "result", timestamp: "2026-08-20T10:01:00.000Z" },
176
+ ]);
177
+ expect(listSessionFiles(root)[0].phase).toBeUndefined();
178
+ });
179
+ });
180
+ //# sourceMappingURL=pool.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.test.js","sourceRoot":"","sources":["../src/pool.test.ts"],"names":[],"mappings":"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"}
@@ -51,7 +51,7 @@
51
51
  * `class=`, and does it behave differently on the attempt where `flakyPromoted`
52
52
  * is set. The snapshot is therefore an INPUT here, never an assertion target.
53
53
  */
54
- import { defaultDependenciesConfig, defaultFixConfig, renderContext, } from "lastlight-core/evals";
54
+ import { defaultDependenciesConfig, defaultFixConfig, defaultReviewConfig, renderContext, resolveSpecContext, } from "lastlight-core/evals";
55
55
  const CHECKS_DEFAULT = "none";
56
56
  function toCiReport(seeds) {
57
57
  if (!seeds || seeds.length === 0)
@@ -93,6 +93,12 @@ export function buildPrState(args) {
93
93
  // gates attempt bookkeeping, which this harness does not run.
94
94
  headAuthor: "dependabot[bot]",
95
95
  headIsOurs: false,
96
+ // Nor did it OPEN the PR — a distinct question from `headIsOurs`, and the
97
+ // one the review gate reads. Every eval case is a third party's pull
98
+ // request; a case that set this would be asking the harness to grade a
99
+ // review the dispatch gate refuses to run at all.
100
+ authorLogin: "dependabot[bot]",
101
+ authorIsOurs: false,
96
102
  headRef: s.head_ref ?? args.branch,
97
103
  baseRef: s.base_ref ?? "main",
98
104
  isDraft: s.is_draft ?? false,
@@ -111,6 +117,22 @@ export function buildPrState(args) {
111
117
  lastBotReview: null,
112
118
  pathsSinceLastBotReview: null,
113
119
  ciReport: toCiReport(s.ci_jobs),
120
+ // The `spec` axis's two ends. Both inert unless the case seeds them AND the
121
+ // arm turns `review.analysis` on — with the axis off, `renderContext` omits
122
+ // every variable they feed, so a case that seeds neither is byte-identical
123
+ // to one written before WP0.
124
+ closes: (s.closes ?? []).map((c) => ({
125
+ number: c.number,
126
+ title: c.title,
127
+ body: c.body,
128
+ ...(c.state ? { state: c.state } : {}),
129
+ ...(c.url ? { url: c.url } : {}),
130
+ })),
131
+ // `??`, not `||`: a case seeding `[]` is asserting "this PR changes no
132
+ // files", which is a different fact from "we could not read the list" and
133
+ // yields a different degraded message. Only a genuinely absent seed falls
134
+ // through to the harness-derived set.
135
+ changedFiles: s.changed_files ?? args.changedFiles ?? null,
114
136
  attempt: s.attempt ?? 1,
115
137
  flakyDeferrals: s.flaky_deferrals ?? 0,
116
138
  escalatedAtSha: null,
@@ -140,11 +162,37 @@ export function buildPrState(args) {
140
162
  readErrors: [],
141
163
  };
142
164
  }
143
- /** The effective policy blocks for a case: shipped defaults under its overrides. */
144
- export function prPolicy(seed) {
165
+ /**
166
+ * The effective policy blocks for a case: shipped defaults under its overrides.
167
+ *
168
+ * Two override layers for `review`, applied in that order:
169
+ * 1. the case's `pr_state.review` (gold), then
170
+ * 2. the ARM's `review:` (its overlay `config.yaml`), which wins on the keys
171
+ * it names.
172
+ *
173
+ * The arm goes last because it is the axis under measurement: an overlay that
174
+ * says `analysis.enabled: true` must produce a pipeline-on run for every case in
175
+ * the tier, and a baseline overlay that says nothing about `analysis` must leave
176
+ * whatever the case declared alone. A gold file can therefore never flip an arm.
177
+ */
178
+ export function prPolicy(seed, armReview) {
179
+ const reviewDefaults = defaultReviewConfig();
145
180
  return {
146
181
  fix: { ...defaultFixConfig(), ...(seed?.fix ?? {}) },
147
182
  dependencies: { ...defaultDependenciesConfig(), ...(seed?.dependencies ?? {}) },
183
+ review: {
184
+ ...reviewDefaults,
185
+ ...(seed?.review ?? {}),
186
+ ...(armReview ?? {}),
187
+ // A one-level spread would drop `maxSpecObligations` the moment a case
188
+ // seeded `{ analysis: { enabled: true } }`, so the nested block merges
189
+ // leaf-by-leaf.
190
+ analysis: {
191
+ ...reviewDefaults.analysis,
192
+ ...(seed?.review?.analysis ?? {}),
193
+ ...(armReview?.analysis ?? {}),
194
+ },
195
+ },
148
196
  };
149
197
  }
150
198
  /**
@@ -157,11 +205,34 @@ export function prPolicy(seed) {
157
205
  * exactly what the seam contributes — and so a workflow that is not PR-scoped
158
206
  * gets nothing at all.
159
207
  */
160
- export function prContextPatch(args) {
208
+ export async function prContextPatch(args) {
161
209
  const state = buildPrState(args);
162
- const { fix, dependencies } = prPolicy(args.seed);
210
+ // Production order, then the case's overrides. `resolveSpecContext` fills both
211
+ // ends unconditionally and never throws (a failed read lands in `readErrors`
212
+ // and leaves the field at the value that cannot cause a wrong claim), so the
213
+ // seeds are re-applied AFTER it — otherwise a case that deliberately seeds
214
+ // `changed_files: []` to measure the degraded path would have the resolver
215
+ // quietly answer its question for it.
216
+ if (args.github) {
217
+ await resolveSpecContext(state, { github: args.github });
218
+ if (args.seed?.closes) {
219
+ state.closes = args.seed.closes.map((c) => ({
220
+ number: c.number,
221
+ title: c.title,
222
+ body: c.body,
223
+ ...(c.state ? { state: c.state } : {}),
224
+ ...(c.url ? { url: c.url } : {}),
225
+ }));
226
+ }
227
+ if (args.seed?.changed_files)
228
+ state.changedFiles = args.seed.changed_files;
229
+ }
230
+ const { fix, dependencies, review } = prPolicy(args.seed, args.review);
163
231
  return {
164
- ...renderContext(state, fix, dependencies),
232
+ // `review` is passed but deliberately NOT seeded top-level the way `fix` and
233
+ // `dependencies` are: `build.yaml` already emits `output_var: review`, and a
234
+ // top-level object would shadow it (see `apps/server/CLAUDE.md`).
235
+ ...renderContext(state, fix, dependencies, review),
165
236
  prNumber: args.prNumber,
166
237
  fix: fix,
167
238
  dependencies: dependencies,
@@ -1 +1 @@
1
- {"version":3,"file":"pr-context.js","sourceRoot":"","sources":["../src/pr-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pr-context.js","sourceRoot":"","sources":["../src/pr-context.ts"],"names":[],"mappings":"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"}