project-tiny-context-harness 0.2.85 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/README.md +164 -427
  2. package/assets/README.md +284 -455
  3. package/assets/README.zh-CN.md +200 -123
  4. package/assets/agents/AGENTS_CORE.md +54 -67
  5. package/assets/context_templates/context.toml +3 -0
  6. package/assets/context_templates/global.md +6 -6
  7. package/assets/github/harness.yml +2 -2
  8. package/assets/skills/context_development_engineer/SKILL.md +91 -107
  9. package/assets/skills/context_product_plan/SKILL.md +18 -28
  10. package/assets/skills/context_surface_contract/SKILL.md +35 -38
  11. package/assets/skills/context_uiux_design/SKILL.md +31 -30
  12. package/assets/skills/long-task-workflow/SKILL.md +76 -0
  13. package/assets/skills/long-task-workflow/agents/openai.yaml +4 -0
  14. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +41 -0
  15. package/assets/skills/long-task-workflow/references/contract-authoring.md +63 -0
  16. package/assets/skills/long-task-workflow/references/evidence-design.md +45 -0
  17. package/assets/skills/normal-long-task/SKILL.md +12 -489
  18. package/assets/skills/source-plan-authoring/SKILL.md +467 -0
  19. package/assets/tools/validate_context.py +293 -127
  20. package/dist/cli.js +3 -1
  21. package/dist/commands/check-modularity.js +33 -10
  22. package/dist/commands/composite-campaign.d.ts +1 -0
  23. package/dist/commands/composite-campaign.js +8 -0
  24. package/dist/commands/composite-long-task.d.ts +1 -6
  25. package/dist/commands/composite-long-task.js +7 -163
  26. package/dist/commands/delivery-set.d.ts +1 -0
  27. package/dist/commands/delivery-set.js +8 -0
  28. package/dist/commands/disable.d.ts +1 -0
  29. package/dist/commands/disable.js +15 -0
  30. package/dist/commands/enable.d.ts +1 -0
  31. package/dist/commands/enable.js +14 -0
  32. package/dist/commands/export-context-args.js +13 -4
  33. package/dist/commands/export-context.js +18 -7
  34. package/dist/commands/index.js +42 -30
  35. package/dist/commands/init.js +12 -6
  36. package/dist/commands/long-task-authoring.d.ts +3 -0
  37. package/dist/commands/long-task-authoring.js +92 -0
  38. package/dist/commands/long-task-explain.d.ts +1 -0
  39. package/dist/commands/long-task-explain.js +52 -0
  40. package/dist/commands/long-task.d.ts +1 -0
  41. package/dist/commands/long-task.js +226 -0
  42. package/dist/commands/package-source.js +2 -2
  43. package/dist/commands/upgrade.js +10 -10
  44. package/dist/index.d.ts +11 -1
  45. package/dist/index.js +8 -0
  46. package/dist/lib/config.js +34 -8
  47. package/dist/lib/context-default-footprint.d.ts +16 -0
  48. package/dist/lib/context-default-footprint.js +107 -0
  49. package/dist/lib/context-export.js +105 -41
  50. package/dist/lib/context-graph-snapshot.d.ts +18 -0
  51. package/dist/lib/context-graph-snapshot.js +171 -0
  52. package/dist/lib/context-manifest-schema.d.ts +28 -0
  53. package/dist/lib/context-manifest-schema.js +150 -0
  54. package/dist/lib/context-manifest.js +28 -20
  55. package/dist/lib/context-templates.js +5 -5
  56. package/dist/lib/design-md.js +1 -1
  57. package/dist/lib/doctor.js +54 -1
  58. package/dist/lib/harness-root.js +25 -8
  59. package/dist/lib/init.js +6 -3
  60. package/dist/lib/legacy-managed-scan.js +23 -7
  61. package/dist/lib/legacy-sdlc-migration.js +21 -11
  62. package/dist/lib/long-task-acceptance-reference.d.ts +22 -0
  63. package/dist/lib/long-task-acceptance-reference.js +46 -0
  64. package/dist/lib/long-task-acceptance-shape.d.ts +5 -0
  65. package/dist/lib/long-task-acceptance-shape.js +131 -0
  66. package/dist/lib/long-task-activation-validation.d.ts +21 -0
  67. package/dist/lib/long-task-activation-validation.js +136 -0
  68. package/dist/lib/long-task-artifacts.d.ts +5 -0
  69. package/dist/lib/long-task-artifacts.js +34 -0
  70. package/dist/lib/long-task-assertions-v2.d.ts +22 -0
  71. package/dist/lib/long-task-assertions-v2.js +212 -0
  72. package/dist/lib/long-task-authoring-authority-preview.d.ts +5 -0
  73. package/dist/lib/long-task-authoring-authority-preview.js +85 -0
  74. package/dist/lib/long-task-authoring-preflight-diagnostics.d.ts +8 -0
  75. package/dist/lib/long-task-authoring-preflight-diagnostics.js +179 -0
  76. package/dist/lib/long-task-authoring-preflight-repair-order.d.ts +8 -0
  77. package/dist/lib/long-task-authoring-preflight-repair-order.js +95 -0
  78. package/dist/lib/long-task-authoring-preflight-types.d.ts +46 -0
  79. package/dist/lib/long-task-authoring-preflight-types.js +38 -0
  80. package/dist/lib/long-task-authoring-preflight.d.ts +3 -0
  81. package/dist/lib/long-task-authoring-preflight.js +44 -0
  82. package/dist/lib/long-task-authority-material-diff.d.ts +17 -0
  83. package/dist/lib/long-task-authority-material-diff.js +152 -0
  84. package/dist/lib/long-task-authority-materials.d.ts +7 -0
  85. package/dist/lib/long-task-authority-materials.js +83 -0
  86. package/dist/lib/long-task-authority-policy.d.ts +168 -0
  87. package/dist/lib/long-task-authority-policy.js +181 -0
  88. package/dist/lib/long-task-authority-revision-details.d.ts +19 -0
  89. package/dist/lib/long-task-authority-revision-details.js +192 -0
  90. package/dist/lib/long-task-authority-revision-enforcement.d.ts +3 -0
  91. package/dist/lib/long-task-authority-revision-enforcement.js +41 -0
  92. package/dist/lib/long-task-authority-revision-types.d.ts +50 -0
  93. package/dist/lib/long-task-authority-revision-types.js +1 -0
  94. package/dist/lib/long-task-authority-revision.d.ts +4 -0
  95. package/dist/lib/long-task-authority-revision.js +188 -0
  96. package/dist/lib/long-task-authority-transition-policy.d.ts +62 -0
  97. package/dist/lib/long-task-authority-transition-policy.js +62 -0
  98. package/dist/lib/long-task-authority-types.d.ts +96 -0
  99. package/dist/lib/long-task-authority-types.js +1 -0
  100. package/dist/lib/long-task-authority.d.ts +7 -0
  101. package/dist/lib/long-task-authority.js +142 -0
  102. package/dist/lib/long-task-boundary-check.d.ts +15 -0
  103. package/dist/lib/long-task-boundary-check.js +9 -0
  104. package/dist/lib/long-task-check-evidence-decoder.d.ts +3 -0
  105. package/dist/lib/long-task-check-evidence-decoder.js +74 -0
  106. package/dist/lib/long-task-check-execution-policy.d.ts +18 -0
  107. package/dist/lib/long-task-check-execution-policy.js +36 -0
  108. package/dist/lib/long-task-check-runner.d.ts +2 -0
  109. package/dist/lib/long-task-check-runner.js +181 -0
  110. package/dist/lib/long-task-check-shape.d.ts +2 -0
  111. package/dist/lib/long-task-check-shape.js +136 -0
  112. package/dist/lib/long-task-claim-definitions.d.ts +7 -0
  113. package/dist/lib/long-task-claim-definitions.js +78 -0
  114. package/dist/lib/long-task-claim-proof-policy.d.ts +4 -0
  115. package/dist/lib/long-task-claim-proof-policy.js +57 -0
  116. package/dist/lib/long-task-claims.d.ts +10 -0
  117. package/dist/lib/long-task-claims.js +187 -0
  118. package/dist/lib/long-task-context-authority-topology.d.ts +7 -0
  119. package/dist/lib/long-task-context-authority-topology.js +37 -0
  120. package/dist/lib/long-task-context-authority.d.ts +14 -0
  121. package/dist/lib/long-task-context-authority.js +66 -0
  122. package/dist/lib/long-task-contract-types.d.ts +203 -0
  123. package/dist/lib/long-task-contract-types.js +1 -0
  124. package/dist/lib/long-task-counterfactual-claim-policy.d.ts +10 -0
  125. package/dist/lib/long-task-counterfactual-claim-policy.js +57 -0
  126. package/dist/lib/long-task-counterfactual-sandbox.d.ts +6 -0
  127. package/dist/lib/long-task-counterfactual-sandbox.js +87 -0
  128. package/dist/lib/long-task-counterfactual-types.d.ts +24 -0
  129. package/dist/lib/long-task-counterfactual-types.js +1 -0
  130. package/dist/lib/long-task-delivery-compiler.d.ts +10 -0
  131. package/dist/lib/long-task-delivery-compiler.js +129 -0
  132. package/dist/lib/long-task-delivery-parser.d.ts +13 -0
  133. package/dist/lib/long-task-delivery-parser.js +90 -0
  134. package/dist/lib/long-task-delivery-preflight.d.ts +5 -0
  135. package/dist/lib/long-task-delivery-preflight.js +151 -0
  136. package/dist/lib/long-task-delivery-shape.d.ts +5 -0
  137. package/dist/lib/long-task-delivery-shape.js +5 -0
  138. package/dist/lib/long-task-delivery-types.d.ts +8 -0
  139. package/dist/lib/long-task-delivery-types.js +8 -0
  140. package/dist/lib/long-task-delivery-validation.d.ts +3 -0
  141. package/dist/lib/long-task-delivery-validation.js +175 -0
  142. package/dist/lib/long-task-evidence-adapter-policy.d.ts +4 -0
  143. package/dist/lib/long-task-evidence-adapter-policy.js +15 -0
  144. package/dist/lib/long-task-evidence-adapter-types.d.ts +1 -0
  145. package/dist/lib/long-task-evidence-adapter-types.js +1 -0
  146. package/dist/lib/long-task-evidence-findings.d.ts +5 -0
  147. package/dist/lib/long-task-evidence-findings.js +113 -0
  148. package/dist/lib/long-task-evidence-sensitivity-policy.d.ts +4 -0
  149. package/dist/lib/long-task-evidence-sensitivity-policy.js +98 -0
  150. package/dist/lib/long-task-evidence-v2.d.ts +5 -0
  151. package/dist/lib/long-task-evidence-v2.js +226 -0
  152. package/dist/lib/long-task-explain-acceptance-link.d.ts +46 -0
  153. package/dist/lib/long-task-explain-acceptance-link.js +96 -0
  154. package/dist/lib/long-task-explain-claim-links.d.ts +45 -0
  155. package/dist/lib/long-task-explain-claim-links.js +88 -0
  156. package/dist/lib/long-task-explain-source-links.d.ts +93 -0
  157. package/dist/lib/long-task-explain-source-links.js +51 -0
  158. package/dist/lib/long-task-final-v2.d.ts +2 -0
  159. package/dist/lib/long-task-final-v2.js +124 -0
  160. package/dist/lib/long-task-finding-context.d.ts +3 -0
  161. package/dist/lib/long-task-finding-context.js +63 -0
  162. package/dist/lib/long-task-freshness.d.ts +3 -0
  163. package/dist/lib/long-task-freshness.js +80 -0
  164. package/dist/lib/long-task-hook-install.d.ts +9 -0
  165. package/dist/lib/long-task-hook-install.js +184 -0
  166. package/dist/lib/long-task-hook-preflight.d.ts +7 -0
  167. package/dist/lib/long-task-hook-preflight.js +58 -0
  168. package/dist/lib/long-task-observation-ownership.d.ts +2 -0
  169. package/dist/lib/long-task-observation-ownership.js +22 -0
  170. package/dist/lib/long-task-outcome-parser.d.ts +4 -0
  171. package/dist/lib/long-task-outcome-parser.js +100 -0
  172. package/dist/lib/long-task-paths.d.ts +49 -0
  173. package/dist/lib/long-task-paths.js +418 -0
  174. package/dist/lib/long-task-playwright-counterfactual-policy.d.ts +7 -0
  175. package/dist/lib/long-task-playwright-counterfactual-policy.js +125 -0
  176. package/dist/lib/long-task-playwright-evidence.d.ts +6 -0
  177. package/dist/lib/long-task-playwright-evidence.js +244 -0
  178. package/dist/lib/long-task-product-shape.d.ts +6 -0
  179. package/dist/lib/long-task-product-shape.js +73 -0
  180. package/dist/lib/long-task-progress.d.ts +4 -0
  181. package/dist/lib/long-task-progress.js +114 -0
  182. package/dist/lib/long-task-protected-files.d.ts +1 -0
  183. package/dist/lib/long-task-protected-files.js +30 -0
  184. package/dist/lib/long-task-required-proof-surfaces.d.ts +2 -0
  185. package/dist/lib/long-task-required-proof-surfaces.js +13 -0
  186. package/dist/lib/long-task-requirement-shape.d.ts +2 -0
  187. package/dist/lib/long-task-requirement-shape.js +18 -0
  188. package/dist/lib/long-task-risk-surfaces.d.ts +2 -0
  189. package/dist/lib/long-task-risk-surfaces.js +60 -0
  190. package/dist/lib/long-task-risk-types.d.ts +5 -0
  191. package/dist/lib/long-task-risk-types.js +12 -0
  192. package/dist/lib/long-task-risk.d.ts +9 -0
  193. package/dist/lib/long-task-risk.js +132 -0
  194. package/dist/lib/long-task-root-shape.d.ts +4 -0
  195. package/dist/lib/long-task-root-shape.js +86 -0
  196. package/dist/lib/long-task-runner-environment.d.ts +7 -0
  197. package/dist/lib/long-task-runner-environment.js +57 -0
  198. package/dist/lib/long-task-runner-files.d.ts +3 -0
  199. package/dist/lib/long-task-runner-files.js +39 -0
  200. package/dist/lib/long-task-runner-freeze.d.ts +2 -0
  201. package/dist/lib/long-task-runner-freeze.js +168 -0
  202. package/dist/lib/long-task-runtime-types.d.ts +214 -0
  203. package/dist/lib/long-task-runtime-types.js +1 -0
  204. package/dist/lib/long-task-shape-primitives.d.ts +17 -0
  205. package/dist/lib/long-task-shape-primitives.js +81 -0
  206. package/dist/lib/long-task-source-authority-types.d.ts +13 -0
  207. package/dist/lib/long-task-source-authority-types.js +1 -0
  208. package/dist/lib/long-task-source-claim-validation.d.ts +5 -0
  209. package/dist/lib/long-task-source-claim-validation.js +96 -0
  210. package/dist/lib/long-task-source-continuity.d.ts +4 -0
  211. package/dist/lib/long-task-source-continuity.js +57 -0
  212. package/dist/lib/long-task-source-inventory.d.ts +2 -0
  213. package/dist/lib/long-task-source-inventory.js +21 -0
  214. package/dist/lib/long-task-source-item-parser.d.ts +3 -0
  215. package/dist/lib/long-task-source-item-parser.js +112 -0
  216. package/dist/lib/long-task-source-shape.d.ts +2 -0
  217. package/dist/lib/long-task-source-shape.js +56 -0
  218. package/dist/lib/long-task-source-target-continuity.d.ts +4 -0
  219. package/dist/lib/long-task-source-target-continuity.js +80 -0
  220. package/dist/lib/long-task-source-target-index.d.ts +12 -0
  221. package/dist/lib/long-task-source-target-index.js +76 -0
  222. package/dist/lib/long-task-source-validation.d.ts +3 -0
  223. package/dist/lib/long-task-source-validation.js +46 -0
  224. package/dist/lib/long-task-state.d.ts +91 -0
  225. package/dist/lib/long-task-state.js +611 -0
  226. package/dist/lib/long-task-status-projection.d.ts +21 -0
  227. package/dist/lib/long-task-status-projection.js +116 -0
  228. package/dist/lib/long-task-status-v2.d.ts +37 -0
  229. package/dist/lib/long-task-status-v2.js +306 -0
  230. package/dist/lib/long-task-technical-shape.d.ts +3 -0
  231. package/dist/lib/long-task-technical-shape.js +44 -0
  232. package/dist/lib/long-task-verifier-authority.d.ts +12 -0
  233. package/dist/lib/long-task-verifier-authority.js +47 -0
  234. package/dist/lib/long-task-verifier-identity.d.ts +2 -0
  235. package/dist/lib/long-task-verifier-identity.js +55 -0
  236. package/dist/lib/long-task-verifier-v2.d.ts +13 -0
  237. package/dist/lib/long-task-verifier-v2.js +266 -0
  238. package/dist/lib/long-task-workspace-runtime-types.d.ts +23 -0
  239. package/dist/lib/long-task-workspace-runtime-types.js +1 -0
  240. package/dist/lib/long-task-workspace.d.ts +25 -0
  241. package/dist/lib/long-task-workspace.js +366 -0
  242. package/dist/lib/managed-file.js +20 -5
  243. package/dist/lib/migrations.js +156 -32
  244. package/dist/lib/modularity.d.ts +27 -1
  245. package/dist/lib/modularity.js +499 -23
  246. package/dist/lib/package-json-config.js +14 -5
  247. package/dist/lib/package-source.js +4 -2
  248. package/dist/lib/profiles.d.ts +13 -0
  249. package/dist/lib/profiles.js +66 -0
  250. package/dist/lib/schema-guard.js +4 -2
  251. package/dist/lib/source-files.js +14 -7
  252. package/dist/lib/source-pack-classify.js +91 -19
  253. package/dist/lib/source-pack-config.js +25 -8
  254. package/dist/lib/source-pack-export.js +84 -25
  255. package/dist/lib/source-pack-manifest.js +18 -6
  256. package/dist/lib/source-pack-records.js +35 -11
  257. package/dist/lib/source-pack-render.js +47 -18
  258. package/dist/lib/stable-json.d.ts +2 -0
  259. package/dist/lib/stable-json.js +21 -0
  260. package/dist/lib/strict-codec.d.ts +4 -0
  261. package/dist/lib/strict-codec.js +65 -0
  262. package/dist/lib/sync-engine.js +76 -24
  263. package/dist/lib/types.d.ts +8 -1
  264. package/dist/lib/upgrade.js +4 -3
  265. package/dist/lib/validators.js +218 -191
  266. package/dist/long-task-hook.d.ts +2 -0
  267. package/dist/long-task-hook.js +55 -0
  268. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +340 -0
  269. package/dist/schemas/long-task-delivery-v2/long-task-outcomes-v2.schema.json +18 -0
  270. package/migrations/README.md +8 -3
  271. package/package.json +17 -6
  272. package/source-mappings.yaml +0 -3
  273. package/assets/protected-harness-baseline.json +0 -20
  274. package/assets/skills/composite-long-task-workflow/SKILL.md +0 -245
  275. package/assets/skills/composite-long-task-workflow/assets/execution-binding.template.md +0 -62
  276. package/assets/skills/composite-long-task-workflow/assets/goal-objective.template.md +0 -17
  277. package/assets/skills/composite-long-task-workflow/references/composite-long-task-workflow-protocol.md +0 -682
  278. package/dist/commands/superpowers.d.ts +0 -1
  279. package/dist/commands/superpowers.js +0 -8
  280. package/dist/lib/composite-long-task-renderer.d.ts +0 -12
  281. package/dist/lib/composite-long-task-renderer.js +0 -109
  282. package/dist/lib/plan-acceptance-artifacts.d.ts +0 -1
  283. package/dist/lib/plan-acceptance-artifacts.js +0 -220
  284. package/dist/lib/plan-acceptance-evidence.d.ts +0 -2
  285. package/dist/lib/plan-acceptance-evidence.js +0 -108
  286. package/dist/lib/plan-acceptance-json.d.ts +0 -15
  287. package/dist/lib/plan-acceptance-json.js +0 -133
  288. package/dist/lib/plan-acceptance-validator.d.ts +0 -2
  289. package/dist/lib/plan-acceptance-validator.js +0 -209
  290. package/dist/lib/plan-contract-validator.d.ts +0 -2
  291. package/dist/lib/plan-contract-validator.js +0 -127
  292. package/dist/lib/plan-validator-common.d.ts +0 -24
  293. package/dist/lib/plan-validator-common.js +0 -196
  294. package/dist/lib/superpowers-task-ac010.d.ts +0 -6
  295. package/dist/lib/superpowers-task-ac010.js +0 -26
  296. package/dist/lib/superpowers-task-assertion-normalizers.d.ts +0 -3
  297. package/dist/lib/superpowers-task-assertion-normalizers.js +0 -74
  298. package/dist/lib/superpowers-task-assertions.d.ts +0 -20
  299. package/dist/lib/superpowers-task-assertions.js +0 -257
  300. package/dist/lib/superpowers-task-attempt.d.ts +0 -4
  301. package/dist/lib/superpowers-task-attempt.js +0 -102
  302. package/dist/lib/superpowers-task-command-run-correlation.d.ts +0 -8
  303. package/dist/lib/superpowers-task-command-run-correlation.js +0 -103
  304. package/dist/lib/superpowers-task-command-specs.d.ts +0 -3
  305. package/dist/lib/superpowers-task-command-specs.js +0 -52
  306. package/dist/lib/superpowers-task-compile-diagnostics.d.ts +0 -5
  307. package/dist/lib/superpowers-task-compile-diagnostics.js +0 -20
  308. package/dist/lib/superpowers-task-compile-guards.d.ts +0 -2
  309. package/dist/lib/superpowers-task-compile-guards.js +0 -66
  310. package/dist/lib/superpowers-task-compile.d.ts +0 -6
  311. package/dist/lib/superpowers-task-compile.js +0 -133
  312. package/dist/lib/superpowers-task-completion-output.d.ts +0 -91
  313. package/dist/lib/superpowers-task-completion-output.js +0 -374
  314. package/dist/lib/superpowers-task-conformance.d.ts +0 -2
  315. package/dist/lib/superpowers-task-conformance.js +0 -24
  316. package/dist/lib/superpowers-task-contradictions.d.ts +0 -6
  317. package/dist/lib/superpowers-task-contradictions.js +0 -126
  318. package/dist/lib/superpowers-task-current-evidence.d.ts +0 -3
  319. package/dist/lib/superpowers-task-current-evidence.js +0 -176
  320. package/dist/lib/superpowers-task-delivery.d.ts +0 -4
  321. package/dist/lib/superpowers-task-delivery.js +0 -96
  322. package/dist/lib/superpowers-task-derive.d.ts +0 -14
  323. package/dist/lib/superpowers-task-derive.js +0 -393
  324. package/dist/lib/superpowers-task-events.d.ts +0 -1
  325. package/dist/lib/superpowers-task-events.js +0 -13
  326. package/dist/lib/superpowers-task-evidence-kernel.d.ts +0 -19
  327. package/dist/lib/superpowers-task-evidence-kernel.js +0 -347
  328. package/dist/lib/superpowers-task-evidence-records.d.ts +0 -2
  329. package/dist/lib/superpowers-task-evidence-records.js +0 -55
  330. package/dist/lib/superpowers-task-evidence.d.ts +0 -10
  331. package/dist/lib/superpowers-task-evidence.js +0 -147
  332. package/dist/lib/superpowers-task-fields.d.ts +0 -22
  333. package/dist/lib/superpowers-task-fields.js +0 -276
  334. package/dist/lib/superpowers-task-final-card.d.ts +0 -3
  335. package/dist/lib/superpowers-task-final-card.js +0 -35
  336. package/dist/lib/superpowers-task-gates.d.ts +0 -12
  337. package/dist/lib/superpowers-task-gates.js +0 -267
  338. package/dist/lib/superpowers-task-harness-drift.d.ts +0 -11
  339. package/dist/lib/superpowers-task-harness-drift.js +0 -90
  340. package/dist/lib/superpowers-task-next-slices.d.ts +0 -1
  341. package/dist/lib/superpowers-task-next-slices.js +0 -12
  342. package/dist/lib/superpowers-task-protected-baseline.d.ts +0 -10
  343. package/dist/lib/superpowers-task-protected-baseline.js +0 -66
  344. package/dist/lib/superpowers-task-source-compile.d.ts +0 -5
  345. package/dist/lib/superpowers-task-source-compile.js +0 -226
  346. package/dist/lib/superpowers-task-source-parser.d.ts +0 -23
  347. package/dist/lib/superpowers-task-source-parser.js +0 -218
  348. package/dist/lib/superpowers-task-state-schema.d.ts +0 -460
  349. package/dist/lib/superpowers-task-state-schema.js +0 -66
  350. package/dist/lib/superpowers-task-state-shape.d.ts +0 -3
  351. package/dist/lib/superpowers-task-state-shape.js +0 -50
  352. package/dist/lib/superpowers-task-state.d.ts +0 -16
  353. package/dist/lib/superpowers-task-state.js +0 -246
  354. package/dist/lib/superpowers-task-status.d.ts +0 -2
  355. package/dist/lib/superpowers-task-status.js +0 -24
  356. package/dist/lib/superpowers-task-under-specified.d.ts +0 -7
  357. package/dist/lib/superpowers-task-under-specified.js +0 -61
  358. package/dist/lib/superpowers-task-unregistered-evidence.d.ts +0 -11
  359. package/dist/lib/superpowers-task-unregistered-evidence.js +0 -72
  360. package/dist/lib/superpowers-task-validator.d.ts +0 -5
  361. package/dist/lib/superpowers-task-validator.js +0 -293
