@agent-plan/core 0.2.19-next.12 → 0.2.19-next.14

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.
@@ -0,0 +1,16 @@
1
+ import type { ChecklistItem } from "./schema.js";
2
+ /**
3
+ * Granular per-task checklist helpers. Each item has a stable unique `id`
4
+ * (the robust handle for add/remove/toggle) plus a progressive `number`
5
+ * (C1..Cn display label, renumbered on remove for readability). Selectors
6
+ * accept C{n} (e.g. C2), the item id, or a title (case-insensitive, first
7
+ * exact then partial match).
8
+ */
9
+ export declare function findChecklistItem(items: ChecklistItem[], selector: string): ChecklistItem | undefined;
10
+ /** Append a new item. number = max(existing)+1 (stable, never reused). Mutates nothing; returns the new item. */
11
+ export declare function addChecklistItem(items: ChecklistItem[], taskId: string, title: string): ChecklistItem;
12
+ /** Remove the matched item in place (splice) and renumber the rest 1..n. Returns the removed item, or undefined. */
13
+ export declare function removeChecklistItem(items: ChecklistItem[], selector: string): ChecklistItem | undefined;
14
+ /** Tick/untick the matched item in place. checked omitted → toggle. Returns the item, or undefined. */
15
+ export declare function toggleChecklistItem(items: ChecklistItem[], selector: string, checked?: boolean): ChecklistItem | undefined;
16
+ //# sourceMappingURL=checklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checklist.d.ts","sourceRoot":"","sources":["../src/checklist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;GAMG;AAEH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAerG;AAED,iHAAiH;AACjH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAKrG;AAED,oHAAoH;AACpH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CASvG;AAED,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAK1H"}
@@ -0,0 +1,52 @@
1
+ import { createChecklistItemId } from "./naming.js";
2
+ /**
3
+ * Granular per-task checklist helpers. Each item has a stable unique `id`
4
+ * (the robust handle for add/remove/toggle) plus a progressive `number`
5
+ * (C1..Cn display label, renumbered on remove for readability). Selectors
6
+ * accept C{n} (e.g. C2), the item id, or a title (case-insensitive, first
7
+ * exact then partial match).
8
+ */
9
+ export function findChecklistItem(items, selector) {
10
+ const s = selector.trim();
11
+ if (!s)
12
+ return undefined;
13
+ const cMatch = /^C(\d+)$/i.exec(s);
14
+ if (cMatch) {
15
+ const n = parseInt(cMatch[1], 10);
16
+ return items.find((i) => i.number === n);
17
+ }
18
+ const byId = items.find((i) => i.id === s);
19
+ if (byId)
20
+ return byId;
21
+ const needle = s.toLowerCase();
22
+ return (items.find((i) => i.title.trim().toLowerCase() === needle) ??
23
+ items.find((i) => i.title.trim().toLowerCase().includes(needle)));
24
+ }
25
+ /** Append a new item. number = max(existing)+1 (stable, never reused). Mutates nothing; returns the new item. */
26
+ export function addChecklistItem(items, taskId, title) {
27
+ const clean = title.trim();
28
+ const number = items.length === 0 ? 1 : Math.max(...items.map((i) => i.number)) + 1;
29
+ const id = createChecklistItemId(taskId, number, clean);
30
+ return { id, number, title: clean, checked: false };
31
+ }
32
+ /** Remove the matched item in place (splice) and renumber the rest 1..n. Returns the removed item, or undefined. */
33
+ export function removeChecklistItem(items, selector) {
34
+ const found = findChecklistItem(items, selector);
35
+ if (!found)
36
+ return undefined;
37
+ const idx = items.findIndex((i) => i.id === found.id);
38
+ if (idx >= 0)
39
+ items.splice(idx, 1);
40
+ items.forEach((i, n) => {
41
+ i.number = n + 1;
42
+ });
43
+ return found;
44
+ }
45
+ /** Tick/untick the matched item in place. checked omitted → toggle. Returns the item, or undefined. */
46
+ export function toggleChecklistItem(items, selector, checked) {
47
+ const found = findChecklistItem(items, selector);
48
+ if (!found)
49
+ return undefined;
50
+ found.checked = checked ?? !found.checked;
51
+ return found;
52
+ }
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from "./naming.js";
2
2
  export * from "./refs.js";
3
3
  export * from "./schema.js";
4
+ export * from "./checklist.js";
4
5
  export * from "./recap.js";
5
6
  export { PlanStore, PlanStoreError, setWriteBusyHook, setWriteNotifyHook, migrateToUuids, migrateToGlobalSequence, withFeatureLock, type PhaseHandoffSummary } from "./plan-store.js";
6
7
  export { PlanRenderer } from "./renderer.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,uBAAuB,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtL,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,uBAAuB,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtL,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from "./naming.js";
2
2
  export * from "./refs.js";
3
3
  export * from "./schema.js";
4
+ export * from "./checklist.js";
4
5
  export * from "./recap.js";
5
6
  export { PlanStore, PlanStoreError, setWriteBusyHook, setWriteNotifyHook, migrateToUuids, migrateToGlobalSequence, withFeatureLock } from "./plan-store.js";
6
7
  export { PlanRenderer } from "./renderer.js";
package/dist/naming.d.ts CHANGED
@@ -39,4 +39,5 @@ export declare function createRequirementId(): string;
39
39
  export declare function createMacroTaskId(): string;
40
40
  export declare function createFeatureId(): string;
