project-tiny-context-harness 0.8.16 → 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 (535) hide show
  1. package/README.md +119 -41
  2. package/assets/README.md +184 -55
  3. package/assets/README.zh-CN.md +114 -40
  4. package/assets/agents/AGENTS_CORE.md +2 -2
  5. package/assets/context_templates/context.toml +6 -1
  6. package/assets/context_templates/screen-contract.md +16 -0
  7. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_helpers.cs +301 -0
  8. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_run.cs +197 -0
  9. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_types.cs +215 -0
  10. package/assets/runtime/windows-job-supervisor/windows_job_process_supervisor.ps1 +117 -0
  11. package/assets/skills/context_development_engineer/SKILL.md +16 -30
  12. package/assets/skills/context_development_engineer/references/engineering-design-reasoning.md +93 -0
  13. package/assets/skills/context_surface_contract/SKILL.md +13 -2
  14. package/assets/skills/context_uiux_design/SKILL.md +7 -3
  15. package/assets/skills/context_uiux_design/references/task-uiux-analysis.md +82 -0
  16. package/assets/skills/design-resource-authoring/SKILL.md +18 -9
  17. package/assets/skills/design-resource-authoring/references/authority-delta-assessment.md +52 -0
  18. package/assets/skills/design-resource-authoring/references/downstream-handoff.md +22 -6
  19. package/assets/skills/design-resource-authoring/references/formal-selected-web-app-handoff.md +26 -8
  20. package/assets/skills/design-resource-authoring/references/implementation-feasibility.md +111 -0
  21. package/assets/skills/design-resource-authoring/references/open-design-provider.md +45 -7
  22. package/assets/skills/design-resource-authoring/references/recovery-and-writeback.md +7 -1
  23. package/assets/skills/design-resource-authoring/references/resource-selection.md +115 -3
  24. package/assets/skills/design-system-authoring/SKILL.md +23 -17
  25. package/assets/skills/design-system-authoring/references/authority-adoption.md +19 -9
  26. package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +4 -0
  27. package/assets/skills/long-task-workflow/SKILL.md +6 -6
  28. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +10 -4
  29. package/assets/skills/long-task-workflow/references/contract-authoring.md +5 -5
  30. package/assets/skills/long-task-workflow/references/evidence-design.md +14 -3
  31. package/assets/skills/long-task-workflow/references/source-authoring.md +11 -8
  32. package/assets/tools/context_rules.json +53 -0
  33. package/assets/tools/validate_context.py +302 -77
  34. package/dist/cli.js +2 -1
  35. package/dist/commands/context-create.d.ts +1 -0
  36. package/dist/commands/context-create.js +90 -0
  37. package/dist/commands/context-inspect.d.ts +1 -0
  38. package/dist/commands/context-inspect.js +98 -0
  39. package/dist/commands/context-move.d.ts +1 -0
  40. package/dist/commands/context-move.js +78 -0
  41. package/dist/commands/context-register.d.ts +1 -0
  42. package/dist/commands/context-register.js +110 -0
  43. package/dist/commands/context-transaction.d.ts +1 -0
  44. package/dist/commands/context-transaction.js +84 -0
  45. package/dist/commands/context.d.ts +1 -0
  46. package/dist/commands/context.js +36 -0
  47. package/dist/commands/design-authority-delta.d.ts +1 -0
  48. package/dist/commands/design-authority-delta.js +53 -0
  49. package/dist/commands/design-authority.d.ts +1 -0
  50. package/dist/commands/design-authority.js +104 -0
  51. package/dist/commands/design-resource.js +17 -3
  52. package/dist/commands/doctor.d.ts +1 -1
  53. package/dist/commands/doctor.js +61 -3
  54. package/dist/commands/index.js +19 -2
  55. package/dist/commands/long-task-authoring.js +20 -2
  56. package/dist/commands/long-task-workdir.d.ts +2 -0
  57. package/dist/commands/long-task-workdir.js +23 -0
  58. package/dist/commands/long-task.js +75 -6
  59. package/dist/commands/route.d.ts +15 -0
  60. package/dist/commands/route.js +142 -0
  61. package/dist/index.d.ts +3 -13
  62. package/dist/index.js +3 -12
  63. package/dist/lib/cli-exit.d.ts +14 -0
  64. package/dist/lib/cli-exit.js +19 -0
  65. package/dist/lib/context-catalog/catalog-default-footprint.d.ts +3 -0
  66. package/dist/lib/context-catalog/catalog-default-footprint.js +53 -0
  67. package/dist/lib/context-catalog/catalog-diagnostics.d.ts +9 -0
  68. package/dist/lib/context-catalog/catalog-diagnostics.js +34 -0
  69. package/dist/lib/context-catalog/catalog-discovery.d.ts +7 -0
  70. package/dist/lib/context-catalog/catalog-discovery.js +81 -0
  71. package/dist/lib/context-catalog/catalog-load.d.ts +8 -0
  72. package/dist/lib/context-catalog/catalog-load.js +187 -0
  73. package/dist/lib/context-catalog/catalog-path-validation.d.ts +7 -0
  74. package/dist/lib/context-catalog/catalog-path-validation.js +62 -0
  75. package/dist/lib/context-catalog/catalog-paths.d.ts +11 -0
  76. package/dist/lib/context-catalog/catalog-paths.js +41 -0
  77. package/dist/lib/context-catalog/catalog-portable-contract.d.ts +15 -0
  78. package/dist/lib/context-catalog/catalog-portable-contract.js +68 -0
  79. package/dist/lib/context-catalog/catalog-staged-path-safety.d.ts +1 -0
  80. package/dist/lib/context-catalog/catalog-staged-path-safety.js +36 -0
  81. package/dist/lib/context-catalog/catalog-types.d.ts +40 -0
  82. package/dist/lib/context-catalog/catalog-types.js +1 -0
  83. package/dist/lib/context-catalog/catalog-validation.d.ts +9 -0
  84. package/dist/lib/context-catalog/catalog-validation.js +148 -0
  85. package/dist/lib/context-create/context-create-path.d.ts +2 -0
  86. package/dist/lib/context-create/context-create-path.js +30 -0
  87. package/dist/lib/context-create/context-create-template.d.ts +2 -0
  88. package/dist/lib/context-create/context-create-template.js +95 -0
  89. package/dist/lib/context-create/context-create-types.d.ts +28 -0
  90. package/dist/lib/context-create/context-create-types.js +1 -0
  91. package/dist/lib/context-create/context-create-write.d.ts +1 -0
  92. package/dist/lib/context-create/context-create-write.js +85 -0
  93. package/dist/lib/context-create/context-create.d.ts +2 -0
  94. package/dist/lib/context-create/context-create.js +84 -0
  95. package/dist/lib/context-default-footprint.d.ts +2 -3
  96. package/dist/lib/context-default-footprint.js +49 -57
  97. package/dist/lib/context-doctor/context-doctor-types.d.ts +16 -0
  98. package/dist/lib/context-doctor/context-doctor-types.js +15 -0
  99. package/dist/lib/context-doctor/context-doctor.d.ts +2 -0
  100. package/dist/lib/context-doctor/context-doctor.js +130 -0
  101. package/dist/lib/context-graph-snapshot.d.ts +5 -0
  102. package/dist/lib/context-graph-snapshot.js +46 -25
  103. package/dist/lib/context-inspect/context-inspect-projection.d.ts +9 -0
  104. package/dist/lib/context-inspect/context-inspect-projection.js +49 -0
  105. package/dist/lib/context-inspect/context-inspect-render.d.ts +2 -0
  106. package/dist/lib/context-inspect/context-inspect-render.js +29 -0
  107. package/dist/lib/context-inspect/context-inspect-types.d.ts +43 -0
  108. package/dist/lib/context-inspect/context-inspect-types.js +1 -0
  109. package/dist/lib/context-inspect/context-inspect.d.ts +2 -0
  110. package/dist/lib/context-inspect/context-inspect.js +104 -0
  111. package/dist/lib/context-manifest-schema.d.ts +1 -1
  112. package/dist/lib/context-manifest-schema.js +4 -20
  113. package/dist/lib/context-markdown/context-markdown-analysis.d.ts +15 -0
  114. package/dist/lib/context-markdown/context-markdown-analysis.js +245 -0
  115. package/dist/lib/context-markdown/context-markdown-extract.d.ts +7 -0
  116. package/dist/lib/context-markdown/context-markdown-extract.js +114 -0
  117. package/dist/lib/context-markdown/context-markdown-types.d.ts +57 -0
  118. package/dist/lib/context-markdown/context-markdown-types.js +1 -0
  119. package/dist/lib/context-move/context-move-input.d.ts +8 -0
  120. package/dist/lib/context-move/context-move-input.js +17 -0
  121. package/dist/lib/context-move/context-move-literal-scan.d.ts +20 -0
  122. package/dist/lib/context-move/context-move-literal-scan.js +213 -0
  123. package/dist/lib/context-move/context-move-live-validation.d.ts +3 -0
  124. package/dist/lib/context-move/context-move-live-validation.js +56 -0
  125. package/dist/lib/context-move/context-move-markdown-plan.d.ts +22 -0
  126. package/dist/lib/context-move/context-move-markdown-plan.js +39 -0
  127. package/dist/lib/context-move/context-move-projection.d.ts +3 -0
  128. package/dist/lib/context-move/context-move-projection.js +11 -0
  129. package/dist/lib/context-move/context-move-reference-validation.d.ts +11 -0
  130. package/dist/lib/context-move/context-move-reference-validation.js +64 -0
  131. package/dist/lib/context-move/context-move-render.d.ts +2 -0
  132. package/dist/lib/context-move/context-move-render.js +24 -0
  133. package/dist/lib/context-move/context-move-support.d.ts +10 -0
  134. package/dist/lib/context-move/context-move-support.js +88 -0
  135. package/dist/lib/context-move/context-move-transaction-plan.d.ts +24 -0
  136. package/dist/lib/context-move/context-move-transaction-plan.js +108 -0
  137. package/dist/lib/context-move/context-move-types.d.ts +74 -0
  138. package/dist/lib/context-move/context-move-types.js +1 -0
  139. package/dist/lib/context-move/context-move.d.ts +8 -0
  140. package/dist/lib/context-move/context-move.js +180 -0
  141. package/dist/lib/context-mutation/manifest-lossless-patch.d.ts +28 -0
  142. package/dist/lib/context-mutation/manifest-lossless-patch.js +208 -0
  143. package/dist/lib/context-mutation/markdown-link-patch.d.ts +34 -0
  144. package/dist/lib/context-mutation/markdown-link-patch.js +143 -0
  145. package/dist/lib/context-mutation/markdown-link-spans.d.ts +10 -0
  146. package/dist/lib/context-mutation/markdown-link-spans.js +179 -0
  147. package/dist/lib/context-mutation/mutation-cas.d.ts +13 -0
  148. package/dist/lib/context-mutation/mutation-cas.js +365 -0
  149. package/dist/lib/context-mutation/mutation-command-support.d.ts +12 -0
  150. package/dist/lib/context-mutation/mutation-command-support.js +57 -0
  151. package/dist/lib/context-mutation/mutation-commit.d.ts +12 -0
  152. package/dist/lib/context-mutation/mutation-commit.js +89 -0
  153. package/dist/lib/context-mutation/mutation-directories.d.ts +5 -0
  154. package/dist/lib/context-mutation/mutation-directories.js +56 -0
  155. package/dist/lib/context-mutation/mutation-file-state.d.ts +14 -0
  156. package/dist/lib/context-mutation/mutation-file-state.js +137 -0
  157. package/dist/lib/context-mutation/mutation-journal-file-validation.d.ts +1 -0
  158. package/dist/lib/context-mutation/mutation-journal-file-validation.js +106 -0
  159. package/dist/lib/context-mutation/mutation-journal-io.d.ts +5 -0
  160. package/dist/lib/context-mutation/mutation-journal-io.js +55 -0
  161. package/dist/lib/context-mutation/mutation-journal-storage.d.ts +18 -0
  162. package/dist/lib/context-mutation/mutation-journal-storage.js +283 -0
  163. package/dist/lib/context-mutation/mutation-journal-validation-support.d.ts +16 -0
  164. package/dist/lib/context-mutation/mutation-journal-validation-support.js +140 -0
  165. package/dist/lib/context-mutation/mutation-journal-validation.d.ts +3 -0
  166. package/dist/lib/context-mutation/mutation-journal-validation.js +177 -0
  167. package/dist/lib/context-mutation/mutation-journal.d.ts +8 -0
  168. package/dist/lib/context-mutation/mutation-journal.js +111 -0
  169. package/dist/lib/context-mutation/mutation-live-validation.d.ts +3 -0
  170. package/dist/lib/context-mutation/mutation-live-validation.js +51 -0
  171. package/dist/lib/context-mutation/mutation-long-task-guard.d.ts +6 -0
  172. package/dist/lib/context-mutation/mutation-long-task-guard.js +57 -0
  173. package/dist/lib/context-mutation/mutation-recovery.d.ts +4 -0
  174. package/dist/lib/context-mutation/mutation-recovery.js +189 -0
  175. package/dist/lib/context-mutation/mutation-staged-fs.d.ts +5 -0
  176. package/dist/lib/context-mutation/mutation-staged-fs.js +56 -0
  177. package/dist/lib/context-mutation/mutation-types.d.ts +103 -0
  178. package/dist/lib/context-mutation/mutation-types.js +1 -0
  179. package/dist/lib/context-register/context-register-input.d.ts +11 -0
  180. package/dist/lib/context-register/context-register-input.js +43 -0
  181. package/dist/lib/context-register/context-register-render.d.ts +2 -0
  182. package/dist/lib/context-register/context-register-render.js +21 -0
  183. package/dist/lib/context-register/context-register-support.d.ts +6 -0
  184. package/dist/lib/context-register/context-register-support.js +46 -0
  185. package/dist/lib/context-register/context-register-types.d.ts +46 -0
  186. package/dist/lib/context-register/context-register-types.js +1 -0
  187. package/dist/lib/context-register/context-register.d.ts +8 -0
  188. package/dist/lib/context-register/context-register.js +155 -0
  189. package/dist/lib/context-router/context-route-budget.d.ts +15 -0
  190. package/dist/lib/context-router/context-route-budget.js +14 -0
  191. package/dist/lib/context-router/context-route-candidates.d.ts +15 -0
  192. package/dist/lib/context-router/context-route-candidates.js +112 -0
  193. package/dist/lib/context-router/context-route-order.d.ts +6 -0
  194. package/dist/lib/context-router/context-route-order.js +53 -0
  195. package/dist/lib/context-router/context-route-paths.d.ts +16 -0
  196. package/dist/lib/context-router/context-route-paths.js +109 -0
  197. package/dist/lib/context-router/context-route-render.d.ts +2 -0
  198. package/dist/lib/context-router/context-route-render.js +32 -0
  199. package/dist/lib/context-router/context-route-scan.d.ts +18 -0
  200. package/dist/lib/context-router/context-route-scan.js +156 -0
  201. package/dist/lib/context-router/context-route-selection.d.ts +16 -0
  202. package/dist/lib/context-router/context-route-selection.js +72 -0
  203. package/dist/lib/context-router/context-route-terms.d.ts +13 -0
  204. package/dist/lib/context-router/context-route-terms.js +202 -0
  205. package/dist/lib/context-router/context-route-types.d.ts +101 -0
  206. package/dist/lib/context-router/context-route-types.js +1 -0
  207. package/dist/lib/context-router/context-route.d.ts +2 -0
  208. package/dist/lib/context-router/context-route.js +127 -0
  209. package/dist/lib/context-units-migration.d.ts +13 -0
  210. package/dist/lib/context-units-migration.js +217 -0
  211. package/dist/lib/design-authority-binding.d.ts +7 -0
  212. package/dist/lib/design-authority-binding.js +96 -0
  213. package/dist/lib/design-authority-closure.d.ts +3 -0
  214. package/dist/lib/design-authority-closure.js +201 -0
  215. package/dist/lib/design-authority-delta-codec-primitives.d.ts +10 -0
  216. package/dist/lib/design-authority-delta-codec-primitives.js +58 -0
  217. package/dist/lib/design-authority-delta-codec.d.ts +2 -0
  218. package/dist/lib/design-authority-delta-codec.js +193 -0
  219. package/dist/lib/design-authority-delta-types.d.ts +65 -0
  220. package/dist/lib/design-authority-delta-types.js +6 -0
  221. package/dist/lib/design-authority-delta-validation.d.ts +2 -0
  222. package/dist/lib/design-authority-delta-validation.js +16 -0
  223. package/dist/lib/design-authority-digest.d.ts +8 -0
  224. package/dist/lib/design-authority-digest.js +36 -0
  225. package/dist/lib/design-authority-files.d.ts +9 -0
  226. package/dist/lib/design-authority-files.js +62 -0
  227. package/dist/lib/design-authority-format.d.ts +2 -0
  228. package/dist/lib/design-authority-format.js +93 -0
  229. package/dist/lib/design-authority-links.d.ts +10 -0
  230. package/dist/lib/design-authority-links.js +137 -0
  231. package/dist/lib/design-authority-manifest.d.ts +4 -0
  232. package/dist/lib/design-authority-manifest.js +144 -0
  233. package/dist/lib/design-authority-tokens.d.ts +9 -0
  234. package/dist/lib/design-authority-tokens.js +45 -0
  235. package/dist/lib/design-authority-types.d.ts +80 -0
  236. package/dist/lib/design-authority-types.js +23 -0
  237. package/dist/lib/design-md-tool-adapter.d.ts +9 -0
  238. package/dist/lib/design-md-tool-adapter.js +152 -0
  239. package/dist/lib/design-md-tool-normalization.d.ts +7 -0
  240. package/dist/lib/design-md-tool-normalization.js +78 -0
  241. package/dist/lib/design-md-tool-types.d.ts +99 -0
  242. package/dist/lib/design-md-tool-types.js +8 -0
  243. package/dist/lib/design-resource-handoff-bundle.js +5 -0
  244. package/dist/lib/design-resource-handoff-input-types.d.ts +1 -1
  245. package/dist/lib/design-resource-handoff-manifest-projection.js +4 -0
  246. package/dist/lib/design-resource-handoff-set-integrity.js +1 -0
  247. package/dist/lib/design-resource-handoff-shape.js +18 -2
  248. package/dist/lib/design-resource-handoff-types.d.ts +8 -0
  249. package/dist/lib/design-resource-handoff-validation.js +24 -0
  250. package/dist/lib/design-resource-implementation-feasibility-model.d.ts +35 -0
  251. package/dist/lib/design-resource-implementation-feasibility-model.js +62 -0
  252. package/dist/lib/design-resource-implementation-feasibility-shape-sections.d.ts +43 -0
  253. package/dist/lib/design-resource-implementation-feasibility-shape-sections.js +142 -0
  254. package/dist/lib/design-resource-implementation-feasibility-shape.d.ts +4 -0
  255. package/dist/lib/design-resource-implementation-feasibility-shape.js +154 -0
  256. package/dist/lib/design-resource-implementation-feasibility-source-decision-projection.d.ts +24 -0
  257. package/dist/lib/design-resource-implementation-feasibility-source-decision-projection.js +106 -0
  258. package/dist/lib/design-resource-implementation-feasibility-source-decision.d.ts +21 -0
  259. package/dist/lib/design-resource-implementation-feasibility-source-decision.js +75 -0
  260. package/dist/lib/design-resource-implementation-feasibility-types.d.ts +135 -0
  261. package/dist/lib/design-resource-implementation-feasibility-types.js +37 -0
  262. package/dist/lib/design-resource-implementation-feasibility-validation-cells.d.ts +5 -0
  263. package/dist/lib/design-resource-implementation-feasibility-validation-cells.js +125 -0
  264. package/dist/lib/design-resource-implementation-feasibility-validation-document.d.ts +4 -0
  265. package/dist/lib/design-resource-implementation-feasibility-validation-document.js +167 -0
  266. package/dist/lib/design-resource-implementation-feasibility-validation-facts.d.ts +3 -0
  267. package/dist/lib/design-resource-implementation-feasibility-validation-facts.js +76 -0
  268. package/dist/lib/design-resource-implementation-feasibility-validation-realizations.d.ts +8 -0
  269. package/dist/lib/design-resource-implementation-feasibility-validation-realizations.js +76 -0
  270. package/dist/lib/design-resource-implementation-feasibility-validation-support.d.ts +10 -0
  271. package/dist/lib/design-resource-implementation-feasibility-validation-support.js +75 -0
  272. package/dist/lib/design-resource-implementation-feasibility-validation.d.ts +3 -0
  273. package/dist/lib/design-resource-implementation-feasibility-validation.js +138 -0
  274. package/dist/lib/design-resource-recovery-current.js +22 -0
  275. package/dist/lib/design-resource-recovery-shape.js +64 -7
  276. package/dist/lib/design-resource-recovery-types.d.ts +4 -1
  277. package/dist/lib/design-resource-symbolic-fact-shape.js +9 -1
  278. package/dist/lib/design-resource-symbolic-fact-types.d.ts +8 -0
  279. package/dist/lib/design-resource-symbolic-fact-validation.js +25 -0
  280. package/dist/lib/doctor.d.ts +2 -1
  281. package/dist/lib/doctor.js +29 -1
  282. package/dist/lib/fs.js +1 -1
  283. package/dist/lib/long-task-acceptance-reachability-claims.d.ts +2 -0
  284. package/dist/lib/long-task-acceptance-reachability-claims.js +279 -0
  285. package/dist/lib/long-task-acceptance-reachability-design.d.ts +2 -0
  286. package/dist/lib/long-task-acceptance-reachability-design.js +96 -0
  287. package/dist/lib/long-task-acceptance-reachability-external.d.ts +9 -0
  288. package/dist/lib/long-task-acceptance-reachability-external.js +123 -0
  289. package/dist/lib/long-task-acceptance-reachability-helpers.d.ts +64 -0
  290. package/dist/lib/long-task-acceptance-reachability-helpers.js +473 -0
  291. package/dist/lib/long-task-acceptance-reachability-semantic.d.ts +2 -0
  292. package/dist/lib/long-task-acceptance-reachability-semantic.js +122 -0
  293. package/dist/lib/long-task-acceptance-reachability-types.d.ts +91 -0
  294. package/dist/lib/long-task-acceptance-reachability-types.js +1 -0
  295. package/dist/lib/long-task-acceptance-reachability.d.ts +4 -0
  296. package/dist/lib/long-task-acceptance-reachability.js +115 -0
  297. package/dist/lib/long-task-activation-validation.d.ts +6 -0
  298. package/dist/lib/long-task-activation-validation.js +96 -23
  299. package/dist/lib/long-task-active-authority-lock-context.d.ts +4 -0
  300. package/dist/lib/long-task-active-authority-lock-context.js +29 -0
  301. package/dist/lib/long-task-applicability-identity.d.ts +25 -0
  302. package/dist/lib/long-task-applicability-identity.js +60 -0
  303. package/dist/lib/long-task-authoring-preflight-diagnostics.js +8 -0
  304. package/dist/lib/long-task-authoring-preflight-types.d.ts +2 -0
  305. package/dist/lib/long-task-authoring-preflight-types.js +9 -0
  306. package/dist/lib/long-task-authoring-preflight.js +18 -2
  307. package/dist/lib/long-task-authority-material-diff.js +4 -0
  308. package/dist/lib/long-task-authority-materials.js +19 -0
  309. package/dist/lib/long-task-authority-policy.d.ts +3 -0
  310. package/dist/lib/long-task-authority-policy.js +3 -0
  311. package/dist/lib/long-task-authority-revision-details.js +2 -1
  312. package/dist/lib/long-task-authority-types.d.ts +2 -0
  313. package/dist/lib/long-task-authority.js +2 -0
  314. package/dist/lib/long-task-check-runner.js +3 -296
  315. package/dist/lib/long-task-check-shape.js +6 -1
  316. package/dist/lib/long-task-claim-definitions.js +1 -3
  317. package/dist/lib/long-task-claim-semantic-proof-floor.d.ts +3 -0
  318. package/dist/lib/long-task-claim-semantic-proof-floor.js +78 -0
  319. package/dist/lib/long-task-claims.d.ts +0 -18
  320. package/dist/lib/long-task-claims.js +15 -14
  321. package/dist/lib/long-task-command-process.d.ts +9 -0
  322. package/dist/lib/long-task-command-process.js +178 -0
  323. package/dist/lib/long-task-compact-authoring.js +3 -0
  324. package/dist/lib/long-task-compact-projections.js +10 -0
  325. package/dist/lib/long-task-complete-delivery-evidence-types.d.ts +38 -0
  326. package/dist/lib/long-task-complete-delivery-evidence-types.js +1 -0
  327. package/dist/lib/long-task-completion-types.d.ts +109 -0
  328. package/dist/lib/long-task-completion-types.js +1 -0
  329. package/dist/lib/long-task-conformance-policy.d.ts +2 -1
  330. package/dist/lib/long-task-conformance-policy.js +11 -4
  331. package/dist/lib/long-task-context-authority-topology.js +6 -4
  332. package/dist/lib/long-task-contract-types.d.ts +52 -1
  333. package/dist/lib/long-task-counterfactual-sandbox.d.ts +7 -1
  334. package/dist/lib/long-task-counterfactual-sandbox.js +86 -6
  335. package/dist/lib/long-task-delivery-compiler-preflight.d.ts +24 -0
  336. package/dist/lib/long-task-delivery-compiler-preflight.js +32 -0
  337. package/dist/lib/long-task-delivery-compiler.d.ts +1 -0
  338. package/dist/lib/long-task-delivery-compiler.js +59 -44
  339. package/dist/lib/long-task-delivery-parser.d.ts +3 -0
  340. package/dist/lib/long-task-delivery-parser.js +26 -8
  341. package/dist/lib/long-task-delivery-types.d.ts +2 -0
  342. package/dist/lib/long-task-delivery-types.js +2 -0
  343. package/dist/lib/long-task-delivery-validation.d.ts +11 -3
  344. package/dist/lib/long-task-delivery-validation.js +23 -8
  345. package/dist/lib/long-task-design-feasibility-binding-owners.d.ts +6 -0
  346. package/dist/lib/long-task-design-feasibility-binding-owners.js +52 -0
  347. package/dist/lib/long-task-design-feasibility-binding.d.ts +14 -0
  348. package/dist/lib/long-task-design-feasibility-binding.js +114 -0
  349. package/dist/lib/long-task-design-feasibility-source-closure.d.ts +11 -0
  350. package/dist/lib/long-task-design-feasibility-source-closure.js +87 -0
  351. package/dist/lib/long-task-design-obligation.d.ts +50 -0
  352. package/dist/lib/long-task-design-obligation.js +99 -0
  353. package/dist/lib/long-task-design-resource-handoff.d.ts +5 -3
  354. package/dist/lib/long-task-design-resource-handoff.js +64 -4
  355. package/dist/lib/long-task-design-resource-method-binding.js +20 -2
  356. package/dist/lib/long-task-effective-external-takeover.d.ts +15 -0
  357. package/dist/lib/long-task-effective-external-takeover.js +109 -0
  358. package/dist/lib/long-task-effective-external-ui-takeover.d.ts +5 -0
  359. package/dist/lib/long-task-effective-external-ui-takeover.js +117 -0
  360. package/dist/lib/long-task-evidence-capability-codec.js +91 -0
  361. package/dist/lib/long-task-evidence-capability-runtime.js +62 -14
  362. package/dist/lib/long-task-evidence-capability-types.d.ts +3 -2
  363. package/dist/lib/long-task-evidence-v2.d.ts +6 -1
  364. package/dist/lib/long-task-evidence-v2.js +253 -170
  365. package/dist/lib/long-task-execution-observation.d.ts +7 -0
  366. package/dist/lib/long-task-execution-observation.js +21 -4
  367. package/dist/lib/long-task-expected-authority.d.ts +4 -0
  368. package/dist/lib/long-task-expected-authority.js +126 -0
  369. package/dist/lib/long-task-external-confirmation-artifacts.d.ts +9 -0
  370. package/dist/lib/long-task-external-confirmation-artifacts.js +138 -0
  371. package/dist/lib/long-task-external-confirmation-attestation.d.ts +20 -0
  372. package/dist/lib/long-task-external-confirmation-attestation.js +115 -0
  373. package/dist/lib/long-task-external-confirmation-challenge.d.ts +23 -0
  374. package/dist/lib/long-task-external-confirmation-challenge.js +164 -0
  375. package/dist/lib/long-task-external-confirmation-context.d.ts +14 -0
  376. package/dist/lib/long-task-external-confirmation-context.js +53 -0
  377. package/dist/lib/long-task-external-confirmation-evaluation.d.ts +11 -0
  378. package/dist/lib/long-task-external-confirmation-evaluation.js +454 -0
  379. package/dist/lib/long-task-external-confirmation-expected.d.ts +8 -0
  380. package/dist/lib/long-task-external-confirmation-expected.js +200 -0
  381. package/dist/lib/long-task-external-confirmation-identity.d.ts +10 -0
  382. package/dist/lib/long-task-external-confirmation-identity.js +77 -0
  383. package/dist/lib/long-task-external-confirmation-plan.d.ts +25 -0
  384. package/dist/lib/long-task-external-confirmation-plan.js +148 -0
  385. package/dist/lib/long-task-external-confirmation-preparation.d.ts +4 -0
  386. package/dist/lib/long-task-external-confirmation-preparation.js +100 -0
  387. package/dist/lib/long-task-external-confirmation-shape.d.ts +8 -0
  388. package/dist/lib/long-task-external-confirmation-shape.js +387 -0
  389. package/dist/lib/long-task-external-confirmation-state.d.ts +10 -0
  390. package/dist/lib/long-task-external-confirmation-state.js +109 -0
  391. package/dist/lib/long-task-external-confirmation-types.d.ts +195 -0
  392. package/dist/lib/long-task-external-confirmation-types.js +1 -0
  393. package/dist/lib/long-task-final-integrity.d.ts +2 -0
  394. package/dist/lib/long-task-final-integrity.js +21 -10
  395. package/dist/lib/long-task-final-v2.d.ts +7 -2
  396. package/dist/lib/long-task-final-v2.js +179 -55
  397. package/dist/lib/long-task-finalization-identity.d.ts +27 -0
  398. package/dist/lib/long-task-finalization-identity.js +58 -0
  399. package/dist/lib/long-task-finding-context.d.ts +1 -1
  400. package/dist/lib/long-task-finding-context.js +139 -13
  401. package/dist/lib/long-task-freshness.d.ts +27 -0
  402. package/dist/lib/long-task-freshness.js +129 -6
  403. package/dist/lib/long-task-git.js +3 -3
  404. package/dist/lib/long-task-material-input-closure.d.ts +3 -0
  405. package/dist/lib/long-task-material-input-closure.js +92 -0
  406. package/dist/lib/long-task-obligation-authority-resolution.d.ts +12 -0
  407. package/dist/lib/long-task-obligation-authority-resolution.js +57 -0
  408. package/dist/lib/long-task-obligation-semantic-identity.d.ts +16 -0
  409. package/dist/lib/long-task-obligation-semantic-identity.js +116 -0
  410. package/dist/lib/long-task-observation-authority.d.ts +11 -0
  411. package/dist/lib/long-task-observation-authority.js +137 -6
  412. package/dist/lib/long-task-process-table.d.ts +9 -0
  413. package/dist/lib/long-task-process-table.js +87 -0
  414. package/dist/lib/long-task-process-tree.d.ts +8 -0
  415. package/dist/lib/long-task-process-tree.js +108 -0
  416. package/dist/lib/long-task-proof-adequacy.d.ts +12 -0
  417. package/dist/lib/long-task-proof-adequacy.js +57 -0
  418. package/dist/lib/long-task-proof-capability-floor.d.ts +6 -0
  419. package/dist/lib/long-task-proof-capability-floor.js +137 -0
  420. package/dist/lib/long-task-protected-files.d.ts +1 -1
  421. package/dist/lib/long-task-protected-files.js +1 -1
  422. package/dist/lib/long-task-repair-frontier-checks.d.ts +8 -0
  423. package/dist/lib/long-task-repair-frontier-checks.js +93 -0
  424. package/dist/lib/long-task-repair-frontier-groups.d.ts +2 -0
  425. package/dist/lib/long-task-repair-frontier-groups.js +64 -0
  426. package/dist/lib/long-task-repair-frontier-utils.d.ts +6 -0
  427. package/dist/lib/long-task-repair-frontier-utils.js +27 -0
  428. package/dist/lib/long-task-repair-frontier.d.ts +14 -0
  429. package/dist/lib/long-task-repair-frontier.js +132 -0
  430. package/dist/lib/long-task-risk.d.ts +3 -2
  431. package/dist/lib/long-task-risk.js +73 -24
  432. package/dist/lib/long-task-root-shape.js +148 -8
  433. package/dist/lib/long-task-runner-freeze.d.ts +2 -1
  434. package/dist/lib/long-task-runner-freeze.js +23 -8
  435. package/dist/lib/long-task-runtime-types.d.ts +34 -40
  436. package/dist/lib/long-task-semantic-assurance-policy.js +2 -11
  437. package/dist/lib/long-task-semantic-contract-types.d.ts +2 -1
  438. package/dist/lib/long-task-semantic-drift-migration.js +48 -2
  439. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +20 -0
  440. package/dist/lib/long-task-semantic-fact-closure.d.ts +5 -1
  441. package/dist/lib/long-task-semantic-fact-closure.js +33 -5
  442. package/dist/lib/long-task-semantic-fact-contract-closure.js +176 -1
  443. package/dist/lib/long-task-semantic-fact-contract-proofs.js +18 -1
  444. package/dist/lib/long-task-semantic-fact-input-closure.d.ts +16 -2
  445. package/dist/lib/long-task-semantic-fact-input-closure.js +138 -15
  446. package/dist/lib/long-task-semantic-fact-provenance-closure.js +1 -1
  447. package/dist/lib/long-task-semantic-fact-shape.d.ts +2 -1
  448. package/dist/lib/long-task-semantic-fact-shape.js +35 -1
  449. package/dist/lib/long-task-semantic-proof-adequacy.d.ts +2 -0
  450. package/dist/lib/long-task-semantic-proof-adequacy.js +19 -0
  451. package/dist/lib/long-task-semantic-proof-profile.d.ts +5 -0
  452. package/dist/lib/long-task-semantic-proof-profile.js +187 -0
  453. package/dist/lib/long-task-shape-primitives.d.ts +1 -1
  454. package/dist/lib/long-task-shape-primitives.js +5 -0
  455. package/dist/lib/long-task-source-anchors.d.ts +10 -0
  456. package/dist/lib/long-task-source-anchors.js +102 -0
  457. package/dist/lib/long-task-source-authority-types.d.ts +46 -0
  458. package/dist/lib/long-task-source-claim-validation.js +36 -0
  459. package/dist/lib/long-task-source-conservation-facts.d.ts +8 -0
  460. package/dist/lib/long-task-source-conservation-facts.js +57 -0
  461. package/dist/lib/long-task-source-conservation-types.d.ts +34 -0
  462. package/dist/lib/long-task-source-conservation-types.js +1 -0
  463. package/dist/lib/long-task-source-conservation.d.ts +7 -0
  464. package/dist/lib/long-task-source-conservation.js +110 -0
  465. package/dist/lib/long-task-source-fragments.d.ts +6 -0
  466. package/dist/lib/long-task-source-fragments.js +219 -0
  467. package/dist/lib/long-task-source-projection-resolution.d.ts +5 -0
  468. package/dist/lib/long-task-source-projection-resolution.js +57 -0
  469. package/dist/lib/long-task-source-projection-validation.d.ts +17 -0
  470. package/dist/lib/long-task-source-projection-validation.js +154 -0
  471. package/dist/lib/long-task-source-shape.js +14 -6
  472. package/dist/lib/long-task-source-supersession.d.ts +5 -0
  473. package/dist/lib/long-task-source-supersession.js +138 -0
  474. package/dist/lib/long-task-stage-policy.d.ts +7 -2
  475. package/dist/lib/long-task-stage-policy.js +67 -23
  476. package/dist/lib/long-task-state.d.ts +18 -4
  477. package/dist/lib/long-task-state.js +319 -33
  478. package/dist/lib/long-task-static-observation-freeze.js +4 -3
  479. package/dist/lib/long-task-status-projection.d.ts +3 -1
  480. package/dist/lib/long-task-status-projection.js +44 -13
  481. package/dist/lib/long-task-status-v2.d.ts +10 -6
  482. package/dist/lib/long-task-status-v2.js +70 -58
  483. package/dist/lib/long-task-target-policy.d.ts +8 -3
  484. package/dist/lib/long-task-target-policy.js +40 -9
  485. package/dist/lib/long-task-terminal-finalization.d.ts +12 -0
  486. package/dist/lib/long-task-terminal-finalization.js +190 -0
  487. package/dist/lib/long-task-ui-design-policy.js +15 -4
  488. package/dist/lib/long-task-ui-surface-policy.d.ts +2 -1
  489. package/dist/lib/long-task-ui-surface-policy.js +7 -4
  490. package/dist/lib/long-task-ui-surface-validation.d.ts +3 -1
  491. package/dist/lib/long-task-ui-surface-validation.js +2 -2
  492. package/dist/lib/long-task-verifier-counterfactuals.d.ts +11 -0
  493. package/dist/lib/long-task-verifier-counterfactuals.js +96 -0
  494. package/dist/lib/long-task-verifier-execution.d.ts +9 -0
  495. package/dist/lib/long-task-verifier-execution.js +67 -0
  496. package/dist/lib/long-task-verifier-identity.js +16 -5
  497. package/dist/lib/long-task-verifier-v2.js +52 -65
  498. package/dist/lib/long-task-windows-job-supervisor-helper.d.ts +1 -0
  499. package/dist/lib/long-task-windows-job-supervisor-helper.js +104 -0
  500. package/dist/lib/long-task-windows-job-supervisor-protocol.d.ts +28 -0
  501. package/dist/lib/long-task-windows-job-supervisor-protocol.js +124 -0
  502. package/dist/lib/long-task-windows-job-supervisor-result.d.ts +11 -0
  503. package/dist/lib/long-task-windows-job-supervisor-result.js +152 -0
  504. package/dist/lib/long-task-windows-job-supervisor.d.ts +2 -0
  505. package/dist/lib/long-task-windows-job-supervisor.js +126 -0
  506. package/dist/lib/long-task-workspace-scope.d.ts +1 -0
  507. package/dist/lib/long-task-workspace-scope.js +4 -1
  508. package/dist/lib/long-task-workspace.d.ts +1 -0
  509. package/dist/lib/long-task-workspace.js +10 -0
  510. package/dist/lib/migrations.js +43 -2
  511. package/dist/lib/repository-path-safety.d.ts +3 -0
  512. package/dist/lib/repository-path-safety.js +39 -3
  513. package/dist/lib/semantic-fact-input-shape.d.ts +7 -2
  514. package/dist/lib/semantic-fact-input-shape.js +25 -1
  515. package/dist/lib/semantic-fact-inventory-types.d.ts +8 -2
  516. package/dist/lib/semantic-fact-policy-census.d.ts +1 -1
  517. package/dist/lib/semantic-fact-policy-census.js +5 -2
  518. package/dist/lib/semantic-fact-policy.d.ts +1 -1
  519. package/dist/lib/semantic-fact-policy.js +2 -2
  520. package/dist/lib/semantic-fact-proof-shape.d.ts +1 -1
  521. package/dist/lib/semantic-fact-property-shape.d.ts +1 -1
  522. package/dist/lib/validators.d.ts +3 -0
  523. package/dist/lib/validators.js +45 -157
  524. package/dist/public-api-core.d.ts +12 -0
  525. package/dist/public-api-core.js +12 -0
  526. package/dist/public-api-long-task.d.ts +10 -0
  527. package/dist/public-api-long-task.js +10 -0
  528. package/dist/public-types.d.ts +6 -1
  529. package/dist/schemas/design-authority-delta-assessment-v1.schema.json +191 -0
  530. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +166 -2
  531. package/dist/schemas/long-task-external-confirmation-record-v1.schema.json +155 -0
  532. package/dist/schemas/long-task-external-confirmation-record-v2.schema.json +209 -0
  533. package/migrations/README.md +99 -0
  534. package/package.json +7 -5
  535. package/source-mappings.yaml +18 -0