@@ -1,90 +0,0 @@
1
- import { isRecord } from "./superpowers-task-state-schema.js";
2
- const HARNESS_PATH_PATTERNS = [
3
- /(^|\/)tests\/.*\.(spec|test)\.[cm]?[jt]sx?$/i,
4
- /(^|\/)playwright\.config\./i,
5
- /(^|\/).*\.spec\.[cm]?[jt]sx?$/i,
6
- /(^|\/).*\.test\.[cm]?[jt]sx?$/i,
7
- /(^|\/)tests\/ty-context\/fixtures\/composite-long-task\//i,
8
- /superpowers-task-(assertions|evidence|evidence-kernel|current-evidence|command-specs|command-run-correlation|unregistered-evidence|completion-output|final-card|ac010|gates|validator|derive|state|state-schema|state-shape|under-specified|protected-baseline|harness-drift)\.ts$/i,
9
- /(^|\/)(\.codex\/ty-context-managed|packages\/ty-context\/assets)\/skills\/composite-long-task-workflow\//i,
10
- /composite-long-task-workflow-protocol\.md$/i,
11
- /(^|\/)Makefile$/i,
12
- /(^|\/)package\.json$/i
13
- ];
14
- const REQUIRED_NEGATIVE_FIXTURES = [
15
- "stale_evidence",
16
- "historical_complete",
17
- "derived_contradiction",
18
- "ac010_summary_only",
19
- "target_mismatch",
20
- "api_only_for_ui",
21
- "negative_evidence_after_pass",
22
- "source_hash_mismatch",
23
- "dirty_worktree_mismatch",
24
- "missing_assertion_result",
25
- "test_weakening"
26
- ];
27
- export function detectHarnessDrift(state) {
28
- const attempt = currentAttempt(state);
29
- const changedFiles = changedFilesFor(attempt);
30
- const harnessFiles = changedFiles.filter(isHarnessPath);
31
- const mode = attempt?.mode ?? "product_task";
32
- if (mode === "product_task" && harnessFiles.length > 0) {
33
- return {
34
- harness_drift_detected: true,
35
- acceptance_target_status: "blocked",
36
- product_goal_complete: false,
37
- changed_files: harnessFiles,
38
- errors: [
39
- `harness_drift_detected: ${harnessFiles.join(", ")}`,
40
- "本轮修改了验收工具链或测试本身,不能用被修改后的验收证明同一轮产品完成。请拆成独立 harness_task。"
41
- ]
42
- };
43
- }
44
- if (mode === "harness_task") {
45
- return harnessTaskFixtureVerdict(state, changedFiles);
46
- }
47
- return { harness_drift_detected: false, acceptance_target_status: "complete", product_goal_complete: true, changed_files: [], errors: [] };
48
- }
49
- export function isHarnessPath(file) {
50
- const normalized = file.replace(/\\/g, "/");
51
- return HARNESS_PATH_PATTERNS.some((pattern) => pattern.test(normalized));
52
- }
53
- function harnessTaskFixtureVerdict(state, changedFiles) {
54
- const fixtureState = isRecord(state.gates?.harness_task_fixtures) ? state.gates.harness_task_fixtures : undefined;
55
- const errors = [];
56
- if (!fixtureState) {
57
- errors.push("harness_task_missing_adversarial_fixtures: harness_task must declare adversarial fixture outcomes");
58
- }
59
- else {
60
- for (const fixture of REQUIRED_NEGATIVE_FIXTURES) {
61
- if (fixtureState[fixture] !== false) {
62
- errors.push(`harness_task_missing_adversarial_fixtures: ${fixture} must have expected product_goal_complete=false`);
63
- }
64
- }
65
- if (fixtureState.happy_path !== true) {
66
- errors.push("harness_task_missing_happy_path_fixture: happy_path must have expected product_goal_complete=true");
67
- }
68
- }
69
- const fixtureChanges = changedFiles.filter((file) => /(^|\/)tests\/ty-context\/.*fixture/i.test(file.replace(/\\/g, "/")));
70
- if (fixtureChanges.length > 0) {
71
- errors.push(`fixture_changed_requires_review: ${fixtureChanges.join(", ")}`);
72
- }
73
- return {
74
- harness_drift_detected: false,
75
- acceptance_target_status: errors.length > 0 ? "blocked" : "complete",
76
- product_goal_complete: false,
77
- harness_task_final_verdict: errors.length > 0 ? "failed" : "passed",
78
- changed_files: changedFiles,
79
- errors
80
- };
81
- }
82
- function currentAttempt(state) {
83
- if (!state.current_attempt_id) {
84
- return undefined;
85
- }
86
- return (state.attempts ?? []).find((item) => item.task_attempt_id === state.current_attempt_id);
87
- }
88
- function changedFilesFor(attempt) {
89
- return [...new Set((attempt?.changed_files ?? []).map((file) => file.replace(/\\/g, "/")).filter(Boolean))];
90
- }
@@ -1 +0,0 @@
1
- export declare function nextSuperpowersSlices(workdir: string, limit?: number): Promise<string[]>;
@@ -1,12 +0,0 @@
1
- import { loadSuperpowersState } from "./superpowers-task-state.js";
2
- export async function nextSuperpowersSlices(workdir, limit = 5) {
3
- const state = await loadSuperpowersState(workdir);
4
- return Object.entries(state.graph.proof_layers)
5
- .filter(([, layer]) => layer.required && layer.status !== "satisfied")
6
- .slice(0, limit)
7
- .map(([layerId], index) => {
8
- const acId = layerId.split(".")[0];
9
- const planId = Object.entries(state.graph.plan_items).find(([, item]) => item.related_acs.includes(acId))?.[0] ?? "PI";
10
- return `${index + 1}. ${planId}/${acId}: close ${layerId}`;
11
- });
12
- }
@@ -1,10 +0,0 @@
1
- import { type SuperpowersTaskState } from "./superpowers-task-state-schema.js";
2
- export interface ProtectedBaselineResult {
3
- protected_baseline_changed: boolean;
4
- product_goal_complete: boolean;
5
- changed_files: string[];
6
- errors: string[];
7
- }
8
- export declare const PROTECTED_BASELINE_PATHS: string[];
9
- export declare function evaluateProtectedBaseline(state: SuperpowersTaskState): ProtectedBaselineResult;
10
- export declare function isProtectedBaselinePath(file: string): boolean;
@@ -1,66 +0,0 @@
1
- import { isHarnessPath } from "./superpowers-task-harness-drift.js";
2
- import { isRecord } from "./superpowers-task-state-schema.js";
3
- export const PROTECTED_BASELINE_PATHS = [
4
- "packages/ty-context/assets/protected-harness-baseline.json",
5
- ".codex/ty-context-managed/protected-harness-baseline.json",
6
- "packages/ty-context/source-mappings.yaml",
7
- "packages/ty-context/src/lib/superpowers-task-gates.ts",
8
- "packages/ty-context/src/lib/superpowers-task-completion-output.ts",
9
- "packages/ty-context/src/lib/superpowers-task-final-card.ts",
10
- "packages/ty-context/src/lib/superpowers-task-validator.ts",
11
- "packages/ty-context/src/lib/superpowers-task-derive.ts",
12
- "packages/ty-context/src/lib/superpowers-task-evidence.ts",
13
- "packages/ty-context/src/lib/superpowers-task-evidence-kernel.ts",
14
- "packages/ty-context/src/lib/superpowers-task-current-evidence.ts",
15
- "packages/ty-context/src/lib/superpowers-task-command-run-correlation.ts",
16
- "packages/ty-context/src/lib/superpowers-task-unregistered-evidence.ts",
17
- "packages/ty-context/src/lib/superpowers-task-ac010.ts",
18
- "packages/ty-context/src/lib/superpowers-task-harness-drift.ts",
19
- "packages/ty-context/src/lib/superpowers-task-protected-baseline.ts",
20
- "packages/ty-context/src/lib/superpowers-task-state-schema.ts",
21
- ".codex/ty-context-managed/skills/composite-long-task-workflow/SKILL.md",
22
- ".codex/ty-context-managed/skills/composite-long-task-workflow/references/composite-long-task-workflow-protocol.md",
23
- ".codex/ty-context-managed/skills/composite-long-task-workflow/assets/goal-objective.template.md",
24
- ".codex/ty-context-managed/skills/composite-long-task-workflow/assets/execution-binding.template.md",
25
- "packages/ty-context/assets/skills/composite-long-task-workflow/SKILL.md",
26
- "packages/ty-context/assets/skills/composite-long-task-workflow/references/composite-long-task-workflow-protocol.md",
27
- "packages/ty-context/assets/skills/composite-long-task-workflow/assets/goal-objective.template.md",
28
- "packages/ty-context/assets/skills/composite-long-task-workflow/assets/execution-binding.template.md",
29
- "tests/ty-context/composite-long-task-completion-output-gate.test.mjs",
30
- "tests/ty-context/fixtures/composite-long-task/completion-output-gate/expected-outcomes.json",
31
- "tests/ty-context/composite-long-task-false-completion-regression.test.mjs",
32
- "tests/ty-context/fixtures/composite-long-task/false-completion-regression/manifest.json"
33
- ];
34
- export function evaluateProtectedBaseline(state) {
35
- const attempt = currentAttempt(state);
36
- const changedFiles = [...new Set((attempt?.changed_files ?? []).map((file) => file.replace(/\\/g, "/")).filter(Boolean))];
37
- const protectedChanges = changedFiles.filter(isProtectedBaselinePath);
38
- const mode = attempt?.mode ?? "product_task";
39
- const errors = [];
40
- if (mode === "product_task" && protectedChanges.length > 0) {
41
- errors.push(`protected_baseline_changed: product_task cannot change protected harness baseline paths: ${protectedChanges.join(", ")}`);
42
- }
43
- if (mode === "harness_task" && protectedChanges.length > 0 && !protectedBaselineReason(state)) {
44
- errors.push("protected_baseline_reason_required: harness_task baseline changes must record gates.protected_baseline.reason");
45
- }
46
- return {
47
- protected_baseline_changed: protectedChanges.length > 0,
48
- product_goal_complete: errors.length === 0,
49
- changed_files: protectedChanges,
50
- errors
51
- };
52
- }
53
- export function isProtectedBaselinePath(file) {
54
- const normalized = file.replace(/\\/g, "/");
55
- return PROTECTED_BASELINE_PATHS.includes(normalized) || isHarnessPath(normalized);
56
- }
57
- function protectedBaselineReason(state) {
58
- const baseline = state.gates?.protected_baseline;
59
- return isRecord(baseline) && typeof baseline.reason === "string" && baseline.reason.trim().length > 0;
60
- }
61
- function currentAttempt(state) {
62
- if (!state.current_attempt_id) {
63
- return undefined;
64
- }
65
- return (state.attempts ?? []).find((item) => item.task_attempt_id === state.current_attempt_id);
66
- }
@@ -1,5 +0,0 @@
1
- import { type SuperpowersAcceptanceCriterion, type SuperpowersPlanItem, type SuperpowersProductArchitectureScope } from "./superpowers-task-state-schema.js";
2
- export declare const DEFAULT_LAYERS: string[];
3
- export declare function parseProductArchitectureScope(content: string, sourceFile: string): SuperpowersProductArchitectureScope;
4
- export declare function parsePlanItems(content: string, sourceFile: string): Record<string, SuperpowersPlanItem>;
5
- export declare function parseAcceptanceCriteria(content: string, sourceFile: string): Record<string, SuperpowersAcceptanceCriterion>;
@@ -1,226 +0,0 @@
1
- import { MACHINE_VERIFIABLE_PROOF_LAYERS, proofLayerName } from "./superpowers-task-assertions.js";
2
- import { compileReportSuffix, missingCategory, throwCompileErrors } from "./superpowers-task-compile-diagnostics.js";
3
- import { ACCEPTANCE_FIELDS, ACCEPTANCE_SCOPES, fieldSet, isSelectedScopeFitSlice, normalizeProofLayerName, PLAN_DELIVERY_SCOPES, PLAN_FIELDS, PRODUCT_DELIVERY_SCOPES, PRODUCT_FIELDS, SCOPE_FIT_DECISIONS } from "./superpowers-task-fields.js";
4
- import { fieldArray, fieldBoolean, fieldLine, fieldText, parseDocumentFields, parseHeadingDefinitions } from "./superpowers-task-source-parser.js";
5
- export const DEFAULT_LAYERS = ["code", "test"];
6
- const PRODUCT_FIELD_SET = fieldSet(PRODUCT_FIELDS);
7
- const PLAN_FIELD_SET = fieldSet(PLAN_FIELDS);
8
- const ACCEPTANCE_FIELD_SET = fieldSet(ACCEPTANCE_FIELDS);
9
- export function parseProductArchitectureScope(content, sourceFile) {
10
- const fields = parseDocumentFields(content, sourceFile, PRODUCT_FIELD_SET);
11
- const errors = [];
12
- const selectedScopeFitSlice = requireText(errors, "Product / Architecture Source", "selected_scope_fit_slice", fields, sourceFile, 1);
13
- if (selectedScopeFitSlice && !isSelectedScopeFitSlice(selectedScopeFitSlice)) {
14
- errors.push(`Product / Architecture Source invalid selected_scope_fit_slice: ${selectedScopeFitSlice} at ${sourceFile}:${fieldLine(fields, "selected_scope_fit_slice") ?? 1}; allowed: none or SFC-###${compileReportSuffix("blocking_unparseable_object", sourceFile, fieldLine(fields, "selected_scope_fit_slice") ?? 1, "selected_scope_fit_slice", "value must be none or an SFC-### id", "fix selected_scope_fit_slice and rerun compile")}`);
15
- }
16
- const scope = {
17
- delivery_scope: requireEnum(errors, "Product / Architecture Source", "delivery_scope", fields, PRODUCT_DELIVERY_SCOPES, sourceFile, 1),
18
- full_population_required: requireBoolean(errors, "Product / Architecture Source", "full_population_required", fields, sourceFile, 1),
19
- representative_samples_validate: requireArray(errors, "Product / Architecture Source", "representative_samples_validate", fields, sourceFile, 1),
20
- representative_samples_do_not_validate: requireArray(errors, "Product / Architecture Source", "representative_samples_do_not_validate", fields, sourceFile, 1),
21
- out_of_scope_backlog: requireArray(errors, "Product / Architecture Source", "out_of_scope_backlog", fields, sourceFile, 1),
22
- scope_fit_decision: requireEnum(errors, "Product / Architecture Source", "scope_fit_decision", fields, SCOPE_FIT_DECISIONS, sourceFile, 1),
23
- selected_scope_fit_slice: selectedScopeFitSlice,
24
- owner_boundary: requireText(errors, "Product / Architecture Source", "owner_boundary", fields, sourceFile, 1),
25
- primary_capability_path: requireText(errors, "Product / Architecture Source", "primary_capability_path", fields, sourceFile, 1),
26
- non_completing_outcomes: requireArray(errors, "Product / Architecture Source", "non_completing_outcomes", fields, sourceFile, 1),
27
- assertion_policy: requireText(errors, "Product / Architecture Source", "assertion_policy", fields, sourceFile, 1),
28
- source_authority: requireText(errors, "Product / Architecture Source", "source_authority", fields, sourceFile, 1),
29
- product_goal: requireText(errors, "Product / Architecture Source", "product_goal", fields, sourceFile, 1),
30
- surface_ia_lock: optionalText(fields, "surface_ia_lock"),
31
- decision_lock: optionalText(fields, "decision_lock"),
32
- context_delta: optionalText(fields, "context_delta"),
33
- source_to_context_coverage: optionalText(fields, "source_to_context_coverage"),
34
- acceptance_semantics: optionalText(fields, "acceptance_semantics"),
35
- impact: optionalText(fields, "impact")
36
- };
37
- throwCompileErrors(errors);
38
- return scope;
39
- }
40
- export function parsePlanItems(content, sourceFile) {
41
- const items = {};
42
- const errors = [];
43
- for (const definition of parseHeadingDefinitions(content, { kind: "PI", sourceFile, allowedFields: PLAN_FIELD_SET })) {
44
- const fields = definition.fields;
45
- items[definition.id] = {
46
- requirement: definition.title,
47
- source_file: definition.source_file,
48
- source_start_line: definition.source_start_line,
49
- source_end_line: definition.source_end_line,
50
- delivery_scope: requireEnum(errors, definition.id, "delivery_scope", fields, PLAN_DELIVERY_SCOPES, sourceFile, definition.source_start_line),
51
- capability_target: requireText(errors, definition.id, "capability_target", fields, sourceFile, definition.source_start_line),
52
- representative_samples: requireArray(errors, definition.id, "representative_samples", fields, sourceFile, definition.source_start_line),
53
- full_population_boundary: requireText(errors, definition.id, "full_population_boundary", fields, sourceFile, definition.source_start_line),
54
- non_required_population: requireArray(errors, definition.id, "non_required_population", fields, sourceFile, definition.source_start_line),
55
- owner_boundary: requireText(errors, definition.id, "owner_boundary", fields, sourceFile, definition.source_start_line),
56
- primary_capability_path: requireText(errors, definition.id, "primary_capability_path", fields, sourceFile, definition.source_start_line),
57
- trigger_contract: requireText(errors, definition.id, "trigger_contract", fields, sourceFile, definition.source_start_line),
58
- state_transition_contract: requireText(errors, definition.id, "state_transition_contract", fields, sourceFile, definition.source_start_line),
59
- observable_result_contract: requireText(errors, definition.id, "observable_result_contract", fields, sourceFile, definition.source_start_line),
60
- assertion_support: requireText(errors, definition.id, "assertion_support", fields, sourceFile, definition.source_start_line),
61
- required_assertion_commands: requireArray(errors, definition.id, "required_assertion_commands", fields, sourceFile, definition.source_start_line),
62
- invalid_implementation_shortcuts: requireArray(errors, definition.id, "invalid_implementation_shortcuts", fields, sourceFile, definition.source_start_line),
63
- owner_surfaces: optionalArray(fields, "owner_surfaces"),
64
- forbidden_surfaces: optionalArray(fields, "forbidden_surfaces"),
65
- implementation_paths: requireArray(errors, definition.id, "implementation_paths", fields, sourceFile, definition.source_start_line),
66
- required_tests: optionalArray(fields, "required_tests"),
67
- proof_layer_ids: optionalArray(fields, "proof_layer_ids").map(normalizeLayerId),
68
- requirement_ref: optionalText(fields, "requirement_ref"),
69
- decision_id: optionalText(fields, "decision_id"),
70
- api_schema_changes: optionalText(fields, "api_schema_changes"),
71
- state_machine: optionalText(fields, "state_machine"),
72
- data_flow: optionalText(fields, "data_flow"),
73
- worker_runtime_behavior: optionalText(fields, "worker_runtime_behavior"),
74
- ui_ia_changes: optionalText(fields, "ui_ia_changes"),
75
- migration_plan: optionalText(fields, "migration_plan"),
76
- evidence_artifacts: optionalArray(fields, "evidence_artifacts"),
77
- non_completing_shortcuts: optionalArray(fields, "non_completing_shortcuts"),
78
- substitution_policy: optionalArray(fields, "substitution_policy"),
79
- drift_severity: optionalText(fields, "drift_severity"),
80
- partial_conditions: optionalArray(fields, "partial_conditions"),
81
- blockers: optionalArray(fields, "blockers"),
82
- explicit_no_test_scope: fieldBoolean(fields, "explicit_no_test_scope") === true,
83
- context_fact_refs: optionalArray(fields, "context_fact_refs"),
84
- status: "not_started",
85
- related_acs: optionalArray(fields, "related_acs").map((item) => item.toUpperCase()),
86
- required_proof_layers: []
87
- };
88
- }
89
- throwCompileErrors(errors);
90
- return items;
91
- }
92
- export function parseAcceptanceCriteria(content, sourceFile) {
93
- const items = {};
94
- const errors = [];
95
- for (const definition of parseHeadingDefinitions(content, { kind: "AC", sourceFile, allowedFields: ACCEPTANCE_FIELD_SET })) {
96
- const fields = definition.fields;
97
- const layers = requireArray(errors, definition.id, "required_proof_layers", fields, sourceFile, definition.source_start_line).map(normalizeLayer).filter(Boolean);
98
- const requiredProofLayers = layers.length > 0 ? layers : DEFAULT_LAYERS;
99
- items[definition.id] = {
100
- scope: definition.title,
101
- source_file: definition.source_file,
102
- source_start_line: definition.source_start_line,
103
- source_end_line: definition.source_end_line,
104
- acceptance_scope: requireEnum(errors, definition.id, "acceptance_scope", fields, ACCEPTANCE_SCOPES, sourceFile, definition.source_start_line),
105
- ac_validates: requireArray(errors, definition.id, "ac_validates", fields, sourceFile, definition.source_start_line),
106
- ac_does_not_validate: requireArray(errors, definition.id, "ac_does_not_validate", fields, sourceFile, definition.source_start_line),
107
- sample_boundary: requireText(errors, definition.id, "sample_boundary", fields, sourceFile, definition.source_start_line),
108
- full_population_required: requireBoolean(errors, definition.id, "full_population_required", fields, sourceFile, definition.source_start_line),
109
- related_plan_items: requireArray(errors, definition.id, "related_plan_items", fields, sourceFile, definition.source_start_line).map((item) => item.toUpperCase()),
110
- required_proof_layers: requiredProofLayers,
111
- assertion_requirements: assertionRequirements(fields, requiredProofLayers),
112
- assertion_command: requireText(errors, definition.id, "assertion_command", fields, sourceFile, definition.source_start_line),
113
- assertion_artifacts: requireArray(errors, definition.id, "assertion_artifacts", fields, sourceFile, definition.source_start_line),
114
- positive_assertions: requireArray(errors, definition.id, "positive_assertions", fields, sourceFile, definition.source_start_line),
115
- negative_assertions: requireArray(errors, definition.id, "negative_assertions", fields, sourceFile, definition.source_start_line),
116
- machine_blocking: requireBoolean(errors, definition.id, "machine_blocking", fields, sourceFile, definition.source_start_line),
117
- invalid_completion_signals: requireArray(errors, definition.id, "invalid_completion_signals", fields, sourceFile, definition.source_start_line),
118
- assertion_result_required: requireBoolean(errors, definition.id, "assertion_result_required", fields, sourceFile, definition.source_start_line),
119
- ac_type: optionalText(fields, "ac_type"),
120
- proof_chain: optionalArray(fields, "proof_chain").map(normalizeLayerId),
121
- required_test_ids: optionalArray(fields, "required_test_ids"),
122
- fail_conditions: optionalArray(fields, "fail_conditions"),
123
- invalid_evidence: optionalArray(fields, "invalid_evidence"),
124
- substitution_policy: optionalArray(fields, "substitution_policy"),
125
- missing_layer_downgrade: optionalText(fields, "missing_layer_downgrade"),
126
- auditor_expectation: optionalText(fields, "auditor_expectation"),
127
- out_of_scope_na_approval_source: optionalText(fields, "out_of_scope_na_approval_source"),
128
- hard_blockers: optionalArray(fields, "hard_blockers"),
129
- validates_explanation: optionalText(fields, "validates_explanation"),
130
- does_not_validate_explanation: optionalText(fields, "does_not_validate_explanation"),
131
- final_evidence_expected: optionalArray(fields, "final_evidence_expected"),
132
- verification_method: optionalArray(fields, "verification_method"),
133
- test_cases: optionalArray(fields, "test_cases"),
134
- explicit_no_test_scope: fieldBoolean(fields, "explicit_no_test_scope") === true,
135
- status: "not_run"
136
- };
137
- }
138
- throwCompileErrors(errors);
139
- return items;
140
- }
141
- function normalizeLayer(value) {
142
- return normalizeProofLayerName(value);
143
- }
144
- function normalizeLayerId(value) {
145
- const trimmed = value.trim();
146
- if (!trimmed.includes(".")) {
147
- return normalizeLayer(trimmed);
148
- }
149
- const acId = trimmed.slice(0, trimmed.lastIndexOf(".")).toUpperCase();
150
- const layer = trimmed.slice(trimmed.lastIndexOf(".") + 1);
151
- return `${acId}.${normalizeLayer(layer)}`;
152
- }
153
- function assertionRequirements(fields, layers) {
154
- const requiredTestIds = optionalArray(fields, "required_test_ids");
155
- const positiveAssertions = unique(optionalArray(fields, "positive_assertions"));
156
- const negativeAssertions = unique(optionalArray(fields, "negative_assertions"));
157
- const assertionCommand = fieldText(fields, "assertion_command");
158
- const assertionArtifacts = optionalArray(fields, "assertion_artifacts");
159
- const machineBlocking = fieldBoolean(fields, "machine_blocking");
160
- const assertionResultRequired = fieldBoolean(fields, "assertion_result_required");
161
- const invalidCompletionSignals = optionalArray(fields, "invalid_completion_signals");
162
- return layers.map((layer) => {
163
- const normalized = proofLayerName(normalizeLayer(layer));
164
- return {
165
- proof_layer: normalized,
166
- required: true,
167
- machine_blocking: machineBlocking ?? MACHINE_VERIFIABLE_PROOF_LAYERS.has(normalized),
168
- assertion_result_required: assertionResultRequired ?? MACHINE_VERIFIABLE_PROOF_LAYERS.has(normalized),
169
- assertion_command: assertionCommand,
170
- assertion_artifacts: assertionArtifacts,
171
- invalid_completion_signals: invalidCompletionSignals,
172
- required_test_ids: requiredTestIds,
173
- positive_assertions: positiveAssertions,
174
- negative_assertions: negativeAssertions
175
- };
176
- });
177
- }
178
- function requireEnum(errors, label, name, fields, allowed, sourceFile, fallbackLine) {
179
- const value = fieldText(fields, name);
180
- const line = fieldLine(fields, name) ?? fallbackLine;
181
- if (!value) {
182
- errors.push(`${label} missing ${name} at ${sourceFile}:${line}${compileReportSuffix(missingCategory(label), sourceFile, line, name, "field is required", "add the required field and rerun compile")}`);
183
- return "";
184
- }
185
- if (!allowed.has(value)) {
186
- errors.push(`${label} invalid ${name}: ${value} at ${sourceFile}:${line}; allowed: ${[...allowed].join(", ")}${compileReportSuffix("blocking_unparseable_object", sourceFile, line, name, `value must be one of ${[...allowed].join(", ")}`, "fix the field value and rerun compile")}`);
187
- }
188
- return value;
189
- }
190
- function requireText(errors, label, name, fields, sourceFile, fallbackLine) {
191
- const value = fieldText(fields, name);
192
- const line = fieldLine(fields, name) ?? fallbackLine;
193
- if (!value) {
194
- errors.push(`${label} missing ${name} at ${sourceFile}:${line}${compileReportSuffix(missingCategory(label), sourceFile, line, name, "field is required", "add non-empty text and rerun compile")}`);
195
- }
196
- return value;
197
- }
198
- function requireArray(errors, label, name, fields, sourceFile, fallbackLine) {
199
- const line = fieldLine(fields, name) ?? fallbackLine;
200
- if (!fields[name]) {
201
- errors.push(`${label} missing ${name} at ${sourceFile}:${line}${compileReportSuffix(missingCategory(label), sourceFile, line, name, "field is required", "add the list field and rerun compile")}`);
202
- return [];
203
- }
204
- return fieldArray(fields, name);
205
- }
206
- function requireBoolean(errors, label, name, fields, sourceFile, fallbackLine) {
207
- const line = fieldLine(fields, name) ?? fallbackLine;
208
- if (!fields[name]) {
209
- errors.push(`${label} missing ${name} at ${sourceFile}:${line}${compileReportSuffix(missingCategory(label), sourceFile, line, name, "field is required", "add true or false and rerun compile")}`);
210
- return null;
211
- }
212
- const value = fieldBoolean(fields, name);
213
- if (value === null) {
214
- errors.push(`${label} invalid ${name}: ${fieldText(fields, name)} at ${sourceFile}:${line}; must be true or false${compileReportSuffix("blocking_unparseable_object", sourceFile, line, name, "value must be true or false", "fix the boolean and rerun compile")}`);
215
- }
216
- return value;
217
- }
218
- function optionalArray(fields, name) {
219
- return fields[name] ? fieldArray(fields, name) : [];
220
- }
221
- function optionalText(fields, name) {
222
- return fields[name] ? fieldText(fields, name) : "";
223
- }
224
- function unique(values) {
225
- return [...new Set(values.filter(Boolean))];
226
- }
@@ -1,23 +0,0 @@
1
- export interface ParsedField {
2
- value: string | string[];
3
- line: number;
4
- }
5
- export interface ParsedDefinition {
6
- id: string;
7
- title: string;
8
- fields: Record<string, ParsedField>;
9
- source_file: string;
10
- source_start_line: number;
11
- source_end_line: number;
12
- }
13
- export interface DefinitionParseOptions {
14
- kind: "PI" | "AC";
15
- sourceFile: string;
16
- allowedFields: Set<string>;
17
- }
18
- export declare function parseHeadingDefinitions(content: string, options: DefinitionParseOptions): ParsedDefinition[];
19
- export declare function parseDocumentFields(content: string, sourceFile: string, allowedFields: Set<string>): Record<string, ParsedField>;
20
- export declare function fieldText(fields: Record<string, ParsedField>, name: string): string;
21
- export declare function fieldArray(fields: Record<string, ParsedField>, name: string): string[];
22
- export declare function fieldBoolean(fields: Record<string, ParsedField>, name: string): boolean | null;
23
- export declare function fieldLine(fields: Record<string, ParsedField>, name: string): number | undefined;