@vibe-agent-toolkit/agent-skills 0.1.42 → 0.2.0-rc.10

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 (322) hide show
  1. package/README.md +5 -5
  2. package/dist/builder.d.ts.map +1 -1
  3. package/dist/builder.js +7 -17
  4. package/dist/builder.js.map +1 -1
  5. package/dist/content-type-routing.d.ts +32 -0
  6. package/dist/content-type-routing.d.ts.map +1 -1
  7. package/dist/content-type-routing.js +23 -0
  8. package/dist/content-type-routing.js.map +1 -1
  9. package/dist/files-config.d.ts +34 -1
  10. package/dist/files-config.d.ts.map +1 -1
  11. package/dist/files-config.js +277 -39
  12. package/dist/files-config.js.map +1 -1
  13. package/dist/fs-attribution.d.ts +45 -0
  14. package/dist/fs-attribution.d.ts.map +1 -0
  15. package/dist/fs-attribution.js +57 -0
  16. package/dist/fs-attribution.js.map +1 -0
  17. package/dist/import.d.ts.map +1 -1
  18. package/dist/import.js +0 -4
  19. package/dist/import.js.map +1 -1
  20. package/dist/index.d.ts +13 -8
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +25 -7
  23. package/dist/index.js.map +1 -1
  24. package/dist/inventory/detectors/declared-but-missing.d.ts +1 -1
  25. package/dist/inventory/detectors/declared-but-missing.d.ts.map +1 -1
  26. package/dist/inventory/detectors/marketplace-source-missing.d.ts +1 -1
  27. package/dist/inventory/detectors/marketplace-source-missing.d.ts.map +1 -1
  28. package/dist/inventory/detectors/present-but-undeclared.d.ts +1 -1
  29. package/dist/inventory/detectors/present-but-undeclared.d.ts.map +1 -1
  30. package/dist/inventory/detectors/reference-target-missing.d.ts +1 -1
  31. package/dist/inventory/detectors/reference-target-missing.d.ts.map +1 -1
  32. package/dist/inventory/index.d.ts +1 -1
  33. package/dist/inventory/index.d.ts.map +1 -1
  34. package/dist/inventory/index.js +1 -1
  35. package/dist/inventory/index.js.map +1 -1
  36. package/dist/inventory/serialize.d.ts +4 -4
  37. package/dist/inventory/serialize.d.ts.map +1 -1
  38. package/dist/inventory/serialize.js +6 -6
  39. package/dist/inventory/serialize.js.map +1 -1
  40. package/dist/inventory/types.d.ts +8 -0
  41. package/dist/inventory/types.d.ts.map +1 -1
  42. package/dist/inventory/types.js.map +1 -1
  43. package/dist/link-graph-members.d.ts +18 -0
  44. package/dist/link-graph-members.d.ts.map +1 -0
  45. package/dist/link-graph-members.js +18 -0
  46. package/dist/link-graph-members.js.map +1 -0
  47. package/dist/parsers/frontmatter-parser.d.ts.map +1 -1
  48. package/dist/parsers/frontmatter-parser.js +30 -6
  49. package/dist/parsers/frontmatter-parser.js.map +1 -1
  50. package/dist/plugin-distribution-layout.d.ts +70 -6
  51. package/dist/plugin-distribution-layout.d.ts.map +1 -1
  52. package/dist/plugin-distribution-layout.js +84 -11
  53. package/dist/plugin-distribution-layout.js.map +1 -1
  54. package/dist/post-build-checks.d.ts +38 -1
  55. package/dist/post-build-checks.d.ts.map +1 -1
  56. package/dist/post-build-checks.js +68 -17
  57. package/dist/post-build-checks.js.map +1 -1
  58. package/dist/projection/skill-extent.d.ts +247 -0
  59. package/dist/projection/skill-extent.d.ts.map +1 -0
  60. package/dist/projection/skill-extent.js +560 -0
  61. package/dist/projection/skill-extent.js.map +1 -0
  62. package/dist/schemas/agent-skill-frontmatter.js +1 -1
  63. package/dist/schemas/agent-skill-frontmatter.js.map +1 -1
  64. package/dist/schemas/allowed-tools.d.ts +31 -0
  65. package/dist/schemas/allowed-tools.d.ts.map +1 -0
  66. package/dist/schemas/allowed-tools.js +88 -0
  67. package/dist/schemas/allowed-tools.js.map +1 -0
  68. package/dist/schemas/index.d.ts +1 -0
  69. package/dist/schemas/index.d.ts.map +1 -1
  70. package/dist/schemas/index.js +1 -0
  71. package/dist/schemas/index.js.map +1 -1
  72. package/dist/schemas/installed-plugins-registry.d.ts.map +1 -1
  73. package/dist/schemas/installed-plugins-registry.js +7 -1
  74. package/dist/schemas/installed-plugins-registry.js.map +1 -1
  75. package/dist/schemas/marketplace-manifest.d.ts.map +1 -1
  76. package/dist/schemas/marketplace-manifest.js +17 -6
  77. package/dist/schemas/marketplace-manifest.js.map +1 -1
  78. package/dist/skill-identity.d.ts +18 -3
  79. package/dist/skill-identity.d.ts.map +1 -1
  80. package/dist/skill-identity.js +25 -6
  81. package/dist/skill-identity.js.map +1 -1
  82. package/dist/skill-packager.d.ts +144 -20
  83. package/dist/skill-packager.d.ts.map +1 -1
  84. package/dist/skill-packager.js +447 -105
  85. package/dist/skill-packager.js.map +1 -1
  86. package/dist/skill-source/content-hash.d.ts.map +1 -1
  87. package/dist/skill-source/content-hash.js +21 -10
  88. package/dist/skill-source/content-hash.js.map +1 -1
  89. package/dist/skill-source/fetch-cache.d.ts.map +1 -1
  90. package/dist/skill-source/fetch-cache.js +0 -5
  91. package/dist/skill-source/fetch-cache.js.map +1 -1
  92. package/dist/skill-source/git-clone.d.ts +1 -1
  93. package/dist/skill-source/git-clone.d.ts.map +1 -1
  94. package/dist/skill-source/git-clone.js +10 -10
  95. package/dist/skill-source/git-clone.js.map +1 -1
  96. package/dist/skill-source/sources/url-source.d.ts.map +1 -1
  97. package/dist/skill-source/sources/url-source.js +2 -2
  98. package/dist/skill-source/sources/url-source.js.map +1 -1
  99. package/dist/skill-source/stage.d.ts.map +1 -1
  100. package/dist/skill-source/stage.js +0 -6
  101. package/dist/skill-source/stage.js.map +1 -1
  102. package/dist/skill-test/baseline-delta.d.ts +1575 -0
  103. package/dist/skill-test/baseline-delta.d.ts.map +1 -0
  104. package/dist/skill-test/baseline-delta.js +272 -0
  105. package/dist/skill-test/baseline-delta.js.map +1 -0
  106. package/dist/skill-test/baseline-integrity.d.ts +944 -0
  107. package/dist/skill-test/baseline-integrity.d.ts.map +1 -0
  108. package/dist/skill-test/baseline-integrity.js +3090 -0
  109. package/dist/skill-test/baseline-integrity.js.map +1 -0
  110. package/dist/skill-test/build-hook.d.ts +3 -2
  111. package/dist/skill-test/build-hook.d.ts.map +1 -1
  112. package/dist/skill-test/build-hook.js +4 -5
  113. package/dist/skill-test/build-hook.js.map +1 -1
  114. package/dist/skill-test/configure-writer.js +1 -1
  115. package/dist/skill-test/configure-writer.js.map +1 -1
  116. package/dist/skill-test/declared-env.d.ts +5 -4
  117. package/dist/skill-test/declared-env.d.ts.map +1 -1
  118. package/dist/skill-test/declared-env.js +8 -9
  119. package/dist/skill-test/declared-env.js.map +1 -1
  120. package/dist/skill-test/eval-executor.d.ts +21 -5
  121. package/dist/skill-test/eval-executor.d.ts.map +1 -1
  122. package/dist/skill-test/eval-executor.js +6 -6
  123. package/dist/skill-test/eval-executor.js.map +1 -1
  124. package/dist/skill-test/eval-fragment.d.ts +106 -28
  125. package/dist/skill-test/eval-fragment.d.ts.map +1 -1
  126. package/dist/skill-test/eval-fragment.js +78 -16
  127. package/dist/skill-test/eval-fragment.js.map +1 -1
  128. package/dist/skill-test/eval-grader.d.ts +65 -7
  129. package/dist/skill-test/eval-grader.d.ts.map +1 -1
  130. package/dist/skill-test/eval-grader.js +263 -64
  131. package/dist/skill-test/eval-grader.js.map +1 -1
  132. package/dist/skill-test/eval-inputs.d.ts +110 -8
  133. package/dist/skill-test/eval-inputs.d.ts.map +1 -1
  134. package/dist/skill-test/eval-inputs.js +177 -22
  135. package/dist/skill-test/eval-inputs.js.map +1 -1
  136. package/dist/skill-test/eval-lint.d.ts +17 -4
  137. package/dist/skill-test/eval-lint.d.ts.map +1 -1
  138. package/dist/skill-test/eval-lint.js +22 -9
  139. package/dist/skill-test/eval-lint.js.map +1 -1
  140. package/dist/skill-test/eval-suite-isolation.d.ts.map +1 -1
  141. package/dist/skill-test/eval-suite-isolation.js +8 -5
  142. package/dist/skill-test/eval-suite-isolation.js.map +1 -1
  143. package/dist/skill-test/evals-template.d.ts +1 -1
  144. package/dist/skill-test/evals-template.d.ts.map +1 -1
  145. package/dist/skill-test/evals-template.js +1 -3
  146. package/dist/skill-test/evals-template.js.map +1 -1
  147. package/dist/skill-test/executor-prompt.d.ts +15 -7
  148. package/dist/skill-test/executor-prompt.d.ts.map +1 -1
  149. package/dist/skill-test/executor-prompt.js +10 -7
  150. package/dist/skill-test/executor-prompt.js.map +1 -1
  151. package/dist/skill-test/failure-reason.d.ts +113 -0
  152. package/dist/skill-test/failure-reason.d.ts.map +1 -0
  153. package/dist/skill-test/failure-reason.js +124 -0
  154. package/dist/skill-test/failure-reason.js.map +1 -0
  155. package/dist/skill-test/fragment-merge.d.ts +3 -20
  156. package/dist/skill-test/fragment-merge.d.ts.map +1 -1
  157. package/dist/skill-test/fragment-merge.js +67 -8
  158. package/dist/skill-test/fragment-merge.js.map +1 -1
  159. package/dist/skill-test/grader-prompt.d.ts +29 -9
  160. package/dist/skill-test/grader-prompt.d.ts.map +1 -1
  161. package/dist/skill-test/grader-prompt.js +264 -68
  162. package/dist/skill-test/grader-prompt.js.map +1 -1
  163. package/dist/skill-test/grader-text.d.ts +145 -0
  164. package/dist/skill-test/grader-text.d.ts.map +1 -0
  165. package/dist/skill-test/grader-text.js +410 -0
  166. package/dist/skill-test/grader-text.js.map +1 -0
  167. package/dist/skill-test/grading-adapter.d.ts +38 -2
  168. package/dist/skill-test/grading-adapter.d.ts.map +1 -1
  169. package/dist/skill-test/grading-adapter.js +57 -9
  170. package/dist/skill-test/grading-adapter.js.map +1 -1
  171. package/dist/skill-test/grading-schema.d.ts +160 -5
  172. package/dist/skill-test/grading-schema.d.ts.map +1 -1
  173. package/dist/skill-test/grading-schema.js +66 -7
  174. package/dist/skill-test/grading-schema.js.map +1 -1
  175. package/dist/skill-test/harness-location.d.ts +3 -2
  176. package/dist/skill-test/harness-location.d.ts.map +1 -1
  177. package/dist/skill-test/harness-location.js +5 -16
  178. package/dist/skill-test/harness-location.js.map +1 -1
  179. package/dist/skill-test/index.d.ts +2 -2
  180. package/dist/skill-test/index.d.ts.map +1 -1
  181. package/dist/skill-test/index.js +2 -2
  182. package/dist/skill-test/index.js.map +1 -1
  183. package/dist/skill-test/lock.d.ts +58 -1
  184. package/dist/skill-test/lock.d.ts.map +1 -1
  185. package/dist/skill-test/lock.js +78 -6
  186. package/dist/skill-test/lock.js.map +1 -1
  187. package/dist/skill-test/pipeline.d.ts +19 -1
  188. package/dist/skill-test/pipeline.d.ts.map +1 -1
  189. package/dist/skill-test/pipeline.js +21 -10
  190. package/dist/skill-test/pipeline.js.map +1 -1
  191. package/dist/skill-test/preflight.d.ts +1 -1
  192. package/dist/skill-test/preflight.d.ts.map +1 -1
  193. package/dist/skill-test/preflight.js +59 -16
  194. package/dist/skill-test/preflight.js.map +1 -1
  195. package/dist/skill-test/prompt-invariants.d.ts +4 -2
  196. package/dist/skill-test/prompt-invariants.d.ts.map +1 -1
  197. package/dist/skill-test/prompt-invariants.js +5 -4
  198. package/dist/skill-test/prompt-invariants.js.map +1 -1
  199. package/dist/skill-test/run-harness.d.ts +665 -85
  200. package/dist/skill-test/run-harness.d.ts.map +1 -1
  201. package/dist/skill-test/run-harness.js +1522 -237
  202. package/dist/skill-test/run-harness.js.map +1 -1
  203. package/dist/skill-test/staging.d.ts +20 -8
  204. package/dist/skill-test/staging.d.ts.map +1 -1
  205. package/dist/skill-test/staging.js +25 -18
  206. package/dist/skill-test/staging.js.map +1 -1
  207. package/dist/skill-test/tier-plan.d.ts +1 -1
  208. package/dist/skill-test/tier-plan.js +1 -1
  209. package/dist/skill-test/tool-eval-schema.d.ts +6 -6
  210. package/dist/skill-test/tool-eval-schema.js +2 -2
  211. package/dist/skill-test/vendor-manifest.d.ts +2 -1
  212. package/dist/skill-test/vendor-manifest.d.ts.map +1 -1
  213. package/dist/skill-test/vendor-manifest.js +10 -10
  214. package/dist/skill-test/vendor-manifest.js.map +1 -1
  215. package/dist/test-input.d.ts +59 -8
  216. package/dist/test-input.d.ts.map +1 -1
  217. package/dist/test-input.js +64 -19
  218. package/dist/test-input.js.map +1 -1
  219. package/dist/validators/agent-instruction-presence.d.ts +1 -1
  220. package/dist/validators/agent-instruction-presence.d.ts.map +1 -1
  221. package/dist/validators/agent-instruction-presence.js +45 -2
  222. package/dist/validators/agent-instruction-presence.js.map +1 -1
  223. package/dist/validators/bundled-resource-link-detection.d.ts +6 -4
  224. package/dist/validators/bundled-resource-link-detection.d.ts.map +1 -1
  225. package/dist/validators/bundled-resource-link-detection.js +39 -39
  226. package/dist/validators/bundled-resource-link-detection.js.map +1 -1
  227. package/dist/validators/compat-detectors.d.ts +18 -1
  228. package/dist/validators/compat-detectors.d.ts.map +1 -1
  229. package/dist/validators/compat-detectors.js +47 -20
  230. package/dist/validators/compat-detectors.js.map +1 -1
  231. package/dist/validators/cross-skill-dependency-detection.d.ts +1 -1
  232. package/dist/validators/cross-skill-dependency-detection.d.ts.map +1 -1
  233. package/dist/validators/cross-skill-dependency-detection.js +1 -1
  234. package/dist/validators/cross-skill-dependency-detection.js.map +1 -1
  235. package/dist/validators/description-style-detection.d.ts +1 -1
  236. package/dist/validators/description-style-detection.d.ts.map +1 -1
  237. package/dist/validators/description-style-detection.js +1 -1
  238. package/dist/validators/description-style-detection.js.map +1 -1
  239. package/dist/validators/format-detection.d.ts +3 -0
  240. package/dist/validators/format-detection.d.ts.map +1 -1
  241. package/dist/validators/format-detection.js +41 -26
  242. package/dist/validators/format-detection.js.map +1 -1
  243. package/dist/validators/frontmatter-validation.d.ts +1 -1
  244. package/dist/validators/frontmatter-validation.d.ts.map +1 -1
  245. package/dist/validators/frontmatter-validation.js +2 -2
  246. package/dist/validators/frontmatter-validation.js.map +1 -1
  247. package/dist/validators/imperative-body-detection.d.ts +1 -1
  248. package/dist/validators/imperative-body-detection.d.ts.map +1 -1
  249. package/dist/validators/imperative-body-detection.js +1 -1
  250. package/dist/validators/imperative-body-detection.js.map +1 -1
  251. package/dist/validators/index.d.ts +1 -1
  252. package/dist/validators/index.d.ts.map +1 -1
  253. package/dist/validators/kebab-case-detection.d.ts +1 -1
  254. package/dist/validators/kebab-case-detection.d.ts.map +1 -1
  255. package/dist/validators/kebab-case-detection.js +1 -1
  256. package/dist/validators/kebab-case-detection.js.map +1 -1
  257. package/dist/validators/marketplace-validator.d.ts.map +1 -1
  258. package/dist/validators/marketplace-validator.js +7 -2
  259. package/dist/validators/marketplace-validator.js.map +1 -1
  260. package/dist/validators/mcp-tool-qualification.d.ts +158 -0
  261. package/dist/validators/mcp-tool-qualification.d.ts.map +1 -0
  262. package/dist/validators/mcp-tool-qualification.js +467 -0
  263. package/dist/validators/mcp-tool-qualification.js.map +1 -0
  264. package/dist/validators/packaged-size-limit.d.ts +296 -0
  265. package/dist/validators/packaged-size-limit.d.ts.map +1 -0
  266. package/dist/validators/packaged-size-limit.js +492 -0
  267. package/dist/validators/packaged-size-limit.js.map +1 -0
  268. package/dist/validators/packaging-validator.d.ts +149 -10
  269. package/dist/validators/packaging-validator.d.ts.map +1 -1
  270. package/dist/validators/packaging-validator.js +371 -55
  271. package/dist/validators/packaging-validator.js.map +1 -1
  272. package/dist/validators/plugin-hosted-shape.d.ts +4 -2
  273. package/dist/validators/plugin-hosted-shape.d.ts.map +1 -1
  274. package/dist/validators/plugin-hosted-shape.js +6 -7
  275. package/dist/validators/plugin-hosted-shape.js.map +1 -1
  276. package/dist/validators/plugin-recommended-fields.d.ts +1 -1
  277. package/dist/validators/plugin-recommended-fields.d.ts.map +1 -1
  278. package/dist/validators/plugin-recommended-fields.js +1 -1
  279. package/dist/validators/plugin-recommended-fields.js.map +1 -1
  280. package/dist/validators/referenced-path-missing.d.ts +211 -0
  281. package/dist/validators/referenced-path-missing.d.ts.map +1 -0
  282. package/dist/validators/referenced-path-missing.js +378 -0
  283. package/dist/validators/referenced-path-missing.js.map +1 -0
  284. package/dist/validators/registry-validator.d.ts.map +1 -1
  285. package/dist/validators/registry-validator.js +1 -2
  286. package/dist/validators/registry-validator.js.map +1 -1
  287. package/dist/validators/rule-engine/index.d.ts +1 -1
  288. package/dist/validators/rule-engine/rule-context.d.ts +20 -3
  289. package/dist/validators/rule-engine/rule-context.d.ts.map +1 -1
  290. package/dist/validators/rule-engine/rule-context.js +3 -1
  291. package/dist/validators/rule-engine/rule-context.js.map +1 -1
  292. package/dist/validators/rule-engine/rule-engine.d.ts +2 -2
  293. package/dist/validators/rule-engine/rule-engine.d.ts.map +1 -1
  294. package/dist/validators/rule-engine/rule-engine.js +52 -13
  295. package/dist/validators/rule-engine/rule-engine.js.map +1 -1
  296. package/dist/validators/skill-validator.d.ts.map +1 -1
  297. package/dist/validators/skill-validator.js +91 -54
  298. package/dist/validators/skill-validator.js.map +1 -1
  299. package/dist/validators/source-only-codes.js +1 -1
  300. package/dist/validators/source-only-codes.js.map +1 -1
  301. package/dist/validators/types.d.ts +21 -1
  302. package/dist/validators/types.d.ts.map +1 -1
  303. package/dist/validators/unified-validator.d.ts.map +1 -1
  304. package/dist/validators/unified-validator.js +4 -5
  305. package/dist/validators/unified-validator.js.map +1 -1
  306. package/dist/validators/validation-rules.d.ts +4 -4
  307. package/dist/validators/validation-rules.d.ts.map +1 -1
  308. package/dist/validators/validation-rules.js +9 -38
  309. package/dist/validators/validation-rules.js.map +1 -1
  310. package/dist/validators/walker-to-issues.d.ts +9 -3
  311. package/dist/validators/walker-to-issues.d.ts.map +1 -1
  312. package/dist/validators/walker-to-issues.js +64 -19
  313. package/dist/validators/walker-to-issues.js.map +1 -1
  314. package/dist/walk-link-graph.d.ts +64 -5
  315. package/dist/walk-link-graph.d.ts.map +1 -1
  316. package/dist/walk-link-graph.js +376 -92
  317. package/dist/walk-link-graph.js.map +1 -1
  318. package/package.json +14 -22
  319. package/dist/skill-test/exit-codes.d.ts +0 -97
  320. package/dist/skill-test/exit-codes.d.ts.map +0 -1
  321. package/dist/skill-test/exit-codes.js +0 -141
  322. package/dist/skill-test/exit-codes.js.map +0 -1