@@ -0,0 +1,21 @@
1
+ export function renderContextRegisterText(result) {
2
+ const lines = [
3
+ `Context register ${result.applied ? "committed" : "dry-run"}`,
4
+ `Path: ${result.path}`,
5
+ `Role: ${result.role}`,
6
+ `Read policy: ${result.read_policy}`,
7
+ `Manifest: ${result.manifest.before_sha256} -> ${result.manifest.after_sha256} (${signed(result.manifest.bytes_delta)} bytes)`,
8
+ `Default footprint: ${result.default_footprint.before.path_count}/${result.default_footprint.before.bytes} -> ${result.default_footprint.after.path_count}/${result.default_footprint.after.bytes}`,
9
+ `Transaction: ${result.transaction.id} (${result.transaction.state})`,
10
+ "",
11
+ result.manifest.diff.trimEnd(),
12
+ ];
13
+ for (const diagnostic of result.diagnostics)
14
+ lines.push(`warning: ${diagnostic}`);
15
+ if (!result.applied)
16
+ lines.push("", "No files changed. Re-run with --apply to commit this exact plan after a fresh CAS check.");
17
+ return `${lines.join("\n")}\n`;
18
+ }
19
+ function signed(value) {
20
+ return value >= 0 ? `+${value}` : String(value);
21
+ }
@@ -0,0 +1,6 @@
1
+ import type { CatalogFile, ContextCatalog } from "../context-catalog/catalog-types.js";
2
+ import type { NormalizedRegisterInput } from "./context-register-input.js";
3
+ export declare function assertRegistrationTarget(catalog: ContextCatalog, contextPath: string): CatalogFile;
4
+ export declare function assertStagedRegistration(catalog: ContextCatalog, input: NormalizedRegisterInput): void;
5
+ export declare function readContextContent(repository: string, file: CatalogFile): Promise<string>;
6
+ export declare function renderAppendDiff(file: string, block: string): string;
@@ -0,0 +1,46 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { portableContextPathCaseKey } from "../context-catalog/catalog-paths.js";
3
+ import { decodeMutationUtf8, mutationCatalogFailure, mutationIoFailure, mutationMessage, } from "../context-mutation/mutation-command-support.js";
4
+ import { assertProtectedRepositoryFile } from "../repository-path-safety.js";
5
+ export function assertRegistrationTarget(catalog, contextPath) {
6
+ const folded = portableContextPathCaseKey(contextPath);
7
+ const registered = catalog.registered_contexts.find((entry) => portableContextPathCaseKey(entry.path) === folded);
8
+ if (registered)
9
+ mutationCatalogFailure(`Context is already registered as ${registered.path}`);
10
+ const file = catalog.unregistered_context_files.find((entry) => portableContextPathCaseKey(entry.path) === folded);
11
+ if (!file)
12
+ mutationIoFailure(`context register requires an existing unregistered file: ${contextPath}`);
13
+ if (file.path !== contextPath)
14
+ mutationIoFailure(`context register path case does not match existing file: ${file.path}`);
15
+ return file;
16
+ }
17
+ export function assertStagedRegistration(catalog, input) {
18
+ const matches = catalog.registered_contexts.filter((entry) => entry.source === "context" && entry.path === input.path);
19
+ if (matches.length !== 1)
20
+ mutationCatalogFailure("staged registration is not unique");
21
+ if (matches[0].role !== input.role ||
22
+ matches[0].read_policy !== input.read_policy)
23
+ mutationCatalogFailure("staged registration metadata does not match the request");
24
+ }
25
+ export async function readContextContent(repository, file) {
26
+ try {
27
+ const absolute = await assertProtectedRepositoryFile(repository, file.absolute_path, "context_register_source");
28
+ return decodeMutationUtf8(await readFile(absolute), file.path);
29
+ }
30
+ catch (error) {
31
+ mutationIoFailure(`unable to read Context registration source: ${mutationMessage(error)}`, error);
32
+ }
33
+ }
34
+ export function renderAppendDiff(file, block) {
35
+ return [
36
+ `--- ${file}`,
37
+ `+++ ${file}`,
38
+ "@@ append context @@",
39
+ ...block
40
+ .replace(/\r\n/gu, "\n")
41
+ .trimEnd()
42
+ .split("\n")
43
+ .map((line) => `+${line}`),
44
+ "",
45
+ ].join("\n");
46
+ }
@@ -0,0 +1,46 @@
1
+ import type { ContextRole } from "../context-catalog/catalog-portable-contract.js";
2
+ import type { ContextFootprintState } from "../context-mutation/mutation-types.js";
3
+ export interface ContextRegisterInput {
4
+ project_root: string;
5
+ context_path: string;
6
+ role: string;
7
+ read_policy?: string;
8
+ read_when?: string;
9
+ triggers?: string[];
10
+ default_children?: string[];
11
+ apply?: boolean;
12
+ }
13
+ export interface ContextRegisterResult {
14
+ schema_version: 1;
15
+ operation: "register";
16
+ applied: boolean;
17
+ path: string;
18
+ role: ContextRole;
19
+ read_policy: "default" | "on-demand";
20
+ manifest: {
21
+ path: "project_context/context.toml";
22
+ before_sha256: string;
23
+ after_sha256: string;
24
+ before_bytes: number;
25
+ after_bytes: number;
26
+ bytes_delta: number;
27
+ diff: string;
28
+ };
29
+ default_footprint: {
30
+ changed: boolean;
31
+ before: ContextFootprintState;
32
+ after: ContextFootprintState;
33
+ added: string[];
34
+ removed: string[];
35
+ };
36
+ catalog: {
37
+ before_identity: string;
38
+ after_identity: string;
39
+ };
40
+ diagnostics: string[];
41
+ transaction: {
42
+ id: string;
43
+ state: "dry-run" | "committed";
44
+ journal_present: false;
45
+ };
46
+ }
@@ -0,0 +1,8 @@
1
+ import type { ContextMutationPlan } from "../context-mutation/mutation-types.js";
2
+ import type { ContextRegisterInput, ContextRegisterResult } from "./context-register-types.js";
3
+ export declare function registerContext(input: ContextRegisterInput): Promise<ContextRegisterResult>;
4
+ export interface PlannedContextRegistration {
5
+ plan: ContextMutationPlan;
6
+ result: ContextRegisterResult;
7
+ }
8
+ export declare function planContextRegistration(input: ContextRegisterInput): Promise<PlannedContextRegistration>;
@@ -0,0 +1,155 @@
1
+ import { appendContextManifestBlock, } from "../context-mutation/manifest-lossless-patch.js";
2
+ import { captureMutationFileState, mutationFileStateFromBytes, mutationTemporaryPath, } from "../context-mutation/mutation-cas.js";
3
+ import { executeContextMutationPlan } from "../context-mutation/mutation-commit.js";
4
+ import { assertMutationCatalogValid, assertNoUnfinishedContextMutation, decodeMutationUtf8, loadMutationCatalog, mutationCatalogFailure, mutationIoFailure, mutationMessage, mutationStateBytes, sameMutationArray, } from "../context-mutation/mutation-command-support.js";
5
+ import { contextCatalogIdentity, contextFootprintState, stagedFileOverrides, } from "../context-mutation/mutation-staged-fs.js";
6
+ import { canonicalValueJson, sha256Hex } from "../strict-codec.js";
7
+ import { CliCommandError } from "../cli-exit.js";
8
+ import { validateContextRegistrationContent } from "../validators.js";
9
+ import { normalizeContextRegisterInput } from "./context-register-input.js";
10
+ import { assertRegistrationTarget, assertStagedRegistration, readContextContent, renderAppendDiff, } from "./context-register-support.js";
11
+ const MANIFEST_PATH = "project_context/context.toml";
12
+ export async function registerContext(input) {
13
+ const planned = await planContextRegistration(input);
14
+ if (!input.apply)
15
+ return planned.result;
16
+ try {
17
+ await executeContextMutationPlan(input.project_root, planned.plan);
18
+ }
19
+ catch (error) {
20
+ if (error instanceof CliCommandError)
21
+ throw error;
22
+ mutationIoFailure(`context register transaction stopped: ${mutationMessage(error)}; inspect recovery with ty-context context transaction status`, error);
23
+ }
24
+ return {
25
+ ...planned.result,
26
+ applied: true,
27
+ transaction: {
28
+ ...planned.result.transaction,
29
+ state: "committed",
30
+ },
31
+ };
32
+ }
33
+ export async function planContextRegistration(input) {
34
+ const normalized = normalizeContextRegisterInput(input);
35
+ await assertNoUnfinishedContextMutation(input.project_root);
36
+ const beforeCatalog = await loadMutationCatalog(input.project_root);
37
+ assertMutationCatalogValid(beforeCatalog, "context register requires a valid Catalog");
38
+ const registrationFile = assertRegistrationTarget(beforeCatalog, normalized.path);
39
+ const manifestBefore = await captureMutationFileState(input.project_root, MANIFEST_PATH);
40
+ if (!manifestBefore.exists || manifestBefore.mode === null)
41
+ mutationCatalogFailure("project_context/context.toml is missing");
42
+ const manifestText = decodeMutationUtf8(mutationStateBytes(manifestBefore), MANIFEST_PATH);
43
+ if (manifestText !== beforeCatalog.manifest_content)
44
+ mutationIoFailure("Context Catalog changed while planning register");
45
+ const contextContent = await readContextContent(input.project_root, registrationFile);
46
+ const recoveryErrors = validateContextRegistrationContent(input.project_root, normalized.path, contextContent, normalized.role, normalized.read_policy);
47
+ if (recoveryErrors.length)
48
+ mutationCatalogFailure(`Context is not recoverable for registration: ${recoveryErrors.join("; ")}`);
49
+ const manifestPatchInput = {
50
+ path: normalized.path,
51
+ role: normalized.role,
52
+ read_policy: normalized.read_policy,
53
+ read_when: normalized.read_when,
54
+ triggers: normalized.triggers,
55
+ default_children: normalized.default_children,
56
+ };
57
+ let patch;
58
+ try {
59
+ patch = appendContextManifestBlock(manifestText, manifestPatchInput);
60
+ }
61
+ catch (error) {
62
+ mutationCatalogFailure(`Manifest cannot be patched losslessly: ${mutationMessage(error)}`, error);
63
+ }
64
+ const afterBytes = Buffer.from(patch.content, "utf8");
65
+ const overrides = stagedFileOverrides([[MANIFEST_PATH, afterBytes]]);
66
+ const afterCatalog = await loadMutationCatalog(input.project_root, overrides);
67
+ assertMutationCatalogValid(afterCatalog, "staged Context registration is invalid");
68
+ assertStagedRegistration(afterCatalog, normalized);
69
+ const beforeFootprint = contextFootprintState(beforeCatalog);
70
+ const afterFootprint = contextFootprintState(afterCatalog);
71
+ const afterState = mutationFileStateFromBytes(afterBytes, manifestBefore.mode);
72
+ const operationData = {
73
+ kind: "register",
74
+ context_path: normalized.path,
75
+ role: normalized.role,
76
+ read_policy: normalized.read_policy,
77
+ expected_default_paths: afterFootprint.paths,
78
+ expected_default_bytes: afterFootprint.bytes,
79
+ };
80
+ const catalogBeforeIdentity = contextCatalogIdentity(beforeCatalog);
81
+ const catalogAfterIdentity = contextCatalogIdentity(afterCatalog);
82
+ const transactionId = sha256Hex(canonicalValueJson({
83
+ operation: "register",
84
+ catalog_before_identity: catalogBeforeIdentity,
85
+ catalog_after_identity: catalogAfterIdentity,
86
+ file: {
87
+ path: MANIFEST_PATH,
88
+ before_sha256: manifestBefore.sha256,
89
+ after_sha256: afterState.sha256,
90
+ mode: manifestBefore.mode,
91
+ },
92
+ operation_data: operationData,
93
+ }));
94
+ const plan = {
95
+ transaction_id: transactionId,
96
+ operation: "register",
97
+ catalog_before_identity: catalogBeforeIdentity,
98
+ catalog_after_identity: catalogAfterIdentity,
99
+ directories: [],
100
+ files: [
101
+ {
102
+ path: MANIFEST_PATH,
103
+ physical_path: MANIFEST_PATH,
104
+ before: manifestBefore,
105
+ after: afterState,
106
+ commit_order: 0,
107
+ temporary_path: mutationTemporaryPath(MANIFEST_PATH, transactionId, 0),
108
+ temporary_state: null,
109
+ published_before: null,
110
+ published_after: null,
111
+ },
112
+ ],
113
+ operation_data: operationData,
114
+ };
115
+ return {
116
+ plan,
117
+ result: {
118
+ schema_version: 1,
119
+ operation: "register",
120
+ applied: false,
121
+ path: normalized.path,
122
+ role: normalized.role,
123
+ read_policy: normalized.read_policy,
124
+ manifest: {
125
+ path: MANIFEST_PATH,
126
+ before_sha256: manifestBefore.sha256,
127
+ after_sha256: afterState.sha256,
128
+ before_bytes: mutationStateBytes(manifestBefore).length,
129
+ after_bytes: afterBytes.length,
130
+ bytes_delta: afterBytes.length - mutationStateBytes(manifestBefore).length,
131
+ diff: renderAppendDiff(MANIFEST_PATH, patch.inserted_block),
132
+ },
133
+ default_footprint: {
134
+ changed: beforeFootprint.bytes !== afterFootprint.bytes ||
135
+ !sameMutationArray(beforeFootprint.paths, afterFootprint.paths),
136
+ before: beforeFootprint,
137
+ after: afterFootprint,
138
+ added: afterFootprint.paths.filter((file) => !beforeFootprint.paths.includes(file)),
139
+ removed: beforeFootprint.paths.filter((file) => !afterFootprint.paths.includes(file)),
140
+ },
141
+ catalog: {
142
+ before_identity: catalogBeforeIdentity,
143
+ after_identity: catalogAfterIdentity,
144
+ },
145
+ diagnostics: afterCatalog.diagnostics
146
+ .filter((entry) => entry.severity === "warning")
147
+ .map((entry) => entry.message),
148
+ transaction: {
149
+ id: transactionId,
150
+ state: "dry-run",
151
+ journal_present: false,
152
+ },
153
+ },
154
+ };
155
+ }
@@ -0,0 +1,15 @@
1
+ export declare const CONTEXT_ROUTE_SCHEMA_VERSION = 1;
2
+ export declare const CONTEXT_ROUTE_BUDGETS: Readonly<{
3
+ readonly task_utf8_bytes: number;
4
+ readonly automatic_terms: 32;
5
+ readonly explicit_terms: 32;
6
+ readonly automatic_term_min_code_points: 2;
7
+ readonly explicit_term_min_code_points: 1;
8
+ readonly term_max_code_points: 128;
9
+ readonly candidate_files: 4096;
10
+ readonly per_file_scan_bytes: number;
11
+ readonly aggregate_scan_bytes: number;
12
+ readonly output_matches: 200;
13
+ readonly per_file_output_matches: 20;
14
+ }>;
15
+ export type ContextRouteBudgetName = keyof typeof CONTEXT_ROUTE_BUDGETS;
@@ -0,0 +1,14 @@
1
+ export const CONTEXT_ROUTE_SCHEMA_VERSION = 1;
2
+ export const CONTEXT_ROUTE_BUDGETS = Object.freeze({
3
+ task_utf8_bytes: 8 * 1024,
4
+ automatic_terms: 32,
5
+ explicit_terms: 32,
6
+ automatic_term_min_code_points: 2,
7
+ explicit_term_min_code_points: 1,
8
+ term_max_code_points: 128,
9
+ candidate_files: 4096,
10
+ per_file_scan_bytes: 1024 * 1024,
11
+ aggregate_scan_bytes: 32 * 1024 * 1024,
12
+ output_matches: 200,
13
+ per_file_output_matches: 20,
14
+ });
@@ -0,0 +1,15 @@
1
+ import type { CatalogFile, CatalogRegisteredContext, ContextCatalog } from "../context-catalog/catalog-types.js";
2
+ import type { ContextRouteBudgetExceeded, ContextRouteCandidate, ContextRouteDefaultEntry, ContextRouteGroup, ContextRouteReason, ContextRouteResult } from "./context-route-types.js";
3
+ export interface MutableCandidate extends Omit<ContextRouteCandidate, "cumulative_bytes"> {
4
+ group_set: Set<ContextRouteGroup>;
5
+ reason_keys: Set<string>;
6
+ }
7
+ export declare function addReason(candidates: Map<string, MutableCandidate>, catalog: ContextCatalog, filesByPath: Map<string, CatalogFile>, registeredByPath: Map<string, CatalogRegisteredContext>, contextPath: string, reason: ContextRouteReason, group?: ContextRouteGroup, matchedPath?: string): MutableCandidate;
8
+ export declare function projectCandidates(values: MutableCandidate[]): ContextRouteCandidate[];
9
+ export declare function defaultEntries(catalog: ContextCatalog): ContextRouteDefaultEntry[];
10
+ export declare function emptyResult(input: {
11
+ catalog: ContextCatalog;
12
+ caseSensitive: boolean;
13
+ defaultContext: ContextRouteDefaultEntry[];
14
+ exceeded: ContextRouteBudgetExceeded[];
15
+ }): ContextRouteResult;
@@ -0,0 +1,112 @@
1
+ import { compareUtf8Paths } from "../context-catalog/catalog-paths.js";
2
+ import { CONTEXT_LEGACY_READ_POLICY_SET } from "../context-catalog/catalog-portable-contract.js";
3
+ import { CONTEXT_ROUTE_SCHEMA_VERSION } from "./context-route-budget.js";
4
+ import { compareRouteReasons, sortRouteGroups, stableRouteBudgetExceeded, } from "./context-route-order.js";
5
+ export function addReason(candidates, catalog, filesByPath, registeredByPath, contextPath, reason, group, matchedPath) {
6
+ const registered = registeredByPath.get(contextPath);
7
+ const file = filesByPath.get(contextPath);
8
+ const current = candidates.get(contextPath) ??
9
+ createCandidate(catalog, registered, file, contextPath);
10
+ if (group)
11
+ current.group_set.add(group);
12
+ if (matchedPath && !current.matched_paths.includes(matchedPath))
13
+ current.matched_paths.push(matchedPath);
14
+ const reasonKey = `${reason.kind}\0${reason.input}\0${reason.detail}`;
15
+ if (!current.reason_keys.has(reasonKey)) {
16
+ current.reason_keys.add(reasonKey);
17
+ current.reasons.push(reason);
18
+ }
19
+ candidates.set(contextPath, current);
20
+ return current;
21
+ }
22
+ export function projectCandidates(values) {
23
+ const result = [...values].sort((left, right) => compareUtf8Paths(left.path, right.path));
24
+ let cumulative = 0;
25
+ return result.map(({ group_set, reason_keys: _reasonKeys, ...entry }) => {
26
+ cumulative += entry.bytes;
27
+ return {
28
+ ...entry,
29
+ groups: sortRouteGroups(group_set),
30
+ reasons: [...entry.reasons].sort(compareRouteReasons),
31
+ matched_paths: [...entry.matched_paths].sort(compareUtf8Paths),
32
+ cumulative_bytes: cumulative,
33
+ };
34
+ });
35
+ }
36
+ export function defaultEntries(catalog) {
37
+ const files = new Map(catalog.context_files.map((entry) => [entry.path, entry]));
38
+ const values = [...catalog.default_footprint.entries()].sort(([left], [right]) => compareUtf8Paths(left, right));
39
+ let cumulative = 0;
40
+ return values.map(([contextPath, reasons]) => {
41
+ const bytes = contextPath === catalog.manifest_path
42
+ ? Buffer.byteLength(catalog.manifest_content ?? "", "utf8")
43
+ : (files.get(contextPath)?.bytes ?? 0);
44
+ cumulative += bytes;
45
+ return {
46
+ path: contextPath,
47
+ reasons: [...reasons].sort(compareUtf8Paths),
48
+ bytes,
49
+ cumulative_bytes: cumulative,
50
+ };
51
+ });
52
+ }
53
+ export function emptyResult(input) {
54
+ return {
55
+ schema_version: CONTEXT_ROUTE_SCHEMA_VERSION,
56
+ complete: false,
57
+ catalog_valid: false,
58
+ experimental: true,
59
+ authority: false,
60
+ workflow_search_replaced: false,
61
+ matching: {
62
+ literal: true,
63
+ unicode_normalization: "NFC",
64
+ case_sensitive: input.caseSensitive,
65
+ },
66
+ scan: {
67
+ files_considered: input.catalog.context_files.length,
68
+ files_scanned: 0,
69
+ bytes_scanned: 0,
70
+ budget_exceeded: input.exceeded.length > 0,
71
+ exceeded: stableRouteBudgetExceeded(input.exceeded),
72
+ },
73
+ output_truncated: false,
74
+ default_context: input.defaultContext,
75
+ candidates: [],
76
+ unregistered_matches: [],
77
+ ambiguous: [],
78
+ unresolved: [],
79
+ diagnostics: input.catalog.diagnostics,
80
+ };
81
+ }
82
+ function createCandidate(catalog, registered, file, contextPath) {
83
+ const groups = classificationGroups(catalog, registered, contextPath);
84
+ const unregistered = catalog.unregistered_context_files.some((entry) => entry.path === contextPath);
85
+ return {
86
+ path: contextPath,
87
+ registration: unregistered ? "unregistered" : "registered",
88
+ role: registered?.role ?? null,
89
+ read_policy: registered?.read_policy ?? null,
90
+ groups,
91
+ group_set: new Set(groups),
92
+ reasons: [],
93
+ reason_keys: new Set(),
94
+ matched_terms: [],
95
+ matched_paths: [],
96
+ matches: [],
97
+ bytes: file?.bytes ?? 0,
98
+ };
99
+ }
100
+ function classificationGroups(catalog, registered, contextPath) {
101
+ if (catalog.unregistered_context_files.some((entry) => entry.path === contextPath))
102
+ return ["unregistered"];
103
+ const groups = [];
104
+ if (catalog.default_footprint.has(contextPath))
105
+ groups.push("default_registered");
106
+ if (registered?.read_policy &&
107
+ CONTEXT_LEGACY_READ_POLICY_SET.has(registered.read_policy))
108
+ groups.push("legacy_registered");
109
+ else if (!catalog.default_footprint.has(contextPath))
110
+ groups.push("on_demand_registered");
111
+ return groups;
112
+ }
@@ -0,0 +1,6 @@
1
+ import type { ContextRouteAmbiguity, ContextRouteBudgetExceeded, ContextRouteGroup, ContextRouteReason, ContextRouteUnresolved } from "./context-route-types.js";
2
+ export declare function compareRouteReasons(left: ContextRouteReason, right: ContextRouteReason): number;
3
+ export declare function sortRouteGroups(groups: Iterable<ContextRouteGroup>): ContextRouteGroup[];
4
+ export declare function stableRouteBudgetExceeded(values: readonly ContextRouteBudgetExceeded[]): ContextRouteBudgetExceeded[];
5
+ export declare function compareRouteAmbiguities(left: ContextRouteAmbiguity, right: ContextRouteAmbiguity): number;
6
+ export declare function compareRouteUnresolved(left: ContextRouteUnresolved, right: ContextRouteUnresolved): number;
@@ -0,0 +1,53 @@
1
+ import { compareUtf8Paths, normalizeContextPath, } from "../context-catalog/catalog-paths.js";
2
+ export function compareRouteReasons(left, right) {
3
+ return (compareUtf8Paths(left.kind, right.kind) ||
4
+ compareUtf8Paths(left.input, right.input) ||
5
+ compareUtf8Paths(left.detail, right.detail));
6
+ }
7
+ export function sortRouteGroups(groups) {
8
+ return [...groups].sort(compareUtf8Paths);
9
+ }
10
+ export function stableRouteBudgetExceeded(values) {
11
+ const merged = new Map();
12
+ for (const entry of values) {
13
+ const normalized = {
14
+ ...entry,
15
+ ...(entry.path ? { path: normalizeContextPath(entry.path) } : {}),
16
+ };
17
+ const key = `${normalized.budget}\0${normalized.path ?? ""}`;
18
+ const current = merged.get(key);
19
+ merged.set(key, current
20
+ ? {
21
+ ...normalized,
22
+ limit: Math.min(current.limit, normalized.limit),
23
+ observed: Math.max(current.observed, normalized.observed),
24
+ }
25
+ : normalized);
26
+ }
27
+ return [...merged.values()].sort((left, right) => compareUtf8Paths(left.budget, right.budget) ||
28
+ compareUtf8Paths(left.path ?? "", right.path ?? "") ||
29
+ left.limit - right.limit ||
30
+ left.observed - right.observed);
31
+ }
32
+ export function compareRouteAmbiguities(left, right) {
33
+ return (compareUtf8Paths(left.kind, right.kind) ||
34
+ compareUtf8Paths(left.input, right.input) ||
35
+ compareAreaCandidateLists(left.candidates, right.candidates) ||
36
+ compareUtf8Paths(left.reason, right.reason));
37
+ }
38
+ export function compareRouteUnresolved(left, right) {
39
+ return (compareUtf8Paths(left.kind, right.kind) ||
40
+ compareUtf8Paths(left.input, right.input) ||
41
+ compareUtf8Paths(left.reason, right.reason));
42
+ }
43
+ function compareAreaCandidateLists(left, right) {
44
+ const length = Math.min(left.length, right.length);
45
+ for (let index = 0; index < length; index += 1) {
46
+ const comparison = compareUtf8Paths(left[index].root, right[index].root) ||
47
+ compareUtf8Paths(left[index].id, right[index].id) ||
48
+ compareUtf8Paths(left[index].context, right[index].context);
49
+ if (comparison !== 0)
50
+ return comparison;
51
+ }
52
+ return left.length - right.length;
53
+ }
@@ -0,0 +1,16 @@
1
+ import type { CatalogFile, ContextCatalog } from "../context-catalog/catalog-types.js";
2
+ import type { ContextRouteAmbiguity, ContextRouteAreaCandidate, ContextRouteUnresolved } from "./context-route-types.js";
3
+ export interface ContextRoutePathMatch {
4
+ input: string;
5
+ normalized_path: string;
6
+ area: ContextRouteAreaCandidate;
7
+ }
8
+ export interface ContextRoutePathResult {
9
+ matches: ContextRoutePathMatch[];
10
+ ambiguous: ContextRouteAmbiguity[];
11
+ unresolved: ContextRouteUnresolved[];
12
+ }
13
+ export declare function matchContextAreas(catalog: ContextCatalog, inputs: string[]): ContextRoutePathResult;
14
+ export declare function resolveManualIncludes(catalog: ContextCatalog, inputs: string[]): Promise<CatalogFile[]>;
15
+ export declare function normalizeRepositoryInput(value: string, flag: string): string;
16
+ export declare function normalizeRepositoryInputs(values: readonly string[], flag: string): string[];
@@ -0,0 +1,109 @@
1
+ import { lstat, realpath } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { CLI_EXIT_CODES, CliCommandError } from "../cli-exit.js";
4
+ import { compareUtf8Paths, isPathWithin, normalizeContextPath, resolveProjectPath, } from "../context-catalog/catalog-paths.js";
5
+ import { compareRouteAmbiguities, compareRouteUnresolved, } from "./context-route-order.js";
6
+ export function matchContextAreas(catalog, inputs) {
7
+ const matches = [];
8
+ const ambiguous = [];
9
+ const unresolved = [];
10
+ for (const normalized of normalizeRepositoryInputs(inputs, "--path")) {
11
+ const candidates = catalog.areas
12
+ .map((area) => ({
13
+ id: area.id.normalize("NFC"),
14
+ root: normalizeAreaRoot(area.root),
15
+ context: normalizeContextPath(area.context),
16
+ }))
17
+ .filter((area) => areaContains(area.root, normalized));
18
+ if (candidates.length === 0) {
19
+ unresolved.push({
20
+ kind: "path",
21
+ input: normalized,
22
+ reason: "no Area root contains the repository-relative path",
23
+ });
24
+ continue;
25
+ }
26
+ const maximum = Math.max(...candidates.map(areaScore));
27
+ const deepest = candidates
28
+ .filter((area) => areaScore(area) === maximum)
29
+ .sort((left, right) => compareUtf8Paths(`${left.root}\0${left.id}\0${left.context}`, `${right.root}\0${right.id}\0${right.context}`));
30
+ if (deepest.length > 1) {
31
+ ambiguous.push({
32
+ kind: "area_path",
33
+ input: normalized,
34
+ candidates: deepest,
35
+ reason: "multiple Area roots tie at the deepest matching root",
36
+ });
37
+ continue;
38
+ }
39
+ matches.push({
40
+ input: normalized,
41
+ normalized_path: normalized,
42
+ area: deepest[0],
43
+ });
44
+ }
45
+ return {
46
+ matches: matches.sort(comparePathMatches),
47
+ ambiguous: ambiguous.sort(compareRouteAmbiguities),
48
+ unresolved: unresolved.sort(compareRouteUnresolved),
49
+ };
50
+ }
51
+ export async function resolveManualIncludes(catalog, inputs) {
52
+ const files = new Map(catalog.context_files.map((file) => [file.path, file]));
53
+ const contextRoot = resolveProjectPath(catalog.project_root, "project_context");
54
+ const realContextRoot = await realpath(contextRoot);
55
+ const result = new Map();
56
+ for (const normalized of normalizeRepositoryInputs(inputs, "--include")) {
57
+ if (!normalized.startsWith("project_context/") ||
58
+ !normalized.endsWith(".md"))
59
+ throw new CliCommandError(CLI_EXIT_CODES.io, `route include must name an existing Markdown file under project_context/: ${normalized}`);
60
+ const file = files.get(normalized);
61
+ if (!file)
62
+ throw new CliCommandError(CLI_EXIT_CODES.io, `route include is missing or is not an eligible Context file: ${normalized}`);
63
+ const metadata = await lstat(file.absolute_path);
64
+ if (!metadata.isFile() || metadata.isSymbolicLink())
65
+ throw new CliCommandError(CLI_EXIT_CODES.io, `route include must be a regular no-follow file: ${normalized}`);
66
+ const identity = await realpath(file.absolute_path);
67
+ if (!isPathWithin(realContextRoot, identity))
68
+ throw new CliCommandError(CLI_EXIT_CODES.io, `route include resolves outside project_context/: ${normalized}`);
69
+ result.set(normalized, file);
70
+ }
71
+ return [...result.values()].sort((left, right) => compareUtf8Paths(left.path, right.path));
72
+ }
73
+ export function normalizeRepositoryInput(value, flag) {
74
+ const normalized = normalizeContextPath(value.trim());
75
+ if (!normalized)
76
+ throw new CliCommandError(CLI_EXIT_CODES.arguments, `route ${flag} requires a non-empty repository-relative path`);
77
+ if (path.posix.isAbsolute(normalized) ||
78
+ path.win32.isAbsolute(normalized) ||
79
+ normalized.split("/").includes("..") ||
80
+ /^[A-Za-z]:/u.test(normalized))
81
+ throw new CliCommandError(CLI_EXIT_CODES.io, `route ${flag} path must stay repository-relative: ${value}`);
82
+ return normalized;
83
+ }
84
+ export function normalizeRepositoryInputs(values, flag) {
85
+ return [
86
+ ...new Set(values.map((value) => normalizeRepositoryInput(value, flag))),
87
+ ].sort(compareUtf8Paths);
88
+ }
89
+ function normalizeAreaRoot(value) {
90
+ const normalized = normalizeContextPath(value.trim());
91
+ return normalized === "" || normalized === "."
92
+ ? "."
93
+ : normalized.replace(/\/$/u, "");
94
+ }
95
+ function comparePathMatches(left, right) {
96
+ return (compareUtf8Paths(left.normalized_path, right.normalized_path) ||
97
+ compareUtf8Paths(left.area.root, right.area.root) ||
98
+ compareUtf8Paths(left.area.id, right.area.id) ||
99
+ compareUtf8Paths(left.area.context, right.area.context));
100
+ }
101
+ function areaContains(root, candidate) {
102
+ return root === "." || candidate === root || candidate.startsWith(`${root}/`);
103
+ }
104
+ function areaScore(area) {
105
+ if (area.root === ".")
106
+ return 0;
107
+ const depth = area.root.split("/").length;
108
+ return depth * 1_000_000 + Buffer.byteLength(area.root, "utf8");
109
+ }
@@ -0,0 +1,2 @@
1
+ import type { ContextRouteResult } from "./context-route-types.js";
2
+ export declare function renderContextRouteText(result: ContextRouteResult, explain: boolean): string;