@telora/daemon 0.18.5 → 0.18.18
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 +5 -3
- package/dist/ai-inspection-runner.d.ts.map +1 -1
- package/dist/ai-inspection-runner.js +3 -0
- package/dist/ai-inspection-runner.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts +43 -0
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +82 -1
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/daemon-process.d.ts +18 -0
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/daemon-process.js +19 -1
- package/dist/daemon-process.js.map +1 -1
- package/dist/de-restatement.d.ts.map +1 -1
- package/dist/de-restatement.js +3 -0
- package/dist/de-restatement.js.map +1 -1
- package/dist/directive/directive-queue.d.ts +47 -0
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +44 -0
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive-executor.d.ts +1 -1
- package/dist/directive-executor.d.ts.map +1 -1
- package/dist/directive-executor.js +38 -3
- package/dist/directive-executor.js.map +1 -1
- package/dist/drift-eval-loop.d.ts +8 -0
- package/dist/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift-eval-loop.js +53 -3
- package/dist/drift-eval-loop.js.map +1 -1
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +37 -2
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-team-state.d.ts +32 -0
- package/dist/focus-team-state.d.ts.map +1 -1
- package/dist/focus-team-state.js +65 -0
- package/dist/focus-team-state.js.map +1 -1
- package/dist/loop-llm-client.d.ts.map +1 -1
- package/dist/loop-llm-client.js +3 -0
- package/dist/loop-llm-client.js.map +1 -1
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +2 -0
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/negative-branch.d.ts.map +1 -1
- package/dist/negative-branch.js +3 -0
- package/dist/negative-branch.js.map +1 -1
- package/dist/prd-controller.d.ts +111 -0
- package/dist/prd-controller.d.ts.map +1 -1
- package/dist/prd-controller.js +285 -86
- package/dist/prd-controller.js.map +1 -1
- package/dist/prd-viability.d.ts +50 -0
- package/dist/prd-viability.d.ts.map +1 -0
- package/dist/prd-viability.js +108 -0
- package/dist/prd-viability.js.map +1 -0
- package/dist/queries/issues.d.ts +26 -0
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +37 -0
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/prd.d.ts +32 -1
- package/dist/queries/prd.d.ts.map +1 -1
- package/dist/queries/prd.js +32 -2
- package/dist/queries/prd.js.map +1 -1
- package/dist/queries/shared.d.ts +1 -0
- package/dist/queries/shared.d.ts.map +1 -1
- package/dist/queries/shared.js +19 -0
- package/dist/queries/shared.js.map +1 -1
- package/dist/spawner/index.d.ts +2 -0
- package/dist/spawner/index.d.ts.map +1 -1
- package/dist/spawner/index.js +4 -0
- package/dist/spawner/index.js.map +1 -1
- package/dist/spawner/lifecycle.d.ts +42 -0
- package/dist/spawner/lifecycle.d.ts.map +1 -1
- package/dist/spawner/lifecycle.js +118 -0
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/worker-registry.d.ts +41 -0
- package/dist/spawner/worker-registry.d.ts.map +1 -0
- package/dist/spawner/worker-registry.js +50 -0
- package/dist/spawner/worker-registry.js.map +1 -0
- package/dist/unified-shell.d.ts.map +1 -1
- package/dist/unified-shell.js +33 -1
- package/dist/unified-shell.js.map +1 -1
- package/package.json +3 -3
package/dist/prd-controller.js
CHANGED
|
@@ -17,10 +17,12 @@
|
|
|
17
17
|
import { DELIVERY_STATUS } from '@telora/daemon-core';
|
|
18
18
|
import { configForProduct } from './config.js';
|
|
19
19
|
import { evaluateClearance, } from './prd-clearance-engine.js';
|
|
20
|
-
import { loadActivePrds, loadPrtGraph, materializeOvercome, armFocus, markNodeCleared, finalizeFrontierFocus, markPrdDone, loadPathways, commitPathway, } from './queries/prd.js';
|
|
20
|
+
import { loadActivePrds, loadDonePrds, loadPrtGraph, materializeOvercome, armFocus, markNodeCleared, finalizeFrontierFocus, markPrdDone, loadPathways, commitPathway, } from './queries/prd.js';
|
|
21
21
|
import { clearPendingSpawnDirective } from './directive/directive-queue.js';
|
|
22
22
|
import { getFocusDeliveries } from './queries/focuses.js';
|
|
23
|
+
import { hasOpenPrdEscalation } from './queries/issues.js';
|
|
23
24
|
import { computePrtFrontier } from './prd-frontier.js';
|
|
25
|
+
import { isPathwayViable } from './prd-viability.js';
|
|
24
26
|
import { fileEscalation } from './escalations.js';
|
|
25
27
|
import { detectDivergence, selectSurvivingPath, } from './prd-divergence.js';
|
|
26
28
|
import { runStewardJudgment, defaultStewardDeps, } from './prd-steward.js';
|
|
@@ -33,6 +35,38 @@ import { runStewardJudgment, defaultStewardDeps, } from './prd-steward.js';
|
|
|
33
35
|
* deps for tests; defaults here.
|
|
34
36
|
*/
|
|
35
37
|
const noRoleEscalatedPrds = new Set();
|
|
38
|
+
/**
|
|
39
|
+
* Focus ids the completion-limbo self-heal has already finalized this process.
|
|
40
|
+
* Process-lifetime, same pattern as noRoleEscalatedPrds: bounds the self-heal to
|
|
41
|
+
* one finalize per focus so an already-cleared overcome whose focus is complete
|
|
42
|
+
* is converged exactly once, not re-finalized every tick. Injected via deps for
|
|
43
|
+
* tests; defaults here. A restart resets it, which is harmless -- the finalize
|
|
44
|
+
* crossing is idempotent server-side.
|
|
45
|
+
*/
|
|
46
|
+
const selfHealedFocusIdsDefault = new Set();
|
|
47
|
+
/**
|
|
48
|
+
* Product ids whose ONE-SHOT done-PRD limbo sweep has completed this process.
|
|
49
|
+
*
|
|
50
|
+
* The sweep only needs PRDs that were ALREADY done at process start: a PRD that
|
|
51
|
+
* transitions to done DURING this process is converged by the active-tick
|
|
52
|
+
* self-heal (it runs before markPrdDone and records its foci in
|
|
53
|
+
* selfHealedFocusIds), and a pre-existing done PRD has static state. So a single
|
|
54
|
+
* pass per product at startup suffices -- this guard makes loadDonePrds run
|
|
55
|
+
* once per product per process instead of every tick (no unbounded re-list of
|
|
56
|
+
* the monotonically growing done set, no perpetual re-read of a done PRD whose
|
|
57
|
+
* focus can never be complete-by-deliveries). Set only after a successful pass
|
|
58
|
+
* so a transient failure retries next tick. A restart resets it, which is
|
|
59
|
+
* harmless: finalizeFrontierFocus is idempotent + overcome-anchor-scoped
|
|
60
|
+
* server-side. Injected via deps for tests; defaults here.
|
|
61
|
+
*/
|
|
62
|
+
const doneSweepDoneProductsDefault = new Set();
|
|
63
|
+
/**
|
|
64
|
+
* Per-product count of consecutive INCOMPLETE done-sweep passes (productId ->
|
|
65
|
+
* attempts), so a persistent failure is bounded to DONE_SWEEP_MAX_ATTEMPTS
|
|
66
|
+
* before the sweep is abandoned + escalated rather than re-listing every tick.
|
|
67
|
+
* Cleared once the product sweeps cleanly. Process-lifetime; injected for tests.
|
|
68
|
+
*/
|
|
69
|
+
const doneSweepAttemptsDefault = new Map();
|
|
36
70
|
/**
|
|
37
71
|
* Per-PRD timestamp (ms) of the last steward cadence run. Process-lifetime.
|
|
38
72
|
* Injected in tests so cadence behavior is verifiable without real timers.
|
|
@@ -48,6 +82,21 @@ const stewardLastRunMs = new Map();
|
|
|
48
82
|
export const STEWARD_CADENCE_MS = 15 * 60 * 1000;
|
|
49
83
|
/** Stable machine reason for the "active PRD frontier cannot be armed" signal. */
|
|
50
84
|
export const PRD_FRONTIER_BLOCKED_NO_ROLE = 'prd_frontier_blocked_no_arm_role';
|
|
85
|
+
/**
|
|
86
|
+
* Stable machine reason for the "done-PRD completion-limbo sweep keeps failing"
|
|
87
|
+
* signal: the per-product one-shot sweep hit DONE_SWEEP_MAX_ATTEMPTS consecutive
|
|
88
|
+
* incomplete passes and was abandoned (product marked swept) so a persistently
|
|
89
|
+
* failing done PRD does not pin the product to a per-tick loadDonePrds re-list.
|
|
90
|
+
*/
|
|
91
|
+
export const PRD_DONE_SWEEP_ABANDONED = 'prd_done_sweep_abandoned';
|
|
92
|
+
/**
|
|
93
|
+
* Consecutive incomplete done-sweep passes tolerated for a product before the
|
|
94
|
+
* sweep is abandoned and escalated. A merely-non-completable focus is skipped
|
|
95
|
+
* (not a failure), so this trips only on a genuine persistent error (unreadable
|
|
96
|
+
* PRT graph, finalize that keeps rejecting) -- bounding the retry instead of
|
|
97
|
+
* re-listing the growing done set every tick forever.
|
|
98
|
+
*/
|
|
99
|
+
export const DONE_SWEEP_MAX_ATTEMPTS = 3;
|
|
51
100
|
/**
|
|
52
101
|
* Resolve the arm role for a PRD from the PRD ROW -- the per-entity "Play"
|
|
53
102
|
* signal (prds.assigned_agent_role_id), or null if the PRD is paused.
|
|
@@ -65,6 +114,11 @@ export function resolveArmRoleIdFromPrd(prd) {
|
|
|
65
114
|
// module graph). Imported above for internal use; re-exported here for existing
|
|
66
115
|
// importers/tests that reference it from prd-controller.
|
|
67
116
|
export { computePrtFrontier };
|
|
117
|
+
// isPathwayViable moved to ./prd-viability.js (a pure, dependency-light read of
|
|
118
|
+
// the tree, like computePrtFrontier). Imported above for internal use;
|
|
119
|
+
// re-exported here for existing importers/tests that reference it from
|
|
120
|
+
// prd-controller.
|
|
121
|
+
export { isPathwayViable };
|
|
68
122
|
/**
|
|
69
123
|
* Compute the set of focus ids whose delivery work is COMPLETE -- at least one
|
|
70
124
|
* delivery exists AND every delivery is in execution_status 'done'. PURE.
|
|
@@ -96,60 +150,6 @@ export function computeCompletedFocusIds(deliveries) {
|
|
|
96
150
|
}
|
|
97
151
|
return complete;
|
|
98
152
|
}
|
|
99
|
-
/**
|
|
100
|
-
* Pure viability check for a pathway, computed from ACTUAL current tree state.
|
|
101
|
-
*
|
|
102
|
-
* A pathway is viable when every obstacle reachable on it is either already
|
|
103
|
-
* cleared OR still has at least one planned overcome that has NOT failed
|
|
104
|
-
* clearance this tick. If any gating obstacle is both uncleared and has no
|
|
105
|
-
* un-failed remedy, the pathway cannot reach the goal -> not viable.
|
|
106
|
-
*
|
|
107
|
-
* Pathway membership is approximated by pathwayId match on the node when the
|
|
108
|
-
* PrtNode carries one; absent per-node pathway tagging in the current schema,
|
|
109
|
-
* the whole tree is treated as the pathway's reachable set (single-pathway
|
|
110
|
-
* default). This stays a conservative, pure read of the tree -- it never
|
|
111
|
-
* mutates and never reverts.
|
|
112
|
-
*/
|
|
113
|
-
function isPathwayViable(_pathwayId, nodes, edges, clearedNodeIds, clearanceFailedObstacleIds) {
|
|
114
|
-
void _pathwayId;
|
|
115
|
-
const overcomesEdges = edges.filter((e) => e.edgeType === 'overcomes');
|
|
116
|
-
// Obstacle -> set of overcome ids that target it.
|
|
117
|
-
const remediesByObstacle = new Map();
|
|
118
|
-
for (const edge of overcomesEdges) {
|
|
119
|
-
const list = remediesByObstacle.get(edge.toNodeId) ?? [];
|
|
120
|
-
list.push(edge.fromNodeId);
|
|
121
|
-
remediesByObstacle.set(edge.toNodeId, list);
|
|
122
|
-
}
|
|
123
|
-
const nodeById = new Map(nodes.map((n) => [n.id, n]));
|
|
124
|
-
for (const node of nodes) {
|
|
125
|
-
if (node.nodeType !== 'obstacle') {
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
if (clearedNodeIds.has(node.id)) {
|
|
129
|
-
continue; // already cleared -> not blocking
|
|
130
|
-
}
|
|
131
|
-
const remedies = remediesByObstacle.get(node.id) ?? [];
|
|
132
|
-
if (remedies.length === 0) {
|
|
133
|
-
// Open obstacle with no planned overcome -> dead end on this pathway.
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
// Viable only if at least one remedy has not failed clearance this tick.
|
|
137
|
-
const hasUnfailedRemedy = remedies.some((overcomeId) => {
|
|
138
|
-
const overcome = nodeById.get(overcomeId);
|
|
139
|
-
if (!overcome) {
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
// The remedy "failed" when its overcome cleared yet the obstacle is in
|
|
143
|
-
// the failed set (clearance_fail) -- treat that obstacle as un-remediable
|
|
144
|
-
// by this overcome.
|
|
145
|
-
return !clearanceFailedObstacleIds.has(node.id);
|
|
146
|
-
});
|
|
147
|
-
if (!hasUnfailedRemedy) {
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
153
|
export async function runPrdControllerTick(prd, deps) {
|
|
154
154
|
const { nodes, edges } = await deps.loadPrtGraph(prd.id);
|
|
155
155
|
const obstacles = nodes.filter((node) => node.nodeType === 'obstacle');
|
|
@@ -199,17 +199,35 @@ export async function runPrdControllerTick(prd, deps) {
|
|
|
199
199
|
// tick retries (finalizeFrontierFocus is idempotent). The edge action's
|
|
200
200
|
// overcome-anchor provenance gate scopes this to PRD-materialized foci,
|
|
201
201
|
// so the human-owned focus.status invariant stays intact.
|
|
202
|
-
//
|
|
203
|
-
// Known limitation: a focus already cleared in the DB before this fix
|
|
204
|
-
// (node.status==='cleared', pre-seeded above) is skipped here and will
|
|
205
|
-
// not auto-heal -- that is a one-off operator data fix, out of scope.
|
|
206
202
|
await deps.finalizeFrontierFocus?.(node.focusId);
|
|
207
203
|
deps.clearPendingSpawnDirective?.(node.focusId);
|
|
204
|
+
// Record the self-heal so the limbo branch below never re-finalizes a
|
|
205
|
+
// focus this tick already finalized via the fresh-clear path.
|
|
206
|
+
deps.selfHealedFocusIds?.add(node.focusId);
|
|
208
207
|
focusesFinalized += 1;
|
|
209
208
|
await deps.markNodeCleared(node.id);
|
|
210
209
|
node.status = 'cleared';
|
|
211
210
|
}
|
|
212
211
|
}
|
|
212
|
+
else if (deps.selfHealedFocusIds && !deps.selfHealedFocusIds.has(node.focusId)) {
|
|
213
|
+
// Completion-limbo self-heal. The overcome is ALREADY cleared (cleared on
|
|
214
|
+
// an earlier tick, or under a daemon that lacked/skipped the finalize
|
|
215
|
+
// crossing) yet its focus is complete-by-deliveries -- so the fresh-clear
|
|
216
|
+
// branch above never ran and the focus would otherwise sit status=active
|
|
217
|
+
// forever, needing a one-off operator data fix. Converge it now: finalize
|
|
218
|
+
// ANY materialized (overcome-anchored) focus that is complete-by-deliveries
|
|
219
|
+
// but not yet terminal, independent of when its overcome cleared.
|
|
220
|
+
//
|
|
221
|
+
// Bounded to once per focus per process via selfHealedFocusIds (the same
|
|
222
|
+
// process-lifetime Set pattern as noRoleEscalatedPrds). After a restart the
|
|
223
|
+
// Set resets, but finalizeFrontierFocus is idempotent + overcome-anchor-
|
|
224
|
+
// scoped server-side, so a redundant call on an already-complete focus is a
|
|
225
|
+
// harmless no-op and the human-owned focus.status invariant stays intact.
|
|
226
|
+
await deps.finalizeFrontierFocus?.(node.focusId);
|
|
227
|
+
deps.clearPendingSpawnDirective?.(node.focusId);
|
|
228
|
+
deps.selfHealedFocusIds.add(node.focusId);
|
|
229
|
+
focusesFinalized += 1;
|
|
230
|
+
}
|
|
213
231
|
for (const edge of edges) {
|
|
214
232
|
if (edge.edgeType !== 'overcomes' || edge.fromNodeId !== node.id) {
|
|
215
233
|
continue;
|
|
@@ -338,6 +356,29 @@ export async function runPrdControllerTick(prd, deps) {
|
|
|
338
356
|
let diverged = false;
|
|
339
357
|
let pathSwitched = false;
|
|
340
358
|
let escalated = false;
|
|
359
|
+
// Dedup guard for every cadence-reachable PRD escalation. Before filing one,
|
|
360
|
+
// check the DB for an existing OPEN row of the same (prdId, kind) and skip the
|
|
361
|
+
// duplicate -- so a genuinely-warranted condition that persists across cadence
|
|
362
|
+
// ticks yields exactly ONE open row, not a flood (the 172-duplicate storm this
|
|
363
|
+
// focus exists to stop). Keyed by kind so BOTH the steward divergence path AND
|
|
364
|
+
// the reflex no-surviving-path fallback share the guard (the latter has the
|
|
365
|
+
// identical un-deduped storm structure). `escalated` still reflects the verdict
|
|
366
|
+
// (the milestone IS in an escalate state this tick); only the DB write is
|
|
367
|
+
// deduped. DB-backed so it survives a daemon restart, unlike the no-role Set.
|
|
368
|
+
// When no dedup dep is wired, behavior is unchanged (always files).
|
|
369
|
+
const fileDedupedPrdEscalation = async (kind, details) => {
|
|
370
|
+
if (deps.hasOpenPrdEscalation && (await deps.hasOpenPrdEscalation(prd.id, kind))) {
|
|
371
|
+
return; // an open escalation of this kind already exists for this PRD -> skip
|
|
372
|
+
}
|
|
373
|
+
await deps.fileEscalation({
|
|
374
|
+
organizationId: deps.organizationId,
|
|
375
|
+
productId: prd.productId,
|
|
376
|
+
reason: kind,
|
|
377
|
+
kind,
|
|
378
|
+
details: { prdId: prd.id, ...details },
|
|
379
|
+
});
|
|
380
|
+
};
|
|
381
|
+
const fileStewardEscalation = (signals, rationale) => fileDedupedPrdEscalation('prd_divergence_steward_escalation', { signals, rationale });
|
|
341
382
|
if (prd.committedPathId) {
|
|
342
383
|
const signals = detectDivergence({
|
|
343
384
|
nodes,
|
|
@@ -385,13 +426,7 @@ export async function runPrdControllerTick(prd, deps) {
|
|
|
385
426
|
}
|
|
386
427
|
else if (decision.action === 'escalate') {
|
|
387
428
|
escalated = true;
|
|
388
|
-
await
|
|
389
|
-
organizationId: deps.organizationId,
|
|
390
|
-
productId: prd.productId,
|
|
391
|
-
reason: 'prd_divergence_steward_escalation',
|
|
392
|
-
kind: 'prd_divergence_steward_escalation',
|
|
393
|
-
details: { prdId: prd.id, signals, rationale: decision.rationale },
|
|
394
|
-
});
|
|
429
|
+
await fileStewardEscalation(signals, decision.rationale);
|
|
395
430
|
}
|
|
396
431
|
// 'hold' (or a recommit to the already-committed path) -> no action.
|
|
397
432
|
}
|
|
@@ -407,15 +442,13 @@ export async function runPrdControllerTick(prd, deps) {
|
|
|
407
442
|
pathSwitched = true;
|
|
408
443
|
}
|
|
409
444
|
else if (!survivor) {
|
|
410
|
-
// No surviving path: the human owns intent -- escalate, never lower the
|
|
445
|
+
// No surviving path: the human owns intent -- escalate, never lower the
|
|
446
|
+
// goal. Routed through the deduped filer so a persistent genuine
|
|
447
|
+
// dead-end (e.g. steward LLM unavailable every tick) yields ONE open
|
|
448
|
+
// row, not the same per-tick flood the steward path was hardened
|
|
449
|
+
// against -- this path has the identical un-deduped storm structure.
|
|
411
450
|
escalated = true;
|
|
412
|
-
await
|
|
413
|
-
organizationId: deps.organizationId,
|
|
414
|
-
productId: prd.productId,
|
|
415
|
-
reason: 'prd_divergence_no_surviving_path',
|
|
416
|
-
kind: 'prd_divergence_no_surviving_path',
|
|
417
|
-
details: { prdId: prd.id, signals },
|
|
418
|
-
});
|
|
451
|
+
await fileDedupedPrdEscalation('prd_divergence_no_surviving_path', { signals });
|
|
419
452
|
}
|
|
420
453
|
}
|
|
421
454
|
}
|
|
@@ -466,17 +499,7 @@ export async function runPrdControllerTick(prd, deps) {
|
|
|
466
499
|
}
|
|
467
500
|
else if (cadenceDecision.action === 'escalate') {
|
|
468
501
|
escalated = true;
|
|
469
|
-
await
|
|
470
|
-
organizationId: deps.organizationId,
|
|
471
|
-
productId: prd.productId,
|
|
472
|
-
reason: 'prd_divergence_steward_escalation',
|
|
473
|
-
kind: 'prd_divergence_steward_escalation',
|
|
474
|
-
details: {
|
|
475
|
-
prdId: prd.id,
|
|
476
|
-
signals: [],
|
|
477
|
-
rationale: cadenceDecision.rationale,
|
|
478
|
-
},
|
|
479
|
-
});
|
|
502
|
+
await fileStewardEscalation([], cadenceDecision.rationale);
|
|
480
503
|
}
|
|
481
504
|
// 'hold' or a recommit to the already-committed path: no action.
|
|
482
505
|
}
|
|
@@ -507,6 +530,14 @@ function defaultDeps(config) {
|
|
|
507
530
|
markNodeCleared: (nodeId) => markNodeCleared(nodeId),
|
|
508
531
|
finalizeFrontierFocus: (focusId) => finalizeFrontierFocus(focusId),
|
|
509
532
|
clearPendingSpawnDirective: (focusId) => clearPendingSpawnDirective(focusId),
|
|
533
|
+
// Process-lifetime self-heal ledger so completion-limbo foci finalize once.
|
|
534
|
+
selfHealedFocusIds: selfHealedFocusIdsDefault,
|
|
535
|
+
// Process-lifetime guard so the done-PRD sweep runs once per product.
|
|
536
|
+
doneSweepDoneProducts: doneSweepDoneProductsDefault,
|
|
537
|
+
// Process-lifetime per-product retry counter bounding a persistent failure.
|
|
538
|
+
doneSweepAttempts: doneSweepAttemptsDefault,
|
|
539
|
+
loadActivePrds: (productId) => loadActivePrds(productId),
|
|
540
|
+
loadDonePrds: (productId) => loadDonePrds(productId),
|
|
510
541
|
materializeOvercome: (nodeId) => materializeOvercome(nodeId),
|
|
511
542
|
armFocus: (focusId, agentRoleId) => armFocus(focusId, agentRoleId),
|
|
512
543
|
markPrdDone: (prdId) => markPrdDone(prdId),
|
|
@@ -520,6 +551,10 @@ function defaultDeps(config) {
|
|
|
520
551
|
loadPathways: (prdId) => loadPathways(prdId),
|
|
521
552
|
commitPathway: (prdId, pathwayId) => commitPathway(prdId, pathwayId),
|
|
522
553
|
fileEscalation: (input) => fileEscalation(input),
|
|
554
|
+
// DB-backed PRD-escalation dedup keyed by kind: at most one open row per
|
|
555
|
+
// (PRD, kind), surviving daemon restarts. Covers both the steward divergence
|
|
556
|
+
// path and the reflex no-surviving-path fallback.
|
|
557
|
+
hasOpenPrdEscalation: (prdId, kind) => hasOpenPrdEscalation(prdId, kind),
|
|
523
558
|
// The steward cortex, wired to the live assembly + LLM client. Invoked for
|
|
524
559
|
// a Played PRD that diverged (divergence path) or on the cadence (monitoring
|
|
525
560
|
// path); returns null (reflex fallback) when the LLM is unavailable.
|
|
@@ -532,6 +567,104 @@ function defaultDeps(config) {
|
|
|
532
567
|
stewardCadenceMs: STEWARD_CADENCE_MS,
|
|
533
568
|
};
|
|
534
569
|
}
|
|
570
|
+
/**
|
|
571
|
+
* Done-PRD completion-limbo self-heal for a SINGLE done PRD.
|
|
572
|
+
*
|
|
573
|
+
* The per-tick self-heal in runPrdControllerTick only sees a PRD while it is
|
|
574
|
+
* ACTIVE (loadActivePrds filters status='active'), so it converges stranded
|
|
575
|
+
* foci on or before the done-transition. A PRD that ALREADY reached done under
|
|
576
|
+
* an earlier daemon -- before that self-heal existed -- is never re-ticked, so
|
|
577
|
+
* any focus it materialized that is complete-by-deliveries yet still
|
|
578
|
+
* status=active stays stranded forever, needing a one-off operator data fix.
|
|
579
|
+
*
|
|
580
|
+
* This converges those without an operator: finalize ANY materialized
|
|
581
|
+
* (overcome-anchored) focus of the done PRD that is complete-by-deliveries but
|
|
582
|
+
* not yet terminal. Bounded to once per focus per process via selfHealedFocusIds
|
|
583
|
+
* (shared with the active-tick self-heal so the two paths never double-finalize
|
|
584
|
+
* the same focus). A focus that is NOT complete-by-deliveries (zero deliveries,
|
|
585
|
+
* or only non-done terminal deliveries) is simply skipped -- it was never
|
|
586
|
+
* finalizable. finalizeFrontierFocus is idempotent + overcome-anchor-scoped
|
|
587
|
+
* server-side, so the human-owned focus.status invariant stays intact for
|
|
588
|
+
* non-PRD foci. Disabled (no-op) when selfHealedFocusIds is absent, matching the
|
|
589
|
+
* active-tick self-heal's back-compat gate.
|
|
590
|
+
*/
|
|
591
|
+
export async function selfHealDonePrdFoci(prd, deps) {
|
|
592
|
+
if (!deps.selfHealedFocusIds) {
|
|
593
|
+
return { focusesFinalized: 0 };
|
|
594
|
+
}
|
|
595
|
+
const { nodes } = await deps.loadPrtGraph(prd.id);
|
|
596
|
+
const overcomeFocusIds = Array.from(new Set(nodes
|
|
597
|
+
.filter((n) => n.nodeType === 'overcome' && n.focusId !== null)
|
|
598
|
+
.map((n) => n.focusId)));
|
|
599
|
+
if (overcomeFocusIds.length === 0) {
|
|
600
|
+
return { focusesFinalized: 0 };
|
|
601
|
+
}
|
|
602
|
+
const focusDeliveries = [];
|
|
603
|
+
for (const fid of overcomeFocusIds) {
|
|
604
|
+
const ds = await deps.loadFocusDeliveries(fid);
|
|
605
|
+
focusDeliveries.push(...ds);
|
|
606
|
+
}
|
|
607
|
+
const completedFocusIds = computeCompletedFocusIds(focusDeliveries);
|
|
608
|
+
let focusesFinalized = 0;
|
|
609
|
+
for (const focusId of overcomeFocusIds) {
|
|
610
|
+
if (!completedFocusIds.has(focusId)) {
|
|
611
|
+
continue;
|
|
612
|
+
}
|
|
613
|
+
if (deps.selfHealedFocusIds.has(focusId)) {
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
await deps.finalizeFrontierFocus?.(focusId);
|
|
617
|
+
deps.clearPendingSpawnDirective?.(focusId);
|
|
618
|
+
deps.selfHealedFocusIds.add(focusId);
|
|
619
|
+
focusesFinalized += 1;
|
|
620
|
+
}
|
|
621
|
+
return { focusesFinalized };
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* One-shot done-PRD limbo sweep for a single product: list the product's done
|
|
625
|
+
* PRDs and self-heal each one's stranded complete-by-deliveries foci.
|
|
626
|
+
*
|
|
627
|
+
* Returns `complete=true` only when the list succeeded AND every per-PRD
|
|
628
|
+
* self-heal succeeded, so the caller records the product as swept and never
|
|
629
|
+
* re-lists. A list failure or any per-PRD failure returns `complete=false` so
|
|
630
|
+
* the next tick retries (the selfHealedFocusIds ledger keeps the retry from
|
|
631
|
+
* re-finalizing foci already converged). A focus merely skipped for not being
|
|
632
|
+
* complete-by-deliveries is NOT a failure -- it does not block completion, so a
|
|
633
|
+
* done PRD whose focus can never complete does not pin the product to perpetual
|
|
634
|
+
* re-reads.
|
|
635
|
+
*
|
|
636
|
+
* No-op (complete=true) when the sweep is disabled (no selfHealedFocusIds dep).
|
|
637
|
+
*/
|
|
638
|
+
export async function runDonePrdSweepForProduct(productId, deps) {
|
|
639
|
+
// Truly a no-op when the sweep is disabled: skip the list call entirely so the
|
|
640
|
+
// caller marks the product swept without touching the API. (selfHealDonePrdFoci
|
|
641
|
+
// would no-op per-PRD anyway, but listing first would be wasted work.)
|
|
642
|
+
if (!deps.selfHealedFocusIds) {
|
|
643
|
+
return { focusesFinalized: 0, complete: true };
|
|
644
|
+
}
|
|
645
|
+
const list = deps.loadDonePrds ?? loadDonePrds;
|
|
646
|
+
let donePrds;
|
|
647
|
+
try {
|
|
648
|
+
donePrds = await list(productId);
|
|
649
|
+
}
|
|
650
|
+
catch (err) {
|
|
651
|
+
console.warn(`[prd-controller] failed to load done PRDs for product ${productId}:`, err.message);
|
|
652
|
+
return { focusesFinalized: 0, complete: false };
|
|
653
|
+
}
|
|
654
|
+
let focusesFinalized = 0;
|
|
655
|
+
let complete = true;
|
|
656
|
+
for (const prd of donePrds) {
|
|
657
|
+
try {
|
|
658
|
+
const result = await selfHealDonePrdFoci(prd, deps);
|
|
659
|
+
focusesFinalized += result.focusesFinalized;
|
|
660
|
+
}
|
|
661
|
+
catch (err) {
|
|
662
|
+
complete = false;
|
|
663
|
+
console.warn(`[prd-controller] done-PRD self-heal failed for PRD ${prd.id}:`, err.message);
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
return { focusesFinalized, complete };
|
|
667
|
+
}
|
|
535
668
|
export async function runPrdControllerTickAll(config, deps) {
|
|
536
669
|
const totals = {
|
|
537
670
|
obstaclesEvaluated: 0,
|
|
@@ -551,7 +684,7 @@ export async function runPrdControllerTickAll(config, deps) {
|
|
|
551
684
|
const merged = { ...defaultDeps(productConfig), ...deps };
|
|
552
685
|
let prds;
|
|
553
686
|
try {
|
|
554
|
-
prds = await loadActivePrds(product.id);
|
|
687
|
+
prds = await (merged.loadActivePrds ?? loadActivePrds)(product.id);
|
|
555
688
|
}
|
|
556
689
|
catch (err) {
|
|
557
690
|
console.warn(`[prd-controller] failed to load active PRDs for product ${product.id}:`, err.message);
|
|
@@ -586,6 +719,72 @@ export async function runPrdControllerTickAll(config, deps) {
|
|
|
586
719
|
console.warn(`[prd-controller] tick failed for PRD ${prd.id}:`, err.message);
|
|
587
720
|
}
|
|
588
721
|
}
|
|
722
|
+
// Done-PRD completion-limbo sweep -- ONE-SHOT per product per process. The
|
|
723
|
+
// per-tick self-heal above only runs over active PRDs; a PRD that reached
|
|
724
|
+
// done under an earlier daemon can leave foci stranded status=active with no
|
|
725
|
+
// path to convergence. Only PRDs that were ALREADY done at process start can
|
|
726
|
+
// be in that state -- a PRD that transitions to done during this process is
|
|
727
|
+
// converged by the active-tick self-heal -- so a single pass per product
|
|
728
|
+
// suffices. The doneSweepDoneProducts guard keeps loadDonePrds from
|
|
729
|
+
// re-listing the (monotonically growing) done set every tick; it is set
|
|
730
|
+
// after a fully successful pass (transient failures retry next tick) OR
|
|
731
|
+
// after DONE_SWEEP_MAX_ATTEMPTS consecutive incomplete passes (a persistent
|
|
732
|
+
// failure is abandoned + escalated rather than re-listed forever -- see
|
|
733
|
+
// below). Skipped entirely when the guard dep is absent (back-compat).
|
|
734
|
+
//
|
|
735
|
+
// Residual (narrow, accepted): a pre-existing done PRD whose focus is still
|
|
736
|
+
// finishing at the startup pass and completes later is not re-finalized until
|
|
737
|
+
// the next daemon restart -- finalize-to-complete only crosses via the PRD
|
|
738
|
+
// controller and a done PRD is never re-ticked. Bounded and self-correcting
|
|
739
|
+
// on restart; strictly better than an unbounded per-tick re-read.
|
|
740
|
+
if (merged.doneSweepDoneProducts && !merged.doneSweepDoneProducts.has(product.id)) {
|
|
741
|
+
const sweep = await runDonePrdSweepForProduct(product.id, merged);
|
|
742
|
+
totals.focusesFinalized += sweep.focusesFinalized;
|
|
743
|
+
if (sweep.complete) {
|
|
744
|
+
merged.doneSweepDoneProducts.add(product.id);
|
|
745
|
+
merged.doneSweepAttempts?.delete(product.id);
|
|
746
|
+
}
|
|
747
|
+
else if (merged.doneSweepAttempts) {
|
|
748
|
+
// A PERSISTENT (not transient) failure must not pin the product to a
|
|
749
|
+
// per-tick loadDonePrds re-list forever. Count consecutive incomplete
|
|
750
|
+
// passes; after DONE_SWEEP_MAX_ATTEMPTS, abandon the sweep (mark the
|
|
751
|
+
// product swept) and escalate ONCE -- loud-not-silent, so a stuck done
|
|
752
|
+
// PRD is surfaced for a human rather than retried invisibly. Healable
|
|
753
|
+
// PRDs listed alongside the failing one were already converged on the
|
|
754
|
+
// first pass (selfHealedFocusIds is idempotent), so abandoning loses no
|
|
755
|
+
// work; it only forgoes futile retries of the failing PRD.
|
|
756
|
+
const attempts = (merged.doneSweepAttempts.get(product.id) ?? 0) + 1;
|
|
757
|
+
if (attempts >= DONE_SWEEP_MAX_ATTEMPTS) {
|
|
758
|
+
merged.doneSweepDoneProducts.add(product.id);
|
|
759
|
+
merged.doneSweepAttempts.delete(product.id);
|
|
760
|
+
try {
|
|
761
|
+
await merged.fileEscalation({
|
|
762
|
+
organizationId: merged.organizationId,
|
|
763
|
+
productId: product.id,
|
|
764
|
+
reason: PRD_DONE_SWEEP_ABANDONED,
|
|
765
|
+
kind: PRD_DONE_SWEEP_ABANDONED,
|
|
766
|
+
details: {
|
|
767
|
+
attempts,
|
|
768
|
+
hint: `The done-PRD completion-limbo sweep failed ${attempts} ` +
|
|
769
|
+
'consecutive passes on this product and has been abandoned to ' +
|
|
770
|
+
'avoid a per-tick re-read. A done PRD likely has an unreadable ' +
|
|
771
|
+
'PRT graph or a focus whose finalize persistently rejects; see ' +
|
|
772
|
+
'the daemon log for the per-PRD failure, reconcile manually, ' +
|
|
773
|
+
'then restart the daemon to re-run the sweep.',
|
|
774
|
+
},
|
|
775
|
+
});
|
|
776
|
+
}
|
|
777
|
+
catch (err) {
|
|
778
|
+
// Escalation is best-effort; the product is already marked swept so
|
|
779
|
+
// we never spin on a failing escalation. Surface loudly in the log.
|
|
780
|
+
console.warn(`[prd-controller] failed to file ${PRD_DONE_SWEEP_ABANDONED} escalation for product ${product.id}:`, err.message);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
else {
|
|
784
|
+
merged.doneSweepAttempts.set(product.id, attempts);
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
}
|
|
589
788
|
}
|
|
590
789
|
return totals;
|
|
591
790
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prd-controller.js","sourceRoot":"","sources":["../src/prd-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,iBAAiB,GAIlB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,aAAa,GAKd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAA4B,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE9C;;;GAGG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjD,kFAAkF;AAClF,MAAM,CAAC,MAAM,4BAA4B,GAAG,kCAAkC,CAAC;AAE/E;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAQ;IAC9C,OAAO,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,0EAA0E;AAC1E,gFAAgF;AAChF,gFAAgF;AAChF,yDAAyD;AACzD,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAA+D;IAE/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2C,CAAC;IACnE,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QACf,IAAI,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;YAC/C,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;QACjD,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAgGD;;;;;;;;;;;;;GAaG;AACH,SAAS,eAAe,CACtB,UAAkB,EAClB,KAAgB,EAChB,KAAgB,EAChB,cAA2B,EAC3B,0BAAuC;IAEvC,KAAK,UAAU,CAAC;IAChB,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC;IACvE,kDAAkD;IAClD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAkB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QACD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,SAAS,CAAC,kCAAkC;QAC9C,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,sEAAsE;YACtE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,yEAAyE;QACzE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC;YACf,CAAC;YACD,uEAAuE;YACvE,0EAA0E;YAC1E,oBAAoB;YACpB,OAAO,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAQ,EACR,IAAuB;IAEvB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,mDAAmD;IACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,+EAA+E;IAC/E,qEAAqE;IACrE,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAU,CAAC;IAErD,6EAA6E;IAC7E,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,oEAAoE;IACpE,6EAA6E;IAC7E,4EAA4E;IAC5E,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CACjC,IAAI,GAAG,CACL,KAAK;SACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;SAC9D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAiB,CAAC,CACnC,CACF,CAAC;IACF,MAAM,eAAe,GAAwD,EAAE,CAAC;IAChF,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC/C,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACjC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,yEAAyE;gBACzE,yEAAyE;gBACzE,yEAAyE;gBACzE,wEAAwE;gBACxE,wEAAwE;gBACxE,0DAA0D;gBAC1D,EAAE;gBACF,sEAAsE;gBACtE,uEAAuE;gBACvE,sEAAsE;gBACtE,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjD,IAAI,CAAC,0BAA0B,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChD,gBAAgB,IAAI,CAAC,CAAC;gBACtB,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBACjE,SAAS;YACX,CAAC;YACD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,SAAS;YACX,CAAC;YACD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/D,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACtD,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1C,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC;gBAChC,gBAAgB,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,+EAA+E;QAC/E,0EAA0E;QAC1E,qBAAqB;QACrB,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACpC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QACD,kBAAkB,IAAI,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YACxE,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACxC,gBAAgB,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7B,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IAExF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACpC,iEAAiE;QACjE,yEAAyE;QACzE,6EAA6E;QAC7E,yEAAyE;QACzE,4EAA4E;QAC5E,oEAAoE;QACpE,2EAA2E;QAC3E,4EAA4E;QAC5E,+DAA+D;QAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,aAAa,IAAI,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,YAAY,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,CAAC;YACN,aAAa,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,8EAA8E;IAC9E,+EAA+E;IAC/E,2EAA2E;IAC3E,+EAA+E;IAC/E,0DAA0D;IAC1D,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAClC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,IAAI,mBAAmB,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,cAAc,CAAC;gBACxB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,MAAM,EAAE,4BAA4B;gBACpC,IAAI,EAAE,4BAA4B;gBAClC,OAAO,EAAE;oBACP,KAAK,EAAE,GAAG,CAAC,EAAE;oBACb,aAAa;oBACb,IAAI,EACF,6EAA6E;wBAC7E,+EAA+E;wBAC/E,oDAAoD;iBACvD;aACF,CAAC,CAAC;YACH,wEAAwE;YACxE,uDAAuD;YACvD,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtB,qBAAqB,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,MAAM,mBAAmB,GACvB,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,4EAA4E;IAC5E,EAAE;IACF,6EAA6E;IAC7E,8EAA8E;IAC9E,6DAA6D;IAC7D,EAAE;IACF,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,4EAA4E;IAC5E,sEAAsE;IACtE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,gBAAgB,CAAC;YAC/B,KAAK;YACL,KAAK;YACL,cAAc;YACd,0BAA0B;YAC1B,kBAAkB,EAAE,GAAG,CAAC,eAAe;SACxC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,aAAa,GAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzD,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC,CAAC;YACJ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7B,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,0BAA0B,CAAC,CAAC;YAEjF,0EAA0E;YAC1E,uEAAuE;YACvE,gEAAgE;YAChE,iEAAiE;YACjE,uEAAuE;YACvE,0EAA0E;YAC1E,wEAAwE;YACxE,kEAAkE;YAClE,IAAI,QAAQ,GAA2B,IAAI,CAAC;YAC5C,IAAI,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACvD,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC;oBACvC,GAAG;oBACH,KAAK;oBACL,KAAK;oBACL,OAAO;oBACP,aAAa;oBACb,eAAe,EAAE,MAAM;iBACxB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,gEAAgE;gBAChE,qEAAqE;gBACrE,mCAAmC;gBACnC,IACE,QAAQ,CAAC,MAAM,KAAK,UAAU;oBAC9B,QAAQ,CAAC,SAAS;oBAClB,QAAQ,CAAC,SAAS,KAAK,GAAG,CAAC,eAAe,EAC1C,CAAC;oBACD,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACrD,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;qBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC1C,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM,IAAI,CAAC,cAAc,CAAC;wBACxB,cAAc,EAAE,IAAI,CAAC,cAAc;wBACnC,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,MAAM,EAAE,mCAAmC;wBAC3C,IAAI,EAAE,mCAAmC;wBACzC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;qBACnE,CAAC,CAAC;gBACL,CAAC;gBACD,qEAAqE;YACvE,CAAC;iBAAM,CAAC;gBACN,uEAAuE;gBACvE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,aAAa,EAAE;oBAChE,kBAAkB,EAAE,GAAG,CAAC,eAAe;oBACvC,eAAe,EAAE,MAAM;iBACxB,CAAC,CAAC;gBACH,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;oBACzB,0DAA0D;oBAC1D,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;oBAC3C,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;qBAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACrB,8EAA8E;oBAC9E,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM,IAAI,CAAC,cAAc,CAAC;wBACxB,cAAc,EAAE,IAAI,CAAC,cAAc;wBACnC,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,MAAM,EAAE,kCAAkC;wBAC1C,IAAI,EAAE,kCAAkC;wBACxC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE;qBACpC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,EAAE;IACF,yEAAyE;IACzE,+EAA+E;IAC/E,4EAA4E;IAC5E,0EAA0E;IAC1E,sEAAsE;IACtE,8EAA8E;IAC9E,qEAAqE;IACrE,8EAA8E;IAC9E,gFAAgF;IAChF,IACE,CAAC,QAAQ;QACT,GAAG,CAAC,mBAAmB;QACvB,GAAG,CAAC,eAAe;QACnB,IAAI,CAAC,kBAAkB,EACvB,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,gBAAgB,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,CAAC;QAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,aAAa,GAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzD,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC,CAAC;YACJ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7B,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,0BAA0B,CAAC,CAAC;YACjF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC;gBACpD,GAAG;gBACH,KAAK;gBACL,KAAK;gBACL,OAAO,EAAE,EAAE;gBACX,aAAa;gBACb,eAAe,EAAE,MAAM;aACxB,CAAC,CAAC;YACH,0EAA0E;YAC1E,4EAA4E;YAC5E,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,eAAe,EAAE,CAAC;gBACpB,IACE,eAAe,CAAC,MAAM,KAAK,UAAU;oBACrC,eAAe,CAAC,SAAS;oBACzB,eAAe,CAAC,SAAS,KAAK,GAAG,CAAC,eAAe,EACjD,CAAC;oBACD,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;oBAC5D,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;qBAAM,IAAI,eAAe,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjD,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM,IAAI,CAAC,cAAc,CAAC;wBACxB,cAAc,EAAE,IAAI,CAAC,cAAc;wBACnC,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,MAAM,EAAE,mCAAmC;wBAC3C,IAAI,EAAE,mCAAmC;wBACzC,OAAO,EAAE;4BACP,KAAK,EAAE,GAAG,CAAC,EAAE;4BACb,OAAO,EAAE,EAAE;4BACX,SAAS,EAAE,eAAe,CAAC,SAAS;yBACrC;qBACF,CAAC,CAAC;gBACL,CAAC;gBACD,iEAAiE;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,kBAAkB;QAClB,gBAAgB;QAChB,YAAY;QACZ,KAAK;QACL,aAAa;QACb,gBAAgB;QAChB,OAAO;QACP,qBAAqB;QACrB,QAAQ;QACR,YAAY;QACZ,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAoB;IACvC,OAAO;QACL,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;QAC5C,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE,CAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;QACtC,yEAAyE;QACzE,yEAAyE;QACzE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC,CAAC,CACvE;QACH,iBAAiB,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC;QACxE,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;QACpD,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC;QAClE,0BAA0B,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,0BAA0B,CAAC,OAAO,CAAC;QAC5E,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC5D,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;QAClE,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;QAC1C,4EAA4E;QAC5E,gEAAgE;QAChE,wEAAwE;QACxE,yEAAyE;QACzE,2EAA2E;QAC3E,2EAA2E;QAC3E,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC;QAC7D,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;QAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC;QACpE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;QAChD,2EAA2E;QAC3E,6EAA6E;QAC7E,qEAAqE;QACrE,sDAAsD;QACtD,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpF,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,gBAAgB;QAChC,gBAAgB,EAAE,kBAAkB;KACrC,CAAC;AACJ,CAAC;AAqBD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAoB,EACpB,IAAiC;IAEjC,MAAM,MAAM,GAA+B;QACzC,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC;QACR,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC;QACX,iBAAiB,EAAE,CAAC;QACpB,YAAY,EAAE,CAAC;QACf,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;KACjB,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GAAsB,EAAE,GAAG,WAAW,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;QAC7E,IAAI,IAAW,CAAC;QAChB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,2DAA2D,OAAO,CAAC,EAAE,GAAG,EACvE,GAAa,CAAC,OAAO,CACvB,CAAC;YACF,SAAS;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACvD,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,kBAAkB,CAAC;gBACvD,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC;gBACnD,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;gBAC3C,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;gBAC7B,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC;gBAC7C,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC;gBACnD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;gBACvB,CAAC;gBACD,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBACjC,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC;gBAChC,CAAC;gBACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACxB,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBAC/B,CAAC;gBACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,wCAAwC,GAAG,CAAC,EAAE,GAAG,EAChD,GAAa,CAAC,OAAO,CACvB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"prd-controller.js","sourceRoot":"","sources":["../src/prd-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure PRT (Prerequisite-Tree) pathway viability oracle.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from prd-controller (mirroring prd-frontier.js) so it stays a pure,
|
|
5
|
+
* dependency-light read of the tree: it imports ONLY the PRT types, has no I/O
|
|
6
|
+
* and no side effects, and is consumed by both the controller's realign step and
|
|
7
|
+
* prd-divergence's selectSurvivingPath. Keeping it here also keeps the controller
|
|
8
|
+
* under the daemon file-size budget.
|
|
9
|
+
*/
|
|
10
|
+
import type { PrtNode, PrtEdge } from './queries/prd.js';
|
|
11
|
+
/**
|
|
12
|
+
* Pure, DEAD-END-ONLY viability check for a pathway, computed from ACTUAL
|
|
13
|
+
* current tree state.
|
|
14
|
+
*
|
|
15
|
+
* A pathway is NOT viable ONLY when it has a STRUCTURAL DEAD-END -- an open
|
|
16
|
+
* obstacle that can never reach the goal on this pathway:
|
|
17
|
+
* (a) an open obstacle with NO 'overcomes'-edge remedy at all, or
|
|
18
|
+
* (b) an open obstacle ALL of whose remedies are dead, where a remedy is dead
|
|
19
|
+
* only as a TRUE clearance_fail: its overcome SHIPPED (is in
|
|
20
|
+
* clearedNodeIds) yet the obstacle still fails its clearance predicate
|
|
21
|
+
* this tick (in clearanceFailedObstacleIds).
|
|
22
|
+
*
|
|
23
|
+
* Crucially, a frontier obstacle whose overcome focus is STILL BEING BUILT (the
|
|
24
|
+
* overcome is not yet in clearedNodeIds) is 'in progress', NOT 'unreachable':
|
|
25
|
+
* its deterministic clearance check normally fails while that work proceeds, and
|
|
26
|
+
* an in-progress remedy keeps the pathway viable. The prior implementation
|
|
27
|
+
* treated ANY currently-failing obstacle as un-remediable, reporting a healthy,
|
|
28
|
+
* nearly-complete PRD's committed pathway as NOT viable (the false-divergence
|
|
29
|
+
* bug: e.g. Lacuna with 7/8 obstacles cleared and only its open frontier
|
|
30
|
+
* obstacle's overcome still building) and driving a steward escalation storm.
|
|
31
|
+
*
|
|
32
|
+
* PATHWAY SCOPING (honors `pathwayId`). PRT edges carry an optional
|
|
33
|
+
* `pathwayId` (prd_prt_edges.pathway_id; NULL = SHARED across all pathways, a
|
|
34
|
+
* set value = specific to that one pathway). An edge tagged to a DIFFERENT
|
|
35
|
+
* pathway is out of scope here, so:
|
|
36
|
+
* - an obstacle's remedies are only the overcomes edges that are shared or
|
|
37
|
+
* tagged to THIS pathway, and
|
|
38
|
+
* - an obstacle ALL of whose incident edges belong to other pathways is not
|
|
39
|
+
* on this pathway and never gates it.
|
|
40
|
+
* This stops a structural dead-end on an abandoned/option pathway from poisoning
|
|
41
|
+
* the committed pathway's verdict. When NO edge in the tree is pathway-tagged
|
|
42
|
+
* (every pathwayId null/undefined -- the single-committed-pathway case that
|
|
43
|
+
* drove the storm this fix targets, e.g. Lacuna), every edge is shared and the
|
|
44
|
+
* result is identical to a whole-tree read: zero behavior change for that case.
|
|
45
|
+
*
|
|
46
|
+
* This stays a conservative, pure read of the tree -- it never mutates and never
|
|
47
|
+
* reverts.
|
|
48
|
+
*/
|
|
49
|
+
export declare function isPathwayViable(pathwayId: string, nodes: PrtNode[], edges: PrtEdge[], clearedNodeIds: Set<string>, clearanceFailedObstacleIds: Set<string>): boolean;
|
|
50
|
+
//# sourceMappingURL=prd-viability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd-viability.d.ts","sourceRoot":"","sources":["../src/prd-viability.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EAAE,EAChB,KAAK,EAAE,OAAO,EAAE,EAChB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,0BAA0B,EAAE,GAAG,CAAC,MAAM,CAAC,GACtC,OAAO,CA8DT"}
|