@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
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared test fixtures: typed builders for the daemon's core domain objects.
|
|
3
|
+
*
|
|
4
|
+
* Before this module, makeDelivery / makeIssue / makeConfig were copy-pasted
|
|
5
|
+
* into ~30 test files each, so a single field change to FocusDeliveryInfo /
|
|
6
|
+
* FocusIssueInfo / DaemonConfig meant editing dozens of files. These builders
|
|
7
|
+
* are the single source of truth; a type change is now one edit here.
|
|
8
|
+
*
|
|
9
|
+
* Each builder is a SUPERSET: it takes a `Partial<T>` of overrides spread last,
|
|
10
|
+
* so every existing call site keeps its specificity. The defaults below are the
|
|
11
|
+
* MAJORITY defaults observed across the suite; a file whose local builder used a
|
|
12
|
+
* different default keeps that default by passing it as an override (often via a
|
|
13
|
+
* thin file-local wrapper) so no test changes meaning.
|
|
14
|
+
*
|
|
15
|
+
* NOT included by design: `makeDeps` and `makeContext`. Those names collide
|
|
16
|
+
* across UNRELATED types -- makeDeps builds AdvanceDeliveryDeps /
|
|
17
|
+
* WorktreeStateDeps / SessionHealthDeps / various per-module `opts`; makeContext
|
|
18
|
+
* builds FocusTeamPromptContext / AssemblyContext / EvaluationContext. They are
|
|
19
|
+
* not one builder and cannot be merged into one typed function without a union
|
|
20
|
+
* or `any`, so they stay per-file. (See the delivery loop doc for the survey.)
|
|
21
|
+
*/
|
|
22
|
+
import type { DaemonConfig, FocusDeliveryInfo, FocusIssueInfo, FocusExecutionConfig, FocusTeamState } from '../../types/index.js';
|
|
23
|
+
import type { VerificationDeps } from '../../verify/verification-deps.js';
|
|
24
|
+
import type { AutoInjectDeps } from '../../security/security-auto-inject.js';
|
|
25
|
+
import type { CompletionEventDeps } from '../../completion/event.js';
|
|
26
|
+
import type { PrdControllerDeps } from '../../prd/controller.js';
|
|
27
|
+
/**
|
|
28
|
+
* Build a FocusDeliveryInfo. Default executionStatus is 'queued' (the majority
|
|
29
|
+
* default across the suite); pass `{ executionStatus: ... }` for other states.
|
|
30
|
+
*/
|
|
31
|
+
export declare function makeDelivery(overrides?: Partial<FocusDeliveryInfo>): FocusDeliveryInfo;
|
|
32
|
+
/**
|
|
33
|
+
* Build a FocusIssueInfo. Defaults to a To Do / Task issue on delivery-1.
|
|
34
|
+
*/
|
|
35
|
+
export declare function makeIssue(overrides?: Partial<FocusIssueInfo>): FocusIssueInfo;
|
|
36
|
+
/**
|
|
37
|
+
* Build a DaemonConfig. Single-product, telemetry disabled, integration branch
|
|
38
|
+
* 'integration'. Pass overrides for product/branch/limits specifics.
|
|
39
|
+
*/
|
|
40
|
+
export declare function makeConfig(overrides?: Partial<DaemonConfig>): DaemonConfig;
|
|
41
|
+
/**
|
|
42
|
+
* Build a FocusExecutionConfig. Defaults match DEFAULT_EXECUTION_CONFIG
|
|
43
|
+
* (maxWorkers 3, idle 30s, active 60s).
|
|
44
|
+
*/
|
|
45
|
+
export declare function makeFocusExecutionConfig(overrides?: Partial<FocusExecutionConfig>): FocusExecutionConfig;
|
|
46
|
+
/**
|
|
47
|
+
* Build a FocusTeamState -- the wide in-memory team record. Centralizes the
|
|
48
|
+
* `makeTeam` / `makeTeamState` helpers that were copy-pasted into the
|
|
49
|
+
* focus-engine / watchdog / stall test files. Defaults to an executing coding
|
|
50
|
+
* team with no live process (leadPid/leadStdin null); pass overrides for the
|
|
51
|
+
* dimension under test. The many OPTIONAL clocks (lastActivityAt, shuttingDownAt,
|
|
52
|
+
* lastHandoffAt, toolActivityCount, ...) are omitted by default -- set them via
|
|
53
|
+
* the focus-team-state helpers or an override.
|
|
54
|
+
*/
|
|
55
|
+
export declare function makeFocusTeamState(overrides?: Partial<FocusTeamState>): FocusTeamState;
|
|
56
|
+
/** Seed a VerificationDeps (verify/verification-engine runVerificationTick). */
|
|
57
|
+
export declare function makeVerificationDeps(overrides?: Partial<VerificationDeps>): Partial<VerificationDeps>;
|
|
58
|
+
/** Seed a CompletionEventDeps (completion/event handleCompletionEvent). */
|
|
59
|
+
export declare function makeCompletionEventDeps(overrides?: Partial<CompletionEventDeps>): Partial<CompletionEventDeps>;
|
|
60
|
+
/** Seed an AutoInjectDeps (security/security-auto-inject). */
|
|
61
|
+
export declare function makeAutoInjectDeps(overrides?: Partial<AutoInjectDeps>): Partial<AutoInjectDeps>;
|
|
62
|
+
/** Seed a PrdControllerDeps (prd/controller). */
|
|
63
|
+
export declare function makePrdControllerDeps(overrides?: Partial<PrdControllerDeps>): Partial<PrdControllerDeps>;
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,iBAAiB,CAmB1F;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,cAAc,CAkBjF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,YAAY,CA0B9E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAC5C,oBAAoB,CAOtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,cAAc,CAoC1F;AAcD,gFAAgF;AAChF,wBAAgB,oBAAoB,CAClC,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACxC,OAAO,CAAC,gBAAgB,CAAC,CAe3B;AAED,2EAA2E;AAC3E,wBAAgB,uBAAuB,CACrC,SAAS,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC3C,OAAO,CAAC,mBAAmB,CAAC,CAS9B;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAChC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,GACtC,OAAO,CAAC,cAAc,CAAC,CAMzB;AAED,iDAAiD;AACjD,wBAAgB,qBAAqB,CACnC,SAAS,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACzC,OAAO,CAAC,iBAAiB,CAAC,CAc5B"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared test fixtures: typed builders for the daemon's core domain objects.
|
|
3
|
+
*
|
|
4
|
+
* Before this module, makeDelivery / makeIssue / makeConfig were copy-pasted
|
|
5
|
+
* into ~30 test files each, so a single field change to FocusDeliveryInfo /
|
|
6
|
+
* FocusIssueInfo / DaemonConfig meant editing dozens of files. These builders
|
|
7
|
+
* are the single source of truth; a type change is now one edit here.
|
|
8
|
+
*
|
|
9
|
+
* Each builder is a SUPERSET: it takes a `Partial<T>` of overrides spread last,
|
|
10
|
+
* so every existing call site keeps its specificity. The defaults below are the
|
|
11
|
+
* MAJORITY defaults observed across the suite; a file whose local builder used a
|
|
12
|
+
* different default keeps that default by passing it as an override (often via a
|
|
13
|
+
* thin file-local wrapper) so no test changes meaning.
|
|
14
|
+
*
|
|
15
|
+
* NOT included by design: `makeDeps` and `makeContext`. Those names collide
|
|
16
|
+
* across UNRELATED types -- makeDeps builds AdvanceDeliveryDeps /
|
|
17
|
+
* WorktreeStateDeps / SessionHealthDeps / various per-module `opts`; makeContext
|
|
18
|
+
* builds FocusTeamPromptContext / AssemblyContext / EvaluationContext. They are
|
|
19
|
+
* not one builder and cannot be merged into one typed function without a union
|
|
20
|
+
* or `any`, so they stay per-file. (See the delivery loop doc for the survey.)
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Build a FocusDeliveryInfo. Default executionStatus is 'queued' (the majority
|
|
24
|
+
* default across the suite); pass `{ executionStatus: ... }` for other states.
|
|
25
|
+
*/
|
|
26
|
+
export function makeDelivery(overrides = {}) {
|
|
27
|
+
return {
|
|
28
|
+
id: 'd1',
|
|
29
|
+
name: 'Test Delivery',
|
|
30
|
+
description: null,
|
|
31
|
+
priorityRank: 0,
|
|
32
|
+
executionStatus: 'queued',
|
|
33
|
+
acceptanceCriteria: null,
|
|
34
|
+
techContext: null,
|
|
35
|
+
currentWorkflowStageId: null,
|
|
36
|
+
mergeCommitSha: null,
|
|
37
|
+
gitState: null,
|
|
38
|
+
injectionId: null,
|
|
39
|
+
stageDescription: null,
|
|
40
|
+
updatedAt: null,
|
|
41
|
+
gateState: null,
|
|
42
|
+
iterationCount: 0,
|
|
43
|
+
...overrides,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build a FocusIssueInfo. Defaults to a To Do / Task issue on delivery-1.
|
|
48
|
+
*/
|
|
49
|
+
export function makeIssue(overrides = {}) {
|
|
50
|
+
return {
|
|
51
|
+
id: 'issue-1',
|
|
52
|
+
key: 'TEL-1',
|
|
53
|
+
title: 'Test Issue',
|
|
54
|
+
description: null,
|
|
55
|
+
status: 'To Do',
|
|
56
|
+
issueType: 'Task',
|
|
57
|
+
priority: 'P1',
|
|
58
|
+
deliveryId: 'delivery-1',
|
|
59
|
+
parentIssueId: null,
|
|
60
|
+
context: null,
|
|
61
|
+
relevantFiles: null,
|
|
62
|
+
dependsOn: null,
|
|
63
|
+
createdByRoleId: null,
|
|
64
|
+
createdAt: null,
|
|
65
|
+
...overrides,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Build a DaemonConfig. Single-product, telemetry disabled, integration branch
|
|
70
|
+
* 'integration'. Pass overrides for product/branch/limits specifics.
|
|
71
|
+
*/
|
|
72
|
+
export function makeConfig(overrides = {}) {
|
|
73
|
+
return {
|
|
74
|
+
teloraUrl: 'http://localhost',
|
|
75
|
+
trackerId: 'test-tracker',
|
|
76
|
+
organizationId: 'org-1',
|
|
77
|
+
productId: 'product-1',
|
|
78
|
+
repoPath: '/tmp/test-repo',
|
|
79
|
+
worktreeDir: '/tmp/test-repo/.telora/worktrees',
|
|
80
|
+
integrationBranch: 'integration',
|
|
81
|
+
claudeCodePath: 'claude',
|
|
82
|
+
logDir: '/tmp/test-repo/.telora/logs',
|
|
83
|
+
maxTotalSessions: 5,
|
|
84
|
+
sessionTimeoutMs: 3600000,
|
|
85
|
+
tokenLimit: 200000,
|
|
86
|
+
costLimit: 10.0,
|
|
87
|
+
mergeLockTimeoutMs: 300000,
|
|
88
|
+
mergeLockContentionWarningMs: 30000,
|
|
89
|
+
policyFailureMode: 'fail-open',
|
|
90
|
+
logMaxAgeDays: 7,
|
|
91
|
+
logMaxTotalBytes: 1073741824,
|
|
92
|
+
logMaxFiles: 500,
|
|
93
|
+
telemetry: { enabled: false, port: 4318, flushIntervalMs: 5000, retentionDays: 30 },
|
|
94
|
+
lacuna: { enabled: false, host: '127.0.0.1', port: 8787, compressEnabled: true, readyTimeoutMs: 30000 },
|
|
95
|
+
products: [{ id: 'product-1', repoPath: '/tmp/test-repo' }],
|
|
96
|
+
...overrides,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Build a FocusExecutionConfig. Defaults match DEFAULT_EXECUTION_CONFIG
|
|
101
|
+
* (maxWorkers 3, idle 30s, active 60s).
|
|
102
|
+
*/
|
|
103
|
+
export function makeFocusExecutionConfig(overrides = {}) {
|
|
104
|
+
return {
|
|
105
|
+
maxWorkers: 3,
|
|
106
|
+
idlePollIntervalMs: 30000,
|
|
107
|
+
activePollIntervalMs: 60000,
|
|
108
|
+
...overrides,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Build a FocusTeamState -- the wide in-memory team record. Centralizes the
|
|
113
|
+
* `makeTeam` / `makeTeamState` helpers that were copy-pasted into the
|
|
114
|
+
* focus-engine / watchdog / stall test files. Defaults to an executing coding
|
|
115
|
+
* team with no live process (leadPid/leadStdin null); pass overrides for the
|
|
116
|
+
* dimension under test. The many OPTIONAL clocks (lastActivityAt, shuttingDownAt,
|
|
117
|
+
* lastHandoffAt, toolActivityCount, ...) are omitted by default -- set them via
|
|
118
|
+
* the focus-team-state helpers or an override.
|
|
119
|
+
*/
|
|
120
|
+
export function makeFocusTeamState(overrides = {}) {
|
|
121
|
+
return {
|
|
122
|
+
focusId: 'focus-1',
|
|
123
|
+
focusName: 'Test Focus',
|
|
124
|
+
roleId: 'role-1',
|
|
125
|
+
roleName: 'Developer',
|
|
126
|
+
organizationId: 'org-1',
|
|
127
|
+
productId: 'product-1',
|
|
128
|
+
executionConfig: makeFocusExecutionConfig(),
|
|
129
|
+
pipelineConfig: null,
|
|
130
|
+
startedAt: new Date(0),
|
|
131
|
+
phase: 'executing',
|
|
132
|
+
knownDeliveryIds: new Set(),
|
|
133
|
+
mergedDeliveryIds: new Set(),
|
|
134
|
+
planningPhase: false,
|
|
135
|
+
leadSessionId: null,
|
|
136
|
+
leadPid: null,
|
|
137
|
+
leadStdin: null,
|
|
138
|
+
branchName: 'agent/dev/test',
|
|
139
|
+
worktreePath: null,
|
|
140
|
+
integrationBaseSha: null,
|
|
141
|
+
reviewSpawnTip: null,
|
|
142
|
+
deliveryStageIds: new Map(),
|
|
143
|
+
resolvingMergeConflict: false,
|
|
144
|
+
shutdownReason: null,
|
|
145
|
+
readOnly: false,
|
|
146
|
+
sessionType: 'coding',
|
|
147
|
+
lineage: 'coding',
|
|
148
|
+
completionDetector: null,
|
|
149
|
+
claudeSessionId: null,
|
|
150
|
+
lastProgressSnapshot: null,
|
|
151
|
+
noProgressCycles: 0,
|
|
152
|
+
commitNudgeAttempts: 0,
|
|
153
|
+
lastConsumedDirectiveHash: null,
|
|
154
|
+
...overrides,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
// Wide *Deps builders.
|
|
159
|
+
//
|
|
160
|
+
// Each returns a Partial<XDeps> seeded with type-trivial no-op stubs (the
|
|
161
|
+
// DB/IO functions tests must neutralize + the scalar identity fields), spread
|
|
162
|
+
// with overrides. Partial -- NOT the full type -- because every consuming engine
|
|
163
|
+
// takes `Partial<XDeps>` and merges its own production `defaultDeps`: a test
|
|
164
|
+
// passes this seed, overrides the fields it asserts on, and the module fills the
|
|
165
|
+
// rest. Fields with complex non-void return shapes are left to the override /
|
|
166
|
+
// the module default rather than faked here.
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
/** Seed a VerificationDeps (verify/verification-engine runVerificationTick). */
|
|
169
|
+
export function makeVerificationDeps(overrides = {}) {
|
|
170
|
+
return {
|
|
171
|
+
organizationId: 'org-1',
|
|
172
|
+
integrationBranch: 'integration',
|
|
173
|
+
getPendingVerifications: async () => [],
|
|
174
|
+
recordOutcome: async () => { },
|
|
175
|
+
verifyInjection: async () => { },
|
|
176
|
+
fileEscalation: async () => { },
|
|
177
|
+
emitDriftProposal: async () => { },
|
|
178
|
+
emitInwardDrift: async () => { },
|
|
179
|
+
resolveCwd: () => '/tmp/test-repo',
|
|
180
|
+
getActiveFocuses: async () => [],
|
|
181
|
+
getFocusDeliveries: async () => [],
|
|
182
|
+
...overrides,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/** Seed a CompletionEventDeps (completion/event handleCompletionEvent). */
|
|
186
|
+
export function makeCompletionEventDeps(overrides = {}) {
|
|
187
|
+
return {
|
|
188
|
+
getFocusDeliveries: async () => [],
|
|
189
|
+
getFocusIssues: async () => [],
|
|
190
|
+
createEscalation: async () => { },
|
|
191
|
+
terminateTeam: () => false,
|
|
192
|
+
hasOpenTeamFailureEscalation: async () => false,
|
|
193
|
+
...overrides,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/** Seed an AutoInjectDeps (security/security-auto-inject). */
|
|
197
|
+
export function makeAutoInjectDeps(overrides = {}) {
|
|
198
|
+
return {
|
|
199
|
+
linkFinding: async () => { },
|
|
200
|
+
writeAudit: async () => { },
|
|
201
|
+
...overrides,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/** Seed a PrdControllerDeps (prd/controller). */
|
|
205
|
+
export function makePrdControllerDeps(overrides = {}) {
|
|
206
|
+
return {
|
|
207
|
+
organizationId: 'org-1',
|
|
208
|
+
worktreeDir: '/tmp/test-repo/.telora/worktrees',
|
|
209
|
+
loadPrtGraph: async () => ({ nodes: [], edges: [] }),
|
|
210
|
+
markNodeCleared: async () => { },
|
|
211
|
+
armFocus: async () => { },
|
|
212
|
+
markPrdDone: async () => { },
|
|
213
|
+
resolveArmRoleId: async () => null,
|
|
214
|
+
loadPathways: async () => [],
|
|
215
|
+
commitPathway: async () => { },
|
|
216
|
+
fileEscalation: async () => { },
|
|
217
|
+
...overrides,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/fixtures/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export interface BuildInfo {
|
|
|
12
12
|
builtAt: string;
|
|
13
13
|
expectedMigrations: string[];
|
|
14
14
|
}
|
|
15
|
+
export declare function defaultBuildInfoPath(): string;
|
|
15
16
|
export declare function readBuildInfo(path?: string, reader?: (p: string) => string): BuildInfo;
|
|
16
17
|
export declare function getExpectedMigrations(path?: string, reader?: (p: string) => string): string[];
|
|
17
18
|
//# sourceMappingURL=build-info.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-info.d.ts","sourceRoot":"","sources":["../../src/update/build-info.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;
|
|
1
|
+
{"version":3,"file":"build-info.d.ts","sourceRoot":"","sources":["../../src/update/build-info.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAQD,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C;AAED,wBAAgB,aAAa,CAC3B,IAAI,GAAE,MAA+B,EACrC,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAwC,GAC9D,SAAS,CAYX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAC7B,MAAM,EAAE,CAEV"}
|
|
@@ -15,7 +15,7 @@ const EMPTY = {
|
|
|
15
15
|
builtAt: '1970-01-01T00:00:00.000Z',
|
|
16
16
|
expectedMigrations: [],
|
|
17
17
|
};
|
|
18
|
-
function defaultBuildInfoPath() {
|
|
18
|
+
export function defaultBuildInfoPath() {
|
|
19
19
|
// packages/daemon/src/build-info.ts (source)
|
|
20
20
|
// -> packages/daemon/build-info.json
|
|
21
21
|
// packages/daemon/dist/build-info.js (compiled)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-info.js","sourceRoot":"","sources":["../../src/update/build-info.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQ7C,MAAM,KAAK,GAAc;IACvB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,0BAA0B;IACnC,kBAAkB,EAAE,EAAE;CACvB,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"build-info.js","sourceRoot":"","sources":["../../src/update/build-info.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQ7C,MAAM,KAAK,GAAc;IACvB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,0BAA0B;IACnC,kBAAkB,EAAE,EAAE;CACvB,CAAC;AAEF,MAAM,UAAU,oBAAoB;IAClC,6CAA6C;IAC7C,uCAAuC;IACvC,gDAAgD;IAChD,uCAAuC;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAe,oBAAoB,EAAE,EACrC,SAAgC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC;IAE/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACrD,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS;YAC9C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;YACxC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,EAAE;SACpD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAAa,EACb,MAA8B;IAE9B,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC;AACxD,CAAC"}
|
|
@@ -16,4 +16,12 @@ export declare function resolveReviewWindowStaleHours(): number;
|
|
|
16
16
|
export declare function resolveReviewCycleCap(): number;
|
|
17
17
|
/** Resolve the idle-team stall threshold in hours (env override or default). */
|
|
18
18
|
export declare function resolveIdleTeamStallHours(): number;
|
|
19
|
+
/** Resolve the review-exit hand-off cap (env override or default 3). */
|
|
20
|
+
export declare function resolveReviewHandoffCap(): number;
|
|
21
|
+
/** Resolve the review-liveness window in minutes (env override or default 15). */
|
|
22
|
+
export declare function resolveReviewLivenessWindowMinutes(): number;
|
|
23
|
+
/** Resolve the respawn-cycle max total duration in hours (env override or default 2). */
|
|
24
|
+
export declare function resolveRespawnCycleMaxHours(): number;
|
|
25
|
+
/** Resolve the respawn-cycle max cumulative teardown count (env override or default 12). */
|
|
26
|
+
export declare function resolveRespawnCycleMaxCount(): number;
|
|
19
27
|
//# sourceMappingURL=stall-detector-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stall-detector-config.d.ts","sourceRoot":"","sources":["../../src/verify/stall-detector-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"stall-detector-config.d.ts","sourceRoot":"","sources":["../../src/verify/stall-detector-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH,uEAAuE;AACvE,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wFAAwF;AACxF,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AASD,wEAAwE;AACxE,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,kFAAkF;AAClF,wBAAgB,kCAAkC,IAAI,MAAM,CAE3D;AAED,yFAAyF;AACzF,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED,4FAA4F;AAC5F,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD"}
|
|
@@ -9,6 +9,24 @@
|
|
|
9
9
|
* can no longer silently fall back to a default on a typo'd value.
|
|
10
10
|
*/
|
|
11
11
|
import { loadEnvConfig } from '@telora/daemon-core';
|
|
12
|
+
/**
|
|
13
|
+
* Raw positive-number env read with a fallback default, for knobs whose canonical
|
|
14
|
+
* Zod + ENV_VAR_METADATA declaration IS in packages/daemon-core/src/env-config.ts
|
|
15
|
+
* but which the REGISTRY-INSTALLED daemon-core does not yet carry: the daemon
|
|
16
|
+
* compiles against the published dist, so loadEnvConfig() cannot see a freshly
|
|
17
|
+
* added field until a daemon-core republish + pin bump lands. These reads are
|
|
18
|
+
* allowlisted in scripts/lint-config.json under "env-reads" with that reason.
|
|
19
|
+
* Once daemon-core is republished + pinned, switch each caller to loadEnvConfig()
|
|
20
|
+
* and remove the allowlist entry (mirrors the TELORA_SHORTFALL_DISPOSITION_ATTEMPT_CAP
|
|
21
|
+
* precedent). Invalid (non-positive / non-numeric) values fall back to the default
|
|
22
|
+
* rather than throwing -- the loud-fail happens at loadEnvConfig once republished.
|
|
23
|
+
*/
|
|
24
|
+
function parsePositive(raw, fallback) {
|
|
25
|
+
if (raw === undefined || raw === '')
|
|
26
|
+
return fallback;
|
|
27
|
+
const n = Number(raw);
|
|
28
|
+
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
29
|
+
}
|
|
12
30
|
/** Resolve the verify_failed re-code cap (env override or default). */
|
|
13
31
|
export function resolveVerifyFailedCap() {
|
|
14
32
|
return loadEnvConfig().TELORA_VERIFY_FAILED_ITERATION_CAP;
|
|
@@ -25,4 +43,26 @@ export function resolveReviewCycleCap() {
|
|
|
25
43
|
export function resolveIdleTeamStallHours() {
|
|
26
44
|
return loadEnvConfig().TELORA_IDLE_TEAM_STALL_HOURS;
|
|
27
45
|
}
|
|
46
|
+
// NOTE: the four resolvers below read process.env RAW (via rawPositiveNumber)
|
|
47
|
+
// rather than loadEnvConfig() because their knobs are PENDING a daemon-core
|
|
48
|
+
// republish (see rawPositiveNumber). The canonical declarations already live in
|
|
49
|
+
// packages/daemon-core/src/env-config.ts; switch these to loadEnvConfig() and
|
|
50
|
+
// drop the scripts/lint-config.json env-reads allowlist entries once daemon-core
|
|
51
|
+
// is republished + pinned.
|
|
52
|
+
/** Resolve the review-exit hand-off cap (env override or default 3). */
|
|
53
|
+
export function resolveReviewHandoffCap() {
|
|
54
|
+
return parsePositive(process.env.TELORA_REVIEW_HANDOFF_CAP, 3);
|
|
55
|
+
}
|
|
56
|
+
/** Resolve the review-liveness window in minutes (env override or default 15). */
|
|
57
|
+
export function resolveReviewLivenessWindowMinutes() {
|
|
58
|
+
return parsePositive(process.env.TELORA_REVIEW_LIVENESS_WINDOW_MINUTES, 15);
|
|
59
|
+
}
|
|
60
|
+
/** Resolve the respawn-cycle max total duration in hours (env override or default 2). */
|
|
61
|
+
export function resolveRespawnCycleMaxHours() {
|
|
62
|
+
return parsePositive(process.env.TELORA_RESPAWN_CYCLE_MAX_HOURS, 2);
|
|
63
|
+
}
|
|
64
|
+
/** Resolve the respawn-cycle max cumulative teardown count (env override or default 12). */
|
|
65
|
+
export function resolveRespawnCycleMaxCount() {
|
|
66
|
+
return parsePositive(process.env.TELORA_RESPAWN_CYCLE_MAX_COUNT, 12);
|
|
67
|
+
}
|
|
28
68
|
//# sourceMappingURL=stall-detector-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stall-detector-config.js","sourceRoot":"","sources":["../../src/verify/stall-detector-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,uEAAuE;AACvE,MAAM,UAAU,sBAAsB;IACpC,OAAO,aAAa,EAAE,CAAC,kCAAkC,CAAC;AAC5D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,6BAA6B;IAC3C,OAAO,aAAa,EAAE,CAAC,gCAAgC,CAAC;AAC1D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB;IACnC,OAAO,aAAa,EAAE,CAAC,uBAAuB,CAAC;AACjD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,yBAAyB;IACvC,OAAO,aAAa,EAAE,CAAC,4BAA4B,CAAC;AACtD,CAAC"}
|
|
1
|
+
{"version":3,"file":"stall-detector-config.js","sourceRoot":"","sources":["../../src/verify/stall-detector-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,SAAS,aAAa,CAAC,GAAuB,EAAE,QAAgB;IAC9D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,sBAAsB;IACpC,OAAO,aAAa,EAAE,CAAC,kCAAkC,CAAC;AAC5D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,6BAA6B;IAC3C,OAAO,aAAa,EAAE,CAAC,gCAAgC,CAAC;AAC1D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB;IACnC,OAAO,aAAa,EAAE,CAAC,uBAAuB,CAAC;AACjD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,yBAAyB;IACvC,OAAO,aAAa,EAAE,CAAC,4BAA4B,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,iFAAiF;AACjF,2BAA2B;AAE3B,wEAAwE;AACxE,MAAM,UAAU,uBAAuB;IACrC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kCAAkC;IAChD,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,2BAA2B;IACzC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,2BAA2B;IACzC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -114,23 +114,54 @@ export interface ReviewWindowDeps {
|
|
|
114
114
|
* review window silent (dismissal memory) until the focus's review state changes.
|
|
115
115
|
*/
|
|
116
116
|
fileEscalation: (params: FileEscalationIdempotentParams) => Promise<FileEscalationIdempotentResult>;
|
|
117
|
-
/** Focus IDs that currently have
|
|
117
|
+
/** Focus IDs that currently have a REVIEW team PRESENT. Defaults to live teams. */
|
|
118
118
|
activeReviewFocusIds: () => Set<string>;
|
|
119
|
+
/**
|
|
120
|
+
* The review team's per-team last-activity epoch ms, or null when nothing has
|
|
121
|
+
* been recorded yet. Presence alone is not liveness -- this distinguishes a
|
|
122
|
+
* review that is genuinely progressing from a respawn loop's idle-exiting
|
|
123
|
+
* teams. Defaults to the live per-team activity clock.
|
|
124
|
+
*/
|
|
125
|
+
getReviewTeamLastActivityAt: (focusId: string) => number | null;
|
|
119
126
|
/** Current epoch ms; injectable for tests. Defaults to Date.now. */
|
|
120
127
|
now?: () => number;
|
|
121
128
|
/** Override the staleness threshold (hours) for tests; defaults to env-config. */
|
|
122
129
|
thresholdHours?: number;
|
|
130
|
+
/** Override the review-liveness window (minutes) for tests; defaults to env-config. */
|
|
131
|
+
livenessWindowMinutes?: number;
|
|
123
132
|
}
|
|
124
133
|
/** Focus IDs that currently have an active REVIEW team (live default). */
|
|
125
134
|
export declare function activeReviewFocusIds(): Set<string>;
|
|
135
|
+
/**
|
|
136
|
+
* Pure decision: is a review GENUINELY active -- progressing, not merely present?
|
|
137
|
+
*
|
|
138
|
+
* Mere team presence is NOT liveness: a loop that respawns an idle review team
|
|
139
|
+
* every few minutes always has a team present, so presence taken as "a review is
|
|
140
|
+
* running" starves the very staleness escalation that exists to catch the loop.
|
|
141
|
+
* A review counts as genuinely active only when a team is present AND its
|
|
142
|
+
* per-team activity clock is fresh (last agent event within `livenessWindowMs`).
|
|
143
|
+
*
|
|
144
|
+
* A frozen clock (an idle-exiting respawn team) or a null clock (present but has
|
|
145
|
+
* produced no event) is NOT genuinely active. Treating null as not-active is safe
|
|
146
|
+
* because it only matters once review_requested_at is itself past the staleness
|
|
147
|
+
* threshold (isReviewWindowStale gates on that first): a just-spawned review is
|
|
148
|
+
* within the threshold and never trips, but a "review" that has produced zero
|
|
149
|
+
* events for hours is exactly the wedge. Mirrors the sibling team-idle detector's
|
|
150
|
+
* liveness-not-presence distinction. Exported for direct unit testing.
|
|
151
|
+
*/
|
|
152
|
+
export declare function isReviewGenuinelyActive(hasReviewTeam: boolean, lastReviewActivityMs: number | null, nowMs: number, livenessWindowMs: number): boolean;
|
|
126
153
|
/**
|
|
127
154
|
* Pure decision: is this focus's review window stale? True when a
|
|
128
|
-
* review_requested_at exists, is older than `thresholdMs`, and
|
|
129
|
-
*
|
|
130
|
-
* still-set timestamp older than the threshold with no
|
|
131
|
-
* the review never ran
|
|
155
|
+
* review_requested_at exists, is older than `thresholdMs`, and NO review is
|
|
156
|
+
* GENUINELY ACTIVE (progressing) on the focus. A completed review clears
|
|
157
|
+
* review_requested_at, so a still-set timestamp older than the threshold with no
|
|
158
|
+
* genuinely-active review means the review never ran, never finished, OR is stuck
|
|
159
|
+
* in a respawn loop whose idle-exiting teams never progress. The second argument
|
|
160
|
+
* is genuine liveness (isReviewGenuinelyActive), NOT mere team presence -- that is
|
|
161
|
+
* what stops the loop's own respawns from masking the stale window. Exported for
|
|
162
|
+
* direct unit testing.
|
|
132
163
|
*/
|
|
133
|
-
export declare function isReviewWindowStale(reviewRequestedAt: string | null,
|
|
164
|
+
export declare function isReviewWindowStale(reviewRequestedAt: string | null, reviewGenuinelyActive: boolean, nowMs: number, thresholdMs: number): boolean;
|
|
134
165
|
/**
|
|
135
166
|
* Check ONE focus for a stale review window and file a review_window_stalled
|
|
136
167
|
* escalation (needs_operator) -- at most one open per focus. The caller
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stall-detectors.d.ts","sourceRoot":"","sources":["../../src/verify/stall-detectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAM3D,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"stall-detectors.d.ts","sourceRoot":"","sources":["../../src/verify/stall-detectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ import { deliveryGuardCauseKey, focusBlockageCauseKey } from '../queries/cause-k
|
|
|
39
39
|
import { getActiveTeams, terminateTeam } from '../focus/focus-executor.js';
|
|
40
40
|
import { getTeamLastActivityAt } from '../focus/focus-team-state.js';
|
|
41
41
|
import { isStatusTerminal } from '../workflow/stage-classifier.js';
|
|
42
|
-
import { resolveVerifyFailedCap, resolveReviewWindowStaleHours, resolveIdleTeamStallHours, } from './stall-detector-config.js';
|
|
42
|
+
import { resolveVerifyFailedCap, resolveReviewWindowStaleHours, resolveIdleTeamStallHours, resolveReviewLivenessWindowMinutes, } from './stall-detector-config.js';
|
|
43
43
|
import { createLogger } from '../shell/log.js';
|
|
44
44
|
const log = createLogger({ module: 'stall-detectors' });
|
|
45
45
|
/**
|
|
@@ -207,19 +207,48 @@ export function activeReviewFocusIds() {
|
|
|
207
207
|
const defaultReviewWindowDeps = {
|
|
208
208
|
fileEscalation: defaultFileEscalationIdempotent,
|
|
209
209
|
activeReviewFocusIds,
|
|
210
|
+
getReviewTeamLastActivityAt: getTeamLastActivityAt,
|
|
210
211
|
now: () => Date.now(),
|
|
211
212
|
};
|
|
213
|
+
/**
|
|
214
|
+
* Pure decision: is a review GENUINELY active -- progressing, not merely present?
|
|
215
|
+
*
|
|
216
|
+
* Mere team presence is NOT liveness: a loop that respawns an idle review team
|
|
217
|
+
* every few minutes always has a team present, so presence taken as "a review is
|
|
218
|
+
* running" starves the very staleness escalation that exists to catch the loop.
|
|
219
|
+
* A review counts as genuinely active only when a team is present AND its
|
|
220
|
+
* per-team activity clock is fresh (last agent event within `livenessWindowMs`).
|
|
221
|
+
*
|
|
222
|
+
* A frozen clock (an idle-exiting respawn team) or a null clock (present but has
|
|
223
|
+
* produced no event) is NOT genuinely active. Treating null as not-active is safe
|
|
224
|
+
* because it only matters once review_requested_at is itself past the staleness
|
|
225
|
+
* threshold (isReviewWindowStale gates on that first): a just-spawned review is
|
|
226
|
+
* within the threshold and never trips, but a "review" that has produced zero
|
|
227
|
+
* events for hours is exactly the wedge. Mirrors the sibling team-idle detector's
|
|
228
|
+
* liveness-not-presence distinction. Exported for direct unit testing.
|
|
229
|
+
*/
|
|
230
|
+
export function isReviewGenuinelyActive(hasReviewTeam, lastReviewActivityMs, nowMs, livenessWindowMs) {
|
|
231
|
+
if (!hasReviewTeam)
|
|
232
|
+
return false;
|
|
233
|
+
if (lastReviewActivityMs === null)
|
|
234
|
+
return false;
|
|
235
|
+
return nowMs - lastReviewActivityMs <= livenessWindowMs;
|
|
236
|
+
}
|
|
212
237
|
/**
|
|
213
238
|
* Pure decision: is this focus's review window stale? True when a
|
|
214
|
-
* review_requested_at exists, is older than `thresholdMs`, and
|
|
215
|
-
*
|
|
216
|
-
* still-set timestamp older than the threshold with no
|
|
217
|
-
* the review never ran
|
|
239
|
+
* review_requested_at exists, is older than `thresholdMs`, and NO review is
|
|
240
|
+
* GENUINELY ACTIVE (progressing) on the focus. A completed review clears
|
|
241
|
+
* review_requested_at, so a still-set timestamp older than the threshold with no
|
|
242
|
+
* genuinely-active review means the review never ran, never finished, OR is stuck
|
|
243
|
+
* in a respawn loop whose idle-exiting teams never progress. The second argument
|
|
244
|
+
* is genuine liveness (isReviewGenuinelyActive), NOT mere team presence -- that is
|
|
245
|
+
* what stops the loop's own respawns from masking the stale window. Exported for
|
|
246
|
+
* direct unit testing.
|
|
218
247
|
*/
|
|
219
|
-
export function isReviewWindowStale(reviewRequestedAt,
|
|
248
|
+
export function isReviewWindowStale(reviewRequestedAt, reviewGenuinelyActive, nowMs, thresholdMs) {
|
|
220
249
|
if (!reviewRequestedAt)
|
|
221
250
|
return false;
|
|
222
|
-
if (
|
|
251
|
+
if (reviewGenuinelyActive)
|
|
223
252
|
return false;
|
|
224
253
|
const requestedMs = Date.parse(reviewRequestedAt);
|
|
225
254
|
if (Number.isNaN(requestedMs))
|
|
@@ -236,8 +265,15 @@ export async function checkReviewWindowStaleForFocus(ctx, reviewRequestedAt, dep
|
|
|
236
265
|
const thresholdHours = deps.thresholdHours ?? resolveReviewWindowStaleHours();
|
|
237
266
|
const thresholdMs = thresholdHours * 3_600_000;
|
|
238
267
|
const nowMs = (deps.now ?? Date.now)();
|
|
239
|
-
const
|
|
240
|
-
|
|
268
|
+
const livenessWindowMs = (deps.livenessWindowMinutes ?? resolveReviewLivenessWindowMinutes()) * 60_000;
|
|
269
|
+
// Liveness, not presence: a review suppresses the staleness escalation only
|
|
270
|
+
// when its team is present AND genuinely progressing (fresh activity clock).
|
|
271
|
+
// A respawn loop's idle-exiting teams are present but frozen, so they no longer
|
|
272
|
+
// mask a stale window -- the escape hatch the loop used to starve.
|
|
273
|
+
const hasReviewTeam = deps.activeReviewFocusIds().has(ctx.focusId);
|
|
274
|
+
const lastReviewActivityMs = deps.getReviewTeamLastActivityAt(ctx.focusId);
|
|
275
|
+
const reviewGenuinelyActive = isReviewGenuinelyActive(hasReviewTeam, lastReviewActivityMs, nowMs, livenessWindowMs);
|
|
276
|
+
if (!isReviewWindowStale(reviewRequestedAt, reviewGenuinelyActive, nowMs, thresholdMs)) {
|
|
241
277
|
return;
|
|
242
278
|
}
|
|
243
279
|
// Per-focus cause key: one open row per focus for a stale review window, and a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stall-detectors.js","sourceRoot":"","sources":["../../src/verify/stall-detectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,IAAI,+BAA+B,GAG5D,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,yBAAyB,
|
|
1
|
+
{"version":3,"file":"stall-detectors.js","sourceRoot":"","sources":["../../src/verify/stall-detectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,10 +115,9 @@ export interface ShortfallRequeueDeps extends VerificationFeedbackDeps {
|
|
|
115
115
|
* spending forever on an unclearable one.
|
|
116
116
|
*
|
|
117
117
|
* A shortfall is a differential-side `gaps_found`: the reconciler already routes
|
|
118
|
-
* a gaps_found verify delivery to verify_failed, so we feed it that signal
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* delivery has no blocking open work; that is why it reached verify).
|
|
118
|
+
* a gaps_found verify delivery to verify_failed, so we feed it that signal.
|
|
119
|
+
* `issues: []` is accurate for the VERIFY branch (a shortfall delivery has no
|
|
120
|
+
* blocking open work; that is why it reached verify).
|
|
122
121
|
*
|
|
123
122
|
* The declared/achieved/reason detail rides in gate_state (shortfall guard) so
|
|
124
123
|
* the re-queued team's resume/wake prompt carries the specific gap; when a
|