@productbrain/cli 0.1.0-beta.98 → 0.1.0-beta.9817

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 (1541) hide show
  1. package/README.md +11 -2
  2. package/dist/__tests__/adapters.test.js +79 -53
  3. package/dist/__tests__/adapters.test.js.map +1 -1
  4. package/dist/__tests__/adminConfig.test.d.ts +18 -0
  5. package/dist/__tests__/adminConfig.test.d.ts.map +1 -0
  6. package/dist/__tests__/adminConfig.test.js +221 -0
  7. package/dist/__tests__/adminConfig.test.js.map +1 -0
  8. package/dist/__tests__/batch-transformations.test.js +2 -26
  9. package/dist/__tests__/batch-transformations.test.js.map +1 -1
  10. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  11. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  12. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  13. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  14. package/dist/__tests__/capture-receipt-coaching.test.d.ts +2 -0
  15. package/dist/__tests__/capture-receipt-coaching.test.d.ts.map +1 -0
  16. package/dist/__tests__/capture-receipt-coaching.test.js +109 -0
  17. package/dist/__tests__/capture-receipt-coaching.test.js.map +1 -0
  18. package/dist/__tests__/capture-receipt-role-hint.test.d.ts +2 -0
  19. package/dist/__tests__/capture-receipt-role-hint.test.d.ts.map +1 -0
  20. package/dist/__tests__/capture-receipt-role-hint.test.js +66 -0
  21. package/dist/__tests__/capture-receipt-role-hint.test.js.map +1 -0
  22. package/dist/__tests__/capture-receipt-spine-floor.test.d.ts +2 -0
  23. package/dist/__tests__/capture-receipt-spine-floor.test.d.ts.map +1 -0
  24. package/dist/__tests__/capture-receipt-spine-floor.test.js +45 -0
  25. package/dist/__tests__/capture-receipt-spine-floor.test.js.map +1 -0
  26. package/dist/__tests__/capture.test.js +1337 -181
  27. package/dist/__tests__/capture.test.js.map +1 -1
  28. package/dist/__tests__/client-binding-guard.test.d.ts +2 -0
  29. package/dist/__tests__/client-binding-guard.test.d.ts.map +1 -0
  30. package/dist/__tests__/client-binding-guard.test.js +84 -0
  31. package/dist/__tests__/client-binding-guard.test.js.map +1 -0
  32. package/dist/__tests__/coaching-mirror-drift.test.d.ts +2 -0
  33. package/dist/__tests__/coaching-mirror-drift.test.d.ts.map +1 -0
  34. package/dist/__tests__/coaching-mirror-drift.test.js +47 -0
  35. package/dist/__tests__/coaching-mirror-drift.test.js.map +1 -0
  36. package/dist/__tests__/codex-prep-parity.test.d.ts +2 -0
  37. package/dist/__tests__/codex-prep-parity.test.d.ts.map +1 -0
  38. package/dist/__tests__/codex-prep-parity.test.js +84 -0
  39. package/dist/__tests__/codex-prep-parity.test.js.map +1 -0
  40. package/dist/__tests__/collection-registry-seed-drift.test.d.ts +2 -0
  41. package/dist/__tests__/collection-registry-seed-drift.test.d.ts.map +1 -0
  42. package/dist/__tests__/collection-registry-seed-drift.test.js +102 -0
  43. package/dist/__tests__/collection-registry-seed-drift.test.js.map +1 -0
  44. package/dist/__tests__/config-prod-fallthrough.test.d.ts +2 -0
  45. package/dist/__tests__/config-prod-fallthrough.test.d.ts.map +1 -0
  46. package/dist/__tests__/config-prod-fallthrough.test.js +93 -0
  47. package/dist/__tests__/config-prod-fallthrough.test.js.map +1 -0
  48. package/dist/__tests__/config.test.js +821 -32
  49. package/dist/__tests__/config.test.js.map +1 -1
  50. package/dist/__tests__/constants.test.js +6 -1
  51. package/dist/__tests__/constants.test.js.map +1 -1
  52. package/dist/__tests__/constellation.test.js +26 -14
  53. package/dist/__tests__/constellation.test.js.map +1 -1
  54. package/dist/__tests__/conversation.test.d.ts +2 -0
  55. package/dist/__tests__/conversation.test.d.ts.map +1 -0
  56. package/dist/__tests__/conversation.test.js +113 -0
  57. package/dist/__tests__/conversation.test.js.map +1 -0
  58. package/dist/__tests__/entry-formatter.test.d.ts +2 -0
  59. package/dist/__tests__/entry-formatter.test.d.ts.map +1 -0
  60. package/dist/__tests__/entry-formatter.test.js +159 -0
  61. package/dist/__tests__/entry-formatter.test.js.map +1 -0
  62. package/dist/__tests__/entry-preflight.test.d.ts +2 -0
  63. package/dist/__tests__/entry-preflight.test.d.ts.map +1 -0
  64. package/dist/__tests__/entry-preflight.test.js +58 -0
  65. package/dist/__tests__/entry-preflight.test.js.map +1 -0
  66. package/dist/__tests__/entryAccept-batch.test.d.ts +2 -0
  67. package/dist/__tests__/entryAccept-batch.test.d.ts.map +1 -0
  68. package/dist/__tests__/entryAccept-batch.test.js +305 -0
  69. package/dist/__tests__/entryAccept-batch.test.js.map +1 -0
  70. package/dist/__tests__/entryAccept.test.d.ts +2 -0
  71. package/dist/__tests__/entryAccept.test.d.ts.map +1 -0
  72. package/dist/__tests__/entryAccept.test.js +513 -0
  73. package/dist/__tests__/entryAccept.test.js.map +1 -0
  74. package/dist/__tests__/entryDiscardResolve.test.d.ts +2 -0
  75. package/dist/__tests__/entryDiscardResolve.test.d.ts.map +1 -0
  76. package/dist/__tests__/entryDiscardResolve.test.js +28 -0
  77. package/dist/__tests__/entryDiscardResolve.test.js.map +1 -0
  78. package/dist/__tests__/entryOwn.test.d.ts +2 -0
  79. package/dist/__tests__/entryOwn.test.d.ts.map +1 -0
  80. package/dist/__tests__/entryOwn.test.js +50 -0
  81. package/dist/__tests__/entryOwn.test.js.map +1 -0
  82. package/dist/__tests__/entryTick.test.d.ts +2 -0
  83. package/dist/__tests__/entryTick.test.d.ts.map +1 -0
  84. package/dist/__tests__/entryTick.test.js +40 -0
  85. package/dist/__tests__/entryTick.test.js.map +1 -0
  86. package/dist/__tests__/envelope-contract.test.js +31 -3
  87. package/dist/__tests__/envelope-contract.test.js.map +1 -1
  88. package/dist/__tests__/errors.test.js +42 -0
  89. package/dist/__tests__/errors.test.js.map +1 -1
  90. package/dist/__tests__/fields.test.js +14 -3
  91. package/dist/__tests__/fields.test.js.map +1 -1
  92. package/dist/__tests__/gateway-dry-run-timeout.test.d.ts +2 -0
  93. package/dist/__tests__/gateway-dry-run-timeout.test.d.ts.map +1 -0
  94. package/dist/__tests__/gateway-dry-run-timeout.test.js +70 -0
  95. package/dist/__tests__/gateway-dry-run-timeout.test.js.map +1 -0
  96. package/dist/__tests__/gateway-timeout-body-phase.test.d.ts +2 -0
  97. package/dist/__tests__/gateway-timeout-body-phase.test.d.ts.map +1 -0
  98. package/dist/__tests__/gateway-timeout-body-phase.test.js +121 -0
  99. package/dist/__tests__/gateway-timeout-body-phase.test.js.map +1 -0
  100. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  101. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  102. package/dist/__tests__/handshake-augment.test.js +407 -0
  103. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  104. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  105. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  106. package/dist/__tests__/handshake-dormancy.test.js +24 -0
  107. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  108. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  109. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  110. package/dist/__tests__/handshake-formatter.test.js +111 -0
  111. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  112. package/dist/__tests__/handshake-preview.test.js +358 -137
  113. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  114. package/dist/__tests__/handshake-session-threading.test.d.ts +2 -0
  115. package/dist/__tests__/handshake-session-threading.test.d.ts.map +1 -0
  116. package/dist/__tests__/handshake-session-threading.test.js +185 -0
  117. package/dist/__tests__/handshake-session-threading.test.js.map +1 -0
  118. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  119. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  120. package/dist/__tests__/handshake.e2e.test.js +226 -0
  121. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  122. package/dist/__tests__/handshake.test.js +828 -4
  123. package/dist/__tests__/handshake.test.js.map +1 -1
  124. package/dist/__tests__/health-gap-kinds-drift.test.d.ts +2 -0
  125. package/dist/__tests__/health-gap-kinds-drift.test.d.ts.map +1 -0
  126. package/dist/__tests__/health-gap-kinds-drift.test.js +43 -0
  127. package/dist/__tests__/health-gap-kinds-drift.test.js.map +1 -0
  128. package/dist/__tests__/hook-intents.test.js +3 -3
  129. package/dist/__tests__/hook-intents.test.js.map +1 -1
  130. package/dist/__tests__/ingest.test.js +9 -0
  131. package/dist/__tests__/ingest.test.js.map +1 -1
  132. package/dist/__tests__/init.test.js +51 -14
  133. package/dist/__tests__/init.test.js.map +1 -1
  134. package/dist/__tests__/kernel-value-sets-drift.test.d.ts +2 -0
  135. package/dist/__tests__/kernel-value-sets-drift.test.d.ts.map +1 -0
  136. package/dist/__tests__/kernel-value-sets-drift.test.js +46 -0
  137. package/dist/__tests__/kernel-value-sets-drift.test.js.map +1 -0
  138. package/dist/__tests__/kernel-value-sets-generator.test.d.ts +2 -0
  139. package/dist/__tests__/kernel-value-sets-generator.test.d.ts.map +1 -0
  140. package/dist/__tests__/kernel-value-sets-generator.test.js +108 -0
  141. package/dist/__tests__/kernel-value-sets-generator.test.js.map +1 -0
  142. package/dist/__tests__/login.test.js +18 -1
  143. package/dist/__tests__/login.test.js.map +1 -1
  144. package/dist/__tests__/manifest.test.js +118 -1
  145. package/dist/__tests__/manifest.test.js.map +1 -1
  146. package/dist/__tests__/method-registry.integration.test.js +2 -3
  147. package/dist/__tests__/method-registry.integration.test.js.map +1 -1
  148. package/dist/__tests__/method-registry.test.d.ts +6 -8
  149. package/dist/__tests__/method-registry.test.d.ts.map +1 -1
  150. package/dist/__tests__/method-registry.test.js +22 -70
  151. package/dist/__tests__/method-registry.test.js.map +1 -1
  152. package/dist/__tests__/missingPin.test.d.ts +11 -0
  153. package/dist/__tests__/missingPin.test.d.ts.map +1 -0
  154. package/dist/__tests__/missingPin.test.js +232 -0
  155. package/dist/__tests__/missingPin.test.js.map +1 -0
  156. package/dist/__tests__/notice-marker.test.d.ts +2 -0
  157. package/dist/__tests__/notice-marker.test.d.ts.map +1 -0
  158. package/dist/__tests__/notice-marker.test.js +176 -0
  159. package/dist/__tests__/notice-marker.test.js.map +1 -0
  160. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  161. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  162. package/dist/__tests__/onboarding.test.js +29 -5
  163. package/dist/__tests__/onboarding.test.js.map +1 -1
  164. package/dist/__tests__/onboardingFallback.test.d.ts +2 -0
  165. package/dist/__tests__/onboardingFallback.test.d.ts.map +1 -0
  166. package/dist/__tests__/onboardingFallback.test.js +74 -0
  167. package/dist/__tests__/onboardingFallback.test.js.map +1 -0
  168. package/dist/__tests__/orient.test.js +538 -20
  169. package/dist/__tests__/orient.test.js.map +1 -1
  170. package/dist/__tests__/perimeter.test.d.ts +2 -0
  171. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  172. package/dist/__tests__/perimeter.test.js +165 -0
  173. package/dist/__tests__/perimeter.test.js.map +1 -0
  174. package/dist/__tests__/personal-layer.test.d.ts +1 -2
  175. package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
  176. package/dist/__tests__/personal-layer.test.js +12 -48
  177. package/dist/__tests__/personal-layer.test.js.map +1 -1
  178. package/dist/__tests__/preview-key-refresh.test.d.ts +2 -0
  179. package/dist/__tests__/preview-key-refresh.test.d.ts.map +1 -0
  180. package/dist/__tests__/preview-key-refresh.test.js +126 -0
  181. package/dist/__tests__/preview-key-refresh.test.js.map +1 -0
  182. package/dist/__tests__/profiles.test.js +597 -3
  183. package/dist/__tests__/profiles.test.js.map +1 -1
  184. package/dist/__tests__/prompts.test.js +18 -1
  185. package/dist/__tests__/prompts.test.js.map +1 -1
  186. package/dist/__tests__/proof-run.test.d.ts +2 -0
  187. package/dist/__tests__/proof-run.test.d.ts.map +1 -0
  188. package/dist/__tests__/proof-run.test.js +255 -0
  189. package/dist/__tests__/proof-run.test.js.map +1 -0
  190. package/dist/__tests__/rate-limit-resilience.test.d.ts +7 -0
  191. package/dist/__tests__/rate-limit-resilience.test.d.ts.map +1 -0
  192. package/dist/__tests__/rate-limit-resilience.test.js +209 -0
  193. package/dist/__tests__/rate-limit-resilience.test.js.map +1 -0
  194. package/dist/__tests__/read-target-notice.test.d.ts +2 -0
  195. package/dist/__tests__/read-target-notice.test.d.ts.map +1 -0
  196. package/dist/__tests__/read-target-notice.test.js +129 -0
  197. package/dist/__tests__/read-target-notice.test.js.map +1 -0
  198. package/dist/__tests__/relate.test.js +246 -14
  199. package/dist/__tests__/relate.test.js.map +1 -1
  200. package/dist/__tests__/reply-commands-registered.test.d.ts +2 -0
  201. package/dist/__tests__/reply-commands-registered.test.d.ts.map +1 -0
  202. package/dist/__tests__/reply-commands-registered.test.js +81 -0
  203. package/dist/__tests__/reply-commands-registered.test.js.map +1 -0
  204. package/dist/__tests__/repo-detect.test.js +18 -38
  205. package/dist/__tests__/repo-detect.test.js.map +1 -1
  206. package/dist/__tests__/reportedProfile.test.d.ts +2 -0
  207. package/dist/__tests__/reportedProfile.test.d.ts.map +1 -0
  208. package/dist/__tests__/reportedProfile.test.js +328 -0
  209. package/dist/__tests__/reportedProfile.test.js.map +1 -0
  210. package/dist/__tests__/restore.test.d.ts +2 -0
  211. package/dist/__tests__/restore.test.d.ts.map +1 -0
  212. package/dist/__tests__/restore.test.js +85 -0
  213. package/dist/__tests__/restore.test.js.map +1 -0
  214. package/dist/__tests__/route-latency-budget.test.d.ts +2 -0
  215. package/dist/__tests__/route-latency-budget.test.d.ts.map +1 -0
  216. package/dist/__tests__/route-latency-budget.test.js +106 -0
  217. package/dist/__tests__/route-latency-budget.test.js.map +1 -0
  218. package/dist/__tests__/runner.test.js +59 -44
  219. package/dist/__tests__/runner.test.js.map +1 -1
  220. package/dist/__tests__/session-binding-refusal-tenant.test.d.ts +2 -0
  221. package/dist/__tests__/session-binding-refusal-tenant.test.d.ts.map +1 -0
  222. package/dist/__tests__/session-binding-refusal-tenant.test.js +112 -0
  223. package/dist/__tests__/session-binding-refusal-tenant.test.js.map +1 -0
  224. package/dist/__tests__/session-close-loop.test.d.ts +2 -0
  225. package/dist/__tests__/session-close-loop.test.d.ts.map +1 -0
  226. package/dist/__tests__/session-close-loop.test.js +213 -0
  227. package/dist/__tests__/session-close-loop.test.js.map +1 -0
  228. package/dist/__tests__/session-label.test.d.ts +2 -0
  229. package/dist/__tests__/session-label.test.d.ts.map +1 -0
  230. package/dist/__tests__/session-label.test.js +46 -0
  231. package/dist/__tests__/session-label.test.js.map +1 -0
  232. package/dist/__tests__/session-list-show.test.d.ts +2 -0
  233. package/dist/__tests__/session-list-show.test.d.ts.map +1 -0
  234. package/dist/__tests__/session-list-show.test.js +173 -0
  235. package/dist/__tests__/session-list-show.test.js.map +1 -0
  236. package/dist/__tests__/session-pinned-role.test.d.ts +2 -0
  237. package/dist/__tests__/session-pinned-role.test.d.ts.map +1 -0
  238. package/dist/__tests__/session-pinned-role.test.js +257 -0
  239. package/dist/__tests__/session-pinned-role.test.js.map +1 -0
  240. package/dist/__tests__/session-reset.test.d.ts +2 -0
  241. package/dist/__tests__/session-reset.test.d.ts.map +1 -0
  242. package/dist/__tests__/session-reset.test.js +138 -0
  243. package/dist/__tests__/session-reset.test.js.map +1 -0
  244. package/dist/__tests__/session-resume-backstop.test.d.ts +2 -0
  245. package/dist/__tests__/session-resume-backstop.test.d.ts.map +1 -0
  246. package/dist/__tests__/session-resume-backstop.test.js +139 -0
  247. package/dist/__tests__/session-resume-backstop.test.js.map +1 -0
  248. package/dist/__tests__/session-role-name-sanitize.test.d.ts +2 -0
  249. package/dist/__tests__/session-role-name-sanitize.test.d.ts.map +1 -0
  250. package/dist/__tests__/session-role-name-sanitize.test.js +129 -0
  251. package/dist/__tests__/session-role-name-sanitize.test.js.map +1 -0
  252. package/dist/__tests__/session-start-key-refresh.test.d.ts +2 -0
  253. package/dist/__tests__/session-start-key-refresh.test.d.ts.map +1 -0
  254. package/dist/__tests__/session-start-key-refresh.test.js +197 -0
  255. package/dist/__tests__/session-start-key-refresh.test.js.map +1 -0
  256. package/dist/__tests__/session-state-machine.test.js +235 -10
  257. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  258. package/dist/__tests__/session-switch.test.d.ts +2 -0
  259. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  260. package/dist/__tests__/session-switch.test.js +343 -0
  261. package/dist/__tests__/session-switch.test.js.map +1 -0
  262. package/dist/__tests__/session-touch.test.js +6 -1
  263. package/dist/__tests__/session-touch.test.js.map +1 -1
  264. package/dist/__tests__/sessionBinding.test.d.ts +2 -0
  265. package/dist/__tests__/sessionBinding.test.d.ts.map +1 -0
  266. package/dist/__tests__/sessionBinding.test.js +118 -0
  267. package/dist/__tests__/sessionBinding.test.js.map +1 -0
  268. package/dist/__tests__/sessionByIdLookup.test.d.ts +2 -0
  269. package/dist/__tests__/sessionByIdLookup.test.d.ts.map +1 -0
  270. package/dist/__tests__/sessionByIdLookup.test.js +63 -0
  271. package/dist/__tests__/sessionByIdLookup.test.js.map +1 -0
  272. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  273. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  274. package/dist/__tests__/skill-vocabulary.test.js +192 -0
  275. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  276. package/dist/__tests__/state.test.js +21 -1
  277. package/dist/__tests__/state.test.js.map +1 -1
  278. package/dist/__tests__/stillTrue.test.d.ts +2 -0
  279. package/dist/__tests__/stillTrue.test.d.ts.map +1 -0
  280. package/dist/__tests__/stillTrue.test.js +52 -0
  281. package/dist/__tests__/stillTrue.test.js.map +1 -0
  282. package/dist/__tests__/strip.test.js +57 -3
  283. package/dist/__tests__/strip.test.js.map +1 -1
  284. package/dist/__tests__/tenant-notice-write-path.test.d.ts +2 -0
  285. package/dist/__tests__/tenant-notice-write-path.test.d.ts.map +1 -0
  286. package/dist/__tests__/tenant-notice-write-path.test.js +169 -0
  287. package/dist/__tests__/tenant-notice-write-path.test.js.map +1 -0
  288. package/dist/__tests__/update-check.test.d.ts +2 -0
  289. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  290. package/dist/__tests__/update-check.test.js +215 -0
  291. package/dist/__tests__/update-check.test.js.map +1 -0
  292. package/dist/__tests__/update.test.js +458 -8
  293. package/dist/__tests__/update.test.js.map +1 -1
  294. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  295. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  296. package/dist/__tests__/upgrade-runner.test.js +54 -0
  297. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  298. package/dist/__tests__/upgrade.test.d.ts +2 -0
  299. package/dist/__tests__/upgrade.test.d.ts.map +1 -0
  300. package/dist/__tests__/upgrade.test.js +56 -0
  301. package/dist/__tests__/upgrade.test.js.map +1 -0
  302. package/dist/__tests__/verify-formatter.test.d.ts +2 -0
  303. package/dist/__tests__/verify-formatter.test.d.ts.map +1 -0
  304. package/dist/__tests__/verify-formatter.test.js +85 -0
  305. package/dist/__tests__/verify-formatter.test.js.map +1 -0
  306. package/dist/__tests__/vocabulary-leak.test.d.ts +33 -0
  307. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  308. package/dist/__tests__/vocabulary-leak.test.js +427 -0
  309. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  310. package/dist/__tests__/workspace.test.js +28 -69
  311. package/dist/__tests__/workspace.test.js.map +1 -1
  312. package/dist/__tests__/workspaceNotice.test.d.ts +2 -0
  313. package/dist/__tests__/workspaceNotice.test.d.ts.map +1 -0
  314. package/dist/__tests__/workspaceNotice.test.js +571 -0
  315. package/dist/__tests__/workspaceNotice.test.js.map +1 -0
  316. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  317. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  318. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  319. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  320. package/dist/commands/__tests__/quality.test.d.ts +2 -0
  321. package/dist/commands/__tests__/quality.test.d.ts.map +1 -0
  322. package/dist/commands/__tests__/quality.test.js +156 -0
  323. package/dist/commands/__tests__/quality.test.js.map +1 -0
  324. package/dist/commands/__tests__/rework.test.d.ts +2 -0
  325. package/dist/commands/__tests__/rework.test.d.ts.map +1 -0
  326. package/dist/commands/__tests__/rework.test.js +149 -0
  327. package/dist/commands/__tests__/rework.test.js.map +1 -0
  328. package/dist/commands/__tests__/tensionsList.test.d.ts +2 -0
  329. package/dist/commands/__tests__/tensionsList.test.d.ts.map +1 -0
  330. package/dist/commands/__tests__/tensionsList.test.js +63 -0
  331. package/dist/commands/__tests__/tensionsList.test.js.map +1 -0
  332. package/dist/commands/accept-policy.d.ts +10 -0
  333. package/dist/commands/accept-policy.d.ts.map +1 -0
  334. package/dist/commands/accept-policy.js +107 -0
  335. package/dist/commands/accept-policy.js.map +1 -0
  336. package/dist/commands/admin/cockpit.d.ts +2 -13
  337. package/dist/commands/admin/cockpit.d.ts.map +1 -1
  338. package/dist/commands/admin/cockpit.js +5 -5
  339. package/dist/commands/admin/cockpit.js.map +1 -1
  340. package/dist/commands/admin/index.d.ts +49 -0
  341. package/dist/commands/admin/index.d.ts.map +1 -1
  342. package/dist/commands/admin/index.js +148 -29
  343. package/dist/commands/admin/index.js.map +1 -1
  344. package/dist/commands/admin/index.test.d.ts +2 -0
  345. package/dist/commands/admin/index.test.d.ts.map +1 -0
  346. package/dist/commands/admin/index.test.js +94 -0
  347. package/dist/commands/admin/index.test.js.map +1 -0
  348. package/dist/commands/admin/inspect.d.ts.map +1 -1
  349. package/dist/commands/admin/inspect.js +2 -7
  350. package/dist/commands/admin/inspect.js.map +1 -1
  351. package/dist/commands/admin/probe.d.ts +75 -0
  352. package/dist/commands/admin/probe.d.ts.map +1 -0
  353. package/dist/commands/admin/probe.js +224 -0
  354. package/dist/commands/admin/probe.js.map +1 -0
  355. package/dist/commands/admin/probe.test.d.ts +2 -0
  356. package/dist/commands/admin/probe.test.d.ts.map +1 -0
  357. package/dist/commands/admin/probe.test.js +193 -0
  358. package/dist/commands/admin/probe.test.js.map +1 -0
  359. package/dist/commands/admin/run.d.ts +43 -0
  360. package/dist/commands/admin/run.d.ts.map +1 -0
  361. package/dist/commands/admin/run.js +78 -0
  362. package/dist/commands/admin/run.js.map +1 -0
  363. package/dist/commands/admin/run.test.d.ts +18 -0
  364. package/dist/commands/admin/run.test.d.ts.map +1 -0
  365. package/dist/commands/admin/run.test.js +168 -0
  366. package/dist/commands/admin/run.test.js.map +1 -0
  367. package/dist/commands/admin/seed.d.ts +32 -3
  368. package/dist/commands/admin/seed.d.ts.map +1 -1
  369. package/dist/commands/admin/seed.js +303 -130
  370. package/dist/commands/admin/seed.js.map +1 -1
  371. package/dist/commands/admin/seed.test.d.ts +4 -0
  372. package/dist/commands/admin/seed.test.d.ts.map +1 -1
  373. package/dist/commands/admin/seed.test.js +27 -12
  374. package/dist/commands/admin/seed.test.js.map +1 -1
  375. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  376. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  377. package/dist/commands/admin/seedRegistryEntries.generated.js +36 -0
  378. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  379. package/dist/commands/admin/seedRegistryEntries.test.d.ts +13 -0
  380. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  381. package/dist/commands/admin/seedRegistryEntries.test.js +101 -0
  382. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  383. package/dist/commands/admin/seedRowType.d.ts +22 -0
  384. package/dist/commands/admin/seedRowType.d.ts.map +1 -0
  385. package/dist/commands/admin/seedRowType.js +2 -0
  386. package/dist/commands/admin/seedRowType.js.map +1 -0
  387. package/dist/commands/admin/seedStatusColor.d.ts +9 -0
  388. package/dist/commands/admin/seedStatusColor.d.ts.map +1 -0
  389. package/dist/commands/admin/seedStatusColor.js +19 -0
  390. package/dist/commands/admin/seedStatusColor.js.map +1 -0
  391. package/dist/commands/admin/seedStatusColor.test.d.ts +2 -0
  392. package/dist/commands/admin/seedStatusColor.test.d.ts.map +1 -0
  393. package/dist/commands/admin/seedStatusColor.test.js +31 -0
  394. package/dist/commands/admin/seedStatusColor.test.js.map +1 -0
  395. package/dist/commands/brief.d.ts.map +1 -1
  396. package/dist/commands/brief.js +24 -2
  397. package/dist/commands/brief.js.map +1 -1
  398. package/dist/commands/capture.d.ts +17 -9
  399. package/dist/commands/capture.d.ts.map +1 -1
  400. package/dist/commands/capture.js +174 -228
  401. package/dist/commands/capture.js.map +1 -1
  402. package/dist/commands/chain-walk.d.ts.map +1 -1
  403. package/dist/commands/chain-walk.js.map +1 -1
  404. package/dist/commands/changes.d.ts.map +1 -1
  405. package/dist/commands/changes.js.map +1 -1
  406. package/dist/commands/codex-prep.d.ts +12 -1
  407. package/dist/commands/codex-prep.d.ts.map +1 -1
  408. package/dist/commands/codex-prep.js +18 -84
  409. package/dist/commands/codex-prep.js.map +1 -1
  410. package/dist/commands/collections.d.ts +1 -1
  411. package/dist/commands/collections.d.ts.map +1 -1
  412. package/dist/commands/collections.js +1 -1
  413. package/dist/commands/collections.js.map +1 -1
  414. package/dist/commands/conflicts.d.ts +35 -0
  415. package/dist/commands/conflicts.d.ts.map +1 -0
  416. package/dist/commands/conflicts.js +194 -0
  417. package/dist/commands/conflicts.js.map +1 -0
  418. package/dist/commands/conflicts.test.d.ts +2 -0
  419. package/dist/commands/conflicts.test.d.ts.map +1 -0
  420. package/dist/commands/conflicts.test.js +179 -0
  421. package/dist/commands/conflicts.test.js.map +1 -0
  422. package/dist/commands/connect-config.test.d.ts +2 -0
  423. package/dist/commands/connect-config.test.d.ts.map +1 -0
  424. package/dist/commands/connect-config.test.js +52 -0
  425. package/dist/commands/connect-config.test.js.map +1 -0
  426. package/dist/commands/connect-context.d.ts +55 -0
  427. package/dist/commands/connect-context.d.ts.map +1 -0
  428. package/dist/commands/connect-context.js +78 -0
  429. package/dist/commands/connect-context.js.map +1 -0
  430. package/dist/commands/connect-context.test.d.ts +2 -0
  431. package/dist/commands/connect-context.test.d.ts.map +1 -0
  432. package/dist/commands/connect-context.test.js +148 -0
  433. package/dist/commands/connect-context.test.js.map +1 -0
  434. package/dist/commands/connect-decline.test.d.ts +2 -0
  435. package/dist/commands/connect-decline.test.d.ts.map +1 -0
  436. package/dist/commands/connect-decline.test.js +70 -0
  437. package/dist/commands/connect-decline.test.js.map +1 -0
  438. package/dist/commands/connect-handoff.d.ts +51 -0
  439. package/dist/commands/connect-handoff.d.ts.map +1 -0
  440. package/dist/commands/connect-handoff.js +70 -0
  441. package/dist/commands/connect-handoff.js.map +1 -0
  442. package/dist/commands/connect-integration.test.js +37 -19
  443. package/dist/commands/connect-integration.test.js.map +1 -1
  444. package/dist/commands/connect-legacy-migration.test.d.ts +2 -0
  445. package/dist/commands/connect-legacy-migration.test.d.ts.map +1 -0
  446. package/dist/commands/connect-legacy-migration.test.js +109 -0
  447. package/dist/commands/connect-legacy-migration.test.js.map +1 -0
  448. package/dist/commands/connect-redeem-failure.test.d.ts +2 -0
  449. package/dist/commands/connect-redeem-failure.test.d.ts.map +1 -0
  450. package/dist/commands/connect-redeem-failure.test.js +134 -0
  451. package/dist/commands/connect-redeem-failure.test.js.map +1 -0
  452. package/dist/commands/connect-screens.d.ts +17 -4
  453. package/dist/commands/connect-screens.d.ts.map +1 -1
  454. package/dist/commands/connect-screens.js +83 -19
  455. package/dist/commands/connect-screens.js.map +1 -1
  456. package/dist/commands/connect-seal.test.d.ts +2 -0
  457. package/dist/commands/connect-seal.test.d.ts.map +1 -0
  458. package/dist/commands/connect-seal.test.js +55 -0
  459. package/dist/commands/connect-seal.test.js.map +1 -0
  460. package/dist/commands/connect.d.ts +22 -6
  461. package/dist/commands/connect.d.ts.map +1 -1
  462. package/dist/commands/connect.js +249 -107
  463. package/dist/commands/connect.js.map +1 -1
  464. package/dist/commands/connect.test.js +226 -23
  465. package/dist/commands/connect.test.js.map +1 -1
  466. package/dist/commands/constellation.d.ts.map +1 -1
  467. package/dist/commands/constellation.js.map +1 -1
  468. package/dist/commands/context.d.ts.map +1 -1
  469. package/dist/commands/context.js.map +1 -1
  470. package/dist/commands/cross-cut.d.ts.map +1 -1
  471. package/dist/commands/cross-cut.js.map +1 -1
  472. package/dist/commands/digest.d.ts +17 -0
  473. package/dist/commands/digest.d.ts.map +1 -0
  474. package/dist/commands/digest.js +58 -0
  475. package/dist/commands/digest.js.map +1 -0
  476. package/dist/commands/digest.test.d.ts +2 -0
  477. package/dist/commands/digest.test.d.ts.map +1 -0
  478. package/dist/commands/digest.test.js +36 -0
  479. package/dist/commands/digest.test.js.map +1 -0
  480. package/dist/commands/direction.d.ts +10 -0
  481. package/dist/commands/direction.d.ts.map +1 -0
  482. package/dist/commands/direction.js +79 -0
  483. package/dist/commands/direction.js.map +1 -0
  484. package/dist/commands/doctor.d.ts.map +1 -1
  485. package/dist/commands/doctor.js +173 -38
  486. package/dist/commands/doctor.js.map +1 -1
  487. package/dist/commands/doctor.test.js +352 -6
  488. package/dist/commands/doctor.test.js.map +1 -1
  489. package/dist/commands/entryAccept.d.ts +26 -0
  490. package/dist/commands/entryAccept.d.ts.map +1 -0
  491. package/dist/commands/entryAccept.js +309 -0
  492. package/dist/commands/entryAccept.js.map +1 -0
  493. package/dist/commands/entryDiscardResolve.d.ts +9 -0
  494. package/dist/commands/entryDiscardResolve.d.ts.map +1 -0
  495. package/dist/commands/entryDiscardResolve.js +27 -0
  496. package/dist/commands/entryDiscardResolve.js.map +1 -0
  497. package/dist/commands/entryOwn.d.ts +5 -0
  498. package/dist/commands/entryOwn.d.ts.map +1 -0
  499. package/dist/commands/entryOwn.js +17 -0
  500. package/dist/commands/entryOwn.js.map +1 -0
  501. package/dist/commands/entryPreflight.d.ts +8 -0
  502. package/dist/commands/entryPreflight.d.ts.map +1 -0
  503. package/dist/commands/entryPreflight.js +48 -0
  504. package/dist/commands/entryPreflight.js.map +1 -0
  505. package/dist/commands/entryTick.d.ts +8 -0
  506. package/dist/commands/entryTick.d.ts.map +1 -0
  507. package/dist/commands/entryTick.js +43 -0
  508. package/dist/commands/entryTick.js.map +1 -0
  509. package/dist/commands/feedback.d.ts +36 -0
  510. package/dist/commands/feedback.d.ts.map +1 -0
  511. package/dist/commands/feedback.js +174 -0
  512. package/dist/commands/feedback.js.map +1 -0
  513. package/dist/commands/feedback.test.d.ts +2 -0
  514. package/dist/commands/feedback.test.d.ts.map +1 -0
  515. package/dist/commands/feedback.test.js +110 -0
  516. package/dist/commands/feedback.test.js.map +1 -0
  517. package/dist/commands/fields.d.ts.map +1 -1
  518. package/dist/commands/fields.js +1 -1
  519. package/dist/commands/fields.js.map +1 -1
  520. package/dist/commands/files.d.ts +26 -0
  521. package/dist/commands/files.d.ts.map +1 -0
  522. package/dist/commands/files.js +160 -0
  523. package/dist/commands/files.js.map +1 -0
  524. package/dist/commands/files.test.d.ts +2 -0
  525. package/dist/commands/files.test.d.ts.map +1 -0
  526. package/dist/commands/files.test.js +278 -0
  527. package/dist/commands/files.test.js.map +1 -0
  528. package/dist/commands/handshake.d.ts +57 -9
  529. package/dist/commands/handshake.d.ts.map +1 -1
  530. package/dist/commands/handshake.js +757 -336
  531. package/dist/commands/handshake.js.map +1 -1
  532. package/dist/commands/handshakeCursorSkillCleanup.d.ts +36 -0
  533. package/dist/commands/handshakeCursorSkillCleanup.d.ts.map +1 -0
  534. package/dist/commands/handshakeCursorSkillCleanup.js +110 -0
  535. package/dist/commands/handshakeCursorSkillCleanup.js.map +1 -0
  536. package/dist/commands/handshakeDriftClassification.d.ts +33 -0
  537. package/dist/commands/handshakeDriftClassification.d.ts.map +1 -0
  538. package/dist/commands/handshakeDriftClassification.js +62 -0
  539. package/dist/commands/handshakeDriftClassification.js.map +1 -0
  540. package/dist/commands/history.d.ts +30 -0
  541. package/dist/commands/history.d.ts.map +1 -0
  542. package/dist/commands/history.js +62 -0
  543. package/dist/commands/history.js.map +1 -0
  544. package/dist/commands/history.test.d.ts +2 -0
  545. package/dist/commands/history.test.d.ts.map +1 -0
  546. package/dist/commands/history.test.js +106 -0
  547. package/dist/commands/history.test.js.map +1 -0
  548. package/dist/commands/ingest.d.ts.map +1 -1
  549. package/dist/commands/ingest.js +9 -0
  550. package/dist/commands/ingest.js.map +1 -1
  551. package/dist/commands/init.d.ts +1 -1
  552. package/dist/commands/init.d.ts.map +1 -1
  553. package/dist/commands/init.js +22 -13
  554. package/dist/commands/init.js.map +1 -1
  555. package/dist/commands/login.d.ts.map +1 -1
  556. package/dist/commands/login.js +15 -11
  557. package/dist/commands/login.js.map +1 -1
  558. package/dist/commands/organisation.d.ts +12 -0
  559. package/dist/commands/organisation.d.ts.map +1 -0
  560. package/dist/commands/organisation.js +162 -0
  561. package/dist/commands/organisation.js.map +1 -0
  562. package/dist/commands/organisation.test.d.ts +2 -0
  563. package/dist/commands/organisation.test.d.ts.map +1 -0
  564. package/dist/commands/organisation.test.js +196 -0
  565. package/dist/commands/organisation.test.js.map +1 -0
  566. package/dist/commands/organisationHierarchy.d.ts +8 -0
  567. package/dist/commands/organisationHierarchy.d.ts.map +1 -0
  568. package/dist/commands/organisationHierarchy.js +75 -0
  569. package/dist/commands/organisationHierarchy.js.map +1 -0
  570. package/dist/commands/organisationHierarchy.test.d.ts +2 -0
  571. package/dist/commands/organisationHierarchy.test.d.ts.map +1 -0
  572. package/dist/commands/organisationHierarchy.test.js +72 -0
  573. package/dist/commands/organisationHierarchy.test.js.map +1 -0
  574. package/dist/commands/organisationWrite.d.ts +18 -0
  575. package/dist/commands/organisationWrite.d.ts.map +1 -0
  576. package/dist/commands/organisationWrite.js +71 -0
  577. package/dist/commands/organisationWrite.js.map +1 -0
  578. package/dist/commands/orient.d.ts +81 -67
  579. package/dist/commands/orient.d.ts.map +1 -1
  580. package/dist/commands/orient.js +226 -18
  581. package/dist/commands/orient.js.map +1 -1
  582. package/dist/commands/outcome.d.ts +91 -0
  583. package/dist/commands/outcome.d.ts.map +1 -0
  584. package/dist/commands/outcome.js +204 -0
  585. package/dist/commands/outcome.js.map +1 -0
  586. package/dist/commands/outcome.test.d.ts +2 -0
  587. package/dist/commands/outcome.test.d.ts.map +1 -0
  588. package/dist/commands/outcome.test.js +308 -0
  589. package/dist/commands/outcome.test.js.map +1 -0
  590. package/dist/commands/people.d.ts +6 -0
  591. package/dist/commands/people.d.ts.map +1 -0
  592. package/dist/commands/people.js +22 -0
  593. package/dist/commands/people.js.map +1 -0
  594. package/dist/commands/people.test.d.ts +2 -0
  595. package/dist/commands/people.test.d.ts.map +1 -0
  596. package/dist/commands/people.test.js +61 -0
  597. package/dist/commands/people.test.js.map +1 -0
  598. package/dist/commands/profile.d.ts +24 -16
  599. package/dist/commands/profile.d.ts.map +1 -1
  600. package/dist/commands/profile.js +272 -98
  601. package/dist/commands/profile.js.map +1 -1
  602. package/dist/commands/proof-run.d.ts +51 -0
  603. package/dist/commands/proof-run.d.ts.map +1 -0
  604. package/dist/commands/proof-run.js +209 -0
  605. package/dist/commands/proof-run.js.map +1 -0
  606. package/dist/commands/quality.d.ts +16 -0
  607. package/dist/commands/quality.d.ts.map +1 -0
  608. package/dist/commands/quality.js +29 -0
  609. package/dist/commands/quality.js.map +1 -0
  610. package/dist/commands/questions.d.ts +23 -0
  611. package/dist/commands/questions.d.ts.map +1 -0
  612. package/dist/commands/questions.js +238 -0
  613. package/dist/commands/questions.js.map +1 -0
  614. package/dist/commands/questions.test.d.ts +2 -0
  615. package/dist/commands/questions.test.d.ts.map +1 -0
  616. package/dist/commands/questions.test.js +159 -0
  617. package/dist/commands/questions.test.js.map +1 -0
  618. package/dist/commands/relate.d.ts +1 -0
  619. package/dist/commands/relate.d.ts.map +1 -1
  620. package/dist/commands/relate.js +89 -15
  621. package/dist/commands/relate.js.map +1 -1
  622. package/dist/commands/restore.d.ts +2 -0
  623. package/dist/commands/restore.d.ts.map +1 -0
  624. package/dist/commands/restore.js +83 -0
  625. package/dist/commands/restore.js.map +1 -0
  626. package/dist/commands/rework.d.ts +24 -0
  627. package/dist/commands/rework.d.ts.map +1 -0
  628. package/dist/commands/rework.js +97 -0
  629. package/dist/commands/rework.js.map +1 -0
  630. package/dist/commands/role.d.ts +67 -0
  631. package/dist/commands/role.d.ts.map +1 -0
  632. package/dist/commands/role.js +164 -0
  633. package/dist/commands/role.js.map +1 -0
  634. package/dist/commands/role.test.d.ts +2 -0
  635. package/dist/commands/role.test.d.ts.map +1 -0
  636. package/dist/commands/role.test.js +290 -0
  637. package/dist/commands/role.test.js.map +1 -0
  638. package/dist/commands/scoreboard.d.ts +26 -0
  639. package/dist/commands/scoreboard.d.ts.map +1 -0
  640. package/dist/commands/scoreboard.js +40 -0
  641. package/dist/commands/scoreboard.js.map +1 -0
  642. package/dist/commands/search.d.ts +3 -0
  643. package/dist/commands/search.d.ts.map +1 -1
  644. package/dist/commands/search.js +7 -1
  645. package/dist/commands/search.js.map +1 -1
  646. package/dist/commands/session.d.ts +60 -7
  647. package/dist/commands/session.d.ts.map +1 -1
  648. package/dist/commands/session.js +417 -69
  649. package/dist/commands/session.js.map +1 -1
  650. package/dist/commands/shape.d.ts +16 -0
  651. package/dist/commands/shape.d.ts.map +1 -0
  652. package/dist/commands/shape.js +149 -0
  653. package/dist/commands/shape.js.map +1 -0
  654. package/dist/commands/shape.test.d.ts +2 -0
  655. package/dist/commands/shape.test.d.ts.map +1 -0
  656. package/dist/commands/shape.test.js +148 -0
  657. package/dist/commands/shape.test.js.map +1 -0
  658. package/dist/commands/status.d.ts +7 -0
  659. package/dist/commands/status.d.ts.map +1 -0
  660. package/dist/commands/status.js +102 -0
  661. package/dist/commands/status.js.map +1 -0
  662. package/dist/commands/status.test.d.ts +2 -0
  663. package/dist/commands/status.test.d.ts.map +1 -0
  664. package/dist/commands/status.test.js +75 -0
  665. package/dist/commands/status.test.js.map +1 -0
  666. package/dist/commands/stillTrue.d.ts +14 -0
  667. package/dist/commands/stillTrue.d.ts.map +1 -0
  668. package/dist/commands/stillTrue.js +48 -0
  669. package/dist/commands/stillTrue.js.map +1 -0
  670. package/dist/commands/tensionsList.d.ts +5 -0
  671. package/dist/commands/tensionsList.d.ts.map +1 -0
  672. package/dist/commands/tensionsList.js +27 -0
  673. package/dist/commands/tensionsList.js.map +1 -0
  674. package/dist/commands/update.d.ts +21 -0
  675. package/dist/commands/update.d.ts.map +1 -1
  676. package/dist/commands/update.js +157 -42
  677. package/dist/commands/update.js.map +1 -1
  678. package/dist/commands/upgrade.d.ts +5 -0
  679. package/dist/commands/upgrade.d.ts.map +1 -0
  680. package/dist/commands/upgrade.js +110 -0
  681. package/dist/commands/upgrade.js.map +1 -0
  682. package/dist/commands/usage.d.ts.map +1 -1
  683. package/dist/commands/usage.js +0 -18
  684. package/dist/commands/usage.js.map +1 -1
  685. package/dist/commands/verify.d.ts.map +1 -1
  686. package/dist/commands/verify.js +7 -1
  687. package/dist/commands/verify.js.map +1 -1
  688. package/dist/commands/welcome.d.ts.map +1 -1
  689. package/dist/commands/welcome.js +5 -2
  690. package/dist/commands/welcome.js.map +1 -1
  691. package/dist/commands/whoami.d.ts +20 -0
  692. package/dist/commands/whoami.d.ts.map +1 -0
  693. package/dist/commands/whoami.js +126 -0
  694. package/dist/commands/whoami.js.map +1 -0
  695. package/dist/commands/whoami.test.d.ts +2 -0
  696. package/dist/commands/whoami.test.d.ts.map +1 -0
  697. package/dist/commands/whoami.test.js +130 -0
  698. package/dist/commands/whoami.test.js.map +1 -0
  699. package/dist/commands/workspace.d.ts +19 -65
  700. package/dist/commands/workspace.d.ts.map +1 -1
  701. package/dist/commands/workspace.js +11 -72
  702. package/dist/commands/workspace.js.map +1 -1
  703. package/dist/formatters/__tests__/orient-plannedWorkCut.test.d.ts +2 -0
  704. package/dist/formatters/__tests__/orient-plannedWorkCut.test.d.ts.map +1 -0
  705. package/dist/formatters/__tests__/orient-plannedWorkCut.test.js +49 -0
  706. package/dist/formatters/__tests__/orient-plannedWorkCut.test.js.map +1 -0
  707. package/dist/formatters/__tests__/orient-provenance.test.d.ts +6 -0
  708. package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
  709. package/dist/formatters/__tests__/orient-provenance.test.js +319 -0
  710. package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
  711. package/dist/formatters/__tests__/orient-ruleLists.test.d.ts +2 -0
  712. package/dist/formatters/__tests__/orient-ruleLists.test.d.ts.map +1 -0
  713. package/dist/formatters/__tests__/orient-ruleLists.test.js +93 -0
  714. package/dist/formatters/__tests__/orient-ruleLists.test.js.map +1 -0
  715. package/dist/formatters/__tests__/session-list-show.test.d.ts +2 -0
  716. package/dist/formatters/__tests__/session-list-show.test.d.ts.map +1 -0
  717. package/dist/formatters/__tests__/session-list-show.test.js +195 -0
  718. package/dist/formatters/__tests__/session-list-show.test.js.map +1 -0
  719. package/dist/formatters/__tests__/session.test.d.ts +2 -0
  720. package/dist/formatters/__tests__/session.test.d.ts.map +1 -0
  721. package/dist/formatters/__tests__/session.test.js +193 -0
  722. package/dist/formatters/__tests__/session.test.js.map +1 -0
  723. package/dist/formatters/__tests__/tensionsList.test.d.ts +2 -0
  724. package/dist/formatters/__tests__/tensionsList.test.d.ts.map +1 -0
  725. package/dist/formatters/__tests__/tensionsList.test.js +30 -0
  726. package/dist/formatters/__tests__/tensionsList.test.js.map +1 -0
  727. package/dist/formatters/brief.d.ts +6 -15
  728. package/dist/formatters/brief.d.ts.map +1 -1
  729. package/dist/formatters/brief.js +16 -14
  730. package/dist/formatters/brief.js.map +1 -1
  731. package/dist/formatters/brief.test.d.ts +2 -0
  732. package/dist/formatters/brief.test.d.ts.map +1 -0
  733. package/dist/formatters/brief.test.js +21 -0
  734. package/dist/formatters/brief.test.js.map +1 -0
  735. package/dist/formatters/capture.d.ts +17 -10
  736. package/dist/formatters/capture.d.ts.map +1 -1
  737. package/dist/formatters/capture.js +32 -10
  738. package/dist/formatters/capture.js.map +1 -1
  739. package/dist/formatters/coaching.d.ts +53 -0
  740. package/dist/formatters/coaching.d.ts.map +1 -0
  741. package/dist/formatters/coaching.js +51 -0
  742. package/dist/formatters/coaching.js.map +1 -0
  743. package/dist/formatters/collections.d.ts +0 -1
  744. package/dist/formatters/collections.d.ts.map +1 -1
  745. package/dist/formatters/collections.js +14 -5
  746. package/dist/formatters/collections.js.map +1 -1
  747. package/dist/formatters/conflicts.d.ts +69 -0
  748. package/dist/formatters/conflicts.d.ts.map +1 -0
  749. package/dist/formatters/conflicts.js +87 -0
  750. package/dist/formatters/conflicts.js.map +1 -0
  751. package/dist/formatters/conflicts.test.d.ts +2 -0
  752. package/dist/formatters/conflicts.test.d.ts.map +1 -0
  753. package/dist/formatters/conflicts.test.js +136 -0
  754. package/dist/formatters/conflicts.test.js.map +1 -0
  755. package/dist/formatters/context.d.ts +1 -1
  756. package/dist/formatters/context.d.ts.map +1 -1
  757. package/dist/formatters/context.js.map +1 -1
  758. package/dist/formatters/digest.d.ts +13 -0
  759. package/dist/formatters/digest.d.ts.map +1 -0
  760. package/dist/formatters/digest.js +98 -0
  761. package/dist/formatters/digest.js.map +1 -0
  762. package/dist/formatters/digest.test.d.ts +2 -0
  763. package/dist/formatters/digest.test.d.ts.map +1 -0
  764. package/dist/formatters/digest.test.js +166 -0
  765. package/dist/formatters/digest.test.js.map +1 -0
  766. package/dist/formatters/direction.d.ts +48 -0
  767. package/dist/formatters/direction.d.ts.map +1 -0
  768. package/dist/formatters/direction.js +75 -0
  769. package/dist/formatters/direction.js.map +1 -0
  770. package/dist/formatters/direction.test.d.ts +2 -0
  771. package/dist/formatters/direction.test.d.ts.map +1 -0
  772. package/dist/formatters/direction.test.js +70 -0
  773. package/dist/formatters/direction.test.js.map +1 -0
  774. package/dist/formatters/entry.d.ts +65 -1
  775. package/dist/formatters/entry.d.ts.map +1 -1
  776. package/dist/formatters/entry.js +102 -11
  777. package/dist/formatters/entry.js.map +1 -1
  778. package/dist/formatters/entryAccept.d.ts +77 -0
  779. package/dist/formatters/entryAccept.d.ts.map +1 -0
  780. package/dist/formatters/entryAccept.js +76 -0
  781. package/dist/formatters/entryAccept.js.map +1 -0
  782. package/dist/formatters/feedback.d.ts +58 -0
  783. package/dist/formatters/feedback.d.ts.map +1 -0
  784. package/dist/formatters/feedback.js +91 -0
  785. package/dist/formatters/feedback.js.map +1 -0
  786. package/dist/formatters/feedback.test.d.ts +2 -0
  787. package/dist/formatters/feedback.test.d.ts.map +1 -0
  788. package/dist/formatters/feedback.test.js +123 -0
  789. package/dist/formatters/feedback.test.js.map +1 -0
  790. package/dist/formatters/fields.d.ts +7 -1
  791. package/dist/formatters/fields.d.ts.map +1 -1
  792. package/dist/formatters/fields.js +9 -3
  793. package/dist/formatters/fields.js.map +1 -1
  794. package/dist/formatters/fields.test.d.ts +2 -0
  795. package/dist/formatters/fields.test.d.ts.map +1 -0
  796. package/dist/formatters/fields.test.js +42 -0
  797. package/dist/formatters/fields.test.js.map +1 -0
  798. package/dist/formatters/handshake.d.ts +43 -9
  799. package/dist/formatters/handshake.d.ts.map +1 -1
  800. package/dist/formatters/handshake.js +83 -29
  801. package/dist/formatters/handshake.js.map +1 -1
  802. package/dist/formatters/orient.coherencyCheckTag.test.d.ts +2 -0
  803. package/dist/formatters/orient.coherencyCheckTag.test.d.ts.map +1 -0
  804. package/dist/formatters/orient.coherencyCheckTag.test.js +22 -0
  805. package/dist/formatters/orient.coherencyCheckTag.test.js.map +1 -0
  806. package/dist/formatters/orient.d.ts +136 -97
  807. package/dist/formatters/orient.d.ts.map +1 -1
  808. package/dist/formatters/orient.js +210 -133
  809. package/dist/formatters/orient.js.map +1 -1
  810. package/dist/formatters/orient.rcrtMiss.test.d.ts +2 -0
  811. package/dist/formatters/orient.rcrtMiss.test.d.ts.map +1 -0
  812. package/dist/formatters/orient.rcrtMiss.test.js +77 -0
  813. package/dist/formatters/orient.rcrtMiss.test.js.map +1 -0
  814. package/dist/formatters/orient.rituals.test.d.ts +2 -0
  815. package/dist/formatters/orient.rituals.test.d.ts.map +1 -0
  816. package/dist/formatters/orient.rituals.test.js +73 -0
  817. package/dist/formatters/orient.rituals.test.js.map +1 -0
  818. package/dist/formatters/orient.shapeAdvisorySummary.test.d.ts +2 -0
  819. package/dist/formatters/orient.shapeAdvisorySummary.test.d.ts.map +1 -0
  820. package/dist/formatters/orient.shapeAdvisorySummary.test.js +59 -0
  821. package/dist/formatters/orient.shapeAdvisorySummary.test.js.map +1 -0
  822. package/dist/formatters/orientDegradation.d.ts +38 -0
  823. package/dist/formatters/orientDegradation.d.ts.map +1 -0
  824. package/dist/formatters/orientDegradation.js +50 -0
  825. package/dist/formatters/orientDegradation.js.map +1 -0
  826. package/dist/formatters/orientDegradation.test.d.ts +2 -0
  827. package/dist/formatters/orientDegradation.test.d.ts.map +1 -0
  828. package/dist/formatters/orientDegradation.test.js +28 -0
  829. package/dist/formatters/orientDegradation.test.js.map +1 -0
  830. package/dist/formatters/orientDirection.d.ts +47 -0
  831. package/dist/formatters/orientDirection.d.ts.map +1 -0
  832. package/dist/formatters/orientDirection.js +23 -0
  833. package/dist/formatters/orientDirection.js.map +1 -0
  834. package/dist/formatters/orientDirection.test.d.ts +2 -0
  835. package/dist/formatters/orientDirection.test.d.ts.map +1 -0
  836. package/dist/formatters/orientDirection.test.js +70 -0
  837. package/dist/formatters/orientDirection.test.js.map +1 -0
  838. package/dist/formatters/orientRetrievalMiss.d.ts +22 -0
  839. package/dist/formatters/orientRetrievalMiss.d.ts.map +1 -0
  840. package/dist/formatters/orientRetrievalMiss.js +17 -0
  841. package/dist/formatters/orientRetrievalMiss.js.map +1 -0
  842. package/dist/formatters/plannedWorkCounts.d.ts +19 -0
  843. package/dist/formatters/plannedWorkCounts.d.ts.map +1 -0
  844. package/dist/formatters/plannedWorkCounts.js +17 -0
  845. package/dist/formatters/plannedWorkCounts.js.map +1 -0
  846. package/dist/formatters/questions.d.ts +72 -0
  847. package/dist/formatters/questions.d.ts.map +1 -0
  848. package/dist/formatters/questions.js +116 -0
  849. package/dist/formatters/questions.js.map +1 -0
  850. package/dist/formatters/questions.test.d.ts +2 -0
  851. package/dist/formatters/questions.test.d.ts.map +1 -0
  852. package/dist/formatters/questions.test.js +144 -0
  853. package/dist/formatters/questions.test.js.map +1 -0
  854. package/dist/formatters/relate.d.ts +13 -2
  855. package/dist/formatters/relate.d.ts.map +1 -1
  856. package/dist/formatters/relate.js +15 -5
  857. package/dist/formatters/relate.js.map +1 -1
  858. package/dist/formatters/relate.test.d.ts +2 -0
  859. package/dist/formatters/relate.test.d.ts.map +1 -0
  860. package/dist/formatters/relate.test.js +91 -0
  861. package/dist/formatters/relate.test.js.map +1 -0
  862. package/dist/formatters/scoreboard.d.ts +11 -0
  863. package/dist/formatters/scoreboard.d.ts.map +1 -0
  864. package/dist/formatters/scoreboard.js +162 -0
  865. package/dist/formatters/scoreboard.js.map +1 -0
  866. package/dist/formatters/scoreboard.test.d.ts +2 -0
  867. package/dist/formatters/scoreboard.test.d.ts.map +1 -0
  868. package/dist/formatters/scoreboard.test.js +301 -0
  869. package/dist/formatters/scoreboard.test.js.map +1 -0
  870. package/dist/formatters/search.d.ts +3 -0
  871. package/dist/formatters/search.d.ts.map +1 -1
  872. package/dist/formatters/search.js +15 -1
  873. package/dist/formatters/search.js.map +1 -1
  874. package/dist/formatters/search.test.d.ts +2 -0
  875. package/dist/formatters/search.test.d.ts.map +1 -0
  876. package/dist/formatters/search.test.js +76 -0
  877. package/dist/formatters/search.test.js.map +1 -0
  878. package/dist/formatters/session-feedback.test.d.ts +2 -0
  879. package/dist/formatters/session-feedback.test.d.ts.map +1 -0
  880. package/dist/formatters/session-feedback.test.js +146 -0
  881. package/dist/formatters/session-feedback.test.js.map +1 -0
  882. package/dist/formatters/session.d.ts +122 -5
  883. package/dist/formatters/session.d.ts.map +1 -1
  884. package/dist/formatters/session.js +312 -21
  885. package/dist/formatters/session.js.map +1 -1
  886. package/dist/formatters/shape.d.ts +54 -0
  887. package/dist/formatters/shape.d.ts.map +1 -0
  888. package/dist/formatters/shape.js +97 -0
  889. package/dist/formatters/shape.js.map +1 -0
  890. package/dist/formatters/shape.test.d.ts +2 -0
  891. package/dist/formatters/shape.test.d.ts.map +1 -0
  892. package/dist/formatters/shape.test.js +80 -0
  893. package/dist/formatters/shape.test.js.map +1 -0
  894. package/dist/formatters/spineCheck.d.ts +14 -0
  895. package/dist/formatters/spineCheck.d.ts.map +1 -0
  896. package/dist/formatters/spineCheck.js +113 -0
  897. package/dist/formatters/spineCheck.js.map +1 -0
  898. package/dist/formatters/spineCheck.test.d.ts +2 -0
  899. package/dist/formatters/spineCheck.test.d.ts.map +1 -0
  900. package/dist/formatters/spineCheck.test.js +76 -0
  901. package/dist/formatters/spineCheck.test.js.map +1 -0
  902. package/dist/formatters/tensionsList.d.ts +17 -0
  903. package/dist/formatters/tensionsList.d.ts.map +1 -0
  904. package/dist/formatters/tensionsList.js +33 -0
  905. package/dist/formatters/tensionsList.js.map +1 -0
  906. package/dist/formatters/update.d.ts +22 -0
  907. package/dist/formatters/update.d.ts.map +1 -1
  908. package/dist/formatters/update.js +36 -7
  909. package/dist/formatters/update.js.map +1 -1
  910. package/dist/formatters/update.test.d.ts +2 -0
  911. package/dist/formatters/update.test.d.ts.map +1 -0
  912. package/dist/formatters/update.test.js +59 -0
  913. package/dist/formatters/update.test.js.map +1 -0
  914. package/dist/formatters/verify.d.ts +12 -4
  915. package/dist/formatters/verify.d.ts.map +1 -1
  916. package/dist/formatters/verify.js +20 -2
  917. package/dist/formatters/verify.js.map +1 -1
  918. package/dist/generated/healthGapKinds.generated.d.ts +12 -0
  919. package/dist/generated/healthGapKinds.generated.d.ts.map +1 -0
  920. package/dist/generated/healthGapKinds.generated.js +16 -0
  921. package/dist/generated/healthGapKinds.generated.js.map +1 -0
  922. package/dist/generated/organisationalAuthorityRefusalCodes.generated.d.ts +12 -0
  923. package/dist/generated/organisationalAuthorityRefusalCodes.generated.d.ts.map +1 -0
  924. package/dist/generated/organisationalAuthorityRefusalCodes.generated.js +11 -0
  925. package/dist/generated/organisationalAuthorityRefusalCodes.generated.js.map +1 -0
  926. package/dist/generated/relationTypes.generated.d.ts +12 -0
  927. package/dist/generated/relationTypes.generated.d.ts.map +1 -0
  928. package/dist/generated/relationTypes.generated.js +11 -0
  929. package/dist/generated/relationTypes.generated.js.map +1 -0
  930. package/dist/generated/routeLatencyBudget.generated.d.ts +56 -0
  931. package/dist/generated/routeLatencyBudget.generated.d.ts.map +1 -0
  932. package/dist/generated/routeLatencyBudget.generated.js +278 -0
  933. package/dist/generated/routeLatencyBudget.generated.js.map +1 -0
  934. package/dist/generated/sourceSurfaces.generated.d.ts +12 -0
  935. package/dist/generated/sourceSurfaces.generated.d.ts.map +1 -0
  936. package/dist/generated/sourceSurfaces.generated.js +11 -0
  937. package/dist/generated/sourceSurfaces.generated.js.map +1 -0
  938. package/dist/generators/adapters.d.ts +39 -6
  939. package/dist/generators/adapters.d.ts.map +1 -1
  940. package/dist/generators/adapters.js +88 -89
  941. package/dist/generators/adapters.js.map +1 -1
  942. package/dist/generators/adapters.test.js +14 -6
  943. package/dist/generators/adapters.test.js.map +1 -1
  944. package/dist/generators/boundary-manifest.real-file.test.d.ts +2 -0
  945. package/dist/generators/boundary-manifest.real-file.test.d.ts.map +1 -0
  946. package/dist/generators/boundary-manifest.real-file.test.js +70 -0
  947. package/dist/generators/boundary-manifest.real-file.test.js.map +1 -0
  948. package/dist/generators/briefing-projections.test.d.ts +2 -0
  949. package/dist/generators/briefing-projections.test.d.ts.map +1 -0
  950. package/dist/generators/briefing-projections.test.js +98 -0
  951. package/dist/generators/briefing-projections.test.js.map +1 -0
  952. package/dist/generators/context-md.d.ts +7 -2
  953. package/dist/generators/context-md.d.ts.map +1 -1
  954. package/dist/generators/context-md.js +18 -57
  955. package/dist/generators/context-md.js.map +1 -1
  956. package/dist/generators/everyone-rules-md.d.ts +9 -0
  957. package/dist/generators/everyone-rules-md.d.ts.map +1 -0
  958. package/dist/generators/everyone-rules-md.js +21 -0
  959. package/dist/generators/everyone-rules-md.js.map +1 -0
  960. package/dist/generators/manifest.d.ts +76 -0
  961. package/dist/generators/manifest.d.ts.map +1 -1
  962. package/dist/generators/manifest.js +125 -14
  963. package/dist/generators/manifest.js.map +1 -1
  964. package/dist/generators/noProjectionAssets.d.ts +15 -0
  965. package/dist/generators/noProjectionAssets.d.ts.map +1 -0
  966. package/dist/generators/noProjectionAssets.js +6 -0
  967. package/dist/generators/noProjectionAssets.js.map +1 -0
  968. package/dist/generators/portable-knowledge.d.ts +15 -38
  969. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  970. package/dist/generators/portable-knowledge.js +13 -144
  971. package/dist/generators/portable-knowledge.js.map +1 -1
  972. package/dist/generators/portable-knowledge.test.js +82 -267
  973. package/dist/generators/portable-knowledge.test.js.map +1 -1
  974. package/dist/generators/region-projections.d.ts +17 -0
  975. package/dist/generators/region-projections.d.ts.map +1 -0
  976. package/dist/generators/region-projections.js +51 -0
  977. package/dist/generators/region-projections.js.map +1 -0
  978. package/dist/generators/region-projections.test.d.ts +2 -0
  979. package/dist/generators/region-projections.test.d.ts.map +1 -0
  980. package/dist/generators/region-projections.test.js +58 -0
  981. package/dist/generators/region-projections.test.js.map +1 -0
  982. package/dist/generators/region.d.ts +24 -0
  983. package/dist/generators/region.d.ts.map +1 -0
  984. package/dist/generators/region.js +87 -0
  985. package/dist/generators/region.js.map +1 -0
  986. package/dist/generators/region.test.d.ts +2 -0
  987. package/dist/generators/region.test.d.ts.map +1 -0
  988. package/dist/generators/region.test.js +126 -0
  989. package/dist/generators/region.test.js.map +1 -0
  990. package/dist/generators/retired-projections.d.ts +12 -0
  991. package/dist/generators/retired-projections.d.ts.map +1 -0
  992. package/dist/generators/retired-projections.js +75 -0
  993. package/dist/generators/retired-projections.js.map +1 -0
  994. package/dist/generators/retired-projections.test.d.ts +2 -0
  995. package/dist/generators/retired-projections.test.d.ts.map +1 -0
  996. package/dist/generators/retired-projections.test.js +64 -0
  997. package/dist/generators/retired-projections.test.js.map +1 -0
  998. package/dist/generators/surface-profiles.d.ts +1 -2
  999. package/dist/generators/surface-profiles.d.ts.map +1 -1
  1000. package/dist/generators/surface-profiles.js.map +1 -1
  1001. package/dist/handleCliError.d.ts +2 -0
  1002. package/dist/handleCliError.d.ts.map +1 -0
  1003. package/dist/handleCliError.js +56 -0
  1004. package/dist/handleCliError.js.map +1 -0
  1005. package/dist/index.d.ts +0 -5
  1006. package/dist/index.d.ts.map +1 -1
  1007. package/dist/index.js +218 -466
  1008. package/dist/index.js.map +1 -1
  1009. package/dist/lib/__tests__/legalRelationTypes.test.d.ts +2 -0
  1010. package/dist/lib/__tests__/legalRelationTypes.test.d.ts.map +1 -0
  1011. package/dist/lib/__tests__/legalRelationTypes.test.js +61 -0
  1012. package/dist/lib/__tests__/legalRelationTypes.test.js.map +1 -0
  1013. package/dist/lib/__tests__/parseFields.test.d.ts +2 -0
  1014. package/dist/lib/__tests__/parseFields.test.d.ts.map +1 -0
  1015. package/dist/lib/__tests__/parseFields.test.js +40 -0
  1016. package/dist/lib/__tests__/parseFields.test.js.map +1 -0
  1017. package/dist/lib/adminConfig.d.ts +48 -0
  1018. package/dist/lib/adminConfig.d.ts.map +1 -0
  1019. package/dist/lib/adminConfig.js +130 -0
  1020. package/dist/lib/adminConfig.js.map +1 -0
  1021. package/dist/lib/canonicalRefs.d.ts +96 -5
  1022. package/dist/lib/canonicalRefs.d.ts.map +1 -1
  1023. package/dist/lib/canonicalRefs.js +89 -3
  1024. package/dist/lib/canonicalRefs.js.map +1 -1
  1025. package/dist/lib/captureGrounding.d.ts +48 -0
  1026. package/dist/lib/captureGrounding.d.ts.map +1 -0
  1027. package/dist/lib/captureGrounding.js +54 -0
  1028. package/dist/lib/captureGrounding.js.map +1 -0
  1029. package/dist/lib/captureGrounding.test.d.ts +2 -0
  1030. package/dist/lib/captureGrounding.test.d.ts.map +1 -0
  1031. package/dist/lib/captureGrounding.test.js +74 -0
  1032. package/dist/lib/captureGrounding.test.js.map +1 -0
  1033. package/dist/lib/captureLink.d.ts +26 -0
  1034. package/dist/lib/captureLink.d.ts.map +1 -0
  1035. package/dist/lib/captureLink.js +110 -0
  1036. package/dist/lib/captureLink.js.map +1 -0
  1037. package/dist/lib/checklist.d.ts +32 -0
  1038. package/dist/lib/checklist.d.ts.map +1 -0
  1039. package/dist/lib/checklist.js +77 -0
  1040. package/dist/lib/checklist.js.map +1 -0
  1041. package/dist/lib/client.d.ts +47 -19
  1042. package/dist/lib/client.d.ts.map +1 -1
  1043. package/dist/lib/client.js +226 -59
  1044. package/dist/lib/client.js.map +1 -1
  1045. package/dist/lib/collectionRegistry.d.ts +40 -5
  1046. package/dist/lib/collectionRegistry.d.ts.map +1 -1
  1047. package/dist/lib/collectionRegistry.js +71 -48
  1048. package/dist/lib/collectionRegistry.js.map +1 -1
  1049. package/dist/lib/commanderOptions.d.ts +8 -0
  1050. package/dist/lib/commanderOptions.d.ts.map +1 -0
  1051. package/dist/lib/commanderOptions.js +10 -0
  1052. package/dist/lib/commanderOptions.js.map +1 -0
  1053. package/dist/lib/compose-wrapup-view.d.ts +48 -0
  1054. package/dist/lib/compose-wrapup-view.d.ts.map +1 -0
  1055. package/dist/lib/compose-wrapup-view.js +37 -0
  1056. package/dist/lib/compose-wrapup-view.js.map +1 -0
  1057. package/dist/lib/config.d.ts +97 -68
  1058. package/dist/lib/config.d.ts.map +1 -1
  1059. package/dist/lib/config.js +222 -204
  1060. package/dist/lib/config.js.map +1 -1
  1061. package/dist/lib/configResult.d.ts +102 -0
  1062. package/dist/lib/configResult.d.ts.map +1 -0
  1063. package/dist/lib/configResult.js +179 -0
  1064. package/dist/lib/configResult.js.map +1 -0
  1065. package/dist/lib/connectProfileName.d.ts +36 -0
  1066. package/dist/lib/connectProfileName.d.ts.map +1 -0
  1067. package/dist/lib/connectProfileName.js +72 -0
  1068. package/dist/lib/connectProfileName.js.map +1 -0
  1069. package/dist/lib/connectProfileName.test.d.ts +2 -0
  1070. package/dist/lib/connectProfileName.test.d.ts.map +1 -0
  1071. package/dist/lib/connectProfileName.test.js +100 -0
  1072. package/dist/lib/connectProfileName.test.js.map +1 -0
  1073. package/dist/lib/constants.d.ts +5 -1
  1074. package/dist/lib/constants.d.ts.map +1 -1
  1075. package/dist/lib/constants.js +8 -1
  1076. package/dist/lib/constants.js.map +1 -1
  1077. package/dist/lib/conversation.d.ts +36 -0
  1078. package/dist/lib/conversation.d.ts.map +1 -0
  1079. package/dist/lib/conversation.js +66 -0
  1080. package/dist/lib/conversation.js.map +1 -0
  1081. package/dist/lib/createEntryResult.d.ts +34 -0
  1082. package/dist/lib/createEntryResult.d.ts.map +1 -0
  1083. package/dist/lib/createEntryResult.js +12 -0
  1084. package/dist/lib/createEntryResult.js.map +1 -0
  1085. package/dist/lib/deployment.js +2 -2
  1086. package/dist/lib/deployment.js.map +1 -1
  1087. package/dist/lib/deployment.test.js +20 -1
  1088. package/dist/lib/deployment.test.js.map +1 -1
  1089. package/dist/lib/envKeySnapshot.d.ts +10 -0
  1090. package/dist/lib/envKeySnapshot.d.ts.map +1 -0
  1091. package/dist/lib/envKeySnapshot.js +30 -0
  1092. package/dist/lib/envKeySnapshot.js.map +1 -0
  1093. package/dist/lib/errors.d.ts +91 -0
  1094. package/dist/lib/errors.d.ts.map +1 -1
  1095. package/dist/lib/errors.js +84 -0
  1096. package/dist/lib/errors.js.map +1 -1
  1097. package/dist/lib/frontmatter.d.ts +55 -0
  1098. package/dist/lib/frontmatter.d.ts.map +1 -0
  1099. package/dist/lib/frontmatter.js +92 -0
  1100. package/dist/lib/frontmatter.js.map +1 -0
  1101. package/dist/lib/frontmatter.test.d.ts +15 -0
  1102. package/dist/lib/frontmatter.test.d.ts.map +1 -0
  1103. package/dist/lib/frontmatter.test.js +98 -0
  1104. package/dist/lib/frontmatter.test.js.map +1 -0
  1105. package/dist/lib/gatewayTimeout.d.ts +88 -0
  1106. package/dist/lib/gatewayTimeout.d.ts.map +1 -0
  1107. package/dist/lib/gatewayTimeout.js +118 -0
  1108. package/dist/lib/gatewayTimeout.js.map +1 -0
  1109. package/dist/lib/gitEnvLeakKeysParity.test.d.ts +2 -0
  1110. package/dist/lib/gitEnvLeakKeysParity.test.d.ts.map +1 -0
  1111. package/dist/lib/gitEnvLeakKeysParity.test.js +73 -0
  1112. package/dist/lib/gitEnvLeakKeysParity.test.js.map +1 -0
  1113. package/dist/lib/glossary.js +1 -1
  1114. package/dist/lib/glossary.js.map +1 -1
  1115. package/dist/lib/hook-intents.js +3 -3
  1116. package/dist/lib/hook-intents.js.map +1 -1
  1117. package/dist/lib/judgeWait.d.ts +50 -0
  1118. package/dist/lib/judgeWait.d.ts.map +1 -0
  1119. package/dist/lib/judgeWait.js +64 -0
  1120. package/dist/lib/judgeWait.js.map +1 -0
  1121. package/dist/lib/kernelEnvelope.d.ts +42 -0
  1122. package/dist/lib/kernelEnvelope.d.ts.map +1 -0
  1123. package/dist/lib/kernelEnvelope.js +67 -0
  1124. package/dist/lib/kernelEnvelope.js.map +1 -0
  1125. package/dist/lib/legalRelationTypes.d.ts +19 -0
  1126. package/dist/lib/legalRelationTypes.d.ts.map +1 -0
  1127. package/dist/lib/legalRelationTypes.js +64 -0
  1128. package/dist/lib/legalRelationTypes.js.map +1 -0
  1129. package/dist/lib/localBinding.d.ts +86 -0
  1130. package/dist/lib/localBinding.d.ts.map +1 -0
  1131. package/dist/lib/localBinding.js +173 -0
  1132. package/dist/lib/localBinding.js.map +1 -0
  1133. package/dist/lib/method-registry.d.ts +16 -11
  1134. package/dist/lib/method-registry.d.ts.map +1 -1
  1135. package/dist/lib/method-registry.js +13 -25
  1136. package/dist/lib/method-registry.js.map +1 -1
  1137. package/dist/lib/missingFields.d.ts +5 -0
  1138. package/dist/lib/missingFields.d.ts.map +1 -0
  1139. package/dist/lib/missingFields.js +27 -0
  1140. package/dist/lib/missingFields.js.map +1 -0
  1141. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  1142. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  1143. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  1144. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  1145. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  1146. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  1147. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  1148. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  1149. package/dist/lib/notice-marker.d.ts +3 -0
  1150. package/dist/lib/notice-marker.d.ts.map +1 -0
  1151. package/dist/lib/notice-marker.js +223 -0
  1152. package/dist/lib/notice-marker.js.map +1 -0
  1153. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  1154. package/dist/lib/onboarding-path-b.js +39 -15
  1155. package/dist/lib/onboarding-path-b.js.map +1 -1
  1156. package/dist/lib/onboarding-shared.d.ts +27 -5
  1157. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  1158. package/dist/lib/onboarding-shared.js +55 -37
  1159. package/dist/lib/onboarding-shared.js.map +1 -1
  1160. package/dist/lib/onboarding-shared.test.d.ts +2 -0
  1161. package/dist/lib/onboarding-shared.test.d.ts.map +1 -0
  1162. package/dist/lib/onboarding-shared.test.js +131 -0
  1163. package/dist/lib/onboarding-shared.test.js.map +1 -0
  1164. package/dist/lib/onboarding-topics.js +1 -1
  1165. package/dist/lib/onboarding.d.ts +5 -1
  1166. package/dist/lib/onboarding.d.ts.map +1 -1
  1167. package/dist/lib/onboarding.js +62 -25
  1168. package/dist/lib/onboarding.js.map +1 -1
  1169. package/dist/lib/ownerLine.d.ts +73 -0
  1170. package/dist/lib/ownerLine.d.ts.map +1 -0
  1171. package/dist/lib/ownerLine.js +57 -0
  1172. package/dist/lib/ownerLine.js.map +1 -0
  1173. package/dist/lib/parseFields.d.ts +19 -0
  1174. package/dist/lib/parseFields.d.ts.map +1 -0
  1175. package/dist/lib/parseFields.js +49 -0
  1176. package/dist/lib/parseFields.js.map +1 -0
  1177. package/dist/lib/pinnedRole.d.ts +28 -0
  1178. package/dist/lib/pinnedRole.d.ts.map +1 -0
  1179. package/dist/lib/pinnedRole.js +105 -0
  1180. package/dist/lib/pinnedRole.js.map +1 -0
  1181. package/dist/lib/platformGlossary.d.ts +19 -0
  1182. package/dist/lib/platformGlossary.d.ts.map +1 -0
  1183. package/dist/lib/platformGlossary.js +21 -0
  1184. package/dist/lib/platformGlossary.js.map +1 -0
  1185. package/dist/lib/previewBanner.d.ts +9 -0
  1186. package/dist/lib/previewBanner.d.ts.map +1 -0
  1187. package/dist/lib/previewBanner.js +37 -0
  1188. package/dist/lib/previewBanner.js.map +1 -0
  1189. package/dist/lib/productbrain-files.d.ts +108 -0
  1190. package/dist/lib/productbrain-files.d.ts.map +1 -0
  1191. package/dist/lib/productbrain-files.js +240 -0
  1192. package/dist/lib/productbrain-files.js.map +1 -0
  1193. package/dist/lib/productbrain-files.test.d.ts +2 -0
  1194. package/dist/lib/productbrain-files.test.d.ts.map +1 -0
  1195. package/dist/lib/productbrain-files.test.js +518 -0
  1196. package/dist/lib/productbrain-files.test.js.map +1 -0
  1197. package/dist/lib/profiles.d.ts +55 -5
  1198. package/dist/lib/profiles.d.ts.map +1 -1
  1199. package/dist/lib/profiles.js +81 -27
  1200. package/dist/lib/profiles.js.map +1 -1
  1201. package/dist/lib/projectConfig.d.ts +96 -0
  1202. package/dist/lib/projectConfig.d.ts.map +1 -0
  1203. package/dist/lib/projectConfig.js +185 -0
  1204. package/dist/lib/projectConfig.js.map +1 -0
  1205. package/dist/lib/prompts.d.ts +2 -0
  1206. package/dist/lib/prompts.d.ts.map +1 -1
  1207. package/dist/lib/prompts.js +2 -0
  1208. package/dist/lib/prompts.js.map +1 -1
  1209. package/dist/lib/proseBody.d.ts +14 -0
  1210. package/dist/lib/proseBody.d.ts.map +1 -0
  1211. package/dist/lib/proseBody.js +25 -0
  1212. package/dist/lib/proseBody.js.map +1 -0
  1213. package/dist/lib/rate-limit.d.ts +38 -0
  1214. package/dist/lib/rate-limit.d.ts.map +1 -0
  1215. package/dist/lib/rate-limit.js +83 -0
  1216. package/dist/lib/rate-limit.js.map +1 -0
  1217. package/dist/lib/readinessNotices.d.ts +12 -0
  1218. package/dist/lib/readinessNotices.d.ts.map +1 -0
  1219. package/dist/lib/readinessNotices.js +15 -0
  1220. package/dist/lib/readinessNotices.js.map +1 -0
  1221. package/dist/lib/repo-detect.d.ts +8 -2
  1222. package/dist/lib/repo-detect.d.ts.map +1 -1
  1223. package/dist/lib/repo-detect.js +11 -6
  1224. package/dist/lib/repo-detect.js.map +1 -1
  1225. package/dist/lib/reportedProfile.d.ts +18 -0
  1226. package/dist/lib/reportedProfile.d.ts.map +1 -0
  1227. package/dist/lib/reportedProfile.js +144 -0
  1228. package/dist/lib/reportedProfile.js.map +1 -0
  1229. package/dist/lib/ruleListRender.d.ts +188 -0
  1230. package/dist/lib/ruleListRender.d.ts.map +1 -0
  1231. package/dist/lib/ruleListRender.js +273 -0
  1232. package/dist/lib/ruleListRender.js.map +1 -0
  1233. package/dist/lib/runner.d.ts +9 -1
  1234. package/dist/lib/runner.d.ts.map +1 -1
  1235. package/dist/lib/runner.js +30 -4
  1236. package/dist/lib/runner.js.map +1 -1
  1237. package/dist/lib/seatSentence.d.ts +42 -0
  1238. package/dist/lib/seatSentence.d.ts.map +1 -0
  1239. package/dist/lib/seatSentence.js +25 -0
  1240. package/dist/lib/seatSentence.js.map +1 -0
  1241. package/dist/lib/session.d.ts +90 -6
  1242. package/dist/lib/session.d.ts.map +1 -1
  1243. package/dist/lib/session.js +261 -17
  1244. package/dist/lib/session.js.map +1 -1
  1245. package/dist/lib/sessionBinding.d.ts +61 -0
  1246. package/dist/lib/sessionBinding.d.ts.map +1 -0
  1247. package/dist/lib/sessionBinding.js +125 -0
  1248. package/dist/lib/sessionBinding.js.map +1 -0
  1249. package/dist/lib/sessionNotices.d.ts +54 -0
  1250. package/dist/lib/sessionNotices.d.ts.map +1 -0
  1251. package/dist/lib/sessionNotices.js +130 -0
  1252. package/dist/lib/sessionNotices.js.map +1 -0
  1253. package/dist/lib/sessionNotices.test.d.ts +2 -0
  1254. package/dist/lib/sessionNotices.test.d.ts.map +1 -0
  1255. package/dist/lib/sessionNotices.test.js +55 -0
  1256. package/dist/lib/sessionNotices.test.js.map +1 -0
  1257. package/dist/lib/spineVerdictRead.d.ts +70 -0
  1258. package/dist/lib/spineVerdictRead.d.ts.map +1 -0
  1259. package/dist/lib/spineVerdictRead.js +73 -0
  1260. package/dist/lib/spineVerdictRead.js.map +1 -0
  1261. package/dist/lib/spinner.js +2 -2
  1262. package/dist/lib/spinner.js.map +1 -1
  1263. package/dist/lib/startup-resolution-signals.d.ts +34 -0
  1264. package/dist/lib/startup-resolution-signals.d.ts.map +1 -0
  1265. package/dist/lib/startup-resolution-signals.js +116 -0
  1266. package/dist/lib/startup-resolution-signals.js.map +1 -0
  1267. package/dist/lib/startup-resolution-signals.test.d.ts +2 -0
  1268. package/dist/lib/startup-resolution-signals.test.d.ts.map +1 -0
  1269. package/dist/lib/startup-resolution-signals.test.js +113 -0
  1270. package/dist/lib/startup-resolution-signals.test.js.map +1 -0
  1271. package/dist/lib/startup-signals.d.ts +12 -0
  1272. package/dist/lib/startup-signals.d.ts.map +1 -0
  1273. package/dist/lib/startup-signals.js +179 -0
  1274. package/dist/lib/startup-signals.js.map +1 -0
  1275. package/dist/lib/startup-signals.test.d.ts +2 -0
  1276. package/dist/lib/startup-signals.test.d.ts.map +1 -0
  1277. package/dist/lib/startup-signals.test.js +165 -0
  1278. package/dist/lib/startup-signals.test.js.map +1 -0
  1279. package/dist/lib/state.d.ts +11 -2
  1280. package/dist/lib/state.d.ts.map +1 -1
  1281. package/dist/lib/state.js +11 -4
  1282. package/dist/lib/state.js.map +1 -1
  1283. package/dist/lib/statusCategories.d.ts +160 -0
  1284. package/dist/lib/statusCategories.d.ts.map +1 -0
  1285. package/dist/lib/statusCategories.js +284 -0
  1286. package/dist/lib/statusCategories.js.map +1 -0
  1287. package/dist/lib/strip.d.ts +17 -0
  1288. package/dist/lib/strip.d.ts.map +1 -1
  1289. package/dist/lib/strip.js +48 -1
  1290. package/dist/lib/strip.js.map +1 -1
  1291. package/dist/lib/style.d.ts +8 -2
  1292. package/dist/lib/style.d.ts.map +1 -1
  1293. package/dist/lib/style.js +24 -17
  1294. package/dist/lib/style.js.map +1 -1
  1295. package/dist/lib/tokenConstants.d.ts +2 -0
  1296. package/dist/lib/tokenConstants.d.ts.map +1 -1
  1297. package/dist/lib/tokenConstants.js +2 -0
  1298. package/dist/lib/tokenConstants.js.map +1 -1
  1299. package/dist/lib/update-check.d.ts +42 -7
  1300. package/dist/lib/update-check.d.ts.map +1 -1
  1301. package/dist/lib/update-check.js +213 -62
  1302. package/dist/lib/update-check.js.map +1 -1
  1303. package/dist/lib/upgrade-runner.d.ts +22 -0
  1304. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  1305. package/dist/lib/upgrade-runner.js +110 -0
  1306. package/dist/lib/upgrade-runner.js.map +1 -0
  1307. package/dist/lib/workspaceNotice.d.ts +202 -0
  1308. package/dist/lib/workspaceNotice.d.ts.map +1 -0
  1309. package/dist/lib/workspaceNotice.js +345 -0
  1310. package/dist/lib/workspaceNotice.js.map +1 -0
  1311. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  1312. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  1313. package/dist/lib/workspaceVocabCache.js +98 -0
  1314. package/dist/lib/workspaceVocabCache.js.map +1 -0
  1315. package/dist/lib/writePerimeter.d.ts +72 -0
  1316. package/dist/lib/writePerimeter.d.ts.map +1 -0
  1317. package/dist/lib/writePerimeter.js +128 -0
  1318. package/dist/lib/writePerimeter.js.map +1 -0
  1319. package/dist/registerEntryCommands.d.ts +18 -0
  1320. package/dist/registerEntryCommands.d.ts.map +1 -0
  1321. package/dist/registerEntryCommands.js +123 -0
  1322. package/dist/registerEntryCommands.js.map +1 -0
  1323. package/dist/registerHistoryCommand.d.ts +8 -0
  1324. package/dist/registerHistoryCommand.d.ts.map +1 -0
  1325. package/dist/registerHistoryCommand.js +14 -0
  1326. package/dist/registerHistoryCommand.js.map +1 -0
  1327. package/dist/registerOutcomeCommands.d.ts +27 -0
  1328. package/dist/registerOutcomeCommands.d.ts.map +1 -0
  1329. package/dist/registerOutcomeCommands.js +27 -0
  1330. package/dist/registerOutcomeCommands.js.map +1 -0
  1331. package/dist/registerRoleCommands.d.ts +11 -0
  1332. package/dist/registerRoleCommands.d.ts.map +1 -0
  1333. package/dist/registerRoleCommands.js +38 -0
  1334. package/dist/registerRoleCommands.js.map +1 -0
  1335. package/dist/registerTensionsCommands.d.ts +10 -0
  1336. package/dist/registerTensionsCommands.d.ts.map +1 -0
  1337. package/dist/registerTensionsCommands.js +15 -0
  1338. package/dist/registerTensionsCommands.js.map +1 -0
  1339. package/dist/scoreboard/diagnose.d.ts +190 -0
  1340. package/dist/scoreboard/diagnose.d.ts.map +1 -0
  1341. package/dist/scoreboard/diagnose.js +282 -0
  1342. package/dist/scoreboard/diagnose.js.map +1 -0
  1343. package/dist/scoreboard/diagnose.test.d.ts +15 -0
  1344. package/dist/scoreboard/diagnose.test.d.ts.map +1 -0
  1345. package/dist/scoreboard/diagnose.test.js +288 -0
  1346. package/dist/scoreboard/diagnose.test.js.map +1 -0
  1347. package/dist/scoreboard/floors.d.ts +47 -0
  1348. package/dist/scoreboard/floors.d.ts.map +1 -0
  1349. package/dist/scoreboard/floors.js +33 -0
  1350. package/dist/scoreboard/floors.js.map +1 -0
  1351. package/dist/scoreboard/localDrift.d.ts +23 -0
  1352. package/dist/scoreboard/localDrift.d.ts.map +1 -0
  1353. package/dist/scoreboard/localDrift.js +111 -0
  1354. package/dist/scoreboard/localDrift.js.map +1 -0
  1355. package/dist/scoreboard/localDrift.test.d.ts +9 -0
  1356. package/dist/scoreboard/localDrift.test.d.ts.map +1 -0
  1357. package/dist/scoreboard/localDrift.test.js +82 -0
  1358. package/dist/scoreboard/localDrift.test.js.map +1 -0
  1359. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  1360. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  1361. package/dist/surfaces/__tests__/adapter.test.js +86 -0
  1362. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  1363. package/dist/surfaces/__tests__/claude-skill-pointer-drift.test.d.ts +2 -0
  1364. package/dist/surfaces/__tests__/claude-skill-pointer-drift.test.d.ts.map +1 -0
  1365. package/dist/surfaces/__tests__/claude-skill-pointer-drift.test.js +179 -0
  1366. package/dist/surfaces/__tests__/claude-skill-pointer-drift.test.js.map +1 -0
  1367. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  1368. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  1369. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  1370. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  1371. package/dist/surfaces/adapter.d.ts +70 -0
  1372. package/dist/surfaces/adapter.d.ts.map +1 -0
  1373. package/dist/surfaces/adapter.js +2 -0
  1374. package/dist/surfaces/adapter.js.map +1 -0
  1375. package/dist/surfaces/adapters/claude.d.ts +3 -0
  1376. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  1377. package/dist/surfaces/adapters/claude.js +72 -0
  1378. package/dist/surfaces/adapters/claude.js.map +1 -0
  1379. package/dist/surfaces/adapters/codex.d.ts +3 -0
  1380. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  1381. package/dist/surfaces/adapters/codex.js +61 -0
  1382. package/dist/surfaces/adapters/codex.js.map +1 -0
  1383. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  1384. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  1385. package/dist/surfaces/adapters/copilot.js +59 -0
  1386. package/dist/surfaces/adapters/copilot.js.map +1 -0
  1387. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  1388. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  1389. package/dist/surfaces/adapters/cursor.js +78 -0
  1390. package/dist/surfaces/adapters/cursor.js.map +1 -0
  1391. package/dist/surfaces/registry.d.ts +58 -2
  1392. package/dist/surfaces/registry.d.ts.map +1 -1
  1393. package/dist/surfaces/registry.js +82 -7
  1394. package/dist/surfaces/registry.js.map +1 -1
  1395. package/dist/surfaces/telemetry.d.ts +17 -0
  1396. package/dist/surfaces/telemetry.d.ts.map +1 -0
  1397. package/dist/surfaces/telemetry.js +31 -0
  1398. package/dist/surfaces/telemetry.js.map +1 -0
  1399. package/package.json +9 -5
  1400. package/dist/__tests__/audit.test.d.ts +0 -2
  1401. package/dist/__tests__/audit.test.d.ts.map +0 -1
  1402. package/dist/__tests__/audit.test.js +0 -394
  1403. package/dist/__tests__/audit.test.js.map +0 -1
  1404. package/dist/__tests__/authority-domains.test.d.ts +0 -2
  1405. package/dist/__tests__/authority-domains.test.d.ts.map +0 -1
  1406. package/dist/__tests__/authority-domains.test.js +0 -48
  1407. package/dist/__tests__/authority-domains.test.js.map +0 -1
  1408. package/dist/__tests__/promote.test.d.ts +0 -2
  1409. package/dist/__tests__/promote.test.d.ts.map +0 -1
  1410. package/dist/__tests__/promote.test.js +0 -230
  1411. package/dist/__tests__/promote.test.js.map +0 -1
  1412. package/dist/__tests__/proposals.test.d.ts +0 -2
  1413. package/dist/__tests__/proposals.test.d.ts.map +0 -1
  1414. package/dist/__tests__/proposals.test.js +0 -167
  1415. package/dist/__tests__/proposals.test.js.map +0 -1
  1416. package/dist/__tests__/setup-ingest.test.d.ts +0 -2
  1417. package/dist/__tests__/setup-ingest.test.d.ts.map +0 -1
  1418. package/dist/__tests__/setup-ingest.test.js +0 -55
  1419. package/dist/__tests__/setup-ingest.test.js.map +0 -1
  1420. package/dist/__tests__/setup-resolver.test.d.ts +0 -14
  1421. package/dist/__tests__/setup-resolver.test.d.ts.map +0 -1
  1422. package/dist/__tests__/setup-resolver.test.js +0 -228
  1423. package/dist/__tests__/setup-resolver.test.js.map +0 -1
  1424. package/dist/__tests__/setup.test.d.ts +0 -2
  1425. package/dist/__tests__/setup.test.d.ts.map +0 -1
  1426. package/dist/__tests__/setup.test.js +0 -141
  1427. package/dist/__tests__/setup.test.js.map +0 -1
  1428. package/dist/commands/accept.d.ts +0 -18
  1429. package/dist/commands/accept.d.ts.map +0 -1
  1430. package/dist/commands/accept.js +0 -76
  1431. package/dist/commands/accept.js.map +0 -1
  1432. package/dist/commands/audit.d.ts +0 -25
  1433. package/dist/commands/audit.d.ts.map +0 -1
  1434. package/dist/commands/audit.js +0 -188
  1435. package/dist/commands/audit.js.map +0 -1
  1436. package/dist/commands/authority-domains.d.ts +0 -140
  1437. package/dist/commands/authority-domains.d.ts.map +0 -1
  1438. package/dist/commands/authority-domains.js +0 -268
  1439. package/dist/commands/authority-domains.js.map +0 -1
  1440. package/dist/commands/method.d.ts +0 -99
  1441. package/dist/commands/method.d.ts.map +0 -1
  1442. package/dist/commands/method.js +0 -781
  1443. package/dist/commands/method.js.map +0 -1
  1444. package/dist/commands/migrate-setup.d.ts +0 -18
  1445. package/dist/commands/migrate-setup.d.ts.map +0 -1
  1446. package/dist/commands/migrate-setup.js +0 -198
  1447. package/dist/commands/migrate-setup.js.map +0 -1
  1448. package/dist/commands/promote.d.ts +0 -12
  1449. package/dist/commands/promote.d.ts.map +0 -1
  1450. package/dist/commands/promote.js +0 -113
  1451. package/dist/commands/promote.js.map +0 -1
  1452. package/dist/commands/proposals.d.ts +0 -9
  1453. package/dist/commands/proposals.d.ts.map +0 -1
  1454. package/dist/commands/proposals.js +0 -24
  1455. package/dist/commands/proposals.js.map +0 -1
  1456. package/dist/commands/reject.d.ts +0 -14
  1457. package/dist/commands/reject.d.ts.map +0 -1
  1458. package/dist/commands/reject.js +0 -43
  1459. package/dist/commands/reject.js.map +0 -1
  1460. package/dist/commands/setup-ingest.d.ts +0 -17
  1461. package/dist/commands/setup-ingest.d.ts.map +0 -1
  1462. package/dist/commands/setup-ingest.js +0 -224
  1463. package/dist/commands/setup-ingest.js.map +0 -1
  1464. package/dist/commands/setup-resolver.d.ts +0 -58
  1465. package/dist/commands/setup-resolver.d.ts.map +0 -1
  1466. package/dist/commands/setup-resolver.js +0 -150
  1467. package/dist/commands/setup-resolver.js.map +0 -1
  1468. package/dist/commands/setup.d.ts +0 -15
  1469. package/dist/commands/setup.d.ts.map +0 -1
  1470. package/dist/commands/setup.js +0 -148
  1471. package/dist/commands/setup.js.map +0 -1
  1472. package/dist/formatters/audit.d.ts +0 -46
  1473. package/dist/formatters/audit.d.ts.map +0 -1
  1474. package/dist/formatters/audit.js +0 -81
  1475. package/dist/formatters/audit.js.map +0 -1
  1476. package/dist/formatters/promote.d.ts +0 -30
  1477. package/dist/formatters/promote.d.ts.map +0 -1
  1478. package/dist/formatters/promote.js +0 -39
  1479. package/dist/formatters/promote.js.map +0 -1
  1480. package/dist/formatters/proposals.d.ts +0 -45
  1481. package/dist/formatters/proposals.d.ts.map +0 -1
  1482. package/dist/formatters/proposals.js +0 -62
  1483. package/dist/formatters/proposals.js.map +0 -1
  1484. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  1485. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  1486. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  1487. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  1488. package/dist/generators/archetypes.d.ts +0 -52
  1489. package/dist/generators/archetypes.d.ts.map +0 -1
  1490. package/dist/generators/archetypes.js +0 -153
  1491. package/dist/generators/archetypes.js.map +0 -1
  1492. package/dist/generators/archetypes.test.d.ts +0 -2
  1493. package/dist/generators/archetypes.test.d.ts.map +0 -1
  1494. package/dist/generators/archetypes.test.js +0 -237
  1495. package/dist/generators/archetypes.test.js.map +0 -1
  1496. package/dist/generators/chain-classifier.d.ts +0 -49
  1497. package/dist/generators/chain-classifier.d.ts.map +0 -1
  1498. package/dist/generators/chain-classifier.js +0 -180
  1499. package/dist/generators/chain-classifier.js.map +0 -1
  1500. package/dist/generators/chain-classifier.test.d.ts +0 -2
  1501. package/dist/generators/chain-classifier.test.d.ts.map +0 -1
  1502. package/dist/generators/chain-classifier.test.js +0 -257
  1503. package/dist/generators/chain-classifier.test.js.map +0 -1
  1504. package/dist/generators/chain-rules.d.ts +0 -42
  1505. package/dist/generators/chain-rules.d.ts.map +0 -1
  1506. package/dist/generators/chain-rules.js +0 -144
  1507. package/dist/generators/chain-rules.js.map +0 -1
  1508. package/dist/generators/chain-rules.test.d.ts +0 -2
  1509. package/dist/generators/chain-rules.test.d.ts.map +0 -1
  1510. package/dist/generators/chain-rules.test.js +0 -179
  1511. package/dist/generators/chain-rules.test.js.map +0 -1
  1512. package/dist/generators/handshake-diff.d.ts +0 -67
  1513. package/dist/generators/handshake-diff.d.ts.map +0 -1
  1514. package/dist/generators/handshake-diff.js +0 -183
  1515. package/dist/generators/handshake-diff.js.map +0 -1
  1516. package/dist/generators/handshake-diff.test.d.ts +0 -2
  1517. package/dist/generators/handshake-diff.test.d.ts.map +0 -1
  1518. package/dist/generators/handshake-diff.test.js +0 -264
  1519. package/dist/generators/handshake-diff.test.js.map +0 -1
  1520. package/dist/lib/activation.d.ts +0 -28
  1521. package/dist/lib/activation.d.ts.map +0 -1
  1522. package/dist/lib/activation.js +0 -57
  1523. package/dist/lib/activation.js.map +0 -1
  1524. package/dist/lib/activation.test.d.ts +0 -6
  1525. package/dist/lib/activation.test.d.ts.map +0 -1
  1526. package/dist/lib/activation.test.js +0 -121
  1527. package/dist/lib/activation.test.js.map +0 -1
  1528. package/dist/lib/inferSourceDate.d.ts +0 -12
  1529. package/dist/lib/inferSourceDate.d.ts.map +0 -1
  1530. package/dist/lib/inferSourceDate.js +0 -44
  1531. package/dist/lib/inferSourceDate.js.map +0 -1
  1532. package/dist/lib/onboarding-phases.d.ts +0 -9
  1533. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  1534. package/dist/lib/onboarding-phases.js +0 -120
  1535. package/dist/lib/onboarding-phases.js.map +0 -1
  1536. package/templates/archetypes/boundary.md +0 -23
  1537. package/templates/archetypes/constraint.md +0 -23
  1538. package/templates/archetypes/convention.md +0 -23
  1539. package/templates/archetypes/policy.md +0 -23
  1540. package/templates/archetypes/quality-gate.md +0 -23
  1541. package/templates/archetypes/workflow.md +0 -23
