@cat-factory/integrations 0.101.3 → 0.102.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.
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/environments/EnvironmentHandlerSeeder.js +0 -0
- package/dist/modules/environments/EnvironmentHandlerSeeder.js.map +1 -1
- package/dist/modules/environments/EnvironmentProvisioningService.js +1 -1
- package/dist/modules/environments/EnvironmentProvisioningService.js.map +1 -1
- package/dist/modules/tasks/GitHubIssuesProvider.d.ts +6 -0
- package/dist/modules/tasks/GitHubIssuesProvider.d.ts.map +1 -1
- package/dist/modules/tasks/GitHubIssuesProvider.js +7 -0
- package/dist/modules/tasks/GitHubIssuesProvider.js.map +1 -1
- package/dist/modules/tasks/JiraProvider.d.ts +6 -0
- package/dist/modules/tasks/JiraProvider.d.ts.map +1 -1
- package/dist/modules/tasks/JiraProvider.js +7 -0
- package/dist/modules/tasks/JiraProvider.js.map +1 -1
- package/dist/modules/tasks/LinearTaskProvider.d.ts +6 -0
- package/dist/modules/tasks/LinearTaskProvider.d.ts.map +1 -1
- package/dist/modules/tasks/LinearTaskProvider.js +7 -0
- package/dist/modules/tasks/LinearTaskProvider.js.map +1 -1
- package/dist/modules/tasks/TaskConnectionService.d.ts +63 -1
- package/dist/modules/tasks/TaskConnectionService.d.ts.map +1 -1
- package/dist/modules/tasks/TaskConnectionService.js +156 -2
- package/dist/modules/tasks/TaskConnectionService.js.map +1 -1
- package/dist/modules/tasks/TrackerWebhookService.d.ts +102 -0
- package/dist/modules/tasks/TrackerWebhookService.d.ts.map +1 -0
- package/dist/modules/tasks/TrackerWebhookService.js +245 -0
- package/dist/modules/tasks/TrackerWebhookService.js.map +1 -0
- package/dist/modules/tasks/intakeMatch.logic.d.ts +21 -0
- package/dist/modules/tasks/intakeMatch.logic.d.ts.map +1 -0
- package/dist/modules/tasks/intakeMatch.logic.js +43 -0
- package/dist/modules/tasks/intakeMatch.logic.js.map +1 -0
- package/dist/modules/tasks/webhook/adapters.d.ts +31 -0
- package/dist/modules/tasks/webhook/adapters.d.ts.map +1 -0
- package/dist/modules/tasks/webhook/adapters.js +259 -0
- package/dist/modules/tasks/webhook/adapters.js.map +1 -0
- package/dist/modules/tasks/webhook/hmac.d.ts +34 -0
- package/dist/modules/tasks/webhook/hmac.d.ts.map +1 -0
- package/dist/modules/tasks/webhook/hmac.js +98 -0
- package/dist/modules/tasks/webhook/hmac.js.map +1 -0
- package/dist/modules/writeback/IssueWritebackService.d.ts +17 -1
- package/dist/modules/writeback/IssueWritebackService.d.ts.map +1 -1
- package/dist/modules/writeback/IssueWritebackService.js +21 -1
- package/dist/modules/writeback/IssueWritebackService.js.map +1 -1
- package/dist/modules/writeback/reviewQuestions.logic.d.ts.map +1 -1
- package/dist/modules/writeback/reviewQuestions.logic.js +6 -1
- package/dist/modules/writeback/reviewQuestions.logic.js.map +1 -1
- package/dist/modules/writeback/reviewReplies.logic.d.ts +90 -0
- package/dist/modules/writeback/reviewReplies.logic.d.ts.map +1 -0
- package/dist/modules/writeback/reviewReplies.logic.js +262 -0
- package/dist/modules/writeback/reviewReplies.logic.js.map +1 -0
- 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;
|
|
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,
|
|
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;
|
|
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
|
-
|
|
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;
|
|
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"}
|