@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.
Files changed (61) hide show
  1. package/dist/config/ConfigKeys.d.ts.map +1 -1
  2. package/dist/config/ConfigKeys.js +55 -0
  3. package/dist/config/ConfigKeys.js.map +1 -1
  4. package/dist/introspection/ConsistencyChecker.d.ts +24 -1
  5. package/dist/introspection/ConsistencyChecker.d.ts.map +1 -1
  6. package/dist/introspection/ConsistencyChecker.js +191 -31
  7. package/dist/introspection/ConsistencyChecker.js.map +1 -1
  8. package/dist/introspection/ProjectModelBuilder.d.ts.map +1 -1
  9. package/dist/introspection/ProjectModelBuilder.js +27 -10
  10. package/dist/introspection/ProjectModelBuilder.js.map +1 -1
  11. package/dist/introspection/WorkflowNavigator.d.ts +34 -1
  12. package/dist/introspection/WorkflowNavigator.d.ts.map +1 -1
  13. package/dist/introspection/WorkflowNavigator.js +231 -52
  14. package/dist/introspection/WorkflowNavigator.js.map +1 -1
  15. package/dist/introspection/index.d.ts +2 -0
  16. package/dist/introspection/index.d.ts.map +1 -1
  17. package/dist/introspection/index.js +2 -0
  18. package/dist/introspection/index.js.map +1 -1
  19. package/dist/introspection/parsers/documentDetector.d.ts +1 -1
  20. package/dist/introspection/parsers/documentDetector.d.ts.map +1 -1
  21. package/dist/introspection/parsers/documentDetector.js +30 -10
  22. package/dist/introspection/parsers/documentDetector.js.map +1 -1
  23. package/dist/introspection/parsers/slicePlanParser.d.ts.map +1 -1
  24. package/dist/introspection/parsers/slicePlanParser.js +5 -2
  25. package/dist/introspection/parsers/slicePlanParser.js.map +1 -1
  26. package/dist/introspection/parsers/statusNormalizer.d.ts +10 -2
  27. package/dist/introspection/parsers/statusNormalizer.d.ts.map +1 -1
  28. package/dist/introspection/parsers/statusNormalizer.js +25 -16
  29. package/dist/introspection/parsers/statusNormalizer.js.map +1 -1
  30. package/dist/introspection/parsers/taskFileParser.d.ts +6 -2
  31. package/dist/introspection/parsers/taskFileParser.d.ts.map +1 -1
  32. package/dist/introspection/parsers/taskFileParser.js +27 -18
  33. package/dist/introspection/parsers/taskFileParser.js.map +1 -1
  34. package/dist/introspection/reviewGate.d.ts +62 -0
  35. package/dist/introspection/reviewGate.d.ts.map +1 -0
  36. package/dist/introspection/reviewGate.js +164 -0
  37. package/dist/introspection/reviewGate.js.map +1 -0
  38. package/dist/introspection/statusDerivation.d.ts +23 -0
  39. package/dist/introspection/statusDerivation.d.ts.map +1 -0
  40. package/dist/introspection/statusDerivation.js +19 -0
  41. package/dist/introspection/statusDerivation.js.map +1 -0
  42. package/dist/introspection/types.d.ts +22 -3
  43. package/dist/introspection/types.d.ts.map +1 -1
  44. package/dist/introspection/types.js +7 -1
  45. package/dist/introspection/types.js.map +1 -1
  46. package/dist/node.d.ts +1 -1
  47. package/dist/node.d.ts.map +1 -1
  48. package/dist/node.js +1 -1
  49. package/dist/node.js.map +1 -1
  50. package/dist/schema/frontmatterSchema.d.ts.map +1 -1
  51. package/dist/schema/frontmatterSchema.js +4 -0
  52. package/dist/schema/frontmatterSchema.js.map +1 -1
  53. package/dist/schema/projectSchema.d.ts +4 -0
  54. package/dist/schema/projectSchema.d.ts.map +1 -1
  55. package/dist/schema/projectSchema.js +2 -0
  56. package/dist/schema/projectSchema.js.map +1 -1
  57. package/dist/schema/resolveFileByIndex.d.ts +12 -0
  58. package/dist/schema/resolveFileByIndex.d.ts.map +1 -1
  59. package/dist/schema/resolveFileByIndex.js +29 -0
  60. package/dist/schema/resolveFileByIndex.js.map +1 -1
  61. 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
