@vibe-agent-toolkit/agent-skills 0.2.0-rc.1 → 0.2.0-rc.3

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 (194) hide show
  1. package/dist/files-config.d.ts +34 -1
  2. package/dist/files-config.d.ts.map +1 -1
  3. package/dist/files-config.js +280 -36
  4. package/dist/files-config.js.map +1 -1
  5. package/dist/fs-attribution.d.ts +45 -0
  6. package/dist/fs-attribution.d.ts.map +1 -0
  7. package/dist/fs-attribution.js +57 -0
  8. package/dist/fs-attribution.js.map +1 -0
  9. package/dist/index.d.ts +5 -4
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +8 -2
  12. package/dist/index.js.map +1 -1
  13. package/dist/inventory/detectors/declared-but-missing.d.ts +1 -1
  14. package/dist/inventory/detectors/declared-but-missing.d.ts.map +1 -1
  15. package/dist/inventory/detectors/marketplace-source-missing.d.ts +1 -1
  16. package/dist/inventory/detectors/marketplace-source-missing.d.ts.map +1 -1
  17. package/dist/inventory/detectors/present-but-undeclared.d.ts +1 -1
  18. package/dist/inventory/detectors/present-but-undeclared.d.ts.map +1 -1
  19. package/dist/inventory/detectors/reference-target-missing.d.ts +1 -1
  20. package/dist/inventory/detectors/reference-target-missing.d.ts.map +1 -1
  21. package/dist/inventory/index.d.ts +1 -1
  22. package/dist/inventory/index.d.ts.map +1 -1
  23. package/dist/inventory/index.js +1 -1
  24. package/dist/inventory/index.js.map +1 -1
  25. package/dist/inventory/serialize.d.ts +4 -4
  26. package/dist/inventory/serialize.d.ts.map +1 -1
  27. package/dist/inventory/serialize.js +6 -6
  28. package/dist/inventory/serialize.js.map +1 -1
  29. package/dist/post-build-checks.d.ts +1 -1
  30. package/dist/post-build-checks.d.ts.map +1 -1
  31. package/dist/post-build-checks.js.map +1 -1
  32. package/dist/projection/skill-extent.d.ts +247 -0
  33. package/dist/projection/skill-extent.d.ts.map +1 -0
  34. package/dist/projection/skill-extent.js +558 -0
  35. package/dist/projection/skill-extent.js.map +1 -0
  36. package/dist/schemas/agent-skill-frontmatter.js +1 -1
  37. package/dist/schemas/agent-skill-frontmatter.js.map +1 -1
  38. package/dist/skill-packager.d.ts +34 -4
  39. package/dist/skill-packager.d.ts.map +1 -1
  40. package/dist/skill-packager.js +113 -23
  41. package/dist/skill-packager.js.map +1 -1
  42. package/dist/skill-source/git-clone.d.ts.map +1 -1
  43. package/dist/skill-source/git-clone.js +9 -8
  44. package/dist/skill-source/git-clone.js.map +1 -1
  45. package/dist/skill-test/baseline-delta.d.ts +1575 -0
  46. package/dist/skill-test/baseline-delta.d.ts.map +1 -0
  47. package/dist/skill-test/baseline-delta.js +272 -0
  48. package/dist/skill-test/baseline-delta.js.map +1 -0
  49. package/dist/skill-test/baseline-integrity.d.ts +944 -0
  50. package/dist/skill-test/baseline-integrity.d.ts.map +1 -0
  51. package/dist/skill-test/baseline-integrity.js +3083 -0
  52. package/dist/skill-test/baseline-integrity.js.map +1 -0
  53. package/dist/skill-test/eval-executor.d.ts +19 -3
  54. package/dist/skill-test/eval-executor.d.ts.map +1 -1
  55. package/dist/skill-test/eval-executor.js +3 -3
  56. package/dist/skill-test/eval-executor.js.map +1 -1
  57. package/dist/skill-test/eval-fragment.d.ts +80 -6
  58. package/dist/skill-test/eval-fragment.d.ts.map +1 -1
  59. package/dist/skill-test/eval-fragment.js +61 -7
  60. package/dist/skill-test/eval-fragment.js.map +1 -1
  61. package/dist/skill-test/eval-grader.d.ts.map +1 -1
  62. package/dist/skill-test/eval-grader.js +143 -7
  63. package/dist/skill-test/eval-grader.js.map +1 -1
  64. package/dist/skill-test/eval-inputs.d.ts +107 -6
  65. package/dist/skill-test/eval-inputs.d.ts.map +1 -1
  66. package/dist/skill-test/eval-inputs.js +173 -16
  67. package/dist/skill-test/eval-inputs.js.map +1 -1
  68. package/dist/skill-test/eval-lint.d.ts +13 -0
  69. package/dist/skill-test/eval-lint.d.ts.map +1 -1
  70. package/dist/skill-test/eval-lint.js +17 -4
  71. package/dist/skill-test/eval-lint.js.map +1 -1
  72. package/dist/skill-test/executor-prompt.d.ts +13 -5
  73. package/dist/skill-test/executor-prompt.d.ts.map +1 -1
  74. package/dist/skill-test/executor-prompt.js +8 -5
  75. package/dist/skill-test/executor-prompt.js.map +1 -1
  76. package/dist/skill-test/exit-codes.d.ts +53 -16
  77. package/dist/skill-test/exit-codes.d.ts.map +1 -1
  78. package/dist/skill-test/exit-codes.js +123 -40
  79. package/dist/skill-test/exit-codes.js.map +1 -1
  80. package/dist/skill-test/fragment-merge.d.ts +1 -18
  81. package/dist/skill-test/fragment-merge.d.ts.map +1 -1
  82. package/dist/skill-test/fragment-merge.js +63 -4
  83. package/dist/skill-test/fragment-merge.js.map +1 -1
  84. package/dist/skill-test/grader-prompt.d.ts +27 -7
  85. package/dist/skill-test/grader-prompt.d.ts.map +1 -1
  86. package/dist/skill-test/grader-prompt.js +253 -61
  87. package/dist/skill-test/grader-prompt.js.map +1 -1
  88. package/dist/skill-test/grader-text.d.ts +145 -0
  89. package/dist/skill-test/grader-text.d.ts.map +1 -0
  90. package/dist/skill-test/grader-text.js +410 -0
  91. package/dist/skill-test/grader-text.js.map +1 -0
  92. package/dist/skill-test/grading-adapter.d.ts +32 -0
  93. package/dist/skill-test/grading-adapter.d.ts.map +1 -1
  94. package/dist/skill-test/grading-adapter.js +50 -3
  95. package/dist/skill-test/grading-adapter.js.map +1 -1
  96. package/dist/skill-test/grading-schema.d.ts +160 -5
  97. package/dist/skill-test/grading-schema.d.ts.map +1 -1
  98. package/dist/skill-test/grading-schema.js +66 -7
  99. package/dist/skill-test/grading-schema.js.map +1 -1
  100. package/dist/skill-test/index.d.ts +1 -1
  101. package/dist/skill-test/index.d.ts.map +1 -1
  102. package/dist/skill-test/index.js +1 -1
  103. package/dist/skill-test/index.js.map +1 -1
  104. package/dist/skill-test/lock.d.ts +56 -0
  105. package/dist/skill-test/lock.d.ts.map +1 -1
  106. package/dist/skill-test/lock.js +75 -2
  107. package/dist/skill-test/lock.js.map +1 -1
  108. package/dist/skill-test/pipeline.d.ts +16 -0
  109. package/dist/skill-test/pipeline.d.ts.map +1 -1
  110. package/dist/skill-test/pipeline.js +16 -9
  111. package/dist/skill-test/pipeline.js.map +1 -1
  112. package/dist/skill-test/preflight.d.ts.map +1 -1
  113. package/dist/skill-test/preflight.js +58 -14
  114. package/dist/skill-test/preflight.js.map +1 -1
  115. package/dist/skill-test/run-harness.d.ts +578 -35
  116. package/dist/skill-test/run-harness.d.ts.map +1 -1
  117. package/dist/skill-test/run-harness.js +1278 -147
  118. package/dist/skill-test/run-harness.js.map +1 -1
  119. package/dist/skill-test/staging.d.ts +8 -2
  120. package/dist/skill-test/staging.d.ts.map +1 -1
  121. package/dist/skill-test/staging.js +8 -4
  122. package/dist/skill-test/staging.js.map +1 -1
  123. package/dist/skill-test/tool-eval-schema.d.ts +6 -6
  124. package/dist/test-input.d.ts +1 -1
  125. package/dist/test-input.d.ts.map +1 -1
  126. package/dist/validators/agent-instruction-presence.d.ts +1 -1
  127. package/dist/validators/agent-instruction-presence.d.ts.map +1 -1
  128. package/dist/validators/bundled-resource-link-detection.d.ts +1 -1
  129. package/dist/validators/bundled-resource-link-detection.d.ts.map +1 -1
  130. package/dist/validators/bundled-resource-link-detection.js +1 -1
  131. package/dist/validators/bundled-resource-link-detection.js.map +1 -1
  132. package/dist/validators/compat-detectors.d.ts +1 -1
  133. package/dist/validators/compat-detectors.d.ts.map +1 -1
  134. package/dist/validators/compat-detectors.js +1 -1
  135. package/dist/validators/compat-detectors.js.map +1 -1
  136. package/dist/validators/cross-skill-dependency-detection.d.ts +1 -1
  137. package/dist/validators/cross-skill-dependency-detection.d.ts.map +1 -1
  138. package/dist/validators/cross-skill-dependency-detection.js +1 -1
  139. package/dist/validators/cross-skill-dependency-detection.js.map +1 -1
  140. package/dist/validators/description-style-detection.d.ts +1 -1
  141. package/dist/validators/description-style-detection.d.ts.map +1 -1
  142. package/dist/validators/description-style-detection.js +1 -1
  143. package/dist/validators/description-style-detection.js.map +1 -1
  144. package/dist/validators/frontmatter-validation.d.ts +1 -1
  145. package/dist/validators/frontmatter-validation.d.ts.map +1 -1
  146. package/dist/validators/frontmatter-validation.js +1 -1
  147. package/dist/validators/frontmatter-validation.js.map +1 -1
  148. package/dist/validators/imperative-body-detection.d.ts +1 -1
  149. package/dist/validators/imperative-body-detection.d.ts.map +1 -1
  150. package/dist/validators/imperative-body-detection.js +1 -1
  151. package/dist/validators/imperative-body-detection.js.map +1 -1
  152. package/dist/validators/index.d.ts +1 -1
  153. package/dist/validators/index.d.ts.map +1 -1
  154. package/dist/validators/kebab-case-detection.d.ts +1 -1
  155. package/dist/validators/kebab-case-detection.d.ts.map +1 -1
  156. package/dist/validators/kebab-case-detection.js +1 -1
  157. package/dist/validators/kebab-case-detection.js.map +1 -1
  158. package/dist/validators/marketplace-validator.js +1 -1
  159. package/dist/validators/marketplace-validator.js.map +1 -1
  160. package/dist/validators/packaging-validator.d.ts +38 -5
  161. package/dist/validators/packaging-validator.d.ts.map +1 -1
  162. package/dist/validators/packaging-validator.js +87 -10
  163. package/dist/validators/packaging-validator.js.map +1 -1
  164. package/dist/validators/plugin-hosted-shape.d.ts +1 -1
  165. package/dist/validators/plugin-hosted-shape.d.ts.map +1 -1
  166. package/dist/validators/plugin-hosted-shape.js +1 -1
  167. package/dist/validators/plugin-hosted-shape.js.map +1 -1
  168. package/dist/validators/plugin-recommended-fields.d.ts +1 -1
  169. package/dist/validators/plugin-recommended-fields.d.ts.map +1 -1
  170. package/dist/validators/plugin-recommended-fields.js +1 -1
  171. package/dist/validators/plugin-recommended-fields.js.map +1 -1
  172. package/dist/validators/registry-validator.js +1 -1
  173. package/dist/validators/registry-validator.js.map +1 -1
  174. package/dist/validators/rule-engine/rule-engine.d.ts +1 -1
  175. package/dist/validators/rule-engine/rule-engine.d.ts.map +1 -1
  176. package/dist/validators/rule-engine/rule-engine.js +20 -9
  177. package/dist/validators/rule-engine/rule-engine.js.map +1 -1
  178. package/dist/validators/skill-validator.d.ts.map +1 -1
  179. package/dist/validators/skill-validator.js +21 -3
  180. package/dist/validators/skill-validator.js.map +1 -1
  181. package/dist/validators/types.d.ts +1 -1
  182. package/dist/validators/types.d.ts.map +1 -1
  183. package/dist/validators/unified-validator.js +1 -1
  184. package/dist/validators/unified-validator.js.map +1 -1
  185. package/dist/validators/validation-rules.d.ts +1 -1
  186. package/dist/validators/validation-rules.d.ts.map +1 -1
  187. package/dist/validators/walker-to-issues.d.ts +7 -3
  188. package/dist/validators/walker-to-issues.d.ts.map +1 -1
  189. package/dist/validators/walker-to-issues.js +37 -8
  190. package/dist/validators/walker-to-issues.js.map +1 -1
  191. package/dist/walk-link-graph.d.ts.map +1 -1
  192. package/dist/walk-link-graph.js +36 -2
  193. package/dist/walk-link-graph.js.map +1 -1
  194. package/package.json +7 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline-delta.d.ts","sourceRoot":"","sources":["../../src/skill-test/baseline-delta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,272 @@
