@telora/daemon 0.23.16 → 0.23.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/build-info.json +2 -2
  2. package/dist/ci/candidate-ref.d.ts +13 -0
  3. package/dist/ci/candidate-ref.d.ts.map +1 -1
  4. package/dist/ci/candidate-ref.js +18 -0
  5. package/dist/ci/candidate-ref.js.map +1 -1
  6. package/dist/composition/execution-merge-context.d.ts +7 -1
  7. package/dist/composition/execution-merge-context.d.ts.map +1 -1
  8. package/dist/composition/execution-merge-context.js +42 -6
  9. package/dist/composition/execution-merge-context.js.map +1 -1
  10. package/dist/composition/execution-recovery-context.d.ts.map +1 -1
  11. package/dist/composition/execution-recovery-context.js +2 -0
  12. package/dist/composition/execution-recovery-context.js.map +1 -1
  13. package/dist/focus/crash-recovery.d.ts +7 -0
  14. package/dist/focus/crash-recovery.d.ts.map +1 -1
  15. package/dist/focus/crash-recovery.js +26 -13
  16. package/dist/focus/crash-recovery.js.map +1 -1
  17. package/dist/merge/candidate-rework.d.ts +3 -3
  18. package/dist/merge/candidate-rework.d.ts.map +1 -1
  19. package/dist/merge/candidate-rework.js +30 -10
  20. package/dist/merge/candidate-rework.js.map +1 -1
  21. package/dist/merge/completion-hold-record.d.ts +16 -0
  22. package/dist/merge/completion-hold-record.d.ts.map +1 -1
  23. package/dist/merge/completion-hold-record.js +60 -1
  24. package/dist/merge/completion-hold-record.js.map +1 -1
  25. package/dist/merge/completion-judge.d.ts +44 -0
  26. package/dist/merge/completion-judge.d.ts.map +1 -0
  27. package/dist/merge/completion-judge.js +36 -0
  28. package/dist/merge/completion-judge.js.map +1 -0
  29. package/dist/merge/completion-local-judge.d.ts +90 -0
  30. package/dist/merge/completion-local-judge.d.ts.map +1 -0
  31. package/dist/merge/completion-local-judge.js +193 -0
  32. package/dist/merge/completion-local-judge.js.map +1 -0
  33. package/dist/merge/completion-merge-driver.d.ts +31 -7
  34. package/dist/merge/completion-merge-driver.d.ts.map +1 -1
  35. package/dist/merge/completion-merge-driver.js +36 -8
  36. package/dist/merge/completion-merge-driver.js.map +1 -1
  37. package/dist/merge/completion-merge-gate.d.ts +10 -2
  38. package/dist/merge/completion-merge-gate.d.ts.map +1 -1
  39. package/dist/merge/completion-merge-gate.js +65 -19
  40. package/dist/merge/completion-merge-gate.js.map +1 -1
  41. package/dist/merge/merge-back-loop.d.ts +9 -1
  42. package/dist/merge/merge-back-loop.d.ts.map +1 -1
  43. package/dist/merge/merge-back-loop.js +28 -1
  44. package/dist/merge/merge-back-loop.js.map +1 -1
  45. package/dist/queries/api-client/shared.js +1 -1
  46. package/dist/testing/fixtures/api-client.js +1 -1
  47. package/dist/testing/fixtures/completion-judge-stubs.d.ts +15 -0
  48. package/dist/testing/fixtures/completion-judge-stubs.d.ts.map +1 -0
  49. package/dist/testing/fixtures/completion-judge-stubs.js +32 -0
  50. package/dist/testing/fixtures/completion-judge-stubs.js.map +1 -0
  51. package/dist/testing/fixtures/index.js +1 -1
  52. package/dist/verify/deterministic-gate/verification-checkout.d.ts.map +1 -1
  53. package/dist/verify/deterministic-gate/verification-checkout.js +1 -0
  54. package/dist/verify/deterministic-gate/verification-checkout.js.map +1 -1
  55. package/dist/verify/deterministic-gate/verification-deterministic.d.ts.map +1 -1
  56. package/dist/verify/deterministic-gate/verification-deterministic.js +1 -0
  57. package/dist/verify/deterministic-gate/verification-deterministic.js.map +1 -1
  58. package/dist/verify/gate-config/verification-manifest.d.ts +21 -1
  59. package/dist/verify/gate-config/verification-manifest.d.ts.map +1 -1
  60. package/dist/verify/gate-config/verification-manifest.js +25 -1
  61. package/dist/verify/gate-config/verification-manifest.js.map +1 -1
  62. package/dist/verify/run-selection/verification-default-on.d.ts +2 -0
  63. package/dist/verify/run-selection/verification-default-on.d.ts.map +1 -1
  64. package/dist/verify/run-selection/verification-default-on.js +1 -1
  65. package/dist/verify/run-selection/verification-default-on.js.map +1 -1
  66. package/dist/worktree/focus-worktree-state.d.ts.map +1 -1
  67. package/dist/worktree/focus-worktree-state.js +1 -0
  68. package/dist/worktree/focus-worktree-state.js.map +1 -1
  69. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-local-judge.js","sourceRoot":"","sources":["../../src/merge/completion-local-judge.ts"],"names":[],"mappings":"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"}
