instar 0.28.85 → 0.28.86
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/dist/core/InitiativeTracker.d.ts +176 -1
- package/dist/core/InitiativeTracker.d.ts.map +1 -1
- package/dist/core/InitiativeTracker.js +333 -12
- package/dist/core/InitiativeTracker.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +2 -2
- package/upgrades/0.28.86.md +86 -0
- package/upgrades/side-effects/project-scope-phase1a-pr1.md +232 -0
|
@@ -13,7 +13,35 @@ export interface InitiativePhase {
|
|
|
13
13
|
/** ISO timestamp when status first became 'done'. */
|
|
14
14
|
completedAt?: string;
|
|
15
15
|
}
|
|
16
|
-
export type InitiativeStatus = 'active' | 'completed' | 'archived' | 'abandoned';
|
|
16
|
+
export type InitiativeStatus = 'active' | 'completed' | 'archived' | 'abandoned' | 'paused' | 'halted' | 'awaiting-user';
|
|
17
|
+
export type InitiativeKind = 'task' | 'project';
|
|
18
|
+
export type PipelineStage = 'outline' | 'spec-drafted' | 'spec-converged' | 'approved' | 'building' | 'merged' | 'regressed' | 'skipped';
|
|
19
|
+
export type RoundStatus = 'pending' | 'ready' | 'in-progress' | 'partially-complete' | 'complete' | 'complete-with-skips' | 'failed' | 'regressed';
|
|
20
|
+
export interface InitiativeRound {
|
|
21
|
+
name: string;
|
|
22
|
+
/** Child initiative IDs in this round. */
|
|
23
|
+
itemIds: string[];
|
|
24
|
+
status: RoundStatus;
|
|
25
|
+
/** ISO; populated when prior round completes and this one becomes ready. */
|
|
26
|
+
autoAdvanceAt?: string;
|
|
27
|
+
completedAt?: string;
|
|
28
|
+
haltedAt?: string;
|
|
29
|
+
haltReason?: string;
|
|
30
|
+
/** Counter; round-runner caps this at 3. */
|
|
31
|
+
resumeAttempts?: number;
|
|
32
|
+
/** Cached drift verdict from the most recent attempt. Typed in Phase 1b. */
|
|
33
|
+
lastDriftVerdict?: unknown;
|
|
34
|
+
}
|
|
35
|
+
export interface InitiativeConflictPatch {
|
|
36
|
+
patchId: string;
|
|
37
|
+
recordId: string;
|
|
38
|
+
path: string;
|
|
39
|
+
oursValue: unknown;
|
|
40
|
+
theirsValue: unknown;
|
|
41
|
+
baseValue?: unknown;
|
|
42
|
+
losingMachineId: string;
|
|
43
|
+
capturedAt: string;
|
|
44
|
+
}
|
|
17
45
|
export interface InitiativeLink {
|
|
18
46
|
type: 'spec' | 'pr' | 'commit' | 'topic' | 'doc' | 'other';
|
|
19
47
|
label: string;
|
|
@@ -43,6 +71,53 @@ export interface Initiative {
|
|
|
43
71
|
links: InitiativeLink[];
|
|
44
72
|
createdAt: string;
|
|
45
73
|
updatedAt: string;
|
|
74
|
+
/** Distinguishes leaf work items ('task') from rollups ('project').
|
|
75
|
+
* Immutable after creation. Defaults to 'task' when omitted. */
|
|
76
|
+
kind?: InitiativeKind;
|
|
77
|
+
/** Bumped on backfill / migration. */
|
|
78
|
+
schemaVersion?: number;
|
|
79
|
+
/** Optimistic concurrency counter. Increments on every successful write.
|
|
80
|
+
* Starts at 1 on create. */
|
|
81
|
+
version?: number;
|
|
82
|
+
/** Back-pointer to a project that lists this child in `rounds[].itemIds`. */
|
|
83
|
+
parentProjectId?: string;
|
|
84
|
+
pipelineStage?: PipelineStage;
|
|
85
|
+
/** Relative to repo root; required for stages ≥ 'spec-drafted'. */
|
|
86
|
+
specPath?: string;
|
|
87
|
+
/** Required for stages = 'building' or 'merged'. */
|
|
88
|
+
prNumber?: number;
|
|
89
|
+
/** GitHub-reported merge commit; recorded at building → merged. */
|
|
90
|
+
mergeCommitOid?: string;
|
|
91
|
+
/** ISO; last revalidation against origin/main. */
|
|
92
|
+
ciCheckedAt?: string;
|
|
93
|
+
skippedAt?: string;
|
|
94
|
+
skippedBy?: string;
|
|
95
|
+
skippedReason?: string;
|
|
96
|
+
/** Recorded on skipped → outline reverse transition. */
|
|
97
|
+
unskippedAt?: string;
|
|
98
|
+
/** Default true at runtime; false marks infrastructure-of-tracker specs. */
|
|
99
|
+
driftCheck?: boolean;
|
|
100
|
+
rounds?: InitiativeRound[];
|
|
101
|
+
/** Paths jailed to project-root allowlist. */
|
|
102
|
+
sourceDocs?: string[];
|
|
103
|
+
/** Default true at runtime. */
|
|
104
|
+
autoAdvance?: boolean;
|
|
105
|
+
/** For round-complete and halt notifications. */
|
|
106
|
+
telegramTopicId?: string;
|
|
107
|
+
/** Current round owner (Phase 1.5). */
|
|
108
|
+
ownerMachineId?: string;
|
|
109
|
+
/** Absolute path to the target source repo; required for projects. */
|
|
110
|
+
targetRepoPath?: string;
|
|
111
|
+
/** Increments on each auto-advance without ack; pauses project at ≥ 2. */
|
|
112
|
+
unacknowledgedAdvanceCount?: number;
|
|
113
|
+
/** Populated when user acks the first-launch digest. */
|
|
114
|
+
firstLaunchAckAt?: string;
|
|
115
|
+
/** Highest round index acked. */
|
|
116
|
+
lastAckedRoundIndex?: number;
|
|
117
|
+
/** Populated by git-sync conflict handler (Phase 1.12). */
|
|
118
|
+
awaitingReconciliation?: InitiativeConflictPatch[];
|
|
119
|
+
/** For cache invalidation on drift-prompt edits. */
|
|
120
|
+
driftPromptTemplateVersion?: number;
|
|
46
121
|
}
|
|
47
122
|
export interface InitiativeCreateInput {
|
|
48
123
|
id: string;
|
|
@@ -59,6 +134,22 @@ export interface InitiativeCreateInput {
|
|
|
59
134
|
needsUser?: boolean;
|
|
60
135
|
needsUserReason?: string;
|
|
61
136
|
blockers?: string[];
|
|
137
|
+
/** Defaults to 'task' if omitted. Immutable after creation. */
|
|
138
|
+
kind?: InitiativeKind;
|
|
139
|
+
parentProjectId?: string;
|
|
140
|
+
pipelineStage?: PipelineStage;
|
|
141
|
+
specPath?: string;
|
|
142
|
+
prNumber?: number;
|
|
143
|
+
mergeCommitOid?: string;
|
|
144
|
+
ciCheckedAt?: string;
|
|
145
|
+
driftCheck?: boolean;
|
|
146
|
+
rounds?: InitiativeRound[];
|
|
147
|
+
sourceDocs?: string[];
|
|
148
|
+
autoAdvance?: boolean;
|
|
149
|
+
telegramTopicId?: string;
|
|
150
|
+
ownerMachineId?: string;
|
|
151
|
+
targetRepoPath?: string;
|
|
152
|
+
driftPromptTemplateVersion?: number;
|
|
62
153
|
}
|
|
63
154
|
export interface InitiativeUpdateInput {
|
|
64
155
|
title?: string;
|
|
@@ -69,6 +160,62 @@ export interface InitiativeUpdateInput {
|
|
|
69
160
|
needsUserReason?: string | null;
|
|
70
161
|
blockers?: string[];
|
|
71
162
|
links?: InitiativeLink[];
|
|
163
|
+
/** Optimistic concurrency guard. When provided, must equal the current
|
|
164
|
+
* `version` or update() throws `OccVersionMismatchError`. Backward
|
|
165
|
+
* compatible: callers that omit ifMatch get unconditional writes. */
|
|
166
|
+
ifMatch?: number;
|
|
167
|
+
/** Presence triggers immutability check: any value that differs from
|
|
168
|
+
* the current `kind` throws `KindImmutableError`. */
|
|
169
|
+
kind?: InitiativeKind;
|
|
170
|
+
/** Set to a project id to attach; set to null to clear. Bidirectional
|
|
171
|
+
* validation against the named project's `rounds[].itemIds` runs on set. */
|
|
172
|
+
parentProjectId?: string | null;
|
|
173
|
+
pipelineStage?: PipelineStage;
|
|
174
|
+
specPath?: string | null;
|
|
175
|
+
prNumber?: number | null;
|
|
176
|
+
mergeCommitOid?: string | null;
|
|
177
|
+
ciCheckedAt?: string | null;
|
|
178
|
+
skippedAt?: string | null;
|
|
179
|
+
skippedBy?: string | null;
|
|
180
|
+
skippedReason?: string | null;
|
|
181
|
+
unskippedAt?: string | null;
|
|
182
|
+
driftCheck?: boolean;
|
|
183
|
+
rounds?: InitiativeRound[];
|
|
184
|
+
sourceDocs?: string[];
|
|
185
|
+
autoAdvance?: boolean;
|
|
186
|
+
telegramTopicId?: string | null;
|
|
187
|
+
ownerMachineId?: string | null;
|
|
188
|
+
targetRepoPath?: string;
|
|
189
|
+
unacknowledgedAdvanceCount?: number;
|
|
190
|
+
firstLaunchAckAt?: string | null;
|
|
191
|
+
lastAckedRoundIndex?: number;
|
|
192
|
+
awaitingReconciliation?: InitiativeConflictPatch[];
|
|
193
|
+
driftPromptTemplateVersion?: number;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Thrown by `update()` when the caller supplied `ifMatch` and it didn't
|
|
197
|
+
* equal the current `version`. The HTTP layer (Phase 1.3) translates this
|
|
198
|
+
* to a 409 response with body `{ currentVersion }`.
|
|
199
|
+
*/
|
|
200
|
+
export declare class OccVersionMismatchError extends Error {
|
|
201
|
+
readonly currentVersion: number;
|
|
202
|
+
constructor(message: string, currentVersion: number);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Thrown by `update()` when the caller attempted to change `kind`. The
|
|
206
|
+
* `kind` field is set at creation time and never changes thereafter.
|
|
207
|
+
*/
|
|
208
|
+
export declare class KindImmutableError extends Error {
|
|
209
|
+
constructor(message?: string);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Thrown by `update()` when setting `parentProjectId` and the named parent
|
|
213
|
+
* either doesn't exist, isn't a `kind: 'project'` initiative, or doesn't
|
|
214
|
+
* list this child in any of its `rounds[].itemIds`. Bidirectional check
|
|
215
|
+
* keeps the parent/child relationship internally consistent.
|
|
216
|
+
*/
|
|
217
|
+
export declare class InvalidParentProjectError extends Error {
|
|
218
|
+
constructor(message: string);
|
|
72
219
|
}
|
|
73
220
|
export interface DigestItem {
|
|
74
221
|
initiativeId: string;
|
|
@@ -98,7 +245,15 @@ export declare class InitiativeTracker {
|
|
|
98
245
|
private readonly initiatives;
|
|
99
246
|
private taskFlowRegistry;
|
|
100
247
|
private taskFlowControllerInstanceId;
|
|
248
|
+
private digestCacheInvalidator;
|
|
101
249
|
constructor(stateDir: string);
|
|
250
|
+
/**
|
|
251
|
+
* Register a callback invoked once after every successful mutating call
|
|
252
|
+
* (`create`, `update`, `setPhaseStatus`, `remove`). The default is a
|
|
253
|
+
* no-op so legacy callers see no change. PR 3 wires the real cache
|
|
254
|
+
* invalidator.
|
|
255
|
+
*/
|
|
256
|
+
setDigestCacheInvalidator(fn: () => void): void;
|
|
102
257
|
/**
|
|
103
258
|
* Wire a TaskFlow registry to make TaskFlow the source of truth.
|
|
104
259
|
* Idempotent — safe to call multiple times. After wiring, all reads come
|
|
@@ -170,8 +325,28 @@ export declare class InitiativeTracker {
|
|
|
170
325
|
get(id: string): Initiative | undefined;
|
|
171
326
|
create(input: InitiativeCreateInput): Promise<Initiative>;
|
|
172
327
|
update(id: string, input: InitiativeUpdateInput): Promise<Initiative>;
|
|
328
|
+
/**
|
|
329
|
+
* Verify that `parentId` names an existing `kind: 'project'` initiative
|
|
330
|
+
* AND that one of its rounds lists `childId` in itemIds. Throws
|
|
331
|
+
* `InvalidParentProjectError` on any failure. Used by `update()` when
|
|
332
|
+
* a child's `parentProjectId` is set to a non-null value.
|
|
333
|
+
*/
|
|
334
|
+
private assertValidParentProject;
|
|
173
335
|
setPhaseStatus(id: string, phaseId: string, status: InitiativePhaseStatus): Promise<Initiative>;
|
|
174
336
|
remove(id: string): Promise<boolean>;
|
|
337
|
+
/**
|
|
338
|
+
* One-time backfill helper for TaskFlow-enabled installs: scans all
|
|
339
|
+
* records, identifies those missing `kind`, and updates them through
|
|
340
|
+
* TaskFlow. Idempotent — running twice produces no change after the
|
|
341
|
+
* first pass. The legacy-JSON path runs an equivalent backfill inside
|
|
342
|
+
* `loadFromDisk()` on first load.
|
|
343
|
+
*
|
|
344
|
+
* Returns counts so callers can log/observe what happened.
|
|
345
|
+
*/
|
|
346
|
+
backfillKindAndSchema(): Promise<{
|
|
347
|
+
backfilled: number;
|
|
348
|
+
scanned: number;
|
|
349
|
+
}>;
|
|
175
350
|
/**
|
|
176
351
|
* Scan active initiatives for anything actionable. Empty items[] means
|
|
177
352
|
* "quiet day, don't spam the user."
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitiativeTracker.d.ts","sourceRoot":"","sources":["../../src/core/InitiativeTracker.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAQrE,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"InitiativeTracker.d.ts","sourceRoot":"","sources":["../../src/core/InitiativeTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,41 @@
|
|
|
37
37
|
import fs from 'node:fs';
|
|
38
38
|
import path from 'node:path';
|
|
39
39
|
import { TaskFlowError } from '../tasks/task-flow-types.js';
|
|
40
|
+
/**
|
|
41
|
+
* Thrown by `update()` when the caller supplied `ifMatch` and it didn't
|
|
42
|
+
* equal the current `version`. The HTTP layer (Phase 1.3) translates this
|
|
43
|
+
* to a 409 response with body `{ currentVersion }`.
|
|
44
|
+
*/
|
|
45
|
+
export class OccVersionMismatchError extends Error {
|
|
46
|
+
currentVersion;
|
|
47
|
+
constructor(message, currentVersion) {
|
|
48
|
+
super(message);
|
|
49
|
+
this.name = 'OccVersionMismatchError';
|
|
50
|
+
this.currentVersion = currentVersion;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Thrown by `update()` when the caller attempted to change `kind`. The
|
|
55
|
+
* `kind` field is set at creation time and never changes thereafter.
|
|
56
|
+
*/
|
|
57
|
+
export class KindImmutableError extends Error {
|
|
58
|
+
constructor(message = '`kind` is immutable after initiative creation') {
|
|
59
|
+
super(message);
|
|
60
|
+
this.name = 'KindImmutableError';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Thrown by `update()` when setting `parentProjectId` and the named parent
|
|
65
|
+
* either doesn't exist, isn't a `kind: 'project'` initiative, or doesn't
|
|
66
|
+
* list this child in any of its `rounds[].itemIds`. Bidirectional check
|
|
67
|
+
* keeps the parent/child relationship internally consistent.
|
|
68
|
+
*/
|
|
69
|
+
export class InvalidParentProjectError extends Error {
|
|
70
|
+
constructor(message) {
|
|
71
|
+
super(message);
|
|
72
|
+
this.name = 'InvalidParentProjectError';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
40
75
|
/**
|
|
41
76
|
* Staleness threshold for the digest scan (7 days without an update on an
|
|
42
77
|
* active initiative triggers a 'stale' flag).
|
|
@@ -48,6 +83,49 @@ export const STALE_THRESHOLD_MS = 7 * 24 * 60 * 60 * 1000;
|
|
|
48
83
|
* it for OCC scope checks. Single instance per server process.
|
|
49
84
|
*/
|
|
50
85
|
export const INITIATIVE_TASKFLOW_CONTROLLER_ID = 'InitiativeTracker';
|
|
86
|
+
/**
|
|
87
|
+
* JSON.stringify replacer that omits any property whose value is exactly
|
|
88
|
+
* `undefined`. Native JSON.stringify already drops undefined object values,
|
|
89
|
+
* but using an explicit replacer makes intent visible AND ensures we never
|
|
90
|
+
* accidentally serialize a `null` for an optional field — the runtime
|
|
91
|
+
* guards in `update()` already reject `null`, so this is belt-and-braces.
|
|
92
|
+
*
|
|
93
|
+
* Round-trip stability: a record loaded and saved without mutation
|
|
94
|
+
* produces byte-identical output (asserted by the unit tests).
|
|
95
|
+
*/
|
|
96
|
+
function omitUndefinedReplacer(_key, value) {
|
|
97
|
+
return value === undefined ? undefined : value;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Reject `null` for any of the project-scope optional fields when supplied
|
|
101
|
+
* via `InitiativeCreateInput`. (Update inputs are field-by-field; null
|
|
102
|
+
* means "clear" for nullable fields and "reject" for the rest, enforced
|
|
103
|
+
* inline in `update()`.)
|
|
104
|
+
*/
|
|
105
|
+
function rejectNullCreateInput(input) {
|
|
106
|
+
const forbiddenNullKeys = [
|
|
107
|
+
'kind',
|
|
108
|
+
'parentProjectId',
|
|
109
|
+
'pipelineStage',
|
|
110
|
+
'specPath',
|
|
111
|
+
'prNumber',
|
|
112
|
+
'mergeCommitOid',
|
|
113
|
+
'ciCheckedAt',
|
|
114
|
+
'driftCheck',
|
|
115
|
+
'rounds',
|
|
116
|
+
'sourceDocs',
|
|
117
|
+
'autoAdvance',
|
|
118
|
+
'telegramTopicId',
|
|
119
|
+
'ownerMachineId',
|
|
120
|
+
'targetRepoPath',
|
|
121
|
+
'driftPromptTemplateVersion',
|
|
122
|
+
];
|
|
123
|
+
for (const k of forbiddenNullKeys) {
|
|
124
|
+
if (input[k] === null) {
|
|
125
|
+
throw new Error(`Initiative create input field "${k}" must not be null`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
51
129
|
function ownerKeyForInitiative(initiativeId) {
|
|
52
130
|
return `initiative:${initiativeId}`;
|
|
53
131
|
}
|
|
@@ -62,10 +140,24 @@ export class InitiativeTracker {
|
|
|
62
140
|
// ── TaskFlow Phase 4 wiring ────────────────────────────────────
|
|
63
141
|
taskFlowRegistry = null;
|
|
64
142
|
taskFlowControllerInstanceId = null;
|
|
143
|
+
// ── Digest cache invalidator hook (Phase 1.1) ──────────────────
|
|
144
|
+
// PR 3 wires the real invalidator (clears the project-scope digest cache
|
|
145
|
+
// so the next read recomputes). Until then this is a no-op. The hook
|
|
146
|
+
// fires after every successful mutating call.
|
|
147
|
+
digestCacheInvalidator = () => { };
|
|
65
148
|
constructor(stateDir) {
|
|
66
149
|
this.filePath = path.join(stateDir, 'initiatives.json');
|
|
67
150
|
this.loadFromDisk();
|
|
68
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Register a callback invoked once after every successful mutating call
|
|
154
|
+
* (`create`, `update`, `setPhaseStatus`, `remove`). The default is a
|
|
155
|
+
* no-op so legacy callers see no change. PR 3 wires the real cache
|
|
156
|
+
* invalidator.
|
|
157
|
+
*/
|
|
158
|
+
setDigestCacheInvalidator(fn) {
|
|
159
|
+
this.digestCacheInvalidator = typeof fn === 'function' ? fn : () => { };
|
|
160
|
+
}
|
|
69
161
|
/**
|
|
70
162
|
* Wire a TaskFlow registry to make TaskFlow the source of truth.
|
|
71
163
|
* Idempotent — safe to call multiple times. After wiring, all reads come
|
|
@@ -103,11 +195,28 @@ export class InitiativeTracker {
|
|
|
103
195
|
return;
|
|
104
196
|
const raw = JSON.parse(fs.readFileSync(this.filePath, 'utf-8'));
|
|
105
197
|
if (Array.isArray(raw?.initiatives)) {
|
|
198
|
+
let backfilled = 0;
|
|
106
199
|
for (const item of raw.initiatives) {
|
|
107
200
|
if (item && typeof item.id === 'string') {
|
|
201
|
+
// Phase 1.1 idempotent backfill: legacy records (missing `kind`)
|
|
202
|
+
// get `kind: 'task'` + `schemaVersion: 1`. Records that already
|
|
203
|
+
// carry `kind` are untouched. Second load is a no-op because
|
|
204
|
+
// nothing changes after the first pass.
|
|
205
|
+
if (item.kind === undefined) {
|
|
206
|
+
item.kind = 'task';
|
|
207
|
+
if (item.schemaVersion === undefined)
|
|
208
|
+
item.schemaVersion = 1;
|
|
209
|
+
backfilled++;
|
|
210
|
+
}
|
|
108
211
|
this.initiatives.set(item.id, item);
|
|
109
212
|
}
|
|
110
213
|
}
|
|
214
|
+
// Rewrite the file exactly once if any record was backfilled. The
|
|
215
|
+
// rewrite uses the same omit-undefined replacer as `saveToDisk()`
|
|
216
|
+
// so the file is stable on a subsequent load.
|
|
217
|
+
if (backfilled > 0) {
|
|
218
|
+
this.saveToDisk();
|
|
219
|
+
}
|
|
111
220
|
}
|
|
112
221
|
}
|
|
113
222
|
catch (err) {
|
|
@@ -121,7 +230,7 @@ export class InitiativeTracker {
|
|
|
121
230
|
fs.mkdirSync(dir, { recursive: true });
|
|
122
231
|
const payload = { initiatives: Array.from(this.initiatives.values()) };
|
|
123
232
|
const tmp = `${this.filePath}.${process.pid}.tmp`;
|
|
124
|
-
fs.writeFileSync(tmp, JSON.stringify(payload,
|
|
233
|
+
fs.writeFileSync(tmp, JSON.stringify(payload, omitUndefinedReplacer, 2));
|
|
125
234
|
fs.renameSync(tmp, this.filePath);
|
|
126
235
|
}
|
|
127
236
|
// ── TaskFlow ↔ Initiative serialization ─────────────────────────
|
|
@@ -472,6 +581,7 @@ export class InitiativeTracker {
|
|
|
472
581
|
if (!input.phases.length) {
|
|
473
582
|
throw new Error('Initiative must have at least one phase');
|
|
474
583
|
}
|
|
584
|
+
rejectNullCreateInput(input);
|
|
475
585
|
if (this.isTaskFlowEnabled()) {
|
|
476
586
|
if (this.findFlowIdForInitiative(input.id)) {
|
|
477
587
|
throw new Error(`Initiative "${input.id}" already exists`);
|
|
@@ -505,18 +615,76 @@ export class InitiativeTracker {
|
|
|
505
615
|
links: input.links ?? [],
|
|
506
616
|
createdAt: now,
|
|
507
617
|
updatedAt: now,
|
|
618
|
+
// Project-scope: default kind to 'task' and start version at 1. Both
|
|
619
|
+
// are persisted from create-time so subsequent backfill is a no-op.
|
|
620
|
+
kind: input.kind ?? 'task',
|
|
621
|
+
schemaVersion: 1,
|
|
622
|
+
version: 1,
|
|
508
623
|
};
|
|
624
|
+
// Optional project-layer fields are passed through if present. Stored
|
|
625
|
+
// as-is; runtime validation (parentProjectId existence, etc.) happens
|
|
626
|
+
// on subsequent updates that mutate the relationship.
|
|
627
|
+
if (input.parentProjectId !== undefined)
|
|
628
|
+
initiative.parentProjectId = input.parentProjectId;
|
|
629
|
+
if (input.pipelineStage !== undefined)
|
|
630
|
+
initiative.pipelineStage = input.pipelineStage;
|
|
631
|
+
if (input.specPath !== undefined)
|
|
632
|
+
initiative.specPath = input.specPath;
|
|
633
|
+
if (input.prNumber !== undefined)
|
|
634
|
+
initiative.prNumber = input.prNumber;
|
|
635
|
+
if (input.mergeCommitOid !== undefined)
|
|
636
|
+
initiative.mergeCommitOid = input.mergeCommitOid;
|
|
637
|
+
if (input.ciCheckedAt !== undefined)
|
|
638
|
+
initiative.ciCheckedAt = input.ciCheckedAt;
|
|
639
|
+
if (input.driftCheck !== undefined)
|
|
640
|
+
initiative.driftCheck = input.driftCheck;
|
|
641
|
+
if (input.rounds !== undefined)
|
|
642
|
+
initiative.rounds = input.rounds;
|
|
643
|
+
if (input.sourceDocs !== undefined)
|
|
644
|
+
initiative.sourceDocs = input.sourceDocs;
|
|
645
|
+
if (input.autoAdvance !== undefined)
|
|
646
|
+
initiative.autoAdvance = input.autoAdvance;
|
|
647
|
+
if (input.telegramTopicId !== undefined)
|
|
648
|
+
initiative.telegramTopicId = input.telegramTopicId;
|
|
649
|
+
if (input.ownerMachineId !== undefined)
|
|
650
|
+
initiative.ownerMachineId = input.ownerMachineId;
|
|
651
|
+
if (input.targetRepoPath !== undefined)
|
|
652
|
+
initiative.targetRepoPath = input.targetRepoPath;
|
|
653
|
+
if (input.driftPromptTemplateVersion !== undefined) {
|
|
654
|
+
initiative.driftPromptTemplateVersion = input.driftPromptTemplateVersion;
|
|
655
|
+
}
|
|
509
656
|
this.initiatives.set(initiative.id, initiative);
|
|
657
|
+
let result;
|
|
510
658
|
if (this.isTaskFlowEnabled()) {
|
|
511
|
-
|
|
659
|
+
result = await this.persistThroughTaskFlow(initiative);
|
|
660
|
+
}
|
|
661
|
+
else {
|
|
662
|
+
this.saveToDisk();
|
|
663
|
+
result = initiative;
|
|
512
664
|
}
|
|
513
|
-
this.
|
|
514
|
-
return
|
|
665
|
+
this.digestCacheInvalidator();
|
|
666
|
+
return result;
|
|
515
667
|
}
|
|
516
668
|
async update(id, input) {
|
|
517
669
|
const existing = this.get(id);
|
|
518
670
|
if (!existing)
|
|
519
671
|
throw new Error(`Initiative "${id}" not found`);
|
|
672
|
+
// ── kind immutability check (Phase 1.1) ────────────────────────
|
|
673
|
+
// The `kind` field is set at creation and never mutates. We treat the
|
|
674
|
+
// current kind as 'task' when undefined (legacy records pre-backfill).
|
|
675
|
+
if (input.kind !== undefined) {
|
|
676
|
+
const currentKind = existing.kind ?? 'task';
|
|
677
|
+
if (input.kind !== currentKind) {
|
|
678
|
+
throw new KindImmutableError(`Cannot change kind from "${currentKind}" to "${input.kind}"`);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
// ── OCC version check (Phase 1.1) ──────────────────────────────
|
|
682
|
+
// Only enforce when caller supplied ifMatch — preserves backward
|
|
683
|
+
// compatibility for legacy callers that never knew about versioning.
|
|
684
|
+
const currentVersion = existing.version ?? 1;
|
|
685
|
+
if (input.ifMatch !== undefined && input.ifMatch !== currentVersion) {
|
|
686
|
+
throw new OccVersionMismatchError(`Initiative "${id}" version mismatch: expected ${input.ifMatch}, current ${currentVersion}`, currentVersion);
|
|
687
|
+
}
|
|
520
688
|
const now = new Date().toISOString();
|
|
521
689
|
const next = { ...existing, updatedAt: now, lastTouchedAt: now };
|
|
522
690
|
if (input.title !== undefined)
|
|
@@ -537,12 +705,110 @@ export class InitiativeTracker {
|
|
|
537
705
|
next.blockers = input.blockers;
|
|
538
706
|
if (input.links !== undefined)
|
|
539
707
|
next.links = input.links;
|
|
708
|
+
// ── Project-scope field updates ────────────────────────────────
|
|
709
|
+
// Bidirectional parentProjectId validation: when setting (not clearing),
|
|
710
|
+
// the named parent must exist as kind:'project' AND list this child in
|
|
711
|
+
// rounds[].itemIds. Clearing (null) skips validation.
|
|
712
|
+
if (input.parentProjectId !== undefined) {
|
|
713
|
+
if (input.parentProjectId === null) {
|
|
714
|
+
next.parentProjectId = undefined;
|
|
715
|
+
}
|
|
716
|
+
else {
|
|
717
|
+
this.assertValidParentProject(input.parentProjectId, id);
|
|
718
|
+
next.parentProjectId = input.parentProjectId;
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
if (input.pipelineStage !== undefined)
|
|
722
|
+
next.pipelineStage = input.pipelineStage;
|
|
723
|
+
if (input.specPath !== undefined) {
|
|
724
|
+
next.specPath = input.specPath === null ? undefined : input.specPath;
|
|
725
|
+
}
|
|
726
|
+
if (input.prNumber !== undefined) {
|
|
727
|
+
next.prNumber = input.prNumber === null ? undefined : input.prNumber;
|
|
728
|
+
}
|
|
729
|
+
if (input.mergeCommitOid !== undefined) {
|
|
730
|
+
next.mergeCommitOid = input.mergeCommitOid === null ? undefined : input.mergeCommitOid;
|
|
731
|
+
}
|
|
732
|
+
if (input.ciCheckedAt !== undefined) {
|
|
733
|
+
next.ciCheckedAt = input.ciCheckedAt === null ? undefined : input.ciCheckedAt;
|
|
734
|
+
}
|
|
735
|
+
if (input.skippedAt !== undefined) {
|
|
736
|
+
next.skippedAt = input.skippedAt === null ? undefined : input.skippedAt;
|
|
737
|
+
}
|
|
738
|
+
if (input.skippedBy !== undefined) {
|
|
739
|
+
next.skippedBy = input.skippedBy === null ? undefined : input.skippedBy;
|
|
740
|
+
}
|
|
741
|
+
if (input.skippedReason !== undefined) {
|
|
742
|
+
next.skippedReason = input.skippedReason === null ? undefined : input.skippedReason;
|
|
743
|
+
}
|
|
744
|
+
if (input.unskippedAt !== undefined) {
|
|
745
|
+
next.unskippedAt = input.unskippedAt === null ? undefined : input.unskippedAt;
|
|
746
|
+
}
|
|
747
|
+
if (input.driftCheck !== undefined)
|
|
748
|
+
next.driftCheck = input.driftCheck;
|
|
749
|
+
if (input.rounds !== undefined)
|
|
750
|
+
next.rounds = input.rounds;
|
|
751
|
+
if (input.sourceDocs !== undefined)
|
|
752
|
+
next.sourceDocs = input.sourceDocs;
|
|
753
|
+
if (input.autoAdvance !== undefined)
|
|
754
|
+
next.autoAdvance = input.autoAdvance;
|
|
755
|
+
if (input.telegramTopicId !== undefined) {
|
|
756
|
+
next.telegramTopicId = input.telegramTopicId === null ? undefined : input.telegramTopicId;
|
|
757
|
+
}
|
|
758
|
+
if (input.ownerMachineId !== undefined) {
|
|
759
|
+
next.ownerMachineId = input.ownerMachineId === null ? undefined : input.ownerMachineId;
|
|
760
|
+
}
|
|
761
|
+
if (input.targetRepoPath !== undefined)
|
|
762
|
+
next.targetRepoPath = input.targetRepoPath;
|
|
763
|
+
if (input.unacknowledgedAdvanceCount !== undefined) {
|
|
764
|
+
next.unacknowledgedAdvanceCount = input.unacknowledgedAdvanceCount;
|
|
765
|
+
}
|
|
766
|
+
if (input.firstLaunchAckAt !== undefined) {
|
|
767
|
+
next.firstLaunchAckAt =
|
|
768
|
+
input.firstLaunchAckAt === null ? undefined : input.firstLaunchAckAt;
|
|
769
|
+
}
|
|
770
|
+
if (input.lastAckedRoundIndex !== undefined) {
|
|
771
|
+
next.lastAckedRoundIndex = input.lastAckedRoundIndex;
|
|
772
|
+
}
|
|
773
|
+
if (input.awaitingReconciliation !== undefined) {
|
|
774
|
+
next.awaitingReconciliation = input.awaitingReconciliation;
|
|
775
|
+
}
|
|
776
|
+
if (input.driftPromptTemplateVersion !== undefined) {
|
|
777
|
+
next.driftPromptTemplateVersion = input.driftPromptTemplateVersion;
|
|
778
|
+
}
|
|
779
|
+
// Bump version on every successful write.
|
|
780
|
+
next.version = currentVersion + 1;
|
|
540
781
|
this.initiatives.set(id, next);
|
|
782
|
+
let result;
|
|
541
783
|
if (this.isTaskFlowEnabled()) {
|
|
542
|
-
|
|
784
|
+
result = await this.persistThroughTaskFlow(next);
|
|
785
|
+
}
|
|
786
|
+
else {
|
|
787
|
+
this.saveToDisk();
|
|
788
|
+
result = next;
|
|
789
|
+
}
|
|
790
|
+
this.digestCacheInvalidator();
|
|
791
|
+
return result;
|
|
792
|
+
}
|
|
793
|
+
/**
|
|
794
|
+
* Verify that `parentId` names an existing `kind: 'project'` initiative
|
|
795
|
+
* AND that one of its rounds lists `childId` in itemIds. Throws
|
|
796
|
+
* `InvalidParentProjectError` on any failure. Used by `update()` when
|
|
797
|
+
* a child's `parentProjectId` is set to a non-null value.
|
|
798
|
+
*/
|
|
799
|
+
assertValidParentProject(parentId, childId) {
|
|
800
|
+
const parent = this.get(parentId);
|
|
801
|
+
if (!parent) {
|
|
802
|
+
throw new InvalidParentProjectError(`Parent project "${parentId}" not found`);
|
|
803
|
+
}
|
|
804
|
+
if ((parent.kind ?? 'task') !== 'project') {
|
|
805
|
+
throw new InvalidParentProjectError(`Initiative "${parentId}" is not a project (kind="${parent.kind ?? 'task'}")`);
|
|
806
|
+
}
|
|
807
|
+
const rounds = parent.rounds ?? [];
|
|
808
|
+
const listed = rounds.some((r) => Array.isArray(r.itemIds) && r.itemIds.includes(childId));
|
|
809
|
+
if (!listed) {
|
|
810
|
+
throw new InvalidParentProjectError(`Project "${parentId}" does not list child "${childId}" in any round`);
|
|
543
811
|
}
|
|
544
|
-
this.saveToDisk();
|
|
545
|
-
return next;
|
|
546
812
|
}
|
|
547
813
|
async setPhaseStatus(id, phaseId, status) {
|
|
548
814
|
const existing = this.get(id);
|
|
@@ -567,19 +833,28 @@ export class InitiativeTracker {
|
|
|
567
833
|
status: allDone ? 'completed' : existing.status === 'completed' ? 'active' : existing.status,
|
|
568
834
|
updatedAt: now,
|
|
569
835
|
lastTouchedAt: now,
|
|
836
|
+
version: (existing.version ?? 1) + 1,
|
|
570
837
|
};
|
|
571
838
|
this.initiatives.set(id, next);
|
|
839
|
+
let result;
|
|
572
840
|
if (this.isTaskFlowEnabled()) {
|
|
573
|
-
|
|
841
|
+
result = await this.persistThroughTaskFlow(next);
|
|
574
842
|
}
|
|
575
|
-
|
|
576
|
-
|
|
843
|
+
else {
|
|
844
|
+
this.saveToDisk();
|
|
845
|
+
result = next;
|
|
846
|
+
}
|
|
847
|
+
this.digestCacheInvalidator();
|
|
848
|
+
return result;
|
|
577
849
|
}
|
|
578
850
|
async remove(id) {
|
|
579
851
|
if (this.isTaskFlowEnabled()) {
|
|
580
852
|
const fid = this.findFlowIdForInitiative(id);
|
|
581
853
|
if (!fid) {
|
|
582
|
-
|
|
854
|
+
const removed = this.initiatives.delete(id);
|
|
855
|
+
if (removed)
|
|
856
|
+
this.digestCacheInvalidator();
|
|
857
|
+
return removed;
|
|
583
858
|
}
|
|
584
859
|
const registry = this.taskFlowRegistry;
|
|
585
860
|
const principal = this.taskFlowPrincipal();
|
|
@@ -633,13 +908,59 @@ export class InitiativeTracker {
|
|
|
633
908
|
}
|
|
634
909
|
}
|
|
635
910
|
this.initiatives.delete(id);
|
|
911
|
+
this.digestCacheInvalidator();
|
|
636
912
|
return true;
|
|
637
913
|
}
|
|
638
914
|
const removed = this.initiatives.delete(id);
|
|
639
|
-
if (removed)
|
|
915
|
+
if (removed) {
|
|
640
916
|
this.saveToDisk();
|
|
917
|
+
this.digestCacheInvalidator();
|
|
918
|
+
}
|
|
641
919
|
return removed;
|
|
642
920
|
}
|
|
921
|
+
/**
|
|
922
|
+
* One-time backfill helper for TaskFlow-enabled installs: scans all
|
|
923
|
+
* records, identifies those missing `kind`, and updates them through
|
|
924
|
+
* TaskFlow. Idempotent — running twice produces no change after the
|
|
925
|
+
* first pass. The legacy-JSON path runs an equivalent backfill inside
|
|
926
|
+
* `loadFromDisk()` on first load.
|
|
927
|
+
*
|
|
928
|
+
* Returns counts so callers can log/observe what happened.
|
|
929
|
+
*/
|
|
930
|
+
async backfillKindAndSchema() {
|
|
931
|
+
if (!this.isTaskFlowEnabled()) {
|
|
932
|
+
// Legacy path is backfilled during load. A no-op here is correct
|
|
933
|
+
// because the in-memory cache already reflects the backfill.
|
|
934
|
+
let backfilled = 0;
|
|
935
|
+
for (const init of this.initiatives.values()) {
|
|
936
|
+
if (init.kind === undefined) {
|
|
937
|
+
init.kind = 'task';
|
|
938
|
+
if (init.schemaVersion === undefined)
|
|
939
|
+
init.schemaVersion = 1;
|
|
940
|
+
backfilled++;
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
if (backfilled > 0)
|
|
944
|
+
this.saveToDisk();
|
|
945
|
+
return { backfilled, scanned: this.initiatives.size };
|
|
946
|
+
}
|
|
947
|
+
this.refreshCacheFromTaskFlow();
|
|
948
|
+
let backfilled = 0;
|
|
949
|
+
const records = Array.from(this.initiatives.values());
|
|
950
|
+
for (const init of records) {
|
|
951
|
+
if (init.kind !== undefined)
|
|
952
|
+
continue;
|
|
953
|
+
const patched = {
|
|
954
|
+
...init,
|
|
955
|
+
kind: 'task',
|
|
956
|
+
schemaVersion: init.schemaVersion ?? 1,
|
|
957
|
+
};
|
|
958
|
+
this.initiatives.set(init.id, patched);
|
|
959
|
+
await this.persistThroughTaskFlow(patched);
|
|
960
|
+
backfilled++;
|
|
961
|
+
}
|
|
962
|
+
return { backfilled, scanned: records.length };
|
|
963
|
+
}
|
|
643
964
|
/**
|
|
644
965
|
* Scan active initiatives for anything actionable. Empty items[] means
|
|
645
966
|
* "quiet day, don't spam the user."
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitiativeTracker.js","sourceRoot":"","sources":["../../src/core/InitiativeTracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InitiativeTracker.js","sourceRoot":"","sources":["../../src/core/InitiativeTracker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-05-
|
|
5
|
-
"instarVersion": "0.28.
|
|
4
|
+
"generatedAt": "2026-05-11T19:04:47.355Z",
|
|
5
|
+
"instarVersion": "0.28.86",
|
|
6
6
|
"entryCount": 187,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- bump: minor -->
|
|
4
|
+
<!-- Valid values: patch, minor, major -->
|
|
5
|
+
<!-- patch = bug fixes, refactors, test additions, doc updates -->
|
|
6
|
+
<!-- minor = new features, new APIs, new capabilities (backwards-compatible) -->
|
|
7
|
+
<!-- major = breaking changes to existing APIs or behavior -->
|
|
8
|
+
|
|
9
|
+
## What Changed
|
|
10
|
+
|
|
11
|
+
### Project-scope Phase 1a PR 1 — Initiative type extension
|
|
12
|
+
|
|
13
|
+
First of three PRs scaffolding the project-scope feature. This PR adds the
|
|
14
|
+
type-level surface that the round-runner, drift checker, and HTTP routes
|
|
15
|
+
will rely on in PR 2/3.
|
|
16
|
+
|
|
17
|
+
Spec source: `docs/specs/PROJECT-SCOPE-SPEC.md` § Phase 1.1.
|
|
18
|
+
|
|
19
|
+
- `Initiative` gains optional project-layer fields: `kind` (`'task' |
|
|
20
|
+
'project'`, immutable after creation, defaults to `'task'`),
|
|
21
|
+
`schemaVersion`, `version` (OCC counter), `parentProjectId`, plus
|
|
22
|
+
child-only fields (`pipelineStage`, `specPath`, `prNumber`,
|
|
23
|
+
`mergeCommitOid`, `ciCheckedAt`, `skipped*`, `unskippedAt`,
|
|
24
|
+
`driftCheck`) and project-only fields (`rounds[]`, `sourceDocs`,
|
|
25
|
+
`autoAdvance`, `telegramTopicId`, `ownerMachineId`, `targetRepoPath`,
|
|
26
|
+
`unacknowledgedAdvanceCount`, `firstLaunchAckAt`,
|
|
27
|
+
`lastAckedRoundIndex`, `awaitingReconciliation`,
|
|
28
|
+
`driftPromptTemplateVersion`). All optional → fully backward compatible.
|
|
29
|
+
- `InitiativeStatus` is extended with `'paused' | 'halted' |
|
|
30
|
+
'awaiting-user'`. Existing four values unchanged.
|
|
31
|
+
- New error classes for structural validators:
|
|
32
|
+
- `OccVersionMismatchError extends Error` (carries `currentVersion`)
|
|
33
|
+
- `KindImmutableError extends Error`
|
|
34
|
+
- `InvalidParentProjectError extends Error`
|
|
35
|
+
- `InitiativeTracker.update()` accepts `ifMatch?: number` for optimistic
|
|
36
|
+
concurrency. When provided and stale, throws `OccVersionMismatchError`
|
|
37
|
+
(the HTTP layer in PR 2 will translate this to 409 with body
|
|
38
|
+
`{currentVersion}`). When omitted, last-write-wins — backward compatible.
|
|
39
|
+
- `update()` rejects mutations of `kind` (`KindImmutableError`).
|
|
40
|
+
- Setting `parentProjectId` requires a bidirectional match: the named
|
|
41
|
+
parent must exist, be `kind: 'project'`, and list this child in one of
|
|
42
|
+
its `rounds[].itemIds`. Clearing (`null`) skips validation.
|
|
43
|
+
- One-time idempotent backfill: `loadFromDisk()` writes
|
|
44
|
+
`kind: 'task' + schemaVersion: 1` to legacy records on first load and
|
|
45
|
+
rewrites the file. Second load is a byte-identical no-op. A parallel
|
|
46
|
+
`backfillKindAndSchema()` public method handles TaskFlow-enabled installs.
|
|
47
|
+
- Serialization rule: `saveToDisk()` omits any field whose value is
|
|
48
|
+
`undefined`. Round-trip stability asserted in tests.
|
|
49
|
+
- New `setDigestCacheInvalidator(fn)` hook fires after every successful
|
|
50
|
+
mutation (`create`, `update`, `setPhaseStatus`, `remove`). Default is a
|
|
51
|
+
no-op; PR 3 wires the real invalidator for the project-scope digest cache.
|
|
52
|
+
|
|
53
|
+
## What to Tell Your User
|
|
54
|
+
|
|
55
|
+
Your agent now has the type-level scaffolding for multi-spec projects.
|
|
56
|
+
This PR alone doesn't change anything visible — no new commands, no new
|
|
57
|
+
dashboard tab, no new behavior on existing endpoints. It lays the
|
|
58
|
+
foundation so PR 2 can expose the projects HTTP routes and PR 3 can wire
|
|
59
|
+
the project skill and the session-start digest.
|
|
60
|
+
|
|
61
|
+
The only thing you might notice is a very small one-time write at server
|
|
62
|
+
startup if your initiatives file predates this version — your agent will
|
|
63
|
+
quietly mark existing records as task-type and add a schema version marker
|
|
64
|
+
so they work correctly alongside new project records.
|
|
65
|
+
|
|
66
|
+
## Summary of New Capabilities
|
|
67
|
+
|
|
68
|
+
| Capability | How to Use |
|
|
69
|
+
|-----------|-----------|
|
|
70
|
+
| Optional project-layer fields on `Initiative` | additive; existing callers unaffected |
|
|
71
|
+
| OCC on initiative updates | pass `ifMatch: <currentVersion>` in `InitiativeUpdateInput` to enforce |
|
|
72
|
+
| `kind` immutability gate | automatic — `update()` rejects `kind` mutation |
|
|
73
|
+
| Bidirectional `parentProjectId` validation | automatic on `update({ parentProjectId })` |
|
|
74
|
+
| Backfill of legacy initiative records | automatic on server start; idempotent |
|
|
75
|
+
| Digest-cache invalidator hook | `tracker.setDigestCacheInvalidator(fn)` (PR 3 wires it) |
|
|
76
|
+
|
|
77
|
+
## Evidence
|
|
78
|
+
|
|
79
|
+
Spec: `docs/specs/PROJECT-SCOPE-SPEC.md` § Phase 1.1.
|
|
80
|
+
|
|
81
|
+
- `tests/unit/InitiativeTracker.project.test.ts` — 26 new tests covering
|
|
82
|
+
backfill, kind immutability, parent validation, OCC, serialization
|
|
83
|
+
round-trip, status enum extension, and the invalidator hook.
|
|
84
|
+
- Full InitiativeTracker test sweep (87 tests across 4 suites) passes
|
|
85
|
+
unchanged.
|
|
86
|
+
- Side-effects review: `upgrades/side-effects/project-scope-phase1a-pr1.md`.
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# Side-Effects Review — project-scope Phase 1a PR 1 (Initiative type extension)
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `project-scope-phase1a-pr1`
|
|
4
|
+
**Date:** `2026-05-11`
|
|
5
|
+
**Author:** `echo`
|
|
6
|
+
**Second-pass reviewer:** `not required`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
Extends `src/core/InitiativeTracker.ts` with the project-layer scaffolding
|
|
11
|
+
called for by `docs/specs/PROJECT-SCOPE-SPEC.md` Phase 1.1: optional `kind`,
|
|
12
|
+
`schemaVersion`, `version` (OCC counter), `parentProjectId`, child-only
|
|
13
|
+
fields (`pipelineStage`, `specPath`, `prNumber`, `mergeCommitOid`,
|
|
14
|
+
`ciCheckedAt`, `skip*`, `unskippedAt`, `driftCheck`), and project-only
|
|
15
|
+
fields (`rounds[]`, `sourceDocs`, `autoAdvance`, `telegramTopicId`,
|
|
16
|
+
`ownerMachineId`, `targetRepoPath`, `unacknowledgedAdvanceCount`,
|
|
17
|
+
`firstLaunchAckAt`, `lastAckedRoundIndex`, `awaitingReconciliation`,
|
|
18
|
+
`driftPromptTemplateVersion`). The `InitiativeStatus` union is extended
|
|
19
|
+
with `'paused' | 'halted' | 'awaiting-user'` — pre-project-scope records
|
|
20
|
+
continue to use the original four values. Three new error classes
|
|
21
|
+
(`OccVersionMismatchError`, `KindImmutableError`,
|
|
22
|
+
`InvalidParentProjectError`) cover the validation paths; an
|
|
23
|
+
`omitUndefinedReplacer` and `null`-rejection guards keep serialization
|
|
24
|
+
stable; a digest-cache-invalidator hook (`setDigestCacheInvalidator`)
|
|
25
|
+
fires after every successful mutation (no-op default until PR 3 wires it).
|
|
26
|
+
A one-time idempotent backfill in `loadFromDisk()` writes
|
|
27
|
+
`kind: 'task' + schemaVersion: 1` to legacy records; the parallel
|
|
28
|
+
`backfillKindAndSchema()` public method handles the TaskFlow-enabled
|
|
29
|
+
install path. Tests: `tests/unit/InitiativeTracker.project.test.ts` (26
|
|
30
|
+
new tests).
|
|
31
|
+
|
|
32
|
+
## Decision-point inventory
|
|
33
|
+
|
|
34
|
+
- `Initiative.kind` immutability — **add** — `update()` throws
|
|
35
|
+
`KindImmutableError` if the caller tries to change `kind` away from its
|
|
36
|
+
current value.
|
|
37
|
+
- `InitiativeUpdateInput.ifMatch` (OCC) — **add** — when provided, must
|
|
38
|
+
equal current `version` or `OccVersionMismatchError` is thrown.
|
|
39
|
+
- `parentProjectId` bidirectional validator — **add** — `update()` rejects
|
|
40
|
+
attaching a child to a parent that doesn't exist, isn't `kind: 'project'`,
|
|
41
|
+
or doesn't list this child in any of its `rounds[].itemIds`.
|
|
42
|
+
|
|
43
|
+
No other decision points are touched. The new validators sit at the
|
|
44
|
+
persistence-layer edge and are structural — they accept/reject based on
|
|
45
|
+
type and reference integrity, not on conversational context.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 1. Over-block
|
|
50
|
+
|
|
51
|
+
**What legitimate inputs does this change reject that it shouldn't?**
|
|
52
|
+
|
|
53
|
+
No new rejections for legitimate input shapes. The new fields are all
|
|
54
|
+
optional and additive — pre-existing callers that don't touch them are
|
|
55
|
+
not affected. The OCC check only fires when `ifMatch` is explicitly
|
|
56
|
+
provided, so backward-compatible callers continue to enjoy unconditional
|
|
57
|
+
writes. The `parentProjectId` validator only fires when the caller is
|
|
58
|
+
actually setting that field; clearing (set to null) skips validation.
|
|
59
|
+
The `kind` immutability check only rejects values that differ from the
|
|
60
|
+
current kind — passing the same kind value is accepted as a no-op.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 2. Under-block
|
|
65
|
+
|
|
66
|
+
**What failure modes does this still miss?**
|
|
67
|
+
|
|
68
|
+
The OCC check is opt-in — old callers that don't provide `ifMatch` still
|
|
69
|
+
get last-write-wins semantics. This is intentional for backward
|
|
70
|
+
compatibility. The HTTP layer (PR 2) will enforce `If-Match` on the
|
|
71
|
+
project-kind `PATCH /projects/:id` endpoint specifically, where staleness
|
|
72
|
+
matters; legacy `/initiatives/*` keeps current semantics.
|
|
73
|
+
|
|
74
|
+
`parentProjectId` validation only fires inside `update()`. A caller
|
|
75
|
+
that sets `parentProjectId` at create time (via
|
|
76
|
+
`InitiativeCreateInput.parentProjectId`) bypasses the bidirectional
|
|
77
|
+
check. This is acceptable for Phase 1.1 because the round-runner and HTTP
|
|
78
|
+
layer (PR 2 / Phase 1.5) construct child initiatives and then attach them
|
|
79
|
+
in a separate update — the create-time field exists for migration/testing
|
|
80
|
+
shapes only. PR 2 may tighten this if the create flow uses it directly.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 3. Level-of-abstraction fit
|
|
85
|
+
|
|
86
|
+
**Is this at the right layer?**
|
|
87
|
+
|
|
88
|
+
Yes. Type extension, OCC counter, `kind` immutability, and the
|
|
89
|
+
`parentProjectId` bidirectional check all live at the persistence layer,
|
|
90
|
+
which is correct because the tracker is the single source of truth for
|
|
91
|
+
both project and task initiative records. The validators compare to
|
|
92
|
+
fields already owned by the tracker (`rounds[].itemIds`, `kind`,
|
|
93
|
+
`version`), so reaching outside the tracker would only add coupling, not
|
|
94
|
+
clarity. The HTTP layer (PR 2) will map the three error classes to 4xx
|
|
95
|
+
responses; that's a thin translation, not a re-implementation.
|
|
96
|
+
|
|
97
|
+
The digest-cache-invalidator hook is a deliberate inversion of
|
|
98
|
+
dependency — the tracker doesn't know about the cache (which is owned by
|
|
99
|
+
PR 3's project-scope digest), it just signals "something changed." This
|
|
100
|
+
keeps the layering clean.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 4. Signal vs authority compliance
|
|
105
|
+
|
|
106
|
+
**Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
|
|
107
|
+
|
|
108
|
+
**Does this change hold blocking authority with brittle logic?**
|
|
109
|
+
|
|
110
|
+
- [x] No — this change has no block/allow surface in the
|
|
111
|
+
conversational-content sense.
|
|
112
|
+
|
|
113
|
+
The three new validators (`KindImmutableError`,
|
|
114
|
+
`OccVersionMismatchError`, `InvalidParentProjectError`) are structural
|
|
115
|
+
schema/reference checks, not behavioral content gates. They fall under
|
|
116
|
+
the "When this principle does NOT apply" carve-out in
|
|
117
|
+
`docs/signal-vs-authority.md`: schema validators, type guards, and
|
|
118
|
+
referential-integrity checks at API edges are expected to be structural
|
|
119
|
+
and brittle by design — the right answer to "does this PATCH change an
|
|
120
|
+
immutable field?" is a deterministic yes/no, not an LLM judgment. The
|
|
121
|
+
spec calls this out explicitly in Phase 1.1.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 5. Interactions
|
|
126
|
+
|
|
127
|
+
**Does this interact with existing checks, recovery paths, or infrastructure?**
|
|
128
|
+
|
|
129
|
+
- **Shadowing:** The backfill in `loadFromDisk()` runs once at construction
|
|
130
|
+
time. It does not shadow other checks because it operates on raw JSON
|
|
131
|
+
before the cache is populated. The version-bump in `update()` runs
|
|
132
|
+
after all field assignments and before the persistence call; it
|
|
133
|
+
doesn't shadow any existing check.
|
|
134
|
+
- **Double-fire:** `setPhaseStatus()` and `update()` both bump `version`
|
|
135
|
+
and both call the digest-cache invalidator. They're separate code
|
|
136
|
+
paths called by different callers, never on the same logical write.
|
|
137
|
+
`create()` and `remove()` likewise each invalidate exactly once per
|
|
138
|
+
successful mutation. No double-fire.
|
|
139
|
+
- **Races:** The legacy-JSON path is single-process (one server, one
|
|
140
|
+
tracker instance). The TaskFlow path inherits TaskFlow's existing
|
|
141
|
+
concurrency model (controllerInstanceId + expectedRevision). PR 4 will
|
|
142
|
+
add multi-machine reconciliation via `awaitingReconciliation`; the
|
|
143
|
+
field is present in this PR but unused.
|
|
144
|
+
- **Feedback loops:** The digest cache invalidator hook is a one-way
|
|
145
|
+
signal; no feedback path is created. The default no-op cannot loop.
|
|
146
|
+
|
|
147
|
+
The backfill rewrite happens inside `loadFromDisk()`. The constructor
|
|
148
|
+
runs `loadFromDisk()` synchronously before any caller can touch the
|
|
149
|
+
tracker, so there's no race between backfill and the first read. If
|
|
150
|
+
`fs.writeFileSync` fails, the cache still reflects the backfilled shape
|
|
151
|
+
(in-memory) and the next mutation will rewrite to disk — the legacy
|
|
152
|
+
file remains valid because `kind`/`schemaVersion` are optional.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 6. External surfaces
|
|
157
|
+
|
|
158
|
+
**Does this change anything visible outside the immediate code path?**
|
|
159
|
+
|
|
160
|
+
- **Other agents on the same machine:** No. The new fields are all
|
|
161
|
+
optional; agents that read `Initiative` records without expecting them
|
|
162
|
+
see the same shape as before.
|
|
163
|
+
- **Other users of the install base:** No HTTP changes in this PR.
|
|
164
|
+
Endpoints in `routes-initiatives.ts` continue to operate on the
|
|
165
|
+
pre-existing field set. PR 2 will introduce `/projects` routes.
|
|
166
|
+
- **External systems:** None.
|
|
167
|
+
- **Persistent state:** Legacy `initiatives.json` files gain a one-time
|
|
168
|
+
backfill: each record acquires `kind: 'task'` and `schemaVersion: 1`.
|
|
169
|
+
This is forward-compatible — old code reading the file ignores the
|
|
170
|
+
new fields. The TaskFlow path stores the same shape in `stateJson`.
|
|
171
|
+
No schema migration is required for rollback (see § 7).
|
|
172
|
+
- **Timing / runtime conditions:** The backfill adds a small write at
|
|
173
|
+
startup the first time a server boots with this code on a legacy
|
|
174
|
+
install. Bounded by the number of legacy records; in practice
|
|
175
|
+
microseconds.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 7. Rollback cost
|
|
180
|
+
|
|
181
|
+
**If this turns out wrong in production, what's the back-out?**
|
|
182
|
+
|
|
183
|
+
- **Hot-fix release:** Revert the commit. All new fields are optional;
|
|
184
|
+
rollback restores the original behavior.
|
|
185
|
+
- **Data migration:** None required. Records that received
|
|
186
|
+
`kind: 'task' + schemaVersion: 1` from the backfill simply carry
|
|
187
|
+
those extra fields after rollback — old code ignores them. The
|
|
188
|
+
`version` field was added to in-memory records during this PR's
|
|
189
|
+
lifetime; if it survives the rollback in the on-disk file, old code
|
|
190
|
+
ignores it.
|
|
191
|
+
- **Agent state repair:** Not needed. The legacy JSON path tolerates
|
|
192
|
+
unknown extra fields. TaskFlow's `stateJson` is opaque to TaskFlow
|
|
193
|
+
itself; only the projector cares.
|
|
194
|
+
- **User visibility:** No user-visible regression during rollback. No
|
|
195
|
+
HTTP responses or dashboard surfaces change in this PR.
|
|
196
|
+
|
|
197
|
+
Rollback is a single `git revert` with no follow-up.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Conclusion
|
|
202
|
+
|
|
203
|
+
PR 1 of 3 for the project-scope Phase 1a build. All changes are
|
|
204
|
+
additive and structural: optional type fields, three error classes for
|
|
205
|
+
structural validators, a one-time idempotent backfill, and a no-op
|
|
206
|
+
digest-cache hook. The 26 new tests in
|
|
207
|
+
`tests/unit/InitiativeTracker.project.test.ts` cover backfill,
|
|
208
|
+
immutability, OCC, parent validation, serialization stability, the
|
|
209
|
+
extended status enum, and the invalidator hook. The full existing
|
|
210
|
+
InitiativeTracker suite (87 tests across 4 files) continues to pass.
|
|
211
|
+
Clear to ship.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Second-pass review (if required)
|
|
216
|
+
|
|
217
|
+
Not required. No new decision points, no sentinel/gate/watchdog
|
|
218
|
+
touched, no externally-visible behavior change. Per the
|
|
219
|
+
`/instar-dev` rubric in `skills/instar-dev/SKILL.md` § Phase 5, a
|
|
220
|
+
second-pass review is reserved for changes that alter conversational
|
|
221
|
+
gates or recovery infrastructure.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Evidence pointers
|
|
226
|
+
|
|
227
|
+
- `tests/unit/InitiativeTracker.project.test.ts` — 26 new tests, all
|
|
228
|
+
passing.
|
|
229
|
+
- Full InitiativeTracker test sweep:
|
|
230
|
+
`node node_modules/vitest/vitest.mjs run tests/unit/InitiativeTracker tests/unit/initiative-tracker-taskflow tests/unit/routes-initiatives` → 87 tests, all passing.
|
|
231
|
+
- `node_modules/typescript/bin/tsc --noEmit` → clean.
|
|
232
|
+
- Spec: `docs/specs/PROJECT-SCOPE-SPEC.md` Phase 1.1.
|