- // Priority 1: No projectPath
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
- // Priority 2: No fileSlice
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: 'cf set arch <index>',
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 unchecked entry
129
- const firstEntry = status.slicePlan.entries.find((e) => !e.isChecked);
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
- // Priority 2.5: Arch set but file doesn't exist recommend creating arch first
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: "cf set phase 'Phase 2: Architecture'",
159
- phase: 'Phase 2: Architecture',
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
- // Priority 3: needs-design
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
- // Priority 4: needs-tasks
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
- // Priority 5: in-implementation
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
- // Priority 6: complete check for next slice in plan
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.find((e) => !e.isChecked);
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
- // Priority 7 (fallback): complete but no plan
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 standard Priority 2 logic).
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: "cf set phase 'Phase 2: Architecture'",
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
- const docs = await detectDocuments(projectPath, index);
388
- // No slice design file → needs-design
389
- if (!docs.sliceDesign) {
390
- return { ...base, status: 'needs-design' };
391
- }
392
- // Design exists but no task file → needs-tasks
393
- if (!docs.taskFile) {
394
- return { ...base, status: 'needs-tasks' };
395
- }
396
- // Task file exists parse to determine progress
397
- const taskPaths = docs.taskFile.map((p) => join(projectPath, p));
398
- const taskResult = await this.parseTaskFileSafe(taskPaths);
399
- if (!taskResult || taskResult.totalTasks === 0) {
400
- return { ...base, status: 'needs-tasks' };
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
- const taskProgress = {
403
- completed: taskResult.completedTasks,
404
- total: taskResult.totalTasks,
405
- inferredStatus: taskResult.inferredStatus,
406
- };
407
- if (taskResult.inferredStatus === 'complete') {
408
- return { ...base, status: 'complete', taskProgress };
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: 'in-implementation', taskProgress };
497
+ return { ...base, status: 'complete', taskProgress };
411
498
  }
412
- catch {
413
- return base;
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
- return null;
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
- const result = await parseSlicePlan(planPath);
601
+ result = await parseSlicePlan(planPath);
433
602
  if (result.totalSlices === 0)
434
603
  return null;
435
- // Extract filename from the path for display
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;AAwBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,uBAAuB,CAAC,CA8BlC"}
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 a prefix pattern like `NNN-type.`.
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, prefix, dir) {
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) => f.startsWith(prefix) && f.endsWith('.md'))
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 [sliceFiles, taskFiles, archFiles] = await Promise.all([
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, `${idx}-slice.`, join(USER_DOCS, 'slices'));
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, `${idx}-tasks.`, join(USER_DOCS, 'tasks'));
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, `${idx}-arch.`, join(USER_DOCS, 'architecture'));
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, `${idx}-slices.`, join(USER_DOCS, 'architecture'));
69
+ const planMatches = matchFiles(archFiles, idx, '-slices.', join(USER_DOCS, 'architecture'));
63
70
  const slicePlan = planMatches.length > 0 ? planMatches[0] : null;
64
- return { sliceDesign, taskFile, architecture, slicePlan };
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":"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"}
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;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,KAAe,EAAE,GAAW,EAAE,MAAc,EAAE,GAAW;IAC3E,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC,CAAC;IACxD,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACnD,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,UAAkB,EAClB,UAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAE/B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAE3D,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxE,WAAW,CAAC,SAAS,CAAC;QACtB,WAAW,CAAC,QAAQ,CAAC;QACrB,WAAW,CAAC,OAAO,CAAC;QACpB,WAAW,CAAC,UAAU,CAAC;KACxB,CAAC,CAAC;IAEH,0CAA0C;IAC1C,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvF,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAErE,oEAAoE;IACpE,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7D,gDAAgD;IAChD,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAC1F,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpE,+CAA+C;IAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5F,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjE,oDAAoD;IACpD,wEAAwE;IACxE,2EAA2E;IAC3E,oEAAoE;IACpE,4EAA4E;IAC5E,0EAA0E;IAC1E,4EAA4E;IAC5E,0DAA0D;IAC1D,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,aAAa,GAAG,UAAU,CAC9B,WAAW,EACX,GAAG,EACH,WAAW,UAAU,GAAG,EACxB,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAC3B,CAAC;QACF,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACpE,CAAC"}