@generacy-ai/orchestrator 0.8.0 → 0.9.0

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 (112) hide show
  1. package/dist/config/loader.d.ts.map +1 -1
  2. package/dist/config/loader.js +15 -0
  3. package/dist/config/loader.js.map +1 -1
  4. package/dist/config/schema.d.ts +30 -0
  5. package/dist/config/schema.d.ts.map +1 -1
  6. package/dist/config/schema.js +13 -1
  7. package/dist/config/schema.js.map +1 -1
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +3 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/routes/health.d.ts +7 -0
  13. package/dist/routes/health.d.ts.map +1 -1
  14. package/dist/routes/health.js +5 -0
  15. package/dist/routes/health.js.map +1 -1
  16. package/dist/routes/internal-relay-events.d.ts +2 -2
  17. package/dist/routes/internal-relay-events.d.ts.map +1 -1
  18. package/dist/routes/internal-relay-events.js +12 -0
  19. package/dist/routes/internal-relay-events.js.map +1 -1
  20. package/dist/routes/retained-tunnel-event.d.ts +20 -0
  21. package/dist/routes/retained-tunnel-event.d.ts.map +1 -0
  22. package/dist/routes/retained-tunnel-event.js +67 -0
  23. package/dist/routes/retained-tunnel-event.js.map +1 -0
  24. package/dist/server.d.ts.map +1 -1
  25. package/dist/server.js +168 -27
  26. package/dist/server.js.map +1 -1
  27. package/dist/services/adaptive-poll-controller.d.ts +75 -0
  28. package/dist/services/adaptive-poll-controller.d.ts.map +1 -0
  29. package/dist/services/adaptive-poll-controller.js +96 -0
  30. package/dist/services/adaptive-poll-controller.js.map +1 -0
  31. package/dist/services/clarification-answer-monitor-service.d.ts +71 -0
  32. package/dist/services/clarification-answer-monitor-service.d.ts.map +1 -0
  33. package/dist/services/clarification-answer-monitor-service.js +366 -0
  34. package/dist/services/clarification-answer-monitor-service.js.map +1 -0
  35. package/dist/services/failure-fingerprint-tracker.d.ts +28 -0
  36. package/dist/services/failure-fingerprint-tracker.d.ts.map +1 -0
  37. package/dist/services/failure-fingerprint-tracker.js +38 -0
  38. package/dist/services/failure-fingerprint-tracker.js.map +1 -0
  39. package/dist/services/index.d.ts +1 -0
  40. package/dist/services/index.d.ts.map +1 -1
  41. package/dist/services/index.js +3 -0
  42. package/dist/services/index.js.map +1 -1
  43. package/dist/services/label-monitor-service.d.ts +2 -2
  44. package/dist/services/label-monitor-service.d.ts.map +1 -1
  45. package/dist/services/label-monitor-service.js +33 -16
  46. package/dist/services/label-monitor-service.js.map +1 -1
  47. package/dist/services/merge-conflict-monitor-service.d.ts +1 -1
  48. package/dist/services/merge-conflict-monitor-service.d.ts.map +1 -1
  49. package/dist/services/merge-conflict-monitor-service.js +33 -13
  50. package/dist/services/merge-conflict-monitor-service.js.map +1 -1
  51. package/dist/services/pr-feedback-monitor-service.d.ts +1 -1
  52. package/dist/services/pr-feedback-monitor-service.d.ts.map +1 -1
  53. package/dist/services/pr-feedback-monitor-service.js +33 -16
  54. package/dist/services/pr-feedback-monitor-service.js.map +1 -1
  55. package/dist/services/relay-bridge.d.ts +1 -0
  56. package/dist/services/relay-bridge.d.ts.map +1 -1
  57. package/dist/services/relay-bridge.js +21 -0
  58. package/dist/services/relay-bridge.js.map +1 -1
  59. package/dist/services/smee-channel-resolver.d.ts +60 -0
  60. package/dist/services/smee-channel-resolver.d.ts.map +1 -0
  61. package/dist/services/smee-channel-resolver.js +177 -0
  62. package/dist/services/smee-channel-resolver.js.map +1 -0
  63. package/dist/services/webhook-setup-service.d.ts +115 -111
  64. package/dist/services/webhook-setup-service.d.ts.map +1 -1
  65. package/dist/services/webhook-setup-service.js +377 -209
  66. package/dist/services/webhook-setup-service.js.map +1 -1
  67. package/dist/types/api.d.ts +3 -0
  68. package/dist/types/api.d.ts.map +1 -1
  69. package/dist/types/api.js +1 -0
  70. package/dist/types/api.js.map +1 -1
  71. package/dist/types/monitor.d.ts +15 -2
  72. package/dist/types/monitor.d.ts.map +1 -1
  73. package/dist/worker/clarification-markers.d.ts +62 -0
  74. package/dist/worker/clarification-markers.d.ts.map +1 -1
  75. package/dist/worker/clarification-markers.js +101 -0
  76. package/dist/worker/clarification-markers.js.map +1 -1
  77. package/dist/worker/clarification-poster.d.ts +102 -6
  78. package/dist/worker/clarification-poster.d.ts.map +1 -1
  79. package/dist/worker/clarification-poster.js +299 -89
  80. package/dist/worker/clarification-poster.js.map +1 -1
  81. package/dist/worker/claude-cli-worker.d.ts +7 -0
  82. package/dist/worker/claude-cli-worker.d.ts.map +1 -1
  83. package/dist/worker/claude-cli-worker.js +3 -0
  84. package/dist/worker/claude-cli-worker.js.map +1 -1
  85. package/dist/worker/failure-fingerprint.d.ts +41 -0
  86. package/dist/worker/failure-fingerprint.d.ts.map +1 -0
  87. package/dist/worker/failure-fingerprint.js +75 -0
  88. package/dist/worker/failure-fingerprint.js.map +1 -0
  89. package/dist/worker/label-manager.d.ts +42 -0
  90. package/dist/worker/label-manager.d.ts.map +1 -1
  91. package/dist/worker/label-manager.js +108 -4
  92. package/dist/worker/label-manager.js.map +1 -1
  93. package/dist/worker/phase-loop.d.ts +30 -0
  94. package/dist/worker/phase-loop.d.ts.map +1 -1
  95. package/dist/worker/phase-loop.js +124 -26
  96. package/dist/worker/phase-loop.js.map +1 -1
  97. package/dist/worker/pr-feedback-handler.d.ts +13 -0
  98. package/dist/worker/pr-feedback-handler.d.ts.map +1 -1
  99. package/dist/worker/pr-feedback-handler.js +48 -0
  100. package/dist/worker/pr-feedback-handler.js.map +1 -1
  101. package/dist/worker/stage-comment-manager.d.ts +5 -0
  102. package/dist/worker/stage-comment-manager.d.ts.map +1 -1
  103. package/dist/worker/stage-comment-manager.js +8 -1
  104. package/dist/worker/stage-comment-manager.js.map +1 -1
  105. package/dist/worker/terminal-label-op-error.d.ts +1 -1
  106. package/dist/worker/terminal-label-op-error.d.ts.map +1 -1
  107. package/dist/worker/terminal-label-op-error.js.map +1 -1
  108. package/dist/worker/types.d.ts +31 -0
  109. package/dist/worker/types.d.ts.map +1 -1
  110. package/dist/worker/types.js +11 -0
  111. package/dist/worker/types.js.map +1 -1
  112. package/package.json +5 -5
