project-tiny-context-harness 0.8.17 → 0.11.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 (488) hide show
  1. package/README.md +93 -30
  2. package/assets/README.md +158 -44
  3. package/assets/README.zh-CN.md +88 -29
  4. package/assets/agents/AGENTS_CORE.md +2 -2
  5. package/assets/context_templates/context.toml +6 -1
  6. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_helpers.cs +301 -0
  7. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_run.cs +197 -0
  8. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_types.cs +215 -0
  9. package/assets/runtime/windows-job-supervisor/windows_job_process_supervisor.ps1 +117 -0
  10. package/assets/skills/design-resource-authoring/SKILL.md +6 -3
  11. package/assets/skills/design-resource-authoring/references/authority-delta-assessment.md +52 -0
  12. package/assets/skills/design-resource-authoring/references/downstream-handoff.md +5 -1
  13. package/assets/skills/design-system-authoring/SKILL.md +23 -17
  14. package/assets/skills/design-system-authoring/references/authority-adoption.md +19 -9
  15. package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +4 -0
  16. package/assets/skills/long-task-workflow/SKILL.md +6 -6
  17. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +10 -4
  18. package/assets/skills/long-task-workflow/references/contract-authoring.md +5 -5
  19. package/assets/skills/long-task-workflow/references/evidence-design.md +14 -3
  20. package/assets/skills/long-task-workflow/references/source-authoring.md +11 -8
  21. package/assets/tools/context_rules.json +53 -0
  22. package/assets/tools/validate_context.py +302 -77
  23. package/dist/cli.js +2 -1
  24. package/dist/commands/context-create.d.ts +1 -0
  25. package/dist/commands/context-create.js +90 -0
  26. package/dist/commands/context-inspect.d.ts +1 -0
  27. package/dist/commands/context-inspect.js +98 -0
  28. package/dist/commands/context-move.d.ts +1 -0
  29. package/dist/commands/context-move.js +78 -0
  30. package/dist/commands/context-register.d.ts +1 -0
  31. package/dist/commands/context-register.js +110 -0
  32. package/dist/commands/context-transaction.d.ts +1 -0
  33. package/dist/commands/context-transaction.js +84 -0
  34. package/dist/commands/context.d.ts +1 -0
  35. package/dist/commands/context.js +36 -0
  36. package/dist/commands/design-authority-delta.d.ts +1 -0
  37. package/dist/commands/design-authority-delta.js +53 -0
  38. package/dist/commands/design-authority.d.ts +1 -0
  39. package/dist/commands/design-authority.js +104 -0
  40. package/dist/commands/design-resource.js +8 -1
  41. package/dist/commands/doctor.d.ts +1 -1
  42. package/dist/commands/doctor.js +61 -3
  43. package/dist/commands/index.js +19 -2
  44. package/dist/commands/long-task-authoring.js +20 -2
  45. package/dist/commands/long-task-workdir.d.ts +2 -0
  46. package/dist/commands/long-task-workdir.js +23 -0
  47. package/dist/commands/long-task.js +75 -6
  48. package/dist/commands/route.d.ts +15 -0
  49. package/dist/commands/route.js +142 -0
  50. package/dist/index.d.ts +3 -13
  51. package/dist/index.js +3 -12
  52. package/dist/lib/cli-exit.d.ts +14 -0
  53. package/dist/lib/cli-exit.js +19 -0
  54. package/dist/lib/context-catalog/catalog-default-footprint.d.ts +3 -0
  55. package/dist/lib/context-catalog/catalog-default-footprint.js +53 -0
  56. package/dist/lib/context-catalog/catalog-diagnostics.d.ts +9 -0
  57. package/dist/lib/context-catalog/catalog-diagnostics.js +34 -0
  58. package/dist/lib/context-catalog/catalog-discovery.d.ts +7 -0
  59. package/dist/lib/context-catalog/catalog-discovery.js +81 -0
  60. package/dist/lib/context-catalog/catalog-load.d.ts +8 -0
  61. package/dist/lib/context-catalog/catalog-load.js +187 -0
  62. package/dist/lib/context-catalog/catalog-path-validation.d.ts +7 -0
  63. package/dist/lib/context-catalog/catalog-path-validation.js +62 -0
  64. package/dist/lib/context-catalog/catalog-paths.d.ts +11 -0
  65. package/dist/lib/context-catalog/catalog-paths.js +41 -0
  66. package/dist/lib/context-catalog/catalog-portable-contract.d.ts +15 -0
  67. package/dist/lib/context-catalog/catalog-portable-contract.js +68 -0
  68. package/dist/lib/context-catalog/catalog-staged-path-safety.d.ts +1 -0
  69. package/dist/lib/context-catalog/catalog-staged-path-safety.js +36 -0
  70. package/dist/lib/context-catalog/catalog-types.d.ts +40 -0
  71. package/dist/lib/context-catalog/catalog-types.js +1 -0
  72. package/dist/lib/context-catalog/catalog-validation.d.ts +9 -0
  73. package/dist/lib/context-catalog/catalog-validation.js +148 -0
  74. package/dist/lib/context-create/context-create-path.d.ts +2 -0
  75. package/dist/lib/context-create/context-create-path.js +30 -0
  76. package/dist/lib/context-create/context-create-template.d.ts +2 -0
  77. package/dist/lib/context-create/context-create-template.js +95 -0
  78. package/dist/lib/context-create/context-create-types.d.ts +28 -0
  79. package/dist/lib/context-create/context-create-types.js +1 -0
  80. package/dist/lib/context-create/context-create-write.d.ts +1 -0
  81. package/dist/lib/context-create/context-create-write.js +85 -0
  82. package/dist/lib/context-create/context-create.d.ts +2 -0
  83. package/dist/lib/context-create/context-create.js +84 -0
  84. package/dist/lib/context-default-footprint.d.ts +2 -3
  85. package/dist/lib/context-default-footprint.js +49 -57
  86. package/dist/lib/context-doctor/context-doctor-types.d.ts +16 -0
  87. package/dist/lib/context-doctor/context-doctor-types.js +15 -0
  88. package/dist/lib/context-doctor/context-doctor.d.ts +2 -0
  89. package/dist/lib/context-doctor/context-doctor.js +130 -0
  90. package/dist/lib/context-graph-snapshot.d.ts +5 -0
  91. package/dist/lib/context-graph-snapshot.js +46 -25
  92. package/dist/lib/context-inspect/context-inspect-projection.d.ts +9 -0
  93. package/dist/lib/context-inspect/context-inspect-projection.js +49 -0
  94. package/dist/lib/context-inspect/context-inspect-render.d.ts +2 -0
  95. package/dist/lib/context-inspect/context-inspect-render.js +29 -0
  96. package/dist/lib/context-inspect/context-inspect-types.d.ts +43 -0
  97. package/dist/lib/context-inspect/context-inspect-types.js +1 -0
  98. package/dist/lib/context-inspect/context-inspect.d.ts +2 -0
  99. package/dist/lib/context-inspect/context-inspect.js +104 -0
  100. package/dist/lib/context-manifest-schema.d.ts +1 -1
  101. package/dist/lib/context-manifest-schema.js +4 -20
  102. package/dist/lib/context-markdown/context-markdown-analysis.d.ts +15 -0
  103. package/dist/lib/context-markdown/context-markdown-analysis.js +245 -0
  104. package/dist/lib/context-markdown/context-markdown-extract.d.ts +7 -0
  105. package/dist/lib/context-markdown/context-markdown-extract.js +114 -0
  106. package/dist/lib/context-markdown/context-markdown-types.d.ts +57 -0
  107. package/dist/lib/context-markdown/context-markdown-types.js +1 -0
  108. package/dist/lib/context-move/context-move-input.d.ts +8 -0
  109. package/dist/lib/context-move/context-move-input.js +17 -0
  110. package/dist/lib/context-move/context-move-literal-scan.d.ts +20 -0
  111. package/dist/lib/context-move/context-move-literal-scan.js +213 -0
  112. package/dist/lib/context-move/context-move-live-validation.d.ts +3 -0
  113. package/dist/lib/context-move/context-move-live-validation.js +56 -0
  114. package/dist/lib/context-move/context-move-markdown-plan.d.ts +22 -0
  115. package/dist/lib/context-move/context-move-markdown-plan.js +39 -0
  116. package/dist/lib/context-move/context-move-projection.d.ts +3 -0
  117. package/dist/lib/context-move/context-move-projection.js +11 -0
  118. package/dist/lib/context-move/context-move-reference-validation.d.ts +11 -0
  119. package/dist/lib/context-move/context-move-reference-validation.js +64 -0
  120. package/dist/lib/context-move/context-move-render.d.ts +2 -0
  121. package/dist/lib/context-move/context-move-render.js +24 -0
  122. package/dist/lib/context-move/context-move-support.d.ts +10 -0
  123. package/dist/lib/context-move/context-move-support.js +88 -0
  124. package/dist/lib/context-move/context-move-transaction-plan.d.ts +24 -0
  125. package/dist/lib/context-move/context-move-transaction-plan.js +108 -0
  126. package/dist/lib/context-move/context-move-types.d.ts +74 -0
  127. package/dist/lib/context-move/context-move-types.js +1 -0
  128. package/dist/lib/context-move/context-move.d.ts +8 -0
  129. package/dist/lib/context-move/context-move.js +180 -0
  130. package/dist/lib/context-mutation/manifest-lossless-patch.d.ts +28 -0
  131. package/dist/lib/context-mutation/manifest-lossless-patch.js +208 -0
  132. package/dist/lib/context-mutation/markdown-link-patch.d.ts +34 -0
  133. package/dist/lib/context-mutation/markdown-link-patch.js +143 -0
  134. package/dist/lib/context-mutation/markdown-link-spans.d.ts +10 -0
  135. package/dist/lib/context-mutation/markdown-link-spans.js +179 -0
  136. package/dist/lib/context-mutation/mutation-cas.d.ts +13 -0
  137. package/dist/lib/context-mutation/mutation-cas.js +365 -0
  138. package/dist/lib/context-mutation/mutation-command-support.d.ts +12 -0
  139. package/dist/lib/context-mutation/mutation-command-support.js +57 -0
  140. package/dist/lib/context-mutation/mutation-commit.d.ts +12 -0
  141. package/dist/lib/context-mutation/mutation-commit.js +89 -0
  142. package/dist/lib/context-mutation/mutation-directories.d.ts +5 -0
  143. package/dist/lib/context-mutation/mutation-directories.js +56 -0
  144. package/dist/lib/context-mutation/mutation-file-state.d.ts +14 -0
  145. package/dist/lib/context-mutation/mutation-file-state.js +137 -0
  146. package/dist/lib/context-mutation/mutation-journal-file-validation.d.ts +1 -0
  147. package/dist/lib/context-mutation/mutation-journal-file-validation.js +106 -0
  148. package/dist/lib/context-mutation/mutation-journal-io.d.ts +5 -0
  149. package/dist/lib/context-mutation/mutation-journal-io.js +55 -0
  150. package/dist/lib/context-mutation/mutation-journal-storage.d.ts +18 -0
  151. package/dist/lib/context-mutation/mutation-journal-storage.js +283 -0
  152. package/dist/lib/context-mutation/mutation-journal-validation-support.d.ts +16 -0
  153. package/dist/lib/context-mutation/mutation-journal-validation-support.js +140 -0
  154. package/dist/lib/context-mutation/mutation-journal-validation.d.ts +3 -0
  155. package/dist/lib/context-mutation/mutation-journal-validation.js +177 -0
  156. package/dist/lib/context-mutation/mutation-journal.d.ts +8 -0
  157. package/dist/lib/context-mutation/mutation-journal.js +111 -0
  158. package/dist/lib/context-mutation/mutation-live-validation.d.ts +3 -0
  159. package/dist/lib/context-mutation/mutation-live-validation.js +51 -0
  160. package/dist/lib/context-mutation/mutation-long-task-guard.d.ts +6 -0
  161. package/dist/lib/context-mutation/mutation-long-task-guard.js +57 -0
  162. package/dist/lib/context-mutation/mutation-recovery.d.ts +4 -0
  163. package/dist/lib/context-mutation/mutation-recovery.js +189 -0
  164. package/dist/lib/context-mutation/mutation-staged-fs.d.ts +5 -0
  165. package/dist/lib/context-mutation/mutation-staged-fs.js +56 -0
  166. package/dist/lib/context-mutation/mutation-types.d.ts +103 -0
  167. package/dist/lib/context-mutation/mutation-types.js +1 -0
  168. package/dist/lib/context-register/context-register-input.d.ts +11 -0
  169. package/dist/lib/context-register/context-register-input.js +43 -0
  170. package/dist/lib/context-register/context-register-render.d.ts +2 -0
  171. package/dist/lib/context-register/context-register-render.js +21 -0
  172. package/dist/lib/context-register/context-register-support.d.ts +6 -0
  173. package/dist/lib/context-register/context-register-support.js +46 -0
  174. package/dist/lib/context-register/context-register-types.d.ts +46 -0
  175. package/dist/lib/context-register/context-register-types.js +1 -0
  176. package/dist/lib/context-register/context-register.d.ts +8 -0
  177. package/dist/lib/context-register/context-register.js +155 -0
  178. package/dist/lib/context-router/context-route-budget.d.ts +15 -0
  179. package/dist/lib/context-router/context-route-budget.js +14 -0
  180. package/dist/lib/context-router/context-route-candidates.d.ts +15 -0
  181. package/dist/lib/context-router/context-route-candidates.js +112 -0
  182. package/dist/lib/context-router/context-route-order.d.ts +6 -0
  183. package/dist/lib/context-router/context-route-order.js +53 -0
  184. package/dist/lib/context-router/context-route-paths.d.ts +16 -0
  185. package/dist/lib/context-router/context-route-paths.js +109 -0
  186. package/dist/lib/context-router/context-route-render.d.ts +2 -0
  187. package/dist/lib/context-router/context-route-render.js +32 -0
  188. package/dist/lib/context-router/context-route-scan.d.ts +18 -0
  189. package/dist/lib/context-router/context-route-scan.js +156 -0
  190. package/dist/lib/context-router/context-route-selection.d.ts +16 -0
  191. package/dist/lib/context-router/context-route-selection.js +72 -0
  192. package/dist/lib/context-router/context-route-terms.d.ts +13 -0
  193. package/dist/lib/context-router/context-route-terms.js +202 -0
  194. package/dist/lib/context-router/context-route-types.d.ts +101 -0
  195. package/dist/lib/context-router/context-route-types.js +1 -0
  196. package/dist/lib/context-router/context-route.d.ts +2 -0
  197. package/dist/lib/context-router/context-route.js +127 -0
  198. package/dist/lib/context-units-migration.d.ts +13 -0
  199. package/dist/lib/context-units-migration.js +217 -0
  200. package/dist/lib/design-authority-binding.d.ts +7 -0
  201. package/dist/lib/design-authority-binding.js +96 -0
  202. package/dist/lib/design-authority-closure.d.ts +3 -0
  203. package/dist/lib/design-authority-closure.js +201 -0
  204. package/dist/lib/design-authority-delta-codec-primitives.d.ts +10 -0
  205. package/dist/lib/design-authority-delta-codec-primitives.js +58 -0
  206. package/dist/lib/design-authority-delta-codec.d.ts +2 -0
  207. package/dist/lib/design-authority-delta-codec.js +193 -0
  208. package/dist/lib/design-authority-delta-types.d.ts +65 -0
  209. package/dist/lib/design-authority-delta-types.js +6 -0
  210. package/dist/lib/design-authority-delta-validation.d.ts +2 -0
  211. package/dist/lib/design-authority-delta-validation.js +16 -0
  212. package/dist/lib/design-authority-digest.d.ts +8 -0
  213. package/dist/lib/design-authority-digest.js +36 -0
  214. package/dist/lib/design-authority-files.d.ts +9 -0
  215. package/dist/lib/design-authority-files.js +62 -0
  216. package/dist/lib/design-authority-format.d.ts +2 -0
  217. package/dist/lib/design-authority-format.js +93 -0
  218. package/dist/lib/design-authority-links.d.ts +10 -0
  219. package/dist/lib/design-authority-links.js +137 -0
  220. package/dist/lib/design-authority-manifest.d.ts +4 -0
  221. package/dist/lib/design-authority-manifest.js +144 -0
  222. package/dist/lib/design-authority-tokens.d.ts +9 -0
  223. package/dist/lib/design-authority-tokens.js +45 -0
  224. package/dist/lib/design-authority-types.d.ts +80 -0
  225. package/dist/lib/design-authority-types.js +23 -0
  226. package/dist/lib/design-md-tool-adapter.d.ts +9 -0
  227. package/dist/lib/design-md-tool-adapter.js +152 -0
  228. package/dist/lib/design-md-tool-normalization.d.ts +7 -0
  229. package/dist/lib/design-md-tool-normalization.js +78 -0
  230. package/dist/lib/design-md-tool-types.d.ts +99 -0
  231. package/dist/lib/design-md-tool-types.js +8 -0
  232. package/dist/lib/design-resource-handoff-input-types.d.ts +1 -1
  233. package/dist/lib/design-resource-handoff-manifest-projection.js +3 -0
  234. package/dist/lib/design-resource-handoff-shape.js +14 -2
  235. package/dist/lib/design-resource-handoff-types.d.ts +3 -0
  236. package/dist/lib/design-resource-handoff-validation.js +16 -4
  237. package/dist/lib/design-resource-implementation-feasibility-validation-support.js +1 -1
  238. package/dist/lib/design-resource-recovery-current.js +22 -0
  239. package/dist/lib/design-resource-recovery-shape.js +64 -7
  240. package/dist/lib/design-resource-recovery-types.d.ts +4 -1
  241. package/dist/lib/design-resource-symbolic-fact-shape.js +7 -1
  242. package/dist/lib/design-resource-symbolic-fact-types.d.ts +3 -0
  243. package/dist/lib/design-resource-symbolic-fact-validation.js +15 -3
  244. package/dist/lib/doctor.d.ts +2 -1
  245. package/dist/lib/doctor.js +29 -1
  246. package/dist/lib/fs.js +1 -1
  247. package/dist/lib/long-task-acceptance-reachability-claims.d.ts +2 -0
  248. package/dist/lib/long-task-acceptance-reachability-claims.js +279 -0
  249. package/dist/lib/long-task-acceptance-reachability-design.d.ts +2 -0
  250. package/dist/lib/long-task-acceptance-reachability-design.js +96 -0
  251. package/dist/lib/long-task-acceptance-reachability-external.d.ts +9 -0
  252. package/dist/lib/long-task-acceptance-reachability-external.js +123 -0
  253. package/dist/lib/long-task-acceptance-reachability-helpers.d.ts +64 -0
  254. package/dist/lib/long-task-acceptance-reachability-helpers.js +473 -0
  255. package/dist/lib/long-task-acceptance-reachability-semantic.d.ts +2 -0
  256. package/dist/lib/long-task-acceptance-reachability-semantic.js +122 -0
  257. package/dist/lib/long-task-acceptance-reachability-types.d.ts +91 -0
  258. package/dist/lib/long-task-acceptance-reachability-types.js +1 -0
  259. package/dist/lib/long-task-acceptance-reachability.d.ts +4 -0
  260. package/dist/lib/long-task-acceptance-reachability.js +115 -0
  261. package/dist/lib/long-task-activation-validation.d.ts +6 -0
  262. package/dist/lib/long-task-activation-validation.js +72 -69
  263. package/dist/lib/long-task-active-authority-lock-context.d.ts +4 -0
  264. package/dist/lib/long-task-active-authority-lock-context.js +29 -0
  265. package/dist/lib/long-task-applicability-identity.d.ts +25 -0
  266. package/dist/lib/long-task-applicability-identity.js +60 -0
  267. package/dist/lib/long-task-authoring-preflight-diagnostics.js +8 -0
  268. package/dist/lib/long-task-authoring-preflight-types.d.ts +2 -0
  269. package/dist/lib/long-task-authoring-preflight-types.js +9 -0
  270. package/dist/lib/long-task-authoring-preflight.js +18 -2
  271. package/dist/lib/long-task-authority-material-diff.js +4 -0
  272. package/dist/lib/long-task-authority-materials.js +19 -0
  273. package/dist/lib/long-task-authority-policy.d.ts +3 -0
  274. package/dist/lib/long-task-authority-policy.js +3 -0
  275. package/dist/lib/long-task-authority-revision-details.js +2 -1
  276. package/dist/lib/long-task-authority-types.d.ts +2 -0
  277. package/dist/lib/long-task-authority.js +2 -0
  278. package/dist/lib/long-task-check-shape.js +6 -1
  279. package/dist/lib/long-task-claim-definitions.js +1 -3
  280. package/dist/lib/long-task-claim-semantic-proof-floor.d.ts +3 -0
  281. package/dist/lib/long-task-claim-semantic-proof-floor.js +78 -0
  282. package/dist/lib/long-task-claims.d.ts +0 -18
  283. package/dist/lib/long-task-claims.js +15 -14
  284. package/dist/lib/long-task-command-process.js +3 -0
  285. package/dist/lib/long-task-compact-authoring.js +3 -0
  286. package/dist/lib/long-task-compact-projections.js +10 -0
  287. package/dist/lib/long-task-complete-delivery-evidence-types.d.ts +38 -0
  288. package/dist/lib/long-task-complete-delivery-evidence-types.js +1 -0
  289. package/dist/lib/long-task-completion-types.d.ts +109 -0
  290. package/dist/lib/long-task-completion-types.js +1 -0
  291. package/dist/lib/long-task-conformance-policy.d.ts +2 -1
  292. package/dist/lib/long-task-conformance-policy.js +11 -4
  293. package/dist/lib/long-task-context-authority-topology.js +6 -4
  294. package/dist/lib/long-task-contract-types.d.ts +52 -1
  295. package/dist/lib/long-task-counterfactual-sandbox.d.ts +7 -1
  296. package/dist/lib/long-task-counterfactual-sandbox.js +86 -6
  297. package/dist/lib/long-task-delivery-compiler-preflight.d.ts +24 -0
  298. package/dist/lib/long-task-delivery-compiler-preflight.js +32 -0
  299. package/dist/lib/long-task-delivery-compiler.d.ts +1 -0
  300. package/dist/lib/long-task-delivery-compiler.js +59 -44
  301. package/dist/lib/long-task-delivery-parser.d.ts +3 -0
  302. package/dist/lib/long-task-delivery-parser.js +26 -8
  303. package/dist/lib/long-task-delivery-types.d.ts +2 -0
  304. package/dist/lib/long-task-delivery-types.js +2 -0
  305. package/dist/lib/long-task-delivery-validation.d.ts +6 -1
  306. package/dist/lib/long-task-delivery-validation.js +19 -4
  307. package/dist/lib/long-task-design-feasibility-binding.d.ts +1 -0
  308. package/dist/lib/long-task-design-feasibility-binding.js +3 -3
  309. package/dist/lib/long-task-design-feasibility-source-closure.js +11 -2
  310. package/dist/lib/long-task-design-obligation.d.ts +50 -0
  311. package/dist/lib/long-task-design-obligation.js +99 -0
  312. package/dist/lib/long-task-design-resource-handoff.d.ts +3 -1
  313. package/dist/lib/long-task-design-resource-handoff.js +36 -12
  314. package/dist/lib/long-task-design-resource-method-binding.js +12 -0
  315. package/dist/lib/long-task-effective-external-takeover.d.ts +15 -0
  316. package/dist/lib/long-task-effective-external-takeover.js +109 -0
  317. package/dist/lib/long-task-effective-external-ui-takeover.d.ts +5 -0
  318. package/dist/lib/long-task-effective-external-ui-takeover.js +117 -0
  319. package/dist/lib/long-task-evidence-capability-codec.js +91 -0
  320. package/dist/lib/long-task-evidence-capability-runtime.js +62 -14
  321. package/dist/lib/long-task-evidence-capability-types.d.ts +3 -2
  322. package/dist/lib/long-task-evidence-v2.d.ts +6 -1
  323. package/dist/lib/long-task-evidence-v2.js +253 -170
  324. package/dist/lib/long-task-execution-observation.d.ts +7 -0
  325. package/dist/lib/long-task-execution-observation.js +21 -4
  326. package/dist/lib/long-task-expected-authority.d.ts +4 -0
  327. package/dist/lib/long-task-expected-authority.js +126 -0
  328. package/dist/lib/long-task-external-confirmation-artifacts.d.ts +9 -0
  329. package/dist/lib/long-task-external-confirmation-artifacts.js +138 -0
  330. package/dist/lib/long-task-external-confirmation-attestation.d.ts +20 -0
  331. package/dist/lib/long-task-external-confirmation-attestation.js +115 -0
  332. package/dist/lib/long-task-external-confirmation-challenge.d.ts +23 -0
  333. package/dist/lib/long-task-external-confirmation-challenge.js +164 -0
  334. package/dist/lib/long-task-external-confirmation-context.d.ts +14 -0
  335. package/dist/lib/long-task-external-confirmation-context.js +53 -0
  336. package/dist/lib/long-task-external-confirmation-evaluation.d.ts +11 -0
  337. package/dist/lib/long-task-external-confirmation-evaluation.js +454 -0
  338. package/dist/lib/long-task-external-confirmation-expected.d.ts +8 -0
  339. package/dist/lib/long-task-external-confirmation-expected.js +200 -0
  340. package/dist/lib/long-task-external-confirmation-identity.d.ts +10 -0
  341. package/dist/lib/long-task-external-confirmation-identity.js +77 -0
  342. package/dist/lib/long-task-external-confirmation-plan.d.ts +25 -0
  343. package/dist/lib/long-task-external-confirmation-plan.js +148 -0
  344. package/dist/lib/long-task-external-confirmation-preparation.d.ts +4 -0
  345. package/dist/lib/long-task-external-confirmation-preparation.js +100 -0
  346. package/dist/lib/long-task-external-confirmation-shape.d.ts +8 -0
  347. package/dist/lib/long-task-external-confirmation-shape.js +387 -0
  348. package/dist/lib/long-task-external-confirmation-state.d.ts +10 -0
  349. package/dist/lib/long-task-external-confirmation-state.js +109 -0
  350. package/dist/lib/long-task-external-confirmation-types.d.ts +195 -0
  351. package/dist/lib/long-task-external-confirmation-types.js +1 -0
  352. package/dist/lib/long-task-final-integrity.d.ts +2 -0
  353. package/dist/lib/long-task-final-integrity.js +21 -10
  354. package/dist/lib/long-task-final-v2.d.ts +7 -2
  355. package/dist/lib/long-task-final-v2.js +179 -55
  356. package/dist/lib/long-task-finalization-identity.d.ts +27 -0
  357. package/dist/lib/long-task-finalization-identity.js +58 -0
  358. package/dist/lib/long-task-finding-context.d.ts +1 -1
  359. package/dist/lib/long-task-finding-context.js +139 -13
  360. package/dist/lib/long-task-freshness.d.ts +27 -0
  361. package/dist/lib/long-task-freshness.js +128 -5
  362. package/dist/lib/long-task-git.js +3 -3
  363. package/dist/lib/long-task-material-input-closure.d.ts +3 -0
  364. package/dist/lib/long-task-material-input-closure.js +92 -0
  365. package/dist/lib/long-task-obligation-authority-resolution.d.ts +12 -0
  366. package/dist/lib/long-task-obligation-authority-resolution.js +57 -0
  367. package/dist/lib/long-task-obligation-semantic-identity.d.ts +16 -0
  368. package/dist/lib/long-task-obligation-semantic-identity.js +116 -0
  369. package/dist/lib/long-task-observation-authority.d.ts +11 -0
  370. package/dist/lib/long-task-observation-authority.js +137 -6
  371. package/dist/lib/long-task-process-table.d.ts +2 -5
  372. package/dist/lib/long-task-process-table.js +21 -53
  373. package/dist/lib/long-task-process-tree.d.ts +0 -1
  374. package/dist/lib/long-task-process-tree.js +24 -54
  375. package/dist/lib/long-task-proof-adequacy.d.ts +12 -0
  376. package/dist/lib/long-task-proof-adequacy.js +57 -0
  377. package/dist/lib/long-task-proof-capability-floor.d.ts +6 -0
  378. package/dist/lib/long-task-proof-capability-floor.js +137 -0
  379. package/dist/lib/long-task-repair-frontier-checks.d.ts +8 -0
  380. package/dist/lib/long-task-repair-frontier-checks.js +93 -0
  381. package/dist/lib/long-task-repair-frontier-groups.d.ts +2 -0
  382. package/dist/lib/long-task-repair-frontier-groups.js +64 -0
  383. package/dist/lib/long-task-repair-frontier-utils.d.ts +6 -0
  384. package/dist/lib/long-task-repair-frontier-utils.js +27 -0
  385. package/dist/lib/long-task-repair-frontier.d.ts +14 -0
  386. package/dist/lib/long-task-repair-frontier.js +132 -0
  387. package/dist/lib/long-task-risk.d.ts +3 -2
  388. package/dist/lib/long-task-risk.js +73 -24
  389. package/dist/lib/long-task-root-shape.js +148 -8
  390. package/dist/lib/long-task-runner-freeze.d.ts +2 -1
  391. package/dist/lib/long-task-runner-freeze.js +23 -8
  392. package/dist/lib/long-task-runtime-types.d.ts +34 -40
  393. package/dist/lib/long-task-semantic-assurance-policy.js +2 -11
  394. package/dist/lib/long-task-semantic-contract-types.d.ts +2 -1
  395. package/dist/lib/long-task-semantic-drift-migration.js +48 -2
  396. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +20 -0
  397. package/dist/lib/long-task-semantic-fact-closure.d.ts +5 -1
  398. package/dist/lib/long-task-semantic-fact-closure.js +33 -5
  399. package/dist/lib/long-task-semantic-fact-contract-closure.js +176 -1
  400. package/dist/lib/long-task-semantic-fact-contract-proofs.js +18 -1
  401. package/dist/lib/long-task-semantic-fact-input-closure.d.ts +16 -2
  402. package/dist/lib/long-task-semantic-fact-input-closure.js +138 -15
  403. package/dist/lib/long-task-semantic-fact-provenance-closure.js +1 -1
  404. package/dist/lib/long-task-semantic-fact-shape.d.ts +2 -1
  405. package/dist/lib/long-task-semantic-fact-shape.js +35 -1
  406. package/dist/lib/long-task-semantic-proof-adequacy.d.ts +2 -0
  407. package/dist/lib/long-task-semantic-proof-adequacy.js +19 -0
  408. package/dist/lib/long-task-semantic-proof-profile.d.ts +5 -0
  409. package/dist/lib/long-task-semantic-proof-profile.js +187 -0
  410. package/dist/lib/long-task-shape-primitives.d.ts +1 -1
  411. package/dist/lib/long-task-shape-primitives.js +5 -0
  412. package/dist/lib/long-task-source-anchors.d.ts +10 -0
  413. package/dist/lib/long-task-source-anchors.js +102 -0
  414. package/dist/lib/long-task-source-authority-types.d.ts +46 -0
  415. package/dist/lib/long-task-source-claim-validation.js +36 -0
  416. package/dist/lib/long-task-source-conservation-facts.d.ts +8 -0
  417. package/dist/lib/long-task-source-conservation-facts.js +57 -0
  418. package/dist/lib/long-task-source-conservation-types.d.ts +34 -0
  419. package/dist/lib/long-task-source-conservation-types.js +1 -0
  420. package/dist/lib/long-task-source-conservation.d.ts +7 -0
  421. package/dist/lib/long-task-source-conservation.js +110 -0
  422. package/dist/lib/long-task-source-fragments.d.ts +6 -0
  423. package/dist/lib/long-task-source-fragments.js +219 -0
  424. package/dist/lib/long-task-source-projection-resolution.d.ts +5 -0
  425. package/dist/lib/long-task-source-projection-resolution.js +57 -0
  426. package/dist/lib/long-task-source-projection-validation.d.ts +17 -0
  427. package/dist/lib/long-task-source-projection-validation.js +154 -0
  428. package/dist/lib/long-task-source-shape.js +14 -6
  429. package/dist/lib/long-task-source-supersession.d.ts +5 -0
  430. package/dist/lib/long-task-source-supersession.js +138 -0
  431. package/dist/lib/long-task-stage-policy.d.ts +7 -2
  432. package/dist/lib/long-task-stage-policy.js +67 -23
  433. package/dist/lib/long-task-state.d.ts +18 -4
  434. package/dist/lib/long-task-state.js +319 -33
  435. package/dist/lib/long-task-static-observation-freeze.js +4 -3
  436. package/dist/lib/long-task-status-projection.d.ts +3 -1
  437. package/dist/lib/long-task-status-projection.js +44 -13
  438. package/dist/lib/long-task-status-v2.d.ts +10 -6
  439. package/dist/lib/long-task-status-v2.js +70 -58
  440. package/dist/lib/long-task-target-policy.d.ts +8 -3
  441. package/dist/lib/long-task-target-policy.js +40 -9
  442. package/dist/lib/long-task-terminal-finalization.d.ts +12 -0
  443. package/dist/lib/long-task-terminal-finalization.js +190 -0
  444. package/dist/lib/long-task-ui-design-policy.js +15 -4
  445. package/dist/lib/long-task-verifier-counterfactuals.d.ts +11 -0
  446. package/dist/lib/long-task-verifier-counterfactuals.js +96 -0
  447. package/dist/lib/long-task-verifier-execution.d.ts +9 -0
  448. package/dist/lib/long-task-verifier-execution.js +67 -0
  449. package/dist/lib/long-task-verifier-identity.js +16 -5
  450. package/dist/lib/long-task-verifier-v2.js +52 -65
  451. package/dist/lib/long-task-windows-job-supervisor-helper.d.ts +1 -0
  452. package/dist/lib/long-task-windows-job-supervisor-helper.js +104 -0
  453. package/dist/lib/long-task-windows-job-supervisor-protocol.d.ts +28 -0
  454. package/dist/lib/long-task-windows-job-supervisor-protocol.js +124 -0
  455. package/dist/lib/long-task-windows-job-supervisor-result.d.ts +11 -0
  456. package/dist/lib/long-task-windows-job-supervisor-result.js +152 -0
  457. package/dist/lib/long-task-windows-job-supervisor.d.ts +2 -0
  458. package/dist/lib/long-task-windows-job-supervisor.js +126 -0
  459. package/dist/lib/long-task-workspace-scope.d.ts +1 -0
  460. package/dist/lib/long-task-workspace-scope.js +4 -1
  461. package/dist/lib/long-task-workspace.d.ts +1 -0
  462. package/dist/lib/long-task-workspace.js +10 -0
  463. package/dist/lib/migrations.js +43 -2
  464. package/dist/lib/repository-path-safety.d.ts +1 -0
  465. package/dist/lib/repository-path-safety.js +3 -3
  466. package/dist/lib/semantic-fact-input-shape.d.ts +7 -2
  467. package/dist/lib/semantic-fact-input-shape.js +25 -1
  468. package/dist/lib/semantic-fact-inventory-types.d.ts +8 -2
  469. package/dist/lib/semantic-fact-policy-census.d.ts +1 -1
  470. package/dist/lib/semantic-fact-policy-census.js +5 -2
  471. package/dist/lib/semantic-fact-policy.d.ts +1 -1
  472. package/dist/lib/semantic-fact-policy.js +2 -2
  473. package/dist/lib/semantic-fact-proof-shape.d.ts +1 -1
  474. package/dist/lib/semantic-fact-property-shape.d.ts +1 -1
  475. package/dist/lib/validators.d.ts +3 -0
  476. package/dist/lib/validators.js +45 -157
  477. package/dist/public-api-core.d.ts +12 -0
  478. package/dist/public-api-core.js +12 -0
  479. package/dist/public-api-long-task.d.ts +10 -0
  480. package/dist/public-api-long-task.js +10 -0
  481. package/dist/public-types.d.ts +5 -1
  482. package/dist/schemas/design-authority-delta-assessment-v1.schema.json +191 -0
  483. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +166 -2
  484. package/dist/schemas/long-task-external-confirmation-record-v1.schema.json +155 -0
  485. package/dist/schemas/long-task-external-confirmation-record-v2.schema.json +209 -0
  486. package/migrations/README.md +99 -0
  487. package/package.json +7 -5
  488. package/source-mappings.yaml +18 -0
