@telora/daemon 0.21.83 → 0.21.98

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 (95) hide show
  1. package/build-info.json +7 -3
  2. package/dist/ci/ci-status.d.ts +63 -11
  3. package/dist/ci/ci-status.d.ts.map +1 -1
  4. package/dist/ci/ci-status.js +94 -27
  5. package/dist/ci/ci-status.js.map +1 -1
  6. package/dist/completion/event-phases.d.ts.map +1 -1
  7. package/dist/completion/event-phases.js +5 -3
  8. package/dist/completion/event-phases.js.map +1 -1
  9. package/dist/completion/review-exit-escalations.d.ts +36 -1
  10. package/dist/completion/review-exit-escalations.d.ts.map +1 -1
  11. package/dist/completion/review-exit-escalations.js +81 -0
  12. package/dist/completion/review-exit-escalations.js.map +1 -1
  13. package/dist/completion/review-exit-phase.d.ts +4 -2
  14. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  15. package/dist/completion/review-exit-phase.js +39 -48
  16. package/dist/completion/review-exit-phase.js.map +1 -1
  17. package/dist/completion/status-advance-phase.d.ts.map +1 -1
  18. package/dist/completion/status-advance-phase.js +10 -29
  19. package/dist/completion/status-advance-phase.js.map +1 -1
  20. package/dist/completion/team-lifecycle.d.ts.map +1 -1
  21. package/dist/completion/team-lifecycle.js +8 -2
  22. package/dist/completion/team-lifecycle.js.map +1 -1
  23. package/dist/delivery/delivery-lifecycle.d.ts.map +1 -1
  24. package/dist/delivery/delivery-lifecycle.js +7 -13
  25. package/dist/delivery/delivery-lifecycle.js.map +1 -1
  26. package/dist/delivery/delivery-reconciler-apply.d.ts +80 -66
  27. package/dist/delivery/delivery-reconciler-apply.d.ts.map +1 -1
  28. package/dist/delivery/delivery-reconciler-apply.js +57 -61
  29. package/dist/delivery/delivery-reconciler-apply.js.map +1 -1
  30. package/dist/delivery/external-hold.d.ts +17 -0
  31. package/dist/delivery/external-hold.d.ts.map +1 -1
  32. package/dist/delivery/external-hold.js +30 -2
  33. package/dist/delivery/external-hold.js.map +1 -1
  34. package/dist/delivery/operator-hold.d.ts +1 -2
  35. package/dist/delivery/operator-hold.d.ts.map +1 -1
  36. package/dist/delivery/operator-hold.js +1 -2
  37. package/dist/delivery/operator-hold.js.map +1 -1
  38. package/dist/delivery/wait-reachability.d.ts +149 -0
  39. package/dist/delivery/wait-reachability.d.ts.map +1 -0
  40. package/dist/delivery/wait-reachability.js +182 -0
  41. package/dist/delivery/wait-reachability.js.map +1 -0
  42. package/dist/focus/listener-auto-advance.d.ts.map +1 -1
  43. package/dist/focus/listener-auto-advance.js +10 -55
  44. package/dist/focus/listener-auto-advance.js.map +1 -1
  45. package/dist/focus/listener.d.ts.map +1 -1
  46. package/dist/focus/listener.js +17 -1
  47. package/dist/focus/listener.js.map +1 -1
  48. package/dist/git/merge.d.ts.map +1 -1
  49. package/dist/git/merge.js +12 -3
  50. package/dist/git/merge.js.map +1 -1
  51. package/dist/queries/deliveries.d.ts +10 -0
  52. package/dist/queries/deliveries.d.ts.map +1 -1
  53. package/dist/queries/deliveries.js +1 -0
  54. package/dist/queries/deliveries.js.map +1 -1
  55. package/dist/queries/focuses.d.ts +10 -0
  56. package/dist/queries/focuses.d.ts.map +1 -1
  57. package/dist/queries/focuses.js +15 -0
  58. package/dist/queries/focuses.js.map +1 -1
  59. package/dist/queries/schemas.d.ts +2 -0
  60. package/dist/queries/schemas.d.ts.map +1 -1
  61. package/dist/queries/schemas.js +4 -0
  62. package/dist/queries/schemas.js.map +1 -1
  63. package/dist/shell/heartbeat.d.ts +7 -0
  64. package/dist/shell/heartbeat.d.ts.map +1 -1
  65. package/dist/shell/heartbeat.js +1 -1
  66. package/dist/shell/heartbeat.js.map +1 -1
  67. package/dist/spawn/respawn-cycle-escalation.d.ts +41 -0
  68. package/dist/spawn/respawn-cycle-escalation.d.ts.map +1 -0
  69. package/dist/spawn/respawn-cycle-escalation.js +83 -0
  70. package/dist/spawn/respawn-cycle-escalation.js.map +1 -0
  71. package/dist/spawn/spawn-cooldown.d.ts +85 -2
  72. package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
  73. package/dist/spawn/spawn-cooldown.js +73 -10
  74. package/dist/spawn/spawn-cooldown.js.map +1 -1
  75. package/dist/testing/fixtures/index.d.ts +64 -0
  76. package/dist/testing/fixtures/index.d.ts.map +1 -0
  77. package/dist/testing/fixtures/index.js +220 -0
  78. package/dist/testing/fixtures/index.js.map +1 -0
  79. package/dist/update/build-info.d.ts +1 -0
  80. package/dist/update/build-info.d.ts.map +1 -1
  81. package/dist/update/build-info.js +1 -1
  82. package/dist/update/build-info.js.map +1 -1
  83. package/dist/verify/stall-detector-config.d.ts +8 -0
  84. package/dist/verify/stall-detector-config.d.ts.map +1 -1
  85. package/dist/verify/stall-detector-config.js +40 -0
  86. package/dist/verify/stall-detector-config.js.map +1 -1
  87. package/dist/verify/stall-detectors.d.ts +37 -6
  88. package/dist/verify/stall-detectors.d.ts.map +1 -1
  89. package/dist/verify/stall-detectors.js +45 -9
  90. package/dist/verify/stall-detectors.js.map +1 -1
  91. package/dist/verify/verification-feedback.d.ts +3 -4
  92. package/dist/verify/verification-feedback.d.ts.map +1 -1
  93. package/dist/verify/verification-feedback.js +3 -12
  94. package/dist/verify/verification-feedback.js.map +1 -1
  95. package/package.json +3 -3