@@ -31,20 +31,51 @@ export declare const GradedExpectationSchema: z.ZodObject<{
31
31
  text: z.ZodString;
32
32
  passed: z.ZodBoolean;
33
33
  evidence: z.ZodOptional<z.ZodString>;
34
+ /**
35
+ * Which eval this expectation was graded under. vat stamps it when it
36
+ * assembles the aggregate from per-eval grader fragments, so that a
37
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
38
+ * in aggregate — without it, a reader can compare two totals but cannot say
39
+ * which eval moved. Optional because a grading.json produced by external
40
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
41
+ * documents the field vat now emits rather than tightening the contract.
42
+ */
43
+ evalId: z.ZodOptional<z.ZodString>;
34
44
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
35
45
  text: z.ZodString;
36
46
  passed: z.ZodBoolean;
37
47
  evidence: z.ZodOptional<z.ZodString>;
48
+ /**
49
+ * Which eval this expectation was graded under. vat stamps it when it
50
+ * assembles the aggregate from per-eval grader fragments, so that a
51
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
52
+ * in aggregate — without it, a reader can compare two totals but cannot say
53
+ * which eval moved. Optional because a grading.json produced by external
54
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
55
+ * documents the field vat now emits rather than tightening the contract.
56
+ */
57
+ evalId: z.ZodOptional<z.ZodString>;
38
58
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
39
59
  text: z.ZodString;
40
60
  passed: z.ZodBoolean;
41
61
  evidence: z.ZodOptional<z.ZodString>;
62
+ /**
63
+ * Which eval this expectation was graded under. vat stamps it when it
64
+ * assembles the aggregate from per-eval grader fragments, so that a
65
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
66
+ * in aggregate — without it, a reader can compare two totals but cannot say
67
+ * which eval moved. Optional because a grading.json produced by external
68
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
69
+ * documents the field vat now emits rather than tightening the contract.
70
+ */
71
+ evalId: z.ZodOptional<z.ZodString>;
42
72
  }, z.ZodTypeAny, "passthrough">>;