@@ -15,13 +15,24 @@
15
15
  * push_candidate -> push the head to the focus's candidate branch so CI runs the
16
16
  * full suite on exactly that commit (ci/candidate-ref.ts).
17
17
  * wait_ci -> nothing, until CANDIDATE_CI_VERDICT_WAIT_MS has passed with
18
- * no verdict; then the missing verdict is re-work like a red.
19
- * The wait is counted from a DURABLE stamp of the candidate
20
- * (merge/completion-hold-record.ts), so a daemon restart
21
- * neither restarts nor forgets the window.
18
+ * no verdict; then the candidate is RE-PUSHED once (deleted
19
+ * and pushed again, so CI sees a fresh push), and after a
20
+ * second window with no verdict the merge simply holds --
21
+ * the stuck_focus_branch observation surfaces it. A missing
22
+ * verdict is the CI's fault, not the focus's: it is never
23
+ * re-work (no team can fix a missing verdict, and a
24
+ * converged review resets the cycle cap, so re-work would
25
+ * never end). The wait is counted from a DURABLE stamp of the
26
+ * candidate (merge/completion-hold-record.ts), so a daemon
27
+ * restart neither restarts nor forgets the window.
28
+ * run_local -> start the daemon's own run of the completion command on the
29
+ * head (merge/completion-local-judge.ts); its verdict lands
30
+ * on a later tick.
22
31
  * rework -> return the focus to coding: one Bug on the owning delivery,
23
32
  * re-opened to verify_failed (merge/candidate-rework.ts). No
24
33
  * escalation is filed.
34
+ * rework_local -> the same, for a candidate that failed the local run; the
35
+ * Bug names the command, its result and the log.
25
36
  *
26
37
  * Integration never moves here; a green candidate is admitted by the gate and
27
38
  * fast-forwarded by the caller's normal merge.
@@ -29,7 +40,8 @@
29
40
  * @module merge/completion-merge-driver
30
41
  */
31
42
  import type { CompletionMergeStep } from './completion-merge-gate.js';
32
- /** How long a pushed candidate may sit with no published verdict before it is re-work. */
43
+ import type { LocalRunStart, LocalSuiteFailure } from './completion-local-judge.js';
44
+ /** How long a pushed candidate may sit with no published verdict before it is re-pushed (once). */
33
45
  export declare const CANDIDATE_CI_VERDICT_WAIT_MS: number;
34
46
  /** The focus branch a step acts on. */