@@ -1,85 +1,99 @@
1
1
  /**
2
- * Activation layer for the single-writer delivery reconciler.
2
+ * Thin decision seam over the pure delivery reconciler.
3
3
  *
4
- * Delivery 4 of the Delivery Execution Pathway Consolidation focus (reality-tree
5
- * injection #10). This is the step that makes the pure reconciler
6
- * (delivery-reconciler.ts) the DECISION AUTHORITY for every daemon
7
- * execution_status write, with the two safety properties the focus method
8
- * (characterize -> shadow -> flip, reversible) requires:
4
+ * The pure reconciler (delivery-reconciler.ts) is the DECISION AUTHORITY for
5
+ * every daemon execution_status write. `resolveReconciledWrite` is the single
6
+ * entry point the write sites call to turn a `ReconcileInput` into the status to
7
+ * write; the caller then routes that status through `updateDeliveryStatus` (the
8
+ * sole physical writer).
9
9
  *
10
- * 1. Runtime self-check (replaces the manual prod shadow-observation gate).
11
- * Each write site still computes what the legacy ("old path") logic would
12
- * have written; `resolveReconciledWrite` compares that to the reconciler's
13
- * target and logs `[reconciler-divergence]` on any mismatch. The retained
14
- * legacy computation is exactly what lets prod self-verify the reconciler
15
- * against the prior behavior for one release -- no maintenance-window or
16
- * manual shadow observation needed.
17
- *
18
- * 2. Reversibility. A single switch, `TELORA_RECONCILER_WRITE`, DEFAULT-ON,
19
- * selects whose decision is WRITTEN: ON -> the reconciler; OFF -> the
20
- * retained legacy target. Flip to '0'/'off'/'false'/'no' (and restart) to
21
- * revert instantly; the whole consolidation also reverts as one merge.
22
- *
23
- * Why activation is safe (suite stays green by construction): the reconciler was
24
- * built (Delivery 3) to MIRROR the live writers and proven so by the Delivery 2
25
- * parity tests. So in every characterized case `result.target === legacyTarget`
26
- * -- the write is byte-identical and the characterization suite stays green. The
27
- * self-check exists to catch any UN-characterized prod case where they differ.
10
+ * HISTORY (retired): this module was once an activation layer that ran the
11
+ * reconciler in SHADOW alongside a retained "legacy" per-site computation,
12
+ * logged `[reconciler-divergence]` on any mismatch, and gated the write behind a
13
+ * default-on `TELORA_RECONCILER_WRITE` kill switch (ON -> reconciler, OFF ->
14
+ * legacy target). The characterize -> shadow -> flip migration is complete: the
15
+ * reconciler has been the authoritative writer with zero divergence, so the
16
+ * legacy computation, the divergence log, and the kill switch have all been
17
+ * retired. The reconciler's target IS the write; there is no second path to
18
+ * compare it against.
28
19
  *
29
20
  * The single shared "issues are done" predicate (areDeliveryIssuesDone) and the
30
- * agreed terminal set live in delivery-reconciler.ts. The agreed set is
31
- * {Done, Verified, In Review} (OPEN = {To Do, In Progress, Blocked}); the
32
- * divergent Postgres literal-Done predicate is removed in Delivery 5.
21
+ * agreed terminal set live in delivery-reconciler.ts.
33
22
  */
34
- import { type ReconcileInput, type ReconcileResult } from './delivery-reconciler.js';
23
+ import { type ReconcileInput, type ReconcileResult, type ReconcilerIssue } from './delivery-reconciler.js';
35
24
  import type { ExecutionStatus } from '@telora/daemon-core';
