project-tiny-context-harness 0.2.84 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/README.md +163 -428
  2. package/assets/README.md +283 -455
  3. package/assets/README.zh-CN.md +199 -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 +62 -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 +379 -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 -157
  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 +15 -3
  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 -244
  275. package/assets/skills/composite-long-task-workflow/assets/execution-binding.template.md +0 -57
  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 -675
  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 -52
  313. package/dist/lib/superpowers-task-completion-output.js +0 -228
  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 -382
  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 -24
  336. package/dist/lib/superpowers-task-gates.d.ts +0 -12
  337. package/dist/lib/superpowers-task-gates.js +0 -155
  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 -440
  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 -290
@@ -1,290 +0,0 @@
1
- import path from "node:path";
2
- import { pathExists, readText } from "./fs.js";
3
- import { findSensitiveEvidence } from "./plan-acceptance-evidence.js";
4
- import { primitiveText, repoRelative, resolveInputDir } from "./plan-validator-common.js";
5
- import { derivedMatchesState } from "./superpowers-task-derive.js";
6
- import { validatePlanCompletionConformance } from "./superpowers-task-conformance.js";
7
- import { scanSuperpowersContradictions } from "./superpowers-task-contradictions.js";
8
- import { evaluateTrustedEvidenceKernel } from "./superpowers-task-evidence-kernel.js";
9
- import { fullPopulationRequired, validateDeliveryContract, validateScopeConflicts } from "./superpowers-task-delivery.js";
10
- import { hasUsableShape, validateShape } from "./superpowers-task-state-shape.js";
11
- import { loadSuperpowersState, sha256 } from "./superpowers-task-state.js";
12
- import { validateCanonicalStatuses } from "./superpowers-task-status.js";
13
- import { isRecord } from "./superpowers-task-state-schema.js";
14
- import { evaluateProofLayerAssertions, isUiBrowserLayer, proofLayerName } from "./superpowers-task-assertions.js";
15
- import { completionOutputContractFromState, completionPhraseFindingMessages, scanGeneratedCompletionOutputSurfaces } from "./superpowers-task-completion-output.js";
16
- export async function validateSuperpowersState(projectRoot, args = []) {
17
- const info = [];
18
- const warnings = [];
19
- const hygiene = [];
20
- const errors = [];
21
- const targetDir = await resolveInputDir(projectRoot, args[0], "tmp/ty-context/plan-acceptance");
22
- const statePath = path.join(targetDir, "task-state.json");
23
- if (!(await pathExists(statePath))) {
24
- return { info, warnings, hygiene, errors: [`superpowers task state is missing: ${repoRelative(projectRoot, statePath)}`] };
25
- }
26
- let state;
27
- try {
28
- state = await loadSuperpowersState(targetDir);
29
- }
30
- catch (error) {
31
- return { info, warnings, hygiene, errors: [`${repoRelative(projectRoot, statePath)} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`] };
32
- }
33
- validateShape(state, errors);
34
- if (!hasUsableShape(state)) {
35
- info.push("checked superpowers task state with unusable or incomplete shape");
36
- return { info, warnings, hygiene, errors };
37
- }
38
- await validateSourceHashes(targetDir, state, errors);
39
- validateDeliveryContract(state, errors);
40
- validateCanonicalStatuses(state, errors);
41
- validateGraphReferences(state, errors);
42
- validatePlanCompletionConformance(state, errors);
43
- validateScopeConflicts(state, errors);
44
- validateEvidenceRecords(state, errors);
45
- validateProofLayers(state, errors);
46
- errors.push(...(await evaluateTrustedEvidenceKernel(targetDir, state)).errors);
47
- errors.push(...(await scanSuperpowersContradictions(targetDir, state)).errors);
48
- validateAuditor(state, errors);
49
- validateFinalCompletion(state, errors);
50
- errors.push(...(await derivedMatchesState(targetDir, state)));
51
- await validateCompletionOutputConsistency(targetDir, state, errors);
52
- info.push(`checked superpowers task state ${repoRelative(projectRoot, targetDir)} plan_items=${Object.keys(state.graph?.plan_items ?? {}).length} acs=${Object.keys(state.graph?.acceptance_criteria ?? {}).length} evidence=${state.evidence?.length ?? 0}`);
53
- if (errors.length === 0) {
54
- info.push("Superpowers task state validation passed");
55
- }
56
- return { info, warnings, hygiene, errors };
57
- }
58
- async function validateCompletionOutputConsistency(workdir, state, errors) {
59
- const contract = completionOutputContractFromState(state);
60
- const finalRecord = state.final;
61
- const gate = isRecord(state.gates?.final_gate) ? state.gates.final_gate : {};
62
- const storedStatus = finalRecord.completion_output_status ?? (typeof gate.completion_output_status === "string" ? gate.completion_output_status : undefined);
63
- if (storedStatus && storedStatus !== contract.completion_output_status) {
64
- errors.push(`completion_output_status mismatch: expected ${contract.completion_output_status}, found ${storedStatus}`);
65
- }
66
- if (contract.completion_output_status === "accept" && state.final.product_goal_complete !== true) {
67
- errors.push("completion_output_status=accept but product_goal_complete is not true");
68
- }
69
- if (finalRecord.final_answer_allowed !== undefined && finalRecord.final_answer_allowed !== contract.final_answer_allowed) {
70
- errors.push(`final_answer_allowed mismatch: expected ${contract.final_answer_allowed}, found ${finalRecord.final_answer_allowed}`);
71
- }
72
- if (finalRecord.required_user_visible_status && finalRecord.required_user_visible_status !== contract.required_user_visible_status) {
73
- errors.push(`required_user_visible_status mismatch: expected ${contract.required_user_visible_status}, found ${finalRecord.required_user_visible_status}`);
74
- }
75
- if (finalRecord.exit_code !== undefined && finalRecord.exit_code !== contract.exit_code) {
76
- errors.push(`completion output exit_code mismatch: expected ${contract.exit_code}, found ${finalRecord.exit_code}`);
77
- }
78
- errors.push(...completionPhraseFindingMessages(await scanGeneratedCompletionOutputSurfaces(workdir, contract)));
79
- await validateMarkdownCompletionStatus(workdir, contract.completion_output_status, errors);
80
- }
81
- async function validateMarkdownCompletionStatus(workdir, expectedStatus, errors) {
82
- for (const relative of ["derived/final-summary.md", "derived/final-card.md", "derived/local-audit.md"]) {
83
- const file = path.join(workdir, ...relative.split("/"));
84
- if (!(await pathExists(file))) {
85
- continue;
86
- }
87
- const text = await readText(file);
88
- const match = /^completion_output_status:\s*(\S+)\s*$/im.exec(text);
89
- if (match && match[1] !== expectedStatus) {
90
- errors.push(`${relative} completion_output_status mismatch: expected ${expectedStatus}, found ${match[1]}`);
91
- }
92
- }
93
- }
94
- async function validateSourceHashes(workdir, state, errors) {
95
- for (const [key, source] of Object.entries(state.sources ?? {})) {
96
- const file = path.join(workdir, source.path);
97
- if (!(await pathExists(file))) {
98
- errors.push(`source file is missing for ${key}: ${source.path}`);
99
- continue;
100
- }
101
- const actual = sha256(await readText(file));
102
- if (actual !== source.sha256) {
103
- errors.push(`source hash mismatch for ${key}: expected ${source.sha256}, actual ${actual}; recompile graph before continuing`);
104
- }
105
- }
106
- }
107
- function validateGraphReferences(state, errors) {
108
- const planIds = new Set(Object.keys(state.graph?.plan_items ?? {}));
109
- const acIds = new Set(Object.keys(state.graph?.acceptance_criteria ?? {}));
110
- for (const [planId, item] of Object.entries(state.graph?.plan_items ?? {})) {
111
- for (const acId of item.related_acs ?? []) {
112
- if (!acIds.has(acId)) {
113
- errors.push(`plan item ${planId} references unknown AC: ${acId}`);
114
- }
115
- }
116
- for (const layerId of item.required_proof_layers ?? []) {
117
- if (!state.graph.proof_layers[layerId]) {
118
- errors.push(`plan item ${planId} references unknown proof layer: ${layerId}`);
119
- }
120
- }
121
- }
122
- for (const [acId, ac] of Object.entries(state.graph?.acceptance_criteria ?? {})) {
123
- for (const planId of ac.related_plan_items ?? []) {
124
- if (!planIds.has(planId)) {
125
- errors.push(`AC ${acId} references unknown plan item: ${planId}`);
126
- }
127
- }
128
- for (const layer of ac.required_proof_layers ?? []) {
129
- const layerId = `${acId}.${layer}`;
130
- if (!state.graph.proof_layers[layerId]) {
131
- errors.push(`AC ${acId} references unknown proof layer: ${layerId}`);
132
- }
133
- }
134
- }
135
- }
136
- function validateEvidenceRecords(state, errors) {
137
- const ids = new Set();
138
- for (const [index, evidence] of (state.evidence ?? []).entries()) {
139
- const label = `evidence ${evidence.evidence_id || index + 1}`;
140
- if (!evidence.evidence_id) {
141
- errors.push(`${label} is missing evidence_id`);
142
- }
143
- else if (ids.has(evidence.evidence_id)) {
144
- errors.push(`${label} duplicates evidence_id`);
145
- }
146
- ids.add(evidence.evidence_id);
147
- if (!evidence.slice_id) {
148
- errors.push(`${label} is missing slice_id`);
149
- }
150
- if ((evidence.proves ?? []).length === 0) {
151
- errors.push(`${label} is missing proves`);
152
- }
153
- if ((evidence.does_not_prove ?? []).length === 0) {
154
- errors.push(`${label} is missing does_not_prove`);
155
- }
156
- if (!evidence.freshness?.created_at || !evidence.freshness.valid_for) {
157
- errors.push(`${label} is missing freshness`);
158
- }
159
- if (evidence.freshness?.stale_after && Date.parse(evidence.freshness.stale_after) < Date.now()) {
160
- errors.push(`${label} is stale evidence: ${evidence.freshness.stale_after}`);
161
- }
162
- if (evidence.redaction?.checked !== true) {
163
- errors.push(`${label} redaction.checked must be true`);
164
- }
165
- if (evidence.redaction?.contains_secret === true) {
166
- errors.push(`${label} redaction contains_secret is true`);
167
- }
168
- if (evidence.reviewability?.external_reviewer_can_reproduce !== true || !evidence.reviewability.reproduction_steps) {
169
- errors.push(`${label} is not reviewable by an external reviewer`);
170
- }
171
- const sensitive = findSensitiveEvidence(primitiveText(evidence));
172
- if (sensitive) {
173
- errors.push(`${label} contains raw secret/token/cookie material: ${sensitive}`);
174
- }
175
- if (evidence.sibling_substitution_used === true && !evidence.sibling_substitution_approval_source) {
176
- errors.push(`${label} uses sibling substitution without approval`);
177
- }
178
- for (const proofLayer of evidence.proves ?? []) {
179
- const layerName = proofLayerName(proofLayer);
180
- if (layerName === "worker_runtime" && /\b(mock|unit|viewmodel)\b/i.test(evidence.type)) {
181
- errors.push(`${label} worker_runtime proof cannot be mock/unit/viewmodel only`);
182
- }
183
- if (layerName === "ui_browser" && !/(browser|ui_browser|screenshot|playwright)/i.test(evidence.type)) {
184
- errors.push(`${label} UI proof must use browser owner surface evidence`);
185
- }
186
- }
187
- }
188
- }
189
- function validateProofLayers(state, errors) {
190
- const evidenceById = new Map((state.evidence ?? []).map((item) => [item.evidence_id, item]));
191
- for (const [layerId, layer] of Object.entries(state.graph?.proof_layers ?? {})) {
192
- if (layer.status === "satisfied" && layer.evidence_ids.length === 0) {
193
- errors.push(`proof layer ${layerId} is satisfied but has no evidence_ids`);
194
- }
195
- for (const evidenceId of layer.evidence_ids ?? []) {
196
- const evidence = evidenceById.get(evidenceId);
197
- if (!evidence) {
198
- errors.push(`proof layer ${layerId} references unknown evidence_id: ${evidenceId}`);
199
- continue;
200
- }
201
- if (!evidence.proves.includes(layerId)) {
202
- errors.push(`proof layer ${layerId} references ${evidenceId} but that evidence does not prove it`);
203
- }
204
- }
205
- if (layer.status === "satisfied") {
206
- const evaluation = evaluateProofLayerAssertions(state, layerId);
207
- errors.push(...evaluation.blocking_assertion_failures, ...evaluation.negative_evidence_findings);
208
- if (isUiBrowserLayer(layerId) && evaluation.assertion_status !== "passed") {
209
- errors.push(`proof layer ${layerId} ui_browser proof not machine-backed`);
210
- }
211
- }
212
- }
213
- }
214
- function validateAuditor(state, errors) {
215
- const auditor = state.gates?.auditor;
216
- if (!isRecord(auditor)) {
217
- return;
218
- }
219
- const status = String(auditor.auditor_status ?? "").toLowerCase();
220
- const findings = Array.isArray(auditor.findings) ? auditor.findings : [];
221
- if (status === "blocking_gap" || findings.some((finding) => isRecord(finding) && String(finding.severity ?? "").toLowerCase() === "blocking")) {
222
- errors.push(`auditor blocker remains: ${findings.map((finding) => (isRecord(finding) ? finding.id : "")).filter(Boolean).join(", ") || status}`);
223
- }
224
- }
225
- function validateFinalCompletion(state, errors) {
226
- const finalComplete = state.final?.product_goal_complete === true || state.meta?.product_goal_complete === true;
227
- if (!finalComplete) {
228
- return;
229
- }
230
- const planEntries = Object.entries(state.graph.plan_items);
231
- const acEntries = Object.entries(state.graph.acceptance_criteria);
232
- const layerEntries = Object.entries(state.graph.proof_layers);
233
- if (planEntries.length === 0 || acEntries.length === 0 || layerEntries.length === 0) {
234
- errors.push("product_goal_complete=true but task graph is empty or uncompiled");
235
- }
236
- const incompleteAcs = acEntries.filter(([, ac]) => ac.status !== "complete" && ac.status !== "out_of_scope_NA");
237
- const incompletePlans = planEntries.filter(([, item]) => item.status !== "complete" && item.status !== "out_of_scope_NA");
238
- const incompleteLayers = layerEntries.filter(([, layer]) => layer.required && layer.status !== "satisfied");
239
- if (incompleteAcs.length > 0 || incompletePlans.length > 0 || incompleteLayers.length > 0) {
240
- errors.push("product_goal_complete=true but required plan items, ACs or proof layers are incomplete");
241
- }
242
- if (state.context.product_context_delta === "required" || state.context.technical_context_delta === "required") {
243
- const unresolvedCoverage = (state.context.source_to_context_coverage ?? []).filter((row) => /\b(new_context_required|needs_user_decision|under_scoped)\b/i.test(primitiveText(row)));
244
- if (unresolvedCoverage.length > 0) {
245
- errors.push("product_goal_complete=true but Context Delta coverage is unresolved");
246
- }
247
- }
248
- validateFullPopulationEvidence(state, errors);
249
- }
250
- function validateFullPopulationEvidence(state, errors) {
251
- if (fullPopulationRequired(state)) {
252
- const sampleOnlyEvidence = state.evidence.filter((evidence) => evidence.does_not_prove.some((claim) => /\b(full[-_ ]?population|all[-_ ]?provider|all[-_ ]?interface|all[-_ ]?platform)\b/i.test(claim)));
253
- if (sampleOnlyEvidence.length > 0) {
254
- errors.push(`product_goal_complete=true but full-population completion relies on evidence that explicitly does not prove full population coverage: ${sampleOnlyEvidence
255
- .map((evidence) => evidence.evidence_id)
256
- .join(", ")}`);
257
- }
258
- }
259
- }
260
- export function completionConditionErrors(state) {
261
- const errors = [];
262
- validateShape(state, errors);
263
- if (!hasUsableShape(state)) {
264
- return errors;
265
- }
266
- validateDeliveryContract(state, errors);
267
- validateScopeConflicts(state, errors);
268
- validateGraphReferences(state, errors);
269
- validatePlanCompletionConformance(state, errors);
270
- validateEvidenceRecords(state, errors);
271
- validateProofLayers(state, errors);
272
- validateAuditor(state, errors);
273
- validateFullPopulationEvidence(state, errors);
274
- const planItems = Object.values(state.graph.plan_items);
275
- const acceptanceCriteria = Object.values(state.graph.acceptance_criteria);
276
- const proofLayers = Object.values(state.graph.proof_layers);
277
- const allPlansComplete = planItems.every((item) => item.status === "complete" || item.status === "out_of_scope_NA");
278
- const allAcsComplete = acceptanceCriteria.every((ac) => ac.status === "complete" || ac.status === "out_of_scope_NA");
279
- const allLayersSatisfied = proofLayers.every((layer) => !layer.required || layer.status === "satisfied");
280
- if (planItems.length === 0 || acceptanceCriteria.length === 0 || proofLayers.length === 0) {
281
- errors.push("completion conditions require a compiled task graph with plan items, ACs and proof layers");
282
- }
283
- if (!allPlansComplete || !allAcsComplete || !allLayersSatisfied) {
284
- errors.push("completion conditions require all required plan items, ACs and proof layers to be complete");
285
- }
286
- return errors;
287
- }
288
- export function allCompletionConditionsSatisfied(state) {
289
- return completionConditionErrors(state).length === 0;
290
- }