@cat-factory/integrations 0.101.3 → 0.102.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 (52) hide show
  1. package/dist/index.d.ts +5 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/modules/environments/EnvironmentHandlerSeeder.js +0 -0
  6. package/dist/modules/environments/EnvironmentHandlerSeeder.js.map +1 -1
  7. package/dist/modules/environments/EnvironmentProvisioningService.js +1 -1
  8. package/dist/modules/environments/EnvironmentProvisioningService.js.map +1 -1
  9. package/dist/modules/tasks/GitHubIssuesProvider.d.ts +6 -0
  10. package/dist/modules/tasks/GitHubIssuesProvider.d.ts.map +1 -1
  11. package/dist/modules/tasks/GitHubIssuesProvider.js +7 -0
  12. package/dist/modules/tasks/GitHubIssuesProvider.js.map +1 -1
  13. package/dist/modules/tasks/JiraProvider.d.ts +6 -0
  14. package/dist/modules/tasks/JiraProvider.d.ts.map +1 -1
  15. package/dist/modules/tasks/JiraProvider.js +7 -0
  16. package/dist/modules/tasks/JiraProvider.js.map +1 -1
  17. package/dist/modules/tasks/LinearTaskProvider.d.ts +6 -0
  18. package/dist/modules/tasks/LinearTaskProvider.d.ts.map +1 -1
  19. package/dist/modules/tasks/LinearTaskProvider.js +7 -0
  20. package/dist/modules/tasks/LinearTaskProvider.js.map +1 -1
  21. package/dist/modules/tasks/TaskConnectionService.d.ts +63 -1
  22. package/dist/modules/tasks/TaskConnectionService.d.ts.map +1 -1
  23. package/dist/modules/tasks/TaskConnectionService.js +156 -2
  24. package/dist/modules/tasks/TaskConnectionService.js.map +1 -1
  25. package/dist/modules/tasks/TrackerWebhookService.d.ts +102 -0
  26. package/dist/modules/tasks/TrackerWebhookService.d.ts.map +1 -0
  27. package/dist/modules/tasks/TrackerWebhookService.js +245 -0
  28. package/dist/modules/tasks/TrackerWebhookService.js.map +1 -0
  29. package/dist/modules/tasks/intakeMatch.logic.d.ts +21 -0
  30. package/dist/modules/tasks/intakeMatch.logic.d.ts.map +1 -0
  31. package/dist/modules/tasks/intakeMatch.logic.js +43 -0
  32. package/dist/modules/tasks/intakeMatch.logic.js.map +1 -0
  33. package/dist/modules/tasks/webhook/adapters.d.ts +31 -0
  34. package/dist/modules/tasks/webhook/adapters.d.ts.map +1 -0
  35. package/dist/modules/tasks/webhook/adapters.js +259 -0
  36. package/dist/modules/tasks/webhook/adapters.js.map +1 -0
  37. package/dist/modules/tasks/webhook/hmac.d.ts +34 -0
  38. package/dist/modules/tasks/webhook/hmac.d.ts.map +1 -0
  39. package/dist/modules/tasks/webhook/hmac.js +98 -0
  40. package/dist/modules/tasks/webhook/hmac.js.map +1 -0
  41. package/dist/modules/writeback/IssueWritebackService.d.ts +17 -1
  42. package/dist/modules/writeback/IssueWritebackService.d.ts.map +1 -1
  43. package/dist/modules/writeback/IssueWritebackService.js +21 -1
  44. package/dist/modules/writeback/IssueWritebackService.js.map +1 -1
  45. package/dist/modules/writeback/reviewQuestions.logic.d.ts.map +1 -1
  46. package/dist/modules/writeback/reviewQuestions.logic.js +6 -1
  47. package/dist/modules/writeback/reviewQuestions.logic.js.map +1 -1
  48. package/dist/modules/writeback/reviewReplies.logic.d.ts +90 -0
  49. package/dist/modules/writeback/reviewReplies.logic.d.ts.map +1 -0
  50. package/dist/modules/writeback/reviewReplies.logic.js +262 -0
  51. package/dist/modules/writeback/reviewReplies.logic.js.map +1 -0
  52. package/package.json +4 -4
