@osovv/vv-opencode 0.35.22 → 0.35.24
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/CHANGELOG.md +20 -0
- package/README.md +19 -2
- package/dist/commands/patch-provider.d.ts +8 -0
- package/dist/commands/patch-provider.js +8 -0
- package/dist/commands/patch-provider.js.map +1 -1
- package/dist/lib/opencode.js +4 -4
- package/dist/lib/opencode.js.map +1 -1
- package/dist/plugins/workflow/index.js +52 -39
- package/dist/plugins/workflow/index.js.map +1 -1
- package/dist/plugins/workflow/persistence.js +61 -3
- package/dist/plugins/workflow/persistence.js.map +1 -1
- package/dist/plugins/workflow/state.d.ts +79 -29
- package/dist/plugins/workflow/state.js +299 -121
- package/dist/plugins/workflow/state.js.map +1 -1
- package/dist/plugins/workflow/system-instruction.md +4 -1
- package/dist/plugins/workflow/tooling.d.ts +4 -2
- package/dist/plugins/workflow/tooling.js +94 -34
- package/dist/plugins/workflow/tooling.js.map +1 -1
- package/dist/plugins/workflow/transitions.d.ts +10 -5
- package/dist/plugins/workflow/transitions.js +105 -63
- package/dist/plugins/workflow/transitions.js.map +1 -1
- package/package.json +1 -1
- package/schemas/vvoc/v3.json +1 -1
- package/templates/agents/vv-controller.md +3 -3
- package/templates/skills/vv-execute/SKILL.md +1 -1
- package/templates/skills/vv-plan/SKILL.md +1 -1
- package/templates/skills/vv-review/SKILL.md +2 -2
|
@@ -1,43 +1,60 @@
|
|
|
1
1
|
// FILE: src/plugins/workflow/state.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.3.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Manage
|
|
5
|
-
// SCOPE: Session-scoped
|
|
6
|
-
// DEPENDS: [src/plugins/workflow/protocol.ts]
|
|
4
|
+
// PURPOSE: Manage session-scoped workflow work-item state with explicit workflow intent and collect-all review rounds.
|
|
5
|
+
// SCOPE: Session-scoped storage, id generation, idempotent open-by-key, explicit mode/reviewer metadata, launch-time in-flight tracking, result-time round aggregation, close gating, and review-round helpers.
|
|
6
|
+
// DEPENDS: [src/plugins/workflow/protocol.ts, src/plugins/workflow/transitions.ts]
|
|
7
7
|
// LINKS: [M-WORKFLOW-STATE]
|
|
8
8
|
// ROLE: RUNTIME
|
|
9
9
|
// MAP_MODE: EXPORTS
|
|
10
10
|
// END_MODULE_CONTRACT
|
|
11
11
|
//
|
|
12
12
|
// START_MODULE_MAP
|
|
13
|
+
// WorkItemMode - Explicit workflow intent stored on each work item.
|
|
14
|
+
// ReviewerRole - Domain reviewer role IDs accepted by work_item_open.
|
|
15
|
+
// ReviewerAgentName - Tracked reviewer subagent names mapped from reviewer roles.
|
|
16
|
+
// ReviewRound - Explicit current-round reviewer progress and results.
|
|
13
17
|
// WorkItemState - Allowed lifecycle states for a tracked work item.
|
|
14
|
-
// WorkItemRecord - Canonical in-memory state record for a work item.
|
|
15
|
-
// WorkItemStore - Store interface exposing
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// transitionWorkItemState - Applies deterministic state transitions and increments review counters.
|
|
25
|
-
// getReviewRound - Computes review round as max(specReviewCount, codeReviewCount).
|
|
26
|
-
// WorkItemStoreData - JSON-serializable store data structure for persistence.
|
|
18
|
+
// WorkItemRecord - Canonical in-memory and persisted state record for a work item.
|
|
19
|
+
// WorkItemStore - Store interface exposing open, launch, result, list, close, and snapshot operations.
|
|
20
|
+
// createWorkItemStore - Creates a new scoped in-memory work-item store.
|
|
21
|
+
// openWorkItem - Creates or returns an existing work item by idempotency key.
|
|
22
|
+
// beginTrackedLaunch - Validates tracked launch and marks reviewers in flight.
|
|
23
|
+
// applyTrackedResult - Applies parsed tracked output and aggregates review rounds.
|
|
24
|
+
// getWorkItem - Retrieves a work item by ID.
|
|
25
|
+
// listWorkItems - Lists session work items with optional closed inclusion.
|
|
26
|
+
// closeWorkItem - Closes only ready_to_close work items.
|
|
27
|
+
// getReviewRound - Computes visible review round from current or completed round state.
|
|
27
28
|
// END_MODULE_MAP
|
|
28
29
|
//
|
|
29
30
|
// START_CHANGE_SUMMARY
|
|
31
|
+
// LAST_CHANGE: [v0.3.0 - Replaced inferred sequential reviewer states with explicit work-item mode, reviewer intent, in-flight tracking, and collect-all review-round aggregation.]
|
|
30
32
|
// LAST_CHANGE: [v0.2.0 - Allowed fresh review-only work items to transition directly from reviewer outcomes.]
|
|
31
33
|
// LAST_CHANGE: [v0.1.2 - Required actor metadata for tracked transitions so reviewer counters cannot be bypassed by actor-less updates.]
|
|
32
34
|
// LAST_CHANGE: [v0.1.1 - Enforced deterministic transition invariants with sticky hard-stop states and optional closed-item listing support.]
|
|
33
35
|
// LAST_CHANGE: [v0.1.0 - Added session-scoped in-memory workflow state store with idempotent open, transitions, close/list/get, and review-round helpers.]
|
|
34
36
|
// END_CHANGE_SUMMARY
|
|
37
|
+
import { getAllowedNextAgents, getReviewerRoleForAgent, hasNeedsContextResult, isRoundSettled, resolveCompletedRoundState, } from "./transitions.js";
|
|
38
|
+
export const WORK_ITEM_MODES = ["implementation", "review_only"];
|
|
39
|
+
export const REVIEWER_ROLES = ["spec", "code"];
|
|
35
40
|
function createRecordLookupKey(sessionId, workItemId) {
|
|
36
41
|
return `${sessionId}::${workItemId}`;
|
|
37
42
|
}
|
|
43
|
+
function cloneRound(round) {
|
|
44
|
+
return {
|
|
45
|
+
...round,
|
|
46
|
+
requiredReviewers: [...round.requiredReviewers],
|
|
47
|
+
pendingReviewers: [...round.pendingReviewers],
|
|
48
|
+
inFlightReviewers: [...round.inFlightReviewers],
|
|
49
|
+
completedReviewers: [...round.completedReviewers],
|
|
50
|
+
results: { ...round.results },
|
|
51
|
+
};
|
|
52
|
+
}
|
|
38
53
|
function cloneRecord(record) {
|
|
39
54
|
return {
|
|
40
55
|
...record,
|
|
56
|
+
requiredReviewers: [...record.requiredReviewers],
|
|
57
|
+
...(record.currentRound ? { currentRound: cloneRound(record.currentRound) } : {}),
|
|
41
58
|
};
|
|
42
59
|
}
|
|
43
60
|
function createHeader(workItemId) {
|
|
@@ -46,7 +63,55 @@ function createHeader(workItemId) {
|
|
|
46
63
|
function toIsoNow() {
|
|
47
64
|
return new Date().toISOString();
|
|
48
65
|
}
|
|
66
|
+
function isReviewerRole(value) {
|
|
67
|
+
return value === "spec" || value === "code";
|
|
68
|
+
}
|
|
69
|
+
function canonicalizeReviewers(value) {
|
|
70
|
+
if (!Array.isArray(value) || value.length === 0)
|
|
71
|
+
return undefined;
|
|
72
|
+
if (!value.every(isReviewerRole))
|
|
73
|
+
return undefined;
|
|
74
|
+
const unique = new Set(value);
|
|
75
|
+
if (unique.size !== value.length)
|
|
76
|
+
return undefined;
|
|
77
|
+
return [...value].sort((left, right) => {
|
|
78
|
+
if (left === right)
|
|
79
|
+
return 0;
|
|
80
|
+
return left === "spec" ? -1 : 1;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function sameReviewerSet(left, right) {
|
|
84
|
+
return left.length === right.length && left.every((entry, index) => entry === right[index]);
|
|
85
|
+
}
|
|
86
|
+
function createReviewRound(requiredReviewers, round, now) {
|
|
87
|
+
return {
|
|
88
|
+
round,
|
|
89
|
+
requiredReviewers: [...requiredReviewers],
|
|
90
|
+
pendingReviewers: [...requiredReviewers],
|
|
91
|
+
inFlightReviewers: [],
|
|
92
|
+
completedReviewers: [],
|
|
93
|
+
results: {},
|
|
94
|
+
status: "active",
|
|
95
|
+
createdAt: now,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function createLaunchError(record, errorCode, message) {
|
|
99
|
+
return {
|
|
100
|
+
ok: false,
|
|
101
|
+
errorCode,
|
|
102
|
+
message,
|
|
103
|
+
allowedAgents: record ? getAllowedNextAgents(record) : [],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
49
106
|
function openWorkItemInStore(store, input) {
|
|
107
|
+
const requiredReviewers = canonicalizeReviewers(input.requiredReviewers);
|
|
108
|
+
if (!requiredReviewers) {
|
|
109
|
+
return {
|
|
110
|
+
ok: false,
|
|
111
|
+
errorCode: "INVALID_INPUT",
|
|
112
|
+
message: "INVALID_INPUT: requiredReviewers must be a non-empty canonical set of spec/code reviewers",
|
|
113
|
+
};
|
|
114
|
+
}
|
|
50
115
|
const sessionIndex = store.keyIndexBySession.get(input.sessionId) ??
|
|
51
116
|
(() => {
|
|
52
117
|
const index = new Map();
|
|
@@ -59,11 +124,13 @@ function openWorkItemInStore(store, input) {
|
|
|
59
124
|
if (!existing) {
|
|
60
125
|
sessionIndex.delete(input.key);
|
|
61
126
|
}
|
|
62
|
-
else if (existing.title !== input.title
|
|
127
|
+
else if (existing.title !== input.title ||
|
|
128
|
+
existing.mode !== input.mode ||
|
|
129
|
+
!sameReviewerSet(existing.requiredReviewers, requiredReviewers)) {
|
|
63
130
|
return {
|
|
64
131
|
ok: false,
|
|
65
132
|
errorCode: "WORK_ITEM_KEY_CONFLICT",
|
|
66
|
-
message: `WORK_ITEM_KEY_CONFLICT: key ${input.key} is already associated with
|
|
133
|
+
message: `WORK_ITEM_KEY_CONFLICT: key ${input.key} is already associated with different workflow intent`,
|
|
67
134
|
existingWorkItemId: existing.workItemId,
|
|
68
135
|
};
|
|
69
136
|
}
|
|
@@ -84,7 +151,13 @@ function openWorkItemInStore(store, input) {
|
|
|
84
151
|
workItemId,
|
|
85
152
|
key: input.key,
|
|
86
153
|
title: input.title,
|
|
87
|
-
|
|
154
|
+
mode: input.mode,
|
|
155
|
+
requiredReviewers,
|
|
156
|
+
state: input.mode === "review_only" ? "awaiting_reviews" : "open",
|
|
157
|
+
...(input.mode === "review_only"
|
|
158
|
+
? { currentRound: createReviewRound(requiredReviewers, 1, now) }
|
|
159
|
+
: {}),
|
|
160
|
+
completedReviewRoundCount: 0,
|
|
88
161
|
specReviewCount: 0,
|
|
89
162
|
codeReviewCount: 0,
|
|
90
163
|
createdAt: now,
|
|
@@ -103,55 +176,6 @@ function getWorkItemInStore(store, sessionId, workItemId) {
|
|
|
103
176
|
const record = store.records.get(createRecordLookupKey(sessionId, workItemId));
|
|
104
177
|
return record ? cloneRecord(record) : undefined;
|
|
105
178
|
}
|
|
106
|
-
function isTransitionAllowed(fromState, toState) {
|
|
107
|
-
const allowed = {
|
|
108
|
-
open: [
|
|
109
|
-
"awaiting_implementer",
|
|
110
|
-
"awaiting_spec_review",
|
|
111
|
-
"awaiting_code_review",
|
|
112
|
-
"needs_context",
|
|
113
|
-
"blocked",
|
|
114
|
-
"ready_to_close",
|
|
115
|
-
],
|
|
116
|
-
awaiting_implementer: ["awaiting_spec_review", "needs_context", "blocked"],
|
|
117
|
-
awaiting_spec_review: ["awaiting_code_review", "awaiting_implementer", "needs_context"],
|
|
118
|
-
awaiting_code_review: ["ready_to_close", "awaiting_implementer", "needs_context"],
|
|
119
|
-
ready_to_close: [],
|
|
120
|
-
needs_context: [],
|
|
121
|
-
blocked: [],
|
|
122
|
-
closed: [],
|
|
123
|
-
};
|
|
124
|
-
return allowed[fromState].includes(toState);
|
|
125
|
-
}
|
|
126
|
-
function getAllowedActorsForState(state) {
|
|
127
|
-
if (state === "open" || state === "awaiting_implementer") {
|
|
128
|
-
return state === "open"
|
|
129
|
-
? ["vv-implementer", "vv-spec-reviewer", "vv-code-reviewer"]
|
|
130
|
-
: ["vv-implementer"];
|
|
131
|
-
}
|
|
132
|
-
if (state === "awaiting_spec_review") {
|
|
133
|
-
return ["vv-spec-reviewer"];
|
|
134
|
-
}
|
|
135
|
-
if (state === "awaiting_code_review") {
|
|
136
|
-
return ["vv-code-reviewer"];
|
|
137
|
-
}
|
|
138
|
-
return [];
|
|
139
|
-
}
|
|
140
|
-
function isActorStateTransitionAllowed(actor, fromState, toState) {
|
|
141
|
-
if (!actor) {
|
|
142
|
-
return true;
|
|
143
|
-
}
|
|
144
|
-
if (actor === "vv-implementer") {
|
|
145
|
-
return ((fromState === "open" || fromState === "awaiting_implementer") &&
|
|
146
|
-
["awaiting_spec_review", "needs_context", "blocked"].includes(toState));
|
|
147
|
-
}
|
|
148
|
-
if (actor === "vv-spec-reviewer") {
|
|
149
|
-
return ((fromState === "open" || fromState === "awaiting_spec_review") &&
|
|
150
|
-
["awaiting_code_review", "awaiting_implementer", "needs_context"].includes(toState));
|
|
151
|
-
}
|
|
152
|
-
return ((fromState === "open" || fromState === "awaiting_code_review") &&
|
|
153
|
-
["ready_to_close", "awaiting_implementer", "needs_context"].includes(toState));
|
|
154
|
-
}
|
|
155
179
|
function listWorkItemsInStore(store, sessionId, options = {}) {
|
|
156
180
|
const includeClosed = options.includeClosed === true;
|
|
157
181
|
return [...store.records.values()]
|
|
@@ -180,6 +204,13 @@ function closeWorkItemInStore(store, sessionId, workItemId) {
|
|
|
180
204
|
message: `WORK_ITEM_ALREADY_CLOSED: ${workItemId} is already closed`,
|
|
181
205
|
};
|
|
182
206
|
}
|
|
207
|
+
if (existing.state !== "ready_to_close") {
|
|
208
|
+
return {
|
|
209
|
+
ok: false,
|
|
210
|
+
errorCode: "READY_TO_CLOSE_REQUIRED",
|
|
211
|
+
message: `READY_TO_CLOSE_REQUIRED: ${workItemId} is ${existing.state} and cannot be closed`,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
183
214
|
const now = toIsoNow();
|
|
184
215
|
const updated = {
|
|
185
216
|
...existing,
|
|
@@ -194,79 +225,217 @@ function closeWorkItemInStore(store, sessionId, workItemId) {
|
|
|
194
225
|
header: createHeader(workItemId),
|
|
195
226
|
};
|
|
196
227
|
}
|
|
197
|
-
function
|
|
228
|
+
function beginTrackedLaunchInStore(store, input) {
|
|
198
229
|
const lookupKey = createRecordLookupKey(input.sessionId, input.workItemId);
|
|
199
230
|
const existing = store.records.get(lookupKey);
|
|
200
231
|
if (!existing) {
|
|
232
|
+
return createLaunchError(undefined, "WORK_ITEM_NOT_FOUND", `WORK_ITEM_NOT_FOUND: ${input.workItemId}`);
|
|
233
|
+
}
|
|
234
|
+
if (existing.state === "closed") {
|
|
235
|
+
return createLaunchError(existing, "WORK_ITEM_ALREADY_CLOSED", `WORK_ITEM_ALREADY_CLOSED: ${input.workItemId} is already closed`);
|
|
236
|
+
}
|
|
237
|
+
const role = getReviewerRoleForAgent(input.agent);
|
|
238
|
+
if (!role) {
|
|
239
|
+
if (!getAllowedNextAgents(existing).includes(input.agent)) {
|
|
240
|
+
return createLaunchError(existing, "INVALID_NEXT_AGENT", `INVALID_NEXT_AGENT: ${input.agent} is not allowed for ${existing.state}`);
|
|
241
|
+
}
|
|
201
242
|
return {
|
|
202
|
-
ok:
|
|
203
|
-
|
|
204
|
-
|
|
243
|
+
ok: true,
|
|
244
|
+
record: cloneRecord(existing),
|
|
245
|
+
reviewRound: getReviewRound(existing),
|
|
205
246
|
};
|
|
206
247
|
}
|
|
207
|
-
|
|
248
|
+
const round = existing.currentRound;
|
|
249
|
+
if (existing.state !== "awaiting_reviews" || !round || round.status !== "active") {
|
|
250
|
+
return createLaunchError(existing, "REVIEW_ROUND_NOT_ACTIVE", `REVIEW_ROUND_NOT_ACTIVE: ${input.workItemId} has no active review round`);
|
|
251
|
+
}
|
|
252
|
+
if (!round.requiredReviewers.includes(role)) {
|
|
253
|
+
return createLaunchError(existing, "REVIEWER_NOT_REQUIRED", `REVIEWER_NOT_REQUIRED: ${role} is not required for ${input.workItemId}`);
|
|
254
|
+
}
|
|
255
|
+
if (hasNeedsContextResult(round)) {
|
|
256
|
+
return createLaunchError(existing, "REVIEW_ROUND_NEEDS_CONTEXT", `REVIEW_ROUND_NEEDS_CONTEXT: ${input.workItemId} is waiting for in-flight reviewers after NEEDS_CONTEXT`);
|
|
257
|
+
}
|
|
258
|
+
if (round.inFlightReviewers.includes(role)) {
|
|
259
|
+
return createLaunchError(existing, "REVIEWER_ALREADY_IN_FLIGHT", `REVIEWER_ALREADY_IN_FLIGHT: ${role} is already in flight for ${input.workItemId}`);
|
|
260
|
+
}
|
|
261
|
+
if (round.completedReviewers.includes(role)) {
|
|
262
|
+
return createLaunchError(existing, "REVIEWER_ALREADY_COMPLETED", `REVIEWER_ALREADY_COMPLETED: ${role} already completed for ${input.workItemId}`);
|
|
263
|
+
}
|
|
264
|
+
if (!round.pendingReviewers.includes(role)) {
|
|
265
|
+
return createLaunchError(existing, "INVALID_NEXT_AGENT", `INVALID_NEXT_AGENT: ${role} is not pending for ${input.workItemId}`);
|
|
266
|
+
}
|
|
267
|
+
const updatedRound = {
|
|
268
|
+
...round,
|
|
269
|
+
pendingReviewers: round.pendingReviewers.filter((reviewer) => reviewer !== role),
|
|
270
|
+
inFlightReviewers: [...round.inFlightReviewers, role],
|
|
271
|
+
};
|
|
272
|
+
const updated = {
|
|
273
|
+
...existing,
|
|
274
|
+
currentRound: updatedRound,
|
|
275
|
+
updatedAt: toIsoNow(),
|
|
276
|
+
};
|
|
277
|
+
store.records.set(lookupKey, updated);
|
|
278
|
+
return {
|
|
279
|
+
ok: true,
|
|
280
|
+
record: cloneRecord(updated),
|
|
281
|
+
reviewer: role,
|
|
282
|
+
reviewRound: updatedRound.round,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
function applyImplementerResult(existing, result, now) {
|
|
286
|
+
if (result.status === "DONE" || result.status === "DONE_WITH_CONCERNS") {
|
|
208
287
|
return {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
288
|
+
...existing,
|
|
289
|
+
state: "awaiting_reviews",
|
|
290
|
+
currentRound: createReviewRound(existing.requiredReviewers, existing.completedReviewRoundCount + 1, now),
|
|
291
|
+
updatedAt: now,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
if (result.status === "NEEDS_CONTEXT") {
|
|
295
|
+
return {
|
|
296
|
+
...existing,
|
|
297
|
+
state: "needs_context",
|
|
298
|
+
updatedAt: now,
|
|
212
299
|
};
|
|
213
300
|
}
|
|
214
|
-
|
|
215
|
-
|
|
301
|
+
return {
|
|
302
|
+
...existing,
|
|
303
|
+
state: "blocked",
|
|
304
|
+
updatedAt: now,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
function applyReviewerResult(existing, role, result, now) {
|
|
308
|
+
const round = existing.currentRound;
|
|
309
|
+
if (existing.state !== "awaiting_reviews" || !round || round.status !== "active") {
|
|
216
310
|
return {
|
|
217
311
|
ok: false,
|
|
218
|
-
errorCode: "
|
|
219
|
-
message: `
|
|
312
|
+
errorCode: "REVIEW_ROUND_NOT_ACTIVE",
|
|
313
|
+
message: `REVIEW_ROUND_NOT_ACTIVE: ${existing.workItemId} has no active review round`,
|
|
220
314
|
};
|
|
221
315
|
}
|
|
222
|
-
if (
|
|
316
|
+
if (!round.requiredReviewers.includes(role)) {
|
|
223
317
|
return {
|
|
224
318
|
ok: false,
|
|
225
|
-
errorCode: "
|
|
226
|
-
message: `
|
|
319
|
+
errorCode: "REVIEWER_NOT_REQUIRED",
|
|
320
|
+
message: `REVIEWER_NOT_REQUIRED: ${role} is not required for ${existing.workItemId}`,
|
|
227
321
|
};
|
|
228
322
|
}
|
|
229
|
-
if (
|
|
323
|
+
if (round.completedReviewers.includes(role) || round.results[role]) {
|
|
230
324
|
return {
|
|
231
325
|
ok: false,
|
|
232
|
-
errorCode: "
|
|
233
|
-
message: `
|
|
326
|
+
errorCode: "REVIEWER_ALREADY_COMPLETED",
|
|
327
|
+
message: `REVIEWER_ALREADY_COMPLETED: ${role} already completed for ${existing.workItemId}`,
|
|
234
328
|
};
|
|
235
329
|
}
|
|
236
|
-
if (!
|
|
330
|
+
if (!round.inFlightReviewers.includes(role)) {
|
|
237
331
|
return {
|
|
238
332
|
ok: false,
|
|
239
|
-
errorCode: "
|
|
240
|
-
message: `
|
|
333
|
+
errorCode: "REVIEWER_NOT_IN_FLIGHT",
|
|
334
|
+
message: `REVIEWER_NOT_IN_FLIGHT: ${role} was not in flight for ${existing.workItemId}`,
|
|
241
335
|
};
|
|
242
336
|
}
|
|
243
|
-
const
|
|
337
|
+
const status = result.status;
|
|
338
|
+
const reviewerResult = {
|
|
339
|
+
reviewer: role,
|
|
340
|
+
agent: result.agent,
|
|
341
|
+
status,
|
|
342
|
+
completedAt: now,
|
|
343
|
+
};
|
|
344
|
+
let updatedRound = {
|
|
345
|
+
...round,
|
|
346
|
+
inFlightReviewers: round.inFlightReviewers.filter((reviewer) => reviewer !== role),
|
|
347
|
+
completedReviewers: [...round.completedReviewers, role],
|
|
348
|
+
results: {
|
|
349
|
+
...round.results,
|
|
350
|
+
[role]: reviewerResult,
|
|
351
|
+
},
|
|
352
|
+
};
|
|
353
|
+
const aggregateComplete = isRoundSettled(updatedRound);
|
|
354
|
+
const nextState = aggregateComplete
|
|
355
|
+
? resolveCompletedRoundState(existing, updatedRound)
|
|
356
|
+
: "awaiting_reviews";
|
|
357
|
+
if (aggregateComplete) {
|
|
358
|
+
updatedRound = {
|
|
359
|
+
...updatedRound,
|
|
360
|
+
status: "completed",
|
|
361
|
+
completedAt: now,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
return {
|
|
244
365
|
...existing,
|
|
245
|
-
state:
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
366
|
+
state: nextState,
|
|
367
|
+
currentRound: updatedRound,
|
|
368
|
+
completedReviewRoundCount: aggregateComplete
|
|
369
|
+
? Math.max(existing.completedReviewRoundCount, updatedRound.round)
|
|
370
|
+
: existing.completedReviewRoundCount,
|
|
371
|
+
specReviewCount: role === "spec" ? existing.specReviewCount + 1 : existing.specReviewCount,
|
|
372
|
+
codeReviewCount: role === "code" ? existing.codeReviewCount + 1 : existing.codeReviewCount,
|
|
373
|
+
updatedAt: now,
|
|
249
374
|
};
|
|
375
|
+
}
|
|
376
|
+
function applyTrackedResultInStore(store, input) {
|
|
377
|
+
const lookupKey = createRecordLookupKey(input.sessionId, input.workItemId);
|
|
378
|
+
const existing = store.records.get(lookupKey);
|
|
379
|
+
if (!existing) {
|
|
380
|
+
return {
|
|
381
|
+
ok: false,
|
|
382
|
+
errorCode: "WORK_ITEM_NOT_FOUND",
|
|
383
|
+
message: `WORK_ITEM_NOT_FOUND: no work item ${input.workItemId} for session ${input.sessionId}`,
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
if (existing.state === "closed") {
|
|
387
|
+
return {
|
|
388
|
+
ok: false,
|
|
389
|
+
errorCode: "WORK_ITEM_ALREADY_CLOSED",
|
|
390
|
+
message: `WORK_ITEM_ALREADY_CLOSED: ${input.workItemId} is already closed`,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
const now = toIsoNow();
|
|
394
|
+
const fromState = existing.state;
|
|
395
|
+
let updated;
|
|
396
|
+
const role = getReviewerRoleForAgent(input.result.agent);
|
|
397
|
+
if (!role) {
|
|
398
|
+
if (existing.mode !== "implementation" ||
|
|
399
|
+
(existing.state !== "open" && existing.state !== "awaiting_implementer")) {
|
|
400
|
+
return {
|
|
401
|
+
ok: false,
|
|
402
|
+
errorCode: "INVALID_RESULT_AGENT",
|
|
403
|
+
message: `INVALID_RESULT_AGENT: ${input.result.agent} cannot produce a result for ${existing.state}`,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
updated = applyImplementerResult(existing, input.result, now);
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
updated = applyReviewerResult(existing, role, input.result, now);
|
|
410
|
+
}
|
|
411
|
+
if ("ok" in updated && updated.ok === false) {
|
|
412
|
+
return updated;
|
|
413
|
+
}
|
|
250
414
|
store.records.set(lookupKey, updated);
|
|
251
415
|
return {
|
|
252
416
|
ok: true,
|
|
253
417
|
record: cloneRecord(updated),
|
|
418
|
+
fromState,
|
|
419
|
+
toState: updated.state,
|
|
420
|
+
aggregateComplete: role !== undefined &&
|
|
421
|
+
updated.currentRound?.status === "completed" &&
|
|
422
|
+
fromState === "awaiting_reviews",
|
|
254
423
|
};
|
|
255
424
|
}
|
|
256
425
|
// START_CONTRACT: getReviewRound
|
|
257
|
-
// PURPOSE: Compute
|
|
258
|
-
// INPUTS: { record: Pick<WorkItemRecord, "
|
|
259
|
-
// OUTPUTS: { number -
|
|
426
|
+
// PURPOSE: Compute visible review round from current explicit round or completed round count.
|
|
427
|
+
// INPUTS: { record: Pick<WorkItemRecord, "completedReviewRoundCount" | "currentRound"> - review-round metadata }
|
|
428
|
+
// OUTPUTS: { number - current active/completed round number or completed round count }
|
|
260
429
|
// SIDE_EFFECTS: [none]
|
|
261
430
|
// LINKS: [M-WORKFLOW-STATE]
|
|
262
431
|
// END_CONTRACT: getReviewRound
|
|
263
432
|
export function getReviewRound(record) {
|
|
264
|
-
return
|
|
433
|
+
return record.currentRound?.round ?? record.completedReviewRoundCount;
|
|
265
434
|
}
|
|
266
435
|
// START_CONTRACT: createWorkItemStore
|
|
267
|
-
// PURPOSE: Create a session-scoped in-memory work-item store, optionally hydrated from
|
|
436
|
+
// PURPOSE: Create a session-scoped in-memory work-item store, optionally hydrated from persisted data.
|
|
268
437
|
// INPUTS: { hydrateData?: WorkItemStoreData | null - optional persisted store data to restore }
|
|
269
|
-
// OUTPUTS: { WorkItemStore - operation surface for open/get/list/close/
|
|
438
|
+
// OUTPUTS: { WorkItemStore - operation surface for open/get/list/close/launch/result operations }
|
|
270
439
|
// SIDE_EFFECTS: [none]
|
|
271
440
|
// LINKS: [M-WORKFLOW-STATE, M-WORKFLOW-PERSISTENCE]
|
|
272
441
|
// END_CONTRACT: createWorkItemStore
|
|
@@ -284,27 +453,48 @@ export function createWorkItemStore(hydrateData) {
|
|
|
284
453
|
};
|
|
285
454
|
return {
|
|
286
455
|
openWorkItem: (input) => openWorkItemInStore(data, input),
|
|
456
|
+
beginTrackedLaunch: (input) => beginTrackedLaunchInStore(data, input),
|
|
457
|
+
applyTrackedResult: (input) => applyTrackedResultInStore(data, input),
|
|
287
458
|
getWorkItem: (sessionId, workItemId) => getWorkItemInStore(data, sessionId, workItemId),
|
|
288
459
|
listWorkItems: (sessionId, options) => listWorkItemsInStore(data, sessionId, options),
|
|
289
460
|
closeWorkItem: (sessionId, workItemId) => closeWorkItemInStore(data, sessionId, workItemId),
|
|
290
|
-
transitionWorkItemState: (input) => transitionWorkItemStateInStore(data, input),
|
|
291
461
|
getReviewRound,
|
|
292
462
|
getStoreData: () => data,
|
|
293
463
|
};
|
|
294
464
|
}
|
|
295
465
|
// START_CONTRACT: openWorkItem
|
|
296
|
-
// PURPOSE: Open a work item idempotently by (sessionId, key) while enforcing
|
|
297
|
-
// INPUTS: { store:
|
|
298
|
-
// OUTPUTS: { OpenWorkItemResult - success with record/header or
|
|
466
|
+
// PURPOSE: Open a work item idempotently by (sessionId, key) while enforcing explicit workflow intent consistency.
|
|
467
|
+
// INPUTS: { store: WorkItemStore - backing store, input: OpenWorkItemInput - open parameters with mode and requiredReviewers }
|
|
468
|
+
// OUTPUTS: { OpenWorkItemResult - success with record/header or deterministic failure }
|
|
299
469
|
// SIDE_EFFECTS: [Mutates in-memory work-item store]
|
|
300
470
|
// LINKS: [M-WORKFLOW-STATE]
|
|
301
471
|
// END_CONTRACT: openWorkItem
|
|
302
472
|
export function openWorkItem(store, input) {
|
|
303
473
|
return store.openWorkItem(input);
|
|
304
474
|
}
|
|
475
|
+
// START_CONTRACT: beginTrackedLaunch
|
|
476
|
+
// PURPOSE: Validate a tracked launch and mark reviewer launches in flight for the current round.
|
|
477
|
+
// INPUTS: { store: WorkItemStore - backing store, input: { sessionId, workItemId, agent } - launch payload }
|
|
478
|
+
// OUTPUTS: { BeginTrackedLaunchResult - success with updated record or launch rejection }
|
|
479
|
+
// SIDE_EFFECTS: [Mutates in-memory work-item store for reviewer launches]
|
|
480
|
+
// LINKS: [M-WORKFLOW-STATE, M-WORKFLOW-TRANSITIONS]
|
|
481
|
+
// END_CONTRACT: beginTrackedLaunch
|
|
482
|
+
export function beginTrackedLaunch(store, input) {
|
|
483
|
+
return store.beginTrackedLaunch(input);
|
|
484
|
+
}
|
|
485
|
+
// START_CONTRACT: applyTrackedResult
|
|
486
|
+
// PURPOSE: Apply parsed tracked output, update explicit review rounds, and aggregate lifecycle state when rounds settle.
|
|
487
|
+
// INPUTS: { store: WorkItemStore - backing store, input: { sessionId, workItemId, result } - parsed result payload }
|
|
488
|
+
// OUTPUTS: { ApplyTrackedResultResult - success with updated record or result-state failure }
|
|
489
|
+
// SIDE_EFFECTS: [Mutates in-memory work-item store]
|
|
490
|
+
// LINKS: [M-WORKFLOW-STATE, M-WORKFLOW-TRANSITIONS]
|
|
491
|
+
// END_CONTRACT: applyTrackedResult
|
|
492
|
+
export function applyTrackedResult(store, input) {
|
|
493
|
+
return store.applyTrackedResult(input);
|
|
494
|
+
}
|
|
305
495
|
// START_CONTRACT: getWorkItem
|
|
306
496
|
// PURPOSE: Return a work item by session and work-item id.
|
|
307
|
-
// INPUTS: { store:
|
|
497
|
+
// INPUTS: { store: WorkItemStore - backing store, sessionId: string - session scope, workItemId: string - work item id }
|
|
308
498
|
// OUTPUTS: { WorkItemRecord | undefined - matching record when present }
|
|
309
499
|
// SIDE_EFFECTS: [none]
|
|
310
500
|
// LINKS: [M-WORKFLOW-STATE]
|
|
@@ -314,7 +504,7 @@ export function getWorkItem(store, sessionId, workItemId) {
|
|
|
314
504
|
}
|
|
315
505
|
// START_CONTRACT: listWorkItems
|
|
316
506
|
// PURPOSE: List session work items with optional closed-item inclusion.
|
|
317
|
-
// INPUTS: { store:
|
|
507
|
+
// INPUTS: { store: WorkItemStore - backing store, sessionId: string - session scope, options?: { includeClosed?: boolean } - list behavior options }
|
|
318
508
|
// OUTPUTS: { WorkItemRecord[] - records sorted by numeric work-item id }
|
|
319
509
|
// SIDE_EFFECTS: [none]
|
|
320
510
|
// LINKS: [M-WORKFLOW-STATE]
|
|
@@ -323,8 +513,8 @@ export function listWorkItems(store, sessionId, options) {
|
|
|
323
513
|
return store.listWorkItems(sessionId, options);
|
|
324
514
|
}
|
|
325
515
|
// START_CONTRACT: closeWorkItem
|
|
326
|
-
// PURPOSE: Close an existing
|
|
327
|
-
// INPUTS: { store:
|
|
516
|
+
// PURPOSE: Close an existing ready_to_close work item and stamp closedAt.
|
|
517
|
+
// INPUTS: { store: WorkItemStore - backing store, sessionId: string - session scope, workItemId: string - target id }
|
|
328
518
|
// OUTPUTS: { CloseWorkItemResult - success with updated record/header or failure code }
|
|
329
519
|
// SIDE_EFFECTS: [Mutates in-memory work-item store]
|
|
330
520
|
// LINKS: [M-WORKFLOW-STATE]
|
|
@@ -332,16 +522,4 @@ export function listWorkItems(store, sessionId, options) {
|
|
|
332
522
|
export function closeWorkItem(store, sessionId, workItemId) {
|
|
333
523
|
return store.closeWorkItem(sessionId, workItemId);
|
|
334
524
|
}
|
|
335
|
-
// START_CONTRACT: transitionWorkItemState
|
|
336
|
-
// PURPOSE: Update work-item state deterministically and maintain reviewer counters.
|
|
337
|
-
// INPUTS: { store: WorkItemStoreData - backing store, input: { sessionId, workItemId, state, actor? } - transition payload }
|
|
338
|
-
// OUTPUTS: { TransitionWorkItemStateResult - success with updated record or failure code }
|
|
339
|
-
// SIDE_EFFECTS: [Mutates in-memory work-item store]
|
|
340
|
-
// LINKS: [M-WORKFLOW-STATE]
|
|
341
|
-
// END_CONTRACT: transitionWorkItemState
|
|
342
|
-
// START_BLOCK_TRANSITION_STATE
|
|
343
|
-
export function transitionWorkItemState(store, input) {
|
|
344
|
-
return store.transitionWorkItemState(input);
|
|
345
|
-
}
|
|
346
|
-
// END_BLOCK_TRANSITION_STATE
|
|
347
525
|
//# sourceMappingURL=state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/plugins/workflow/state.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/plugins/workflow/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,16 @@ Workflow tracking is active for vv-managed review loops.
|
|
|
3
3
|
|
|
4
4
|
For tracked subagents (`vv-implementer`, `vv-spec-reviewer`, `vv-code-reviewer`):
|
|
5
5
|
|
|
6
|
-
1. Open work items first with `work_item_open`.
|
|
6
|
+
1. Open work items first with `work_item_open` using explicit `mode` and `requiredReviewers`.
|
|
7
|
+
- Implementation loop: `{ key, title, mode: "implementation", requiredReviewers: ["spec", "code"] }`
|
|
8
|
+
- Review-only report: `{ key, title, mode: "review_only", requiredReviewers: ["spec", "code"] }`
|
|
7
9
|
2. Reuse the returned `VVOC_WORK_ITEM_ID`.
|
|
8
10
|
3. Put that header as the first line in tracked subagent prompts.
|
|
9
11
|
4. Prefer lightweight XML-like tagged assignment bodies after the header, such as `<assignment>`, `<goal>`, `<context>`, and `<verification>`.
|
|
10
12
|
5. Treat `NEEDS_CONTEXT` as a hard stop.
|
|
11
13
|
6. Use `work_item_list` to inspect workflow state before retrying.
|
|
12
14
|
7. Avoid free-form review loops without explicit work-item identity.
|
|
15
|
+
8. In `review_only`, reviewer `FAIL` is a completed review finding result; collect all required reviewer results before closing, and do not route review-only failures to `vv-implementer`.
|
|
13
16
|
|
|
14
17
|
Use `work_item_close` explicitly when a work item is complete.
|
|
15
18
|
</workflow_protocol>
|