@blxzer/pactile 0.5.0 → 0.6.0-beta.2

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 (917) hide show
  1. package/CHANGELOG.md +612 -563
  2. package/LICENSE +235 -235
  3. package/README.md +108 -105
  4. package/README.zh-CN.md +105 -105
  5. package/bin/compat-warning.js +11 -11
  6. package/bin/cstl.js +6 -6
  7. package/bin/pactile.js +3 -3
  8. package/bin/smart-search.js +38 -38
  9. package/dist/cli/index.d.ts.map +1 -1
  10. package/dist/cli/index.js +79 -30
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/commands/codex.d.ts +3 -0
  13. package/dist/commands/codex.d.ts.map +1 -0
  14. package/dist/commands/codex.js +54 -0
  15. package/dist/commands/codex.js.map +1 -0
  16. package/dist/commands/context.d.ts +3 -0
  17. package/dist/commands/context.d.ts.map +1 -0
  18. package/dist/commands/context.js +272 -0
  19. package/dist/commands/context.js.map +1 -0
  20. package/dist/commands/init.d.ts +0 -20
  21. package/dist/commands/init.d.ts.map +1 -1
  22. package/dist/commands/init.js +285 -456
  23. package/dist/commands/init.js.map +1 -1
  24. package/dist/commands/migrate.js +1 -1
  25. package/dist/commands/migrate.js.map +1 -1
  26. package/dist/commands/parallel.d.ts +2 -0
  27. package/dist/commands/parallel.d.ts.map +1 -0
  28. package/dist/commands/parallel.js +26 -0
  29. package/dist/commands/parallel.js.map +1 -0
  30. package/dist/commands/pi.d.ts +3 -0
  31. package/dist/commands/pi.d.ts.map +1 -0
  32. package/dist/commands/pi.js +94 -0
  33. package/dist/commands/pi.js.map +1 -0
  34. package/dist/commands/session.d.ts +2 -0
  35. package/dist/commands/session.d.ts.map +1 -0
  36. package/dist/commands/session.js +169 -0
  37. package/dist/commands/session.js.map +1 -0
  38. package/dist/commands/task.d.ts +3 -0
  39. package/dist/commands/task.d.ts.map +1 -0
  40. package/dist/commands/task.js +1026 -0
  41. package/dist/commands/task.js.map +1 -0
  42. package/dist/commands/update.d.ts +3 -1
  43. package/dist/commands/update.d.ts.map +1 -1
  44. package/dist/commands/update.js +130 -47
  45. package/dist/commands/update.js.map +1 -1
  46. package/dist/commands/workflow.d.ts.map +1 -1
  47. package/dist/commands/workflow.js +1 -2
  48. package/dist/commands/workflow.js.map +1 -1
  49. package/dist/configurators/index.d.ts +5 -51
  50. package/dist/configurators/index.d.ts.map +1 -1
  51. package/dist/configurators/index.js +9 -140
  52. package/dist/configurators/index.js.map +1 -1
  53. package/dist/configurators/shared.d.ts +7 -66
  54. package/dist/configurators/shared.d.ts.map +1 -1
  55. package/dist/configurators/shared.js +17 -262
  56. package/dist/configurators/shared.js.map +1 -1
  57. package/dist/configurators/workflow.d.ts +5 -6
  58. package/dist/configurators/workflow.d.ts.map +1 -1
  59. package/dist/configurators/workflow.js +11 -39
  60. package/dist/configurators/workflow.js.map +1 -1
  61. package/dist/constants/paths.d.ts +1 -5
  62. package/dist/constants/paths.d.ts.map +1 -1
  63. package/dist/constants/paths.js +1 -5
  64. package/dist/constants/paths.js.map +1 -1
  65. package/dist/core/compat/environment.d.ts +43 -0
  66. package/dist/core/compat/environment.d.ts.map +1 -0
  67. package/dist/core/compat/environment.js +91 -0
  68. package/dist/core/compat/environment.js.map +1 -0
  69. package/dist/core/compat/index.d.ts +2 -0
  70. package/dist/core/compat/index.d.ts.map +1 -0
  71. package/dist/core/compat/index.js +2 -0
  72. package/dist/core/compat/index.js.map +1 -0
  73. package/dist/core/index.d.ts +4 -0
  74. package/dist/core/index.d.ts.map +1 -0
  75. package/dist/core/index.js +6 -0
  76. package/dist/core/index.js.map +1 -0
  77. package/dist/core/pactile/capability.d.ts +65 -0
  78. package/dist/core/pactile/capability.d.ts.map +1 -0
  79. package/dist/core/pactile/capability.js +199 -0
  80. package/dist/core/pactile/capability.js.map +1 -0
  81. package/dist/core/pactile/index.d.ts +15 -0
  82. package/dist/core/pactile/index.d.ts.map +1 -0
  83. package/dist/core/pactile/index.js +13 -0
  84. package/dist/core/pactile/index.js.map +1 -0
  85. package/dist/core/pactile/lifecycle.d.ts +106 -0
  86. package/dist/core/pactile/lifecycle.d.ts.map +1 -0
  87. package/dist/core/pactile/lifecycle.js +607 -0
  88. package/dist/core/pactile/lifecycle.js.map +1 -0
  89. package/dist/core/pactile/middleware/index.d.ts +3 -0
  90. package/dist/core/pactile/middleware/index.d.ts.map +1 -0
  91. package/dist/core/pactile/middleware/index.js +2 -0
  92. package/dist/core/pactile/middleware/index.js.map +1 -0
  93. package/dist/core/pactile/middleware/redaction.d.ts +4 -0
  94. package/dist/core/pactile/middleware/redaction.d.ts.map +1 -0
  95. package/dist/core/pactile/middleware/redaction.js +34 -0
  96. package/dist/core/pactile/middleware/redaction.js.map +1 -0
  97. package/dist/core/pactile/middleware/resolver.d.ts +62 -0
  98. package/dist/core/pactile/middleware/resolver.d.ts.map +1 -0
  99. package/dist/core/pactile/middleware/resolver.js +803 -0
  100. package/dist/core/pactile/middleware/resolver.js.map +1 -0
  101. package/dist/core/pactile/projection.d.ts +81 -0
  102. package/dist/core/pactile/projection.d.ts.map +1 -0
  103. package/dist/core/pactile/projection.js +399 -0
  104. package/dist/core/pactile/projection.js.map +1 -0
  105. package/dist/core/pactile/provider.d.ts +81 -0
  106. package/dist/core/pactile/provider.d.ts.map +1 -0
  107. package/dist/core/pactile/provider.js +313 -0
  108. package/dist/core/pactile/provider.js.map +1 -0
  109. package/dist/core/pactile/runtime.d.ts +56 -0
  110. package/dist/core/pactile/runtime.d.ts.map +1 -0
  111. package/dist/core/pactile/runtime.js +176 -0
  112. package/dist/core/pactile/runtime.js.map +1 -0
  113. package/dist/core/pactile/tile-compiler-types.d.ts +32 -0
  114. package/dist/core/pactile/tile-compiler-types.d.ts.map +1 -0
  115. package/dist/core/pactile/tile-compiler-types.js +2 -0
  116. package/dist/core/pactile/tile-compiler-types.js.map +1 -0
  117. package/dist/core/pactile/tile.d.ts +71 -0
  118. package/dist/core/pactile/tile.d.ts.map +1 -0
  119. package/dist/core/pactile/tile.js +228 -0
  120. package/dist/core/pactile/tile.js.map +1 -0
  121. package/dist/core/pactile/trace-runtime/index.d.ts +38 -0
  122. package/dist/core/pactile/trace-runtime/index.d.ts.map +1 -0
  123. package/dist/core/pactile/trace-runtime/index.js +292 -0
  124. package/dist/core/pactile/trace-runtime/index.js.map +1 -0
  125. package/dist/core/pactile/trace.d.ts +42 -0
  126. package/dist/core/pactile/trace.d.ts.map +1 -0
  127. package/dist/core/pactile/trace.js +221 -0
  128. package/dist/core/pactile/trace.js.map +1 -0
  129. package/dist/core/pactile/validation.d.ts +91 -0
  130. package/dist/core/pactile/validation.d.ts.map +1 -0
  131. package/dist/core/pactile/validation.js +301 -0
  132. package/dist/core/pactile/validation.js.map +1 -0
  133. package/dist/core/task/adapter-middleware.d.ts +122 -0
  134. package/dist/core/task/adapter-middleware.d.ts.map +1 -0
  135. package/dist/core/task/adapter-middleware.js +476 -0
  136. package/dist/core/task/adapter-middleware.js.map +1 -0
  137. package/dist/core/task/compat.d.ts +7 -0
  138. package/dist/core/task/compat.d.ts.map +1 -0
  139. package/dist/core/task/compat.js +2 -0
  140. package/dist/core/task/compat.js.map +1 -0
  141. package/dist/core/task/contract-migrate.d.ts +29 -0
  142. package/dist/core/task/contract-migrate.d.ts.map +1 -0
  143. package/dist/core/task/contract-migrate.js +207 -0
  144. package/dist/core/task/contract-migrate.js.map +1 -0
  145. package/dist/core/task/full-quality.d.ts +89 -0
  146. package/dist/core/task/full-quality.d.ts.map +1 -0
  147. package/dist/core/task/full-quality.js +379 -0
  148. package/dist/core/task/full-quality.js.map +1 -0
  149. package/dist/core/task/index.d.ts +32 -0
  150. package/dist/core/task/index.d.ts.map +1 -0
  151. package/dist/core/task/index.js +20 -0
  152. package/dist/core/task/index.js.map +1 -0
  153. package/dist/core/task/kernel-cli.d.ts +51 -0
  154. package/dist/core/task/kernel-cli.d.ts.map +1 -0
  155. package/dist/core/task/kernel-cli.js +301 -0
  156. package/dist/core/task/kernel-cli.js.map +1 -0
  157. package/dist/core/task/kernel-contract.d.ts +164 -0
  158. package/dist/core/task/kernel-contract.d.ts.map +1 -0
  159. package/dist/core/task/kernel-contract.js +475 -0
  160. package/dist/core/task/kernel-contract.js.map +1 -0
  161. package/dist/core/task/kernel-store.d.ts +130 -0
  162. package/dist/core/task/kernel-store.d.ts.map +1 -0
  163. package/dist/core/task/kernel-store.js +905 -0
  164. package/dist/core/task/kernel-store.js.map +1 -0
  165. package/dist/core/task/kernel-surface.d.ts +70 -0
  166. package/dist/core/task/kernel-surface.d.ts.map +1 -0
  167. package/dist/core/task/kernel-surface.js +121 -0
  168. package/dist/core/task/kernel-surface.js.map +1 -0
  169. package/dist/core/task/lite-context-pack.d.ts +71 -0
  170. package/dist/core/task/lite-context-pack.d.ts.map +1 -0
  171. package/dist/core/task/lite-context-pack.js +175 -0
  172. package/dist/core/task/lite-context-pack.js.map +1 -0
  173. package/dist/core/task/ondemand-topology.d.ts +108 -0
  174. package/dist/core/task/ondemand-topology.d.ts.map +1 -0
  175. package/dist/core/task/ondemand-topology.js +456 -0
  176. package/dist/core/task/ondemand-topology.js.map +1 -0
  177. package/dist/core/task/p36-artifact-migrate.d.ts +58 -0
  178. package/dist/core/task/p36-artifact-migrate.d.ts.map +1 -0
  179. package/dist/core/task/p36-artifact-migrate.js +293 -0
  180. package/dist/core/task/p36-artifact-migrate.js.map +1 -0
  181. package/dist/core/task/p36-wave-c.d.ts +39 -0
  182. package/dist/core/task/p36-wave-c.d.ts.map +1 -0
  183. package/dist/core/task/p36-wave-c.js +100 -0
  184. package/dist/core/task/p36-wave-c.js.map +1 -0
  185. package/dist/core/task/paths.d.ts +37 -0
  186. package/dist/core/task/paths.d.ts.map +1 -0
  187. package/dist/core/task/paths.js +49 -0
  188. package/dist/core/task/paths.js.map +1 -0
  189. package/dist/core/task/phase.d.ts +27 -0
  190. package/dist/core/task/phase.d.ts.map +1 -0
  191. package/dist/core/task/phase.js +24 -0
  192. package/dist/core/task/phase.js.map +1 -0
  193. package/dist/core/task/records.d.ts +48 -0
  194. package/dist/core/task/records.d.ts.map +1 -0
  195. package/dist/core/task/records.js +100 -0
  196. package/dist/core/task/records.js.map +1 -0
  197. package/dist/core/task/schema.d.ts +77 -0
  198. package/dist/core/task/schema.d.ts.map +1 -0
  199. package/dist/core/task/schema.js +220 -0
  200. package/dist/core/task/schema.js.map +1 -0
  201. package/dist/core/testing/index.d.ts +2 -0
  202. package/dist/core/testing/index.d.ts.map +1 -0
  203. package/dist/core/testing/index.js +4 -0
  204. package/dist/core/testing/index.js.map +1 -0
  205. package/dist/migrations/manifests/0.1.0.json +9 -9
  206. package/dist/migrations/manifests/0.1.1.json +9 -9
  207. package/dist/migrations/manifests/0.1.2.json +9 -9
  208. package/dist/migrations/manifests/0.1.3.json +9 -9
  209. package/dist/migrations/manifests/0.1.4.json +9 -9
  210. package/dist/migrations/manifests/0.2.1.json +9 -9
  211. package/dist/migrations/manifests/0.2.10.json +374 -374
  212. package/dist/migrations/manifests/0.2.2.json +8 -8
  213. package/dist/migrations/manifests/0.2.3.json +9 -9
  214. package/dist/migrations/manifests/0.2.4.json +8 -8
  215. package/dist/migrations/manifests/0.2.5.json +8 -8
  216. package/dist/migrations/manifests/0.2.6.json +8 -8
  217. package/dist/migrations/manifests/0.2.7.json +8 -8
  218. package/dist/migrations/manifests/0.2.8.json +9 -9
  219. package/dist/migrations/manifests/0.2.9.json +9 -9
  220. package/dist/migrations/manifests/0.3.0.json +89 -89
  221. package/dist/migrations/manifests/0.3.1.json +32 -32
  222. package/dist/migrations/manifests/0.3.2.json +16 -16
  223. package/dist/migrations/manifests/0.3.3.json +9 -9
  224. package/dist/migrations/manifests/0.3.4.json +9 -9
  225. package/dist/migrations/manifests/0.3.5.json +9 -9
  226. package/dist/migrations/manifests/0.3.6.json +9 -9
  227. package/dist/migrations/manifests/0.4.0.json +9 -9
  228. package/dist/migrations/manifests/0.4.1.json +9 -9
  229. package/dist/migrations/manifests/0.4.2.json +9 -9
  230. package/dist/migrations/manifests/0.4.3.json +9 -9
  231. package/dist/migrations/manifests/0.5.0-beta.0.json +9 -9
  232. package/dist/migrations/manifests/0.5.0-beta.1.json +9 -9
  233. package/dist/migrations/manifests/0.5.0-beta.2.json +8 -8
  234. package/dist/migrations/manifests/0.5.0-beta.3.json +8 -8
  235. package/dist/migrations/manifests/0.5.0-beta.4.json +9 -9
  236. package/dist/migrations/manifests/0.5.0-beta.5.json +9 -9
  237. package/dist/migrations/manifests/0.5.0.json +9 -0
  238. package/dist/migrations/manifests/0.6.0-beta.1.json +35 -0
  239. package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
  240. package/dist/migrations/manifests/0.6.0.json +9 -0
  241. package/dist/pactile/adapters/codex/index.js +1 -1
  242. package/dist/pactile/adapters/codex/index.js.map +1 -1
  243. package/dist/pactile/adapters/index.d.ts +0 -1
  244. package/dist/pactile/adapters/index.d.ts.map +1 -1
  245. package/dist/pactile/adapters/index.js +0 -1
  246. package/dist/pactile/adapters/index.js.map +1 -1
  247. package/dist/pactile/adoption/bindings.d.ts +1 -1
  248. package/dist/pactile/adoption/bindings.d.ts.map +1 -1
  249. package/dist/pactile/adoption/bindings.js +1 -1
  250. package/dist/pactile/adoption/bindings.js.map +1 -1
  251. package/dist/pactile/adoption/inventory.d.ts +1 -1
  252. package/dist/pactile/adoption/inventory.d.ts.map +1 -1
  253. package/dist/pactile/adoption/inventory.js +1 -1
  254. package/dist/pactile/adoption/inventory.js.map +1 -1
  255. package/dist/pactile/adoption/safety.js +1 -1
  256. package/dist/pactile/adoption/safety.js.map +1 -1
  257. package/dist/pactile/adoption/workflow.d.ts +1 -1
  258. package/dist/pactile/adoption/workflow.d.ts.map +1 -1
  259. package/dist/pactile/adoption/workflow.js +1 -1
  260. package/dist/pactile/adoption/workflow.js.map +1 -1
  261. package/dist/pactile/codex/bridge.d.ts +71 -0
  262. package/dist/pactile/codex/bridge.d.ts.map +1 -0
  263. package/dist/pactile/codex/bridge.js +271 -0
  264. package/dist/pactile/codex/bridge.js.map +1 -0
  265. package/dist/pactile/compat/init-context.js +1 -1
  266. package/dist/pactile/compat/init-context.js.map +1 -1
  267. package/dist/pactile/compat/node-entry-migration.d.ts +3 -0
  268. package/dist/pactile/compat/node-entry-migration.d.ts.map +1 -0
  269. package/dist/pactile/compat/node-entry-migration.js +25 -0
  270. package/dist/pactile/compat/node-entry-migration.js.map +1 -0
  271. package/dist/pactile/exit/receipt.js +1 -1
  272. package/dist/pactile/exit/receipt.js.map +1 -1
  273. package/dist/pactile/exit/service.d.ts +1 -1
  274. package/dist/pactile/exit/service.d.ts.map +1 -1
  275. package/dist/pactile/exit/service.js +1 -3
  276. package/dist/pactile/exit/service.js.map +1 -1
  277. package/dist/pactile/lifecycle/command-runner.d.ts +1 -1
  278. package/dist/pactile/lifecycle/command-runner.d.ts.map +1 -1
  279. package/dist/pactile/lifecycle/command-runner.js +1 -3
  280. package/dist/pactile/lifecycle/command-runner.js.map +1 -1
  281. package/dist/pactile/lifecycle/default-adapters.d.ts.map +1 -1
  282. package/dist/pactile/lifecycle/default-adapters.js +8 -32
  283. package/dist/pactile/lifecycle/default-adapters.js.map +1 -1
  284. package/dist/pactile/lifecycle/orchestrator.d.ts +1 -1
  285. package/dist/pactile/lifecycle/orchestrator.d.ts.map +1 -1
  286. package/dist/pactile/lifecycle/orchestrator.js +1 -1
  287. package/dist/pactile/lifecycle/orchestrator.js.map +1 -1
  288. package/dist/pactile/lifecycle/project-files.d.ts.map +1 -1
  289. package/dist/pactile/lifecycle/project-files.js +4 -1
  290. package/dist/pactile/lifecycle/project-files.js.map +1 -1
  291. package/dist/pactile/middleware/manifest-loader.d.ts +1 -1
  292. package/dist/pactile/middleware/manifest-loader.d.ts.map +1 -1
  293. package/dist/pactile/middleware/manifest-loader.js +1 -1
  294. package/dist/pactile/middleware/manifest-loader.js.map +1 -1
  295. package/dist/pactile/migration/transaction.d.ts +1 -1
  296. package/dist/pactile/migration/transaction.d.ts.map +1 -1
  297. package/dist/pactile/migration/transaction.js +1 -1
  298. package/dist/pactile/migration/transaction.js.map +1 -1
  299. package/dist/pactile/parallel/batch.d.ts +41 -0
  300. package/dist/pactile/parallel/batch.d.ts.map +1 -0
  301. package/dist/pactile/parallel/batch.js +190 -0
  302. package/dist/pactile/parallel/batch.js.map +1 -0
  303. package/dist/pactile/parallel/policy.d.ts +18 -0
  304. package/dist/pactile/parallel/policy.d.ts.map +1 -0
  305. package/dist/pactile/parallel/policy.js +174 -0
  306. package/dist/pactile/parallel/policy.js.map +1 -0
  307. package/dist/pactile/pi/bridge.d.ts +51 -0
  308. package/dist/pactile/pi/bridge.d.ts.map +1 -0
  309. package/dist/pactile/pi/bridge.js +353 -0
  310. package/dist/pactile/pi/bridge.js.map +1 -0
  311. package/dist/pactile/pi/rpc.d.ts +41 -0
  312. package/dist/pactile/pi/rpc.d.ts.map +1 -0
  313. package/dist/pactile/pi/rpc.js +219 -0
  314. package/dist/pactile/pi/rpc.js.map +1 -0
  315. package/dist/pactile/projection/planner.d.ts +1 -1
  316. package/dist/pactile/projection/planner.d.ts.map +1 -1
  317. package/dist/pactile/projection/planner.js +1 -1
  318. package/dist/pactile/projection/planner.js.map +1 -1
  319. package/dist/pactile/projection/shared/index.js +1 -1
  320. package/dist/pactile/projection/shared/index.js.map +1 -1
  321. package/dist/pactile/projection/store.js +1 -1
  322. package/dist/pactile/projection/store.js.map +1 -1
  323. package/dist/pactile/providers/probes.d.ts +2 -2
  324. package/dist/pactile/providers/probes.d.ts.map +1 -1
  325. package/dist/pactile/providers/probes.js +0 -6
  326. package/dist/pactile/providers/probes.js.map +1 -1
  327. package/dist/pactile/registry.d.ts +1 -8
  328. package/dist/pactile/registry.d.ts.map +1 -1
  329. package/dist/pactile/registry.js +8 -25
  330. package/dist/pactile/registry.js.map +1 -1
  331. package/dist/pactile/retrieval/envelope.d.ts +19 -0
  332. package/dist/pactile/retrieval/envelope.d.ts.map +1 -0
  333. package/dist/pactile/retrieval/envelope.js +115 -0
  334. package/dist/pactile/retrieval/envelope.js.map +1 -0
  335. package/dist/pactile/retrieval/evidence.js +1 -1
  336. package/dist/pactile/retrieval/evidence.js.map +1 -1
  337. package/dist/pactile/retrieval/pack.d.ts +9 -0
  338. package/dist/pactile/retrieval/pack.d.ts.map +1 -0
  339. package/dist/pactile/retrieval/pack.js +300 -0
  340. package/dist/pactile/retrieval/pack.js.map +1 -0
  341. package/dist/pactile/retrieval/planner.d.ts +1 -1
  342. package/dist/pactile/retrieval/planner.d.ts.map +1 -1
  343. package/dist/pactile/retrieval/planner.js +1 -1
  344. package/dist/pactile/retrieval/planner.js.map +1 -1
  345. package/dist/pactile/retrieval/types.d.ts +1 -1
  346. package/dist/pactile/retrieval/types.d.ts.map +1 -1
  347. package/dist/pactile/runtime/json-api.d.ts +1 -1
  348. package/dist/pactile/runtime/json-api.js +1 -1
  349. package/dist/pactile/runtime/paths.js +1 -1
  350. package/dist/pactile/runtime/paths.js.map +1 -1
  351. package/dist/pactile/runtime/stores.d.ts +1 -1
  352. package/dist/pactile/runtime/stores.d.ts.map +1 -1
  353. package/dist/pactile/runtime/stores.js +1 -1
  354. package/dist/pactile/runtime/stores.js.map +1 -1
  355. package/dist/pactile/runtime/unicode-nfc-data.d.ts +1 -1
  356. package/dist/pactile/runtime/unicode-nfc-data.js +1 -1
  357. package/dist/pactile/task/config.d.ts +9 -0
  358. package/dist/pactile/task/config.d.ts.map +1 -0
  359. package/dist/pactile/task/config.js +103 -0
  360. package/dist/pactile/task/config.js.map +1 -0
  361. package/dist/pactile/task/context.d.ts +19 -0
  362. package/dist/pactile/task/context.d.ts.map +1 -0
  363. package/dist/pactile/task/context.js +117 -0
  364. package/dist/pactile/task/context.js.map +1 -0
  365. package/dist/pactile/task/guards.d.ts +21 -0
  366. package/dist/pactile/task/guards.d.ts.map +1 -0
  367. package/dist/pactile/task/guards.js +232 -0
  368. package/dist/pactile/task/guards.js.map +1 -0
  369. package/dist/pactile/task/scaffold.d.ts +6 -0
  370. package/dist/pactile/task/scaffold.d.ts.map +1 -0
  371. package/dist/pactile/task/scaffold.js +57 -0
  372. package/dist/pactile/task/scaffold.js.map +1 -0
  373. package/dist/pactile/task/session-memory.d.ts +2 -0
  374. package/dist/pactile/task/session-memory.d.ts.map +1 -0
  375. package/dist/pactile/task/session-memory.js +123 -0
  376. package/dist/pactile/task/session-memory.js.map +1 -0
  377. package/dist/pactile/task/session-pack.d.ts +3 -0
  378. package/dist/pactile/task/session-pack.d.ts.map +1 -0
  379. package/dist/pactile/task/session-pack.js +139 -0
  380. package/dist/pactile/task/session-pack.js.map +1 -0
  381. package/dist/pactile/task/session.d.ts +13 -0
  382. package/dist/pactile/task/session.d.ts.map +1 -0
  383. package/dist/pactile/task/session.js +105 -0
  384. package/dist/pactile/task/session.js.map +1 -0
  385. package/dist/pactile/task/strategy.d.ts +24 -0
  386. package/dist/pactile/task/strategy.d.ts.map +1 -0
  387. package/dist/pactile/task/strategy.js +136 -0
  388. package/dist/pactile/task/strategy.js.map +1 -0
  389. package/dist/pactile/task/task-map.d.ts +35 -0
  390. package/dist/pactile/task/task-map.d.ts.map +1 -0
  391. package/dist/pactile/task/task-map.js +217 -0
  392. package/dist/pactile/task/task-map.js.map +1 -0
  393. package/dist/pactile/task/workflow-phase.d.ts +3 -0
  394. package/dist/pactile/task/workflow-phase.d.ts.map +1 -0
  395. package/dist/pactile/task/workflow-phase.js +56 -0
  396. package/dist/pactile/task/workflow-phase.js.map +1 -0
  397. package/dist/pactile/tiles/catalog.d.ts +1 -1
  398. package/dist/pactile/tiles/catalog.d.ts.map +1 -1
  399. package/dist/pactile/tiles/catalog.js +1 -1
  400. package/dist/pactile/tiles/catalog.js.map +1 -1
  401. package/dist/pactile/tiles/compiler.d.ts +1 -1
  402. package/dist/pactile/tiles/compiler.d.ts.map +1 -1
  403. package/dist/pactile/tiles/compiler.js +1 -1
  404. package/dist/pactile/tiles/compiler.js.map +1 -1
  405. package/dist/pactile/tiles/content/ondemand/index.d.ts +2 -2
  406. package/dist/pactile/tiles/content/ondemand/index.d.ts.map +1 -1
  407. package/dist/pactile/tiles/content/ondemand/index.js +2 -16
  408. package/dist/pactile/tiles/content/ondemand/index.js.map +1 -1
  409. package/dist/pactile/tiles/loader.d.ts +1 -1
  410. package/dist/pactile/tiles/loader.d.ts.map +1 -1
  411. package/dist/pactile/tiles/loader.js +1 -1
  412. package/dist/pactile/tiles/loader.js.map +1 -1
  413. package/dist/templates/common/bundled-skills/pactile-check/SKILL.md +161 -161
  414. package/dist/templates/common/bundled-skills/pactile-check/references/fowler-12-smells.md +28 -28
  415. package/dist/templates/common/bundled-skills/pactile-handoff/SKILL.md +117 -117
  416. package/dist/templates/common/bundled-skills/pactile-meta/SKILL.md +75 -75
  417. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/add-project-local-conventions.md +83 -83
  418. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-agents.md +5 -47
  419. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-context-loading.md +79 -84
  420. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-hooks.md +5 -57
  421. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-skills-or-commands.md +7 -77
  422. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-spec-structure.md +83 -83
  423. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-task-lifecycle.md +82 -88
  424. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-workflow.md +65 -65
  425. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/overview.md +12 -55
  426. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/context-injection.md +68 -68
  427. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/generated-files.md +7 -83
  428. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/overview.md +7 -51
  429. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/spec-system.md +102 -102
  430. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/task-system.md +138 -133
  431. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/workflow.md +75 -75
  432. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/workspace-memory.md +71 -71
  433. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/agents.md +7 -69
  434. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/hooks-and-settings.md +7 -59
  435. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/overview.md +5 -45
  436. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/platform-map.md +9 -45
  437. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/skills-and-commands.md +7 -108
  438. package/dist/templates/common/bundled-skills/pactile-micro-grill/SKILL.md +68 -68
  439. package/dist/templates/common/bundled-skills/pactile-skill-creator/SKILL.md +47 -47
  440. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/authoring-rules.md +170 -170
  441. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/general-authoring.md +189 -189
  442. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/pactile-skill-locations.md +11 -52
  443. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/review-checklist.md +52 -52
  444. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/SKILL.md +41 -41
  445. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/mcp-setup.md +18 -90
  446. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/repository-analysis.md +41 -59
  447. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/spec-task-planning.md +61 -61
  448. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/spec-writing.md +70 -70
  449. package/dist/templates/common/bundled-skills/smart-search-cli/SKILL.md +393 -393
  450. package/dist/templates/common/bundled-skills/smart-search-cli/agents/openai.yaml +3 -3
  451. package/dist/templates/common/bundled-skills/smart-search-cli/examples/batch-search.md +98 -98
  452. package/dist/templates/common/bundled-skills/smart-search-cli/examples/evidence-gathering.md +89 -89
  453. package/dist/templates/common/bundled-skills/smart-search-cli/references/cli-contract.md +323 -323
  454. package/dist/templates/common/commands/continue.md +60 -62
  455. package/dist/templates/common/commands/finish-work.md +84 -82
  456. package/dist/templates/common/commands/start.md +66 -66
  457. package/dist/templates/common/index.d.ts +0 -20
  458. package/dist/templates/common/index.d.ts.map +1 -1
  459. package/dist/templates/common/index.js +0 -16
  460. package/dist/templates/common/index.js.map +1 -1
  461. package/dist/templates/common/skills/before-dev.md +35 -35
  462. package/dist/templates/common/skills/brainstorm.md +204 -204
  463. package/dist/templates/common/skills/break-loop.md +125 -125
  464. package/dist/templates/common/skills/update-spec.md +363 -363
  465. package/dist/templates/extract.d.ts +1 -8
  466. package/dist/templates/extract.d.ts.map +1 -1
  467. package/dist/templates/extract.js +0 -31
  468. package/dist/templates/extract.js.map +1 -1
  469. package/dist/templates/markdown/agents.md +14 -14
  470. package/dist/templates/markdown/framework/artifact-locale-guide.md.txt +93 -93
  471. package/dist/templates/markdown/framework/codex-worker-dispatch.md.txt +9 -0
  472. package/dist/templates/markdown/framework/dogfood-only-surfaces.md.txt +7 -28
  473. package/dist/templates/markdown/framework/execution-strategy.md.txt +14 -45
  474. package/dist/templates/markdown/framework/index.md.txt +20 -31
  475. package/dist/templates/markdown/framework/injection-budget-guide.md.txt +7 -111
  476. package/dist/templates/markdown/framework/middleware-protocol.md.txt +139 -238
  477. package/dist/templates/markdown/framework/parallel-first-execution.md.txt +116 -116
  478. package/dist/templates/markdown/framework/prd-grill-frontier.md.txt +105 -105
  479. package/dist/templates/markdown/framework/release-boundary.md.txt +30 -30
  480. package/dist/templates/markdown/framework/retrieval-daily-guide.md.txt +9 -199
  481. package/dist/templates/markdown/framework/upgrade.md.txt +15 -15
  482. package/dist/templates/markdown/framework/verification-strength-guide.md.txt +185 -185
  483. package/dist/templates/markdown/gitignore.txt +15 -15
  484. package/dist/templates/markdown/index.d.ts +1 -5
  485. package/dist/templates/markdown/index.d.ts.map +1 -1
  486. package/dist/templates/markdown/index.js +3 -23
  487. package/dist/templates/markdown/index.js.map +1 -1
  488. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -51
  489. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -54
  490. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -51
  491. package/dist/templates/markdown/spec/backend/index.md.txt +38 -38
  492. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -51
  493. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -51
  494. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -59
  495. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -54
  496. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -51
  497. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -39
  498. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -51
  499. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -51
  500. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -51
  501. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +174 -174
  502. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +162 -162
  503. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +17 -634
  504. package/dist/templates/markdown/spec/guides/debug-loop-guide.md.txt +227 -227
  505. package/dist/templates/markdown/spec/guides/durable-learning-decision-guide.md.txt +75 -75
  506. package/dist/templates/markdown/spec/guides/e2e-walkthrough-guide.md.txt +88 -93
  507. package/dist/templates/markdown/spec/guides/index.md.txt +131 -131
  508. package/dist/templates/markdown/spec/guides/prototype-guide.md.txt +137 -139
  509. package/dist/templates/markdown/spec/guides/test-discipline-guide.md.txt +179 -179
  510. package/dist/templates/markdown/workspace-index.md +122 -125
  511. package/dist/templates/markdown/worktree.yaml.txt +58 -58
  512. package/dist/templates/pactile/CONTEXT.md +101 -113
  513. package/dist/templates/pactile/config/execution-strategy-rules.json +30 -31
  514. package/dist/templates/pactile/config.yaml +111 -130
  515. package/dist/templates/pactile/docs/adr/README.md +21 -21
  516. package/dist/templates/pactile/gitignore.txt +35 -35
  517. package/dist/templates/pactile/index.d.ts +3 -127
  518. package/dist/templates/pactile/index.d.ts.map +1 -1
  519. package/dist/templates/pactile/index.js +13 -298
  520. package/dist/templates/pactile/index.js.map +1 -1
  521. package/dist/templates/pactile/modules/approval-personal/contract.md +43 -43
  522. package/dist/templates/pactile/modules/close-basic/contract.md +37 -37
  523. package/dist/templates/pactile/modules/context-progressive/contract.md +44 -44
  524. package/dist/templates/pactile/modules/debug-recovery/contract.md +44 -44
  525. package/dist/templates/pactile/modules/define-basic/contract.md +39 -39
  526. package/dist/templates/pactile/modules/define-extended/contract.md +45 -45
  527. package/dist/templates/pactile/modules/execute-agent/contract.md +38 -38
  528. package/dist/templates/pactile/modules/independent-check/contract.md +35 -35
  529. package/dist/templates/pactile/modules/index.json +127 -133
  530. package/dist/templates/pactile/modules/intake-basic/contract.md +34 -34
  531. package/dist/templates/pactile/modules/observability-local/contract.md +31 -31
  532. package/dist/templates/pactile/modules/parent-child/contract.md +45 -45
  533. package/dist/templates/pactile/modules/personal-memory/contract.md +55 -55
  534. package/dist/templates/pactile/modules/retention-storage/contract.md +43 -43
  535. package/dist/templates/pactile/modules/retrieval-extended/contract.md +78 -77
  536. package/dist/templates/pactile/modules/session-transfer/contract.md +41 -41
  537. package/dist/templates/pactile/modules/spec-learning/contract.md +50 -50
  538. package/dist/templates/pactile/modules/vcs-integration/contract.md +46 -46
  539. package/dist/templates/pactile/modules/verify-basic/contract.md +38 -38
  540. package/dist/templates/pactile/modules/worker-orchestration/contract.md +47 -47
  541. package/dist/templates/pactile/scripts/retrieval_probe_matrix_template.json +43 -43
  542. package/dist/templates/pactile/tasks/locale/en/default-prd.md +27 -27
  543. package/dist/templates/pactile/tasks/locale/zh/default-prd.md +27 -27
  544. package/dist/templates/pactile/tasks/templates/release-execution/design.md +60 -60
  545. package/dist/templates/pactile/tasks/templates/release-execution/handoff-template.md +28 -28
  546. package/dist/templates/pactile/tasks/templates/release-execution/implement.md +28 -28
  547. package/dist/templates/pactile/tasks/templates/release-execution/prd.md +30 -30
  548. package/dist/templates/pactile/tasks/templates/release-readiness/design.md +49 -49
  549. package/dist/templates/pactile/tasks/templates/release-readiness/handoff-template.md +38 -38
  550. package/dist/templates/pactile/tasks/templates/release-readiness/implement.md +28 -28
  551. package/dist/templates/pactile/tasks/templates/release-readiness/prd.md +30 -30
  552. package/dist/templates/pactile/workflow.md +65 -64
  553. package/dist/types/ai-tools.d.ts +12 -13
  554. package/dist/types/ai-tools.d.ts.map +1 -1
  555. package/dist/types/ai-tools.js +15 -14
  556. package/dist/types/ai-tools.js.map +1 -1
  557. package/dist/utils/codebase-retrieval-router.d.ts +1 -1
  558. package/dist/utils/codebase-retrieval-router.d.ts.map +1 -1
  559. package/dist/utils/cwd-guard.js +1 -1
  560. package/dist/utils/cwd-guard.js.map +1 -1
  561. package/dist/utils/developer.d.ts +5 -0
  562. package/dist/utils/developer.d.ts.map +1 -0
  563. package/dist/utils/developer.js +38 -0
  564. package/dist/utils/developer.js.map +1 -0
  565. package/dist/utils/git-root.d.ts +3 -0
  566. package/dist/utils/git-root.d.ts.map +1 -0
  567. package/dist/utils/git-root.js +24 -0
  568. package/dist/utils/git-root.js.map +1 -0
  569. package/dist/utils/local-date.d.ts +3 -0
  570. package/dist/utils/local-date.d.ts.map +1 -0
  571. package/dist/utils/local-date.js +8 -0
  572. package/dist/utils/local-date.js.map +1 -0
  573. package/dist/utils/manifest-prune.d.ts +5 -4
  574. package/dist/utils/manifest-prune.d.ts.map +1 -1
  575. package/dist/utils/manifest-prune.js +11 -21
  576. package/dist/utils/manifest-prune.js.map +1 -1
  577. package/dist/utils/p36-upgrade.d.ts +1 -1
  578. package/dist/utils/p36-upgrade.d.ts.map +1 -1
  579. package/dist/utils/p36-upgrade.js +1 -1
  580. package/dist/utils/p36-upgrade.js.map +1 -1
  581. package/dist/utils/post-update-smoke.d.ts +1 -4
  582. package/dist/utils/post-update-smoke.d.ts.map +1 -1
  583. package/dist/utils/post-update-smoke.js +13 -25
  584. package/dist/utils/post-update-smoke.js.map +1 -1
  585. package/dist/utils/project-capabilities.d.ts +2 -17
  586. package/dist/utils/project-capabilities.d.ts.map +1 -1
  587. package/dist/utils/project-capabilities.js +14 -119
  588. package/dist/utils/project-capabilities.js.map +1 -1
  589. package/dist/utils/readiness.d.ts +14 -0
  590. package/dist/utils/readiness.d.ts.map +1 -1
  591. package/dist/utils/readiness.js +61 -30
  592. package/dist/utils/readiness.js.map +1 -1
  593. package/dist/utils/retrieval-execution-telemetry.d.ts +1 -1
  594. package/dist/utils/retrieval-execution-telemetry.d.ts.map +1 -1
  595. package/dist/utils/retrieval-result-ranking.d.ts +1 -1
  596. package/dist/utils/retrieval-result-ranking.d.ts.map +1 -1
  597. package/dist/utils/retrieval-tool-classification.d.ts +1 -1
  598. package/dist/utils/retrieval-tool-classification.d.ts.map +1 -1
  599. package/dist/utils/task-json.d.ts +3 -3
  600. package/dist/utils/task-json.d.ts.map +1 -1
  601. package/dist/utils/task-json.js +3 -3
  602. package/dist/utils/task-json.js.map +1 -1
  603. package/dist/utils/template-hash.d.ts +4 -0
  604. package/dist/utils/template-hash.d.ts.map +1 -1
  605. package/dist/utils/template-hash.js +1 -1
  606. package/dist/utils/template-hash.js.map +1 -1
  607. package/dist/utils/update-rollout-report.d.ts +9 -0
  608. package/dist/utils/update-rollout-report.d.ts.map +1 -1
  609. package/dist/utils/update-rollout-report.js +14 -1
  610. package/dist/utils/update-rollout-report.js.map +1 -1
  611. package/package.json +22 -11
  612. package/scripts/postinstall.js +6 -6
  613. package/dist/commands/channel/adapters/claude.d.ts +0 -29
  614. package/dist/commands/channel/adapters/claude.d.ts.map +0 -1
  615. package/dist/commands/channel/adapters/claude.js +0 -203
  616. package/dist/commands/channel/adapters/claude.js.map +0 -1
  617. package/dist/commands/channel/adapters/codex.d.ts +0 -85
  618. package/dist/commands/channel/adapters/codex.d.ts.map +0 -1
  619. package/dist/commands/channel/adapters/codex.js +0 -505
  620. package/dist/commands/channel/adapters/codex.js.map +0 -1
  621. package/dist/commands/channel/adapters/index.d.ts +0 -84
  622. package/dist/commands/channel/adapters/index.d.ts.map +0 -1
  623. package/dist/commands/channel/adapters/index.js +0 -115
  624. package/dist/commands/channel/adapters/index.js.map +0 -1
  625. package/dist/commands/channel/adapters/types.d.ts +0 -33
  626. package/dist/commands/channel/adapters/types.d.ts.map +0 -1
  627. package/dist/commands/channel/adapters/types.js +0 -2
  628. package/dist/commands/channel/adapters/types.js.map +0 -1
  629. package/dist/commands/channel/agent-loader.d.ts +0 -32
  630. package/dist/commands/channel/agent-loader.d.ts.map +0 -1
  631. package/dist/commands/channel/agent-loader.js +0 -154
  632. package/dist/commands/channel/agent-loader.js.map +0 -1
  633. package/dist/commands/channel/context-loader.d.ts +0 -26
  634. package/dist/commands/channel/context-loader.d.ts.map +0 -1
  635. package/dist/commands/channel/context-loader.js +0 -290
  636. package/dist/commands/channel/context-loader.js.map +0 -1
  637. package/dist/commands/channel/context.d.ts +0 -16
  638. package/dist/commands/channel/context.d.ts.map +0 -1
  639. package/dist/commands/channel/context.js +0 -83
  640. package/dist/commands/channel/context.js.map +0 -1
  641. package/dist/commands/channel/create.d.ts +0 -27
  642. package/dist/commands/channel/create.d.ts.map +0 -1
  643. package/dist/commands/channel/create.js +0 -39
  644. package/dist/commands/channel/create.js.map +0 -1
  645. package/dist/commands/channel/dev-parse-trace.d.ts +0 -14
  646. package/dist/commands/channel/dev-parse-trace.d.ts.map +0 -1
  647. package/dist/commands/channel/dev-parse-trace.js +0 -70
  648. package/dist/commands/channel/dev-parse-trace.js.map +0 -1
  649. package/dist/commands/channel/guard.d.ts +0 -150
  650. package/dist/commands/channel/guard.d.ts.map +0 -1
  651. package/dist/commands/channel/guard.js +0 -475
  652. package/dist/commands/channel/guard.js.map +0 -1
  653. package/dist/commands/channel/index.d.ts +0 -3
  654. package/dist/commands/channel/index.d.ts.map +0 -1
  655. package/dist/commands/channel/index.js +0 -531
  656. package/dist/commands/channel/index.js.map +0 -1
  657. package/dist/commands/channel/interrupt.d.ts +0 -10
  658. package/dist/commands/channel/interrupt.d.ts.map +0 -1
  659. package/dist/commands/channel/interrupt.js +0 -22
  660. package/dist/commands/channel/interrupt.js.map +0 -1
  661. package/dist/commands/channel/kill.d.ts +0 -7
  662. package/dist/commands/channel/kill.d.ts.map +0 -1
  663. package/dist/commands/channel/kill.js +0 -121
  664. package/dist/commands/channel/kill.js.map +0 -1
  665. package/dist/commands/channel/list.d.ts +0 -17
  666. package/dist/commands/channel/list.d.ts.map +0 -1
  667. package/dist/commands/channel/list.js +0 -233
  668. package/dist/commands/channel/list.js.map +0 -1
  669. package/dist/commands/channel/messages.d.ts +0 -15
  670. package/dist/commands/channel/messages.d.ts.map +0 -1
  671. package/dist/commands/channel/messages.js +0 -245
  672. package/dist/commands/channel/messages.js.map +0 -1
  673. package/dist/commands/channel/rm.d.ts +0 -27
  674. package/dist/commands/channel/rm.d.ts.map +0 -1
  675. package/dist/commands/channel/rm.js +0 -216
  676. package/dist/commands/channel/rm.js.map +0 -1
  677. package/dist/commands/channel/run.d.ts +0 -30
  678. package/dist/commands/channel/run.d.ts.map +0 -1
  679. package/dist/commands/channel/run.js +0 -130
  680. package/dist/commands/channel/run.js.map +0 -1
  681. package/dist/commands/channel/send.d.ts +0 -11
  682. package/dist/commands/channel/send.d.ts.map +0 -1
  683. package/dist/commands/channel/send.js +0 -24
  684. package/dist/commands/channel/send.js.map +0 -1
  685. package/dist/commands/channel/spawn.d.ts +0 -40
  686. package/dist/commands/channel/spawn.d.ts.map +0 -1
  687. package/dist/commands/channel/spawn.js +0 -242
  688. package/dist/commands/channel/spawn.js.map +0 -1
  689. package/dist/commands/channel/store/events.d.ts +0 -39
  690. package/dist/commands/channel/store/events.d.ts.map +0 -1
  691. package/dist/commands/channel/store/events.js +0 -87
  692. package/dist/commands/channel/store/events.js.map +0 -1
  693. package/dist/commands/channel/store/filter.d.ts +0 -3
  694. package/dist/commands/channel/store/filter.d.ts.map +0 -1
  695. package/dist/commands/channel/store/filter.js +0 -2
  696. package/dist/commands/channel/store/filter.js.map +0 -1
  697. package/dist/commands/channel/store/lock.d.ts +0 -23
  698. package/dist/commands/channel/store/lock.d.ts.map +0 -1
  699. package/dist/commands/channel/store/lock.js +0 -99
  700. package/dist/commands/channel/store/lock.js.map +0 -1
  701. package/dist/commands/channel/store/paths.d.ts +0 -63
  702. package/dist/commands/channel/store/paths.d.ts.map +0 -1
  703. package/dist/commands/channel/store/paths.js +0 -247
  704. package/dist/commands/channel/store/paths.js.map +0 -1
  705. package/dist/commands/channel/store/schema.d.ts +0 -27
  706. package/dist/commands/channel/store/schema.d.ts.map +0 -1
  707. package/dist/commands/channel/store/schema.js +0 -34
  708. package/dist/commands/channel/store/schema.js.map +0 -1
  709. package/dist/commands/channel/store/thread-state.d.ts +0 -5
  710. package/dist/commands/channel/store/thread-state.d.ts.map +0 -1
  711. package/dist/commands/channel/store/thread-state.js +0 -16
  712. package/dist/commands/channel/store/thread-state.js.map +0 -1
  713. package/dist/commands/channel/store/watch.d.ts +0 -19
  714. package/dist/commands/channel/store/watch.d.ts.map +0 -1
  715. package/dist/commands/channel/store/watch.js +0 -146
  716. package/dist/commands/channel/store/watch.js.map +0 -1
  717. package/dist/commands/channel/supervisor/idle.d.ts +0 -46
  718. package/dist/commands/channel/supervisor/idle.d.ts.map +0 -1
  719. package/dist/commands/channel/supervisor/idle.js +0 -72
  720. package/dist/commands/channel/supervisor/idle.js.map +0 -1
  721. package/dist/commands/channel/supervisor/inbox.d.ts +0 -30
  722. package/dist/commands/channel/supervisor/inbox.d.ts.map +0 -1
  723. package/dist/commands/channel/supervisor/inbox.js +0 -160
  724. package/dist/commands/channel/supervisor/inbox.js.map +0 -1
  725. package/dist/commands/channel/supervisor/shutdown.d.ts +0 -68
  726. package/dist/commands/channel/supervisor/shutdown.d.ts.map +0 -1
  727. package/dist/commands/channel/supervisor/shutdown.js +0 -146
  728. package/dist/commands/channel/supervisor/shutdown.js.map +0 -1
  729. package/dist/commands/channel/supervisor/stdout.d.ts +0 -51
  730. package/dist/commands/channel/supervisor/stdout.d.ts.map +0 -1
  731. package/dist/commands/channel/supervisor/stdout.js +0 -121
  732. package/dist/commands/channel/supervisor/stdout.js.map +0 -1
  733. package/dist/commands/channel/supervisor/turns.d.ts +0 -31
  734. package/dist/commands/channel/supervisor/turns.d.ts.map +0 -1
  735. package/dist/commands/channel/supervisor/turns.js +0 -45
  736. package/dist/commands/channel/supervisor/turns.js.map +0 -1
  737. package/dist/commands/channel/supervisor/warning.d.ts +0 -48
  738. package/dist/commands/channel/supervisor/warning.d.ts.map +0 -1
  739. package/dist/commands/channel/supervisor/warning.js +0 -77
  740. package/dist/commands/channel/supervisor/warning.js.map +0 -1
  741. package/dist/commands/channel/supervisor.d.ts +0 -59
  742. package/dist/commands/channel/supervisor.d.ts.map +0 -1
  743. package/dist/commands/channel/supervisor.js +0 -345
  744. package/dist/commands/channel/supervisor.js.map +0 -1
  745. package/dist/commands/channel/text-body.d.ts +0 -13
  746. package/dist/commands/channel/text-body.d.ts.map +0 -1
  747. package/dist/commands/channel/text-body.js +0 -47
  748. package/dist/commands/channel/text-body.js.map +0 -1
  749. package/dist/commands/channel/threads.d.ts +0 -39
  750. package/dist/commands/channel/threads.d.ts.map +0 -1
  751. package/dist/commands/channel/threads.js +0 -106
  752. package/dist/commands/channel/threads.js.map +0 -1
  753. package/dist/commands/channel/title.d.ts +0 -12
  754. package/dist/commands/channel/title.d.ts.map +0 -1
  755. package/dist/commands/channel/title.js +0 -24
  756. package/dist/commands/channel/title.js.map +0 -1
  757. package/dist/commands/channel/wait.d.ts +0 -17
  758. package/dist/commands/channel/wait.d.ts.map +0 -1
  759. package/dist/commands/channel/wait.js +0 -75
  760. package/dist/commands/channel/wait.js.map +0 -1
  761. package/dist/commands/validate-rules.d.ts +0 -6
  762. package/dist/commands/validate-rules.d.ts.map +0 -1
  763. package/dist/commands/validate-rules.js +0 -33
  764. package/dist/commands/validate-rules.js.map +0 -1
  765. package/dist/configurators/cursor.d.ts +0 -21
  766. package/dist/configurators/cursor.d.ts.map +0 -1
  767. package/dist/configurators/cursor.js +0 -51
  768. package/dist/configurators/cursor.js.map +0 -1
  769. package/dist/pactile/adapters/cursor/index.d.ts +0 -60
  770. package/dist/pactile/adapters/cursor/index.d.ts.map +0 -1
  771. package/dist/pactile/adapters/cursor/index.js +0 -186
  772. package/dist/pactile/adapters/cursor/index.js.map +0 -1
  773. package/dist/templates/common/optional-skills/chrome-cdp/SKILL.md +0 -179
  774. package/dist/templates/common/optional-skills/chrome-cdp/examples/fetch-hook-api-capture.md +0 -149
  775. package/dist/templates/common/optional-skills/chrome-cdp/scripts/cdp.mjs +0 -904
  776. package/dist/templates/cursor/agents/pactile-check.md +0 -58
  777. package/dist/templates/cursor/agents/pactile-implement.md +0 -56
  778. package/dist/templates/cursor/agents/pactile-research.md +0 -51
  779. package/dist/templates/cursor/commands/handoff.md +0 -101
  780. package/dist/templates/cursor/fixtures/expected-rules.d.ts +0 -14
  781. package/dist/templates/cursor/fixtures/expected-rules.d.ts.map +0 -1
  782. package/dist/templates/cursor/fixtures/expected-rules.js +0 -20
  783. package/dist/templates/cursor/fixtures/expected-rules.js.map +0 -1
  784. package/dist/templates/cursor/hooks.json +0 -52
  785. package/dist/templates/cursor/index.d.ts +0 -19
  786. package/dist/templates/cursor/index.d.ts.map +0 -1
  787. package/dist/templates/cursor/index.js +0 -19
  788. package/dist/templates/cursor/index.js.map +0 -1
  789. package/dist/templates/cursor/rules/pactile-bootstrap.mdc +0 -18
  790. package/dist/templates/cursor/worktrees.json +0 -11
  791. package/dist/templates/markdown/framework/cursor-context-injection-guide.md.txt +0 -85
  792. package/dist/templates/markdown/framework/cursor-native-modes-guide.md.txt +0 -239
  793. package/dist/templates/markdown/framework/cursor-semantic-compliance.md.txt +0 -41
  794. package/dist/templates/markdown/framework/cursor-subagent-policy.md.txt +0 -90
  795. package/dist/templates/markdown/framework/internal-skills-cursor-reachability.md.txt +0 -45
  796. package/dist/templates/markdown/prompts/run-semantic-slice-12.md.txt +0 -25
  797. package/dist/templates/pactile/modules/candidate-pool/contract.md +0 -37
  798. package/dist/templates/pactile/pool/README.md +0 -149
  799. package/dist/templates/pactile/pool/items/.gitkeep +0 -0
  800. package/dist/templates/pactile/pool/plan.md +0 -50
  801. package/dist/templates/pactile/scripts/__init__.py +0 -5
  802. package/dist/templates/pactile/scripts/add_session.py +0 -547
  803. package/dist/templates/pactile/scripts/build_context_pack.py +0 -17
  804. package/dist/templates/pactile/scripts/build_retrieval_pack.py +0 -376
  805. package/dist/templates/pactile/scripts/codegraph_session_smoke.py +0 -76
  806. package/dist/templates/pactile/scripts/common/__init__.py +0 -103
  807. package/dist/templates/pactile/scripts/common/active_task.py +0 -576
  808. package/dist/templates/pactile/scripts/common/adapter_middleware.py +0 -1373
  809. package/dist/templates/pactile/scripts/common/artifact_locale.py +0 -303
  810. package/dist/templates/pactile/scripts/common/artifact_search.py +0 -587
  811. package/dist/templates/pactile/scripts/common/cli_adapter.py +0 -135
  812. package/dist/templates/pactile/scripts/common/cli_environment.py +0 -155
  813. package/dist/templates/pactile/scripts/common/codebase_retrieval_router.py +0 -1339
  814. package/dist/templates/pactile/scripts/common/config.py +0 -497
  815. package/dist/templates/pactile/scripts/common/context_pack.py +0 -371
  816. package/dist/templates/pactile/scripts/common/cursor_retrieval_env.py +0 -31
  817. package/dist/templates/pactile/scripts/common/developer.py +0 -190
  818. package/dist/templates/pactile/scripts/common/execution_strategy.py +0 -268
  819. package/dist/templates/pactile/scripts/common/full_quality.py +0 -237
  820. package/dist/templates/pactile/scripts/common/git.py +0 -37
  821. package/dist/templates/pactile/scripts/common/git_context.py +0 -198
  822. package/dist/templates/pactile/scripts/common/injection_budget.py +0 -317
  823. package/dist/templates/pactile/scripts/common/io.py +0 -37
  824. package/dist/templates/pactile/scripts/common/kernel_command.py +0 -369
  825. package/dist/templates/pactile/scripts/common/lite_context.py +0 -280
  826. package/dist/templates/pactile/scripts/common/log.py +0 -45
  827. package/dist/templates/pactile/scripts/common/ondemand_topology.py +0 -419
  828. package/dist/templates/pactile/scripts/common/packages_context.py +0 -239
  829. package/dist/templates/pactile/scripts/common/pactile_config.py +0 -131
  830. package/dist/templates/pactile/scripts/common/parallel_declaration.py +0 -369
  831. package/dist/templates/pactile/scripts/common/parent_orchestration.py +0 -1198
  832. package/dist/templates/pactile/scripts/common/paths.py +0 -756
  833. package/dist/templates/pactile/scripts/common/pool_refs.py +0 -119
  834. package/dist/templates/pactile/scripts/common/pool_slice.py +0 -269
  835. package/dist/templates/pactile/scripts/common/pool_store.py +0 -766
  836. package/dist/templates/pactile/scripts/common/project_file_stats.py +0 -91
  837. package/dist/templates/pactile/scripts/common/retrieval_adapter_metadata.py +0 -943
  838. package/dist/templates/pactile/scripts/common/retrieval_agent_instructions.py +0 -123
  839. package/dist/templates/pactile/scripts/common/retrieval_evidence.py +0 -915
  840. package/dist/templates/pactile/scripts/common/retrieval_pack.py +0 -422
  841. package/dist/templates/pactile/scripts/common/retrieval_pack_context.py +0 -122
  842. package/dist/templates/pactile/scripts/common/retrieval_plan_gate.py +0 -61
  843. package/dist/templates/pactile/scripts/common/retrieval_result_ranking.py +0 -104
  844. package/dist/templates/pactile/scripts/common/retrieval_tool_classification.py +0 -166
  845. package/dist/templates/pactile/scripts/common/safe_commit.py +0 -285
  846. package/dist/templates/pactile/scripts/common/semantic_plan_gate.py +0 -53
  847. package/dist/templates/pactile/scripts/common/session_context.py +0 -1213
  848. package/dist/templates/pactile/scripts/common/session_memory.py +0 -386
  849. package/dist/templates/pactile/scripts/common/session_pack.py +0 -886
  850. package/dist/templates/pactile/scripts/common/smart_search_evidence.py +0 -514
  851. package/dist/templates/pactile/scripts/common/smart_search_resolve.py +0 -150
  852. package/dist/templates/pactile/scripts/common/subagent_dispatch.py +0 -592
  853. package/dist/templates/pactile/scripts/common/task_context.py +0 -241
  854. package/dist/templates/pactile/scripts/common/task_dashboard.py +0 -286
  855. package/dist/templates/pactile/scripts/common/task_dependencies.py +0 -648
  856. package/dist/templates/pactile/scripts/common/task_gates.py +0 -2478
  857. package/dist/templates/pactile/scripts/common/task_map.py +0 -703
  858. package/dist/templates/pactile/scripts/common/task_queue.py +0 -188
  859. package/dist/templates/pactile/scripts/common/task_store.py +0 -2252
  860. package/dist/templates/pactile/scripts/common/task_utils.py +0 -274
  861. package/dist/templates/pactile/scripts/common/tasks.py +0 -231
  862. package/dist/templates/pactile/scripts/common/test_adapter_middleware.py +0 -199
  863. package/dist/templates/pactile/scripts/common/test_depends_mode_block.py +0 -509
  864. package/dist/templates/pactile/scripts/common/test_full_quality.py +0 -197
  865. package/dist/templates/pactile/scripts/common/test_kernel_command.py +0 -336
  866. package/dist/templates/pactile/scripts/common/test_lite_path.py +0 -190
  867. package/dist/templates/pactile/scripts/common/test_observable_defaults.py +0 -141
  868. package/dist/templates/pactile/scripts/common/test_ondemand_topology.py +0 -237
  869. package/dist/templates/pactile/scripts/common/test_parallel_declaration.py +0 -264
  870. package/dist/templates/pactile/scripts/common/test_pool_slice.py +0 -198
  871. package/dist/templates/pactile/scripts/common/test_pool_store.py +0 -452
  872. package/dist/templates/pactile/scripts/common/test_retrieval_arbitration.py +0 -331
  873. package/dist/templates/pactile/scripts/common/test_task_dashboard.py +0 -155
  874. package/dist/templates/pactile/scripts/common/test_task_dependencies.py +0 -329
  875. package/dist/templates/pactile/scripts/common/test_task_store_kernel_patch.py +0 -163
  876. package/dist/templates/pactile/scripts/common/types.py +0 -110
  877. package/dist/templates/pactile/scripts/common/workflow_phase.py +0 -194
  878. package/dist/templates/pactile/scripts/compile_session_pack.py +0 -15
  879. package/dist/templates/pactile/scripts/cursor_retrieval_probe.py +0 -64
  880. package/dist/templates/pactile/scripts/cursor_retrieval_probe_prompt.md +0 -33
  881. package/dist/templates/pactile/scripts/generate_dispatch_prompt.py +0 -182
  882. package/dist/templates/pactile/scripts/get_context.py +0 -19
  883. package/dist/templates/pactile/scripts/get_developer.py +0 -26
  884. package/dist/templates/pactile/scripts/hooks/linear_sync.py +0 -243
  885. package/dist/templates/pactile/scripts/init_developer.py +0 -51
  886. package/dist/templates/pactile/scripts/injection_budget_probe.py +0 -69
  887. package/dist/templates/pactile/scripts/pool.py +0 -237
  888. package/dist/templates/pactile/scripts/rank_retrieval_candidates.py +0 -98
  889. package/dist/templates/pactile/scripts/route_codebase_retrieval.py +0 -72
  890. package/dist/templates/pactile/scripts/run_smart_search.py +0 -12
  891. package/dist/templates/pactile/scripts/score_evidence.py +0 -131
  892. package/dist/templates/pactile/scripts/search_artifacts.py +0 -13
  893. package/dist/templates/pactile/scripts/search_memory.py +0 -12
  894. package/dist/templates/pactile/scripts/spec_health_outcomes.py +0 -160
  895. package/dist/templates/pactile/scripts/task.py +0 -1118
  896. package/dist/templates/pactile/scripts/verify_evidence_probe.py +0 -138
  897. package/dist/templates/shared-hooks/event-bridge.py +0 -121
  898. package/dist/templates/shared-hooks/index.d.ts +0 -50
  899. package/dist/templates/shared-hooks/index.d.ts.map +0 -1
  900. package/dist/templates/shared-hooks/index.js +0 -96
  901. package/dist/templates/shared-hooks/index.js.map +0 -1
  902. package/dist/templates/shared-hooks/inject-retrieval-plan.py +0 -217
  903. package/dist/templates/shared-hooks/inject-shell-session-context.py +0 -183
  904. package/dist/templates/shared-hooks/inject-subagent-context.py +0 -267
  905. package/dist/templates/shared-hooks/inject-workflow-state.py +0 -106
  906. package/dist/templates/shared-hooks/rename-session-for-task.py +0 -231
  907. package/dist/templates/shared-hooks/research-end-retrieval-pack.py +0 -345
  908. package/dist/templates/shared-hooks/session-start.py +0 -355
  909. package/dist/templates/shared-hooks/spec-write-audit.py +0 -173
  910. package/dist/utils/mirror-check.d.ts +0 -22
  911. package/dist/utils/mirror-check.d.ts.map +0 -1
  912. package/dist/utils/mirror-check.js +0 -90
  913. package/dist/utils/mirror-check.js.map +0 -1
  914. package/dist/utils/validate-rules.d.ts +0 -21
  915. package/dist/utils/validate-rules.d.ts.map +0 -1
  916. package/dist/utils/validate-rules.js +0 -88
  917. package/dist/utils/validate-rules.js.map +0 -1
