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

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 (247) hide show
  1. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  2. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  3. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  4. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  5. package/dist/__tests__/constants.test.js +6 -1
  6. package/dist/__tests__/constants.test.js.map +1 -1
  7. package/dist/__tests__/envelope-contract.test.js +29 -3
  8. package/dist/__tests__/envelope-contract.test.js.map +1 -1
  9. package/dist/__tests__/errors.test.js +1 -0
  10. package/dist/__tests__/errors.test.js.map +1 -1
  11. package/dist/__tests__/handshake-preview.test.js +501 -1
  12. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  13. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  14. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  15. package/dist/__tests__/handshake.e2e.test.js +257 -0
  16. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  17. package/dist/__tests__/handshake.test.js +251 -1
  18. package/dist/__tests__/handshake.test.js.map +1 -1
  19. package/dist/__tests__/manifest.test.js +118 -1
  20. package/dist/__tests__/manifest.test.js.map +1 -1
  21. package/dist/__tests__/orient.test.js +65 -24
  22. package/dist/__tests__/orient.test.js.map +1 -1
  23. package/dist/__tests__/perimeter.test.d.ts +2 -0
  24. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  25. package/dist/__tests__/perimeter.test.js +143 -0
  26. package/dist/__tests__/perimeter.test.js.map +1 -0
  27. package/dist/__tests__/promote.test.js +2 -2
  28. package/dist/__tests__/promote.test.js.map +1 -1
  29. package/dist/__tests__/setup-ingest.test.js +16 -0
  30. package/dist/__tests__/setup-ingest.test.js.map +1 -1
  31. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  32. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  33. package/dist/__tests__/skill-vocabulary.test.js +187 -0
  34. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  35. package/dist/__tests__/update-check.test.d.ts +2 -0
  36. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  37. package/dist/__tests__/update-check.test.js +56 -0
  38. package/dist/__tests__/update-check.test.js.map +1 -0
  39. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  40. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  41. package/dist/__tests__/upgrade-runner.test.js +42 -0
  42. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  43. package/dist/__tests__/vocabulary-leak.test.d.ts +25 -0
  44. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  45. package/dist/__tests__/vocabulary-leak.test.js +379 -0
  46. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  47. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  48. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  49. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  50. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  51. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  52. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  53. package/dist/commands/__tests__/setup-state.test.js +194 -0
  54. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  55. package/dist/commands/admin/seed.d.ts +32 -2
  56. package/dist/commands/admin/seed.d.ts.map +1 -1
  57. package/dist/commands/admin/seed.js +279 -33
  58. package/dist/commands/admin/seed.js.map +1 -1
  59. package/dist/commands/admin/seed.test.js +7 -0
  60. package/dist/commands/admin/seed.test.js.map +1 -1
  61. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  62. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  63. package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
  64. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  65. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  66. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  67. package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
  68. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  69. package/dist/commands/authority-domains.d.ts +7 -1
  70. package/dist/commands/authority-domains.d.ts.map +1 -1
  71. package/dist/commands/authority-domains.js +17 -3
  72. package/dist/commands/authority-domains.js.map +1 -1
  73. package/dist/commands/capture.d.ts.map +1 -1
  74. package/dist/commands/capture.js +3 -2
  75. package/dist/commands/capture.js.map +1 -1
  76. package/dist/commands/codex-prep.js +6 -6
  77. package/dist/commands/codex-prep.js.map +1 -1
  78. package/dist/commands/connect-handoff.d.ts +51 -0
  79. package/dist/commands/connect-handoff.d.ts.map +1 -0
  80. package/dist/commands/connect-handoff.js +70 -0
  81. package/dist/commands/connect-handoff.js.map +1 -0
  82. package/dist/commands/connect-integration.test.js +13 -12
  83. package/dist/commands/connect-integration.test.js.map +1 -1
  84. package/dist/commands/connect-screens.d.ts +2 -2
  85. package/dist/commands/connect-screens.js +2 -2
  86. package/dist/commands/connect.d.ts +3 -6
  87. package/dist/commands/connect.d.ts.map +1 -1
  88. package/dist/commands/connect.js +10 -36
  89. package/dist/commands/connect.js.map +1 -1
  90. package/dist/commands/doctor.d.ts.map +1 -1
  91. package/dist/commands/doctor.js +67 -2
  92. package/dist/commands/doctor.js.map +1 -1
  93. package/dist/commands/doctor.test.js +131 -0
  94. package/dist/commands/doctor.test.js.map +1 -1
  95. package/dist/commands/handshake.d.ts +25 -0
  96. package/dist/commands/handshake.d.ts.map +1 -1
  97. package/dist/commands/handshake.js +795 -18
  98. package/dist/commands/handshake.js.map +1 -1
  99. package/dist/commands/method.d.ts.map +1 -1
  100. package/dist/commands/method.js +3 -0
  101. package/dist/commands/method.js.map +1 -1
  102. package/dist/commands/orient.d.ts +4 -2
  103. package/dist/commands/orient.d.ts.map +1 -1
  104. package/dist/commands/orient.js +16 -2
  105. package/dist/commands/orient.js.map +1 -1
  106. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  107. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  108. package/dist/commands/setup-detect-surfaces.js +67 -0
  109. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  110. package/dist/commands/setup-ingest.d.ts.map +1 -1
  111. package/dist/commands/setup-ingest.js +4 -2
  112. package/dist/commands/setup-ingest.js.map +1 -1
  113. package/dist/commands/setup-state.d.ts +42 -0
  114. package/dist/commands/setup-state.d.ts.map +1 -0
  115. package/dist/commands/setup-state.js +93 -0
  116. package/dist/commands/setup-state.js.map +1 -0
  117. package/dist/commands/setup.d.ts +17 -9
  118. package/dist/commands/setup.d.ts.map +1 -1
  119. package/dist/commands/setup.js +52 -131
  120. package/dist/commands/setup.js.map +1 -1
  121. package/dist/commands/upgrade.d.ts +5 -0
  122. package/dist/commands/upgrade.d.ts.map +1 -0
  123. package/dist/commands/upgrade.js +89 -0
  124. package/dist/commands/upgrade.js.map +1 -0
  125. package/dist/formatters/handshake.d.ts +12 -0
  126. package/dist/formatters/handshake.d.ts.map +1 -1
  127. package/dist/formatters/handshake.js +32 -0
  128. package/dist/formatters/handshake.js.map +1 -1
  129. package/dist/formatters/orient.d.ts +10 -4
  130. package/dist/formatters/orient.d.ts.map +1 -1
  131. package/dist/formatters/orient.js +32 -16
  132. package/dist/formatters/orient.js.map +1 -1
  133. package/dist/generators/context-md.js +6 -6
  134. package/dist/generators/context-md.js.map +1 -1
  135. package/dist/generators/manifest.d.ts +76 -0
  136. package/dist/generators/manifest.d.ts.map +1 -1
  137. package/dist/generators/manifest.js +125 -14
  138. package/dist/generators/manifest.js.map +1 -1
  139. package/dist/generators/portable-knowledge.d.ts +2 -2
  140. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  141. package/dist/generators/surface-profiles.d.ts +1 -2
  142. package/dist/generators/surface-profiles.d.ts.map +1 -1
  143. package/dist/generators/surface-profiles.js.map +1 -1
  144. package/dist/index.js +43 -18
  145. package/dist/index.js.map +1 -1
  146. package/dist/lib/activation.js +2 -2
  147. package/dist/lib/activation.js.map +1 -1
  148. package/dist/lib/activation.test.js +3 -3
  149. package/dist/lib/activation.test.js.map +1 -1
  150. package/dist/lib/canonicalRefs.d.ts +72 -0
  151. package/dist/lib/canonicalRefs.d.ts.map +1 -1
  152. package/dist/lib/canonicalRefs.js +67 -0
  153. package/dist/lib/canonicalRefs.js.map +1 -1
  154. package/dist/lib/client.d.ts.map +1 -1
  155. package/dist/lib/client.js +13 -3
  156. package/dist/lib/client.js.map +1 -1
  157. package/dist/lib/constants.d.ts +2 -0
  158. package/dist/lib/constants.d.ts.map +1 -1
  159. package/dist/lib/constants.js +2 -0
  160. package/dist/lib/constants.js.map +1 -1
  161. package/dist/lib/errors.d.ts +1 -0
  162. package/dist/lib/errors.d.ts.map +1 -1
  163. package/dist/lib/errors.js +1 -0
  164. package/dist/lib/errors.js.map +1 -1
  165. package/dist/lib/onboarding-shared.js +1 -1
  166. package/dist/lib/onboarding-shared.js.map +1 -1
  167. package/dist/lib/update-check.d.ts +20 -0
  168. package/dist/lib/update-check.d.ts.map +1 -1
  169. package/dist/lib/update-check.js +122 -21
  170. package/dist/lib/update-check.js.map +1 -1
  171. package/dist/lib/upgrade-runner.d.ts +21 -0
  172. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  173. package/dist/lib/upgrade-runner.js +109 -0
  174. package/dist/lib/upgrade-runner.js.map +1 -0
  175. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  176. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  177. package/dist/lib/workspaceVocabCache.js +98 -0
  178. package/dist/lib/workspaceVocabCache.js.map +1 -0
  179. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  180. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  181. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  182. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  183. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  184. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  185. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  186. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  187. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  188. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  189. package/dist/setup/__tests__/state-machine.test.js +341 -0
  190. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  191. package/dist/setup/detect-surfaces.d.ts +21 -0
  192. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  193. package/dist/setup/detect-surfaces.js +39 -0
  194. package/dist/setup/detect-surfaces.js.map +1 -0
  195. package/dist/setup/manifest-writer.d.ts +17 -0
  196. package/dist/setup/manifest-writer.d.ts.map +1 -0
  197. package/dist/setup/manifest-writer.js +153 -0
  198. package/dist/setup/manifest-writer.js.map +1 -0
  199. package/dist/setup/perimeter.d.ts +62 -0
  200. package/dist/setup/perimeter.d.ts.map +1 -0
  201. package/dist/setup/perimeter.js +113 -0
  202. package/dist/setup/perimeter.js.map +1 -0
  203. package/dist/setup/state-machine.d.ts +67 -0
  204. package/dist/setup/state-machine.d.ts.map +1 -0
  205. package/dist/setup/state-machine.js +124 -0
  206. package/dist/setup/state-machine.js.map +1 -0
  207. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  208. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  209. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  210. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  211. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  212. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  213. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  214. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  215. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  216. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  217. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  218. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  219. package/dist/surfaces/adapter.d.ts +70 -0
  220. package/dist/surfaces/adapter.d.ts.map +1 -0
  221. package/dist/surfaces/adapter.js +2 -0
  222. package/dist/surfaces/adapter.js.map +1 -0
  223. package/dist/surfaces/adapters/claude.d.ts +3 -0
  224. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  225. package/dist/surfaces/adapters/claude.js +67 -0
  226. package/dist/surfaces/adapters/claude.js.map +1 -0
  227. package/dist/surfaces/adapters/codex.d.ts +3 -0
  228. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  229. package/dist/surfaces/adapters/codex.js +61 -0
  230. package/dist/surfaces/adapters/codex.js.map +1 -0
  231. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  232. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  233. package/dist/surfaces/adapters/copilot.js +59 -0
  234. package/dist/surfaces/adapters/copilot.js.map +1 -0
  235. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  236. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  237. package/dist/surfaces/adapters/cursor.js +78 -0
  238. package/dist/surfaces/adapters/cursor.js.map +1 -0
  239. package/dist/surfaces/registry.d.ts +58 -2
  240. package/dist/surfaces/registry.d.ts.map +1 -1
  241. package/dist/surfaces/registry.js +82 -7
  242. package/dist/surfaces/registry.js.map +1 -1
  243. package/dist/surfaces/telemetry.d.ts +17 -0
  244. package/dist/surfaces/telemetry.d.ts.map +1 -0
  245. package/dist/surfaces/telemetry.js +31 -0
  246. package/dist/surfaces/telemetry.js.map +1 -0
  247. package/package.json +2 -1