36
- /** Reversibility switch. DEFAULT-ON (opt-out), unlike the shadow's opt-in flag. */
37
- export declare const RECONCILER_WRITE_ENV = "TELORA_RECONCILER_WRITE";
38
- /**
39
- * Whether the reconciler's decision is the one WRITTEN. DEFAULT-ON: unset / ''
40
- * / any value other than the explicit off-tokens enables it. Only
41
- * '0'/'off'/'false'/'no' (case-insensitive) revert to writing the legacy target.
42
- *
43
- * This mirrors the opt-OUT semantics of shouldRunLoop (undefined/'' -> on,
44
- * '0' -> off) rather than the shadow harness's opt-IN, because the reconciler is
45
- * the intended default writer after this delivery -- reverting is the exception.
46
- */
47
- export declare function reconcilerWriteEnabled(env?: NodeJS.ProcessEnv): boolean;
25
+ import type { DeliveryGateState, updateDeliveryStatus } from '../queries/deliveries.js';
48
26
  export interface ReconciledWriteDecision {
49
- /**
50
- * The status the caller should WRITE: the reconciler's target when the switch
51
- * is ON (default), otherwise the retained legacy target.
52
- */
27
+ /** The status the caller should WRITE (the reconciler's target). */
53
28
  target: ExecutionStatus;
54
- /** The reconciler's computed result -- always present, regardless of the switch. */
29
+ /** The reconciler's full computed result (canonical + reason), for logging/debug. */
55
30
  result: ReconcileResult;
56
- /** Whether the reconciler's target differs from the legacy target. */
57
- diverged: boolean;
58
- /** Whether the reconciler's decision is the one being written (the switch state). */
59
- reconcilerAuthoritative: boolean;
60
31
  }
61
32
  export interface ResolveReconciledWriteParams {
62
- /** Short site label for the divergence log (e.g. 'auto-advance', 'completion'). */
63
- site: string;
64
- deliveryId: string;
65
- deliveryName: string;
66
33
  /** The full signal for the reconciler. currentStatus is the status at THIS step. */
67
34
  input: ReconcileInput;
68
- /** What the legacy/old-path code decided to write for this same step. */
69
- legacyTarget: ExecutionStatus;
70
35
  }