@@ -0,0 +1,905 @@
1
+ /**
2
+ * Repo-local Kernel store: atomic snapshot write (state + audit in one
3
+ * file) with optimistic revision and a process lock.
4
+ *
5
+ * Stage 1 does not mutate `task.json.status` — legacy lifecycle remains
6
+ * a read projection. `writeTaskRecord` stays the low-level task.json
7
+ * primitive; this module is the new core-state write entry.
8
+ */
9
+ import { randomUUID } from "node:crypto";
10
+ import fs from "node:fs";
11
+ import path from "node:path";
12
+ import { assertFullQualityForPhase, assertIndependentCheckGateRecord, normalizeRequiredControlsInExtras, } from "./full-quality.js";
13
+ import { legacyKernelExtrasBoundary, inspectProjection, projectionBytesFingerprint, } from "./kernel-surface.js";
14
+ import { stripRetiredExtras, stripRetiredMeta } from "./contract-migrate.js";
15
+ import { loadTaskRecord, writeTaskRecord } from "./records.js";
16
+ import { TASK_RECORD_FIELD_ORDER, isPlainObject, taskRecordSchema, } from "./schema.js";
17
+ import { KERNEL_JSON_BASENAME, KERNEL_SCHEMA_VERSION, KernelError, deriveStateForPhase, emptyKernelGates, hookIsPresent, hopsToClose, hopsToExecute, isKernelPhase, isLegalPhaseEdge, isNonNegativeInt, kernelPhaseToLegacyStatus, parseKernelSnapshot, projectLegacyStatus, requireNonEmptyString, } from "./kernel-contract.js";
18
+ const LOCK_BASENAME = "kernel.json.lock";
19
+ const LOCK_MAX_WAIT_MS = 5000;
20
+ const LOCK_RETRY_MS = 25;
21
+ let kernelAfterWriteHook = null;
22
+ /** Test-only interceptor between kernel.json persist and task.json projection. */
23
+ export function setKernelAfterWriteHook(hook) {
24
+ kernelAfterWriteHook = hook;
25
+ }
26
+ export function resolveTaskDir(taskDir, cwd) {
27
+ if (path.isAbsolute(taskDir))
28
+ return taskDir;
29
+ return path.resolve(cwd ?? process.cwd(), taskDir);
30
+ }
31
+ export function kernelJsonPath(taskDir) {
32
+ return path.join(taskDir, KERNEL_JSON_BASENAME);
33
+ }
34
+ export function readKernel(options) {
35
+ const dir = resolveTaskDir(options.taskDir, options.cwd);
36
+ assertTaskJson(dir);
37
+ return withKernelLock(dir, () => readKernelUnlocked(dir));
38
+ }
39
+ function readProjectionBytes(dir) {
40
+ try {
41
+ return fs.readFileSync(path.join(dir, "task.json"));
42
+ }
43
+ catch (error) {
44
+ if (error.code === "ENOENT")
45
+ return null;
46
+ throw error;
47
+ }
48
+ }
49
+ /** No lock creation, fallback migration, projection write, or directory creation. */
50
+ export function inspectTaskProjection(options) {
51
+ const dir = resolveTaskDir(options.taskDir, options.cwd);
52
+ const canonical = loadKernelFile(kernelJsonPath(dir));
53
+ return inspectProjection(canonical, readProjectionBytes(dir));
54
+ }
55
+ /** Conservative namespace guard for the new repair entrypoint only. */
56
+ function assertSafeProjectionPath(target, kind) {
57
+ const resolved = path.resolve(target);
58
+ let current = resolved;
59
+ while (true) {
60
+ try {
61
+ const stat = fs.lstatSync(current);
62
+ const expectedDirectory = current !== resolved || kind === "directory";
63
+ if (stat.isSymbolicLink() || (expectedDirectory ? !stat.isDirectory() : !stat.isFile()) ||
64
+ (stat.isFile() && stat.nlink !== 1)) {
65
+ throw new KernelError("INVALID_REQUEST", "projection repair refuses unsafe projection path");
66
+ }
67
+ // Node exposes Windows junctions as symlinks, and lstat also reports
68
+ // hard links through nlink. Do not compare the textual result of
69
+ // realpathSync.native() with the requested path here: hosted Windows
70
+ // runners can place the temp directory below a reparse-point alias (or
71
+ // return an 8.3/\\?\\ spelling), even though the requested file is
72
+ // inside the same namespace. Such a comparison rejects every ordinary
73
+ // repair on those runners. Explicit links are rejected above; the
74
+ // atomic writer below re-checks the same lstat/nlink invariants before
75
+ // installation.
76
+ }
77
+ catch (error) {
78
+ if (error.code !== "ENOENT")
79
+ throw error;
80
+ }
81
+ const parent = path.dirname(current);
82
+ if (parent === current)
83
+ return;
84
+ current = parent;
85
+ }
86
+ }
87
+ function assertProjectionRepairNamespace(dir) {
88
+ assertSafeProjectionPath(dir, "directory");
89
+ for (const name of [KERNEL_JSON_BASENAME, "task.json", LOCK_BASENAME]) {
90
+ assertSafeProjectionPath(path.join(dir, name), "file");
91
+ }
92
+ }
93
+ /**
94
+ * Explicit repair under the same cooperative writer lock as lifecycle writes.
95
+ * The existing records primitive writes a private staging file; an atomic rename
96
+ * installs it only after canonical revision and exact current-byte CAS checks.
97
+ * Unknown user keys survive valid JSON repairs except unsafe __proto__, which
98
+ * fails closed. Malformed bytes are replaced only when the caller supplies their
99
+ * exact observed fingerprint. Symlink/junction ancestors and hardlinked storage
100
+ * files are rejected before lock/staging writes and checked again before rename.
101
+ */
102
+ export function repairTaskProjection(request) {
103
+ const dir = path.resolve(resolveTaskDir(request.taskDir, request.cwd));
104
+ if (!isNonNegativeInt(request.expectedCanonicalRevision) ||
105
+ (request.expectedCurrentFingerprint !== null && !/^sha256:[0-9a-f]{64}$/.test(request.expectedCurrentFingerprint))) {
106
+ throw new KernelError("INVALID_REQUEST", "projection repair requires revision and exact observed fingerprint");
107
+ }
108
+ assertProjectionRepairNamespace(dir);
109
+ // Never manufacture a task when canonical state is absent.
110
+ loadKernelFile(kernelJsonPath(dir));
111
+ return withKernelLock(dir, () => {
112
+ assertProjectionRepairNamespace(dir);
113
+ const canonical = loadKernelFile(kernelJsonPath(dir));
114
+ const before = readProjectionBytes(dir);
115
+ const inspection = inspectProjection(canonical, before);
116
+ const receipt = (status, after = inspection.currentFingerprint) => ({
117
+ status, canonicalRevision: canonical.revision,
118
+ beforeFingerprint: inspection.currentFingerprint, afterFingerprint: after,
119
+ });
120
+ if (inspection.canonicalRevision !== request.expectedCanonicalRevision || inspection.currentFingerprint !== request.expectedCurrentFingerprint) {
121
+ return receipt("cas-mismatch");
122
+ }
123
+ if (inspection.status === "in-sync")
124
+ return receipt("in-sync");
125
+ const projection = canonical.projection;
126
+ if (!projection)
127
+ throw new KernelError("CORRUPT_STATE", "canonical projection is missing");
128
+ let foreign = {};
129
+ if (before !== null) {
130
+ try {
131
+ const value = JSON.parse(before.toString("utf8"));
132
+ if (isPlainObject(value))
133
+ foreign = value;
134
+ }
135
+ catch { /* Malformed projection was explicitly fingerprint-approved. */ }
136
+ }
137
+ // records.ts intentionally remains the sole writer primitive. Its ordinary
138
+ // object assignment cannot faithfully project a top-level __proto__ key;
139
+ // reject at this explicit repair boundary instead of losing user content.
140
+ if (Object.hasOwn(foreign, "__proto__") || Object.hasOwn(projection.extras, "__proto__")) {
141
+ throw new KernelError("INVALID_REQUEST", "projection repair refuses unsafe projection key");
142
+ }
143
+ const target = path.join(dir, "task.json");
144
+ assertProjectionRepairNamespace(dir);
145
+ const staging = fs.mkdtempSync(path.join(dir, ".projection-repair-"));
146
+ const stagedFile = path.join(staging, "task.json");
147
+ try {
148
+ assertSafeProjectionPath(staging, "directory");
149
+ writeTaskRecord({ taskDir: staging, record: { ...projection.record, status: projection.status }, extra: { ...foreign, ...projection.extras } });
150
+ const fd = fs.openSync(stagedFile, fs.constants.O_RDWR | (fs.constants.O_NOFOLLOW ?? 0));
151
+ try {
152
+ assertSafeProjectionPath(stagedFile, "file");
153
+ const opened = fs.fstatSync(fd);
154
+ const named = fs.lstatSync(stagedFile);
155
+ if (!opened.isFile() || opened.nlink !== 1 || opened.dev !== named.dev || opened.ino !== named.ino) {
156
+ throw new KernelError("INVALID_REQUEST", "projection repair refuses unsafe projection path");
157
+ }
158
+ fs.fsyncSync(fd);
159
+ }
160
+ finally {
161
+ fs.closeSync(fd);
162
+ }
163
+ // Recheck immediately before replacement, including non-cooperative writers.
164
+ assertProjectionRepairNamespace(dir);
165
+ assertSafeProjectionPath(stagedFile, "file");
166
+ const finalCurrentFingerprint = projectionBytesFingerprint(readProjectionBytes(dir));
167
+ if (loadKernelFile(kernelJsonPath(dir)).revision !== canonical.revision || finalCurrentFingerprint !== inspection.currentFingerprint) {
168
+ return receipt("cas-mismatch", finalCurrentFingerprint);
169
+ }
170
+ fs.renameSync(stagedFile, target); // No non-atomic Windows copy fallback.
171
+ return receipt("repaired", projectionBytesFingerprint(readProjectionBytes(dir)));
172
+ }
173
+ finally {
174
+ // Never follow a redirected staging namespace while handling a failure.
175
+ assertSafeProjectionPath(staging, "directory");
176
+ if (fs.existsSync(stagedFile)) {
177
+ assertSafeProjectionPath(stagedFile, "file");
178
+ fs.unlinkSync(stagedFile);
179
+ }
180
+ fs.rmdirSync(staging);
181
+ }
182
+ });
183
+ }
184
+ export function createTaskProjectionPort(options) {
185
+ return {
186
+ inspect: () => inspectTaskProjection(options),
187
+ repair: (expected) => repairTaskProjection({ ...options, expectedCanonicalRevision: expected.canonicalRevision, expectedCurrentFingerprint: expected.currentFingerprint }),
188
+ };
189
+ }
190
+ export function applyKernelTransition(request) {
191
+ validateTransitionHooks(request);
192
+ const dir = resolveTaskDir(request.taskDir, request.cwd);
193
+ const actor = requireNonEmptyString(request.actor, "actor");
194
+ const idempotencyKey = requireNonEmptyString(request.idempotencyKey, "idempotencyKey");
195
+ if (!isKernelPhase(request.targetPhase)) {
196
+ throw new KernelError("INVALID_REQUEST", "targetPhase is not a Kernel phase");
197
+ }
198
+ if (!isNonNegativeInt(request.expectedRevision)) {
199
+ throw new KernelError("INVALID_REQUEST", "expectedRevision must be a non-negative integer");
200
+ }
201
+ const evidence = request.evidence === undefined || request.evidence === null
202
+ ? null
203
+ : requireNonEmptyString(request.evidence, "evidence");
204
+ assertTaskJson(dir);
205
+ return withKernelLock(dir, () => {
206
+ const current = readKernelUnlocked(dir);
207
+ const prior = current.kernel.audit.find((event) => event.idempotencyKey === idempotencyKey);
208
+ if (prior) {
209
+ if (prior.to.phase !== request.targetPhase) {
210
+ throw new KernelError("IDEMPOTENCY_MISMATCH", `idempotencyKey ${idempotencyKey} already applied to ${prior.to.phase}`);
211
+ }
212
+ return {
213
+ ...current,
214
+ idempotent: true,
215
+ audit: prior,
216
+ };
217
+ }
218
+ if (request.expectedRevision !== current.kernel.revision) {
219
+ throw new KernelError("REVISION_CONFLICT", `expected revision ${request.expectedRevision} but kernel is at ${current.kernel.revision}`);
220
+ }
221
+ if (!isLegalPhaseEdge(current.kernel.phase, request.targetPhase)) {
222
+ throw new KernelError("INVALID_TRANSITION", `illegal Kernel edge ${current.kernel.phase} -> ${request.targetPhase}`);
223
+ }
224
+ const fromState = {
225
+ phase: current.kernel.phase,
226
+ condition: current.kernel.condition,
227
+ outcome: current.kernel.outcome,
228
+ revision: current.kernel.revision,
229
+ };
230
+ const nextState = deriveStateForPhase(request.targetPhase);
231
+ const nextRevision = current.kernel.revision + 1;
232
+ const audit = {
233
+ id: randomUUID(),
234
+ at: new Date().toISOString(),
235
+ actor,
236
+ idempotencyKey,
237
+ evidence,
238
+ from: fromState,
239
+ to: { ...nextState, revision: nextRevision },
240
+ };
241
+ const next = {
242
+ schemaVersion: KERNEL_SCHEMA_VERSION,
243
+ identity: { taskId: current.kernel.identity.taskId },
244
+ revision: nextRevision,
245
+ phase: nextState.phase,
246
+ condition: nextState.condition,
247
+ outcome: nextState.outcome,
248
+ audit: [...current.kernel.audit, audit],
249
+ gates: current.kernel.gates,
250
+ projection: current.kernel.projection,
251
+ };
252
+ persistKernelSnapshot(dir, next);
253
+ const legacy = current.legacy;
254
+ return {
255
+ kernel: next,
256
+ persisted: true,
257
+ legacy,
258
+ idempotent: false,
259
+ audit,
260
+ };
261
+ });
262
+ }
263
+ function validateTransitionHooks(request) {
264
+ if (hookIsPresent(request.gate)) {
265
+ throw new KernelError("GATE_HOOK_UNIMPLEMENTED", "Gate hooks are Stage 1 placeholders and cannot be treated as passing");
266
+ }
267
+ if (hookIsPresent(request.policy)) {
268
+ throw new KernelError("POLICY_HOOK_UNIMPLEMENTED", "Policy hooks are Stage 1 placeholders and cannot be treated as passing");
269
+ }
270
+ }
271
+ function assertTaskJson(dir) {
272
+ if (!fs.existsSync(path.join(dir, "task.json"))) {
273
+ throw new KernelError("NOT_FOUND", `task.json not found in ${dir}`);
274
+ }
275
+ }
276
+ function readKernelUnlocked(dir) {
277
+ const file = kernelJsonPath(dir);
278
+ const taskFile = path.join(dir, "task.json");
279
+ if (!fs.existsSync(taskFile)) {
280
+ if (!fs.existsSync(file)) {
281
+ throw new KernelError("NOT_FOUND", `task.json not found in ${dir}`);
282
+ }
283
+ const kernel = loadKernelFile(file);
284
+ return {
285
+ kernel,
286
+ persisted: true,
287
+ legacy: legacyFromSnapshot(kernel),
288
+ };
289
+ }
290
+ const record = loadTaskRecord({ taskDir: dir });
291
+ const legacy = {
292
+ status: record.status,
293
+ id: record.id,
294
+ name: record.name,
295
+ title: record.title,
296
+ };
297
+ if (!fs.existsSync(file)) {
298
+ const projected = projectLegacyStatus(record.status);
299
+ const kernel = {
300
+ schemaVersion: KERNEL_SCHEMA_VERSION,
301
+ identity: { taskId: record.id },
302
+ revision: 0,
303
+ phase: projected.phase,
304
+ condition: projected.condition,
305
+ outcome: projected.outcome,
306
+ audit: [],
307
+ gates: emptyKernelGates(),
308
+ projection: null,
309
+ };
310
+ return { kernel, persisted: false, legacy };
311
+ }
312
+ const kernel = loadKernelFile(file);
313
+ if (kernel.identity.taskId !== record.id) {
314
+ throw new KernelError("CORRUPT_STATE", `kernel identity ${kernel.identity.taskId} does not match task.json id ${record.id}`);
315
+ }
316
+ return { kernel, persisted: true, legacy };
317
+ }
318
+ function withKernelLock(taskDir, fn) {
319
+ const lockFile = path.join(taskDir, LOCK_BASENAME);
320
+ acquireLockSync(lockFile);
321
+ try {
322
+ return fn();
323
+ }
324
+ finally {
325
+ releaseLockSync(lockFile);
326
+ }
327
+ }
328
+ function acquireLockSync(lockFile) {
329
+ fs.mkdirSync(path.dirname(lockFile), { recursive: true });
330
+ const deadline = Date.now() + LOCK_MAX_WAIT_MS;
331
+ while (true) {
332
+ try {
333
+ const fd = fs.openSync(lockFile, "wx");
334
+ fs.writeSync(fd, String(process.pid));
335
+ fs.closeSync(fd);
336
+ return;
337
+ }
338
+ catch (err) {
339
+ if (err.code !== "EEXIST")
340
+ throw err;
341
+ }
342
+ stealStaleLock(lockFile);
343
+ if (Date.now() >= deadline) {
344
+ throw new KernelError("LOCK_TIMEOUT", `Failed to acquire kernel lock ${lockFile} within ${LOCK_MAX_WAIT_MS}ms`);
345
+ }
346
+ sleepSync(LOCK_RETRY_MS);
347
+ }
348
+ }
349
+ function stealStaleLock(lockFile) {
350
+ let holderPid = 0;
351
+ try {
352
+ holderPid = Number(fs.readFileSync(lockFile, "utf-8").trim());
353
+ }
354
+ catch {
355
+ return;
356
+ }
357
+ if (!holderPid || pidAlive(holderPid))
358
+ return;
359
+ try {
360
+ fs.unlinkSync(lockFile);
361
+ }
362
+ catch {
363
+ // lost the race
364
+ }
365
+ }
366
+ function releaseLockSync(lockFile) {
367
+ try {
368
+ const content = fs.readFileSync(lockFile, "utf-8").trim();
369
+ if (content === String(process.pid)) {
370
+ fs.unlinkSync(lockFile);
371
+ }
372
+ }
373
+ catch {
374
+ // already gone
375
+ }
376
+ }
377
+ function pidAlive(pid) {
378
+ try {
379
+ process.kill(pid, 0);
380
+ return true;
381
+ }
382
+ catch {
383
+ return false;
384
+ }
385
+ }
386
+ function sleepSync(ms) {
387
+ const sab = new SharedArrayBuffer(4);
388
+ Atomics.wait(new Int32Array(sab), 0, 0, ms);
389
+ }
390
+ function atomicWriteFile(targetPath, contents) {
391
+ const dir = path.dirname(targetPath);
392
+ fs.mkdirSync(dir, { recursive: true });
393
+ const tmpPath = path.join(dir, `.${path.basename(targetPath)}.${process.pid}.${Date.now()}.tmp`);
394
+ fs.writeFileSync(tmpPath, contents, "utf-8");
395
+ try {
396
+ fs.renameSync(tmpPath, targetPath);
397
+ }
398
+ catch (err) {
399
+ const code = err.code;
400
+ if (code === "EEXIST" || code === "EPERM" || process.platform === "win32") {
401
+ fs.copyFileSync(tmpPath, targetPath);
402
+ fs.unlinkSync(tmpPath);
403
+ return;
404
+ }
405
+ try {
406
+ fs.unlinkSync(tmpPath);
407
+ }
408
+ catch {
409
+ // ignore leftover tmp
410
+ }
411
+ throw err;
412
+ }
413
+ }
414
+ function loadKernelFile(file) {
415
+ const raw = fs.readFileSync(file, "utf-8");
416
+ let parsed;
417
+ try {
418
+ parsed = JSON.parse(raw);
419
+ }
420
+ catch (err) {
421
+ throw new KernelError("CORRUPT_STATE", `Failed to parse ${file}: ${err instanceof Error ? err.message : String(err)}`);
422
+ }
423
+ return parseKernelSnapshot(parsed);
424
+ }
425
+ function legacyFromSnapshot(kernel) {
426
+ const record = kernel.projection?.record;
427
+ if (record) {
428
+ return {
429
+ status: kernel.projection?.status ?? record.status,
430
+ id: record.id,
431
+ name: record.name,
432
+ title: record.title,
433
+ };
434
+ }
435
+ return {
436
+ status: kernelPhaseToLegacyStatus(kernel.phase),
437
+ id: kernel.identity.taskId,
438
+ name: kernel.identity.taskId,
439
+ title: kernel.identity.taskId,
440
+ };
441
+ }
442
+ function cloneJsonObject(value) {
443
+ return JSON.parse(JSON.stringify(value));
444
+ }
445
+ function mergeExtras(current, incoming, record, phase = "patch", boundary = legacyKernelExtrasBoundary) {
446
+ const merged = stripRetiredExtras({
447
+ ...cloneJsonObject(current),
448
+ ...(incoming === undefined ? {} : cloneJsonObject(incoming)),
449
+ });
450
+ normalizeRequiredControlsInExtras(merged);
451
+ boundary(merged, record ?? {}, phase);
452
+ return merged;
453
+ }
454
+ function requireEvidence(value, field) {
455
+ if (value === undefined || value === null)
456
+ return null;
457
+ return requireNonEmptyString(value, field);
458
+ }
459
+ function persistKernelSnapshot(dir, snapshot) {
460
+ // Reject unprojectable own keys before canonical state can advance. This also
461
+ // protects the state-only transition route, which carries an old projection.
462
+ if (snapshot.projection)
463
+ lifecycleProjectionExtras(dir, snapshot.projection.extras);
464
+ atomicWriteFile(kernelJsonPath(dir), `${JSON.stringify(snapshot, null, 2)}\n`);
465
+ }
466
+ /** Supply foreign own keys explicitly: the legacy writer's fallback uses `in`. */
467
+ function lifecycleProjectionExtras(dir, extras) {
468
+ const raw = readProjectionBytes(dir);
469
+ let foreign = {};
470
+ if (raw !== null) {
471
+ try {
472
+ const parsed = JSON.parse(raw.toString("utf8"));
473
+ if (isPlainObject(parsed))
474
+ foreign = parsed;
475
+ }
476
+ catch { /* The established writer retains its corrupt-projection rejection. */ }
477
+ }
478
+ if (Object.hasOwn(foreign, "__proto__") || Object.hasOwn(extras, "__proto__")) {
479
+ throw new KernelError("INVALID_REQUEST", "lifecycle refuses unsafe projection key");
480
+ }
481
+ return { ...foreign, ...extras };
482
+ }
483
+ function commitKernelAndProject(dir, snapshot) {
484
+ if (!snapshot.projection) {
485
+ throw new KernelError("INVALID_REQUEST", "Kernel command requires a legacy projection");
486
+ }
487
+ persistKernelSnapshot(dir, snapshot);
488
+ try {
489
+ if (kernelAfterWriteHook) {
490
+ kernelAfterWriteHook();
491
+ }
492
+ writeTaskRecord({
493
+ taskDir: dir,
494
+ record: snapshot.projection.record,
495
+ extra: lifecycleProjectionExtras(dir, snapshot.projection.extras),
496
+ });
497
+ }
498
+ catch (err) {
499
+ if (err instanceof KernelError && err.code === "HALF_CONVERSION") {
500
+ throw err;
501
+ }
502
+ throw new KernelError("HALF_CONVERSION", `kernel.json committed at revision ${snapshot.revision} but task.json projection failed: ${err instanceof Error ? err.message : String(err)}`);
503
+ }
504
+ return {
505
+ kernel: snapshot,
506
+ persisted: true,
507
+ legacy: legacyFromSnapshot(snapshot),
508
+ idempotent: false,
509
+ audit: snapshot.audit[snapshot.audit.length - 1],
510
+ projected: true,
511
+ };
512
+ }
513
+ function hopKernelSnapshot(current, hops, meta) {
514
+ const prior = current.audit.find((event) => event.idempotencyKey === meta.idempotencyKey);
515
+ if (prior) {
516
+ return { snapshot: current, audit: prior, idempotent: true };
517
+ }
518
+ if (hops.length === 0) {
519
+ const nextRevision = current.revision + 1;
520
+ const state = {
521
+ phase: current.phase,
522
+ condition: current.condition,
523
+ outcome: current.outcome,
524
+ };
525
+ const audit = {
526
+ id: randomUUID(),
527
+ at: new Date().toISOString(),
528
+ actor: meta.actor,
529
+ idempotencyKey: meta.idempotencyKey,
530
+ evidence: meta.evidence,
531
+ from: { ...state, revision: current.revision },
532
+ to: { ...state, revision: nextRevision },
533
+ };
534
+ return {
535
+ snapshot: {
536
+ ...current,
537
+ revision: nextRevision,
538
+ audit: [...current.audit, audit],
539
+ },
540
+ audit,
541
+ idempotent: false,
542
+ };
543
+ }
544
+ let snapshot = current;
545
+ let lastAudit;
546
+ hops.forEach((target, index) => {
547
+ const key = index === hops.length - 1
548
+ ? meta.idempotencyKey
549
+ : `${meta.idempotencyKey}#${target}`;
550
+ if (!isLegalPhaseEdge(snapshot.phase, target)) {
551
+ throw new KernelError("INVALID_TRANSITION", `illegal Kernel edge ${snapshot.phase} -> ${target}`);
552
+ }
553
+ const fromState = {
554
+ phase: snapshot.phase,
555
+ condition: snapshot.condition,
556
+ outcome: snapshot.outcome,
557
+ revision: snapshot.revision,
558
+ };
559
+ const nextState = deriveStateForPhase(target);
560
+ const nextRevision = snapshot.revision + 1;
561
+ lastAudit = {
562
+ id: randomUUID(),
563
+ at: new Date().toISOString(),
564
+ actor: meta.actor,
565
+ idempotencyKey: key,
566
+ evidence: meta.evidence,
567
+ from: fromState,
568
+ to: { ...nextState, revision: nextRevision },
569
+ };
570
+ snapshot = {
571
+ ...snapshot,
572
+ revision: nextRevision,
573
+ phase: nextState.phase,
574
+ condition: nextState.condition,
575
+ outcome: nextState.outcome,
576
+ audit: [...snapshot.audit, lastAudit],
577
+ };
578
+ });
579
+ if (!lastAudit) {
580
+ throw new KernelError("INVALID_REQUEST", "Kernel hop produced no audit event");
581
+ }
582
+ return { snapshot, audit: lastAudit, idempotent: false };
583
+ }
584
+ function attachProjection(snapshot, record, extras, status) {
585
+ const projection = {
586
+ status,
587
+ record: taskRecordSchema.parse({
588
+ ...record,
589
+ status,
590
+ meta: stripRetiredMeta(record.meta),
591
+ }),
592
+ extras: cloneJsonObject(stripRetiredExtras(extras)),
593
+ };
594
+ return { ...snapshot, projection };
595
+ }
596
+ function expectRevision(current, expected) {
597
+ if (expected !== current.revision) {
598
+ throw new KernelError("REVISION_CONFLICT", `expected revision ${expected} but kernel is at ${current.revision}`);
599
+ }
600
+ }
601
+ function assertHonestGateRecord(record) {
602
+ const result = record.result;
603
+ if (result !== "PASS" && result !== "FAIL" && result !== "SKIPPED") {
604
+ throw new KernelError("INVALID_REQUEST", "gate record.result must be PASS, FAIL, or SKIPPED");
605
+ }
606
+ if (result === "PASS") {
607
+ if (typeof record.evidence !== "string" || record.evidence.trim() === "") {
608
+ throw new KernelError("INVALID_REQUEST", "PASS gate records require non-empty evidence (no fake-green)");
609
+ }
610
+ }
611
+ if (result === "SKIPPED") {
612
+ const skip = record.approved_skip;
613
+ if (!skip ||
614
+ typeof skip !== "object" ||
615
+ Array.isArray(skip) ||
616
+ typeof skip.approved_by !== "string" ||
617
+ typeof skip.reason !== "string") {
618
+ throw new KernelError("INVALID_REQUEST", "SKIPPED gate records require approved_skip.approved_by and reason");
619
+ }
620
+ }
621
+ }
622
+ export function applyKernelCreate(request) {
623
+ validateTransitionHooks(request);
624
+ const dir = resolveTaskDir(request.taskDir, request.cwd);
625
+ const actor = requireNonEmptyString(request.actor, "actor");
626
+ const idempotencyKey = requireNonEmptyString(request.idempotencyKey, "idempotencyKey");
627
+ const record = taskRecordSchema.parse({
628
+ ...request.record,
629
+ status: request.record.status || "planning",
630
+ });
631
+ const extras = mergeExtras({}, request.extras, record, "create", request.extrasBoundary);
632
+ const evidence = requireEvidence(request.evidence, "evidence");
633
+ fs.mkdirSync(dir, { recursive: true });
634
+ return withKernelLock(dir, () => {
635
+ if (fs.existsSync(kernelJsonPath(dir))) {
636
+ const current = readKernelUnlocked(dir);
637
+ const prior = current.kernel.audit.find((event) => event.idempotencyKey === idempotencyKey);
638
+ if (prior) {
639
+ if (!fs.existsSync(path.join(dir, "task.json")) && current.kernel.projection) {
640
+ return commitKernelAndProject(dir, current.kernel);
641
+ }
642
+ return {
643
+ ...current,
644
+ idempotent: true,
645
+ audit: prior,
646
+ projected: fs.existsSync(path.join(dir, "task.json")),
647
+ };
648
+ }
649
+ throw new KernelError("INVALID_REQUEST", `kernel.json already exists for ${current.kernel.identity.taskId}`);
650
+ }
651
+ const openState = deriveStateForPhase("open");
652
+ const defineState = deriveStateForPhase("define");
653
+ const audit = {
654
+ id: randomUUID(),
655
+ at: new Date().toISOString(),
656
+ actor,
657
+ idempotencyKey,
658
+ evidence,
659
+ from: { ...openState, revision: 0 },
660
+ to: { ...defineState, revision: 1 },
661
+ };
662
+ const snapshot = {
663
+ schemaVersion: KERNEL_SCHEMA_VERSION,
664
+ identity: { taskId: record.id },
665
+ revision: 1,
666
+ phase: defineState.phase,
667
+ condition: defineState.condition,
668
+ outcome: defineState.outcome,
669
+ audit: [audit],
670
+ gates: emptyKernelGates(),
671
+ projection: null,
672
+ };
673
+ const next = attachProjection(snapshot, record, extras, "planning");
674
+ const result = commitKernelAndProject(dir, next);
675
+ return { ...result, audit, idempotent: false };
676
+ });
677
+ }
678
+ export function applyKernelStart(request) {
679
+ validateTransitionHooks(request);
680
+ const dir = resolveTaskDir(request.taskDir, request.cwd);
681
+ const actor = requireNonEmptyString(request.actor, "actor");
682
+ const idempotencyKey = requireNonEmptyString(request.idempotencyKey, "idempotencyKey");
683
+ if (!isNonNegativeInt(request.expectedRevision)) {
684
+ throw new KernelError("INVALID_REQUEST", "expectedRevision must be a non-negative integer");
685
+ }
686
+ const record = taskRecordSchema.parse(request.record);
687
+ const evidence = requireEvidence(request.evidence, "evidence");
688
+ return withKernelLock(dir, () => {
689
+ const current = readKernelUnlocked(dir);
690
+ const prior = current.kernel.audit.find((event) => event.idempotencyKey === idempotencyKey);
691
+ if (prior) {
692
+ if (!fs.existsSync(path.join(dir, "task.json")) && current.kernel.projection) {
693
+ return commitKernelAndProject(dir, current.kernel);
694
+ }
695
+ return {
696
+ ...current,
697
+ idempotent: true,
698
+ audit: prior,
699
+ projected: true,
700
+ };
701
+ }
702
+ expectRevision(current.kernel, request.expectedRevision);
703
+ const extras = mergeExtras(current.kernel.projection?.extras ?? {}, request.extras, record, "start", request.extrasBoundary);
704
+ assertFullQualityForPhase(dir, extras, "start");
705
+ const hops = hopsToExecute(current.kernel.phase);
706
+ const hopped = hopKernelSnapshot(current.kernel, hops, {
707
+ actor,
708
+ idempotencyKey,
709
+ evidence,
710
+ });
711
+ const next = attachProjection(hopped.snapshot, record, extras, "in_progress");
712
+ const result = commitKernelAndProject(dir, next);
713
+ return { ...result, audit: hopped.audit, idempotent: hopped.idempotent };
714
+ });
715
+ }
716
+ export function applyKernelRecordGate(request) {
717
+ const dir = resolveTaskDir(request.taskDir, request.cwd);
718
+ const actor = requireNonEmptyString(request.actor, "actor");
719
+ const idempotencyKey = requireNonEmptyString(request.idempotencyKey, "idempotencyKey");
720
+ const transition = requireNonEmptyString(request.transition, "transition");
721
+ const gateName = requireNonEmptyString(request.gateName, "gate");
722
+ if (!isNonNegativeInt(request.expectedRevision)) {
723
+ throw new KernelError("INVALID_REQUEST", "expectedRevision must be a non-negative integer");
724
+ }
725
+ assertHonestGateRecord(request.record);
726
+ if (gateName === "independent-check") {
727
+ assertIndependentCheckGateRecord(request.record);
728
+ }
729
+ const evidence = requireEvidence(request.evidence, "evidence") ??
730
+ (typeof request.record.evidence === "string"
731
+ ? request.record.evidence
732
+ : null);
733
+ return withKernelLock(dir, () => {
734
+ const current = readKernelUnlocked(dir);
735
+ const prior = current.kernel.audit.find((event) => event.idempotencyKey === idempotencyKey);
736
+ if (prior) {
737
+ if (!fs.existsSync(path.join(dir, "task.json")) && current.kernel.projection) {
738
+ return commitKernelAndProject(dir, current.kernel);
739
+ }
740
+ return {
741
+ ...current,
742
+ idempotent: true,
743
+ audit: prior,
744
+ projected: true,
745
+ };
746
+ }
747
+ expectRevision(current.kernel, request.expectedRevision);
748
+ const gates = {
749
+ schemaVersion: 1,
750
+ transitions: {
751
+ ...current.kernel.gates.transitions,
752
+ [transition]: {
753
+ ...(Object.hasOwn(current.kernel.gates.transitions, transition) ? current.kernel.gates.transitions[transition] : {}),
754
+ [gateName]: cloneJsonObject(request.record),
755
+ },
756
+ },
757
+ };
758
+ const hopped = hopKernelSnapshot(current.kernel, [], {
759
+ actor,
760
+ idempotencyKey,
761
+ evidence,
762
+ });
763
+ const baseRecord = current.kernel.projection?.record ??
764
+ loadTaskRecord({ taskDir: dir });
765
+ const extras = mergeExtras(current.kernel.projection?.extras ?? {}, request.extras, baseRecord, "patch", request.extrasBoundary);
766
+ extras.quality_gate_results =
767
+ extras.quality_gate_results ??
768
+ {
769
+ schema_version: 1,
770
+ transitions: gates.transitions,
771
+ };
772
+ if (gateName === "independent-check" && extras.independent_check === undefined) {
773
+ extras.independent_check = {
774
+ schema_version: 1,
775
+ mode: request.record.mode ?? request.record.assurance,
776
+ readonly: true,
777
+ result: request.record.result,
778
+ evidence: request.record.evidence,
779
+ independent_worker: request.record.independent_worker === true,
780
+ code_fingerprint: request.record.code_fingerprint ?? "",
781
+ };
782
+ }
783
+ const next = attachProjection({ ...hopped.snapshot, gates }, baseRecord, extras, baseRecord.status);
784
+ const result = commitKernelAndProject(dir, next);
785
+ return { ...result, audit: hopped.audit, idempotent: false };
786
+ });
787
+ }
788
+ export function applyKernelArchive(request) {
789
+ validateTransitionHooks(request);
790
+ const dir = resolveTaskDir(request.taskDir, request.cwd);
791
+ const actor = requireNonEmptyString(request.actor, "actor");
792
+ const idempotencyKey = requireNonEmptyString(request.idempotencyKey, "idempotencyKey");
793
+ if (!isNonNegativeInt(request.expectedRevision)) {
794
+ throw new KernelError("INVALID_REQUEST", "expectedRevision must be a non-negative integer");
795
+ }
796
+ const record = taskRecordSchema.parse(request.record);
797
+ const evidence = requireEvidence(request.evidence, "evidence");
798
+ return withKernelLock(dir, () => {
799
+ const current = readKernelUnlocked(dir);
800
+ const prior = current.kernel.audit.find((event) => event.idempotencyKey === idempotencyKey);
801
+ if (prior) {
802
+ if (!fs.existsSync(path.join(dir, "task.json")) && current.kernel.projection) {
803
+ return commitKernelAndProject(dir, current.kernel);
804
+ }
805
+ return {
806
+ ...current,
807
+ idempotent: true,
808
+ audit: prior,
809
+ projected: true,
810
+ };
811
+ }
812
+ expectRevision(current.kernel, request.expectedRevision);
813
+ const extras = mergeExtras(current.kernel.projection?.extras ?? {}, request.extras, record, "archive", request.extrasBoundary);
814
+ assertFullQualityForPhase(dir, extras, "archive");
815
+ const hops = hopsToClose(current.kernel.phase);
816
+ const hopped = hopKernelSnapshot(current.kernel, hops, {
817
+ actor,
818
+ idempotencyKey,
819
+ evidence,
820
+ });
821
+ const next = attachProjection(hopped.snapshot, record, extras, "completed");
822
+ const result = commitKernelAndProject(dir, next);
823
+ return { ...result, audit: hopped.audit, idempotent: hopped.idempotent };
824
+ });
825
+ }
826
+ function mergeCanonicalRecord(base, patch) {
827
+ if (patch === undefined || patch === null)
828
+ return base;
829
+ if (!isPlainObject(patch)) {
830
+ throw new KernelError("INVALID_REQUEST", "record must be a JSON object");
831
+ }
832
+ const merged = { ...base };
833
+ for (const field of TASK_RECORD_FIELD_ORDER) {
834
+ if (!Object.hasOwn(patch, field))
835
+ continue;
836
+ if (field === "meta" && isPlainObject(patch.meta) && isPlainObject(base.meta)) {
837
+ merged.meta = { ...base.meta, ...patch.meta };
838
+ continue;
839
+ }
840
+ merged[field] = patch[field];
841
+ }
842
+ try {
843
+ return taskRecordSchema.parse(merged);
844
+ }
845
+ catch (err) {
846
+ throw new KernelError("INVALID_REQUEST", `record is not a canonical task.json shape: ${err instanceof Error ? err.message : String(err)}`);
847
+ }
848
+ }
849
+ function assertNoLifecycleStatusHop(from, to) {
850
+ if (from === to)
851
+ return;
852
+ throw new KernelError("INVALID_TRANSITION", `Kernel patch cannot change status (${from} -> ${to}); use start or archive`);
853
+ }
854
+ function currentProjectionRecord(dir, current) {
855
+ if (current.kernel.projection?.record) {
856
+ return current.kernel.projection.record;
857
+ }
858
+ return loadTaskRecord({ taskDir: dir });
859
+ }
860
+ export function applyKernelPatch(request) {
861
+ validateTransitionHooks(request);
862
+ const dir = resolveTaskDir(request.taskDir, request.cwd);
863
+ const actor = requireNonEmptyString(request.actor, "actor");
864
+ const idempotencyKey = requireNonEmptyString(request.idempotencyKey, "idempotencyKey");
865
+ if (!isNonNegativeInt(request.expectedRevision)) {
866
+ throw new KernelError("INVALID_REQUEST", "expectedRevision must be a non-negative integer");
867
+ }
868
+ if (request.record === undefined && request.extras === undefined) {
869
+ throw new KernelError("INVALID_REQUEST", "patch requires record and/or extras");
870
+ }
871
+ const extrasPatch = request.extras === undefined ? undefined : cloneJsonObject(request.extras);
872
+ const evidence = requireEvidence(request.evidence, "evidence");
873
+ return withKernelLock(dir, () => {
874
+ const current = readKernelUnlocked(dir);
875
+ const prior = current.kernel.audit.find((event) => event.idempotencyKey === idempotencyKey);
876
+ if (prior) {
877
+ if (!fs.existsSync(path.join(dir, "task.json")) && current.kernel.projection) {
878
+ return commitKernelAndProject(dir, current.kernel);
879
+ }
880
+ return {
881
+ ...current,
882
+ idempotent: true,
883
+ audit: prior,
884
+ projected: true,
885
+ };
886
+ }
887
+ expectRevision(current.kernel, request.expectedRevision);
888
+ const baseRecord = currentProjectionRecord(dir, current);
889
+ const nextRecord = mergeCanonicalRecord(baseRecord, request.record);
890
+ assertNoLifecycleStatusHop(baseRecord.status, nextRecord.status);
891
+ const baseExtras = cloneJsonObject(current.kernel.projection?.extras ?? {});
892
+ const extras = extrasPatch === undefined ? baseExtras : { ...baseExtras, ...extrasPatch };
893
+ normalizeRequiredControlsInExtras(extras);
894
+ (request.extrasBoundary ?? legacyKernelExtrasBoundary)(extras, nextRecord, "patch");
895
+ const hopped = hopKernelSnapshot(current.kernel, [], {
896
+ actor,
897
+ idempotencyKey,
898
+ evidence,
899
+ });
900
+ const next = attachProjection(hopped.snapshot, nextRecord, extras, nextRecord.status);
901
+ const result = commitKernelAndProject(dir, next);
902
+ return { ...result, audit: hopped.audit, idempotent: false };
903
+ });
904
+ }
905
+ //# sourceMappingURL=kernel-store.js.map