@generacy-ai/orchestrator 0.6.0 → 0.8.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/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +32 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +436 -7
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/launcher/agent-launcher.d.ts +15 -16
- package/dist/launcher/agent-launcher.d.ts.map +1 -1
- package/dist/launcher/agent-launcher.js +54 -23
- package/dist/launcher/agent-launcher.js.map +1 -1
- package/dist/launcher/constants.d.ts +5 -0
- package/dist/launcher/constants.d.ts.map +1 -0
- package/dist/launcher/constants.js +5 -0
- package/dist/launcher/constants.js.map +1 -0
- package/dist/launcher/errors.d.ts +15 -0
- package/dist/launcher/errors.d.ts.map +1 -0
- package/dist/launcher/errors.js +25 -0
- package/dist/launcher/errors.js.map +1 -0
- package/dist/launcher/generic-subprocess-plugin.d.ts +1 -0
- package/dist/launcher/generic-subprocess-plugin.d.ts.map +1 -1
- package/dist/launcher/generic-subprocess-plugin.js +2 -0
- package/dist/launcher/generic-subprocess-plugin.js.map +1 -1
- package/dist/launcher/index.d.ts +2 -1
- package/dist/launcher/index.d.ts.map +1 -1
- package/dist/launcher/index.js +1 -0
- package/dist/launcher/index.js.map +1 -1
- package/dist/launcher/types.d.ts +81 -4
- package/dist/launcher/types.d.ts.map +1 -1
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +5 -0
- package/dist/routes/health.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +130 -26
- package/dist/server.js.map +1 -1
- package/dist/services/base-advance-monitor-service.d.ts +78 -0
- package/dist/services/base-advance-monitor-service.d.ts.map +1 -0
- package/dist/services/base-advance-monitor-service.js +233 -0
- package/dist/services/base-advance-monitor-service.js.map +1 -0
- package/dist/services/boot-resume-service.d.ts +19 -0
- package/dist/services/boot-resume-service.d.ts.map +1 -0
- package/dist/services/boot-resume-service.js +87 -0
- package/dist/services/boot-resume-service.js.map +1 -0
- package/dist/services/epic-completion-monitor-service.d.ts.map +1 -1
- package/dist/services/epic-completion-monitor-service.js +2 -0
- package/dist/services/epic-completion-monitor-service.js.map +1 -1
- package/dist/services/in-memory-queue-adapter.d.ts +4 -0
- package/dist/services/in-memory-queue-adapter.d.ts.map +1 -1
- package/dist/services/in-memory-queue-adapter.js +30 -3
- package/dist/services/in-memory-queue-adapter.js.map +1 -1
- package/dist/services/label-monitor-service.d.ts +3 -3
- package/dist/services/label-monitor-service.d.ts.map +1 -1
- package/dist/services/label-monitor-service.js +58 -41
- package/dist/services/label-monitor-service.js.map +1 -1
- package/dist/services/label-sync-service.d.ts.map +1 -1
- package/dist/services/label-sync-service.js +45 -10
- package/dist/services/label-sync-service.js.map +1 -1
- package/dist/services/merge-conflict-monitor-service.d.ts +73 -0
- package/dist/services/merge-conflict-monitor-service.d.ts.map +1 -0
- package/dist/services/merge-conflict-monitor-service.js +295 -0
- package/dist/services/merge-conflict-monitor-service.js.map +1 -0
- package/dist/services/orchestrator-version.d.ts +2 -0
- package/dist/services/orchestrator-version.d.ts.map +1 -0
- package/dist/services/orchestrator-version.js +23 -0
- package/dist/services/orchestrator-version.js.map +1 -0
- package/dist/services/phase-tracker-service.d.ts +10 -0
- package/dist/services/phase-tracker-service.d.ts.map +1 -1
- package/dist/services/phase-tracker-service.js +38 -0
- package/dist/services/phase-tracker-service.js.map +1 -1
- package/dist/services/post-activation-dispatch.d.ts +18 -0
- package/dist/services/post-activation-dispatch.d.ts.map +1 -0
- package/dist/services/post-activation-dispatch.js +30 -0
- package/dist/services/post-activation-dispatch.js.map +1 -0
- package/dist/services/post-activation-retry.d.ts +3 -0
- package/dist/services/post-activation-retry.d.ts.map +1 -1
- package/dist/services/post-activation-retry.js +34 -2
- package/dist/services/post-activation-retry.js.map +1 -1
- package/dist/services/pr-feedback-monitor-service.d.ts +13 -4
- package/dist/services/pr-feedback-monitor-service.d.ts.map +1 -1
- package/dist/services/pr-feedback-monitor-service.js +212 -26
- package/dist/services/pr-feedback-monitor-service.js.map +1 -1
- package/dist/services/redis-queue-adapter.d.ts +4 -0
- package/dist/services/redis-queue-adapter.d.ts.map +1 -1
- package/dist/services/redis-queue-adapter.js +90 -10
- package/dist/services/redis-queue-adapter.js.map +1 -1
- package/dist/services/worker-dispatcher.d.ts +14 -2
- package/dist/services/worker-dispatcher.d.ts.map +1 -1
- package/dist/services/worker-dispatcher.js +55 -2
- package/dist/services/worker-dispatcher.js.map +1 -1
- package/dist/types/api.d.ts +3 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js +1 -0
- package/dist/types/api.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/monitor.d.ts +72 -4
- package/dist/types/monitor.d.ts.map +1 -1
- package/dist/worker/base-merge.d.ts +54 -0
- package/dist/worker/base-merge.d.ts.map +1 -0
- package/dist/worker/base-merge.js +99 -0
- package/dist/worker/base-merge.js.map +1 -0
- package/dist/worker/clarification-markers.d.ts +29 -0
- package/dist/worker/clarification-markers.d.ts.map +1 -0
- package/dist/worker/clarification-markers.js +44 -0
- package/dist/worker/clarification-markers.js.map +1 -0
- package/dist/worker/clarification-poster.d.ts.map +1 -1
- package/dist/worker/clarification-poster.js +266 -25
- package/dist/worker/clarification-poster.js.map +1 -1
- package/dist/worker/claude-cli-worker.d.ts +21 -2
- package/dist/worker/claude-cli-worker.d.ts.map +1 -1
- package/dist/worker/claude-cli-worker.js +150 -4
- package/dist/worker/claude-cli-worker.js.map +1 -1
- package/dist/worker/cli-spawner.d.ts +4 -0
- package/dist/worker/cli-spawner.d.ts.map +1 -1
- package/dist/worker/cli-spawner.js +53 -7
- package/dist/worker/cli-spawner.js.map +1 -1
- package/dist/worker/config.d.ts +420 -8
- package/dist/worker/config.d.ts.map +1 -1
- package/dist/worker/config.js +179 -2
- package/dist/worker/config.js.map +1 -1
- package/dist/worker/evidence-hash.d.ts +32 -0
- package/dist/worker/evidence-hash.d.ts.map +1 -0
- package/dist/worker/evidence-hash.js +139 -0
- package/dist/worker/evidence-hash.js.map +1 -0
- package/dist/worker/handler-outcome-assertion.d.ts +38 -0
- package/dist/worker/handler-outcome-assertion.d.ts.map +1 -0
- package/dist/worker/handler-outcome-assertion.js +58 -0
- package/dist/worker/handler-outcome-assertion.js.map +1 -0
- package/dist/worker/handler-outcome.d.ts +50 -0
- package/dist/worker/handler-outcome.d.ts.map +1 -0
- package/dist/worker/handler-outcome.js +2 -0
- package/dist/worker/handler-outcome.js.map +1 -0
- package/dist/worker/label-manager.d.ts +58 -2
- package/dist/worker/label-manager.d.ts.map +1 -1
- package/dist/worker/label-manager.js +225 -27
- package/dist/worker/label-manager.js.map +1 -1
- package/dist/worker/merge-conflict-handler.d.ts +141 -0
- package/dist/worker/merge-conflict-handler.d.ts.map +1 -0
- package/dist/worker/merge-conflict-handler.js +642 -0
- package/dist/worker/merge-conflict-handler.js.map +1 -0
- package/dist/worker/merge-conflict-prompt.d.ts +35 -0
- package/dist/worker/merge-conflict-prompt.d.ts.map +1 -0
- package/dist/worker/merge-conflict-prompt.js +71 -0
- package/dist/worker/merge-conflict-prompt.js.map +1 -0
- package/dist/worker/merge-conflict-remedy.d.ts +42 -0
- package/dist/worker/merge-conflict-remedy.d.ts.map +1 -0
- package/dist/worker/merge-conflict-remedy.js +28 -0
- package/dist/worker/merge-conflict-remedy.js.map +1 -0
- package/dist/worker/output-tail-synthesis.d.ts +15 -0
- package/dist/worker/output-tail-synthesis.d.ts.map +1 -0
- package/dist/worker/output-tail-synthesis.js +25 -0
- package/dist/worker/output-tail-synthesis.js.map +1 -0
- package/dist/worker/output-tail.d.ts +13 -0
- package/dist/worker/output-tail.d.ts.map +1 -0
- package/dist/worker/output-tail.js +31 -0
- package/dist/worker/output-tail.js.map +1 -0
- package/dist/worker/pause-context.d.ts +30 -0
- package/dist/worker/pause-context.d.ts.map +1 -0
- package/dist/worker/pause-context.js +98 -0
- package/dist/worker/pause-context.js.map +1 -0
- package/dist/worker/phase-loop.d.ts +66 -0
- package/dist/worker/phase-loop.d.ts.map +1 -1
- package/dist/worker/phase-loop.js +329 -30
- package/dist/worker/phase-loop.js.map +1 -1
- package/dist/worker/pr-feedback-handler.d.ts +46 -46
- package/dist/worker/pr-feedback-handler.d.ts.map +1 -1
- package/dist/worker/pr-feedback-handler.js +286 -108
- package/dist/worker/pr-feedback-handler.js.map +1 -1
- package/dist/worker/pr-manager.d.ts +5 -0
- package/dist/worker/pr-manager.d.ts.map +1 -1
- package/dist/worker/pr-manager.js +7 -0
- package/dist/worker/pr-manager.js.map +1 -1
- package/dist/worker/product-diff.d.ts +39 -0
- package/dist/worker/product-diff.d.ts.map +1 -0
- package/dist/worker/product-diff.js +43 -0
- package/dist/worker/product-diff.js.map +1 -0
- package/dist/worker/provisioning-failure.d.ts +14 -0
- package/dist/worker/provisioning-failure.d.ts.map +1 -0
- package/dist/worker/provisioning-failure.js +2 -0
- package/dist/worker/provisioning-failure.js.map +1 -0
- package/dist/worker/repo-checkout.d.ts +14 -0
- package/dist/worker/repo-checkout.d.ts.map +1 -1
- package/dist/worker/repo-checkout.js +19 -1
- package/dist/worker/repo-checkout.js.map +1 -1
- package/dist/worker/stage-comment-manager.d.ts +42 -1
- package/dist/worker/stage-comment-manager.d.ts.map +1 -1
- package/dist/worker/stage-comment-manager.js +205 -1
- package/dist/worker/stage-comment-manager.js.map +1 -1
- package/dist/worker/terminal-label-op-error.d.ts +23 -0
- package/dist/worker/terminal-label-op-error.d.ts.map +1 -0
- package/dist/worker/terminal-label-op-error.js +27 -0
- package/dist/worker/terminal-label-op-error.js.map +1 -0
- package/dist/worker/types.d.ts +181 -2
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/types.js +11 -0
- package/dist/worker/types.js.map +1 -1
- package/dist/worker/validate-fix-handler.d.ts +79 -0
- package/dist/worker/validate-fix-handler.d.ts.map +1 -0
- package/dist/worker/validate-fix-handler.js +320 -0
- package/dist/worker/validate-fix-handler.js.map +1 -0
- package/dist/worker/worker-result.d.ts +39 -0
- package/dist/worker/worker-result.d.ts.map +1 -0
- package/dist/worker/worker-result.js +10 -0
- package/dist/worker/worker-result.js.map +1 -0
- package/package.json +12 -7
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type GitHubClientFactory } from '@generacy-ai/workflow-engine';
|
|
2
|
-
import type { MonitorState,
|
|
2
|
+
import type { MonitorState, QueueManager, PrReviewEvent } from '../types/monitor.js';
|
|
3
3
|
import type { RepositoryConfig, PrMonitorConfig } from '../config/schema.js';
|
|
4
4
|
import type { Logger } from '../worker/types.js';
|
|
5
5
|
import type { AuthHealthSink } from './label-monitor-service.js';
|
|
@@ -19,16 +19,17 @@ export declare class PrFeedbackMonitorService {
|
|
|
19
19
|
private readonly logger;
|
|
20
20
|
private readonly createClient;
|
|
21
21
|
private readonly tokenProvider?;
|
|
22
|
-
private readonly
|
|
23
|
-
private readonly queueAdapter;
|
|
22
|
+
private readonly queueManager;
|
|
24
23
|
private readonly options;
|
|
25
24
|
private readonly prLinker;
|
|
26
25
|
private readonly clusterGithubUsername;
|
|
27
26
|
private readonly authHealth;
|
|
28
27
|
private readonly githubAppCredentialId;
|
|
29
28
|
private abortController;
|
|
29
|
+
private lastUnresolvedThreadCount;
|
|
30
|
+
private lastZeroTrustedState;
|
|
30
31
|
private state;
|
|
31
|
-
constructor(logger: Logger, createClient: GitHubClientFactory,
|
|
32
|
+
constructor(logger: Logger, createClient: GitHubClientFactory, queueManager: QueueManager, config: PrMonitorConfig, repositories: RepositoryConfig[], clusterGithubUsername?: string, tokenProvider?: () => Promise<string | undefined>, authHealth?: AuthHealthSink, githubAppCredentialId?: string);
|
|
32
33
|
/**
|
|
33
34
|
* Process a PR review event: link PR to issue, check for unresolved threads,
|
|
34
35
|
* deduplicate, and enqueue feedback-addressing work.
|
|
@@ -38,6 +39,14 @@ export declare class PrFeedbackMonitorService {
|
|
|
38
39
|
* @returns true if feedback was enqueued, false if skipped or duplicate
|
|
39
40
|
*/
|
|
40
41
|
processPrReviewEvent(event: PrReviewEvent): Promise<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* Post a single top-level PR comment notifying the operator that every
|
|
44
|
+
* unresolved review-thread comment is currently untrusted. Idempotent via
|
|
45
|
+
* the `UNTRUSTED_NOTICE_MARKER` grep against existing PR comments. Failures
|
|
46
|
+
* to list or post comments are non-fatal — logged and swallowed so they
|
|
47
|
+
* never break the poll cycle.
|
|
48
|
+
*/
|
|
49
|
+
private maybePostUntrustedNotice;
|
|
41
50
|
/**
|
|
42
51
|
* Start the polling loop.
|
|
43
52
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-feedback-monitor-service.d.ts","sourceRoot":"","sources":["../../src/services/pr-feedback-monitor-service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"pr-feedback-monitor-service.d.ts","sourceRoot":"","sources":["../../src/services/pr-feedback-monitor-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,mBAAmB,EAEzB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EAEZ,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AASjE,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAWD;;;;;GAKG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAoC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAqB;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAqB;IAC3D,OAAO,CAAC,eAAe,CAAgC;IAIvD,OAAO,CAAC,yBAAyB,CAAkC;IAKnE,OAAO,CAAC,oBAAoB,CAAmC;IAE/D,OAAO,CAAC,KAAK,CAAe;gBAG1B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,gBAAgB,EAAE,EAChC,qBAAqB,CAAC,EAAE,MAAM,EAC9B,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,EACjD,UAAU,CAAC,EAAE,cAAc,EAC3B,qBAAqB,CAAC,EAAE,MAAM;IA8BhC;;;;;;;OAOG;IACG,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAySlE;;;;;;OAMG;YACW,wBAAwB;IA2DtC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCnC;;OAEG;IACH,WAAW,IAAI,IAAI;IAQnB;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B;;;OAGG;YACW,QAAQ;IAgGtB;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAwD7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAc1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2B7B,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC;IAQlC;;;;;OAKG;YACW,mBAAmB;IA0CjC,OAAO,CAAC,KAAK;CAkBd"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import { GhAuthError } from '@generacy-ai/workflow-engine';
|
|
1
|
+
import { GhAuthError, isTrustedCommentAuthor, } from '@generacy-ai/workflow-engine';
|
|
2
2
|
import { JitTokenError } from '@generacy-ai/control-plane';
|
|
3
3
|
import { PrLinker } from '../worker/pr-linker.js';
|
|
4
|
+
/**
|
|
5
|
+
* #869 / FR-004 idempotency marker embedded in bot-authored top-level PR
|
|
6
|
+
* comments. Grep-checked against `gh pr view --json comments` before posting
|
|
7
|
+
* to guarantee one notice per zero-trusted episode.
|
|
8
|
+
*/
|
|
9
|
+
const UNTRUSTED_NOTICE_MARKER = '<!-- generacy:pr-feedback-untrusted-notice -->';
|
|
4
10
|
const WAITING_FOR_PR_FEEDBACK_LABEL = 'waiting-for:address-pr-feedback';
|
|
5
|
-
const DEDUP_PHASE = 'address-pr-feedback';
|
|
6
11
|
const MIN_POLL_INTERVAL_MS = 10000;
|
|
7
12
|
/**
|
|
8
13
|
* Adaptive polling divisor for PR feedback monitor.
|
|
@@ -20,21 +25,26 @@ export class PrFeedbackMonitorService {
|
|
|
20
25
|
logger;
|
|
21
26
|
createClient;
|
|
22
27
|
tokenProvider;
|
|
23
|
-
|
|
24
|
-
queueAdapter;
|
|
28
|
+
queueManager;
|
|
25
29
|
options;
|
|
26
30
|
prLinker;
|
|
27
31
|
clusterGithubUsername;
|
|
28
32
|
authHealth;
|
|
29
33
|
githubAppCredentialId;
|
|
30
34
|
abortController = null;
|
|
35
|
+
// #861: state-transition tracking for zero-unresolved skip logging. Key is
|
|
36
|
+
// `${owner}/${repo}#${prNumber}`. Never evicted (open PR set is bounded).
|
|
37
|
+
lastUnresolvedThreadCount = new Map();
|
|
38
|
+
// #869 / FR-004: transition-edge tracking for zero-trusted notice posting.
|
|
39
|
+
// Keyed as `${owner}/${repo}#${prNumber}`. Not persisted; monitor restart
|
|
40
|
+
// re-triggers the notice, which is idempotency-safe via the marker grep.
|
|
41
|
+
lastZeroTrustedState = new Map();
|
|
31
42
|
state;
|
|
32
|
-
constructor(logger, createClient,
|
|
43
|
+
constructor(logger, createClient, queueManager, config, repositories, clusterGithubUsername, tokenProvider, authHealth, githubAppCredentialId) {
|
|
33
44
|
this.logger = logger;
|
|
34
45
|
this.createClient = createClient;
|
|
35
46
|
this.tokenProvider = tokenProvider;
|
|
36
|
-
this.
|
|
37
|
-
this.queueAdapter = queueAdapter;
|
|
47
|
+
this.queueManager = queueManager;
|
|
38
48
|
this.clusterGithubUsername = clusterGithubUsername;
|
|
39
49
|
this.authHealth = authHealth ?? { recordResult: () => undefined };
|
|
40
50
|
this.githubAppCredentialId = githubAppCredentialId;
|
|
@@ -95,32 +105,157 @@ export class PrFeedbackMonitorService {
|
|
|
95
105
|
this.logger.warn({ owner, repo, issueNumber, assignees }, 'Issue has multiple assignees — may be processed by multiple clusters');
|
|
96
106
|
}
|
|
97
107
|
}
|
|
98
|
-
// 3. Fetch review
|
|
108
|
+
// 3. Fetch review threads via GraphQL and filter for unresolved threads.
|
|
109
|
+
// #861: replaces the REST-comment-based path — REST never returned
|
|
110
|
+
// `.resolved`, so the previous filter always matched nothing.
|
|
111
|
+
// #869 / FR-005: trust-filter each unresolved thread's comments BEFORE
|
|
112
|
+
// enqueue. Zero-trusted PRs skip enqueue and emit the FR-003 warn +
|
|
113
|
+
// FR-004 top-level notice.
|
|
99
114
|
let unresolvedThreadIds;
|
|
115
|
+
let totalUnresolvedThreads;
|
|
116
|
+
let untrustedCommentSkips;
|
|
117
|
+
let totalThreads;
|
|
100
118
|
try {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
|
|
119
|
+
const threads = await client.getPRReviewThreads(owner, repo, prNumber);
|
|
120
|
+
totalThreads = threads.length;
|
|
121
|
+
const unresolvedThreads = threads.filter(t => !t.isResolved);
|
|
122
|
+
totalUnresolvedThreads = unresolvedThreads.length;
|
|
123
|
+
const botLogin = process.env['CLUSTER_GITHUB_USERNAME'] ?? process.env['GH_USERNAME'];
|
|
124
|
+
const trustedIds = [];
|
|
125
|
+
const skips = [];
|
|
126
|
+
for (const thread of unresolvedThreads) {
|
|
127
|
+
let threadHasTrusted = false;
|
|
128
|
+
for (const c of thread.comments) {
|
|
129
|
+
const decision = isTrustedCommentAuthor(c, 'pr-feedback', {
|
|
130
|
+
logger: this.logger,
|
|
131
|
+
...(botLogin ? { botLogin } : {}),
|
|
132
|
+
});
|
|
133
|
+
if (decision.trusted) {
|
|
134
|
+
threadHasTrusted = true;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
skips.push({
|
|
138
|
+
commentId: c.id,
|
|
139
|
+
author: c.author,
|
|
140
|
+
authorAssociation: c.authorAssociation,
|
|
141
|
+
reason: decision.reason,
|
|
142
|
+
viewerDidAuthor: c.viewerDidAuthor,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (threadHasTrusted) {
|
|
147
|
+
trustedIds.push(thread.rootCommentId);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
unresolvedThreadIds = trustedIds;
|
|
151
|
+
untrustedCommentSkips = skips;
|
|
105
152
|
}
|
|
106
153
|
catch (error) {
|
|
107
|
-
|
|
154
|
+
if (error instanceof GhAuthError) {
|
|
155
|
+
if (this.githubAppCredentialId) {
|
|
156
|
+
this.authHealth.recordResult(this.githubAppCredentialId, { ok: false, statusCode: error.statusCode });
|
|
157
|
+
}
|
|
158
|
+
this.logger.error({ err: error, owner, repo, prNumber, statusCode: error.statusCode }, 'GraphQL review-threads call failed (auth)');
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
this.logger.warn({ error: error instanceof Error ? error.message : String(error), owner, repo, prNumber }, 'GraphQL review-threads call failed (transient)');
|
|
108
162
|
return false;
|
|
109
163
|
}
|
|
164
|
+
// Successful call — mark auth-health OK for this credential.
|
|
165
|
+
if (this.githubAppCredentialId) {
|
|
166
|
+
this.authHealth.recordResult(this.githubAppCredentialId, { ok: true });
|
|
167
|
+
}
|
|
168
|
+
const stateKey = `${owner}/${repo}#${prNumber}`;
|
|
169
|
+
// Case C: no unresolved threads at all — reset both state maps.
|
|
170
|
+
if (totalUnresolvedThreads === 0) {
|
|
171
|
+
// #861 state-transition logging: `info` on transition, `debug` on
|
|
172
|
+
// steady-state. Bootstrap (previous === undefined) counts as a transition.
|
|
173
|
+
const previous = this.lastUnresolvedThreadCount.get(stateKey);
|
|
174
|
+
const isTransition = previous === undefined || previous !== 0;
|
|
175
|
+
const logFn = isTransition ? this.logger.info : this.logger.debug;
|
|
176
|
+
logFn.call(this.logger, {
|
|
177
|
+
owner, repo, prNumber, issueNumber,
|
|
178
|
+
totalThreads,
|
|
179
|
+
unresolvedThreads: 0,
|
|
180
|
+
previousUnresolvedThreads: previous ?? null,
|
|
181
|
+
}, isTransition
|
|
182
|
+
? 'No unresolved review threads (state change)'
|
|
183
|
+
: 'No unresolved review threads — skipping');
|
|
184
|
+
this.lastUnresolvedThreadCount.set(stateKey, 0);
|
|
185
|
+
this.lastZeroTrustedState.set(stateKey, false);
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
// Case B: unresolved threads exist, but zero of them are trust-live.
|
|
189
|
+
// #869 / FR-002, FR-003, FR-004: skip enqueue, emit warn log naming the
|
|
190
|
+
// untrusted skips, and post a top-level notice on the transition edge.
|
|
110
191
|
if (unresolvedThreadIds.length === 0) {
|
|
111
|
-
|
|
192
|
+
// #878 skip-warn shape: per-comment viewerDidAuthor replaces the
|
|
193
|
+
// clusterIdentity / normalizedClusterIdentity / normalizedAuthor
|
|
194
|
+
// fields from the #874 login-comparison scheme.
|
|
195
|
+
this.logger.warn({
|
|
196
|
+
owner, repo, prNumber, issueNumber,
|
|
197
|
+
totalUnresolvedThreads,
|
|
198
|
+
untrustedCommentSkips: untrustedCommentSkips.map((s) => ({
|
|
199
|
+
commentId: s.commentId,
|
|
200
|
+
author: s.author,
|
|
201
|
+
authorAssociation: s.authorAssociation,
|
|
202
|
+
reason: s.reason,
|
|
203
|
+
viewerDidAuthor: s.viewerDidAuthor ?? null,
|
|
204
|
+
})),
|
|
205
|
+
}, 'PR has unresolved threads but every comment author is untrusted');
|
|
206
|
+
const previousZeroTrusted = this.lastZeroTrustedState.get(stateKey);
|
|
207
|
+
if (previousZeroTrusted !== true) {
|
|
208
|
+
await this.maybePostUntrustedNotice(client, owner, repo, prNumber);
|
|
209
|
+
}
|
|
210
|
+
this.lastZeroTrustedState.set(stateKey, true);
|
|
211
|
+
this.lastUnresolvedThreadCount.set(stateKey, totalUnresolvedThreads);
|
|
112
212
|
return false;
|
|
113
213
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
214
|
+
// Case A: at least one thread is trust-live — proceed to enqueue.
|
|
215
|
+
if (untrustedCommentSkips.length > 0) {
|
|
216
|
+
this.logger.debug({ owner, repo, prNumber, issueNumber, untrustedCommentSkips }, 'Some unresolved comments were skipped by trust filter (mixed-trust PR)');
|
|
217
|
+
}
|
|
218
|
+
this.lastZeroTrustedState.set(stateKey, false);
|
|
219
|
+
// Case A tail (#883): before enqueue, check for any `blocked:*` label on
|
|
220
|
+
// the linked issue. The handler adds `blocked:stuck-feedback-loop` when
|
|
221
|
+
// its fix cycle can't advance; the operator removes the label to permit
|
|
222
|
+
// another attempt. Any `blocked:*` prefix is the contract — no allow-list.
|
|
223
|
+
let issueLabels;
|
|
224
|
+
try {
|
|
225
|
+
issueLabels = await client.getIssueLabels(owner, repo, issueNumber);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
this.logger.warn({ err: error, owner, repo, issueNumber }, 'Failed to fetch issue labels for blocked:* skip check — proceeding without skip');
|
|
229
|
+
issueLabels = [];
|
|
230
|
+
}
|
|
231
|
+
const blockedLabel = issueLabels.find(l => l.startsWith('blocked:'));
|
|
232
|
+
if (blockedLabel) {
|
|
233
|
+
this.logger.info({
|
|
234
|
+
owner, repo, prNumber, issueNumber,
|
|
235
|
+
blockedLabel,
|
|
236
|
+
unresolvedThreads: unresolvedThreadIds.length,
|
|
237
|
+
reason: 'blocked-label-present',
|
|
238
|
+
}, 'Skipping PR-feedback enqueue while blocked:* label is present');
|
|
239
|
+
// Idempotent-state hygiene: keep the transition-log map fresh so the
|
|
240
|
+
// next non-blocked poll doesn't look like a fresh transition.
|
|
241
|
+
this.lastUnresolvedThreadCount.set(stateKey, unresolvedThreadIds.length);
|
|
119
242
|
return false;
|
|
120
243
|
}
|
|
244
|
+
this.logger.info({ owner, repo, prNumber, issueNumber, linkMethod, unresolvedCount: unresolvedThreadIds.length }, `Found ${unresolvedThreadIds.length} unresolved review thread(s)`);
|
|
245
|
+
this.lastUnresolvedThreadCount.set(stateKey, unresolvedThreadIds.length);
|
|
246
|
+
// 4. #879 / FR-010: add the waiting-for label idempotently BEFORE enqueue so
|
|
247
|
+
// it survives an `enqueueIfAbsent → false` in-flight-collision drop. Label
|
|
248
|
+
// presence = "feedback pending"; enqueue is work scheduling. Failure to
|
|
249
|
+
// add is non-fatal warn.
|
|
250
|
+
try {
|
|
251
|
+
await client.addLabels(owner, repo, issueNumber, [WAITING_FOR_PR_FEEDBACK_LABEL]);
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
this.logger.warn({ err: error, owner, repo, issueNumber }, 'Failed to add waiting-for:address-pr-feedback label');
|
|
255
|
+
}
|
|
121
256
|
// 5. Resolve workflow name from issue labels
|
|
122
257
|
const workflowName = await this.resolveWorkflowName(owner, repo, issueNumber);
|
|
123
|
-
// 6. Build
|
|
258
|
+
// 6. Build queue item
|
|
124
259
|
const metadata = {
|
|
125
260
|
prNumber,
|
|
126
261
|
reviewThreadIds: unresolvedThreadIds,
|
|
@@ -136,16 +271,67 @@ export class PrFeedbackMonitorService {
|
|
|
136
271
|
metadata: metadata,
|
|
137
272
|
queueReason: 'resume',
|
|
138
273
|
};
|
|
139
|
-
|
|
274
|
+
// 7. #879 / FR-001: atomic in-flight-checked enqueue. Replaces the pre-#879
|
|
275
|
+
// `phaseTracker.tryMarkProcessed` SET-NX dedupe. Self-clearing by
|
|
276
|
+
// construction: when the handler completes/fails/drops via
|
|
277
|
+
// `QueueManager.complete()` / `.release()`, the itemKey leaves the
|
|
278
|
+
// in-flight SET and the next trusted state re-enqueues on the following
|
|
279
|
+
// poll — no TTL wait, no per-surface bookkeeping.
|
|
280
|
+
const itemKey = `${owner}/${repo}#${issueNumber}`;
|
|
281
|
+
const enqueued = await this.queueManager.enqueueIfAbsent(queueItem);
|
|
282
|
+
if (!enqueued) {
|
|
283
|
+
// FR-009: monitor-side context log paired with the adapter-level line.
|
|
284
|
+
this.logger.info({ itemKey, reason: 'in-flight', prNumber, issueNumber, owner, repo }, 'Dropping PR-feedback enqueue (item already in flight)');
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
140
287
|
this.logger.info({ owner, repo, issueNumber, prNumber, command: queueItem.command }, 'PR feedback work enqueued');
|
|
141
|
-
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
// ==========================================================================
|
|
291
|
+
// Zero-trusted notice posting (#869 / FR-004)
|
|
292
|
+
// ==========================================================================
|
|
293
|
+
/**
|
|
294
|
+
* Post a single top-level PR comment notifying the operator that every
|
|
295
|
+
* unresolved review-thread comment is currently untrusted. Idempotent via
|
|
296
|
+
* the `UNTRUSTED_NOTICE_MARKER` grep against existing PR comments. Failures
|
|
297
|
+
* to list or post comments are non-fatal — logged and swallowed so they
|
|
298
|
+
* never break the poll cycle.
|
|
299
|
+
*/
|
|
300
|
+
async maybePostUntrustedNotice(client, owner, repo, prNumber) {
|
|
301
|
+
let existingComments;
|
|
142
302
|
try {
|
|
143
|
-
await client.
|
|
303
|
+
existingComments = await client.listPrCommentBodies(owner, repo, prNumber);
|
|
144
304
|
}
|
|
145
|
-
catch (
|
|
146
|
-
this.logger.warn({ err:
|
|
305
|
+
catch (err) {
|
|
306
|
+
this.logger.warn({ err: String(err), owner, repo, prNumber }, 'Failed to list PR comments for untrusted-notice idempotency check — skipping notice this cycle');
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
if (existingComments.some(body => body.includes(UNTRUSTED_NOTICE_MARKER))) {
|
|
310
|
+
this.logger.debug({ owner, repo, prNumber }, 'Untrusted-notice marker already present — skipping notice post');
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
const body = [
|
|
314
|
+
UNTRUSTED_NOTICE_MARKER,
|
|
315
|
+
'',
|
|
316
|
+
'⚠️ **Feedback requires a trusted author**',
|
|
317
|
+
'',
|
|
318
|
+
'This PR has unresolved review threads, but every comment author is currently',
|
|
319
|
+
'classified as untrusted by the PR-feedback loop\'s trust filter (see #842).',
|
|
320
|
+
'',
|
|
321
|
+
'The loop will not automatically address this feedback until either:',
|
|
322
|
+
'- A repository OWNER / MEMBER / COLLABORATOR replies to one of the threads, **or**',
|
|
323
|
+
'- The cluster identity is configured to match one of the comment authors',
|
|
324
|
+
' (see the `CLUSTER_GITHUB_USERNAME` / `GH_USERNAME` chain).',
|
|
325
|
+
'',
|
|
326
|
+
'This is an automated notice from the PR-feedback monitor.',
|
|
327
|
+
].join('\n');
|
|
328
|
+
try {
|
|
329
|
+
await client.postPrComment(owner, repo, prNumber, body);
|
|
330
|
+
this.logger.info({ owner, repo, prNumber }, 'Posted untrusted-feedback notice on PR (FR-004)');
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
this.logger.warn({ err: String(err), owner, repo, prNumber }, 'Failed to post untrusted-feedback notice — will retry on next transition');
|
|
147
334
|
}
|
|
148
|
-
return true;
|
|
149
335
|
}
|
|
150
336
|
// ==========================================================================
|
|
151
337
|
// Polling
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-feedback-monitor-service.js","sourceRoot":"","sources":["../../src/services/pr-feedback-monitor-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pr-feedback-monitor-service.js","sourceRoot":"","sources":["../../src/services/pr-feedback-monitor-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,12 @@ export declare class RedisQueueAdapter implements QueueManager {
|
|
|
21
21
|
private readonly logger;
|
|
22
22
|
private readonly maxRetries;
|
|
23
23
|
private claimCommandDefined;
|
|
24
|
+
private enqueueIfAbsentCommandDefined;
|
|
24
25
|
constructor(redis: Redis, logger: Logger, config?: Pick<DispatchConfig, 'maxRetries'>);
|
|
25
26
|
private ensureClaimCommand;
|
|
27
|
+
private ensureEnqueueIfAbsentCommand;
|
|
28
|
+
enqueueIfAbsent(item: QueueItem): Promise<boolean>;
|
|
29
|
+
hasInFlight(itemKey: string): Promise<boolean>;
|
|
26
30
|
enqueue(item: QueueItem): Promise<void>;
|
|
27
31
|
claim(workerId: string): Promise<QueueItem | null>;
|
|
28
32
|
release(workerId: string, item: QueueItem): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-queue-adapter.d.ts","sourceRoot":"","sources":["../../src/services/redis-queue-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AAC1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"redis-queue-adapter.d.ts","sourceRoot":"","sources":["../../src/services/redis-queue-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AAC1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAmDzD,UAAU,MAAM;IACd,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACxD;AAcD;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,6BAA6B,CAAS;gBAElC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC;IAMrF,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,4BAA4B;IAS9B,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IA2ClD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU9C,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBvC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA8ClD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB1D,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAShC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAwC3E,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;CA2B9C"}
|
|
@@ -3,6 +3,26 @@ const PENDING_KEY = 'orchestrator:queue:pending';
|
|
|
3
3
|
const CLAIMED_KEY_PREFIX = 'orchestrator:queue:claimed:';
|
|
4
4
|
const HEARTBEAT_KEY_PREFIX = 'orchestrator:worker:';
|
|
5
5
|
const DEAD_LETTER_KEY = 'orchestrator:queue:dead-letter';
|
|
6
|
+
const IN_FLIGHT_KEY = 'orchestrator:queue:in-flight-items';
|
|
7
|
+
/**
|
|
8
|
+
* Lua script for atomic in-flight-checked enqueue.
|
|
9
|
+
* KEYS[1] = pending sorted set
|
|
10
|
+
* KEYS[2] = in-flight SET
|
|
11
|
+
* ARGV[1] = itemKey
|
|
12
|
+
* ARGV[2] = priority (numeric string)
|
|
13
|
+
* ARGV[3] = serialized item JSON
|
|
14
|
+
*
|
|
15
|
+
* Returns 1 if enqueued, 0 if already in flight.
|
|
16
|
+
*/
|
|
17
|
+
const ENQUEUE_IF_ABSENT_SCRIPT = `
|
|
18
|
+
local exists = redis.call('SISMEMBER', KEYS[2], ARGV[1])
|
|
19
|
+
if exists == 1 then
|
|
20
|
+
return 0
|
|
21
|
+
end
|
|
22
|
+
redis.call('SADD', KEYS[2], ARGV[1])
|
|
23
|
+
redis.call('ZADD', KEYS[1], tonumber(ARGV[2]), ARGV[3])
|
|
24
|
+
return 1
|
|
25
|
+
`;
|
|
6
26
|
/**
|
|
7
27
|
* Lua script for atomic claim: ZPOPMIN + HSET claimed + SET heartbeat.
|
|
8
28
|
* KEYS[1] = pending sorted set
|
|
@@ -43,6 +63,7 @@ export class RedisQueueAdapter {
|
|
|
43
63
|
logger;
|
|
44
64
|
maxRetries;
|
|
45
65
|
claimCommandDefined = false;
|
|
66
|
+
enqueueIfAbsentCommandDefined = false;
|
|
46
67
|
constructor(redis, logger, config) {
|
|
47
68
|
this.redis = redis;
|
|
48
69
|
this.logger = logger;
|
|
@@ -57,6 +78,53 @@ export class RedisQueueAdapter {
|
|
|
57
78
|
});
|
|
58
79
|
this.claimCommandDefined = true;
|
|
59
80
|
}
|
|
81
|
+
ensureEnqueueIfAbsentCommand() {
|
|
82
|
+
if (this.enqueueIfAbsentCommandDefined)
|
|
83
|
+
return;
|
|
84
|
+
this.redis.defineCommand('enqueueIfAbsent', {
|
|
85
|
+
numberOfKeys: 2,
|
|
86
|
+
lua: ENQUEUE_IF_ABSENT_SCRIPT,
|
|
87
|
+
});
|
|
88
|
+
this.enqueueIfAbsentCommandDefined = true;
|
|
89
|
+
}
|
|
90
|
+
async enqueueIfAbsent(item) {
|
|
91
|
+
this.ensureEnqueueIfAbsentCommand();
|
|
92
|
+
const itemKey = buildItemKey(item);
|
|
93
|
+
const priority = getPriorityScore(item.queueReason);
|
|
94
|
+
const serialized = {
|
|
95
|
+
...item,
|
|
96
|
+
priority,
|
|
97
|
+
attemptCount: 0,
|
|
98
|
+
itemKey,
|
|
99
|
+
};
|
|
100
|
+
try {
|
|
101
|
+
const result = await this.redis.enqueueIfAbsent(PENDING_KEY, IN_FLIGHT_KEY, itemKey, String(priority), JSON.stringify(serialized));
|
|
102
|
+
const enqueued = result === 1;
|
|
103
|
+
if (enqueued) {
|
|
104
|
+
this.logger.info({ owner: item.owner, repo: item.repo, issue: item.issueNumber, priority, itemKey }, 'Item enqueued to Redis sorted set (in-flight-checked)');
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// #879 / FR-009: structured drop signal for the in-flight-collision path.
|
|
108
|
+
// Distinct from the Redis-error warn path below.
|
|
109
|
+
this.logger.info({ itemKey, reason: 'in-flight' }, 'Dropping enqueue (item already in flight)');
|
|
110
|
+
}
|
|
111
|
+
return enqueued;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
this.logger.warn({ err: error, itemKey }, 'Redis error in enqueueIfAbsent, dropping (fail-safe)');
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async hasInFlight(itemKey) {
|
|
119
|
+
try {
|
|
120
|
+
const result = await this.redis.sismember(IN_FLIGHT_KEY, itemKey);
|
|
121
|
+
return result === 1;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
this.logger.warn({ err: error, itemKey }, 'Redis error in hasInFlight');
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
60
128
|
async enqueue(item) {
|
|
61
129
|
const itemKey = buildItemKey(item);
|
|
62
130
|
const priority = getPriorityScore(item.queueReason);
|
|
@@ -116,21 +184,24 @@ export class RedisQueueAdapter {
|
|
|
116
184
|
const parsed = JSON.parse(claimedRaw);
|
|
117
185
|
attemptCount = parsed.attemptCount + 1;
|
|
118
186
|
}
|
|
119
|
-
// Clean up claimed hash and heartbeat
|
|
120
|
-
await this.redis.hdel(claimedKey, itemKey);
|
|
121
|
-
await this.redis.del(heartbeatKey);
|
|
122
187
|
if (attemptCount >= this.maxRetries) {
|
|
123
|
-
// Dead-letter: too many retries
|
|
188
|
+
// Dead-letter: too many retries. Co-atomically remove from in-flight SET.
|
|
124
189
|
const deadLetterItem = {
|
|
125
190
|
...item,
|
|
126
191
|
attemptCount,
|
|
127
192
|
itemKey,
|
|
128
193
|
};
|
|
129
|
-
await this.redis
|
|
194
|
+
await this.redis
|
|
195
|
+
.multi()
|
|
196
|
+
.hdel(claimedKey, itemKey)
|
|
197
|
+
.del(heartbeatKey)
|
|
198
|
+
.zadd(DEAD_LETTER_KEY, Date.now(), JSON.stringify(deadLetterItem))
|
|
199
|
+
.srem(IN_FLIGHT_KEY, itemKey)
|
|
200
|
+
.exec();
|
|
130
201
|
this.logger.warn({ workerId, itemKey, attemptCount, maxRetries: this.maxRetries }, 'Item dead-lettered after max retries');
|
|
131
202
|
}
|
|
132
203
|
else {
|
|
133
|
-
// Re-queue with retry priority
|
|
204
|
+
// Re-queue with retry priority. Item stays in in-flight SET (still in flight).
|
|
134
205
|
const retryPriority = getPriorityScore('retry');
|
|
135
206
|
const requeueItem = {
|
|
136
207
|
...item,
|
|
@@ -139,7 +210,12 @@ export class RedisQueueAdapter {
|
|
|
139
210
|
attemptCount,
|
|
140
211
|
itemKey,
|
|
141
212
|
};
|
|
142
|
-
await this.redis
|
|
213
|
+
await this.redis
|
|
214
|
+
.multi()
|
|
215
|
+
.hdel(claimedKey, itemKey)
|
|
216
|
+
.del(heartbeatKey)
|
|
217
|
+
.zadd(PENDING_KEY, retryPriority, JSON.stringify(requeueItem))
|
|
218
|
+
.exec();
|
|
143
219
|
this.logger.info({ workerId, itemKey, attemptCount }, 'Item released back to pending queue');
|
|
144
220
|
}
|
|
145
221
|
}
|
|
@@ -152,9 +228,13 @@ export class RedisQueueAdapter {
|
|
|
152
228
|
const claimedKey = buildClaimedKey(workerId);
|
|
153
229
|
const heartbeatKey = buildHeartbeatKey(workerId);
|
|
154
230
|
try {
|
|
155
|
-
await this.redis
|
|
156
|
-
|
|
157
|
-
|
|
231
|
+
await this.redis
|
|
232
|
+
.multi()
|
|
233
|
+
.hdel(claimedKey, itemKey)
|
|
234
|
+
.del(heartbeatKey)
|
|
235
|
+
.srem(IN_FLIGHT_KEY, itemKey)
|
|
236
|
+
.exec();
|
|
237
|
+
this.logger.info({ workerId, itemKey }, 'Item completed and removed from claimed set + in-flight index');
|
|
158
238
|
}
|
|
159
239
|
catch (error) {
|
|
160
240
|
this.logger.warn({ err: error, workerId, itemKey }, 'Redis error in complete');
|