@productbrain/cli 0.1.0-beta.11282 → 0.1.0-beta.11288
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.
- package/README.md +3 -2
- package/dist/__tests__/cli-error-once.test.d.ts +2 -0
- package/dist/__tests__/cli-error-once.test.d.ts.map +1 -0
- package/dist/__tests__/cli-error-once.test.js +51 -0
- package/dist/__tests__/cli-error-once.test.js.map +1 -0
- package/dist/__tests__/init.test.d.ts +2 -1
- package/dist/__tests__/init.test.d.ts.map +1 -1
- package/dist/__tests__/init.test.js +110 -8
- package/dist/__tests__/init.test.js.map +1 -1
- package/dist/__tests__/removed-commands.test.js +31 -2
- package/dist/__tests__/removed-commands.test.js.map +1 -1
- package/dist/commands/connect-integration.test.js +1 -5
- package/dist/commands/connect-integration.test.js.map +1 -1
- package/dist/commands/connect-legacy-migration.test.js +0 -1
- package/dist/commands/connect-legacy-migration.test.js.map +1 -1
- package/dist/commands/connect-screens.d.ts +9 -13
- package/dist/commands/connect-screens.d.ts.map +1 -1
- package/dist/commands/connect-screens.js +16 -78
- package/dist/commands/connect-screens.js.map +1 -1
- package/dist/commands/connect-screens.test.d.ts +2 -0
- package/dist/commands/connect-screens.test.d.ts.map +1 -0
- package/dist/commands/connect-screens.test.js +18 -0
- package/dist/commands/connect-screens.test.js.map +1 -0
- package/dist/commands/connect.js +5 -5
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connect.test.js +0 -4
- package/dist/commands/connect.test.js.map +1 -1
- package/dist/commands/init.d.ts +14 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +90 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/handleCliError.d.ts +17 -0
- package/dist/handleCliError.d.ts.map +1 -1
- package/dist/handleCliError.js +14 -3
- package/dist/handleCliError.js.map +1 -1
- package/dist/index.js +7 -29
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +1 -2
- package/dist/lib/client.js.map +1 -1
- package/package.json +1 -2
- package/dist/__tests__/handshake-augment.test.d.ts +0 -2
- package/dist/__tests__/handshake-augment.test.d.ts.map +0 -1
- package/dist/__tests__/handshake-augment.test.js +0 -407
- package/dist/__tests__/handshake-augment.test.js.map +0 -1
- package/dist/__tests__/handshake-dormancy.test.d.ts +0 -2
- package/dist/__tests__/handshake-dormancy.test.d.ts.map +0 -1
- package/dist/__tests__/handshake-dormancy.test.js +0 -24
- package/dist/__tests__/handshake-dormancy.test.js.map +0 -1
- package/dist/__tests__/handshake-formatter.test.d.ts +0 -2
- package/dist/__tests__/handshake-formatter.test.d.ts.map +0 -1
- package/dist/__tests__/handshake-formatter.test.js +0 -111
- package/dist/__tests__/handshake-formatter.test.js.map +0 -1
- package/dist/__tests__/handshake-preview.test.d.ts +0 -2
- package/dist/__tests__/handshake-preview.test.d.ts.map +0 -1
- package/dist/__tests__/handshake-preview.test.js +0 -500
- package/dist/__tests__/handshake-preview.test.js.map +0 -1
- package/dist/__tests__/handshake-session-threading.test.d.ts +0 -2
- package/dist/__tests__/handshake-session-threading.test.d.ts.map +0 -1
- package/dist/__tests__/handshake-session-threading.test.js +0 -185
- package/dist/__tests__/handshake-session-threading.test.js.map +0 -1
- package/dist/__tests__/handshake.e2e.test.d.ts +0 -2
- package/dist/__tests__/handshake.e2e.test.d.ts.map +0 -1
- package/dist/__tests__/handshake.e2e.test.js +0 -226
- package/dist/__tests__/handshake.e2e.test.js.map +0 -1
- package/dist/__tests__/handshake.test.d.ts +0 -2
- package/dist/__tests__/handshake.test.d.ts.map +0 -1
- package/dist/__tests__/handshake.test.js +0 -1040
- package/dist/__tests__/handshake.test.js.map +0 -1
- package/dist/__tests__/method-registry.integration.test.d.ts +0 -6
- package/dist/__tests__/method-registry.integration.test.d.ts.map +0 -1
- package/dist/__tests__/method-registry.integration.test.js +0 -17
- package/dist/__tests__/method-registry.integration.test.js.map +0 -1
- package/dist/__tests__/method-registry.test.d.ts +0 -12
- package/dist/__tests__/method-registry.test.d.ts.map +0 -1
- package/dist/__tests__/method-registry.test.js +0 -86
- package/dist/__tests__/method-registry.test.js.map +0 -1
- package/dist/commands/connect-context.d.ts +0 -55
- package/dist/commands/connect-context.d.ts.map +0 -1
- package/dist/commands/connect-context.js +0 -78
- package/dist/commands/connect-context.js.map +0 -1
- package/dist/commands/connect-context.test.d.ts +0 -2
- package/dist/commands/connect-context.test.d.ts.map +0 -1
- package/dist/commands/connect-context.test.js +0 -148
- package/dist/commands/connect-context.test.js.map +0 -1
- package/dist/commands/handshake.d.ts +0 -78
- package/dist/commands/handshake.d.ts.map +0 -1
- package/dist/commands/handshake.js +0 -1359
- package/dist/commands/handshake.js.map +0 -1
- package/dist/lib/method-registry.d.ts +0 -37
- package/dist/lib/method-registry.d.ts.map +0 -1
- package/dist/lib/method-registry.js +0 -41
- package/dist/lib/method-registry.js.map +0 -1
- package/templates/general/code-integrity.md +0 -11
- package/templates/general/getting-started.md +0 -12
- package/templates/method-registry.json +0 -16
- package/templates/node-ts/code-integrity.md +0 -13
- package/templates/node-ts/testing.md +0 -12
- package/templates/python/code-integrity.md +0 -13
- package/templates/python/testing.md +0 -12
|
@@ -1,500 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* runHandshake preview/apply/dryRun invariants — WP-332 S1.
|
|
3
|
-
* STD-197: preview is the new default (no --apply flag = no writes).
|
|
4
|
-
*/
|
|
5
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
6
|
-
const { vfs, MOCK_MARKER, MOCK_CWD, MOCK_HOME } = vi.hoisted(() => ({
|
|
7
|
-
vfs: {},
|
|
8
|
-
MOCK_MARKER: 'auto-generated by pb handshake',
|
|
9
|
-
MOCK_CWD: '/tmp/pb-preview-cwd',
|
|
10
|
-
MOCK_HOME: '/tmp/pb-preview-home',
|
|
11
|
-
}));
|
|
12
|
-
const { execSyncMock } = vi.hoisted(() => ({
|
|
13
|
-
execSyncMock: vi.fn(),
|
|
14
|
-
}));
|
|
15
|
-
vi.mock('fs', () => ({
|
|
16
|
-
mkdirSync: vi.fn(),
|
|
17
|
-
writeFileSync: vi.fn((path, content) => {
|
|
18
|
-
vfs[path] = content;
|
|
19
|
-
}),
|
|
20
|
-
existsSync: vi.fn((path) => path in vfs),
|
|
21
|
-
readFileSync: vi.fn((path, _enc) => {
|
|
22
|
-
if (path in vfs)
|
|
23
|
-
return vfs[path];
|
|
24
|
-
throw Object.assign(new Error(`ENOENT: no such file '${path}'`), { code: 'ENOENT' });
|
|
25
|
-
}),
|
|
26
|
-
readdirSync: vi.fn(() => []),
|
|
27
|
-
copyFileSync: vi.fn(),
|
|
28
|
-
realpathSync: vi.fn((path) => path),
|
|
29
|
-
}));
|
|
30
|
-
vi.mock('os', () => ({ homedir: vi.fn(() => MOCK_HOME) }));
|
|
31
|
-
vi.mock('child_process', () => ({
|
|
32
|
-
execSync: (...args) => execSyncMock(...args),
|
|
33
|
-
}));
|
|
34
|
-
vi.mock('../lib/prompts.js', () => ({
|
|
35
|
-
select: vi.fn(() => Promise.resolve('work')),
|
|
36
|
-
confirm: vi.fn(() => Promise.resolve(false)),
|
|
37
|
-
ask: vi.fn(() => Promise.resolve('')),
|
|
38
|
-
password: vi.fn(() => Promise.resolve('')),
|
|
39
|
-
isInteractive: vi.fn(() => false),
|
|
40
|
-
}));
|
|
41
|
-
vi.mock('../lib/client.js', () => ({
|
|
42
|
-
kernelCall: vi.fn().mockResolvedValue([]),
|
|
43
|
-
kernelCallWithSession: vi.fn().mockResolvedValue(undefined),
|
|
44
|
-
}));
|
|
45
|
-
vi.mock('../lib/session.js', () => ({
|
|
46
|
-
readSession: vi.fn(() => null),
|
|
47
|
-
writeSession: vi.fn(),
|
|
48
|
-
clearSession: vi.fn(),
|
|
49
|
-
readClosedMarker: vi.fn(() => null),
|
|
50
|
-
addCapturedEntry: vi.fn(),
|
|
51
|
-
}));
|
|
52
|
-
vi.mock('../lib/config.js', () => ({
|
|
53
|
-
getConfigOrGuide: vi.fn().mockResolvedValue({
|
|
54
|
-
apiKey: 'pb_sk_test',
|
|
55
|
-
siteUrl: 'https://test.convex.site',
|
|
56
|
-
}),
|
|
57
|
-
}));
|
|
58
|
-
vi.mock('../lib/repo-detect.js', () => ({
|
|
59
|
-
detectRepo: vi.fn().mockReturnValue({ name: 'test-repo', detectedStack: [], repoSlug: null }),
|
|
60
|
-
extractWorkspaceProfile: vi.fn().mockReturnValue(null),
|
|
61
|
-
}));
|
|
62
|
-
vi.mock('../generators/adapters.js', () => ({
|
|
63
|
-
MARKER: MOCK_MARKER,
|
|
64
|
-
CLAUDE_BRIEFING_POINTER: 'Your workspace briefing is served by `pb session start`.',
|
|
65
|
-
generateAgentsMd: vi.fn().mockImplementation(() => `<!-- ${MOCK_MARKER} -->\nagents content`),
|
|
66
|
-
generateClaudeMd: vi.fn().mockImplementation(() => `<!-- ${MOCK_MARKER} -->\nclaude content`),
|
|
67
|
-
generateCursorMdc: vi.fn().mockImplementation(() => `<!-- ${MOCK_MARKER} -->\ncursor content`),
|
|
68
|
-
generateCopilotMd: vi.fn().mockImplementation(() => `<!-- ${MOCK_MARKER} -->\ncopilot content`),
|
|
69
|
-
generateCopilotInstructionFiles: vi.fn().mockReturnValue([]),
|
|
70
|
-
}));
|
|
71
|
-
vi.mock('../generators/portable-knowledge.js', () => ({
|
|
72
|
-
readCanonicalSkills: vi.fn().mockReturnValue([]),
|
|
73
|
-
readCanonicalRules: vi.fn().mockReturnValue([]),
|
|
74
|
-
readPersonalLayer: vi.fn().mockReturnValue([]),
|
|
75
|
-
readPersonalSkillsLayer: vi.fn().mockReturnValue([]),
|
|
76
|
-
generateCursorSkill: vi.fn().mockReturnValue(''),
|
|
77
|
-
generateCursorRule: vi.fn().mockReturnValue(''),
|
|
78
|
-
generateCodexSkill: vi.fn().mockReturnValue(''),
|
|
79
|
-
generateCodexSkillIndex: vi.fn().mockReturnValue(''),
|
|
80
|
-
shouldEmitToTarget: vi.fn().mockReturnValue(false),
|
|
81
|
-
filterByLevel: vi.fn().mockImplementation((items) => items),
|
|
82
|
-
evaluateConditions: vi.fn().mockReturnValue({ included: true, reasons: [] }),
|
|
83
|
-
validateCodexSkills: vi.fn().mockReturnValue([]),
|
|
84
|
-
}));
|
|
85
|
-
vi.mock('../generators/briefing-md.js', () => ({
|
|
86
|
-
generateBriefingMd: vi.fn().mockReturnValue('briefing content'),
|
|
87
|
-
}));
|
|
88
|
-
vi.mock('../generators/context-md.js', () => ({
|
|
89
|
-
generateContextMd: vi.fn().mockReturnValue('context content'),
|
|
90
|
-
}));
|
|
91
|
-
vi.mock('../generators/everyone-rules-md.js', () => ({
|
|
92
|
-
generateEveryoneRulesMd: vi.fn().mockReturnValue('everyone rules content'),
|
|
93
|
-
}));
|
|
94
|
-
vi.mock('../generators/surface-profiles.js', () => ({
|
|
95
|
-
resolveSurfaceProfile: vi.fn().mockReturnValue({ level: 'intermediate' }),
|
|
96
|
-
}));
|
|
97
|
-
vi.mock('../generators/manifest.js', () => ({
|
|
98
|
-
readManifest: vi.fn().mockReturnValue(null),
|
|
99
|
-
readManifestStatus: vi.fn().mockReturnValue({
|
|
100
|
-
mode: 'project',
|
|
101
|
-
surfaces: ['.cursor', '.claude', '.codex', '.github'],
|
|
102
|
-
lock: {},
|
|
103
|
-
parseStatus: 'ok',
|
|
104
|
-
manifest: null,
|
|
105
|
-
}),
|
|
106
|
-
filterByAdoptionState: vi.fn().mockImplementation((items) => items),
|
|
107
|
-
}));
|
|
108
|
-
vi.mock('../formatters/handshake.js', () => ({
|
|
109
|
-
formatHandshakeReport: vi.fn().mockReturnValue(''),
|
|
110
|
-
}));
|
|
111
|
-
vi.mock('../lib/hook-intents.js', () => ({
|
|
112
|
-
composeHooksFromIntents: vi.fn().mockReturnValue({}),
|
|
113
|
-
getHookStatusForSurface: vi.fn().mockReturnValue([]),
|
|
114
|
-
}));
|
|
115
|
-
vi.mock('../lib/method-registry.js', () => ({
|
|
116
|
-
loadMethodRegistry: vi.fn().mockResolvedValue({ methods: [] }),
|
|
117
|
-
}));
|
|
118
|
-
import { readdirSync, writeFileSync } from 'fs';
|
|
119
|
-
import { formatHandshakeReport } from '../formatters/handshake.js';
|
|
120
|
-
import { kernelCall } from '../lib/client.js';
|
|
121
|
-
import { detectRepo } from '../lib/repo-detect.js';
|
|
122
|
-
import { readManifestStatus } from '../generators/manifest.js';
|
|
123
|
-
import { generateCursorSkill, shouldEmitToTarget, readCanonicalSkills } from '../generators/portable-knowledge.js';
|
|
124
|
-
import { runHandshake } from '../commands/handshake.js';
|
|
125
|
-
const ORIENT_VIEW = { briefing: { purpose: 'One truth for people and agents' } };
|
|
126
|
-
function capturedReport() {
|
|
127
|
-
const calls = vi.mocked(formatHandshakeReport).mock.calls;
|
|
128
|
-
return calls.length > 0 ? calls[calls.length - 1][0] : null;
|
|
129
|
-
}
|
|
130
|
-
describe('runHandshake — preview/apply/dryRun invariants (WP-332 S1)', () => {
|
|
131
|
-
let cwdSpy;
|
|
132
|
-
beforeEach(() => {
|
|
133
|
-
Object.keys(vfs).forEach((k) => delete vfs[k]);
|
|
134
|
-
vi.clearAllMocks();
|
|
135
|
-
cwdSpy = vi.spyOn(process, 'cwd').mockReturnValue(MOCK_CWD);
|
|
136
|
-
vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
137
|
-
vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
138
|
-
vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
139
|
-
vi.mocked(readdirSync).mockReturnValue([]);
|
|
140
|
-
execSyncMock.mockReset();
|
|
141
|
-
execSyncMock.mockImplementation(() => {
|
|
142
|
-
throw new Error('no git');
|
|
143
|
-
});
|
|
144
|
-
vi.mocked(detectRepo).mockReturnValue({
|
|
145
|
-
name: 'test-repo',
|
|
146
|
-
description: null,
|
|
147
|
-
gitRemote: null,
|
|
148
|
-
repoSlug: null,
|
|
149
|
-
detectedStack: [],
|
|
150
|
-
isMonorepo: false,
|
|
151
|
-
});
|
|
152
|
-
vi.mocked(readManifestStatus).mockReturnValue({
|
|
153
|
-
mode: 'project',
|
|
154
|
-
surfaces: ['.cursor', '.claude', '.codex', '.github'],
|
|
155
|
-
lock: {},
|
|
156
|
-
parseStatus: 'ok',
|
|
157
|
-
manifest: null,
|
|
158
|
-
});
|
|
159
|
-
// TASK-554: getOrientView always serves the briefing's facts; every other call resolves [].
|
|
160
|
-
vi.mocked(kernelCall).mockImplementation(async (tool) => (tool === 'chain.getOrientView' ? ORIENT_VIEW : []));
|
|
161
|
-
});
|
|
162
|
-
afterEach(() => {
|
|
163
|
-
cwdSpy.mockRestore();
|
|
164
|
-
});
|
|
165
|
-
it('default (no apply, no dryRun) = preview: writeFileSync is never called', async () => {
|
|
166
|
-
await runHandshake({});
|
|
167
|
-
expect(writeFileSync).not.toHaveBeenCalled();
|
|
168
|
-
});
|
|
169
|
-
it('apply: true = write mode: writeFileSync is called for new files', async () => {
|
|
170
|
-
await runHandshake({ apply: true });
|
|
171
|
-
expect(writeFileSync).toHaveBeenCalled();
|
|
172
|
-
});
|
|
173
|
-
it('dryRun: true = backward-compat preview: writeFileSync is never called', async () => {
|
|
174
|
-
await runHandshake({ dryRun: true });
|
|
175
|
-
expect(writeFileSync).not.toHaveBeenCalled();
|
|
176
|
-
});
|
|
177
|
-
it('PR #912 round 11 (Codex P1): PB_JSON=1 suppresses progress lines so stdout carries one JSON document', async () => {
|
|
178
|
-
const priorPbJson = process.env.PB_JSON;
|
|
179
|
-
process.env.PB_JSON = '1';
|
|
180
|
-
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
181
|
-
let chunks;
|
|
182
|
-
try {
|
|
183
|
-
await runHandshake({ apply: true });
|
|
184
|
-
// Read the recorded calls BEFORE mockRestore() — restore also clears mock.calls (it does
|
|
185
|
-
// everything mockReset()/mockClear() do, plus restoring the real implementation).
|
|
186
|
-
chunks = writeSpy.mock.calls.map(([chunk]) => String(chunk));
|
|
187
|
-
}
|
|
188
|
-
finally {
|
|
189
|
-
if (priorPbJson === undefined)
|
|
190
|
-
delete process.env.PB_JSON;
|
|
191
|
-
else
|
|
192
|
-
process.env.PB_JSON = priorPbJson;
|
|
193
|
-
writeSpy.mockRestore();
|
|
194
|
-
}
|
|
195
|
-
// No progress prose ("Detecting repo: ...", "Fetching workspace context...") reached stdout.
|
|
196
|
-
expect(chunks.some((c) => c.includes('Detecting repo'))).toBe(false);
|
|
197
|
-
expect(chunks.some((c) => c.includes('Fetching workspace context'))).toBe(false);
|
|
198
|
-
// What did reach stdout parses as JSON once concatenated (a leading blank-line write is fine —
|
|
199
|
-
// JSON.parse tolerates surrounding whitespace).
|
|
200
|
-
const combined = chunks.join('').trim();
|
|
201
|
-
expect(() => JSON.parse(combined)).not.toThrow();
|
|
202
|
-
});
|
|
203
|
-
it('PR #912 round 12 (Codex P2): PB_JSON=1 does NOT suppress logErr — warnings still reach stderr', async () => {
|
|
204
|
-
// WP-776 S3d/S3f: the original fixture ("DB baseline changed" during authoring sync) is
|
|
205
|
-
// deleted along with the setup-assets system. An unregistered manifest surface is a
|
|
206
|
-
// still-live, simpler logErr() trigger (surfaces/registry.ts's real, unmocked
|
|
207
|
-
// validateSurfacesForMode) that proves the same PB_JSON invariant.
|
|
208
|
-
vi.mocked(readManifestStatus).mockReturnValue({
|
|
209
|
-
mode: 'project',
|
|
210
|
-
surfaces: ['.cursor', '.not-a-real-surface'],
|
|
211
|
-
lock: {},
|
|
212
|
-
parseStatus: 'ok',
|
|
213
|
-
manifest: null,
|
|
214
|
-
});
|
|
215
|
-
const priorPbJson = process.env.PB_JSON;
|
|
216
|
-
process.env.PB_JSON = '1';
|
|
217
|
-
const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
218
|
-
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
219
|
-
let stderrChunks;
|
|
220
|
-
try {
|
|
221
|
-
await runHandshake({ apply: true });
|
|
222
|
-
stderrChunks = stderrSpy.mock.calls.map(([chunk]) => String(chunk));
|
|
223
|
-
}
|
|
224
|
-
finally {
|
|
225
|
-
if (priorPbJson === undefined)
|
|
226
|
-
delete process.env.PB_JSON;
|
|
227
|
-
else
|
|
228
|
-
process.env.PB_JSON = priorPbJson;
|
|
229
|
-
stdoutSpy.mockRestore();
|
|
230
|
-
stderrSpy.mockRestore();
|
|
231
|
-
}
|
|
232
|
-
expect(stderrChunks.some((c) => c.includes('manifest surface ".not-a-real-surface" is not registered'))).toBe(true);
|
|
233
|
-
});
|
|
234
|
-
it('PR #912 round 13 (Codex P1, security): pb --json handshake never leaks an HTTPS git-remote credential or raw Convex fields', async () => {
|
|
235
|
-
vfs[`${MOCK_CWD}/.productbrain/briefing.md`] = 'Driving entry: WP-462.';
|
|
236
|
-
vi.mocked(detectRepo).mockReturnValue({
|
|
237
|
-
name: 'test-repo',
|
|
238
|
-
description: null,
|
|
239
|
-
// A credential embedded in the remote — must never reach JSON output verbatim.
|
|
240
|
-
gitRemote: 'https://user:token@github.com/org/repo.git',
|
|
241
|
-
repoSlug: null,
|
|
242
|
-
detectedStack: [],
|
|
243
|
-
isMonorepo: false,
|
|
244
|
-
});
|
|
245
|
-
vi.mocked(kernelCall).mockImplementation(async (tool) => {
|
|
246
|
-
if (tool === 'chain.searchEntries') {
|
|
247
|
-
// A raw Convex document — _id/_creationTime must be stripped before JSON serialization.
|
|
248
|
-
return [{ _id: 'kx7raw000000000000000000', _creationTime: 1700000000000, entryId: 'WP-462', name: 'Some Entry' }];
|
|
249
|
-
}
|
|
250
|
-
return tool === 'chain.getOrientView' ? ORIENT_VIEW : [];
|
|
251
|
-
});
|
|
252
|
-
const priorPbJson = process.env.PB_JSON;
|
|
253
|
-
process.env.PB_JSON = '1';
|
|
254
|
-
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
255
|
-
let combined;
|
|
256
|
-
try {
|
|
257
|
-
await runHandshake({ apply: true });
|
|
258
|
-
combined = writeSpy.mock.calls.map(([chunk]) => String(chunk)).join('').trim();
|
|
259
|
-
}
|
|
260
|
-
finally {
|
|
261
|
-
if (priorPbJson === undefined)
|
|
262
|
-
delete process.env.PB_JSON;
|
|
263
|
-
else
|
|
264
|
-
process.env.PB_JSON = priorPbJson;
|
|
265
|
-
writeSpy.mockRestore();
|
|
266
|
-
}
|
|
267
|
-
expect(combined).not.toContain('user:token@');
|
|
268
|
-
expect(combined).not.toContain('_creationTime');
|
|
269
|
-
expect(combined).not.toContain('kx7raw000000000000000000');
|
|
270
|
-
const parsed = JSON.parse(combined);
|
|
271
|
-
expect(parsed.repo.gitRemote).toBe('https://github.com/org/repo.git');
|
|
272
|
-
expect(parsed.matchedEntries).toContainEqual({ entryId: 'WP-462', name: 'Some Entry' });
|
|
273
|
-
});
|
|
274
|
-
it('threads sanitized local startup signals into the orient view call', async () => {
|
|
275
|
-
vfs[`${MOCK_CWD}/.productbrain/briefing.md`] = 'Driving entry: WP-462. Review PR #177 and DEC-1244.';
|
|
276
|
-
execSyncMock.mockImplementation((cmd) => {
|
|
277
|
-
if (cmd === 'git branch --show-current')
|
|
278
|
-
return 'wp462-rcrt-activation\n';
|
|
279
|
-
if (cmd === 'git diff --name-only HEAD')
|
|
280
|
-
return 'convex/agentKnowledge/startupResolver.ts\n.env.local\n';
|
|
281
|
-
if (cmd === 'git rev-parse --short HEAD')
|
|
282
|
-
return 'abc1234\n';
|
|
283
|
-
throw new Error(`unexpected command: ${cmd}`);
|
|
284
|
-
});
|
|
285
|
-
await runHandshake({ apply: true, quiet: true });
|
|
286
|
-
const orientCall = vi.mocked(kernelCall).mock.calls.find(([tool]) => tool === 'chain.getOrientView');
|
|
287
|
-
expect(orientCall).toBeDefined();
|
|
288
|
-
const args = orientCall[1];
|
|
289
|
-
expect(args.tier).toBe('standard');
|
|
290
|
-
expect(args.task).toContain('WP-462');
|
|
291
|
-
expect(args.task).toContain('PR #177');
|
|
292
|
-
expect(args.task).toContain('DEC-1244');
|
|
293
|
-
expect(args.startupSignals).toMatchObject({
|
|
294
|
-
sourceSurface: 'cli',
|
|
295
|
-
resolverVersion: 'startup-resolution-v1',
|
|
296
|
-
branchName: 'wp462-rcrt-activation',
|
|
297
|
-
worktreeName: 'pb-preview-cwd',
|
|
298
|
-
changedPaths: ['convex/agentKnowledge/startupResolver.ts'],
|
|
299
|
-
reviewedArtifactRefs: ['WP-462', 'PR #177', 'DEC-1244'],
|
|
300
|
-
commitSha: 'abc1234',
|
|
301
|
-
});
|
|
302
|
-
});
|
|
303
|
-
it('marks bare `pb handshake` calls with queryable invocation attribution', async () => {
|
|
304
|
-
// 'session-start' is no longer a live caller shape — session start/close stopped calling
|
|
305
|
-
// runHandshake entirely (WP-759/TASK-232, DEC-1736). 'handshake' is the invocationPath the
|
|
306
|
-
// bare `pb handshake` command (index.ts) actually passes today.
|
|
307
|
-
execSyncMock.mockImplementation((cmd) => {
|
|
308
|
-
if (cmd === 'git branch --show-current')
|
|
309
|
-
return 'wp462-rcrt-activation\n';
|
|
310
|
-
if (cmd === 'git diff --name-only HEAD')
|
|
311
|
-
return 'convex/agentKnowledge/startupResolver.ts\n';
|
|
312
|
-
if (cmd === 'git rev-parse --short HEAD')
|
|
313
|
-
return 'abc1234\n';
|
|
314
|
-
throw new Error(`unexpected command: ${cmd}`);
|
|
315
|
-
});
|
|
316
|
-
await runHandshake({ apply: true, quiet: true, invocationPath: 'handshake' });
|
|
317
|
-
const orientCall = vi.mocked(kernelCall).mock.calls.find(([tool]) => tool === 'chain.getOrientView');
|
|
318
|
-
expect(orientCall).toBeDefined();
|
|
319
|
-
expect(orientCall[1].invocationPath).toBe('handshake');
|
|
320
|
-
});
|
|
321
|
-
it('does not invent a startup task when local evidence is empty, but still emits an attribution envelope (Codex@704)', async () => {
|
|
322
|
-
// execSync throws "no git" by default → no branch/commit/path facts.
|
|
323
|
-
await runHandshake({ apply: true, quiet: true });
|
|
324
|
-
const orientCall = vi.mocked(kernelCall).mock.calls.find(([tool]) => tool === 'chain.getOrientView');
|
|
325
|
-
expect(orientCall).toBeDefined();
|
|
326
|
-
const args = orientCall[1];
|
|
327
|
-
expect(args.tier).toBe('standard');
|
|
328
|
-
// Codex@704: returning {} here would drop the whole startup block and lose
|
|
329
|
-
// attribution + the queryable domain-unresolved row in exactly the low-evidence
|
|
330
|
-
// case the resolver is meant to surface. A minimal envelope must still ride.
|
|
331
|
-
expect(args.startupSignals).toBeDefined();
|
|
332
|
-
expect(args.startupSignals.resolverVersion).toBe('startup-resolution-v1');
|
|
333
|
-
expect(args.startupSignals.sourceSurface).toBe('cli');
|
|
334
|
-
// No invented task; no fabricated evidence fields.
|
|
335
|
-
expect(args.task).toBeUndefined();
|
|
336
|
-
expect(args.startupSignals.taskText).toBeUndefined();
|
|
337
|
-
expect(args.startupSignals.changedPaths).toBeUndefined();
|
|
338
|
-
expect(args.startupSignals.reviewedArtifactRefs).toBeUndefined();
|
|
339
|
-
});
|
|
340
|
-
it('does not derive startup task text from sanitized-out paths, but keeps attribution (Codex@704)', async () => {
|
|
341
|
-
execSyncMock.mockImplementation((cmd) => {
|
|
342
|
-
if (cmd === 'git branch --show-current')
|
|
343
|
-
return 'misc-cleanup\n';
|
|
344
|
-
if (cmd === 'git diff --name-only HEAD')
|
|
345
|
-
return '.env.local\n';
|
|
346
|
-
if (cmd === 'git rev-parse --short HEAD')
|
|
347
|
-
return 'abc1234\n';
|
|
348
|
-
// merge-base / branch-delta unavailable in this fixture.
|
|
349
|
-
throw new Error(`unexpected command: ${cmd}`);
|
|
350
|
-
});
|
|
351
|
-
await runHandshake({ apply: true, quiet: true });
|
|
352
|
-
const orientCall = vi.mocked(kernelCall).mock.calls.find(([tool]) => tool === 'chain.getOrientView');
|
|
353
|
-
expect(orientCall).toBeDefined();
|
|
354
|
-
const args = orientCall[1];
|
|
355
|
-
expect(args.tier).toBe('standard');
|
|
356
|
-
// The only "evidence" was a secret-bearing path (.env.local) that sanitization
|
|
357
|
-
// drops — so no task is invented and no changedPaths leak — but the
|
|
358
|
-
// attribution envelope (branch + commit) still rides (Codex@704).
|
|
359
|
-
expect(args.task).toBeUndefined();
|
|
360
|
-
expect(args.startupSignals).toBeDefined();
|
|
361
|
-
expect(args.startupSignals.branchName).toBe('misc-cleanup');
|
|
362
|
-
expect(args.startupSignals.commitSha).toBe('abc1234');
|
|
363
|
-
expect(args.startupSignals.changedPaths).toBeUndefined();
|
|
364
|
-
expect(args.startupSignals.taskText).toBeUndefined();
|
|
365
|
-
});
|
|
366
|
-
it('apply + observe authority leaves the coding-tool surfaces preview-only and refreshes PB\'s own .productbrain files (TASK-554, TEN-4036)', async () => {
|
|
367
|
-
vi.mocked(readManifestStatus).mockReturnValue({
|
|
368
|
-
mode: 'observe',
|
|
369
|
-
surfaces: ['.cursor'],
|
|
370
|
-
lock: {},
|
|
371
|
-
parseStatus: 'ok',
|
|
372
|
-
manifest: null,
|
|
373
|
-
});
|
|
374
|
-
await runHandshake({ apply: true, surfaces: ['cursor'] });
|
|
375
|
-
const written = vi.mocked(writeFileSync).mock.calls.map(([path]) => String(path));
|
|
376
|
-
expect(written).toEqual(expect.arrayContaining([`${MOCK_CWD}/.productbrain/context.md`, `${MOCK_CWD}/.productbrain/generated/everyone-rules.md`]));
|
|
377
|
-
expect(written.every((path) => path.startsWith(`${MOCK_CWD}/.productbrain/`))).toBe(true);
|
|
378
|
-
expect(capturedReport()?.filesSkipped).toEqual(expect.arrayContaining([
|
|
379
|
-
{ path: '.cursor/rules/chain.mdc', reason: 'preview-only (materialize: observe)' },
|
|
380
|
-
]));
|
|
381
|
-
});
|
|
382
|
-
it('apply + materialize off (no .productbrain folder) writes nothing', async () => {
|
|
383
|
-
vi.mocked(readManifestStatus).mockReturnValue({ mode: 'off', surfaces: [], lock: {}, parseStatus: 'absent', manifest: null });
|
|
384
|
-
await runHandshake({ apply: true });
|
|
385
|
-
expect(writeFileSync).not.toHaveBeenCalled();
|
|
386
|
-
expect(capturedReport()?.filesSkipped).toEqual(expect.arrayContaining([
|
|
387
|
-
{ path: '.productbrain/context.md', reason: 'preview-only (materialize: off)' },
|
|
388
|
-
]));
|
|
389
|
-
});
|
|
390
|
-
it('a failed orient fetch names both briefing files as not written (RULE-659)', async () => {
|
|
391
|
-
vi.mocked(kernelCall).mockImplementation(async (tool) => {
|
|
392
|
-
if (tool === 'chain.getOrientView')
|
|
393
|
-
throw new Error('network down');
|
|
394
|
-
return [];
|
|
395
|
-
});
|
|
396
|
-
await runHandshake({ apply: true });
|
|
397
|
-
expect(capturedReport()?.filesSkipped).toEqual(expect.arrayContaining([
|
|
398
|
-
{ path: '.productbrain/context.md', reason: 'briefing unavailable — the orient fetch failed' },
|
|
399
|
-
{ path: '.productbrain/generated/everyone-rules.md', reason: 'briefing unavailable — the orient fetch failed' },
|
|
400
|
-
]));
|
|
401
|
-
expect(vi.mocked(writeFileSync).mock.calls.some(([path]) => String(path).endsWith('context.md'))).toBe(false);
|
|
402
|
-
});
|
|
403
|
-
it('apply + govern authority writes files (OBJ-24 complement to observe)', async () => {
|
|
404
|
-
// WP-776 S3d/S3f: the setup.materializeSetup assertion is dropped — that receipt write is
|
|
405
|
-
// deleted along with the rest of the setup-assets system (see handshake.ts's own comment
|
|
406
|
-
// at the old step 8b). The write-mode invariant itself (govern authority actually writes,
|
|
407
|
-
// unlike observe) still holds and is still worth guarding.
|
|
408
|
-
vi.mocked(readManifestStatus).mockReturnValue({
|
|
409
|
-
mode: 'govern',
|
|
410
|
-
surfaces: ['.cursor'],
|
|
411
|
-
lock: {},
|
|
412
|
-
parseStatus: 'ok',
|
|
413
|
-
manifest: null,
|
|
414
|
-
});
|
|
415
|
-
await runHandshake({ apply: true, surfaces: ['cursor'] });
|
|
416
|
-
expect(writeFileSync).toHaveBeenCalled();
|
|
417
|
-
expect(capturedReport()?.filesSkipped?.some((f) => f.reason === 'preview-only (materialize: observe)')).toBeFalsy();
|
|
418
|
-
});
|
|
419
|
-
it('--surfaces is an intersection with manifest.surfaces, not a superset', async () => {
|
|
420
|
-
vi.mocked(readManifestStatus).mockReturnValue({
|
|
421
|
-
mode: 'project',
|
|
422
|
-
surfaces: ['.cursor'],
|
|
423
|
-
lock: {},
|
|
424
|
-
parseStatus: 'ok',
|
|
425
|
-
manifest: null,
|
|
426
|
-
});
|
|
427
|
-
vi.mocked(shouldEmitToTarget).mockImplementation((_entry, target) => target === 'cursor');
|
|
428
|
-
vi.mocked(generateCursorSkill).mockImplementation(() => '# Intersection');
|
|
429
|
-
vi.mocked(readCanonicalSkills).mockReturnValueOnce([
|
|
430
|
-
{ name: 'Intersection', description: 'Intersection', triggers: [], body: '# Intersection', sourcePath: 'local' },
|
|
431
|
-
]);
|
|
432
|
-
await runHandshake({ apply: true, surfaces: ['claude'] });
|
|
433
|
-
expect(writeFileSync).not.toHaveBeenCalledWith(expect.stringContaining('/.cursor/skills/Intersection/SKILL.md'), expect.any(String));
|
|
434
|
-
});
|
|
435
|
-
// WP-776 S3d/S3f: "apply records a mode-change transition..." and "apply bulk-imports
|
|
436
|
-
// .productbrain authoring files..." are deleted — both tested the DB-first setup-asset
|
|
437
|
-
// source (setup.recordTransition, setup.ingestSetupAssetWithBody), which is gone along with
|
|
438
|
-
// the rest of the setup-assets system. `pb handshake` now always reads skills/rules from the
|
|
439
|
-
// filesystem; there is no DB projection or transition receipt left to test.
|
|
440
|
-
it('preview mode reports unchanged for files with identical content', async () => {
|
|
441
|
-
const agentsPath = `${MOCK_CWD}/AGENTS.md`;
|
|
442
|
-
vfs[agentsPath] = `<!-- ${MOCK_MARKER} -->\nagents content`;
|
|
443
|
-
await runHandshake({});
|
|
444
|
-
expect(writeFileSync).not.toHaveBeenCalled();
|
|
445
|
-
const report = capturedReport();
|
|
446
|
-
const entry = report?.previewPlan?.find((e) => e.path.includes('AGENTS.md') && e.status === 'unchanged');
|
|
447
|
-
expect(entry).toBeDefined();
|
|
448
|
-
});
|
|
449
|
-
it('user-owned adapter (file exists without MARKER) = would-augment in previewPlan, no write (TEN-2155)', async () => {
|
|
450
|
-
// TEN-2155: user-owned CLAUDE.md/AGENTS.md (no MARKER) are now AUGMENTED with a PB
|
|
451
|
-
// region rather than left fully untouched. In preview mode this shows as 'would-augment'
|
|
452
|
-
// in the previewPlan. No bytes are written to disk in preview mode.
|
|
453
|
-
const agentsPath = `${MOCK_CWD}/AGENTS.md`;
|
|
454
|
-
vfs[agentsPath] = '# Custom AGENTS\nNo auto-generated marker here.';
|
|
455
|
-
await runHandshake({});
|
|
456
|
-
expect(writeFileSync).not.toHaveBeenCalled();
|
|
457
|
-
const report = capturedReport();
|
|
458
|
-
const entry = report?.previewPlan?.find((e) => e.path.includes('AGENTS.md') && e.status === 'would-augment');
|
|
459
|
-
expect(entry).toBeDefined();
|
|
460
|
-
// Never labelled as a "forked" conflict the user must --force away.
|
|
461
|
-
const forkedEntry = report?.previewPlan?.find((e) => e.status === 'forked');
|
|
462
|
-
expect(forkedEntry).toBeUndefined();
|
|
463
|
-
});
|
|
464
|
-
it('apply: user-owned files (no MARKER) are augmented with a PB region, not skipped (TEN-2155)', async () => {
|
|
465
|
-
// TEN-2155: user-owned CLAUDE.md/AGENTS.md get a pb:region spliced in — they are
|
|
466
|
-
// NOT added to userOwnedSkipped. Their original content is preserved; only the PB
|
|
467
|
-
// region block is appended. They must appear in filesWritten, not filesSkipped.
|
|
468
|
-
const claudePath = `${MOCK_CWD}/CLAUDE.md`;
|
|
469
|
-
const agentsPath = `${MOCK_CWD}/AGENTS.md`;
|
|
470
|
-
const userClaude = '# My own CLAUDE.md\nNo auto-generated marker.';
|
|
471
|
-
const userAgents = '# My own AGENTS.md\nNo auto-generated marker.';
|
|
472
|
-
vfs[claudePath] = userClaude;
|
|
473
|
-
vfs[agentsPath] = userAgents;
|
|
474
|
-
const report = await runHandshake({ apply: true });
|
|
475
|
-
// Augmented files appear in filesWritten, not userOwnedSkipped.
|
|
476
|
-
expect(report?.filesWritten).toEqual(expect.arrayContaining(['CLAUDE.md', 'AGENTS.md']));
|
|
477
|
-
expect(report?.userOwnedSkipped ?? []).not.toEqual(expect.arrayContaining(['CLAUDE.md']));
|
|
478
|
-
expect(report?.userOwnedSkipped ?? []).not.toEqual(expect.arrayContaining(['AGENTS.md']));
|
|
479
|
-
// The augmented content on disk must contain the original user content.
|
|
480
|
-
expect(vfs[claudePath]).toContain(userClaude);
|
|
481
|
-
expect(vfs[agentsPath]).toContain(userAgents);
|
|
482
|
-
// And the PB region sentinel must be present (the full sentinel includes a comment suffix).
|
|
483
|
-
expect(vfs[claudePath]).toContain('<!-- pb:region:start');
|
|
484
|
-
expect(vfs[agentsPath]).toContain('<!-- pb:region:start');
|
|
485
|
-
});
|
|
486
|
-
// WP-776 S3d/S3f: the remaining DB-first setup-asset projection/authoring-sync tests that
|
|
487
|
-
// used to live here (project DB setup assets with refs/hash trailers, skip updating
|
|
488
|
-
// lastProjectedHash on a forked write, write personal DB assets back to .productbrain
|
|
489
|
-
// authoring files, write newer DB edits over a tracked file, mark personal DB assets dormant
|
|
490
|
-
// on authoring-file deletion, refuse a stale dormant-mark when the DB baseline changed,
|
|
491
|
-
// refuse a stale snapshot write on a server-side sync conflict, refuse a dormant-mark with no
|
|
492
|
-
// local tracking state, and the 'user-owned files never trigger a drift TEN' regression guard)
|
|
493
|
-
// are all deleted — every one of them exercised setup.listAssetsForUser / setup.
|
|
494
|
-
// ingestSetupAssetWithBody / setup.markPersonalSetupAssetDormantFromSync / setup.
|
|
495
|
-
// updateLastProjectedHash / setup.materializeSetup, none of which exist any more.
|
|
496
|
-
// `pb handshake` reads skills/rules from the filesystem only now (see the '--surfaces is an
|
|
497
|
-
// intersection' test above); there is no DB-sourced asset, authoring sync, or dormant-marking
|
|
498
|
-
// behavior left to test.
|
|
499
|
-
});
|
|
500
|
-
//# sourceMappingURL=handshake-preview.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handshake-preview.test.js","sourceRoot":"","sources":["../../src/__tests__/handshake-preview.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handshake-session-threading.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/handshake-session-threading.test.ts"],"names":[],"mappings":""}
|