@productbrain/cli 0.1.0-beta.109 → 0.1.0-beta.1096

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 (257) 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__/config.test.js +272 -2
  4. package/dist/__tests__/config.test.js.map +1 -1
  5. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  6. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  7. package/dist/__tests__/handshake-augment.test.js +423 -0
  8. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  9. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  10. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  11. package/dist/__tests__/handshake-dormancy.test.js +207 -0
  12. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  13. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  14. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  15. package/dist/__tests__/handshake-formatter.test.js +67 -0
  16. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  17. package/dist/__tests__/handshake-preview.test.js +65 -3
  18. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  19. package/dist/__tests__/handshake.e2e.test.js +998 -3
  20. package/dist/__tests__/handshake.e2e.test.js.map +1 -1
  21. package/dist/__tests__/handshake.test.js +4 -4
  22. package/dist/__tests__/handshake.test.js.map +1 -1
  23. package/dist/__tests__/notice-marker.test.d.ts +2 -0
  24. package/dist/__tests__/notice-marker.test.d.ts.map +1 -0
  25. package/dist/__tests__/notice-marker.test.js +41 -0
  26. package/dist/__tests__/notice-marker.test.js.map +1 -0
  27. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  28. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  29. package/dist/__tests__/orient.test.js +52 -2
  30. package/dist/__tests__/orient.test.js.map +1 -1
  31. package/dist/__tests__/perimeter.test.js +23 -1
  32. package/dist/__tests__/perimeter.test.js.map +1 -1
  33. package/dist/__tests__/preview-key-refresh.test.d.ts +2 -0
  34. package/dist/__tests__/preview-key-refresh.test.d.ts.map +1 -0
  35. package/dist/__tests__/preview-key-refresh.test.js +126 -0
  36. package/dist/__tests__/preview-key-refresh.test.js.map +1 -0
  37. package/dist/__tests__/profiles.test.js +106 -2
  38. package/dist/__tests__/profiles.test.js.map +1 -1
  39. package/dist/__tests__/proof-run.test.d.ts +2 -0
  40. package/dist/__tests__/proof-run.test.d.ts.map +1 -0
  41. package/dist/__tests__/proof-run.test.js +255 -0
  42. package/dist/__tests__/proof-run.test.js.map +1 -0
  43. package/dist/__tests__/session-reset.test.d.ts +2 -0
  44. package/dist/__tests__/session-reset.test.d.ts.map +1 -0
  45. package/dist/__tests__/session-reset.test.js +122 -0
  46. package/dist/__tests__/session-reset.test.js.map +1 -0
  47. package/dist/__tests__/session-resume-backstop.test.d.ts +2 -0
  48. package/dist/__tests__/session-resume-backstop.test.d.ts.map +1 -0
  49. package/dist/__tests__/session-resume-backstop.test.js +97 -0
  50. package/dist/__tests__/session-resume-backstop.test.js.map +1 -0
  51. package/dist/__tests__/session-start-key-refresh.test.d.ts +2 -0
  52. package/dist/__tests__/session-start-key-refresh.test.d.ts.map +1 -0
  53. package/dist/__tests__/session-start-key-refresh.test.js +178 -0
  54. package/dist/__tests__/session-start-key-refresh.test.js.map +1 -0
  55. package/dist/__tests__/session-state-machine.test.js +45 -1
  56. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  57. package/dist/__tests__/session-switch.test.d.ts +2 -0
  58. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  59. package/dist/__tests__/session-switch.test.js +130 -0
  60. package/dist/__tests__/session-switch.test.js.map +1 -0
  61. package/dist/__tests__/update-check.test.js +160 -1
  62. package/dist/__tests__/update-check.test.js.map +1 -1
  63. package/dist/__tests__/upgrade-runner.test.js +12 -0
  64. package/dist/__tests__/upgrade-runner.test.js.map +1 -1
  65. package/dist/__tests__/upgrade.test.d.ts +2 -0
  66. package/dist/__tests__/upgrade.test.d.ts.map +1 -0
  67. package/dist/__tests__/upgrade.test.js +56 -0
  68. package/dist/__tests__/upgrade.test.js.map +1 -0
  69. package/dist/__tests__/vocabulary-leak.test.d.ts +27 -13
  70. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -1
  71. package/dist/__tests__/vocabulary-leak.test.js +169 -14
  72. package/dist/__tests__/vocabulary-leak.test.js.map +1 -1
  73. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  74. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  75. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  76. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  77. package/dist/commands/admin/seedRegistryEntries.generated.js +2 -2
  78. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -1
  79. package/dist/commands/admin/seedRegistryEntries.test.js +1 -1
  80. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -1
  81. package/dist/commands/audit.d.ts.map +1 -1
  82. package/dist/commands/audit.js +30 -3
  83. package/dist/commands/audit.js.map +1 -1
  84. package/dist/commands/authority-domains.d.ts.map +1 -1
  85. package/dist/commands/authority-domains.js +2 -1
  86. package/dist/commands/authority-domains.js.map +1 -1
  87. package/dist/commands/capture.d.ts +2 -0
  88. package/dist/commands/capture.d.ts.map +1 -1
  89. package/dist/commands/capture.js +5 -1
  90. package/dist/commands/capture.js.map +1 -1
  91. package/dist/commands/connect-config.test.d.ts +2 -0
  92. package/dist/commands/connect-config.test.d.ts.map +1 -0
  93. package/dist/commands/connect-config.test.js +44 -0
  94. package/dist/commands/connect-config.test.js.map +1 -0
  95. package/dist/commands/connect-context.d.ts +45 -0
  96. package/dist/commands/connect-context.d.ts.map +1 -0
  97. package/dist/commands/connect-context.js +64 -0
  98. package/dist/commands/connect-context.js.map +1 -0
  99. package/dist/commands/connect-context.test.d.ts +2 -0
  100. package/dist/commands/connect-context.test.d.ts.map +1 -0
  101. package/dist/commands/connect-context.test.js +110 -0
  102. package/dist/commands/connect-context.test.js.map +1 -0
  103. package/dist/commands/connect-screens.d.ts +5 -6
  104. package/dist/commands/connect-screens.d.ts.map +1 -1
  105. package/dist/commands/connect-screens.js +28 -35
  106. package/dist/commands/connect-screens.js.map +1 -1
  107. package/dist/commands/connect.d.ts +16 -0
  108. package/dist/commands/connect.d.ts.map +1 -1
  109. package/dist/commands/connect.js +21 -20
  110. package/dist/commands/connect.js.map +1 -1
  111. package/dist/commands/doctor.js +2 -2
  112. package/dist/commands/doctor.js.map +1 -1
  113. package/dist/commands/doctor.test.js +19 -0
  114. package/dist/commands/doctor.test.js.map +1 -1
  115. package/dist/commands/handshake.d.ts +59 -4
  116. package/dist/commands/handshake.d.ts.map +1 -1
  117. package/dist/commands/handshake.js +392 -97
  118. package/dist/commands/handshake.js.map +1 -1
  119. package/dist/commands/method.d.ts.map +1 -1
  120. package/dist/commands/method.js +2 -1
  121. package/dist/commands/method.js.map +1 -1
  122. package/dist/commands/orient.d.ts +48 -0
  123. package/dist/commands/orient.d.ts.map +1 -1
  124. package/dist/commands/orient.js +25 -5
  125. package/dist/commands/orient.js.map +1 -1
  126. package/dist/commands/profile.d.ts +1 -14
  127. package/dist/commands/profile.d.ts.map +1 -1
  128. package/dist/commands/profile.js +89 -72
  129. package/dist/commands/profile.js.map +1 -1
  130. package/dist/commands/proof-run.d.ts +51 -0
  131. package/dist/commands/proof-run.d.ts.map +1 -0
  132. package/dist/commands/proof-run.js +209 -0
  133. package/dist/commands/proof-run.js.map +1 -0
  134. package/dist/commands/reject.d.ts.map +1 -1
  135. package/dist/commands/reject.js +2 -1
  136. package/dist/commands/reject.js.map +1 -1
  137. package/dist/commands/relate.d.ts.map +1 -1
  138. package/dist/commands/relate.js +4 -2
  139. package/dist/commands/relate.js.map +1 -1
  140. package/dist/commands/session.d.ts +26 -2
  141. package/dist/commands/session.d.ts.map +1 -1
  142. package/dist/commands/session.js +216 -31
  143. package/dist/commands/session.js.map +1 -1
  144. package/dist/commands/setup-audit.d.ts +59 -0
  145. package/dist/commands/setup-audit.d.ts.map +1 -0
  146. package/dist/commands/setup-audit.js +250 -0
  147. package/dist/commands/setup-audit.js.map +1 -0
  148. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -1
  149. package/dist/commands/setup-detect-surfaces.js +10 -1
  150. package/dist/commands/setup-detect-surfaces.js.map +1 -1
  151. package/dist/commands/update.d.ts.map +1 -1
  152. package/dist/commands/update.js +2 -1
  153. package/dist/commands/update.js.map +1 -1
  154. package/dist/commands/upgrade.d.ts.map +1 -1
  155. package/dist/commands/upgrade.js +31 -10
  156. package/dist/commands/upgrade.js.map +1 -1
  157. package/dist/commands/verify.d.ts.map +1 -1
  158. package/dist/commands/verify.js +2 -1
  159. package/dist/commands/verify.js.map +1 -1
  160. package/dist/commands/whoami.d.ts +12 -0
  161. package/dist/commands/whoami.d.ts.map +1 -0
  162. package/dist/commands/whoami.js +70 -0
  163. package/dist/commands/whoami.js.map +1 -0
  164. package/dist/commands/whoami.test.d.ts +2 -0
  165. package/dist/commands/whoami.test.d.ts.map +1 -0
  166. package/dist/commands/whoami.test.js +50 -0
  167. package/dist/commands/whoami.test.js.map +1 -0
  168. package/dist/formatters/__tests__/orient-provenance.test.d.ts +7 -0
  169. package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
  170. package/dist/formatters/__tests__/orient-provenance.test.js +454 -0
  171. package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
  172. package/dist/formatters/audit.d.ts +6 -0
  173. package/dist/formatters/audit.d.ts.map +1 -1
  174. package/dist/formatters/audit.js.map +1 -1
  175. package/dist/formatters/entry.d.ts +21 -0
  176. package/dist/formatters/entry.d.ts.map +1 -1
  177. package/dist/formatters/entry.js +46 -5
  178. package/dist/formatters/entry.js.map +1 -1
  179. package/dist/formatters/handshake.d.ts +7 -3
  180. package/dist/formatters/handshake.d.ts.map +1 -1
  181. package/dist/formatters/handshake.js +26 -23
  182. package/dist/formatters/handshake.js.map +1 -1
  183. package/dist/formatters/orient.d.ts +54 -0
  184. package/dist/formatters/orient.d.ts.map +1 -1
  185. package/dist/formatters/orient.js +71 -2
  186. package/dist/formatters/orient.js.map +1 -1
  187. package/dist/generators/adapters.js +4 -4
  188. package/dist/generators/region-projections.d.ts +18 -0
  189. package/dist/generators/region-projections.d.ts.map +1 -0
  190. package/dist/generators/region-projections.js +49 -0
  191. package/dist/generators/region-projections.js.map +1 -0
  192. package/dist/generators/region-projections.test.d.ts +2 -0
  193. package/dist/generators/region-projections.test.d.ts.map +1 -0
  194. package/dist/generators/region-projections.test.js +63 -0
  195. package/dist/generators/region-projections.test.js.map +1 -0
  196. package/dist/generators/region.d.ts +24 -0
  197. package/dist/generators/region.d.ts.map +1 -0
  198. package/dist/generators/region.js +87 -0
  199. package/dist/generators/region.js.map +1 -0
  200. package/dist/generators/region.test.d.ts +2 -0
  201. package/dist/generators/region.test.d.ts.map +1 -0
  202. package/dist/generators/region.test.js +126 -0
  203. package/dist/generators/region.test.js.map +1 -0
  204. package/dist/index.js +111 -9
  205. package/dist/index.js.map +1 -1
  206. package/dist/lib/config.d.ts +101 -4
  207. package/dist/lib/config.d.ts.map +1 -1
  208. package/dist/lib/config.js +225 -11
  209. package/dist/lib/config.js.map +1 -1
  210. package/dist/lib/notice-marker.d.ts +3 -0
  211. package/dist/lib/notice-marker.d.ts.map +1 -0
  212. package/dist/lib/notice-marker.js +53 -0
  213. package/dist/lib/notice-marker.js.map +1 -0
  214. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  215. package/dist/lib/onboarding-path-b.js +0 -1
  216. package/dist/lib/onboarding-path-b.js.map +1 -1
  217. package/dist/lib/onboarding-shared.d.ts +0 -1
  218. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  219. package/dist/lib/onboarding-shared.js +0 -16
  220. package/dist/lib/onboarding-shared.js.map +1 -1
  221. package/dist/lib/profiles.d.ts +3 -1
  222. package/dist/lib/profiles.d.ts.map +1 -1
  223. package/dist/lib/profiles.js +9 -6
  224. package/dist/lib/profiles.js.map +1 -1
  225. package/dist/lib/session.d.ts +10 -0
  226. package/dist/lib/session.d.ts.map +1 -1
  227. package/dist/lib/session.js +26 -1
  228. package/dist/lib/session.js.map +1 -1
  229. package/dist/lib/tokenConstants.d.ts +2 -0
  230. package/dist/lib/tokenConstants.d.ts.map +1 -1
  231. package/dist/lib/tokenConstants.js +2 -0
  232. package/dist/lib/tokenConstants.js.map +1 -1
  233. package/dist/lib/update-check.d.ts +26 -11
  234. package/dist/lib/update-check.d.ts.map +1 -1
  235. package/dist/lib/update-check.js +123 -73
  236. package/dist/lib/update-check.js.map +1 -1
  237. package/dist/lib/upgrade-runner.d.ts +2 -1
  238. package/dist/lib/upgrade-runner.d.ts.map +1 -1
  239. package/dist/lib/upgrade-runner.js +8 -7
  240. package/dist/lib/upgrade-runner.js.map +1 -1
  241. package/dist/setup/perimeter.d.ts +10 -0
  242. package/dist/setup/perimeter.d.ts.map +1 -1
  243. package/dist/setup/perimeter.js +21 -6
  244. package/dist/setup/perimeter.js.map +1 -1
  245. package/package.json +2 -1
  246. package/dist/__tests__/setup.test.d.ts +0 -2
  247. package/dist/__tests__/setup.test.d.ts.map +0 -1
  248. package/dist/__tests__/setup.test.js +0 -141
  249. package/dist/__tests__/setup.test.js.map +0 -1
  250. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  251. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  252. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  253. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  254. package/dist/lib/onboarding-phases.d.ts +0 -9
  255. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  256. package/dist/lib/onboarding-phases.js +0 -120
  257. package/dist/lib/onboarding-phases.js.map +0 -1