71
- export interface ReconciledWriteDeps {
72
- /** Divergence sink. Defaults to console.log; injected in tests for capture. */
73
- log?: (message: string) => void;
74
- /** Switch state. Defaults to reconcilerWriteEnabled(); injected in tests. */
75
- writeEnabled?: () => boolean;
36
+ /**
37
+ * Decide what status to write for one transition step. Single-step: callers that
38
+ * walk multiple steps in one pass (e.g. queued -> coding -> verify) call this
39
+ * once per actual write, keying `input.currentStatus` to that step, so the
40
+ * reconciler's single-step decision corresponds 1:1 to each write.
41
+ */
42
+ export declare function resolveReconciledWrite(params: ResolveReconciledWriteParams): ReconciledWriteDecision;
43
+ /**
44
+ * The reconciler input for the WORK-START crossing (queued -> coding the moment a
45
+ * work issue is In Progress). This exact input is built identically at all three
46
+ * work-start sites -- the live poll tick (listener-auto-advance.checkDeliveryWorkStart),
47
+ * the teamless auto-advance queued step (listener-auto-advance.checkDeliveryAutoAdvance),
48
+ * and the team-exit completion path (completion/status-advance-phase) -- so it has
49
+ * ONE definition here. A queued delivery is not git-touching to cross, so the
50
+ * worktree is treated as committed; there is no guard or review signal at this edge.
51
+ */
52
+ export declare function workStartReconcileInput(issues: readonly ReconcilerIssue[]): ReconcileInput;
53
+ /** The write callback shape the step applier needs (matches queries/deliveries.updateDeliveryStatus). */
54
+ export type UpdateDeliveryStatusFn = typeof updateDeliveryStatus;
55
+ export interface ApplyReconciledStepParams {
56
+ deliveryId: string;
57
+ /** The delivery's current status; the reconciler decides the step FROM here. */
58
+ fromStatus: ExecutionStatus;
59
+ input: ReconcileInput;
60
+ /** The workflow stages, to resolve the target status's stage id. */
61
+ stages: ReadonlyArray<{
62
+ id: string;
63
+ name: string;
64
+ }>;
65
+ organizationId: string;
66
+ /** gate_state to write with the transition (default: leave untouched). */
67
+ gateState?: DeliveryGateState | null;
68
+ /**
69
+ * When true, DO NOT write if the target status has no matching workflow stage
70
+ * (the completion path warns and leaves the delivery put in that case). When
71
+ * false (default), write regardless -- the target's stage id is best-effort
72
+ * (the live poll-tick path always writes the reconciler target). This flag is
73
+ * how one primitive reproduces both sites' stage-not-found behavior exactly.
74
+ */
75
+ requireStageToWrite?: boolean;
76
+ }
77
+ export interface ApplyReconciledStepResult {
78
+ /** The reconciler's target for this step. */
79
+ target: ExecutionStatus;
80
+ /** True when the reconciler moved off fromStatus (a crossing is due). */
81
+ changed: boolean;
82
+ /** True when a status write was actually issued. */
83
+ written: boolean;
84
+ /** The resolved stage for the target, if the workflow names one. */
85
+ stageId: string | undefined;
86
+ /** False when `changed` but the target has no matching workflow stage. */
87
+ stageFound: boolean;
76
88
  }
77
89
  /**
78
- * Decide what status to write for one transition step, with the runtime
79
- * self-check. Single-step: callers that walk multiple steps in one pass
80
- * (e.g. queued -> coding -> verify) call this once per actual write, keying
81
- * `input.currentStatus` + `legacyTarget` to that step, so the reconciler's
82
- * single-step decision and the legacy step correspond 1:1.
90
+ * Reconcile ONE transition step and write it through the single physical writer
91
+ * (updateDeliveryStatus), keyed on `fromStatus`. Shared by the poll-tick and
92
+ * team-exit advancement paths so the reconcile -> find-stage -> write mechanic
93
+ * has one definition; callers keep their own logging / teamState bookkeeping,
94
+ * driven by the returned {changed, written, stageFound, target}. Never writes a
95
+ * no-op (target === fromStatus). See `requireStageToWrite` for the stage-missing
96
+ * behavior each caller selects.
83
97
  */
84
- export declare function resolveReconciledWrite(params: ResolveReconciledWriteParams, deps?: ReconciledWriteDeps): ReconciledWriteDecision;
98
+ export declare function applyReconciledStep(update: UpdateDeliveryStatusFn, params: ApplyReconciledStepParams): Promise<ApplyReconciledStepResult>;
85
99
  //# sourceMappingURL=delivery-reconciler-apply.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-reconciler-apply.d.ts","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAO3D,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEpF;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,MAAM,EAAE,eAAe,CAAC;IACxB,oFAAoF;IACpF,MAAM,EAAE,eAAe,CAAC;IACxB,sEAAsE;IACtE,QAAQ,EAAE,OAAO,CAAC;IAClB,qFAAqF;IACrF,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,KAAK,EAAE,cAAc,CAAC;IACtB,yEAAyE;IACzE,YAAY,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,4BAA4B,EACpC,IAAI,GAAE,mBAAwB,GAC7B,uBAAuB,CAsBzB"}
1
+ {"version":3,"file":"delivery-reconciler-apply.d.ts","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAExF,MAAM,WAAW,uBAAuB;IACtC,oEAAoE;IACpE,MAAM,EAAE,eAAe,CAAC;IACxB,qFAAqF;IACrF,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IAC3C,oFAAoF;IACpF,KAAK,EAAE,cAAc,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,4BAA4B,GACnC,uBAAuB,CAGzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,cAAc,CAQ1F;AAED,yGAAyG;AACzG,MAAM,MAAM,sBAAsB,GAAG,OAAO,oBAAoB,CAAC;AAEjE,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,UAAU,EAAE,eAAe,CAAC;IAC5B,KAAK,EAAE,cAAc,CAAC;IACtB,oEAAoE;IACpE,MAAM,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACxC,6CAA6C;IAC7C,MAAM,EAAE,eAAe,CAAC;IACxB,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAkBpC"}
@@ -1,77 +1,73 @@
1
1
  /**
2
- * Activation layer for the single-writer delivery reconciler.
2
+ * Thin decision seam over the pure delivery reconciler.
3
3
  *
4
- * Delivery 4 of the Delivery Execution Pathway Consolidation focus (reality-tree
5
- * injection #10). This is the step that makes the pure reconciler
6
- * (delivery-reconciler.ts) the DECISION AUTHORITY for every daemon
7
- * execution_status write, with the two safety properties the focus method
8
- * (characterize -> shadow -> flip, reversible) requires:
4
+ * The pure reconciler (delivery-reconciler.ts) is the DECISION AUTHORITY for
5
+ * every daemon execution_status write. `resolveReconciledWrite` is the single
6
+ * entry point the write sites call to turn a `ReconcileInput` into the status to
7
+ * write; the caller then routes that status through `updateDeliveryStatus` (the
8
+ * sole physical writer).
9
9
  *
10
- * 1. Runtime self-check (replaces the manual prod shadow-observation gate).
11
- * Each write site still computes what the legacy ("old path") logic would
12
- * have written; `resolveReconciledWrite` compares that to the reconciler's
13
- * target and logs `[reconciler-divergence]` on any mismatch. The retained
14
- * legacy computation is exactly what lets prod self-verify the reconciler
15
- * against the prior behavior for one release -- no maintenance-window or
16
- * manual shadow observation needed.
17
- *
18
- * 2. Reversibility. A single switch, `TELORA_RECONCILER_WRITE`, DEFAULT-ON,
19
- * selects whose decision is WRITTEN: ON -> the reconciler; OFF -> the
20
- * retained legacy target. Flip to '0'/'off'/'false'/'no' (and restart) to
21
- * revert instantly; the whole consolidation also reverts as one merge.
22
- *
23
- * Why activation is safe (suite stays green by construction): the reconciler was
24
- * built (Delivery 3) to MIRROR the live writers and proven so by the Delivery 2
25
- * parity tests. So in every characterized case `result.target === legacyTarget`
26
- * -- the write is byte-identical and the characterization suite stays green. The
27
- * self-check exists to catch any UN-characterized prod case where they differ.
10
+ * HISTORY (retired): this module was once an activation layer that ran the
11
+ * reconciler in SHADOW alongside a retained "legacy" per-site computation,
12
+ * logged `[reconciler-divergence]` on any mismatch, and gated the write behind a
13
+ * default-on `TELORA_RECONCILER_WRITE` kill switch (ON -> reconciler, OFF ->
14
+ * legacy target). The characterize -> shadow -> flip migration is complete: the
15
+ * reconciler has been the authoritative writer with zero divergence, so the
16
+ * legacy computation, the divergence log, and the kill switch have all been
17
+ * retired. The reconciler's target IS the write; there is no second path to
18
+ * compare it against.
28
19
  *
29
20
  * The single shared "issues are done" predicate (areDeliveryIssuesDone) and the
30
- * agreed terminal set live in delivery-reconciler.ts. The agreed set is
31
- * {Done, Verified, In Review} (OPEN = {To Do, In Progress, Blocked}); the
32
- * divergent Postgres literal-Done predicate is removed in Delivery 5.
21
+ * agreed terminal set live in delivery-reconciler.ts.
33
22
  */
34
23
  import { reconcileDeliveryStatus, } from './delivery-reconciler.js';
35
- import { createLogger } from '../shell/log.js';
36
- import { loadEnvConfig } from '@telora/daemon-core';
37
- const dlog = createLogger({ module: 'delivery-reconciler-apply' });
38
- /** Reversibility switch. DEFAULT-ON (opt-out), unlike the shadow's opt-in flag. */
39
- export const RECONCILER_WRITE_ENV = 'TELORA_RECONCILER_WRITE';
40
24
  /**
41
- * Whether the reconciler's decision is the one WRITTEN. DEFAULT-ON: unset / ''
42
- * / any value other than the explicit off-tokens enables it. Only
43
- * '0'/'off'/'false'/'no' (case-insensitive) revert to writing the legacy target.
44
- *
45
- * This mirrors the opt-OUT semantics of shouldRunLoop (undefined/'' -> on,
46
- * '0' -> off) rather than the shadow harness's opt-IN, because the reconciler is
47
- * the intended default writer after this delivery -- reverting is the exception.
25
+ * Decide what status to write for one transition step. Single-step: callers that
26
+ * walk multiple steps in one pass (e.g. queued -> coding -> verify) call this
27
+ * once per actual write, keying `input.currentStatus` to that step, so the
28
+ * reconciler's single-step decision corresponds 1:1 to each write.
48
29
  */
49
- export function reconcilerWriteEnabled(env = process.env) {
50
- return loadEnvConfig(env).TELORA_RECONCILER_WRITE;
30
+ export function resolveReconciledWrite(params) {
31
+ const result = reconcileDeliveryStatus(params.input);
32
+ return { target: result.target, result };
51
33
  }
52
34
  /**
53
- * Decide what status to write for one transition step, with the runtime
54
- * self-check. Single-step: callers that walk multiple steps in one pass
55
- * (e.g. queued -> coding -> verify) call this once per actual write, keying
56
- * `input.currentStatus` + `legacyTarget` to that step, so the reconciler's
57
- * single-step decision and the legacy step correspond 1:1.
35
+ * The reconciler input for the WORK-START crossing (queued -> coding the moment a
36
+ * work issue is In Progress). This exact input is built identically at all three
37
+ * work-start sites -- the live poll tick (listener-auto-advance.checkDeliveryWorkStart),
38
+ * the teamless auto-advance queued step (listener-auto-advance.checkDeliveryAutoAdvance),
39
+ * and the team-exit completion path (completion/status-advance-phase) -- so it has
40
+ * ONE definition here. A queued delivery is not git-touching to cross, so the
41
+ * worktree is treated as committed; there is no guard or review signal at this edge.
58
42
  */
59
- export function resolveReconciledWrite(params, deps = {}) {
60
- const log = deps.log ?? ((m) => dlog.info(m));
61
- const writeEnabled = (deps.writeEnabled ?? reconcilerWriteEnabled)();
62
- const result = reconcileDeliveryStatus(params.input);
63
- const diverged = result.target !== params.legacyTarget;
64
- if (diverged) {
65
- log(`[reconciler-divergence] site=${params.site} delivery=${params.deliveryId} ` +
66
- `("${params.deliveryName}") legacy=${params.legacyTarget} ` +
67
- `reconciled=${result.target} canonical=${result.canonical} ` +
68
- `reason="${result.reason}"`);
69
- }
43
+ export function workStartReconcileInput(issues) {
70
44
  return {
71
- target: writeEnabled ? result.target : params.legacyTarget,
72
- result,
73
- diverged,
74
- reconcilerAuthoritative: writeEnabled,
45
+ currentStatus: 'queued',
46
+ issues: issues.map((i) => ({ status: i.status, issueType: i.issueType })),
47
+ gitState: { worktreeCommitted: true },
48
+ guardVerdict: null,
49
+ reviewState: null,
75
50
  };
76
51
  }
52
+ /**
53
+ * Reconcile ONE transition step and write it through the single physical writer
54
+ * (updateDeliveryStatus), keyed on `fromStatus`. Shared by the poll-tick and
55
+ * team-exit advancement paths so the reconcile -> find-stage -> write mechanic
56
+ * has one definition; callers keep their own logging / teamState bookkeeping,
57
+ * driven by the returned {changed, written, stageFound, target}. Never writes a
58
+ * no-op (target === fromStatus). See `requireStageToWrite` for the stage-missing
59
+ * behavior each caller selects.
60
+ */
61
+ export async function applyReconciledStep(update, params) {
62
+ const { target } = resolveReconciledWrite({ input: params.input });
63
+ if (target === params.fromStatus) {
64
+ return { target, changed: false, written: false, stageId: undefined, stageFound: false };
65
+ }
66
+ const stage = params.stages.find((s) => s.name === target);
67
+ if (params.requireStageToWrite && !stage) {
68
+ return { target, changed: true, written: false, stageId: undefined, stageFound: false };
69
+ }
70
+ await update(params.deliveryId, target, stage?.id, params.gateState, undefined, { organizationId: params.organizationId, fromStatus: params.fromStatus });
71
+ return { target, changed: true, written: true, stageId: stage?.id, stageFound: !!stage };
72
+ }
77
73
  //# sourceMappingURL=delivery-reconciler-apply.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-reconciler-apply.js","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EACL,uBAAuB,GAGxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC;AAGnE,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACzE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,uBAAuB,CAAC;AACpD,CAAC;AAkCD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAoC,EACpC,OAA4B,EAAE;IAE9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,sBAAsB,CAAC,EAAE,CAAC;IAErE,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,CAAC;IAEvD,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,CACD,gCAAgC,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,UAAU,GAAG;YAC1E,KAAK,MAAM,CAAC,YAAY,aAAa,MAAM,CAAC,YAAY,GAAG;YAC3D,cAAc,MAAM,CAAC,MAAM,cAAc,MAAM,CAAC,SAAS,GAAG;YAC5D,WAAW,MAAM,CAAC,MAAM,GAAG,CAC9B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;QAC1D,MAAM;QACN,QAAQ;QACR,uBAAuB,EAAE,YAAY;KACtC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"delivery-reconciler-apply.js","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EACL,uBAAuB,GAIxB,MAAM,0BAA0B,CAAC;AAgBlC;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAoC;IAEpC,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAkC;IACxE,OAAO;QACL,aAAa,EAAE,QAAQ;QACvB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE;QACrC,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC;AAsCD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA8B,EAC9B,MAAiC;IAEjC,MAAM,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC3F,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,mBAAmB,IAAI,CAAC,KAAK,EAAE,CAAC;QACzC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC1F,CAAC;IACD,MAAM,MAAM,CACV,MAAM,CAAC,UAAU,EACjB,MAAM,EACN,KAAK,EAAE,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,SAAS,EACT,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CACzE,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAC3F,CAAC"}
@@ -82,6 +82,23 @@ export type RequestStatusReader = (requestIds: string[]) => Promise<Array<{
82
82
  * from the reader propagates the same way.
83
83
  */
84
84
  export declare function makeRequestClosureEvaluator(readStatuses: RequestStatusReader): ExternalConditionEvaluator;
85
+ /**
86
+ * The production external-condition evaluator wired at every verify->done hold
87
+ * gate: re-read the cross-product requests a hold references via
88
+ * queries/requests.ts and clear only when all have reached closure.
89
+ *
90
+ * The request query is loaded with a DEFERRED dynamic `import()` rather than a
91
+ * static top-of-module import on purpose: queries/requests.js -> queries/shared.js
92
+ * pulls a bare `@telora/daemon-core` VALUE import that mis-resolves under the
93
+ * node:test module-mock loader, so a load-time static import would poison every
94
+ * mocked listener/review-exit test that transitively loads this module. The
95
+ * dynamic import resolves ONLY when a request-referenced hold is actually re-read
96
+ * (never in mocked tests that carry no such hold); behavior is identical in
97
+ * production. This is the single definition of that evaluator, shared by the
98
+ * discovery-only auto-advance path (listener-auto-advance) and the review-exit
99
+ * path (review-exit-phase) so the deferred-import boilerplate lives in one place.
100
+ */
101
+ export declare function makeDeferredRequestClosureEvaluator(productId: string): ExternalConditionEvaluator;
85
102
  /** The resolved external-hold state for one delivery. */
86
103
  export interface ExternalHold {
87
104
  /** True when an unmet external hold is present on the delivery. */
@@ -1 +1 @@
1
- {"version":3,"file":"external-hold.d.ts","sourceRoot":"","sources":["../../src/delivery/external-hold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAqB,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAwB3G,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;CACnD;AAED;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,GAAG,CACvC,IAAI,EAAE,iBAAiB,KACpB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,EAAE,0BAAwC,CAAC;AAElF;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,UAAU,EAAE,MAAM,EAAE,KACjB,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,mBAAmB,GAChC,0BAA0B,CAe5B;AAED,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,IAAI,EAAE,OAAO,CAAC;IACd,4DAA4D;IAC5D,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/B,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAmBlF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACzG,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,EAClB,iBAAiB,EAAE,0BAA0B,EAC7C,KAAK,GAAE,MAAM,MAAuC,GACnD,OAAO,CAAC,YAAY,CAAC,CAoCvB;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAY/D"}
1
+ {"version":3,"file":"external-hold.d.ts","sourceRoot":"","sources":["../../src/delivery/external-hold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAqB,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AA6B3G,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;CACnD;AAED;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,GAAG,CACvC,IAAI,EAAE,iBAAiB,KACpB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,EAAE,0BAAwC,CAAC;AAElF;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,UAAU,EAAE,MAAM,EAAE,KACjB,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,mBAAmB,GAChC,0BAA0B,CAe5B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,CAKjG;AAED,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,IAAI,EAAE,OAAO,CAAC;IACd,4DAA4D;IAC5D,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/B,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAmBlF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACzG,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,EAClB,iBAAiB,EAAE,0BAA0B,EAC7C,KAAK,GAAE,MAAM,MAAuC,GACnD,OAAO,CAAC,YAAY,CAAC,CAoCvB;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAmB/D"}
@@ -29,6 +29,7 @@
29
29
  * @module external-hold
30
30
  */
31
31
  import { createLogger } from '../shell/log.js';
32
+ import { classifyWaitReachability, describeWaitReachability, crossProductRequestWait, } from './wait-reachability.js';
32
33
  const log = createLogger({ module: 'external-hold' });
33
34
  // The `verify` status re-asserted by a gate_state write. Daemon-local literal
34
35
  // for the same reason as operator-hold.ts's VERIFY_STATUS: this module is
@@ -93,6 +94,28 @@ export function makeRequestClosureEvaluator(readStatuses) {
93
94
  return true; // every referenced request closed -> dependency met
94
95
  };
95
96
  }
97
+ /**
98
+ * The production external-condition evaluator wired at every verify->done hold
99
+ * gate: re-read the cross-product requests a hold references via
100
+ * queries/requests.ts and clear only when all have reached closure.
101
+ *
102
+ * The request query is loaded with a DEFERRED dynamic `import()` rather than a
103
+ * static top-of-module import on purpose: queries/requests.js -> queries/shared.js
104
+ * pulls a bare `@telora/daemon-core` VALUE import that mis-resolves under the
105
+ * node:test module-mock loader, so a load-time static import would poison every
106
+ * mocked listener/review-exit test that transitively loads this module. The
107
+ * dynamic import resolves ONLY when a request-referenced hold is actually re-read
108
+ * (never in mocked tests that carry no such hold); behavior is identical in
109
+ * production. This is the single definition of that evaluator, shared by the
110
+ * discovery-only auto-advance path (listener-auto-advance) and the review-exit
111
+ * path (review-exit-phase) so the deferred-import boilerplate lives in one place.
112
+ */
113
+ export function makeDeferredRequestClosureEvaluator(productId) {
114
+ return makeRequestClosureEvaluator(async (ids) => {
115
+ const { listOutgoingRequestStatuses } = await import('../queries/requests.js');
116
+ return listOutgoingRequestStatuses(productId, ids);
117
+ });
118
+ }
96
119
  /** Narrow a delivery's `gate_state` JSONB to its externalHold, if any. */
97
120
  export function readExternalHoldState(gateState) {
98
121
  if (gateState === null || typeof gateState !== 'object')
@@ -211,12 +234,17 @@ export function describeExternalHold(hold) {
211
234
  return 'external hold cleared (condition re-evaluated true)';
212
235
  if (hold.hold) {
213
236
  const base = `external hold: ${hold.hold.condition} (clears when: ${hold.hold.clearsWhen})`;
237
+ // An external dependency is a wait on ANOTHER ACTOR (a third party / peer
238
+ // product) -- carry the shared reachability marker so this hold is legible
239
+ // in the same vocabulary as every other wait, and distinguishable from a
240
+ // wait blocked on itself or on a recorded fact.
241
+ const marker = describeWaitReachability(classifyWaitReachability(crossProductRequestWait(hold.hold.clearsWhenRequestsClosed ?? [])));
214
242
  // Name the reference-less case so it is not mistaken for a self-clearing
215
243
  // hold: nothing references what would clear it, so the daemon cannot re-read
216
244
  // it to done -- it needs a reality change or a re-declaration with a reference.
217
245
  return hold.referenceLess
218
- ? `${base} [no machine-readable clearing reference -- will not self-clear]`
219
- : base;
246
+ ? `${base} [${marker}; no machine-readable clearing reference -- will not self-clear]`
247
+ : `${base} [${marker}]`;
220
248
  }
221
249
  return 'not held';
222
250
  }
@@ -1 +1 @@
1
- {"version":3,"file":"external-hold.js","sourceRoot":"","sources":["../../src/delivery/external-hold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"external-hold.js","sourceRoot":"","sources":["../../src/delivery/external-hold.ts"],"names":[],"mappings":"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"}
@@ -12,8 +12,7 @@
12
12
  *
13
13
  * Sibling of the shortfall hold (completion/review-exit-shortfall.ts) -- the same
14
14
  * shape: resolve the hold async, and gate the write DOWNSTREAM of the reconciler's
15
- * target decision (the reconciler models neither hold; feeding it one would emit
16
- * spurious [reconciler-divergence] logs). Two differences from the shortfall hold:
15
+ * target decision (the reconciler models neither hold). Two differences from the shortfall hold:
17
16
  * it is per-DELIVERY (escalations anchor to a delivery, not a focus), and its
18
17
  * failure direction is the inverse -- see resolveOperatorHold.
19
18
  *
@@ -1 +1 @@
1
- {"version":3,"file":"operator-hold.d.ts","sourceRoot":"","sources":["../../src/delivery/operator-hold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,+BAA+B,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAaxF,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,qFAAqF;IACrF,IAAI,EAAE,OAAO,CAAC;IACd,8EAA8E;IAC9E,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC1C,kFAAkF;IAClF,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B,EAAE,OAAO,+BAA+B,CAAC;IACxE,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;CACnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CAWvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAO/D"}
1
+ {"version":3,"file":"operator-hold.d.ts","sourceRoot":"","sources":["../../src/delivery/operator-hold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,+BAA+B,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAaxF,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,qFAAqF;IACrF,IAAI,EAAE,OAAO,CAAC;IACd,8EAA8E;IAC9E,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC1C,kFAAkF;IAClF,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B,EAAE,OAAO,+BAA+B,CAAC;IACxE,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;CACnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CAWvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAO/D"}
@@ -12,8 +12,7 @@
12
12
  *
13
13
  * Sibling of the shortfall hold (completion/review-exit-shortfall.ts) -- the same
14
14
  * shape: resolve the hold async, and gate the write DOWNSTREAM of the reconciler's
15
- * target decision (the reconciler models neither hold; feeding it one would emit
16
- * spurious [reconciler-divergence] logs). Two differences from the shortfall hold:
15
+ * target decision (the reconciler models neither hold). Two differences from the shortfall hold:
17
16
  * it is per-DELIVERY (escalations anchor to a delivery, not a focus), and its
18
17
  * failure direction is the inverse -- see resolveOperatorHold.
19
18
  *
@@ -1 +1 @@
1
- {"version":3,"file":"operator-hold.js","sourceRoot":"","sources":["../../src/delivery/operator-hold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAEtD,iFAAiF;AACjF,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,2EAA2E;AAC3E,uFAAuF;AACvF,MAAM,aAAa,GAAG,QAAQ,CAAC;AAkB/B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAsB,EACtB,UAAkB,EAClB,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACnF,OAAO,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,uEAAuE,UAAU,MAAM;YACvF,uCAAwC,GAAa,CAAC,OAAO,EAAE,CAChE,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAsB,EACtB,UAAkB,EAClB,IAAkB;IAElB,MAAM,SAAS,GAAsB;QACnC,uEAAuE;QACvE,0EAA0E;QAC1E,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,YAAY,EAAE,IAAI,CAAC,UAAU;YAC3B,CAAC,CAAC;gBACE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;gBAChC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc;gBAC9C,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;aACzC;YACH,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;KACtF,CAAC;IACF,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,oBAAoB,CAC7B,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,yEAAyE,UAAU,GAAG;YACtF,uDAAwD,GAAa,CAAC,OAAO,EAAE,CAChF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB,CAAC,IAAkB;IACrD,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,yCAAyC,CAAC;IACtE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,QAAQ,IAAI,CAAC,UAAU,CAAC,WAAW,eAAe,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YAC3E,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"operator-hold.js","sourceRoot":"","sources":["../../src/delivery/operator-hold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAEtD,iFAAiF;AACjF,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,2EAA2E;AAC3E,uFAAuF;AACvF,MAAM,aAAa,GAAG,QAAQ,CAAC;AAkB/B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAsB,EACtB,UAAkB,EAClB,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACnF,OAAO,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,uEAAuE,UAAU,MAAM;YACvF,uCAAwC,GAAa,CAAC,OAAO,EAAE,CAChE,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAsB,EACtB,UAAkB,EAClB,IAAkB;IAElB,MAAM,SAAS,GAAsB;QACnC,uEAAuE;QACvE,0EAA0E;QAC1E,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,YAAY,EAAE,IAAI,CAAC,UAAU;YAC3B,CAAC,CAAC;gBACE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;gBAChC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc;gBAC9C,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;aACzC;YACH,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;KACtF,CAAC;IACF,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,oBAAoB,CAC7B,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,yEAAyE,UAAU,GAAG;YACtF,uDAAwD,GAAa,CAAC,OAAO,EAAE,CAChF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB,CAAC,IAAkB;IACrD,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,yCAAyC,CAAC;IACtE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,QAAQ,IAAI,CAAC,UAAU,CAAC,WAAW,eAAe,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YAC3E,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}