@@ -1,31 +1,45 @@
1
1
  /**
2
2
  * pb handshake — generate context files for AI developer tools.
3
- * The fourth delivery surface: context export (GLO-63, DEC-161).
3
+ * Context export wiring (read-only filesystem bridge; GLO-63, DEC-161) — not a product surface.
4
4
  */
5
- import { mkdirSync, writeFileSync, existsSync, readFileSync, readdirSync, copyFileSync } from 'fs';
6
- import { join, dirname, resolve } from 'path';
5
+ import { mkdirSync, writeFileSync, existsSync, readFileSync, readdirSync, copyFileSync, realpathSync } from 'fs';
6
+ import { join, dirname, resolve, basename, relative, sep } from 'path';
7
7
  import { homedir } from 'os';
8
8
  import { fileURLToPath } from 'url';
9
- import { createHash } from 'crypto';
9
+ import { execSync } from 'child_process';
10
10
  import { getConfigOrGuide } from '../lib/config.js';
11
- import { select as promptSelect } from '../lib/prompts.js';
11
+ import { select as promptSelect, confirm as promptConfirm } from '../lib/prompts.js';
12
12
  import { composeHooksFromIntents, getHookStatusForSurface } from '../lib/hook-intents.js';
13
- import { kernelCall, kernelCallWithSession } from '../lib/client.js';
13
+ import { kernelCall } from '../lib/client.js';
14
14
  import { readSession } from '../lib/session.js';
