@vibe-agent-toolkit/agent-skills 0.2.0-rc.2 → 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.
- package/dist/files-config.d.ts +34 -1
- package/dist/files-config.d.ts.map +1 -1
- package/dist/files-config.js +280 -36
- package/dist/files-config.js.map +1 -1
- package/dist/fs-attribution.d.ts +45 -0
- package/dist/fs-attribution.d.ts.map +1 -0
- package/dist/fs-attribution.js +57 -0
- package/dist/fs-attribution.js.map +1 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/inventory/detectors/declared-but-missing.d.ts +1 -1
- package/dist/inventory/detectors/declared-but-missing.d.ts.map +1 -1
- package/dist/inventory/detectors/marketplace-source-missing.d.ts +1 -1
- package/dist/inventory/detectors/marketplace-source-missing.d.ts.map +1 -1
- package/dist/inventory/detectors/present-but-undeclared.d.ts +1 -1
- package/dist/inventory/detectors/present-but-undeclared.d.ts.map +1 -1
- package/dist/inventory/detectors/reference-target-missing.d.ts +1 -1
- package/dist/inventory/detectors/reference-target-missing.d.ts.map +1 -1
- package/dist/inventory/index.d.ts +1 -1
- package/dist/inventory/index.d.ts.map +1 -1
- package/dist/inventory/index.js +1 -1
- package/dist/inventory/index.js.map +1 -1
- package/dist/inventory/serialize.d.ts +4 -4
- package/dist/inventory/serialize.d.ts.map +1 -1
- package/dist/inventory/serialize.js +6 -6
- package/dist/inventory/serialize.js.map +1 -1
- package/dist/post-build-checks.d.ts +1 -1
- package/dist/post-build-checks.d.ts.map +1 -1
- package/dist/post-build-checks.js.map +1 -1
- package/dist/projection/skill-extent.d.ts +247 -0
- package/dist/projection/skill-extent.d.ts.map +1 -0
- package/dist/projection/skill-extent.js +558 -0
- package/dist/projection/skill-extent.js.map +1 -0
- package/dist/schemas/agent-skill-frontmatter.js +1 -1
- package/dist/schemas/agent-skill-frontmatter.js.map +1 -1
- package/dist/skill-packager.d.ts +34 -4
- package/dist/skill-packager.d.ts.map +1 -1
- package/dist/skill-packager.js +113 -23
- package/dist/skill-packager.js.map +1 -1
- package/dist/skill-source/git-clone.d.ts.map +1 -1
- package/dist/skill-source/git-clone.js +9 -8
- package/dist/skill-source/git-clone.js.map +1 -1
- package/dist/skill-test/baseline-delta.d.ts +1575 -0
- package/dist/skill-test/baseline-delta.d.ts.map +1 -0
- package/dist/skill-test/baseline-delta.js +272 -0
- package/dist/skill-test/baseline-delta.js.map +1 -0
- package/dist/skill-test/baseline-integrity.d.ts +944 -0
- package/dist/skill-test/baseline-integrity.d.ts.map +1 -0
- package/dist/skill-test/baseline-integrity.js +3083 -0
- package/dist/skill-test/baseline-integrity.js.map +1 -0
- package/dist/skill-test/eval-executor.d.ts +19 -3
- package/dist/skill-test/eval-executor.d.ts.map +1 -1
- package/dist/skill-test/eval-executor.js +3 -3
- package/dist/skill-test/eval-executor.js.map +1 -1
- package/dist/skill-test/eval-fragment.d.ts +80 -6
- package/dist/skill-test/eval-fragment.d.ts.map +1 -1
- package/dist/skill-test/eval-fragment.js +61 -7
- package/dist/skill-test/eval-fragment.js.map +1 -1
- package/dist/skill-test/eval-grader.d.ts.map +1 -1
- package/dist/skill-test/eval-grader.js +143 -7
- package/dist/skill-test/eval-grader.js.map +1 -1
- package/dist/skill-test/eval-inputs.d.ts +107 -6
- package/dist/skill-test/eval-inputs.d.ts.map +1 -1
- package/dist/skill-test/eval-inputs.js +173 -16
- package/dist/skill-test/eval-inputs.js.map +1 -1
- package/dist/skill-test/eval-lint.d.ts +13 -0
- package/dist/skill-test/eval-lint.d.ts.map +1 -1
- package/dist/skill-test/eval-lint.js +17 -4
- package/dist/skill-test/eval-lint.js.map +1 -1
- package/dist/skill-test/executor-prompt.d.ts +13 -5
- package/dist/skill-test/executor-prompt.d.ts.map +1 -1
- package/dist/skill-test/executor-prompt.js +8 -5
- package/dist/skill-test/executor-prompt.js.map +1 -1
- package/dist/skill-test/exit-codes.d.ts +53 -16
- package/dist/skill-test/exit-codes.d.ts.map +1 -1
- package/dist/skill-test/exit-codes.js +123 -40
- package/dist/skill-test/exit-codes.js.map +1 -1
- package/dist/skill-test/fragment-merge.d.ts +1 -18
- package/dist/skill-test/fragment-merge.d.ts.map +1 -1
- package/dist/skill-test/fragment-merge.js +63 -4
- package/dist/skill-test/fragment-merge.js.map +1 -1
- package/dist/skill-test/grader-prompt.d.ts +27 -7
- package/dist/skill-test/grader-prompt.d.ts.map +1 -1
- package/dist/skill-test/grader-prompt.js +253 -61
- package/dist/skill-test/grader-prompt.js.map +1 -1
- package/dist/skill-test/grader-text.d.ts +145 -0
- package/dist/skill-test/grader-text.d.ts.map +1 -0
- package/dist/skill-test/grader-text.js +410 -0
- package/dist/skill-test/grader-text.js.map +1 -0
- package/dist/skill-test/grading-adapter.d.ts +32 -0
- package/dist/skill-test/grading-adapter.d.ts.map +1 -1
- package/dist/skill-test/grading-adapter.js +50 -3
- package/dist/skill-test/grading-adapter.js.map +1 -1
- package/dist/skill-test/grading-schema.d.ts +160 -5
- package/dist/skill-test/grading-schema.d.ts.map +1 -1
- package/dist/skill-test/grading-schema.js +66 -7
- package/dist/skill-test/grading-schema.js.map +1 -1
- package/dist/skill-test/index.d.ts +1 -1
- package/dist/skill-test/index.d.ts.map +1 -1
- package/dist/skill-test/index.js +1 -1
- package/dist/skill-test/index.js.map +1 -1
- package/dist/skill-test/lock.d.ts +56 -0
- package/dist/skill-test/lock.d.ts.map +1 -1
- package/dist/skill-test/lock.js +75 -2
- package/dist/skill-test/lock.js.map +1 -1
- package/dist/skill-test/pipeline.d.ts +16 -0
- package/dist/skill-test/pipeline.d.ts.map +1 -1
- package/dist/skill-test/pipeline.js +16 -9
- package/dist/skill-test/pipeline.js.map +1 -1
- package/dist/skill-test/preflight.d.ts.map +1 -1
- package/dist/skill-test/preflight.js +58 -14
- package/dist/skill-test/preflight.js.map +1 -1
- package/dist/skill-test/run-harness.d.ts +578 -35
- package/dist/skill-test/run-harness.d.ts.map +1 -1
- package/dist/skill-test/run-harness.js +1278 -147
- package/dist/skill-test/run-harness.js.map +1 -1
- package/dist/skill-test/staging.d.ts +8 -2
- package/dist/skill-test/staging.d.ts.map +1 -1
- package/dist/skill-test/staging.js +8 -4
- package/dist/skill-test/staging.js.map +1 -1
- package/dist/skill-test/tool-eval-schema.d.ts +6 -6
- package/dist/test-input.d.ts +1 -1
- package/dist/test-input.d.ts.map +1 -1
- package/dist/validators/agent-instruction-presence.d.ts +1 -1
- package/dist/validators/agent-instruction-presence.d.ts.map +1 -1
- package/dist/validators/bundled-resource-link-detection.d.ts +1 -1
- package/dist/validators/bundled-resource-link-detection.d.ts.map +1 -1
- package/dist/validators/bundled-resource-link-detection.js +1 -1
- package/dist/validators/bundled-resource-link-detection.js.map +1 -1
- package/dist/validators/compat-detectors.d.ts +1 -1
- package/dist/validators/compat-detectors.d.ts.map +1 -1
- package/dist/validators/compat-detectors.js +1 -1
- package/dist/validators/compat-detectors.js.map +1 -1
- package/dist/validators/cross-skill-dependency-detection.d.ts +1 -1
- package/dist/validators/cross-skill-dependency-detection.d.ts.map +1 -1
- package/dist/validators/cross-skill-dependency-detection.js +1 -1
- package/dist/validators/cross-skill-dependency-detection.js.map +1 -1
- package/dist/validators/description-style-detection.d.ts +1 -1
- package/dist/validators/description-style-detection.d.ts.map +1 -1
- package/dist/validators/description-style-detection.js +1 -1
- package/dist/validators/description-style-detection.js.map +1 -1
- package/dist/validators/frontmatter-validation.d.ts +1 -1
- package/dist/validators/frontmatter-validation.d.ts.map +1 -1
- package/dist/validators/frontmatter-validation.js +1 -1
- package/dist/validators/frontmatter-validation.js.map +1 -1
- package/dist/validators/imperative-body-detection.d.ts +1 -1
- package/dist/validators/imperative-body-detection.d.ts.map +1 -1
- package/dist/validators/imperative-body-detection.js +1 -1
- package/dist/validators/imperative-body-detection.js.map +1 -1
- package/dist/validators/index.d.ts +1 -1
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/kebab-case-detection.d.ts +1 -1
- package/dist/validators/kebab-case-detection.d.ts.map +1 -1
- package/dist/validators/kebab-case-detection.js +1 -1
- package/dist/validators/kebab-case-detection.js.map +1 -1
- package/dist/validators/marketplace-validator.js +1 -1
- package/dist/validators/marketplace-validator.js.map +1 -1
- package/dist/validators/packaging-validator.d.ts +38 -5
- package/dist/validators/packaging-validator.d.ts.map +1 -1
- package/dist/validators/packaging-validator.js +87 -10
- package/dist/validators/packaging-validator.js.map +1 -1
- package/dist/validators/plugin-hosted-shape.d.ts +1 -1
- package/dist/validators/plugin-hosted-shape.d.ts.map +1 -1
- package/dist/validators/plugin-hosted-shape.js +1 -1
- package/dist/validators/plugin-hosted-shape.js.map +1 -1
- package/dist/validators/plugin-recommended-fields.d.ts +1 -1
- package/dist/validators/plugin-recommended-fields.d.ts.map +1 -1
- package/dist/validators/plugin-recommended-fields.js +1 -1
- package/dist/validators/plugin-recommended-fields.js.map +1 -1
- package/dist/validators/registry-validator.js +1 -1
- package/dist/validators/registry-validator.js.map +1 -1
- package/dist/validators/rule-engine/rule-engine.d.ts +1 -1
- package/dist/validators/rule-engine/rule-engine.d.ts.map +1 -1
- package/dist/validators/rule-engine/rule-engine.js +20 -9
- package/dist/validators/rule-engine/rule-engine.js.map +1 -1
- package/dist/validators/skill-validator.d.ts.map +1 -1
- package/dist/validators/skill-validator.js +21 -3
- package/dist/validators/skill-validator.js.map +1 -1
- package/dist/validators/types.d.ts +1 -1
- package/dist/validators/types.d.ts.map +1 -1
- package/dist/validators/unified-validator.js +1 -1
- package/dist/validators/unified-validator.js.map +1 -1
- package/dist/validators/validation-rules.d.ts +1 -1
- package/dist/validators/validation-rules.d.ts.map +1 -1
- package/dist/validators/walker-to-issues.d.ts +7 -3
- package/dist/validators/walker-to-issues.d.ts.map +1 -1
- package/dist/validators/walker-to-issues.js +37 -8
- package/dist/validators/walker-to-issues.js.map +1 -1
- package/dist/walk-link-graph.d.ts.map +1 -1
- package/dist/walk-link-graph.js +36 -2
- package/dist/walk-link-graph.js.map +1 -1
- 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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC/B,MAAM,yBAAyB,CAAC;AA8CjC,eAAO,MAAM,eAAe;;;;;;IAM1B;;;;OAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcD,CAAC;AAEL,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB;IAChC,6DAA6D;;IAE7D,sCAAsC;;IAEtC,mDAAmD;;IAEnD,6EAA6E;;;;;;;;;;;;EAEpE,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAG9B;;;;;;;OAOG;;;;;;;;QAjEH;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgEH;;;;;;;;OAQG;;;;;;;;;;;IAEH;;;;;;;OAOG;;QAhDH,6DAA6D;;QAE7D,sCAAsC;;QAEtC,mDAAmD;;QAEnD,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmD3E,CAAC;AAEL,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAlDjC;;;;;;;WAOG;;;;;;;;YAjEH;;;;eAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgEH;;;;;;;;WAQG;;;;;;;;;;;QAEH;;;;;;;WAOG;;YAhDH,6DAA6D;;YAE7D,sCAAsC;;YAEtC,mDAAmD;;YAEnD,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAe7E;;;;;;;WAOG;;;;;;;;YAjEH;;;;eAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgEH;;;;;;;;WAQG;;;;;;;;;;;QAEH;;;;;;;WAOG;;YAhDH,6DAA6D;;YAE7D,sCAAsC;;YAEtC,mDAAmD;;YAEnD,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAe7E;;;;;;;WAOG;;;;;;;;YAjEH;;;;eAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgEH;;;;;;;;WAQG;;;;;;;;;;;QAEH;;;;;;;WAOG;;YAhDH,6DAA6D;;YAE7D,sCAAsC;;YAEtC,mDAAmD;;YAEnD,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAoE/D,CAAC;AAajB,6DAA6D;AAC7D,MAAM,WAAW,yBAAyB;IACxC,2CAA2C;IAC3C,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,0FAA0F;IAC1F,UAAU,EAAE,SAAS,YAAY,EAAE,CAAC;IACpC,uEAAuE;IACvE,IAAI,EAAE,SAAS,eAAe,EAAE,CAAC;IACjC,iFAAiF;IACjF,kBAAkB,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACzD,kEAAkE;IAClE,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,aAAa,CA0BpF;AA2DD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAKpE"}
|
|
@@ -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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"}
|