@@ -0,0 +1,127 @@
1
+ import { CLI_EXIT_CODES, CliCommandError } from "../cli-exit.js";
2
+ import { compareUtf8Paths } from "../context-catalog/catalog-paths.js";
3
+ import { loadContextCatalog } from "../context-catalog/catalog-load.js";
4
+ import { CONTEXT_ROUTE_BUDGETS, CONTEXT_ROUTE_SCHEMA_VERSION, } from "./context-route-budget.js";
5
+ import { defaultEntries, emptyResult } from "./context-route-candidates.js";
6
+ import { stableRouteBudgetExceeded } from "./context-route-order.js";
7
+ import { matchContextAreas, normalizeRepositoryInputs, resolveManualIncludes, } from "./context-route-paths.js";
8
+ import { scanContextCatalogFiles } from "./context-route-scan.js";
9
+ import { selectContextRouteCandidates } from "./context-route-selection.js";
10
+ import { buildContextRouteTerms } from "./context-route-terms.js";
11
+ export async function routeContext(input) {
12
+ const caseSensitive = input.case_sensitive ?? false;
13
+ const maxSearchResults = input.max_search_results ?? CONTEXT_ROUTE_BUDGETS.output_matches;
14
+ const inputExceeded = [];
15
+ const taskBytes = Buffer.byteLength(input.task, "utf8");
16
+ let task = input.task;
17
+ if (taskBytes > CONTEXT_ROUTE_BUDGETS.task_utf8_bytes) {
18
+ inputExceeded.push({
19
+ budget: "task_utf8_bytes",
20
+ limit: CONTEXT_ROUTE_BUDGETS.task_utf8_bytes,
21
+ observed: taskBytes,
22
+ });
23
+ task = utf8Prefix(input.task, CONTEXT_ROUTE_BUDGETS.task_utf8_bytes);
24
+ }
25
+ let catalog;
26
+ try {
27
+ catalog = await loadContextCatalog(input.project_root);
28
+ }
29
+ catch (error) {
30
+ throw new CliCommandError(CLI_EXIT_CODES.io, `unable to load Context Catalog: ${message(error)}`, { cause: error });
31
+ }
32
+ const catalogValid = !catalog.diagnostics.some((entry) => entry.severity === "error");
33
+ const defaultContext = defaultEntries(catalog);
34
+ if (!catalogValid) {
35
+ return emptyResult({
36
+ catalog,
37
+ caseSensitive,
38
+ defaultContext,
39
+ exceeded: inputExceeded,
40
+ });
41
+ }
42
+ const paths = normalizeRepositoryInputs(input.paths ?? [], "--path");
43
+ const triggers = [
44
+ ...new Set(catalog.registered_contexts.flatMap((entry) => (entry.context?.triggers ?? []).map((trigger) => trigger.normalize("NFC")))),
45
+ ].sort(compareUtf8Paths);
46
+ const termBuild = buildContextRouteTerms({
47
+ task,
48
+ explicit_terms: input.explicit_terms ?? [],
49
+ paths,
50
+ manifest_triggers: triggers,
51
+ case_sensitive: caseSensitive,
52
+ });
53
+ inputExceeded.push(...termBuild.exceeded);
54
+ const pathResult = matchContextAreas(catalog, paths);
55
+ let includes;
56
+ try {
57
+ includes = await resolveManualIncludes(catalog, input.includes ?? []);
58
+ }
59
+ catch (error) {
60
+ if (error instanceof CliCommandError)
61
+ throw error;
62
+ throw new CliCommandError(CLI_EXIT_CODES.io, `unable to resolve route includes: ${message(error)}`, { cause: error });
63
+ }
64
+ let scanned;
65
+ try {
66
+ scanned = await scanContextCatalogFiles({
67
+ files: catalog.context_files,
68
+ terms: termBuild.terms,
69
+ case_sensitive: caseSensitive,
70
+ max_search_results: maxSearchResults,
71
+ });
72
+ }
73
+ catch (error) {
74
+ throw new CliCommandError(CLI_EXIT_CODES.io, `unable to scan Context files: ${message(error)}`, { cause: error });
75
+ }
76
+ const selected = selectContextRouteCandidates({
77
+ catalog,
78
+ default_context: defaultContext,
79
+ path_matches: pathResult.matches,
80
+ literal_matches: scanned.matches_by_path,
81
+ includes,
82
+ task,
83
+ case_sensitive: caseSensitive,
84
+ });
85
+ const scanExceeded = [...inputExceeded, ...scanned.scan.exceeded];
86
+ const scan = {
87
+ ...scanned.scan,
88
+ budget_exceeded: scanExceeded.length > 0,
89
+ exceeded: stableRouteBudgetExceeded(scanExceeded),
90
+ };
91
+ return {
92
+ schema_version: CONTEXT_ROUTE_SCHEMA_VERSION,
93
+ complete: !scan.budget_exceeded,
94
+ catalog_valid: true,
95
+ experimental: true,
96
+ authority: false,
97
+ workflow_search_replaced: false,
98
+ matching: {
99
+ literal: true,
100
+ unicode_normalization: "NFC",
101
+ case_sensitive: caseSensitive,
102
+ },
103
+ scan,
104
+ output_truncated: scanned.output_truncated,
105
+ default_context: defaultContext,
106
+ candidates: selected.registered,
107
+ unregistered_matches: selected.unregistered,
108
+ ambiguous: pathResult.ambiguous,
109
+ unresolved: pathResult.unresolved,
110
+ diagnostics: catalog.diagnostics,
111
+ };
112
+ }
113
+ function utf8Prefix(value, maximumBytes) {
114
+ let bytes = 0;
115
+ let result = "";
116
+ for (const point of Array.from(value)) {
117
+ const size = Buffer.byteLength(point, "utf8");
118
+ if (bytes + size > maximumBytes)
119
+ break;
120
+ result += point;
121
+ bytes += size;
122
+ }
123
+ return result;
124
+ }
125
+ function message(error) {
126
+ return error instanceof Error ? error.message : String(error);
127
+ }
@@ -0,0 +1,13 @@
1
+ import type { Migration } from "./migrations.js";
2
+ type ConversionPlan = {
3
+ status: "absent";
4
+ } | {
5
+ status: "safe";
6
+ content: string;
7
+ } | {
8
+ status: "manual";
9
+ reason: string;
10
+ };
11
+ export declare const contextUnitsMigration: Migration;
12
+ export declare function planContextUnitsConversion(content: string): ConversionPlan;
13
+ export {};
@@ -0,0 +1,217 @@
1
+ import { parse } from "smol-toml";
2
+ import path from "node:path";
3
+ import { CONTEXT_MANIFEST_PATH } from "./context-manifest.js";
4
+ import { parseContextManifest } from "./context-manifest-schema.js";
5
+ import { loadContextCatalog } from "./context-catalog/catalog-load.js";
6
+ import { pathExists, readText, writeTextIfChanged } from "./fs.js";
7
+ const ID = "context-units-to-context";
8
+ const INTRODUCED_IN = "0.10.0";
9
+ const DESCRIPTION = "Convert provably simple legacy [[context_units]] tables to Schema v4 [[context]] tables without rewriting the Manifest.";
10
+ const SCOPE = "project_context/context.toml";
11
+ const CURRENT_FIELDS = new Set([
12
+ "path",
13
+ "role",
14
+ "read_when",
15
+ "read_policy",
16
+ "triggers",
17
+ "default_children",
18
+ ]);
19
+ const LEGACY_ONLY_FIELDS = new Set(["id", "area"]);
20
+ export const contextUnitsMigration = {
21
+ id: ID,
22
+ introducedIn: INTRODUCED_IN,
23
+ description: DESCRIPTION,
24
+ scope: SCOPE,
25
+ risk: "safe",
26
+ manualMessage: "Convert complex legacy Context tables manually; Tiny Context will not canonicalize or guess their fields.",
27
+ detect: async (projectRoot) => {
28
+ const manifestPath = path.join(projectRoot, CONTEXT_MANIFEST_PATH);
29
+ if (!(await pathExists(manifestPath)))
30
+ return [];
31
+ const plan = planContextUnitsConversion(await readText(manifestPath));
32
+ if (plan.status === "absent")
33
+ return [];
34
+ return [
35
+ planItem(plan.status === "safe" ? "safe_pending" : "manual_required", plan.status === "safe"
36
+ ? "Convert simple legacy Context tables with a bounded byte patch."
37
+ : plan.reason),
38
+ ];
39
+ },
40
+ apply: migrateContextUnits,
41
+ verify: verifyContextUnitsMigration,
42
+ };
43
+ export function planContextUnitsConversion(content) {
44
+ if (!/^[ \t]*\[\[[ \t]*context_units[ \t]*\]\]/mu.test(content))
45
+ return { status: "absent" };
46
+ let decoded;
47
+ try {
48
+ const value = parse(content);
49
+ if (!isRecord(value))
50
+ return {
51
+ status: "manual",
52
+ reason: "legacy Manifest root is not a TOML table",
53
+ };
54
+ decoded = value;
55
+ }
56
+ catch (error) {
57
+ return {
58
+ status: "manual",
59
+ reason: `legacy Manifest is not valid TOML: ${message(error)}`,
60
+ };
61
+ }
62
+ const units = decoded.context_units;
63
+ if (!Array.isArray(units) || units.some((entry) => !isRecord(entry)))
64
+ return {
65
+ status: "manual",
66
+ reason: "context_units must be an array of TOML tables",
67
+ };
68
+ const currentContexts = decoded.context;
69
+ if (currentContexts !== undefined &&
70
+ (!Array.isArray(currentContexts) ||
71
+ currentContexts.some((entry) => !isRecord(entry))))
72
+ return {
73
+ status: "manual",
74
+ reason: "current context tables are malformed",
75
+ };
76
+ const currentPaths = new Set((currentContexts ?? [])
77
+ .map((entry) => (typeof entry.path === "string" ? entry.path : null))
78
+ .filter((entry) => entry !== null));
79
+ const legacyPaths = new Set();
80
+ for (const unit of units) {
81
+ const unknown = Object.keys(unit).filter((key) => !CURRENT_FIELDS.has(key) && !LEGACY_ONLY_FIELDS.has(key));
82
+ if (unknown.length > 0)
83
+ return {
84
+ status: "manual",
85
+ reason: `legacy Context table has unsupported fields: ${unknown.join(", ")}`,
86
+ };
87
+ if (typeof unit.path !== "string" || typeof unit.role !== "string")
88
+ return {
89
+ status: "manual",
90
+ reason: "every legacy Context table requires string path and role fields",
91
+ };
92
+ if (legacyPaths.has(unit.path) || currentPaths.has(unit.path))
93
+ return {
94
+ status: "manual",
95
+ reason: `legacy Context path conflicts with another table: ${unit.path}`,
96
+ };
97
+ legacyPaths.add(unit.path);
98
+ }
99
+ const patched = patchSimpleLegacyTables(content);
100
+ if (patched.status === "manual")
101
+ return patched;
102
+ if (patched.status === "absent")
103
+ return {
104
+ status: "manual",
105
+ reason: "legacy Context tables disappeared during conversion planning",
106
+ };
107
+ const parsed = parseContextManifest(patched.content);
108
+ if (parsed.errors.length > 0)
109
+ return {
110
+ status: "manual",
111
+ reason: `converted Manifest is not valid Schema v4: ${parsed.errors[0]}`,
112
+ };
113
+ return patched;
114
+ }
115
+ async function migrateContextUnits(projectRoot, _root, report) {
116
+ const manifestPath = path.join(projectRoot, CONTEXT_MANIFEST_PATH);
117
+ const plan = planContextUnitsConversion(await readText(manifestPath));
118
+ if (plan.status === "absent") {
119
+ report.skipped.push(`${CONTEXT_MANIFEST_PATH}#context-units`);
120
+ return;
121
+ }
122
+ if (plan.status === "manual")
123
+ throw new Error(`${CONTEXT_MANIFEST_PATH} changed after upgrade planning or is not safely convertible: ${plan.reason}`);
124
+ if (await writeTextIfChanged(manifestPath, plan.content))
125
+ report.changed.push(`${CONTEXT_MANIFEST_PATH}#context-units-to-context`);
126
+ else
127
+ report.skipped.push(`${CONTEXT_MANIFEST_PATH}#context-units-to-context`);
128
+ }
129
+ async function verifyContextUnitsMigration(projectRoot) {
130
+ const manifestPath = path.join(projectRoot, CONTEXT_MANIFEST_PATH);
131
+ const content = await readText(manifestPath);
132
+ if (/^[ \t]*\[\[[ \t]*context_units[ \t]*\]\]/mu.test(content))
133
+ throw new Error("context-units-to-context migration verification failed");
134
+ const catalog = await loadContextCatalog(projectRoot);
135
+ const errors = catalog.diagnostics.filter((entry) => entry.severity === "error");
136
+ if (errors.length > 0)
137
+ throw new Error(`context-units-to-context produced an invalid Catalog: ${errors[0].message}`);
138
+ }
139
+ function patchSimpleLegacyTables(content) {
140
+ const eols = content.match(/\r\n|\r|\n/gu) ?? [];
141
+ if (new Set(eols).size > 1)
142
+ return {
143
+ status: "manual",
144
+ reason: "legacy Manifest has mixed line endings",
145
+ };
146
+ const eol = eols[0] ?? "\n";
147
+ const lines = content.split(eol);
148
+ let inLegacyTable = false;
149
+ let convertedTables = 0;
150
+ const output = [];
151
+ for (const line of lines) {
152
+ const table = /^[ \t]*\[\[[ \t]*([^\]]+?)[ \t]*\]\](?:[ \t]*#.*)?$/u.exec(line);
153
+ const otherTable = /^[ \t]*\[[^[]/u.test(line);
154
+ if (table) {
155
+ inLegacyTable = table[1].trim() === "context_units";
156
+ if (inLegacyTable) {
157
+ output.push(line.replace(/(\[\[[ \t]*)context_units([ \t]*\]\])/u, "$1context$2"));
158
+ convertedTables += 1;
159
+ }
160
+ else
161
+ output.push(line);
162
+ continue;
163
+ }
164
+ if (otherTable)
165
+ inLegacyTable = false;
166
+ if (!inLegacyTable || !line.trim() || line.trimStart().startsWith("#")) {
167
+ output.push(line);
168
+ continue;
169
+ }
170
+ const assignment = /^[ \t]*([A-Za-z][A-Za-z0-9_-]*)[ \t]*=(.*)$/u.exec(line);
171
+ if (!assignment)
172
+ return {
173
+ status: "manual",
174
+ reason: "legacy Context tables must use simple single-line field assignments",
175
+ };
176
+ const key = assignment[1];
177
+ if (!CURRENT_FIELDS.has(key) && !LEGACY_ONLY_FIELDS.has(key))
178
+ return {
179
+ status: "manual",
180
+ reason: `legacy Context table has unsupported source field: ${key}`,
181
+ };
182
+ try {
183
+ parse(line);
184
+ }
185
+ catch {
186
+ return {
187
+ status: "manual",
188
+ reason: `legacy Context field ${key} is not a complete single-line TOML value`,
189
+ };
190
+ }
191
+ if (!LEGACY_ONLY_FIELDS.has(key))
192
+ output.push(line);
193
+ }
194
+ if (convertedTables === 0)
195
+ return {
196
+ status: "manual",
197
+ reason: "no exact legacy table header was found",
198
+ };
199
+ return { status: "safe", content: output.join(eol) };
200
+ }
201
+ function planItem(status, reason) {
202
+ return {
203
+ id: ID,
204
+ introducedIn: INTRODUCED_IN,
205
+ description: DESCRIPTION,
206
+ scope: SCOPE,
207
+ status,
208
+ path: CONTEXT_MANIFEST_PATH,
209
+ message: reason,
210
+ };
211
+ }
212
+ function isRecord(value) {
213
+ return typeof value === "object" && value !== null && !Array.isArray(value);
214
+ }
215
+ function message(error) {
216
+ return error instanceof Error ? error.message : String(error);
217
+ }
@@ -0,0 +1,7 @@
1
+ import { type DesignAuthorityHandoffBinding, type DesignAuthorityHandoffResolution } from "./design-authority-types.js";
2
+ export declare function parseDesignAuthorityHandoffBinding(value: unknown, label: string): DesignAuthorityHandoffBinding;
3
+ export declare function resolveDesignAuthorityHandoffBinding(input: {
4
+ repository: string;
5
+ style_dependency: "style-bearing" | "non-fidelity" | "mixed";
6
+ binding?: DesignAuthorityHandoffBinding;
7
+ }): Promise<DesignAuthorityHandoffResolution>;
@@ -0,0 +1,96 @@
1
+ import { loadCurrentDesignAuthorityClosure, inspectDesignAuthorityClosure, } from "./design-authority-closure.js";
2
+ import { DESIGN_AUTHORITY_ENTRY_PATH, DESIGN_AUTHORITY_IDENTITY_FORMAT_VERSION, DESIGN_AUTHORITY_MANIFEST_PATH, isDesignAuthorityDigest, } from "./design-authority-types.js";
3
+ import { designResourceShapeFail } from "./design-resource-handoff-shape-primitives.js";
4
+ import { literal, object, string } from "./long-task-shape-primitives.js";
5
+ export function parseDesignAuthorityHandoffBinding(value, label) {
6
+ const base = object(value, label, ["kind"], [
7
+ "format_version",
8
+ "entry_path",
9
+ "manifest_path",
10
+ "closure_digest",
11
+ "revision",
12
+ "rationale",
13
+ ]);
14
+ const kind = literal(base.kind, ["repository-closure", "not-applicable"], `${label}.kind`);
15
+ if (kind === "not-applicable") {
16
+ const row = object(value, label, ["kind", "rationale"]);
17
+ return {
18
+ kind,
19
+ rationale: string(row.rationale, `${label}.rationale`),
20
+ };
21
+ }
22
+ const row = object(value, label, [
23
+ "kind",
24
+ "format_version",
25
+ "entry_path",
26
+ "manifest_path",
27
+ "closure_digest",
28
+ "revision",
29
+ ]);
30
+ if (row.format_version !== DESIGN_AUTHORITY_IDENTITY_FORMAT_VERSION)
31
+ designResourceShapeFail(`${label}.format_version`, `must equal ${DESIGN_AUTHORITY_IDENTITY_FORMAT_VERSION}`);
32
+ if (row.entry_path !== DESIGN_AUTHORITY_ENTRY_PATH)
33
+ designResourceShapeFail(`${label}.entry_path`, `must equal ${DESIGN_AUTHORITY_ENTRY_PATH}`);
34
+ if (row.manifest_path !== null &&
35
+ row.manifest_path !== DESIGN_AUTHORITY_MANIFEST_PATH)
36
+ designResourceShapeFail(`${label}.manifest_path`, `must be null or ${DESIGN_AUTHORITY_MANIFEST_PATH}`);
37
+ if (!isDesignAuthorityDigest(row.closure_digest))
38
+ designResourceShapeFail(`${label}.closure_digest`, "must be a sha256:<64 lowercase hex> identity");
39
+ if (row.revision !== null && typeof row.revision !== "string")
40
+ designResourceShapeFail(`${label}.revision`, "must be a string or null");
41
+ if (typeof row.revision === "string" && !row.revision.trim())
42
+ designResourceShapeFail(`${label}.revision`, "must not be empty");
43
+ return {
44
+ kind,
45
+ format_version: DESIGN_AUTHORITY_IDENTITY_FORMAT_VERSION,
46
+ entry_path: DESIGN_AUTHORITY_ENTRY_PATH,
47
+ manifest_path: row.manifest_path,
48
+ closure_digest: row.closure_digest,
49
+ revision: row.revision,
50
+ };
51
+ }
52
+ export async function resolveDesignAuthorityHandoffBinding(input) {
53
+ if (!input.binding) {
54
+ const inspection = await inspectDesignAuthorityClosure(input.repository);
55
+ if (inspection.status !== "valid" || !inspection.identity)
56
+ invalid(`legacy_omission_without_current_authority:${inspection.diagnostics.length
57
+ ? inspection.diagnostics
58
+ .map((item) => `${item.code}:${item.detail}`)
59
+ .join("|")
60
+ : inspection.status}`);
61
+ if (inspection.mode !== "legacy")
62
+ invalid("legacy_omission_bundle_not_allowed");
63
+ return {
64
+ identity: inspection.identity,
65
+ member_paths: inspection.member_paths,
66
+ compatibility_derived: true,
67
+ };
68
+ }
69
+ if (input.binding.kind === "not-applicable") {
70
+ if (input.style_dependency !== "non-fidelity")
71
+ invalid("not_applicable_requires_non_fidelity");
72
+ return {
73
+ identity: null,
74
+ member_paths: [],
75
+ compatibility_derived: false,
76
+ };
77
+ }
78
+ const current = await loadCurrentDesignAuthorityClosure(input.repository);
79
+ for (const field of [
80
+ "format_version",
81
+ "entry_path",
82
+ "manifest_path",
83
+ "closure_digest",
84
+ "revision",
85
+ ])
86
+ if (current.identity[field] !== input.binding[field])
87
+ invalid(`identity_mismatch:${field}:${String(input.binding[field])}:${String(current.identity[field])}`);
88
+ return {
89
+ identity: current.identity,
90
+ member_paths: current.member_paths,
91
+ compatibility_derived: false,
92
+ };
93
+ }
94
+ function invalid(reason) {
95
+ throw new Error(`design_resource_handoff_invalid:project_design_authority:${reason}`);
96
+ }
@@ -0,0 +1,3 @@
1
+ import { type DesignAuthorityClosureSnapshot, type DesignAuthorityInspection } from "./design-authority-types.js";
2
+ export declare function inspectDesignAuthorityClosure(repositoryInput: string): Promise<DesignAuthorityInspection>;
3
+ export declare function loadCurrentDesignAuthorityClosure(repository: string): Promise<DesignAuthorityClosureSnapshot>;
@@ -0,0 +1,201 @@
1
+ import path from "node:path";
2
+ import { digestDesignAuthorityMembers, enforceDesignAuthorityTotalLimit, projectDesignAuthorityMembers, } from "./design-authority-digest.js";
3
+ import { acquireDesignAuthorityManifest, acquireDesignAuthorityText, designAuthorityPathExists, } from "./design-authority-files.js";
4
+ import { declaredDesignAuthorityFormat } from "./design-authority-format.js";
5
+ import { designAuthorityManifestProjection, parseDesignAuthorityManifest, } from "./design-authority-manifest.js";
6
+ import { analyzeDesignAuthorityLinks } from "./design-authority-links.js";
7
+ import { designAuthorityRevision, projectDesignAuthorityTokens, } from "./design-authority-tokens.js";
8
+ import { DESIGN_AUTHORITY_ENTRY_PATH, DESIGN_AUTHORITY_IDENTITY_FORMAT_VERSION, DESIGN_AUTHORITY_LIMITS, DESIGN_AUTHORITY_MANIFEST_PATH, } from "./design-authority-types.js";
9
+ export async function inspectDesignAuthorityClosure(repositoryInput) {
10
+ const repository = path.resolve(repositoryInput);
11
+ const entryExists = await designAuthorityPathExists(path.join(repository, DESIGN_AUTHORITY_ENTRY_PATH));
12
+ const manifestExists = await designAuthorityPathExists(path.join(repository, DESIGN_AUTHORITY_MANIFEST_PATH));
13
+ if (!entryExists && manifestExists)
14
+ return emptyInspection("invalid", "bundle", [
15
+ {
16
+ severity: "error",
17
+ code: "bundle_entry_missing",
18
+ path: DESIGN_AUTHORITY_ENTRY_PATH,
19
+ detail: `${DESIGN_AUTHORITY_MANIFEST_PATH} exists without the canonical DESIGN.md entry`,
20
+ },
21
+ ]);
22
+ if (!entryExists)
23
+ return emptyInspection("missing", "missing", [
24
+ {
25
+ severity: "warning",
26
+ code: "design_authority_missing",
27
+ path: DESIGN_AUTHORITY_ENTRY_PATH,
28
+ detail: "DESIGN.md does not exist",
29
+ },
30
+ ]);
31
+ try {
32
+ const snapshot = await buildDesignAuthorityClosure(repository);
33
+ return {
34
+ schema_version: 1,
35
+ status: snapshot.diagnostics.some((item) => item.severity === "error")
36
+ ? "invalid"
37
+ : "valid",
38
+ ...snapshot,
39
+ };
40
+ }
41
+ catch (error) {
42
+ return emptyInspection("invalid", manifestExists ? "bundle" : await declaredModeHint(repository), [
43
+ {
44
+ severity: "error",
45
+ code: "design_authority_invalid",
46
+ detail: message(error),
47
+ },
48
+ ]);
49
+ }
50
+ }
51
+ export async function loadCurrentDesignAuthorityClosure(repository) {
52
+ const inspection = await inspectDesignAuthorityClosure(repository);
53
+ if (inspection.status !== "valid" || !inspection.identity)
54
+ throw new Error(`design_authority_invalid:${inspection.diagnostics
55
+ .map((item) => `${item.code}:${item.detail}`)
56
+ .join("|")}`);
57
+ if (inspection.mode === "missing")
58
+ throw new Error("design_authority_invalid:missing_mode");
59
+ return {
60
+ mode: inspection.mode,
61
+ identity: inspection.identity,
62
+ manifest: inspection.manifest,
63
+ claimed_closure_digest: inspection.claimed_closure_digest,
64
+ members: inspection.members,
65
+ member_paths: inspection.member_paths,
66
+ generated_tokens: inspection.generated_tokens,
67
+ diagnostics: inspection.diagnostics,
68
+ };
69
+ }
70
+ async function buildDesignAuthorityClosure(repository) {
71
+ const entry = await acquireDesignAuthorityText(repository, DESIGN_AUTHORITY_ENTRY_PATH, "design_authority_entry");
72
+ const declaredFormat = declaredDesignAuthorityFormat(entry.content);
73
+ const manifest = await acquireDesignAuthorityManifest(repository);
74
+ if (declaredFormat === "bundle-v1" && !manifest)
75
+ invalid("bundle_manifest_missing");
76
+ if (declaredFormat === null && manifest)
77
+ invalid("bundle_marker_missing");
78
+ const digestMembers = [
79
+ { ...entry, kind: "entry" },
80
+ ];
81
+ const markdownSources = [{ path: entry.path, content: entry.content }];
82
+ let parsedManifest = null;
83
+ let claimedDigest = null;
84
+ if (manifest) {
85
+ parsedManifest = parseDesignAuthorityManifest(manifest.content);
86
+ claimedDigest = parsedManifest.closure_digest;
87
+ if (parsedManifest.authority_files.length +
88
+ parsedManifest.generated_files.length +
89
+ 2 >
90
+ DESIGN_AUTHORITY_LIMITS.max_members)
91
+ invalid("member_limit_exceeded");
92
+ for (const file of parsedManifest.authority_files) {
93
+ const acquired = await acquireDesignAuthorityText(repository, file.path, "design_authority_member");
94
+ digestMembers.push({ ...acquired, kind: "authority" });
95
+ markdownSources.push({ path: acquired.path, content: acquired.content });
96
+ }
97
+ for (const file of parsedManifest.generated_files)
98
+ digestMembers.push({
99
+ ...(await acquireDesignAuthorityText(repository, file.path, "design_authority_generated")),
100
+ kind: "generated",
101
+ });
102
+ const projection = designAuthorityManifestProjection(parsedManifest);
103
+ digestMembers.push({
104
+ path: DESIGN_AUTHORITY_MANIFEST_PATH,
105
+ content: projection,
106
+ raw: Buffer.from(projection),
107
+ normalized: Buffer.from(projection),
108
+ kind: "manifest",
109
+ });
110
+ }
111
+ enforceDesignAuthorityTotalLimit(digestMembers);
112
+ const generatedTokens = projectDesignAuthorityTokens(entry.content);
113
+ const diagnostics = [];
114
+ if (parsedManifest?.generated_files.length) {
115
+ const generated = digestMembers.find((member) => member.kind === "generated");
116
+ if (!generatedTokens.success)
117
+ diagnostics.push({
118
+ severity: "error",
119
+ code: "design_authority_token_projection_failed",
120
+ path: DESIGN_AUTHORITY_ENTRY_PATH,
121
+ detail: generatedTokens.error,
122
+ });
123
+ else if (!generated.raw.equals(Buffer.from(generatedTokens.content)))
124
+ diagnostics.push({
125
+ severity: "error",
126
+ code: "design_authority_generated_tokens_stale",
127
+ path: generated.path,
128
+ detail: "bytes differ from the deterministic DESIGN.md DTCG projection",
129
+ });
130
+ }
131
+ const declared = new Set(digestMembers.map((member) => member.path));
132
+ diagnostics.push(...(await analyzeDesignAuthorityLinks({
133
+ repository,
134
+ sources: markdownSources,
135
+ declared_paths: declared,
136
+ })));
137
+ const computedDigest = digestDesignAuthorityMembers(digestMembers);
138
+ if (claimedDigest && claimedDigest !== computedDigest)
139
+ diagnostics.push({
140
+ severity: "error",
141
+ code: "design_authority_closure_digest_mismatch",
142
+ path: DESIGN_AUTHORITY_MANIFEST_PATH,
143
+ detail: `claimed=${claimedDigest}; computed=${computedDigest}`,
144
+ });
145
+ const members = projectDesignAuthorityMembers(digestMembers);
146
+ return {
147
+ mode: parsedManifest ? "bundle" : "legacy",
148
+ identity: {
149
+ format_version: DESIGN_AUTHORITY_IDENTITY_FORMAT_VERSION,
150
+ entry_path: DESIGN_AUTHORITY_ENTRY_PATH,
151
+ manifest_path: parsedManifest ? DESIGN_AUTHORITY_MANIFEST_PATH : null,
152
+ closure_digest: computedDigest,
153
+ revision: designAuthorityRevision(entry.content),
154
+ },
155
+ manifest: parsedManifest,
156
+ claimed_closure_digest: claimedDigest,
157
+ members,
158
+ member_paths: members.map((member) => member.path),
159
+ generated_tokens: generatedTokens.success ? generatedTokens.content : null,
160
+ diagnostics: diagnostics.sort(compareDiagnostic),
161
+ };
162
+ }
163
+ function compareDiagnostic(left, right) {
164
+ const severity = Buffer.from(left.severity, "utf8").compare(Buffer.from(right.severity, "utf8"));
165
+ if (severity)
166
+ return severity;
167
+ return Buffer.from(`${left.path ?? ""}\0${left.code}\0${left.detail}`).compare(Buffer.from(`${right.path ?? ""}\0${right.code}\0${right.detail}`));
168
+ }
169
+ function emptyInspection(status, mode, diagnostics) {
170
+ return {
171
+ schema_version: 1,
172
+ status,
173
+ mode,
174
+ identity: null,
175
+ manifest: null,
176
+ claimed_closure_digest: null,
177
+ members: [],
178
+ member_paths: [],
179
+ generated_tokens: null,
180
+ diagnostics,
181
+ };
182
+ }
183
+ async function declaredModeHint(repository) {
184
+ try {
185
+ const entry = await acquireDesignAuthorityText(repository, DESIGN_AUTHORITY_ENTRY_PATH, "design_authority_entry");
186
+ return declaredDesignAuthorityFormat(entry.content) === "bundle-v1"
187
+ ? "bundle"
188
+ : "legacy";
189
+ }
190
+ catch (error) {
191
+ return /bundle_(?:marker|entry)/u.test(message(error))
192
+ ? "bundle"
193
+ : "legacy";
194
+ }
195
+ }
196
+ function message(error) {
197
+ return error instanceof Error ? error.message : String(error);
198
+ }
199
+ function invalid(reason) {
200
+ throw new Error(`design_authority_invalid:${reason}`);
201
+ }
@@ -0,0 +1,10 @@
1
+ export type DeltaRow = Record<string, unknown>;
2
+ export declare function deltaRow(value: unknown, label: string, required: string[], optional?: string[]): DeltaRow;
3
+ export declare function deltaArray(value: unknown, label: string): unknown[];
4
+ export declare function deltaText(value: unknown, label: string): string;
5
+ export declare function deltaOneOf<const T extends readonly string[]>(value: unknown, allowed: T, label: string): T[number];
6
+ export declare function deltaExact<T extends string | number>(value: unknown, expected: T, label: string): T;
7
+ export declare function deltaStringSet(value: unknown, label: string, allowEmpty?: boolean): string[];
8
+ export declare function deltaSourceRefSet(value: unknown, label: string, allowEmpty?: boolean): string[];
9
+ export declare function deltaCompare(left: string, right: string): number;
10
+ export declare function deltaInvalid(label: string, reason: string): never;