@@ -8,8 +8,41 @@
8
8
  */
9
9
  import { readdirSync, readFileSync, writeFileSync } from 'node:fs';
10
10
  import { join } from 'node:path';
11
- import { isTrustedCommentAuthor, tryLoadCommentTrustConfig, } from '@generacy-ai/workflow-engine';
12
- import { commentCarriesQuestionMarker, matchClarificationQuestionMarker, } from './clarification-markers.js';
11
+ import { isTrustedCommentAuthor, tryLoadCommentTrustConfig, PENDING_ANSWER_LITERAL, isPendingAnswerValue, } from '@generacy-ai/workflow-engine';
12
+ import { commentCarriesQuestionMarker, matchMachineMarker, } from './clarification-markers.js';
13
+ /**
14
+ * #958 FR-005 / FR-006 — pre-parse pass over a comment body that drops every
15
+ * line whose first non-EOL character is `>` (the column-0 quote rule already
16
+ * codified for markers in `clarification-markers.ts`).
17
+ *
18
+ * Returns `stripped` — the body with all quoted lines filtered out — plus a
19
+ * `headBeforeFirstQuote` slice preserved for FR-006 diagnostics. The parser
20
+ * runs against `stripped` so:
21
+ * - a quoted `> ### Q2: …` cannot bleed into Q1's capture (FR-005), AND
22
+ * - a valid trailing `Q2: …` sitting after a quoted block still integrates
23
+ * (a naive "cut at first quote" would discard it — spec §Observed B row 2).
24
+ *
25
+ * The `> `-prefix predicate is the same one `clarification-markers.ts` uses
26
+ * for column-0 marker matching — a leading tab / space disqualifies. Blank
27
+ * lines (`>` followed by nothing) also drop.
28
+ */
29
+ export function stripQuotedLines(body) {
30
+ const lines = body.split('\n');
31
+ const nonQuoted = lines.filter((line) => !line.startsWith('>'));
32
+ const firstQuotedIdx = lines.findIndex((line) => line.startsWith('>'));
33
+ const headBeforeFirstQuote = firstQuotedIdx === -1 ? body : lines.slice(0, firstQuotedIdx).join('\n');
34
+ return {
35
+ stripped: nonQuoted.join('\n'),
36
+ headBeforeFirstQuote,
37
+ };
38
+ }
39
+ /**
40
+ * Regex escape helper for building the write-back pattern with a shared
41
+ * literal — `PENDING_ANSWER_LITERAL` contains `*` metacharacters.
42
+ */
43
+ function escapeRegExp(s) {
44
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
45
+ }
13
46
  /**
14
47
  * Resolve cluster bot login from env vars (identity.ts chain). The
15
48
  * `gh api /user` fallback is intentionally skipped here — it fails on
@@ -73,14 +106,71 @@ const UNTRUSTED_ANSWER_MARKER_PREFIX = '<!-- generacy-untrusted-answer:';
73
106
  function untrustedAnswerMarker(commentId) {
74
107
  return `${UNTRUSTED_ANSWER_MARKER_PREFIX}${commentId} -->`;
75
108
  }
109
+ /**
110
+ * Shared opener fragment for a `Q<n>` clarification-answer block (#949).
111
+ *
112
+ * Composes into three sites, all in this file:
113
+ * 1. The outer regex opener in `parseAnswersFromComments`.
114
+ * 2. The outer regex terminator lookahead in `parseAnswersFromComments`
115
+ * (via `QN_TERMINATOR_LOOKAHEAD`) — MUST stay in lockstep with (1)
116
+ * or multi-question cockpit bodies open exactly one block (Q1's lazy
117
+ * `(.*?)` swallows Q2..Qn to EOF).
118
+ * 3. `commentMatchesAnswerPattern` (via `QN_OPENER_PATTERN_NONCAPTURING`)
119
+ * — used by the FR-013 untrusted-author explainer gate.
120
+ *
121
+ * DELIBERATELY NOT USED by `sourceHadQuestionHeadings` — that discriminator
122
+ * requires a colon after `Q<n>` because it separates engine-authored
123
+ * question comments from cockpit answer delimiters (see comment at that
124
+ * site).
125
+ *
126
+ * Grammar accepted (line-anchored via `(?:^|\n)`):
127
+ * [heading] [**]Q<n>[**] (colon-less — heading REQUIRED)
128
+ * [heading] [**]Q<n>[**]: (colon — heading optional; bare Q<n>: OK)
129
+ *
130
+ * Trailing captures use `[^\n]*` (not `.*`) so the opener does not devour
131
+ * body content across newlines under the outer regex's `s` flag.
132
+ *
133
+ * Two arms of the disjunction produce four capture groups:
134
+ * [1] Q number (colon-less arm)
135
+ * [2] topic/trailing (colon-less arm)
136
+ * [3] Q number (colon-bearing arm)
137
+ * [4] answer/trailing (colon-bearing arm)
138
+ * Consumers use `pickQnMatch()` to resolve to a single `{ qn, trailing }`.
139
+ */
140
+ const QN_OPENER_PATTERN = '(?:^|\\n)(?:(?:#{1,6}\\s+(?:\\*\\*)?Q(\\d+)(?:\\*\\*)?(?::\\s*([^\\n]*))?)|(?:(?:\\*\\*)?Q(\\d+)(?:\\*\\*)?:\\s*([^\\n]*)))';
141
+ /**
142
+ * Non-capturing variant of `QN_OPENER_PATTERN` for boolean predicates.
143
+ * Every `(\d+)` numeric-capture replaced with `(?:\d+)` and every
144
+ * `([^\n]*)` trailing capture replaced with `(?:[^\n]*)`.
145
+ */
146
+ const QN_OPENER_PATTERN_NONCAPTURING = '(?:^|\\n)(?:(?:#{1,6}\\s+(?:\\*\\*)?Q(?:\\d+)(?:\\*\\*)?(?::\\s*(?:[^\\n]*))?)|(?:(?:\\*\\*)?Q(?:\\d+)(?:\\*\\*)?:\\s*(?:[^\\n]*)))';
147
+ /**
148
+ * Block terminator lookahead used by the outer regex in
149
+ * `parseAnswersFromComments`. Requires a leading `\n` (no `^` alternation)
150
+ * so it cannot re-anchor mid-line inside a captured body.
151
+ *
152
+ * Coupling invariant: MUST accept the same set of next-opener shapes that
153
+ * `QN_OPENER_PATTERN` accepts as openers. Widen this in exact lockstep
154
+ * with the opener or multi-question bodies silently open one block.
155
+ */
156
+ const QN_TERMINATOR_LOOKAHEAD = '(?=(?:\\n(?:(?:#{1,6}\\s+(?:\\*\\*)?Q\\d+(?:\\*\\*)?(?::[^\\n]*)?)|(?:(?:\\*\\*)?Q\\d+(?:\\*\\*)?:[^\\n]*)))|$)';
157
+ /**
158
+ * Resolve `{ qn, trailing }` from the two disjunction arms of
159
+ * `QN_OPENER_PATTERN`. Exactly one arm matches per opener occurrence.
160
+ */
161
+ function pickQnMatch(m) {
162
+ const num = m[1] ?? m[3];
163
+ const trail = m[2] ?? m[4] ?? '';
164
+ return { qn: parseInt(num, 10), trailing: trail };
165
+ }
76
166
  /**
77
167
  * Detect whether a comment body matches the `Q<N>:` answer pattern that
78
168
  * `parseAnswersFromComments` would attempt to consume. Used to decide
79
169
  * whether an untrusted-comment skip warrants an explainer bot comment
80
170
  * (matched) or log-only treatment (unmatched, generic drive-by).
81
171
  */