43
73
  export type GradedExpectation = z.infer<typeof GradedExpectationSchema>;
44
74
  /**
45
75
  * Aggregate pass/fail counts. `failed`/`pass_rate` are documented but optional.
46
76
  * Counts are non-negative integers (a float or negative count is a grader bug),
47
- * and `passed` can never exceed `total`.
77
+ * and `passed` can never exceed `total` — see {@link SUMMARY_SCHEMA_DESCRIPTION}
78
+ * for why that last one has to be stated twice.
48
79
  */
49
80
  export declare const GradingSummarySchema: z.ZodEffects<z.ZodObject<{
50
81
  passed: z.ZodNumber;
@@ -83,14 +114,44 @@ export declare const GradingReportSchema: z.ZodObject<{
83
114
  text: z.ZodString;
84
115
  passed: z.ZodBoolean;
85
116
  evidence: z.ZodOptional<z.ZodString>;
117
+ /**
118
+ * Which eval this expectation was graded under. vat stamps it when it
119
+ * assembles the aggregate from per-eval grader fragments, so that a
120
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
121
+ * in aggregate — without it, a reader can compare two totals but cannot say
122
+ * which eval moved. Optional because a grading.json produced by external
123
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
124
+ * documents the field vat now emits rather than tightening the contract.
125
+ */
126
+ evalId: z.ZodOptional<z.ZodString>;
86
127
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
87
128
  text: z.ZodString;
88
129
  passed: z.ZodBoolean;
89
130
  evidence: z.ZodOptional<z.ZodString>;
131
+ /**
132
+ * Which eval this expectation was graded under. vat stamps it when it
133
+ * assembles the aggregate from per-eval grader fragments, so that a
134
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
135
+ * in aggregate — without it, a reader can compare two totals but cannot say
136
+ * which eval moved. Optional because a grading.json produced by external
137
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
138
+ * documents the field vat now emits rather than tightening the contract.
139
+ */
140
+ evalId: z.ZodOptional<z.ZodString>;
90
141
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
91
142
  text: z.ZodString;
92
143
  passed: z.ZodBoolean;
93
144
  evidence: z.ZodOptional<z.ZodString>;
145
+ /**
146
+ * Which eval this expectation was graded under. vat stamps it when it
147
+ * assembles the aggregate from per-eval grader fragments, so that a
148
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
149
+ * in aggregate — without it, a reader can compare two totals but cannot say
150
+ * which eval moved. Optional because a grading.json produced by external
151
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
152
+ * documents the field vat now emits rather than tightening the contract.
153
+ */
154
+ evalId: z.ZodOptional<z.ZodString>;
94
155
  }, z.ZodTypeAny, "passthrough">>, "many">;
95
156
  summary: z.ZodEffects<z.ZodObject<{
96
157
  passed: z.ZodNumber;
@@ -127,19 +188,58 @@ export declare const GradingReportSchema: z.ZodObject<{
127
188
  * by untrusted skill code is rejected.
128
189
  */
129
190
  runNonce: z.ZodOptional<z.ZodString>;
191
+ /**
192
+ * Which `--baseline` arm produced this report: `'with'` (the skill declared)
193
+ * or `'without'` (the control arm run with the skill withheld). vat writes
194
+ * the two arms to two files of the SAME shape — `grading.json` and
195
+ * `baseline.json` — so without this field a reader holding one of them
196
+ * cannot tell which arm it is looking at. Optional for the same reason
197
+ * `runNonce` is: an externally produced grading.json has no arm to declare.
198
+ */
199
+ arm: z.ZodOptional<z.ZodEnum<["with", "without"]>>;
130
200
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
131
201
  expectations: z.ZodArray<z.ZodObject<{
132
202
  text: z.ZodString;
133
203
  passed: z.ZodBoolean;
134
204
  evidence: z.ZodOptional<z.ZodString>;
205
+ /**
206
+ * Which eval this expectation was graded under. vat stamps it when it
207
+ * assembles the aggregate from per-eval grader fragments, so that a
208
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
209
+ * in aggregate — without it, a reader can compare two totals but cannot say
210
+ * which eval moved. Optional because a grading.json produced by external
211
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
212
+ * documents the field vat now emits rather than tightening the contract.
213
+ */
214
+ evalId: z.ZodOptional<z.ZodString>;
135
215
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
136
216
  text: z.ZodString;
137
217
  passed: z.ZodBoolean;
138
218
  evidence: z.ZodOptional<z.ZodString>;
219
+ /**
220
+ * Which eval this expectation was graded under. vat stamps it when it
221
+ * assembles the aggregate from per-eval grader fragments, so that a
222
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
223
+ * in aggregate — without it, a reader can compare two totals but cannot say
224
+ * which eval moved. Optional because a grading.json produced by external
225
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
226
+ * documents the field vat now emits rather than tightening the contract.
227
+ */
228
+ evalId: z.ZodOptional<z.ZodString>;
139
229
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
140
230
  text: z.ZodString;
141
231
  passed: z.ZodBoolean;
142
232
  evidence: z.ZodOptional<z.ZodString>;
233
+ /**
234
+ * Which eval this expectation was graded under. vat stamps it when it
235
+ * assembles the aggregate from per-eval grader fragments, so that a
236
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
237
+ * in aggregate — without it, a reader can compare two totals but cannot say
238
+ * which eval moved. Optional because a grading.json produced by external
239
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
240
+ * documents the field vat now emits rather than tightening the contract.
241
+ */
242
+ evalId: z.ZodOptional<z.ZodString>;
143
243
  }, z.ZodTypeAny, "passthrough">>, "many">;
144
244
  summary: z.ZodEffects<z.ZodObject<{
145
245
  passed: z.ZodNumber;
@@ -176,19 +276,58 @@ export declare const GradingReportSchema: z.ZodObject<{
176
276
  * by untrusted skill code is rejected.
177
277
  */
178
278
  runNonce: z.ZodOptional<z.ZodString>;
279
+ /**
280
+ * Which `--baseline` arm produced this report: `'with'` (the skill declared)
281
+ * or `'without'` (the control arm run with the skill withheld). vat writes
282
+ * the two arms to two files of the SAME shape — `grading.json` and
283
+ * `baseline.json` — so without this field a reader holding one of them
284
+ * cannot tell which arm it is looking at. Optional for the same reason
285
+ * `runNonce` is: an externally produced grading.json has no arm to declare.
286
+ */
287
+ arm: z.ZodOptional<z.ZodEnum<["with", "without"]>>;
179
288
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
180
289
  expectations: z.ZodArray<z.ZodObject<{
181
290
  text: z.ZodString;
182
291
  passed: z.ZodBoolean;
183
292
  evidence: z.ZodOptional<z.ZodString>;
293
+ /**
294
+ * Which eval this expectation was graded under. vat stamps it when it
295
+ * assembles the aggregate from per-eval grader fragments, so that a
296
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
297
+ * in aggregate — without it, a reader can compare two totals but cannot say
298
+ * which eval moved. Optional because a grading.json produced by external
299
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
300
+ * documents the field vat now emits rather than tightening the contract.
301
+ */
302
+ evalId: z.ZodOptional<z.ZodString>;
184
303
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
185
304
  text: z.ZodString;
186
305
  passed: z.ZodBoolean;
187
306
  evidence: z.ZodOptional<z.ZodString>;
307
+ /**
308
+ * Which eval this expectation was graded under. vat stamps it when it
309
+ * assembles the aggregate from per-eval grader fragments, so that a
310
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
311
+ * in aggregate — without it, a reader can compare two totals but cannot say
312
+ * which eval moved. Optional because a grading.json produced by external
313
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
314
+ * documents the field vat now emits rather than tightening the contract.
315
+ */
316
+ evalId: z.ZodOptional<z.ZodString>;
188
317
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
189
318
  text: z.ZodString;
190
319
  passed: z.ZodBoolean;
191
320
  evidence: z.ZodOptional<z.ZodString>;
321
+ /**
322
+ * Which eval this expectation was graded under. vat stamps it when it
323
+ * assembles the aggregate from per-eval grader fragments, so that a
324
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
325
+ * in aggregate — without it, a reader can compare two totals but cannot say
326
+ * which eval moved. Optional because a grading.json produced by external
327
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
328
+ * documents the field vat now emits rather than tightening the contract.
329
+ */
330
+ evalId: z.ZodOptional<z.ZodString>;
192
331
  }, z.ZodTypeAny, "passthrough">>, "many">;
193
332
  summary: z.ZodEffects<z.ZodObject<{
194
333
  passed: z.ZodNumber;
@@ -225,13 +364,29 @@ export declare const GradingReportSchema: z.ZodObject<{
225
364
  * by untrusted skill code is rejected.
226
365
  */
227
366
  runNonce: z.ZodOptional<z.ZodString>;
367
+ /**
368
+ * Which `--baseline` arm produced this report: `'with'` (the skill declared)
369
+ * or `'without'` (the control arm run with the skill withheld). vat writes
370
+ * the two arms to two files of the SAME shape — `grading.json` and
371
+ * `baseline.json` — so without this field a reader holding one of them
372
+ * cannot tell which arm it is looking at. Optional for the same reason
373
+ * `runNonce` is: an externally produced grading.json has no arm to declare.
374
+ */
375
+ arm: z.ZodOptional<z.ZodEnum<["with", "without"]>>;
228
376
  }, z.ZodTypeAny, "passthrough">>;
229
377
  export type GradingReport = z.infer<typeof GradingReportSchema>;
230
378
  /**
231
- * Published JSON Schema for grading.json — generated from {@link GradingReportSchema}
232
- * so the two never drift. Importable by external tooling that wants to validate a
233
- * grading.json without depending on Zod. Documented in
234
- * docs/skill-test-grading-schema.md.
379
+ * Published JSON Schema for grading.json — generated from {@link GradingReportSchema},
380
+ * so its SHAPE (fields, types, required-ness, additionalProperties) cannot drift from
381
+ * the Zod schema. Importable by external tooling that wants to validate a grading.json
382
+ * without depending on Zod. Documented in docs/skill-test-grading-schema.md.
383
+ *
384
+ * It is NOT equivalent to the Zod schema, and never can be. `zodToJsonSchema` drops
385
+ * every `.refine()`, and the two refinements in this file are cross-field relations
386
+ * JSON Schema has no way to express — so the generated document is strictly weaker
387
+ * than the validator that generated it. That gap is stated, in the document itself,
388
+ * on the field it applies to (see {@link SUMMARY_SCHEMA_DESCRIPTION}); a consumer
389
+ * that needs the invariant enforced must re-implement it or use the Zod schema.
235
390
  */
236
391
  export declare const GradingReportJsonSchema: import("zod-to-json-schema").JsonSchema7Type & {
237
392
  $schema?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"grading-schema.d.ts","sourceRoot":"","sources":["../../src/skill-test/grading-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,sFAAsF;AACtF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;gCAMpB,CAAC;AAEjB,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;gCAU7B,CAAC;AAEL,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAI5B;;;;;;;OAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAPH;;;;;;;OAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAPH;;;;;;;OAOG;;gCAGS,CAAC;AAEjB,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB;;;;;CAAyD,CAAC"}
1
+ {"version":3,"file":"grading-schema.d.ts","sourceRoot":"","sources":["../../src/skill-test/grading-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,sFAAsF;AACtF,eAAO,MAAM,uBAAuB;;;;IAKhC;;;;;;;;OAQG;;;;;;IARH;;;;;;;;OAQG;;;;;;IARH;;;;;;;;OAQG;;gCAGS,CAAC;AAEjB,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAiCxE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;gCAcM,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;QA3E5B;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;;;;;;QA/FH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;;;;;;QA/FH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;gCAGS,CAAC;AAEjB,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB;;;;;CAAyD,CAAC"}
@@ -33,12 +33,51 @@ export const GradedExpectationSchema = z
33
33
  text: z.string(),
34
34
  passed: z.boolean(),
35
35
  evidence: z.string().optional(),
36
+ /**
37
+ * Which eval this expectation was graded under. vat stamps it when it
38
+ * assembles the aggregate from per-eval grader fragments, so that a
39
+ * `--baseline` run's two artifacts can be lined up PER EVAL rather than only
40
+ * in aggregate — without it, a reader can compare two totals but cannot say
41
+ * which eval moved. Optional because a grading.json produced by external
42
+ * tooling (skill-creator's own) carries no per-eval attribution; the schema
43
+ * documents the field vat now emits rather than tightening the contract.
44
+ */
45
+ evalId: z.string().optional(),
36
46
  })
37
47
  .passthrough();
48
+ /**
49
+ * The cross-field invariant, worded once and carried into BOTH surfaces that can
50
+ * state it: the Zod refine's failure message, and the `description` on `summary`
51
+ * in the published JSON Schema.
52
+ *
53
+ * It has to be carried explicitly because `zodToJsonSchema` DISCARDS `.refine()`.
54
+ * Without this, the published document said `{passed: integer≥0, total: integer≥0}`
55
+ * and nothing else — so external tooling validating against it accepted
56
+ * `{passed: 9, total: 3}`, the exact shape the Zod validator rejects and the exact
57
+ * shape that produced a confident `delta: -8`. The invariant was not enforced OR
58
+ * mentioned, which is worse than unenforced: a consumer reading the schema had no
59
+ * way to learn the check existed.
60
+ *
61
+ * JSON Schema cannot close the gap. No draft can compare one property against
62
+ * another (`maximum` takes a number, not a pointer; `if`/`then` can only test a
63
+ * value, not a relation), and the Ajv `$data` extension that could is not portable
64
+ * — a plain Ajv without `$data: true` FAILS TO COMPILE a schema containing it,
65
+ * which would break every conforming consumer to serve one. So the published
66
+ * schema records the constraint and says plainly that it is on the consumer to
67
+ * check, rather than pretending to enforce it.
68
+ */
69
+ const SUMMARY_INVARIANT_MESSAGE = 'summary.passed must not exceed summary.total';
70
+ const SUMMARY_SCHEMA_DESCRIPTION = 'Aggregate pass/fail counts. INVARIANT: ' +
71
+ `${SUMMARY_INVARIANT_MESSAGE}. It is enforced by the Zod schema this document is generated from ` +
72
+ 'and by vat when it merges grader fragments, but NOT by this document: JSON Schema cannot express ' +
73
+ 'a comparison between two properties in any draft, so a validator running this schema alone will ' +
74
+ 'accept {"passed": 9, "total": 3}. Check it yourself before trusting any figure derived from these ' +
75
+ 'counts (a baseline delta subtracts them).';
38
76
  /**
39
77
  * Aggregate pass/fail counts. `failed`/`pass_rate` are documented but optional.
40
78
  * Counts are non-negative integers (a float or negative count is a grader bug),
41
- * and `passed` can never exceed `total`.
79
+ * and `passed` can never exceed `total` — see {@link SUMMARY_SCHEMA_DESCRIPTION}
80
+ * for why that last one has to be stated twice.
42
81
  */
43
82
  export const GradingSummarySchema = z
44
83
  .object({
@@ -49,8 +88,12 @@ export const GradingSummarySchema = z
49
88
  })
50
89
  .passthrough()
51
90
  .refine(s => s.passed <= s.total, {
52
- message: 'summary.passed must not exceed summary.total',
53
- });
91
+ message: SUMMARY_INVARIANT_MESSAGE,
92
+ })
93
+ // `.describe()` AFTER `.refine()`: zodToJsonSchema reads the description off the
94
+ // outermost node, and this is the only channel through which a Zod refinement's
95
+ // meaning can reach the emitted document at all.
96
+ .describe(SUMMARY_SCHEMA_DESCRIPTION);
54
97
  /**
55
98
  * The full grading.json contract. Required: top-level `expectations[]` and
56
99
  * `summary`. Everything else passes through untouched (forward-compatible with
@@ -69,13 +112,29 @@ export const GradingReportSchema = z
69
112
  * by untrusted skill code is rejected.
70
113
  */
71
114
  runNonce: z.string().optional(),
115
+ /**
116
+ * Which `--baseline` arm produced this report: `'with'` (the skill declared)
117
+ * or `'without'` (the control arm run with the skill withheld). vat writes
118
+ * the two arms to two files of the SAME shape — `grading.json` and
119
+ * `baseline.json` — so without this field a reader holding one of them
120
+ * cannot tell which arm it is looking at. Optional for the same reason
121
+ * `runNonce` is: an externally produced grading.json has no arm to declare.
122
+ */
123
+ arm: z.enum(['with', 'without']).optional(),
72
124
  })
73
125
  .passthrough();
74
126
  /**
75
- * Published JSON Schema for grading.json — generated from {@link GradingReportSchema}
76
- * so the two never drift. Importable by external tooling that wants to validate a
77
- * grading.json without depending on Zod. Documented in
78
- * docs/skill-test-grading-schema.md.
127
+ * Published JSON Schema for grading.json — generated from {@link GradingReportSchema},
128
+ * so its SHAPE (fields, types, required-ness, additionalProperties) cannot drift from
129
+ * the Zod schema. Importable by external tooling that wants to validate a grading.json
130
+ * without depending on Zod. Documented in docs/skill-test-grading-schema.md.
131
+ *
132
+ * It is NOT equivalent to the Zod schema, and never can be. `zodToJsonSchema` drops
133
+ * every `.refine()`, and the two refinements in this file are cross-field relations
134
+ * JSON Schema has no way to express — so the generated document is strictly weaker
135
+ * than the validator that generated it. That gap is stated, in the document itself,
136
+ * on the field it applies to (see {@link SUMMARY_SCHEMA_DESCRIPTION}); a consumer
137
+ * that needs the invariant enforced must re-implement it or use the Zod schema.
79
138
  */
80
139
  export const GradingReportJsonSchema = zodToJsonSchema(GradingReportSchema, 'grading-report');
81
140
  //# sourceMappingURL=grading-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grading-schema.js","sourceRoot":"","sources":["../../src/skill-test/grading-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,sFAAsF;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC;KACD,WAAW,EAAE;KACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE;IAChC,OAAO,EAAE,8CAA8C;CACxD,CAAC,CAAC;AAIL;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC9C,OAAO,EAAE,oBAAoB;IAC7B;;;;;;;OAOG;IACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"grading-schema.js","sourceRoot":"","sources":["../../src/skill-test/grading-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,sFAAsF;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B;;;;;;;;OAQG;IACH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,yBAAyB,GAAG,8CAA8C,CAAC;AAEjF,MAAM,0BAA0B,GAC9B,yCAAyC;IACzC,GAAG,yBAAyB,qEAAqE;IACjG,mGAAmG;IACnG,kGAAkG;IAClG,oGAAoG;IACpG,2CAA2C,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC;KACD,WAAW,EAAE;KACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE;IAChC,OAAO,EAAE,yBAAyB;CACnC,CAAC;IACF,iFAAiF;IACjF,gFAAgF;IAChF,iDAAiD;KAChD,QAAQ,CAAC,0BAA0B,CAAC,CAAC;AAIxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC9C,OAAO,EAAE,oBAAoB;IAC7B;;;;;;;OAOG;IACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B;;;;;;;OAOG;IACH,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC"}
@@ -1,6 +1,7 @@
1
+ import { VatError } from '@vibe-agent-toolkit/utils';
1
2
  /** Harness-location failure — maps to exit code 2. */
2
- export declare class HarnessLocationError extends Error {
3
- readonly exitCode: 2;
3
+ export declare class HarnessLocationError extends VatError {
4
+ readonly reason: "preflight";
4
5
  constructor(message: string);
5
6
  }
6
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"harness-location.d.ts","sourceRoot":"","sources":["../../src/skill-test/harness-location.ts"],"names":[],"mappings":"AAKA,sDAAsD;AACtD,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;gBACnB,OAAO,EAAE,MAAM;CAI5B;AAOD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ7D;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAgBpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAkBpD;AAkDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,MAA2B,GACvC,IAAI,CAkBN"}
1
+ {"version":3,"file":"harness-location.d.ts","sourceRoot":"","sources":["../../src/skill-test/harness-location.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmD,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEtG,sDAAsD;AACtD,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,QAAQ,CAAC,MAAM,EAAG,WAAW,CAAU;gBAC3B,OAAO,EAAE,MAAM;CAG5B;AAOD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ7D;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAcpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAcpD;AAgDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,MAA2B,GACvC,IAAI,CAgBN"}
@@ -1,12 +1,11 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { chmodSync, existsSync, lstatSync, statSync } from 'node:fs';
3
- import { isAbsolutePath, normalizedTmpdir, safePath } from '@vibe-agent-toolkit/utils';
3
+ import { normalizedTmpdir, relativeEscapesRoot, safePath, VatError } from '@vibe-agent-toolkit/utils';
4
4
  /** Harness-location failure — maps to exit code 2. */
5
- export class HarnessLocationError extends Error {
6
- exitCode = 2;
5
+ export class HarnessLocationError extends VatError {
6
+ reason = 'preflight';
7
7
  constructor(message) {
8
- super(message);
9
- this.name = 'HarnessLocationError';
8
+ super('HARNESS_LOCATION', message);
10
9
  }
11
10
  }
12
11
  /** Sanitize a skill name to a path-safe token (no separators, no traversal). */
@@ -50,11 +49,9 @@ export function assertSafeWorkdir(dir, stopAt) {
50
49
  let current = safePath.resolve(dir);
51
50
  let previous = '';
52
51
  while (current !== previous && current !== boundary) {
53
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- ancestry walk over a user-supplied workdir
54
52
  if (existsSync(safePath.join(current, 'CLAUDE.md'))) {
55
53
  throw new HarnessLocationError(`--workdir is inside a project: CLAUDE.md found at ${current}. Use an OS-tmp location.`);
56
54
  }
57
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- ancestry walk over a user-supplied workdir
58
55
  if (existsSync(safePath.join(current, '.claude'))) {
59
56
  throw new HarnessLocationError(`--workdir is inside a project: .claude/ found at ${current}. Use an OS-tmp location.`);
60
57
  }
@@ -75,19 +72,15 @@ export function assertSafeWorkdir(dir, stopAt) {
75
72
  * assertSafeHarnessRoot's platform guard).
76
73
  */
77
74
  export function prepareHarnessRoot(dir) {
78
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
79
75
  if (!existsSync(dir))
80
76
  return;
81
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
82
77
  const ls = lstatSync(dir);
83
78
  if (ls.isSymbolicLink()) {
84
79
  throw new HarnessLocationError(`Refusing to use a symlinked harness root: ${dir}.`);
85
80
  }
86
81
  if (process.platform !== 'win32') {
87
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
88
82
  const mode = statSync(dir).mode & 0o777;
89
83
  if (mode !== 0o700) {
90
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
91
84
  chmodSync(dir, 0o700);
92
85
  }
93
86
  }
@@ -97,7 +90,7 @@ function isStrictlyUnder(root, child) {
97
90
  if (child === root)
98
91
  return false;
99
92
  const rel = safePath.relative(root, child);
100
- return rel !== '' && rel !== '..' && !rel.startsWith('../') && !isAbsolutePath(rel);
93
+ return rel !== '' && !relativeEscapesRoot(rel);
101
94
  }
102
95
  /**
103
96
  * The harness path components to validate, leaf-first: the leaf and every
@@ -127,10 +120,8 @@ function harnessAncestry(leaf, trustedRoot) {
127
120
  * skipped (no real uids); the symlink refusal still applies.
128
121
  */
129
122
  function assertComponentSafe(component, currentUid) {
130
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness path component
131
123
  if (!existsSync(component))
132
124
  return;
133
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness path component
134
125
  const ls = lstatSync(component);
135
126
  if (ls.isSymbolicLink()) {
136
127
  throw new HarnessLocationError(`Refusing to use a symlinked harness path component: ${component}.`);
@@ -164,10 +155,8 @@ export function assertSafeHarnessRoot(dir, currentUid, trustedRoot = normalizedT
164
155
  }
165
156
  // Leaf-only 0700 check (intermediates are created 0700 by recursive mkdir and
166
157
  // need only the symlink/ownership guarantees above). Skipped on win32.
167
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
168
158
  if (!existsSync(resolved))
169
159
  return; // not yet created — caller creates it 0700
170
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
171
160
  const mode = statSync(resolved).mode & 0o777;
172
161
  if (mode !== 0o700 && process.platform !== 'win32') {
173
162
  throw new HarnessLocationError(`Harness root ${resolved} must be 0700 (found ${mode.toString(8)}).`);
@@ -1 +1 @@
1
- {"version":3,"file":"harness-location.js","sourceRoot":"","sources":["../../src/skill-test/harness-location.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-location.js","sourceRoot":"","sources":["../../src/skill-test/harness-location.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAErE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEtG,sDAAsD;AACtD,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IACvC,MAAM,GAAG,WAAoB,CAAC;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;CACF;AAED,gFAAgF;AAChF,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAoB;IACnD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAoB,CAAC,sDAAsD,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,UAAoB,EAAE,OAAgB;IACvE,MAAM,IAAI,GAAG,OAAO,IAAI,gBAAgB,EAAE,CAAC;IAC3C,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,MAAe;IAC5D,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,oBAAoB,CAAC,qDAAqD,OAAO,2BAA2B,CAAC,CAAC;QAC1H,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,oBAAoB,CAAC,oDAAoD,OAAO,2BAA2B,CAAC,CAAC;QACzH,CAAC;QACD,QAAQ,GAAG,OAAO,CAAC;QACnB,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO;IAE7B,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,oBAAoB,CAAC,6CAA6C,GAAG,GAAG,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;QACxC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,SAAS,eAAe,CAAC,IAAY,EAAE,KAAa;IAClD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,IAAY,EAAE,WAAmB;IACxD,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,OAAO;YAAE,MAAM,CAAC,0CAA0C;QACzE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,SAAiB,EAAE,UAAkB;IAChE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO;IACnC,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,oBAAoB,CAAC,uDAAuD,SAAS,GAAG,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QACxF,MAAM,IAAI,oBAAoB,CAC5B,0BAA0B,SAAS,0CAA0C,EAAE,CAAC,GAAG,OAAO,UAAU,IAAI,CACzG,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAW,EACX,UAAkB,EAClB,cAAsB,gBAAgB,EAAE;IAExC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,8NAA8N;IAC9N,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE3C,KAAK,MAAM,SAAS,IAAI,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;QACxD,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,8EAA8E;IAC9E,uEAAuE;IACvE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,2CAA2C;IAC9E,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;IAC7C,IAAI,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACnD,MAAM,IAAI,oBAAoB,CAAC,gBAAgB,QAAQ,wBAAwB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvG,CAAC;AACH,CAAC"}
@@ -4,12 +4,12 @@ export { lintEvalExpectations, lintToolExpectationExecutables, type EvalLintWarn
4
4
  export { FrictionCategorySchema, FrictionItemSchema, FrictionReportJsonSchema, FrictionReportSchema, FrictionSeveritySchema, type FrictionItem, type FrictionReport, } from './friction-schema.js';
5
5
  export { mergeFragmentsToFriction, mergeFragmentsToGrading, mergeFragmentsToToolEval, } from './fragment-merge.js';
6
6
  export { ToolEvalReportJsonSchema, ToolEvalReportSchema, ToolVerdictBodySchema, ToolVerdictSchema, type ToolEvalReport, type ToolVerdict, type ToolVerdictBody, } from './tool-eval-schema.js';
7
- export { GradingNonceError, GradingSkewError, parseGradingJson, reconcileGrading, type GradingVerdict, type NormalizedGrading, } from './grading-adapter.js';
7
+ export { GradingArmError, GradingNonceError, GradingSkewError, parseGradingJson, reconcileGrading, type GradingVerdict, type NormalizedGrading, } from './grading-adapter.js';
8
8
  export { GradedExpectationSchema, GradingReportJsonSchema, GradingReportSchema, GradingSummarySchema, type GradedExpectation, type GradingReport, type GradingSummary, } from './grading-schema.js';
9
9
  export { assertSafeHarnessRoot, assertSafeWorkdir, deriveHarnessKey, HarnessLocationError, resolveHarnessRoot, } from './harness-location.js';
10
10
  export { computeReconcilePlan, StagedEntrySchema, StagedManifestSchema, type ReconcilePlan, type StagedEntry, type StagedManifest, } from './manifest.js';
11
11
  export { assembleChildEnv, computeEnvTokens, interpolateEnvValue, resolveInjectEnv, UnknownEnvTokenError, type AssembleChildEnvInput, type AssembledChildEnv, type EnvInterpolationTokens, type EnvTokenInputs, } from './declared-env.js';
12
- export { BootstrapNeededError, DuplicateStagedSkillError, InternalHarnessError, mapErrorToExitCode, SecurityAckError, SkillBuildError, SkillTestExitCode, type SkillTestExitCodeValue, } from './exit-codes.js';
12
+ export { BootstrapNeededError, DuplicateStagedSkillError, InternalHarnessError, SecurityAckError, SkillBuildError, type SkillTestFailureReason, skillTestFailureReason, } from './failure-reason.js';
13
13
  export { BuildHookError, runPreStageBuild } from './build-hook.js';
14
14
  export { DEFAULT_CONCURRENCY, DEFAULT_GRADER_MODEL } from './grader-model.js';
15
15
  export { RateLimitSignal, runPipeline, type RunPipelineOptions } from './pipeline.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-test/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-test/index.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,12 @@ export { lintEvalExpectations, lintToolExpectationExecutables } from './eval-lin
4
4
  export { FrictionCategorySchema, FrictionItemSchema, FrictionReportJsonSchema, FrictionReportSchema, FrictionSeveritySchema, } from './friction-schema.js';
5
5
  export { mergeFragmentsToFriction, mergeFragmentsToGrading, mergeFragmentsToToolEval, } from './fragment-merge.js';
6
6
  export { ToolEvalReportJsonSchema, ToolEvalReportSchema, ToolVerdictBodySchema, ToolVerdictSchema, } from './tool-eval-schema.js';
7
- export { GradingNonceError, GradingSkewError, parseGradingJson, reconcileGrading, } from './grading-adapter.js';
7
+ export { GradingArmError, GradingNonceError, GradingSkewError, parseGradingJson, reconcileGrading, } from './grading-adapter.js';
8
8
  export { GradedExpectationSchema, GradingReportJsonSchema, GradingReportSchema, GradingSummarySchema, } from './grading-schema.js';
9
9
  export { assertSafeHarnessRoot, assertSafeWorkdir, deriveHarnessKey, HarnessLocationError, resolveHarnessRoot, } from './harness-location.js';
10
10
  export { computeReconcilePlan, StagedEntrySchema, StagedManifestSchema, } from './manifest.js';
11
11
  export { assembleChildEnv, computeEnvTokens, interpolateEnvValue, resolveInjectEnv, UnknownEnvTokenError, } from './declared-env.js';
12
- export { BootstrapNeededError, DuplicateStagedSkillError, InternalHarnessError, mapErrorToExitCode, SecurityAckError, SkillBuildError, SkillTestExitCode, } from './exit-codes.js';
12
+ export { BootstrapNeededError, DuplicateStagedSkillError, InternalHarnessError, SecurityAckError, SkillBuildError, skillTestFailureReason, } from './failure-reason.js';
13
13
  export { BuildHookError, runPreStageBuild } from './build-hook.js';
14
14
  export { DEFAULT_CONCURRENCY, DEFAULT_GRADER_MODEL } from './grader-model.js';
15
15
  export { RateLimitSignal, runPipeline } from './pipeline.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,mBAAmB,GAIpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAwB,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,GAGvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAIlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,GAIrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GAIrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GAKrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,WAAW,EAA2B,MAAM,eAAe,CAAC;AACtF,OAAO,EACL,YAAY,GAIb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAoB,MAAM,WAAW,CAAC;AACvF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,YAAY,GAIb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAClH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,GAIhB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,mBAAmB,GAIpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAwB,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,GAGvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAIlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,GAIrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GAIrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GAKrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EAEf,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,WAAW,EAA2B,MAAM,eAAe,CAAC;AACtF,OAAO,EACL,YAAY,GAIb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAoB,MAAM,WAAW,CAAC;AACvF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,YAAY,GAIb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAClH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,GAIhB,MAAM,kBAAkB,CAAC"}
@@ -1,7 +1,36 @@
1
- export declare class HarnessLockBusyError extends Error {
1
+ import { VatError } from '@vibe-agent-toolkit/utils';
2
+ /**
3
+ * The harness root for a subject set is already locked.
4
+ *
5
+ * Reason `preflight`, not `internal`. This is the most user-correctable condition in
6
+ * the command — the remedy is "wait, or delete one file" — and it was the ONE error
7
+ * class in this feature with no declared reason, so it fell through
8
+ * `skillTestFailureReason`'s default to `internal`. The published CI recipe reads
9
+ * `internal` as "the harness broke, fail the build", which is exactly the wrong
10
+ * verdict for a lock held by the operator's own second terminal.
11
+ *
12
+ * The field below is what `skillTestFailureReason` READS — it is not decoration
13
+ * mirroring an `instanceof` row, which is what it was when it was added. Deleting it
14
+ * turns this back into `internal`.
15
+ *
16
+ * The message names `lockPath` because the lockfile is created `O_EXCL` in the
17
+ * DETERMINISTIC harness root and released only on normal exit or SIGINT/SIGTERM —
18
+ * a SIGKILL, an OOM, or a crash leaves it behind and every later run of that skill
19
+ * fails here, with no `--force` to escape. Until the staleness protocol (pid +
20
+ * timestamp + liveness probe + `--force`) lands in its own lane, naming the path
21
+ * and saying to delete it IS the escape hatch, so it belongs in the message rather
22
+ * than in a doc the operator is not currently reading.
23
+ */
24
+ export declare class HarnessLockBusyError extends VatError {
25
+ readonly lockPath: string;
26
+ readonly reason: "preflight";
2
27
  constructor(lockPath: string);
3
28
  }
4
29
  export interface HarnessLock {
30
+ /**
31
+ * Release the lock. NEVER THROWS — see {@link acquireHarnessLock}. Callers run
32
+ * this from a cleanup path and must be able to call it bare.
33
+ */
5
34
  release(): void;
6
35
  }
7
36
  /**
@@ -9,6 +38,34 @@ export interface HarnessLock {
9
38
  * vat-vs-vat staging/result races for the same subject set. `wait: false`
10
39
  * fails fast; the default `wait: true` is reserved for the CLI to poll (v1
11
40
  * keeps the simple fail-fast — the CLI surfaces the busy message).
41
+ *
42
+ * ACQUIRING can throw (that is the whole point: EEXIST → {@link HarnessLockBusyError}).
43
+ * RELEASING cannot, and that asymmetry is deliberate. `rmSync(..., {force: true})`
44
+ * swallows only ENOENT, so an EPERM/EACCES/EROFS on the lockfile — a read-only
45
+ * volume, a `root`-owned temp dir, a Windows handle still open — threw out of the
46
+ * harness `finally` and REPLACED an already-good result (verdict computed, artifacts
47
+ * written, summary composed) with exit 1 and no summary, every artifact sitting
48
+ * unread on disk.
49
+ *
50
+ * The guard lives HERE rather than at the call site, where it originally went. A
51
+ * call-site wrapper is invisible to the compiler: reverting it to a bare
52
+ * `lock.release()` left the whole unit suite AND the integration suite green, so
53
+ * nothing but review stood between the fix and its own silent removal. Owning the
54
+ * contract in the definition — `release()` never throws — means there is no unwrapped
55
+ * call site left to lose. Note what that does NOT mean: `release(): void` encodes
56
+ * nothing about throwing, because TypeScript has no throws clause. The contract is
57
+ * held up by the two nested `try`s below and by the tests that pin each one, not by
58
+ * the signature.
59
+ *
60
+ * BOTH statements of the catch are guarded, and the second one is why: the warning
61
+ * write is itself an fd-level operation, and a synchronous EBADF/EPIPE on a file- or
62
+ * TTY-backed fd 2 threw straight back out — reinstating the exact failure the outer
63
+ * catch was added to prevent, on a path only reachable once something had already
64
+ * gone wrong. A test that mocks `process.stderr.write` to RETURN cannot see it.
65
+ *
66
+ * The failure is not silent: a lockfile that could not be removed will fail the NEXT
67
+ * run of this skill with a "busy" error, and an operator who saw nothing here has no
68
+ * way to connect the two.
12
69
  */
13
70
  export declare function acquireHarnessLock(harnessRoot: string, opts?: {
14
71
  wait?: boolean;