41
41
  export declare function createChecklistItemId(taskId: string, number: number, title: string): string;
42
+ export declare function createStatusLogEntryId(): string;
42
43
  //# sourceMappingURL=naming.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAKA;iFACiF;AACjF,eAAO,MAAM,kBAAkB,qCAAqC,CAAC;AAErE,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,gBAAgB,QAAkB,CAAC;AAEhD;;qFAEqF;AACrF,wBAAgB,aAAa,CAAC,QAAQ,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,MAAM,CAUvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED;;;;8BAI8B;AAC9B,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAK,EAAE,QAAQ,SAAa,GAAG,MAAM,CAGnF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;iBAEiB;AACjB,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlF;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,EAChD,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GACzC,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtF;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3F"}
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAKA;iFACiF;AACjF,eAAO,MAAM,kBAAkB,qCAAqC,CAAC;AAErE,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,gBAAgB,QAAkB,CAAC;AAEhD;;qFAEqF;AACrF,wBAAgB,aAAa,CAAC,QAAQ,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,MAAM,CAUvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED;;;;8BAI8B;AAC9B,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAK,EAAE,QAAQ,SAAa,GAAG,MAAM,CAGnF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;iBAEiB;AACjB,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlF;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,EAChD,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GACzC,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtF;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3F;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
package/dist/naming.js CHANGED
@@ -86,3 +86,6 @@ export function createFeatureId() {
86
86
  export function createChecklistItemId(taskId, number, title) {
87
87
  return `${taskId}-check-${formatThreeDigitNumber(number)}-${normalizeSlug(title)}`;
88
88
  }
89
+ export function createStatusLogEntryId() {
90
+ return randomUUID();
91
+ }
@@ -43,6 +43,7 @@ export declare function migrateToGlobalSequence(store: PlanStore): Promise<{
43
43
  features: number;
44
44
  }>;
45
45
  export declare class PlanStore {
46
+ #private;
46
47
  readonly root: string;
47
48
  private autoSync;
48
49
  private syncGuard;
@@ -1 +1 @@
1
- {"version":3,"file":"plan-store.d.ts","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-store.d.ts","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { access, copyFile, mkdir, readdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { CodebaseProfileSchema, FeatureSchema, FeaturesDocumentSchema, ManifestSchema, PhaseSchema, ProjectSchema, RequirementsDocumentSchema, ResumeFocusSchema, ActivityLogSchema, } from "./schema.js";
4
- import { createFeatureId, createPhaseId, createRequirementId, createShortId, createTaskId, formatPhaseRef, isLegacyPhaseId } from "./naming.js";
4
+ import { createFeatureId, createPhaseId, createRequirementId, createShortId, createStatusLogEntryId, createTaskId, formatPhaseRef, isLegacyPhaseId } from "./naming.js";
5
5
  function nowISO() {
6
6
  return new Date().toISOString();
7
7
  }
@@ -1243,9 +1243,62 @@ export class PlanStore {
1243
1243
  const feature = features.features.find((f) => f.id === phase.featureId);
1244
1244
  cleared = formatPhaseRef(phase.number, feature?.number);
1245
1245
  }
1246
+ // Append a statusLog entry to the phase when its DERIVED status changed
1247
+ // (audit trail; status itself is NOT persisted). Idempotent: only appends
1248
+ // when the new derived status differs from the last recorded toStatus.
1249
+ await this.#appendPhaseStatusLog(phaseId);
1250
+ // Roll up to the parent feature's statusLog too.
1251
+ if (phase.featureId)
1252
+ await this.#appendFeatureStatusLog(phase.featureId);
1246
1253
  await this.refreshResume();
1247
1254
  return cleared;
1248
1255
  }
1256
+ /** Append a PhaseStatusLogEntry to the phase when its derived status changed
1257
+ * vs. the last recorded toStatus (baseline "draft" when empty, matching the
1258
+ * phase-creation literal). Idempotent across repeated reads of the same state. */
1259
+ async #appendPhaseStatusLog(phaseId) {
1260
+ await this.updatePhase(phaseId, (p) => {
1261
+ const last = p.statusLog.at(-1)?.toStatus ?? "draft";
1262
+ if (p.status !== last) {
1263
+ p.statusLog = [...p.statusLog, {
1264
+ id: createStatusLogEntryId(),
1265
+ date: nowISO(),
1266
+ fromStatus: last,
1267
+ toStatus: p.status,
1268
+ title: `${last} → ${p.status}`,
1269
+ description: "",
1270
+ }];
1271
+ }
1272
+ return p;
1273
+ });
1274
+ }
1275
+ /** Append a StatusLogEntry to the feature when its derived status changed
1276
+ * vs. the last recorded toStatus (baseline "planned" when empty, matching
1277
+ * the feature-creation/empty-phases derivation). Idempotent. */
1278
+ async #appendFeatureStatusLog(featureId) {
1279
+ const features = await this.loadFeatures();
1280
+ const feature = features.features.find((f) => f.id === featureId);
1281
+ if (!feature)
1282
+ return;
1283
+ const last = feature.statusLog.at(-1)?.toStatus ?? "planned";
1284
+ if (feature.status !== last) {
1285
+ await this.updateFeatures((doc) => {
1286
+ const target = doc.features.find((f) => f.id === featureId);
1287
+ if (target && target.statusLog.at(-1)?.toStatus !== feature.status) {
1288
+ const baseline = target.statusLog.at(-1)?.toStatus ?? "planned";
1289
+ target.statusLog = [...target.statusLog, {
1290
+ id: createStatusLogEntryId(),
1291
+ date: nowISO(),
1292
+ fromStatus: baseline,
1293
+ toStatus: feature.status,
1294
+ title: `${baseline} → ${feature.status}`,
1295
+ description: "",
1296
+ }];
1297
+ }
1298
+ return doc;
1299
+ });
1300
+ }
1301
+ }
1249
1302
  // ── Savers ───────────────────────────────────────────────────────────
