@postalsys/email-content 0.0.5 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +205 -17
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/analyze.d.ts +55 -15
  4. package/dist/analyze.d.ts.map +1 -1
  5. package/dist/analyze.js +275 -61
  6. package/dist/analyze.js.map +1 -1
  7. package/dist/canonical/html.d.ts +21 -2
  8. package/dist/canonical/html.d.ts.map +1 -1
  9. package/dist/canonical/html.js +213 -14
  10. package/dist/canonical/html.js.map +1 -1
  11. package/dist/classify/confidence.d.ts +12 -0
  12. package/dist/classify/confidence.d.ts.map +1 -1
  13. package/dist/classify/confidence.js +54 -4
  14. package/dist/classify/confidence.js.map +1 -1
  15. package/dist/classify/reconcile.d.ts +25 -17
  16. package/dist/classify/reconcile.d.ts.map +1 -1
  17. package/dist/classify/reconcile.js +52 -20
  18. package/dist/classify/reconcile.js.map +1 -1
  19. package/dist/classify/rules.d.ts +7 -0
  20. package/dist/classify/rules.d.ts.map +1 -1
  21. package/dist/classify/rules.js +58 -0
  22. package/dist/classify/rules.js.map +1 -1
  23. package/dist/cli/annotate.d.ts.map +1 -1
  24. package/dist/cli/annotate.js +6 -3
  25. package/dist/cli/annotate.js.map +1 -1
  26. package/dist/cli/args.d.ts +14 -0
  27. package/dist/cli/args.d.ts.map +1 -1
  28. package/dist/cli/args.js +48 -1
  29. package/dist/cli/args.js.map +1 -1
  30. package/dist/cli/benchmark.d.ts +39 -0
  31. package/dist/cli/benchmark.d.ts.map +1 -1
  32. package/dist/cli/benchmark.js +179 -66
  33. package/dist/cli/benchmark.js.map +1 -1
  34. package/dist/cli/corpus.d.ts.map +1 -1
  35. package/dist/cli/corpus.js +13 -8
  36. package/dist/cli/corpus.js.map +1 -1
  37. package/dist/cli/disagreements.d.ts.map +1 -1
  38. package/dist/cli/disagreements.js +7 -4
  39. package/dist/cli/disagreements.js.map +1 -1
  40. package/dist/cli/evaluate.d.ts.map +1 -1
  41. package/dist/cli/evaluate.js +34 -10
  42. package/dist/cli/evaluate.js.map +1 -1
  43. package/dist/cli/extract.d.ts.map +1 -1
  44. package/dist/cli/extract.js +8 -3
  45. package/dist/cli/extract.js.map +1 -1
  46. package/dist/cli/main.js +8 -0
  47. package/dist/cli/main.js.map +1 -1
  48. package/dist/corpus/scanner.d.ts +9 -1
  49. package/dist/corpus/scanner.d.ts.map +1 -1
  50. package/dist/corpus/scanner.js +52 -13
  51. package/dist/corpus/scanner.js.map +1 -1
  52. package/dist/corpus/store.d.ts +29 -2
  53. package/dist/corpus/store.d.ts.map +1 -1
  54. package/dist/corpus/store.js +45 -2
  55. package/dist/corpus/store.js.map +1 -1
  56. package/dist/detect/patterns.d.ts +29 -0
  57. package/dist/detect/patterns.d.ts.map +1 -1
  58. package/dist/detect/patterns.js +80 -6
  59. package/dist/detect/patterns.js.map +1 -1
  60. package/dist/detect/reply-header.d.ts +14 -0
  61. package/dist/detect/reply-header.d.ts.map +1 -1
  62. package/dist/detect/reply-header.js +80 -37
  63. package/dist/detect/reply-header.js.map +1 -1
  64. package/dist/eval/oracle.d.ts +80 -0
  65. package/dist/eval/oracle.d.ts.map +1 -0
  66. package/dist/eval/oracle.js +250 -0
  67. package/dist/eval/oracle.js.map +1 -0
  68. package/dist/index.d.ts +6 -3
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +94 -56
  71. package/dist/index.js.map +1 -1
  72. package/dist/match/history.d.ts +12 -0
  73. package/dist/match/history.d.ts.map +1 -1
  74. package/dist/match/history.js +16 -0
  75. package/dist/match/history.js.map +1 -1
  76. package/dist/mime/model.d.ts +28 -3
  77. package/dist/mime/model.d.ts.map +1 -1
  78. package/dist/mime/model.js +41 -1
  79. package/dist/mime/model.js.map +1 -1
  80. package/dist/mime/parse.d.ts.map +1 -1
  81. package/dist/mime/parse.js +19 -2
  82. package/dist/mime/parse.js.map +1 -1
  83. package/dist/mime/select.d.ts +71 -0
  84. package/dist/mime/select.d.ts.map +1 -0
  85. package/dist/mime/select.js +198 -0
  86. package/dist/mime/select.js.map +1 -0
  87. package/dist/segment/html-blocks.d.ts +1 -1
  88. package/dist/segment/html-blocks.d.ts.map +1 -1
  89. package/dist/segment/html-blocks.js +77 -8
  90. package/dist/segment/html-blocks.js.map +1 -1
  91. package/dist/segment/text-blocks.d.ts.map +1 -1
  92. package/dist/segment/text-blocks.js +18 -1
  93. package/dist/segment/text-blocks.js.map +1 -1
  94. package/dist/segment/types.d.ts +14 -0
  95. package/dist/segment/types.d.ts.map +1 -1
  96. package/dist/types.d.ts +132 -11
  97. package/dist/types.d.ts.map +1 -1
  98. package/dist/types.js +37 -3
  99. package/dist/types.js.map +1 -1
  100. package/dist/util/worker-pool.d.ts +21 -0
  101. package/dist/util/worker-pool.d.ts.map +1 -1
  102. package/dist/util/worker-pool.js +61 -13
  103. package/dist/util/worker-pool.js.map +1 -1
  104. package/package.json +4 -2