@@ -0,0 +1,34 @@
1
+ export interface HmacHeaderScheme {
2
+ /** Lower-cased header the digest arrives in (e.g. `x-hub-signature-256`). */
3
+ header: string;
4
+ /**
5
+ * Literal prefix that must precede the digest (`sha256=`), or `''` for a bare one (Linear).
6
+ * A scheme WITH a prefix rejects a header that lacks it rather than treating the whole value
7
+ * as the digest — otherwise `sha1=<40 hex>` from a mis-set vendor option would be decoded and
8
+ * compared as if it were a SHA-256, which fails opaquely instead of visibly.
9
+ */
10
+ prefix: string;
11
+ }
12
+ /**
13
+ * Verify a raw delivery body against `secret` using the vendor's header scheme.
14
+ *
15
+ * Resolves `false` for every rejection rather than throwing: a receiver turns this into a terse
16
+ * 401 and must not distinguish "no header" from "bad digest" to a caller. Two guards are
17
+ * load-bearing:
18
+ *
19
+ * - **Empty secret fails closed, and does so FIRST.** An empty HMAC key is a key an attacker also
20
+ * has, so an unconfigured connection must never accept a delivery it can verify by construction.
21
+ * The guard also has to precede `importKey`, which REJECTS a zero-length key with a `DataError`
22
+ * — a throw here would reach the tracker as a 500 (and a redelivery loop) instead of the terse
23
+ * 401 the receiver intends.
24
+ * - **The comparison is timing-safe.** A byte-at-a-time early return leaks the expected digest to
25
+ * anyone willing to send a few thousand deliveries.
26
+ */
27
+ export declare function verifyHmacSignature(secret: string, raw: ArrayBuffer, headers: Record<string, string>, scheme: HmacHeaderScheme): Promise<boolean>;
28
+ /** Decode a delivery's raw bytes as JSON, or null when it is not parseable JSON. */
29
+ export declare function parseJsonBody(raw: ArrayBuffer): Record<string, unknown> | null;
30
+ /** Read a nested string off an untrusted payload (`obj.a.b`), or null. */
31
+ export declare function readString(payload: unknown, ...path: string[]): string | null;
32
+ /** Read a nested object off an untrusted payload, or null. */
33
+ export declare function readObject(payload: unknown, ...path: string[]): Record<string, unknown> | null;
34
+ //# sourceMappingURL=hmac.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmac.d.ts","sourceRoot":"","sources":["../../../../src/modules/tasks/webhook/hmac.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAiBD,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAS9E;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAW7E;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAS9F"}
@@ -0,0 +1,98 @@
1
+ // Inbound-webhook signature verification shared by every tracker adapter.
2
+ //
3
+ // All three vendors sign HMAC-SHA256 over the RAW request body and differ only in which header
4
+ // carries the digest and whether it is prefixed (`sha256=<hex>` on GitHub/Jira, a bare `<hex>` on
5
+ // Linear). So the crypto lives here once and each adapter supplies its header name + prefix —
6
+ // rather than three near-verbatim copies, which is exactly how a fix to one silently misses the
7
+ // others (the lesson `captured-command.ts` records on the harness side).
8
+ //
9
+ // This is the same Web Crypto construction `WebCryptoWebhookVerifier` (`@cat-factory/server`) uses
10
+ // for GitHub VCS deliveries, re-expressed here because `@cat-factory/server` sits ABOVE this
11
+ // package: importing it would invert the layering, the same reason `webhookSignature.ts` re-derives
12
+ // the outbound signature instead of reaching for `HmacSigner`.
13
+ /**
14
+ * Verify a raw delivery body against `secret` using the vendor's header scheme.
15
+ *
16
+ * Resolves `false` for every rejection rather than throwing: a receiver turns this into a terse
17
+ * 401 and must not distinguish "no header" from "bad digest" to a caller. Two guards are
18
+ * load-bearing:
19
+ *
20
+ * - **Empty secret fails closed, and does so FIRST.** An empty HMAC key is a key an attacker also
21
+ * has, so an unconfigured connection must never accept a delivery it can verify by construction.
22
+ * The guard also has to precede `importKey`, which REJECTS a zero-length key with a `DataError`
23
+ * — a throw here would reach the tracker as a 500 (and a redelivery loop) instead of the terse
24
+ * 401 the receiver intends.
25
+ * - **The comparison is timing-safe.** A byte-at-a-time early return leaks the expected digest to
26
+ * anyone willing to send a few thousand deliveries.
27
+ */
28
+ export async function verifyHmacSignature(secret, raw, headers, scheme) {
29
+ if (!secret)
30
+ return false;
31
+ const presented = headers[scheme.header];
32
+ if (!presented)
33
+ return false;
34
+ if (scheme.prefix && !presented.startsWith(scheme.prefix))
35
+ return false;
36
+ const provided = hexToBytes(presented.slice(scheme.prefix.length).trim());
37
+ if (!provided)
38
+ return false;
39
+ const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
40
+ const computed = new Uint8Array(await crypto.subtle.sign('HMAC', key, raw));
41
+ return timingSafeEqual(provided, computed);
42
+ }
43
+ /** Constant-time byte comparison (length included in the constant-time property). */
44
+ function timingSafeEqual(a, b) {
45
+ if (a.length !== b.length)
46
+ return false;
47
+ let diff = 0;
48
+ for (let i = 0; i < a.length; i++)
49
+ diff |= a[i] ^ b[i];
50
+ return diff === 0;
51
+ }
52
+ function hexToBytes(hex) {
53
+ if (hex.length === 0 || hex.length % 2 !== 0 || /[^0-9a-fA-F]/.test(hex))
54
+ return null;
55
+ const bytes = new Uint8Array(hex.length / 2);
56
+ for (let i = 0; i < bytes.length; i++)
57
+ bytes[i] = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);
58
+ return bytes;
59
+ }
60
+ /** Decode a delivery's raw bytes as JSON, or null when it is not parseable JSON. */
61
+ export function parseJsonBody(raw) {
62
+ try {
63
+ const value = JSON.parse(new TextDecoder().decode(raw));
64
+ return value && typeof value === 'object' && !Array.isArray(value)
65
+ ? value
66
+ : null;
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ /** Read a nested string off an untrusted payload (`obj.a.b`), or null. */
73
+ export function readString(payload, ...path) {
74
+ let cursor = payload;
75
+ for (const key of path) {
76
+ if (!cursor || typeof cursor !== 'object')
77
+ return null;
78
+ cursor = cursor[key];
79
+ }
80
+ return typeof cursor === 'string' && cursor.length > 0
81
+ ? cursor
82
+ : typeof cursor === 'number'
83
+ ? String(cursor)
84
+ : null;
85
+ }
86
+ /** Read a nested object off an untrusted payload, or null. */
87
+ export function readObject(payload, ...path) {
88
+ let cursor = payload;
89
+ for (const key of path) {
90
+ if (!cursor || typeof cursor !== 'object')
91
+ return null;
92
+ cursor = cursor[key];
93
+ }
94
+ return cursor && typeof cursor === 'object' && !Array.isArray(cursor)
95
+ ? cursor
96
+ : null;
97
+ }
98
+ //# sourceMappingURL=hmac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmac.js","sourceRoot":"","sources":["../../../../src/modules/tasks/webhook/hmac.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type Block, type Clock, type IssueWritebackProvider, type PullRequestRef, type ReviewQuestionPost, type ReviewQuestionPostOutcome, type ReviewQuestionPostRepository, type TaskRepository, type TrackerSettingsRepository } from '@cat-factory/kernel';
1
+ import { type Block, type Clock, type IssueWritebackProvider, type PullRequestRef, type ReviewQuestionPost, type ReviewQuestionPostOutcome, type ReviewQuestionPostRepository, type TaskRepository, type TaskSourceKind, type ReviewReplyAck, type TrackerSettingsRepository } from '@cat-factory/kernel';
2
2
  import type { FetchLike, JiraConnection, LinearConnection } from '../tracker/TicketTrackerService.js';
3
3
  export interface IssueWritebackServiceDependencies {
4
4
  trackerSettingsRepository: TrackerSettingsRepository;
@@ -65,6 +65,22 @@ export declare class IssueWritebackService implements IssueWritebackProvider {
65
65
  }): Promise<void>;
66
66
  postQuestions(workspaceId: string, blockId: string, questions: string[]): Promise<void>;
67
67
  postReviewQuestions(workspaceId: string, block: Block, post: ReviewQuestionPost): Promise<ReviewQuestionPostOutcome>;
68
+ /**
69
+ * Acknowledge a ticket reply on the very issue it arrived on.
70
+ *
71
+ * Deliberately NOT marker-gated, unlike {@link postReviewQuestions}: an ack is the terminal
72
+ * effect of an ingest that is ALREADY claimed exactly once by `tracker_comment_ingests`, so a
73
+ * second marker here would guard nothing and add a second thing to reason about. It is also not
74
+ * gated on the workspace writeback settings — a reply is an explicit request for a response, not
75
+ * an unsolicited courtesy.
76
+ *
77
+ * Best-effort throughout: the reply is applied and settled before this runs, so a tracker outage
78
+ * costs the acknowledgement, never the answer.
79
+ */
80
+ postReviewReplyAck(workspaceId: string, issue: {
81
+ source: TaskSourceKind;
82
+ externalId: string;
83
+ }, ack: ReviewReplyAck): Promise<void>;
68
84
  /** Run a writeback per issue, isolating failures so one bad issue can't block the rest. */
69
85
  private forEachIssue;
70
86
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IssueWritebackService.d.ts","sourceRoot":"","sources":["../../../src/modules/writeback/IssueWritebackService.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,KAAK,EACV,KAAK,KAAK,EACV,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EAEjC,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC/B,MAAM,qBAAqB,CAAA;AAe5B,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,oCAAoC,CAAA;AAkB3C,MAAM,WAAW,iCAAiC;IAChD,yBAAyB,EAAE,yBAAyB,CAAA;IACpD,cAAc,EAAE,cAAc,CAAA;IAC9B;;;;;;;;;;;OAWG;IACH,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/F;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7E;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5F;;;OAGG;IACH,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAC/E;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IACnF,wFAAwF;IACxF,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;;;OAIG;IACH,4BAA4B,CAAC,EAAE,4BAA4B,CAAA;IAC3D;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,yFAAyF;AACzF,eAAO,MAAM,yBAAyB,gBAAgB,CAAA;AAEtD,qBAAa,qBAAsB,YAAW,sBAAsB;IACtD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,iCAAiC,EAAI;IAElE,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9F;IAEK,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9F;IAEK,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAClD,OAAO,CAAC,IAAI,CAAC,CAaf;IAEK,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB5F;IAEK,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,yBAAyB,CAAC,CAgEpC;IAED,2FAA2F;YAC7E,YAAY;IAO1B;;;;;;;OAOG;YACW,OAAO;YAsBP,OAAO;IAcrB;;;;OAIG;YACW,cAAc;IAsB5B;;;;;;;OAOG;YACW,aAAa;IAiB3B;;;OAGG;YACW,gBAAgB;IAqB9B;;;;OAIG;YACW,aAAa;IAiB3B;;;;OAIG;YACW,cAAc;IAiB5B;;;;OAIG;YACW,WAAW;CA+B1B"}
1
+ {"version":3,"file":"IssueWritebackService.d.ts","sourceRoot":"","sources":["../../../src/modules/writeback/IssueWritebackService.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { redactSecrets, resolveWritebackFlag, REVIEW_QUESTION_POST_CLAIM_TTL_MS, } from '@cat-factory/kernel';
2
2
  import { issueRefFor, renderReviewQuestionsComment } from './reviewQuestions.logic.js';
3
+ import { renderReviewReplyAck } from './reviewReplies.logic.js';
3
4
  import { buildJiraCommentPayload, pickTransitionByCategory, } from '../tracker/jira.writeback.logic.js';
4
5
  import { LINEAR_COMMENT_CREATE_MUTATION, LINEAR_ISSUE_ID_QUERY, LINEAR_ISSUE_RESOLVE_LOOKUP_QUERY, LINEAR_ISSUE_UPDATE_MUTATION, buildLinearCommentVariables, buildLinearStateUpdateVariables, pickStateIdByType, } from '../tracker/linear.writeback.logic.js';
5
6
  import { linearAuthFromCredentials, postLinearGraphql } from '../shared/linear.client.js';
@@ -149,6 +150,21 @@ export class IssueWritebackService {
149
150
  }
150
151
  return outcome;
151
152
  }
153
+ /**
154
+ * Acknowledge a ticket reply on the very issue it arrived on.
155
+ *
156
+ * Deliberately NOT marker-gated, unlike {@link postReviewQuestions}: an ack is the terminal
157
+ * effect of an ingest that is ALREADY claimed exactly once by `tracker_comment_ingests`, so a
158
+ * second marker here would guard nothing and add a second thing to reason about. It is also not
159
+ * gated on the workspace writeback settings — a reply is an explicit request for a response, not
160
+ * an unsolicited courtesy.
161
+ *
162
+ * Best-effort throughout: the reply is applied and settled before this runs, so a tracker outage
163
+ * costs the acknowledgement, never the answer.
164
+ */
165
+ async postReviewReplyAck(workspaceId, issue, ack) {
166
+ await this.comment(workspaceId, issue, renderReviewReplyAck(ack));
167
+ }
152
168
  /** Run a writeback per issue, isolating failures so one bad issue can't block the rest. */
153
169
  async forEachIssue(issues, fn) {
154
170
  await Promise.all(issues.map((issue) => fn(issue).catch(() => { })));
@@ -161,7 +177,11 @@ export class IssueWritebackService {
161
177
  * once someone wires it, a throw is a failure to retry on the next replay, and neither may be
162
178
  * recorded as `posted`.
163
179
  */
164
- async comment(workspaceId, issue, body) {
180
+ async comment(workspaceId,
181
+ // Narrowed to the natural key rather than the whole record: the ticket-reply ack addresses the
182
+ // issue the comment ARRIVED on, which it knows as `(source, externalId)` off the delivery and
183
+ // has no reason to re-read from the projection.
184
+ issue, body) {
165
185
  if (issue.source === 'github') {
166
186
  if (!this.deps.commentOnGitHubIssue)
167
187
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"IssueWritebackService.js","sourceRoot":"","sources":["../../../src/modules/writeback/IssueWritebackService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IssueWritebackService.js","sourceRoot":"","sources":["../../../src/modules/writeback/IssueWritebackService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reviewQuestions.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/writeback/reviewQuestions.logic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAiBzE;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,CAAC,GAAG,MAAM,CAEpF;AAsCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CA+B7E"}
1
+ {"version":3,"file":"reviewQuestions.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/writeback/reviewQuestions.logic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAqBzE;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,CAAC,GAAG,MAAM,CAEpF;AAsCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAgC7E"}
@@ -1,4 +1,8 @@
1
1
  import { hostMarkdown, redactSecrets } from '@cat-factory/kernel';
2
+ // The marker every platform-authored tracker comment opens with. Shared with the reply renderer
3
+ // (and the ingest guard that keys off it) so the two can never emit different prefixes — a comment
4
+ // this side stopped marking is a comment the reply path would start ingesting as a human's.
5
+ import { PLATFORM_COMMENT_MARKER } from './reviewReplies.logic.js';
2
6
  // Pure rendering + keying for the headless clarification loop's question writeback (slice 2a
3
7
  // of `docs/initiatives/headless-clarification-loop.md`). Kept out of `IssueWritebackService`
4
8
  // so the comment body — the one part of the feature a human actually reads — is unit-testable
@@ -70,7 +74,8 @@ export function renderReviewQuestionsComment(post) {
70
74
  const shown = post.findings.slice(0, MAX_FINDINGS);
71
75
  const omitted = post.findings.length - shown.length;
72
76
  const lines = [
73
- '🤖 cat-factory paused this work to get its requirements straight. It raised ' +
77
+ PLATFORM_COMMENT_MARKER +
78
+ 'cat-factory paused this work to get its requirements straight. It raised ' +
74
79
  `${post.findings.length} open question${post.findings.length === 1 ? '' : 's'} ` +
75
80
  `(review pass ${post.iteration} of ${post.maxIterations}) and the run is waiting for ` +
76
81
  'answers before any code is written.',
@@ -1 +1 @@
1
- {"version":3,"file":"reviewQuestions.logic.js","sourceRoot":"","sources":["../../../src/modules/writeback/reviewQuestions.logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGjE,6FAA6F;AAC7F,6FAA6F;AAC7F,8FAA8F;AAC9F,6FAA6F;AAC7F,oCAAoC;AACpC,EAAE;AACF,+FAA+F;AAC/F,+FAA+F;AAC/F,qFAAqF;AACrF,0FAA0F;AAC1F,+FAA+F;AAC/F,+FAA+F;AAC/F,qFAAqF;AACrF,2CAA2C;AAE3C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgD;IAC1E,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,CAAA;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAE7B,qDAAqD;AACrD,MAAM,eAAe,GAAG,GAAG,CAAA;AAE3B,+FAA+F;AAC/F,MAAM,YAAY,GAAG,EAAE,CAAA;AAEvB;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAEhC,gGAAgG;AAChG,MAAM,eAAe,GAAG,eAAe,CAAA;AAEvC;4EAC4E;AAC5E,SAAS,UAAU,CAAC,KAAa,EAAE,GAAW;IAC5C,OAAO,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,GAAW;IAC3C,OAAO,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;AAC5D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAwB;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IACnD,MAAM,KAAK,GAAG;QACZ,8EAA8E;YAC5E,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,iBAAiB,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;YAChF,gBAAgB,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,aAAa,+BAA+B;YACtF,qCAAqC;QACvC,EAAE;KACH,CAAA;IACD,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,OAAO,OAAO,CAAC,EAAE,UAAU,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,EACvE,EAAE,EACF,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC3C,EAAE,CACH,CAAA;IACH,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CACR,IAAI,OAAO,oBAAoB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,6BAA6B;YAClF,SAAS,IAAI,CAAC,KAAK,yBAAyB,EAC9C,EAAE,CACH,CAAA;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CACR,4DAA4D;QAC1D,uBAAuB,IAAI,CAAC,KAAK,0DAA0D;QAC3F,4EAA4E,CAC/E,CAAA;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACrC,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,CAAC,MAAM,IAAI,iBAAiB;QAAE,OAAO,IAAI,CAAA;IACjD,4FAA4F;IAC5F,oFAAoF;IACpF,MAAM,IAAI,GAAG,iBAAiB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAA;IAC3D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,eAAe,EAAE,CAAA;AAC/D,CAAC"}
1
+ {"version":3,"file":"reviewQuestions.logic.js","sourceRoot":"","sources":["../../../src/modules/writeback/reviewQuestions.logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import type { ReviewReplyAck, ReviewQuestionFinding, TrackerCommentAuthor } from '@cat-factory/kernel';
2
+ /**
3
+ * The prefix every comment the PLATFORM writes onto a tracker issue opens with — the question
4
+ * echo and the reply acknowledgement alike. Exported so both renderers use the one constant and
5
+ * {@link isPlatformAuthoredComment} can never drift from what they emit.
6
+ */
7
+ export declare const PLATFORM_COMMENT_MARKER = "\uD83E\uDD16 ";
8
+ /**
9
+ * Whether a comment body is one WE wrote.
10
+ *
11
+ * The identity checks in {@link isAllowedReplyAuthor} are the first line of defence, but they are
12
+ * not complete by construction: Linear flags no bots on a comment author (`bot: false`, honestly
13
+ * reported) and the default allow-list admits any author, so on Linear the platform's own
14
+ * acknowledgement is an ALLOWED author commenting on an issue it is linked to. Today no loop
15
+ * results, but only because no line of an ack happens to begin with the trigger — an invariant
16
+ * spread across two renderers, enforced by nothing, and one edit away from an unbounded
17
+ * comment loop (each ack carries a fresh comment id, so the ingest claim cannot stop it).
18
+ *
19
+ * So the guard is STRUCTURAL rather than incidental: a body whose first non-blank line opens with
20
+ * the marker is ours, and is never ingested. It costs one string comparison and removes the whole
21
+ * class of failure, on every vendor, whatever a future renderer says.
22
+ */
23
+ export declare function isPlatformAuthoredComment(body: string): boolean;
24
+ /** A command line the parser recognised. */
25
+ export type ReviewReplyCommand = {
26
+ verb: 'answer';
27
+ itemId: string;
28
+ text: string;
29
+ line: string;
30
+ } | {
31
+ verb: 'dismiss';
32
+ itemId: string;
33
+ line: string;
34
+ } | {
35
+ verb: 'proceed';
36
+ line: string;
37
+ } | {
38
+ verb: 'stop';
39
+ line: string;
40
+ } | {
41
+ verb: 'extra-round';
42
+ line: string;
43
+ } | {
44
+ verb: 'unknown';
45
+ line: string;
46
+ };
47
+ /**
48
+ * Parse a tracker comment into review commands.
49
+ *
50
+ * Returns an EMPTY array for a comment with no trigger line — which the caller treats as "ignore
51
+ * this comment entirely", never as an error and never as something to acknowledge. That silence is
52
+ * deliberate: most comments on a linked issue are ordinary human discussion, and acking them would
53
+ * turn every thread into a bot conversation. A BARE mention (`@cat-factory` with no verb after it)
54
+ * counts as discussion for the same reason and yields nothing.
55
+ *
56
+ * An `answer`'s text continues onto following lines until the next trigger line or the end of the
57
+ * comment, so a multi-paragraph answer needs no escaping.
58
+ *
59
+ * An unrecognised verb yields `{ verb: 'unknown' }` rather than being dropped: D4 requires it to be
60
+ * REPORTED in the follow-up, because a reporter who typed `@cat-factory reply CF-2 …` and heard
61
+ * nothing back would reasonably conclude the whole mechanism is broken. That is a near-MISS at a
62
+ * command and stays reported; the bare mention above is not an attempt at one at all, which is the
63
+ * line between the two.
64
+ */
65
+ export declare function parseReviewReplyCommands(comment: string): ReviewReplyCommand[];
66
+ /**
67
+ * Whether an author may drive a parked review from a ticket comment.
68
+ *
69
+ * Two layers, in order:
70
+ *
71
+ * - **Bots are never allowed.** The platform's own writeback comments come back as deliveries, so
72
+ * without this the ack would feed itself. This is checked FIRST so it cannot be defeated by an
73
+ * allow-list entry that happens to match a bot's display name.
74
+ * - **The connection's allow-list, when configured.** A comma-separated list of handles, emails or
75
+ * vendor ids, matched case-insensitively against any of the three. Empty ⇒ any non-bot author,
76
+ * which is the right default for a private tracker and the wrong one for a public repo — hence
77
+ * the knob rather than a hard-coded policy.
78
+ */
79
+ export declare function isAllowedReplyAuthor(author: TrackerCommentAuthor, allowList: string): boolean;
80
+ /**
81
+ * Render the follow-up comment that closes a ticket reply.
82
+ *
83
+ * Its job is to tell the reporter the ONE thing they cannot see from the tracker: what the run did.
84
+ * So the outcome leads, the still-open findings follow (with their ids, so the next reply can name
85
+ * them), and anything rejected is stated explicitly — a silently ignored command reads exactly like
86
+ * a broken integration.
87
+ */
88
+ export declare function renderReviewReplyAck(ack: ReviewReplyAck): string;
89
+ export type { ReviewQuestionFinding };
90
+ //# sourceMappingURL=reviewReplies.logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewReplies.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/writeback/reviewReplies.logic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,qBAAqB,CAAA;AA4B5B;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,kBAAQ,CAAA;AAE5C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG/D;AAgBD,4CAA4C;AAC5C,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAErC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAwE9E;AAWD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAW7F;AAMD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAyChE;AA4BD,YAAY,EAAE,qBAAqB,EAAE,CAAA"}