@@ -0,0 +1,194 @@
1
+ /**
2
+ * WP-431 S3 — `pb setup-state` and `pb setup` alias tests.
3
+ *
4
+ * Mocks kernelCall (gateway boundary) so error/auth/network paths and the
5
+ * recordInvocation idempotence behaviour are exercised without a real Convex
6
+ * deployment.
7
+ */
8
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
9
+ import { mkdirSync, mkdtempSync, rmSync } from 'fs';
10
+ import { dirname, join } from 'path';
11
+ import { fileURLToPath } from 'url';
12
+ import { tmpdir } from 'os';
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = dirname(__filename);
15
+ vi.mock('../../lib/client.js', async () => {
16
+ class FakeMcpError extends Error {
17
+ code;
18
+ constructor(message, code) {
19
+ super(message);
20
+ this.name = 'McpError';
21
+ this.code = code;
22
+ }
23
+ }
24
+ return {
25
+ kernelCall: vi.fn(),
26
+ McpError: FakeMcpError,
27
+ };
28
+ });
29
+ import { runSetupState, fetchSetupState } from '../setup-state.js';
30
+ import { runSetup } from '../setup.js';
31
+ import { kernelCall, McpError } from '../../lib/client.js';
32
+ const mockedKernelCall = vi.mocked(kernelCall);
33
+ let scratch;
34
+ let originalCwd;
35
+ let exitSpy;
36
+ let stdoutSpy;
37
+ let stderrSpy;
38
+ beforeEach(() => {
39
+ originalCwd = process.cwd();
40
+ scratch = mkdtempSync(join(tmpdir(), 'pb-setup-state-'));
41
+ process.chdir(scratch);
42
+ mockedKernelCall.mockReset();
43
+ exitSpy = vi.spyOn(process, 'exit').mockImplementation(((_code) => {
44
+ throw new Error(`__exit:${_code ?? 0}`);
45
+ }));
46
+ stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
47
+ stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
48
+ });
49
+ afterEach(() => {
50
+ process.chdir(originalCwd);
51
+ rmSync(scratch, { recursive: true, force: true });
52
+ exitSpy.mockRestore();
53
+ stdoutSpy.mockRestore();
54
+ stderrSpy.mockRestore();
55
+ });
56
+ const SAMPLE = {
57
+ phase: 1,
58
+ role: 'creator',
59
+ expectedAction: 'declare a surface',
60
+ reasonForPhase: 'manifest.surfaces empty',
61
+ isComplete: false,
62
+ surfaceCapability: 'cli',
63
+ };
64
+ describe('fetchSetupState()', () => {
65
+ it('returns the typed result from setup.getPbSetupState', async () => {
66
+ mockedKernelCall.mockResolvedValueOnce(SAMPLE);
67
+ const result = await fetchSetupState();
68
+ expect(result).toEqual(SAMPLE);
69
+ expect(mockedKernelCall).toHaveBeenCalledWith('setup.getPbSetupState', {});
70
+ });
71
+ });
72
+ describe('runSetupState()', () => {
73
+ it('writes compact JSON to stdout on success', async () => {
74
+ mockedKernelCall.mockResolvedValueOnce(SAMPLE);
75
+ await runSetupState();
76
+ const written = stdoutSpy.mock.calls.map((c) => String(c[0])).join('');
77
+ const parsed = JSON.parse(written.trim());
78
+ expect(parsed).toEqual(SAMPLE);
79
+ });
80
+ it('exits 2 on AUTH_REQUIRED', async () => {
81
+ mockedKernelCall.mockRejectedValueOnce(new McpError('not member', 'AUTHZ_NOT_MEMBER'));
82
+ await expect(runSetupState()).rejects.toThrow('__exit:2');
83
+ const stderr = stderrSpy.mock.calls.map((c) => String(c[0])).join('');
84
+ expect(stderr).toContain('AUTH_DENIED');
85
+ });
86
+ it('exits 3 on network error (CLIError category=network)', async () => {
87
+ const { CLIError, ErrorCode } = await import('../../lib/errors.js');
88
+ mockedKernelCall.mockRejectedValueOnce(new CLIError('Could not reach host.', {
89
+ code: ErrorCode.NETWORK_UNREACHABLE,
90
+ category: 'network',
91
+ }));
92
+ await expect(runSetupState()).rejects.toThrow('__exit:3');
93
+ });
94
+ it('emits JSON to stdout regardless of tty (non-tty path)', async () => {
95
+ Object.defineProperty(process.stdout, 'isTTY', { value: false, configurable: true });
96
+ mockedKernelCall.mockResolvedValueOnce(SAMPLE);
97
+ await runSetupState();
98
+ const written = stdoutSpy.mock.calls.map((c) => String(c[0])).join('');
99
+ expect(written.trim().startsWith('{')).toBe(true);
100
+ });
101
+ });
102
+ describe('pb start ≠ pb setup (DEC-995 invariant)', () => {
103
+ it('runSessionStart is the binding for `pb start`, not runSetup', async () => {
104
+ const fs = await import('fs');
105
+ const indexSrc = fs.readFileSync(join(__dirname, '..', '..', 'index.ts'), 'utf8');
106
+ // pb start dispatches to runSessionStart
107
+ expect(indexSrc).toContain("args[0] === 'start'");
108
+ const startSection = indexSrc.split("args[0] === 'start'")[1] ?? '';
109
+ const closeSection = startSection.split("args[0] === 'close'")[0] ?? '';
110
+ expect(closeSection).toContain('runSessionStart');
111
+ expect(closeSection).not.toContain('runSetup(');
112
+ });
113
+ });
114
+ describe('runSetup() (pb setup alias)', () => {
115
+ beforeEach(() => {
116
+ // Default to TTY=true so the human summary is exercised
117
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
118
+ });
119
+ it('Phase 1 → triggers detect-surfaces, re-reads state, prints final state', async () => {
120
+ // WP-433 S2: .claude dir triggers Claude surface detection → stampDetectedSurfaces
121
+ // is called as a 3rd kernelCall (between recordSetupInvocation and the re-read).
122
+ mkdirSync(join(scratch, '.claude'));
123
+ mockedKernelCall
124
+ .mockResolvedValueOnce({ ...SAMPLE, phase: 1 }) // initial getPbSetupState
125
+ .mockResolvedValueOnce({ firstSetupInvocationAt: 1, alreadyRecorded: false }) // recordSetupInvocation
126
+ .mockResolvedValueOnce({ stamped: true, surfaces: ['claude'] }) // stampDetectedSurfaces (WP-433 S2)
127
+ .mockResolvedValueOnce({ ...SAMPLE, phase: 2 }); // re-read after detect
128
+ await runSetup({ cwd: scratch });
129
+ const stdout = stdoutSpy.mock.calls.map((c) => String(c[0])).join('');
130
+ expect(stdout).toContain('"phase":2');
131
+ });
132
+ it('Phase 2+ → no auto-detect, prints initial state', async () => {
133
+ const phase2 = { ...SAMPLE, phase: 2 };
134
+ mockedKernelCall
135
+ .mockResolvedValueOnce(phase2)
136
+ .mockResolvedValueOnce({ firstSetupInvocationAt: 1, alreadyRecorded: true });
137
+ await runSetup({ cwd: scratch });
138
+ const calls = mockedKernelCall.mock.calls.map((c) => c[0]);
139
+ expect(calls.filter((c) => c === 'setup.getPbSetupState')).toHaveLength(1);
140
+ });
141
+ it('records invocation exactly once per pb-setup invocation', async () => {
142
+ const phase2 = { ...SAMPLE, phase: 2 };
143
+ mockedKernelCall
144
+ .mockResolvedValueOnce(phase2)
145
+ .mockResolvedValueOnce({ firstSetupInvocationAt: 1, alreadyRecorded: false });
146
+ await runSetup({ cwd: scratch });
147
+ const invocationCalls = mockedKernelCall.mock.calls.filter((c) => c[0] === 'setup.recordSetupInvocation');
148
+ expect(invocationCalls).toHaveLength(1);
149
+ expect(invocationCalls[0][1]).toMatchObject({ surfaceCapability: 'cli' });
150
+ });
151
+ it('records invocation with chat-only when state.surfaceCapability=chat-only (WP-431 S3 review fix #1)', async () => {
152
+ // Pre-revision: this test fabricated a `reasonForPhase` string the producer
153
+ // never emits and asserted that the (now-deleted) `inferSurfaceCapability`
154
+ // string-greppy heuristic returned 'chat-only'. The heuristic was broken
155
+ // (producer never emits 'chat-only' in reasonForPhase), so every chat-only
156
+ // user was silently tagged 'cli'. Post-revision, the resolver surfaces
157
+ // `surfaceCapability` as a structural field — the CLI reads it directly.
158
+ const chatOnly = {
159
+ ...SAMPLE,
160
+ phase: 3,
161
+ role: 'creator',
162
+ reasonForPhase: 'Phase 2 done (surface-skipped per DEC-993); catalogAdoptionCount=0 → Phase 3.',
163
+ surfaceCapability: 'chat-only',
164
+ };
165
+ mockedKernelCall
166
+ .mockResolvedValueOnce(chatOnly)
167
+ .mockResolvedValueOnce({ firstSetupInvocationAt: 1, alreadyRecorded: false });
168
+ await runSetup({ cwd: scratch });
169
+ const invocationCalls = mockedKernelCall.mock.calls.filter((c) => c[0] === 'setup.recordSetupInvocation');
170
+ expect(invocationCalls[0][1]).toMatchObject({ surfaceCapability: 'chat-only' });
171
+ });
172
+ it('chat-only resolver path: empty manifest + chat-only state → state.surfaceCapability="chat-only" (live resolver)', async () => {
173
+ // WP-431 S3 review fix #1: assert the actual resolver emits surfaceCapability
174
+ // structurally. This is a unit-level pin against the *resolver* (not the
175
+ // CLI handler), so we exercise resolveSetupState directly with a
176
+ // chat-only input shape that DOES occur in production
177
+ // (manifest.surfaces=['mcp-only'] is the upstream stamp for chat-only
178
+ // surfaces per DEC-993).
179
+ const { resolveSetupState } = await import('../../setup/state-machine.js');
180
+ const out = resolveSetupState({
181
+ manifest: { surfaces: ['mcp-only'] },
182
+ assetCounts: { totalAssets: 0, totalUnimported: 0, hasMore: false },
183
+ catalogAdoptionCount: 0,
184
+ confirmedEntryCount: 0,
185
+ entriesAcrossCollections: 0,
186
+ retrievalDemoConfirmed: false,
187
+ workspaceMaterialized: false,
188
+ userActivated: false,
189
+ surfaceCapability: 'chat-only',
190
+ });
191
+ expect(out.surfaceCapability).toBe('chat-only');
192
+ });
193
+ });
194
+ //# sourceMappingURL=setup-state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-state.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-state.test.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,10 @@
3
3
  *
