@blxzer/pactile 0.5.0 → 0.6.0-beta.4

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 (1445) hide show
  1. package/LICENSE +235 -235
  2. package/README.md +123 -111
  3. package/README.zh-CN.md +120 -111
  4. package/dist/bin/compat-warning.d.ts +2 -0
  5. package/dist/bin/compat-warning.d.ts.map +1 -0
  6. package/dist/bin/compat-warning.js +8 -0
  7. package/dist/bin/compat-warning.js.map +1 -0
  8. package/dist/bin/cstl.d.ts +3 -0
  9. package/dist/bin/cstl.d.ts.map +1 -0
  10. package/dist/bin/cstl.js +5 -0
  11. package/dist/bin/cstl.js.map +1 -0
  12. package/dist/bin/pactile.d.ts +3 -0
  13. package/dist/bin/pactile.d.ts.map +1 -0
  14. package/dist/bin/pactile.js +4 -0
  15. package/dist/bin/pactile.js.map +1 -0
  16. package/dist/cli/index.d.ts.map +1 -1
  17. package/dist/cli/index.js +149 -40
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/commands/capability.d.ts +3 -0
  20. package/dist/commands/capability.d.ts.map +1 -0
  21. package/dist/commands/capability.js +129 -0
  22. package/dist/commands/capability.js.map +1 -0
  23. package/dist/commands/codex.d.ts +3 -0
  24. package/dist/commands/codex.d.ts.map +1 -0
  25. package/dist/commands/codex.js +102 -0
  26. package/dist/commands/codex.js.map +1 -0
  27. package/dist/commands/context.d.ts +5 -0
  28. package/dist/commands/context.d.ts.map +1 -0
  29. package/dist/commands/context.js +598 -0
  30. package/dist/commands/context.js.map +1 -0
  31. package/dist/commands/detach.d.ts.map +1 -1
  32. package/dist/commands/detach.js +5 -4
  33. package/dist/commands/detach.js.map +1 -1
  34. package/dist/commands/init.d.ts +0 -20
  35. package/dist/commands/init.d.ts.map +1 -1
  36. package/dist/commands/init.js +736 -551
  37. package/dist/commands/init.js.map +1 -1
  38. package/dist/commands/legacy-task.d.ts +3 -0
  39. package/dist/commands/legacy-task.d.ts.map +1 -0
  40. package/dist/commands/legacy-task.js +295 -0
  41. package/dist/commands/legacy-task.js.map +1 -0
  42. package/dist/commands/migrate.js +1 -1
  43. package/dist/commands/migrate.js.map +1 -1
  44. package/dist/commands/parallel.d.ts +2 -0
  45. package/dist/commands/parallel.d.ts.map +1 -0
  46. package/dist/commands/parallel.js +26 -0
  47. package/dist/commands/parallel.js.map +1 -0
  48. package/dist/commands/pi.d.ts +4 -0
  49. package/dist/commands/pi.d.ts.map +1 -0
  50. package/dist/commands/pi.js +417 -0
  51. package/dist/commands/pi.js.map +1 -0
  52. package/dist/commands/session.d.ts +2 -0
  53. package/dist/commands/session.d.ts.map +1 -0
  54. package/dist/commands/session.js +293 -0
  55. package/dist/commands/session.js.map +1 -0
  56. package/dist/commands/task-schedule.d.ts +17 -0
  57. package/dist/commands/task-schedule.d.ts.map +1 -0
  58. package/dist/commands/task-schedule.js +395 -0
  59. package/dist/commands/task-schedule.js.map +1 -0
  60. package/dist/commands/task-verify-plan.d.ts +3 -0
  61. package/dist/commands/task-verify-plan.d.ts.map +1 -0
  62. package/dist/commands/task-verify-plan.js +503 -0
  63. package/dist/commands/task-verify-plan.js.map +1 -0
  64. package/dist/commands/task-worktree-close.d.ts +4 -0
  65. package/dist/commands/task-worktree-close.d.ts.map +1 -0
  66. package/dist/commands/task-worktree-close.js +81 -0
  67. package/dist/commands/task-worktree-close.js.map +1 -0
  68. package/dist/commands/task.d.ts +6 -0
  69. package/dist/commands/task.d.ts.map +1 -0
  70. package/dist/commands/task.js +2215 -0
  71. package/dist/commands/task.js.map +1 -0
  72. package/dist/commands/tile-selection.d.ts +3 -0
  73. package/dist/commands/tile-selection.d.ts.map +1 -0
  74. package/dist/commands/tile-selection.js +174 -0
  75. package/dist/commands/tile-selection.js.map +1 -0
  76. package/dist/commands/update.d.ts +4 -2
  77. package/dist/commands/update.d.ts.map +1 -1
  78. package/dist/commands/update.js +208 -100
  79. package/dist/commands/update.js.map +1 -1
  80. package/dist/commands/workflow.d.ts.map +1 -1
  81. package/dist/commands/workflow.js +1 -2
  82. package/dist/commands/workflow.js.map +1 -1
  83. package/dist/commands/worktree.d.ts +4 -0
  84. package/dist/commands/worktree.d.ts.map +1 -0
  85. package/dist/commands/worktree.js +198 -0
  86. package/dist/commands/worktree.js.map +1 -0
  87. package/dist/configurators/index.d.ts +5 -51
  88. package/dist/configurators/index.d.ts.map +1 -1
  89. package/dist/configurators/index.js +9 -140
  90. package/dist/configurators/index.js.map +1 -1
  91. package/dist/configurators/shared.d.ts +7 -66
  92. package/dist/configurators/shared.d.ts.map +1 -1
  93. package/dist/configurators/shared.js +17 -262
  94. package/dist/configurators/shared.js.map +1 -1
  95. package/dist/configurators/workflow.d.ts +5 -6
  96. package/dist/configurators/workflow.d.ts.map +1 -1
  97. package/dist/configurators/workflow.js +11 -39
  98. package/dist/configurators/workflow.js.map +1 -1
  99. package/dist/constants/paths.d.ts +1 -5
  100. package/dist/constants/paths.d.ts.map +1 -1
  101. package/dist/constants/paths.js +1 -5
  102. package/dist/constants/paths.js.map +1 -1
  103. package/dist/core/compat/environment.d.ts +42 -0
  104. package/dist/core/compat/environment.d.ts.map +1 -0
  105. package/dist/core/compat/environment.js +83 -0
  106. package/dist/core/compat/environment.js.map +1 -0
  107. package/dist/core/compat/index.d.ts +2 -0
  108. package/dist/core/compat/index.d.ts.map +1 -0
  109. package/dist/core/compat/index.js +2 -0
  110. package/dist/core/compat/index.js.map +1 -0
  111. package/dist/core/index.d.ts +4 -0
  112. package/dist/core/index.d.ts.map +1 -0
  113. package/dist/core/index.js +6 -0
  114. package/dist/core/index.js.map +1 -0
  115. package/dist/core/pactile/bounded-capabilities.d.ts +127 -0
  116. package/dist/core/pactile/bounded-capabilities.d.ts.map +1 -0
  117. package/dist/core/pactile/bounded-capabilities.js +188 -0
  118. package/dist/core/pactile/bounded-capabilities.js.map +1 -0
  119. package/dist/core/pactile/capability.d.ts +65 -0
  120. package/dist/core/pactile/capability.d.ts.map +1 -0
  121. package/dist/core/pactile/capability.js +199 -0
  122. package/dist/core/pactile/capability.js.map +1 -0
  123. package/dist/core/pactile/index.d.ts +16 -0
  124. package/dist/core/pactile/index.d.ts.map +1 -0
  125. package/dist/core/pactile/index.js +14 -0
  126. package/dist/core/pactile/index.js.map +1 -0
  127. package/dist/core/pactile/lifecycle.d.ts +106 -0
  128. package/dist/core/pactile/lifecycle.d.ts.map +1 -0
  129. package/dist/core/pactile/lifecycle.js +607 -0
  130. package/dist/core/pactile/lifecycle.js.map +1 -0
  131. package/dist/core/pactile/middleware/index.d.ts +3 -0
  132. package/dist/core/pactile/middleware/index.d.ts.map +1 -0
  133. package/dist/core/pactile/middleware/index.js +2 -0
  134. package/dist/core/pactile/middleware/index.js.map +1 -0
  135. package/dist/core/pactile/middleware/redaction.d.ts +4 -0
  136. package/dist/core/pactile/middleware/redaction.d.ts.map +1 -0
  137. package/dist/core/pactile/middleware/redaction.js +34 -0
  138. package/dist/core/pactile/middleware/redaction.js.map +1 -0
  139. package/dist/core/pactile/middleware/resolver.d.ts +62 -0
  140. package/dist/core/pactile/middleware/resolver.d.ts.map +1 -0
  141. package/dist/core/pactile/middleware/resolver.js +803 -0
  142. package/dist/core/pactile/middleware/resolver.js.map +1 -0
  143. package/dist/core/pactile/projection.d.ts +81 -0
  144. package/dist/core/pactile/projection.d.ts.map +1 -0
  145. package/dist/core/pactile/projection.js +399 -0
  146. package/dist/core/pactile/projection.js.map +1 -0
  147. package/dist/core/pactile/provider.d.ts +81 -0
  148. package/dist/core/pactile/provider.d.ts.map +1 -0
  149. package/dist/core/pactile/provider.js +313 -0
  150. package/dist/core/pactile/provider.js.map +1 -0
  151. package/dist/core/pactile/runtime.d.ts +56 -0
  152. package/dist/core/pactile/runtime.d.ts.map +1 -0
  153. package/dist/core/pactile/runtime.js +176 -0
  154. package/dist/core/pactile/runtime.js.map +1 -0
  155. package/dist/core/pactile/tile-compiler-types.d.ts +32 -0
  156. package/dist/core/pactile/tile-compiler-types.d.ts.map +1 -0
  157. package/dist/core/pactile/tile-compiler-types.js +2 -0
  158. package/dist/core/pactile/tile-compiler-types.js.map +1 -0
  159. package/dist/core/pactile/tile.d.ts +71 -0
  160. package/dist/core/pactile/tile.d.ts.map +1 -0
  161. package/dist/core/pactile/tile.js +228 -0
  162. package/dist/core/pactile/tile.js.map +1 -0
  163. package/dist/core/pactile/trace-runtime/index.d.ts +38 -0
  164. package/dist/core/pactile/trace-runtime/index.d.ts.map +1 -0
  165. package/dist/core/pactile/trace-runtime/index.js +292 -0
  166. package/dist/core/pactile/trace-runtime/index.js.map +1 -0
  167. package/dist/core/pactile/trace.d.ts +42 -0
  168. package/dist/core/pactile/trace.d.ts.map +1 -0
  169. package/dist/core/pactile/trace.js +221 -0
  170. package/dist/core/pactile/trace.js.map +1 -0
  171. package/dist/core/pactile/validation.d.ts +91 -0
  172. package/dist/core/pactile/validation.d.ts.map +1 -0
  173. package/dist/core/pactile/validation.js +301 -0
  174. package/dist/core/pactile/validation.js.map +1 -0
  175. package/dist/core/task/adapter-middleware.d.ts +122 -0
  176. package/dist/core/task/adapter-middleware.d.ts.map +1 -0
  177. package/dist/core/task/adapter-middleware.js +476 -0
  178. package/dist/core/task/adapter-middleware.js.map +1 -0
  179. package/dist/core/task/compat.d.ts +7 -0
  180. package/dist/core/task/compat.d.ts.map +1 -0
  181. package/dist/core/task/compat.js +2 -0
  182. package/dist/core/task/compat.js.map +1 -0
  183. package/dist/core/task/contract-migrate.d.ts +29 -0
  184. package/dist/core/task/contract-migrate.d.ts.map +1 -0
  185. package/dist/core/task/contract-migrate.js +207 -0
  186. package/dist/core/task/contract-migrate.js.map +1 -0
  187. package/dist/core/task/full-quality.d.ts +89 -0
  188. package/dist/core/task/full-quality.d.ts.map +1 -0
  189. package/dist/core/task/full-quality.js +379 -0
  190. package/dist/core/task/full-quality.js.map +1 -0
  191. package/dist/core/task/index.d.ts +34 -0
  192. package/dist/core/task/index.d.ts.map +1 -0
  193. package/dist/core/task/index.js +21 -0
  194. package/dist/core/task/index.js.map +1 -0
  195. package/dist/core/task/kernel-cli.d.ts +64 -0
  196. package/dist/core/task/kernel-cli.d.ts.map +1 -0
  197. package/dist/core/task/kernel-cli.js +429 -0
  198. package/dist/core/task/kernel-cli.js.map +1 -0
  199. package/dist/core/task/kernel-contract.d.ts +167 -0
  200. package/dist/core/task/kernel-contract.d.ts.map +1 -0
  201. package/dist/core/task/kernel-contract.js +523 -0
  202. package/dist/core/task/kernel-contract.js.map +1 -0
  203. package/dist/core/task/kernel-store.d.ts +136 -0
  204. package/dist/core/task/kernel-store.d.ts.map +1 -0
  205. package/dist/core/task/kernel-store.js +957 -0
  206. package/dist/core/task/kernel-store.js.map +1 -0
  207. package/dist/core/task/kernel-surface.d.ts +70 -0
  208. package/dist/core/task/kernel-surface.d.ts.map +1 -0
  209. package/dist/core/task/kernel-surface.js +121 -0
  210. package/dist/core/task/kernel-surface.js.map +1 -0
  211. package/dist/core/task/legacy-task-migration-reader.d.ts +137 -0
  212. package/dist/core/task/legacy-task-migration-reader.d.ts.map +1 -0
  213. package/dist/core/task/legacy-task-migration-reader.js +512 -0
  214. package/dist/core/task/legacy-task-migration-reader.js.map +1 -0
  215. package/dist/core/task/legacy-task-migration.d.ts +105 -0
  216. package/dist/core/task/legacy-task-migration.d.ts.map +1 -0
  217. package/dist/core/task/legacy-task-migration.js +562 -0
  218. package/dist/core/task/legacy-task-migration.js.map +1 -0
  219. package/dist/core/task/legacy-task-overlay-durable-io.d.ts +18 -0
  220. package/dist/core/task/legacy-task-overlay-durable-io.d.ts.map +1 -0
  221. package/dist/core/task/legacy-task-overlay-durable-io.js +66 -0
  222. package/dist/core/task/legacy-task-overlay-durable-io.js.map +1 -0
  223. package/dist/core/task/legacy-task-reconciliation-reader.d.ts +26 -0
  224. package/dist/core/task/legacy-task-reconciliation-reader.d.ts.map +1 -0
  225. package/dist/core/task/legacy-task-reconciliation-reader.js +324 -0
  226. package/dist/core/task/legacy-task-reconciliation-reader.js.map +1 -0
  227. package/dist/core/task/legacy-task-v2-import.d.ts +67 -0
  228. package/dist/core/task/legacy-task-v2-import.d.ts.map +1 -0
  229. package/dist/core/task/legacy-task-v2-import.js +1046 -0
  230. package/dist/core/task/legacy-task-v2-import.js.map +1 -0
  231. package/dist/core/task/lite-context-pack.d.ts +71 -0
  232. package/dist/core/task/lite-context-pack.d.ts.map +1 -0
  233. package/dist/core/task/lite-context-pack.js +175 -0
  234. package/dist/core/task/lite-context-pack.js.map +1 -0
  235. package/dist/core/task/ondemand-topology.d.ts +108 -0
  236. package/dist/core/task/ondemand-topology.d.ts.map +1 -0
  237. package/dist/core/task/ondemand-topology.js +456 -0
  238. package/dist/core/task/ondemand-topology.js.map +1 -0
  239. package/dist/core/task/p36-artifact-migrate.d.ts +58 -0
  240. package/dist/core/task/p36-artifact-migrate.d.ts.map +1 -0
  241. package/dist/core/task/p36-artifact-migrate.js +293 -0
  242. package/dist/core/task/p36-artifact-migrate.js.map +1 -0
  243. package/dist/core/task/p36-wave-c.d.ts +39 -0
  244. package/dist/core/task/p36-wave-c.d.ts.map +1 -0
  245. package/dist/core/task/p36-wave-c.js +100 -0
  246. package/dist/core/task/p36-wave-c.js.map +1 -0
  247. package/dist/core/task/paths.d.ts +37 -0
  248. package/dist/core/task/paths.d.ts.map +1 -0
  249. package/dist/core/task/paths.js +49 -0
  250. package/dist/core/task/paths.js.map +1 -0
  251. package/dist/core/task/phase.d.ts +27 -0
  252. package/dist/core/task/phase.d.ts.map +1 -0
  253. package/dist/core/task/phase.js +24 -0
  254. package/dist/core/task/phase.js.map +1 -0
  255. package/dist/core/task/project-file-observer.d.ts +46 -0
  256. package/dist/core/task/project-file-observer.d.ts.map +1 -0
  257. package/dist/core/task/project-file-observer.js +618 -0
  258. package/dist/core/task/project-file-observer.js.map +1 -0
  259. package/dist/core/task/records.d.ts +48 -0
  260. package/dist/core/task/records.d.ts.map +1 -0
  261. package/dist/core/task/records.js +100 -0
  262. package/dist/core/task/records.js.map +1 -0
  263. package/dist/core/task/schema.d.ts +77 -0
  264. package/dist/core/task/schema.d.ts.map +1 -0
  265. package/dist/core/task/schema.js +220 -0
  266. package/dist/core/task/schema.js.map +1 -0
  267. package/dist/core/task/start-authority.d.ts +14 -0
  268. package/dist/core/task/start-authority.d.ts.map +1 -0
  269. package/dist/core/task/start-authority.js +146 -0
  270. package/dist/core/task/start-authority.js.map +1 -0
  271. package/dist/core/task/strategy.d.ts +24 -0
  272. package/dist/core/task/strategy.d.ts.map +1 -0
  273. package/dist/core/task/strategy.js +136 -0
  274. package/dist/core/task/strategy.js.map +1 -0
  275. package/dist/core/task/task-candidate-observer.d.ts +111 -0
  276. package/dist/core/task/task-candidate-observer.d.ts.map +1 -0
  277. package/dist/core/task/task-candidate-observer.js +762 -0
  278. package/dist/core/task/task-candidate-observer.js.map +1 -0
  279. package/dist/core/task/task-kernel-close.d.ts +5 -0
  280. package/dist/core/task/task-kernel-close.d.ts.map +1 -0
  281. package/dist/core/task/task-kernel-close.js +367 -0
  282. package/dist/core/task/task-kernel-close.js.map +1 -0
  283. package/dist/core/task/task-kernel-dependencies.d.ts +3 -0
  284. package/dist/core/task/task-kernel-dependencies.d.ts.map +1 -0
  285. package/dist/core/task/task-kernel-dependencies.js +24 -0
  286. package/dist/core/task/task-kernel-dependencies.js.map +1 -0
  287. package/dist/core/task/task-kernel-host.d.ts +5 -0
  288. package/dist/core/task/task-kernel-host.d.ts.map +1 -0
  289. package/dist/core/task/task-kernel-host.js +136 -0
  290. package/dist/core/task/task-kernel-host.js.map +1 -0
  291. package/dist/core/task/task-kernel-paths.d.ts +19 -0
  292. package/dist/core/task/task-kernel-paths.d.ts.map +1 -0
  293. package/dist/core/task/task-kernel-paths.js +237 -0
  294. package/dist/core/task/task-kernel-paths.js.map +1 -0
  295. package/dist/core/task/task-kernel-reviews.d.ts +3 -0
  296. package/dist/core/task/task-kernel-reviews.d.ts.map +1 -0
  297. package/dist/core/task/task-kernel-reviews.js +100 -0
  298. package/dist/core/task/task-kernel-reviews.js.map +1 -0
  299. package/dist/core/task/task-kernel-runs.d.ts +5 -0
  300. package/dist/core/task/task-kernel-runs.d.ts.map +1 -0
  301. package/dist/core/task/task-kernel-runs.js +196 -0
  302. package/dist/core/task/task-kernel-runs.js.map +1 -0
  303. package/dist/core/task/task-kernel-schema.d.ts +29 -0
  304. package/dist/core/task/task-kernel-schema.d.ts.map +1 -0
  305. package/dist/core/task/task-kernel-schema.js +1169 -0
  306. package/dist/core/task/task-kernel-schema.js.map +1 -0
  307. package/dist/core/task/task-kernel-store-v2.d.ts +33 -0
  308. package/dist/core/task/task-kernel-store-v2.d.ts.map +1 -0
  309. package/dist/core/task/task-kernel-store-v2.js +574 -0
  310. package/dist/core/task/task-kernel-store-v2.js.map +1 -0
  311. package/dist/core/task/task-kernel-types.d.ts +585 -0
  312. package/dist/core/task/task-kernel-types.d.ts.map +1 -0
  313. package/dist/core/task/task-kernel-types.js +31 -0
  314. package/dist/core/task/task-kernel-types.js.map +1 -0
  315. package/dist/core/task/task-kernel-workspaces.d.ts +10 -0
  316. package/dist/core/task/task-kernel-workspaces.d.ts.map +1 -0
  317. package/dist/core/task/task-kernel-workspaces.js +250 -0
  318. package/dist/core/task/task-kernel-workspaces.js.map +1 -0
  319. package/dist/core/task/task-kernel-write-set.d.ts +3 -0
  320. package/dist/core/task/task-kernel-write-set.d.ts.map +1 -0
  321. package/dist/core/task/task-kernel-write-set.js +12 -0
  322. package/dist/core/task/task-kernel-write-set.js.map +1 -0
  323. package/dist/core/task/task-kernel.d.ts +19 -0
  324. package/dist/core/task/task-kernel.d.ts.map +1 -0
  325. package/dist/core/task/task-kernel.js +17 -0
  326. package/dist/core/task/task-kernel.js.map +1 -0
  327. package/dist/core/task/task-pull-request-observer.d.ts +25 -0
  328. package/dist/core/task/task-pull-request-observer.d.ts.map +1 -0
  329. package/dist/core/task/task-pull-request-observer.js +187 -0
  330. package/dist/core/task/task-pull-request-observer.js.map +1 -0
  331. package/dist/core/task/task-review-evidence.d.ts +27 -0
  332. package/dist/core/task/task-review-evidence.d.ts.map +1 -0
  333. package/dist/core/task/task-review-evidence.js +383 -0
  334. package/dist/core/task/task-review-evidence.js.map +1 -0
  335. package/dist/core/testing/index.d.ts +2 -0
  336. package/dist/core/testing/index.d.ts.map +1 -0
  337. package/dist/core/testing/index.js +4 -0
  338. package/dist/core/testing/index.js.map +1 -0
  339. package/dist/migrations/index.d.ts +1 -1
  340. package/dist/migrations/index.d.ts.map +1 -1
  341. package/dist/migrations/index.js +5 -3
  342. package/dist/migrations/index.js.map +1 -1
  343. package/dist/migrations/manifests/0.6.0-beta.1.json +35 -0
  344. package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
  345. package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
  346. package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
  347. package/dist/migrations/manifests/0.6.0.json +9 -0
  348. package/dist/pactile/adapters/codex/index.js +1 -1
  349. package/dist/pactile/adapters/codex/index.js.map +1 -1
  350. package/dist/pactile/adapters/index.d.ts +0 -1
  351. package/dist/pactile/adapters/index.d.ts.map +1 -1
  352. package/dist/pactile/adapters/index.js +0 -1
  353. package/dist/pactile/adapters/index.js.map +1 -1
  354. package/dist/pactile/adoption/bindings.d.ts +1 -1
  355. package/dist/pactile/adoption/bindings.d.ts.map +1 -1
  356. package/dist/pactile/adoption/bindings.js +1 -1
  357. package/dist/pactile/adoption/bindings.js.map +1 -1
  358. package/dist/pactile/adoption/inventory.d.ts +1 -1
  359. package/dist/pactile/adoption/inventory.d.ts.map +1 -1
  360. package/dist/pactile/adoption/inventory.js +1 -1
  361. package/dist/pactile/adoption/inventory.js.map +1 -1
  362. package/dist/pactile/adoption/safety.js +1 -1
  363. package/dist/pactile/adoption/safety.js.map +1 -1
  364. package/dist/pactile/adoption/workflow.d.ts +1 -1
  365. package/dist/pactile/adoption/workflow.d.ts.map +1 -1
  366. package/dist/pactile/adoption/workflow.js +1 -1
  367. package/dist/pactile/adoption/workflow.js.map +1 -1
  368. package/dist/pactile/artifacts/documents.d.ts +72 -0
  369. package/dist/pactile/artifacts/documents.d.ts.map +1 -0
  370. package/dist/pactile/artifacts/documents.js +406 -0
  371. package/dist/pactile/artifacts/documents.js.map +1 -0
  372. package/dist/pactile/artifacts/index.d.ts +6 -0
  373. package/dist/pactile/artifacts/index.d.ts.map +1 -0
  374. package/dist/pactile/artifacts/index.js +6 -0
  375. package/dist/pactile/artifacts/index.js.map +1 -0
  376. package/dist/pactile/artifacts/projection.d.ts +50 -0
  377. package/dist/pactile/artifacts/projection.d.ts.map +1 -0
  378. package/dist/pactile/artifacts/projection.js +139 -0
  379. package/dist/pactile/artifacts/projection.js.map +1 -0
  380. package/dist/pactile/artifacts/reader.d.ts +20 -0
  381. package/dist/pactile/artifacts/reader.d.ts.map +1 -0
  382. package/dist/pactile/artifacts/reader.js +559 -0
  383. package/dist/pactile/artifacts/reader.js.map +1 -0
  384. package/dist/pactile/artifacts/schema.d.ts +4 -0
  385. package/dist/pactile/artifacts/schema.d.ts.map +1 -0
  386. package/dist/pactile/artifacts/schema.js +217 -0
  387. package/dist/pactile/artifacts/schema.js.map +1 -0
  388. package/dist/pactile/artifacts/types.d.ts +66 -0
  389. package/dist/pactile/artifacts/types.d.ts.map +1 -0
  390. package/dist/pactile/artifacts/types.js +45 -0
  391. package/dist/pactile/artifacts/types.js.map +1 -0
  392. package/dist/pactile/capabilities/claim.d.ts +3 -0
  393. package/dist/pactile/capabilities/claim.d.ts.map +1 -0
  394. package/dist/pactile/capabilities/claim.js +97 -0
  395. package/dist/pactile/capabilities/claim.js.map +1 -0
  396. package/dist/pactile/capabilities/command.d.ts +6 -0
  397. package/dist/pactile/capabilities/command.d.ts.map +1 -0
  398. package/dist/pactile/capabilities/command.js +253 -0
  399. package/dist/pactile/capabilities/command.js.map +1 -0
  400. package/dist/pactile/capabilities/discover.d.ts +6 -0
  401. package/dist/pactile/capabilities/discover.d.ts.map +1 -0
  402. package/dist/pactile/capabilities/discover.js +48 -0
  403. package/dist/pactile/capabilities/discover.js.map +1 -0
  404. package/dist/pactile/capabilities/node.d.ts +15 -0
  405. package/dist/pactile/capabilities/node.d.ts.map +1 -0
  406. package/dist/pactile/capabilities/node.js +292 -0
  407. package/dist/pactile/capabilities/node.js.map +1 -0
  408. package/dist/pactile/capabilities/read.d.ts +6 -0
  409. package/dist/pactile/capabilities/read.d.ts.map +1 -0
  410. package/dist/pactile/capabilities/read.js +100 -0
  411. package/dist/pactile/capabilities/read.js.map +1 -0
  412. package/dist/pactile/capabilities/receipts.d.ts +17 -0
  413. package/dist/pactile/capabilities/receipts.d.ts.map +1 -0
  414. package/dist/pactile/capabilities/receipts.js +90 -0
  415. package/dist/pactile/capabilities/receipts.js.map +1 -0
  416. package/dist/pactile/capabilities/search.d.ts +6 -0
  417. package/dist/pactile/capabilities/search.d.ts.map +1 -0
  418. package/dist/pactile/capabilities/search.js +181 -0
  419. package/dist/pactile/capabilities/search.js.map +1 -0
  420. package/dist/pactile/capabilities/shared.d.ts +29 -0
  421. package/dist/pactile/capabilities/shared.d.ts.map +1 -0
  422. package/dist/pactile/capabilities/shared.js +134 -0
  423. package/dist/pactile/capabilities/shared.js.map +1 -0
  424. package/dist/pactile/capabilities/workspace.d.ts +19 -0
  425. package/dist/pactile/capabilities/workspace.d.ts.map +1 -0
  426. package/dist/pactile/capabilities/workspace.js +273 -0
  427. package/dist/pactile/capabilities/workspace.js.map +1 -0
  428. package/dist/pactile/codex/bridge.d.ts +174 -0
  429. package/dist/pactile/codex/bridge.d.ts.map +1 -0
  430. package/dist/pactile/codex/bridge.js +1445 -0
  431. package/dist/pactile/codex/bridge.js.map +1 -0
  432. package/dist/pactile/codex/dispatch-stop-proof.d.ts +43 -0
  433. package/dist/pactile/codex/dispatch-stop-proof.d.ts.map +1 -0
  434. package/dist/pactile/codex/dispatch-stop-proof.js +177 -0
  435. package/dist/pactile/codex/dispatch-stop-proof.js.map +1 -0
  436. package/dist/pactile/codex/host-stop.d.ts +47 -0
  437. package/dist/pactile/codex/host-stop.d.ts.map +1 -0
  438. package/dist/pactile/codex/host-stop.js +344 -0
  439. package/dist/pactile/codex/host-stop.js.map +1 -0
  440. package/dist/pactile/compat/init-context.js +1 -1
  441. package/dist/pactile/compat/init-context.js.map +1 -1
  442. package/dist/pactile/compat/node-entry-migration.d.ts +3 -0
  443. package/dist/pactile/compat/node-entry-migration.d.ts.map +1 -0
  444. package/dist/pactile/compat/node-entry-migration.js +25 -0
  445. package/dist/pactile/compat/node-entry-migration.js.map +1 -0
  446. package/dist/pactile/coordination/index.d.ts +4 -0
  447. package/dist/pactile/coordination/index.d.ts.map +1 -0
  448. package/dist/pactile/coordination/index.js +4 -0
  449. package/dist/pactile/coordination/index.js.map +1 -0
  450. package/dist/pactile/coordination/journal.d.ts +10 -0
  451. package/dist/pactile/coordination/journal.d.ts.map +1 -0
  452. package/dist/pactile/coordination/journal.js +255 -0
  453. package/dist/pactile/coordination/journal.js.map +1 -0
  454. package/dist/pactile/coordination/kernel-resume.d.ts +8 -0
  455. package/dist/pactile/coordination/kernel-resume.d.ts.map +1 -0
  456. package/dist/pactile/coordination/kernel-resume.js +87 -0
  457. package/dist/pactile/coordination/kernel-resume.js.map +1 -0
  458. package/dist/pactile/coordination/model.d.ts +553 -0
  459. package/dist/pactile/coordination/model.d.ts.map +1 -0
  460. package/dist/pactile/coordination/model.js +239 -0
  461. package/dist/pactile/coordination/model.js.map +1 -0
  462. package/dist/pactile/coordination/state.d.ts +46 -0
  463. package/dist/pactile/coordination/state.d.ts.map +1 -0
  464. package/dist/pactile/coordination/state.js +301 -0
  465. package/dist/pactile/coordination/state.js.map +1 -0
  466. package/dist/pactile/coordination/store.d.ts +94 -0
  467. package/dist/pactile/coordination/store.d.ts.map +1 -0
  468. package/dist/pactile/coordination/store.js +396 -0
  469. package/dist/pactile/coordination/store.js.map +1 -0
  470. package/dist/pactile/exit/receipt.js +1 -1
  471. package/dist/pactile/exit/receipt.js.map +1 -1
  472. package/dist/pactile/exit/service.d.ts +1 -1
  473. package/dist/pactile/exit/service.d.ts.map +1 -1
  474. package/dist/pactile/exit/service.js +1 -3
  475. package/dist/pactile/exit/service.js.map +1 -1
  476. package/dist/pactile/index.d.ts +7 -1
  477. package/dist/pactile/index.d.ts.map +1 -1
  478. package/dist/pactile/index.js +7 -1
  479. package/dist/pactile/index.js.map +1 -1
  480. package/dist/pactile/jev/contracts.d.ts +104 -0
  481. package/dist/pactile/jev/contracts.d.ts.map +1 -0
  482. package/dist/pactile/jev/contracts.js +53 -0
  483. package/dist/pactile/jev/contracts.js.map +1 -0
  484. package/dist/pactile/jev/decision.d.ts +58 -0
  485. package/dist/pactile/jev/decision.d.ts.map +1 -0
  486. package/dist/pactile/jev/decision.js +149 -0
  487. package/dist/pactile/jev/decision.js.map +1 -0
  488. package/dist/pactile/jev/http.d.ts +25 -0
  489. package/dist/pactile/jev/http.d.ts.map +1 -0
  490. package/dist/pactile/jev/http.js +234 -0
  491. package/dist/pactile/jev/http.js.map +1 -0
  492. package/dist/pactile/jev/index.d.ts +8 -0
  493. package/dist/pactile/jev/index.d.ts.map +1 -0
  494. package/dist/pactile/jev/index.js +4 -0
  495. package/dist/pactile/jev/index.js.map +1 -0
  496. package/dist/pactile/jev/outbound.d.ts +15 -0
  497. package/dist/pactile/jev/outbound.d.ts.map +1 -0
  498. package/dist/pactile/jev/outbound.js +264 -0
  499. package/dist/pactile/jev/outbound.js.map +1 -0
  500. package/dist/pactile/jev/project-policy.d.ts +10 -0
  501. package/dist/pactile/jev/project-policy.d.ts.map +1 -0
  502. package/dist/pactile/jev/project-policy.js +53 -0
  503. package/dist/pactile/jev/project-policy.js.map +1 -0
  504. package/dist/pactile/jev/response.d.ts +17 -0
  505. package/dist/pactile/jev/response.d.ts.map +1 -0
  506. package/dist/pactile/jev/response.js +280 -0
  507. package/dist/pactile/jev/response.js.map +1 -0
  508. package/dist/pactile/jev/scheduler-advice.d.ts +92 -0
  509. package/dist/pactile/jev/scheduler-advice.d.ts.map +1 -0
  510. package/dist/pactile/jev/scheduler-advice.js +323 -0
  511. package/dist/pactile/jev/scheduler-advice.js.map +1 -0
  512. package/dist/pactile/jev/transport.d.ts +6 -0
  513. package/dist/pactile/jev/transport.d.ts.map +1 -0
  514. package/dist/pactile/jev/transport.js +87 -0
  515. package/dist/pactile/jev/transport.js.map +1 -0
  516. package/dist/pactile/lifecycle/command-runner.d.ts +1 -1
  517. package/dist/pactile/lifecycle/command-runner.d.ts.map +1 -1
  518. package/dist/pactile/lifecycle/command-runner.js +1 -3
  519. package/dist/pactile/lifecycle/command-runner.js.map +1 -1
  520. package/dist/pactile/lifecycle/default-adapters.d.ts.map +1 -1
  521. package/dist/pactile/lifecycle/default-adapters.js +8 -32
  522. package/dist/pactile/lifecycle/default-adapters.js.map +1 -1
  523. package/dist/pactile/lifecycle/deferred-live.d.ts +17 -0
  524. package/dist/pactile/lifecycle/deferred-live.d.ts.map +1 -0
  525. package/dist/pactile/lifecycle/deferred-live.js +173 -0
  526. package/dist/pactile/lifecycle/deferred-live.js.map +1 -0
  527. package/dist/pactile/lifecycle/legacy-import.d.ts +1 -1
  528. package/dist/pactile/lifecycle/legacy-import.js +3 -3
  529. package/dist/pactile/lifecycle/legacy-import.js.map +1 -1
  530. package/dist/pactile/lifecycle/orchestrator.d.ts +1 -1
  531. package/dist/pactile/lifecycle/orchestrator.d.ts.map +1 -1
  532. package/dist/pactile/lifecycle/orchestrator.js +1 -1
  533. package/dist/pactile/lifecycle/orchestrator.js.map +1 -1
  534. package/dist/pactile/lifecycle/project-files.d.ts.map +1 -1
  535. package/dist/pactile/lifecycle/project-files.js +5 -1
  536. package/dist/pactile/lifecycle/project-files.js.map +1 -1
  537. package/dist/pactile/middleware/manifest-loader.d.ts +1 -1
  538. package/dist/pactile/middleware/manifest-loader.d.ts.map +1 -1
  539. package/dist/pactile/middleware/manifest-loader.js +1 -1
  540. package/dist/pactile/middleware/manifest-loader.js.map +1 -1
  541. package/dist/pactile/migration/legacy-task-batch-generation.d.ts +23 -0
  542. package/dist/pactile/migration/legacy-task-batch-generation.d.ts.map +1 -0
  543. package/dist/pactile/migration/legacy-task-batch-generation.js +102 -0
  544. package/dist/pactile/migration/legacy-task-batch-generation.js.map +1 -0
  545. package/dist/pactile/migration/legacy-task-batch-io.d.ts +9 -0
  546. package/dist/pactile/migration/legacy-task-batch-io.d.ts.map +1 -0
  547. package/dist/pactile/migration/legacy-task-batch-io.js +208 -0
  548. package/dist/pactile/migration/legacy-task-batch-io.js.map +1 -0
  549. package/dist/pactile/migration/legacy-task-batch-journal.d.ts +6 -0
  550. package/dist/pactile/migration/legacy-task-batch-journal.d.ts.map +1 -0
  551. package/dist/pactile/migration/legacy-task-batch-journal.js +121 -0
  552. package/dist/pactile/migration/legacy-task-batch-journal.js.map +1 -0
  553. package/dist/pactile/migration/legacy-task-batch-orchestrator.d.ts +18 -0
  554. package/dist/pactile/migration/legacy-task-batch-orchestrator.d.ts.map +1 -0
  555. package/dist/pactile/migration/legacy-task-batch-orchestrator.js +634 -0
  556. package/dist/pactile/migration/legacy-task-batch-orchestrator.js.map +1 -0
  557. package/dist/pactile/migration/legacy-task-batch-source.d.ts +8 -0
  558. package/dist/pactile/migration/legacy-task-batch-source.d.ts.map +1 -0
  559. package/dist/pactile/migration/legacy-task-batch-source.js +158 -0
  560. package/dist/pactile/migration/legacy-task-batch-source.js.map +1 -0
  561. package/dist/pactile/migration/legacy-task-batch-types.d.ts +127 -0
  562. package/dist/pactile/migration/legacy-task-batch-types.d.ts.map +1 -0
  563. package/dist/pactile/migration/legacy-task-batch-types.js +127 -0
  564. package/dist/pactile/migration/legacy-task-batch-types.js.map +1 -0
  565. package/dist/pactile/migration/legacy-task-batch.d.ts +3 -0
  566. package/dist/pactile/migration/legacy-task-batch.d.ts.map +1 -0
  567. package/dist/pactile/migration/legacy-task-batch.js +2 -0
  568. package/dist/pactile/migration/legacy-task-batch.js.map +1 -0
  569. package/dist/pactile/migration/legacy-task-held-source-reader.d.ts +27 -0
  570. package/dist/pactile/migration/legacy-task-held-source-reader.d.ts.map +1 -0
  571. package/dist/pactile/migration/legacy-task-held-source-reader.js +261 -0
  572. package/dist/pactile/migration/legacy-task-held-source-reader.js.map +1 -0
  573. package/dist/pactile/migration/legacy-task-reconciliation.d.ts +46 -0
  574. package/dist/pactile/migration/legacy-task-reconciliation.d.ts.map +1 -0
  575. package/dist/pactile/migration/legacy-task-reconciliation.js +589 -0
  576. package/dist/pactile/migration/legacy-task-reconciliation.js.map +1 -0
  577. package/dist/pactile/migration/legacy-task-update.d.ts +19 -0
  578. package/dist/pactile/migration/legacy-task-update.d.ts.map +1 -0
  579. package/dist/pactile/migration/legacy-task-update.js +164 -0
  580. package/dist/pactile/migration/legacy-task-update.js.map +1 -0
  581. package/dist/pactile/migration/transaction.d.ts +1 -1
  582. package/dist/pactile/migration/transaction.d.ts.map +1 -1
  583. package/dist/pactile/migration/transaction.js +1 -1
  584. package/dist/pactile/migration/transaction.js.map +1 -1
  585. package/dist/pactile/parallel/batch.d.ts +60 -0
  586. package/dist/pactile/parallel/batch.d.ts.map +1 -0
  587. package/dist/pactile/parallel/batch.js +411 -0
  588. package/dist/pactile/parallel/batch.js.map +1 -0
  589. package/dist/pactile/parallel/policy.d.ts +18 -0
  590. package/dist/pactile/parallel/policy.d.ts.map +1 -0
  591. package/dist/pactile/parallel/policy.js +202 -0
  592. package/dist/pactile/parallel/policy.js.map +1 -0
  593. package/dist/pactile/pi/bridge.d.ts +188 -0
  594. package/dist/pactile/pi/bridge.d.ts.map +1 -0
  595. package/dist/pactile/pi/bridge.js +1564 -0
  596. package/dist/pactile/pi/bridge.js.map +1 -0
  597. package/dist/pactile/pi/rpc.d.ts +60 -0
  598. package/dist/pactile/pi/rpc.d.ts.map +1 -0
  599. package/dist/pactile/pi/rpc.js +420 -0
  600. package/dist/pactile/pi/rpc.js.map +1 -0
  601. package/dist/pactile/pi/v2-dispatch.d.ts +113 -0
  602. package/dist/pactile/pi/v2-dispatch.d.ts.map +1 -0
  603. package/dist/pactile/pi/v2-dispatch.js +919 -0
  604. package/dist/pactile/pi/v2-dispatch.js.map +1 -0
  605. package/dist/pactile/projection/planner.d.ts +1 -1
  606. package/dist/pactile/projection/planner.d.ts.map +1 -1
  607. package/dist/pactile/projection/planner.js +2 -2
  608. package/dist/pactile/projection/planner.js.map +1 -1
  609. package/dist/pactile/projection/shared/index.js +1 -1
  610. package/dist/pactile/projection/shared/index.js.map +1 -1
  611. package/dist/pactile/projection/store.js +1 -1
  612. package/dist/pactile/projection/store.js.map +1 -1
  613. package/dist/pactile/providers/probes.d.ts +2 -2
  614. package/dist/pactile/providers/probes.d.ts.map +1 -1
  615. package/dist/pactile/providers/probes.js +0 -6
  616. package/dist/pactile/providers/probes.js.map +1 -1
  617. package/dist/pactile/registry.d.ts +64 -9
  618. package/dist/pactile/registry.d.ts.map +1 -1
  619. package/dist/pactile/registry.js +640 -28
  620. package/dist/pactile/registry.js.map +1 -1
  621. package/dist/pactile/retrieval/envelope.d.ts +19 -0
  622. package/dist/pactile/retrieval/envelope.d.ts.map +1 -0
  623. package/dist/pactile/retrieval/envelope.js +115 -0
  624. package/dist/pactile/retrieval/envelope.js.map +1 -0
  625. package/dist/pactile/retrieval/evidence.js +1 -1
  626. package/dist/pactile/retrieval/evidence.js.map +1 -1
  627. package/dist/pactile/retrieval/index.d.ts +1 -0
  628. package/dist/pactile/retrieval/index.d.ts.map +1 -1
  629. package/dist/pactile/retrieval/index.js +1 -0
  630. package/dist/pactile/retrieval/index.js.map +1 -1
  631. package/dist/pactile/retrieval/jev-planning.d.ts +28 -0
  632. package/dist/pactile/retrieval/jev-planning.d.ts.map +1 -0
  633. package/dist/pactile/retrieval/jev-planning.js +96 -0
  634. package/dist/pactile/retrieval/jev-planning.js.map +1 -0
  635. package/dist/pactile/retrieval/pack.d.ts +9 -0
  636. package/dist/pactile/retrieval/pack.d.ts.map +1 -0
  637. package/dist/pactile/retrieval/pack.js +300 -0
  638. package/dist/pactile/retrieval/pack.js.map +1 -0
  639. package/dist/pactile/retrieval/planner.d.ts +1 -1
  640. package/dist/pactile/retrieval/planner.d.ts.map +1 -1
  641. package/dist/pactile/retrieval/planner.js +1 -1
  642. package/dist/pactile/retrieval/planner.js.map +1 -1
  643. package/dist/pactile/retrieval/types.d.ts +1 -1
  644. package/dist/pactile/retrieval/types.d.ts.map +1 -1
  645. package/dist/pactile/review/contract.d.ts +232 -0
  646. package/dist/pactile/review/contract.d.ts.map +1 -0
  647. package/dist/pactile/review/contract.js +695 -0
  648. package/dist/pactile/review/contract.js.map +1 -0
  649. package/dist/pactile/review/escalation-artifacts.d.ts +41 -0
  650. package/dist/pactile/review/escalation-artifacts.d.ts.map +1 -0
  651. package/dist/pactile/review/escalation-artifacts.js +415 -0
  652. package/dist/pactile/review/escalation-artifacts.js.map +1 -0
  653. package/dist/pactile/review/escalation-contract.d.ts +115 -0
  654. package/dist/pactile/review/escalation-contract.d.ts.map +1 -0
  655. package/dist/pactile/review/escalation-contract.js +151 -0
  656. package/dist/pactile/review/escalation-contract.js.map +1 -0
  657. package/dist/pactile/review/escalation-finalize.d.ts +14 -0
  658. package/dist/pactile/review/escalation-finalize.d.ts.map +1 -0
  659. package/dist/pactile/review/escalation-finalize.js +319 -0
  660. package/dist/pactile/review/escalation-finalize.js.map +1 -0
  661. package/dist/pactile/review/escalation-reply.d.ts +10 -0
  662. package/dist/pactile/review/escalation-reply.d.ts.map +1 -0
  663. package/dist/pactile/review/escalation-reply.js +61 -0
  664. package/dist/pactile/review/escalation-reply.js.map +1 -0
  665. package/dist/pactile/review/escalation-transport.d.ts +32 -0
  666. package/dist/pactile/review/escalation-transport.d.ts.map +1 -0
  667. package/dist/pactile/review/escalation-transport.js +216 -0
  668. package/dist/pactile/review/escalation-transport.js.map +1 -0
  669. package/dist/pactile/review/escalation.d.ts +7 -0
  670. package/dist/pactile/review/escalation.d.ts.map +1 -0
  671. package/dist/pactile/review/escalation.js +6 -0
  672. package/dist/pactile/review/escalation.js.map +1 -0
  673. package/dist/pactile/review/evidence.d.ts +25 -0
  674. package/dist/pactile/review/evidence.d.ts.map +1 -0
  675. package/dist/pactile/review/evidence.js +58 -0
  676. package/dist/pactile/review/evidence.js.map +1 -0
  677. package/dist/pactile/review/jev-escalation-advice.d.ts +77 -0
  678. package/dist/pactile/review/jev-escalation-advice.d.ts.map +1 -0
  679. package/dist/pactile/review/jev-escalation-advice.js +358 -0
  680. package/dist/pactile/review/jev-escalation-advice.js.map +1 -0
  681. package/dist/pactile/runtime/json-api.d.ts +1 -1
  682. package/dist/pactile/runtime/json-api.js +1 -1
  683. package/dist/pactile/runtime/paths.js +1 -1
  684. package/dist/pactile/runtime/paths.js.map +1 -1
  685. package/dist/pactile/runtime/stores.d.ts +1 -1
  686. package/dist/pactile/runtime/stores.d.ts.map +1 -1
  687. package/dist/pactile/runtime/stores.js +1 -1
  688. package/dist/pactile/runtime/stores.js.map +1 -1
  689. package/dist/pactile/runtime/unicode-nfc-data.d.ts +1 -1
  690. package/dist/pactile/runtime/unicode-nfc-data.js +1 -1
  691. package/dist/pactile/scheduler/index.d.ts +6 -0
  692. package/dist/pactile/scheduler/index.d.ts.map +1 -0
  693. package/dist/pactile/scheduler/index.js +5 -0
  694. package/dist/pactile/scheduler/index.js.map +1 -0
  695. package/dist/pactile/scheduler/project-lease-store.d.ts +35 -0
  696. package/dist/pactile/scheduler/project-lease-store.d.ts.map +1 -0
  697. package/dist/pactile/scheduler/project-lease-store.js +189 -0
  698. package/dist/pactile/scheduler/project-lease-store.js.map +1 -0
  699. package/dist/pactile/scheduler/scheduler.d.ts +91 -0
  700. package/dist/pactile/scheduler/scheduler.d.ts.map +1 -0
  701. package/dist/pactile/scheduler/scheduler.js +589 -0
  702. package/dist/pactile/scheduler/scheduler.js.map +1 -0
  703. package/dist/pactile/scheduler/task-kernel-admission.d.ts +173 -0
  704. package/dist/pactile/scheduler/task-kernel-admission.d.ts.map +1 -0
  705. package/dist/pactile/scheduler/task-kernel-admission.js +1560 -0
  706. package/dist/pactile/scheduler/task-kernel-admission.js.map +1 -0
  707. package/dist/pactile/scheduler/task-kernel-wave-dispatch.d.ts +184 -0
  708. package/dist/pactile/scheduler/task-kernel-wave-dispatch.d.ts.map +1 -0
  709. package/dist/pactile/scheduler/task-kernel-wave-dispatch.js +952 -0
  710. package/dist/pactile/scheduler/task-kernel-wave-dispatch.js.map +1 -0
  711. package/dist/pactile/scheduler/task-map-scheduler.d.ts +116 -0
  712. package/dist/pactile/scheduler/task-map-scheduler.d.ts.map +1 -0
  713. package/dist/pactile/scheduler/task-map-scheduler.js +1448 -0
  714. package/dist/pactile/scheduler/task-map-scheduler.js.map +1 -0
  715. package/dist/pactile/scheduler/task-run-dispatch-state.d.ts +7 -0
  716. package/dist/pactile/scheduler/task-run-dispatch-state.d.ts.map +1 -0
  717. package/dist/pactile/scheduler/task-run-dispatch-state.js +69 -0
  718. package/dist/pactile/scheduler/task-run-dispatch-state.js.map +1 -0
  719. package/dist/pactile/task/authorization.d.ts +3 -0
  720. package/dist/pactile/task/authorization.d.ts.map +1 -0
  721. package/dist/pactile/task/authorization.js +43 -0
  722. package/dist/pactile/task/authorization.js.map +1 -0
  723. package/dist/pactile/task/config.d.ts +9 -0
  724. package/dist/pactile/task/config.d.ts.map +1 -0
  725. package/dist/pactile/task/config.js +103 -0
  726. package/dist/pactile/task/config.js.map +1 -0
  727. package/dist/pactile/task/context.d.ts +19 -0
  728. package/dist/pactile/task/context.d.ts.map +1 -0
  729. package/dist/pactile/task/context.js +117 -0
  730. package/dist/pactile/task/context.js.map +1 -0
  731. package/dist/pactile/task/creation.d.ts +22 -0
  732. package/dist/pactile/task/creation.d.ts.map +1 -0
  733. package/dist/pactile/task/creation.js +95 -0
  734. package/dist/pactile/task/creation.js.map +1 -0
  735. package/dist/pactile/task/guards.d.ts +18 -0
  736. package/dist/pactile/task/guards.d.ts.map +1 -0
  737. package/dist/pactile/task/guards.js +180 -0
  738. package/dist/pactile/task/guards.js.map +1 -0
  739. package/dist/pactile/task/scaffold.d.ts +6 -0
  740. package/dist/pactile/task/scaffold.d.ts.map +1 -0
  741. package/dist/pactile/task/scaffold.js +57 -0
  742. package/dist/pactile/task/scaffold.js.map +1 -0
  743. package/dist/pactile/task/session-jev-receipt.d.ts +58 -0
  744. package/dist/pactile/task/session-jev-receipt.d.ts.map +1 -0
  745. package/dist/pactile/task/session-jev-receipt.js +375 -0
  746. package/dist/pactile/task/session-jev-receipt.js.map +1 -0
  747. package/dist/pactile/task/session-jev.d.ts +7 -0
  748. package/dist/pactile/task/session-jev.d.ts.map +1 -0
  749. package/dist/pactile/task/session-jev.js +217 -0
  750. package/dist/pactile/task/session-jev.js.map +1 -0
  751. package/dist/pactile/task/session-memory.d.ts +2 -0
  752. package/dist/pactile/task/session-memory.d.ts.map +1 -0
  753. package/dist/pactile/task/session-memory.js +123 -0
  754. package/dist/pactile/task/session-memory.js.map +1 -0
  755. package/dist/pactile/task/session-pack.d.ts +3 -0
  756. package/dist/pactile/task/session-pack.d.ts.map +1 -0
  757. package/dist/pactile/task/session-pack.js +278 -0
  758. package/dist/pactile/task/session-pack.js.map +1 -0
  759. package/dist/pactile/task/session-retrieval-jev-receipt.d.ts +49 -0
  760. package/dist/pactile/task/session-retrieval-jev-receipt.d.ts.map +1 -0
  761. package/dist/pactile/task/session-retrieval-jev-receipt.js +97 -0
  762. package/dist/pactile/task/session-retrieval-jev-receipt.js.map +1 -0
  763. package/dist/pactile/task/session-retrieval-jev.d.ts +8 -0
  764. package/dist/pactile/task/session-retrieval-jev.d.ts.map +1 -0
  765. package/dist/pactile/task/session-retrieval-jev.js +352 -0
  766. package/dist/pactile/task/session-retrieval-jev.js.map +1 -0
  767. package/dist/pactile/task/session.d.ts +13 -0
  768. package/dist/pactile/task/session.d.ts.map +1 -0
  769. package/dist/pactile/task/session.js +105 -0
  770. package/dist/pactile/task/session.js.map +1 -0
  771. package/dist/pactile/task/strategy.d.ts +2 -0
  772. package/dist/pactile/task/strategy.d.ts.map +1 -0
  773. package/dist/pactile/task/strategy.js +3 -0
  774. package/dist/pactile/task/strategy.js.map +1 -0
  775. package/dist/pactile/task/task-map.d.ts +35 -0
  776. package/dist/pactile/task/task-map.d.ts.map +1 -0
  777. package/dist/pactile/task/task-map.js +217 -0
  778. package/dist/pactile/task/task-map.js.map +1 -0
  779. package/dist/pactile/task/workflow-phase.d.ts +3 -0
  780. package/dist/pactile/task/workflow-phase.d.ts.map +1 -0
  781. package/dist/pactile/task/workflow-phase.js +56 -0
  782. package/dist/pactile/task/workflow-phase.js.map +1 -0
  783. package/dist/pactile/tiles/catalog.d.ts +1 -1
  784. package/dist/pactile/tiles/catalog.d.ts.map +1 -1
  785. package/dist/pactile/tiles/catalog.js +1 -1
  786. package/dist/pactile/tiles/catalog.js.map +1 -1
  787. package/dist/pactile/tiles/compiler.d.ts +1 -1
  788. package/dist/pactile/tiles/compiler.d.ts.map +1 -1
  789. package/dist/pactile/tiles/compiler.js +1 -1
  790. package/dist/pactile/tiles/compiler.js.map +1 -1
  791. package/dist/pactile/tiles/content/ondemand/index.d.ts +2 -2
  792. package/dist/pactile/tiles/content/ondemand/index.d.ts.map +1 -1
  793. package/dist/pactile/tiles/content/ondemand/index.js +2 -16
  794. package/dist/pactile/tiles/content/ondemand/index.js.map +1 -1
  795. package/dist/pactile/tiles/jev-selection.d.ts +44 -0
  796. package/dist/pactile/tiles/jev-selection.d.ts.map +1 -0
  797. package/dist/pactile/tiles/jev-selection.js +210 -0
  798. package/dist/pactile/tiles/jev-selection.js.map +1 -0
  799. package/dist/pactile/tiles/loader.d.ts +1 -1
  800. package/dist/pactile/tiles/loader.d.ts.map +1 -1
  801. package/dist/pactile/tiles/loader.js +1 -1
  802. package/dist/pactile/tiles/loader.js.map +1 -1
  803. package/dist/pactile/tiles/safe-yaml.d.ts +5 -1
  804. package/dist/pactile/tiles/safe-yaml.d.ts.map +1 -1
  805. package/dist/pactile/tiles/safe-yaml.js +8 -8
  806. package/dist/pactile/tiles/safe-yaml.js.map +1 -1
  807. package/dist/pactile/tiles/selection-receipts.d.ts +71 -0
  808. package/dist/pactile/tiles/selection-receipts.d.ts.map +1 -0
  809. package/dist/pactile/tiles/selection-receipts.js +319 -0
  810. package/dist/pactile/tiles/selection-receipts.js.map +1 -0
  811. package/dist/pactile/tiles/selection.d.ts +185 -0
  812. package/dist/pactile/tiles/selection.d.ts.map +1 -0
  813. package/dist/pactile/tiles/selection.js +985 -0
  814. package/dist/pactile/tiles/selection.js.map +1 -0
  815. package/dist/pactile/verification/git-observer.d.ts +3 -0
  816. package/dist/pactile/verification/git-observer.d.ts.map +1 -0
  817. package/dist/pactile/verification/git-observer.js +3 -0
  818. package/dist/pactile/verification/git-observer.js.map +1 -0
  819. package/dist/pactile/verification/index.d.ts +11 -0
  820. package/dist/pactile/verification/index.d.ts.map +1 -0
  821. package/dist/pactile/verification/index.js +6 -0
  822. package/dist/pactile/verification/index.js.map +1 -0
  823. package/dist/pactile/verification/jev-advice.d.ts +78 -0
  824. package/dist/pactile/verification/jev-advice.d.ts.map +1 -0
  825. package/dist/pactile/verification/jev-advice.js +397 -0
  826. package/dist/pactile/verification/jev-advice.js.map +1 -0
  827. package/dist/pactile/verification/planner.d.ts +15 -0
  828. package/dist/pactile/verification/planner.d.ts.map +1 -0
  829. package/dist/pactile/verification/planner.js +412 -0
  830. package/dist/pactile/verification/planner.js.map +1 -0
  831. package/dist/pactile/verification/receipt.d.ts +101 -0
  832. package/dist/pactile/verification/receipt.d.ts.map +1 -0
  833. package/dist/pactile/verification/receipt.js +400 -0
  834. package/dist/pactile/verification/receipt.js.map +1 -0
  835. package/dist/pactile/verification/types.d.ts +72 -0
  836. package/dist/pactile/verification/types.d.ts.map +1 -0
  837. package/dist/pactile/verification/types.js +21 -0
  838. package/dist/pactile/verification/types.js.map +1 -0
  839. package/dist/pactile/worktree/git-probe.d.ts +32 -0
  840. package/dist/pactile/worktree/git-probe.d.ts.map +1 -0
  841. package/dist/pactile/worktree/git-probe.js +336 -0
  842. package/dist/pactile/worktree/git-probe.js.map +1 -0
  843. package/dist/pactile/worktree/git-removal.d.ts +3 -0
  844. package/dist/pactile/worktree/git-removal.d.ts.map +1 -0
  845. package/dist/pactile/worktree/git-removal.js +11 -0
  846. package/dist/pactile/worktree/git-removal.js.map +1 -0
  847. package/dist/pactile/worktree/index.d.ts +2 -0
  848. package/dist/pactile/worktree/index.d.ts.map +1 -0
  849. package/dist/pactile/worktree/index.js +2 -0
  850. package/dist/pactile/worktree/index.js.map +1 -0
  851. package/dist/pactile/worktree/integration-evidence.d.ts +80 -0
  852. package/dist/pactile/worktree/integration-evidence.d.ts.map +1 -0
  853. package/dist/pactile/worktree/integration-evidence.js +166 -0
  854. package/dist/pactile/worktree/integration-evidence.js.map +1 -0
  855. package/dist/pactile/worktree/manager-core.d.ts +50 -0
  856. package/dist/pactile/worktree/manager-core.d.ts.map +1 -0
  857. package/dist/pactile/worktree/manager-core.js +359 -0
  858. package/dist/pactile/worktree/manager-core.js.map +1 -0
  859. package/dist/pactile/worktree/manager-provenance.d.ts +32 -0
  860. package/dist/pactile/worktree/manager-provenance.d.ts.map +1 -0
  861. package/dist/pactile/worktree/manager-provenance.js +409 -0
  862. package/dist/pactile/worktree/manager-provenance.js.map +1 -0
  863. package/dist/pactile/worktree/manager-types.d.ts +84 -0
  864. package/dist/pactile/worktree/manager-types.d.ts.map +1 -0
  865. package/dist/pactile/worktree/manager-types.js +11 -0
  866. package/dist/pactile/worktree/manager-types.js.map +1 -0
  867. package/dist/pactile/worktree/manager.d.ts +10 -0
  868. package/dist/pactile/worktree/manager.d.ts.map +1 -0
  869. package/dist/pactile/worktree/manager.js +6 -0
  870. package/dist/pactile/worktree/manager.js.map +1 -0
  871. package/dist/pactile/worktree/run-workspace-cleanup.d.ts +10 -0
  872. package/dist/pactile/worktree/run-workspace-cleanup.d.ts.map +1 -0
  873. package/dist/pactile/worktree/run-workspace-cleanup.js +695 -0
  874. package/dist/pactile/worktree/run-workspace-cleanup.js.map +1 -0
  875. package/dist/pactile/worktree/run-workspace-lifecycle.d.ts +65 -0
  876. package/dist/pactile/worktree/run-workspace-lifecycle.d.ts.map +1 -0
  877. package/dist/pactile/worktree/run-workspace-lifecycle.js +276 -0
  878. package/dist/pactile/worktree/run-workspace-lifecycle.js.map +1 -0
  879. package/dist/templates/common/bundled-skills/pactile-check/SKILL.md +161 -161
  880. package/dist/templates/common/bundled-skills/pactile-check/references/fowler-12-smells.md +28 -28
  881. package/dist/templates/common/bundled-skills/pactile-handoff/SKILL.md +117 -117
  882. package/dist/templates/common/bundled-skills/pactile-meta/SKILL.md +75 -75
  883. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/add-project-local-conventions.md +83 -83
  884. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-agents.md +5 -47
  885. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-context-loading.md +79 -84
  886. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-hooks.md +5 -57
  887. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-skills-or-commands.md +7 -77
  888. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-spec-structure.md +83 -83
  889. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-task-lifecycle.md +82 -88
  890. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-workflow.md +65 -65
  891. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/overview.md +12 -55
  892. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/context-injection.md +68 -68
  893. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/generated-files.md +7 -83
  894. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/overview.md +7 -51
  895. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/spec-system.md +102 -102
  896. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/task-system.md +138 -133
  897. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/workflow.md +75 -75
  898. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/workspace-memory.md +71 -71
  899. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/agents.md +7 -69
  900. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/hooks-and-settings.md +7 -59
  901. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/overview.md +5 -45
  902. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/platform-map.md +9 -45
  903. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/skills-and-commands.md +7 -108
  904. package/dist/templates/common/bundled-skills/pactile-micro-grill/SKILL.md +68 -68
  905. package/dist/templates/common/bundled-skills/pactile-skill-creator/SKILL.md +47 -47
  906. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/authoring-rules.md +170 -170
  907. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/general-authoring.md +189 -189
  908. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/pactile-skill-locations.md +11 -52
  909. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/review-checklist.md +52 -52
  910. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/SKILL.md +41 -41
  911. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/mcp-setup.md +18 -90
  912. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/repository-analysis.md +41 -59
  913. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/spec-task-planning.md +61 -61
  914. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/spec-writing.md +70 -70
  915. package/dist/templates/common/bundled-skills/smart-search-cli/SKILL.md +395 -393
  916. package/dist/templates/common/bundled-skills/smart-search-cli/agents/openai.yaml +3 -3
  917. package/dist/templates/common/bundled-skills/smart-search-cli/examples/batch-search.md +98 -98
  918. package/dist/templates/common/bundled-skills/smart-search-cli/examples/evidence-gathering.md +89 -89
  919. package/dist/templates/common/bundled-skills/smart-search-cli/references/cli-contract.md +323 -323
  920. package/dist/templates/common/commands/continue.md +60 -62
  921. package/dist/templates/common/commands/finish-work.md +84 -82
  922. package/dist/templates/common/commands/start.md +66 -66
  923. package/dist/templates/common/index.d.ts +0 -20
  924. package/dist/templates/common/index.d.ts.map +1 -1
  925. package/dist/templates/common/index.js +0 -16
  926. package/dist/templates/common/index.js.map +1 -1
  927. package/dist/templates/common/skills/before-dev.md +35 -35
  928. package/dist/templates/common/skills/brainstorm.md +210 -204
  929. package/dist/templates/common/skills/break-loop.md +125 -125
  930. package/dist/templates/common/skills/update-spec.md +363 -363
  931. package/dist/templates/extract.d.ts +1 -8
  932. package/dist/templates/extract.d.ts.map +1 -1
  933. package/dist/templates/extract.js +0 -31
  934. package/dist/templates/extract.js.map +1 -1
  935. package/dist/templates/markdown/agents.md +14 -14
  936. package/dist/templates/markdown/framework/artifact-locale-guide.md.txt +93 -93
  937. package/dist/templates/markdown/framework/codex-worker-dispatch.md.txt +9 -0
  938. package/dist/templates/markdown/framework/dogfood-only-surfaces.md.txt +7 -28
  939. package/dist/templates/markdown/framework/execution-strategy.md.txt +14 -45
  940. package/dist/templates/markdown/framework/index.md.txt +20 -31
  941. package/dist/templates/markdown/framework/injection-budget-guide.md.txt +7 -111
  942. package/dist/templates/markdown/framework/middleware-protocol.md.txt +139 -238
  943. package/dist/templates/markdown/framework/parallel-first-execution.md.txt +28 -116
  944. package/dist/templates/markdown/framework/prd-grill-frontier.md.txt +105 -105
  945. package/dist/templates/markdown/framework/release-boundary.md.txt +29 -30
  946. package/dist/templates/markdown/framework/retrieval-daily-guide.md.txt +9 -199
  947. package/dist/templates/markdown/framework/upgrade.md.txt +15 -15
  948. package/dist/templates/markdown/framework/verification-strength-guide.md.txt +185 -185
  949. package/dist/templates/markdown/gitignore.txt +15 -15
  950. package/dist/templates/markdown/index.d.ts +1 -5
  951. package/dist/templates/markdown/index.d.ts.map +1 -1
  952. package/dist/templates/markdown/index.js +3 -23
  953. package/dist/templates/markdown/index.js.map +1 -1
  954. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -51
  955. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -54
  956. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -51
  957. package/dist/templates/markdown/spec/backend/index.md.txt +38 -38
  958. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -51
  959. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -51
  960. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -59
  961. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -54
  962. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -51
  963. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -39
  964. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -51
  965. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -51
  966. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -51
  967. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +174 -174
  968. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +162 -162
  969. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +17 -634
  970. package/dist/templates/markdown/spec/guides/debug-loop-guide.md.txt +227 -227
  971. package/dist/templates/markdown/spec/guides/durable-learning-decision-guide.md.txt +75 -75
  972. package/dist/templates/markdown/spec/guides/e2e-walkthrough-guide.md.txt +88 -93
  973. package/dist/templates/markdown/spec/guides/index.md.txt +131 -131
  974. package/dist/templates/markdown/spec/guides/prototype-guide.md.txt +137 -139
  975. package/dist/templates/markdown/spec/guides/test-discipline-guide.md.txt +179 -179
  976. package/dist/templates/markdown/workspace-index.md +122 -125
  977. package/dist/templates/markdown/worktree.yaml.txt +58 -58
  978. package/dist/templates/pactile/CONTEXT.md +113 -113
  979. package/dist/templates/pactile/config/execution-strategy-rules.json +30 -31
  980. package/dist/templates/pactile/config.yaml +111 -130
  981. package/dist/templates/pactile/docs/adr/README.md +21 -21
  982. package/dist/templates/pactile/gitignore.txt +35 -35
  983. package/dist/templates/pactile/index.d.ts +3 -127
  984. package/dist/templates/pactile/index.d.ts.map +1 -1
  985. package/dist/templates/pactile/index.js +13 -298
  986. package/dist/templates/pactile/index.js.map +1 -1
  987. package/dist/templates/pactile/modules/approval-personal/contract.md +31 -43
  988. package/dist/templates/pactile/modules/close-basic/contract.md +35 -38
  989. package/dist/templates/pactile/modules/context-progressive/contract.md +44 -44
  990. package/dist/templates/pactile/modules/debug-recovery/contract.md +44 -44
  991. package/dist/templates/pactile/modules/define-basic/contract.md +35 -39
  992. package/dist/templates/pactile/modules/define-extended/contract.md +45 -45
  993. package/dist/templates/pactile/modules/execute-agent/contract.md +30 -38
  994. package/dist/templates/pactile/modules/independent-check/contract.md +35 -35
  995. package/dist/templates/pactile/modules/index.json +127 -133
  996. package/dist/templates/pactile/modules/intake-basic/contract.md +37 -34
  997. package/dist/templates/pactile/modules/observability-local/contract.md +31 -31
  998. package/dist/templates/pactile/modules/parent-child/contract.md +45 -45
  999. package/dist/templates/pactile/modules/personal-memory/contract.md +55 -55
  1000. package/dist/templates/pactile/modules/retention-storage/contract.md +43 -43
  1001. package/dist/templates/pactile/modules/retrieval-extended/contract.md +78 -77
  1002. package/dist/templates/pactile/modules/session-transfer/contract.md +41 -41
  1003. package/dist/templates/pactile/modules/spec-learning/contract.md +50 -50
  1004. package/dist/templates/pactile/modules/vcs-integration/contract.md +46 -46
  1005. package/dist/templates/pactile/modules/verify-basic/contract.md +29 -38
  1006. package/dist/templates/pactile/modules/worker-orchestration/contract.md +47 -47
  1007. package/dist/templates/pactile/scripts/retrieval_probe_matrix_template.json +43 -43
  1008. package/dist/templates/pactile/tasks/locale/en/default-prd.md +27 -27
  1009. package/dist/templates/pactile/tasks/locale/zh/default-prd.md +27 -27
  1010. package/dist/templates/pactile/tasks/templates/release-execution/design.md +61 -61
  1011. package/dist/templates/pactile/tasks/templates/release-execution/handoff-template.md +28 -28
  1012. package/dist/templates/pactile/tasks/templates/release-execution/implement.md +28 -28
  1013. package/dist/templates/pactile/tasks/templates/release-execution/prd.md +30 -30
  1014. package/dist/templates/pactile/tasks/templates/release-readiness/design.md +50 -50
  1015. package/dist/templates/pactile/tasks/templates/release-readiness/handoff-template.md +45 -39
  1016. package/dist/templates/pactile/tasks/templates/release-readiness/implement.md +28 -28
  1017. package/dist/templates/pactile/tasks/templates/release-readiness/prd.md +30 -30
  1018. package/dist/templates/pactile/workflow.md +61 -64
  1019. package/dist/templates/template-utils.d.ts +1 -2
  1020. package/dist/templates/template-utils.d.ts.map +1 -1
  1021. package/dist/templates/template-utils.js +2 -13
  1022. package/dist/templates/template-utils.js.map +1 -1
  1023. package/dist/types/ai-tools.d.ts +12 -13
  1024. package/dist/types/ai-tools.d.ts.map +1 -1
  1025. package/dist/types/ai-tools.js +15 -14
  1026. package/dist/types/ai-tools.js.map +1 -1
  1027. package/dist/utils/codebase-retrieval-router.d.ts +1 -1
  1028. package/dist/utils/codebase-retrieval-router.d.ts.map +1 -1
  1029. package/dist/utils/cwd-guard.js +1 -1
  1030. package/dist/utils/cwd-guard.js.map +1 -1
  1031. package/dist/utils/developer.d.ts +5 -0
  1032. package/dist/utils/developer.d.ts.map +1 -0
  1033. package/dist/utils/developer.js +38 -0
  1034. package/dist/utils/developer.js.map +1 -0
  1035. package/dist/utils/git-root.d.ts +3 -0
  1036. package/dist/utils/git-root.d.ts.map +1 -0
  1037. package/dist/utils/git-root.js +24 -0
  1038. package/dist/utils/git-root.js.map +1 -0
  1039. package/dist/utils/local-date.d.ts +3 -0
  1040. package/dist/utils/local-date.d.ts.map +1 -0
  1041. package/dist/utils/local-date.js +8 -0
  1042. package/dist/utils/local-date.js.map +1 -0
  1043. package/dist/utils/manifest-prune.d.ts +5 -4
  1044. package/dist/utils/manifest-prune.d.ts.map +1 -1
  1045. package/dist/utils/manifest-prune.js +11 -21
  1046. package/dist/utils/manifest-prune.js.map +1 -1
  1047. package/dist/utils/p36-upgrade.d.ts +3 -3
  1048. package/dist/utils/p36-upgrade.d.ts.map +1 -1
  1049. package/dist/utils/p36-upgrade.js +3 -11
  1050. package/dist/utils/p36-upgrade.js.map +1 -1
  1051. package/dist/utils/post-update-smoke.d.ts +1 -4
  1052. package/dist/utils/post-update-smoke.d.ts.map +1 -1
  1053. package/dist/utils/post-update-smoke.js +13 -25
  1054. package/dist/utils/post-update-smoke.js.map +1 -1
  1055. package/dist/utils/project-capabilities.d.ts +2 -17
  1056. package/dist/utils/project-capabilities.d.ts.map +1 -1
  1057. package/dist/utils/project-capabilities.js +14 -119
  1058. package/dist/utils/project-capabilities.js.map +1 -1
  1059. package/dist/utils/readiness.d.ts +16 -2
  1060. package/dist/utils/readiness.d.ts.map +1 -1
  1061. package/dist/utils/readiness.js +63 -32
  1062. package/dist/utils/readiness.js.map +1 -1
  1063. package/dist/utils/retrieval-execution-telemetry.d.ts +1 -1
  1064. package/dist/utils/retrieval-execution-telemetry.d.ts.map +1 -1
  1065. package/dist/utils/retrieval-result-ranking.d.ts +1 -1
  1066. package/dist/utils/retrieval-result-ranking.d.ts.map +1 -1
  1067. package/dist/utils/retrieval-tool-classification.d.ts +1 -1
  1068. package/dist/utils/retrieval-tool-classification.d.ts.map +1 -1
  1069. package/dist/utils/task-json.d.ts +3 -3
  1070. package/dist/utils/task-json.d.ts.map +1 -1
  1071. package/dist/utils/task-json.js +3 -3
  1072. package/dist/utils/task-json.js.map +1 -1
  1073. package/dist/utils/template-hash.d.ts +4 -0
  1074. package/dist/utils/template-hash.d.ts.map +1 -1
  1075. package/dist/utils/template-hash.js +1 -1
  1076. package/dist/utils/template-hash.js.map +1 -1
  1077. package/dist/utils/uninstall-scrubbers.js +1 -1
  1078. package/dist/utils/update-rollout-report.d.ts +9 -0
  1079. package/dist/utils/update-rollout-report.d.ts.map +1 -1
  1080. package/dist/utils/update-rollout-report.js +14 -1
  1081. package/dist/utils/update-rollout-report.js.map +1 -1
  1082. package/dist/utils/workflow-dir.d.ts +1 -1
  1083. package/dist/utils/workflow-dir.d.ts.map +1 -1
  1084. package/dist/utils/workflow-dir.js +1 -1
  1085. package/dist/utils/workflow-dir.js.map +1 -1
  1086. package/package.json +63 -47
  1087. package/CHANGELOG.md +0 -602
  1088. package/bin/compat-warning.js +0 -11
  1089. package/bin/cstl.js +0 -6
  1090. package/bin/pactile.js +0 -3
  1091. package/bin/smart-search.js +0 -38
  1092. package/dist/commands/channel/adapters/claude.d.ts +0 -29
  1093. package/dist/commands/channel/adapters/claude.d.ts.map +0 -1
  1094. package/dist/commands/channel/adapters/claude.js +0 -203
  1095. package/dist/commands/channel/adapters/claude.js.map +0 -1
  1096. package/dist/commands/channel/adapters/codex.d.ts +0 -85
  1097. package/dist/commands/channel/adapters/codex.d.ts.map +0 -1
  1098. package/dist/commands/channel/adapters/codex.js +0 -505
  1099. package/dist/commands/channel/adapters/codex.js.map +0 -1
  1100. package/dist/commands/channel/adapters/index.d.ts +0 -84
  1101. package/dist/commands/channel/adapters/index.d.ts.map +0 -1
  1102. package/dist/commands/channel/adapters/index.js +0 -115
  1103. package/dist/commands/channel/adapters/index.js.map +0 -1
  1104. package/dist/commands/channel/adapters/types.d.ts +0 -33
  1105. package/dist/commands/channel/adapters/types.d.ts.map +0 -1
  1106. package/dist/commands/channel/adapters/types.js +0 -2
  1107. package/dist/commands/channel/adapters/types.js.map +0 -1
  1108. package/dist/commands/channel/agent-loader.d.ts +0 -32
  1109. package/dist/commands/channel/agent-loader.d.ts.map +0 -1
  1110. package/dist/commands/channel/agent-loader.js +0 -154
  1111. package/dist/commands/channel/agent-loader.js.map +0 -1
  1112. package/dist/commands/channel/context-loader.d.ts +0 -26
  1113. package/dist/commands/channel/context-loader.d.ts.map +0 -1
  1114. package/dist/commands/channel/context-loader.js +0 -290
  1115. package/dist/commands/channel/context-loader.js.map +0 -1
  1116. package/dist/commands/channel/context.d.ts +0 -16
  1117. package/dist/commands/channel/context.d.ts.map +0 -1
  1118. package/dist/commands/channel/context.js +0 -83
  1119. package/dist/commands/channel/context.js.map +0 -1
  1120. package/dist/commands/channel/create.d.ts +0 -27
  1121. package/dist/commands/channel/create.d.ts.map +0 -1
  1122. package/dist/commands/channel/create.js +0 -39
  1123. package/dist/commands/channel/create.js.map +0 -1
  1124. package/dist/commands/channel/dev-parse-trace.d.ts +0 -14
  1125. package/dist/commands/channel/dev-parse-trace.d.ts.map +0 -1
  1126. package/dist/commands/channel/dev-parse-trace.js +0 -70
  1127. package/dist/commands/channel/dev-parse-trace.js.map +0 -1
  1128. package/dist/commands/channel/guard.d.ts +0 -150
  1129. package/dist/commands/channel/guard.d.ts.map +0 -1
  1130. package/dist/commands/channel/guard.js +0 -475
  1131. package/dist/commands/channel/guard.js.map +0 -1
  1132. package/dist/commands/channel/index.d.ts +0 -3
  1133. package/dist/commands/channel/index.d.ts.map +0 -1
  1134. package/dist/commands/channel/index.js +0 -531
  1135. package/dist/commands/channel/index.js.map +0 -1
  1136. package/dist/commands/channel/interrupt.d.ts +0 -10
  1137. package/dist/commands/channel/interrupt.d.ts.map +0 -1
  1138. package/dist/commands/channel/interrupt.js +0 -22
  1139. package/dist/commands/channel/interrupt.js.map +0 -1
  1140. package/dist/commands/channel/kill.d.ts +0 -7
  1141. package/dist/commands/channel/kill.d.ts.map +0 -1
  1142. package/dist/commands/channel/kill.js +0 -121
  1143. package/dist/commands/channel/kill.js.map +0 -1
  1144. package/dist/commands/channel/list.d.ts +0 -17
  1145. package/dist/commands/channel/list.d.ts.map +0 -1
  1146. package/dist/commands/channel/list.js +0 -233
  1147. package/dist/commands/channel/list.js.map +0 -1
  1148. package/dist/commands/channel/messages.d.ts +0 -15
  1149. package/dist/commands/channel/messages.d.ts.map +0 -1
  1150. package/dist/commands/channel/messages.js +0 -245
  1151. package/dist/commands/channel/messages.js.map +0 -1
  1152. package/dist/commands/channel/rm.d.ts +0 -27
  1153. package/dist/commands/channel/rm.d.ts.map +0 -1
  1154. package/dist/commands/channel/rm.js +0 -216
  1155. package/dist/commands/channel/rm.js.map +0 -1
  1156. package/dist/commands/channel/run.d.ts +0 -30
  1157. package/dist/commands/channel/run.d.ts.map +0 -1
  1158. package/dist/commands/channel/run.js +0 -130
  1159. package/dist/commands/channel/run.js.map +0 -1
  1160. package/dist/commands/channel/send.d.ts +0 -11
  1161. package/dist/commands/channel/send.d.ts.map +0 -1
  1162. package/dist/commands/channel/send.js +0 -24
  1163. package/dist/commands/channel/send.js.map +0 -1
  1164. package/dist/commands/channel/spawn.d.ts +0 -40
  1165. package/dist/commands/channel/spawn.d.ts.map +0 -1
  1166. package/dist/commands/channel/spawn.js +0 -242
  1167. package/dist/commands/channel/spawn.js.map +0 -1
  1168. package/dist/commands/channel/store/events.d.ts +0 -39
  1169. package/dist/commands/channel/store/events.d.ts.map +0 -1
  1170. package/dist/commands/channel/store/events.js +0 -87
  1171. package/dist/commands/channel/store/events.js.map +0 -1
  1172. package/dist/commands/channel/store/filter.d.ts +0 -3
  1173. package/dist/commands/channel/store/filter.d.ts.map +0 -1
  1174. package/dist/commands/channel/store/filter.js +0 -2
  1175. package/dist/commands/channel/store/filter.js.map +0 -1
  1176. package/dist/commands/channel/store/lock.d.ts +0 -23
  1177. package/dist/commands/channel/store/lock.d.ts.map +0 -1
  1178. package/dist/commands/channel/store/lock.js +0 -99
  1179. package/dist/commands/channel/store/lock.js.map +0 -1
  1180. package/dist/commands/channel/store/paths.d.ts +0 -63
  1181. package/dist/commands/channel/store/paths.d.ts.map +0 -1
  1182. package/dist/commands/channel/store/paths.js +0 -247
  1183. package/dist/commands/channel/store/paths.js.map +0 -1
  1184. package/dist/commands/channel/store/schema.d.ts +0 -27
  1185. package/dist/commands/channel/store/schema.d.ts.map +0 -1
  1186. package/dist/commands/channel/store/schema.js +0 -34
  1187. package/dist/commands/channel/store/schema.js.map +0 -1
  1188. package/dist/commands/channel/store/thread-state.d.ts +0 -5
  1189. package/dist/commands/channel/store/thread-state.d.ts.map +0 -1
  1190. package/dist/commands/channel/store/thread-state.js +0 -16
  1191. package/dist/commands/channel/store/thread-state.js.map +0 -1
  1192. package/dist/commands/channel/store/watch.d.ts +0 -19
  1193. package/dist/commands/channel/store/watch.d.ts.map +0 -1
  1194. package/dist/commands/channel/store/watch.js +0 -146
  1195. package/dist/commands/channel/store/watch.js.map +0 -1
  1196. package/dist/commands/channel/supervisor/idle.d.ts +0 -46
  1197. package/dist/commands/channel/supervisor/idle.d.ts.map +0 -1
  1198. package/dist/commands/channel/supervisor/idle.js +0 -72
  1199. package/dist/commands/channel/supervisor/idle.js.map +0 -1
  1200. package/dist/commands/channel/supervisor/inbox.d.ts +0 -30
  1201. package/dist/commands/channel/supervisor/inbox.d.ts.map +0 -1
  1202. package/dist/commands/channel/supervisor/inbox.js +0 -160
  1203. package/dist/commands/channel/supervisor/inbox.js.map +0 -1
  1204. package/dist/commands/channel/supervisor/shutdown.d.ts +0 -68
  1205. package/dist/commands/channel/supervisor/shutdown.d.ts.map +0 -1
  1206. package/dist/commands/channel/supervisor/shutdown.js +0 -146
  1207. package/dist/commands/channel/supervisor/shutdown.js.map +0 -1
  1208. package/dist/commands/channel/supervisor/stdout.d.ts +0 -51
  1209. package/dist/commands/channel/supervisor/stdout.d.ts.map +0 -1
  1210. package/dist/commands/channel/supervisor/stdout.js +0 -121
  1211. package/dist/commands/channel/supervisor/stdout.js.map +0 -1
  1212. package/dist/commands/channel/supervisor/turns.d.ts +0 -31
  1213. package/dist/commands/channel/supervisor/turns.d.ts.map +0 -1
  1214. package/dist/commands/channel/supervisor/turns.js +0 -45
  1215. package/dist/commands/channel/supervisor/turns.js.map +0 -1
  1216. package/dist/commands/channel/supervisor/warning.d.ts +0 -48
  1217. package/dist/commands/channel/supervisor/warning.d.ts.map +0 -1
  1218. package/dist/commands/channel/supervisor/warning.js +0 -77
  1219. package/dist/commands/channel/supervisor/warning.js.map +0 -1
  1220. package/dist/commands/channel/supervisor.d.ts +0 -59
  1221. package/dist/commands/channel/supervisor.d.ts.map +0 -1
  1222. package/dist/commands/channel/supervisor.js +0 -345
  1223. package/dist/commands/channel/supervisor.js.map +0 -1
  1224. package/dist/commands/channel/text-body.d.ts +0 -13
  1225. package/dist/commands/channel/text-body.d.ts.map +0 -1
  1226. package/dist/commands/channel/text-body.js +0 -47
  1227. package/dist/commands/channel/text-body.js.map +0 -1
  1228. package/dist/commands/channel/threads.d.ts +0 -39
  1229. package/dist/commands/channel/threads.d.ts.map +0 -1
  1230. package/dist/commands/channel/threads.js +0 -106
  1231. package/dist/commands/channel/threads.js.map +0 -1
  1232. package/dist/commands/channel/title.d.ts +0 -12
  1233. package/dist/commands/channel/title.d.ts.map +0 -1
  1234. package/dist/commands/channel/title.js +0 -24
  1235. package/dist/commands/channel/title.js.map +0 -1
  1236. package/dist/commands/channel/wait.d.ts +0 -17
  1237. package/dist/commands/channel/wait.d.ts.map +0 -1
  1238. package/dist/commands/channel/wait.js +0 -75
  1239. package/dist/commands/channel/wait.js.map +0 -1
  1240. package/dist/commands/validate-rules.d.ts +0 -6
  1241. package/dist/commands/validate-rules.d.ts.map +0 -1
  1242. package/dist/commands/validate-rules.js +0 -33
  1243. package/dist/commands/validate-rules.js.map +0 -1
  1244. package/dist/configurators/cursor.d.ts +0 -21
  1245. package/dist/configurators/cursor.d.ts.map +0 -1
  1246. package/dist/configurators/cursor.js +0 -51
  1247. package/dist/configurators/cursor.js.map +0 -1
  1248. package/dist/migrations/manifests/0.1.0.json +0 -9
  1249. package/dist/migrations/manifests/0.1.1.json +0 -9
  1250. package/dist/migrations/manifests/0.1.2.json +0 -9
  1251. package/dist/migrations/manifests/0.1.3.json +0 -9
  1252. package/dist/migrations/manifests/0.1.4.json +0 -9
  1253. package/dist/migrations/manifests/0.2.1.json +0 -9
  1254. package/dist/migrations/manifests/0.2.10.json +0 -374
  1255. package/dist/migrations/manifests/0.2.2.json +0 -9
  1256. package/dist/migrations/manifests/0.2.3.json +0 -9
  1257. package/dist/migrations/manifests/0.2.4.json +0 -9
  1258. package/dist/migrations/manifests/0.2.5.json +0 -9
  1259. package/dist/migrations/manifests/0.2.6.json +0 -9
  1260. package/dist/migrations/manifests/0.2.7.json +0 -9
  1261. package/dist/migrations/manifests/0.2.8.json +0 -9
  1262. package/dist/migrations/manifests/0.2.9.json +0 -9
  1263. package/dist/migrations/manifests/0.3.0.json +0 -89
  1264. package/dist/migrations/manifests/0.3.1.json +0 -32
  1265. package/dist/migrations/manifests/0.3.2.json +0 -16
  1266. package/dist/migrations/manifests/0.3.3.json +0 -9
  1267. package/dist/migrations/manifests/0.3.4.json +0 -9
  1268. package/dist/migrations/manifests/0.3.5.json +0 -9
  1269. package/dist/migrations/manifests/0.3.6.json +0 -9
  1270. package/dist/migrations/manifests/0.4.0.json +0 -9
  1271. package/dist/migrations/manifests/0.4.1.json +0 -9
  1272. package/dist/migrations/manifests/0.4.2.json +0 -9
  1273. package/dist/migrations/manifests/0.4.3.json +0 -9
  1274. package/dist/migrations/manifests/0.5.0-beta.0.json +0 -9
  1275. package/dist/migrations/manifests/0.5.0-beta.1.json +0 -9
  1276. package/dist/migrations/manifests/0.5.0-beta.2.json +0 -9
  1277. package/dist/migrations/manifests/0.5.0-beta.3.json +0 -9
  1278. package/dist/migrations/manifests/0.5.0-beta.4.json +0 -9
  1279. package/dist/migrations/manifests/0.5.0-beta.5.json +0 -9
  1280. package/dist/pactile/adapters/cursor/index.d.ts +0 -60
  1281. package/dist/pactile/adapters/cursor/index.d.ts.map +0 -1
  1282. package/dist/pactile/adapters/cursor/index.js +0 -186
  1283. package/dist/pactile/adapters/cursor/index.js.map +0 -1
  1284. package/dist/pactile/compat/retired-alternate-client.d.ts +0 -42
  1285. package/dist/pactile/compat/retired-alternate-client.d.ts.map +0 -1
  1286. package/dist/pactile/compat/retired-alternate-client.js +0 -153
  1287. package/dist/pactile/compat/retired-alternate-client.js.map +0 -1
  1288. package/dist/pactile/compat/update-residue.d.ts +0 -4
  1289. package/dist/pactile/compat/update-residue.d.ts.map +0 -1
  1290. package/dist/pactile/compat/update-residue.js +0 -55
  1291. package/dist/pactile/compat/update-residue.js.map +0 -1
  1292. package/dist/templates/common/optional-skills/chrome-cdp/SKILL.md +0 -179
  1293. package/dist/templates/common/optional-skills/chrome-cdp/examples/fetch-hook-api-capture.md +0 -149
  1294. package/dist/templates/common/optional-skills/chrome-cdp/scripts/cdp.mjs +0 -904
  1295. package/dist/templates/cursor/agents/pactile-check.md +0 -58
  1296. package/dist/templates/cursor/agents/pactile-implement.md +0 -56
  1297. package/dist/templates/cursor/agents/pactile-research.md +0 -51
  1298. package/dist/templates/cursor/commands/handoff.md +0 -101
  1299. package/dist/templates/cursor/fixtures/expected-rules.d.ts +0 -14
  1300. package/dist/templates/cursor/fixtures/expected-rules.d.ts.map +0 -1
  1301. package/dist/templates/cursor/fixtures/expected-rules.js +0 -20
  1302. package/dist/templates/cursor/fixtures/expected-rules.js.map +0 -1
  1303. package/dist/templates/cursor/hooks.json +0 -52
  1304. package/dist/templates/cursor/index.d.ts +0 -19
  1305. package/dist/templates/cursor/index.d.ts.map +0 -1
  1306. package/dist/templates/cursor/index.js +0 -19
  1307. package/dist/templates/cursor/index.js.map +0 -1
  1308. package/dist/templates/cursor/rules/pactile-bootstrap.mdc +0 -18
  1309. package/dist/templates/cursor/worktrees.json +0 -11
  1310. package/dist/templates/markdown/framework/cursor-context-injection-guide.md.txt +0 -85
  1311. package/dist/templates/markdown/framework/cursor-native-modes-guide.md.txt +0 -239
  1312. package/dist/templates/markdown/framework/cursor-semantic-compliance.md.txt +0 -41
  1313. package/dist/templates/markdown/framework/cursor-subagent-policy.md.txt +0 -90
  1314. package/dist/templates/markdown/framework/internal-skills-cursor-reachability.md.txt +0 -45
  1315. package/dist/templates/markdown/prompts/run-semantic-slice-12.md.txt +0 -25
  1316. package/dist/templates/pactile/modules/candidate-pool/contract.md +0 -37
  1317. package/dist/templates/pactile/pool/README.md +0 -149
  1318. package/dist/templates/pactile/pool/items/.gitkeep +0 -0
  1319. package/dist/templates/pactile/pool/plan.md +0 -50
  1320. package/dist/templates/pactile/scripts/__init__.py +0 -5
  1321. package/dist/templates/pactile/scripts/add_session.py +0 -547
  1322. package/dist/templates/pactile/scripts/build_context_pack.py +0 -17
  1323. package/dist/templates/pactile/scripts/build_retrieval_pack.py +0 -376
  1324. package/dist/templates/pactile/scripts/codegraph_session_smoke.py +0 -76
  1325. package/dist/templates/pactile/scripts/common/__init__.py +0 -103
  1326. package/dist/templates/pactile/scripts/common/active_task.py +0 -576
  1327. package/dist/templates/pactile/scripts/common/adapter_middleware.py +0 -1373
  1328. package/dist/templates/pactile/scripts/common/artifact_locale.py +0 -303
  1329. package/dist/templates/pactile/scripts/common/artifact_search.py +0 -587
  1330. package/dist/templates/pactile/scripts/common/cli_adapter.py +0 -135
  1331. package/dist/templates/pactile/scripts/common/cli_environment.py +0 -155
  1332. package/dist/templates/pactile/scripts/common/codebase_retrieval_router.py +0 -1339
  1333. package/dist/templates/pactile/scripts/common/config.py +0 -497
  1334. package/dist/templates/pactile/scripts/common/context_pack.py +0 -371
  1335. package/dist/templates/pactile/scripts/common/cursor_retrieval_env.py +0 -31
  1336. package/dist/templates/pactile/scripts/common/developer.py +0 -190
  1337. package/dist/templates/pactile/scripts/common/execution_strategy.py +0 -268
  1338. package/dist/templates/pactile/scripts/common/full_quality.py +0 -237
  1339. package/dist/templates/pactile/scripts/common/git.py +0 -37
  1340. package/dist/templates/pactile/scripts/common/git_context.py +0 -198
  1341. package/dist/templates/pactile/scripts/common/injection_budget.py +0 -317
  1342. package/dist/templates/pactile/scripts/common/io.py +0 -37
  1343. package/dist/templates/pactile/scripts/common/kernel_command.py +0 -369
  1344. package/dist/templates/pactile/scripts/common/lite_context.py +0 -280
  1345. package/dist/templates/pactile/scripts/common/log.py +0 -45
  1346. package/dist/templates/pactile/scripts/common/ondemand_topology.py +0 -419
  1347. package/dist/templates/pactile/scripts/common/packages_context.py +0 -239
  1348. package/dist/templates/pactile/scripts/common/pactile_config.py +0 -131
  1349. package/dist/templates/pactile/scripts/common/parallel_declaration.py +0 -369
  1350. package/dist/templates/pactile/scripts/common/parent_orchestration.py +0 -1198
  1351. package/dist/templates/pactile/scripts/common/paths.py +0 -756
  1352. package/dist/templates/pactile/scripts/common/pool_refs.py +0 -119
  1353. package/dist/templates/pactile/scripts/common/pool_slice.py +0 -269
  1354. package/dist/templates/pactile/scripts/common/pool_store.py +0 -766
  1355. package/dist/templates/pactile/scripts/common/project_file_stats.py +0 -91
  1356. package/dist/templates/pactile/scripts/common/retrieval_adapter_metadata.py +0 -943
  1357. package/dist/templates/pactile/scripts/common/retrieval_agent_instructions.py +0 -123
  1358. package/dist/templates/pactile/scripts/common/retrieval_evidence.py +0 -915
  1359. package/dist/templates/pactile/scripts/common/retrieval_pack.py +0 -422
  1360. package/dist/templates/pactile/scripts/common/retrieval_pack_context.py +0 -122
  1361. package/dist/templates/pactile/scripts/common/retrieval_plan_gate.py +0 -61
  1362. package/dist/templates/pactile/scripts/common/retrieval_result_ranking.py +0 -104
  1363. package/dist/templates/pactile/scripts/common/retrieval_tool_classification.py +0 -166
  1364. package/dist/templates/pactile/scripts/common/safe_commit.py +0 -285
  1365. package/dist/templates/pactile/scripts/common/semantic_plan_gate.py +0 -53
  1366. package/dist/templates/pactile/scripts/common/session_context.py +0 -1213
  1367. package/dist/templates/pactile/scripts/common/session_memory.py +0 -386
  1368. package/dist/templates/pactile/scripts/common/session_pack.py +0 -886
  1369. package/dist/templates/pactile/scripts/common/smart_search_evidence.py +0 -514
  1370. package/dist/templates/pactile/scripts/common/smart_search_resolve.py +0 -150
  1371. package/dist/templates/pactile/scripts/common/subagent_dispatch.py +0 -592
  1372. package/dist/templates/pactile/scripts/common/task_context.py +0 -241
  1373. package/dist/templates/pactile/scripts/common/task_dashboard.py +0 -286
  1374. package/dist/templates/pactile/scripts/common/task_dependencies.py +0 -648
  1375. package/dist/templates/pactile/scripts/common/task_gates.py +0 -2478
  1376. package/dist/templates/pactile/scripts/common/task_map.py +0 -703
  1377. package/dist/templates/pactile/scripts/common/task_queue.py +0 -188
  1378. package/dist/templates/pactile/scripts/common/task_store.py +0 -2252
  1379. package/dist/templates/pactile/scripts/common/task_utils.py +0 -274
  1380. package/dist/templates/pactile/scripts/common/tasks.py +0 -231
  1381. package/dist/templates/pactile/scripts/common/test_adapter_middleware.py +0 -199
  1382. package/dist/templates/pactile/scripts/common/test_depends_mode_block.py +0 -509
  1383. package/dist/templates/pactile/scripts/common/test_full_quality.py +0 -197
  1384. package/dist/templates/pactile/scripts/common/test_kernel_command.py +0 -336
  1385. package/dist/templates/pactile/scripts/common/test_lite_path.py +0 -190
  1386. package/dist/templates/pactile/scripts/common/test_observable_defaults.py +0 -141
  1387. package/dist/templates/pactile/scripts/common/test_ondemand_topology.py +0 -237
  1388. package/dist/templates/pactile/scripts/common/test_parallel_declaration.py +0 -264
  1389. package/dist/templates/pactile/scripts/common/test_pool_slice.py +0 -198
  1390. package/dist/templates/pactile/scripts/common/test_pool_store.py +0 -452
  1391. package/dist/templates/pactile/scripts/common/test_retrieval_arbitration.py +0 -331
  1392. package/dist/templates/pactile/scripts/common/test_task_dashboard.py +0 -155
  1393. package/dist/templates/pactile/scripts/common/test_task_dependencies.py +0 -329
  1394. package/dist/templates/pactile/scripts/common/test_task_store_kernel_patch.py +0 -163
  1395. package/dist/templates/pactile/scripts/common/types.py +0 -110
  1396. package/dist/templates/pactile/scripts/common/workflow_phase.py +0 -194
  1397. package/dist/templates/pactile/scripts/compile_session_pack.py +0 -15
  1398. package/dist/templates/pactile/scripts/cursor_retrieval_probe.py +0 -64
  1399. package/dist/templates/pactile/scripts/cursor_retrieval_probe_prompt.md +0 -33
  1400. package/dist/templates/pactile/scripts/generate_dispatch_prompt.py +0 -182
  1401. package/dist/templates/pactile/scripts/get_context.py +0 -19
  1402. package/dist/templates/pactile/scripts/get_developer.py +0 -26
  1403. package/dist/templates/pactile/scripts/hooks/linear_sync.py +0 -243
  1404. package/dist/templates/pactile/scripts/init_developer.py +0 -51
  1405. package/dist/templates/pactile/scripts/injection_budget_probe.py +0 -69
  1406. package/dist/templates/pactile/scripts/pool.py +0 -237
  1407. package/dist/templates/pactile/scripts/rank_retrieval_candidates.py +0 -98
  1408. package/dist/templates/pactile/scripts/route_codebase_retrieval.py +0 -72
  1409. package/dist/templates/pactile/scripts/run_smart_search.py +0 -12
  1410. package/dist/templates/pactile/scripts/score_evidence.py +0 -131
  1411. package/dist/templates/pactile/scripts/search_artifacts.py +0 -13
  1412. package/dist/templates/pactile/scripts/search_memory.py +0 -12
  1413. package/dist/templates/pactile/scripts/spec_health_outcomes.py +0 -160
  1414. package/dist/templates/pactile/scripts/task.py +0 -1118
  1415. package/dist/templates/pactile/scripts/verify_evidence_probe.py +0 -138
  1416. package/dist/templates/shared-hooks/event-bridge.py +0 -121
  1417. package/dist/templates/shared-hooks/index.d.ts +0 -50
  1418. package/dist/templates/shared-hooks/index.d.ts.map +0 -1
  1419. package/dist/templates/shared-hooks/index.js +0 -96
  1420. package/dist/templates/shared-hooks/index.js.map +0 -1
  1421. package/dist/templates/shared-hooks/inject-retrieval-plan.py +0 -217
  1422. package/dist/templates/shared-hooks/inject-shell-session-context.py +0 -183
  1423. package/dist/templates/shared-hooks/inject-subagent-context.py +0 -267
  1424. package/dist/templates/shared-hooks/inject-workflow-state.py +0 -106
  1425. package/dist/templates/shared-hooks/rename-session-for-task.py +0 -231
  1426. package/dist/templates/shared-hooks/research-end-retrieval-pack.py +0 -345
  1427. package/dist/templates/shared-hooks/session-start.py +0 -355
  1428. package/dist/templates/shared-hooks/spec-write-audit.py +0 -173
  1429. package/dist/utils/cursor-retrieval-env.d.ts +0 -17
  1430. package/dist/utils/cursor-retrieval-env.d.ts.map +0 -1
  1431. package/dist/utils/cursor-retrieval-env.js +0 -19
  1432. package/dist/utils/cursor-retrieval-env.js.map +0 -1
  1433. package/dist/utils/mirror-check.d.ts +0 -22
  1434. package/dist/utils/mirror-check.d.ts.map +0 -1
  1435. package/dist/utils/mirror-check.js +0 -90
  1436. package/dist/utils/mirror-check.js.map +0 -1
  1437. package/dist/utils/proxy.d.ts +0 -25
  1438. package/dist/utils/proxy.d.ts.map +0 -1
  1439. package/dist/utils/proxy.js +0 -60
  1440. package/dist/utils/proxy.js.map +0 -1
  1441. package/dist/utils/validate-rules.d.ts +0 -21
  1442. package/dist/utils/validate-rules.d.ts.map +0 -1
  1443. package/dist/utils/validate-rules.js +0 -88
  1444. package/dist/utils/validate-rules.js.map +0 -1
  1445. package/scripts/postinstall.js +0 -6