35
47
  export interface CompletionMergeSubject {
@@ -39,7 +51,9 @@ export interface CompletionMergeSubject {
39
51
  branchName: string;
40
52
  }
41
53
  /** Why a candidate is returned to the focus as re-work. */
42
- export type CandidateReworkCause = 'red' | 'no_verdict' | 'conflict' | 'unreviewed_merge';
54
+ export type CandidateReworkCause = 'red' | 'local_red' | 'conflict' | 'unreviewed_merge';
55
+ /** What a re-work Bug is told beyond its cause: a conflict's paths, or a failed local run. */
56
+ export type CandidateReworkDetail = CompletionMergeConflict | LocalSuiteFailure;
43
57
  /** What a conflicting final merge left for the team: the paths, and the integration commits the branch lacks. */
44
58
  export interface CompletionMergeConflict {
45
59
  integrationBranch: string;
@@ -77,8 +91,18 @@ export interface CompletionMergeDriverDeps {
77
91
  * becomes re-work.
78
92
  */
79
93
  candidateWaitSince: (sha: string, now: number) => number | null;
94
+ /** Whether the focus's candidate `sha` was already re-pushed for a missing verdict. */
95
+ candidateRepushed: (sha: string) => boolean;
96
+ /** Record that `sha` was re-pushed at `now`, restarting its wait window. */
97
+ markCandidateRepushed: (sha: string, now: number) => void;
98
+ /** Delete and re-push the focus's candidate branch at `sha`, so CI sees a fresh push; false on failure. */
99
+ repushCandidate: (repoPath: string, focusId: string, sha: string) => boolean;
100
+ /** Start the daemon's local completion run of `sha` (never awaited). */
101
+ startLocalRun: (sha: string) => LocalRunStart;
102
+ /** What a failed local run of `sha` recorded, for the re-work Bug. */
103
+ readLocalFailure: (sha: string) => LocalSuiteFailure | null;
80
104
  /** Return the focus to coding as re-work for the candidate at `sha`. */
81
- routeRework: (subject: CompletionMergeSubject, sha: string, cause: CandidateReworkCause, conflict: CompletionMergeConflict | null) => Promise<CandidateReworkOutcome>;
105
+ routeRework: (subject: CompletionMergeSubject, sha: string, cause: CandidateReworkCause, detail: CandidateReworkDetail | null) => Promise<CandidateReworkOutcome>;
82
106
  now: () => number;
83
107
  }
84
108
  /** Reset the driver's memory -- tests start from a clean slate. */
@@ -1 +1 @@
1
- {"version":3,"file":"completion-merge-driver.d.ts","sourceRoot":"","sources":["../../src/merge/completion-merge-driver.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKtE,0FAA0F;AAC1F,eAAO,MAAM,4BAA4B,QAAqB,CAAC;AAE/D,uCAAuC;AACvC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAE1F,iHAAiH;AACjH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,4DAA4D;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;AAElF,2GAA2G;AAC3G,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,oGAAoG;AACpG,MAAM,WAAW,yBAAyB;IACxC,+GAA+G;IAC/G,QAAQ,EAAE,MAAM,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACnD,8EAA8E;IAC9E,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3E;;;;;;OAMG;IACH,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAChE,wEAAwE;IACxE,WAAW,EAAE,CAAC,OAAO,EAAE,sBAAsB,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,uBAAuB,GAAG,IAAI,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACtK,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAUD,mEAAmE;AACnE,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAED,6GAA6G;AAC7G,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAuDD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,yBAAyB,CAAC,CAgBpC"}
1
+ {"version":3,"file":"completion-merge-driver.d.ts","sourceRoot":"","sources":["../../src/merge/completion-merge-driver.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  // PINNED-BY-END
9
9
  import { createLogger } from '../log/daemon-log.js';
10
10
  const log = createLogger({ module: 'completion-merge' });
11
- /** How long a pushed candidate may sit with no published verdict before it is re-work. */
11
+ /** How long a pushed candidate may sit with no published verdict before it is re-pushed (once). */
12
12
  export const CANDIDATE_CI_VERDICT_WAIT_MS = 3 * 60 * 60 * 1000;
13
13
  /**
14
14
  * The wait's fallback clock: when this process first saw each candidate waiting,
@@ -26,12 +26,12 @@ function key(subject, sha) {
26
26
  }
27
27
  const CAUSE_TEXT = {
28
28
  red: 'is RED in CI',
29
- no_verdict: 'got no CI verdict',
29
+ local_red: 'FAILED the local completion run',
30
30
  conflict: 'conflicts with the integration tip',
31
31
  unreviewed_merge: 'carries a conflict-deciding merge no review judged',
32
32
  };
33
- async function rework(subject, sha, cause, conflict, deps) {
34
- const outcome = await deps.routeRework(subject, sha, cause, conflict);
33
+ async function rework(subject, sha, cause, detail, deps) {
34
+ const outcome = await deps.routeRework(subject, sha, cause, detail);
35
35
  if (outcome === 'not_reopened') {
36
36
  log.warn(`[completion-merge] "${subject.focusName}": ${sha.slice(0, 9)} ${CAUSE_TEXT[cause]} but no work was re-opened -- retried next tick`);
37
37
  return { reworked: false };
@@ -56,13 +56,37 @@ function fallbackSince(subject, sha, now) {
56
56
  log.warn(`[completion-merge] "${subject.focusName}": the candidate-wait record is unusable; counting ${sha.slice(0, 9)}'s wait from this process's first sighting`);
57
57
  return since;
58
58
  }
59
- /** wait_ci: re-work once the durable wait for `headSha` has run past the window. */
60
- async function waitForVerdict(subject, headSha, deps) {
59
+ /**
60
+ * wait_ci: once the durable wait for `headSha` has run past the window, re-push
61
+ * the candidate ONCE; past a second window, hold (module doc). Never re-work.
62
+ */
63
+ function waitForVerdict(subject, headSha, deps) {
61
64
  const now = deps.now();
62
65
  const since = deps.candidateWaitSince(headSha, now) ?? fallbackSince(subject, headSha, now);
63
66
  if (now - since < CANDIDATE_CI_VERDICT_WAIT_MS)
64
67
  return NOTHING;
65
- return rework(subject, headSha, 'no_verdict', null, deps);
68
+ if (deps.candidateRepushed(headSha)) {
69
+ log.debug(`[completion-merge] "${subject.focusName}": CI published no verdict for ${headSha.slice(0, 9)} even after a re-push -- holding (not re-work: a missing verdict is CI's fault)`);
70
+ return NOTHING;
71
+ }
72
+ const pushed = deps.repushCandidate(subject.repoPath, subject.focusId, headSha);
73
+ if (pushed) {
74
+ deps.markCandidateRepushed(headSha, now);
75
+ fallbackWaitSince.set(key(subject, headSha), now);
76
+ }
77
+ log.warn(`[completion-merge] "${subject.focusName}": CI published no verdict for ${headSha.slice(0, 9)} within ${Math.round(CANDIDATE_CI_VERDICT_WAIT_MS / 3_600_000)}h -- ${pushed ? 're-pushed the candidate once so CI sees a fresh push' : 'the re-push failed; retried next tick'}`);
78
+ return NOTHING;
79
+ }
80
+ /** run_local: start the daemon's run of the completion command on the head. */
81
+ function runLocal(subject, headSha, deps) {
82
+ const start = deps.startLocalRun(headSha);
83
+ if (start.kind === 'started')
84
+ log.info(`[completion-merge] "${subject.focusName}": started the local completion run of ${headSha.slice(0, 9)}`);
85
+ else if (start.kind === 'busy')
86
+ log.debug(`[completion-merge] "${subject.focusName}": local completion run of ${headSha.slice(0, 9)} waits for ${start.holder}`);
87
+ else if (start.kind === 'not_ready')
88
+ log.debug(`[completion-merge] "${subject.focusName}": local completion run of ${headSha.slice(0, 9)} not started: ${start.reason}`);
89
+ return NOTHING;
66
90
  }
67
91
  /**
68
92
  * Take the step a held completion merge names, and say whether it returned the
@@ -77,6 +101,10 @@ export async function driveCompletionMergeStep(subject, step, headSha, deps) {
77
101
  return await rework(subject, headSha, 'unreviewed_merge', null, deps);
78
102
  if (step === 'rework')
79
103
  return await rework(subject, headSha, 'red', null, deps);
104
+ if (step === 'rework_local')
105
+ return await rework(subject, headSha, 'local_red', deps.readLocalFailure(headSha), deps);
106
+ if (step === 'run_local')
107
+ return runLocal(subject, headSha, deps);
80
108
  if (step === 'push_candidate') {
81
109
  const pushed = deps.pushCandidate(subject.repoPath, subject.focusId, headSha);
82
110
  if (pushed && deps.candidateWaitSince(headSha, deps.now()) === null)
@@ -84,7 +112,7 @@ export async function driveCompletionMergeStep(subject, step, headSha, deps) {
84
112
  log.info(`[completion-merge] "${subject.focusName}": ${pushed ? 'pushed' : 'could not push'} integration candidate ${headSha.slice(0, 9)} for CI`);
85
113
  return NOTHING;
86
114
  }
87
- return await waitForVerdict(subject, headSha, deps);
115
+ return waitForVerdict(subject, headSha, deps);
88
116
  }
89
117
  catch (err) {
90
118
  log.warn(`[completion-merge] "${subject.focusName}": ${step} for ${headSha.slice(0, 9)} failed: ${err.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"completion-merge-driver.js","sourceRoot":"","sources":["../../src/merge/completion-merge-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"completion-merge-driver.js","sourceRoot":"","sources":["../../src/merge/completion-merge-driver.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import type { CiRunStatus } from '../ci/ci-status.js';
2
+ import { type CompletionJudge } from './completion-judge.js';
3
+ import type { LocalCandidateStatus } from './completion-local-judge.js';
2
4
  import type { ApprovalGateState } from './approval-gate-state.js';
3
5
  import { type BranchMergeGateTarget, type GatedAnchor, type MergeGateTarget, type UnmergedCommit } from './merge-gate-coverage.js';
4
6
  /** The step that advances a held completion merge; driven by the merge-back loop only. */
5
- export type CompletionMergeStep = 'merge_out' | 'review_merge' | 'push_candidate' | 'wait_ci' | 'rework';
7
+ export type CompletionMergeStep = 'merge_out' | 'review_merge' | 'push_candidate' | 'wait_ci' | 'rework' | 'run_local' | 'rework_local';
6
8
  /** A merge the gate holds (with why, and the step that advances it), or one it admits at an exact commit. */
7
9
  export type MergeGateDecision = {
8
10
  hold: string;
@@ -46,8 +48,14 @@ export interface CompletionMergeGateDeps {
46
48
  readCandidateStatus: (target: MergeGateTarget, sha: string) => CiRunStatus;
47
49
  /** The sha the focus's candidate branch points at on the remote; null when none / unreadable. */
48
50
  readPushedCandidateSha: (target: MergeGateTarget) => string | null;
51
+ /** The completion judge the candidate commit's telora.verify.json declares. */
52
+ resolveCompletionJudge: (target: MergeGateTarget, sha: string) => CompletionJudge;
53
+ /** The candidate's standing under the local judge (its recorded verdict, or its run in flight). */
54
+ readLocalCandidateStatus: (target: MergeGateTarget, sha: string) => LocalCandidateStatus;
49
55
  }
50
- /** Step 1: every delivery done (cancelled is not done), at least one delivery. Pure. */
56
+ /** Whether a delivery in this status still owes work, and so holds its focus's completion merge. Pure. */
57
+ export declare function deliveryHoldsCompletion(executionStatus: string | null): boolean;
58
+ /** Step 1: at least one delivery done, and none still owing work (module doc). Pure. */
51
59
  export declare function focusCompletionHold(deliveries: readonly CompletionDeliveryFact[]): string | null;
52
60
  /** The merges after the approved commit that git cannot prove clean (they decided a conflict, or edited). Pure. */
53
61
  export declare function unreviewedMergesAfter(commits: readonly UnmergedCommit[], approval: GatedAnchor): UnmergedCommit[];
@@ -1 +1 @@
1
- {"version":3,"file":"completion-merge-gate.d.ts","sourceRoot":"","sources":["../../src/merge/completion-merge-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"completion-merge-gate.d.ts","sourceRoot":"","sources":["../../src/merge/completion-merge-gate.ts"],"names":[],"mappings":"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"}
@@ -21,10 +21,12 @@
21
21
  * integration once, at completion".
22
22
  *
23
23
  * The decision, in order (the first that fails holds):
24
- * 1. COMPLETE: every focus delivery is done -- a cancelled one too holds, as
25
- * the agreed criterion reads ("every delivery done"), and so does a focus
26
- * with no delivery. Delivery facts, never product_focuses.status (humans
27
- * own focus completion).
24
+ * 1. COMPLETE: at least one focus delivery is done and none is still owed --
25
+ * cancelled, planning and draft deliveries do not hold (none of them has
26
+ * unfinished work on the branch: a cancelled one was dropped, a planning
27
+ * one -- recorded new intent included -- never started), while queued,
28
+ * coding, verify, verify_failed and paused ones do. Delivery facts, never
29
+ * product_focuses.status (humans own focus completion).
28
30
  * 2. APPROVED HEAD: the focus's newest current approval
29
31
  * (queries/focus-review/focus-review-approval.ts) is on the branch, the gate
30
32
  * did not fail at it (merge/approval-gate-state.ts), and every commit after it
@@ -39,8 +41,15 @@
39
41
  * the next step is MERGE_OUT -- one automatic merge, kept only when clean; a
40
42
  * conflict is aborted and handed to the team (merge/focus-merge.ts
41
43
  * attemptCompletionMergeOut). No resolver decides a conflict on this path.
42
- * 4. GREEN CANDIDATE: the head's refs/ci-status reads success (ci/candidate-ref.ts).
43
- * Not pushed yet -> PUSH_CANDIDATE; pushed, no verdict -> WAIT_CI; red -> REWORK.
44
+ * 4. JUDGED CANDIDATE, by the judge the head's telora.verify.json declares
45
+ * (merge/completion-judge.ts):
46
+ * - ci: the head's refs/ci-status reads success (ci/candidate-ref.ts). Not
47
+ * pushed yet -> PUSH_CANDIDATE; pushed, no verdict -> WAIT_CI; red -> REWORK.
48
+ * - local: the daemon's run of the completion command on the head passed
49
+ * (merge/completion-local-judge.ts). No run yet -> RUN_LOCAL; running ->
50
+ * hold; failed -> REWORK_LOCAL.
51
+ * - none (no manifest): admitted on the approval alone, and the admission says so.
52
+ * - unreadable: hold (fail closed), naming why.
44
53
  * A hold carries the step that would advance it (`next`) for the merge-back loop,
45
54
  * which is the one driver of those steps; the other entry points just hold.
46
55
  * An admission names the exact commit that passed (`candidateSha`), and
@@ -50,16 +59,28 @@
50
59
  * @module merge/completion-merge-gate
51
60
  */
52
61
  import { DELIVERY_STATUS } from '@telora/daemon-core';
62
+ import { describeCompletionJudge } from './completion-judge.js';
53
63
  import { stopFires } from '../supervision/stop-registry.js';
54
64
  import { judgeMergeGateCoverage, } from './merge-gate-coverage.js';
55
- /** Step 1: every delivery done (cancelled is not done), at least one delivery. Pure. */
65
+ /** Statuses that owe no work on the branch: they never hold a completion merge. */
66
+ const NOT_OWED = new Set([
67
+ DELIVERY_STATUS.DONE,
68
+ DELIVERY_STATUS.CANCELLED,
69
+ DELIVERY_STATUS.PLANNING,
70
+ DELIVERY_STATUS.DRAFT,
71
+ ]);
72
+ /** Whether a delivery in this status still owes work, and so holds its focus's completion merge. Pure. */
73
+ export function deliveryHoldsCompletion(executionStatus) {
74
+ return executionStatus === null || !NOT_OWED.has(executionStatus);
75
+ }
76
+ /** Step 1: at least one delivery done, and none still owing work (module doc). Pure. */
56
77
  export function focusCompletionHold(deliveries) {
57
- const open = deliveries.filter((d) => d.executionStatus !== DELIVERY_STATUS.DONE);
78
+ const open = deliveries.filter((d) => deliveryHoldsCompletion(d.executionStatus));
58
79
  if (open.length > 0) {
59
80
  const names = open.slice(0, 3).map((d) => `"${d.name}" (${d.executionStatus ?? 'unknown'})`).join(', ');
60
81
  return `the focus is not complete: ${open.length} delivery(ies) not done -- ${names}${open.length > 3 ? ', ...' : ''}`;
61
82
  }
62
- if (deliveries.length === 0)
83
+ if (!deliveries.some((d) => d.executionStatus === DELIVERY_STATUS.DONE))
63
84
  return 'the focus is not complete: no delivery is done';
64
85
  return null;
65
86
  }
@@ -102,7 +123,30 @@ async function readApproval(target, deps) {
102
123
  }
103
124
  return { ...resolved, source: state === 'auto_approval' ? 'auto_approval' : 'approved_review' };
104
125
  }
105
- /** Steps 3-4: the candidate. Returns the admission when the head is green. */
126
+ /** Step 4 under CI: the head's refs/ci-status. */
127
+ function ciStage(target, head, deps) {
128
+ const status = deps.readCandidateStatus(target, head);
129
+ if (status === 'green')
130
+ return { candidateSha: head, judgedBy: `candidate ${head.slice(0, 9)} green` };
131
+ if (status === 'red')
132
+ return { hold: `CI is RED on the integration candidate ${head.slice(0, 9)}`, next: 'rework', headSha: head };
133
+ if (deps.readPushedCandidateSha(target) !== head) {
134
+ return { hold: `the integration candidate ${head.slice(0, 9)} has not been pushed for CI`, next: 'push_candidate', headSha: head };
135
+ }
136
+ return { hold: `CI has not judged the integration candidate ${head.slice(0, 9)} yet`, next: 'wait_ci', headSha: head };
137
+ }
138
+ /** Step 4 under the local judge: the daemon's run of the completion command on the head. */
139
+ function localStage(target, head, judge, deps) {
140
+ const status = deps.readLocalCandidateStatus(target, head);
141
+ if (status === 'green')
142
+ return { candidateSha: head, judgedBy: `candidate ${head.slice(0, 9)} passed \`${judge.command}\` locally` };
143
+ if (status === 'red')
144
+ return { hold: `the integration candidate ${head.slice(0, 9)} FAILED \`${judge.command}\` locally`, next: 'rework_local', headSha: head };
145
+ if (status === 'running')
146
+ return { hold: `the daemon is running \`${judge.command}\` on the integration candidate ${head.slice(0, 9)}` };
147
+ return { hold: `the integration candidate ${head.slice(0, 9)} has not been run through \`${judge.command}\` yet`, next: 'run_local', headSha: head };
148
+ }
149
+ /** Steps 3-4: the candidate. Returns the admission when the head is judged good. */
106
150
  function candidateStage(target, deps) {
107
151
  const head = deps.resolveBranchHead(target.repoPath, target.branchName);
108
152
  if (head === null)
@@ -113,15 +157,17 @@ function candidateStage(target, deps) {
113
157
  if (!deps.isAncestor(target.repoPath, tip, head)) {
114
158
  return { hold: `${target.branchName} does not contain the ${target.integrationBranch} tip ${tip.slice(0, 9)} yet`, next: 'merge_out', headSha: head };
115
159
  }
116
- const status = deps.readCandidateStatus(target, head);
117
- if (status === 'green')
118
- return { candidateSha: head };
119
- if (status === 'red')
120
- return { hold: `CI is RED on the integration candidate ${head.slice(0, 9)}`, next: 'rework', headSha: head };
121
- if (deps.readPushedCandidateSha(target) !== head) {
122
- return { hold: `the integration candidate ${head.slice(0, 9)} has not been pushed for CI`, next: 'push_candidate', headSha: head };
160
+ const judge = deps.resolveCompletionJudge(target, head);
161
+ switch (judge.kind) {
162
+ case 'ci':
163
+ return ciStage(target, head, deps);
164
+ case 'local':
165
+ return localStage(target, head, judge, deps);
166
+ case 'none':
167
+ return { candidateSha: head, judgedBy: `candidate ${head.slice(0, 9)} judged by no suite -- ${describeCompletionJudge(judge)}; merged on the review approval alone` };
168
+ case 'unreadable':
169
+ return { hold: `the completion judge of the integration candidate ${head.slice(0, 9)} cannot be read: ${judge.reason}` };
123
170
  }
124
- return { hold: `CI has not judged the integration candidate ${head.slice(0, 9)} yet`, next: 'wait_ci', headSha: head };
125
171
  }
126
172
  async function decide(target, deps) {
127
173
  const incomplete = focusCompletionHold(await deps.getFocusDeliveries(target.focusId));
@@ -150,7 +196,7 @@ async function decide(target, deps) {
150
196
  return {
151
197
  hold: null,
152
198
  candidateSha: candidate.candidateSha,
153
- admittedBy: `completion: ${approval.source} ${approval.sha.slice(0, 9)}, candidate ${candidate.candidateSha.slice(0, 9)} green`,
199
+ admittedBy: `completion: ${approval.source} ${approval.sha.slice(0, 9)}, ${candidate.judgedBy}`,
154
200
  };
155
201
  }
156
202
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"completion-merge-gate.js","sourceRoot":"","sources":["../../src/merge/completion-merge-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"completion-merge-gate.js","sourceRoot":"","sources":["../../src/merge/completion-merge-gate.ts"],"names":[],"mappings":"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"}
@@ -132,8 +132,16 @@ export interface MergeBackLoopDeps {
132
132
  * Combines getActiveFocuses (for org/name/readOnly context) with the
133
133
  * in-memory worktree state (for branchName + worktreePath). Returns one
134
134
  * entry per focus whose branch has unmerged commits.
135
+ *
136
+ * A focus that is no longer ACTIVE stays in view while this host holds a
137
+ * completion hold for it (merge/completion-hold-record.ts): its deliveries were
138
+ * complete and its merge was still pending when it left the active set -- a
139
+ * human marked it complete while the candidate was being judged. Dropping it
140
+ * there stranded its commits off integration (Tinker Tailor, 2026-10-04). It is
141
+ * carried with no pipeline config and as writable; the completion gate re-reads
142
+ * its deliveries, so a focus that is no longer complete still holds.
135
143
  */
136
- export declare function defaultEnumerateFocusBranchesAhead(config: DaemonConfig): Promise<MergeBackFocusInfo[]>;
144
+ export declare function defaultEnumerateFocusBranchesAhead(config: DaemonConfig, hasPendingCompletion: (productId: string, focusId: string) => boolean): Promise<MergeBackFocusInfo[]>;
137
145
  /**
138
146
  * When a COMPLETED focus's integration merge was first held, from its durable
139
147
  * record (merge/completion-hold-record.ts): stamped the first tick the focus is
@@ -1 +1 @@
1
- {"version":3,"file":"merge-back-loop.d.ts","sourceRoot":"","sources":["../../src/merge/merge-back-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge-back-loop.d.ts","sourceRoot":"","sources":["../../src/merge/merge-back-loop.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
2
  // Pinned by: packages/daemon/src/completion/team-exit/teardown-merge-gate.test.ts,
3
3
  // packages/daemon/src/integration/merge-back-resolver-timeout-regression.test.ts,
4
+ // packages/daemon/src/merge/merge-back-held-completion-scan.test.ts,
4
5
  // packages/daemon/src/merge/merge-back-loop.test.ts,
5
6
  // packages/daemon/src/merge/resolver-exhausted-observation.test.ts
6
7
  // PINNED-BY-END
@@ -103,8 +104,16 @@ function readStuckBranchThresholdMs(env) {
103
104
  * Combines getActiveFocuses (for org/name/readOnly context) with the
104
105
  * in-memory worktree state (for branchName + worktreePath). Returns one
105
106
  * entry per focus whose branch has unmerged commits.
107
+ *
108
+ * A focus that is no longer ACTIVE stays in view while this host holds a
109
+ * completion hold for it (merge/completion-hold-record.ts): its deliveries were
110
+ * complete and its merge was still pending when it left the active set -- a
111
+ * human marked it complete while the candidate was being judged. Dropping it
112
+ * there stranded its commits off integration (Tinker Tailor, 2026-10-04). It is
113
+ * carried with no pipeline config and as writable; the completion gate re-reads
114
+ * its deliveries, so a focus that is no longer complete still holds.
106
115
  */
107
- export async function defaultEnumerateFocusBranchesAhead(config) {
116
+ export async function defaultEnumerateFocusBranchesAhead(config, hasPendingCompletion) {
108
117
  const out = [];
109
118
  const worktrees = getAllFocusWorktrees();
110
119
  for (const product of config.products) {
@@ -117,6 +126,24 @@ export async function defaultEnumerateFocusBranchesAhead(config) {
117
126
  log.warn(`[merge-back-loop] getActiveFocuses failed for product ${product.id}:`, err.message);
118
127
  continue;
119
128
  }
129
+ const activeIds = new Set(focuses.map((f) => f.focus_id));
130
+ for (const [focusId, wt] of worktrees) {
131
+ if (activeIds.has(focusId) || wt.productId !== product.id || !hasPendingCompletion(product.id, focusId))
132
+ continue;
133
+ if (!branchHasUnmergedCommits(wt.branchName, pc.integrationBranch, pc.repoPath))
134
+ continue;
135
+ out.push({
136
+ focusId,
137
+ focusName: wt.focusName || wt.branchName,
138
+ organizationId: pc.organizationId,
139
+ productId: product.id,
140
+ branchName: wt.branchName,
141
+ worktreePath: wt.worktreePath,
142
+ repoPath: pc.repoPath,
143
+ pipelineConfig: null,
144
+ readOnly: false,
145
+ });
146
+ }
120
147
  for (const focus of focuses) {
121
148
  const wt = worktrees.get(focus.focus_id);
122
149
  if (!wt)