1250
1303
  async updateProject(updater) {
1251
1304
  const updated = await atomicUpdateJson(this.projectPath(), ProjectSchema, updater);
package/dist/schema.d.ts CHANGED
@@ -412,15 +412,21 @@ export declare const SubtaskSchema: z.ZodObject<{
412
412
  }>;
413
413
  export declare const ChecklistItemSchema: z.ZodObject<{
414
414
  id: z.ZodString;
415
+ /** Per-task 1-based position, displayed as C{number} (C1, C2, ...). Default 0
416
+ * so legacy on-disk items without a number still parse; the TaskSchema
417
+ * transform overwrites it with the real index+1. */
418
+ number: z.ZodDefault<z.ZodNumber>;
415
419
  title: z.ZodString;
416
420
  checked: z.ZodDefault<z.ZodBoolean>;
417
421
  }, "strip", z.ZodTypeAny, {
422
+ number: number;
418
423
  id: string;
419
424
  title: string;
420
425
  checked: boolean;
421
426
  }, {
422
427
  id: string;
423
428
  title: string;
429
+ number?: number | undefined;
424
430
  checked?: boolean | undefined;
425
431
  }>;
426
432
  /** Status transitions that require a motivation note from the agent. */
@@ -454,6 +460,30 @@ export declare const StatusLogEntrySchema: z.ZodObject<{
454
460
  toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
455
461
  description?: string | undefined;
456
462
  }>;
463
+ /** Like StatusLogEntrySchema but for the DERIVED PHASE status, which includes
464
+ * the "draft" and "discovery" lifecycle states absent from TaskStatus. */
465
+ export declare const PhaseStatusLogEntrySchema: z.ZodObject<{
466
+ id: z.ZodString;
467
+ date: z.ZodString;
468
+ fromStatus: z.ZodEnum<["draft", "discovery", "planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
469
+ toStatus: z.ZodEnum<["draft", "discovery", "planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
470
+ title: z.ZodString;
471
+ description: z.ZodDefault<z.ZodString>;
472
+ }, "strip", z.ZodTypeAny, {
473
+ id: string;
474
+ date: string;
475
+ title: string;
476
+ description: string;
477
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
478
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
479
+ }, {
480
+ id: string;
481
+ date: string;
482
+ title: string;
483
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
484
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
485
+ description?: string | undefined;
486
+ }>;
457
487
  export declare const TaskSchema: z.ZodEffects<z.ZodObject<{
458
488
  id: z.ZodString;
459
489
  phaseId: z.ZodString;
@@ -513,15 +543,21 @@ export declare const TaskSchema: z.ZodEffects<z.ZodObject<{
513
543
  }>, "many">>;
514
544
  checklist: z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
515
545
  id: z.ZodString;
546
+ /** Per-task 1-based position, displayed as C{number} (C1, C2, ...). Default 0
547
+ * so legacy on-disk items without a number still parse; the TaskSchema
548
+ * transform overwrites it with the real index+1. */
549
+ number: z.ZodDefault<z.ZodNumber>;
516
550
  title: z.ZodString;
517
551
  checked: z.ZodDefault<z.ZodBoolean>;
518
552
  }, "strip", z.ZodTypeAny, {
553
+ number: number;
519
554
  id: string;
520
555
  title: string;
521
556
  checked: boolean;
522
557
  }, {
523
558
  id: string;
524
559
  title: string;
560
+ number?: number | undefined;
525
561
  checked?: boolean | undefined;
526
562
  }>]>, "many">>;
527
563
  subtasks: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -582,6 +618,7 @@ export declare const TaskSchema: z.ZodEffects<z.ZodObject<{
582
618
  toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
583
619
  }[];
584
620
  checklist: (string | {
621
+ number: number;
585
622
  id: string;
586
623
  title: string;
587
624
  checked: boolean;
@@ -630,6 +667,7 @@ export declare const TaskSchema: z.ZodEffects<z.ZodObject<{
630
667
  checklist?: (string | {
631
668
  id: string;
632
669
  title: string;
670
+ number?: number | undefined;
633
671
  checked?: boolean | undefined;
634
672
  })[] | undefined;
635
673
  subtasks?: {
@@ -646,6 +684,7 @@ export declare const TaskSchema: z.ZodEffects<z.ZodObject<{
646
684
  }>, {
647
685
  checklist: {
648
686
  id: string;
687
+ number: number;
649
688
  title: string;
650
689
  checked: boolean;
651
690
  }[];
@@ -722,6 +761,7 @@ export declare const TaskSchema: z.ZodEffects<z.ZodObject<{
722
761
  checklist?: (string | {
723
762
  id: string;
724
763
  title: string;
764
+ number?: number | undefined;
725
765
  checked?: boolean | undefined;
726
766
  })[] | undefined;
727
767
  subtasks?: {
@@ -856,15 +896,21 @@ export declare const PhaseSchema: z.ZodObject<{
856
896
  }>, "many">>;
857
897
  checklist: z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
858
898
  id: z.ZodString;
899
+ /** Per-task 1-based position, displayed as C{number} (C1, C2, ...). Default 0
900
+ * so legacy on-disk items without a number still parse; the TaskSchema
901
+ * transform overwrites it with the real index+1. */
902
+ number: z.ZodDefault<z.ZodNumber>;
859
903
  title: z.ZodString;
860
904
  checked: z.ZodDefault<z.ZodBoolean>;
861
905
  }, "strip", z.ZodTypeAny, {
906
+ number: number;
862
907
  id: string;
863
908
  title: string;
864
909
  checked: boolean;
865
910
  }, {
866
911
  id: string;
867
912
  title: string;
913
+ number?: number | undefined;
868
914
  checked?: boolean | undefined;
869
915
  }>]>, "many">>;
870
916
  subtasks: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -925,6 +971,7 @@ export declare const PhaseSchema: z.ZodObject<{
925
971
  toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
926
972
  }[];
927
973
  checklist: (string | {
974
+ number: number;
928
975
  id: string;
929
976
  title: string;
930
977
  checked: boolean;
@@ -973,6 +1020,7 @@ export declare const PhaseSchema: z.ZodObject<{
973
1020
  checklist?: (string | {
974
1021
  id: string;
975
1022
  title: string;
1023
+ number?: number | undefined;
976
1024
  checked?: boolean | undefined;
977
1025
  })[] | undefined;
978
1026
  subtasks?: {
@@ -989,6 +1037,7 @@ export declare const PhaseSchema: z.ZodObject<{
989
1037
  }>, {
990
1038
  checklist: {
991
1039
  id: string;
1040
+ number: number;
992
1041
  title: string;
993
1042
  checked: boolean;
994
1043
  }[];
@@ -1065,6 +1114,7 @@ export declare const PhaseSchema: z.ZodObject<{
1065
1114
  checklist?: (string | {
1066
1115
  id: string;
1067
1116
  title: string;
1117
+ number?: number | undefined;
1068
1118
  checked?: boolean | undefined;
1069
1119
  })[] | undefined;
1070
1120
  subtasks?: {
@@ -1107,6 +1157,29 @@ export declare const PhaseSchema: z.ZodObject<{
1107
1157
  file?: string | undefined;
1108
1158
  reason?: string | undefined;
1109
1159
  }>, "many">>;
1160
+ /** Chronological audit trail of the DERIVED status (planned/in-progress/blocked/done/...). Appended ONLY when the derived status changes during a rollup; `status` itself is NOT persisted (still computed from child tasks at read time). Empty = no transition recorded yet (treated as "planned"). */
1161
+ statusLog: z.ZodDefault<z.ZodArray<z.ZodObject<{
1162
+ id: z.ZodString;
1163
+ date: z.ZodString;
1164
+ fromStatus: z.ZodEnum<["draft", "discovery", "planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
1165
+ toStatus: z.ZodEnum<["draft", "discovery", "planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
1166
+ title: z.ZodString;
1167
+ description: z.ZodDefault<z.ZodString>;
1168
+ }, "strip", z.ZodTypeAny, {
1169
+ id: string;
1170
+ date: string;
1171
+ title: string;
1172
+ description: string;
1173
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
1174
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
1175
+ }, {
1176
+ id: string;
1177
+ date: string;
1178
+ title: string;
1179
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
1180
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
1181
+ description?: string | undefined;
1182
+ }>, "many">>;
1110
1183
  }, "strip", z.ZodTypeAny, {
1111
1184
  number: number;
1112
1185
  dependencies: string[];
@@ -1128,6 +1201,14 @@ export declare const PhaseSchema: z.ZodObject<{
1128
1201
  }[];
1129
1202
  shortId: string;
1130
1203
  priority: number;
1204
+ statusLog: {
1205
+ id: string;
1206
+ date: string;
1207
+ title: string;
1208
+ description: string;
1209
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
1210
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
1211
+ }[];
1131
1212
  dependsOn: string[];
1132
1213
  slug: string;
1133
1214
  discussedAt: string;
@@ -1142,6 +1223,7 @@ export declare const PhaseSchema: z.ZodObject<{
1142
1223
  tasks: {
1143
1224
  checklist: {
1144
1225
  id: string;
1226
+ number: number;
1145
1227
  title: string;
1146
1228
  checked: boolean;
1147
1229
  }[];
@@ -1217,6 +1299,14 @@ export declare const PhaseSchema: z.ZodObject<{
1217
1299
  }[] | undefined;
1218
1300
  shortId?: string | undefined;
1219
1301
  priority?: number | undefined;
1302
+ statusLog?: {
1303
+ id: string;
1304
+ date: string;
1305
+ title: string;
1306
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
1307
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
1308
+ description?: string | undefined;
1309
+ }[] | undefined;
1220
1310
  dependsOn?: string[] | undefined;
1221
1311
  featureId?: string | undefined;
1222
1312
  discussedAt?: string | undefined;
@@ -1261,6 +1351,7 @@ export declare const PhaseSchema: z.ZodObject<{
1261
1351
  checklist?: (string | {
1262
1352
  id: string;
1263
1353
  title: string;
1354
+ number?: number | undefined;
1264
1355
  checked?: boolean | undefined;
1265
1356
  })[] | undefined;
1266
1357
  subtasks?: {
@@ -1323,6 +1414,29 @@ export declare const FeatureSchema: z.ZodObject<{
1323
1414
  }>, "many">>;
1324
1415
  phaseIds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1325
1416
  dependsOn: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1417
+ /** Chronological audit trail of the DERIVED status (computed from child phases at read time). Appended ONLY when the derived status changes during a rollup; `status` itself is NOT persisted. Empty = no transition recorded yet (treated as "planned"). */
1418
+ statusLog: z.ZodDefault<z.ZodArray<z.ZodObject<{
1419
+ id: z.ZodString;
1420
+ date: z.ZodString;
1421
+ fromStatus: z.ZodEnum<["planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
1422
+ toStatus: z.ZodEnum<["planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
1423
+ title: z.ZodString;
1424
+ description: z.ZodDefault<z.ZodString>;
1425
+ }, "strip", z.ZodTypeAny, {
1426
+ id: string;
1427
+ date: string;
1428
+ title: string;
1429
+ description: string;
1430
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1431
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1432
+ }, {
1433
+ id: string;
1434
+ date: string;
1435
+ title: string;
1436
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1437
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1438
+ description?: string | undefined;
1439
+ }>, "many">>;
1326
1440
  createdAt: z.ZodString;
1327
1441
  updatedAt: z.ZodString;
1328
1442
  }, "strip", z.ZodTypeAny, {
@@ -1342,6 +1456,14 @@ export declare const FeatureSchema: z.ZodObject<{
1342
1456
  }[];
1343
1457
  shortId: string;
1344
1458
  priority: number;
1459
+ statusLog: {
1460
+ id: string;
1461
+ date: string;
1462
+ title: string;
1463
+ description: string;
1464
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1465
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1466
+ }[];
1345
1467
  dependsOn: string[];
1346
1468
  discussedAt: string;
1347
1469
  contextReady: boolean;
@@ -1368,6 +1490,14 @@ export declare const FeatureSchema: z.ZodObject<{
1368
1490
  }[] | undefined;
1369
1491
  shortId?: string | undefined;
1370
1492
  priority?: number | undefined;
1493
+ statusLog?: {
1494
+ id: string;
1495
+ date: string;
1496
+ title: string;
1497
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1498
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1499
+ description?: string | undefined;
1500
+ }[] | undefined;
1371
1501
  dependsOn?: string[] | undefined;
1372
1502
  discussedAt?: string | undefined;
1373
1503
  contextReady?: boolean | undefined;
@@ -1418,6 +1548,29 @@ export declare const FeaturesDocumentSchema: z.ZodObject<{
1418
1548
  }>, "many">>;
1419
1549
  phaseIds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1420
1550
  dependsOn: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1551
+ /** Chronological audit trail of the DERIVED status (computed from child phases at read time). Appended ONLY when the derived status changes during a rollup; `status` itself is NOT persisted. Empty = no transition recorded yet (treated as "planned"). */
1552
+ statusLog: z.ZodDefault<z.ZodArray<z.ZodObject<{
1553
+ id: z.ZodString;
1554
+ date: z.ZodString;
1555
+ fromStatus: z.ZodEnum<["planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
1556
+ toStatus: z.ZodEnum<["planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
1557
+ title: z.ZodString;
1558
+ description: z.ZodDefault<z.ZodString>;
1559
+ }, "strip", z.ZodTypeAny, {
1560
+ id: string;
1561
+ date: string;
1562
+ title: string;
1563
+ description: string;
1564
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1565
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1566
+ }, {
1567
+ id: string;
1568
+ date: string;
1569
+ title: string;
1570
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1571
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1572
+ description?: string | undefined;
1573
+ }>, "many">>;
1421
1574
  createdAt: z.ZodString;
1422
1575
  updatedAt: z.ZodString;
1423
1576
  }, "strip", z.ZodTypeAny, {
@@ -1437,6 +1590,14 @@ export declare const FeaturesDocumentSchema: z.ZodObject<{
1437
1590
  }[];
1438
1591
  shortId: string;
1439
1592
  priority: number;
1593
+ statusLog: {
1594
+ id: string;
1595
+ date: string;
1596
+ title: string;
1597
+ description: string;
1598
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1599
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1600
+ }[];
1440
1601
  dependsOn: string[];
1441
1602
  discussedAt: string;
1442
1603
  contextReady: boolean;
@@ -1463,6 +1624,14 @@ export declare const FeaturesDocumentSchema: z.ZodObject<{
1463
1624
  }[] | undefined;
1464
1625
  shortId?: string | undefined;
1465
1626
  priority?: number | undefined;
1627
+ statusLog?: {
1628
+ id: string;
1629
+ date: string;
1630
+ title: string;
1631
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1632
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1633
+ description?: string | undefined;
1634
+ }[] | undefined;
1466
1635
  dependsOn?: string[] | undefined;
1467
1636
  discussedAt?: string | undefined;
1468
1637
  contextReady?: boolean | undefined;
@@ -1491,6 +1660,14 @@ export declare const FeaturesDocumentSchema: z.ZodObject<{
1491
1660
  }[];
1492
1661
  shortId: string;
1493
1662
  priority: number;
1663
+ statusLog: {
1664
+ id: string;
1665
+ date: string;
1666
+ title: string;
1667
+ description: string;
1668
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1669
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1670
+ }[];
1494
1671
  dependsOn: string[];
1495
1672
  discussedAt: string;
1496
1673
  contextReady: boolean;
@@ -1519,6 +1696,14 @@ export declare const FeaturesDocumentSchema: z.ZodObject<{
1519
1696
  }[] | undefined;
1520
1697
  shortId?: string | undefined;
1521
1698
  priority?: number | undefined;
1699
+ statusLog?: {
1700
+ id: string;
1701
+ date: string;
1702
+ title: string;
1703
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1704
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
1705
+ description?: string | undefined;
1706
+ }[] | undefined;
1522
1707
  dependsOn?: string[] | undefined;
1523
1708
  discussedAt?: string | undefined;
1524
1709
  contextReady?: boolean | undefined;
@@ -1887,6 +2072,29 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
1887
2072
  }>, "many">>;
1888
2073
  phaseIds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1889
2074
  dependsOn: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
2075
+ /** Chronological audit trail of the DERIVED status (computed from child phases at read time). Appended ONLY when the derived status changes during a rollup; `status` itself is NOT persisted. Empty = no transition recorded yet (treated as "planned"). */
2076
+ statusLog: z.ZodDefault<z.ZodArray<z.ZodObject<{
2077
+ id: z.ZodString;
2078
+ date: z.ZodString;
2079
+ fromStatus: z.ZodEnum<["planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
2080
+ toStatus: z.ZodEnum<["planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
2081
+ title: z.ZodString;
2082
+ description: z.ZodDefault<z.ZodString>;
2083
+ }, "strip", z.ZodTypeAny, {
2084
+ id: string;
2085
+ date: string;
2086
+ title: string;
2087
+ description: string;
2088
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2089
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2090
+ }, {
2091
+ id: string;
2092
+ date: string;
2093
+ title: string;
2094
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2095
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2096
+ description?: string | undefined;
2097
+ }>, "many">>;
1890
2098
  createdAt: z.ZodString;
1891
2099
  updatedAt: z.ZodString;
1892
2100
  }, "strip", z.ZodTypeAny, {
@@ -1906,6 +2114,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
1906
2114
  }[];
1907
2115
  shortId: string;
1908
2116
  priority: number;
2117
+ statusLog: {
2118
+ id: string;
2119
+ date: string;
2120
+ title: string;
2121
+ description: string;
2122
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2123
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2124
+ }[];
1909
2125
  dependsOn: string[];
1910
2126
  discussedAt: string;
1911
2127
  contextReady: boolean;
@@ -1932,6 +2148,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
1932
2148
  }[] | undefined;
1933
2149
  shortId?: string | undefined;
1934
2150
  priority?: number | undefined;
2151
+ statusLog?: {
2152
+ id: string;
2153
+ date: string;
2154
+ title: string;
2155
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2156
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2157
+ description?: string | undefined;
2158
+ }[] | undefined;
1935
2159
  dependsOn?: string[] | undefined;
1936
2160
  discussedAt?: string | undefined;
1937
2161
  contextReady?: boolean | undefined;
@@ -1960,6 +2184,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
1960
2184
  }[];
1961
2185
  shortId: string;
1962
2186
  priority: number;
2187
+ statusLog: {
2188
+ id: string;
2189
+ date: string;
2190
+ title: string;
2191
+ description: string;
2192
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2193
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2194
+ }[];
1963
2195
  dependsOn: string[];
1964
2196
  discussedAt: string;
1965
2197
  contextReady: boolean;
@@ -1988,6 +2220,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
1988
2220
  }[] | undefined;
1989
2221
  shortId?: string | undefined;
1990
2222
  priority?: number | undefined;
2223
+ statusLog?: {
2224
+ id: string;
2225
+ date: string;
2226
+ title: string;
2227
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2228
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2229
+ description?: string | undefined;
2230
+ }[] | undefined;
1991
2231
  dependsOn?: string[] | undefined;
1992
2232
  discussedAt?: string | undefined;
1993
2233
  contextReady?: boolean | undefined;
@@ -2205,15 +2445,21 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2205
2445
  }>, "many">>;
2206
2446
  checklist: z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
2207
2447
  id: z.ZodString;
2448
+ /** Per-task 1-based position, displayed as C{number} (C1, C2, ...). Default 0
2449
+ * so legacy on-disk items without a number still parse; the TaskSchema
2450
+ * transform overwrites it with the real index+1. */
2451
+ number: z.ZodDefault<z.ZodNumber>;
2208
2452
  title: z.ZodString;
2209
2453
  checked: z.ZodDefault<z.ZodBoolean>;
2210
2454
  }, "strip", z.ZodTypeAny, {
2455
+ number: number;
2211
2456
  id: string;
2212
2457
  title: string;
2213
2458
  checked: boolean;
2214
2459
  }, {
2215
2460
  id: string;
2216
2461
  title: string;
2462
+ number?: number | undefined;
2217
2463
  checked?: boolean | undefined;
2218
2464
  }>]>, "many">>;
2219
2465
  subtasks: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -2274,6 +2520,7 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2274
2520
  toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2275
2521
  }[];
2276
2522
  checklist: (string | {
2523
+ number: number;
2277
2524
  id: string;
2278
2525
  title: string;
2279
2526
  checked: boolean;
@@ -2322,6 +2569,7 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2322
2569
  checklist?: (string | {
2323
2570
  id: string;
2324
2571
  title: string;
2572
+ number?: number | undefined;
2325
2573
  checked?: boolean | undefined;
2326
2574
  })[] | undefined;
2327
2575
  subtasks?: {
@@ -2338,6 +2586,7 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2338
2586
  }>, {
2339
2587
  checklist: {
2340
2588
  id: string;
2589
+ number: number;
2341
2590
  title: string;
2342
2591
  checked: boolean;
2343
2592
  }[];
@@ -2414,6 +2663,7 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2414
2663
  checklist?: (string | {
2415
2664
  id: string;
2416
2665
  title: string;
2666
+ number?: number | undefined;
2417
2667
  checked?: boolean | undefined;
2418
2668
  })[] | undefined;
2419
2669
  subtasks?: {
@@ -2456,6 +2706,29 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2456
2706
  file?: string | undefined;
2457
2707
  reason?: string | undefined;
2458
2708
  }>, "many">>;
2709
+ /** Chronological audit trail of the DERIVED status (planned/in-progress/blocked/done/...). Appended ONLY when the derived status changes during a rollup; `status` itself is NOT persisted (still computed from child tasks at read time). Empty = no transition recorded yet (treated as "planned"). */
2710
+ statusLog: z.ZodDefault<z.ZodArray<z.ZodObject<{
2711
+ id: z.ZodString;
2712
+ date: z.ZodString;
2713
+ fromStatus: z.ZodEnum<["draft", "discovery", "planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
2714
+ toStatus: z.ZodEnum<["draft", "discovery", "planned", "in-progress", "done", "blocked", "canceled", "rejected", "deferred", "waiting"]>;
2715
+ title: z.ZodString;
2716
+ description: z.ZodDefault<z.ZodString>;
2717
+ }, "strip", z.ZodTypeAny, {
2718
+ id: string;
2719
+ date: string;
2720
+ title: string;
2721
+ description: string;
2722
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
2723
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
2724
+ }, {
2725
+ id: string;
2726
+ date: string;
2727
+ title: string;
2728
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
2729
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
2730
+ description?: string | undefined;
2731
+ }>, "many">>;
2459
2732
  }, "strip", z.ZodTypeAny, {
2460
2733
  number: number;
2461
2734
  dependencies: string[];
@@ -2477,6 +2750,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2477
2750
  }[];
2478
2751
  shortId: string;
2479
2752
  priority: number;
2753
+ statusLog: {
2754
+ id: string;
2755
+ date: string;
2756
+ title: string;
2757
+ description: string;
2758
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
2759
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
2760
+ }[];
2480
2761
  dependsOn: string[];
2481
2762
  slug: string;
2482
2763
  discussedAt: string;
@@ -2491,6 +2772,7 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2491
2772
  tasks: {
2492
2773
  checklist: {
2493
2774
  id: string;
2775
+ number: number;
2494
2776
  title: string;
2495
2777
  checked: boolean;
2496
2778
  }[];
@@ -2566,6 +2848,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2566
2848
  }[] | undefined;
2567
2849
  shortId?: string | undefined;
2568
2850
  priority?: number | undefined;
2851
+ statusLog?: {
2852
+ id: string;
2853
+ date: string;
2854
+ title: string;
2855
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
2856
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
2857
+ description?: string | undefined;
2858
+ }[] | undefined;
2569
2859
  dependsOn?: string[] | undefined;
2570
2860
  featureId?: string | undefined;
2571
2861
  discussedAt?: string | undefined;
@@ -2610,6 +2900,7 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2610
2900
  checklist?: (string | {
2611
2901
  id: string;
2612
2902
  title: string;
2903
+ number?: number | undefined;
2613
2904
  checked?: boolean | undefined;
2614
2905
  })[] | undefined;
2615
2906
  subtasks?: {
@@ -2652,6 +2943,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2652
2943
  }[];
2653
2944
  shortId: string;
2654
2945
  priority: number;
2946
+ statusLog: {
2947
+ id: string;
2948
+ date: string;
2949
+ title: string;
2950
+ description: string;
2951
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2952
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
2953
+ }[];
2655
2954
  dependsOn: string[];
2656
2955
  discussedAt: string;
2657
2956
  contextReady: boolean;
@@ -2740,6 +3039,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2740
3039
  }[];
2741
3040
  shortId: string;
2742
3041
  priority: number;
3042
+ statusLog: {
3043
+ id: string;
3044
+ date: string;
3045
+ title: string;
3046
+ description: string;
3047
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
3048
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
3049
+ }[];
2743
3050
  dependsOn: string[];
2744
3051
  slug: string;
2745
3052
  discussedAt: string;
@@ -2754,6 +3061,7 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2754
3061
  tasks: {
2755
3062
  checklist: {
2756
3063
  id: string;
3064
+ number: number;
2757
3065
  title: string;
2758
3066
  checked: boolean;
2759
3067
  }[];
@@ -2827,6 +3135,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2827
3135
  }[] | undefined;
2828
3136
  shortId?: string | undefined;
2829
3137
  priority?: number | undefined;
3138
+ statusLog?: {
3139
+ id: string;
3140
+ date: string;
3141
+ title: string;
3142
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
3143
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting";
3144
+ description?: string | undefined;
3145
+ }[] | undefined;
2830
3146
  dependsOn?: string[] | undefined;
2831
3147
  discussedAt?: string | undefined;
2832
3148
  contextReady?: boolean | undefined;
@@ -2916,6 +3232,14 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2916
3232
  }[] | undefined;
2917
3233
  shortId?: string | undefined;
2918
3234
  priority?: number | undefined;
3235
+ statusLog?: {
3236
+ id: string;
3237
+ date: string;
3238
+ title: string;
3239
+ fromStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
3240
+ toStatus: "planned" | "in-progress" | "done" | "blocked" | "canceled" | "rejected" | "deferred" | "waiting" | "draft" | "discovery";
3241
+ description?: string | undefined;
3242
+ }[] | undefined;
2919
3243
  dependsOn?: string[] | undefined;
2920
3244
  featureId?: string | undefined;
2921
3245
  discussedAt?: string | undefined;
@@ -2960,6 +3284,7 @@ export declare const PlanWorkspaceSchema: z.ZodObject<{
2960
3284
  checklist?: (string | {
2961
3285
  id: string;
2962
3286
  title: string;
3287
+ number?: number | undefined;
2963
3288
  checked?: boolean | undefined;
2964
3289
  })[] | undefined;
2965
3290
  subtasks?: {
@@ -3009,6 +3334,7 @@ export type Project = z.infer<typeof ProjectSchema>;
3009
3334
  export type Subtask = z.infer<typeof SubtaskSchema>;
3010
3335
  export type ChecklistItem = z.infer<typeof ChecklistItemSchema>;
3011
3336
  export type StatusLogEntry = z.infer<typeof StatusLogEntrySchema>;
3337
+ export type PhaseStatusLogEntry = z.infer<typeof PhaseStatusLogEntrySchema>;
3012
3338
  export type Task = z.infer<typeof TaskSchema>;
3013
3339
  export type Phase = z.infer<typeof PhaseSchema> & {
3014
3340
  status: PhaseStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/schema.js CHANGED
@@ -111,6 +111,10 @@ export const SubtaskSchema = z.object({
111
111
  });
112
112
  export const ChecklistItemSchema = z.object({
113
113
  id: z.string().min(1),
114
+ /** Per-task 1-based position, displayed as C{number} (C1, C2, ...). Default 0
115
+ * so legacy on-disk items without a number still parse; the TaskSchema
116
+ * transform overwrites it with the real index+1. */
117
+ number: z.number().int().nonnegative().default(0),
114
118
  title: z.string().min(1),
115
119
  checked: z.boolean().default(false),
116
120
  });
@@ -142,6 +146,16 @@ export const StatusLogEntrySchema = z.object({
142
146
  title: z.string().min(1),
143
147
  description: z.string().default(""),
144
148
  });
149
+ /** Like StatusLogEntrySchema but for the DERIVED PHASE status, which includes
150
+ * the "draft" and "discovery" lifecycle states absent from TaskStatus. */
151
+ export const PhaseStatusLogEntrySchema = z.object({
152
+ id: z.string().min(1),
153
+ date: TimestampSchema,
154
+ fromStatus: PhaseStatusSchema,
155
+ toStatus: PhaseStatusSchema,
156
+ title: z.string().min(1),
157
+ description: z.string().default(""),
158
+ });
145
159
  export const TaskSchema = z.object({
146
160
  id: z.string(),
147
161
  phaseId: z.string(),
@@ -168,8 +182,8 @@ export const TaskSchema = z.object({
168
182
  ...task,
169
183
  checklist: task.checklist
170
184
  .map((item, index) => typeof item === "string"
171
- ? { id: createChecklistItemId(task.id, index + 1, item), title: item.trim(), checked: false }
172
- : { ...item, id: item.id || createChecklistItemId(task.id, index + 1, item.title), title: item.title.trim(), checked: item.checked ?? false })
185
+ ? { id: createChecklistItemId(task.id, index + 1, item), number: index + 1, title: item.trim(), checked: false }
186
+ : { ...item, id: item.id || createChecklistItemId(task.id, index + 1, item.title), number: index + 1, title: item.title.trim(), checked: item.checked ?? false })
173
187
  .filter((item) => item.title.length > 0),
174
188
  }));
175
189
  export const HandoffHistoryEntrySchema = z.object({
@@ -222,6 +236,8 @@ export const PhaseSchema = z.object({
222
236
  * this array only holds the pointer + clear reason + timestamp, so the phase
223
237
  * JSON stays lean and the archive is recoverable. */
224
238
  handoffHistory: z.array(HandoffHistoryEntrySchema).default([]),
239
+ /** Chronological audit trail of the DERIVED status (planned/in-progress/blocked/done/...). Appended ONLY when the derived status changes during a rollup; `status` itself is NOT persisted (still computed from child tasks at read time). Empty = no transition recorded yet (treated as "planned"). */
240
+ statusLog: z.array(PhaseStatusLogEntrySchema).default([]),
225
241
  });
226
242
  export const FeatureSchema = z.object({
227
243
  id: z.string(),
@@ -243,6 +259,8 @@ export const FeatureSchema = z.object({
243
259
  acceptedDecisions: z.array(AcceptedDecisionSchema).default([]),
244
260
  phaseIds: z.array(z.string().min(1)).default([]),
245
261
  dependsOn: z.array(z.string().min(1)).default([]),
262
+ /** Chronological audit trail of the DERIVED status (computed from child phases at read time). Appended ONLY when the derived status changes during a rollup; `status` itself is NOT persisted. Empty = no transition recorded yet (treated as "planned"). */
263
+ statusLog: z.array(StatusLogEntrySchema).default([]),
246
264
  createdAt: TimestampSchema,
247
265
  updatedAt: TimestampSchema,
248
266
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-plan/core",
3
- "version": "0.2.19-next.12",
3
+ "version": "0.2.19-next.14",
4
4
  "private": false,
5
5
  "description": "Harness-agnostic core for Agent Plan: schemas, persistence, ordering, status rollups, and markdown rendering.",
6
6
  "license": "MIT",