@@ -8,159 +8,22 @@ import figlet from "figlet";
8
8
  import inquirer from "inquirer";
9
9
  import { createWorkflowStructure } from "../configurators/workflow.js";
10
10
  import { getInitToolChoices } from "../configurators/index.js";
11
- import { getPythonCommandForPlatform, setResolvedPythonCommand, } from "../configurators/shared.js";
12
11
  import { DIR_NAMES, FILE_NAMES, PATHS } from "../constants/paths.js";
13
12
  import { VERSION } from "../constants/version.js";
14
13
  import { setWriteMode, startRecordingWrites, stopRecordingWrites, } from "../utils/file-writer.js";
15
- import { applyKernelCreate, applyKernelStart, writeWaveCConfirmed, } from "@blxzer/pactile-core/task";
16
- import { PACTILE_ENVIRONMENT_KEYS, readPactileEnvironment, } from "@blxzer/pactile-core";
17
- import { emptyTaskJson } from "../utils/task-json.js";
14
+ import { writeWaveCConfirmed, createTaskKernel, readTaskKernel, } from "../core/task/index.js";
15
+ import { canonicalProjectRoot } from "../core/task/task-kernel-paths.js";
16
+ import { initializeDeveloper, readDeveloper } from "../utils/developer.js";
18
17
  import { detectProjectType, detectMonorepo, sanitizePkgName, } from "../utils/project-detector.js";