82
- function commentMatchesAnswerPattern(body) {
83
- return /(?:^|\n)(?:#{1,6}\s+)?(?:\*\*)?Q\d+(?:\*\*)?:\s*.+/.test(body);
172
+ export function commentMatchesAnswerPattern(body) {
173
+ return new RegExp(QN_OPENER_PATTERN_NONCAPTURING).test(body);
84
174
  }
85
175
  // ---------------------------------------------------------------------------
86
176
  // Helpers
@@ -186,7 +276,7 @@ export function isQuestionComment(body) {
186
276
  * **Question**: ...
187
277
  * **Options**: (optional)
188
278
  * - A) ...
189
- * **Answer**: *Pending*
279
+ * **Answer**: PENDING_ANSWER_LITERAL
190
280
  * ```
191
281
  */
192
282
  export function parseClarifications(content) {
@@ -207,25 +297,37 @@ export function parseClarifications(content) {
207
297
  // Extract question
208
298
  const questionMatch = section.match(/\*\*Question\*\*:\s*(.+?)(?=\n\*\*|\n###|$)/s);
209
299
  const question = questionMatch ? questionMatch[1].trim() : '';
210
- // Extract options
211
- const optionsMatch = section.match(/\*\*Options\*\*:\s*\n((?:- .+\n?)+)/);
300
+ // Extract options. The block runs to the next `**Field**:` line, `###`
301
+ // heading, or EOF — the same delimiters Context and Question use above.
302
+ // An option's description may hard-wrap or carry indented sub-bullets;
303
+ // such continuation lines belong to the option above them. Matching only
304
+ // consecutive `- ` lines would end the block at the first continuation,
305
+ // truncating that option mid-sentence and dropping every option after it.
306
+ const optionsMatch = section.match(/\*\*Options\*\*:\s*\n([\s\S]+?)(?=\n\*\*|\n###|$)/);
212
307
  let options;
213
308
  if (optionsMatch) {
214
309
  options = [];
215
- const optionLines = optionsMatch[1].trim().split('\n');
216
- for (const line of optionLines) {
217
- const optMatch = line.match(/^- ([A-Z])[):]\s*(.+)$/);
310
+ for (const line of optionsMatch[1].trim().split('\n')) {
311
+ const optMatch = line.match(/^- ([A-Z])[):]\s*(.*)$/);
218
312
  if (optMatch) {
219
- options.push({ label: optMatch[1], description: optMatch[2].trim() });
313
+ options.push({ label: optMatch[1], description: optMatch[2] });
314
+ }
315
+ else if (options.length > 0) {
316
+ options[options.length - 1].description += `\n${line}`;
220
317
  }
221
318
  }
319
+ for (const opt of options)
320
+ opt.description = opt.description.trim();
321
+ options = options.filter((opt) => opt.description !== '');
222
322
  if (options.length === 0)
223
323
  options = undefined;
224
324
  }
225
- // Check answer status
325
+ // Check answer status. Empty / whitespace-only / any `[…]`-bracketed
326
+ // placeholder / literal PENDING_ANSWER_LITERAL all read as "not
327
+ // answered" (FR-012).
226
328
  const answerMatch = section.match(/\*\*Answer\*\*:\s*(.+)/);
227
329
  const answerText = answerMatch ? answerMatch[1].trim() : '';
228
- const answered = !!answerText && answerText !== '*Pending*';
330
+ const answered = !!answerText && !isPendingAnswerValue(answerText);
229
331
  const q = {
230
332
  number,
231
333
  topic,
@@ -290,26 +392,40 @@ export function formatComment(questions, issueNumber) {
290
392
  // hasPendingClarifications
291
393
  // ---------------------------------------------------------------------------
292
394
  /**
293
- * Check whether the clarify phase produced pending questions.
395
+ * #958 FR-007 — Check whether the clarify phase produced pending questions.
396
+ *
397
+ * Fail-closed contract: unknown states pause on a human gate. The three
398
+ * unknown branches all return `true`:
399
+ * - missing spec directory
400
+ * - `readFileSync` throws (unreadable / permission / I/O)
401
+ * - non-empty file content with zero parsed questions (parse failure)
294
402
  *
295
- * Returns `true` if `clarifications.md` exists in the spec directory and
296
- * contains at least one unanswered question. Used by the phase loop to
297
- * evaluate the `on-questions` gate condition.
403
+ * Legit empty file (`content.trim() === ''`) is the ONE branch that returns
404
+ * `false`: a `clarifications.md` file with no questions at all is a valid
405
+ * post-clarify state.
406
+ *
407
+ * Returns `true` when at least one parsed question is unanswered.
298
408
  */
299
409
  export function hasPendingClarifications(checkoutPath, issueNumber) {
300
410
  const specsDir = join(checkoutPath, 'specs');
301
411
  const specDir = findSpecDir(specsDir, issueNumber);
302
412
  if (!specDir)
303
- return false;
413
+ return true;
304
414
  const clarificationsPath = join(specsDir, specDir, 'clarifications.md');
305
415
  let content;
306
416
  try {
307
417
  content = readFileSync(clarificationsPath, 'utf-8');
308
418
  }
309
419
  catch {
310
- return false;
420
+ return true;
311
421
  }
422
+ // Legit empty file — no questions is a valid resolved state.
423
+ if (content.trim() === '')
424
+ return false;
312
425
  const questions = parseClarifications(content);
426
+ // Non-empty content that parsed to zero questions ⇒ parse failure; pause.
427
+ if (questions.length === 0)
428
+ return true;
313
429
  return questions.some((q) => !q.answered);
314
430
  }
315
431
  // ---------------------------------------------------------------------------
@@ -323,13 +439,26 @@ export function hasPendingClarifications(checkoutPath, issueNumber) {
323
439
  * `**Answer: value**` or `**Answer**: value` line and returns the answer
324
440
  * portion. Returns `undefined` if no embedded answer is found.
325
441
  */
326
- function extractEmbeddedAnswer(text) {
327
- // Format: **Answer: value** with optional trailing text
442
+ export function extractEmbeddedAnswer(text) {
443
+ // Format: **Answer:** value (#949 cockpit dialect; colon INSIDE bold).
444
+ // Placed BEFORE m1/m2 because `**Answer:**` is strictly more specific
445
+ // than `**Answer: ...**` — the `\*\*` right after the colon disambiguates.
446
+ const m0 = text.match(/\*\*Answer:\*\*\s*(.+?)$/m);
447
+ if (m0) {
448
+ let answer = m0[1].trim();
449
+ // Q1→B: if a `**Rationale:** …` line follows inside the same captured
450
+ // block, join it onto the answer so clarifications.md preserves the *why*.
451
+ const r = text.match(/\n\*\*Rationale:\*\*\s*(.+?)$/m);
452
+ if (r)
453
+ answer = `${answer}\nRationale: ${r[1].trim()}`;
454
+ return answer;
455
+ }
456
+ // Format: **Answer: value** with optional trailing text (engine dialect)
328
457
  const m1 = text.match(/\*\*Answer:\s*(.+?)\*\*(.*)$/m);
329
458
  if (m1) {
330
459
  return (m1[1] + m1[2]).trim();
331
460
  }
332
- // Format: **Answer**: value
461
+ // Format: **Answer**: value (engine dialect — colon OUTSIDE bold)
333
462
  const m2 = text.match(/\*\*Answer\*\*:\s*(.+)$/m);
334
463
  if (m2) {
335
464
  return m2[1].trim();
@@ -337,60 +466,84 @@ function extractEmbeddedAnswer(text) {
337
466
  return undefined;
338
467
  }
339
468
  /**
340
- * Parse answers from GitHub issue comments.
469
+ * #958 — Parse answers from GitHub issue comments.
341
470
  *
342
- * Scans comment bodies for patterns like `Q1: answer text` and extracts
343
- * answers keyed by question number. Later answers for the same question
344
- * override earlier ones (last wins).
471
+ * Two properties this function guarantees over the pre-#958 version:
472
+ * 1. **FR-005 quote-stripping**: each comment body is split at the first
473
+ * `>`-prefixed line via `stripQuotedLines()`. Only the head (before the
474
+ * first quoted line) is parsed for `Q<n>:` answers. A quoted
475
+ * `> ### Q2: …` cannot bleed into Q1's capture, and a trailing quoted
476
+ * `> **Question**: …` cannot discard a valid leading answer (FR-006).
477
+ * 2. **Bounding on quoted headers**: the regex terminator also matches a
478
+ * `> `-quoted `Q<n>:` line so any residual quoted question in the head
479
+ * acts as a boundary (belt-and-suspenders after quote-stripping).
345
480
  *
346
- * Supports two answer formats:
347
- * - Simple: `Q1: answer text`
348
- * - Heading: `### Q1: Topic\n**Answer: B** — explanation`
481
+ * Note: the L488 `.includes('**Question**:')` sniff is deleted. Authorship
482
+ * is decided by `viewerDidAuthor` in the caller (FR-001).
349
483
  *
350
- * For heading format, the actual answer is extracted from the embedded
351
- * `**Answer**` line rather than the topic name after `Q1:`.
484
+ * Supports two answer formats:
485
+ * - Simple: `Q1: answer text`
486
+ * - Heading: `### Q1: Topic\n**Answer: B** — explanation`
352
487
  */
353
- function parseAnswersFromComments(comments, questionNumbers, logger) {
488
+ export function parseAnswersFromComments(comments, questionNumbers, _logger) {
354
489
  const answers = new Map();
355
490
  for (const comment of comments) {
356
- const sourceHadQuestionHeadings = /(?:^|\n)###\s+Q\d+:/.test(comment.body);
357
- // FR-005: anchor the `Q<n>:` opener at line start (^ or newline) so that
358
- // mid-prose references like "as per Q1: yes" do not capture as answers.
359
- const regex = /(?:^|\n)(?:#{1,6}\s+)?(?:\*\*)?Q(\d+)(?:\*\*)?:\s*(.*?)(?=(?:\n(?:#{1,6}\s+)?(?:\*\*)?Q\d+(?:\*\*)?:)|$)/gs;
491
+ // FR-005/FR-006 (#958): drop every `> `-quoted line, then parse the
492
+ // surviving body. Quoted `> ### Q<n>:` cannot bleed into a prior capture;
493
+ // a valid `Q<n>:` sitting after a quoted block still integrates.
494
+ const { stripped } = stripQuotedLines(comment.body);
495
+ const body = stripped;
496
+ // FR-004 discriminator (#949 Q5→C): the colon here is DELIBERATE and
497
+ // load-bearing. It separates engine-authored question comments (which
498
+ // use `### Q1: Topic` shape, per `formatComment` above) from cockpit
499
+ // answer-block delimiters (which use `### Q1` — NO colon). Removing the
500
+ // colon or folding this pattern into `QN_OPENER_PATTERN` would cause the
501
+ // `TRANSITION_WITH_QUESTION_HEADINGS` warn (in the caller) to fire on
502
+ // every legitimate cockpit integration — a 100%-rate false positive.
503
+ // Keep colon-required. Computed on the quote-stripped body so a quoted
504
+ // `> ### Q1:` heading does not read as a live transition signal.
505
+ const sourceHadQuestionHeadings = /(?:^|\n)###\s+Q\d+:/.test(body);
506
+ // FR-005: opener is line-anchored via `(?:^|\n)` inside QN_OPENER_PATTERN
507
+ // so mid-prose references like "as per Q1: yes" do not capture as
508
+ // answers. Colon-less opener additionally requires a markdown heading
509
+ // (per #949 Q2→A) so a bare `Q1\n…` cannot open a block; this is what
510
+ // lets cockpit's `### Q1` answer blocks integrate.
511
+ //
512
+ // Capture-group layout (from QN_OPENER_PATTERN's two disjunction arms
513
+ // plus the outer body `(.*?)`):
514
+ // [1] Q number (colon-less arm)
515
+ // [2] topic/trailing (colon-less arm)
516
+ // [3] Q number (colon-bearing arm)
517
+ // [4] answer/trailing (colon-bearing arm)
518
+ // [5] block body between opener and terminator
519
+ const regex = new RegExp(`${QN_OPENER_PATTERN}(.*?)${QN_TERMINATOR_LOOKAHEAD}`, 'gs');
360
520
  let match;
361
- while ((match = regex.exec(comment.body)) !== null) {
362
- const numStr = match[1];
363
- const answerStr = match[2];
364
- if (!numStr || answerStr === undefined)
521
+ while ((match = regex.exec(body)) !== null) {
522
+ const { qn, trailing } = pickQnMatch(match);
523
+ if (Number.isNaN(qn))
365
524
  continue;
366
- const questionNumber = parseInt(numStr, 10);
367
- let answer = answerStr.trim();
368
- // When Q is in a heading (### Q1: Topic), the captured text starts with
369
- // the topic name, not the answer. Look for an embedded **Answer** line.
370
- if (answer.includes('\n')) {
371
- const embedded = extractEmbeddedAnswer(answer);
372
- if (embedded) {
373
- answer = embedded;
374
- }
375
- }
376
- // FR-002: defense-in-depth if the captured answer contains
377
- // question-side markup, treat it as a leaked bot question body, not an
378
- // answer. Skip and warn so operators can spot near-misses.
379
- if (answer.includes('**Question**:') || answer.includes('**Context**:')) {
380
- logger.warn({
381
- code: 'SKIPPED_SUSPICIOUS_ANSWER',
382
- commentId: comment.id,
383
- questionNumber,
384
- excerpt: answer.slice(0, 120),
385
- }, 'Skipped suspicious clarification answer (contains question-side markup)');
386
- continue;
387
- }
388
- // Skip placeholder text that is not a real answer
389
- if (answer && answer !== '*Pending*' && questionNumbers.includes(questionNumber)) {
390
- answers.set(questionNumber, {
525
+ const bodyText = match[5] ?? '';
526
+ // Combine the opener's trailing (topic/answer on the opener line) with
527
+ // the body (subsequent lines up to the terminator). This mirrors the
528
+ // old single `.*?` capture semantics for downstream extraction.
529
+ const combined = trailing + bodyText;
530
+ // #958 FR-001: the `**Question**:`/`**Context**:` content-sniff is
531
+ // deliberately NOT applied here. Authorship (viewerDidAuthor) is the
532
+ // gate, decided in the caller — not the content of the comment.
533
+ // Prefer an embedded `**Answer**` extraction (cockpit or engine
534
+ // dialect) over the raw trimmed block. For a bare `Q1: X` shape,
535
+ // extraction returns undefined and we fall through to `combined.trim()`.
536
+ const embedded = extractEmbeddedAnswer(combined);
537
+ const answer = embedded ?? combined.trim();
538
+ // FR-012 (#958): broadened pending tolerance — empty, whitespace-only,
539
+ // the canonical PENDING_ANSWER_LITERAL, and any `[…]`-bracketed
540
+ // placeholder are all treated as not-an-answer.
541
+ if (!isPendingAnswerValue(answer) && questionNumbers.includes(qn)) {
542
+ answers.set(qn, {
391
543
  answer,
392
544
  sourceCommentId: comment.id,
393
545
  sourceHadQuestionHeadings,
546
+ sourceViewerDidAuthor: comment.viewerDidAuthor,
394
547
  });
395
548
  }
396
549
  }
@@ -499,7 +652,7 @@ export async function integrateClarificationAnswers(context, logger) {
499
652
  // would wave those through to the parser.
500
653
  const scanCandidates = [];
501
654
  for (const c of comments) {
502
- const markerPrefix = matchClarificationQuestionMarker(c.body);
655
+ const markerPrefix = matchMachineMarker(c.body);
503
656
  if (markerPrefix !== undefined) {
504
657
  logger.debug({
505
658
  event: 'clarification-answer-scanner-marker-excluded',
@@ -507,7 +660,7 @@ export async function integrateClarificationAnswers(context, logger) {
507
660
  author: c.author,
508
661
  markerPrefix,
509
662
  issueNumber,
510
- }, 'Excluded from answer-scanner via question marker');
663
+ }, 'Excluded from answer-scanner via machine marker');
511
664
  continue;
512
665
  }
513
666
  scanCandidates.push(c);
@@ -538,10 +691,6 @@ export async function integrateClarificationAnswers(context, logger) {
538
691
  }
539
692
  }
540
693
  }
541
- // FR-102 pre-filter has already dropped engine-authored questions comments;
542
- // parseAnswersFromComments's FR-002 content sniff still catches unmarked
543
- // question-shaped text as a second line of defense (FR-106).
544
- const answerComments = trustedComments;
545
694
  // Post explainer comments for untrusted Q<N>: answers, before parsing.
546
695
  // Fire-and-forget: failures are non-fatal.
547
696
  await postUntrustedAnswerExplainers({
@@ -553,40 +702,101 @@ export async function integrateClarificationAnswers(context, logger) {
553
702
  skipped: skippedForExplainer,
554
703
  logger,
555
704
  });
705
+ // #976 — every trusted, marker-free comment is a candidate answer,
706
+ // regardless of viewerDidAuthor. Same-account trust is delegated to
707
+ // `isTrustedCommentAuthor` (self-authored → trusted per comment-trust.ts).
708
+ // FR-004 asymmetric fail-close on `sourceHadQuestionHeadings` still keys
709
+ // off per-answer `sourceViewerDidAuthor` (a shape-check, not identity).
710
+ const answerComments = trustedComments;
556
711
  const answers = parseAnswersFromComments(answerComments, pendingNumbers, logger);
557
712
  if (answers.size === 0) {
558
713
  return { integrated: 0, reason: 'no-answers' };
559
714
  }
560
- // 4. Update the file content — replace *Pending* with actual answers
561
- // for each matched question
715
+ // 4. Update the file content — replace `PENDING_ANSWER_LITERAL` with actual
716
+ // answers for each matched question. FR-004 asymmetric fail-close: if a
717
+ // cluster-self answer trips `TRANSITION_WITH_QUESTION_HEADINGS`, abort
718
+ // the entire poll's integration; if a human comment trips it, skip only
719
+ // the offending question.
562
720
  let updatedContent = content;
721
+ const integratedNumbers = new Set();
722
+ const parseFailures = [];
563
723
  for (const [questionNum, parsed] of answers) {
564
- // Match the answer line within the correct question section.
565
- // The pattern finds ### Q{N}: ... **Answer**: *Pending* and replaces
566
- // the *Pending* part with the actual answer text.
567
- const pattern = new RegExp(`(### Q${questionNum}:[\\s\\S]*?\\*\\*Answer\\*\\*:\\s*)\\*Pending\\*`);
568
- const previousContent = updatedContent;
569
- updatedContent = updatedContent.replace(pattern, `$1${parsed.answer}`);
570
- // FR-004: residual-race detector — if the transition actually happened
571
- // (updatedContent changed) AND the source comment had `### Q<n>:` headings,
572
- // warn. Both FR-001 and FR-002 let this comment through, so a matching
573
- // structure here is a signal of an uncovered failure vector.
574
- if (updatedContent !== previousContent && parsed.sourceHadQuestionHeadings) {
724
+ // Detect FR-004 case: source comment carried `### Q<n>:` headings.
725
+ if (parsed.sourceHadQuestionHeadings) {
726
+ if (parsed.sourceViewerDidAuthor === true) {
727
+ // Cluster-self AND question-headings unknown-extent malfunction.
728
+ // Abort the entire poll's integration; leave the gate armed.
729
+ logger.warn({
730
+ code: 'TRANSITION_WITH_QUESTION_HEADINGS',
731
+ commentId: parsed.sourceCommentId,
732
+ issueNumber,
733
+ questionNumber: questionNum,
734
+ excerpt: parsed.answer.slice(0, 120),
735
+ }, 'Cluster-self answer contains question headings — aborting integration (FR-004 fail-closed)');
736
+ return {
737
+ integrated: 0,
738
+ reason: 'aborted-cluster-self-detector',
739
+ pendingAfter: pendingQuestions.length,
740
+ };
741
+ }
742
+ // Human comment tripped it — skip only this question, keep others.
575
743
  logger.warn({
576
744
  code: 'TRANSITION_WITH_QUESTION_HEADINGS',
577
745
  commentId: parsed.sourceCommentId,
578
746
  issueNumber,
579
747
  questionNumber: questionNum,
580
- answer: parsed.answer.slice(0, 120),
581
- }, 'Integrated answer from a comment containing question headings — possible bot self-answer');
748
+ excerpt: parsed.answer.slice(0, 120),
749
+ }, 'Human answer contains question headings — skipping only this question (FR-004)');
750
+ parseFailures.push({
751
+ questionNumber: questionNum,
752
+ reason: 'transition-with-question-headings',
753
+ });
754
+ continue;
755
+ }
756
+ // Match the answer line within the correct question section. The pattern
757
+ // finds `### Q{N}: ... **Answer**: <PENDING_ANSWER_LITERAL>` and replaces
758
+ // the literal with the actual answer text. Escaped because
759
+ // `PENDING_ANSWER_LITERAL` contains regex metacharacters.
760
+ const pattern = new RegExp(`(### Q${questionNum}:[\\s\\S]*?\\*\\*Answer\\*\\*:\\s*)${escapeRegExp(PENDING_ANSWER_LITERAL)}`);
761
+ const previousContent = updatedContent;
762
+ updatedContent = updatedContent.replace(pattern, `$1${parsed.answer}`);
763
+ if (updatedContent !== previousContent) {
764
+ integratedNumbers.add(questionNum);
765
+ }
766
+ else {
767
+ parseFailures.push({
768
+ questionNumber: questionNum,
769
+ reason: 'no-source-comment',
770
+ });
771
+ }
772
+ }
773
+ // Any pending question with no attempted answer at all → parse-failure entry
774
+ // so FR-010 reporting can surface it.
775
+ for (const p of pendingQuestions) {
776
+ if (!answers.has(p.number)) {
777
+ parseFailures.push({ questionNumber: p.number, reason: 'no-source-comment' });
582
778
  }
583
779
  }
584
780
  if (updatedContent === content) {
585
- return { integrated: 0, reason: 'no-changes' };
781
+ const result = {
782
+ integrated: 0,
783
+ reason: 'no-changes',
784
+ pendingAfter: pendingQuestions.length,
785
+ };
786
+ if (parseFailures.length > 0)
787
+ result.parseFailures = parseFailures;
788
+ return result;
586
789
  }
587
790
  writeFileSync(clarificationsPath, updatedContent);
588
- logger.info({ count: answers.size, issueNumber }, 'Integrated GitHub answers into clarifications.md');
589
- return { integrated: answers.size };
791
+ logger.info({ count: integratedNumbers.size, issueNumber }, 'Integrated GitHub answers into clarifications.md');
792
+ const pendingAfter = pendingQuestions.length - integratedNumbers.size;
793
+ const result = {
794
+ integrated: integratedNumbers.size,
795
+ pendingAfter,
796
+ };
797
+ if (parseFailures.length > 0)
798
+ result.parseFailures = parseFailures;
799
+ return result;
590
800
  }
591
801
  // ---------------------------------------------------------------------------
592
802
  // postClarifications
@@ -1 +1 @@
1
- {"version":3,"file":"clarification-poster.js","sourceRoot":"","sources":["../../src/worker/clarification-poster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clarification-poster.js","sourceRoot":"","sources":["../../src/worker/clarification-poster.ts"],"names":[],"mappings":"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"}