@productbrain/cli 0.1.0-beta.1338 → 0.1.0-beta.1342

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.
@@ -6,11 +6,26 @@
6
6
  import { getConfigOrGuide } from '../lib/config.js';
7
7
  import { kernelCallWithSession, McpError } from '../lib/client.js';
8
8
  import { readSession } from '../lib/session.js';
9
- import { runCliCommand } from '../lib/runner.js';
9
+ import { runCliCommand, isJsonMode } from '../lib/runner.js';
10
10
  import { formatPromoteReceipt } from '../formatters/promote.js';
11
11
  import { copy } from '../lib/style.js';
12
12
  import { CLIError, ErrorCode } from '../lib/errors.js';
13
13
  const BLOCKING_CONTRADICTION_THRESHOLD = 0.75;
14
+ /**
15
+ * Error categories that signal a GLOBAL precondition (not entry-specific): they fail
16
+ * every id in a batch identically, so the batch path rethrows them immediately rather
17
+ * than collecting them as per-entry failures. `validation` (not-found, contradiction)
18
+ * is entry-specific and stays collectable so one bad id never aborts the batch.
19
+ * `session` is global too — a closed/expired/wrong-workspace session (SESSION_REQUIRED,
20
+ * which McpError maps to category `session`) the server raises mid-batch dooms every
21
+ * remaining id, so it must surface the actionable session error, not a per-entry relabel.
22
+ */
23
+ const GLOBAL_PRECONDITION_CATEGORIES = new Set([
24
+ 'auth',
25
+ 'network',
26
+ 'config',
27
+ 'session',
28
+ ]);
14
29
  /**
15
30
  * Returns true when the server rejected the commit because the entry requires
16
31
  * verification first (agent-origin entries, quality gate, etc.).
@@ -21,6 +36,66 @@ function isVerificationGate(err) {
21
36
  err.code === ErrorCode.QUALITY_GATE_BLOCKED &&
22
37
  err.message.toLowerCase().includes('verification'));
23
38
  }
39
+ /**
40
+ * Promote a single entry to active (commit to SSOT). Throws on any failure —
41
+ * the caller decides whether to propagate (single-id) or collect (batch).
42
+ */
43
+ async function promoteOne(entryId, message, session) {
44
+ const entry = await kernelCallWithSession('chain.getEntry', { entryId });
45
+ if (!entry) {
46
+ throw new CLIError(`Entry ${entryId} not found.`, {
47
+ code: ErrorCode.VALIDATION_FAILED,
48
+ category: 'validation',
49
+ guidance: 'Check the entry ID and try again. Use `pb search` to find entries.',
50
+ });
51
+ }
52
+ const description = (typeof entry.data?.description === 'string' ? entry.data.description : undefined) ??
53
+ (typeof entry.data?.rationale === 'string' ? entry.data.rationale : undefined) ??
54
+ '';
55
+ let conflicts = [];
56
+ try {
57
+ conflicts = (await kernelCallWithSession('chain.detectSemanticConflicts', {
58
+ name: entry.name,
59
+ description,
60
+ collectionHint: entry.collectionSlug ?? entry.collection?.slug ?? entry.collection?.name,
61
+ })) ?? [];
62
+ }
63
+ catch {
64
+ process.stderr.write('Warning: conflict detection unavailable — proceeding without contradiction check.\n');
65
+ }
66
+ const blockingContradiction = conflicts.find((conflict) => conflict.type === 'contradiction' && conflict.confidence >= BLOCKING_CONTRADICTION_THRESHOLD);
67
+ if (blockingContradiction) {
68
+ throw new CLIError(`Commit blocked by contradiction with ${blockingContradiction.chainEntryId}: ${blockingContradiction.explanation}`, {
69
+ code: ErrorCode.VALIDATION_FAILED,
70
+ category: 'validation',
71
+ guidance: 'Resolve the contradiction before committing. Use `pb get` to inspect the conflicting entry.',
72
+ });
73
+ }
74
+ const args = {
75
+ entryId,
76
+ author: `agent:${session.sessionId}`,
77
+ sessionId: session.sessionId,
78
+ };
79
+ if (message) {
80
+ args.commitMessage = message;
81
+ }
82
+ let result;
83
+ try {
84
+ result = await kernelCallWithSession('chain.commitEntry', args);
85
+ }
86
+ catch (err) {
87
+ if (isVerificationGate(err)) {
88
+ // Auto-verify (same action as `pb verify`) then retry the commit (TEN-906).
89
+ await kernelCallWithSession('chain.verifyEntry', { entryId });
90
+ result = await kernelCallWithSession('chain.commitEntry', args);
91
+ }
92
+ else {
93
+ throw err;
94
+ }
95
+ }
96
+ const name = ('name' in result && typeof result.name === 'string') ? result.name : entryId;
97
+ return { entryId, name, result };
98
+ }
24
99
  export async function runPromote(options) {
25
100
  const config = await getConfigOrGuide(() => runPromote(options));
26
101
  if (!config)
@@ -34,80 +109,74 @@ export async function runPromote(options) {
34
109
  guidance: copy.sessionRequired,
35
110
  });
36
111
  }