19
18
  import { initializeHashes, removeHash } from "../utils/template-hash.js";
20
19
  import { NATIVE_WORKFLOW_ID, resolveWorkflowTemplate, } from "../utils/workflow-resolver.js";
21
20
  import { isCwdHomedir, homedirGuardMessage, homedirBypassEnabled, } from "../utils/cwd-guard.js";
22
21
  import { fetchTemplateIndex, probeRegistryIndex, downloadTemplateById, downloadRegistryDirect, parseRegistrySource, TIMEOUTS, TEMPLATE_INDEX_URL, } from "../utils/template-fetcher.js";
23
- import { setupProxy, maskProxyUrl } from "../utils/proxy.js";
24
22
  import { reportInitReadiness, snapshotReadinessForRollout, } from "../utils/readiness.js";
25
23
  import { getProjectCapability, getProjectCapabilityChoices, loadProjectCapabilities, parseProjectCapabilities, writeProjectCapabilityFiles, } from "../utils/project-capabilities.js";
26
24
  import { collectCanonicalGenerationFiles, collectLegacyCstlLifecycleFiles, discoverCanonicalGenerationPaths, installedPactilePlatforms, materializeCanonicalGeneration, materializePreparedLegacyUserState, prepareLegacyCstlImport, readLegacyCstlVersion, runLifecycleCommand, seedCanonicalBuildRoot, } from "../pactile/lifecycle/index.js";
