@context-forge/core 0.8.5 → 0.9.0
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/config/ConfigKeys.d.ts.map +1 -1
- package/dist/config/ConfigKeys.js +55 -0
- package/dist/config/ConfigKeys.js.map +1 -1
- package/dist/introspection/ConsistencyChecker.d.ts +24 -1
- package/dist/introspection/ConsistencyChecker.d.ts.map +1 -1
- package/dist/introspection/ConsistencyChecker.js +191 -31
- package/dist/introspection/ConsistencyChecker.js.map +1 -1
- package/dist/introspection/ProjectModelBuilder.d.ts.map +1 -1
- package/dist/introspection/ProjectModelBuilder.js +27 -10
- package/dist/introspection/ProjectModelBuilder.js.map +1 -1
- package/dist/introspection/WorkflowNavigator.d.ts +34 -1
- package/dist/introspection/WorkflowNavigator.d.ts.map +1 -1
- package/dist/introspection/WorkflowNavigator.js +231 -52
- package/dist/introspection/WorkflowNavigator.js.map +1 -1
- package/dist/introspection/index.d.ts +2 -0
- package/dist/introspection/index.d.ts.map +1 -1
- package/dist/introspection/index.js +2 -0
- package/dist/introspection/index.js.map +1 -1
- package/dist/introspection/parsers/documentDetector.d.ts +1 -1
- package/dist/introspection/parsers/documentDetector.d.ts.map +1 -1
- package/dist/introspection/parsers/documentDetector.js +30 -10
- package/dist/introspection/parsers/documentDetector.js.map +1 -1
- package/dist/introspection/parsers/slicePlanParser.d.ts.map +1 -1
- package/dist/introspection/parsers/slicePlanParser.js +5 -2
- package/dist/introspection/parsers/slicePlanParser.js.map +1 -1
- package/dist/introspection/parsers/statusNormalizer.d.ts +10 -2
- package/dist/introspection/parsers/statusNormalizer.d.ts.map +1 -1
- package/dist/introspection/parsers/statusNormalizer.js +25 -16
- package/dist/introspection/parsers/statusNormalizer.js.map +1 -1
- package/dist/introspection/parsers/taskFileParser.d.ts +6 -2
- package/dist/introspection/parsers/taskFileParser.d.ts.map +1 -1
- package/dist/introspection/parsers/taskFileParser.js +27 -18
- package/dist/introspection/parsers/taskFileParser.js.map +1 -1
- package/dist/introspection/reviewGate.d.ts +62 -0
- package/dist/introspection/reviewGate.d.ts.map +1 -0
- package/dist/introspection/reviewGate.js +164 -0
- package/dist/introspection/reviewGate.js.map +1 -0
- package/dist/introspection/statusDerivation.d.ts +23 -0
- package/dist/introspection/statusDerivation.d.ts.map +1 -0
- package/dist/introspection/statusDerivation.js +19 -0
- package/dist/introspection/statusDerivation.js.map +1 -0
- package/dist/introspection/types.d.ts +22 -3
- package/dist/introspection/types.d.ts.map +1 -1
- package/dist/introspection/types.js +7 -1
- package/dist/introspection/types.js.map +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +1 -1
- package/dist/node.js.map +1 -1
- package/dist/schema/frontmatterSchema.d.ts.map +1 -1
- package/dist/schema/frontmatterSchema.js +4 -0
- package/dist/schema/frontmatterSchema.js.map +1 -1
- package/dist/schema/projectSchema.d.ts +4 -0
- package/dist/schema/projectSchema.d.ts.map +1 -1
- package/dist/schema/projectSchema.js +2 -0
- package/dist/schema/projectSchema.js.map +1 -1
- package/dist/schema/resolveFileByIndex.d.ts +12 -0
- package/dist/schema/resolveFileByIndex.d.ts.map +1 -1
- package/dist/schema/resolveFileByIndex.js +29 -0
- package/dist/schema/resolveFileByIndex.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
|
+
import { STATUS } from './types.js';
|
|
3
4
|
import { parseSlicePlan } from './parsers/slicePlanParser.js';
|
|
4
5
|
import { parseTaskFile } from './parsers/taskFileParser.js';
|
|
5
6
|
import { detectDocuments } from './parsers/documentDetector.js';
|
|
7
|
+
import { parseFrontmatter } from './parsers/frontmatterParser.js';
|
|
8
|
+
import { normalizeStatus } from './parsers/statusNormalizer.js';
|
|
9
|
+
import { deriveEntryStatus } from './statusDerivation.js';
|
|
6
10
|
import { resolveArtifactPath } from '../schema/resolveFileByIndex.js';
|
|
11
|
+
import { ARCHITECTURE_PHASE } from '../schema/projectSchema.js';
|
|
7
12
|
import { resolveInitiativePlanPath } from './ArtifactIntrospector.js';
|
|
13
|
+
import { evaluateReviewGate } from './reviewGate.js';
|
|
8
14
|
/**
|
|
9
15
|
* Extract numeric slice index from a fileSlice value like "165-slice.workflow-navigator.md".
|
|
10
16
|
* Returns null if no leading number found.
|
|
@@ -35,6 +41,10 @@ function extractSliceName(fileSlice) {
|
|
|
35
41
|
* from project data and filesystem state.
|
|
36
42
|
*/
|
|
37
43
|
export class WorkflowNavigator {
|
|
44
|
+
config;
|
|
45
|
+
constructor(config) {
|
|
46
|
+
this.config = config;
|
|
47
|
+
}
|
|
38
48
|
/**
|
|
39
49
|
* Derive the full workflow status for a project.
|
|
40
50
|
*/
|
|
@@ -64,7 +74,7 @@ export class WorkflowNavigator {
|
|
|
64
74
|
* Uses a priority-ordered state machine based on getStatus().
|
|
65
75
|
*/
|
|
66
76
|
async getNext(project) {
|
|
67
|
-
//
|
|
77
|
+
// GUARD: no-project-path
|
|
68
78
|
if (!project.projectPath) {
|
|
69
79
|
return {
|
|
70
80
|
recommendation: 'Set projectPath',
|
|
@@ -75,7 +85,7 @@ export class WorkflowNavigator {
|
|
|
75
85
|
}
|
|
76
86
|
const status = await this.getStatus(project);
|
|
77
87
|
const slice = status.activeSlice;
|
|
78
|
-
//
|
|
88
|
+
// GUARD: no-active-slice
|
|
79
89
|
if (!slice || slice.status === 'no-active-slice') {
|
|
80
90
|
// Determine whether the arch file actually exists on disk
|
|
81
91
|
const archRelPath = project.fileArch ? resolveArtifactPath('fileArch', project.fileArch) : null;
|
|
@@ -87,6 +97,31 @@ export class WorkflowNavigator {
|
|
|
87
97
|
// not-started one — architecture and slice plan are Phase 2/3 outputs and
|
|
88
98
|
// never exist yet at the end of Phase 1, so they cannot disambiguate it.
|
|
89
99
|
const initiativePlanExists = (await resolveInitiativePlanPath(project.projectPath)) !== null;
|
|
100
|
+
// pre-slice-plan / 'arch' gate — evaluated before first-run guidance, and regardless
|
|
101
|
+
// of whether a slice plan already exists, because the arch review requirement does not
|
|
102
|
+
// expire once planning moves on (#59 Gap 1). Every first-run branch downstream (FR-3b,
|
|
103
|
+
// FR-4, and the fallback below) sits inside this same no-active-slice guard, so the gate
|
|
104
|
+
// must intercept all of them, not just the fallback that runs after
|
|
105
|
+
// detectFirstRunContext returns null.
|
|
106
|
+
if (archFileExists) {
|
|
107
|
+
const archIndex = extractSliceIndex(project.fileArch);
|
|
108
|
+
if (archIndex !== null) {
|
|
109
|
+
const gate = await this.evaluateGate(project.projectPath, archIndex, 'preSlicePlan');
|
|
110
|
+
if (gate) {
|
|
111
|
+
return gate.status === 'pending-review'
|
|
112
|
+
? {
|
|
113
|
+
recommendation: 'Review required before creating the slice plan',
|
|
114
|
+
rationale: gate.rationale,
|
|
115
|
+
summary: `Architecture ${archIndex} needs an ${gate.reviewType} review before the slice plan can be created`,
|
|
116
|
+
}
|
|
117
|
+
: {
|
|
118
|
+
recommendation: `Blocked: review verdict does not clear threshold`,
|
|
119
|
+
rationale: gate.rationale,
|
|
120
|
+
summary: `Architecture ${archIndex} review does not clear — blocked before slice plan creation`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
90
125
|
// First-run guidance: enriched recommendations for sparse/fresh project states (FR-1–FR-4)
|
|
91
126
|
const firstRunAction = this.detectFirstRunContext(project, archFileExists, initiativePlanExists, status);
|
|
92
127
|
if (firstRunAction !== null) {
|
|
@@ -99,7 +134,10 @@ export class WorkflowNavigator {
|
|
|
99
134
|
rationale: project.fileArch
|
|
100
135
|
? `Architecture is set to '${project.fileArch}' but the file does not exist yet. Create the architecture document before planning slices.`
|
|
101
136
|
: 'No architecture document or slice plan is configured. Architecture defines the high-level structure before slicing into deliverable increments.',
|
|
102
|
-
suggestedCommand:
|
|
137
|
+
suggestedCommand: project.fileArch
|
|
138
|
+
? `cf set phase '${ARCHITECTURE_PHASE}'`
|
|
139
|
+
: 'cf set arch <index>',
|
|
140
|
+
...(project.fileArch ? { phase: ARCHITECTURE_PHASE } : {}),
|
|
103
141
|
summary: 'Create an architecture document to define project structure',
|
|
104
142
|
};
|
|
105
143
|
}
|
|
@@ -125,8 +163,8 @@ export class WorkflowNavigator {
|
|
|
125
163
|
summary: 'Create a slice plan from the architecture',
|
|
126
164
|
};
|
|
127
165
|
}
|
|
128
|
-
// Slice plan exists but no active slice — suggest first
|
|
129
|
-
const firstEntry = status.slicePlan.entries
|
|
166
|
+
// Slice plan exists but no active slice — suggest first not-yet-complete entry
|
|
167
|
+
const firstEntry = await this.findFirstNotCompleteEntry(project.projectPath, status.slicePlan.entries);
|
|
130
168
|
const sliceCmd = firstEntry ? `cf set slice ${firstEntry.index}` : 'cf set slice <index>';
|
|
131
169
|
const sliceLabel = firstEntry ? `slice ${firstEntry.index}: ${firstEntry.name}` : 'your first slice';
|
|
132
170
|
return {
|
|
@@ -150,13 +188,13 @@ export class WorkflowNavigator {
|
|
|
150
188
|
warnings.push(`Slice ${slice.index} is outside the ${hundredBlock(archIndex)}-band of architecture '${project.fileArch}'.`);
|
|
151
189
|
}
|
|
152
190
|
}
|
|
153
|
-
//
|
|
191
|
+
// GUARD: arch-file-missing — arch set but file doesn't exist; recommend creating arch first
|
|
154
192
|
if (project.fileArch && !archFileExists) {
|
|
155
193
|
return {
|
|
156
194
|
recommendation: 'Create architecture document',
|
|
157
195
|
rationale: `Architecture '${project.fileArch}' is set but the file does not exist. Create the architecture document before designing slices.`,
|
|
158
|
-
suggestedCommand:
|
|
159
|
-
phase:
|
|
196
|
+
suggestedCommand: `cf set phase '${ARCHITECTURE_PHASE}'`,
|
|
197
|
+
phase: ARCHITECTURE_PHASE,
|
|
160
198
|
slice: project.fileSlice,
|
|
161
199
|
summary: `Create architecture '${project.fileArch}' before proceeding with slice ${slice.index ?? slice.name}`,
|
|
162
200
|
...(warnings.length > 0 ? { warnings } : {}),
|
|
@@ -173,7 +211,7 @@ export class WorkflowNavigator {
|
|
|
173
211
|
}
|
|
174
212
|
return result;
|
|
175
213
|
};
|
|
176
|
-
//
|
|
214
|
+
// LIFECYCLE: needs-design (cf Phase 4)
|
|
177
215
|
if (slice.status === 'needs-design') {
|
|
178
216
|
return enrich({
|
|
179
217
|
recommendation: 'Create slice design (Phase 4)',
|
|
@@ -183,7 +221,7 @@ export class WorkflowNavigator {
|
|
|
183
221
|
summary: `Create design for slice ${slice.index ?? slice.name}`,
|
|
184
222
|
});
|
|
185
223
|
}
|
|
186
|
-
//
|
|
224
|
+
// LIFECYCLE: needs-tasks (cf Phase 5)
|
|
187
225
|
if (slice.status === 'needs-tasks') {
|
|
188
226
|
return enrich({
|
|
189
227
|
recommendation: 'Create task breakdown (Phase 5)',
|
|
@@ -193,7 +231,7 @@ export class WorkflowNavigator {
|
|
|
193
231
|
summary: `Create task breakdown for slice ${slice.index ?? slice.name}`,
|
|
194
232
|
});
|
|
195
233
|
}
|
|
196
|
-
//
|
|
234
|
+
// LIFECYCLE: in-implementation (cf Phase 6)
|
|
197
235
|
if (slice.status === 'in-implementation') {
|
|
198
236
|
const remaining = slice.taskProgress
|
|
199
237
|
? slice.taskProgress.total - slice.taskProgress.completed
|
|
@@ -206,10 +244,39 @@ export class WorkflowNavigator {
|
|
|
206
244
|
summary: `Continue slice ${slice.index ?? slice.name} — ${remaining} tasks remaining`,
|
|
207
245
|
});
|
|
208
246
|
}
|
|
209
|
-
//
|
|
247
|
+
// LIFECYCLE: review-gate — routes the pending-review/review-failed statuses that
|
|
248
|
+
// deriveSliceStatus() already computed (TD-3: status derivation is the single source
|
|
249
|
+
// of truth; this branch only routes, it does not re-evaluate the gate).
|
|
250
|
+
if (slice.status === 'pending-review') {
|
|
251
|
+
return enrich({
|
|
252
|
+
recommendation: 'Review required before advancing',
|
|
253
|
+
rationale: slice.gateInfo?.rationale ?? `Slice ${slice.index ?? slice.name} requires a review before proceeding.`,
|
|
254
|
+
slice: project.fileSlice,
|
|
255
|
+
summary: `Review required for slice ${slice.index ?? slice.name}`,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
if (slice.status === 'review-failed') {
|
|
259
|
+
return enrich({
|
|
260
|
+
recommendation: 'Blocked: review verdict does not clear threshold',
|
|
261
|
+
rationale: slice.gateInfo?.rationale ?? `Slice ${slice.index ?? slice.name} is blocked by a review that does not clear.`,
|
|
262
|
+
slice: project.fileSlice,
|
|
263
|
+
summary: `Blocked — slice ${slice.index ?? slice.name} review does not clear`,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
// LIFECYCLE: complete-advance — slice complete → recommend next slice (not a phase)
|
|
210
267
|
if (slice.status === 'complete' && status.slicePlan) {
|
|
211
|
-
const nextEntry = status.slicePlan.entries
|
|
268
|
+
const nextEntry = await this.findFirstNotCompleteEntry(project.projectPath, status.slicePlan.entries);
|
|
212
269
|
if (nextEntry) {
|
|
270
|
+
const nextDerived = await this.resolveEntryStatus(project.projectPath, nextEntry);
|
|
271
|
+
if (nextDerived === STATUS.InProgress) {
|
|
272
|
+
return enrich({
|
|
273
|
+
recommendation: `Continue slice ${nextEntry.index}: ${nextEntry.name}`,
|
|
274
|
+
rationale: `Current slice is complete. Slice ${nextEntry.index}: ${nextEntry.name} is in progress — continue it rather than starting a new slice.`,
|
|
275
|
+
suggestedCommand: `cf set slice ${nextEntry.index}`,
|
|
276
|
+
slice: project.fileSlice,
|
|
277
|
+
summary: `Continue slice ${nextEntry.index}: ${nextEntry.name}`,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
213
280
|
return enrich({
|
|
214
281
|
recommendation: `Advance to slice ${nextEntry.index}: ${nextEntry.name}`,
|
|
215
282
|
rationale: `Current slice is complete. The next unstarted slice in the plan is ${nextEntry.index}: ${nextEntry.name}.`,
|
|
@@ -225,7 +292,7 @@ export class WorkflowNavigator {
|
|
|
225
292
|
summary: 'Slice plan complete — review architecture for next initiative',
|
|
226
293
|
});
|
|
227
294
|
}
|
|
228
|
-
//
|
|
295
|
+
// GUARD: complete-no-plan (fallback) — slice complete but no slice plan
|
|
229
296
|
if (slice.status === 'complete') {
|
|
230
297
|
if (project.fileSlicePlan) {
|
|
231
298
|
const inPhase3 = currentPhase.startsWith('Phase 3');
|
|
@@ -273,7 +340,7 @@ export class WorkflowNavigator {
|
|
|
273
340
|
/**
|
|
274
341
|
* Returns enriched guidance for sparse/fresh project states (FR-1–FR-4).
|
|
275
342
|
* Only called when no active slice is set AND the project lacks established artifacts.
|
|
276
|
-
* Returns null if no first-run condition matches (falls through to
|
|
343
|
+
* Returns null if no first-run condition matches (falls through to the `no-active-slice` guard).
|
|
277
344
|
*/
|
|
278
345
|
detectFirstRunContext(project, archFileExists, initiativePlanExists, status) {
|
|
279
346
|
// Only applies to projects without both arch and slice plan
|
|
@@ -329,7 +396,7 @@ export class WorkflowNavigator {
|
|
|
329
396
|
return {
|
|
330
397
|
recommendation: 'Initiative plan exists. Advance to Phase 2 (Architecture).',
|
|
331
398
|
rationale: 'Your initiative plan is complete. The next step is to define the high-level structure — set your phase to Phase 2 (Architecture) and create an architecture document.',
|
|
332
|
-
suggestedCommand:
|
|
399
|
+
suggestedCommand: `cf set phase '${ARCHITECTURE_PHASE}'`,
|
|
333
400
|
summary: 'Advance to Phase 2 — set phase and create an architecture document',
|
|
334
401
|
};
|
|
335
402
|
}
|
|
@@ -383,67 +450,179 @@ export class WorkflowNavigator {
|
|
|
383
450
|
if (index === null) {
|
|
384
451
|
return base;
|
|
385
452
|
}
|
|
386
|
-
try
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
const
|
|
399
|
-
if (
|
|
400
|
-
return {
|
|
453
|
+
// Note: no outer try/catch swallowing here. detectDocuments and
|
|
454
|
+
// evaluateReviewGate never throw for missing files, and parseTaskFileSafe
|
|
455
|
+
// below only propagates a genuine resolution failure (task file present
|
|
456
|
+
// but unreadable) — TD-2a requires that to surface, not silently degrade
|
|
457
|
+
// this active slice's status back to a misleading `base` state.
|
|
458
|
+
const docs = await detectDocuments(projectPath, index);
|
|
459
|
+
// No slice design file → needs-design
|
|
460
|
+
if (!docs.sliceDesign) {
|
|
461
|
+
return { ...base, status: 'needs-design' };
|
|
462
|
+
}
|
|
463
|
+
// Design exists but no task file → needs-tasks (pre-tasks / 'slice' gate)
|
|
464
|
+
if (!docs.taskFile) {
|
|
465
|
+
const gate = await this.evaluateGate(projectPath, index, 'preTasks');
|
|
466
|
+
if (gate) {
|
|
467
|
+
return {
|
|
468
|
+
...base,
|
|
469
|
+
status: gate.status,
|
|
470
|
+
gateInfo: { reviewType: gate.reviewType, rationale: gate.rationale },
|
|
471
|
+
};
|
|
401
472
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
473
|
+
return { ...base, status: 'needs-tasks' };
|
|
474
|
+
}
|
|
475
|
+
// Task file exists — parse to determine progress
|
|
476
|
+
const taskPaths = docs.taskFile.map((p) => join(projectPath, p));
|
|
477
|
+
const taskResult = await this.parseTaskFileSafe(taskPaths);
|
|
478
|
+
if (!taskResult || taskResult.totalTasks === 0) {
|
|
479
|
+
return { ...base, status: 'needs-tasks' };
|
|
480
|
+
}
|
|
481
|
+
const taskProgress = {
|
|
482
|
+
completed: taskResult.completedTasks,
|
|
483
|
+
total: taskResult.totalTasks,
|
|
484
|
+
inferredStatus: taskResult.inferredStatus,
|
|
485
|
+
};
|
|
486
|
+
if (taskResult.inferredStatus === STATUS.Complete) {
|
|
487
|
+
// pre-advance / 'code' gate — implementation done, code review owed before advancing
|
|
488
|
+
const gate = await this.evaluateGate(projectPath, index, 'preAdvance');
|
|
489
|
+
if (gate) {
|
|
490
|
+
return {
|
|
491
|
+
...base,
|
|
492
|
+
status: gate.status,
|
|
493
|
+
taskProgress,
|
|
494
|
+
gateInfo: { reviewType: gate.reviewType, rationale: gate.rationale },
|
|
495
|
+
};
|
|
409
496
|
}
|
|
410
|
-
return { ...base, status: '
|
|
497
|
+
return { ...base, status: 'complete', taskProgress };
|
|
411
498
|
}
|
|
412
|
-
|
|
413
|
-
|
|
499
|
+
// Task file freshly created (zero progress) → pre-implementation / 'tasks' gate.
|
|
500
|
+
// Fires only at the transition into implementation, not on every partial-progress call.
|
|
501
|
+
if (taskResult.completedTasks === 0) {
|
|
502
|
+
const gate = await this.evaluateGate(projectPath, index, 'preImplementation');
|
|
503
|
+
if (gate) {
|
|
504
|
+
return {
|
|
505
|
+
...base,
|
|
506
|
+
status: gate.status,
|
|
507
|
+
taskProgress,
|
|
508
|
+
gateInfo: { reviewType: gate.reviewType, rationale: gate.rationale },
|
|
509
|
+
};
|
|
510
|
+
}
|
|
414
511
|
}
|
|
512
|
+
return { ...base, status: 'in-implementation', taskProgress };
|
|
415
513
|
}
|
|
514
|
+
/**
|
|
515
|
+
* Evaluates the review gate for a boundary. Returns null when gating is off (no config,
|
|
516
|
+
* or review_enabled false) — caller keeps its existing status, byte-identical to pre-241
|
|
517
|
+
* behavior. Returns a GateEvaluation when the boundary's review is absent (pending-review)
|
|
518
|
+
* or present-but-not-clearing (review-failed).
|
|
519
|
+
*/
|
|
520
|
+
async evaluateGate(projectPath, index, boundary) {
|
|
521
|
+
if (!this.config)
|
|
522
|
+
return null;
|
|
523
|
+
return evaluateReviewGate(projectPath, index, boundary, this.config);
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Parses a task file, returning null only when the file is genuinely
|
|
527
|
+
* absent. A resolution failure (permission denied, EISDIR, etc.) is not
|
|
528
|
+
* "absent" (TD-2a) and propagates rather than being coerced to null.
|
|
529
|
+
*/
|
|
416
530
|
async parseTaskFileSafe(taskPaths) {
|
|
417
531
|
try {
|
|
418
532
|
return await parseTaskFile(taskPaths);
|
|
419
533
|
}
|
|
420
|
-
catch {
|
|
421
|
-
|
|
534
|
+
catch (err) {
|
|
535
|
+
if (err instanceof Error && 'code' in err && err.code === 'ENOENT') {
|
|
536
|
+
return null;
|
|
537
|
+
}
|
|
538
|
+
throw err;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Resolve a plan entry's derived status by looking up its task file and
|
|
543
|
+
* slice-design frontmatter (if present), then applying deriveEntryStatus.
|
|
544
|
+
*
|
|
545
|
+
* TD-2a: a signal that exists but fails to resolve (task file present but
|
|
546
|
+
* unreadable, frontmatter status present but unrecognized) is a resolution
|
|
547
|
+
* failure, not an absent signal — it propagates rather than falling through
|
|
548
|
+
* to the checkbox. A signal that is genuinely absent (no task file, no
|
|
549
|
+
* slice design) is a normal `undefined` input to the lattice.
|
|
550
|
+
*/
|
|
551
|
+
async resolveEntryStatus(projectPath, entry) {
|
|
552
|
+
const docs = await detectDocuments(projectPath, entry.index);
|
|
553
|
+
let taskInferredStatus;
|
|
554
|
+
if (docs.taskFile) {
|
|
555
|
+
const taskPaths = docs.taskFile.map((p) => join(projectPath, p));
|
|
556
|
+
const taskResult = await parseTaskFile(taskPaths);
|
|
557
|
+
taskInferredStatus = taskResult.inferredStatus;
|
|
558
|
+
}
|
|
559
|
+
let frontmatterStatus;
|
|
560
|
+
if (docs.sliceDesign) {
|
|
561
|
+
const fm = await parseFrontmatter(join(projectPath, docs.sliceDesign));
|
|
562
|
+
if (fm.found) {
|
|
563
|
+
const normalized = normalizeStatus(fm.data.status);
|
|
564
|
+
if (normalized === undefined) {
|
|
565
|
+
throw new Error(`Slice ${entry.index}: slice-design frontmatter status "${fm.data.status}" is not a recognized status`);
|
|
566
|
+
}
|
|
567
|
+
frontmatterStatus = normalized;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
return deriveEntryStatus({
|
|
571
|
+
frontmatterStatus,
|
|
572
|
+
taskInferredStatus,
|
|
573
|
+
isChecked: entry.isChecked,
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Find the first plan entry whose derived status is not complete/deprecated.
|
|
578
|
+
* Replaces the old `entries.find((e) => !e.isChecked)` — the direct #56 fix:
|
|
579
|
+
* a slice with all tasks complete but an unchecked plan checkbox is no
|
|
580
|
+
* longer selected as "next unstarted".
|
|
581
|
+
*/
|
|
582
|
+
async findFirstNotCompleteEntry(projectPath, entries) {
|
|
583
|
+
for (const entry of entries) {
|
|
584
|
+
const derived = await this.resolveEntryStatus(projectPath, entry);
|
|
585
|
+
if (derived !== STATUS.Complete && derived !== STATUS.Deprecated) {
|
|
586
|
+
return entry;
|
|
587
|
+
}
|
|
422
588
|
}
|
|
589
|
+
return undefined;
|
|
423
590
|
}
|
|
424
591
|
async parseSlicePlanSafe(project, projectPath) {
|
|
425
592
|
if (!project.fileSlicePlan)
|
|
426
593
|
return null;
|
|
594
|
+
let result;
|
|
595
|
+
let planName;
|
|
427
596
|
try {
|
|
428
597
|
const relativePath = resolveArtifactPath('fileSlicePlan', project.fileSlicePlan);
|
|
429
598
|
if (!relativePath)
|
|
430
599
|
return null;
|
|
431
600
|
const planPath = join(projectPath, relativePath);
|
|
432
|
-
|
|
601
|
+
result = await parseSlicePlan(planPath);
|
|
433
602
|
if (result.totalSlices === 0)
|
|
434
603
|
return null;
|
|
435
|
-
|
|
436
|
-
const planName = project.fileSlicePlan.split('/').pop() ?? project.fileSlicePlan;
|
|
437
|
-
return {
|
|
438
|
-
name: planName,
|
|
439
|
-
completed: result.completedSlices,
|
|
440
|
-
total: result.totalSlices,
|
|
441
|
-
entries: result.entries,
|
|
442
|
-
};
|
|
604
|
+
planName = project.fileSlicePlan.split('/').pop() ?? project.fileSlicePlan;
|
|
443
605
|
}
|
|
444
606
|
catch {
|
|
607
|
+
// Slice plan file missing/unreadable — a normal "no plan yet" case.
|
|
445
608
|
return null;
|
|
446
609
|
}
|
|
610
|
+
// Route each entry's status through the derivation lattice so this surface
|
|
611
|
+
// (and workflow_status, which returns getStatus() verbatim) agrees with
|
|
612
|
+
// cf list slices/getNext instead of showing the raw, checkbox-only
|
|
613
|
+
// SlicePlanEntry.status (slice 911 MCP-parity fix). Deliberately NOT
|
|
614
|
+
// wrapped in the try/catch above: a per-entry resolution failure (TD-2a)
|
|
615
|
+
// must propagate, not be silently discarded along with the whole plan.
|
|
616
|
+
const entries = await Promise.all(result.entries.map(async (entry) => ({
|
|
617
|
+
...entry,
|
|
618
|
+
status: await this.resolveEntryStatus(projectPath, entry),
|
|
619
|
+
})));
|
|
620
|
+
return {
|
|
621
|
+
name: planName,
|
|
622
|
+
completed: result.completedSlices,
|
|
623
|
+
total: result.totalSlices,
|
|
624
|
+
entries,
|
|
625
|
+
};
|
|
447
626
|
}
|
|
448
627
|
buildSummary(status) {
|
|
449
628
|
const parts = [status.project];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowNavigator.js","sourceRoot":"","sources":["../../src/introspection/WorkflowNavigator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkflowNavigator.js","sourceRoot":"","sources":["../../src/introspection/WorkflowNavigator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
2
|
export type { IArtifactIntrospector } from './interfaces.js';
|
|
3
3
|
export { normalizeStatus } from './parsers/statusNormalizer.js';
|
|
4
|
+
export { deriveEntryStatus } from './statusDerivation.js';
|
|
5
|
+
export type { EntryStatusSignals } from './statusDerivation.js';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/introspection/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/introspection/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -2,4 +2,6 @@
|
|
|
2
2
|
export * from './types.js';
|
|
3
3
|
// normalizeStatus is a pure function with no fs dependency — browser-safe
|
|
4
4
|
export { normalizeStatus } from './parsers/statusNormalizer.js';
|
|
5
|
+
// deriveEntryStatus is a pure function with no fs dependency — browser-safe
|
|
6
|
+
export { deriveEntryStatus } from './statusDerivation.js';
|
|
5
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/introspection/index.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,YAAY,CAAC;AAG3B,0EAA0E;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/introspection/index.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,YAAY,CAAC;AAG3B,0EAA0E;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,4EAA4E;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -8,5 +8,5 @@ export declare function checkFileExists(projectPath: string, relativePath: strin
|
|
|
8
8
|
* Checks project-documents/user/ subdirectories for matching files.
|
|
9
9
|
* Never throws — returns nulls for missing directories.
|
|
10
10
|
*/
|
|
11
|
-
export declare function detectDocuments(projectPath: string, sliceIndex: number): Promise<DocumentDetectionResult>;
|
|
11
|
+
export declare function detectDocuments(projectPath: string, sliceIndex: number, reviewType?: string): Promise<DocumentDetectionResult>;
|
|
12
12
|
//# sourceMappingURL=documentDetector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentDetector.d.ts","sourceRoot":"","sources":["../../../src/introspection/parsers/documentDetector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAI3D;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjG;
|
|
1
|
+
{"version":3,"file":"documentDetector.d.ts","sourceRoot":"","sources":["../../../src/introspection/parsers/documentDetector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAI3D;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjG;AA6BD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAmDlC"}
|
|
@@ -25,12 +25,17 @@ async function safeReaddir(dirPath) {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* Find files in a directory matching
|
|
28
|
+
* Find files in a directory matching an index-prefixed pattern like `140-slice.`.
|
|
29
|
+
* Tolerates leading zeros on the index in the filename (e.g. an `idx` of `50`
|
|
30
|
+
* matches both `50-arch.foo.md` and `050-arch.foo.md`) since the index is a
|
|
31
|
+
* plain number everywhere except this filename-matching call site.
|
|
29
32
|
* Returns full relative paths from projectPath.
|
|
30
33
|
*/
|
|
31
|
-
function matchFiles(files,
|
|
34
|
+
function matchFiles(files, idx, suffix, dir) {
|
|
35
|
+
const escapedSuffix = suffix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
36
|
+
const pattern = new RegExp(`^0*${idx}${escapedSuffix}`);
|
|
32
37
|
return files
|
|
33
|
-
.filter((f) =>
|
|
38
|
+
.filter((f) => pattern.test(f) && f.endsWith('.md'))
|
|
34
39
|
.sort()
|
|
35
40
|
.map((f) => join(dir, f));
|
|
36
41
|
}
|
|
@@ -39,28 +44,43 @@ function matchFiles(files, prefix, dir) {
|
|
|
39
44
|
* Checks project-documents/user/ subdirectories for matching files.
|
|
40
45
|
* Never throws — returns nulls for missing directories.
|
|
41
46
|
*/
|
|
42
|
-
export async function detectDocuments(projectPath, sliceIndex) {
|
|
47
|
+
export async function detectDocuments(projectPath, sliceIndex, reviewType) {
|
|
43
48
|
const idx = String(sliceIndex);
|
|
44
49
|
const slicesDir = join(projectPath, USER_DOCS, 'slices');
|
|
45
50
|
const tasksDir = join(projectPath, USER_DOCS, 'tasks');
|
|
46
51
|
const archDir = join(projectPath, USER_DOCS, 'architecture');
|
|
47
|
-
const
|
|
52
|
+
const reviewsDir = join(projectPath, USER_DOCS, 'reviews');
|
|
53
|
+
const [sliceFiles, taskFiles, archFiles, reviewFiles] = await Promise.all([
|
|
48
54
|
safeReaddir(slicesDir),
|
|
49
55
|
safeReaddir(tasksDir),
|
|
50
56
|
safeReaddir(archDir),
|
|
57
|
+
safeReaddir(reviewsDir),
|
|
51
58
|
]);
|
|
52
59
|
// slices/{index}-slice.*.md → sliceDesign
|
|
53
|
-
const sliceMatches = matchFiles(sliceFiles,
|
|
60
|
+
const sliceMatches = matchFiles(sliceFiles, idx, '-slice.', join(USER_DOCS, 'slices'));
|
|
54
61
|
const sliceDesign = sliceMatches.length > 0 ? sliceMatches[0] : null;
|
|
55
62
|
// tasks/{index}-tasks.*.md → taskFile (array, supports split files)
|
|
56
|
-
const taskMatches = matchFiles(taskFiles,
|
|
63
|
+
const taskMatches = matchFiles(taskFiles, idx, '-tasks.', join(USER_DOCS, 'tasks'));
|
|
57
64
|
const taskFile = taskMatches.length > 0 ? taskMatches : null;
|
|
58
65
|
// architecture/{index}-arch.*.md → architecture
|
|
59
|
-
const archMatches = matchFiles(archFiles,
|
|
66
|
+
const archMatches = matchFiles(archFiles, idx, '-arch.', join(USER_DOCS, 'architecture'));
|
|
60
67
|
const architecture = archMatches.length > 0 ? archMatches[0] : null;
|
|
61
68
|
// architecture/{index}-slices.*.md → slicePlan
|
|
62
|
-
const planMatches = matchFiles(archFiles,
|
|
69
|
+
const planMatches = matchFiles(archFiles, idx, '-slices.', join(USER_DOCS, 'architecture'));
|
|
63
70
|
const slicePlan = planMatches.length > 0 ? planMatches[0] : null;
|
|
64
|
-
|
|
71
|
+
// reviews/{index}-review.{reviewType}.*.md → review
|
|
72
|
+
// A missing or empty reviewType means "don't guess" — review stays null
|
|
73
|
+
// rather than matching any review type. (Empty string is the default value
|
|
74
|
+
// of every per-gate override key, so it must be treated the same as
|
|
75
|
+
// undefined, not passed through into a malformed match prefix.) When a type
|
|
76
|
+
// is supplied, reviews accrue over re-runs, so the lexicographically last
|
|
77
|
+
// match (most recent) wins — unlike sibling detectors above, which take the
|
|
78
|
+
// first match ([0]) because those documents are singular.
|
|
79
|
+
let review = null;
|
|
80
|
+
if (reviewType !== undefined && reviewType !== '') {
|
|
81
|
+
const reviewMatches = matchFiles(reviewFiles, idx, `-review.${reviewType}.`, join(USER_DOCS, 'reviews'));
|
|
82
|
+
review = reviewMatches.at(-1) ?? null;
|
|
83
|
+
}
|
|
84
|
+
return { sliceDesign, taskFile, architecture, slicePlan, review };
|
|
65
85
|
}
|
|
66
86
|
//# sourceMappingURL=documentDetector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentDetector.js","sourceRoot":"","sources":["../../../src/introspection/parsers/documentDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,YAAoB;IAC7E,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,OAAe;IACxC,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"documentDetector.js","sourceRoot":"","sources":["../../../src/introspection/parsers/documentDetector.ts"],"names":[],"mappings":"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"}
|