37
- const entryId = options.entryId.trim();
38
- if (!entryId) {
112
+ const ids = (options.entryIds ?? (options.entryId !== undefined ? [options.entryId] : []))
113
+ .map((id) => id.trim())
114
+ .filter(Boolean);
115
+ if (ids.length === 0) {
39
116
  throw new CLIError('Entry ID is required.', {
40
117
  code: ErrorCode.VALIDATION_FAILED,
41
118
  category: 'validation',
42
- guidance: 'Usage: pb promote <entry-id>',
119
+ guidance: 'Usage: pb promote <entry-id> [<entry-id>...]',
43
120
  });
44
121
  }
45
- await runCliCommand({
46
- fn: async () => {
47
- const entry = await kernelCallWithSession('chain.getEntry', { entryId });
48
- if (!entry) {
49
- throw new CLIError(`Entry ${entryId} not found.`, {
50
- code: ErrorCode.VALIDATION_FAILED,
51
- category: 'validation',
52
- guidance: 'Check the entry ID and try again. Use `pb search` to find entries.',
53
- });
54
- }
55
- const description = (typeof entry.data?.description === 'string' ? entry.data.description : undefined) ??
56
- (typeof entry.data?.rationale === 'string' ? entry.data.rationale : undefined) ??
57
- '';
58
- let conflicts = [];
59
- try {
60
- conflicts = (await kernelCallWithSession('chain.detectSemanticConflicts', {
61
- name: entry.name,
62
- description,
63
- collectionHint: entry.collectionSlug ?? entry.collection?.slug ?? entry.collection?.name,
64
- })) ?? [];
65
- }
66
- catch {
67
- process.stderr.write('Warning: conflict detection unavailableproceeding without contradiction check.\n');
68
- }
69
- const blockingContradiction = conflicts.find((conflict) => conflict.type === 'contradiction' && conflict.confidence >= BLOCKING_CONTRADICTION_THRESHOLD);
70
- if (blockingContradiction) {
71
- throw new CLIError(`Commit blocked by contradiction with ${blockingContradiction.chainEntryId}: ${blockingContradiction.explanation}`, {
72
- code: ErrorCode.VALIDATION_FAILED,
73
- category: 'validation',
74
- guidance: 'Resolve the contradiction before committing. Use `pb get` to inspect the conflicting entry.',
75
- });
76
- }
77
- const args = {
78
- entryId,
79
- author: `agent:${session.sessionId}`,
80
- sessionId: session.sessionId,
81
- };
82
- if (options.message) {
83
- args.commitMessage = options.message;
122
+ // Single-entry path: preserve exact error propagation + JSON behavior (back-compat).
123
+ if (ids.length === 1) {
124
+ await runCliCommand({
125
+ fn: () => promoteOne(ids[0], options.message, session),
126
+ formatPretty: (data) => formatPromoteReceipt({
127
+ entryId: data.entryId,
128
+ name: data.name,
129
+ commitMessage: options.message,
130
+ result: data.result,
131
+ }),
132
+ });
133
+ return;
134
+ }
135
+ // Batch path (INS-1813): attempt each independently — a single failure must NOT
136
+ // abort the rest of the batch.
137
+ const results = [];
138
+ for (const id of ids) {
139
+ try {
140
+ const data = await promoteOne(id, options.message, session);
141
+ results.push({ entryId: id, ok: true, data });
142
+ }
143
+ catch (err) {
144
+ // A global preconditionexpired/invalid key (auth), network down, bad config —
145
+ // fails every remaining id identically. Rethrow it untouched so the batch fails
146
+ // fast and the caller sees the real code/category/guidance, instead of retrying
147
+ // each id and masking it as a per-entry VALIDATION_FAILED (the single-id path
148
+ // preserves these errors; the batch path must too). Entry-specific failures
149
+ // (validation: not-found, contradiction) are collected so one bad id never
150
+ // aborts the rest of the batch (INS-1813).
151
+ if (err instanceof CLIError && GLOBAL_PRECONDITION_CATEGORIES.has(err.category)) {
152
+ throw err;
84
153
  }
85
- let result;
86
- try {
87
- result = await kernelCallWithSession('chain.commitEntry', args);
154
+ results.push({ entryId: id, ok: false, error: err instanceof Error ? err.message : String(err) });
155
+ }
156
+ }
157
+ const failed = results.filter((r) => !r.ok);
158
+ if (isJsonMode()) {
159
+ process.stdout.write(JSON.stringify(results.map((r) => (r.ok ? { entryId: r.entryId, ok: true } : { entryId: r.entryId, ok: false, error: r.error }))) + '\n');
160
+ }
161
+ else {
162
+ for (const r of results) {
163
+ if (r.ok && r.data) {
164
+ process.stdout.write(formatPromoteReceipt({ entryId: r.data.entryId, name: r.data.name, commitMessage: options.message, result: r.data.result }) + '\n');
88
165
  }
89
- catch (err) {
90
- if (isVerificationGate(err)) {
91
- // Auto-verify (same action as `pb verify`) then retry the commit (TEN-906).
92
- await kernelCallWithSession('chain.verifyEntry', { entryId });
93
- result = await kernelCallWithSession('chain.commitEntry', args);
94
- }
95
- else {
96
- throw err;
97
- }
166
+ else {
167
+ process.stdout.write(`Failed ${r.entryId}: ${r.error}\n`);
98
168
  }
99
- // Resolve display name from result
100
- const name = ('name' in result && typeof result.name === 'string')
101
- ? result.name
102
- : entryId;
103
- return { entryId, name, result };
104
- },
105
- formatPretty: (data) => formatPromoteReceipt({
106
- entryId: data.entryId,
107
- name: data.name,
108
- commitMessage: options.message,
109
- result: data.result,
110
- }),
111
- });
169
+ }
170
+ process.stdout.write(`\nBatch promote: ${results.length - failed.length}/${results.length} promoted` +
171
+ (failed.length ? `, ${failed.length} failed (${failed.map((f) => f.entryId).join(', ')})` : '') +
172
+ '.\n');
173
+ }
174
+ if (failed.length > 0) {
175
+ throw new CLIError(`${failed.length} of ${results.length} promotion(s) failed: ${failed.map((f) => f.entryId).join(', ')}.`, {
176
+ code: ErrorCode.VALIDATION_FAILED,
177
+ category: 'validation',
178
+ guidance: 'Inspect the failures above, then re-run `pb promote <entry-id>` for each that failed.',
179
+ });
180
+ }
112
181
  }
113
182
  //# sourceMappingURL=promote.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/commands/promote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/commands/promote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAA0B,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAsB,MAAM,kBAAkB,CAAC;AA+B3E,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,8BAA8B,GAA+B,IAAI,GAAG,CAAC;IACzE,MAAM;IACN,SAAS;IACT,QAAQ;IACR,SAAS;CACV,CAAC,CAAC;AAEH;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,GAAY;IACtC,OAAO,CACL,GAAG,YAAY,QAAQ;QACvB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,oBAAoB;QAC3C,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CACnD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,UAAU,CACvB,OAAe,EACf,OAA2B,EAC3B,OAA8B;IAE9B,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAsB,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,QAAQ,CAAC,SAAS,OAAO,aAAa,EAAE;YAChD,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,oEAAoE;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GACf,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,EAAE,CAAC;IACL,IAAI,SAAS,GAAuB,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,SAAS,GAAG,CAAC,MAAM,qBAAqB,CAA4B,+BAA+B,EAAE;YACnG,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW;YACX,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI;SACzF,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,qBAAqB,GAAG,SAAS,CAAC,IAAI,CAC1C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,eAAe,IAAI,QAAQ,CAAC,UAAU,IAAI,gCAAgC,CAC3G,CAAC;IACF,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAChB,wCAAwC,qBAAqB,CAAC,YAAY,KAAK,qBAAqB,CAAC,WAAW,EAAE,EAClH;YACE,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,6FAA6F;SACxG,CACF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAA4B;QACpC,OAAO;QACP,MAAM,EAAE,SAAS,OAAO,CAAC,SAAS,EAAE;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC/B,CAAC;IAED,IAAI,MAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,qBAAqB,CAAoB,mBAAmB,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,4EAA4E;YAC5E,MAAM,qBAAqB,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9D,MAAM,GAAG,MAAM,qBAAqB,CAAoB,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAuB;IACtD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,uCAAuC;IACvC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE;YACjC,IAAI,EAAE,SAAS,CAAC,gBAAgB;YAChC,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,IAAI,CAAC,eAAe;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACvF,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE;YAC1C,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,8CAA8C;SACzD,CAAC,CAAC;IACL,CAAC;IAED,qFAAqF;IACrF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,aAAa,CAAgB;YACjC,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;YACtD,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC;gBAC3C,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,aAAa,EAAE,OAAO,CAAC,OAAO;gBAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC;SACH,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,gFAAgF;IAChF,+BAA+B;IAC/B,MAAM,OAAO,GAAkF,EAAE,CAAC;IAClG,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iFAAiF;YACjF,gFAAgF;YAChF,gFAAgF;YAChF,8EAA8E;YAC9E,4EAA4E;YAC5E,2EAA2E;YAC3E,2CAA2C;YAC3C,IAAI,GAAG,YAAY,QAAQ,IAAI,8BAA8B,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChF,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE5C,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CACzI,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CACnI,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oBAAoB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,WAAW;YAC7E,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,KAAK,CACR,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAChB,GAAG,MAAM,CAAC,MAAM,OAAO,OAAO,CAAC,MAAM,yBAAyB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EACxG;YACE,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,uFAAuF;SAClG,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyCH,KAAK,mBAAmB,GAAG;IACzB,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAgDF,wBAAsB,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBtF;AA+LD;;;GAGG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCtF;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FtF"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+CH,KAAK,mBAAmB,GAAG;IACzB,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAgDF,wBAAsB,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBtF;AA+LD;;;GAGG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCtF;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgKtF"}
@@ -10,7 +10,7 @@ import { kernelCall } from '../lib/client.js';
10
10
  import { readSession, writeSession, clearSession, discardSession, sessionFileExists, readClosedMarker } from '../lib/session.js';
11
11
  import { isJsonMode } from '../lib/runner.js';
12
12
  import { confirm, isInteractive } from '../lib/prompts.js';
13
- import { formatSessionStart, formatSessionClose } from '../formatters/session.js';
13
+ import { formatSessionStart, formatSessionClose, formatLoopUnfinished, buildPromoteCommand, } from '../formatters/session.js';
14
14
  import { runHandshake } from './handshake.js';
15
15
  import { CLIError, ErrorCode } from '../lib/errors.js';
16
16
  import { getActiveProfile } from '../lib/profiles.js';
@@ -325,14 +325,68 @@ export async function runSessionClose(options = {}) {
325
325
  process.stdout.write('No active session. Run `pb session start` to begin.\n');
326
326
  return;
327
327
  }
328
- // Record wrapup metrics
329
- const entriesCount = session.entriesCaptured.length;
330
- if (entriesCount > 0) {
328
+ // TEN-2370: fetch the SERVER's post-promote truth (committed vs still-draft) so close
329
+ // reflects reality, not the local capture-time snapshot. Best-effort — a read failure
330
+ // degrades to the legacy snapshot rendering rather than blocking the close.
331
+ let wrapup = null;
332
+ try {
333
+ const raw = await kernelCall('agent.getSessionWrapup', { sessionId: session.sessionId });
334
+ wrapup = {
335
+ committed: (raw.committed ?? []).map((e) => ({ entryId: e.entryId, name: e.name })),
336
+ // Merge the cap-overflow drafts (TEN-2370) so the gate, the promote command, and
337
+ // the draft listing all operate on the COMPLETE still-draft set — never just the
338
+ // first WRAPUP_ENTRY_CAP. Without this a 16+ entry session could close with
339
+ // uncommitted drafts hidden beyond the cap, defeating the loop-closing purpose.
340
+ drafts: [...(raw.drafts ?? []), ...(raw.overflowDrafts ?? [])].map((e) => ({
341
+ entryId: e.entryId,
342
+ name: e.name,
343
+ })),
344
+ // Entries past OVERFLOW_SCAN_CAP the server did not enumerate — the gate treats a
345
+ // nonzero count as "cannot certify" and fails CLOSED (blocks the close) so an
346
+ // enormous session can never slip through unread.
347
+ overflowUnscanned: raw.overflowUnscanned ?? 0,
348
+ };
349
+ // Pending domain-tag proposal count is admin-gated (http.ts: authorityDomains.readiness).
350
+ // A plain API-key session has no management role, so this 403s — surface the count when
351
+ // available, omit silently otherwise. The hint is advisory, never required.
352
+ try {
353
+ const readiness = await kernelCall('authorityDomains.readiness', {});
354
+ wrapup.pendingDomainProposals = readiness?.proposals?.pendingDomainTagCount;
355
+ }
356
+ catch {
357
+ // Non-admin or unavailable — omit the domain-tag advisory.
358
+ }
359
+ }
360
+ catch {
361
+ // Wrapup read failed — degrade to legacy local-snapshot rendering, no enforcement.
362
+ }
363
+ // ENFORCEMENT (TEN-2370 / ASM-40): drafts remain and the operator did not pass --force.
364
+ // Print the promote command, exit non-zero (LOOP_UNFINISHED), and DO NOT close — the
365
+ // session stays open so the agent can promote and re-close. --force is the documented
366
+ // escape so automation can never deadlock on this gate.
367
+ if (wrapup && (wrapup.drafts.length > 0 || (wrapup.overflowUnscanned ?? 0) > 0) && !options.force) {
368
+ // In --json mode emit ONLY the structured error (thrown below) — the human nudge would
369
+ // corrupt stdout for the automation callers this remediation path exists to serve. The
370
+ // LOOP_UNFINISHED error carries the same promote command in its guidance.
371
+ if (!isJsonMode()) {
372
+ process.stdout.write(formatLoopUnfinished(wrapup) + '\n');
373
+ }
374
+ const draftIds = wrapup.drafts.map((d) => d.entryId);
375
+ throw new CLIError(`Loop unfinished: ${wrapup.drafts.length} draft(s) not committed to the Chain.`, {
376
+ code: ErrorCode.LOOP_UNFINISHED,
377
+ category: 'session',
378
+ guidance: `Promote with \`${buildPromoteCommand(draftIds)}\`, then re-run \`pb session close\` — or \`pb session close --force\` to close anyway.`,
379
+ });
380
+ }
381
+ // Record wrapup metrics — use server truth (real committed count) when available.
382
+ const draftsReviewed = wrapup ? wrapup.committed.length + wrapup.drafts.length : session.entriesCaptured.length;
383
+ const draftsCommitted = wrapup ? wrapup.committed.length : 0;
384
+ if (draftsReviewed > 0) {
331
385
  try {
332
386
  await kernelCall('agent.recordWrapup', {
333
387
  sessionId: session.sessionId,
334
- draftsReviewed: entriesCount,
335
- draftsCommitted: 0, // CLI captures are drafts; user commits in Cortex
388
+ draftsReviewed,
389
+ draftsCommitted,
336
390
  linksCreated: 0,
337
391
  });
338
392
  }
@@ -364,7 +418,7 @@ export async function runSessionClose(options = {}) {
364
418
  // session id belongs to the preview deployment, so a default (prod) app link can't open it
365
419
  // (Codex P2, PR #151). Set PB_APP_URL to print a preview-correct link during dogfood.
366
420
  const appUrl = readLocalProjectConfig()?.preview === true && !process.env.PB_APP_URL ? null : resolveAppUrl();
367
- process.stdout.write(formatSessionClose(session, workspaceSlug, appUrl) + '\n');
421
+ process.stdout.write(formatSessionClose(session, wrapup, workspaceSlug, appUrl) + '\n');
368
422
  // WP-439 S6: surface unrepaired setup-asset receipts as a non-blocking
369
423
  // advisory. Failures here are silent — never let a network blip or schema
370
424
  // gap prevent a session from closing.
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAqB,MAAM,mBAAmB,CAAC;AACpJ,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AACjH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAqBpD,iDAAiD;AACjD,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAY5C;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,GAAY;IAC1C,OAAO,GAAG,YAAY,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC;AACjG,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAAC,GAAY;IACxC,OAAO,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,QAAQ,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB;IAC3B,OAAO,IAAI,QAAQ,CACjB,gGAAgG,EAChG;QACE,IAAI,EAAE,SAAS,CAAC,YAAY;QAC5B,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,4FAA4F;KACvG,CACF,CAAC;AACJ,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA+B,EAAE;IACrE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,IAAI,IAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,gGAAgG;IAChG,gGAAgG;IAChG,gGAAgG;IAChG,2EAA2E;IAC3E,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,CAAC;IACxG,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,sBAAsB,CACnC,GAAY,EACZ,OAA4B;IAE5B,MAAM,YAAY,GAAG,sBAAsB,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,IAAI,CAAC,YAAY,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;QAAE,MAAM,GAAG,CAAC;IAE7D,MAAM,OAAO,GAAG,4BAA4B,EAAE,CAAC;IAC/C,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,2CAA2C;QACrF,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC;YAClB,4FAA4F;YAC5F,yFAAyF;YACzF,4FAA4F;YAC5F,sFAAsF;YACtF,2FAA2F;YAC3F,IAAI,oBAAoB,CAAC,QAAQ,CAAC;gBAAE,MAAM,oBAAoB,EAAE,CAAC;YACjE,MAAM,QAAQ,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,6FAA6F;QAC7F,MAAM,oBAAoB,EAAE,CAAC;IAC/B,CAAC;IACD,gGAAgG;IAChG,gGAAgG;IAChG,sGAAsG;IACtG,MAAM,GAAG,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAA4B;IAC1D,oFAAoF;IACpF,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;IAEnD,uFAAuF;IACvF,6EAA6E;IAC7E,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,CAAC,OAAO,CAAC;IAE3D,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,QAAQ,EAAE,CAAC;QACb,oFAAoF;QACpF,sFAAsF;QACtF,MAAM,cAAc,GAAG,gBAAgB,CAAC;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,IAAI,cAAc,IAAI,QAAQ,CAAC,OAAO,KAAK,cAAc,CAAC;QAC3F,IAAI,QAAQ,EAAE,CAAC;YACb,cAAc,EAAE,CAAC;YACjB,6CAA6C;QAC/C,CAAC;aAAM,CAAC;YACN,mFAAmF;YACnF,2FAA2F;YAC3F,4FAA4F;YAC5F,0FAA0F;YAC1F,gGAAgG;YAChG,4BAA4B,EAAE,CAAC;YAC/B,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBAClC,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,aAAa,EAAE,QAAQ,CAAC,aAAa;oBACrC,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,aAAa,EAAE,IAAI;oBACnB,aAAa,EAAE,sBAAsB,EAAE,EAAE,OAAO,IAAI,gBAAgB,EAAE;iBACvE,CAAC,GAAG,IAAI,CAAC,CAAC;gBACX,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACpC,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;YACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;YACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,QAAQ,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,CAAC;YAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;YAC1G,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACxC,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QACvE,IAAI,OAAO,GAAG,gBAAgB,EAAE,CAAC;YAC/B,4DAA4D;YAC5D,MAAM,WAAW,GAAG,MAAM,UAAU,CAAyB,kBAAkB,EAAE,EAAE,CAAC,CAAC;YACrF,0FAA0F;YAC1F,2FAA2F;YAC3F,oFAAoF;YACpF,2FAA2F;YAC3F,0FAA0F;YAC1F,6FAA6F;YAC7F,IAAI,WAAW,EAAE,GAAG,IAAI,YAAY,CAAC,WAAW,KAAK,WAAW,CAAC,GAAG,EAAE,CAAC;gBACrE,cAAc,EAAE,CAAC;gBACjB,6CAA6C;YAC/C,CAAC;iBAAM,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,IAAI;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACzD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAsB,qBAAqB,EAAE;oBAC3E,WAAW,EAAE,WAAW,CAAC,GAAG;oBAC5B,QAAQ,EAAE,WAAW,CAAC,KAAK;oBAC3B,iBAAiB,EAAE,YAAY,CAAC,SAAS;oBACzC,UAAU,EAAE,KAAK;iBAClB,CAAC,CAAC;gBACH,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,KAAK,GAAiB;oBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,WAAW,EAAE,WAAW,CAAC,GAAG;oBAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,eAAe,EAAE,EAAE;oBACnB,OAAO,EAAE,gBAAgB,IAAI,SAAS;iBACvC,CAAC;gBACF,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;wBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;wBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,OAAO,EAAE,IAAI;wBACb,uBAAuB,EAAE,YAAY,CAAC,SAAS;wBAC/C,aAAa,EAAE,sBAAsB,EAAE,EAAE,OAAO,IAAI,gBAAgB,EAAE;qBACvE,CAAC,GAAG,IAAI,CAAC,CAAC;oBACX,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBACpC,CAAC;gBACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;gBACjD,MAAM,YAAY,GAAG,WAAW,GAAG,EAAE;oBACnC,CAAC,CAAC,GAAG,WAAW,OAAO;oBACvB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;gBAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,WAAW,YAAY,YAAY,KAAK,CAAC,CAAC;gBAChG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,EAAE,OAAO,IAAI,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC3H,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAChD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gEAAgE;YAChE,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,SAAS,GAAG,MAAM,UAAU,CAAyB,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACnF,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,wEAAwE,EAAE;YAC3F,IAAI,EAAE,SAAS,CAAC,YAAY;YAC5B,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,oEAAoE;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAqB,oBAAoB,EAAE;QACxE,WAAW,EAAE,SAAS,CAAC,GAAG;QAC1B,QAAQ,EAAE,SAAS,CAAC,KAAK;QACzB,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,KAAK,GAAiB;QAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,SAAS,CAAC,GAAG;QAC1B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,eAAe,EAAE,EAAE;QACnB,OAAO,EAAE,gBAAgB,IAAI,SAAS;KACvC,CAAC;IACF,YAAY,CAAC,KAAK,CAAC,CAAC;IAEpB,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,aAAa,EAAE,gBAAgB,EAAE;SAClC,CAAC,GAAG,IAAI,CAAC,CAAC;QACX,kFAAkF;QAClF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,sBAAsB,EAAE,EAAE,OAAO,IAAI,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAEnI,uFAAuF;IACvF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAChD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE;YACvC,IAAI,EAAE,SAAS,CAAC,gBAAgB;YAChC,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,+BAA+B;SAC1C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA+B,EAAE;IACrE,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAE7B,kFAAkF;IAClF,0FAA0F;IAC1F,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,yEAAyE;IACzE,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,QAAQ,CAAC,kEAAkE,EAAE;gBACrF,IAAI,EAAE,SAAS,CAAC,eAAe;gBAC/B,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,uEAAuE;aAClF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,eAAe,CAAC,MAAM,sBAAsB,CAAC,CAAC;QAClH,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YACvB,OAAO,EAAE,yDAAyD;YAClE,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;IACH,CAAC;IAED,wFAAwF;IACxF,cAAc,EAAE,CAAC;IAEjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA+B,EAAE;IACrE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,sFAAsF;IACtF,sFAAsF;IACtF,4EAA4E;IAC5E,IAAI,MAAM,GAA8B,IAAI,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAKzB,wBAAwB,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,GAAG;YACP,SAAS,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACnF,iFAAiF;YACjF,iFAAiF;YACjF,4EAA4E;YAC5E,gFAAgF;YAChF,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzE,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;YACH,kFAAkF;YAClF,8EAA8E;YAC9E,kDAAkD;YAClD,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,IAAI,CAAC;SAC9C,CAAC;QACF,0FAA0F;QAC1F,wFAAwF;QACxF,4EAA4E;QAC5E,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAChC,4BAA4B,EAC5B,EAAE,CACH,CAAC;YACF,MAAM,CAAC,sBAAsB,GAAG,SAAS,EAAE,SAAS,EAAE,qBAAqB,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mFAAmF;IACrF,CAAC;IAED,wFAAwF;IACxF,qFAAqF;IACrF,sFAAsF;IACtF,wDAAwD;IACxD,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAClG,uFAAuF;QACvF,uFAAuF;QACvF,0EAA0E;QAC1E,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,QAAQ,CAChB,oBAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,uCAAuC,EAC/E;YACE,IAAI,EAAE,SAAS,CAAC,eAAe;YAC/B,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,kBAAkB,mBAAmB,CAAC,QAAQ,CAAC,yFAAyF;SACnJ,CACF,CAAC;IACJ,CAAC;IAED,kFAAkF;IAClF,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC;IAChH,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,oBAAoB,EAAE;gBACrC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,cAAc;gBACd,eAAe;gBACf,YAAY,EAAE,CAAC;aAChB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uDAAuD;YACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC;QACrH,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,aAAwC,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,UAAU,CAClC,oBAAoB,EACpB;YACE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,QAAQ;SACjB,CACF,CAAC;QACF,aAAa,GAAG,WAAW,CAAC,aAAa,IAAI,SAAS,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,MAAM,IAAI,QAAQ,CAChB,4BAA4B,MAAM,iEAAiE,EACnG;gBACE,IAAI,EAAE,SAAS,CAAC,mBAAmB;gBACnC,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,6DAA6D;aACxE,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,uFAAuF;IACvF,2FAA2F;IAC3F,sFAAsF;IACtF,MAAM,MAAM,GACV,sBAAsB,EAAE,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAExF,uEAAuE;IACvE,0EAA0E;IAC1E,sCAAsC;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAQ9B,+BAA+B,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;iBAC7B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;iBACxC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,WAAW,QAAQ,CAAC,KAAK,gDAAgD,OAAO,GAAG,IAAI,KAAK;gBAC1F,wEAAwE,CAC3E,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,oBAAoB;IACpB,YAAY,EAAE,CAAC;IAEf,uEAAuE;IACvE,4EAA4E;IAC5E,oEAAoE;IACpE,6DAA6D;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAChD,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,CAAC;AACpG,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import { formatSessionClose } from '../session.js';
2
+ import { formatSessionClose, formatLoopUnfinished, buildPromoteCommand, } from '../session.js';
3
3
  function sessionWith(captured) {
4
4
  return {
5
5
  sessionId: 'sess_abc123',
@@ -9,27 +9,105 @@ function sessionWith(captured) {
9
9
  entriesCaptured: captured,
10
10
  };
11
11
  }
12
- describe('formatSessionClose — session-close ratify handoff (WP-455 E4)', () => {
12
+ function wrapup(committed, drafts, pendingDomainProposals) {
13
+ return { committed, drafts, pendingDomainProposals };
14
+ }
15
+ describe('formatSessionClose — legacy path (wrapup null, WP-455 E4 ratify handoff preserved)', () => {
13
16
  it('emits the exact-session ratify deep link when slug + appUrl are provided and captures exist', () => {
14
- const out = formatSessionClose(sessionWith(['DEC-1', 'INS-2']), 'acme', 'https://work.productbrain.io');
17
+ const out = formatSessionClose(sessionWith(['DEC-1', 'INS-2']), null, 'acme', 'https://work.productbrain.io');
15
18
  // Pins this session so the page never relies on its fallback resolver.
16
19
  expect(out).toContain('https://work.productbrain.io/w/acme/bridge/session-close?sessionId=sess_abc123');
17
20
  expect(out).toContain('Ratify these captures while fresh:');
18
21
  });
19
22
  it('falls back to the generic message when the app URL is suppressed (e.g. preview-bound)', () => {
20
- const out = formatSessionClose(sessionWith(['DEC-1']), 'acme', null);
23
+ const out = formatSessionClose(sessionWith(['DEC-1']), null, 'acme', null);
21
24
  expect(out).toContain('Review and commit drafts in Cortex');
22
25
  expect(out).not.toContain('session-close?sessionId=');
23
26
  });
24
27
  it('falls back to the generic message when no slug is available', () => {
25
- const out = formatSessionClose(sessionWith(['DEC-1']), undefined, 'https://work.productbrain.io');
28
+ const out = formatSessionClose(sessionWith(['DEC-1']), null, undefined, 'https://work.productbrain.io');
26
29
  expect(out).toContain('Review and commit drafts in Cortex');
27
30
  expect(out).not.toContain('session-close?sessionId=');
28
31
  });
29
32
  it('prints neither link nor generic review line when nothing was captured', () => {
30
- const out = formatSessionClose(sessionWith([]), 'acme', 'https://work.productbrain.io');
33
+ const out = formatSessionClose(sessionWith([]), null, 'acme', 'https://work.productbrain.io');
31
34
  expect(out).toContain('No entries captured this session.');
32
35
  expect(out).not.toContain('session-close?sessionId=');
33
36
  });
34
37
  });
38
+ describe('formatSessionClose — server-truth path (TEN-2370: status reflects post-promote reality)', () => {
39
+ it('reports committed vs still-draft counts from the server wrapup, not the local snapshot', () => {
40
+ // Session captured 2 drafts; one was promoted mid-session. Server truth: 1 committed, 1 draft.
41
+ const out = formatSessionClose(sessionWith(['DEC-1', 'TEN-2']), wrapup([{ entryId: 'DEC-1', name: 'Decided X' }], [{ entryId: 'TEN-2', name: 'Tension Y' }]), 'acme', 'https://work.productbrain.io');
42
+ expect(out).toContain('1 committed');
43
+ expect(out).toContain('1 still draft');
44
+ // The promoted entry must NOT be reported as a draft.
45
+ expect(out).not.toMatch(/draft[\s\S]*DEC-1/);
46
+ expect(out).toContain('DEC-1');
47
+ expect(out).toContain('Decided X');
48
+ expect(out).toContain('TEN-2');
49
+ expect(out).toContain('Tension Y');
50
+ });
51
+ it('shows zero still-draft and no promote hint when every entry was committed', () => {
52
+ const out = formatSessionClose(sessionWith(['DEC-1']), wrapup([{ entryId: 'DEC-1', name: 'Decided X' }], []), 'acme', 'https://work.productbrain.io');
53
+ expect(out).toContain('1 committed');
54
+ expect(out).toContain('0 still draft');
55
+ expect(out).not.toContain('pb promote');
56
+ });
57
+ it('on a force-close with drafts remaining, names the uncommitted drafts and the promote command', () => {
58
+ const out = formatSessionClose(sessionWith(['TEN-2']), wrapup([], [{ entryId: 'TEN-2', name: 'Tension Y' }]), 'acme', 'https://work.productbrain.io');
59
+ expect(out).toContain('TEN-2');
60
+ expect(out).toContain('pb promote TEN-2');
61
+ });
62
+ it('surfaces the pending domain-tag proposal count with a review hint when present', () => {
63
+ const out = formatSessionClose(sessionWith(['DEC-1']), wrapup([{ entryId: 'DEC-1', name: 'Decided X' }], [], 3), 'acme', 'https://work.productbrain.io');
64
+ expect(out).toContain('3 pending domain-tag proposal');
65
+ expect(out).toContain('pb authority-domains review');
66
+ });
67
+ it('omits the domain-tag line when there are no pending proposals', () => {
68
+ const out = formatSessionClose(sessionWith(['DEC-1']), wrapup([{ entryId: 'DEC-1', name: 'Decided X' }], [], 0), 'acme', 'https://work.productbrain.io');
69
+ expect(out).not.toContain('pb authority-domains review');
70
+ });
71
+ it('treats a zero-entry wrapup the same as a captured-nothing session', () => {
72
+ const out = formatSessionClose(sessionWith([]), wrapup([], []), 'acme', 'https://work.productbrain.io');
73
+ expect(out).toContain('No entries captured this session.');
74
+ });
75
+ });
76
+ describe('formatLoopUnfinished — the enforcement nudge (ASM-40)', () => {
77
+ it('names every still-draft entry and the exact batch promote command', () => {
78
+ const out = formatLoopUnfinished(wrapup([{ entryId: 'DEC-1', name: 'Decided X' }], [
79
+ { entryId: 'TEN-2', name: 'Tension Y' },
80
+ { entryId: 'INS-3', name: 'Insight Z' },
81
+ ]));
82
+ expect(out).toContain('TEN-2');
83
+ expect(out).toContain('Tension Y');
84
+ expect(out).toContain('INS-3');
85
+ expect(out).toContain('Insight Z');
86
+ // The exact, copy-pasteable batch promote command.
87
+ expect(out).toContain('pb promote TEN-2 INS-3');
88
+ // Tells the operator how to finish and how to escape.
89
+ expect(out).toContain('pb session close --force');
90
+ // Honest in governance/consensus workspaces too, where promote opens a proposal
91
+ // rather than committing — point those operators at approval/force, not a re-promote loop.
92
+ expect(out).toContain('Governance');
93
+ expect(out).toContain('approve it in Cortex');
94
+ });
95
+ it('does not claim the session is closed', () => {
96
+ const out = formatLoopUnfinished(wrapup([], [{ entryId: 'TEN-2', name: 'Tension Y' }]));
97
+ expect(out).not.toContain('Session closed.');
98
+ });
99
+ it('surfaces the pending domain-tag proposal count in the nudge when present', () => {
100
+ const out = formatLoopUnfinished(wrapup([], [{ entryId: 'TEN-2', name: 'Tension Y' }], 2));
101
+ expect(out).toContain('2 pending domain-tag proposal');
102
+ expect(out).toContain('pb authority-domains review');
103
+ });
104
+ });
105
+ describe('buildPromoteCommand', () => {
106
+ it('joins multiple IDs into a single batch promote command', () => {
107
+ expect(buildPromoteCommand(['TEN-2', 'INS-3'])).toBe('pb promote TEN-2 INS-3');
108
+ });
109
+ it('handles a single ID', () => {
110
+ expect(buildPromoteCommand(['TEN-2'])).toBe('pb promote TEN-2');
111
+ });
112
+ });
35
113
  //# sourceMappingURL=session.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../../src/formatters/__tests__/session.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,SAAS,WAAW,CAAC,QAAkB;IACrC,OAAO;QACL,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;QAC1D,eAAe,EAAE,QAAQ;KAC1B,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC7E,EAAE,CAAC,6FAA6F,EAAE,GAAG,EAAE;QACrG,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,8BAA8B,CAAC,CAAC;QACxG,uEAAuE;QACvE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,gFAAgF,CAAC,CAAC;QACxG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;QAC/F,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,8BAA8B,CAAC,CAAC;QAClG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,8BAA8B,CAAC,CAAC;QACxF,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../../src/formatters/__tests__/session.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,48 @@
1
1
  /**
2
2
  * Session formatters — terminal output for session start / close.
3
+ *
4
+ * TEN-2370: session close must reflect the *server's* post-promote truth, not the
5
+ * local capture-time snapshot. `formatSessionClose` takes a `SessionCloseWrapup`
6
+ * (committed vs still-draft, from `agent.getSessionWrapup`) and renders the real
7
+ * loop status. `formatLoopUnfinished` renders the enforcement nudge when drafts
8
+ * remain (ASM-40) — the session is intentionally left open so the agent can
9
+ * promote and re-close.
3
10
  */
4
11
  import type { SessionState } from '../lib/session.js';
12
+ /** One entry as the server reports it in the wrapup (committed or draft). */
13
+ export interface WrapupEntryRef {
14
+ entryId: string;
15
+ name: string;
16
+ }
17
+ /**
18
+ * Server-truth view of the session at close time. `null` when the wrapup read
19
+ * failed — callers fall back to the legacy local-snapshot rendering so an infra
20
+ * blip never blocks a close.
21
+ */
22
+ export interface SessionCloseWrapup {
23
+ committed: WrapupEntryRef[];
24
+ drafts: WrapupEntryRef[];
25
+ /** Best-effort: count of pending domain-tag proposals (admin-gated; omitted when unavailable). */
26
+ pendingDomainProposals?: number;
27
+ /**
28
+ * Entries past OVERFLOW_SCAN_CAP the server did not enumerate (TEN-2370). A nonzero
29
+ * value means the draft set could not be fully read, so the gate fails CLOSED.
30
+ */
31
+ overflowUnscanned?: number;
32
+ }
33
+ /** The exact, copy-pasteable batch promote command for a set of draft IDs. */
34
+ export declare function buildPromoteCommand(entryIds: string[]): string;
5
35
  export declare function formatSessionStart(session: SessionState, superseded?: {
6
36
  previousSessionId: string;
7
37
  startedAt: string;
8
38
  initiatedBy: string;
9
39
  }, activeProfile?: string | null): string;
10
- export declare function formatSessionClose(session: SessionState, workspaceSlug?: string | null, appUrl?: string | null): string;
40
+ export declare function formatSessionClose(session: SessionState, wrapup: SessionCloseWrapup | null, workspaceSlug?: string | null, appUrl?: string | null): string;
41
+ /**
42
+ * The enforcement nudge (ASM-40 / TEN-2370): drafts remain and the operator did
43
+ * not pass --force. The session is left OPEN — this output tells them how to
44
+ * finish the loop (promote) and how to escape (--force). It must never imply the
45
+ * session was closed.
46
+ */
47
+ export declare function formatLoopUnfinished(wrapup: SessionCloseWrapup): string;
11
48
  //# sourceMappingURL=session.d.ts.map