27
25
  import { InstallStateStore } from "../pactile/runtime/stores.js";
28
26
  import { inspectLegacyInitContext, legacyImportPreparedMessage, } from "../pactile/compat/init-context.js";
29
- const MIN_PYTHON_MAJOR = 3;
30
- const MIN_PYTHON_MINOR = 9;
31
- const PYTHON_VERSION_RE = /Python (\d+)\.(\d+)/;
32
- export function isSupportedPythonVersion(versionOutput) {
33
- const match = versionOutput.match(PYTHON_VERSION_RE);
34
- if (!match)
35
- return false;
36
- const major = Number(match[1]);
37
- const minor = Number(match[2]);
38
- return (major > MIN_PYTHON_MAJOR ||
39
- (major === MIN_PYTHON_MAJOR && minor >= MIN_PYTHON_MINOR));
40
- }
41
- function detectPythonVersion(command) {
42
- try {
43
- return execSync(`${command} --version`, {
44
- encoding: "utf-8",
45
- stdio: "pipe",
46
- }).trim();
47
- }
48
- catch (err) {
49
- const code = err?.code;
50
- if (code === "EPERM" || code === "EACCES") {
51
- return "sandbox-restricted";
52
- }
53
- return null;
54
- }
55
- }
56
- export function requireSupportedPython(command) {
57
- // Final escape hatch — set when the user knows python3 is on PATH but
58
- // the probe keeps failing for environment-specific reasons.
59
- if (readPactileEnvironment(PACTILE_ENVIRONMENT_KEYS.skipPythonCheck) === "1") {
60
- return `version check skipped (PACTILE_SKIP_PYTHON_CHECK=1)`;
61
- }
62
- const versionOutput = detectPythonVersion(command);
63
- if (versionOutput === "sandbox-restricted") {
64
- console.warn(chalk.yellow(`⚠ Python version check skipped — sandboxed environment blocked ` +
65
- `child_process spawn (EPERM/EACCES). Assuming "${command}" is on ` +
66
- `PATH. If init fails later, re-run on the host or set ` +
67
- `PACTILE_SKIP_PYTHON_CHECK=1.`));
68
- return `version unknown (sandbox-restricted)`;
69
- }
70
- if (!versionOutput) {
71
- throw new Error(`Python command "${command}" not found. Pactile init requires Python ≥ 3.9.`);
72
- }
73
- if (!isSupportedPythonVersion(versionOutput)) {
74
- throw new Error(`${versionOutput} detected via "${command}", but Pactile init requires Python ≥ 3.9.`);
75
- }
76
- return versionOutput;
77
- }
78
- /**
79
- * Candidate Python command list per platform.
80
- *
81
- * Windows: `python` is the usual python.org installer choice, but Microsoft
82
- * Store ships `python3`, and the `py` launcher is `py -3`. We try all three
83
- * before giving up — fixes #236 where users with only `python3` (not
84
- * `python`) had `pactile init` fail outright.
85
- *
86
- * Non-Windows: `python3` is canonical; `python` is a fallback for systems
87
- * where Python 3 is the only Python and is named `python` (some Arch
88
- * configs, conda envs).
89
- */
90
- const PYTHON_CANDIDATES = {
91
- win32: ["python", "python3", "py -3"],
92
- other: ["python3", "python"],
93
- };
94
- /**
95
- * Detect a working Python ≥ 3.9 command on the host platform.
96
- *
97
- * Honors `PACTILE_PYTHON_CMD` (explicit override, no probe) and
98
- * `PACTILE_SKIP_PYTHON_CHECK=1` (skip probe, trust platform default).
99
- *
100
- * Otherwise tries each candidate in `PYTHON_CANDIDATES` in order and returns
101
- * the first whose `--version` matches `Python ≥ 3.9`. Caches the result via
102
- * `setResolvedPythonCommand` so all downstream template / configurator
103
- * writes pick up the resolved value.
104
- *
105
- * Throws a helpful, Windows-aware error if no candidate works.
106
- */
107
- export function resolveSupportedPython() {
108
- // Explicit override — user knows their environment.
109
- const override = readPactileEnvironment(PACTILE_ENVIRONMENT_KEYS.pythonCommand)?.trim();
110
- if (override) {
111
- setResolvedPythonCommand(override);
112
- return { command: override, version: "set via PACTILE_PYTHON_CMD" };
113
- }
114
- // Skip probe entirely.
115
- if (readPactileEnvironment(PACTILE_ENVIRONMENT_KEYS.skipPythonCheck) === "1") {
116
- const fallback = getPythonCommandForPlatform();
117
- setResolvedPythonCommand(fallback);
118
- return {
119
- command: fallback,
120
- version: "version check skipped (PACTILE_SKIP_PYTHON_CHECK=1)",
121
- };
122
- }
123
- const candidates = process.platform === "win32"
124
- ? PYTHON_CANDIDATES.win32
125
- : PYTHON_CANDIDATES.other;
126
- const probeFailures = [];
127
- for (const candidate of candidates) {
128
- const probe = detectPythonVersion(candidate);
129
- if (probe === "sandbox-restricted") {
130
- console.warn(chalk.yellow(`⚠ Python version check skipped — sandboxed environment blocked ` +
131
- `child_process spawn (EPERM/EACCES). Assuming "${candidate}" is ` +
132
- `on PATH. If init fails later, re-run on the host or set ` +
133
- `PACTILE_SKIP_PYTHON_CHECK=1.`));
134
- setResolvedPythonCommand(candidate);
135
- return {
136
- command: candidate,
137
- version: "version unknown (sandbox-restricted)",
138
- };
139
- }
140
- if (!probe) {
141
- probeFailures.push(`${candidate}: not found`);
142
- continue;
143
- }
144
- if (!isSupportedPythonVersion(probe)) {
145
- probeFailures.push(`${candidate}: ${probe} (< 3.9)`);
146
- continue;
147
- }
148
- setResolvedPythonCommand(candidate);
149
- return { command: candidate, version: probe };
150
- }
151
- const isWindows = process.platform === "win32";
152
- const installHint = isWindows
153
- ? `Install Python ≥ 3.9 from https://www.python.org/downloads/windows/ — make sure ` +
154
- `"Add Python to PATH" is checked in the installer. Or, if Python is ` +
155
- `installed under a different name, set PACTILE_PYTHON_CMD=<your-cmd> ` +
156
- `before re-running init (e.g. \`set PACTILE_PYTHON_CMD=py -3\`).`
157
- : `Install Python ≥ 3.9 from https://www.python.org/downloads/ or via your ` +
158
- `package manager. Or set PACTILE_PYTHON_CMD=<your-cmd> before re-running.`;
159
- throw new Error(`No supported Python command found. Tried: ${candidates.join(", ")}.\n` +
160
- `Probe results:\n ${probeFailures.join("\n ")}\n\n` +
161
- `Pactile init requires Python ≥ 3.9. ${installHint}\n` +
162
- `Last-resort escape hatch: set PACTILE_SKIP_PYTHON_CHECK=1 to skip the probe entirely.`);
163
- }
164
27
  // =============================================================================