@@ -8,17 +8,26 @@
8
8
  *
9
9
  * The catastrophic checks here are structural and need no labels, so they can run over hundreds of
10
10
  * thousands of messages. They are a floor, not a substitute for the labelled evaluation in Phase 4.
11
+ *
12
+ * Whether the input had content is decided by `src/eval/oracle.ts`, which re-parses the message and
13
+ * never touches the extraction selection path. Deriving it from the output instead, which is what
14
+ * this file used to do, made the headline catastrophic counter unable to see total content loss.
11
15
  */
12
16
  var __importDefault = (this && this.__importDefault) || function (mod) {
13
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
14
18
  };
15
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.checkMessage = checkMessage;
16
21
  exports.benchmarkCommand = benchmarkCommand;
17
22
  const node_fs_1 = __importDefault(require("node:fs"));
18
23
  const node_path_1 = __importDefault(require("node:path"));
19
24
  const index_1 = require("../index");
25
+ const parse_1 = require("../mime/parse");
20
26
  const store_1 = require("../corpus/store");
27
+ const oracle_1 = require("../eval/oracle");
28
+ const types_1 = require("../types");
21
29
  const args_1 = require("./args");
30
+ /** Reasons that count as a structural anchor for hiding content. */
22
31
  const ANCHOR_REASONS = new Set([
23
32
  'preceded_by_reply_header',
24
33
  'preceded_by_forward_header',
@@ -27,6 +36,104 @@ const ANCHOR_REASONS = new Set([
27
36
  'matched_parent_message',
28
37
  'matched_thread_ancestor'
29
38
  ]);
39
+ /**
40
+ * Run the structural gate over one raw message.
41
+ *
42
+ * Exported so the committed fixture gate and its tests exercise exactly the code the corpus run
43
+ * uses, rather than a re-implementation that could drift from it.
44
+ */
45
+ async function checkMessage(raw) {
46
+ // Independent parse. The extractor's own view of the message is never consulted here.
47
+ const parsed = await (0, parse_1.parseMessage)(raw);
48
+ const inventory = (0, oracle_1.inventoryVisibleInput)(parsed);
49
+ const groups = (0, oracle_1.requiredCoverageGroups)(parsed);
50
+ const result = await (0, index_1.extract)(raw);
51
+ const visible = result.segments;
52
+ const hidden = result.hiddenSegments;
53
+ const visibleChars = visible.reduce((sum, segment) => sum + segment.text.length, 0);
54
+ const hiddenChars = hidden.reduce((sum, segment) => sum + segment.text.length, 0);
55
+ const warnings = result.warnings.map(warning => warning.code);
56
+ const partsOf = (segments) => new Set(segments.map(segment => (0, types_1.mimePartOf)(segment.source)).filter((part) => part !== null));
57
+ const coverage = (0, oracle_1.coverageOf)(groups, partsOf(visible), partsOf(hidden));
58
+ return {
59
+ missingCoverageGroups: coverage.missing.length,
60
+ alternativesNotEmitted: coverage.alternativesNotEmitted.length,
61
+ coverageHiddenOnly: coverage.hiddenOnly.length,
62
+ inputVisibleChars: inventory.visibleChars,
63
+ visibleChars,
64
+ hiddenChars,
65
+ labels: [...visible, ...hidden].map(segment => segment.type),
66
+ warnings,
67
+ emptyFromNonEmpty: inventory.hasVisibleText && visibleChars + hiddenChars === 0,
68
+ everythingHidden: inventory.hasVisibleText && visibleChars === 0,
69
+ onlyFooterVisible: visible.length > 0 && visible.every(segment => segment.type === 'SIGNATURE' || segment.type === 'DISCLAIMER'),
70
+ hiddenWithoutAnchor: hidden.some(segment => !segment.reasons.some(reason => ANCHOR_REASONS.has(reason))),
71
+ forwardedHidden: hidden.some(segment => segment.type === 'FORWARDED_CONTENT'),
72
+ degradedWithEmptyOutput: warnings.includes('html_parse_error') && visibleChars + hiddenChars === 0
73
+ };
74
+ }
75
+ function newCounters() {
76
+ return {
77
+ messages: 0,
78
+ errors: 0,
79
+ nonEmptyInputs: 0,
80
+ emptyFromNonEmpty: 0,
81
+ missingCoverageGroups: 0,
82
+ messagesMissingCoverage: 0,
83
+ alternativesNotEmitted: 0,
84
+ coverageHiddenOnly: 0,
85
+ everythingHidden: 0,
86
+ onlySignatureVisible: 0,
87
+ hiddenWithoutAnchor: 0,
88
+ forwardedHidden: 0,
89
+ degradedWithEmptyOutput: 0,
90
+ hiddenChars: 0,
91
+ visibleChars: 0,
92
+ labels: new Map(),
93
+ warnings: new Map(),
94
+ durations: []
95
+ };
96
+ }
97
+ function record(counters, check) {
98
+ counters.messages++;
99
+ counters.visibleChars += check.visibleChars;
100
+ counters.hiddenChars += check.hiddenChars;
101
+ if (check.inputVisibleChars > 0) {
102
+ counters.nonEmptyInputs++;
103
+ }
104
+ for (const label of check.labels) {
105
+ counters.labels.set(label, (counters.labels.get(label) ?? 0) + 1);
106
+ }
107
+ // Per message, not per occurrence: a per warning tally divided by the message count is not a
108
+ // percentage of anything, which is the bug the old hidden-without-anchor rate had.
109
+ for (const code of new Set(check.warnings)) {
110
+ counters.warnings.set(code, (counters.warnings.get(code) ?? 0) + 1);
111
+ }
112
+ counters.missingCoverageGroups += check.missingCoverageGroups;
113
+ counters.alternativesNotEmitted += check.alternativesNotEmitted;
114
+ counters.coverageHiddenOnly += check.coverageHiddenOnly;
115
+ if (check.missingCoverageGroups > 0) {
116
+ counters.messagesMissingCoverage++;
117
+ }
118
+ if (check.emptyFromNonEmpty) {
119
+ counters.emptyFromNonEmpty++;
120
+ }
121
+ if (check.everythingHidden) {
122
+ counters.everythingHidden++;
123
+ }
124
+ if (check.onlyFooterVisible) {
125
+ counters.onlySignatureVisible++;
126
+ }
127
+ if (check.hiddenWithoutAnchor) {
128
+ counters.hiddenWithoutAnchor++;
129
+ }
130
+ if (check.forwardedHidden) {
131
+ counters.forwardedHidden++;
132
+ }
133
+ if (check.degradedWithEmptyOutput) {
134
+ counters.degradedWithEmptyOutput++;
135
+ }
136
+ }
30
137
  function percentile(values, fraction) {
31
138
  if (!values.length) {
32
139
  return 0;
@@ -34,99 +141,85 @@ function percentile(values, fraction) {
34
141
  const index = Math.min(values.length - 1, Math.max(0, Math.floor(values.length * fraction)));
35
142
  return values[index] ?? 0;
36
143
  }
37
- async function benchmarkCommand(args) {
144
+ /** Resolve the list of message files to run, either from a directory or from the corpus database. */
145
+ function resolveInputs(args) {
146
+ const dir = (0, args_1.flagOptionalString)(args, 'dir');
147
+ if (dir) {
148
+ if (!node_fs_1.default.existsSync(dir)) {
149
+ return { error: `no such directory: ${dir}`, code: 2 };
150
+ }
151
+ const files = node_fs_1.default
152
+ .readdirSync(dir)
153
+ .filter(name => name.endsWith('.eml'))
154
+ .sort()
155
+ .map(name => node_path_1.default.join(dir, name));
156
+ return { files, label: `dir=${dir}` };
157
+ }
38
158
  const dbPath = (0, args_1.flagString)(args, 'db', 'data/corpus.sqlite');
39
159
  if (!node_fs_1.default.existsSync(dbPath)) {
40
- process.stderr.write(`no corpus database at ${dbPath}. Run "corpus scan" first.\n`);
41
- return 2;
160
+ return { error: `no corpus database at ${dbPath}. Run "corpus scan" first, or pass --dir.`, code: 2 };
42
161
  }
43
- const limit = (0, args_1.flagNumber)(args, 'sample', 2000);
162
+ const limit = (0, args_1.flagPositiveInt)(args, 'sample', 2000);
44
163
  const traffic = (0, args_1.flagString)(args, 'traffic', 'human');
45
164
  const onlyReplies = (0, args_1.flagString)(args, 'replies', 'true') !== 'false';
46
165
  const store = new store_1.CorpusStore(dbPath);
47
- const root = store.queryOne('SELECT root FROM runs ORDER BY id DESC LIMIT 1')?.root;
48
- if (!root) {
49
- process.stderr.write('no completed scan run found\n');
50
- store.close();
51
- return 2;
166
+ try {
167
+ // Only a run that finished cleanly. An interrupted or failed run holds partial output that
168
+ // looks exactly like a small corpus, and reading it as a baseline approves a release against
169
+ // whatever fraction of the messages happened to finish.
170
+ const root = store.latestCompletedRun()?.root;
171
+ if (!root) {
172
+ return { error: 'no completed scan run found', code: 2 };
173
+ }
174
+ // Ordering by path keeps the selection deterministic for a given database and filter.
175
+ const where = ["f.status = 'ok'"];
176
+ if (traffic !== 'all') {
177
+ where.push(`m.traffic = '${traffic.replace(/'/g, '')}'`);
178
+ }
179
+ if (onlyReplies) {
180
+ where.push('m.is_reply = 1');
181
+ }
182
+ const rows = store.query(`SELECT m.path AS path FROM messages m JOIN files f ON f.path = m.path WHERE ${where.join(' AND ')} ORDER BY m.path LIMIT ?`, limit);
183
+ return { files: rows.map(row => node_path_1.default.join(root, row.path)), label: `traffic=${traffic}, replies-only=${onlyReplies}` };
52
184
  }
53
- // Ordering by path keeps the selection deterministic for a given database and filter.
54
- const where = ["f.status = 'ok'"];
55
- if (traffic !== 'all') {
56
- where.push(`m.traffic = '${traffic.replace(/'/g, '')}'`);
185
+ finally {
186
+ store.close();
57
187
  }
58
- if (onlyReplies) {
59
- where.push('m.is_reply = 1');
188
+ }
189
+ async function benchmarkCommand(args) {
190
+ const inputs = resolveInputs(args);
191
+ if ('error' in inputs) {
192
+ process.stderr.write(`${inputs.error}\n`);
193
+ return inputs.code;
60
194
  }
61
- const rows = store.query(`SELECT m.path AS path FROM messages m JOIN files f ON f.path = m.path WHERE ${where.join(' AND ')} ORDER BY m.path LIMIT ?`, limit);
62
- store.close();
63
- if (!rows.length) {
195
+ if (!inputs.files.length) {
64
196
  process.stderr.write('no matching messages\n');
65
197
  return 1;
66
198
  }
67
- const counters = {
68
- messages: 0,
69
- errors: 0,
70
- emptyFromNonEmpty: 0,
71
- everythingHidden: 0,
72
- onlySignatureVisible: 0,
73
- hiddenWithoutAnchor: 0,
74
- forwardedHidden: 0,
75
- hiddenChars: 0,
76
- visibleChars: 0,
77
- labels: new Map(),
78
- durations: []
79
- };
199
+ const counters = newCounters();
80
200
  const rssStart = process.memoryUsage.rss();
81
201
  let rssPeak = rssStart;
82
202
  const started = Date.now();
83
- for (const row of rows) {
203
+ for (const file of inputs.files) {
84
204
  let raw;
85
205
  try {
86
- raw = node_fs_1.default.readFileSync(node_path_1.default.join(root, row.path));
206
+ raw = node_fs_1.default.readFileSync(file);
87
207
  }
88
208
  catch {
89
209
  counters.errors++;
90
210
  continue;
91
211
  }
92
212
  const t0 = process.hrtime.bigint();
93
- let result;
213
+ let check;
94
214
  try {
95
- result = await (0, index_1.extract)(raw);
215
+ check = await checkMessage(raw);
96
216
  }
97
217
  catch {
98
218
  counters.errors++;
99
219
  continue;
100
220
  }
101
221
  counters.durations.push(Number(process.hrtime.bigint() - t0) / 1e6);
102
- counters.messages++;
103
- const visible = result.segments;
104
- const hidden = result.hiddenSegments;
105
- const visibleChars = visible.reduce((sum, segment) => sum + segment.text.length, 0);
106
- const hiddenChars = hidden.reduce((sum, segment) => sum + segment.text.length, 0);
107
- counters.visibleChars += visibleChars;
108
- counters.hiddenChars += hiddenChars;
109
- for (const segment of [...visible, ...hidden]) {
110
- counters.labels.set(segment.type, (counters.labels.get(segment.type) ?? 0) + 1);
111
- }
112
- const hadContent = visibleChars + hiddenChars > 0;
113
- if (hadContent && visibleChars === 0) {
114
- counters.everythingHidden++;
115
- }
116
- if (hadContent && !visible.length) {
117
- counters.emptyFromNonEmpty++;
118
- }
119
- if (visible.length > 0 && visible.every(segment => segment.type === 'SIGNATURE' || segment.type === 'DISCLAIMER')) {
120
- counters.onlySignatureVisible++;
121
- }
122
- for (const segment of hidden) {
123
- if (!segment.reasons.some(reason => ANCHOR_REASONS.has(reason))) {
124
- counters.hiddenWithoutAnchor++;
125
- }
126
- if (segment.type === 'FORWARDED_CONTENT') {
127
- counters.forwardedHidden++;
128
- }
129
- }
222
+ record(counters, check);
130
223
  if (counters.messages % 250 === 0) {
131
224
  rssPeak = Math.max(rssPeak, process.memoryUsage.rss());
132
225
  }
@@ -136,12 +229,12 @@ async function benchmarkCommand(args) {
136
229
  counters.durations.sort((a, b) => a - b);
137
230
  const out = [];
138
231
  const pct = (value) => `${((100 * value) / Math.max(1, counters.messages)).toFixed(2)}%`;
139
- out.push(`sample: ${counters.messages} messages (traffic=${traffic}, replies-only=${onlyReplies})`);
232
+ out.push(`sample: ${counters.messages} messages (${inputs.label})`);
140
233
  out.push(`errors: ${counters.errors}`);
141
234
  out.push('');
142
235
  out.push('THROUGHPUT');
143
236
  out.push(` total ${(elapsed / 1000).toFixed(1)}s`);
144
- out.push(` rate ${((counters.messages / elapsed) * 1000).toFixed(0)} messages/s (single threaded)`);
237
+ out.push(` rate ${((counters.messages / Math.max(1, elapsed)) * 1000).toFixed(0)} messages/s (single threaded)`);
145
238
  out.push(` per message p50 ${percentile(counters.durations, 0.5).toFixed(2)} ms`);
146
239
  out.push(` per message p90 ${percentile(counters.durations, 0.9).toFixed(2)} ms`);
147
240
  out.push(` per message p99 ${percentile(counters.durations, 0.99).toFixed(2)} ms`);
@@ -150,6 +243,7 @@ async function benchmarkCommand(args) {
150
243
  out.push('');
151
244
  out.push('CONTENT');
152
245
  const totalChars = counters.visibleChars + counters.hiddenChars;
246
+ out.push(` non empty inputs ${counters.nonEmptyInputs} (${pct(counters.nonEmptyInputs)})`);
153
247
  out.push(` visible characters ${counters.visibleChars.toLocaleString('en-US')} (${((100 * counters.visibleChars) / Math.max(1, totalChars)).toFixed(1)}%)`);
154
248
  out.push(` hidden characters ${counters.hiddenChars.toLocaleString('en-US')} (${((100 * counters.hiddenChars) / Math.max(1, totalChars)).toFixed(1)}%)`);
155
249
  out.push('');
@@ -157,6 +251,13 @@ async function benchmarkCommand(args) {
157
251
  for (const [label, count] of [...counters.labels].sort((a, b) => b[1] - a[1])) {
158
252
  out.push(` ${label.padEnd(18)} ${String(count).padStart(7)}`);
159
253
  }
254
+ if (counters.warnings.size) {
255
+ out.push('');
256
+ out.push('MESSAGES BY WARNING');
257
+ for (const [code, count] of [...counters.warnings].sort((a, b) => b[1] - a[1])) {
258
+ out.push(` ${code.padEnd(34)} ${String(count).padStart(7)} (${pct(count)})`);
259
+ }
260
+ }
160
261
  out.push('');
161
262
  out.push('CATASTROPHIC CHECKS (structural, no labels required)');
162
263
  out.push(` empty extraction from non empty message ${counters.emptyFromNonEmpty} (${pct(counters.emptyFromNonEmpty)})`);
@@ -164,9 +265,21 @@ async function benchmarkCommand(args) {
164
265
  out.push(` only a footer left visible ${counters.onlySignatureVisible} (${pct(counters.onlySignatureVisible)})`);
165
266
  out.push(` hidden without a structural anchor ${counters.hiddenWithoutAnchor} (${pct(counters.hiddenWithoutAnchor)})`);
166
267
  out.push(` forwarded content hidden ${counters.forwardedHidden} (${pct(counters.forwardedHidden)})`);
268
+ out.push(` degraded HTML with empty output ${counters.degradedWithEmptyOutput} (${pct(counters.degradedWithEmptyOutput)})`);
269
+ out.push(` messages missing a MIME coverage group ${counters.messagesMissingCoverage} (${pct(counters.messagesMissingCoverage)})`);
270
+ out.push('');
271
+ out.push('MIME COVERAGE (informational, not failures)');
272
+ out.push(` missing required groups ${counters.missingCoverageGroups}`);
273
+ out.push(` alternative members not emitted ${counters.alternativesNotEmitted}`);
274
+ out.push(` groups represented only by hidden text ${counters.coverageHiddenOnly}`);
167
275
  process.stdout.write(`${out.join('\n')}\n`);
168
276
  // A non zero exit makes this usable as a regression gate.
169
- const failed = counters.emptyFromNonEmpty + counters.everythingHidden + counters.hiddenWithoutAnchor + counters.forwardedHidden;
277
+ const failed = counters.emptyFromNonEmpty +
278
+ counters.everythingHidden +
279
+ counters.hiddenWithoutAnchor +
280
+ counters.forwardedHidden +
281
+ counters.degradedWithEmptyOutput +
282
+ counters.messagesMissingCoverage;
170
283
  return failed === 0 ? 0 : 1;
171
284
  }
172
285
  //# sourceMappingURL=benchmark.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../src/cli/benchmark.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../src/cli/benchmark.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../../src/cli/corpus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAwD,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAoI/F,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAY9F"}
1
+ {"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../../src/cli/corpus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAiF,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AA2IxH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAY9F"}
@@ -47,6 +47,17 @@ async function scan(args) {
47
47
  return 2;
48
48
  }
49
49
  const dbPath = (0, args_1.flagString)(args, 'db', DEFAULT_DB);
50
+ // Every option is read before anything is printed or opened, so an invalid one fails without a
51
+ // half started run and without a database file to clean up afterwards.
52
+ const options = {
53
+ sample: (0, args_1.flagNonNegativeInt)(args, 'sample', 0),
54
+ seed: (0, args_1.flagString)(args, 'seed', 'default'),
55
+ concurrency: (0, args_1.flagNonNegativeInt)(args, 'concurrency', 0) || undefined,
56
+ resume: (0, args_1.flagBool)(args, 'resume', true),
57
+ maxFileBytes: (0, args_1.flagPositiveInt)(args, 'max-file-mb', 32) * 1024 * 1024,
58
+ timeoutMs: (0, args_1.flagPositiveInt)(args, 'timeout', 30000),
59
+ batchSize: (0, args_1.flagPositiveInt)(args, 'batch', 500)
60
+ };
50
61
  const isTty = process.stderr.isTTY;
51
62
  let lastLength = 0;
52
63
  process.stderr.write(`Scanning ${node_path_1.default.resolve(root)}\n`);
@@ -54,13 +65,7 @@ async function scan(args) {
54
65
  const summary = await (0, scanner_1.scanCorpus)({
55
66
  root,
56
67
  dbPath,
57
- sample: (0, args_1.flagNumber)(args, 'sample', 0),
58
- seed: (0, args_1.flagString)(args, 'seed', 'default'),
59
- concurrency: (0, args_1.flagNumber)(args, 'concurrency', 0) || undefined,
60
- resume: (0, args_1.flagBool)(args, 'resume', true),
61
- maxFileBytes: (0, args_1.flagNumber)(args, 'max-file-mb', 32) * 1024 * 1024,
62
- timeoutMs: (0, args_1.flagNumber)(args, 'timeout', 30000),
63
- batchSize: (0, args_1.flagNumber)(args, 'batch', 500),
68
+ ...options,
64
69
  onProgress: progress => {
65
70
  const line = renderProgress(progress);
66
71
  if (isTty) {
@@ -92,7 +97,7 @@ function stats(args) {
92
97
  process.stdout.write(`${JSON.stringify(computed, null, 2)}\n`);
93
98
  return 0;
94
99
  }
95
- const root = store.queryOne('SELECT root FROM runs ORDER BY id DESC LIMIT 1')?.root ?? 'unknown';
100
+ const root = store.latestCompletedRun()?.root ?? 'unknown';
96
101
  const report = (0, stats_1.renderReport)(computed, root);
97
102
  const out = (0, args_1.flagOptionalString)(args, 'out');
98
103
  if (out) {
@@ -1 +1 @@
1
- {"version":3,"file":"corpus.js","sourceRoot":"","sources":["../../src/cli/corpus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"corpus.js","sourceRoot":"","sources":["../../src/cli/corpus.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"disagreements.d.ts","sourceRoot":"","sources":["../../src/cli/disagreements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AA2CjE,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA0F5E"}
1
+ {"version":3,"file":"disagreements.d.ts","sourceRoot":"","sources":["../../src/cli/disagreements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,EAAmD,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AA2C1F,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA6F5E"}
@@ -63,16 +63,19 @@ async function disagreementsCommand(args) {
63
63
  process.stderr.write(`unknown direction: ${direction}. Use one of ${Object.keys(DIRECTIONS).join(', ')}\n`);
64
64
  return 2;
65
65
  }
66
- const limit = (0, args_1.flagNumber)(args, 'limit', 20);
67
- const context = (0, args_1.flagNumber)(args, 'context', 2);
66
+ const limit = (0, args_1.flagPositiveInt)(args, 'limit', 20);
67
+ const context = (0, args_1.flagNonNegativeInt)(args, 'context', 2);
68
68
  const store = new store_1.CorpusStore(dbPath);
69
- const root = store.queryOne('SELECT root FROM runs ORDER BY id DESC LIMIT 1')?.root;
69
+ // Only a run that finished cleanly. An interrupted or failed run holds partial output that
70
+ // looks exactly like a small corpus, and reading it as a baseline approves a release against
71
+ // whatever fraction of the messages happened to finish.
72
+ const root = store.latestCompletedRun()?.root;
70
73
  if (!root) {
71
74
  process.stderr.write('no completed scan run found\n');
72
75
  store.close();
73
76
  return 2;
74
77
  }
75
- const runFilter = (0, args_1.flagNumber)(args, 'run', 0);
78
+ const runFilter = (0, args_1.flagNonNegativeInt)(args, 'run', 0);
76
79
  const rows = store.query(`SELECT path, block_index, representation, label, confidence, baseline_label, baseline_conf, baseline_reasons, char_count
77
80
  FROM annotations
78
81
  WHERE ${clause} ${runFilter ? 'AND run_id = ' + runFilter : ''}
@@ -1 +1 @@
1
- {"version":3,"file":"disagreements.js","sourceRoot":"","sources":["../../src/cli/disagreements.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"disagreements.js","sourceRoot":"","sources":["../../src/cli/disagreements.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;AAqDH,oDA6FC;AAhJD,sDAAyB;AACzB,0DAA6B;AAC7B,6CAAmD;AACnD,2CAA8C;AAC9C,yCAA6C;AAC7C,wDAA2D;AAC3D,wDAA2D;AAE3D,iCAA0F;AAc1F,MAAM,UAAU,GAA2B;IACvC,SAAS,EAAE,+EAA+E;IAC1F,KAAK,EAAE,+EAA+E;IACtF,OAAO,EAAE,yEAAyE;IAClF,GAAG,EAAE,YAAY;CACpB,CAAC;AAEF,0FAA0F;AAC1F,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,OAAe;IAClD,MAAM,OAAO,GAAG,MAAM,IAAA,oBAAY,EAAC,iBAAE,CAAC,YAAY,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,IAAI,GAA2E,IAAI,CAAC;IACxF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;YACrD,SAAS;QACb,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACzF,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YAClF,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACzI,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;QAClF,CAAC;IACL,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,+BAAiB,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,+BAAiB,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AAC5I,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,IAAgB;IACvD,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC;IAC5D,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,iBAAU,EAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,SAAS,gBAAgB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5G,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,sBAAe,EAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAA,yBAAkB,EAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,mBAAW,CAAC,MAAM,CAAC,CAAC;IACtC,2FAA2F;IAC3F,6FAA6F;IAC7F,wDAAwD;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACtD,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,yBAAkB,EAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CACpB;;iBAES,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE;;iBAEtD,EACT,KAAK,CACR,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,2BAA2B,CAAC,CAAC;QACjE,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,iCAAiC,CAAC,CAAC;IACvE,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;QACtG,GAAG,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAC1F,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEb,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC;gBACD,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACL,MAAM,GAAG,EAAE,CAAC;YAChB,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9D,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,WAAW,MAAM,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,iBAAiB,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7I,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,gBAAgB,IAAI,MAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,KAAK,EAAE,CAAC;YACR,GAAG,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,QAAQ,CAAC,UAAU,eAAe,KAAK,CAAC,QAAQ,CAAC,eAAe,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/H,CAAC;QAED,wFAAwF;QACxF,8CAA8C;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC;QAClE,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC9C,SAAS;YACb,CAAC;YACD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACnD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAClE,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACvI,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,OAAO,CAAC,CAAC;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/cli/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,OAAO,EAAoC,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AA8E3E,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAuJvE"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/cli/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,OAAO,EAA4C,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAgFnF,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA+KvE"}
@@ -88,9 +88,12 @@ async function evaluateCommand(args) {
88
88
  const model = (0, args_1.flagString)(args, 'model', 'gpt-5.6-sol');
89
89
  const useHistory = (0, args_1.flagBool)(args, 'history', false);
90
90
  const groupBy = (0, args_1.flagString)(args, 'group-by', 'client');
91
- const limit = (0, args_1.flagNumber)(args, 'limit', 0);
91
+ const limit = (0, args_1.flagNonNegativeInt)(args, 'limit', 0);
92
92
  const store = new store_1.CorpusStore(dbPath);
93
- const root = store.queryOne('SELECT root FROM runs ORDER BY id DESC LIMIT 1')?.root;
93
+ // Only a run that finished cleanly. An interrupted or failed run holds partial output that
94
+ // looks exactly like a small corpus, and reading it as a baseline approves a release against
95
+ // whatever fraction of the messages happened to finish.
96
+ const root = store.latestCompletedRun()?.root;
94
97
  if (!root) {
95
98
  process.stderr.write('no completed scan run found\n');
96
99
  store.close();
@@ -98,7 +101,7 @@ async function evaluateCommand(args) {
98
101
  }
99
102
  // Latest annotation per (path, block) for the chosen model, so re-annotated messages do not
100
103
  // count twice.
101
- const reference = store.query(`SELECT a.path, a.block_index, a.label, a.char_count, m.client, m.lang, m.reply_style
104
+ const reference = store.query(`SELECT a.path, a.block_index, a.mime_part, a.label, a.char_count, m.client, m.lang, m.reply_style
102
105
  FROM annotations a
103
106
  JOIN annotation_runs r ON r.id = a.run_id
104
107
  JOIN messages m ON m.path = a.path
@@ -161,15 +164,36 @@ async function evaluateCommand(args) {
161
164
  }
162
165
  // Map every reference block to the prediction covering it. Segments merge adjacent blocks,
163
166
  // so a block is matched by its index falling inside a segment's block range.
167
+ //
168
+ // Keyed per MIME part, not by block index alone. Block indices are section-local, so in a
169
+ // multipart message with several body sections two segments legitimately start at index 0,
170
+ // and a flat map silently kept only the last of them. Older annotations predate the part
171
+ // being recorded; those fall back to a single unnamed bucket, which is exactly the previous
172
+ // behaviour for the single section messages they came from.
164
173
  const predictions = new Map();
174
+ const bucketFor = (part) => {
175
+ let bucket = predictions.get(part);
176
+ if (!bucket) {
177
+ bucket = new Map();
178
+ predictions.set(part, bucket);
179
+ }
180
+ return bucket;
181
+ };
165
182
  for (const segment of [...result.segments, ...result.hiddenSegments]) {
166
- predictions.set(segment.source.blockIndex, { label: segment.type, hidden: segment.visibility === 'hide' });
183
+ const blockIndex = (0, types_1.blockIndexOf)(segment.source);
184
+ if (blockIndex !== null) {
185
+ bucketFor((0, types_1.mimePartOf)(segment.source) ?? '').set(blockIndex, { label: segment.type, hidden: segment.visibility === 'hide' });
186
+ }
167
187
  }
168
- // Segments start at a block index and run to the next one, so fill forward.
169
- const ordered = [...predictions.keys()].sort((a, b) => a - b);
170
- const lookup = (index) => {
188
+ const ordered = new Map([...predictions].map(([part, bucket]) => [part, [...bucket.keys()].sort((a, b) => a - b)]));
189
+ // Segments start at a block index and run to the next one, so fill forward within the part.
190
+ const lookup = (part, index) => {
191
+ // An annotation with no recorded part matches whichever part the output actually used,
192
+ // which for a single section message is the only one there is.
193
+ const key = part !== null && predictions.has(part) ? part : (predictions.keys().next().value ?? '');
194
+ const starts = ordered.get(key) ?? [];
171
195
  let best = null;
172
- for (const start of ordered) {
196
+ for (const start of starts) {
173
197
  if (start <= index) {
174
198
  best = start;
175
199
  }
@@ -177,12 +201,12 @@ async function evaluateCommand(args) {
177
201
  break;
178
202
  }
179
203
  }
180
- return best === null ? null : (predictions.get(best) ?? null);
204
+ return best === null ? null : (predictions.get(key)?.get(best) ?? null);
181
205
  };
182
206
  const first = references[0];
183
207
  const group = groupBy === 'lang' ? (first?.lang ?? 'unknown') : groupBy === 'reply-style' ? (first?.reply_style ?? 'unknown') : (first?.client ?? 'unknown');
184
208
  for (const item of references) {
185
- const prediction = lookup(item.block_index);
209
+ const prediction = lookup(item.mime_part, item.block_index);
186
210
  rows.push({
187
211
  path: relPath,
188
212
  blockIndex: item.block_index,