4
4
  * Seed metadata is duplicated from `convex/admin/commandManifest.ts` for CLI help
5
5
  * and ordering only — behavior is enforced server-side (STD-101).
6
+ *
7
+ * WP-433 S1b D13: the 4 substrate-repair migrations + backfill-default-team are
8
+ * generated from `convex/admin/seed/registry.ts` (single SSOT) into
9
+ * `seedRegistryEntries.generated.ts`. Run `npm run codegen` to refresh after registry edits.
6
10
  */
7
11
  import { Command } from 'commander';
8
12
  export type SeedCommandMeta = {
@@ -18,9 +22,35 @@ export type SeedCommandMeta = {
18
22
  * Order matches `ADMIN_COMMANDS` seed block in commandManifest.ts — dependency order for `seed all`.
19
23
  */
20
24
  export declare const SEED_COMMAND_ENTRIES: readonly SeedCommandMeta[];
21
- /** Manifest order for `pb admin seed all`. */
25
+ /**
26
+ * Manifest order for `pb admin seed all`.
27
+ *
28
+ * Includes the static legacy seeds plus the registry-generated runnable entries so
29
+ * `seed all` exercises the full surface (D13 SSOT).
30
+ */
22
31
  export declare const SEED_MANIFEST_ORDER: readonly string[];
23
- /** Accept `knowledge` or `seed:knowledge`. */
32
+ /**
33
+ * Accept short-form or long-form seed op names; return the canonical backend command name.
34
+ *
35
+ * Static entries (legacy) are stored as `seed:<slug>` (e.g. `seed:knowledge`).
36
+ * Registry-generated entries (WP-433 S1b) are stored as bare slugs (e.g.
37
+ * `seed-system-glossary`) to avoid the double-prefix `seed:seed-*` trap that
38
+ * arose when slugs like `seed-system-glossary` were naively stored as
39
+ * `seed:seed-system-glossary`.
40
+ *
41
+ * Both forms always return the backend command name (`seed:<bare-slug>`):
42
+ * - `'system-glossary'` or `'seed-system-glossary'` → `'seed:seed-system-glossary'`
43
+ * would be wrong; instead the bare slug stored in the map IS `seed-system-glossary`
44
+ * and the backend command is `seed:seed-system-glossary`.
45
+ *
46
+ * Resolution order:
47
+ * 1. Try `seed:<t>` — covers legacy static entries (`seed:knowledge`) and any input
48
+ * that normalises to a key already stored with the `seed:` prefix.
49
+ * 2. Try bare `<t>` (stripping a leading `seed:` from the input if present) —
50
+ * covers registry entries stored without the prefix.
51
+ * When found via bare slug, return `seed:<bare>` so the caller always gets a
52
+ * backend-compatible command name.
53
+ */
24
54
  export declare function normalizeSeedCommandName(input: string): string;
25
55
  /**
26
56
  * Build args for seed:backfill-starter with CLI-side validation.
@@ -1 +1 @@
1
- {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/seed.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,MAAM,MAAM,eAAe,GAAG;IAC5B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,eAAe,EA+GjD,CAAC;AAIX,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAA4C,CAAC;AAM9F,8CAA8C;AAC9C,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB9D;AAID;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuB1B;AAkBD,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmCzB;AA2FD,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAshBtD"}
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,MAAM,MAAM,eAAe,GAAG;IAC5B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,eAAe,EAkHjD,CAAC;AAwBX;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAEhD,CAAC;AAkBF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA4B9D;AAID;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuB1B;AAkBD,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsCzB;AAuRD,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAikBtD"}