@cat-factory/gates 0.1.12 → 0.2.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/gates.d.ts CHANGED
@@ -17,4 +17,14 @@ export declare const conflictsGate: (ctx: GateContext) => GateDefinition;
17
17
  * regress again and burn the budget). A pass-through until {@link wireReleaseHealthProvider}.
18
18
  */
19
19
  export declare const postReleaseHealthGate: (ctx: GateContext) => GateDefinition;
20
+ /**
21
+ * Human-review gate: watch the PR for a human code review on GitHub. It advances once the PR
22
+ * meets GitHub's required approvals with no unresolved review threads; on outstanding feedback it
23
+ * loops the `fixer` (immediately when approved; after a grace window otherwise), resolving each
24
+ * handed thread on the helper's completion so the next probe sees it cleared. It waits
25
+ * indefinitely for the human — `pollExhaustion: 'rearm'` never times out and an effectively
26
+ * unbounded attempt budget means a long review is never auto-failed. A pass-through until
27
+ * {@link wirePullRequestReviewProvider} supplies a provider.
28
+ */
29
+ export declare const humanReviewGate: (ctx: GateContext) => GateDefinition;
20
30
  //# sourceMappingURL=gates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../src/gates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EAKf,MAAM,qBAAqB,CAAA;AAyC5B;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAS,WAAW,KAAG,cA+CxC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAS,WAAW,KAAG,cA+B/C,CAAA;AAkEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,QAAS,WAAW,KAAG,cA4IvD,CAAA"}
