@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.
- package/build-info.json +7 -3
- package/dist/ci/ci-status.d.ts +63 -11
- package/dist/ci/ci-status.d.ts.map +1 -1
- package/dist/ci/ci-status.js +94 -27
- package/dist/ci/ci-status.js.map +1 -1
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +5 -3
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/review-exit-escalations.d.ts +36 -1
- package/dist/completion/review-exit-escalations.d.ts.map +1 -1
- package/dist/completion/review-exit-escalations.js +81 -0
- package/dist/completion/review-exit-escalations.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts +4 -2
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +39 -48
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/status-advance-phase.js +10 -29
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +8 -2
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/delivery/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery/delivery-lifecycle.js +7 -13
- package/dist/delivery/delivery-lifecycle.js.map +1 -1
- package/dist/delivery/delivery-reconciler-apply.d.ts +80 -66
- package/dist/delivery/delivery-reconciler-apply.d.ts.map +1 -1
- package/dist/delivery/delivery-reconciler-apply.js +57 -61
- package/dist/delivery/delivery-reconciler-apply.js.map +1 -1
- package/dist/delivery/external-hold.d.ts +17 -0
- package/dist/delivery/external-hold.d.ts.map +1 -1
- package/dist/delivery/external-hold.js +30 -2
- package/dist/delivery/external-hold.js.map +1 -1
- package/dist/delivery/operator-hold.d.ts +1 -2
- package/dist/delivery/operator-hold.d.ts.map +1 -1
- package/dist/delivery/operator-hold.js +1 -2
- package/dist/delivery/operator-hold.js.map +1 -1
- package/dist/delivery/wait-reachability.d.ts +149 -0
- package/dist/delivery/wait-reachability.d.ts.map +1 -0
- package/dist/delivery/wait-reachability.js +182 -0
- package/dist/delivery/wait-reachability.js.map +1 -0
- package/dist/focus/listener-auto-advance.d.ts.map +1 -1
- package/dist/focus/listener-auto-advance.js +10 -55
- package/dist/focus/listener-auto-advance.js.map +1 -1
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +17 -1
- package/dist/focus/listener.js.map +1 -1
- package/dist/git/merge.d.ts.map +1 -1
- package/dist/git/merge.js +12 -3
- package/dist/git/merge.js.map +1 -1
- package/dist/queries/deliveries.d.ts +10 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +1 -0
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts +10 -0
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +15 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/schemas.d.ts +2 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +4 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/shell/heartbeat.d.ts +7 -0
- package/dist/shell/heartbeat.d.ts.map +1 -1
- package/dist/shell/heartbeat.js +1 -1
- package/dist/shell/heartbeat.js.map +1 -1
- package/dist/spawn/respawn-cycle-escalation.d.ts +41 -0
- package/dist/spawn/respawn-cycle-escalation.d.ts.map +1 -0
- package/dist/spawn/respawn-cycle-escalation.js +83 -0
- package/dist/spawn/respawn-cycle-escalation.js.map +1 -0
- package/dist/spawn/spawn-cooldown.d.ts +85 -2
- package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn/spawn-cooldown.js +73 -10
- package/dist/spawn/spawn-cooldown.js.map +1 -1
- package/dist/testing/fixtures/index.d.ts +64 -0
- package/dist/testing/fixtures/index.d.ts.map +1 -0
- package/dist/testing/fixtures/index.js +220 -0
- package/dist/testing/fixtures/index.js.map +1 -0
- package/dist/update/build-info.d.ts +1 -0
- package/dist/update/build-info.d.ts.map +1 -1
- package/dist/update/build-info.js +1 -1
- package/dist/update/build-info.js.map +1 -1
- package/dist/verify/stall-detector-config.d.ts +8 -0
- package/dist/verify/stall-detector-config.d.ts.map +1 -1
- package/dist/verify/stall-detector-config.js +40 -0
- package/dist/verify/stall-detector-config.js.map +1 -1
- package/dist/verify/stall-detectors.d.ts +37 -6
- package/dist/verify/stall-detectors.d.ts.map +1 -1
- package/dist/verify/stall-detectors.js +45 -9
- package/dist/verify/stall-detectors.js.map +1 -1
- package/dist/verify/verification-feedback.d.ts +3 -4
- package/dist/verify/verification-feedback.d.ts.map +1 -1
- package/dist/verify/verification-feedback.js +3 -12
- package/dist/verify/verification-feedback.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,85 +1,99 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Thin decision seam over the pure delivery reconciler.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
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
|
|
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
|
|
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
|
-
*
|
|
2
|
+
* Thin decision seam over the pure delivery reconciler.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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.
|
|
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
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
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
|
|
50
|
-
|
|
30
|
+
export function resolveReconciledWrite(params) {
|
|
31
|
+
const result = reconcileDeliveryStatus(params.input);
|
|
32
|
+
return { target: result.target, result };
|
|
51
33
|
}
|
|
52
34
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
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
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
|
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;
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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"}
|