165
28
  // Bootstrap Task Creation
166
29
  // =============================================================================
@@ -183,48 +46,368 @@ export function slugifyDeveloperName(name) {
183
46
  return slug || "user";
184
47
  }
185
48
  /**
186
- * Write a task skeleton (task.json + prd.md).
187
- *
188
- * Idempotent: if the task dir already exists, returns true without touching
189
- * anything. Shared by both creator bootstrap and joiner onboarding flows.
49
+ * Task Kernel IDs are lowercase ASCII slugs, while legacy task directory names
50
+ * intentionally preserve Unicode developer names. Encode non-ASCII code points
51
+ * so both identities remain deterministic without changing an existing path.
190
52
  */
191
- function writeTaskSkeleton(cwd, taskName, taskJson, prdContent) {
192
- const taskDir = path.join(cwd, PATHS.TASKS, taskName);
193
- if (fs.existsSync(taskDir))
194
- return true; // idempotent
53
+ function taskKernelIdForDirectoryName(taskName) {
54
+ let encoded = "";
55
+ for (const character of taskName.toLowerCase()) {
56
+ if (/[a-z0-9]/u.test(character) || character === "-") {
57
+ encoded += character;
58
+ }
59
+ else {
60
+ encoded += `-u${character.codePointAt(0)?.toString(16) ?? "0"}-`;
61
+ }
62
+ }
63
+ return encoded.replace(/-+/gu, "-").replace(/^-|-$/gu, "") || "task";
64
+ }
65
+ const INIT_TASK_MARKER_TEXT = "Task creation was interrupted; retry pactile init.\n";
66
+ const INIT_JOINER_MARKER_PREFIX = `${INIT_TASK_MARKER_TEXT}joiner:v1:`;
67
+ const MAX_INIT_JOINER_DEVELOPER_NAME_LENGTH = 256;
68
+ const MAX_INIT_TASK_MARKER_BYTES = 2048;
69
+ function containsInitJoinerControlCharacters(value) {
70
+ for (const character of value) {
71
+ const codePoint = character.codePointAt(0) ?? 0;
72
+ if (codePoint < 0x20 || codePoint === 0x7f)
73
+ return true;
74
+ }
75
+ return false;
76
+ }
77
+ function normalizeInitJoinerDeveloperName(value, taskName) {
78
+ if (typeof value !== "string" ||
79
+ value.length === 0 ||
80
+ value.length > MAX_INIT_JOINER_DEVELOPER_NAME_LENGTH ||
81
+ value.trim() !== value ||
82
+ value === "." ||
83
+ value === ".." ||
84
+ containsInitJoinerControlCharacters(value) ||
85
+ Buffer.byteLength(value, "utf8") > MAX_INIT_JOINER_DEVELOPER_NAME_LENGTH * 4 ||
86
+ taskName !== `00-join-${slugifyDeveloperName(value)}`) {
87
+ return null;
88
+ }
89
+ return value;
90
+ }
91
+ function initTaskMarkerContent(taskName, developerName) {
92
+ if (!developerName)
93
+ return INIT_TASK_MARKER_TEXT;
94
+ const normalizedName = normalizeInitJoinerDeveloperName(developerName.trim(), taskName);
95
+ if (!normalizedName)
96
+ return INIT_TASK_MARKER_TEXT;
97
+ return `${INIT_JOINER_MARKER_PREFIX}${JSON.stringify(normalizedName)}\n`;
98
+ }
99
+ function pathExists(pathname) {
100
+ return fs.lstatSync(pathname, { throwIfNoEntry: false }) !== undefined;
101
+ }
102
+ function assertSafeInitTaskPaths(cwd, extraDirectories = []) {
103
+ const projectRoot = canonicalProjectRoot(cwd, cwd);
104
+ const tasksRoot = path.resolve(projectRoot, PATHS.TASKS);
105
+ const tasksRelative = path.relative(projectRoot, tasksRoot);
106
+ if (!tasksRelative ||
107
+ tasksRelative === ".." ||
108
+ tasksRelative.startsWith(`..${path.sep}`) ||
109
+ path.isAbsolute(tasksRelative)) {
110
+ throw new Error("Init Task root must stay inside the canonical project root");
111
+ }
112
+ const pactileRoot = path.resolve(projectRoot, DIR_NAMES.WORKFLOW);
113
+ const checkedDirectories = [pactileRoot, tasksRoot, ...extraDirectories];
114
+ for (const directory of checkedDirectories) {
115
+ const relative = path.relative(tasksRoot, directory);
116
+ if (directory !== pactileRoot &&
117
+ directory !== tasksRoot &&
118
+ (!relative ||
119
+ relative === ".." ||
120
+ relative.startsWith(`..${path.sep}`) ||
121
+ path.isAbsolute(relative))) {
122
+ throw new Error("Init Task staging path must stay inside .pactile/tasks");
123
+ }
124
+ const entry = fs.lstatSync(directory, { throwIfNoEntry: false });
125
+ if (!entry)
126
+ continue;
127
+ if (entry.isSymbolicLink() ||
128
+ !entry.isDirectory() ||
129
+ fs.realpathSync(directory) !== directory) {
130
+ throw new Error("Init Task paths must be real directories inside the project");
131
+ }
132
+ }
133
+ return tasksRoot;
134
+ }
135
+ function readInitTaskMarker(cwd, taskName) {
136
+ try {
137
+ const tasksRoot = assertSafeInitTaskPaths(cwd);
138
+ const marker = path.join(tasksRoot, `.pending-${taskName}`);
139
+ const entry = fs.lstatSync(marker);
140
+ if (!entry.isFile() ||
141
+ entry.isSymbolicLink() ||
142
+ entry.size > MAX_INIT_TASK_MARKER_BYTES) {
143
+ return null;
144
+ }
145
+ const contents = fs.readFileSync(marker, "utf8");
146
+ if (contents === INIT_TASK_MARKER_TEXT)
147
+ return { developerName: null };
148
+ if (!contents.startsWith(INIT_JOINER_MARKER_PREFIX) ||
149
+ !contents.endsWith("\n")) {
150
+ return null;
151
+ }
152
+ const encodedName = contents.slice(INIT_JOINER_MARKER_PREFIX.length, -1);
153
+ let parsedName;
154
+ try {
155
+ parsedName = JSON.parse(encodedName);
156
+ }
157
+ catch {
158
+ return null;
159
+ }
160
+ const developerName = normalizeInitJoinerDeveloperName(parsedName, taskName);
161
+ return developerName ? { developerName } : null;
162
+ }
163
+ catch {
164
+ return null;
165
+ }
166
+ }
167
+ function hasInitTaskMarker(cwd, taskName) {
168
+ return readInitTaskMarker(cwd, taskName) !== null;
169
+ }
170
+ function readPendingJoinerMarkers(cwd) {
195
171
  try {
196
- fs.mkdirSync(taskDir, { recursive: true });
197
- const created = applyKernelCreate({
198
- taskDir,
199
- actor: "pactile init",
200
- idempotencyKey: `init:${taskName}`,
201
- record: { ...taskJson, status: "planning" },
202
- evidence: "pactile init skeleton",
172
+ const tasksRoot = assertSafeInitTaskPaths(cwd);
173
+ if (!pathExists(tasksRoot))
174
+ return [];
175
+ const taskNames = fs
176
+ .readdirSync(tasksRoot)
177
+ .filter((entry) => entry.startsWith(".pending-00-join-"))
178
+ .map((entry) => entry.slice(".pending-".length));
179
+ return taskNames.map((taskName) => {
180
+ const marker = readInitTaskMarker(cwd, taskName);
181
+ return {
182
+ taskName,
183
+ developerName: marker?.developerName ?? null,
184
+ valid: marker !== null,
185
+ };
203
186
  });
204
- if (taskJson.status === "in_progress") {
205
- applyKernelStart({
206
- taskDir,
207
- expectedRevision: created.kernel.revision,
208
- actor: "pactile init",
209
- idempotencyKey: `init-start:${taskName}`,
210
- record: { ...taskJson, status: "in_progress" },
211
- evidence: "pactile init skeleton start",
187
+ }
188
+ catch {
189
+ return [];
190
+ }
191
+ }
192
+ function readPendingJoinerDeveloperName(cwd) {
193
+ const markers = readPendingJoinerMarkers(cwd);
194
+ if (markers.length !== 1)
195
+ return null;
196
+ return markers[0].developerName;
197
+ }
198
+ function clearInitTaskMarker(cwd, taskName) {
199
+ if (hasInitTaskMarker(cwd, taskName)) {
200
+ try {
201
+ const tasksRoot = assertSafeInitTaskPaths(cwd);
202
+ fs.unlinkSync(path.join(tasksRoot, `.pending-${taskName}`));
203
+ }
204
+ catch {
205
+ // A missing, unreadable, or user-owned marker is left untouched.
206
+ }
207
+ }
208
+ }
209
+ function ensureInitTaskMarker(cwd, taskName, developerName) {
210
+ try {
211
+ let tasksRoot = assertSafeInitTaskPaths(cwd);
212
+ fs.mkdirSync(tasksRoot, { recursive: true });
213
+ tasksRoot = assertSafeInitTaskPaths(cwd);
214
+ const marker = path.join(tasksRoot, `.pending-${taskName}`);
215
+ const markerContent = initTaskMarkerContent(taskName, developerName);
216
+ try {
217
+ fs.writeFileSync(marker, markerContent, {
218
+ encoding: "utf8",
219
+ flag: "wx",
212
220
  });
221
+ return true;
213
222
  }
214
- fs.writeFileSync(path.join(taskDir, FILE_NAMES.PRD), prdContent, "utf-8");
215
- return true;
223
+ catch (error) {
224
+ if (error.code !== "EEXIST")
225
+ return false;
226
+ const existing = readInitTaskMarker(cwd, taskName);
227
+ if (!existing)
228
+ return false;
229
+ if (!developerName)
230
+ return true;
231
+ const normalizedName = normalizeInitJoinerDeveloperName(developerName.trim(), taskName);
232
+ if (!normalizedName)
233
+ return existing.developerName === null;
234
+ if (existing.developerName === normalizedName)
235
+ return true;
236
+ if (existing.developerName !== null)
237
+ return false;
238
+ // Upgrade only the exact legacy sentinel owned by init. A malformed or
239
+ // user-edited marker never reaches this branch because the reader rejects it.
240
+ fs.writeFileSync(marker, markerContent, {
241
+ encoding: "utf8",
242
+ flag: "w",
243
+ });
244
+ return readInitTaskMarker(cwd, taskName)?.developerName === normalizedName;
245
+ }
246
+ }
247
+ catch {
248
+ // A conflicting, unreadable, or unwritable marker path is never replaced.
249
+ return false;
250
+ }
251
+ }
252
+ function recordInitTaskFailure(cwd, taskName) {
253
+ ensureInitTaskMarker(cwd, taskName);
254
+ }
255
+ function isCompleteExistingInitTask(cwd, taskName, taskId) {
256
+ const taskDir = path.join(cwd, PATHS.TASKS, taskName);
257
+ try {
258
+ const entry = fs.lstatSync(taskDir);
259
+ if (!entry.isDirectory() || entry.isSymbolicLink())
260
+ return false;
261
+ const prd = fs.readFileSync(path.join(taskDir, FILE_NAMES.PRD), "utf8");
262
+ if (!prd.trim())
263
+ return false;
264
+ const read = readTaskKernel({ root: cwd, taskDir, cwd });
265
+ if (read.kind === "task-kernel-v2") {
266
+ return (read.kernel.identity.taskId === taskId &&
267
+ read.kernel.definition.taskId === taskId);
268
+ }
269
+ // Keep complete historical V1 tasks in place for the explicit migration
270
+ // flow. A task.json without a persisted, matching Kernel is not complete.
271
+ const taskJson = JSON.parse(fs.readFileSync(path.join(taskDir, FILE_NAMES.TASK_JSON), "utf8"));
272
+ const legacyKernel = read.kernel.kernel;
273
+ const projection = legacyKernel.projection;
274
+ return (read.kernel.persisted &&
275
+ legacyKernel.identity.taskId === taskName &&
276
+ projection !== null &&
277
+ taskJson.id === taskName &&
278
+ taskJson.status === projection.status &&
279
+ projection.record.id === taskName &&
280
+ projection.record.status === projection.status);
216
281
  }
217
282
  catch {
218
283
  return false;
219
284
  }
220
285
  }
286
+ function removeInitTaskStaging(stagingRoot, stagingDir) {
287
+ const relative = path.relative(stagingRoot, path.resolve(stagingDir));
288
+ if (!relative ||
289
+ relative === ".." ||
290
+ relative.startsWith(`..${path.sep}`) ||
291
+ path.isAbsolute(relative) ||
292
+ fs.lstatSync(stagingDir).isSymbolicLink()) {
293
+ throw new Error("Unsafe init Task staging cleanup target");
294
+ }
295
+ fs.rmSync(stagingDir, { recursive: true, force: true });
296
+ }
221
297
  /**
222
- * Compute the bootstrap checklist items (previously stored as structured
223
- * `subtasks: [{name, status}]` in task.json). Per task 04-21-task-schema-unify
224
- * (D1), these live as markdown `- [ ]` items in prd.md instead, so task.json
225
- * stays canonical with `subtasks: string[]` (child task dir names, same as
226
- * task_store.py).
298
+ * Publish a complete V2 Define Task (kernel.json + prd.md).
299
+ *
300
+ * A complete existing task is kept. A partial one is reported for recovery,
301
+ * never silently treated as a successful init. Historical V1 records are
302
+ * preserved for the explicit migration flow and are never rewritten here.
227
303
  */
304
+ function writeTaskSkeleton(cwd, taskName, definition, actor, prdContent) {
305
+ let tasksRoot = null;
306
+ let stagingRoot = null;
307
+ let stagingDir = null;
308
+ let createdStagingRoot = false;
309
+ let committed = false;
310
+ try {
311
+ tasksRoot = assertSafeInitTaskPaths(cwd);
312
+ stagingRoot = path.join(tasksRoot, ".creating");
313
+ if (pathExists(path.join(tasksRoot, taskName))) {
314
+ if (!isCompleteExistingInitTask(cwd, taskName, definition.taskId)) {
315
+ throw new Error(`Task already exists or needs recovery: ${taskName}`);
316
+ }
317
+ clearInitTaskMarker(cwd, taskName);
318
+ return true;
319
+ }
320
+ fs.mkdirSync(tasksRoot, { recursive: true });
321
+ assertSafeInitTaskPaths(cwd);
322
+ try {
323
+ fs.mkdirSync(stagingRoot);
324
+ createdStagingRoot = true;
325
+ }
326
+ catch (error) {
327
+ if (error.code !== "EEXIST")
328
+ throw error;
329
+ const existingStagingRoot = fs.lstatSync(stagingRoot);
330
+ if (!existingStagingRoot.isDirectory() ||
331
+ existingStagingRoot.isSymbolicLink()) {
332
+ throw new Error("Init Task staging path must be a directory");
333
+ }
334
+ }
335
+ assertSafeInitTaskPaths(cwd, [stagingRoot]);
336
+ stagingDir = fs.mkdtempSync(path.join(stagingRoot, `${taskName}-`));
337
+ assertSafeInitTaskPaths(cwd, [stagingRoot, stagingDir]);
338
+ fs.writeFileSync(path.join(stagingDir, FILE_NAMES.PRD), prdContent, {
339
+ encoding: "utf8",
340
+ flag: "wx",
341
+ });
342
+ const created = createTaskKernel({
343
+ root: cwd,
344
+ taskDir: stagingDir,
345
+ definition,
346
+ actor,
347
+ idempotencyKey: `init-v2:${definition.taskId}`,
348
+ cwd,
349
+ });
350
+ if (created.kernel.phase !== "define" ||
351
+ created.kernel.runs.length !== 0 ||
352
+ created.kernel.reviews.length !== 0 ||
353
+ created.kernel.closure !== null) {
354
+ throw new Error("Init Task did not produce the expected V2 Define state");
355
+ }
356
+ const verified = readTaskKernel({ root: cwd, taskDir: stagingDir, cwd });
357
+ if (verified.kind !== "task-kernel-v2" ||
358
+ verified.kernel.identity.taskId !== definition.taskId ||
359
+ verified.kernel.definition.deliveryLevel !== definition.deliveryLevel ||
360
+ verified.kernel.definition.dependencies.length !== 0 ||
361
+ verified.kernel.phase !== "define" ||
362
+ verified.kernel.runs.length !== 0 ||
363
+ verified.kernel.reviews.length !== 0 ||
364
+ verified.kernel.closure !== null) {
365
+ throw new Error("Init Task failed V2 Kernel read-back validation");
366
+ }
367
+ assertSafeInitTaskPaths(cwd, [stagingRoot, stagingDir]);
368
+ const taskDir = path.join(tasksRoot, taskName);
369
+ if (pathExists(taskDir))
370
+ throw new Error(`Task already exists: ${taskName}`);
371
+ fs.renameSync(stagingDir, taskDir);
372
+ stagingDir = null;
373
+ committed = true;
374
+ clearInitTaskMarker(cwd, taskName);
375
+ return true;
376
+ }
377
+ catch {
378
+ recordInitTaskFailure(cwd, taskName);
379
+ return false;
380
+ }
381
+ finally {
382
+ if (!committed &&
383
+ stagingRoot &&
384
+ stagingDir &&
385
+ pathExists(stagingDir)) {
386
+ try {
387
+ assertSafeInitTaskPaths(cwd, [stagingRoot, stagingDir]);
388
+ removeInitTaskStaging(stagingRoot, stagingDir);
389
+ }
390
+ catch {
391
+ // Leave unexpected staging state for inspection; the marker remains.
392
+ }
393
+ }
394
+ if (createdStagingRoot && stagingRoot && pathExists(stagingRoot)) {
395
+ try {
396
+ assertSafeInitTaskPaths(cwd, [stagingRoot]);
397
+ const currentStagingRoot = fs.lstatSync(stagingRoot);
398
+ if (currentStagingRoot.isDirectory() &&
399
+ !currentStagingRoot.isSymbolicLink() &&
400
+ fs.readdirSync(stagingRoot).length === 0) {
401
+ fs.rmdirSync(stagingRoot);
402
+ }
403
+ }
404
+ catch {
405
+ // Preserve unexpected or user-modified paths during cleanup.
406
+ }
407
+ }
408
+ }
409
+ }
410
+ /** Build the human-readable checklist mirrored by the bootstrap Task's AC. */
228
411
  function getBootstrapChecklistItems(projectType, packages) {
229
412
  if (packages && packages.length > 0) {
230
413
  const items = packages.map((pkg) => `Fill guidelines for ${pkg.name}`);
@@ -253,25 +436,25 @@ function renderCapabilityReadinessSection(selectedCapabilities) {
253
436
  return `- [ ] \`${capability.id}\` — ${capability.title}. Verify the generated MCP/config path is usable before claiming it in task evidence.`;
254
437
  })
255
438
  .join("\n");
256
- return `
257
- ## Capability readiness (required before archive)
258
-
259
- Init selected optional project capabilities for this repo. Treat them as
260
- \`pending\` until you verify they work in this checkout.
261
-
262
- ${checklist}
263
-
264
- - Read \`.pactile/capabilities.json\` / \`.pactile/capabilities.md\` and keep the
265
- readiness state honest: \`pending\`, \`ready\`, or \`failed\`.
266
- - For \`codebase-retrieval\`, verify \`.codegraph/\` exists (or initialize it)
267
- and confirm the MCP path is usable. After the first index, CodeGraph's file
268
- watcher auto-syncs later edits; you do not need to re-run full indexing for
269
- every code change.
270
- - If a capability cannot be made ready, record the failure and fallback path in
271
- \`verify.md\` before archiving bootstrap.
272
- - Validation entrypoint: \`pactile capability-smoke --write-status\`
273
-
274
- ---
439
+ return `
440
+ ## Capability readiness (record before Review and Close)
441
+
442
+ Init selected optional project capabilities for this repo. Treat them as
443
+ \`pending\` until you verify they work in this checkout.
444
+
445
+ ${checklist}
446
+
447
+ - Read \`.pactile/capabilities.json\` / \`.pactile/capabilities.md\` and keep the
448
+ readiness state honest: \`pending\`, \`ready\`, or \`failed\`.
449
+ - For \`codebase-retrieval\`, verify \`.codegraph/\` exists (or initialize it)
450
+ and confirm the MCP path is usable. After the first index, CodeGraph's file
451
+ watcher auto-syncs later edits; you do not need to re-run full indexing for
452
+ every code change.
453
+ - If a capability cannot be made ready, record the failure and fallback path in
454
+ this Task's evidence before independent Review and Close.
455
+ - Validation entrypoint: \`pactile capability-smoke --write-status\`
456
+
457
+ ---
275
458
  `;
276
459
  }
277
460
  function getBootstrapRelatedFiles(projectType, packages) {
@@ -286,145 +469,114 @@ function getBootstrapRelatedFiles(projectType, packages) {
286
469
  }
287
470
  return [".pactile/spec/backend/", ".pactile/spec/frontend/"];
288
471
  }
289
- function getBootstrapPrdContent(projectType, pythonCmd, selectedCapabilities, packages) {
472
+ function getBootstrapPrdContent(projectType, selectedCapabilities, packages) {
290
473
  const checklistItems = getBootstrapChecklistItems(projectType, packages);
291
474
  const checklistMarkdown = checklistItems
292
475
  .map((item) => `- [ ] ${item}`)
293
476
  .join("\n");
294
- const header = `# Bootstrap Task: Fill Project Development Guidelines
295
-
296
- **You (the AI) are running this task. The developer does not read this file.**
297
-
298
- The developer just ran \`pactile init\` on this project for the first time.
299
- \`.pactile/\` now exists with empty spec scaffolding, and this bootstrap task
300
- exists under \`.pactile/tasks/\`. When they want to work on it, they should start
301
- this task from a session that provides Pactile session identity.
302
-
303
- **Your job**: help them populate \`.pactile/spec/\` with the team's real
304
- coding conventions. Every future AI session — this project's
305
- \`pactile-implement\` and \`pactile-check\` sub-agents — auto-loads spec files
306
- listed in per-task jsonl manifests. Empty spec = sub-agents write generic
307
- code. Real spec = sub-agents match the team's actual patterns.
308
-
309
- Don't dump instructions. Open with a short greeting, figure out if the repo
310
- has any existing convention docs (AGENTS.md, .cursorrules, CONTRIBUTING.md, etc.), and drive
311
- the rest conversationally.
312
-
313
- ---
314
-
315
- ## Status (update the checkboxes as you complete each item)
316
-
317
- ${checklistMarkdown}
318
-
319
- ---
320
-
321
- ${renderCapabilityReadinessSection(selectedCapabilities)}
322
-
323
- ## Spec files to populate
477
+ const acceptanceMarkdown = getBootstrapTaskDefinition(projectType, selectedCapabilities, packages)
478
+ .acceptanceCriteria.map((criterion) => `- [ ] ${criterion.id}: ${criterion.description}`)
479
+ .join("\n");
480
+ const header = `# Bootstrap Task: Fill Project Development Guidelines
481
+
482
+ **Task state: V2 Define. No Run exists, and init does not authorize execution.**
483
+
484
+ pactile init created this V2 Task as a proposal to document the project's actual conventions. Its kernel.json records Task state; this prd.md is the human-readable plan. Before starting any Run or making project changes, obtain the user's ordinary, explicit approval for that work.\n\n**Deliverable**: useful, evidence-based project guidance in .pactile/spec/. Read the current workflow and the project itself. Do not assume that a named sub-agent, host hook, or automatic prompt injection is installed or active; verify actual host behavior before making such a claim. Contributors can consult relevant spec files directly when working on this project.
485
+
486
+ Don't dump instructions. Open with a short greeting, figure out if the repo
487
+ has any existing convention docs (AGENTS.md, CONTRIBUTING.md, etc.), and drive
488
+ the rest conversationally.
489
+
490
+ ---
491
+
492
+ ## Status (update the checkboxes as you complete each item)
493
+
494
+ ${checklistMarkdown}
495
+
496
+ ## Acceptance criteria
497
+
498
+ ${acceptanceMarkdown}
499
+
500
+ ---
501
+
502
+ ${renderCapabilityReadinessSection(selectedCapabilities)}
503
+
504
+ ## Spec files to populate
324
505
  `;
325
- const backendSection = `
326
-
327
- ### Backend guidelines
328
-
329
- | File | What to document |
330
- |------|------------------|
331
- | \`.pactile/spec/backend/directory-structure.md\` | Where different file types go (routes, services, utils) |
332
- | \`.pactile/spec/backend/database-guidelines.md\` | ORM, migrations, query patterns, naming conventions |
333
- | \`.pactile/spec/backend/error-handling.md\` | How errors are caught, logged, and returned |
334
- | \`.pactile/spec/backend/logging-guidelines.md\` | Log levels, format, what to log |
335
- | \`.pactile/spec/backend/quality-guidelines.md\` | Code review standards, testing requirements |
506
+ const backendSection = `
507
+
508
+ ### Backend guidelines
509
+
510
+ | File | What to document |
511
+ |------|------------------|
512
+ | \`.pactile/spec/backend/directory-structure.md\` | Where different file types go (routes, services, utils) |
513
+ | \`.pactile/spec/backend/database-guidelines.md\` | ORM, migrations, query patterns, naming conventions |
514
+ | \`.pactile/spec/backend/error-handling.md\` | How errors are caught, logged, and returned |
515
+ | \`.pactile/spec/backend/logging-guidelines.md\` | Log levels, format, what to log |
516
+ | \`.pactile/spec/backend/quality-guidelines.md\` | Code review standards, testing requirements |
336
517
  `;
337
- const frontendSection = `
338
-
339
- ### Frontend guidelines
340
-
341
- | File | What to document |
342
- |------|------------------|
343
- | \`.pactile/spec/frontend/directory-structure.md\` | Component/page/hook organization |
344
- | \`.pactile/spec/frontend/component-guidelines.md\` | Component patterns, props conventions |
345
- | \`.pactile/spec/frontend/hook-guidelines.md\` | Custom hook naming, patterns |
346
- | \`.pactile/spec/frontend/state-management.md\` | State library, patterns, what goes where |
347
- | \`.pactile/spec/frontend/type-safety.md\` | TypeScript conventions, type organization |
348
- | \`.pactile/spec/frontend/quality-guidelines.md\` | Linting, testing, accessibility |
518
+ const frontendSection = `
519
+
520
+ ### Frontend guidelines
521
+
522
+ | File | What to document |
523
+ |------|------------------|
524
+ | \`.pactile/spec/frontend/directory-structure.md\` | Component/page/hook organization |
525
+ | \`.pactile/spec/frontend/component-guidelines.md\` | Component patterns, props conventions |
526
+ | \`.pactile/spec/frontend/hook-guidelines.md\` | Custom hook naming, patterns |
527
+ | \`.pactile/spec/frontend/state-management.md\` | State library, patterns, what goes where |
528
+ | \`.pactile/spec/frontend/type-safety.md\` | TypeScript conventions, type organization |
529
+ | \`.pactile/spec/frontend/quality-guidelines.md\` | Linting, testing, accessibility |
349
530
  `;
350
- const footer = `
351
-
352
- ### Thinking guides (already populated)
353
-
354
- \`.pactile/spec/guides/\` contains general thinking guides pre-filled with
355
- best practices. Customize only if something clearly doesn't fit this project.
356
-
357
- ---
358
-
359
- ## How to fill the spec
360
-
361
- ### Step 1: Import from existing convention files first (preferred)
362
-
363
- Search the repo for existing convention docs. If any exist, read them and
364
- extract the relevant rules into the matching \`.pactile/spec/\` files —
365
- usually much faster than documenting from scratch.
366
-
367
- | File / Directory | Notes |
368
- |------|------|
369
- | \`AGENTS.md\` | Agent entry / managed instructions |
370
- | \`.cursorrules\` | Legacy Cursor rules file |
371
- | \`.cursor/rules/*.mdc\` | Cursor rules directory |
372
- | \`CONTRIBUTING.md\` | General project conventions |
373
- | \`.editorconfig\` | Editor formatting rules |
374
-
375
- ### Step 2: Analyze the codebase for anything not covered by existing docs
376
-
377
- Scan real code to discover patterns. Before writing each spec file:
378
- - Find 2-3 real examples of each pattern in the codebase.
379
- - Reference real file paths (not hypothetical ones).
380
- - Document anti-patterns the team clearly avoids.
381
-
382
- ### Step 3: Document reality, not ideals
383
-
384
- **Critical**: write what the code *actually does*, not what it should do.
385
- Sub-agents match the spec, so aspirational patterns that don't exist in the
386
- codebase will cause sub-agents to write code that looks out of place.
387
-
388
- If the team has known tech debt, document the current state — improvement
389
- is a separate conversation, not a bootstrap concern.
390
-
391
- ---
392
-
393
- ## Quick explainer of the runtime (share when they ask "why do we need spec at all")
394
-
395
- - Every AI coding task spawns two sub-agents: \`pactile-implement\` (writes
396
- code) and \`pactile-check\` (verifies quality).
397
- - Each task has \`implement.jsonl\` / \`check.jsonl\` manifests listing which
398
- spec files to load.
399
- - The platform hook auto-injects those spec files + the task's \`prd.md\`
400
- into every sub-agent prompt, so the sub-agent codes/reviews per team
401
- conventions without anyone pasting them manually.
402
- - Source of truth: \`.pactile/spec/\`. That's why filling it well now pays
403
- off forever.
404
-
405
- ---
406
-
407
- ## Completion
408
-
409
- When the developer confirms the checklist items above are done with real
410
- examples (not placeholders), guide them to run:
411
-
412
- \`\`\`bash
413
- ${pythonCmd} ./.pactile/scripts/task.py archive 00-bootstrap-guidelines
414
- \`\`\`
415
-
416
- After archive, every new developer who joins this project will get a
417
- \`00-join-<slug>\` onboarding task instead of this bootstrap task.
418
-
419
- ---
420
-
421
- ## Suggested opening line
422
-
423
- "Welcome to Pactile! Your init just set me up to help you fill the project
424
- spec — a one-time setup so every future AI session follows the team's
425
- conventions instead of writing generic code. Before we start, do you have
426
- any existing convention docs (AGENTS.md, .cursorrules, CONTRIBUTING.md,
427
- etc.) I can pull from, or should I scan the codebase from scratch?"
531
+ const footer = `
532
+
533
+ ### Thinking guides (already populated)
534
+
535
+ \`.pactile/spec/guides/\` contains general thinking guides pre-filled with
536
+ best practices. Customize only if something clearly doesn't fit this project.
537
+
538
+ ---
539
+
540
+ ## How to fill the spec
541
+
542
+ ### Step 1: Import from existing convention files first (preferred)
543
+
544
+ Search the repo for existing convention docs. If any exist, read them and
545
+ extract the relevant rules into the matching \`.pactile/spec/\` files —
546
+ usually much faster than documenting from scratch.
547
+
548
+ | File / Directory | Notes |
549
+ |------|------|
550
+ | \`AGENTS.md\` | Agent entry / managed instructions |
551
+ | \`CONTRIBUTING.md\` | General project conventions |
552
+ | \`.editorconfig\` | Editor formatting rules |
553
+
554
+ ### Step 2: Analyze the codebase for anything not covered by existing docs
555
+
556
+ Scan real code to discover patterns. Before writing each spec file:
557
+ - Find 2-3 real examples of each pattern in the codebase.
558
+ - Reference real file paths (not hypothetical ones).
559
+ - Document anti-patterns the team clearly avoids.
560
+
561
+ ### Step 3: Document reality, not ideals
562
+
563
+ **Critical**: write what the code *actually does*, not what it should do.
564
+ Separate verified patterns from open questions so the documentation does not
565
+ present aspirational conventions as current behavior.
566
+
567
+ If the team has known tech debt, document the current state — improvement
568
+ is a separate conversation, not a bootstrap concern.
569
+
570
+ ---
571
+
572
+ ## How this fits the Task workflow\n\n- A V2 Task Kernel records the definition, hard dependencies, Runs, candidate snapshots, independent Reviews, and Close evidence. .pactile/workflow.md is a human overview; the Kernel is lifecycle authority.\n- This generated Task has no Run. A Run may begin only after the user approves the specific work through the ordinary approval flow.\n- A completed Run produces a candidate that must receive an independent Review bound to that exact candidate. Close uses the latest passing Review and evidence for every acceptance criterion, with documentation delivery evidence for this Task.\n- Scheduler suggestions do not grant approval or bypass Kernel gates. Use the current V2 Task commands and pactile task --help for their arguments.\n\n---\n
573
+ ## Completion\n\nWhen the checklist items are complete, record evidence for every acceptance criterion, including references to the documented files and real examples. Ask the user before creating a Run. Then follow the V2 lifecycle: approved Run, candidate-bound independent Review, and Close with matching documentation delivery evidence. Init, a scheduler plan, or this PRD is not execution approval.
574
+
575
+ ---
576
+
577
+ ## Suggested opening line
578
+
579
+ "Welcome to Pactile! Init created a proposal to document this project's conventions. Do you have existing convention docs (AGENTS.md, CONTRIBUTING.md, or similar) I should compare with the code, or should I begin by inspecting the repository?"
428
580
  `;
429
581
  let content = header;
430
582
  if (packages && packages.length > 0) {
@@ -455,222 +607,193 @@ etc.) I can pull from, or should I scan the codebase from scratch?"
455
607
  content += footer;
456
608
  return content;
457
609
  }
458
- function getBootstrapTaskJson(developer, projectType, packages) {
459
- const today = new Date().toISOString().split("T")[0];
610
+ function getBootstrapTaskDefinition(projectType, selectedCapabilities, packages) {
460
611
  const relatedFiles = getBootstrapRelatedFiles(projectType, packages);
461
- // Canonical 24-field shape via emptyTaskJson factory.
462
- // Checklist items (previously stored as structured `subtasks`) are now
463
- // rendered as `- [ ]` items in prd.md; task.json.subtasks is always
464
- // string[] (child task dir names) per the canonical schema.
465
- return emptyTaskJson({
466
- id: BOOTSTRAP_TASK_NAME,
467
- name: BOOTSTRAP_TASK_NAME,
468
- title: "Bootstrap Guidelines",
469
- description: "Fill in project development guidelines for AI agents",
470
- status: "in_progress",
471
- dev_type: "docs",
472
- priority: "P1",
473
- creator: developer,
474
- assignee: developer,
475
- createdAt: today,
476
- relatedFiles,
477
- notes: `First-time setup task created by pactile init (${projectType} project)`,
478
- });
612
+ const checklistItems = getBootstrapChecklistItems(projectType, packages);
613
+ const acceptanceCriteria = [
614
+ {
615
+ id: "AC-1",
616
+ description: "Complete the project-specific checklist (" +
617
+ checklistItems.join("; ") +
618
+ ") and update the relevant spec files: " +
619
+ relatedFiles.join(", ") +
620
+ ".",
621
+ },
622
+ {
623
+ id: "AC-2",
624
+ description: "For each documented convention, cite at least two real repository examples or source documents; mark unsupported claims as open questions instead of presenting them as facts.",
625
+ },
626
+ ];
627
+ if (selectedCapabilities.length > 0) {
628
+ acceptanceCriteria.push({
629
+ id: "AC-3",
630
+ description: "Record each selected capability as ready, pending, or failed using observable verification evidence; do not report a capability as ready without that evidence.",
631
+ });
632
+ }
633
+ return {
634
+ taskId: BOOTSTRAP_TASK_NAME,
635
+ title: "Populate project development guidelines",
636
+ description: "Document verified project conventions in the Pactile specification files.",
637
+ deliverable: "Evidence-based project guidance in " +
638
+ relatedFiles.join(", ") +
639
+ " with acceptance evidence recorded for this Task.",
640
+ deliveryLevel: "documentation",
641
+ acceptanceCriteria,
642
+ dependencies: [],
643
+ };
479
644
  }
480
645
  /**
481
646
  * Create bootstrap task for first-time setup
482
647
  */
483
- function createBootstrapTask(cwd, developer, pythonCmd, projectType, selectedCapabilities, packages) {
484
- const taskJson = getBootstrapTaskJson(developer, projectType, packages);
485
- const prdContent = getBootstrapPrdContent(projectType, pythonCmd, selectedCapabilities, packages);
486
- return writeTaskSkeleton(cwd, BOOTSTRAP_TASK_NAME, taskJson, prdContent);
648
+ function createBootstrapTask(cwd, developer, projectType, selectedCapabilities, packages) {
649
+ const definition = getBootstrapTaskDefinition(projectType, selectedCapabilities, packages);
650
+ const prdContent = getBootstrapPrdContent(projectType, selectedCapabilities, packages);
651
+ return writeTaskSkeleton(cwd, BOOTSTRAP_TASK_NAME, definition, "pactile init (" + developer + ")", prdContent);
487
652
  }
488
653
  // =============================================================================
489
654
  // Joiner Onboarding Task Creation
490
655
  // =============================================================================
491
- /**
492
- * task.json factory for joiner onboarding. Mirrors the bootstrap factory but
493
- * uses dev_type "docs", higher priority "P1", and the developer-specific task
494
- * name (so multiple joiners in the same checkout don't collide).
495
- */
496
- function getJoinerTaskJson(developer, taskName) {
497
- const today = new Date().toISOString().split("T")[0];
498
- return emptyTaskJson({
499
- id: taskName,
500
- name: taskName,
501
- title: `Joining: Onboard to this Pactile project (${developer})`,
502
- description: "Onboard a new developer to an existing Pactile project: learn the workflow, conventions, and find assigned work",
503
- status: "in_progress",
504
- dev_type: "docs",
505
- priority: "P1",
506
- creator: developer,
507
- assignee: developer,
508
- createdAt: today,
509
- notes: "Generated by pactile init for a new developer joining an existing Pactile project",
510
- });
656
+ /** Create the V2 documentation Task used for a new project joiner. */
657
+ function getJoinerTaskDefinition(developer, taskId, taskName, selectedCapabilities) {
658
+ const acceptanceCriteria = [
659
+ {
660
+ id: "AC-1",
661
+ description: "Create onboarding-notes.md in the Task directory with references to this project's actual workflow and specification files, and explain that the Kernel controls lifecycle state.",
662
+ },
663
+ {
664
+ id: "AC-2",
665
+ description: "Record the active V2 Task IDs found or explicitly state that none are listed; do not infer V2 assignment from legacy task fields.",
666
+ },
667
+ ];
668
+ if (selectedCapabilities.length > 0) {
669
+ acceptanceCriteria.push({
670
+ id: "AC-3",
671
+ description: "Record each selected capability as ready, pending, or failed with observable verification evidence, or state that verification was not performed.",
672
+ });
673
+ }
674
+ return {
675
+ taskId,
676
+ title: "Onboard developer to this Pactile project: " + developer,
677
+ description: "Prepare a concise onboarding note based on the actual project workflow, conventions, and visible V2 Tasks.",
678
+ deliverable: "A project-specific onboarding note at .pactile/tasks/" +
679
+ taskName +
680
+ "/onboarding-notes.md with evidence for each acceptance criterion.",
681
+ deliveryLevel: "documentation",
682
+ acceptanceCriteria,
683
+ dependencies: [],
684
+ };
511
685
  }
512
686
  /**
513
687
  * PRD content for joiner onboarding. Kept concise (~80 lines) — deeper
514
688
  * guidance lives in skills and docs.
515
689
  */
516
- function getJoinerPrdContent(developer, pythonCmd, selectedCapabilities) {
517
- const slug = slugifyDeveloperName(developer);
690
+ function getJoinerPrdContent(developer, taskName, taskId, selectedCapabilities) {
518
691
  const selectedCapabilityChecklist = selectedCapabilities
519
692
  .map((id) => {
520
693
  const capability = getProjectCapability(id);
521
- return `- \`${capability.id}\` — re-check readiness in this clone before claiming it is available.`;
694
+ return ("- " +
695
+ capability.id +
696
+ " — re-check readiness in this clone before claiming it is available.");
522
697
  })
523
698
  .join("\n");
524
- let capabilitySection = "";
525
- if (selectedCapabilities.length > 0) {
526
- capabilitySection = `
527
- ### 5. Re-verify selected project capabilities
528
-
529
- This repo has capability selections recorded in \`.pactile/capabilities.json\`.
530
- Before they rely on MCP-backed behavior, remind them to check the selected set:
531
-
532
- ${selectedCapabilityChecklist}
533
-
534
- - If a capability is not \`ready\`, have them re-run the local verification path
535
- instead of assuming the previous machine's setup carries over.
536
-
537
- ---
538
- `;
539
- }
540
- return `# Joiner Onboarding Task
541
-
542
- **You (the AI) are running this task. The developer does not read this file.**
543
-
544
- \`${developer}\` just ran \`pactile init\` on a fresh clone, saw "Developer
545
- initialized", and will now start asking you questions in chat. This joiner task
546
- exists under \`.pactile/tasks/\`; when they want to work on it, they should
547
- select it from a session that provides Pactile session identity.
548
-
549
- Your job is to orient them to Pactile. Don't dump all of this at them — open
550
- with a short greeting, ask where they want to start, and fill in the rest as
551
- they engage.
552
-
553
- ---
554
-
555
- ## Topics to cover (adapt order to their questions)
556
-
557
- ### 1. What Pactile is + the workflow
558
-
559
- Pactile is a governed capability workspace for Cursor and Codex that keeps AI
560
- agents consistent with project-specific conventions instead of writing generic
561
- code every session.
562
-
563
- - **Human lifecycle**: Open → Define → Approve → Execute → Verify →
564
- (Integrate? when parent-child) → Close. Kernel writes that state.
565
- \`.pactile/workflow.md\` is a human overview, **not runtime SSOT**.
566
- - **Task files** live under \`.pactile/tasks/\`. \`status\` is a projection, not
567
- the only truth.
568
- - **User slash (Native Cursor)**:
569
- - \`/pactile-continue\` — resume only when this live session already has a
570
- selected task
571
- - \`/pactile-finish-work\` — wrap up a finished task
572
- - \`/pactile-handoff\` — session handoff to a temp path (not the task's
573
- \`handoff.md\`)
574
- SessionStart covers entry. \`/pactile-start\` is not installed as a slash on
575
- agent-capable Cursor. Official \`/goal\` is not a Pactile Task.
576
-
577
- ### 2. Runtime mechanics (explain when they ask "how does it know what to do")
578
-
579
- - **SessionStart hook** injects identity, git status, selected task, Task
580
- Dashboard, and a compiled session pack when Event Bridge subscribers
581
- produce one. It must not dump \`workflow.md\` Phase Index as the runtime
582
- program.
583
- - **\`/pactile-continue\`** loads Kernel / Dashboard (or the compiled pack if
584
- already in context), reads \`prd.md\` + recent activity, and routes by
585
- Kernel human phase. Do **not** treat \`get_context.py --mode phase\` (Phase
586
- Index) as runtime SSOT. Internal skills (brainstorm, check, …) are not
587
- user slash commands.
588
- - **Workers**: if this Cursor Task API has no \`pactile-implement\` /
589
- \`pactile-check\` enum, dispatch as \`generalPurpose\`. Never label that run
590
- \`true-independent\`. When a check worker is available, it follows
591
- \`check.jsonl\` — reviews against specs, auto-fixes issues, runs
592
- lint/typecheck.
593
-
594
- File layout (mention when they ask "where does what live"):
595
- - \`.pactile/.runtime/sessions/<session>.json\` — live-session selected-task state, gitignored
596
- - \`.pactile/tasks/<task>/{implement,check}.jsonl\` — per-task context manifests
597
- - \`.pactile/spec/\` — project-wide conventions (source of truth)
598
- - \`.pactile/workspace/${developer}/journal-*.md\` — their session log,
599
- rotated at ~2000 lines
600
-
601
- ### 3. This project's actual conventions
602
-
603
- - Summarize \`.pactile/spec/\` for them — what coding conventions this
604
- specific team enforces.
605
- - Point at the last 5 entries in \`.pactile/tasks/archive/\` as a rhythm
606
- example of how people actually work here. **If archive is empty** (the
607
- project just started), skip this — don't invent examples.
608
- - Not your job in this onboarding to teach them the business code itself —
609
- the README and their teammates handle that.
610
-
611
- ### 4. Their assigned work
612
-
613
- - Check if \`.pactile/workspace/${developer}/\` already exists — if yes, it's
614
- their journal from another machine and worth mentioning.
615
- - Run \`${pythonCmd} ./.pactile/scripts/task.py list --assignee ${developer}\` to
616
- show tasks assigned to them. (Quote the name if it contains spaces.)
617
- - Remind them that the "My Tasks" section appears in the SessionStart context
618
- on every new session.
619
-
620
- ---
621
-
622
- ${capabilitySection}
623
-
624
- ## Optional: walk through a small task end-to-end
625
-
626
- If they want to practice before touching real work, offer to pick a tiny
627
- P3 task or a typo fix and run the full cycle together: \`/pactile-continue\`
628
- → implement in Agent → \`/pactile-finish-work\`.
629
-
630
- ---
631
-
632
- ## Completion
633
-
634
- When they feel oriented (or after you've covered the four topics with
635
- reasonable back-and-forth), guide them to run:
636
-
637
- \`\`\`bash
638
- ${pythonCmd} ./.pactile/scripts/task.py archive 00-join-${slug}
639
- \`\`\`
640
-
641
- ---
642
-
643
- ## Suggested opening line
644
-
645
- "Welcome! Your \`pactile init\` set me up to onboard you to this project. I
646
- can walk you through the workflow, show you the runtime mechanics under the
647
- hood, summarize the team's spec, or jump to what you're already curious about
648
- — which would you prefer?"
649
- `;
699
+ const capabilitySection = selectedCapabilities.length > 0
700
+ ? [
701
+ "### Selected project capabilities",
702
+ "",
703
+ "Re-check each selected capability in this clone before relying on it:",
704
+ "",
705
+ selectedCapabilityChecklist,
706
+ "",
707
+ "If verification is incomplete, record it as pending or failed with the fallback path.",
708
+ ].join("\n")
709
+ : "";
710
+ const acceptanceCriteriaMarkdown = getJoinerTaskDefinition(developer, taskId, taskName, selectedCapabilities)
711
+ .acceptanceCriteria.map((criterion) => "- [ ] " + criterion.id + ": " + criterion.description)
712
+ .join("\n");
713
+ return [
714
+ "# Joiner Onboarding Task",
715
+ "",
716
+ "Task ID: " +
717
+ taskId +
718
+ ". State: V2 Define. No Run exists, and init does not authorize execution.",
719
+ "",
720
+ "pactile init created this V2 Task for " +
721
+ developer +
722
+ " as an onboarding proposal. The Kernel in .pactile/tasks/" +
723
+ taskName +
724
+ "/kernel.json records its definition and lifecycle. This PRD is the human-readable plan.",
725
+ "Before starting a Run or changing project files, obtain the user's ordinary, explicit approval for that work.",
726
+ "",
727
+ "Your deliverable is a concise onboarding note at .pactile/tasks/" +
728
+ taskName +
729
+ "/onboarding-notes.md. Use project evidence, and mark unavailable information as unknown rather than guessing.",
730
+ "",
731
+ "## Onboarding topics",
732
+ "",
733
+ "### 1. Current Task workflow",
734
+ "",
735
+ "- Read .pactile/workflow.md as a human overview. The V2 Task Kernel is lifecycle authority.",
736
+ "- Explain the Task definition, hard dependencies, and why a Run needs ordinary user approval.",
737
+ "- Explain that a Task can have multiple Runs and that an independent Review binds to the exact candidate from one Run.",
738
+ "- Explain that Close uses the latest passing Review, evidence for every acceptance criterion, and the delivery evidence level in the Task definition.",
739
+ "- Use pactile task --help for the current command arguments. Do not assume a host spawned a named agent or ran a hook without an observable receipt.",
740
+ "",
741
+ "### 2. This project's actual conventions",
742
+ "",
743
+ "- Read .pactile/spec/ and cite the relevant files in onboarding-notes.md.",
744
+ "- Compare the written guidance with real repository files; mark unresolved questions explicitly.",
745
+ "- Do not treat old archive directories or generated phase hints as V2 lifecycle authority.",
746
+ "",
747
+ "### 3. Visible V2 Tasks and next steps",
748
+ "",
749
+ "- Run pactile task schedule list to inspect visible V2 scheduling candidates. Record their Task IDs, or state that none were listed.",
750
+ "- Ask the user which approved work they want to pursue. The V2 Task definition has no assignee field, so do not infer assignment from legacy task.json data.",
751
+ "- If the user wants a practice task, agree on its definition and acceptance criteria first, then follow the ordinary approval, Run, independent Review, and Close gates.",
752
+ "",
753
+ capabilitySection,
754
+ "",
755
+ "## Acceptance criteria",
756
+ "",
757
+ acceptanceCriteriaMarkdown,
758
+ "",
759
+ "## Acceptance evidence",
760
+ "",
761
+ "In onboarding-notes.md include links or repository-relative paths to the workflow and spec files reviewed, the V2 Task IDs found (or none), and capability verification status when applicable.",
762
+ "",
763
+ "Before completion, check every acceptance criterion in the Task definition. Ask the user before any Run, record a candidate-bound independent Review, then Close with documentation delivery evidence that points to onboarding-notes.md. Do not move the task directory as a substitute for Close.",
764
+ "",
765
+ "## Suggested opening",
766
+ "",
767
+ "Welcome, " +
768
+ developer +
769
+ ". I can start by explaining the current Task workflow, reviewing the project conventions, or checking which V2 Tasks are visible. Which is most useful?",
770
+ ].join("\n");
650
771
  }
651
772
  /**
652
773
  * Create joiner onboarding task for a new developer on an existing Pactile
653
774
  * project. Task name is slugified to be filesystem-safe for arbitrary
654
775
  * developer names (spaces, Unicode, punctuation).
655
776
  */
656
- function createJoinerOnboardingTask(cwd, developer, pythonCmd) {
777
+ function createJoinerOnboardingTask(cwd, developer) {
657
778
  const slug = slugifyDeveloperName(developer);
658
779
  const taskName = `00-join-${slug}`;
659
- const taskJson = getJoinerTaskJson(developer, taskName);
660
- const prdContent = getJoinerPrdContent(developer, pythonCmd, loadProjectCapabilities(cwd));
661
- return writeTaskSkeleton(cwd, taskName, taskJson, prdContent);
780
+ const taskId = taskKernelIdForDirectoryName(taskName);
781
+ const selectedCapabilities = loadProjectCapabilities(cwd);
782
+ const definition = getJoinerTaskDefinition(developer, taskId, taskName, selectedCapabilities);
783
+ const prdContent = getJoinerPrdContent(developer, taskName, taskId, selectedCapabilities);
784
+ return writeTaskSkeleton(cwd, taskName, definition, `pactile init (${developer})`, prdContent);
662
785
  }
663
786
  /**
664
787
  * Handle re-init when .pactile/ already exists.
665
788
  * Returns true if handled (caller should return), false if user chose full re-init.
666
789
  */
667
- async function handleReinit(cwd, options, developerName, pythonCmd) {
790
+ async function handleReinit(cwd, options, developerName) {
668
791
  const TOOLS = getPactileInitToolChoices();
669
792
  const installState = new InstallStateStore(cwd).read();
670
793
  const configuredPlatforms = new Set((installState?.state.installedAdapters ?? [])
671
794
  .filter((adapter) => adapter.status === "active")
672
795
  .map((adapter) => adapter.id.replace(/^adapter\./, ""))
673
- .filter((platform) => platform === "cursor" || platform === "codex"));
796
+ .filter((platform) => platform === "codex"));
674
797
  const configuredNames = [...configuredPlatforms]
675
798
  .map((id) => TOOLS.find((choice) => choice.platformId === id)?.name ?? id)
676
799
  .join(", ");
@@ -683,7 +806,7 @@ async function handleReinit(cwd, options, developerName, pythonCmd) {
683
806
  if (!doAddPlatforms && !doAddDeveloper) {
684
807
  if (options.yes) {
685
808
  console.log(chalk.gray(`Already initialized with: ${configuredNames}`));
686
- console.log(chalk.gray("Use platform flags (e.g., --cursor) or -u <name> to add platforms/developer."));
809
+ console.log(chalk.gray("Use --codex or -u <name> to add a platform/developer."));
687
810
  return true;
688
811
  }
689
812
  console.log(chalk.gray(`\n Already initialized with: ${configuredNames}\n`));
@@ -769,26 +892,29 @@ async function handleReinit(cwd, options, developerName, pythonCmd) {
769
892
  }
770
893
  }
771
894
  // Capture pre-init state: if .developer did not exist before we ran
772
- // init_developer.py, this checkout had no identity → treat as a new
895
+ // the Node identity writer, this checkout had no identity → treat as a new
773
896
  // joiner onboarding onto an existing Pactile project.
774
897
  const hadDeveloperFileBefore = fs.existsSync(path.join(cwd, DIR_NAMES.WORKFLOW, FILE_NAMES.DEVELOPER));
775
- try {
776
- const scriptPath = path.join(cwd, PATHS.SCRIPTS, "init_developer.py");
777
- execSync(`${pythonCmd} "${scriptPath}" "${devName}"`, {
778
- cwd,
779
- stdio: "pipe",
780
- });
781
- console.log(chalk.green(`✓ Developer "${devName}" initialized`));
898
+ const joinerTaskName = `00-join-${slugifyDeveloperName(devName)}`;
899
+ const joinerIntentReady = hadDeveloperFileBefore ||
900
+ ensureInitTaskMarker(cwd, joinerTaskName, devName);
901
+ if (!joinerIntentReady) {
902
+ console.warn(chalk.yellow("⚠ Could not record joiner recovery intent; developer identity was not initialized"));
782
903
  }
783
- catch {
784
- console.log(chalk.yellow("⚠ Could not initialize developer. Run manually:"));
785
- console.log(chalk.gray(` ${pythonCmd} .pactile/scripts/init_developer.py ${devName}`));
904
+ if (joinerIntentReady) {
905
+ try {
906
+ initializeDeveloper(cwd, devName);
907
+ console.log(chalk.green(`✓ Developer "${devName}" initialized`));
908
+ }
909
+ catch (err) {
910
+ console.log(chalk.yellow(`⚠ Could not initialize developer: ${err instanceof Error ? err.message : String(err)}`));
911
+ }
786
912
  }
787
913
  // Create joiner onboarding task for fresh checkouts (no prior .developer).
788
914
  // Runs outside the init_developer try/catch so failures surface as warnings.
789
- if (!hadDeveloperFileBefore) {
915
+ if (!hadDeveloperFileBefore && joinerIntentReady) {
790
916
  try {
791
- if (!createJoinerOnboardingTask(cwd, devName, pythonCmd)) {
917
+ if (!createJoinerOnboardingTask(cwd, devName)) {
792
918
  console.warn(chalk.yellow("⚠ Failed to create joiner onboarding task"));
793
919
  }
794
920
  }
@@ -800,19 +926,7 @@ async function handleReinit(cwd, options, developerName, pythonCmd) {
800
926
  return true;
801
927
  }
802
928
  function getPactileInitToolChoices() {
803
- return [
804
- ...getInitToolChoices().map((choice) => ({
805
- ...choice,
806
- key: choice.key,
807
- platformId: choice.platformId,
808
- })),
809
- {
810
- key: "codex",
811
- name: "Codex (ChatGPT desktop app)",
812
- defaultChecked: true,
813
- platformId: "codex",
814
- },
815
- ];
929
+ return getInitToolChoices();
816
930
  }
817
931
  /**
818
932
  * Write monorepo package configuration to config.yaml (non-destructive patch).
@@ -897,12 +1011,7 @@ export async function init(options) {
897
1011
  // Generate ASCII art banner dynamically using FIGlet "Rebel" font
898
1012
  const banner = figlet.textSync("Pactile", { font: "Rebel" });
899
1013
  console.log(chalk.cyan(`\n${banner.trimEnd()}`));
900
- console.log(chalk.gray("\n Cross-platform AI workflow framework for Cursor & Codex\n"));
901
- // Set up proxy before any network calls
902
- const proxyUrl = setupProxy();
903
- if (proxyUrl) {
904
- console.log(chalk.gray(` Using proxy: ${maskProxyUrl(proxyUrl)}\n`));
905
- }
1014
+ console.log(chalk.gray("\n Governed AI workflow for Codex\n"));
906
1015
  // Set write mode based on options
907
1016
  let writeMode = "ask";
908
1017
  if (options.force) {
@@ -937,10 +1046,53 @@ export async function init(options) {
937
1046
  }
938
1047
  }
939
1048
  }
1049
+ // A joiner intent is durable before identity is written. Resolve any
1050
+ // existing identity before dispatch so an unrelated request or marker cannot
1051
+ // publish a Task under a second developer name.
1052
+ let persistedDeveloper = null;
1053
+ try {
1054
+ persistedDeveloper = readDeveloper(cwd);
1055
+ }
1056
+ catch {
1057
+ // Keep init best-effort when a user-owned identity file is unreadable.
1058
+ }
1059
+ const pendingJoinerMarkers = readPendingJoinerMarkers(cwd);
1060
+ const validPendingJoinerMarkers = pendingJoinerMarkers.filter((marker) => marker.valid);
1061
+ const hasPersistedDeveloperFile = pathExists(path.join(cwd, PATHS.DEVELOPER_FILE));
1062
+ let requestedDeveloper = null;
1063
+ const trimmedDeveloperName = developerName?.trim();
1064
+ if (trimmedDeveloperName)
1065
+ requestedDeveloper = trimmedDeveloperName;
1066
+ const markerConflictsWithIdentity = (marker, identity) => marker.developerName !== null
1067
+ ? marker.developerName !== identity
1068
+ : marker.taskName !== `00-join-${slugifyDeveloperName(identity)}`;
1069
+ const conflictsWithPersistedDeveloper = persistedDeveloper !== null &&
1070
+ ((requestedDeveloper !== null &&
1071
+ requestedDeveloper !== persistedDeveloper) ||
1072
+ validPendingJoinerMarkers.some((marker) => markerConflictsWithIdentity(marker, persistedDeveloper)));
1073
+ const conflictingRequestAndMarker = requestedDeveloper !== null &&
1074
+ validPendingJoinerMarkers.some((marker) => markerConflictsWithIdentity(marker, requestedDeveloper));
1075
+ const cannotValidatePersistedDeveloper = hasPersistedDeveloperFile &&
1076
+ persistedDeveloper === null &&
1077
+ (requestedDeveloper !== null || validPendingJoinerMarkers.length > 0);
1078
+ if (conflictsWithPersistedDeveloper ||
1079
+ conflictingRequestAndMarker ||
1080
+ cannotValidatePersistedDeveloper) {
1081
+ console.warn(chalk.yellow("⚠ Init stopped: the requested identity, pending joiner marker, and existing .developer identity cannot be reconciled. Preserve existing files and resolve the identity before retrying."));
1082
+ return;
1083
+ }
1084
+ if (!options.user) {
1085
+ if (persistedDeveloper &&
1086
+ hasInitTaskMarker(cwd, `00-join-${slugifyDeveloperName(persistedDeveloper)}`)) {
1087
+ developerName = persistedDeveloper;
1088
+ }
1089
+ else if (!persistedDeveloper) {
1090
+ developerName = readPendingJoinerDeveloperName(cwd) ?? developerName;
1091
+ }
1092
+ }
940
1093
  if (developerName) {
941
1094
  console.log(chalk.blue("👤 Developer:"), chalk.gray(developerName));
942
1095
  }
943
- const { command: pythonCmd } = resolveSupportedPython();
944
1096
  // ==========================================================================
945
1097
  // Re-init fast path: skip full flow when .pactile/ already exists.
946
1098
  // ==========================================================================
@@ -949,13 +1101,19 @@ export async function init(options) {
949
1101
  // to the full flow so the main-dispatch tasksEmpty fallback fires —
950
1102
  // handleReinit's joiner branch would otherwise mis-route the recovery.
951
1103
  const tasksDirEarly = path.join(cwd, PATHS.TASKS);
952
- const tasksEmptyEarly = !fs.existsSync(tasksDirEarly) || fs.readdirSync(tasksDirEarly).length === 0;
1104
+ const pendingBootstrap = hasInitTaskMarker(cwd, BOOTSTRAP_TASK_NAME);
1105
+ const pendingJoiner = developerName
1106
+ ? hasInitTaskMarker(cwd, `00-join-${slugifyDeveloperName(developerName)}`)
1107
+ : false;
1108
+ const tasksEmptyEarly = !fs.existsSync(tasksDirEarly) || fs.readdirSync(tasksDirEarly).filter((entry) => entry !== ".creating" && !entry.startsWith(".pending-")).length === 0;
953
1109
  if (!isFirstInit &&
954
1110
  !importingCstl &&
955
1111
  !options.force &&
956
1112
  !options.skipExisting &&
957
- !tasksEmptyEarly) {
958
- const reinitDone = await handleReinit(cwd, options, developerName, pythonCmd);
1113
+ !tasksEmptyEarly &&
1114
+ !pendingBootstrap &&
1115
+ !pendingJoiner) {
1116
+ const reinitDone = await handleReinit(cwd, options, developerName);
959
1117
  if (reinitDone)
960
1118
  return;
961
1119
  // reinitDone === false means user chose "full re-initialize" → fall through
@@ -1132,7 +1290,7 @@ export async function init(options) {
1132
1290
  tools = explicitTools;
1133
1291
  }
1134
1292
  else if (options.yes) {
1135
- // No explicit tools + -y: default to Cursor and Codex
1293
+ // No explicit tools + -y: use the active host default.
1136
1294
  tools = TOOLS.filter((t) => t.defaultChecked).map((t) => t.key);
1137
1295
  }
1138
1296
  else {
@@ -1595,17 +1753,43 @@ export async function init(options) {
1595
1753
  // migration backup or prompt for a legacy transition that never existed.
1596
1754
  writeWaveCConfirmed(cwd);
1597
1755
  }
1598
- // Initialize developer identity (silent - no output)
1756
+ let shouldCreateBootstrap = false;
1757
+ let shouldCreateJoiner = false;
1599
1758
  if (developerName) {
1759
+ const tasksDir = path.join(cwd, PATHS.TASKS);
1760
+ const tasksEmpty = !fs.existsSync(tasksDir) ||
1761
+ fs
1762
+ .readdirSync(tasksDir)
1763
+ .filter((entry) => entry !== ".creating" && !entry.startsWith(".pending-"))
1764
+ .length === 0;
1765
+ shouldCreateBootstrap =
1766
+ (isFirstInit && !importingCstl) ||
1767
+ pendingBootstrap ||
1768
+ (tasksEmpty && !pendingJoiner);
1769
+ shouldCreateJoiner =
1770
+ !shouldCreateBootstrap &&
1771
+ (!hadDeveloperFileAtStart || pendingJoiner);
1772
+ }
1773
+ const joinerTaskName = developerName
1774
+ ? `00-join-${slugifyDeveloperName(developerName)}`
1775
+ : null;
1776
+ const joinerIntentReady = !developerName ||
1777
+ !shouldCreateJoiner ||
1778
+ (joinerTaskName !== null &&
1779
+ ensureInitTaskMarker(cwd, joinerTaskName, developerName ?? undefined));
1780
+ if (shouldCreateJoiner && !joinerIntentReady) {
1781
+ console.warn(chalk.yellow("⚠ Could not record joiner recovery intent; developer identity was not initialized"));
1782
+ }
1783
+ // Initialize developer identity with Node (silent - no output). For a fresh
1784
+ // joiner, the recovery intent must be durable before this write so a process
1785
+ // interruption cannot leave identity without its onboarding Task.
1786
+ if (developerName && joinerIntentReady) {
1600
1787
  try {
1601
- const scriptPath = path.join(cwd, PATHS.SCRIPTS, "init_developer.py");
1602
- execSync(`${pythonCmd} "${scriptPath}" "${developerName}"`, {
1603
- cwd,
1604
- stdio: "pipe", // Silent
1605
- });
1788
+ if (!readDeveloper(cwd))
1789
+ initializeDeveloper(cwd, developerName);
1606
1790
  }
1607
1791
  catch {
1608
- // Silent failure - user can run init_developer.py manually
1792
+ // Preserve init's best-effort identity creation boundary.
1609
1793
  }
1610
1794
  // Three-branch dispatch using flags captured at init() start (before
1611
1795
  // createWorkflowStructure/init_developer ran, so they reflect the disk
@@ -1622,17 +1806,18 @@ export async function init(options) {
1622
1806
  // Runs OUTSIDE the init_developer try/catch (which uses stdio: "pipe")
1623
1807
  // so joiner failures surface as warnings instead of being silently
1624
1808
  // swallowed.
1625
- const tasksDir = path.join(cwd, PATHS.TASKS);
1626
- const tasksEmpty = !fs.existsSync(tasksDir) || fs.readdirSync(tasksDir).length === 0;
1627
- if ((isFirstInit && !importingCstl) || tasksEmpty) {
1628
- const bootstrapCreated = createBootstrapTask(cwd, developerName, pythonCmd, projectType, selectedCapabilities, monorepoPackages);
1809
+ if (shouldCreateBootstrap) {
1810
+ const bootstrapCreated = createBootstrapTask(cwd, developerName, projectType, selectedCapabilities, monorepoPackages);
1629
1811
  if (bootstrapCreated) {
1630
1812
  console.log(chalk.gray(`Next: complete ${BOOTSTRAP_TASK_NAME} to verify selected capabilities and fill the project spec.`));
1631
1813
  }
1814
+ else {
1815
+ console.warn(chalk.yellow(`⚠ Failed to create ${BOOTSTRAP_TASK_NAME}; inspect .pactile/tasks/ and retry pactile init.`));
1816
+ }
1632
1817
  }
1633
- else if (!hadDeveloperFileAtStart) {
1818
+ else if (shouldCreateJoiner) {
1634
1819
  try {
1635
- if (!createJoinerOnboardingTask(cwd, developerName, pythonCmd)) {
1820
+ if (!createJoinerOnboardingTask(cwd, developerName)) {
1636
1821
  console.warn(chalk.yellow("⚠ Failed to create joiner onboarding task"));
1637
1822
  }
1638
1823
  }