@@ -1,22 +1,36 @@
1
1
  /**
2
- * Vocabulary leak test — WP-436 S2 (PAT-229, DEC-1021).
2
+ * Vocabulary leak test — WP-436 S2 + TEN-2053 S2 (PAT-229, DEC-1021).
3
3
  *
4
- * Asserts that ZERO literal `bet`/`BET` appears in stdout of orient/get/capture/search
5
- * CLI formatters when the workspace vocabulary is overridden to non-bet labels.
4
+ * Asserts two classes of regression are absent from user-facing CLI/MCP output:
6
5
  *
7
- * Design (from phasing):
8
- * 3 fixture workspaces × 4 formatter surfaces = 12 scenarios minimum.
9
- * Each workspace sets `work_package` labels to something non-bet.
10
- * If any "bet"/"BET" appears in formatted output (outside stored entry IDs), it's a leak.
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.
11
9
  *
12
- * COMMAND-LEVEL layer (Gap 2 fix): 3 fixture workspaces × runOrient = 3 additional
13
- * scenarios that prove the CLI command SUPPLIES vocabCtx to formatOrient/formatOrientBrief,
14
- * not just that the formatters work when given ctx directly.
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.
15
19
  *
16
- * Whitelist: stored entry IDs matching /\b[A-Z]+-\d+\b/ (e.g. WP-436, BET-XXX) are
17
- * excluded from the leak check — they're stable database references, not user-facing labels.
20
+ * Coverage:
21
+ * ALL_FIXTURES × { formatOrient, formatOrientBrief, formatSearchResults,
22
+ * formatCaptureReceipt, formatAudit (PASS/FAIL/verbose) }
23
+ * plus runOrient end-to-end command wiring.
18
24
  *
19
- * Exclusion: `pb audit` is excluded per R7 (WP-313 owns the audit surface).
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.
20
34
  *
21
35
  * Perf: fixture workspaces are seeded purely in-memory (no Convex, no HTTP).
22
36
  * BET-241: no fixture has >100 entries.
@@ -25,6 +39,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest';
25
39
  import { formatOrient, formatOrientBrief } from '../formatters/orient.js';
26
40
  import { formatSearchResults } from '../formatters/search.js';
27
41
  import { formatCaptureReceipt } from '../formatters/capture.js';
42
+ import { formatAudit } from '../formatters/audit.js';
28
43
  import { clearVocabCache } from '../lib/workspaceVocabCache.js';
29
44
  // ─── Fixture workspace vocabulary contexts ────────────────────────────────────
30
45
  /**
@@ -165,6 +180,43 @@ function assertNoBetLeak(output, fixture, surface) {
165
180
  `Full output (stripped IDs):\n${stripped}`);
166
181
  }
167
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
+ }
168
220
  // ─── Captured search result fixture ──────────────────────────────────────────
169
221
  /** Minimal search result that matches the formatSearchResults expected shape. */
