@productbrain/cli 0.1.0-beta.91 → 0.1.0-beta.917

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 (431) hide show
  1. package/dist/__tests__/audit.test.js +5 -0
  2. package/dist/__tests__/audit.test.js.map +1 -1
  3. package/dist/__tests__/authority-domains.test.d.ts +2 -0
  4. package/dist/__tests__/authority-domains.test.d.ts.map +1 -0
  5. package/dist/__tests__/authority-domains.test.js +48 -0
  6. package/dist/__tests__/authority-domains.test.js.map +1 -0
  7. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  8. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  9. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  10. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  11. package/dist/__tests__/config.test.d.ts +1 -1
  12. package/dist/__tests__/config.test.js +410 -10
  13. package/dist/__tests__/config.test.js.map +1 -1
  14. package/dist/__tests__/constants.test.js +6 -1
  15. package/dist/__tests__/constants.test.js.map +1 -1
  16. package/dist/__tests__/envelope-contract.test.d.ts +15 -0
  17. package/dist/__tests__/envelope-contract.test.d.ts.map +1 -0
  18. package/dist/__tests__/envelope-contract.test.js +152 -0
  19. package/dist/__tests__/envelope-contract.test.js.map +1 -0
  20. package/dist/__tests__/errors.test.js +1 -0
  21. package/dist/__tests__/errors.test.js.map +1 -1
  22. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  23. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  24. package/dist/__tests__/handshake-augment.test.js +423 -0
  25. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  26. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  27. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  28. package/dist/__tests__/handshake-dormancy.test.js +207 -0
  29. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  30. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  31. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  32. package/dist/__tests__/handshake-formatter.test.js +67 -0
  33. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  34. package/dist/__tests__/handshake-preview.test.js +688 -3
  35. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  36. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  37. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  38. package/dist/__tests__/handshake.e2e.test.js +1252 -0
  39. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  40. package/dist/__tests__/handshake.test.js +611 -2
  41. package/dist/__tests__/handshake.test.js.map +1 -1
  42. package/dist/__tests__/manifest.test.js +118 -1
  43. package/dist/__tests__/manifest.test.js.map +1 -1
  44. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  45. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  46. package/dist/__tests__/orient.test.js +135 -8
  47. package/dist/__tests__/orient.test.js.map +1 -1
  48. package/dist/__tests__/perimeter.test.d.ts +2 -0
  49. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  50. package/dist/__tests__/perimeter.test.js +165 -0
  51. package/dist/__tests__/perimeter.test.js.map +1 -0
  52. package/dist/__tests__/personal-layer.test.d.ts +1 -2
  53. package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
  54. package/dist/__tests__/personal-layer.test.js +12 -48
  55. package/dist/__tests__/personal-layer.test.js.map +1 -1
  56. package/dist/__tests__/profiles.test.js +153 -5
  57. package/dist/__tests__/profiles.test.js.map +1 -1
  58. package/dist/__tests__/promote.test.js +71 -2
  59. package/dist/__tests__/promote.test.js.map +1 -1
  60. package/dist/__tests__/session-state-machine.test.js +45 -1
  61. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  62. package/dist/__tests__/session-switch.test.d.ts +2 -0
  63. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  64. package/dist/__tests__/session-switch.test.js +129 -0
  65. package/dist/__tests__/session-switch.test.js.map +1 -0
  66. package/dist/__tests__/setup-ingest.test.d.ts +2 -0
  67. package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
  68. package/dist/__tests__/setup-ingest.test.js +71 -0
  69. package/dist/__tests__/setup-ingest.test.js.map +1 -0
  70. package/dist/__tests__/setup-resolver.test.d.ts +14 -0
  71. package/dist/__tests__/setup-resolver.test.d.ts.map +1 -0
  72. package/dist/__tests__/setup-resolver.test.js +228 -0
  73. package/dist/__tests__/setup-resolver.test.js.map +1 -0
  74. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  75. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  76. package/dist/__tests__/skill-vocabulary.test.js +187 -0
  77. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  78. package/dist/__tests__/update-check.test.d.ts +2 -0
  79. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  80. package/dist/__tests__/update-check.test.js +56 -0
  81. package/dist/__tests__/update-check.test.js.map +1 -0
  82. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  83. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  84. package/dist/__tests__/upgrade-runner.test.js +42 -0
  85. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  86. package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
  87. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  88. package/dist/__tests__/vocabulary-leak.test.js +534 -0
  89. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  90. package/dist/__tests__/workspace.test.js +32 -12
  91. package/dist/__tests__/workspace.test.js.map +1 -1
  92. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  93. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  94. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  95. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  96. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  97. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  98. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  99. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  100. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  101. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  102. package/dist/commands/__tests__/setup-state.test.js +194 -0
  103. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  104. package/dist/commands/admin/seed.d.ts +46 -2
  105. package/dist/commands/admin/seed.d.ts.map +1 -1
  106. package/dist/commands/admin/seed.js +475 -33
  107. package/dist/commands/admin/seed.js.map +1 -1
  108. package/dist/commands/admin/seed.test.d.ts +5 -0
  109. package/dist/commands/admin/seed.test.d.ts.map +1 -1
  110. package/dist/commands/admin/seed.test.js +67 -2
  111. package/dist/commands/admin/seed.test.js.map +1 -1
  112. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  113. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  114. package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
  115. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  116. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  117. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  118. package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
  119. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  120. package/dist/commands/audit.d.ts.map +1 -1
  121. package/dist/commands/audit.js +30 -3
  122. package/dist/commands/audit.js.map +1 -1
  123. package/dist/commands/authority-domains.d.ts +146 -0
  124. package/dist/commands/authority-domains.d.ts.map +1 -0
  125. package/dist/commands/authority-domains.js +282 -0
  126. package/dist/commands/authority-domains.js.map +1 -0
  127. package/dist/commands/capture.d.ts.map +1 -1
  128. package/dist/commands/capture.js +3 -2
  129. package/dist/commands/capture.js.map +1 -1
  130. package/dist/commands/codex-prep.d.ts +1 -0
  131. package/dist/commands/codex-prep.d.ts.map +1 -1
  132. package/dist/commands/codex-prep.js +10 -7
  133. package/dist/commands/codex-prep.js.map +1 -1
  134. package/dist/commands/connect-config.test.d.ts +2 -0
  135. package/dist/commands/connect-config.test.d.ts.map +1 -0
  136. package/dist/commands/connect-config.test.js +44 -0
  137. package/dist/commands/connect-config.test.js.map +1 -0
  138. package/dist/commands/connect-context.d.ts +45 -0
  139. package/dist/commands/connect-context.d.ts.map +1 -0
  140. package/dist/commands/connect-context.js +64 -0
  141. package/dist/commands/connect-context.js.map +1 -0
  142. package/dist/commands/connect-context.test.d.ts +2 -0
  143. package/dist/commands/connect-context.test.d.ts.map +1 -0
  144. package/dist/commands/connect-context.test.js +110 -0
  145. package/dist/commands/connect-context.test.js.map +1 -0
  146. package/dist/commands/connect-handoff.d.ts +51 -0
  147. package/dist/commands/connect-handoff.d.ts.map +1 -0
  148. package/dist/commands/connect-handoff.js +70 -0
  149. package/dist/commands/connect-handoff.js.map +1 -0
  150. package/dist/commands/connect-integration.test.js +29 -12
  151. package/dist/commands/connect-integration.test.js.map +1 -1
  152. package/dist/commands/connect-screens.d.ts +6 -4
  153. package/dist/commands/connect-screens.d.ts.map +1 -1
  154. package/dist/commands/connect-screens.js +30 -19
  155. package/dist/commands/connect-screens.js.map +1 -1
  156. package/dist/commands/connect.d.ts +21 -6
  157. package/dist/commands/connect.d.ts.map +1 -1
  158. package/dist/commands/connect.js +78 -51
  159. package/dist/commands/connect.js.map +1 -1
  160. package/dist/commands/connect.test.js +64 -1
  161. package/dist/commands/connect.test.js.map +1 -1
  162. package/dist/commands/doctor.d.ts.map +1 -1
  163. package/dist/commands/doctor.js +68 -3
  164. package/dist/commands/doctor.js.map +1 -1
  165. package/dist/commands/doctor.test.js +131 -0
  166. package/dist/commands/doctor.test.js.map +1 -1
  167. package/dist/commands/handshake.d.ts +194 -2
  168. package/dist/commands/handshake.d.ts.map +1 -1
  169. package/dist/commands/handshake.js +1738 -44
  170. package/dist/commands/handshake.js.map +1 -1
  171. package/dist/commands/method.d.ts.map +1 -1
  172. package/dist/commands/method.js +3 -0
  173. package/dist/commands/method.js.map +1 -1
  174. package/dist/commands/migrate-setup.d.ts +18 -0
  175. package/dist/commands/migrate-setup.d.ts.map +1 -0
  176. package/dist/commands/migrate-setup.js +198 -0
  177. package/dist/commands/migrate-setup.js.map +1 -0
  178. package/dist/commands/orient.d.ts +15 -2
  179. package/dist/commands/orient.d.ts.map +1 -1
  180. package/dist/commands/orient.js +86 -4
  181. package/dist/commands/orient.js.map +1 -1
  182. package/dist/commands/profile.d.ts +11 -1
  183. package/dist/commands/profile.d.ts.map +1 -1
  184. package/dist/commands/profile.js +109 -26
  185. package/dist/commands/profile.js.map +1 -1
  186. package/dist/commands/promote.d.ts.map +1 -1
  187. package/dist/commands/promote.js +25 -2
  188. package/dist/commands/promote.js.map +1 -1
  189. package/dist/commands/relate.d.ts.map +1 -1
  190. package/dist/commands/relate.js +13 -0
  191. package/dist/commands/relate.js.map +1 -1
  192. package/dist/commands/session.d.ts.map +1 -1
  193. package/dist/commands/session.js +55 -18
  194. package/dist/commands/session.js.map +1 -1
  195. package/dist/commands/setup-audit.d.ts +59 -0
  196. package/dist/commands/setup-audit.d.ts.map +1 -0
  197. package/dist/commands/setup-audit.js +250 -0
  198. package/dist/commands/setup-audit.js.map +1 -0
  199. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  200. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  201. package/dist/commands/setup-detect-surfaces.js +76 -0
  202. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  203. package/dist/commands/setup-ingest.d.ts +17 -0
  204. package/dist/commands/setup-ingest.d.ts.map +1 -0
  205. package/dist/commands/setup-ingest.js +226 -0
  206. package/dist/commands/setup-ingest.js.map +1 -0
  207. package/dist/commands/setup-resolver.d.ts +58 -0
  208. package/dist/commands/setup-resolver.d.ts.map +1 -0
  209. package/dist/commands/setup-resolver.js +150 -0
  210. package/dist/commands/setup-resolver.js.map +1 -0
  211. package/dist/commands/setup-state.d.ts +42 -0
  212. package/dist/commands/setup-state.d.ts.map +1 -0
  213. package/dist/commands/setup-state.js +93 -0
  214. package/dist/commands/setup-state.js.map +1 -0
  215. package/dist/commands/setup.d.ts +17 -9
  216. package/dist/commands/setup.d.ts.map +1 -1
  217. package/dist/commands/setup.js +52 -131
  218. package/dist/commands/setup.js.map +1 -1
  219. package/dist/commands/upgrade.d.ts +5 -0
  220. package/dist/commands/upgrade.d.ts.map +1 -0
  221. package/dist/commands/upgrade.js +89 -0
  222. package/dist/commands/upgrade.js.map +1 -0
  223. package/dist/commands/whoami.d.ts +12 -0
  224. package/dist/commands/whoami.d.ts.map +1 -0
  225. package/dist/commands/whoami.js +70 -0
  226. package/dist/commands/whoami.js.map +1 -0
  227. package/dist/commands/whoami.test.d.ts +2 -0
  228. package/dist/commands/whoami.test.d.ts.map +1 -0
  229. package/dist/commands/whoami.test.js +50 -0
  230. package/dist/commands/whoami.test.js.map +1 -0
  231. package/dist/commands/workspace.d.ts +74 -2
  232. package/dist/commands/workspace.d.ts.map +1 -1
  233. package/dist/commands/workspace.js +26 -2
  234. package/dist/commands/workspace.js.map +1 -1
  235. package/dist/formatters/audit.d.ts +6 -0
  236. package/dist/formatters/audit.d.ts.map +1 -1
  237. package/dist/formatters/audit.js.map +1 -1
  238. package/dist/formatters/handshake.d.ts +19 -3
  239. package/dist/formatters/handshake.d.ts.map +1 -1
  240. package/dist/formatters/handshake.js +48 -13
  241. package/dist/formatters/handshake.js.map +1 -1
  242. package/dist/formatters/orient.d.ts +50 -4
  243. package/dist/formatters/orient.d.ts.map +1 -1
  244. package/dist/formatters/orient.js +64 -16
  245. package/dist/formatters/orient.js.map +1 -1
  246. package/dist/formatters/session.js +1 -1
  247. package/dist/formatters/session.js.map +1 -1
  248. package/dist/generators/adapters.js +2 -2
  249. package/dist/generators/boundary-manifest.d.ts +29 -0
  250. package/dist/generators/boundary-manifest.d.ts.map +1 -0
  251. package/dist/generators/boundary-manifest.js +183 -0
  252. package/dist/generators/boundary-manifest.js.map +1 -0
  253. package/dist/generators/boundary-manifest.test.d.ts +2 -0
  254. package/dist/generators/boundary-manifest.test.d.ts.map +1 -0
  255. package/dist/generators/boundary-manifest.test.js +91 -0
  256. package/dist/generators/boundary-manifest.test.js.map +1 -0
  257. package/dist/generators/context-md.js +6 -6
  258. package/dist/generators/context-md.js.map +1 -1
  259. package/dist/generators/manifest.d.ts +78 -0
  260. package/dist/generators/manifest.d.ts.map +1 -1
  261. package/dist/generators/manifest.js +125 -14
  262. package/dist/generators/manifest.js.map +1 -1
  263. package/dist/generators/portable-knowledge.d.ts +6 -12
  264. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  265. package/dist/generators/portable-knowledge.js +2 -19
  266. package/dist/generators/portable-knowledge.js.map +1 -1
  267. package/dist/generators/region-projections.d.ts +18 -0
  268. package/dist/generators/region-projections.d.ts.map +1 -0
  269. package/dist/generators/region-projections.js +49 -0
  270. package/dist/generators/region-projections.js.map +1 -0
  271. package/dist/generators/region-projections.test.d.ts +2 -0
  272. package/dist/generators/region-projections.test.d.ts.map +1 -0
  273. package/dist/generators/region-projections.test.js +63 -0
  274. package/dist/generators/region-projections.test.js.map +1 -0
  275. package/dist/generators/region.d.ts +24 -0
  276. package/dist/generators/region.d.ts.map +1 -0
  277. package/dist/generators/region.js +87 -0
  278. package/dist/generators/region.js.map +1 -0
  279. package/dist/generators/region.test.d.ts +2 -0
  280. package/dist/generators/region.test.d.ts.map +1 -0
  281. package/dist/generators/region.test.js +126 -0
  282. package/dist/generators/region.test.js.map +1 -0
  283. package/dist/generators/surface-profiles.d.ts +1 -2
  284. package/dist/generators/surface-profiles.d.ts.map +1 -1
  285. package/dist/generators/surface-profiles.js.map +1 -1
  286. package/dist/index.js +242 -26
  287. package/dist/index.js.map +1 -1
  288. package/dist/lib/activation.d.ts.map +1 -1
  289. package/dist/lib/activation.js +3 -3
  290. package/dist/lib/activation.js.map +1 -1
  291. package/dist/lib/activation.test.js +3 -3
  292. package/dist/lib/activation.test.js.map +1 -1
  293. package/dist/lib/canonicalRefs.d.ts +141 -0
  294. package/dist/lib/canonicalRefs.d.ts.map +1 -0
  295. package/dist/lib/canonicalRefs.js +150 -0
  296. package/dist/lib/canonicalRefs.js.map +1 -0
  297. package/dist/lib/client.d.ts.map +1 -1
  298. package/dist/lib/client.js +27 -17
  299. package/dist/lib/client.js.map +1 -1
  300. package/dist/lib/config.d.ts +98 -9
  301. package/dist/lib/config.d.ts.map +1 -1
  302. package/dist/lib/config.js +231 -44
  303. package/dist/lib/config.js.map +1 -1
  304. package/dist/lib/connectKeyLabel.d.ts +9 -0
  305. package/dist/lib/connectKeyLabel.d.ts.map +1 -0
  306. package/dist/lib/connectKeyLabel.js +12 -0
  307. package/dist/lib/connectKeyLabel.js.map +1 -0
  308. package/dist/lib/constants.d.ts +2 -0
  309. package/dist/lib/constants.d.ts.map +1 -1
  310. package/dist/lib/constants.js +2 -0
  311. package/dist/lib/constants.js.map +1 -1
  312. package/dist/lib/errors.d.ts +3 -0
  313. package/dist/lib/errors.d.ts.map +1 -1
  314. package/dist/lib/errors.js +3 -0
  315. package/dist/lib/errors.js.map +1 -1
  316. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  317. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  318. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  319. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  320. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  321. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  322. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  323. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  324. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  325. package/dist/lib/onboarding-path-b.js +0 -1
  326. package/dist/lib/onboarding-path-b.js.map +1 -1
  327. package/dist/lib/onboarding-shared.d.ts +0 -1
  328. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  329. package/dist/lib/onboarding-shared.js +1 -17
  330. package/dist/lib/onboarding-shared.js.map +1 -1
  331. package/dist/lib/profiles.d.ts +3 -1
  332. package/dist/lib/profiles.d.ts.map +1 -1
  333. package/dist/lib/profiles.js +9 -6
  334. package/dist/lib/profiles.js.map +1 -1
  335. package/dist/lib/session.d.ts +10 -0
  336. package/dist/lib/session.d.ts.map +1 -1
  337. package/dist/lib/session.js +14 -0
  338. package/dist/lib/session.js.map +1 -1
  339. package/dist/lib/update-check.d.ts +20 -0
  340. package/dist/lib/update-check.d.ts.map +1 -1
  341. package/dist/lib/update-check.js +122 -21
  342. package/dist/lib/update-check.js.map +1 -1
  343. package/dist/lib/upgrade-runner.d.ts +21 -0
  344. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  345. package/dist/lib/upgrade-runner.js +109 -0
  346. package/dist/lib/upgrade-runner.js.map +1 -0
  347. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  348. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  349. package/dist/lib/workspaceVocabCache.js +98 -0
  350. package/dist/lib/workspaceVocabCache.js.map +1 -0
  351. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  352. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  353. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  354. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  355. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  356. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  357. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  358. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  359. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  360. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  361. package/dist/setup/__tests__/state-machine.test.js +341 -0
  362. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  363. package/dist/setup/detect-surfaces.d.ts +21 -0
  364. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  365. package/dist/setup/detect-surfaces.js +39 -0
  366. package/dist/setup/detect-surfaces.js.map +1 -0
  367. package/dist/setup/manifest-writer.d.ts +17 -0
  368. package/dist/setup/manifest-writer.d.ts.map +1 -0
  369. package/dist/setup/manifest-writer.js +153 -0
  370. package/dist/setup/manifest-writer.js.map +1 -0
  371. package/dist/setup/perimeter.d.ts +72 -0
  372. package/dist/setup/perimeter.d.ts.map +1 -0
  373. package/dist/setup/perimeter.js +128 -0
  374. package/dist/setup/perimeter.js.map +1 -0
  375. package/dist/setup/state-machine.d.ts +67 -0
  376. package/dist/setup/state-machine.d.ts.map +1 -0
  377. package/dist/setup/state-machine.js +124 -0
  378. package/dist/setup/state-machine.js.map +1 -0
  379. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  380. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  381. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  382. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  383. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  384. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  385. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  386. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  387. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  388. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  389. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  390. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  391. package/dist/surfaces/adapter.d.ts +70 -0
  392. package/dist/surfaces/adapter.d.ts.map +1 -0
  393. package/dist/surfaces/adapter.js +2 -0
  394. package/dist/surfaces/adapter.js.map +1 -0
  395. package/dist/surfaces/adapters/claude.d.ts +3 -0
  396. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  397. package/dist/surfaces/adapters/claude.js +67 -0
  398. package/dist/surfaces/adapters/claude.js.map +1 -0
  399. package/dist/surfaces/adapters/codex.d.ts +3 -0
  400. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  401. package/dist/surfaces/adapters/codex.js +61 -0
  402. package/dist/surfaces/adapters/codex.js.map +1 -0
  403. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  404. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  405. package/dist/surfaces/adapters/copilot.js +59 -0
  406. package/dist/surfaces/adapters/copilot.js.map +1 -0
  407. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  408. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  409. package/dist/surfaces/adapters/cursor.js +78 -0
  410. package/dist/surfaces/adapters/cursor.js.map +1 -0
  411. package/dist/surfaces/registry.d.ts +58 -2
  412. package/dist/surfaces/registry.d.ts.map +1 -1
  413. package/dist/surfaces/registry.js +82 -7
  414. package/dist/surfaces/registry.js.map +1 -1
  415. package/dist/surfaces/telemetry.d.ts +17 -0
  416. package/dist/surfaces/telemetry.d.ts.map +1 -0
  417. package/dist/surfaces/telemetry.js +31 -0
  418. package/dist/surfaces/telemetry.js.map +1 -0
  419. package/package.json +2 -1
  420. package/dist/__tests__/setup.test.d.ts +0 -2
  421. package/dist/__tests__/setup.test.d.ts.map +0 -1
  422. package/dist/__tests__/setup.test.js +0 -141
  423. package/dist/__tests__/setup.test.js.map +0 -1
  424. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  425. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  426. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  427. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  428. package/dist/lib/onboarding-phases.d.ts +0 -9
  429. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  430. package/dist/lib/onboarding-phases.js +0 -120
  431. package/dist/lib/onboarding-phases.js.map +0 -1
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Vocabulary leak test — WP-436 S2 + TEN-2053 S2 (PAT-229, DEC-1021).
3
+ *
4
+ * Asserts two classes of regression are absent from user-facing CLI/MCP output:
5
+ *
6
+ * 1. **Workspace-vocab leaks** (`bet`/`BET`) — caught when the workspace
7
+ * vocabulary is overridden to non-bet labels. Any literal "bet"/"BET"
8
+ * outside stored entry IDs means a label resolver was bypassed.
9
+ *
10
+ * 2. **Stale governance-ID leaks** (TEN-2053 S2) — bare governance-ID
11
+ * prefixes without digits (e.g. typo'd "STD-" with no number, or
12
+ * "DEC-foo"). Stored entry IDs (`STD-113`, `DEC-1021`, etc.) are
13
+ * stripped BEFORE the leak check, so legitimate IDs don't false-
14
+ * positive. We do NOT treat Product Brain Method vocabulary as a leak
15
+ * (`Chain`, `Constellation`, `SSOT`, `shaping`, `handoff`, `gates`,
16
+ * `verdict`, `blocking`, `advisory` are the product — not jargon).
17
+ * The real leak class is OUR entry IDs (specific to our team's chain)
18
+ * surfacing in customer-facing output.
19
+ *
20
+ * Coverage:
21
+ * ALL_FIXTURES × { formatOrient, formatOrientBrief, formatSearchResults,
22
+ * formatCaptureReceipt, formatAudit (PASS/FAIL/verbose) }
23
+ * plus runOrient end-to-end command wiring.
24
+ *
25
+ * MCP-side note: the MCP markdown response in
26
+ * `packages/mcp-server/src/tools/audit.ts:handleAuditRun` is structurally
27
+ * identical to `formatAudit` here — kept in sync by manual review; no
28
+ * dedicated MCP audit test currently exists (`find packages/mcp-server -name
29
+ * "*.test.ts" -path "*audit*"` returns empty as of TEN-2053 S2).
30
+ *
31
+ * Whitelist: stored entry IDs matching /\b[A-Z]+-\d+\b/ (e.g. WP-436, BET-42,
32
+ * DEC-1021) are stripped before the leak check — they're stable database
33
+ * references, not vocabulary labels.
34
+ *
35
+ * Perf: fixture workspaces are seeded purely in-memory (no Convex, no HTTP).
36
+ * BET-241: no fixture has >100 entries.
37
+ */
38
+ export {};
39
+ //# sourceMappingURL=vocabulary-leak.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vocabulary-leak.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/vocabulary-leak.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG"}
@@ -0,0 +1,534 @@
1
+ /**
2
+ * Vocabulary leak test — WP-436 S2 + TEN-2053 S2 (PAT-229, DEC-1021).
3
+ *
4
+ * Asserts two classes of regression are absent from user-facing CLI/MCP output:
5
+ *
6
+ * 1. **Workspace-vocab leaks** (`bet`/`BET`) — caught when the workspace
7
+ * vocabulary is overridden to non-bet labels. Any literal "bet"/"BET"
8
+ * outside stored entry IDs means a label resolver was bypassed.
9
+ *
10
+ * 2. **Stale governance-ID leaks** (TEN-2053 S2) — bare governance-ID
11
+ * prefixes without digits (e.g. typo'd "STD-" with no number, or
12
+ * "DEC-foo"). Stored entry IDs (`STD-113`, `DEC-1021`, etc.) are
13
+ * stripped BEFORE the leak check, so legitimate IDs don't false-
14
+ * positive. We do NOT treat Product Brain Method vocabulary as a leak
15
+ * (`Chain`, `Constellation`, `SSOT`, `shaping`, `handoff`, `gates`,
16
+ * `verdict`, `blocking`, `advisory` are the product — not jargon).
17
+ * The real leak class is OUR entry IDs (specific to our team's chain)
18
+ * surfacing in customer-facing output.
19
+ *
20
+ * Coverage:
21
+ * ALL_FIXTURES × { formatOrient, formatOrientBrief, formatSearchResults,
22
+ * formatCaptureReceipt, formatAudit (PASS/FAIL/verbose) }
23
+ * plus runOrient end-to-end command wiring.
24
+ *
25
+ * MCP-side note: the MCP markdown response in
26
+ * `packages/mcp-server/src/tools/audit.ts:handleAuditRun` is structurally
27
+ * identical to `formatAudit` here — kept in sync by manual review; no
28
+ * dedicated MCP audit test currently exists (`find packages/mcp-server -name
29
+ * "*.test.ts" -path "*audit*"` returns empty as of TEN-2053 S2).
30
+ *
31
+ * Whitelist: stored entry IDs matching /\b[A-Z]+-\d+\b/ (e.g. WP-436, BET-42,
32
+ * DEC-1021) are stripped before the leak check — they're stable database
33
+ * references, not vocabulary labels.
34
+ *
35
+ * Perf: fixture workspaces are seeded purely in-memory (no Convex, no HTTP).
36
+ * BET-241: no fixture has >100 entries.
37
+ */
38
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
39
+ import { formatOrient, formatOrientBrief } from '../formatters/orient.js';
40
+ import { formatSearchResults } from '../formatters/search.js';
41
+ import { formatCaptureReceipt } from '../formatters/capture.js';
42
+ import { formatAudit } from '../formatters/audit.js';
43
+ import { clearVocabCache } from '../lib/workspaceVocabCache.js';
44
+ // ─── Fixture workspace vocabulary contexts ────────────────────────────────────
45
+ /**
46
+ * Fixture A — Generic Item workspace.
47
+ * work_package.singular = "Item", plural = "Items".
48
+ * Any "bet"/"BET" in output (outside stored IDs) is a leak.
49
+ */
50
+ const GENERIC_ITEM_CTX = {
51
+ collectionLabels: {
52
+ work_package: {
53
+ singular: 'Item',
54
+ plural: 'Items',
55
+ verb_start: 'create',
56
+ verb_commit: 'commit',
57
+ verb_complete: 'archive',
58
+ },
59
+ },
60
+ };
61
+ /**
62
+ * Fixture B — Linear Project workspace.
63
+ * work_package.singular = "Project", plural = "Projects".
64
+ */
65
+ const LINEAR_PROJECT_CTX = {
66
+ collectionLabels: {
67
+ work_package: {
68
+ singular: 'Project',
69
+ plural: 'Projects',
70
+ verb_start: 'start',
71
+ verb_commit: 'commit',
72
+ verb_complete: 'complete',
73
+ },
74
+ },
75
+ };
76
+ /**
77
+ * Fixture C — Initiative workspace.
78
+ * work_package.singular = "Initiative", plural = "Initiatives".
79
+ */
80
+ const INITIATIVE_CTX = {
81
+ collectionLabels: {
82
+ work_package: {
83
+ singular: 'Initiative',
84
+ plural: 'Initiatives',
85
+ verb_start: 'launch',
86
+ verb_commit: 'commit',
87
+ verb_complete: 'close',
88
+ },
89
+ },
90
+ };
91
+ /**
92
+ * Fixture D — Defaults-only workspace (Layer 2 regression guard).
93
+ * NO collectionLabels (no workspace override). Only collectionDefaults
94
+ * populated — mirrors what a real workspace looks like AFTER the
95
+ * seedCollectionLabels migration but BEFORE any methodology preset.
96
+ *
97
+ * INS-1446: this fixture catches the class of regression where consumers
98
+ * drop collectionDefaults from the vocab response and Layer 2 goes dead.
99
+ */
100
+ const DEFAULTS_ONLY_CTX = {
101
+ collectionDefaults: {
102
+ work_package: {
103
+ singular: 'Bet',
104
+ plural: 'Bets',
105
+ verb_start: 'shape',
106
+ verb_commit: 'commit',
107
+ verb_complete: 'ship',
108
+ },
109
+ },
110
+ };
111
+ /**
112
+ * skipLeakCheck: true — fixture labels themselves contain "bet" (correct resolved
113
+ * output), so assertNoBetLeak would false-positive. These fixtures still exercise
114
+ * the positive label resolution check; leak tests are covered by the separate
115
+ * "defaults-only" command-level tests below.
116
+ */
117
+ const ALL_FIXTURES = [
118
+ { name: 'Generic Item', ctx: GENERIC_ITEM_CTX },
119
+ { name: 'Linear Project', ctx: LINEAR_PROJECT_CTX },
120
+ { name: 'Initiative', ctx: INITIATIVE_CTX },
121
+ { name: 'Defaults-only (Bet)', ctx: DEFAULTS_ONLY_CTX, skipLeakCheck: true },
122
+ ];
123
+ // ─── Shared test fixtures ─────────────────────────────────────────────────────
124
+ /** Typical orient view with some active work packages. Perf: <100 entries (BET-241). */
125
+ const ORIENT_VIEW = {
126
+ stage: 'grounded',
127
+ strategicContext: {
128
+ vision: 'Build the best product knowledge system',
129
+ purpose: 'Make knowledge work for everyone',
130
+ activeBetCount: 2,
131
+ currentWorkPackage: 'WP-100',
132
+ activeTensionCount: 1,
133
+ productAreas: ['Growth'],
134
+ productAreaCount: 1,
135
+ },
136
+ activeWorkPackages: [
137
+ { entryId: 'WP-100', name: 'Ship vocabulary foundation', collectionSlug: 'work-packages', status: 'active' },
138
+ { entryId: 'WP-101', name: 'Build orient view', collectionSlug: 'work-packages', status: 'active' },
139
+ ],
140
+ governance: {
141
+ principles: [],
142
+ standards: [],
143
+ businessRules: [],
144
+ },
145
+ tensions: [],
146
+ architectureNotes: [],
147
+ proposals: [],
148
+ absenceSignals: [],
149
+ plannedWork: {
150
+ uncommittedDrafts: [],
151
+ inProgressEntries: [],
152
+ openTensions: [],
153
+ },
154
+ priorSessions: [],
155
+ recoveryBlock: null,
156
+ };
157
+ // ─── Leak detection utility ───────────────────────────────────────────────────
158
+ /**
159
+ * Strip stored entry IDs from output before checking for leaks.
160
+ * Whitelist: /\b[A-Z]+-\d+\b/ (e.g. WP-100, BET-42, DEC-1021).
161
+ * These are stable DB references, not vocabulary labels.
162
+ */
163
+ function stripStoredIds(output) {
164
+ return output.replace(/\b[A-Z]+-\d+\b/g, '<<ENTRYID>>');
165
+ }
166
+ /**
167
+ * Assert no literal bet/BET in output (outside stored entry IDs).
168
+ * We check both lowercase `bet` and uppercase `BET` as word-boundary matches.
169
+ */
170
+ function assertNoBetLeak(output, fixture, surface) {
171
+ const stripped = stripStoredIds(output);
172
+ const hasBetLeak = /\bbet\b/i.test(stripped);
173
+ if (hasBetLeak) {
174
+ // Find the first match for a helpful error message
175
+ const match = stripped.match(/\bbet\b/i);
176
+ const idx = match?.index ?? 0;
177
+ const context = stripped.slice(Math.max(0, idx - 30), idx + 50);
178
+ throw new Error(`[vocabulary-leak] Literal "bet" found in "${fixture}" workspace, "${surface}" surface.\n` +
179
+ `Context: ...${context}...\n` +
180
+ `Full output (stripped IDs):\n${stripped}`);
181
+ }
182
+ }
183
+ /**
184
+ * Stale governance-ID leak patterns (TEN-2053 S2).
185
+ *
186
+ * After `stripStoredIds()` replaces /\b[A-Z]+-\d+\b/ with <<ENTRYID>>, the
187
+ * only residue we treat as a leak is a bare governance prefix WITHOUT digits
188
+ * — i.e. someone wrote `STD-foo` or `DEC-something` in free-form text, not
189
+ * a real entry reference. Real IDs (STD-113, DEC-1021) are stripped before
190
+ * this check.
191
+ *
192
+ * PBM concepts (Chain, Constellation, SSOT, shaping, handoff, gates, verdict)
193
+ * are intentionally NOT treated as leaks — they are the product's vocabulary.
194
+ * Workspace-vocab values (bet/Bet/work_package) are covered by
195
+ * `assertNoBetLeak` above.
196
+ */
197
+ const GOVERNANCE_LEAK_PATTERNS = [
198
+ // Bare governance prefix not followed by a digit (catches typos like "STD-foo"
199
+ // or "DEC- something"). Stripped IDs (<<ENTRYID>>) are already replaced and
200
+ // won't match this pattern.
201
+ { name: 'bare governance prefix', re: /\b(STD|DEC|INS|TEN|BET|WP|BR|PRI|FEAT|PAT|ARCH|KR)-(?!\d)/ },
202
+ ];
203
+ /**
204
+ * Assert no governance-vocab leak in output (after stripping stored IDs).
205
+ * Tests every pattern and throws with the FIRST match's context on failure.
206
+ */
207
+ function assertNoGovernanceLeak(output, fixture, surface) {
208
+ const stripped = stripStoredIds(output);
209
+ for (const { name, re } of GOVERNANCE_LEAK_PATTERNS) {
210
+ const match = stripped.match(re);
211
+ if (match) {
212
+ const idx = match.index ?? 0;
213
+ const context = stripped.slice(Math.max(0, idx - 30), idx + 50);
214
+ throw new Error(`[vocabulary-leak] Governance vocab "${name}" (matched: "${match[0]}") found in "${fixture}" fixture, "${surface}" surface.\n` +
215
+ `Context: ...${context}...\n` +
216
+ `Full output (stripped IDs):\n${stripped}`);
217
+ }
218
+ }
219
+ }
220
+ // ─── Captured search result fixture ──────────────────────────────────────────
221
+ /** Minimal search result that matches the formatSearchResults expected shape. */
222
+ const SEARCH_RESULTS = [
223
+ { entryId: 'WP-100', name: 'Ship vocabulary foundation', collectionSlug: 'work-packages', status: 'active' },
224
+ { entryId: 'DEC-42', name: 'Resolver architecture decision', collectionSlug: 'decisions', status: 'published' },
225
+ ];
226
+ // ─── Capture receipt fixture ──────────────────────────────────────────────────
227
+ /** Minimal capture receipt that exercises the formatter. */
228
+ const CAPTURE_RECEIPT = {
229
+ entryId: 'WP-200',
230
+ status: 'draft',
231
+ collection: 'work-packages',
232
+ name: 'New vocabulary test entry',
233
+ classification: {
234
+ collection: 'work-packages',
235
+ confidence: 0.9,
236
+ tier: 'high',
237
+ },
238
+ };
239
+ // ─── Test suites ──────────────────────────────────────────────────────────────
240
+ describe('vocabulary-leak: orient formatters', () => {
241
+ for (const { name, ctx, skipLeakCheck } of ALL_FIXTURES) {
242
+ it(`${name}: formatOrient contains no literal "bet" outside stored IDs`, () => {
243
+ const output = formatOrient(ORIENT_VIEW, ctx);
244
+ if (!skipLeakCheck)
245
+ assertNoBetLeak(output, name, 'pb orient (full)');
246
+ // Governance-vocab assertion applies to ALL fixtures (including BET-label).
247
+ assertNoGovernanceLeak(output, name, 'pb orient (full)');
248
+ // Also verify the resolved label appears (positive check)
249
+ const expectedLabel = ctx.collectionLabels?.work_package?.plural ?? ctx.collectionDefaults?.work_package?.plural ?? 'work_package';
250
+ expect(output).toContain(expectedLabel);
251
+ });
252
+ it(`${name}: formatOrientBrief contains no literal "bet" outside stored IDs`, () => {
253
+ const output = formatOrientBrief(ORIENT_VIEW, ctx);
254
+ if (!skipLeakCheck)
255
+ assertNoBetLeak(output, name, 'pb orient --brief');
256
+ assertNoGovernanceLeak(output, name, 'pb orient --brief');
257
+ // Also verify the resolved label appears in the count line
258
+ const expectedLabel = ctx.collectionLabels?.work_package?.plural ?? ctx.collectionDefaults?.work_package?.plural ?? 'work_package';
259
+ expect(output).toContain(expectedLabel);
260
+ });
261
+ }
262
+ });
263
+ describe('vocabulary-leak: search formatter', () => {
264
+ for (const { name, skipLeakCheck } of ALL_FIXTURES) {
265
+ const titleSuffix = skipLeakCheck
266
+ ? '[skipLeakCheck — label is "Bet"; surface does not render vocab labels anyway]'
267
+ : 'contains no literal "bet" outside stored IDs';
268
+ it(`${name}: formatSearchResults ${titleSuffix}`, () => {
269
+ // formatSearchResults renders entry names and slugs — none should contain "bet"
270
+ // since our fixtures use work-packages (not bets) as the slug.
271
+ const output = formatSearchResults(SEARCH_RESULTS);
272
+ if (!skipLeakCheck)
273
+ assertNoBetLeak(output, name, 'pb search');
274
+ // Governance-vocab assertion applies universally.
275
+ assertNoGovernanceLeak(output, name, 'pb search');
276
+ });
277
+ }
278
+ });
279
+ describe('vocabulary-leak: capture formatter', () => {
280
+ for (const { name, skipLeakCheck } of ALL_FIXTURES) {
281
+ const titleSuffix = skipLeakCheck
282
+ ? '[skipLeakCheck — label is "Bet"; surface does not render vocab labels anyway]'
283
+ : 'contains no literal "bet" outside stored IDs';
284
+ it(`${name}: formatCaptureReceipt ${titleSuffix}`, () => {
285
+ const output = formatCaptureReceipt(CAPTURE_RECEIPT);
286
+ if (!skipLeakCheck)
287
+ assertNoBetLeak(output, name, 'pb capture');
288
+ assertNoGovernanceLeak(output, name, 'pb capture');
289
+ });
290
+ }
291
+ });
292
+ // ─── pb audit fixtures (TEN-2053 S2) ─────────────────────────────────────────
293
+ //
294
+ // formatAudit is workspace-vocab-agnostic (no vocabCtx parameter) — it renders
295
+ // gate detail/fix/hint strings produced upstream by chain.auditBet. The test
296
+ // runs the same AuditResult through every fixture so we exercise the matrix
297
+ // even though `bet` leaks aren't reachable through formatAudit by design.
298
+ //
299
+ // PASS_AUDIT_RESULT: success path (count summary). No gate jargon in detail.
300
+ // FAIL_AUDIT_RESULT: exercises fix/hint strings — the riskiest leak vector.
301
+ const PASS_AUDIT_RESULT = {
302
+ entryId: 'WP-100',
303
+ entryName: 'Ship vocabulary foundation',
304
+ phase: 'shaping',
305
+ clean: true,
306
+ verdict: 'pass',
307
+ gates: [
308
+ {
309
+ gate: 'intentional-relations',
310
+ status: 'pass',
311
+ blocking: true,
312
+ detail: '3 intentional relation(s) found. No duplicates detected.',
313
+ },
314
+ {
315
+ gate: 'strategic-anchor',
316
+ status: 'pass',
317
+ blocking: true,
318
+ detail: 'Linked to a strategic parent.',
319
+ },
320
+ {
321
+ gate: 'field-completeness',
322
+ status: 'pass',
323
+ blocking: true,
324
+ detail: 'All required fields populated.',
325
+ },
326
+ ],
327
+ summary: { total: 3, passed: 3, failed: 0, warned: 0 },
328
+ elapsed_ms: 42,
329
+ };
330
+ const FAIL_AUDIT_RESULT = {
331
+ entryId: 'WP-200',
332
+ entryName: 'Incomplete work item',
333
+ phase: 'shaping',
334
+ clean: false,
335
+ verdict: 'fail',
336
+ gates: [
337
+ {
338
+ gate: 'intentional-relations',
339
+ status: 'fail',
340
+ blocking: true,
341
+ detail: '0 intentional relations.',
342
+ fix: "Set field 'problem' to 'needs definition'.",
343
+ fixType: 'exact',
344
+ },
345
+ {
346
+ gate: 'strategic-anchor',
347
+ status: 'pass',
348
+ blocking: true,
349
+ detail: 'Linked to a strategic parent.',
350
+ },
351
+ {
352
+ gate: 'field-completeness',
353
+ status: 'fail',
354
+ blocking: true,
355
+ detail: 'Missing: appetite, doneWhen.',
356
+ fix: "Update the entry to populate: appetite, doneWhen.",
357
+ fixType: 'exact',
358
+ hint: 'Required fields per the field schema.',
359
+ },
360
+ ],
361
+ summary: { total: 3, passed: 1, failed: 2, warned: 0 },
362
+ elapsed_ms: 55,
363
+ };
364
+ describe('vocabulary-leak: audit formatter', () => {
365
+ for (const { name, skipLeakCheck } of ALL_FIXTURES) {
366
+ // formatAudit is vocab-agnostic, but we still skip the bet-leak check on the
367
+ // "Bet" label fixture per the existing skipLeakCheck convention.
368
+ it(`${name}: formatAudit (PASS verdict) contains no governance vocab`, () => {
369
+ const output = formatAudit(PASS_AUDIT_RESULT);
370
+ if (!skipLeakCheck)
371
+ assertNoBetLeak(output, name, 'pb audit (PASS)');
372
+ assertNoGovernanceLeak(output, name, 'pb audit (PASS)');
373
+ });
374
+ it(`${name}: formatAudit (FAIL verdict) contains no governance vocab`, () => {
375
+ const output = formatAudit(FAIL_AUDIT_RESULT);
376
+ if (!skipLeakCheck)
377
+ assertNoBetLeak(output, name, 'pb audit (FAIL)');
378
+ assertNoGovernanceLeak(output, name, 'pb audit (FAIL)');
379
+ });
380
+ it(`${name}: formatAudit (--verbose) contains no governance vocab`, () => {
381
+ const output = formatAudit(FAIL_AUDIT_RESULT, { verbose: true });
382
+ if (!skipLeakCheck)
383
+ assertNoBetLeak(output, name, 'pb audit (verbose)');
384
+ assertNoGovernanceLeak(output, name, 'pb audit (verbose)');
385
+ });
386
+ }
387
+ });
388
+ // ─── Command-level leak tests (Gap 2) ────────────────────────────────────────
389
+ //
390
+ // These tests invoke `runOrient` from the actual CLI command module to prove
391
+ // the command SUPPLIES vocabCtx to formatOrient/formatOrientBrief — not just
392
+ // that the formatters work when given ctx directly.
393
+ //
394
+ // Mocking strategy (mirrors orient.test.ts):
395
+ // - kernelCall is mocked at module level
396
+ // - getConfigOrGuide returns { apiKey: 'pb_sk_test', siteUrl: 'https://test.convex.site' }
397
+ // - runCliCommand is mocked to call fn() + formatPretty() and write to stdout
398
+ // - chain.getVocabulary returns the fixture vocabCtx
399
+ // - chain.getOrientView returns ORIENT_VIEW
400
+ //
401
+ // The vocab cache is cleared before each test to ensure fresh fetches.
402
+ const kernelCallMock = vi.fn();
403
+ vi.mock('../lib/client.js', () => ({
404
+ kernelCall: (...args) => kernelCallMock(...args),
405
+ }));
406
+ vi.mock('../lib/config.js', () => ({
407
+ getConfig: vi.fn(() => ({ apiKey: 'pb_sk_test', siteUrl: 'https://test.convex.site' })),
408
+ getConfigOrGuide: vi.fn(() => Promise.resolve({ apiKey: 'pb_sk_test', siteUrl: 'https://test.convex.site' })),
409
+ }));
410
+ vi.mock('../lib/runner.js', () => ({
411
+ runCliCommand: vi.fn(async ({ fn, formatPretty }) => {
412
+ const data = await fn();
413
+ process.stdout.write(formatPretty(data) + '\n');
414
+ }),
415
+ isJsonMode: vi.fn(() => false),
416
+ }));
417
+ vi.mock('../lib/strip.js', async (importOriginal) => {
418
+ const actual = await importOriginal();
419
+ return {
420
+ ...actual,
421
+ stripConvexInternals: (v) => v,
422
+ };
423
+ });
424
+ // Install a no-op global fetch so fire-and-forget byte reports don't fail.
425
+ function installFetchMock() {
426
+ globalThis.fetch = vi.fn().mockResolvedValue(new Response(null, { status: 200 }));
427
+ }
428
+ describe('vocabulary-leak: runOrient command (end-to-end vocab wiring)', () => {
429
+ beforeEach(() => {
430
+ vi.clearAllMocks();
431
+ // Clear vocab cache so each test fetches fresh via chain.getVocabulary mock.
432
+ clearVocabCache();
433
+ installFetchMock();
434
+ });
435
+ for (const { name, ctx, skipLeakCheck } of ALL_FIXTURES) {
436
+ it(`${name}: runOrient stdout contains no literal "bet" outside stored IDs`, async () => {
437
+ // Wire kernelCallMock: differentiate chain.getVocabulary from chain.getOrientView.
438
+ kernelCallMock.mockImplementation((fn) => {
439
+ if (fn === 'chain.getVocabulary') {
440
+ return Promise.resolve({
441
+ collectionLabels: ctx.collectionLabels,
442
+ collectionDefaults: ctx.collectionDefaults,
443
+ });
444
+ }
445
+ // Default: return the orient view for chain.getOrientView
446
+ return Promise.resolve(ORIENT_VIEW);
447
+ });
448
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
449
+ const { runOrient } = await import('../commands/orient.js');
450
+ await runOrient();
451
+ const output = writeSpy.mock.calls.map((call) => String(call[0])).join('');
452
+ writeSpy.mockRestore();
453
+ if (!skipLeakCheck)
454
+ assertNoBetLeak(output, name, 'pb orient (command)');
455
+ assertNoGovernanceLeak(output, name, 'pb orient (command)');
456
+ // Positive check: resolved label should appear in output.
457
+ const expectedLabel = ctx.collectionLabels?.work_package?.plural ?? ctx.collectionDefaults?.work_package?.plural ?? 'work_package';
458
+ expect(output).toContain(expectedLabel);
459
+ });
460
+ it(`${name}: runOrient --brief stdout contains no literal "bet" outside stored IDs`, async () => {
461
+ kernelCallMock.mockImplementation((fn) => {
462
+ if (fn === 'chain.getVocabulary') {
463
+ return Promise.resolve({
464
+ collectionLabels: ctx.collectionLabels,
465
+ collectionDefaults: ctx.collectionDefaults,
466
+ });
467
+ }
468
+ return Promise.resolve(ORIENT_VIEW);
469
+ });
470
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
471
+ const { runOrient } = await import('../commands/orient.js');
472
+ await runOrient({ brief: true });
473
+ const output = writeSpy.mock.calls.map((call) => String(call[0])).join('');
474
+ writeSpy.mockRestore();
475
+ if (!skipLeakCheck)
476
+ assertNoBetLeak(output, name, 'pb orient --brief (command)');
477
+ assertNoGovernanceLeak(output, name, 'pb orient --brief (command)');
478
+ // Positive check: resolved label should appear in the count line.
479
+ const expectedLabel = ctx.collectionLabels?.work_package?.plural ?? ctx.collectionDefaults?.work_package?.plural ?? 'work_package';
480
+ expect(output).toContain(expectedLabel);
481
+ });
482
+ }
483
+ it('fallback: runOrient uses work_package literal when both collectionLabels AND collectionDefaults are null', async () => {
484
+ kernelCallMock.mockImplementation((fn) => {
485
+ if (fn === 'chain.getVocabulary') {
486
+ return Promise.resolve({ collectionLabels: null, collectionDefaults: null });
487
+ }
488
+ return Promise.resolve(ORIENT_VIEW);
489
+ });
490
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
491
+ const { runOrient } = await import('../commands/orient.js');
492
+ await runOrient({ brief: true });
493
+ const output = writeSpy.mock.calls.map((call) => String(call[0])).join('');
494
+ writeSpy.mockRestore();
495
+ // Layer 4 fallback: resolver emits the canonicalKey literal 'work_package'
496
+ expect(output).toContain('work_package');
497
+ });
498
+ it('defaults-only: runOrient resolves from collectionDefaults when collectionLabels is null (INS-1446 regression guard)', async () => {
499
+ kernelCallMock.mockImplementation((fn) => {
500
+ if (fn === 'chain.getVocabulary') {
501
+ return Promise.resolve({
502
+ collectionLabels: null,
503
+ collectionDefaults: { work_package: { singular: 'Bet', plural: 'Bets' } },
504
+ });
505
+ }
506
+ return Promise.resolve(ORIENT_VIEW);
507
+ });
508
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
509
+ const { runOrient } = await import('../commands/orient.js');
510
+ await runOrient({ brief: true });
511
+ const output = writeSpy.mock.calls.map((call) => String(call[0])).join('');
512
+ writeSpy.mockRestore();
513
+ // Layer 2 defaults: resolver uses collectionDefaults, NOT the literal
514
+ expect(output).toContain('Bets');
515
+ expect(output).not.toContain('work_package');
516
+ });
517
+ it('fail-open: runOrient still renders when chain.getVocabulary throws', async () => {
518
+ kernelCallMock.mockImplementation((fn) => {
519
+ if (fn === 'chain.getVocabulary') {
520
+ return Promise.reject(new Error('simulated 404'));
521
+ }
522
+ return Promise.resolve(ORIENT_VIEW);
523
+ });
524
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
525
+ const { runOrient } = await import('../commands/orient.js');
526
+ await expect(runOrient({ brief: true })).resolves.toBeUndefined();
527
+ const output = writeSpy.mock.calls.map((call) => String(call[0])).join('');
528
+ writeSpy.mockRestore();
529
+ // Output should still render (fallback to canonicalKey literal)
530
+ expect(output.length).toBeGreaterThan(0);
531
+ expect(output).toContain('work_package');
532
+ });
533
+ });
534
+ //# sourceMappingURL=vocabulary-leak.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vocabulary-leak.test.js","sourceRoot":"","sources":["../../src/__tests__/vocabulary-leak.test.ts"],"names":[],"mappings":"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"}