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,164 +1,8 @@
1
- import path from "node:path";
2
- import { applySliceDelta, initializeSuperpowersTask } from "../lib/superpowers-task-state.js";
3
- import { compileSuperpowersTask } from "../lib/superpowers-task-compile.js";
4
- import { startAndSaveSuperpowersAttempt } from "../lib/superpowers-task-attempt.js";
5
- import { recordSuperpowersEvidence, runSuperpowersAssertion } from "../lib/superpowers-task-evidence.js";
6
- import { deriveSuperpowersArtifacts } from "../lib/superpowers-task-derive.js";
7
- import { runEpochGate, runFinalGate, runSliceGate } from "../lib/superpowers-task-gates.js";
8
- import { nextSuperpowersSlices } from "../lib/superpowers-task-next-slices.js";
9
- import { renderCompositeLongTaskGoal } from "../lib/composite-long-task-renderer.js";
10
- export async function compositeLongTask(args) {
11
- await runCompositeLongTaskCommand(args, {
12
- commandName: "ty-context composite-long-task",
13
- label: "composite long-task",
14
- showHelp: true
15
- });
16
- }
17
- export async function runCompositeLongTaskCommand(args, options) {
18
- const subcommand = args[0] ?? "help";
19
- const workdirArg = args[1];
20
- if (!workdirArg || subcommand === "help") {
21
- help(options.commandName, options.showHelp);
22
- return;
23
- }
24
- const workdir = path.resolve(process.cwd(), workdirArg);
25
- if (subcommand === "init") {
26
- await initializeSuperpowersTask(workdir, { planSlug: path.basename(workdir) });
27
- console.log(`initialized ${options.label} state at ${workdirArg}/task-state.json`);
28
- return;
29
- }
30
- if (subcommand === "compile") {
31
- const state = await compileSuperpowersTask(workdir, { mode: attemptMode(args) });
32
- console.log(`compiled ${options.label} graph plan_items=${Object.keys(state.graph.plan_items).length} acs=${Object.keys(state.graph.acceptance_criteria).length}`);
33
- return;
34
- }
35
- if (subcommand === "start-attempt") {
36
- const attempt = await startAndSaveSuperpowersAttempt(workdir, attemptMode(args));
37
- console.log(`started attempt ${attempt.task_attempt_id}`);
38
- return;
39
- }
40
- if (subcommand === "run-assertion") {
41
- const separator = args.indexOf("--");
42
- const commandArgs = separator >= 0 ? args.slice(separator + 1) : [];
43
- const run = await runSuperpowersAssertion(workdir, {
44
- acId: optionValue(args, "--ac") ?? "",
45
- proofLayer: optionValue(args, "--proof-layer") ?? "",
46
- commandArgs
47
- });
48
- console.log(`recorded assertion command_run_id=${run.command_run_id} exit_code=${run.exit_code}`);
49
- if (run.exit_code !== 0) {
50
- process.exitCode = 1;
51
- }
52
- return;
53
- }
54
- if (subcommand === "record-evidence") {
55
- const evidence = await recordSuperpowersEvidence(workdir, {
56
- artifactPath: path.resolve(process.cwd(), optionValue(args, "--from") ?? ""),
57
- commandRunId: optionValue(args, "--command-run-id") ?? ""
58
- });
59
- console.log(`registered evidence ${evidence.evidence_id}`);
60
- return;
61
- }
62
- if (subcommand === "apply-slice-delta") {
63
- const delta = args[2];
64
- if (!delta) {
65
- throw new Error("apply-slice-delta requires <slice-delta.json>");
66
- }
67
- await applySliceDelta(workdir, path.resolve(process.cwd(), delta));
68
- const result = await deriveSuperpowersArtifacts(workdir);
69
- console.log(`applied ${options.label} slice delta and derived files=${result.files.length}`);
70
- return;
71
- }
72
- if (subcommand === "derive") {
73
- const result = await deriveSuperpowersArtifacts(workdir);
74
- console.log(`derived ${options.label} artifacts files=${result.files.length}`);
75
- return;
76
- }
77
- if (subcommand === "slice-gate") {
78
- const sliceId = optionValue(args, "--slice") ?? "";
79
- const result = await runSliceGate(workdir, sliceId);
80
- console.log(result.passed ? `slice gate passed ${sliceId}` : `slice gate blocked ${result.messages.join("; ")}`);
81
- if (!result.passed) {
82
- process.exitCode = 1;
83
- }
84
- return;
85
- }
86
- if (subcommand === "epoch-gate") {
87
- const epochId = optionValue(args, "--epoch") ?? "";
88
- const result = await runEpochGate(workdir, epochId);
89
- console.log(result.passed ? `epoch gate passed ${epochId}` : `epoch gate blocked ${result.messages.join("; ")}`);
90
- return;
91
- }
92
- if (subcommand === "final-gate") {
93
- const result = await runFinalGate(workdir);
94
- console.log(`final gate product_goal_complete=${result.product_goal_complete}`);
95
- console.log(`acceptance_target_status=${result.acceptance_target_status}`);
96
- console.log(`completion_output_status=${result.completion_output_status}`);
97
- console.log(`final_answer_allowed=${result.final_answer_allowed}`);
98
- console.log(`required_user_visible_status=${result.required_user_visible_status}`);
99
- console.log(`exit_code=${result.exit_code}`);
100
- console.log(`audit_task_complete=${result.audit_task_complete}`);
101
- if (result.blocker_triage) {
102
- console.log(`blocker_triage_category=${result.blocker_triage.category}`);
103
- console.log(`blocker_triage_self_recoverable=${result.blocker_triage.self_recoverable}`);
104
- console.log(`blocker_triage_recovery_attempted=${result.blocker_triage.recovery_attempted}`);
105
- console.log(`blocker_triage_next_action=${result.blocker_triage.next_action}`);
106
- }
107
- if (result.blocked_reasons.length > 0) {
108
- console.log(`blocked_reasons=${result.blocked_reasons.join("; ")}`);
109
- }
110
- if (result.rejection_reasons.length > 0) {
111
- console.log(`rejection_reasons=${result.rejection_reasons.join("; ")}`);
112
- }
113
- if (!result.final_answer_allowed) {
114
- process.exitCode = result.exit_code;
115
- for (const error of result.errors) {
116
- console.error(`error: ${error}`);
117
- }
118
- }
119
- return;
120
- }
121
- if (subcommand === "next-slices") {
122
- const limit = Number.parseInt(optionValue(args, "--limit") ?? "5", 10);
123
- const slices = await nextSuperpowersSlices(workdir, Number.isFinite(limit) ? limit : 5);
124
- console.log(`Next ${Math.min(Number.isFinite(limit) ? limit : 5, 5)} high-value clusters:`);
125
- console.log(slices.join("\n"));
126
- return;
127
- }
128
- if (subcommand === "render-goal") {
129
- const result = await renderCompositeLongTaskGoal(workdir);
130
- console.log(`rendered ${options.label} goal artifacts: ${path.basename(result.goalObjectivePath)} ${path.basename(result.protocolPath)} ${path.basename(result.executionBindingPath)} length=${result.goalObjectiveLength}`);
131
- return;
132
- }
133
- help(options.commandName, options.showHelp);
134
- }
135
- function help(commandName, showRenderGoal) {
136
- const renderGoal = showRenderGoal ? "\n render-goal <workdir> Render workflow-protocol.md, execution-binding.md and goal-objective.txt" : "";
137
- console.log(`${commandName} commands:
138
- init <workdir> Initialize task-state.json and events.ndjson
139
- compile <workdir> [--mode product_task|harness_task]
140
- Compile sources into task graph
141
- start-attempt <workdir> [--mode product_task|harness_task]
142
- Start a fresh current attempt
143
- run-assertion <workdir> --ac <id> --proof-layer <layer> -- <command>
144
- Run and record an assertion command
145
- record-evidence <workdir> --from <artifact> --command-run-id <id>
146
- Register current-attempt EvidenceRecordV2
147
- apply-slice-delta <workdir> <delta> Apply structured slice delta, evidence and derived views
148
- derive <workdir> Generate derived/** views
149
- slice-gate <workdir> --slice <id> Validate one slice has real progress
150
- epoch-gate <workdir> --epoch <id> Refresh shared epoch evidence views
151
- final-gate <workdir> Compute product_goal_complete and completion_output_status
152
- next-slices <workdir> --limit 5 Recommend next proof clusters${renderGoal}`);
153
- }
154
- function optionValue(args, name) {
155
- const index = args.indexOf(name);
156
- return index >= 0 ? args[index + 1] : undefined;
157
- }
158
- function attemptMode(args) {
159
- const value = optionValue(args, "--mode");
160
- if (value === "harness_task") {
161
- return "harness_task";
162
- }
163
- return "product_task";
1
+ export function compositeLongTask(_args) {
2
+ console.log(JSON.stringify({
3
+ status: "retired",
4
+ command: "composite-long-task",
5
+ next_command: "ty-context long-task",
6
+ historical_state_executed: false,
7
+ }));
164
8
  }
@@ -0,0 +1 @@
1
+ export declare function deliverySet(_args: string[]): void;
@@ -0,0 +1,8 @@
1
+ const TOMBSTONE = {
2
+ status: "retired",
3
+ reason: "Delivery Set orchestration is outside the minimal Single-Goal core.",
4
+ replacement: "Use one complete Delivery Contract with semantic Outcomes and one Final Gate.",
5
+ };
6
+ export function deliverySet(_args) {
7
+ console.log(JSON.stringify(TOMBSTONE));
8
+ }
@@ -0,0 +1 @@
1
+ export declare function disable(args: string[]): Promise<void>;
@@ -0,0 +1,15 @@
1
+ import { disableHarnessProfile } from "../lib/profiles.js";
2
+ import { runSync } from "../lib/sync-engine.js";
3
+ export async function disable(args) {
4
+ const profile = args[0];
5
+ if (profile !== "long-task" || args.length !== 1) {
6
+ throw new Error("usage: ty-context disable long-task");
7
+ }
8
+ const root = process.cwd();
9
+ const result = await disableHarnessProfile(root, profile);
10
+ const sync = await runSync(root);
11
+ console.log(`${result.changed ? "disabled" : "kept disabled"} profile ${profile}`);
12
+ console.log(`sync changed=${sync.changed.length} skipped=${sync.skipped.length} blocked=${sync.blocked.length}`);
13
+ if (sync.blocked.length)
14
+ throw new Error(sync.blocked.join("\n"));
15
+ }
@@ -0,0 +1 @@
1
+ export declare function enable(args: string[]): Promise<void>;
@@ -0,0 +1,14 @@
1
+ import { enableHarnessProfile } from "../lib/profiles.js";
2
+ import { runSync } from "../lib/sync-engine.js";
3
+ export async function enable(args) {
4
+ const profile = args[0];
5
+ if (!profile || args.length !== 1)
6
+ throw new Error("usage: ty-context enable long-task");
7
+ const root = process.cwd();
8
+ const result = await enableHarnessProfile(root, profile);
9
+ const sync = await runSync(root);
10
+ console.log(`${result.changed ? "enabled" : "kept enabled"} profile ${profile}`);
11
+ console.log(`sync changed=${sync.changed.length} skipped=${sync.skipped.length} blocked=${sync.blocked.length}`);
12
+ if (sync.blocked.length)
13
+ throw new Error(sync.blocked.join("\n"));
14
+ }
@@ -7,7 +7,7 @@ export function parseArgs(args) {
7
7
  includeContext: [],
8
8
  includeCode: [],
9
9
  redactionStrict: false,
10
- help: false
10
+ help: false,
11
11
  };
12
12
  for (let index = 0; index < args.length; index += 1) {
13
13
  const arg = args[index];
@@ -97,7 +97,10 @@ Secret redaction is always enabled; --redaction-strict fails if redaction was re
97
97
  The artifact must stay under tmp/ty-context/context-exports/** and must not be referenced from project_context/context.toml.`;
98
98
  }
99
99
  function validateParsedArgs(parsed) {
100
- const modeCount = Number(parsed.full) + Number(parsed.code) + Number(parsed.all) + Number(parsed.sourceMode !== undefined);
100
+ const modeCount = Number(parsed.full) +
101
+ Number(parsed.code) +
102
+ Number(parsed.all) +
103
+ Number(parsed.sourceMode !== undefined);
101
104
  if (modeCount > 1) {
102
105
  throw new Error("export-context accepts exactly one mode: --full, --code, --all, --code-index, --source-pack, --code-bundles or --task-context");
103
106
  }
@@ -126,13 +129,19 @@ function inlineValue(arg, flag, message) {
126
129
  return value;
127
130
  }
128
131
  function parseBundleStrategy(value) {
129
- if (value === "auto" || value === "area" || value === "topdir" || value === "config")
132
+ if (value === "auto" ||
133
+ value === "area" ||
134
+ value === "topdir" ||
135
+ value === "config")
130
136
  return value;
131
137
  throw new Error("export-context --bundle-strategy must be one of auto, area, topdir or config");
132
138
  }
133
139
  function parseInteger(value, flag, allowZero) {
134
140
  const parsed = Number.parseInt(value, 10);
135
- if (!Number.isInteger(parsed) || String(parsed) !== value.trim() || parsed < 0 || (!allowZero && parsed === 0)) {
141
+ if (!Number.isInteger(parsed) ||
142
+ String(parsed) !== value.trim() ||
143
+ parsed < 0 ||
144
+ (!allowZero && parsed === 0)) {
136
145
  throw new Error(`export-context ${flag} requires ${allowZero ? "a non-negative" : "a positive"} integer`);
137
146
  }
138
147
  return parsed;
@@ -11,7 +11,8 @@ export async function exportContext(args) {
11
11
  process.exitCode = 1;
12
12
  return;
13
13
  }
14
- if (parsed.help || (!parsed.full && !parsed.code && !parsed.all && !parsed.sourceMode)) {
14
+ if (parsed.help ||
15
+ (!parsed.full && !parsed.code && !parsed.all && !parsed.sourceMode)) {
15
16
  console.log(helpText());
16
17
  if (!parsed.help) {
17
18
  process.exitCode = 1;
@@ -32,7 +33,7 @@ export async function exportContext(args) {
32
33
  maxBundleCharacters: parsed.maxBundleCharacters,
33
34
  redactionStrict: parsed.redactionStrict,
34
35
  prune: parsed.prune,
35
- taskName: parsed.taskName
36
+ taskName: parsed.taskName,
36
37
  }), parsed.check);
37
38
  return;
38
39
  }
@@ -44,9 +45,11 @@ export async function exportContext(args) {
44
45
  full: parsed.full,
45
46
  code: parsed.code,
46
47
  check: parsed.check,
47
- output: parsed.output
48
+ output: parsed.output,
48
49
  });
49
- console.log(parsed.check ? "export-context check OK" : "export-context wrote artifact");
50
+ console.log(parsed.check
51
+ ? "export-context check OK"
52
+ : "export-context wrote artifact");
50
53
  console.log(`mode: ${report.mode}`);
51
54
  console.log(`output: ${report.outputRelativePath}`);
52
55
  if (report.mode === "code") {
@@ -71,8 +74,16 @@ export async function exportContext(args) {
71
74
  }
72
75
  async function runLegacyAll(check) {
73
76
  const now = new Date();
74
- const fullReport = await runExportContext(process.cwd(), { full: true, check, now });
75
- const codeReport = await runExportContext(process.cwd(), { code: true, check, now });
77
+ const fullReport = await runExportContext(process.cwd(), {
78
+ full: true,
79
+ check,
80
+ now,
81
+ });
82
+ const codeReport = await runExportContext(process.cwd(), {
83
+ code: true,
84
+ check,
85
+ now,
86
+ });
76
87
  console.log(check ? "export-context check OK" : "export-context wrote artifacts");
77
88
  console.log("mode: all");
78
89
  console.log("outputs:");
@@ -85,7 +96,7 @@ async function runLegacyAll(check) {
85
96
  console.log("warnings:");
86
97
  printWarnings([
87
98
  ...fullReport.warnings.map((warning) => `full: ${warning}`),
88
- ...codeReport.warnings.map((warning) => `code: ${warning}`)
99
+ ...codeReport.warnings.map((warning) => `code: ${warning}`),
89
100
  ]);
90
101
  }
91
102
  function printSourcePackReport(report, check) {
@@ -1,16 +1,23 @@
1
1
  import { checkModularity } from "./check-modularity.js";
2
2
  import { compositeLongTask } from "./composite-long-task.js";
3
+ import { compositeCampaign } from "./composite-campaign.js";
4
+ import { longTask } from "./long-task.js";
5
+ import { deliverySet } from "./delivery-set.js";
3
6
  import { doctor } from "./doctor.js";
4
7
  import { exportContext } from "./export-context.js";
8
+ import { enable } from "./enable.js";
9
+ import { disable } from "./disable.js";
5
10
  import { init } from "./init.js";
6
11
  import { packageSource } from "./package-source.js";
7
- import { superpowers } from "./superpowers.js";
8
12
  import { sync } from "./sync.js";
9
13
  import { upgrade } from "./upgrade.js";
10
14
  import { validate } from "./validate.js";
15
+ import { assertHarnessProfileEnabled } from "../lib/profiles.js";
11
16
  export const commands = {
12
17
  help,
13
18
  init,
19
+ enable,
20
+ disable,
14
21
  sync,
15
22
  upgrade,
16
23
  doctor,
@@ -20,37 +27,42 @@ export const commands = {
20
27
  "validate-context": (args) => validate(["validate-context", ...args]),
21
28
  "validate-code-modularity": (args) => validate(["validate-code-modularity", ...args]),
22
29
  "validate-harness": (args) => validate(["validate-harness", ...args]),
23
- "validate-plan-contract": (args) => validate(["validate-plan-contract", ...args]),
24
- "validate-plan-acceptance": (args) => validate(["validate-plan-acceptance", ...args]),
25
- "validate-superpowers-state": (args) => validate(["validate-superpowers-state", ...args]),
30
+ "long-task": (args) => withLongTaskProfile(args, longTask),
31
+ "delivery-set": deliverySet,
26
32
  "composite-long-task": compositeLongTask,
27
- superpowers,
28
- package: packageSource
33
+ "composite-campaign": compositeCampaign,
34
+ package: packageSource,
29
35
  };
30
36
  export function help() {
31
- console.log(`ty-context commands:
32
- init [--adopt] [--harness-folder <path>]
33
- Initialize/adopt a project; without --harness-folder, choose target agent first
34
- sync Refresh managed assets; does not run migrations
35
- upgrade [--check] [--json]
36
- Run safe migrations, sync managed assets and doctor
37
- doctor Diagnose project configuration and drift
38
- check-modularity --touched|--file <path>|--base <ref> [--limit 300] [--fail-on-warning]
39
- Warn when selected handwritten source files exceed a line-count limit
40
- export-context --full|--code|--all|--source-pack|--code-index|--task-context
41
- Export temporary Context, code snapshot or bounded Source Pack artifacts
42
- validate <gate> Run a Harness validation gate
43
- validate-context Validate Minimal Context fact-source recoverability
44
- validate-code-modularity
45
- Enforce touched handwritten source file modularity
46
- validate-harness Run validate-context and validate-code-modularity
47
- validate-plan-contract <plan.md|dir>
48
- Validate workflow-contract plan surface consistency
49
- validate-plan-acceptance <dir>
50
- Validate plan-conformance matrix and final verdict consistency
51
- validate-superpowers-state <dir>
52
- Validate canonical Superpowers-backed task-state.json
53
- composite-long-task <subcommand>
54
- Manage explicit composite long-task workflow workdirs
37
+ console.log(`ty-context commands:
38
+ init [--adopt] [--harness-folder <path>]
39
+ Initialize/adopt a project; without --harness-folder, choose target agent first
40
+ enable long-task Install Source Plan/Long-Task Skills, Stop Hook and templates
41
+ disable long-task Remove only package-owned long-task profile assets
42
+ sync Refresh managed assets; does not run migrations
43
+ upgrade [--check] [--json]
44
+ Run safe migrations, sync managed assets and doctor
45
+ doctor Diagnose project configuration and drift
46
+ check-modularity --touched|--file <path>|--base <ref> [--limit 300] [--fail-on-warning]
47
+ Warn when selected handwritten source files exceed a line-count limit
48
+ export-context --full|--code|--all|--source-pack|--code-index|--task-context
49
+ Export temporary Context, code snapshot or bounded Source Pack artifacts
50
+ validate <gate> Run a Harness validation gate
51
+ validate-context Validate Minimal Context fact-source recoverability
52
+ validate-code-modularity
53
+ Enforce touched handwritten source file modularity
54
+ validate-harness Run validate-context and validate-code-modularity
55
+ long-task <subcommand>
56
+ Manage one Canonical Delivery Contract in the current workspace
57
+ delivery-set <subcommand>
58
+ Retired; use one complete Contract with semantic Outcomes
59
+ composite-long-task Retired command; use ty-context long-task
60
+ composite-campaign Retired command; use ty-context long-task
55
61
  package <subcommand> Maintain package canonical source`);
56
62
  }
63
+ async function withLongTaskProfile(args, handler) {
64
+ const subcommand = args[0] ?? "help";
65
+ if (subcommand !== "help")
66
+ await assertHarnessProfileEnabled(process.cwd(), "long-task");
67
+ await handler(args);
68
+ }
@@ -1,7 +1,7 @@
1
1
  import { stdin as input, stdout as output } from "node:process";
2
2
  import * as readline from "node:readline/promises";
3
3
  import { runInit } from "../lib/init.js";
4
- import { normalizeHarnessFolderName, readHarnessRootConfig } from "../lib/harness-root.js";
4
+ import { normalizeHarnessFolderName, readHarnessRootConfig, } from "../lib/harness-root.js";
5
5
  import { writePackageHarnessRoot } from "../lib/package-json-config.js";
6
6
  import { DEFAULT_HARNESS_ROOT } from "../lib/paths.js";
7
7
  const AGENT_HARNESS_OPTIONS = [
@@ -11,7 +11,7 @@ const AGENT_HARNESS_OPTIONS = [
11
11
  { key: "cline", label: "Cline", harnessFolderName: ".cline" },
12
12
  { key: "roo", label: "Roo Code", harnessFolderName: ".roo" },
13
13
  { key: "gemini", label: "Gemini CLI", harnessFolderName: ".gemini" },
14
- { key: "other", label: "Other" }
14
+ { key: "other", label: "Other" },
15
15
  ];
16
16
  export async function init(args) {
17
17
  const adopt = args.includes("--adopt");
@@ -28,7 +28,8 @@ export async function init(args) {
28
28
  }
29
29
  }
30
30
  export async function resolveInitHarnessRoot(projectRoot, args) {
31
- const argRoot = valueForArg(args, "--harness-folder") ?? valueForArg(args, "--harnessFolderName");
31
+ const argRoot = valueForArg(args, "--harness-folder") ??
32
+ valueForArg(args, "--harnessFolderName");
32
33
  if (argRoot) {
33
34
  return normalizeHarnessFolderName(argRoot);
34
35
  }
@@ -68,7 +69,9 @@ async function questionUntilValid(rl, query) {
68
69
  function formatAgentChoices() {
69
70
  const lines = ["Choose target agent:"];
70
71
  AGENT_HARNESS_OPTIONS.forEach((option, index) => {
71
- const folder = option.harnessFolderName ? ` -> ${option.harnessFolderName}` : "";
72
+ const folder = option.harnessFolderName
73
+ ? ` -> ${option.harnessFolderName}`
74
+ : "";
72
75
  lines.push(`${index + 1}) ${option.label}${folder}`);
73
76
  });
74
77
  return lines.join("\n");
@@ -78,7 +81,8 @@ export function resolveAgentHarnessFolderName(agentAnswer, customFolderAnswer =
78
81
  if (!option) {
79
82
  throw new Error("Unknown agent choice");
80
83
  }
81
- return normalizeHarnessFolderName(option.harnessFolderName ?? (customFolderAnswer.trim() || DEFAULT_HARNESS_ROOT));
84
+ return normalizeHarnessFolderName(option.harnessFolderName ??
85
+ (customFolderAnswer.trim() || DEFAULT_HARNESS_ROOT));
82
86
  }
83
87
  function agentOptionForAnswer(answer) {
84
88
  const normalized = answer.trim().toLowerCase();
@@ -91,7 +95,9 @@ function agentOptionForAnswer(answer) {
91
95
  }
92
96
  return AGENT_HARNESS_OPTIONS.find((option) => {
93
97
  const label = option.label.toLowerCase();
94
- return option.key === normalized || label === normalized || label.replace(/\s+/g, "-") === normalized;
98
+ return (option.key === normalized ||
99
+ label === normalized ||
100
+ label.replace(/\s+/g, "-") === normalized);
95
101
  });
96
102
  }
97
103
  function valueForArg(args, name) {
@@ -0,0 +1,3 @@
1
+ export declare function initializeLongTask(workdir: string): Promise<void>;
2
+ export declare function preflightLongTask(workdir: string): Promise<void>;
3
+ export declare function compactLongTaskTemplate(): string;
@@ -0,0 +1,92 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { preflightDeliveryContract } from "../lib/long-task-authoring-preflight.js";
4
+ export async function initializeLongTask(workdir) {
5
+ await mkdir(workdir, { recursive: true });
6
+ try {
7
+ await writeFile(path.join(workdir, "delivery-contract.yaml"), template(), {
8
+ flag: "wx",
9
+ });
10
+ }
11
+ catch (error) {
12
+ if (error.code !== "EEXIST")
13
+ throw error;
14
+ }
15
+ }
16
+ export async function preflightLongTask(workdir) {
17
+ const result = await preflightDeliveryContract(workdir, process.cwd());
18
+ console.log(JSON.stringify(result, null, 2));
19
+ if (result.status !== "ready")
20
+ process.exitCode = 1;
21
+ }
22
+ export function compactLongTaskTemplate() {
23
+ return template();
24
+ }
25
+ function template() {
26
+ return `schema_version: long-task-delivery-v2
27
+ task:
28
+ id: replace-me
29
+ title: Replace me
30
+ goal: Describe the complete observable delivery goal.
31
+ source_paths: [plans/replace-me.md]
32
+ context_refs: [project_context/areas/replace-me.md]
33
+ source_claims:
34
+ - key: replace-requirement
35
+ source_ref: plans/replace-me.md#replace-requirement
36
+ statement: Preserve one atomic source requirement.
37
+ disposition:
38
+ type: claim
39
+ refs: [replace-outcome.requirement.replace-requirement]
40
+ risk:
41
+ facts: {}
42
+ global: {}
43
+ outcomes:
44
+ - key: replace-outcome
45
+ title: Replace outcome
46
+ product:
47
+ observable_result: Describe what a user or system can observe.
48
+ owner:
49
+ label: replace-owner
50
+ context_refs: [project_context/areas/replace-me.md]
51
+ path_globs: ["src/**", "tests/**"]
52
+ requirements:
53
+ - key: replace-requirement
54
+ statement: Preserve one atomic source requirement.
55
+ required_proof_surfaces: [runtime_behavior]
56
+ technical:
57
+ expected_change_paths: ["src/**"]
58
+ bindings:
59
+ - key: replace-carrier
60
+ kind: file
61
+ target: src/replace-me.ts
62
+ carrier_paths: [src/replace-me.ts]
63
+ existence: planned
64
+ acceptance:
65
+ checks:
66
+ - key: replace-check
67
+ proof_surface: runtime_behavior
68
+ runner:
69
+ type: node_oracle
70
+ target: tests/replace-oracle.mjs
71
+ effect: read_only
72
+ verification_inputs: ["tests/replace-oracle.mjs"]
73
+ input_paths: [src/replace-me.ts]
74
+ expected_output_paths: [src/replace-me.ts]
75
+ positive_assertions:
76
+ - key: replace-success
77
+ criterion: The declared outcome and requirement are observable.
78
+ claims: [result, requirement.replace-requirement]
79
+ observation: result
80
+ operator: equals
81
+ expected: true
82
+ counterfactual_controls:
83
+ - key: remove-replace-carrier
84
+ binding_key: replace-carrier
85
+ claims: [result, requirement.replace-requirement]
86
+ check_key: replace-check
87
+ mutation:
88
+ type: remove_paths
89
+ paths: [src/replace-me.ts]
90
+ expected_assertion_failures: [replace-success]
91
+ `;
92
+ }
@@ -0,0 +1 @@
1
+ export declare function explainLongTask(workdir: string): Promise<void>;
@@ -0,0 +1,52 @@
1
+ import { compileProductClaimCoverage } from "../lib/long-task-claims.js";
2
+ import { sourceCoverage } from "../lib/long-task-authoring-preflight-diagnostics.js";
3
+ import { parseDeliveryContractBundle } from "../lib/long-task-delivery-parser.js";
4
+ import { explainSourceLinks } from "../lib/long-task-explain-source-links.js";
5
+ import { classifyLongTaskRisk } from "../lib/long-task-risk.js";
6
+ import { compileSourceInventory } from "../lib/long-task-source-inventory.js";
7
+ import { validateSourceContinuity } from "../lib/long-task-source-continuity.js";
8
+ import { validateSourceTargetContinuity } from "../lib/long-task-source-target-continuity.js";
9
+ import { repositoryRoot } from "../lib/long-task-workspace.js";
10
+ export async function explainLongTask(workdir) {
11
+ const parsed = await parseDeliveryContractBundle(workdir);
12
+ const repository = await repositoryRoot(process.cwd());
13
+ const sourceInventory = await compileSourceInventory(repository, parsed.contract.task.source_paths);
14
+ validateSourceContinuity(parsed.contract, sourceInventory);
15
+ validateSourceTargetContinuity(parsed.contract, sourceInventory);
16
+ const coverage = compileProductClaimCoverage(parsed.contract);
17
+ const risk = classifyLongTaskRisk(parsed.contract);
18
+ const globalClaims = Object.entries(coverage.summary.claims_by_global).map(([claimKey, value]) => ({
19
+ claim: `GLOBAL.${claimKey}`,
20
+ covered: value.covered,
21
+ checks: value.proofs.map((proof) => proof.check_key),
22
+ assertions: value.proofs.map((proof) => proof.assertion_key),
23
+ polarity: value.proofs.map((proof) => proof.polarity),
24
+ proof_surfaces: value.proofs.map((proof) => proof.proof_surface),
25
+ strict_risk_obligations: [],
26
+ }));
27
+ const outcomeClaims = Object.entries(coverage.summary.claims_by_outcome).flatMap(([outcomeKey, rows]) => Object.entries(rows).map(([claimKey, value]) => ({
28
+ claim: `OUTCOME.${outcomeKey}.${claimKey}`,
29
+ covered: value.covered,
30
+ checks: value.proofs.map((proof) => proof.check_key),
31
+ assertions: value.proofs.map((proof) => proof.assertion_key),
32
+ polarity: value.proofs.map((proof) => proof.polarity),
33
+ proof_surfaces: value.proofs.map((proof) => proof.proof_surface),
34
+ strict_risk_obligations: risk.reasons_by_outcome[outcomeKey],
35
+ })));
36
+ console.log(JSON.stringify({
37
+ schema_version: "long-task-explain-v2",
38
+ claims: [...globalClaims, ...outcomeClaims],
39
+ coverage: coverage.summary,
40
+ source_coverage: sourceCoverage(parsed.contract),
41
+ source_items: sourceInventory.map((item) => {
42
+ const source = parsed.contract.source_claims.find((claim) => claim.key === item.key);
43
+ return {
44
+ ...item,
45
+ source_ref: source.source_ref,
46
+ statement: source.statement,
47
+ disposition: source.disposition,
48
+ links: explainSourceLinks(parsed.contract, coverage.summary, source),
49
+ };
50
+ }),
51
+ }, null, 2));
52
+ }
@@ -0,0 +1 @@
1
+ export declare function longTask(args: string[]): Promise<void>;