15
15
  import { detectRepo, extractWorkspaceProfile } from '../lib/repo-detect.js';
16
16
  import { generateContextMd } from '../generators/context-md.js';
17
17
  import { generateBriefingMd } from '../generators/briefing-md.js';
18
- import { MARKER, generateAgentsMd, generateClaudeMd, generateCursorMdc, generateCopilotMd } from '../generators/adapters.js';
19
- import { readCanonicalSkills, readCanonicalRules, readPersonalLayer, readPersonalSkillsLayer, generateCursorSkill, generateCursorRule, generateCodexSkill, generateCodexSkillIndex, generateClaudeRule, generateClaudeSkillRouter, shouldEmitToTarget, filterByLevel, validateCodexSkills, evaluateConditions, STAGE_TO_MAX_LEVEL, LEVEL_ORDER, } from '../generators/portable-knowledge.js';
20
- import { generateChainRules } from '../generators/chain-rules.js';
21
- import { saveHandshakeState, loadPreviousState, diffHandshakeState, formatDiff, buildCurrentState, } from '../generators/handshake-diff.js';
18
+ import { MARKER, generateAgentsMd, generateClaudeMd, generateCursorMdc, generateCopilotMd, generateCopilotInstructionFiles } from '../generators/adapters.js';
19
+ import { readCanonicalSkills, readCanonicalRules, readPersonalLayer, readPersonalSkillsLayer, generateCursorSkill, generateCursorRule, generateCodexSkill, generateCodexSkillIndex, shouldEmitToTarget, filterByLevel, validateCodexSkills, evaluateConditions, } from '../generators/portable-knowledge.js';
20
+ import { findNoProjectionAssets } from '../generators/noProjectionAssets.js'; // WP-660 S2 combine
22
21
  import { resolveSurfaceProfile } from '../generators/surface-profiles.js';
