@productbrain/cli 0.1.0-beta.4231 → 0.1.0-beta.4243

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.
@@ -0,0 +1,174 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ const { getConfigOrGuide, kernelCall, kernelCallWithSession, readSession, runCliCommand } = vi.hoisted(() => ({
3
+ getConfigOrGuide: vi.fn(),
4
+ kernelCall: vi.fn(),
5
+ kernelCallWithSession: vi.fn(),
6
+ readSession: vi.fn(),
7
+ runCliCommand: vi.fn(async ({ fn }) => fn()),
8
+ }));
9
+ vi.mock('../lib/config.js', () => ({ getConfigOrGuide }));
10
+ vi.mock('../lib/client.js', () => ({ kernelCall, kernelCallWithSession }));
11
+ vi.mock('../lib/runner.js', () => ({ runCliCommand }));
12
+ vi.mock('../lib/session.js', () => ({ readSession }));
13
+ import { createQuestionCommand, runQuestionCreateVerb, runQuestionAdopt, runQuestionAssign, runQuestionSnooze, runQuestionDecline, runQuestionAnswer, runQuestionForceClose, } from './questions.js';
14
+ /**
15
+ * `pb question` command surface tests (WP-638 S3). Mirrors commands/shape.test.ts's shape:
16
+ * every verb here is a workspace WRITE (session-attributed, kernelCallWithSession), and
17
+ * human-id (TEN-nnn) args are resolved via `chain.getEntry` (a plain read, kernelCall) before
18
+ * the write — the R43 resolution layer this file builds instead of a private parser.
19
+ */
20
+ describe('pb question command surface (WP-638 S3)', () => {
21
+ beforeEach(() => {
22
+ vi.clearAllMocks();
23
+ getConfigOrGuide.mockResolvedValue({ apiKey: 'pb_sk_test', siteUrl: 'https://example.test' });
24
+ readSession.mockReturnValue({ sessionId: 'session-1' });
25
+ // Default: chain.getEntry resolves any human id to itself as _id — tests that need a
26
+ // DIFFERENT resolved doc id override with mockResolvedValueOnce.
27
+ kernelCall.mockImplementation(async (_fn, args) => ({ _id: args.entryId ?? args.id }));
28
+ kernelCallWithSession.mockResolvedValue({ entryId: 'TEN-100', facetId: 'facet-1', status: 'unrouted', routingReason: 'single_domain_owner', domainSlugs: [] });
29
+ });
30
+ it('exposes all seven write subcommands, and none of them is `list` (S4 ships list)', () => {
31
+ const command = createQuestionCommand();
32
+ const names = command.commands.map((item) => item.name());
33
+ expect(names).toEqual(['create', 'adopt', 'assign', 'snooze', 'decline', 'answer', 'force-close']);
34
+ expect(names).not.toContain('list');
35
+ });
36
+ it('requires an active session before every write verb (workspace write, session-attributed)', async () => {
37
+ readSession.mockReturnValue(null);
38
+ await expect(runQuestionCreateVerb('a question', {})).rejects.toMatchObject({ code: 'SESSION_REQUIRED' });
39
+ await expect(runQuestionAdopt('TEN-1', {})).rejects.toMatchObject({ code: 'SESSION_REQUIRED' });
40
+ await expect(runQuestionAssign('TEN-1', {})).rejects.toMatchObject({ code: 'SESSION_REQUIRED' });
41
+ await expect(runQuestionSnooze('TEN-1')).rejects.toMatchObject({ code: 'SESSION_REQUIRED' });
42
+ await expect(runQuestionDecline('TEN-1', { reason: 'not mine' })).rejects.toMatchObject({ code: 'SESSION_REQUIRED' });
43
+ await expect(runQuestionAnswer('TEN-1', 'the answer', {})).rejects.toMatchObject({ code: 'SESSION_REQUIRED' });
44
+ await expect(runQuestionForceClose('TEN-1', { reason: 'stuck' })).rejects.toMatchObject({ code: 'SESSION_REQUIRED' });
45
+ expect(kernelCallWithSession).not.toHaveBeenCalled();
46
+ });
47
+ it('create: sends text/domainSlug/blocks straight through when no --blocks are human ids', async () => {
48
+ await runQuestionCreateVerb('a question', { domain: 'delivery' });
49
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.create', { text: 'a question', domainSlug: 'delivery', blocks: undefined });
50
+ });
51
+ it('create: resolves human-id --blocks targets via chain.getEntry before the write (R43)', async () => {
52
+ kernelCall.mockResolvedValueOnce({ _id: 'raw-doc-id-1' });
53
+ await runQuestionCreateVerb('a question', { blocks: ['TEN-42'] });
54
+ expect(kernelCall).toHaveBeenCalledWith('chain.getEntry', { entryId: 'TEN-42' });
55
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.create', { text: 'a question', domainSlug: undefined, blocks: ['raw-doc-id-1'] });
56
+ });
57
+ it('create: a raw (non human-id-shaped) --blocks target passes through unresolved, no lookup', async () => {
58
+ await runQuestionCreateVerb('a question', { blocks: ['j5712abcxyz'] });
59
+ expect(kernelCall).not.toHaveBeenCalled();
60
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.create', { text: 'a question', domainSlug: undefined, blocks: ['j5712abcxyz'] });
61
+ });
62
+ it('adopt: resolves the target entryId via chain.getEntry (R43) then calls question.adopt', async () => {
63
+ kernelCall.mockResolvedValueOnce({ _id: 'raw-doc-id-1' });
64
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-42', facetId: 'facet-1', status: 'unrouted', routingReason: 'single_domain_owner', domainSlugs: [] });
65
+ await runQuestionAdopt('TEN-42', {});
66
+ expect(kernelCall).toHaveBeenCalledWith('chain.getEntry', { entryId: 'TEN-42' });
67
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.adopt', { entryId: 'raw-doc-id-1', domainSlug: undefined, blocks: undefined });
68
+ });
69
+ it('assign: bare form sends no toRoleId/toPersonId ("take it")', async () => {
70
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-1', status: 'routed' });
71
+ await runQuestionAssign('TEN-1', {});
72
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.assign', { entryId: 'TEN-1', toRoleId: undefined, toPersonId: undefined });
73
+ });
74
+ it('assign: --to-role resolves via chain.getEntry, --to-person passes through raw', async () => {
75
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-1', status: 'routed', ownerRoleId: 'ROL-2', ownerPersonId: 'person-1' });
76
+ await runQuestionAssign('TEN-1', { toRole: 'ROL-2', toPerson: 'person-1' });
77
+ expect(kernelCall).toHaveBeenCalledWith('chain.getEntry', { entryId: 'ROL-2' });
78
+ // Default mock echoes the human id back as _id (beforeEach) — the point under test is
79
+ // that toRole goes through resolveEntryRef (a chain.getEntry call happened) while
80
+ // toPerson does NOT (no matching chain.getEntry call for 'person-1').
81
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.assign', { entryId: 'TEN-1', toRoleId: 'ROL-2', toPersonId: 'person-1' });
82
+ expect(kernelCall).not.toHaveBeenCalledWith('chain.getEntry', { entryId: 'person-1' });
83
+ });
84
+ // PRRT_kwDORS4ils6YnqKM (round 2 review): people are a separate table from entries —
85
+ // chain.getEntry cannot resolve a personId. --to-person alone must render via the
86
+ // mutation's own server-resolved ownerPersonName, never attempt a chain.getEntry({id})
87
+ // lookup on a people-table id.
88
+ it('assign: --to-person alone renders via the mutation\'s server-resolved ownerPersonName, never chain.getEntry({id})', async () => {
89
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-1', status: 'routed', ownerPersonId: 'person-1', ownerPersonName: 'Sylvie' });
90
+ await runQuestionAssign('TEN-1', { toPerson: 'person-1' });
91
+ expect(kernelCall).not.toHaveBeenCalledWith('chain.getEntry', { id: 'person-1' });
92
+ });
93
+ // PRRT_kwDORS4ils6YnqKe (round 2 review): fn() must return the FLAT mutation result — the
94
+ // exact value runCliCommand serializes to stdout in JSON/non-TTY mode. An earlier shape
95
+ // wrapped it as {result, roleOrLeadName}/{result, targetName}/etc., breaking scripted
96
+ // consumers expecting entryId/status at the top level.
97
+ it('create/adopt/assign/snooze/decline/answer: runCliCommand receives fn() returning the FLAT mutation result, never a {result, ...} wrapper', async () => {
98
+ const flatCreate = { entryId: 'TEN-1', facetId: 'facet-1', status: 'unrouted', routingReason: 'single_domain_owner', domainSlugs: [] };
99
+ kernelCallWithSession.mockResolvedValue(flatCreate);
100
+ await runQuestionCreateVerb('a question', {});
101
+ await expect(runCliCommand.mock.calls.at(-1)[0].fn()).resolves.toEqual(flatCreate);
102
+ const flatSnooze = { entryId: 'TEN-1', status: 'routed', snoozeCount: 1, snoozeUntil: Date.now() };
103
+ kernelCallWithSession.mockResolvedValue(flatSnooze);
104
+ await runQuestionSnooze('TEN-1');
105
+ await expect(runCliCommand.mock.calls.at(-1)[0].fn()).resolves.toEqual(flatSnooze);
106
+ const flatAnswer = { entryId: 'TEN-1', status: 'processed', askerName: 'Mathijs' };
107
+ kernelCallWithSession.mockResolvedValue(flatAnswer);
108
+ await runQuestionAnswer('TEN-1', 'the answer', {});
109
+ await expect(runCliCommand.mock.calls.at(-1)[0].fn()).resolves.toEqual(flatAnswer);
110
+ });
111
+ it('snooze: calls question.snooze with the resolved entryId', async () => {
112
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-1', status: 'routed', snoozeCount: 1, snoozeUntil: Date.now() });
113
+ await runQuestionSnooze('TEN-1');
114
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.snooze', { entryId: 'TEN-1' });
115
+ });
116
+ it('decline: requires --reason client-side before calling the gateway', async () => {
117
+ await expect(runQuestionDecline('TEN-1', { reason: '' })).rejects.toMatchObject({ code: 'VALIDATION_FAILED' });
118
+ expect(kernelCallWithSession).not.toHaveBeenCalled();
119
+ });
120
+ it('decline: forwards the reason', async () => {
121
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-1', status: 'processed' });
122
+ await runQuestionDecline('TEN-1', { reason: 'not mine' });
123
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.decline', { entryId: 'TEN-1', reason: 'not mine' });
124
+ });
125
+ it('answer: neither text nor --entry is a client-side refusal, §7.7\'s exact string', async () => {
126
+ await expect(runQuestionAnswer('TEN-1', undefined, {})).rejects.toMatchObject({
127
+ code: 'VALIDATION_FAILED',
128
+ message: 'Give the answer as text, or point at an entry with --entry <id>.',
129
+ });
130
+ expect(kernelCallWithSession).not.toHaveBeenCalled();
131
+ });
132
+ it('answer: both text and --entry is a client-side refusal, §7.7\'s exact string', async () => {
133
+ await expect(runQuestionAnswer('TEN-1', 'the answer', { entry: 'DEC-5' })).rejects.toMatchObject({
134
+ code: 'VALIDATION_FAILED',
135
+ message: 'Use either answer text or --entry, not both.',
136
+ });
137
+ expect(kernelCallWithSession).not.toHaveBeenCalled();
138
+ });
139
+ it('answer: text form forwards text, no answerEntryId', async () => {
140
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-1', status: 'processed', answerEntryId: 'DEC-9', answerPending: true });
141
+ await runQuestionAnswer('TEN-1', 'the answer', {});
142
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.answer', { entryId: 'TEN-1', text: 'the answer', answerEntryId: undefined });
143
+ });
144
+ it('answer: --entry form resolves the target via chain.getEntry, forwards no text', async () => {
145
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-1', status: 'processed', answerEntryId: 'DEC-9' });
146
+ await runQuestionAnswer('TEN-1', undefined, { entry: 'DEC-9' });
147
+ expect(kernelCall).toHaveBeenCalledWith('chain.getEntry', { entryId: 'DEC-9' });
148
+ // Default mock echoes the human id back as _id (beforeEach).
149
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.answer', { entryId: 'TEN-1', text: undefined, answerEntryId: 'DEC-9' });
150
+ });
151
+ it('force-close: requires --reason client-side before calling the gateway', async () => {
152
+ await expect(runQuestionForceClose('TEN-1', { reason: '' })).rejects.toMatchObject({ code: 'VALIDATION_FAILED' });
153
+ expect(kernelCallWithSession).not.toHaveBeenCalled();
154
+ });
155
+ it('force-close: forwards the reason', async () => {
156
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-1', status: 'processed' });
157
+ await runQuestionForceClose('TEN-1', { reason: 'stuck forever' });
158
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.forceClose', { entryId: 'TEN-1', reason: 'stuck forever' });
159
+ });
160
+ it('parses the Commander create surface end to end', async () => {
161
+ const command = createQuestionCommand();
162
+ command.exitOverride();
163
+ await command.parseAsync(['create', 'a real question', '--domain', 'delivery'], { from: 'user' });
164
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.create', { text: 'a real question', domainSlug: 'delivery', blocks: undefined });
165
+ });
166
+ it('parses the Commander force-close surface end to end', async () => {
167
+ kernelCallWithSession.mockResolvedValueOnce({ entryId: 'TEN-1', status: 'processed' });
168
+ const command = createQuestionCommand();
169
+ command.exitOverride();
170
+ await command.parseAsync(['force-close', 'TEN-1', '--reason', 'stuck'], { from: 'user' });
171
+ expect(kernelCallWithSession).toHaveBeenCalledWith('question.forceClose', { entryId: 'TEN-1', reason: 'stuck' });
172
+ });
173
+ });
174
+ //# sourceMappingURL=questions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.test.js","sourceRoot":"","sources":["../../src/commands/questions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ export interface CreateAdoptResult {
2
+ entryId: string;
3
+ facetId: string;
4
+ status: 'unrouted' | 'escalated';
5
+ suggestedRoleId?: string;
6
+ ownerRoleId?: string;
7
+ routingReason: string;
8
+ domainSlugs: string[];
9
+ nudge?: string;
10
+ }
11
+ /** `roleName`/`leadName` are resolved by the caller (one `chain.getEntry` lookup) — this
12
+ * formatter never resolves ids itself, matching formatters/shape.ts's "no math here" rule.
13
+ * The name is workspace-controlled entry/person data (a role name, a person's displayName),
14
+ * never sanitized upstream — every interpolation here goes through singleLine() first
15
+ * (BET-269 C3: terminal escaping) so a name containing control/ANSI sequences can't inject
16
+ * extra terminal output when this pretty-mode confirmation prints (round 2 review,
17
+ * PRRT_kwDORS4ils6YnqK-). */
18
+ export declare function formatQuestionCreate(result: CreateAdoptResult, roleOrLeadName: string): string;
19
+ export declare function formatQuestionAdopt(result: CreateAdoptResult, roleOrLeadName: string): string;
20
+ export interface AssignResult {
21
+ entryId: string;
22
+ status: 'routed' | 'unrouted' | 'escalated' | 'processed';
23
+ ownerRoleId?: string;
24
+ ownerPersonId?: string;
25
+ ownerPersonName?: string;
26
+ }
27
+ export declare function formatQuestionAssignConfirm(entryId: string): string;
28
+ export declare function formatQuestionAssignReassign(entryId: string, targetName: string): string;
29
+ export interface SnoozeResult {
30
+ entryId: string;
31
+ status: 'routed' | 'escalated';
32
+ snoozeCount?: number;
33
+ snoozeUntil?: number;
34
+ ownerRoleId?: string;
35
+ }
36
+ export declare function formatQuestionSnooze(result: SnoozeResult, leadName?: string): string;
37
+ export interface DeclineResult {
38
+ entryId: string;
39
+ status: 'unrouted' | 'escalated' | 'processed';
40
+ suggestedRoleId?: string;
41
+ ownerRoleId?: string;
42
+ dependentsCount?: number;
43
+ isRoot?: boolean;
44
+ }
45
+ /**
46
+ * `isRoot` disambiguates two branches that otherwise share the identical
47
+ * `{status:'escalated', ownerRoleId}` shape: a suggestee's PASS (§3.7a, never sets `isRoot` —
48
+ * it is never the owner/lead) vs an owner/lead's decline (§3.7b, always sets `isRoot`
49
+ * explicitly — `true` at the root, `false` below it). Checking `isRoot !== undefined` is what
50
+ * tells the two apart; `ownerRoleId` alone cannot.
51
+ */
52
+ export declare function formatQuestionDecline(entryId: string, result: DeclineResult, roleOrLeadName?: string): string;
53
+ export interface AnswerResult {
54
+ entryId: string;
55
+ status: 'processed';
56
+ answerEntryId?: string;
57
+ answerPending?: boolean;
58
+ askerPersonId?: string;
59
+ askerName?: string;
60
+ idempotent?: boolean;
61
+ }
62
+ /**
63
+ * PRRT_kwDORS4ils6YnqK0 (round 2): does NOT mention `pb question list --mine` — S3 ships no
64
+ * `list` subcommand (createQuestionCommand() exposes only the seven write verbs; `list` is
65
+ * S4's own vertical, §4.1's slice-boundary fix). Pointing users at an unshipped command here
66
+ * would be a broken-command dead end; S4 restores the full §7.7 wording when `list` lands.
67
+ */
68
+ export declare function formatQuestionAnswer(entryId: string, result: AnswerResult, askerName?: string): string;
69
+ export interface ForceCloseResult {
70
+ entryId: string;
71
+ status: 'processed';
72
+ idempotent?: boolean;
73
+ }
74
+ export declare function formatQuestionForceClose(entryId: string, result: ForceCloseResult): string;
75
+ //# sourceMappingURL=questions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/formatters/questions.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;8BAM8B;AAC9B,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAQ9F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAO7F;AAED,MAAM,WAAW,YAAY;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE;AAEpL,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,MAAM,WAAW,YAAY;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AAEnJ,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQpF;AAED,MAAM,WAAW,aAAa;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE;AAE9L;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ7G;AAED,MAAM,WAAW,YAAY;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE;AAEzL;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAKtG;AAED,MAAM,WAAW,gBAAgB;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE;AAEhG,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE1F"}
@@ -0,0 +1,91 @@
1
+ import { stripControlChars } from '../lib/strip.js';
2
+ /**
3
+ * Human-formatted rendering for `pb question <verb>` (WP-638 S3, §7.7 of the routed-questions
4
+ * design spec: docs/superpowers/specs/2026-08-10-routed-questions-design.md). One entry point
5
+ * per verb, mirrors formatters/shape.ts's shape — every field rendered as the deployed
6
+ * mutation actually returned it, no math here.
7
+ */
8
+ function singleLine(value) {
9
+ return value ? stripControlChars(value).replace(/\s+/g, ' ').trim() : '';
10
+ }
11
+ function domainListSuffix(domainSlugs) {
12
+ if (!domainSlugs)
13
+ return '';
14
+ return domainSlugs.length > 0 ? ` Domains in this workspace: ${domainSlugs.join(', ')}.` : ' No domains exist in this workspace yet.';
15
+ }
16
+ /** `roleName`/`leadName` are resolved by the caller (one `chain.getEntry` lookup) — this
17
+ * formatter never resolves ids itself, matching formatters/shape.ts's "no math here" rule.
18
+ * The name is workspace-controlled entry/person data (a role name, a person's displayName),
19
+ * never sanitized upstream — every interpolation here goes through singleLine() first
20
+ * (BET-269 C3: terminal escaping) so a name containing control/ANSI sequences can't inject
21
+ * extra terminal output when this pretty-mode confirmation prints (round 2 review,
22
+ * PRRT_kwDORS4ils6YnqK-). */
23
+ export function formatQuestionCreate(result, roleOrLeadName) {
24
+ const name = singleLine(roleOrLeadName);
25
+ const base = result.status === 'unrouted'
26
+ ? `Question created and suggested to ${name}. Confirm with: pb question assign ${result.entryId}`
27
+ : `Question created. Nothing here says who owns it, so it has gone to ${name}.`;
28
+ const blocksHint = ' If something is blocked on this, add --blocks <entry-id>.';
29
+ const nudge = result.nudge ? ` ${result.nudge}` : '';
30
+ return `${base}${domainListSuffix(result.domainSlugs)}${blocksHint}${nudge}`;
31
+ }
32
+ export function formatQuestionAdopt(result, roleOrLeadName) {
33
+ const name = singleLine(roleOrLeadName);
34
+ const base = result.status === 'unrouted'
35
+ ? `${result.entryId} is now a routed question, suggested to ${name}.`
36
+ : `${result.entryId} is now a routed question. Nothing here says who owns it, so it has gone to ${name}.`;
37
+ const nudge = result.nudge ? ` ${result.nudge}` : '';
38
+ return `${base}${domainListSuffix(result.domainSlugs)}${nudge}`;
39
+ }
40
+ export function formatQuestionAssignConfirm(entryId) {
41
+ return `${singleLine(entryId)} is yours now.`;
42
+ }
43
+ export function formatQuestionAssignReassign(entryId, targetName) {
44
+ return `${singleLine(entryId)} reassigned to ${singleLine(targetName)}. They'll see it at their next session.`;
45
+ }
46
+ export function formatQuestionSnooze(result, leadName) {
47
+ if (result.snoozeUntil) {
48
+ return `Snoozed until ${new Date(result.snoozeUntil).toISOString().slice(0, 10)}. ${result.snoozeCount ?? '?'} of 2 snoozes used.`;
49
+ }
50
+ if (result.status === 'escalated') {
51
+ return `You have used both snoozes on this question — it has been escalated to ${singleLine(leadName) || 'the team lead'}.`;
52
+ }
53
+ return 'No snoozes left — answer it or force-close it.';
54
+ }
55
+ /**
56
+ * `isRoot` disambiguates two branches that otherwise share the identical
57
+ * `{status:'escalated', ownerRoleId}` shape: a suggestee's PASS (§3.7a, never sets `isRoot` —
58
+ * it is never the owner/lead) vs an owner/lead's decline (§3.7b, always sets `isRoot`
59
+ * explicitly — `true` at the root, `false` below it). Checking `isRoot !== undefined` is what
60
+ * tells the two apart; `ownerRoleId` alone cannot.
61
+ */
62
+ export function formatQuestionDecline(entryId, result, roleOrLeadName) {
63
+ const name = singleLine(roleOrLeadName) || undefined;
64
+ if (result.status === 'processed')
65
+ return 'Declined and closed.';
66
+ if (result.isRoot === true)
67
+ return `Declined — but ${result.dependentsCount ?? 0} item(s) still depend on it, so it stays with you. Answer it or force-close it.`;
68
+ if (result.isRoot === false)
69
+ return `Declined and escalated to ${name ?? 'the team lead'}.`;
70
+ // isRoot is undefined here — a suggestee's pass (§3.7a), never a terminal decline.
71
+ if (result.suggestedRoleId)
72
+ return `Passed. ${singleLine(entryId)} is now suggested to ${name ?? 'another role'}.`;
73
+ return `Passed. Nobody else here owns this, so it has gone to ${name ?? 'the team lead'}.`;
74
+ }
75
+ /**
76
+ * PRRT_kwDORS4ils6YnqK0 (round 2): does NOT mention `pb question list --mine` — S3 ships no
77
+ * `list` subcommand (createQuestionCommand() exposes only the seven write verbs; `list` is
78
+ * S4's own vertical, §4.1's slice-boundary fix). Pointing users at an unshipped command here
79
+ * would be a broken-command dead end; S4 restores the full §7.7 wording when `list` lands.
80
+ */
81
+ export function formatQuestionAnswer(entryId, result, askerName) {
82
+ if (result.idempotent)
83
+ return `${singleLine(entryId)} is already answered — no change.`;
84
+ const pendingNote = result.answerPending ? ' The answer is a draft awaiting accept.' : '';
85
+ const name = singleLine(askerName) || 'The asker';
86
+ return `Answered. ${name} will see the outcome at their next session.${pendingNote}`;
87
+ }
88
+ export function formatQuestionForceClose(entryId, result) {
89
+ return result.idempotent ? `${singleLine(entryId)} is already closed — no change.` : 'Force-closed. Reason recorded.';
90
+ }
91
+ //# sourceMappingURL=questions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/formatters/questions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=questions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.test.d.ts","sourceRoot":"","sources":["../../src/formatters/questions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,141 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { formatQuestionCreate, formatQuestionAdopt, formatQuestionAssignConfirm, formatQuestionAssignReassign, formatQuestionSnooze, formatQuestionDecline, formatQuestionAnswer, formatQuestionForceClose, } from './questions.js';
3
+ /**
4
+ * Formatter tests for `pb question` (WP-638 S3, §7.7 of the routed-questions design spec).
5
+ * Every case is re-derived from §7.7's per-verb confirmation/refusal table — the same
6
+ * "derived from the matrix, not written beside it" discipline the spec itself demands (§3.9).
7
+ */
8
+ function createAdoptResult(overrides = {}) {
9
+ return {
10
+ entryId: 'TEN-100',
11
+ facetId: 'facet-1',
12
+ status: 'unrouted',
13
+ routingReason: 'single_domain_owner',
14
+ domainSlugs: ['delivery', 'strategy'],
15
+ ...overrides,
16
+ };
17
+ }
18
+ describe('formatQuestionCreate', () => {
19
+ it('suggests a role and includes the confirm command + live domain list + blocks hint', () => {
20
+ const message = formatQuestionCreate(createAdoptResult(), 'Delivery Lead');
21
+ expect(message).toContain('Question created and suggested to Delivery Lead.');
22
+ expect(message).toContain('Confirm with: pb question assign TEN-100');
23
+ expect(message).toContain('Domains in this workspace: delivery, strategy.');
24
+ expect(message).toContain('If something is blocked on this, add --blocks <entry-id>.');
25
+ });
26
+ it('born-escalated (no suggestion derivable) names the team lead, never "suggested"', () => {
27
+ const message = formatQuestionCreate(createAdoptResult({ status: 'escalated', suggestedRoleId: undefined, ownerRoleId: 'role-lead' }), 'Ralph');
28
+ expect(message).toBe('Question created. Nothing here says who owns it, so it has gone to Ralph. Domains in this workspace: delivery, strategy. If something is blocked on this, add --blocks <entry-id>.');
29
+ });
30
+ it('appends the sub-80-char nudge verbatim when present', () => {
31
+ const message = formatQuestionCreate(createAdoptResult({ nudge: 'Tip: add a sentence on why it matters — the person who picks this up sees only what you wrote.' }), 'Delivery Lead');
32
+ expect(message).toContain('Tip: add a sentence on why it matters');
33
+ });
34
+ it('renders "no domains yet" when the workspace has none', () => {
35
+ const message = formatQuestionCreate(createAdoptResult({ domainSlugs: [] }), 'Delivery Lead');
36
+ expect(message).toContain('No domains exist in this workspace yet.');
37
+ });
38
+ // PRRT_kwDORS4ils6YnqK- (round 2 review): resolved role/team-lead names are
39
+ // workspace-controlled entry names — sanitize before interpolating into terminal output.
40
+ it('sanitizes a control-character-laden role name before interpolating it', () => {
41
+ const message = formatQuestionCreate(createAdoptResult(), 'Delivery Lead\x1b[31m\x07');
42
+ expect(message).toContain('Question created and suggested to Delivery Lead.');
43
+ });
44
+ });
45
+ describe('formatQuestionAdopt', () => {
46
+ it('names the entry id and the suggested role', () => {
47
+ const message = formatQuestionAdopt(createAdoptResult(), 'Delivery Lead');
48
+ expect(message).toBe('TEN-100 is now a routed question, suggested to Delivery Lead. Domains in this workspace: delivery, strategy.');
49
+ });
50
+ it('born-escalated form names the entry id and the team lead', () => {
51
+ const message = formatQuestionAdopt(createAdoptResult({ status: 'escalated', suggestedRoleId: undefined, ownerRoleId: 'role-lead' }), 'Ralph');
52
+ expect(message).toBe('TEN-100 is now a routed question. Nothing here says who owns it, so it has gone to Ralph. Domains in this workspace: delivery, strategy.');
53
+ });
54
+ });
55
+ describe('assign confirmation strings', () => {
56
+ it('bare confirm: "<ID> is yours now."', () => {
57
+ expect(formatQuestionAssignConfirm('TEN-100')).toBe('TEN-100 is yours now.');
58
+ });
59
+ it('reassign: names the target and says they will see it at their next session', () => {
60
+ const message = formatQuestionAssignReassign('TEN-100', 'Sylvie');
61
+ expect(message).toBe("TEN-100 reassigned to Sylvie. They'll see it at their next session.");
62
+ });
63
+ });
64
+ describe('formatQuestionSnooze', () => {
65
+ it('within budget: "Snoozed until <date>. <n> of 2 snoozes used."', () => {
66
+ const message = formatQuestionSnooze({ entryId: 'TEN-100', status: 'routed', snoozeCount: 1, snoozeUntil: Date.UTC(2026, 7, 14) });
67
+ expect(message).toBe('Snoozed until 2026-08-14. 1 of 2 snoozes used.');
68
+ });
69
+ it('at budget from routed (escalates): names the team lead, never "escalated to nobody"', () => {
70
+ const message = formatQuestionSnooze({ entryId: 'TEN-100', status: 'escalated', ownerRoleId: 'role-lead' }, 'Ralph');
71
+ expect(message).toBe('You have used both snoozes on this question — it has been escalated to Ralph.');
72
+ });
73
+ // At budget from an already-'escalated' row (R32/OR-21), the verb THROWS a plain refusal
74
+ // ("No snoozes left — answer it or force-close it.") rather than returning a result — there
75
+ // is no successful SnoozeResult shape for this case, so the CLI/MCP surfaces the thrown
76
+ // message verbatim through the ordinary error path, never through this formatter.
77
+ it('sanitizes a control-character-laden lead name before interpolating it (PRRT_kwDORS4ils6YnqK-)', () => {
78
+ const message = formatQuestionSnooze({ entryId: 'TEN-100', status: 'escalated', ownerRoleId: 'role-lead' }, 'Ralph\x1b[31m\x07');
79
+ expect(message).toBe('You have used both snoozes on this question — it has been escalated to Ralph.');
80
+ });
81
+ });
82
+ describe('formatQuestionDecline', () => {
83
+ it('suggestee pass, re-suggested: "Passed. <ID> is now suggested to <role>."', () => {
84
+ const message = formatQuestionDecline('TEN-100', { entryId: 'TEN-100', status: 'unrouted', suggestedRoleId: 'role-2' }, 'Backend Lead');
85
+ expect(message).toBe('Passed. TEN-100 is now suggested to Backend Lead.');
86
+ });
87
+ it('suggestee pass, nothing left: "Passed. Nobody else here owns this, so it has gone to <lead>." — isRoot is UNDEFINED (never set by a pass, §3.7a)', () => {
88
+ const message = formatQuestionDecline('TEN-100', { entryId: 'TEN-100', status: 'escalated', ownerRoleId: 'role-lead' }, 'Ralph');
89
+ expect(message).toBe('Passed. Nobody else here owns this, so it has gone to Ralph.');
90
+ });
91
+ it('owner/lead decline, zero dependents: "Declined and closed."', () => {
92
+ const message = formatQuestionDecline('TEN-100', { entryId: 'TEN-100', status: 'processed' });
93
+ expect(message).toBe('Declined and closed.');
94
+ });
95
+ it('owner/lead decline, below root with dependents: "Declined and escalated to <lead>."', () => {
96
+ const message = formatQuestionDecline('TEN-100', { entryId: 'TEN-100', status: 'escalated', ownerRoleId: 'role-lead', isRoot: false }, 'Ralph');
97
+ expect(message).toBe('Declined and escalated to Ralph.');
98
+ });
99
+ it('owner/lead decline AT ROOT with dependents (OR-17): stays with the decliner, never a hand-off', () => {
100
+ const message = formatQuestionDecline('TEN-100', { entryId: 'TEN-100', status: 'escalated', isRoot: true, dependentsCount: 3 });
101
+ expect(message).toBe('Declined — but 3 item(s) still depend on it, so it stays with you. Answer it or force-close it.');
102
+ });
103
+ it('sanitizes a control-character-laden role/lead name before interpolating it (PRRT_kwDORS4ils6YnqK-)', () => {
104
+ const message = formatQuestionDecline('TEN-100', { entryId: 'TEN-100', status: 'unrouted', suggestedRoleId: 'role-2' }, 'Backend Lead\x1b[31m\x07');
105
+ expect(message).toBe('Passed. TEN-100 is now suggested to Backend Lead.');
106
+ });
107
+ });
108
+ describe('formatQuestionAnswer', () => {
109
+ it('names the asker and never says "notified" (OR-18/R33)', () => {
110
+ const message = formatQuestionAnswer('TEN-100', { entryId: 'TEN-100', status: 'processed', answerEntryId: 'DEC-5', answerPending: false }, 'Mathijs');
111
+ expect(message).toBe('Answered. Mathijs will see the outcome at their next session.');
112
+ expect(message).not.toContain('notified');
113
+ });
114
+ // PRRT_kwDORS4ils6YnqK0 (round 2 review): S3 ships no `pb question list` — pointing users at
115
+ // it here would be a broken-command dead end until S4 registers the subcommand.
116
+ it('never mentions the unshipped pb question list --mine command (S3 has no list vertical)', () => {
117
+ const message = formatQuestionAnswer('TEN-100', { entryId: 'TEN-100', status: 'processed' }, 'Mathijs');
118
+ expect(message).not.toContain('list');
119
+ });
120
+ it('sanitizes a control-character-laden asker name before interpolating it (PRRT_kwDORS4ils6YnqK-)', () => {
121
+ const message = formatQuestionAnswer('TEN-100', { entryId: 'TEN-100', status: 'processed' }, 'Mathijs\x1b[31m\x07');
122
+ expect(message).toBe('Answered. Mathijs will see the outcome at their next session.');
123
+ });
124
+ it('appends the draft-awaiting-accept note when the answer entry landed as a draft', () => {
125
+ const message = formatQuestionAnswer('TEN-100', { entryId: 'TEN-100', status: 'processed', answerPending: true }, 'Mathijs');
126
+ expect(message).toContain('The answer is a draft awaiting accept.');
127
+ });
128
+ it('idempotent re-answer: names the entry, no re-answered wording', () => {
129
+ const message = formatQuestionAnswer('TEN-100', { entryId: 'TEN-100', status: 'processed', idempotent: true });
130
+ expect(message).toBe('TEN-100 is already answered — no change.');
131
+ });
132
+ });
133
+ describe('formatQuestionForceClose', () => {
134
+ it('"Force-closed. Reason recorded."', () => {
135
+ expect(formatQuestionForceClose('TEN-100', { entryId: 'TEN-100', status: 'processed' })).toBe('Force-closed. Reason recorded.');
136
+ });
137
+ it('idempotent re-close: names the entry, no second "recorded"', () => {
138
+ expect(formatQuestionForceClose('TEN-100', { entryId: 'TEN-100', status: 'processed', idempotent: true })).toBe('TEN-100 is already closed — no change.');
139
+ });
140
+ });
141
+ //# sourceMappingURL=questions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.test.js","sourceRoot":"","sources":["../../src/formatters/questions.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routeLatencyBudget.generated.d.ts","sourceRoot":"","sources":["../../src/generated/routeLatencyBudget.generated.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/D,qEAAqE;AACrE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC;;;CAWnC,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAG5C,CAAC;AAmQF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAGzE,CAAC;AAEF,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAE1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CASjE"}
1
+ {"version":3,"file":"routeLatencyBudget.generated.d.ts","sourceRoot":"","sources":["../../src/generated/routeLatencyBudget.generated.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/D,qEAAqE;AACrE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC;;;CAWnC,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAG5C,CAAC;AA0QF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAGzE,CAAC;AAEF,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAE1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CASjE"}
@@ -100,6 +100,13 @@ const ROUTE_TYPE_ENTRIES = {
100
100
  "direction.list": "query",
101
101
  "direction.refresh": "action",
102
102
  "direction.defer": "mutation",
103
+ "question.create": "mutation",
104
+ "question.adopt": "mutation",
105
+ "question.assign": "mutation",
106
+ "question.snooze": "mutation",
107
+ "question.decline": "mutation",
108
+ "question.answer": "mutation",
109
+ "question.forceClose": "mutation",
103
110
  "chain.classifyCollection": "action",
104
111
  "chain.classifyStrategyCategory": "query",
105
112
  "chain.batchClassifyHeuristic": "query",
@@ -1 +1 @@
1
- {"version":3,"file":"routeLatencyBudget.generated.js","sourceRoot":"","sources":["../../src/generated/routeLatencyBudget.generated.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routeLatencyBudget.generated.js","sourceRoot":"","sources":["../../src/generated/routeLatencyBudget.generated.ts"],"names":[],"mappings":"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"}