170
222
  const SEARCH_RESULTS = [
@@ -191,6 +243,8 @@ describe('vocabulary-leak: orient formatters', () => {
191
243
  const output = formatOrient(ORIENT_VIEW, ctx);
192
244
  if (!skipLeakCheck)
193
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)');
194
248
  // Also verify the resolved label appears (positive check)
195
249
  const expectedLabel = ctx.collectionLabels?.work_package?.plural ?? ctx.collectionDefaults?.work_package?.plural ?? 'work_package';
196
250
  expect(output).toContain(expectedLabel);
@@ -199,6 +253,7 @@ describe('vocabulary-leak: orient formatters', () => {
199
253
  const output = formatOrientBrief(ORIENT_VIEW, ctx);
200
254
  if (!skipLeakCheck)
201
255
  assertNoBetLeak(output, name, 'pb orient --brief');
256
+ assertNoGovernanceLeak(output, name, 'pb orient --brief');
202
257
  // Also verify the resolved label appears in the count line
203
258
  const expectedLabel = ctx.collectionLabels?.work_package?.plural ?? ctx.collectionDefaults?.work_package?.plural ?? 'work_package';
204
259
  expect(output).toContain(expectedLabel);
@@ -216,6 +271,8 @@ describe('vocabulary-leak: search formatter', () => {
216
271
  const output = formatSearchResults(SEARCH_RESULTS);
217
272
  if (!skipLeakCheck)
218
273
  assertNoBetLeak(output, name, 'pb search');
274
+ // Governance-vocab assertion applies universally.
275
+ assertNoGovernanceLeak(output, name, 'pb search');
219
276
  });
220
277
  }
221
278
  });
@@ -228,10 +285,106 @@ describe('vocabulary-leak: capture formatter', () => {
228
285
  const output = formatCaptureReceipt(CAPTURE_RECEIPT);
229
286
  if (!skipLeakCheck)
230
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)');
231
385
  });