1
+ import { z } from 'zod';
2
+ import { BaselineControlArmFailureSchema, BaselineIntegritySchema, } from './baseline-integrity.js';
3
+ /**
4
+ * The A/B DELTA of a `--baseline` run — the thing the command actually sells.
5
+ *
6
+ * WHY THIS EXISTS. `--baseline` runs every eval twice, writes the treatment arm to
7
+ * `results/grading.json` and the control arm to `results/baseline.json`, and — until
8
+ * this module — computed no delta anywhere. The shipped docs said `--baseline`
9
+ * "reports the delta"; what it reported was two files and an invitation to subtract
10
+ * by hand. A product whose entire output is a comparison must do the comparison, or
11
+ * the number that gets quoted is whichever one the operator worked out in their head
12
+ * and wrote down without the caveats.
13
+ *
14
+ * WHY `null` IS THE POINT. Subtracting is only legal when both arms were graded
15
+ * against the same expectations, and {@link armExpectationSkew} is what decides that
16
+ * (see its docblock for how a grader emitting fewer entries on one arm produces two
17
+ * internally-consistent summaries with different denominators). When it is NOT legal,
18
+ * a number here would lie, and it lies in the most damaging direction: a
19
+ * short-graded control reads as "100% without the skill", i.e. "the skill did
20
+ * nothing". So the delta is WITHHELD rather than fudged, clamped, or normalised into
21
+ * a rate. `null` means "no delta exists here"; `0` means "measured, and the skill
22
+ * lifted nothing" — a completely different and perfectly valid finding, and the two
23
+ * must never collapse into one another.
24
+ *
25
+ * The withholding is per-eval as well as run-level: one incomparable eval poisons
26
+ * the run TOTAL (the summaries it feeds have mismatched denominators), but the
27
+ * evals either side of it were measured fine and keep their numbers.
28
+ */
29
+ /**
30
+ * One arm's graded totals — `passed` of `total` expectations.
31
+ *
32
+ * The refine is the same one `GradingSummarySchema` carries next door, and it was
33
+ * missing here for exactly as long as this block has existed. `{passed: 9, total: 3}`
34
+ * for the control arm parsed clean, rendered as `without skill: 9/3`, and produced
35
+ * `delta: -8` — a confident negative lift out of a count that cannot happen. Both
36
+ * halves of `baseline.json` now reject it, so no reader has to decide which of two
37
+ * blocks to believe.
38
+ */
39
+ const ArmTotalsSchema = z.object({
40
+ passed: z.number().int().nonnegative(),
41
+ total: z.number().int().nonnegative(),
42
+ }).strict().refine((s) => s.passed <= s.total, {
43
+ message: 'passed cannot exceed total — a count above its own denominator is a grader or merge bug',
44
+ });
45
+ export const EvalDeltaSchema = z.object({
46
+ evalId: z.string().min(1),
47
+ withPassed: z.number().int().nonnegative(),
48
+ withTotal: z.number().int().nonnegative(),
49
+ withoutPassed: z.number().int().nonnegative(),
50
+ withoutTotal: z.number().int().nonnegative(),
51
+ /**
52
+ * `withPassed − withoutPassed`, or `null` when THIS eval's two arms were graded to
53
+ * different depths. Signed: a negative delta means the control outscored the
54
+ * treatment, which is a real observed outcome and is never clamped to zero.
55
+ */
56
+ delta: z.number().int().nullable(),
57
+ }).strict()
58
+ .refine((e) => e.withPassed <= e.withTotal && e.withoutPassed <= e.withoutTotal, {
59
+ message: 'passed cannot exceed total on either arm',
60
+ })
61
+ // The ARITHMETIC, checked rather than assumed. Nothing else in the codebase
62
+ // asserts that the number in this field is the subtraction the field's own name
63
+ // claims: the schema accepted any integer, and the strongest end-to-end test that
64
+ // reads the artifact only ever asserted the arms. A future refactor of
65
+ // `evalDelta` that returned the wrong difference would have been invisible to
66
+ // both. `null` is exempt — it means "not subtractable", not "subtracted wrong".
67
+ .refine((e) => e.delta === null || e.delta === e.withPassed - e.withoutPassed, {
68
+ message: 'delta must equal withPassed − withoutPassed (or be null when the arms are not comparable)',
69
+ });
70
+ /**
71
+ * The suite the delta does NOT cover, when cost-tiered fail-fast truncated the run.
72
+ *
73
+ * `shouldGateAfterTier` stops the run the moment any WITH-arm eval in a tier does not
74
+ * fully pass, and it stops BOTH arms, so the arithmetic over the tiers that ran stays
75
+ * sound. What is not sound is reading the result as the suite's delta: a tier-0
76
+ * failure in an 8-eval suite printed `Baseline delta: +1 (with skill: 2/2, without
77
+ * skill: 1/2)`, byte-identical to a complete 2-eval suite that measured everything it
78
+ * declared.
79
+ *
80
+ * That is not an exotic path. `--baseline` exists to measure a skill that may not be
81
+ * helping, so a WITH-arm failure is the EXPECTED state of an interesting baseline run
82
+ * — the truncated shape is the common one, not the corner case.
83
+ */
84
+ export const DeltaTruncationSchema = z.object({
85
+ /** The (lower) tier whose gating failure stopped the run. */
86
+ gatedByTier: z.number().int(),
87
+ /** The lowest tier that never ran. */
88
+ firstSkippedTier: z.number().int(),
89
+ /** How many evals were never run on EITHER arm. */
90
+ totalSkipped: z.number().int().positive(),
91
+ /** Their ids, flattened across the skipped tiers in ascending tier order. */
92
+ evalIds: z.array(z.string().min(1)),
93
+ }).strict();
94
+ /**
95
+ * The run-level `baselineDelta` block, a SIBLING of `baselineIntegrity` in
96
+ * `baseline.json`. The two are separate on purpose: integrity says whether the
97
+ * comparison is trustworthy, this says what the comparison IS, and a reader who
98
+ * wants only the number should not have to reconstruct it from two summaries.
99
+ */
100
+ export const BaselineDeltaSchema = z.object({
101
+ with: ArmTotalsSchema,
102
+ without: ArmTotalsSchema,
103
+ /**
104
+ * Run-level lift, or `null` when ANY eval was incomparable.
105
+ *
106
+ * Withheld for the whole run rather than computed over the comparable subset: the
107
+ * arm totals above include every eval, so a partial-subset delta would not be the
108
+ * difference between the two numbers printed beside it — which is precisely the
109
+ * kind of "close enough" number that gets quoted without its caveat.
110
+ */
111
+ delta: z.number().int().nullable(),
112
+ perEval: z.array(EvalDeltaSchema),
113
+ /**
114
+ * Control-arm evals that produced no grade at all, so there was nothing to
115
+ * subtract for them. Carried HERE as well as on `baselineIntegrity` — it is one
116
+ * derivation handed to two consumers (the same arrangement as `ArmEvalGrade`
117
+ * feeding both the parity check and this block), never two derivations — because
118
+ * a reader who opens `baselineDelta` and finds `delta: null` must be able to learn
119
+ * WHY from the block that withheld it, without first having to know the
120
+ * contamination vocabulary next door.
121
+ */
122
+ controlArmFailures: z.array(BaselineControlArmFailureSchema),
123
+ /**
124
+ * What the fail-fast gate cut off, or `null` when the whole declared suite ran.
125
+ *
126
+ * `null` rather than an absent key: "this delta covers everything" is a CLAIM, and
127
+ * the field has to be able to make it. An optional field would make a complete run
128
+ * and a run written before this existed indistinguishable — the same argument that
129
+ * makes `baselineIntegrity` unconditional.
130
+ */
131
+ truncated: DeltaTruncationSchema.nullable(),
132
+ }).strict()
133
+ // Same arithmetic check as {@link EvalDeltaSchema}, at the level the operator
134
+ // actually quotes. `formatBaselineDeltaLine` prints the lift and the two arms
135
+ // side by side, so a `delta` that is not their difference is a self-contradicting
136
+ // sentence on stderr — and the schema was the only place that could have said so.
137
+ .refine((d) => d.delta === null || d.delta === d.with.passed - d.without.passed, {
138
+ message: 'delta must equal with.passed − without.passed (or be null when the arms are not comparable)',
139
+ });
140
+ /**
141
+ * `baseline.json` as a whole: a grading report (validated separately by the
142
+ * caller, which owns that schema) carrying vat's two extra blocks.
143
+ *
144
+ * Exists so the post-merge fail-closed gate can validate the file it just wrote.
145
+ * `.passthrough()` because the grading fields ride alongside and are checked by
146
+ * `GradingReportSchema`; the two blocks below are what THIS schema is for, and
147
+ * both are REQUIRED — an absent `baselineIntegrity` is precisely the "written
148
+ * before the check existed" state the block was made unconditional to rule out.
149
+ */
150
+ export const BaselineArtifactSchema = z.object({
151
+ baselineIntegrity: BaselineIntegritySchema,
152
+ baselineDelta: BaselineDeltaSchema,
153
+ }).passthrough();
154
+ /** Sum one arm's per-eval grades into the totals that arm's summary reports. */
155
+ function armTotals(arm) {
156
+ return arm.reduce((acc, grade) => ({ passed: acc.passed + grade.passed, total: acc.total + grade.total }), { passed: 0, total: 0 });
157
+ }
158
+ /** The zeroed side of an eval only one arm graded. */
159
+ const MISSING_ARM = { passed: 0, total: 0 };
160
+ /**
161
+ * Compute the A/B delta from the two arms' per-eval grades.
162
+ *
163
+ * `skew` is the AUTHORITY on which evals are incomparable — it is not re-derived
164
+ * from the counts here, and `controlArmFailures` does NOT get a second vote. Two
165
+ * derivations of the same judgement is how the delta block and
166
+ * `baselineIntegrity.skew` would end up disagreeing about one run, and a reader has
167
+ * no way to tell which of two contradicting blocks to believe. A dead control arm
168
+ * needs no second vote in any case: it leaves that eval graded on one arm only,
169
+ * which {@link armExpectationSkew} already reports as skew. Callers pass the output
170
+ * of {@link armExpectationSkew} over the SAME `ArmEvalGrade[]` values they pass here.
171
+ *
172
+ * `perEval` ordering matches {@link armExpectationSkew}: the treatment arm in its own
173
+ * order, then the evals only the control arm graded. An eval present on one arm only
174
+ * appears with the missing side reported as 0 and `delta: null`, exactly as the skew
175
+ * check reports it — a silently absent eval skews the run total the same way a
176
+ * short-graded one does, so it is surfaced rather than dropped.
177
+ *
178
+ * `truncated` does NOT withhold the delta. The tiers that ran, ran on both arms, so
179
+ * their subtraction is legal; what truncation changes is the SCOPE of the claim, and
180
+ * a scope caveat is reported (here and in the printed line), not a `null`. Spending
181
+ * `null` — which means "these arms cannot be subtracted" — on a run where they can be
182
+ * would collapse two failures with different remedies into one value.
183
+ *
184
+ * Pure.
185
+ */
186
+ export function computeBaselineDelta(input) {
187
+ const { withArm, withoutArm, skew } = input;
188
+ const incomparable = new Set(skew.map((s) => s.evalId));
189
+ const withoutById = new Map(withoutArm.map((g) => [g.evalId, g]));
190
+ const withIds = new Set(withArm.map((g) => g.evalId));
191
+ const perEval = withArm.map((graded) => evalDelta(graded, withoutById.get(graded.evalId) ?? MISSING_ARM, incomparable.has(graded.evalId)));
192
+ for (const graded of withoutArm) {
193
+ if (withIds.has(graded.evalId))
194
+ continue;
195
+ perEval.push(evalDelta({ evalId: graded.evalId, ...MISSING_ARM }, graded, incomparable.has(graded.evalId)));
196
+ }
197
+ const withTotals = armTotals(withArm);
198
+ const withoutTotals = armTotals(withoutArm);
199
+ return {
200
+ with: withTotals,
201
+ without: withoutTotals,
202
+ delta: skew.length > 0 ? null : withTotals.passed - withoutTotals.passed,
203
+ perEval,
204
+ controlArmFailures: [...input.controlArmFailures],
205
+ truncated: input.truncated,
206
+ };
207
+ }
208
+ function evalDelta(graded, without, isIncomparable) {
209
+ return {
210
+ evalId: graded.evalId,
211
+ withPassed: graded.passed,
212
+ withTotal: graded.total,
213
+ withoutPassed: without.passed,
214
+ withoutTotal: without.total,
215
+ delta: isIncomparable ? null : graded.passed - without.passed,
216
+ };
217
+ }
218
+ /** `+3` / `-2` / `+0` — a bare `3` is a count, a signed `+3` is a direction. */
219
+ function signed(delta) {
220
+ return delta < 0 ? String(delta) : `+${delta}`;
221
+ }
222
+ /**
223
+ * The SCOPE clause: what this delta does not cover.
224
+ *
225
+ * Appended in BOTH states — a truncated run that still produced a number is the
226
+ * dangerous one, because `+1 (with skill: 2/2, without skill: 1/2)` is a complete,
227
+ * confident, quotable sentence about two of the eight evals the suite declares.
228
+ */
229
+ function truncationClause(truncated) {
230
+ if (truncated === null)
231
+ return '';
232
+ const ids = truncated.evalIds.length === 0 ? '' : ` [${truncated.evalIds.join(', ')}]`;
233
+ return (` PARTIAL SUITE: fail-fast gated on tier ${truncated.gatedByTier}, so tier ` +
234
+ `${truncated.firstSkippedTier} and above never ran on EITHER arm — ${truncated.totalSkipped} ` +
235
+ `eval(s)${ids} are absent from both totals above. This is the delta over the tiers that ran, ` +
236
+ 'not over the suite.');
237
+ }
238
+ /** Why the delta was withheld — the control arm dying is a different failure from the arms disagreeing. */
239
+ function withheldClause(delta) {
240
+ if (delta.controlArmFailures.length > 0) {
241
+ const ids = delta.controlArmFailures.map((f) => f.evalId).join(', ');
242
+ return (`the CONTROL arm (skill withheld) produced no grade for ${delta.controlArmFailures.length} ` +
243
+ `eval(s) [${ids}], so there is nothing to subtract from the treatment arm. The treatment ` +
244
+ 'arm ran and its grading.json/tool-eval.json are complete and trustworthy — only the ' +
245
+ 'comparison is missing. See baselineIntegrity.controlArmFailures in baseline.json.');
246
+ }
247
+ const withheld = delta.perEval.filter((e) => e.delta === null).length;
248
+ return (`${withheld} eval(s) were graded against a different number of expectations on each arm, ` +
249
+ 'so the two totals have different denominators and subtracting them would not be a delta. ' +
250
+ 'See baselineIntegrity.skew in baseline.json.');
251
+ }
252
+ /**
253
+ * The one line an operator actually reads about the delta.
254
+ *
255
+ * `baseline.json` holds the per-eval detail, and nobody opens it unprompted — the
256
+ * two rounds of integrity work before this one both ended up shipping findings that
257
+ * existed only inside an artifact. So this line has to be self-sufficient in BOTH
258
+ * states: it names each arm's passed/total (so the lift can be sanity-checked
259
+ * against the numbers it came from), it says what the numbers do NOT cover when the
260
+ * run was truncated, and when the delta is withheld it says so, says WHICH ARM broke
261
+ * and how, and points at the block holding the evidence.
262
+ *
263
+ * Pure, and deliberately not wired here — the caller decides where it goes.
264
+ */
265
+ export function formatBaselineDeltaLine(delta) {
266
+ const arms = `with skill: ${delta.with.passed}/${delta.with.total}, without skill: ${delta.without.passed}/${delta.without.total}`;
267
+ const scope = truncationClause(delta.truncated);
268
+ if (delta.delta !== null)
269
+ return `Baseline delta: ${signed(delta.delta)} (${arms}).${scope}`;
270
+ return `Baseline delta: unavailable (${arms}) — ${withheldClause(delta)}${scope}`;
271
+ }
272
+ //# sourceMappingURL=baseline-delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline-delta.js","sourceRoot":"","sources":["../../src/skill-test/baseline-delta.ts"],"names":[],"mappings":"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"}