22
+ import { generateEveryoneRulesMd } from '../generators/everyone-rules-md.js';
23
+ import { removeStaleBriefingProjections, retireGeneratedProjections } from '../generators/retired-projections.js';
24
+ import { formatWorkspaceBriefingLines } from '../lib/ruleListRender.js';
23
25
  import { formatHandshakeReport } from '../formatters/handshake.js';
24
- import { readManifest, filterByAdoptionState } from '../generators/manifest.js';
26
+ import { classifyAdapterFile, detectEol, spliceAppend, spliceReplace } from '../generators/region.js';
27
+ import { REGION_PROJECTIONS } from '../generators/region-projections.js';
28
+ import { readManifest, readManifestStatus, filterByAdoptionState } from '../generators/manifest.js';
25
29
  import { generateBoundaryManifest, getBoundaryEnforcementMode } from '../generators/boundary-manifest.js';
26
30
  import { loadMethodRegistry } from '../lib/method-registry.js';
27
31
  import { CLIError, ErrorCode } from '../lib/errors.js';
28
- import { trackEvent } from '../lib/telemetry.js';
32
+ import { isJsonMode } from '../lib/runner.js';
33
+ import { stripConvexInternals } from '../lib/strip.js';
34
+ import { replaceVocabTokens } from '../lib/canonicalRefs.js';
35
+ // WP-436 S3: vocab projector — resolves {{vocab:...}} tokens before writing to disk.
36
+ import { getOrFetchVocabCtx } from '../lib/workspaceVocabCache.js';
37
+ import { normalizeMaterializedFilename } from '../lib/normalizeMaterializedFilename.js';
38
+ import { findLeftoverCursorSkills, LEFTOVER_FILES_MAX } from './handshakeCursorSkillCleanup.js';
39
+ import { classifyDriftBucket } from './handshakeDriftClassification.js';
40
+ import { sanitizeStartupResolutionSignals } from '../lib/startup-resolution-signals.js';
41
+ import { assertSetupWritePath } from '../lib/writePerimeter.js';
42
+ import { SURFACE_GOVERN_NO_SURFACES, SURFACE_REGISTRY, validateSurfacesForMode, } from '../surfaces/registry.js';
29
43
  const LEVELS = {
30
44
  guide: {
31
45
  label: 'Guide me',
@@ -54,8 +68,7 @@ const LEVELS = {
54
68
  };
55
69
  // Explicit ordering — determines menu numbering in promptLevel(). Do not reorder.
56
70
  const LEVEL_KEYS = ['guide', 'work', 'silent', 'full-trust'];
57
- // Hook failure contract (TEN-712): all hook commands MUST end with '2>/dev/null || true'
58
- // so Claude Code always starts even if pb is unavailable. Never remove this suffix.
71
+ // Hook failure contract (TEN-712): every hook command MUST end with '|| true' so Claude Code always starts even if pb is unavailable.
59
72
  const INIT_PERMISSION = 'Bash(pb:*)';
60
73
  function readSettings(filePath) {
61
74
  if (!existsSync(filePath))
@@ -156,8 +169,7 @@ export async function runHandshakeInit(options = {}) {
156
169
  for (const item of teamAdded)
157
170
  console.log(` + ${item}`);
158
171
  }
159
- // Step 2: Personal config — wizard or --level flag
160
- // Cast is safe: LEVEL_KEYS.includes() validated above; invalid level already threw CLIError.
172
+ // Step 2: Personal config — wizard or --level flag. Cast is safe: LEVEL_KEYS.includes() validated above.
161
173
  const levelKey = options.level ? options.level : await promptLevel();
162
174
  const level = LEVELS[levelKey];
163
175
  const personalAdded = writePersonalSettings(levelKey, dryRun);
@@ -179,11 +191,7 @@ export async function runHandshakeInit(options = {}) {
179
191
  if (!dryRun)
180
192
  console.log('Reload /hooks in Claude Code (or restart) to activate.');
181
193
  console.log('Run `pb handshake --init --level <guide|work|silent|full-trust>` to change level.');
182
- // Step 2b: Report multi-surface hook opt-in status (WP-310 E3b)
183
- // Reads manifest.hooks.{cursor,copilot} and prints an informational note for
184
- // each opted-in surface. Silence = no manifest or no hooks flags set.
185
- // DEC-536: Claude-native default is already wired above; this block only fires
186
- // when the user has explicitly opted in via manifest.
194
+ // Step 2b: Report multi-surface hook opt-in status (WP-310 E3b) — manifest.hooks.{cursor,copilot}, silence = no manifest/flags (DEC-536).
187
195
  const pbDirForManifest = join(cwd, '.productbrain');
188
196
  const initManifest = readManifest(pbDirForManifest);
189
197
  const multiSurfaceOptIns = [];
@@ -252,24 +260,237 @@ export async function runHandshakeInit(options = {}) {
252
260
  }
253
261
  }
254
262
  }
255
- /**
256
- * Normalize volatile handshake-only timestamps before comparing generated files.
257
- * This keeps the visible timestamps in generated artifacts while avoiding
258
- * meaningless rewrites when semantic content is unchanged.
259
- */
263
+ const LOCAL_REF_REGEX = /\b(?:WP|TEN|DEC|BET|FEAT|INS|STD|PRI|ARCH)[-\s#]*\d+\b|\bPR\s*#?\s*\d+\b/gi;
264
+ const STARTUP_RESOLUTION_RESOLVER_VERSION = 'startup-resolution-v1';
265
+ // Global cap on collected refs (spec "Contract: StartupResolutionSignals" — arrays are capped).
266
+ const LOCAL_REF_GLOBAL_CAP = 25;
267
+ // Per-source cap so a broad source (context.md) can't starve briefing.md's task-specific refs (Codex@677).
268
+ const LOCAL_REF_PER_SOURCE_CAP = 18;
269
+ // Time-boxed so an unauthed/slow `gh` can't stall session-start (F4).
270
+ const PR_DIFF_TIMEOUT_MS = 4_000;
271
+ // Bounds worst-case `gh` subprocess invocations per handshake.
272
+ const PR_DIFF_MAX_REFS = 5;
273
+ function runGitText(cwd, command) {
274
+ try {
275
+ const value = execSync(command, {
276
+ cwd,
277
+ encoding: 'utf8',
278
+ stdio: ['ignore', 'pipe', 'ignore'],
279
+ }).trim();
280
+ return value.length > 0 ? value : undefined;
281
+ }
282
+ catch {
283
+ return undefined;
284
+ }
285
+ }
286
+ /** Dereference a "PR #N" ref to its changed paths via `gh pr diff <N> --name-only` (F4: server
287
+ * resolver has no git/gh access). Guarded/time-boxed; `run` is injectable for tests. */
288
+ export function dereferencePrRefToPaths(cwd, prNumber, run = runGitTextTimeboxed) {
289
+ if (!Number.isInteger(prNumber) || prNumber <= 0)
290
+ return [];
291
+ const raw = run(cwd, `gh pr diff ${prNumber} --name-only`, PR_DIFF_TIMEOUT_MS);
292
+ if (!raw)
293
+ return [];
294
+ return raw.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
295
+ }
296
+ /** Time-boxed variant of runGitText for the PR-diff dereference (F4). */
297
+ function runGitTextTimeboxed(cwd, command, timeoutMs) {
298
+ try {
299
+ const value = execSync(command, {
300
+ cwd,
301
+ encoding: 'utf8',
302
+ stdio: ['ignore', 'pipe', 'ignore'],
303
+ timeout: timeoutMs,
304
+ }).trim();
305
+ return value.length > 0 ? value : undefined;
306
+ }
307
+ catch {
308
+ return undefined;
309
+ }
310
+ }
311
+ function readOptionalLocalText(cwd, path) {
312
+ const fullPath = join(cwd, path);
313
+ if (!existsSync(fullPath))
314
+ return undefined;
315
+ try {
316
+ return readFileSync(fullPath, 'utf8');
317
+ }
318
+ catch {
319
+ return undefined;
320
+ }
321
+ }
322
+ function normalizeLocalRef(ref) {
323
+ const trimmed = ref.trim().replace(/\s+/g, ' ');
324
+ const pr = trimmed.match(/^PR\s*#?\s*(\d+)$/i);
325
+ if (pr)
326
+ return `PR #${pr[1]}`;
327
+ const entry = trimmed.match(/^([A-Z]+)[-\s#]*(\d+)$/i);
328
+ if (entry)
329
+ return `${entry[1].toUpperCase()}-${entry[2]}`;
330
+ return trimmed;
331
+ }
332
+ /** Collect normalized local refs across several text sources, deduped. Codex@677: a per-source
333
+ * cap alongside the global one, so a broad source (context.md) can't starve a later,
334
+ * task-specific source (briefing.md); already-collected refs dedupe without spending later quota. */
335
+ function collectLocalRefs(texts) {
336
+ const refs = [];
337
+ const seen = new Set();
338
+ for (const text of texts) {
339
+ if (!text)
340
+ continue;
341
+ let fromThisSource = 0;
342
+ for (const match of text.matchAll(LOCAL_REF_REGEX)) {
343
+ const ref = normalizeLocalRef(match[0]);
344
+ const key = ref.toLowerCase();
345
+ if (seen.has(key))
346
+ continue;
347
+ if (fromThisSource >= LOCAL_REF_PER_SOURCE_CAP)
348
+ break;
349
+ seen.add(key);
350
+ refs.push(ref);
351
+ fromThisSource++;
352
+ if (refs.length >= LOCAL_REF_GLOBAL_CAP)
353
+ return refs;
354
+ }
355
+ }
356
+ return refs;
357
+ }
358
+ function deriveHandshakeStartupTask(refs, changedPaths, callerTask) {
359
+ if (callerTask && callerTask.trim())
360
+ return callerTask.trim();
361
+ const parts = [];
362
+ if (refs.length > 0)
363
+ parts.push(refs.join(' '));
364
+ if (changedPaths.length > 0)
365
+ parts.push(`changed paths ${changedPaths.slice(0, 5).join(' ')}`);
366
+ return parts.length > 0 ? parts.join(' ') : undefined;
367
+ }
368
+ const DEFAULT_HANDSHAKE_SIGNAL_DEPS = {
369
+ runGit: runGitText,
370
+ prDiff: (cwd, prNumber) => dereferencePrRefToPaths(cwd, prNumber),
371
+ };
372
+ /** Extract the PR number from a normalized "PR #N" ref, else null. */
373
+ function prNumberFromRef(ref) {
374
+ const m = ref.match(/^PR\s*#?\s*(\d+)$/i);
375
+ if (!m)
376
+ return null;
377
+ const n = Number(m[1]);
378
+ return Number.isInteger(n) && n > 0 ? n : null;
379
+ }
380
+ export function deriveHandshakeStartupSignals(cwd, callerSignals = {}, deps = DEFAULT_HANDSHAKE_SIGNAL_DEPS) {
381
+ const { runGit, prDiff } = deps;
382
+ const branchName = runGit(cwd, 'git branch --show-current');
383
+ const commitSha = runGit(cwd, 'git rev-parse --short HEAD');
384
+ // Changed paths, unioned + deduped: (1) dirty worktree; (2) committed branch delta vs origin/main's
385
+ // merge-base (Codex@665, invisible once the tree is clean); (3) PR-ref dereference (F4), appended later.
386
+ const dirtyChangedPaths = runGit(cwd, 'git diff --name-only HEAD')?.split(/\r?\n/).filter(Boolean) ?? [];
387
+ const mergeBase = runGit(cwd, 'git merge-base HEAD origin/main');
388
+ const branchChangedPaths = mergeBase
389
+ ? (runGit(cwd, `git diff --name-only ${mergeBase} HEAD`)?.split(/\r?\n/).filter(Boolean) ?? [])
390
+ : [];
391
+ const worktreeName = basename(cwd);
392
+ const contextText = readOptionalLocalText(cwd, '.productbrain/context.md');
393
+ const briefingText = readOptionalLocalText(cwd, '.productbrain/briefing.md');
394
+ const callerRefs = Array.isArray(callerSignals.reviewedArtifactRefs) ? callerSignals.reviewedArtifactRefs.join('\n') : undefined;
395
+ // Codex@677: briefing.md (task-specific) reads BEFORE context.md (broad) so its refs collect first — with the per-source cap, context.md can't starve briefing.
396
+ const refs = collectLocalRefs([
397
+ callerSignals.taskText ?? undefined,
398
+ callerSignals.explicitScope ?? undefined,
399
+ callerRefs,
400
+ branchName,
401
+ worktreeName,
402
+ briefingText,
403
+ contextText,
404
+ ]);
405
+ // F4: dereference "PR #N" refs to diff paths, folded into changedPaths — the only place this can happen (server records dereferenced:false, no git access). Time-boxed; absent/unauthed gh no-ops.
406
+ const prDiffPaths = [];
407
+ if (callerSignals.changedPaths === undefined) {
408
+ let derefed = 0;
409
+ for (const ref of refs) {
410
+ const prNumber = prNumberFromRef(ref);
411
+ if (prNumber === null)
412
+ continue;
413
+ if (derefed >= PR_DIFF_MAX_REFS)
414
+ break;
415
+ derefed++;
416
+ try {
417
+ for (const p of prDiff(cwd, prNumber))
418
+ prDiffPaths.push(p);
419
+ }
420
+ catch {
421
+ // gh absent / unauthed / PR missing — skip gracefully, leave existing behavior.
422
+ }
423
+ }
424
+ }
425
+ // Caller-supplied changedPaths win (backward compat); otherwise union the
426
+ // three local sources, deduped, order-stable.
427
+ const unionedChangedPaths = callerSignals.changedPaths ??
428
+ Array.from(new Set([...dirtyChangedPaths, ...branchChangedPaths, ...prDiffPaths]));
429
+ const baseSignals = sanitizeStartupResolutionSignals({
430
+ ...callerSignals,
431
+ sourceSurface: callerSignals.sourceSurface ?? 'cli',
432
+ resolverVersion: callerSignals.resolverVersion ?? STARTUP_RESOLUTION_RESOLVER_VERSION,
433
+ branchName: callerSignals.branchName ?? branchName,
434
+ worktreeName: callerSignals.worktreeName ?? worktreeName,
435
+ changedPaths: unionedChangedPaths,
436
+ reviewedArtifactRefs: callerSignals.reviewedArtifactRefs ?? refs,
437
+ commitSha: callerSignals.commitSha ?? commitSha,
438
+ });
439
+ const taskText = deriveHandshakeStartupTask(baseSignals.reviewedArtifactRefs ?? [], baseSignals.changedPaths ?? [], baseSignals.taskText);
440
+ const sanitized = sanitizeStartupResolutionSignals({
441
+ ...baseSignals,
442
+ taskText,
443
+ });
444
+ const hasMeaningfulEvidence = Boolean(sanitized.taskText) ||
445
+ (sanitized.changedPaths?.length ?? 0) > 0 ||
446
+ (sanitized.reviewedArtifactRefs?.length ?? 0) > 0 ||
447
+ Boolean(sanitized.explicitScope);
448
+ if (hasMeaningfulEvidence)
449
+ return sanitized;
450
+ // Codex@704: even with no evidence, emit a minimal envelope carrying attribution — {} would
451
+ // drop the whole startup block, losing the loud domain-unresolved signal (spec "Loud Unresolved State", AC #4).
452
+ return sanitizeStartupResolutionSignals({
453
+ sourceSurface: sanitized.sourceSurface ?? 'cli',
454
+ resolverVersion: sanitized.resolverVersion ?? STARTUP_RESOLUTION_RESOLVER_VERSION,
455
+ branchName: sanitized.branchName,
456
+ worktreeName: sanitized.worktreeName,
457
+ commitSha: sanitized.commitSha,
458
+ changeId: sanitized.changeId,
459
+ });
460
+ }
461
+ /** Normalize volatile handshake-only timestamps before comparing generated files — keeps visible
462
+ * timestamps in artifacts while avoiding meaningless rewrites when content is unchanged. */
260
463
  export function normalizeHandshakeContentForComparison(content) {
261
464
  return content
262
465
  .replace(/<!-- auto-generated by pb handshake — [0-9]{4}-[0-9]{2}-[0-9]{2}T[^>]+ -->/g, '<!-- auto-generated by pb handshake — <TIMESTAMP> -->')
263
466
  .replace(/^_Generated: [0-9]{4}-[0-9]{2}-[0-9]{2}T.*_$/gm, '_Generated: <TIMESTAMP>_');
264
467
  }
265
468
  function shouldWriteAdapter(filePath, force) {
266
- if (force)
267
- return true;
469
+ // An absent file at an adapter path is a projection target → materialize it.
268
470
  if (!existsSync(filePath))
269
471
  return true;
270
472
  const content = readFileSync(filePath, 'utf8');
473
+ // No MARKER → user-owned/committed-static (CLAUDE.md, AGENTS.md, Copilot instructions) — never overwritten, not even under --force.
474
+ void force;
271
475
  return content.includes(MARKER);
272
476
  }
477
+ function normalizeSurfaceName(surface) {
478
+ const stripped = surface.startsWith('.') ? surface.slice(1) : surface;
479
+ const normalized = stripped === 'github' ? 'copilot' : stripped;
480
+ return normalized in SURFACE_REGISTRY ? normalized : null;
481
+ }
482
+ function surfacePerimeterRoots(surface) {
483
+ if (surface === 'codex')
484
+ return ['.codex', SURFACE_REGISTRY.codex.hookFilePath];
485
+ if (surface === 'copilot')
486
+ return ['.github', SURFACE_REGISTRY.copilot.hookFilePath];
487
+ if (surface === 'claude')
488
+ return ['.claude', 'CLAUDE.md'];
489
+ return [`.${surface}`];
490
+ }
491
+ // ── WP-421 S3: Three-bucket drift classification (doneWhen #17) — now its own module (STD-2/DEC-1504
492
+ // shrink-only offset). Re-exported so existing imports `from '../commands/handshake.js'` keep working.
493
+ export { classifyDriftBucket };
273
494
  function deduplicateEntries(entries) {
274
495
  const seen = new Set();
275
496
  const result = [];
@@ -282,23 +503,133 @@ function deduplicateEntries(entries) {
282
503
  }
283
504
  return result;
284
505
  }
506
+ /**
507
+ * findLeftoverProjections — WP-379 S5b
508
+ *
509
+ * Lists marker-bearing files under .cursor/rules/, .claude/rules/, .claude/skills/, .codex/skills/
510
+ * (plus the nested .cursor/skills/<name>/SKILL.md layout) that look stale: orphan (no canonical
511
+ * asset), stale case/punctuation variant, or a leftover `.dormant` copy. User-owned (no MARKER)
512
+ * files and unselected `allowedTargets` are never reported.
513
+ *
514
+ * Round 12: stops once `LEFTOVER_FILES_MAX + 1` matches are found across the flat + merged
515
+ * nested-Cursor scan combined — bounds read/enumerate I/O, not just the reported list.
516
+ * `truncated` says more exist beyond the capped, returned `files`.
517
+ *
518
+ * @param cursorSkillNames Cursor-specific, SKILL-kind-only canon (falls back to `assetNames`).
519
+ * @param exactRelativePaths Round 11: exact write-plan paths (forward-slash), exempted from both
520
+ * checks — covers asset-less generated files and a canonical raw name not already normalized.
521
+ */
522
+ export function findLeftoverProjections(cwd, assetNames, allowedTargets, cursorSkillNames, exactRelativePaths) {
523
+ const TARGET_DIRS_BY_EXT = [
524
+ { dir: join(cwd, '.cursor', 'rules'), ext: '.mdc', surface: 'cursor' },
525
+ { dir: join(cwd, '.claude', 'rules'), ext: '.md', surface: 'claude' },
526
+ { dir: join(cwd, '.claude', 'skills'), ext: '.md', surface: 'claude' },
527
+ { dir: join(cwd, '.codex', 'skills'), ext: '.md', surface: 'codex' },
528
+ ];
529
+ const canonicalNormalizedStems = new Set(assetNames.map((n) => normalizeMaterializedFilename(n)));
530
+ const exactPaths = exactRelativePaths ?? new Set();
531
+ const leftovers = [];
532
+ let truncated = false;
533
+ scanLoop: for (const { dir, ext, surface } of TARGET_DIRS_BY_EXT) {
534
+ if (!allowedTargets.has(surface))
535
+ continue;
536
+ if (!existsSync(dir))
537
+ continue;
538
+ let files;
539
+ try {
540
+ files = readdirSync(dir);
541
+ }
542
+ catch {
543
+ continue; // unreadable dir — skip
544
+ }
545
+ for (const filename of files) {
546
+ if (!filename.endsWith(ext) && !filename.endsWith(`${ext}.dormant`))
547
+ continue;
548
+ const fullPath = join(dir, filename);
549
+ let content;
550
+ try {
551
+ content = readFileSync(fullPath, 'utf8');
552
+ }
553
+ catch {
554
+ continue; // unreadable file — skip
555
+ }
556
+ if (!content.includes(MARKER))
557
+ continue; // user-owned — never reported
558
+ const isDormant = filename.endsWith('.dormant');
559
+ // A live file the write plan targets by this exact path is canonical by construction.
560
+ if (!isDormant) {
561
+ const relativePath = relative(cwd, fullPath).split(sep).join('/');
562
+ if (exactPaths.has(relativePath))
563
+ continue;
564
+ }
565
+ const stem = basename(isDormant ? filename.slice(0, -'.dormant'.length) : filename, ext);
566
+ const normalizedStem = normalizeMaterializedFilename(stem);
567
+ let entry = null;
568
+ if (!canonicalNormalizedStems.has(normalizedStem)) {
569
+ entry = { path: fullPath, reason: 'orphan — no canonical asset matches this name' };
570
+ }
571
+ else if (isDormant) {
572
+ entry = { path: fullPath, reason: 'leftover .dormant file from an older binary version' };
573
+ }
574
+ else if (stem !== normalizedStem) {
575
+ entry = { path: fullPath, reason: `stale case/punctuation variant — canonical form is "${normalizedStem}${ext}"` };
576
+ }
577
+ if (!entry)
578
+ continue;
579
+ leftovers.push(entry);
580
+ if (leftovers.length > LEFTOVER_FILES_MAX) {
581
+ truncated = true;
582
+ leftovers.pop();
583
+ break scanLoop;
584
+ }
585
+ }
586
+ }
587
+ // Nested Cursor skills — extracted to its own module (STD-2/DEC-1504 shrink-only offset).
588
+ // Skipped once the flat scan already hit the cap; the remaining budget keeps the combined
589
+ // total across both scans stopping at LEFTOVER_FILES_MAX + 1.
590
+ if (!truncated && allowedTargets.has('cursor')) {
591
+ const nested = findLeftoverCursorSkills(cwd, cursorSkillNames ?? assetNames, LEFTOVER_FILES_MAX - leftovers.length);
592
+ leftovers.push(...nested.files);
593
+ truncated = nested.truncated;
594
+ }
595
+ return { files: leftovers, truncated };
596
+ }
597
+ /** Round 13 (Codex P1, security): strips a `user:token@` userinfo segment from an https remote
598
+ * so a credential never reaches JSON output. SSH remotes (`git@host:...`) are untouched — that
599
+ * `git@` is a fixed public username, not a secret. */
600
+ function redactGitRemote(remote) {
601
+ return remote ? remote.replace(/^(https?:\/\/)[^@/]+@/i, '$1') : remote;
602
+ }
603
+ /** Round 13 (Codex P1, security): `pb --json handshake` serialized the report directly — leaking
604
+ * an HTTPS git-remote credential and raw Convex `_id`/`_creationTime` on `matchedEntries` (never
605
+ * went through the shared runner's `stripConvexInternals`). One public shape, both JSON paths. */
606
+ function toPublicJsonReport(report) {
607
+ return stripConvexInternals({ ...report, repo: { ...report.repo, gitRemote: redactGitRemote(report.repo.gitRemote) } });
608
+ }
609
+ /** TASK-554 (RULE-659): getOrientView always serves the briefing's facts; a view without them is a broken contract. */
610
+ function servedBriefing(view) {
611
+ if (view.briefing)
612
+ return view.briefing;
613
+ throw new CLIError('The orient view carried no briefing; getOrientView always serves one.', { code: ErrorCode.INTERNAL, category: 'internal' });
614
+ }
285
615
  export async function runHandshake(options = {}) {
286
- const config = await getConfigOrGuide(() => runHandshake(options));
616
+ const config = await getConfigOrGuide(async () => { await runHandshake(options); });
287
617
  if (!config)
288
- return;
618
+ return undefined;
289
619
  const cwd = process.cwd();
290
620
  const force = options.force ?? false;
291
621
  const dryRun = options.dryRun ?? false;
292
- // Preview mode: default when neither --apply nor --dry-run is passed.
293
- // --dry-run is kept as a backward-compat alias for preview (same behavior).
622
+ // Preview mode: default when neither --apply nor --dry-run is passed (--dry-run is a backward-compat alias).
294
623
  const preview = !options.apply && !dryRun;
295
624
  const applyMode = options.apply === true && !dryRun;
296
625
  const level = options.level;
626
+ // `quiet` gates the final report write (`--json` alone still prints). `suppressProgress`
627
+ // also silences stdout log() prose in JSON mode. logErr() stays on `quiet` alone (stderr).
297
628
  const quiet = options.quiet ?? false;
298
- const generate = options.generate ?? false;
629
+ const suppressProgress = quiet || isJsonMode();
299
630
  const timestamp = new Date().toISOString();
300
- // Helper: emit progress line only when not quiet (used when handshake is a sub-step)
301
- const log = (msg) => { if (!quiet)
631
+ // Helper: emit progress line only when not suppressed. logErr is gated on `quiet` alone.
632
+ const log = (msg) => { if (!suppressProgress)
302
633
  process.stdout.write(msg + '\n'); };
303
634
  const logErr = (msg) => { if (!quiet)
304
635
  process.stderr.write(msg + '\n'); };
@@ -317,6 +648,21 @@ export async function runHandshake(options = {}) {
317
648
  if (repo.detectedStack.length > 0) {
318
649
  log(`Stack: ${repo.detectedStack.join(', ')}`);
319
650
  }
651
+ const startupSignals = deriveHandshakeStartupSignals(cwd, options.startupSignals ?? {});
652
+ const orientArgs = { tier: 'standard' };
653
+ if (options.invocationPath)
654
+ orientArgs.invocationPath = options.invocationPath;
655
+ if (Object.keys(startupSignals).length > 0) {
656
+ orientArgs.startupSignals = startupSignals;
657
+ if (startupSignals.taskText)
658
+ orientArgs.task = startupSignals.taskText;
659
+ }
660
+ // Scopes the role rule lists this orient call returns to THIS session, not a sibling's.
661
+ const activeSession = readSession();
662
+ if (activeSession?.sessionId)
663
+ orientArgs.sessionId = activeSession.sessionId;
664
+ if (activeSession?.conversationId)
665
+ orientArgs.conversationId = activeSession.conversationId;
320
666
  // 2. Fetch orient view + workspace readiness in parallel (budget max +200ms added latency)
321
667
  log('Fetching workspace context...');
322
668
  let orientView = null;
@@ -324,7 +670,7 @@ export async function runHandshake(options = {}) {
324
670
  try {
325
671
  const workspaceReadinessPromise = kernelCall('chain.workspaceReadiness', {}).catch(() => null);
326
672
  const [orientResult, readinessRaw] = await Promise.all([
327
- kernelCall('chain.getOrientView', {}).catch((err) => {
673
+ kernelCall('chain.getOrientView', orientArgs).catch((err) => {
328
674
  logErr(`Warning: could not fetch workspace context — ${err instanceof Error ? err.message : err}`);
329
675
  logErr('Continuing with limited context (Chain search + portable knowledge only).');
330
676
  return null;
@@ -339,7 +685,7 @@ export async function runHandshake(options = {}) {
339
685
  logErr('Continuing with limited context (Chain search + portable knowledge only).');
340
686
  }
341
687
  if (workspaceProfile) {
342
- log(`Workspace profile: stage=${workspaceProfile.stage}, entries=${workspaceProfile.totalEntries}, governance=${workspaceProfile.governanceMode}`);
688
+ log(`Workspace profile: entries=${workspaceProfile.totalEntries}`);
343
689
  }
344
690
  // 3. Build search queries from repo context
345
691
  const searchQueries = [];
@@ -361,184 +707,56 @@ export async function runHandshake(options = {}) {
361
707
  const searchResults = await Promise.all(uniqueQueries.map((q) => kernelCall('chain.searchEntries', { query: q }).catch(() => [])));
362
708
  matchedEntries = deduplicateEntries(searchResults.flat());
363
709
  }
364
- // 5. Read canonical skills & rules — DB-first (WP-345 S0c, TEN-1459), FS fallback.
365
- // Primary: query setup.listAssetsForUser from DB (workspace SSOT).
366
- // Fallback: read from .productbrain/ filesystem (legacy — used when DB is empty or unavailable).
710
+ // 5. Read canonical skills & rules — DB-first (WP-345 S0c, TEN-1459): query setup.listAssetsForUser, FS fallback.
367
711
  const pbDir = join(cwd, '.productbrain');
368
- let dbSkills = [];
369
- let dbRules = [];
370
- let usedDbSource = false;
371
- let dbAssetRows = [];
372
- const dbProjectionHashes = new Map();
373
- try {
374
- const dbAssets = await kernelCall('setup.listAssetsForUser', {}).catch(() => null);
375
- if (dbAssets && dbAssets.length > 0) {
376
- dbAssetRows = dbAssets;
377
- // Map DB assets to CanonicalSkill/CanonicalRule shapes
378
- for (const asset of dbAssets) {
379
- if (asset.disabledByOwner)
380
- continue;
381
- if (asset.assetKind === 'skill') {
382
- dbSkills.push({
383
- name: asset.name,
384
- description: asset.description,
385
- triggers: asset.triggers ?? [],
386
- body: asset.body,
387
- sourcePath: `db:${asset.entryId}`,
388
- });
389
- }
390
- else if (asset.assetKind === 'rule' || asset.assetKind === 'hook') {
391
- dbRules.push({
392
- name: asset.name,
393
- description: asset.description,
394
- autoApply: false,
395
- body: asset.body,
396
- sourcePath: `db:${asset.entryId}`,
397
- });
398
- }
399
- }
400
- usedDbSource = true;
401
- log(`Setup assets: ${dbSkills.length} skills, ${dbRules.length} rules/hooks from DB (WP-345 DB-first path)`);
402
- }
712
+ const manifestStatus = readManifestStatus(pbDir);
713
+ const manifest = manifestStatus.manifest;
714
+ const surfaceValidation = validateSurfacesForMode(manifestStatus.mode, manifestStatus.surfaces);
715
+ if (applyMode && surfaceValidation.error === SURFACE_GOVERN_NO_SURFACES) {
716
+ throw new CLIError('materialize: govern requires at least one registered manifest surface.', {
717
+ code: ErrorCode.VALIDATION_FAILED,
718
+ category: 'validation',
719
+ guidance: 'Add surfaces such as `.cursor` or `.claude` to .productbrain/manifest.yaml.',
720
+ });
403
721
  }
404
- catch {
405
- // DB source unavailable — silently fall through to FS path
406
- }
407
- const allSkills = usedDbSource ? dbSkills : readCanonicalSkills(pbDir);
408
- const manualRules = usedDbSource ? dbRules : readCanonicalRules(pbDir);
409
- if (!usedDbSource) {
410
- log('Setup assets: reading from filesystem (DB source unavailable or empty)');
411
- }
412
- // 5a-pre. E4: Resolve semantic refs in DB assets (WP-345, DEC-A, DEC-C, DEC-K)
413
- // For each asset with semanticRefs[], resolve them via the Convex resolver and
414
- // replace {{ref:key}} placeholders in the body. Runs in apply mode only (not preview).
415
- // NG11: PostHog events fire from CLI side only (never inside Convex mutations).
416
- if (usedDbSource && applyMode) {
417
- const projectableDbAssets = dbAssetRows.filter((a) => !a.disabledByOwner && (a.assetKind === 'skill' || a.assetKind === 'rule' || a.assetKind === 'hook'));
418
- const assetsWithRefs = projectableDbAssets.filter((a) => a.semanticRefs && a.semanticRefs.length > 0);
419
- if (assetsWithRefs.length > 0) {
420
- log(`Resolving semantic refs for ${assetsWithRefs.length} asset(s)...`);
421
- // Collect unique ref keys across all assets
422
- const allRefKeys = [...new Set(assetsWithRefs.flatMap((a) => a.semanticRefs))];
423
- // Resolve all refs in a single batch call. Shape: SetupRefResolution[]
424
- // (DEC-767 / WP-354 Build-Order #6 — kind + status discriminator).
425
- let resolvedRefs = [];
426
- try {
427
- resolvedRefs = await kernelCall('setup.resolveSemanticRefs', { semanticRefs: allRefKeys });
428
- }
429
- catch (err) {
430
- trackEvent('setup.refs.resolve_failed', { error: err instanceof Error ? err.message : String(err) });
431
- logErr(`Warning: could not resolve semantic refs — ${err instanceof Error ? err.message : String(err)}`);
432
- }
433
- // Build resolved map: canonicalKey → display name. Only required refs
434
- // count as unresolved warnings; seed/unknown refs are not gates.
435
- const resolvedMap = new Map();
436
- let unresolvedCount = 0;
437
- for (const result of resolvedRefs) {
438
- if (result.status === 'resolved' && result.localEntryId) {
439
- resolvedMap.set(result.ref, result.localEntryId);
440
- trackEvent('skill.ref.resolved', { ref: result.ref, kind: result.kind });
441
- }
442
- else if (result.status === 'unsupported-future') {
443
- // seed: refs are explicitly future scope per WP-354 Build-Order #6 — not a warning.
444
- trackEvent('skill.ref.future', { ref: result.ref, kind: result.kind });
445
- }
446
- else if (result.required) {
447
- unresolvedCount++;
448
- trackEvent('skill.ref.unresolved', { ref: result.ref, kind: result.kind, status: result.status });
449
- }
450
- }
451
- if (unresolvedCount > 0) {
452
- logErr(`Warning: ${unresolvedCount} required semantic ref(s) could not be resolved.`);
453
- }
454
- // Projection must preserve ref tokens as portable machine-readable refs.
455
- // resolvedMap is only used for validation/telemetry here; generated setup
456
- // artifacts keep {{ref:domain:...}} / {{ref:entry:...}} intact.
457
- }
458
- // Compute projection hash for each projected DB asset (DEC-K).
459
- // The stored hash is sha256 of the normalized resolved asset body; DB persistence
460
- // is deferred until the write loop confirms a matching file was emitted.
461
- // Strip existing hash trailer and timestamp lines, normalize to LF, then hash.
462
- const HASH_TRAILER_REGEX = /^<!--\s*pb-hash:.*-->\s*$/gm;
463
- const TIMESTAMP_REGEX = /^<!--\s*pb-generated-at:.*-->\s*$/gm;
464
- for (const rawAsset of projectableDbAssets) {
465
- const resolvedAsset = [...dbSkills, ...dbRules].find((a) => a.sourcePath === `db:${rawAsset.entryId}`);
466
- if (!resolvedAsset)
467
- continue;
468
- try {
469
- // Build the projected body (what will be written to disk)
470
- const projectedBody = resolvedAsset.body;
471
- // Normalize: strip existing hash/timestamp trailers, convert to LF
472
- const normalized = projectedBody
473
- .replace(HASH_TRAILER_REGEX, '')
474
- .replace(TIMESTAMP_REGEX, '')
475
- .replace(/\r\n/g, '\n')
476
- .replace(/\r/g, '\n')
477
- .trimEnd();
478
- // Compute sha256 hash
479
- const hash = createHash('sha256').update(normalized, 'utf8').digest('hex');
480
- const hashTrailer = `<!-- pb-hash: sha256:${hash} -->`;
481
- // Append hash trailer to the projected body
482
- resolvedAsset.body = `${normalized}\n${hashTrailer}`;
483
- dbProjectionHashes.set(rawAsset.entryId, {
484
- hash: `sha256:${hash}`,
485
- assetKind: rawAsset.assetKind,
486
- });
487
- // Drift detection: compare against last known hash
488
- if (rawAsset.lastProjectedHash && rawAsset.lastProjectedHash !== `sha256:${hash}`) {
489
- trackEvent('skill.drift.detected', {
490
- entryId: rawAsset.entryId,
491
- assetKind: rawAsset.assetKind,
492
- });
493
- log(`Drift detected for asset ${rawAsset.entryId} — projecting updated version.`);
494
- }
495
- trackEvent('skill.projection.succeeded', {
496
- entryId: rawAsset.entryId,
497
- assetKind: rawAsset.assetKind,
498
- });
499
- }
500
- catch (err) {
501
- trackEvent('skill.projection.failed', {
502
- entryId: rawAsset.entryId,
503
- assetKind: rawAsset.assetKind,
504
- });
505
- logErr(`Warning: projection failed for ${rawAsset.entryId} — ${err instanceof Error ? err.message : String(err)}`);
506
- }
507
- }
722
+ for (const surface of surfaceValidation.unregisteredSurfaces) {
723
+ logErr(`Warning: manifest surface "${surface}" is not registered; skipping it.`);
508
724
  }
509
- // 5a. Optionally fetch and merge Chain-derived rules (--generate flag)
510
- let chainRulesStats = null;
511
- let chainGaps = [];
512
- let allRules = manualRules;
513
- if (generate) {
514
- log('Generating Chain-derived rules...');
515
- const chainResult = await generateChainRules(kernelCall, manualRules);
516
- if (chainResult.sentinel) {
517
- // MCP unavailable — inject sentinel rule and warn
518
- allRules = [...manualRules, chainResult.sentinel];
519
- logErr('Warning: Chain MCP unavailable — generated rules are disabled. Sentinel rule injected.');
725
+ const manifestTargets = new Set(surfaceValidation.registeredSurfaces);
726
+ const cliTargets = new Set();
727
+ const ignoredCliSurfaces = [];
728
+ for (const surface of options.surfaces ?? []) {
729
+ const normalized = normalizeSurfaceName(surface);
730
+ if (normalized && manifestTargets.has(normalized)) {
731
+ cliTargets.add(normalized);
520
732
  }
521
733
  else {
522
- // Merge generated rules after manual rules (manual takes precedence on dedup)
523
- allRules = [...manualRules, ...chainResult.rules];
524
- chainRulesStats = chainResult.stats;
525
- chainGaps = chainResult.gaps;
526
- const { generatedRules, suppressedByManual, suppressedByZeroEntries } = chainResult.stats;
527
- log(`Chain-derived rules: ${generatedRules} generated, ${suppressedByManual} suppressed by manual, ${suppressedByZeroEntries} gaps`);
528
- if (chainGaps.length > 0) {
529
- log(`Gaps (no matching governance entries): ${chainGaps.join(', ')}`);
530
- }
531
- // Diff: compare current state against previous run
532
- const previousState = loadPreviousState(pbDir);
533
- const currentState = buildCurrentState(chainResult.rules, chainResult.classified);
534
- saveHandshakeState(pbDir, chainResult.rules, chainResult.classified);
535
- const diff = diffHandshakeState(currentState, previousState);
536
- const diffText = formatDiff(diff);
537
- log(diffText);
734
+ ignoredCliSurfaces.push(surface);
538
735
  }
539
736
  }
540
- // 5b. Read personal layer (WP-310 E2) — machine-local rules/skills from .productbrain/.local/
541
- // Returns [] when the directory is absent. All returned entries have persist: 'local'.
737
+ if (ignoredCliSurfaces.length > 0) {
738
+ logErr(`Warning: --surfaces ignored outside manifest.surfaces: ${ignoredCliSurfaces.join(', ')}`);
739
+ }
740
+ const allowedTargets = options.surfaces && options.surfaces.length > 0
741
+ ? cliTargets
742
+ : manifestTargets;
743
+ const perimeterManifest = {
744
+ surfaces: [...manifestTargets].flatMap(surfacePerimeterRoots),
745
+ };
746
+ const authorityCanWrite = manifestStatus.mode === 'project' || manifestStatus.mode === 'govern';
747
+ const authorityPreviewOnly = applyMode && !authorityCanWrite;
748
+ const writeMode = applyMode && authorityCanWrite;
749
+ // TASK-554 (TEN-4036): materialize governs the coding-tool surfaces (DEC-951). PB's own files
750
+ // under .productbrain/ (context.md, briefing.md, generated/) refresh on every --apply wherever
751
+ // that folder exists; mode `off` means it does not (DEC-955), and then nothing is created.
752
+ const pbOwnedWriteMode = applyMode && manifestStatus.mode !== 'off';
753
+ // Skills and rules are read from the filesystem only (WP-776 S3f, DEC-1771).
754
+ const allSkills = readCanonicalSkills(pbDir);
755
+ const manualRules = readCanonicalRules(pbDir);
756
+ // The --generate flag and its chain-rules generator are gone: the everyone/team/role rule lists
757
+ // (DEC-1774) are the rule-delivery path (context.md, chain.mdc, everyone-rules.md).
758
+ let allRules = manualRules;
759
+ // 5b. Read personal layer (WP-310 E2) — machine-local rules/skills from .productbrain/.local/, [] if absent, all persist: 'local'.
542
760
  const personalRules = readPersonalLayer(pbDir);
543
761
  if (personalRules.length > 0) {
544
762
  // Name collision detection — warn when a personal rule overrides a team rule
@@ -561,14 +779,12 @@ export async function runHandshake(options = {}) {
561
779
  }
562
780
  allSkills.push(...personalSkills);
563
781
  }
564
- // 5c. Apply manifest-based adoption filter (WP-310 E1)
565
- // readManifest returns null when manifest.yaml is absent → filterByAdoptionState is a no-op.
566
- const manifest = readManifest(pbDir);
567
- // 5d. Load method registry (WP-310 E4) — only when manifest is present.
782
+ // 5d. Load method registry (WP-310 E4) — only when manifest is present. Unrelated to the
783
+ // setup-assets system (WP-329's own "methods" Chain collection, no setup.* coupling) — kept.
568
784
  let registrySource;
569
785
  let registryStale;
570
786
  if (manifest) {
571
- const registryResult = await loadMethodRegistry(manifest.method_source, kernelCall).catch(() => null);
787
+ const registryResult = await loadMethodRegistry().catch(() => null);
572
788
  if (registryResult) {
573
789
  registrySource = registryResult.source;
574
790
  registryStale = registryResult.stale;
@@ -579,24 +795,10 @@ export async function runHandshake(options = {}) {
579
795
  // Compute adoption counts for report (only meaningful when manifest is present)
580
796
  const adoptedRulesCount = manifest ? adoptionFilteredRules.length : undefined;
581
797
  const rejectedRulesCount = manifest ? allRules.length - adoptionFilteredRules.length : undefined;
582
- // Apply level filtering with stage-gating (after adoption filter, before target filtering in write loop)
583
- // Stage caps the effective level: blank→beginner, seed→intermediate, grounded+→expert.
584
- // If stage caps below the requested level, log it so the user knows why items were dropped.
585
- const profileStage = workspaceProfile?.stage;
586
- const levelFilteredSkills = filterByLevel(adoptionFilteredSkills, level, profileStage);
587
- const levelFilteredRules = filterByLevel(adoptionFilteredRules, level, profileStage);
588
- // Log when stage gating changes the effective level
589
- if (profileStage) {
590
- const stageCap = STAGE_TO_MAX_LEVEL[profileStage];
591
- if (stageCap) {
592
- const requestedIdx = level ? LEVEL_ORDER.indexOf(level) : LEVEL_ORDER.length - 1;
593
- const capIdx = LEVEL_ORDER.indexOf(stageCap);
594
- if (capIdx < requestedIdx) {
595
- log(`Stage "${profileStage}" caps level from ${level || 'expert'} to ${stageCap}`);
596
- }
597
- }
598
- }
599
- // Apply when-condition filtering (stage-aware, workspace profile + repo context)
798
+ // Level filtering: requested level only (WP-762 C4e-2, DEC-1800 — no more stage cap).
799
+ const levelFilteredSkills = filterByLevel(adoptionFilteredSkills, level);
800
+ const levelFilteredRules = filterByLevel(adoptionFilteredRules, level);
801
+ // Apply when-condition filtering (workspace profile + repo context)
600
802
  const canonicalSkills = levelFilteredSkills.filter((skill) => {
601
803
  const result = evaluateConditions(skill.conditions ?? {}, workspaceProfile, repo);
602
804
  if (dryRun && !result.included) {
@@ -617,26 +819,23 @@ export async function runHandshake(options = {}) {
617
819
  if (dryRun && canonicalRules.length > 0) {
618
820
  log(` INCLUDED rules: ${canonicalRules.map((r) => r.name).join(', ')}`);
619
821
  }
822
+ const noProjectionAssets = findNoProjectionAssets(canonicalSkills, canonicalRules);
620
823
  if (canonicalSkills.length > 0 || canonicalRules.length > 0) {
621
824
  const levelSuffix = level ? ` (level: ${level})` : '';
622
- const stageSuffix = profileStage ? `, stage: ${profileStage}` : '';
623
825
  const stackSuffix = repo.detectedStack.length > 0 ? `, stack: [${repo.detectedStack.join(', ')}]` : '';
624
826
  const totalSkills = allSkills.length;
625
827
  const totalRules = allRules.length;
626
- log(`Portable knowledge: ${canonicalSkills.length}/${totalSkills} skills, ${canonicalRules.length}/${totalRules} rules${levelSuffix}${stageSuffix}${stackSuffix}`);
828
+ log(`Portable knowledge: ${canonicalSkills.length}/${totalSkills} skills, ${canonicalRules.length}/${totalRules} rules${levelSuffix}${stackSuffix}`);
627
829
  }
628
830
  // 6. Generate file contents
629
- // Build workspace context for AGENTS.md enrichment (stage, focus, governance, entry count)
831
+ // Build workspace context for AGENTS.md enrichment (focus, entry count) — TASK-435 (C4c) deleted `stage` from it.
630
832
  const agentsWorkspaceContext = workspaceProfile
631
833
  ? {
632
- stage: workspaceProfile.stage,
633
- focus: orientView?.strategicContext?.currentBet ?? undefined,
634
- governanceMode: workspaceProfile.governanceMode,
834
+ focus: orientView?.strategicContext?.currentWorkPackage ?? undefined,
635
835
  totalEntries: workspaceProfile.totalEntries,
636
836
  }
637
837
  : undefined;
638
- // Collect codex-targeted skills for AGENTS.md skill directory
639
- // Exclude persist: 'local' rules — committed adapter files must never include local-only rules.
838
+ // Collect codex-targeted skills for AGENTS.md skill directory — persist: 'local' entries included (all projections are local-only now).
640
839
  const agentsCodexSkills = canonicalSkills
641
840
  .filter((s) => shouldEmitToTarget(s, 'codex'))
642
841
  .map((s) => ({
@@ -666,15 +865,27 @@ export async function runHandshake(options = {}) {
666
865
  skills: copilotSkills.length > 0 ? copilotSkills : undefined,
667
866
  rules: copilotRules.length > 0 ? copilotRules : undefined,
668
867
  };
669
- const contextContent = orientView ? generateContextMd(orientView, repo, timestamp, workspaceProfile?.stage) : null;
868
+ // TASK-554 (WP-777, DEC-1888): one workspace briefing (spine and the Everyone rule list, from
869
+ // the kernel builder) feeds context.md, everyone-rules.md and chain.mdc. `null` means the orient
870
+ // fetch failed: the two briefing files are not written (and a stale copy is removed in apply
871
+ // mode below), and chain.mdc says the briefing is unavailable.
872
+ const workspaceBriefingLines = orientView ? formatWorkspaceBriefingLines(servedBriefing(orientView), orientView.ruleLists) : null;
873
+ const contextContent = orientView && workspaceBriefingLines ? generateContextMd(orientView, workspaceBriefingLines, repo, timestamp) : null;
874
+ const everyoneRulesContent = workspaceBriefingLines ? generateEveryoneRulesMd(workspaceBriefingLines, timestamp) : null;
670
875
  const briefingContent = generateBriefingMd(matchedEntries, repo, uniqueQueries, timestamp);
671
876
  const agentsContent = generateAgentsMd(timestamp, {
672
877
  workspaceContext: agentsWorkspaceContext,
673
878
  skills: agentsCodexSkills.length > 0 ? agentsCodexSkills : undefined,
674
879
  });
675
880
  const claudeContent = generateClaudeMd(timestamp);
676
- const cursorContent = generateCursorMdc(timestamp);
881
+ const cursorContent = generateCursorMdc(timestamp, workspaceBriefingLines);
677
882
  const copilotContent = generateCopilotMd(timestamp, copilotOptions);
883
+ // DEC-1343: one committed .github/instructions/<slug>.instructions.md per copilot rule with applyTo; repo-wide rules stay above.
884
+ const copilotInstructionFiles = generateCopilotInstructionFiles(canonicalRules
885
+ .filter((r) => shouldEmitToTarget(r, 'copilot'))
886
+ // `.github/instructions/` is COMMITTED — never project a machine-local (persist: 'local') rule into it.
887
+ .filter((r) => r.persist !== 'local')
888
+ .map((r) => ({ name: r.name, body: r.body, applyTo: r.applyTo, sourcePath: r.sourcePath })), timestamp);
678
889
  const boundaryEnforcementMode = getBoundaryEnforcementMode(manifest);
679
890
  const boundaryManifestContent = boundaryEnforcementMode === 'advisory'
680
891
  ? null
@@ -683,17 +894,30 @@ export async function runHandshake(options = {}) {
683
894
  const filesWritten = [];
684
895
  const filesSkipped = [];
685
896
  const previewPlan = [];
686
- // Surface filtering: skip adapter writes for targets not in the allowed set
687
- const allowedTargets = options.surfaces && options.surfaces.length > 0
688
- ? new Set(options.surfaces)
689
- : null; // null = write all
690
897
  const writes = [
691
898
  ...(contextContent ? [{ path: join(cwd, '.productbrain', 'context.md'), relative: '.productbrain/context.md', content: contextContent, dirs: join(cwd, '.productbrain'), isAdapter: false }] : []),
899
+ ...(everyoneRulesContent
900
+ ? [{
901
+ path: join(cwd, '.productbrain', 'generated', 'everyone-rules.md'),
902
+ relative: '.productbrain/generated/everyone-rules.md',
903
+ content: everyoneRulesContent,
904
+ dirs: join(cwd, '.productbrain', 'generated'),
905
+ isAdapter: false,
906
+ }]
907
+ : []),
692
908
  { path: join(cwd, '.productbrain', 'briefing.md'), relative: '.productbrain/briefing.md', content: briefingContent, isAdapter: false },
693
- { path: join(cwd, 'AGENTS.md'), relative: 'AGENTS.md', content: agentsContent, isAdapter: true, target: 'codex' },
694
- { path: join(cwd, 'CLAUDE.md'), relative: 'CLAUDE.md', content: claudeContent, isAdapter: true, target: 'claude' },
909
+ { path: join(cwd, 'AGENTS.md'), relative: 'AGENTS.md', content: agentsContent, isAdapter: true, target: 'codex', augmentTarget: true },
910
+ { path: join(cwd, 'CLAUDE.md'), relative: 'CLAUDE.md', content: claudeContent, isAdapter: true, target: 'claude', augmentTarget: true },
695
911
  { path: join(cwd, '.cursor', 'rules', 'chain.mdc'), relative: '.cursor/rules/chain.mdc', content: cursorContent, dirs: join(cwd, '.cursor', 'rules'), isAdapter: true, target: 'cursor' },
696
912
  { path: join(cwd, '.github', 'copilot-instructions.md'), relative: '.github/copilot-instructions.md', content: copilotContent, dirs: join(cwd, '.github'), isAdapter: true, target: 'copilot' },
913
+ ...copilotInstructionFiles.map((f) => ({
914
+ path: join(cwd, f.relativePath),
915
+ relative: f.relativePath,
916
+ content: f.content,
917
+ dirs: join(cwd, '.github', 'instructions'),
918
+ isAdapter: true,
919
+ target: 'copilot',
920
+ })),
697
921
  ...(boundaryManifestContent ? [{
698
922
  path: join(cwd, '.productbrain', 'generated', 'boundaries.json'),
699
923
  relative: '.productbrain/generated/boundaries.json',
@@ -759,62 +983,163 @@ export async function runHandshake(options = {}) {
759
983
  dbAssetEntryId,
760
984
  });
761
985
  }
762
- // Add Claude Code rule copies (filtered by target)
763
- const claudeProfile = resolveSurfaceProfile('claude');
764
- for (const rule of canonicalRules) {
765
- if (!shouldEmitToTarget(rule, 'claude'))
766
- continue;
767
- const dbAssetEntryId = rule.sourcePath.startsWith('db:') ? rule.sourcePath.slice(3) : undefined;
768
- writes.push({
769
- path: join(cwd, '.claude', 'rules', `${rule.name}.md`),
770
- relative: `.claude/rules/${rule.name}.md`,
771
- content: generateClaudeRule(rule, claudeProfile),
772
- dirs: join(cwd, '.claude', 'rules'),
773
- isAdapter: true,
774
- target: 'claude',
775
- dbAssetEntryId,
776
- });
986
+ // 7a. WP-379 S5b: find leftover projections (apply mode) — REPORT-ONLY (coordinator ruling, PR
987
+ // #912 round 10), see findLeftoverProjections's own header. WP-776 S3f: gated on writeMode
988
+ // alone now — the DB source (dbQuerySucceeded) is gone, so activeAssetNames comes from the
989
+ // filesystem-sourced allSkills/allRules (which already include the personal layer, merged in
990
+ // above) instead of dbAssetRows.
991
+ let leftoverFiles = [];
992
+ let leftoverFilesTruncated = false;
993
+ // TASK-554 (RULE-659): a failed orient fetch is named in the report, and apply removes stale briefing copies.
994
+ if (orientView === null) {
995
+ for (const path of ['.productbrain/context.md', '.productbrain/generated/everyone-rules.md'])
996
+ filesSkipped.push({ path, reason: 'briefing unavailable — the orient fetch failed' });
997
+ const stale = pbOwnedWriteMode ? removeStaleBriefingProjections(cwd) : [];
998
+ if (stale.length > 0)
999
+ logErr(`Warning: the workspace briefing could not be fetched; removed the stale ${stale.join(', ')}.`);
777
1000
  }
778
- // Add Claude Code skill router (filtered by target)
779
- const claudeSkills = canonicalSkills.filter((s) => shouldEmitToTarget(s, 'claude'));
780
- const skillRouterContent = generateClaudeSkillRouter(claudeSkills, claudeProfile);
781
- if (skillRouterContent) {
782
- writes.push({
783
- path: join(cwd, '.claude', 'rules', 'skill-router.md'),
784
- relative: '.claude/rules/skill-router.md',
785
- content: skillRouterContent,
786
- dirs: join(cwd, '.claude', 'rules'),
787
- isAdapter: true,
788
- target: 'claude',
789
- });
1001
+ if (writeMode) {
1002
+ retireGeneratedProjections(cwd, log);
1003
+ const activeAssetNames = [
1004
+ ...allSkills.map((s) => s.name),
1005
+ ...allRules.map((r) => r.name),
1006
+ ];
1007
+ // Nested .cursor/skills scan gets its OWN canon: canonicalSkills is SKILL-kind only and
1008
+ // shouldEmitToTarget(_, 'cursor') respects per-skill target routing.
1009
+ const cursorSkillNames = canonicalSkills.filter((s) => shouldEmitToTarget(s, 'cursor')).map((s) => s.name);
1010
+ // Round 11: exempt exact write-plan paths from the leftover scan (see findLeftoverProjections's own doc).
1011
+ const exactRelativePaths = new Set(writes.map((w) => w.relative));
1012
+ const scanResult = findLeftoverProjections(cwd, activeAssetNames, allowedTargets, cursorSkillNames, exactRelativePaths);
1013
+ leftoverFiles = scanResult.files;
1014
+ leftoverFilesTruncated = scanResult.truncated;
1015
+ }
1016
+ // ── WP-436 S3: Vocab projector — fetch workspace vocab context once per handshake. Source-side
1017
+ // stays tokenized; resolves {{vocab:...}} before writing. Fail-open: a failed fetch writes the raw token.
1018
+ const handshakeVocabCtx = await getOrFetchVocabCtx(config.apiKey, async () => {
1019
+ try {
1020
+ const vocab = await kernelCall('chain.getVocabulary', {});
1021
+ if (vocab?.collectionLabels || vocab?.collectionDefaults) {
1022
+ return {
1023
+ ...(vocab.collectionLabels ? { collectionLabels: vocab.collectionLabels } : {}),
1024
+ ...(vocab.collectionDefaults ? { collectionDefaults: vocab.collectionDefaults } : {}),
1025
+ };
1026
+ }
1027
+ return null;
1028
+ }
1029
+ catch {
1030
+ return null; // fail-open
1031
+ }
1032
+ });
1033
+ const userOwnedSkipped = [];
1034
+ const cleanBucketPaths = [];
1035
+ const tamperedBucket = [];
1036
+ // TEN-2155: region augmentation context + symlink dedupe — codexActive gates the AGENTS.md skills-index pointer.
1037
+ const regionCtx = { codexActive: allowedTargets.has('codex') };
1038
+ const malformedRegionPaths = [];
1039
+ // Same inode for two augment targets (e.g. CLAUDE.md symlinked to AGENTS.md): augment only first-seen.
1040
+ const seenAugmentRealpaths = new Set();
1041
+ const augmentTargetSkip = new Set();
1042
+ for (const w of writes) {
1043
+ if (!w.augmentTarget || !w.target || !allowedTargets.has(w.target) || !existsSync(w.path))
1044
+ continue;
1045
+ let real;
1046
+ try {
1047
+ real = realpathSync(w.path);
1048
+ }
1049
+ catch {
1050
+ real = w.path;
1051
+ }
1052
+ if (seenAugmentRealpaths.has(real))
1053
+ augmentTargetSkip.add(w.path);
1054
+ else
1055
+ seenAugmentRealpaths.add(real);
790
1056
  }
791
- const forkedPaths = [];
792
- const projectedHashUpdates = new Map();
793
- const recordProjectedHash = (entryId) => {
794
- if (!applyMode || !entryId)
795
- return;
796
- const projection = dbProjectionHashes.get(entryId);
797
- if (projection)
798
- projectedHashUpdates.set(entryId, projection.hash);
799
- };
800
1057
  for (const w of writes) {
801
1058
  // Surface filtering: skip adapter writes for targets not in the allowed set
802
- if (allowedTargets && w.target && !allowedTargets.has(w.target)) {
1059
+ if (w.target && !allowedTargets.has(w.target)) {
803
1060
  filesSkipped.push({ path: w.relative, reason: `filtered (surface: ${w.target})` });
804
1061
  if (preview)
805
1062
  previewPlan.push({ path: w.relative, status: 'filtered' });
806
1063
  continue;
807
1064
  }
1065
+ // ── TEN-2155: augment user-owned CLAUDE.md / AGENTS.md with a marked PB region — runs ahead
1066
+ // of the legacy MARKER gates; absent/legacy-pb-managed fall through to the legacy path.
1067
+ if (w.augmentTarget) {
1068
+ const projection = REGION_PROJECTIONS[w.target];
1069
+ if (projection && existsSync(w.path)) {
1070
+ if (augmentTargetSkip.has(w.path)) {
1071
+ filesSkipped.push({ path: w.relative, reason: 'symlinked to another augment target — augmented once' });
1072
+ continue;
1073
+ }
1074
+ const disk = readFileSync(w.path, 'utf8');
1075
+ const cls = classifyAdapterFile(disk);
1076
+ if (cls === 'augmentable' || cls === 'region-present') {
1077
+ const eol = detectEol(disk);
1078
+ const region = replaceVocabTokens(projection.build(regionCtx, eol), handshakeVocabCtx);
1079
+ // Defense-in-depth: the composed region (post vocab-token resolution) must itself be a
1080
+ // single well-formed region. v1 content has no vocab tokens so this is a no-op, but it
1081
+ // guards the documented future override/vocab seam from injecting a stray sentinel/MARKER.
1082
+ if (classifyAdapterFile(region) !== 'region-present') {
1083
+ filesSkipped.push({ path: w.relative, reason: 'internal: composed PB region malformed — skipped to protect your file' });
1084
+ if (preview)
1085
+ previewPlan.push({ path: w.relative, status: 'needs-attention' });
1086
+ continue;
1087
+ }
1088
+ const candidate = cls === 'augmentable' ? spliceAppend(disk, region, eol) : spliceReplace(disk, region);
1089
+ if (candidate === disk) {
1090
+ filesSkipped.push({ path: w.relative, reason: 'unchanged' });
1091
+ if (preview)
1092
+ previewPlan.push({ path: w.relative, status: 'unchanged' });
1093
+ continue;
1094
+ }
1095
+ if (preview || dryRun) {
1096
+ filesWritten.push(w.relative + (dryRun ? ' (dry run)' : ''));
1097
+ if (preview)
1098
+ previewPlan.push({ path: w.relative, status: 'would-augment' });
1099
+ continue;
1100
+ }
1101
+ if (authorityPreviewOnly) {
1102
+ // apply + materialize observe/off: honor authority — do NOT write; mirror the legacy
1103
+ // preview-only skip so the report does not falsely list it as written.
1104
+ filesSkipped.push({ path: w.relative, reason: `preview-only (materialize: ${manifestStatus.mode})` });
1105
+ continue;
1106
+ }
1107
+ assertSetupWritePath(w.path, perimeterManifest);
1108
+ writeFileSync(w.path, candidate);
1109
+ filesWritten.push(w.relative);
1110
+ continue;
1111
+ }
1112
+ if (cls === 'malformed') {
1113
+ filesSkipped.push({ path: w.relative, reason: 'malformed PB region — left untouched; fix the pb:region sentinels' });
1114
+ if (preview)
1115
+ previewPlan.push({ path: w.relative, status: 'needs-attention' });
1116
+ malformedRegionPaths.push(w.relative);
1117
+ continue;
1118
+ }
1119
+ // cls 'pb-managed' falls through to legacy re-projection; 'opt-out' (pb:no-augment) falls through to the user-owned skip.
1120
+ }
1121
+ // absent file → fall through to legacy whole-file CREATE.
1122
+ }
808
1123
  if (w.isAdapter && !shouldWriteAdapter(w.path, force)) {
809
- filesSkipped.push({ path: w.relative, reason: 'exists without auto-generated marker (use --force to overwrite)' });
1124
+ // User-owned: a file at an adapter path without our auto-gen MARKER is the
1125
+ // user's own file. Leave it untouched — never overwrite, never treat as drift
1126
+ // or log a TEN (TEN-2150). Relayed to the connect screen via userOwnedSkipped.
1127
+ filesSkipped.push({ path: w.relative, reason: 'user-owned — left untouched (pb won\'t overwrite your file)' });
810
1128
  if (preview) {
811
- previewPlan.push({ path: w.relative, status: 'forked' });
1129
+ previewPlan.push({ path: w.relative, status: 'user-owned' });
812
1130
  }
813
1131
  else {
814
- forkedPaths.push(w.relative);
1132
+ userOwnedSkipped.push(w.relative);
815
1133
  }
816
1134
  continue;
817
1135
  }
1136
+ if (w.isAdapter ? authorityPreviewOnly : applyMode && !pbOwnedWriteMode) {
1137
+ filesSkipped.push({
1138
+ path: w.relative,
1139
+ reason: `preview-only (materialize: ${manifestStatus.mode})`,
1140
+ });
1141
+ continue;
1142
+ }
818
1143
  if (preview || dryRun) {
819
1144
  // In preview/dry-run mode: check content to distinguish new/update/unchanged
820
1145
  if (existsSync(w.path)) {
@@ -839,68 +1164,150 @@ export async function runHandshake(options = {}) {
839
1164
  }
840
1165
  continue;
841
1166
  }
1167
+ // ── WP-421 S3: defer tampered adapter writes (doneWhen #17) — classify pb-managed-clean vs
1168
+ // pb-managed-tampered, deferred not overwritten; post-loop resolves. --force bypasses the defer.
1169
+ if (w.isAdapter && !force) {
1170
+ const drift = classifyDriftBucket(w.path);
1171
+ if (drift && drift.bucket === 'pb-managed-tampered') {
1172
+ tamperedBucket.push({
1173
+ path: w.path,
1174
+ relative: w.relative,
1175
+ content: w.content,
1176
+ expectedHash: drift.expectedHash,
1177
+ actualHash: drift.actualHash,
1178
+ dirs: w.dirs,
1179
+ });
1180
+ // Do NOT write — defer until prompt/refusal resolves the file.
1181
+ continue;
1182
+ }
1183
+ if (drift && drift.bucket === 'pb-managed-clean') {
1184
+ cleanBucketPaths.push(w.relative);
1185
+ }
1186
+ }
1187
+ assertSetupWritePath(w.path, perimeterManifest);
842
1188
  if (w.dirs)
843
1189
  mkdirSync(w.dirs, { recursive: true });
1190
+ // WP-436 S3: resolve {{vocab:...}} tokens before writing projected adapter files only
1191
+ // (source-side stays tokenized). Fail-open: undefined vocabCtx falls back to canonicalKey literals.
1192
+ const resolvedContent = w.isAdapter
1193
+ ? replaceVocabTokens(w.content, handshakeVocabCtx)
1194
+ : w.content;
844
1195
  if (existsSync(w.path)) {
845
1196
  const current = readFileSync(w.path, 'utf8');
846
- const nextNormalized = normalizeHandshakeContentForComparison(w.content);
1197
+ const nextNormalized = normalizeHandshakeContentForComparison(resolvedContent);
847
1198
  const currentNormalized = normalizeHandshakeContentForComparison(current);
848
1199
  if (nextNormalized === currentNormalized) {
849
1200
  filesSkipped.push({ path: w.relative, reason: 'unchanged' });
850
- recordProjectedHash(w.dbAssetEntryId);
851
1201
  continue;
852
1202
  }
853
1203
  }
854
- writeFileSync(w.path, w.content);
1204
+ writeFileSync(w.path, resolvedContent);
855
1205
  filesWritten.push(w.relative);
856
- recordProjectedHash(w.dbAssetEntryId);
857
- }
858
- if (projectedHashUpdates.size > 0) {
859
- const updates = [...projectedHashUpdates];
860
- const results = await Promise.allSettled(updates.map(([entryId, hash]) => kernelCall('setup.updateLastProjectedHash', { entryId, hash })));
861
- results.forEach((result, index) => {
862
- if (result.status === 'rejected') {
863
- const [entryId] = updates[index];
864
- trackEvent('skill.projection.failed', {
865
- entryId,
866
- reason: result.reason instanceof Error ? result.reason.message : String(result.reason),
867
- });
868
- }
1206
+ }
1207
+ // Runs AFTER the write loop (malformed files were never written, nothing to record). TEN-2155:
1208
+ // non-interactive apply refuses on a malformed region — gated on applyMode per STD-263 vi.
1209
+ if (applyMode && malformedRegionPaths.length > 0 && (options.noPrompt || !process.stdout.isTTY)) {
1210
+ throw new CLIError(`Malformed PB region in: ${malformedRegionPaths.join(', ')}`, {
1211
+ code: ErrorCode.VALIDATION_FAILED,
1212
+ category: 'validation',
1213
+ guidance: 'Fix the `<!-- pb:region:start -->` / `<!-- pb:region:end -->` sentinels (one balanced pair), then re-run `pb handshake`.',
869
1214
  });
870
1215
  }
871
- // 8. Drift logging — if apply mode encountered forked adapters and a session is active, log a draft TEN
872
- if (forkedPaths.length > 0) {
873
- const session = readSession();
874
- if (session) {
875
- const names = forkedPaths.join(', ');
876
- kernelCallWithSession('chain.createEntry', {
877
- collectionSlug: 'tensions',
878
- name: `TEN: handshake drift — ${forkedPaths.length} adapter(s) forked, sync blocked`,
879
- status: 'draft',
880
- data: {
881
- description: `pb handshake --apply encountered forked adapters that blocked sync. Files: ${names}. Use --force to overwrite or resolve drift manually.`,
882
- },
883
- sessionId: session.sessionId,
884
- createdBy: `agent:${session.sessionId}`,
885
- }).catch(() => { });
886
- }
887
- }
888
- // 8b. Setup receipt — record which assets were materialized (apply mode only)
889
- // Fail-open: receipt write is advisory, never blocks the handshake.
890
- if (applyMode) {
891
- const session = readSession();
892
- const caller = session ? kernelCallWithSession : kernelCall;
893
- try {
894
- const receiptResult = await caller('setup.materializeSetup', {});
895
- if (receiptResult?.assetCount > 0) {
896
- log(`Setup receipt: ${receiptResult.assetCount} asset(s) recorded.`);
1216
+ // ── WP-421 S3: tampered-bucket resolution (doneWhen #17), apply mode only — headless (--no-prompt
1217
+ // / non-TTY) refuses, exit non-zero. WP-776 S3d/S3f: the setup-assets system this resolution used
1218
+ // to offer as an "adopt" alternative (capture tampered edits as a personal-scoped draft via
1219
+ // setup.ingestSetupAsset) is deleted, and with it the only OTHER option besides overwriting —
1220
+ // per DEC-1771 (delete, never hide) there is no shim standing in for that capability. Revert
1221
+ // (re-project canonical content) is the only resolution left; this is a real capability loss
1222
+ // for anyone who was relying on "adopt" to preserve hand-edits, named here rather than silently
1223
+ // dropped. The refusal receipt (`setup.recordTamperRefusal`) is deleted along with the rest of
1224
+ // the setup-assets gateway routes — headless mode still refuses and reports, it just no longer
1225
+ // writes an audit row for the refusal.
1226
+ const revertedTamperedPaths = [];
1227
+ if (writeMode && tamperedBucket.length > 0) {
1228
+ const headless = options.noPrompt === true || !process.stdout.isTTY;
1229
+ if (headless) {
1230
+ // ── Headless refusal path (doneWhen #17) ────────────────────────────────
1231
+ logErr('');
1232
+ logErr(`pb handshake: ${tamperedBucket.length} PB-managed projection file(s) were edited downstream of the auto-gen marker.`);
1233
+ logErr('Headless mode (--no-prompt or no TTY) cannot confirm an overwrite — refusing.');
1234
+ logErr('');
1235
+ const refusedTamperedFiles = tamperedBucket.map((t) => ({
1236
+ path: t.relative,
1237
+ expectedHash: t.expectedHash,
1238
+ actualHash: t.actualHash,
1239
+ }));
1240
+ for (const refused of refusedTamperedFiles) {
1241
+ // Per #17: stderr enumerates each tampered file as
1242
+ // {path, expectedHash, actualHash, bucket}.
1243
+ logErr(` ${JSON.stringify({ ...refused, bucket: 'pb-managed-tampered' })}`);
897
1244
  }
1245
+ logErr('');
1246
+ logErr('Re-run interactively to resolve, or use --force to overwrite (data loss).');
1247
+ // Surface the report counts before exit (visibility for CI logs).
1248
+ if (!quiet) {
1249
+ const refusalReport = {
1250
+ filesWritten,
1251
+ filesSkipped,
1252
+ matchedEntries,
1253
+ searchQueries: uniqueQueries,
1254
+ repo,
1255
+ codexWarnings: codexWarnings.length > 0 ? codexWarnings : undefined,
1256
+ adoptedCount: adoptedRulesCount,
1257
+ rejectedCount: rejectedRulesCount,
1258
+ personalRuleCount: personalRules.length > 0 ? personalRules.length : undefined,
1259
+ personalSkillCount: personalSkills.length > 0 ? personalSkills.length : undefined,
1260
+ registrySource,
1261
+ registryStale,
1262
+ userOwnedSkipped: userOwnedSkipped.length > 0 ? userOwnedSkipped : undefined,
1263
+ managedCleanCount: cleanBucketPaths.length || undefined,
1264
+ tamperedFiles: refusedTamperedFiles,
1265
+ leftoverFiles: leftoverFiles.length > 0 ? leftoverFiles : undefined,
1266
+ leftoverFilesTruncated: leftoverFilesTruncated || undefined, noProjectionAssets: noProjectionAssets.length > 0 ? noProjectionAssets : undefined, // same-line combine, shrink-only budget
1267
+ };
1268
+ process.stdout.write('\n');
1269
+ process.stdout.write(isJsonMode() ? JSON.stringify(toPublicJsonReport(refusalReport)) + '\n' : formatHandshakeReport(refusalReport) + '\n');
1270
+ }
1271
+ // Exit non-zero per #17.
1272
+ process.exit(1);
898
1273
  }
899
- catch (err) {
900
- trackEvent('setup.receipt.write_failed', { error: err instanceof Error ? err.message : String(err) });
901
- logErr(`Warning: could not write setup receipt — ${err instanceof Error ? err.message : String(err)}`);
1274
+ // ── Interactive path: confirm, then revert every tampered file ─────────────
1275
+ log('');
1276
+ log(`pb handshake: ${tamperedBucket.length} PB-managed projection file(s) were edited downstream of the auto-gen marker.`);
1277
+ log('These will be REVERTED (overwritten with canonical content) — there is no adopt/draft path any more.');
1278
+ const proceed = await promptConfirm({
1279
+ message: `Overwrite ${tamperedBucket.length} tampered file(s) with canonical content?`,
1280
+ initialValue: false,
1281
+ });
1282
+ if (proceed) {
1283
+ for (const tamper of tamperedBucket) {
1284
+ log('');
1285
+ log(`Reverting: ${tamper.relative}`);
1286
+ log(` expected: ${tamper.expectedHash}`);
1287
+ log(` actual: ${tamper.actualHash}`);
1288
+ // Re-project canonical content over the tampered file.
1289
+ // WP-436 S3: resolve vocab tokens before writing (all tampered files are adapters).
1290
+ if (tamper.dirs)
1291
+ mkdirSync(tamper.dirs, { recursive: true });
1292
+ assertSetupWritePath(tamper.path, perimeterManifest);
1293
+ writeFileSync(tamper.path, replaceVocabTokens(tamper.content, handshakeVocabCtx));
1294
+ revertedTamperedPaths.push(tamper.relative);
1295
+ }
1296
+ }
1297
+ else {
1298
+ logErr('Skipped — tampered files left as-is; re-run to resolve.');
1299
+ process.exit(1); // doneWhen #17: never exit 0 with a tampered file unresolved (codex review round 3)
902
1300
  }
903
1301
  }
1302
+ // DEC-1690: a dormant (gate-failed) asset is simply not projected — dbAssets already comes
1303
+ // from the server's activeAssets list. The WP-379 S4 / WP-426 E4 on-disk marker/rename/restore
1304
+ // machinery (and its .authoring-sync.json registries) is retired: nothing to reconcile.
1305
+ // 8. User-owned files left untouched are NOT drift (TEN-2150) — a marker-less adapter-path
1306
+ // file is the user's own; handshake never wrote it, so no "sync", no draft TEN, just a benign
1307
+ // "Skipped:" surfaced via report.userOwnedSkipped.
1308
+ // 8. Case-collision and dormant-drift TENs are gone (coordinator ruling, PR #912 round 10) —
1309
+ // they existed only to audit automated deletions that no longer happen; `report.leftoverFiles`
1310
+ // below is the single reporting surface now.
904
1311
  // 9. Report
905
1312
  const report = {
906
1313
  filesWritten,
@@ -909,8 +1316,6 @@ export async function runHandshake(options = {}) {
909
1316
  searchQueries: uniqueQueries,
910
1317
  repo,
911
1318
  codexWarnings: codexWarnings.length > 0 ? codexWarnings : undefined,
912
- chainRulesStats: chainRulesStats ?? undefined,
913
- chainGaps: chainGaps.length > 0 ? chainGaps : undefined,
914
1319
  adoptedCount: adoptedRulesCount,
915
1320
  rejectedCount: rejectedRulesCount,
916
1321
  personalRuleCount: personalRules.length > 0 ? personalRules.length : undefined,
@@ -919,11 +1324,27 @@ export async function runHandshake(options = {}) {
919
1324
  registryStale,
920
1325
  preview: preview ? true : undefined,
921
1326
  previewPlan: preview && previewPlan.length > 0 ? previewPlan : undefined,
922
- driftConflicts: forkedPaths.length > 0 ? forkedPaths : undefined,
1327
+ userOwnedSkipped: userOwnedSkipped.length > 0 ? userOwnedSkipped : undefined,
1328
+ // WP-421 S3: three-bucket drift report (doneWhen #17). PB-managed-clean is
1329
+ // the count of files whose marker + hash matched. Tampered files were
1330
+ // resolved (reverted) above and are reported separately. WP-776 S3d/S3f:
1331
+ // adoptedTamperedPaths is gone — "adopt" is no longer an option (see the
1332
+ // tampered-bucket resolution comment above).
1333
+ managedCleanCount: cleanBucketPaths.length > 0 ? cleanBucketPaths.length : undefined,
1334
+ revertedTamperedPaths: revertedTamperedPaths.length > 0 ? revertedTamperedPaths : undefined,
1335
+ // REPORT-ONLY leftover-file listing (coordinator ruling, PR #912 round 10) — the human removes these.
1336
+ leftoverFiles: leftoverFiles.length > 0 ? leftoverFiles : undefined,
1337
+ leftoverFilesTruncated: leftoverFilesTruncated || undefined, noProjectionAssets: noProjectionAssets.length > 0 ? noProjectionAssets : undefined, // WP-660 S2 combine
923
1338
  };
924
1339
  if (!quiet) {
925
1340
  process.stdout.write('\n');
926
- process.stdout.write(formatHandshakeReport(report) + '\n');
1341
+ process.stdout.write(isJsonMode() ? JSON.stringify(toPublicJsonReport(report)) + '\n' : formatHandshakeReport(report) + '\n');
927
1342
  }
1343
+ // Return the report so non-UI callers (e.g. prepareConnectContext) can surface
1344
+ // skipped/user-owned files without re-deriving the skip logic (TEN-2107).
1345
+ return report;
928
1346
  }
1347
+ // WP-426 E3/E4: exported test-only surface (not part of the public CLI API). setupAuthoringPath
1348
+ // and loadAuthoringSyncState are gone with the setup-authoring sync machinery (WP-776 S3d/S3f).
1349
+ export const __test = { MARKER };
929
1350
  //# sourceMappingURL=handshake.js.map