1
+ {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../src/gates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACX,cAAc,EAOf,MAAM,qBAAqB,CAAA;AAmD5B;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAS,WAAW,KAAG,cA+CxC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAS,WAAW,KAAG,cA+B/C,CAAA;AAkEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,QAAS,WAAW,KAAG,cA4IvD,CAAA;AA4BF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,QAAS,WAAW,KAAG,cA4MjD,CAAA"}
package/dist/gates.js CHANGED
@@ -1,6 +1,7 @@
1
- import { aggregateCi, CI_AGENT_KIND, CI_FIXER_AGENT_KIND, classifyReleaseHealth, CONFLICT_RESOLVER_AGENT_KIND, CONFLICTS_AGENT_KIND, DEFAULT_MERGE_PRESET, describeFailingChecks, describeRegressedSignals, isCiGreen, isProviderWired, listFailingChecks, ON_CALL_AGENT_KIND, POST_RELEASE_HEALTH_AGENT_KIND, renderReleaseEvidence, } from '@cat-factory/kernel';
1
+ import { aggregateCi, CI_AGENT_KIND, CI_FIXER_AGENT_KIND, classifyReleaseHealth, CONFLICT_RESOLVER_AGENT_KIND, CONFLICTS_AGENT_KIND, DEFAULT_MERGE_PRESET, describeFailingChecks, describeRegressedSignals, FIXER_AGENT_KIND, HUMAN_REVIEW_AGENT_KIND, isCiGreen, isProviderWired, listFailingChecks, ON_CALL_AGENT_KIND, POST_RELEASE_HEALTH_AGENT_KIND, renderReleaseEvidence, } from '@cat-factory/kernel';
2
2
  import { parseOnCallAssessment } from '@cat-factory/contracts';
3
- import { CI_STATUS_PROVIDER, INCIDENT_ENRICHMENT_PROVIDER, MERGEABILITY_PROVIDER, RELEASE_HEALTH_PROVIDER, } from './providers.js';
3
+ import { CI_STATUS_PROVIDER, INCIDENT_ENRICHMENT_PROVIDER, MERGEABILITY_PROVIDER, PULL_REQUEST_REVIEW_PROVIDER, RELEASE_HEALTH_PROVIDER, } from './providers.js';
4
+ import { classifyHumanReview, isApproved, outstandingComments, outstandingThreads, requiredApprovals, } from './review.logic.js';
4
5
  /**
5
6
  * Conflict-resolver attempt cap. Unlike CI (where each fixer round gets fresh red-check
6
7
  * output to act on), a conflict retry re-merges the SAME base and gets no new signal, so a
@@ -279,4 +280,220 @@ export const postReleaseHealthGate = (ctx) => ({
279
280
  return { output };
280
281
  },
281
282
  });
283
+ /** The reply the fixer's round leaves on each review thread before it is resolved. */
284
+ const REVIEW_THREAD_RESOLVED_REPLY = 'Addressed by the cat-factory fixer in the latest commit(s) on this branch.';
285
+ /**
286
+ * Resolve the gate-handed review threads on GitHub, returning whether every resolve landed.
287
+ * Shared by the probe's reconcile (resolve-only retry of a lagged resolve) and the
288
+ * helper-completion hook (reply + resolve after a fixer round). `resolveThreads` throws on a
289
+ * partial failure, so `false` means "some threads are still open — retain them for a retry".
290
+ */
291
+ async function tryResolveThreads(provider, workspaceId, blockId, threadIds, reply) {
292
+ if (threadIds.length === 0)
293
+ return true;
294
+ try {
295
+ await provider.resolveThreads(workspaceId, blockId, threadIds, reply);
296
+ return true;
297
+ }
298
+ catch {
299
+ return false;
300
+ }
301
+ }
302
+ /**
303
+ * Human-review gate: watch the PR for a human code review on GitHub. It advances once the PR
304
+ * meets GitHub's required approvals with no unresolved review threads; on outstanding feedback it
305
+ * loops the `fixer` (immediately when approved; after a grace window otherwise), resolving each
306
+ * handed thread on the helper's completion so the next probe sees it cleared. It waits
307
+ * indefinitely for the human — `pollExhaustion: 'rearm'` never times out and an effectively
308
+ * unbounded attempt budget means a long review is never auto-failed. A pass-through until
309
+ * {@link wirePullRequestReviewProvider} supplies a provider.
310
+ */
311
+ export const humanReviewGate = (ctx) => ({
312
+ kind: HUMAN_REVIEW_AGENT_KIND,
313
+ helperKind: FIXER_AGENT_KIND,
314
+ wired: () => isProviderWired(PULL_REQUEST_REVIEW_PROVIDER),
315
+ unwiredOutput: 'Human review gate skipped (no PR-review provider configured).',
316
+ // A human review is unbounded: never time out the wait, and never give up on rounds.
317
+ pollExhaustion: 'rearm',
318
+ attemptBudget: () => Number.MAX_SAFE_INTEGER,
319
+ probe: async (workspaceId, blockId, gateState) => {
320
+ const provider = ctx.requireProvider(PULL_REQUEST_REVIEW_PROVIDER);
321
+ // Raise (or re-raise — `NotificationService.raise` dedups per block+type) the human_review
322
+ // card, carrying the run's `executionId` from the block so the inbox can deep-link straight
323
+ // into the gate window (where the human requests a freeform fix); the probe has no instance
324
+ // in scope, but `block.executionId` is the run currently parked on this gate.
325
+ const raiseHumanReviewCard = async (build) => {
326
+ const block = await ctx.getBlock(workspaceId, blockId);
327
+ const { title, body } = build(block);
328
+ await ctx.raiseNotification(workspaceId, {
329
+ type: 'human_review',
330
+ blockId,
331
+ executionId: block?.executionId ?? null,
332
+ title,
333
+ body,
334
+ payload: block?.pullRequest?.url ? { prUrl: block.pullRequest.url } : {},
335
+ });
336
+ };
337
+ // A transient GitHub read failure must NEVER fail the run — this gate waits indefinitely
338
+ // for a human, so a momentary 502 / rate-limit / GraphQL error is just "keep waiting", not
339
+ // a verdict. (The driver's FIRST gate entry runs outside the fault-tolerant poll loop, so
340
+ // without this catch a single blip would terminally fail an otherwise-healthy review wait.)
341
+ let snapshot;
342
+ try {
343
+ snapshot = await provider.getReview(workspaceId, blockId, gateState.requiredApprovingReviewCount ?? null);
344
+ }
345
+ catch {
346
+ return { status: 'pending', headSha: gateState.headSha ?? null };
347
+ }
348
+ // Reconcile threads a prior fixer round addressed but whose GitHub-side resolve didn't land
349
+ // (a transient failure in onHelperComplete). Those ids were RETAINED on the gate state
350
+ // (onHelperComplete clears them only on a successful resolve), so re-attempt the resolve for
351
+ // exactly those still open (resolve-only, empty reply → no duplicate comment), and keep any
352
+ // still open for the next retry. Scoping strictly to ids the gate itself handed the fixer —
353
+ // never "any bot-latest thread" — guarantees a THIRD-PARTY reviewer bot's (e.g. a code-review
354
+ // bot's) open thread is never silently closed. Best-effort: a failure here just retries.
355
+ const handed = gateState.pendingThreadIds ?? [];
356
+ if (handed.length > 0) {
357
+ const stillOpen = handed.filter((id) => snapshot.unresolvedThreads.some((t) => t.threadId === id));
358
+ // Retention is SNAPSHOT-driven (not throw-driven): keep whatever GitHub still reports
359
+ // open, so a resolve that succeeded but hasn't propagated yet (read-after-write lag) is
360
+ // re-checked next poll, and a resolve that failed is retried. Resolve-only (empty reply)
361
+ // so a retry never double-posts the courtesy comment.
362
+ await tryResolveThreads(provider, workspaceId, blockId, stillOpen, '');
363
+ gateState.pendingThreadIds = stillOpen.length > 0 ? stillOpen : null;
364
+ }
365
+ const graceMinutes = gateState.humanReviewGraceMinutes ?? DEFAULT_MERGE_PRESET.humanReviewGraceMinutes;
366
+ // Surface the approval progress for the UI (persisted via the caller's `...step.gate` spread),
367
+ // and cache the static branch-protection required count so later polls skip re-reading it.
368
+ // The UI derives the displayed "required" count from `requiredApprovingReviewCount` via the
369
+ // same `max(1, …)` floor (see review.logic.ts), so it is NOT persisted a second time.
370
+ gateState.lastApprovals = snapshot.approvals;
371
+ if (snapshot.headSha !== null) {
372
+ gateState.requiredApprovingReviewCount = snapshot.requiredApprovingReviewCount;
373
+ }
374
+ const verdict = classifyHumanReview(snapshot, gateState, { graceMinutes, now: ctx.clock.now() });
375
+ if (verdict.kind === 'advance') {
376
+ return { status: 'pass', headSha: snapshot.headSha, passOutput: verdict.reason };
377
+ }
378
+ if (verdict.kind === 'dispatch') {
379
+ // Backoff: the fixer addresses feedback by pushing a commit to the PR branch, so a fixer
380
+ // round that left the head sha unchanged made no progress (it failed, or pushed nothing).
381
+ // Re-dispatching a fresh fixer on every poll for the same unchanged head would hot-loop a
382
+ // container indefinitely (the budget is effectively unbounded). Wait instead until the head
383
+ // advances (a new fixer commit) or the human re-engages. The prior attempt's gated head is
384
+ // the last entry of the attempt log.
385
+ const lastAttempt = gateState.attemptLog?.[gateState.attemptLog.length - 1];
386
+ if (lastAttempt && lastAttempt.headSha === snapshot.headSha) {
387
+ // The automated loop has stalled (the fixer made no progress on the same head) while
388
+ // feedback is still outstanding — surface a card so the human knows to intervene rather
389
+ // than letting the run wait silently and invisibly forever.
390
+ await raiseHumanReviewCard((block) => ({
391
+ title: `Review feedback needs attention on "${block?.title ?? 'this task'}"`,
392
+ body: 'The automated fixer could not make further progress on the review feedback ' +
393
+ '(no new commit since its last attempt). Review the PR on GitHub, or request a fix here.',
394
+ }));
395
+ return { status: 'pending', headSha: snapshot.headSha };
396
+ }
397
+ // Stash the threads to resolve on the fixer's completion + advance the plain-comment
398
+ // cursor so the same comments don't re-trigger. Both persist via the caller's spread.
399
+ gateState.pendingThreadIds = verdict.threadIds;
400
+ if (verdict.latestCommentAt != null) {
401
+ gateState.lastAddressedCommentAt = Math.max(gateState.lastAddressedCommentAt ?? 0, verdict.latestCommentAt);
402
+ }
403
+ return { status: 'fail', headSha: snapshot.headSha, failureSummary: verdict.instructions };
404
+ }
405
+ // wait: keep polling. When we're waiting on a human APPROVAL (nothing outstanding to fix),
406
+ // surface a (deduped) notification so the reviewer is summoned and the severity sweep can
407
+ // escalate it the longer it waits. A grace-window wait (comments present) needs no card.
408
+ const awaitingApproval = outstandingThreads(snapshot).length === 0 &&
409
+ outstandingComments(snapshot, gateState.lastAddressedCommentAt).length === 0 &&
410
+ !isApproved(snapshot);
411
+ if (awaitingApproval) {
412
+ await raiseHumanReviewCard((block) => {
413
+ const title = block?.title ?? 'this task';
414
+ // "No reviewer" only when nobody is assigned AND nobody has approved yet — a reviewer who
415
+ // approves is removed from the requested-reviewer list, so `assignedReviewers` alone would
416
+ // wrongly tell the user to assign a reviewer who already signed off (e.g. 1 of 2 approvals
417
+ // in). With an approval on record the real state is "needs more approvals", not "unassigned".
418
+ const noReviewer = snapshot.assignedReviewers.length === 0 && snapshot.approvals === 0;
419
+ return {
420
+ title: noReviewer
421
+ ? `Assign a reviewer for "${title}"`
422
+ : `"${title}" is awaiting code review`,
423
+ body: noReviewer
424
+ ? 'The PR has no assigned reviewer. Request a reviewer on GitHub to continue, or request a fix here.'
425
+ : `Awaiting ${requiredApprovals(snapshot)} approval(s) on the PR ` +
426
+ `(have ${snapshot.approvals}). Review on GitHub, or request a fix here.`,
427
+ };
428
+ });
429
+ }
430
+ return { status: 'pending', headSha: snapshot.headSha };
431
+ },
432
+ // Fold the reviewer's feedback into the fixer's prompt.
433
+ helperPriorOutput: (summary) => ({ agentKind: HUMAN_REVIEW_AGENT_KIND, output: summary }),
434
+ // After a fixer round that made REAL PROGRESS, reply to + RESOLVE the threads it was handed,
435
+ // so the immediately following re-probe counts them as addressed. A FAILED fixer addressed
436
+ // nothing, so its threads are left open (resolving them would post a misleading "addressed"
437
+ // reply and hide unfixed feedback) — the negative state makes the next probe re-dispatch.
438
+ // CRITICAL: a "done" fixer that pushed NOTHING (it found nothing to do, or its push no-op'd)
439
+ // ALSO addressed nothing — resolving its threads would let an APPROVED PR advance with the
440
+ // reviewer's feedback silently unaddressed. So gate the resolve on the PR head having
441
+ // advanced since dispatch (`step.gate.headSha` is the gated head; the engine overwrites it
442
+ // only on the next probe). No progress → leave the threads open and drop the stash so the
443
+ // reconcile doesn't resolve them either; the next probe's backoff raises the stall card.
444
+ // Best-effort: on a progressed round whose GitHub-side resolve threw transiently, the handed
445
+ // ids are RETAINED so the probe's reconcile re-attempts exactly those (scoped to gate-handed
446
+ // threads, never any bot thread).
447
+ onHelperComplete: async ({ workspaceId, block, step, result }) => {
448
+ const threadIds = step.gate?.pendingThreadIds ?? [];
449
+ // A failed fixer (or nothing handed): drop the stash without resolving anything.
450
+ if (result.state !== 'done' || threadIds.length === 0) {
451
+ if (step.gate)
452
+ step.gate.pendingThreadIds = null;
453
+ return;
454
+ }
455
+ const provider = ctx.getProvider(PULL_REQUEST_REVIEW_PROVIDER);
456
+ if (!provider) {
457
+ if (step.gate)
458
+ step.gate.pendingThreadIds = null;
459
+ return;
460
+ }
461
+ // Read the current head once (cheap relative to a fixer round) to confirm the fixer pushed.
462
+ const dispatchedHead = step.gate?.headSha ?? null;
463
+ let snapshot;
464
+ try {
465
+ snapshot = await provider.getReview(workspaceId, block.id, step.gate?.requiredApprovingReviewCount ?? null);
466
+ }
467
+ catch {
468
+ // Couldn't confirm progress — do NOT resolve (could hide unaddressed feedback). Drop the
469
+ // stash so the reconcile doesn't resolve them unchecked; the next probe re-evaluates.
470
+ if (step.gate)
471
+ step.gate.pendingThreadIds = null;
472
+ return;
473
+ }
474
+ if (dispatchedHead !== null && snapshot.headSha === dispatchedHead) {
475
+ // The fixer made no commit — leave the handed threads open and drop the stash so the
476
+ // reconcile leaves them alone; the next probe's backoff surfaces the stall card.
477
+ if (step.gate)
478
+ step.gate.pendingThreadIds = null;
479
+ return;
480
+ }
481
+ const ok = await tryResolveThreads(provider, workspaceId, block.id, threadIds, REVIEW_THREAD_RESOLVED_REPLY);
482
+ if (step.gate)
483
+ step.gate.pendingThreadIds = ok ? null : threadIds;
484
+ },
485
+ // Never reached (the attempt budget is effectively unbounded), but raise a card defensively so
486
+ // a misconfiguration surfaces rather than silently failing the run.
487
+ onExhausted: async ({ workspaceId, instance, block }) => {
488
+ await ctx.raiseNotification(workspaceId, {
489
+ type: 'human_review',
490
+ blockId: block.id,
491
+ executionId: instance.id,
492
+ title: `Human review needed for "${block.title}"`,
493
+ body: 'The human-review gate could not continue automatically. Review the PR on GitHub.',
494
+ payload: block.pullRequest?.url ? { prUrl: block.pullRequest.url } : {},
495
+ });
496
+ return { error: 'Human review did not complete.' };
497
+ },
498
+ });
282
499
  //# sourceMappingURL=gates.js.map
package/dist/gates.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gates.js","sourceRoot":"","sources":["../src/gates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gates.js","sourceRoot":"","sources":["../src/gates.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export { CI_STATUS_PROVIDER, MERGEABILITY_PROVIDER, RELEASE_HEALTH_PROVIDER, INCIDENT_ENRICHMENT_PROVIDER, wireCiStatusProvider, wireMergeabilityProvider, wireReleaseHealthProvider, wireIncidentEnrichment, clearGateProviders, applyGateProviders, type GateProviderOverrides, } from './providers.js';
2
- export { ciGate, conflictsGate, postReleaseHealthGate } from './gates.js';
1
+ export { CI_STATUS_PROVIDER, MERGEABILITY_PROVIDER, RELEASE_HEALTH_PROVIDER, INCIDENT_ENRICHMENT_PROVIDER, PULL_REQUEST_REVIEW_PROVIDER, wireCiStatusProvider, wireMergeabilityProvider, wireReleaseHealthProvider, wireIncidentEnrichment, wirePullRequestReviewProvider, clearGateProviders, applyGateProviders, type GateProviderOverrides, } from './providers.js';
2
+ export { ciGate, conflictsGate, postReleaseHealthGate, humanReviewGate } from './gates.js';
3
+ export { classifyHumanReview, isApproved, outstandingThreads, outstandingComments, renderReviewFeedbackForFixer, requiredApprovals, type HumanReviewVerdict, } from './review.logic.js';
3
4
  /**
4
5
  * Register the built-in gate suite. Idempotent (the registry replaces by kind), so importing
5
6
  * the package and calling this explicitly are safe to combine. Called automatically as an
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4BA,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEzE;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6BA,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,4BAA4B,EAC5B,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC1F,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAA;AAE1B;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { CI_AGENT_KIND, CONFLICTS_AGENT_KIND, POST_RELEASE_HEALTH_AGENT_KIND, registerGate, } from '@cat-factory/kernel';
2
- import { ciGate, conflictsGate, postReleaseHealthGate } from './gates.js';
1
+ import { CI_AGENT_KIND, CONFLICTS_AGENT_KIND, HUMAN_REVIEW_AGENT_KIND, POST_RELEASE_HEALTH_AGENT_KIND, registerGate, } from '@cat-factory/kernel';
2
+ import { ciGate, conflictsGate, humanReviewGate, postReleaseHealthGate } from './gates.js';
3
3
  // ---------------------------------------------------------------------------
4
4
  // The built-in polling-gate suite, authored ENTIRELY through the public gate-registry
5
5
  // seam (`registerGate`) — depending only on @cat-factory/kernel + @cat-factory/contracts,
@@ -19,8 +19,9 @@ import { ciGate, conflictsGate, postReleaseHealthGate } from './gates.js';
19
19
  //
20
20
  // Until a gate's provider is wired it is a harmless pass-through, so a bare import is safe.
21
21
  // ---------------------------------------------------------------------------
22
- export { CI_STATUS_PROVIDER, MERGEABILITY_PROVIDER, RELEASE_HEALTH_PROVIDER, INCIDENT_ENRICHMENT_PROVIDER, wireCiStatusProvider, wireMergeabilityProvider, wireReleaseHealthProvider, wireIncidentEnrichment, clearGateProviders, applyGateProviders, } from './providers.js';
23
- export { ciGate, conflictsGate, postReleaseHealthGate } from './gates.js';
22
+ export { CI_STATUS_PROVIDER, MERGEABILITY_PROVIDER, RELEASE_HEALTH_PROVIDER, INCIDENT_ENRICHMENT_PROVIDER, PULL_REQUEST_REVIEW_PROVIDER, wireCiStatusProvider, wireMergeabilityProvider, wireReleaseHealthProvider, wireIncidentEnrichment, wirePullRequestReviewProvider, clearGateProviders, applyGateProviders, } from './providers.js';
23
+ export { ciGate, conflictsGate, postReleaseHealthGate, humanReviewGate } from './gates.js';
24
+ export { classifyHumanReview, isApproved, outstandingThreads, outstandingComments, renderReviewFeedbackForFixer, requiredApprovals, } from './review.logic.js';
24
25
  /**
25
26
  * Register the built-in gate suite. Idempotent (the registry replaces by kind), so importing
26
27
  * the package and calling this explicitly are safe to combine. Called automatically as an
@@ -30,6 +31,7 @@ export function registerBuiltinGates() {
30
31
  registerGate(CI_AGENT_KIND, ciGate);
31
32
  registerGate(CONFLICTS_AGENT_KIND, conflictsGate);
32
33
  registerGate(POST_RELEASE_HEALTH_AGENT_KIND, postReleaseHealthGate);
34
+ registerGate(HUMAN_REVIEW_AGENT_KIND, humanReviewGate);
33
35
  }
34
36
  // Side-effect registration: `import '@cat-factory/gates'` is enough.
35
37
  registerBuiltinGates();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,8BAA8B,EAC9B,YAAY,GACb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEzE,8EAA8E;AAC9E,sFAAsF;AACtF,0FAA0F;AAC1F,kFAAkF;AAClF,gFAAgF;AAChF,mFAAmF;AACnF,uEAAuE;AACvE,EAAE;AACF,4FAA4F;AAC5F,8BAA8B;AAC9B,EAAE;AACF,gCAAgC;AAChC,0DAA0D;AAC1D,kEAAkE;AAClE,sEAAsE;AACtE,yEAAyE;AACzE,EAAE;AACF,4FAA4F;AAC5F,8EAA8E;AAE9E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEzE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACnC,YAAY,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAA;IACjD,YAAY,CAAC,8BAA8B,EAAE,qBAAqB,CAAC,CAAA;AACrE,CAAC;AAED,qEAAqE;AACrE,oBAAoB,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,YAAY,GACb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAE1F,8EAA8E;AAC9E,sFAAsF;AACtF,0FAA0F;AAC1F,kFAAkF;AAClF,gFAAgF;AAChF,mFAAmF;AACnF,uEAAuE;AACvE,EAAE;AACF,4FAA4F;AAC5F,8BAA8B;AAC9B,EAAE;AACF,gCAAgC;AAChC,0DAA0D;AAC1D,kEAAkE;AAClE,sEAAsE;AACtE,yEAAyE;AACzE,EAAE;AACF,4FAA4F;AAC5F,8EAA8E;AAE9E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,4BAA4B,EAC5B,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC1F,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAC5B,iBAAiB,GAElB,MAAM,mBAAmB,CAAA;AAE1B;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACnC,YAAY,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAA;IACjD,YAAY,CAAC,8BAA8B,EAAE,qBAAqB,CAAC,CAAA;IACnE,YAAY,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAAA;AACxD,CAAC;AAED,qEAAqE;AACrE,oBAAoB,EAAE,CAAA"}
@@ -1,4 +1,4 @@
1
- import { type CiStatusProvider, type IncidentEnrichmentProvider, type ProviderToken, type PullRequestMergeabilityProvider, type ReleaseHealthProvider } from '@cat-factory/kernel';
1
+ import { type CiStatusProvider, type IncidentEnrichmentProvider, type ProviderToken, type PullRequestMergeabilityProvider, type PullRequestReviewProvider, type ReleaseHealthProvider } from '@cat-factory/kernel';
2
2
  /** Token for the CI check-runs source the `ci` gate probes. */
3
3
  export declare const CI_STATUS_PROVIDER: ProviderToken<CiStatusProvider>;
4
4
  /** Token for the PR-mergeability source the `conflicts` gate probes. */
@@ -7,6 +7,8 @@ export declare const MERGEABILITY_PROVIDER: ProviderToken<PullRequestMergeabilit
7
7
  export declare const RELEASE_HEALTH_PROVIDER: ProviderToken<ReleaseHealthProvider>;
8
8
  /** Token for the incident-enrichment source the on-call escalation annotates. */
9
9
  export declare const INCIDENT_ENRICHMENT_PROVIDER: ProviderToken<IncidentEnrichmentProvider>;
10
+ /** Token for the PR-review source the `human-review` gate probes (approval + threads). */
11
+ export declare const PULL_REQUEST_REVIEW_PROVIDER: ProviderToken<PullRequestReviewProvider>;
10
12
  /** Wire (or clear, with `undefined`) the CI check-runs source the `ci` gate probes. */
11
13
  export declare function wireCiStatusProvider(provider: CiStatusProvider | undefined): void;
12
14
  /** Wire (or clear) the PR-mergeability source the `conflicts` gate probes. */
@@ -15,6 +17,8 @@ export declare function wireMergeabilityProvider(provider: PullRequestMergeabili
15
17
  export declare function wireReleaseHealthProvider(provider: ReleaseHealthProvider | undefined): void;
16
18
  /** Wire (or clear) the incident-enrichment source the on-call escalation annotates. */
17
19
  export declare function wireIncidentEnrichment(provider: IncidentEnrichmentProvider | undefined): void;
20
+ /** Wire (or clear) the PR-review source the `human-review` gate probes. */
21
+ export declare function wirePullRequestReviewProvider(provider: PullRequestReviewProvider | undefined): void;
18
22
  /** Clear every built-in gate provider (the four tokens above). Intended for tests. */
19
23
  export declare function clearGateProviders(): void;
20
24
  /** Whether the CI status provider is wired (the `ci` gate's `wired()`). */
@@ -25,6 +29,7 @@ export interface GateProviderOverrides {
25
29
  mergeability?: PullRequestMergeabilityProvider;
26
30
  releaseHealth?: ReleaseHealthProvider;
27
31
  incidentEnrichment?: IncidentEnrichmentProvider;
32
+ prReview?: PullRequestReviewProvider;
28
33
  }
29
34
  /**
30
35
  * Wire any provided gate providers (leaving the rest untouched). A facade build runs
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,+BAA+B,EACpC,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAA;AAe5B,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,iCAAqD,CAAA;AACpF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,gDACoC,CAAA;AACtE,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,sCAA+D,CAAA;AACnG,iFAAiF;AACjF,eAAO,MAAM,4BAA4B,2CAC+B,CAAA;AAExE,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAEjF;AAED,8EAA8E;AAC9E,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,+BAA+B,GAAG,SAAS,GACpD,IAAI,CAEN;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAE3F;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,SAAS,GAAG,IAAI,CAE7F;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,IAAI,IAAI,CASzC;AAED,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,QAAO,OAA8C,CAAA;AAEzF,0FAA0F;AAC1F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,YAAY,CAAC,EAAE,+BAA+B,CAAA;IAC9C,aAAa,CAAC,EAAE,qBAAqB,CAAA;IACrC,kBAAkB,CAAC,EAAE,0BAA0B,CAAA;CAChD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAMrF"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,+BAA+B,EACpC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAA;AAe5B,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,iCAAqD,CAAA;AACpF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,gDACoC,CAAA;AACtE,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,sCAA+D,CAAA;AACnG,iFAAiF;AACjF,eAAO,MAAM,4BAA4B,2CAC+B,CAAA;AACxE,0FAA0F;AAC1F,eAAO,MAAM,4BAA4B,0CACoB,CAAA;AAE7D,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAEjF;AAED,8EAA8E;AAC9E,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,+BAA+B,GAAG,SAAS,GACpD,IAAI,CAEN;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAE3F;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,SAAS,GAAG,IAAI,CAE7F;AAED,2EAA2E;AAC3E,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,yBAAyB,GAAG,SAAS,GAC9C,IAAI,CAEN;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,IAAI,IAAI,CAUzC;AAED,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,QAAO,OAA8C,CAAA;AAEzF,0FAA0F;AAC1F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,YAAY,CAAC,EAAE,+BAA+B,CAAA;IAC9C,aAAa,CAAC,EAAE,qBAAqB,CAAA;IACrC,kBAAkB,CAAC,EAAE,0BAA0B,CAAA;IAC/C,QAAQ,CAAC,EAAE,yBAAyB,CAAA;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAOrF"}
package/dist/providers.js CHANGED
@@ -19,6 +19,8 @@ export const MERGEABILITY_PROVIDER = defineProviderToken('mergeability');
19
19
  export const RELEASE_HEALTH_PROVIDER = defineProviderToken('release-health');
20
20
  /** Token for the incident-enrichment source the on-call escalation annotates. */
21
21
  export const INCIDENT_ENRICHMENT_PROVIDER = defineProviderToken('incident-enrichment');
22
+ /** Token for the PR-review source the `human-review` gate probes (approval + threads). */
23
+ export const PULL_REQUEST_REVIEW_PROVIDER = defineProviderToken('pr-review');
22
24
  /** Wire (or clear, with `undefined`) the CI check-runs source the `ci` gate probes. */
23
25
  export function wireCiStatusProvider(provider) {
24
26
  wireProvider(CI_STATUS_PROVIDER, provider);
@@ -35,6 +37,10 @@ export function wireReleaseHealthProvider(provider) {
35
37
  export function wireIncidentEnrichment(provider) {
36
38
  wireProvider(INCIDENT_ENRICHMENT_PROVIDER, provider);
37
39
  }
40
+ /** Wire (or clear) the PR-review source the `human-review` gate probes. */
41
+ export function wirePullRequestReviewProvider(provider) {
42
+ wireProvider(PULL_REQUEST_REVIEW_PROVIDER, provider);
43
+ }
38
44
  /** Clear every built-in gate provider (the four tokens above). Intended for tests. */
39
45
  export function clearGateProviders() {
40
46
  for (const token of [
@@ -42,6 +48,7 @@ export function clearGateProviders() {
42
48
  MERGEABILITY_PROVIDER,
43
49
  RELEASE_HEALTH_PROVIDER,
44
50
  INCIDENT_ENRICHMENT_PROVIDER,
51
+ PULL_REQUEST_REVIEW_PROVIDER,
45
52
  ]) {
46
53
  wireProvider(token, undefined);
47
54
  }
@@ -66,5 +73,7 @@ export function applyGateProviders(overrides) {
66
73
  wireReleaseHealthProvider(overrides.releaseHealth);
67
74
  if (overrides.incidentEnrichment)
68
75
  wireIncidentEnrichment(overrides.incidentEnrichment);
76
+ if (overrides.prReview)
77
+ wirePullRequestReviewProvider(overrides.prReview);
69
78
  }
70
79
  //# sourceMappingURL=providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,YAAY,GAMb,MAAM,qBAAqB,CAAA;AAE5B,qFAAqF;AACrF,+EAA+E;AAC/E,8FAA8F;AAC9F,+FAA+F;AAC/F,+EAA+E;AAC/E,wCAAwC;AACxC,EAAE;AACF,mFAAmF;AACnF,2FAA2F;AAC3F,mFAAmF;AACnF,2FAA2F;AAC3F,4EAA4E;AAE5E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAmB,WAAW,CAAC,CAAA;AACpF,wEAAwE;AACxE,MAAM,CAAC,MAAM,qBAAqB,GAChC,mBAAmB,CAAkC,cAAc,CAAC,CAAA;AACtE,iFAAiF;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,mBAAmB,CAAwB,gBAAgB,CAAC,CAAA;AACnG,iFAAiF;AACjF,MAAM,CAAC,MAAM,4BAA4B,GACvC,mBAAmB,CAA6B,qBAAqB,CAAC,CAAA;AAExE,uFAAuF;AACvF,MAAM,UAAU,oBAAoB,CAAC,QAAsC;IACzE,YAAY,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;AAC5C,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,wBAAwB,CACtC,QAAqD;IAErD,YAAY,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAA;AAC/C,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,yBAAyB,CAAC,QAA2C;IACnF,YAAY,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB,CAAC,QAAgD;IACrF,YAAY,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAA;AACtD,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,kBAAkB;IAChC,KAAK,MAAM,KAAK,IAAI;QAClB,kBAAkB;QAClB,qBAAqB;QACrB,uBAAuB;QACvB,4BAA4B;KACD,EAAE,CAAC;QAC9B,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAChC,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAY,EAAE,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAA;AAUzF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAA4C;IAC7E,IAAI,CAAC,SAAS;QAAE,OAAM;IACtB,IAAI,SAAS,CAAC,QAAQ;QAAE,oBAAoB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IAChE,IAAI,SAAS,CAAC,YAAY;QAAE,wBAAwB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;IAC5E,IAAI,SAAS,CAAC,aAAa;QAAE,yBAAyB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IAC/E,IAAI,SAAS,CAAC,kBAAkB;QAAE,sBAAsB,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;AACxF,CAAC"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,YAAY,GAOb,MAAM,qBAAqB,CAAA;AAE5B,qFAAqF;AACrF,+EAA+E;AAC/E,8FAA8F;AAC9F,+FAA+F;AAC/F,+EAA+E;AAC/E,wCAAwC;AACxC,EAAE;AACF,mFAAmF;AACnF,2FAA2F;AAC3F,mFAAmF;AACnF,2FAA2F;AAC3F,4EAA4E;AAE5E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAmB,WAAW,CAAC,CAAA;AACpF,wEAAwE;AACxE,MAAM,CAAC,MAAM,qBAAqB,GAChC,mBAAmB,CAAkC,cAAc,CAAC,CAAA;AACtE,iFAAiF;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,mBAAmB,CAAwB,gBAAgB,CAAC,CAAA;AACnG,iFAAiF;AACjF,MAAM,CAAC,MAAM,4BAA4B,GACvC,mBAAmB,CAA6B,qBAAqB,CAAC,CAAA;AACxE,0FAA0F;AAC1F,MAAM,CAAC,MAAM,4BAA4B,GACvC,mBAAmB,CAA4B,WAAW,CAAC,CAAA;AAE7D,uFAAuF;AACvF,MAAM,UAAU,oBAAoB,CAAC,QAAsC;IACzE,YAAY,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;AAC5C,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,wBAAwB,CACtC,QAAqD;IAErD,YAAY,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAA;AAC/C,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,yBAAyB,CAAC,QAA2C;IACnF,YAAY,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB,CAAC,QAAgD;IACrF,YAAY,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAA;AACtD,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,6BAA6B,CAC3C,QAA+C;IAE/C,YAAY,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAA;AACtD,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,kBAAkB;IAChC,KAAK,MAAM,KAAK,IAAI;QAClB,kBAAkB;QAClB,qBAAqB;QACrB,uBAAuB;QACvB,4BAA4B;QAC5B,4BAA4B;KACD,EAAE,CAAC;QAC9B,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAChC,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAY,EAAE,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAA;AAWzF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAA4C;IAC7E,IAAI,CAAC,SAAS;QAAE,OAAM;IACtB,IAAI,SAAS,CAAC,QAAQ;QAAE,oBAAoB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IAChE,IAAI,SAAS,CAAC,YAAY;QAAE,wBAAwB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;IAC5E,IAAI,SAAS,CAAC,aAAa;QAAE,yBAAyB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IAC/E,IAAI,SAAS,CAAC,kBAAkB;QAAE,sBAAsB,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;IACtF,IAAI,SAAS,CAAC,QAAQ;QAAE,6BAA6B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;AAC3E,CAAC"}
@@ -0,0 +1,67 @@
1
+ import type { GateStepState, PullRequestComment, PullRequestReviewSnapshot, ReviewThread } from '@cat-factory/kernel';
2
+ /** What the gate should do this poll. */
3
+ export type HumanReviewVerdict =
4
+ /** The PR is approved with nothing outstanding — finish the gate and advance. */
5
+ {
6
+ kind: 'advance';
7
+ reason: string;
8
+ }
9
+ /**
10
+ * Outstanding review feedback needs the fixer: `instructions` are folded into its prompt;
11
+ * `threadIds` are the GitHub review threads to resolve once it's done; `latestCommentAt` is
12
+ * the newest plain-comment timestamp covered, stamped onto the gate state so those comments
13
+ * don't re-trigger.
14
+ */
15
+ | {
16
+ kind: 'dispatch';
17
+ instructions: string;
18
+ threadIds: string[];
19
+ latestCommentAt: number | null;
20
+ }
21
+ /** Nothing actionable yet (awaiting the reviewer, or inside the grace window) — keep waiting. */
22
+ | {
23
+ kind: 'wait';
24
+ reason: string;
25
+ };
26
+ /**
27
+ * How many approving reviews the PR needs. The `human-review` gate is OPT-IN — a team only adds
28
+ * it to a pipeline because they want a human to sign off — so it ALWAYS requires at least one
29
+ * approval, even when GitHub's branch protection requires fewer (a repo with `0` required reviews,
30
+ * or an unreadable protection rule that the provider defaults to `1`). Otherwise the gate would
31
+ * advance with no human approval at all, defeating its entire purpose.
32
+ */
33
+ export declare function requiredApprovals(snapshot: PullRequestReviewSnapshot): number;
34
+ /** Whether the PR meets the required number of assigned-reviewer approvals. */
35
+ export declare function isApproved(snapshot: PullRequestReviewSnapshot): boolean;
36
+ /**
37
+ * Unresolved review threads that need work: every unresolved thread whose LATEST comment is NOT
38
+ * the bot's. Excluding bot-latest threads prevents re-dispatching on a thread the fixer just
39
+ * replied to (a resolve that lagged); a reviewer re-opening with a fresh human comment flips the
40
+ * latest author back and makes it outstanding again.
41
+ */
42
+ export declare function outstandingThreads(snapshot: PullRequestReviewSnapshot): ReviewThread[];
43
+ /** Plain conversation comments not yet handed to the fixer (newer than the last addressed). */
44
+ export declare function outstandingComments(snapshot: PullRequestReviewSnapshot, lastAddressedCommentAt: number | null | undefined): PullRequestComment[];
45
+ /** Render the outstanding feedback into the instruction block folded into the fixer's prompt. */
46
+ export declare function renderReviewFeedbackForFixer(threads: ReviewThread[], comments: PullRequestComment[]): string;
47
+ /**
48
+ * Decide what the human-review gate does this poll. See the decision table:
49
+ * 1. No PR → advance (nothing to gate).
50
+ * 2. Approved + nothing outstanding → advance.
51
+ * 3. Outstanding feedback:
52
+ * - approved → dispatch the fixer immediately (the reviewer signed off; just clear comments).
53
+ * - not approved → dispatch once the grace window has elapsed since the latest comment;
54
+ * otherwise wait (let the reviewer finish a series of comments before churning the branch).
55
+ * 4. Not approved + nothing outstanding → wait (the reviewer hasn't acted / hasn't approved).
56
+ *
57
+ * Plain conversation comments are LOW-signal, so they count as actionable only while the PR is
58
+ * NOT yet approved (the reviewer is still iterating and may drop an instruction in the thread).
59
+ * Once approved, only explicit unresolved review THREADS trigger a fix — a casual "lgtm"/"thanks"
60
+ * after sign-off must never churn the branch with a pointless fixer round. A human can always
61
+ * force a change post-approval via the freeform request-fix control.
62
+ */
63
+ export declare function classifyHumanReview(snapshot: PullRequestReviewSnapshot, gateState: Pick<GateStepState, 'lastAddressedCommentAt'>, opts: {
64
+ graceMinutes: number;
65
+ now: number;
66
+ }): HumanReviewVerdict;
67
+ //# sourceMappingURL=review.logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.logic.d.ts","sourceRoot":"","sources":["../src/review.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,yBAAyB,EACzB,YAAY,EACb,MAAM,qBAAqB,CAAA;AAO5B,yCAAyC;AACzC,MAAM,MAAM,kBAAkB;AAC5B,iFAAiF;AAC/E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACrC;;;;;GAKG;GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AACjG,iGAAiG;GAC/F;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,MAAM,CAE7E;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,YAAY,EAAE,CAEtF;AAED,+FAA+F;AAC/F,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,yBAAyB,EACnC,sBAAsB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChD,kBAAkB,EAAE,CAGtB;AAUD,iGAAiG;AACjG,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,MAAM,CAqBR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,yBAAyB,EACnC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,wBAAwB,CAAC,EACxD,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC1C,kBAAkB,CAgCpB"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * How many approving reviews the PR needs. The `human-review` gate is OPT-IN — a team only adds
3
+ * it to a pipeline because they want a human to sign off — so it ALWAYS requires at least one
4
+ * approval, even when GitHub's branch protection requires fewer (a repo with `0` required reviews,
5
+ * or an unreadable protection rule that the provider defaults to `1`). Otherwise the gate would
6
+ * advance with no human approval at all, defeating its entire purpose.
7
+ */
8
+ export function requiredApprovals(snapshot) {
9
+ return Math.max(1, snapshot.requiredApprovingReviewCount);
10
+ }
11
+ /** Whether the PR meets the required number of assigned-reviewer approvals. */
12
+ export function isApproved(snapshot) {
13
+ return snapshot.approvals >= requiredApprovals(snapshot);
14
+ }
15
+ /**
16
+ * Unresolved review threads that need work: every unresolved thread whose LATEST comment is NOT
17
+ * the bot's. Excluding bot-latest threads prevents re-dispatching on a thread the fixer just
18
+ * replied to (a resolve that lagged); a reviewer re-opening with a fresh human comment flips the
19
+ * latest author back and makes it outstanding again.
20
+ */
21
+ export function outstandingThreads(snapshot) {
22
+ return snapshot.unresolvedThreads.filter((t) => !t.isBot);
23
+ }
24
+ /** Plain conversation comments not yet handed to the fixer (newer than the last addressed). */
25
+ export function outstandingComments(snapshot, lastAddressedCommentAt) {
26
+ const since = lastAddressedCommentAt ?? 0;
27
+ return snapshot.comments.filter((c) => !c.isBot && c.createdAt > since);
28
+ }
29
+ /** The newest "comment" timestamp across the outstanding threads + plain comments (for grace). */
30
+ function latestOutstandingAt(threads, comments) {
31
+ let max = 0;
32
+ for (const t of threads)
33
+ if (t.latestCommentAt > max)
34
+ max = t.latestCommentAt;
35
+ for (const c of comments)
36
+ if (c.createdAt > max)
37
+ max = c.createdAt;
38
+ return max;
39
+ }
40
+ /** Render the outstanding feedback into the instruction block folded into the fixer's prompt. */
41
+ export function renderReviewFeedbackForFixer(threads, comments) {
42
+ const lines = [
43
+ 'A human reviewer left the feedback below on this pull request.',
44
+ 'Address every item, commit your fixes to the PR branch, and for each review thread post a',
45
+ 'short reply noting how you addressed it so the thread can be resolved.',
46
+ '',
47
+ ];
48
+ if (threads.length > 0) {
49
+ lines.push('Review threads:');
50
+ for (const t of threads) {
51
+ const where = t.path ? ` (${t.path}${t.line != null ? `:${t.line}` : ''})` : '';
52
+ lines.push(`- ${t.author || 'reviewer'}${where}: ${t.bodyExcerpt}`);
53
+ }
54
+ lines.push('');
55
+ }
56
+ if (comments.length > 0) {
57
+ lines.push('PR comments:');
58
+ for (const c of comments)
59
+ lines.push(`- ${c.author || 'reviewer'}: ${c.body}`);
60
+ lines.push('');
61
+ }
62
+ return lines.join('\n').trim();
63
+ }
64
+ /**
65
+ * Decide what the human-review gate does this poll. See the decision table:
66
+ * 1. No PR → advance (nothing to gate).
67
+ * 2. Approved + nothing outstanding → advance.
68
+ * 3. Outstanding feedback:
69
+ * - approved → dispatch the fixer immediately (the reviewer signed off; just clear comments).
70
+ * - not approved → dispatch once the grace window has elapsed since the latest comment;
71
+ * otherwise wait (let the reviewer finish a series of comments before churning the branch).
72
+ * 4. Not approved + nothing outstanding → wait (the reviewer hasn't acted / hasn't approved).
73
+ *
74
+ * Plain conversation comments are LOW-signal, so they count as actionable only while the PR is
75
+ * NOT yet approved (the reviewer is still iterating and may drop an instruction in the thread).
76
+ * Once approved, only explicit unresolved review THREADS trigger a fix — a casual "lgtm"/"thanks"
77
+ * after sign-off must never churn the branch with a pointless fixer round. A human can always
78
+ * force a change post-approval via the freeform request-fix control.
79
+ */
80
+ export function classifyHumanReview(snapshot, gateState, opts) {
81
+ if (snapshot.headSha === null) {
82
+ return { kind: 'advance', reason: 'No open PR to review.' };
83
+ }
84
+ const threads = outstandingThreads(snapshot);
85
+ const approved = isApproved(snapshot);
86
+ const comments = approved ? [] : outstandingComments(snapshot, gateState.lastAddressedCommentAt);
87
+ const hasOutstanding = threads.length > 0 || comments.length > 0;
88
+ if (!hasOutstanding) {
89
+ return approved
90
+ ? {
91
+ kind: 'advance',
92
+ reason: `Approved by ${snapshot.approvals} reviewer(s) with no unresolved review threads.`,
93
+ }
94
+ : { kind: 'wait', reason: 'Awaiting a human approval on the PR.' };
95
+ }
96
+ const dispatch = () => ({
97
+ kind: 'dispatch',
98
+ instructions: renderReviewFeedbackForFixer(threads, comments),
99
+ threadIds: threads.map((t) => t.threadId),
100
+ latestCommentAt: comments.length > 0 ? Math.max(...comments.map((c) => c.createdAt)) : null,
101
+ });
102
+ if (approved)
103
+ return dispatch();
104
+ const graceElapsed = opts.now - latestOutstandingAt(threads, comments) >= opts.graceMinutes * 60_000;
105
+ return graceElapsed
106
+ ? dispatch()
107
+ : { kind: 'wait', reason: 'Review comments left; waiting out the grace window before fixing.' };
108
+ }
109
+ //# sourceMappingURL=review.logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.logic.js","sourceRoot":"","sources":["../src/review.logic.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/gates",
3
- "version": "0.1.12",
3
+ "version": "0.2.0",
4
4
  "description": "The built-in polling-gate suite (CI, merge-conflicts, post-release health + the on-call escalation) for the Agent Architecture Board, authored entirely through the public gate-registry seam — depends only on @cat-factory/kernel + @cat-factory/contracts, never the engine. A deployment imports it for side effect and wires each gate's provider via the exported wireX handles.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,8 +24,8 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@cat-factory/contracts": "0.32.0",
28
- "@cat-factory/kernel": "0.35.0"
27
+ "@cat-factory/contracts": "0.34.0",
28
+ "@cat-factory/kernel": "0.37.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "typescript": "7.0.1-rc",