232
386
  }
233
387
  });
234
- // NOTE: `pb audit` is excluded per R7 (WP-313 owns the audit surface rename).
235
388
  // ─── Command-level leak tests (Gap 2) ────────────────────────────────────────
236
389
  //
237
390
  // These tests invoke `runOrient` from the actual CLI command module to prove
@@ -299,6 +452,7 @@ describe('vocabulary-leak: runOrient command (end-to-end vocab wiring)', () => {
299
452
  writeSpy.mockRestore();
300
453
  if (!skipLeakCheck)
301
454
  assertNoBetLeak(output, name, 'pb orient (command)');
455
+ assertNoGovernanceLeak(output, name, 'pb orient (command)');
302
456
  // Positive check: resolved label should appear in output.
303
457
  const expectedLabel = ctx.collectionLabels?.work_package?.plural ?? ctx.collectionDefaults?.work_package?.plural ?? 'work_package';
304
458
  expect(output).toContain(expectedLabel);
@@ -320,6 +474,7 @@ describe('vocabulary-leak: runOrient command (end-to-end vocab wiring)', () => {
320
474
  writeSpy.mockRestore();
321
475
  if (!skipLeakCheck)
322
476
  assertNoBetLeak(output, name, 'pb orient --brief (command)');
477
+ assertNoGovernanceLeak(output, name, 'pb orient --brief (command)');
323
478
  // Positive check: resolved label should appear in the count line.
324
479
  const expectedLabel = ctx.collectionLabels?.work_package?.plural ?? ctx.collectionDefaults?.work_package?.plural ?? 'work_package';
325
480
  expect(output).toContain(expectedLabel);
@@ -1 +1 @@
1
- {"version":3,"file":"vocabulary-leak.test.js","sourceRoot":"","sources":["../../src/__tests__/vocabulary-leak.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vocabulary-leak.test.js","sourceRoot":"","sources":["../../src/__tests__/vocabulary-leak.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * WP-433 S5 — `formatDetectSurfacesSummary` pure unit tests.
3
+ *
4
+ * Per INS-1420: runSetupDetectSurfaces makes live server calls via getConfigSafe()
5
+ * and kernelCall. These tests ONLY exercise the pure formatter on hand-crafted
6
+ * SetupDetectSurfacesResult objects — runSetupDetectSurfaces is never called.
7
+ *
8
+ * Test cases:
9
+ * 1. Bare-repo (zero detected, zero existing) → appends locked guidance question
10
+ * 2. Normal detect (new surfaces detected) → does NOT append
11
+ * 3. Idempotent re-run (existing surfaces, zero new) → does NOT append
12
+ * 4. Server-stamp-error case → surfaces error in summary, does NOT append extra question
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=setup-detect-surfaces.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-detect-surfaces.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-detect-surfaces.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * WP-433 S5 — `formatDetectSurfacesSummary` pure unit tests.
3
+ *
4
+ * Per INS-1420: runSetupDetectSurfaces makes live server calls via getConfigSafe()
5
+ * and kernelCall. These tests ONLY exercise the pure formatter on hand-crafted
6
+ * SetupDetectSurfacesResult objects — runSetupDetectSurfaces is never called.
7
+ *
8
+ * Test cases:
9
+ * 1. Bare-repo (zero detected, zero existing) → appends locked guidance question
10
+ * 2. Normal detect (new surfaces detected) → does NOT append
11
+ * 3. Idempotent re-run (existing surfaces, zero new) → does NOT append
12
+ * 4. Server-stamp-error case → surfaces error in summary, does NOT append extra question
13
+ */
14
+ import { describe, expect, it } from 'vitest';
15
+ import { formatDetectSurfacesSummary, } from '../setup-detect-surfaces.js';
16
+ const LOCKED_QUESTION = "I don't see Claude Code or Cursor — which AI tool do you use?";
17
+ /** Helper: build a minimal SetupDetectSurfacesResult */
18
+ function makeResult(overrides = {}) {
19
+ return {
20
+ detected: [],
21
+ existing: [],
22
+ newlyAdded: [],
23
+ union: [],
24
+ manifestUpdated: false,
25
+ manifestPath: '/repo/.productbrain/manifest.json',
26
+ serverStamp: null,
27
+ serverStampError: null,
28
+ ...overrides,
29
+ };
30
+ }
31
+ describe('formatDetectSurfacesSummary — WP-433 S5 bare-repo guidance', () => {
32
+ it('bare-repo (zero detected, zero existing) appends locked guidance question', () => {
33
+ const result = makeResult({
34
+ detected: [],
35
+ existing: [],
36
+ newlyAdded: [],
37
+ union: [],
38
+ manifestUpdated: false,
39
+ });
40
+ const summary = formatDetectSurfacesSummary(result);
41
+ expect(summary).toContain(LOCKED_QUESTION);
42
+ // Confirm the question is on a separate line
43
+ expect(summary).toContain('\n' + LOCKED_QUESTION);
44
+ });
45
+ it('normal detect (new surfaces detected) does NOT append locked question', () => {
46
+ const result = makeResult({
47
+ detected: ['claude'],
48
+ existing: [],
49
+ newlyAdded: ['claude'],
50
+ union: ['claude'],
51
+ manifestUpdated: true,
52
+ serverStamp: { stamped: true, surfaces: ['claude'] },
53
+ });
54
+ const summary = formatDetectSurfacesSummary(result);
55
+ expect(summary).not.toContain(LOCKED_QUESTION);
56
+ // Confirm surfaces are mentioned
57
+ expect(summary).toContain('claude');
58
+ });
59
+ it('STD-235 remnant (zero detected, existing surfaces remain in manifest) does NOT append locked question', () => {
60
+ // Marker dir deleted from disk; STD-235 forward-only keeps the surface in manifest.
61
+ // Detected is empty but existing is not — guard must NOT trigger bare-repo guidance.
62
+ const result = makeResult({
63
+ detected: [],
64
+ existing: ['claude'],
65
+ newlyAdded: [],
66
+ union: ['claude'],
67
+ manifestUpdated: false,
68
+ });
69
+ const summary = formatDetectSurfacesSummary(result);
70
+ expect(summary).not.toContain(LOCKED_QUESTION);
71
+ expect(summary).toContain('Detected: none');
72
+ expect(summary).toContain('Existing: claude');
73
+ });
74
+ it('idempotent re-run (existing surfaces, zero new detected) does NOT append locked question', () => {
75
+ const result = makeResult({
76
+ detected: ['claude'],
77
+ existing: ['claude'],
78
+ newlyAdded: [],
79
+ union: ['claude'],
80
+ manifestUpdated: false,
81
+ serverStamp: { stamped: false, surfaces: ['claude'] },
82
+ });
83
+ const summary = formatDetectSurfacesSummary(result);
84
+ expect(summary).not.toContain(LOCKED_QUESTION);
85
+ // Existing should appear in summary
86
+ expect(summary).toContain('claude');
87
+ });
88
+ it('server-stamp-error case surfaces the error and does NOT append the locked question', () => {
89
+ // If detect-surfaces fails at the server stamp but DID find surfaces locally,
90
+ // the error should appear but the bare-repo question should not.
91
+ const result = makeResult({
92
+ detected: ['cursor'],
93
+ existing: [],
94
+ newlyAdded: ['cursor'],
95
+ union: ['cursor'],
96
+ manifestUpdated: true,
97
+ serverStamp: null,
98
+ serverStampError: 'Network timeout connecting to workspace',
99
+ });
100
+ const summary = formatDetectSurfacesSummary(result);
101
+ // Error is surfaced
102
+ expect(summary).toContain('Server stamp failed: Network timeout connecting to workspace');
103
+ // Bare-repo question is NOT appended (surfaces were found)
104
+ expect(summary).not.toContain(LOCKED_QUESTION);
105
+ });
106
+ it('bare-repo with server-stamp-error (edge case: zero surfaces + server error) appends locked question', () => {
107
+ // Zero detected + zero existing → bare-repo. Server stamp would not have been
108
+ // called (union is empty), but if serverStampError somehow populated, the
109
+ // bare-repo signal still dominates and the question should appear.
110
+ const result = makeResult({
111
+ detected: [],
112
+ existing: [],
113
+ newlyAdded: [],
114
+ union: [],
115
+ manifestUpdated: false,
116
+ serverStamp: null,
117
+ serverStampError: 'Config missing',
118
+ });
119
+ const summary = formatDetectSurfacesSummary(result);
120
+ // Server stamp error is surfaced
121
+ expect(summary).toContain('Server stamp failed: Config missing');
122
+ // Bare-repo guidance still applies
123
+ expect(summary).toContain(LOCKED_QUESTION);
124
+ });
125
+ it('summary has correct shape for bare-repo result', () => {
126
+ const result = makeResult();
127
+ const summary = formatDetectSurfacesSummary(result);
128
+ // Base line before the question
129
+ expect(summary).toMatch(/^Detected: none \(new: none\)\. Existing: none\. Manifest unchanged\./);
130
+ });
131
+ it('summary has correct shape for normal detect', () => {
132
+ const result = makeResult({
133
+ detected: ['claude', 'cursor'],
134
+ existing: ['claude'],
135
+ newlyAdded: ['cursor'],
136
+ union: ['claude', 'cursor'],
137
+ manifestUpdated: true,
138
+ serverStamp: { stamped: true, surfaces: ['claude', 'cursor'] },
139
+ });
140
+ const summary = formatDetectSurfacesSummary(result);
141
+ expect(summary).toContain('Detected: claude, cursor');
142
+ expect(summary).toContain('new: cursor');
143
+ expect(summary).toContain('Existing: claude');
144
+ expect(summary).toContain('Manifest updated.');
145
+ expect(summary).toContain('Server stamped.');
146
+ expect(summary).not.toContain(LOCKED_QUESTION);
147
+ });
148
+ });
149
+ //# sourceMappingURL=setup-detect-surfaces.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-detect-surfaces.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-detect-surfaces.test.ts"],"names":[],"mappings":"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"}
@@ -78,8 +78,8 @@ export const REGISTRY_SEED_COMMAND_ENTRIES = [
78
78
  runnable: true,
79
79
  },
80
80
  {
81
- name: 'migrate-domains-to-architecture',
82
- description: 'Repair (S1b): migrate authority-domain entries from glossary architecture (3-state: arch-only / glossary-only / both-present).',
81
+ name: 'migrate-domains-to-authority-domains',
82
+ description: 'Repair (WP-437 S2): migrate authority-domain entries from glossary architecture → authority-domains (multi-state: target-only / glossary-only / architecture-only / split).',
83
83
  requiresWorkspaceId: true,
84
84
  dryRunSupported: false,
85
85
  level: 'repair',
@@ -1 +1 @@
1
- {"version":3,"file":"seedRegistryEntries.generated.js","sourceRoot":"","sources":["../../../src/commands/admin/seedRegistryEntries.generated.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seedRegistryEntries.generated.js","sourceRoot":"","sources":["../../../src/commands/admin/seedRegistryEntries.generated.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ describe('REGISTRY_SEED_COMMAND_ENTRIES', () => {
33
33
  // seed.ts prepends seed: when dispatching to the Convex admin layer.
34
34
  const repairSlugs = [
35
35
  'migrate-setup-skill-entryid',
36
- 'migrate-domains-to-architecture',
36
+ 'migrate-domains-to-authority-domains',
37
37
  'backfill-glossary-canonicalkey',
38
38
  'backfill-default-team',
39
39
  'migrate-setup-skill-body',
@@ -1 +1 @@
1
- {"version":3,"file":"seedRegistryEntries.test.js","sourceRoot":"","sources":["../../../src/commands/admin/seedRegistryEntries.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seedRegistryEntries.test.js","sourceRoot":"","sources":["../../../src/commands/admin/seedRegistryEntries.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAWH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAsJD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CnE"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgKD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DnE"}
@@ -20,6 +20,8 @@ import { isJsonMode } from '../lib/runner.js';
20
20
  import { readSession } from '../lib/session.js';
21
21
  import { stripConvexInternals } from '../lib/strip.js';
22
22
  import { formatAudit, formatBatchSummary } from '../formatters/audit.js';
23
+ import { getOrFetchVocabCtx } from '../lib/workspaceVocabCache.js';
24
+ import { replaceVocabTokens } from '../lib/canonicalRefs.js';
23
25
  // Exit codes
24
26
  const EXIT_PASS = 0;
25
27
  const EXIT_FAIL = 1;
@@ -72,7 +74,7 @@ async function executeFixActions(actions, json) {
72
74
  }
73
75
  // ─── Single audit ───────────────────────────────────────────────────────────
74
76
  async function auditOne(entryId, options) {
75
- const { phase, gate: gateFilter, fix, verbose } = options;
77
+ const { phase, gate: gateFilter, fix, verbose, vocabCtx } = options;
76
78
  const json = isJsonMode();
77
79
  // Build MCP args
78
80
  const args = { entryId };
@@ -124,6 +126,18 @@ async function auditOne(entryId, options) {
124
126
  }
125
127
  }
126
128
  }
129
+ // WP-438 S1: resolve {{vocab:...}} tokens on each gate field flagged with
130
+ // tokens.* === true. Workspace vocab is fetched once per CLI invocation and
131
+ // passed through `options.vocabCtx`. Fail-open: when ctx is undefined the
132
+ // resolver falls back to the canonicalKey literal.
133
+ for (const gate of result.gates) {
134
+ if (gate.tokens?.detail)
135
+ gate.detail = replaceVocabTokens(gate.detail, vocabCtx);
136
+ if (gate.tokens?.fix && gate.fix)
137
+ gate.fix = replaceVocabTokens(gate.fix, vocabCtx);
138
+ if (gate.tokens?.hint && gate.hint)
139
+ gate.hint = replaceVocabTokens(gate.hint, vocabCtx);
140
+ }
127
141
  // Output
128
142
  if (json) {
129
143
  // Apply gate filter for JSON output too
@@ -148,9 +162,22 @@ export async function runAudit(options) {
148
162
  if (!config)
149
163
  return;
150
164
  const { entryIds, ...rest } = options;
165
+ // WP-438 S1: load workspace vocabulary once for the whole batch (PAT-230,
166
+ // DEC-1021). Cached for 5 min via the shared workspaceVocabCache. Fail-open.
167
+ const vocabCtx = await getOrFetchVocabCtx(config.apiKey, async () => {
168
+ const vocab = await kernelCall('chain.getVocabulary', {});
169
+ if (vocab?.collectionLabels || vocab?.collectionDefaults) {
170
+ return {
171
+ ...(vocab.collectionLabels ? { collectionLabels: vocab.collectionLabels } : {}),
172
+ ...(vocab.collectionDefaults ? { collectionDefaults: vocab.collectionDefaults } : {}),
173
+ };
174
+ }
175
+ return null;
176
+ });
177
+ const restWithVocab = { ...rest, vocabCtx };
151
178
  if (entryIds.length === 1) {
152
179
  // Single audit
153
- const { exitCode } = await auditOne(entryIds[0], rest);
180
+ const { exitCode } = await auditOne(entryIds[0], restWithVocab);
154
181
  process.exit(exitCode);
155
182
  }
156
183
  // Batch mode: audit multiple bets sequentially
@@ -158,7 +185,7 @@ export async function runAudit(options) {
158
185
  const results = [];
159
186
  let worstExit = EXIT_PASS;
160
187
  for (const entryId of entryIds) {
161
- const { result, exitCode } = await auditOne(entryId, rest);
188
+ const { result, exitCode } = await auditOne(entryId, restWithVocab);
162
189
  if (result)
163
190
  results.push(result);
164
191
  if (exitCode > worstExit)