sysprom 1.21.2 → 1.22.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 (82) hide show
  1. package/dist/schema.json +0 -31
  2. package/dist/src/cli/commands/plan.js +54 -3
  3. package/dist/src/cli/commands/speckit.js +0 -1
  4. package/dist/src/cli/program.js +0 -2
  5. package/dist/src/index.d.ts +2 -2
  6. package/dist/src/index.js +2 -2
  7. package/dist/src/json-to-md.js +0 -8
  8. package/dist/src/mcp/server.js +0 -1
  9. package/dist/src/md-to-json.js +0 -10
  10. package/dist/src/operations/add-node.d.ts +0 -51
  11. package/dist/src/operations/add-relationship.d.ts +0 -34
  12. package/dist/src/operations/check.d.ts +0 -17
  13. package/dist/src/operations/graph-decision.d.ts +0 -17
  14. package/dist/src/operations/graph-dependency.d.ts +0 -17
  15. package/dist/src/operations/graph-refinement.d.ts +0 -17
  16. package/dist/src/operations/graph.d.ts +0 -17
  17. package/dist/src/operations/index.d.ts +3 -5
  18. package/dist/src/operations/index.js +3 -5
  19. package/dist/src/operations/infer-completeness.d.ts +0 -17
  20. package/dist/src/operations/infer-completeness.js +0 -4
  21. package/dist/src/operations/infer-derived.d.ts +0 -17
  22. package/dist/src/operations/infer-impact.d.ts +0 -119
  23. package/dist/src/operations/infer-lifecycle.d.ts +0 -17
  24. package/dist/src/operations/init-document.d.ts +0 -17
  25. package/dist/src/operations/json-to-markdown.d.ts +0 -17
  26. package/dist/src/operations/markdown-to-json.d.ts +0 -17
  27. package/dist/src/operations/next-id.d.ts +0 -17
  28. package/dist/src/operations/node-history.d.ts +0 -17
  29. package/dist/src/operations/plan-add-task.d.ts +0 -34
  30. package/dist/src/operations/{mark-task-done.d.ts → plan-complete-task.d.ts} +4 -41
  31. package/dist/src/operations/plan-complete-task.js +18 -0
  32. package/dist/src/operations/plan-gate.d.ts +0 -17
  33. package/dist/src/operations/plan-init.d.ts +0 -17
  34. package/dist/src/operations/plan-progress.d.ts +18 -17
  35. package/dist/src/operations/plan-progress.js +6 -0
  36. package/dist/src/operations/{mark-task-undone.d.ts → plan-reopen-task.d.ts} +4 -41
  37. package/dist/src/operations/plan-reopen-task.js +18 -0
  38. package/dist/src/operations/{add-plan-task.d.ts → plan-start-task.d.ts} +4 -41
  39. package/dist/src/operations/plan-start-task.js +18 -0
  40. package/dist/src/operations/plan-status.d.ts +22 -17
  41. package/dist/src/operations/plan-status.js +8 -0
  42. package/dist/src/operations/query-node.d.ts +0 -51
  43. package/dist/src/operations/query-nodes.d.ts +0 -34
  44. package/dist/src/operations/query-relationships.d.ts +0 -17
  45. package/dist/src/operations/remove-node.d.ts +0 -51
  46. package/dist/src/operations/remove-relationship.d.ts +0 -34
  47. package/dist/src/operations/rename.d.ts +0 -34
  48. package/dist/src/operations/search.d.ts +0 -34
  49. package/dist/src/operations/speckit-diff.d.ts +0 -17
  50. package/dist/src/operations/speckit-export.d.ts +0 -17
  51. package/dist/src/operations/speckit-import.d.ts +0 -17
  52. package/dist/src/operations/speckit-sync.d.ts +0 -51
  53. package/dist/src/operations/speckit-sync.js +0 -1
  54. package/dist/src/operations/state-at.d.ts +0 -17
  55. package/dist/src/operations/stats.d.ts +0 -17
  56. package/dist/src/operations/sync.d.ts +0 -51
  57. package/dist/src/operations/timeline.d.ts +0 -17
  58. package/dist/src/operations/trace-from-node.d.ts +0 -51
  59. package/dist/src/operations/update-metadata.d.ts +0 -34
  60. package/dist/src/operations/update-node.d.ts +0 -58
  61. package/dist/src/operations/validate.d.ts +0 -17
  62. package/dist/src/operations/validate.js +71 -0
  63. package/dist/src/schema.d.ts +0 -61
  64. package/dist/src/schema.js +0 -11
  65. package/dist/src/speckit/generate.js +17 -20
  66. package/dist/src/speckit/index.d.ts +1 -1
  67. package/dist/src/speckit/index.js +1 -1
  68. package/dist/src/speckit/parse.d.ts +1 -1
  69. package/dist/src/speckit/parse.js +20 -14
  70. package/dist/src/speckit/plan.d.ts +29 -7
  71. package/dist/src/speckit/plan.js +181 -47
  72. package/package.json +1 -1
  73. package/schema.json +0 -31
  74. package/dist/src/cli/commands/task.d.ts +0 -2
  75. package/dist/src/cli/commands/task.js +0 -157
  76. package/dist/src/operations/add-plan-task.js +0 -29
  77. package/dist/src/operations/mark-task-done.js +0 -30
  78. package/dist/src/operations/mark-task-undone.js +0 -30
  79. package/dist/src/operations/task-list.d.ts +0 -288
  80. package/dist/src/operations/task-list.js +0 -49
  81. package/dist/src/operations/update-plan-task.d.ts +0 -555
  82. package/dist/src/operations/update-plan-task.js +0 -35
package/dist/schema.json CHANGED
@@ -302,37 +302,6 @@
302
302
  },
303
303
  "type": "array"
304
304
  },
305
- "plan": {
306
- "description": "Execution plan as a sequence of tasks. Applicable to change nodes.",
307
- "items": {
308
- "additionalProperties": {},
309
- "description": "A single task within a change's execution plan.",
310
- "properties": {
311
- "description": {
312
- "anyOf": [
313
- {
314
- "type": "string"
315
- },
316
- {
317
- "items": {
318
- "type": "string"
319
- },
320
- "type": "array"
321
- }
322
- ]
323
- },
324
- "done": {
325
- "default": false,
326
- "type": "boolean"
327
- }
328
- },
329
- "required": [
330
- "description"
331
- ],
332
- "type": "object"
333
- },
334
- "type": "array"
335
- },
336
305
  "propagation": {
337
306
  "additionalProperties": {
338
307
  "type": "boolean"
@@ -2,7 +2,7 @@ import * as z from "zod";
2
2
  import { existsSync } from "node:fs";
3
3
  import { saveDocument } from "../../io.js";
4
4
  import { loadDoc, mutationOpts, persistDoc } from "../shared.js";
5
- import { planInitOp, planAddTaskOp, planStatusOp, planProgressOp, planGateOp, } from "../../operations/index.js";
5
+ import { planInitOp, planAddTaskOp, planStartTaskOp, planCompleteTaskOp, planReopenTaskOp, planStatusOp, planProgressOp, planGateOp, } from "../../operations/index.js";
6
6
  // ============================================================================
7
7
  // Subcommands
8
8
  // ============================================================================
@@ -67,6 +67,53 @@ const addTaskSubcommand = {
67
67
  }
68
68
  },
69
69
  };
70
+ const taskLifecycleOpts = mutationOpts.pick({ path: true }).extend({
71
+ prefix: z.string().describe("Plan prefix"),
72
+ task: z.string().describe("Task change node ID"),
73
+ });
74
+ function runTaskLifecycleUpdate(opts, handler, message) {
75
+ try {
76
+ const loaded = loadDoc(opts.path);
77
+ const updated = handler({
78
+ doc: loaded.doc,
79
+ prefix: opts.prefix,
80
+ taskId: opts.task,
81
+ });
82
+ persistDoc(updated, loaded, { ...opts, json: false, dryRun: false });
83
+ console.log(message);
84
+ }
85
+ catch (err) {
86
+ console.error(err instanceof Error ? err.message : String(err));
87
+ process.exit(1);
88
+ }
89
+ }
90
+ const startSubcommand = {
91
+ name: "start",
92
+ description: planStartTaskOp.def.description,
93
+ apiLink: planStartTaskOp.def.name,
94
+ opts: taskLifecycleOpts,
95
+ action(_args, opts) {
96
+ runTaskLifecycleUpdate(opts, ({ doc, prefix, taskId }) => planStartTaskOp({ doc, prefix, taskId }), `Marked ${opts.task} in progress`);
97
+ },
98
+ };
99
+ const completeSubcommand = {
100
+ name: "complete",
101
+ description: planCompleteTaskOp.def.description,
102
+ apiLink: planCompleteTaskOp.def.name,
103
+ opts: taskLifecycleOpts,
104
+ action(_args, opts) {
105
+ runTaskLifecycleUpdate(opts, ({ doc, prefix, taskId }) => planCompleteTaskOp({ doc, prefix, taskId }), `Marked ${opts.task} complete`);
106
+ },
107
+ };
108
+ const reopenSubcommand = {
109
+ name: "reopen",
110
+ description: planReopenTaskOp.def.description,
111
+ apiLink: planReopenTaskOp.def.name,
112
+ opts: taskLifecycleOpts,
113
+ action(_args, opts) {
114
+ runTaskLifecycleUpdate(opts, ({ doc, prefix, taskId }) => planReopenTaskOp({ doc, prefix, taskId }), `Reopened ${opts.task}`);
115
+ },
116
+ };
70
117
  const statusOpts = mutationOpts.pick({ path: true }).extend({
71
118
  prefix: z.string().describe("Plan prefix"),
72
119
  json: z.boolean().optional().describe("Output as JSON"),
@@ -90,7 +137,7 @@ const statusSubcommand = {
90
137
  console.log(`Constitution: ${formatBoolean(status.constitution.defined)} (${String(status.constitution.principleCount)} principles)`);
91
138
  console.log(`Spec: ${formatBoolean(status.spec.defined)} (${String(status.spec.userStoryCount)} user stories)`);
92
139
  console.log(`Plan: ${formatBoolean(status.plan.defined)} (${String(status.plan.phaseCount)} phases)`);
93
- console.log(`Tasks: ${String(status.tasks.done)}/${String(status.tasks.total)} done`);
140
+ console.log(`Tasks: ${String(status.tasks.done)}/${String(status.tasks.total)} done, ${String(status.tasks.blocked)} blocked`);
94
141
  console.log(`Checklist: ${formatBoolean(status.checklist.defined)} (${String(status.checklist.done)}/${String(status.checklist.total)})`);
95
142
  console.log();
96
143
  console.log(`Next: ${status.nextStep}`);
@@ -127,7 +174,8 @@ const progressSubcommand = {
127
174
  const name = phase.name.padEnd(20);
128
175
  const percent = String(phase.percent).padStart(3);
129
176
  const ratio = `(${String(phase.done)}/${String(phase.total)})`;
130
- console.log(`${name} [${bar}] ${percent}% ${ratio}`);
177
+ const blocked = phase.blocked ? " ⚠ blocked" : "";
178
+ console.log(`${name} [${bar}] ${percent}% ${ratio}${blocked}`);
131
179
  }
132
180
  }
133
181
  catch (err) {
@@ -199,6 +247,9 @@ export const planCommand = {
199
247
  subcommands: [
200
248
  initSubcommand,
201
249
  addTaskSubcommand,
250
+ startSubcommand,
251
+ completeSubcommand,
252
+ reopenSubcommand,
202
253
  statusSubcommand,
203
254
  progressSubcommand,
204
255
  gateSubcommand,
@@ -239,7 +239,6 @@ const syncSubcommand = {
239
239
  rationale: specKitNode.rationale ?? syspromNode.rationale,
240
240
  scope: specKitNode.scope ?? syspromNode.scope,
241
241
  operations: specKitNode.operations ?? syspromNode.operations,
242
- plan: specKitNode.plan ?? syspromNode.plan,
243
242
  };
244
243
  mergedNodes.set(id, merged);
245
244
  }
@@ -40,7 +40,6 @@ import { renameCommand } from "./commands/rename.js";
40
40
  import { queryCommand } from "./commands/query.js";
41
41
  import { updateCommand } from "./commands/update.js";
42
42
  import { speckitCommand } from "./commands/speckit.js";
43
- import { taskCommand } from "./commands/task.js";
44
43
  import { planCommand } from "./commands/plan.js";
45
44
  import { syncCommandDef } from "./commands/sync.js";
46
45
  import { inferCommand } from "./commands/infer.js";
@@ -69,7 +68,6 @@ export const commands = [
69
68
  graphCommand,
70
69
  renameCommand,
71
70
  speckitCommand,
72
- taskCommand,
73
71
  planCommand,
74
72
  syncCommandDef,
75
73
  inferCommand,
@@ -5,8 +5,8 @@
5
5
  * system came from, what decisions shaped it, and how it reached its current form.
6
6
  * @packageDocumentation
7
7
  */
8
- export { SysProMDocument, Node, Relationship, NodeType, NodeStatus, RelationshipType, ImpactPolarity, Text, Option, Operation, Task, ExternalReference, ExternalReferenceRole, Metadata, NODE_TYPE_LABELS, NODE_LABEL_TO_TYPE, RELATIONSHIP_TYPE_LABELS, RELATIONSHIP_LABEL_TO_TYPE, IMPACT_POLARITY_LABELS, EXTERNAL_REFERENCE_ROLE_LABELS, EXTERNAL_REFERENCE_LABEL_TO_ROLE, NODE_STATUSES, NODE_FILE_MAP, NODE_ID_PREFIX, toJSONSchema, } from "./schema.js";
9
- export { defineOperation, type OperationDef, type DefinedOperation, addNodeOp, removeNodeOp, updateNodeOp, addRelationshipOp, removeRelationshipOp, updateMetadataOp, nextIdOp, initDocumentOp, addPlanTaskOp, updatePlanTaskOp, markTaskDoneOp, markTaskUndoneOp, taskListOp, planInitOp, planAddTaskOp, planStatusOp, planProgressOp, planGateOp, queryNodesOp, queryNodeOp, queryRelationshipsOp, traceFromNodeOp, timelineOp, nodeHistoryOp, stateAtOp, validateOp, statsOp, searchOp, checkOp, graphOp, renameOp, jsonToMarkdownOp, markdownToJsonOp, speckitImportOp, speckitExportOp, speckitSyncOp, speckitDiffOp, inferCompletenessOp, inferLifecycleOp, inferImpactOp, impactSummaryOp, inferDerivedOp, type RemoveResult, type ValidationResult, type DocumentStats, type NodeDetail, type TraceNode, type TimelineEvent, type NodeState, type PlanStatusResult, type PhaseProgressResult, type GateResultOutput, type SyncResult, type DiffResult, type CompletenessOutput, type LifecycleOutput, type ImpactOutput, type ImpactSummaryOutput, type DerivedOutput, } from "./operations/index.js";
8
+ export { SysProMDocument, Node, Relationship, NodeType, NodeStatus, RelationshipType, ImpactPolarity, Text, Option, Operation, ExternalReference, ExternalReferenceRole, Metadata, NODE_TYPE_LABELS, NODE_LABEL_TO_TYPE, RELATIONSHIP_TYPE_LABELS, RELATIONSHIP_LABEL_TO_TYPE, IMPACT_POLARITY_LABELS, EXTERNAL_REFERENCE_ROLE_LABELS, EXTERNAL_REFERENCE_LABEL_TO_ROLE, NODE_STATUSES, NODE_FILE_MAP, NODE_ID_PREFIX, toJSONSchema, } from "./schema.js";
9
+ export { defineOperation, type OperationDef, type DefinedOperation, addNodeOp, removeNodeOp, updateNodeOp, addRelationshipOp, removeRelationshipOp, updateMetadataOp, nextIdOp, initDocumentOp, planInitOp, planAddTaskOp, planStartTaskOp, planCompleteTaskOp, planReopenTaskOp, planStatusOp, planProgressOp, planGateOp, queryNodesOp, queryNodeOp, queryRelationshipsOp, traceFromNodeOp, timelineOp, nodeHistoryOp, stateAtOp, validateOp, statsOp, searchOp, checkOp, graphOp, renameOp, jsonToMarkdownOp, markdownToJsonOp, speckitImportOp, speckitExportOp, speckitSyncOp, speckitDiffOp, inferCompletenessOp, inferLifecycleOp, inferImpactOp, impactSummaryOp, inferDerivedOp, type RemoveResult, type ValidationResult, type DocumentStats, type NodeDetail, type TraceNode, type TimelineEvent, type NodeState, type PlanStatusResult, type PhaseProgressResult, type GateResultOutput, type SyncResult, type DiffResult, type CompletenessOutput, type LifecycleOutput, type ImpactOutput, type ImpactSummaryOutput, type DerivedOutput, } from "./operations/index.js";
10
10
  export { jsonToMarkdownSingle, jsonToMarkdownMultiDoc, jsonToMarkdown, type ConvertOptions, } from "./json-to-md.js";
11
11
  export { markdownSingleToJson, markdownMultiDocToJson, markdownToJson, } from "./md-to-json.js";
12
12
  export { RELATIONSHIP_ENDPOINT_TYPES, isValidEndpointPair, } from "./endpoint-types.js";
package/dist/src/index.js CHANGED
@@ -6,9 +6,9 @@
6
6
  * @packageDocumentation
7
7
  */
8
8
  // Schema types and validators
9
- export { SysProMDocument, Node, Relationship, NodeType, NodeStatus, RelationshipType, ImpactPolarity, Text, Option, Operation, Task, ExternalReference, ExternalReferenceRole, Metadata, NODE_TYPE_LABELS, NODE_LABEL_TO_TYPE, RELATIONSHIP_TYPE_LABELS, RELATIONSHIP_LABEL_TO_TYPE, IMPACT_POLARITY_LABELS, EXTERNAL_REFERENCE_ROLE_LABELS, EXTERNAL_REFERENCE_LABEL_TO_ROLE, NODE_STATUSES, NODE_FILE_MAP, NODE_ID_PREFIX, toJSONSchema, } from "./schema.js";
9
+ export { SysProMDocument, Node, Relationship, NodeType, NodeStatus, RelationshipType, ImpactPolarity, Text, Option, Operation, ExternalReference, ExternalReferenceRole, Metadata, NODE_TYPE_LABELS, NODE_LABEL_TO_TYPE, RELATIONSHIP_TYPE_LABELS, RELATIONSHIP_LABEL_TO_TYPE, IMPACT_POLARITY_LABELS, EXTERNAL_REFERENCE_ROLE_LABELS, EXTERNAL_REFERENCE_LABEL_TO_ROLE, NODE_STATUSES, NODE_FILE_MAP, NODE_ID_PREFIX, toJSONSchema, } from "./schema.js";
10
10
  // Operations (single source of truth for domain logic + metadata)
11
- export { defineOperation, addNodeOp, removeNodeOp, updateNodeOp, addRelationshipOp, removeRelationshipOp, updateMetadataOp, nextIdOp, initDocumentOp, addPlanTaskOp, updatePlanTaskOp, markTaskDoneOp, markTaskUndoneOp, taskListOp, planInitOp, planAddTaskOp, planStatusOp, planProgressOp, planGateOp, queryNodesOp, queryNodeOp, queryRelationshipsOp, traceFromNodeOp, timelineOp, nodeHistoryOp, stateAtOp, validateOp, statsOp, searchOp, checkOp, graphOp, renameOp, jsonToMarkdownOp, markdownToJsonOp, speckitImportOp, speckitExportOp, speckitSyncOp, speckitDiffOp, inferCompletenessOp, inferLifecycleOp, inferImpactOp, impactSummaryOp, inferDerivedOp, } from "./operations/index.js";
11
+ export { defineOperation, addNodeOp, removeNodeOp, updateNodeOp, addRelationshipOp, removeRelationshipOp, updateMetadataOp, nextIdOp, initDocumentOp, planInitOp, planAddTaskOp, planStartTaskOp, planCompleteTaskOp, planReopenTaskOp, planStatusOp, planProgressOp, planGateOp, queryNodesOp, queryNodeOp, queryRelationshipsOp, traceFromNodeOp, timelineOp, nodeHistoryOp, stateAtOp, validateOp, statsOp, searchOp, checkOp, graphOp, renameOp, jsonToMarkdownOp, markdownToJsonOp, speckitImportOp, speckitExportOp, speckitSyncOp, speckitDiffOp, inferCompletenessOp, inferLifecycleOp, inferImpactOp, impactSummaryOp, inferDerivedOp, } from "./operations/index.js";
12
12
  // Conversion
13
13
  export { jsonToMarkdownSingle, jsonToMarkdownMultiDoc, jsonToMarkdown, } from "./json-to-md.js";
14
14
  export { markdownSingleToJson, markdownMultiDocToJson, markdownToJson, } from "./md-to-json.js";
@@ -244,14 +244,6 @@ function renderNode(n, headingLevel, fromIdx, nodeMap, currentFile) {
244
244
  }
245
245
  lines.push("");
246
246
  }
247
- if (n.plan && n.plan.length > 0) {
248
- lines.push(`${"#".repeat(headingLevel + 1)} Plan`);
249
- lines.push("");
250
- for (const t of n.plan) {
251
- lines.push(`- [${t.done ? "x" : " "}] ${renderText(t.description)}`);
252
- }
253
- lines.push("");
254
- }
255
247
  // Lifecycle
256
248
  if (n.lifecycle) {
257
249
  lines.push(`${"#".repeat(headingLevel + 1)} Lifecycle`);
@@ -316,7 +316,6 @@ server.registerTool("update-node", {
316
316
  "rationale",
317
317
  "scope",
318
318
  "operations",
319
- "plan",
320
319
  "propagation",
321
320
  "includes",
322
321
  "external_references",
@@ -322,16 +322,6 @@ function parseNodeFromSection(section) {
322
322
  node.propagation = booleanOnly;
323
323
  }
324
324
  }
325
- if (child.heading === "Plan") {
326
- const plan = [];
327
- for (const line of child.body.split("\n")) {
328
- const m = /^- \[([ x])\] (.+)$/.exec(line);
329
- if (m)
330
- plan.push({ description: m[2], done: m[1] === "x" });
331
- }
332
- if (plan.length > 0)
333
- node.plan = plan;
334
- }
335
325
  }
336
326
  // Relationships
337
327
  const rels = parseRelationshipsFromBody(body, id);
@@ -97,18 +97,6 @@ export declare const addNodeOp: import("./define-operation.js").DefinedOperation
97
97
  description?: string | string[] | undefined;
98
98
  };
99
99
  }>>;
100
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
101
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
102
- is(value: unknown): value is string | string[];
103
- };
104
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
105
- }, z.core.$loose> & {
106
- is(value: unknown): value is {
107
- [x: string]: unknown;
108
- description: string | string[];
109
- done?: boolean | undefined;
110
- };
111
- }>>;
112
100
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
113
101
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
114
102
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -240,11 +228,6 @@ export declare const addNodeOp: import("./define-operation.js").DefinedOperation
240
228
  target?: string | undefined;
241
229
  description?: string | string[] | undefined;
242
230
  }[] | undefined;
243
- plan?: {
244
- [x: string]: unknown;
245
- description: string | string[];
246
- done?: boolean | undefined;
247
- }[] | undefined;
248
231
  propagation?: Record<string, boolean> | undefined;
249
232
  includes?: string[] | undefined;
250
233
  external_references?: {
@@ -352,18 +335,6 @@ export declare const addNodeOp: import("./define-operation.js").DefinedOperation
352
335
  description?: string | string[] | undefined;
353
336
  };
354
337
  }>>;
355
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
356
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
357
- is(value: unknown): value is string | string[];
358
- };
359
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
360
- }, z.core.$loose> & {
361
- is(value: unknown): value is {
362
- [x: string]: unknown;
363
- description: string | string[];
364
- done?: boolean | undefined;
365
- };
366
- }>>;
367
338
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
368
339
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
369
340
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -512,11 +483,6 @@ export declare const addNodeOp: import("./define-operation.js").DefinedOperation
512
483
  target?: string | undefined;
513
484
  description?: string | string[] | undefined;
514
485
  }[] | undefined;
515
- plan?: {
516
- [x: string]: unknown;
517
- description: string | string[];
518
- done?: boolean | undefined;
519
- }[] | undefined;
520
486
  propagation?: Record<string, boolean> | undefined;
521
487
  includes?: string[] | undefined;
522
488
  external_references?: {
@@ -646,18 +612,6 @@ export declare const addNodeOp: import("./define-operation.js").DefinedOperation
646
612
  description?: string | string[] | undefined;
647
613
  };
648
614
  }>>;
649
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
650
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
651
- is(value: unknown): value is string | string[];
652
- };
653
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
654
- }, z.core.$loose> & {
655
- is(value: unknown): value is {
656
- [x: string]: unknown;
657
- description: string | string[];
658
- done?: boolean | undefined;
659
- };
660
- }>>;
661
615
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
662
616
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
663
617
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -789,11 +743,6 @@ export declare const addNodeOp: import("./define-operation.js").DefinedOperation
789
743
  target?: string | undefined;
790
744
  description?: string | string[] | undefined;
791
745
  }[] | undefined;
792
- plan?: {
793
- [x: string]: unknown;
794
- description: string | string[];
795
- done?: boolean | undefined;
796
- }[] | undefined;
797
746
  propagation?: Record<string, boolean> | undefined;
798
747
  includes?: string[] | undefined;
799
748
  external_references?: {
@@ -91,18 +91,6 @@ export declare const addRelationshipOp: import("./define-operation.js").DefinedO
91
91
  description?: string | string[] | undefined;
92
92
  };
93
93
  }>>;
94
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
95
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
96
- is(value: unknown): value is string | string[];
97
- };
98
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
99
- }, z.core.$loose> & {
100
- is(value: unknown): value is {
101
- [x: string]: unknown;
102
- description: string | string[];
103
- done?: boolean | undefined;
104
- };
105
- }>>;
106
94
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
107
95
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
108
96
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -234,11 +222,6 @@ export declare const addRelationshipOp: import("./define-operation.js").DefinedO
234
222
  target?: string | undefined;
235
223
  description?: string | string[] | undefined;
236
224
  }[] | undefined;
237
- plan?: {
238
- [x: string]: unknown;
239
- description: string | string[];
240
- done?: boolean | undefined;
241
- }[] | undefined;
242
225
  propagation?: Record<string, boolean> | undefined;
243
226
  includes?: string[] | undefined;
244
227
  external_references?: {
@@ -408,18 +391,6 @@ export declare const addRelationshipOp: import("./define-operation.js").DefinedO
408
391
  description?: string | string[] | undefined;
409
392
  };
410
393
  }>>;
411
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
412
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
413
- is(value: unknown): value is string | string[];
414
- };
415
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
416
- }, z.core.$loose> & {
417
- is(value: unknown): value is {
418
- [x: string]: unknown;
419
- description: string | string[];
420
- done?: boolean | undefined;
421
- };
422
- }>>;
423
394
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
424
395
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
425
396
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -551,11 +522,6 @@ export declare const addRelationshipOp: import("./define-operation.js").DefinedO
551
522
  target?: string | undefined;
552
523
  description?: string | string[] | undefined;
553
524
  }[] | undefined;
554
- plan?: {
555
- [x: string]: unknown;
556
- description: string | string[];
557
- done?: boolean | undefined;
558
- }[] | undefined;
559
525
  propagation?: Record<string, boolean> | undefined;
560
526
  includes?: string[] | undefined;
561
527
  external_references?: {
@@ -92,18 +92,6 @@ export declare const checkOp: import("./define-operation.js").DefinedOperation<z
92
92
  description?: string | string[] | undefined;
93
93
  };
94
94
  }>>;
95
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
96
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
97
- is(value: unknown): value is string | string[];
98
- };
99
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
100
- }, z.core.$loose> & {
101
- is(value: unknown): value is {
102
- [x: string]: unknown;
103
- description: string | string[];
104
- done?: boolean | undefined;
105
- };
106
- }>>;
107
95
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
108
96
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
109
97
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -235,11 +223,6 @@ export declare const checkOp: import("./define-operation.js").DefinedOperation<z
235
223
  target?: string | undefined;
236
224
  description?: string | string[] | undefined;
237
225
  }[] | undefined;
238
- plan?: {
239
- [x: string]: unknown;
240
- description: string | string[];
241
- done?: boolean | undefined;
242
- }[] | undefined;
243
226
  propagation?: Record<string, boolean> | undefined;
244
227
  includes?: string[] | undefined;
245
228
  external_references?: {
@@ -88,18 +88,6 @@ export declare const graphDecisionOp: import("./define-operation.js").DefinedOpe
88
88
  description?: string | string[] | undefined;
89
89
  };
90
90
  }>>;
91
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
92
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
93
- is(value: unknown): value is string | string[];
94
- };
95
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
96
- }, z.core.$loose> & {
97
- is(value: unknown): value is {
98
- [x: string]: unknown;
99
- description: string | string[];
100
- done?: boolean | undefined;
101
- };
102
- }>>;
103
91
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
104
92
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
105
93
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -231,11 +219,6 @@ export declare const graphDecisionOp: import("./define-operation.js").DefinedOpe
231
219
  target?: string | undefined;
232
220
  description?: string | string[] | undefined;
233
221
  }[] | undefined;
234
- plan?: {
235
- [x: string]: unknown;
236
- description: string | string[];
237
- done?: boolean | undefined;
238
- }[] | undefined;
239
222
  propagation?: Record<string, boolean> | undefined;
240
223
  includes?: string[] | undefined;
241
224
  external_references?: {
@@ -88,18 +88,6 @@ export declare const graphDependencyOp: import("./define-operation.js").DefinedO
88
88
  description?: string | string[] | undefined;
89
89
  };
90
90
  }>>;
91
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
92
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
93
- is(value: unknown): value is string | string[];
94
- };
95
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
96
- }, z.core.$loose> & {
97
- is(value: unknown): value is {
98
- [x: string]: unknown;
99
- description: string | string[];
100
- done?: boolean | undefined;
101
- };
102
- }>>;
103
91
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
104
92
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
105
93
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -231,11 +219,6 @@ export declare const graphDependencyOp: import("./define-operation.js").DefinedO
231
219
  target?: string | undefined;
232
220
  description?: string | string[] | undefined;
233
221
  }[] | undefined;
234
- plan?: {
235
- [x: string]: unknown;
236
- description: string | string[];
237
- done?: boolean | undefined;
238
- }[] | undefined;
239
222
  propagation?: Record<string, boolean> | undefined;
240
223
  includes?: string[] | undefined;
241
224
  external_references?: {
@@ -88,18 +88,6 @@ export declare const graphRefinementOp: import("./define-operation.js").DefinedO
88
88
  description?: string | string[] | undefined;
89
89
  };
90
90
  }>>;
91
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
92
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
93
- is(value: unknown): value is string | string[];
94
- };
95
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
96
- }, z.core.$loose> & {
97
- is(value: unknown): value is {
98
- [x: string]: unknown;
99
- description: string | string[];
100
- done?: boolean | undefined;
101
- };
102
- }>>;
103
91
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
104
92
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
105
93
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -231,11 +219,6 @@ export declare const graphRefinementOp: import("./define-operation.js").DefinedO
231
219
  target?: string | undefined;
232
220
  description?: string | string[] | undefined;
233
221
  }[] | undefined;
234
- plan?: {
235
- [x: string]: unknown;
236
- description: string | string[];
237
- done?: boolean | undefined;
238
- }[] | undefined;
239
222
  propagation?: Record<string, boolean> | undefined;
240
223
  includes?: string[] | undefined;
241
224
  external_references?: {
@@ -88,18 +88,6 @@ export declare const graphOp: import("./define-operation.js").DefinedOperation<z
88
88
  description?: string | string[] | undefined;
89
89
  };
90
90
  }>>;
91
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
92
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
93
- is(value: unknown): value is string | string[];
94
- };
95
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
96
- }, z.core.$loose> & {
97
- is(value: unknown): value is {
98
- [x: string]: unknown;
99
- description: string | string[];
100
- done?: boolean | undefined;
101
- };
102
- }>>;
103
91
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
104
92
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
105
93
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -231,11 +219,6 @@ export declare const graphOp: import("./define-operation.js").DefinedOperation<z
231
219
  target?: string | undefined;
232
220
  description?: string | string[] | undefined;
233
221
  }[] | undefined;
234
- plan?: {
235
- [x: string]: unknown;
236
- description: string | string[];
237
- done?: boolean | undefined;
238
- }[] | undefined;
239
222
  propagation?: Record<string, boolean> | undefined;
240
223
  includes?: string[] | undefined;
241
224
  external_references?: {
@@ -7,13 +7,11 @@ export { removeRelationshipOp } from "./remove-relationship.js";
7
7
  export { updateMetadataOp } from "./update-metadata.js";
8
8
  export { nextIdOp } from "./next-id.js";
9
9
  export { initDocumentOp } from "./init-document.js";
10
- export { addPlanTaskOp } from "./add-plan-task.js";
11
- export { updatePlanTaskOp } from "./update-plan-task.js";
12
- export { markTaskDoneOp } from "./mark-task-done.js";
13
- export { markTaskUndoneOp } from "./mark-task-undone.js";
14
- export { taskListOp } from "./task-list.js";
15
10
  export { planInitOp } from "./plan-init.js";
16
11
  export { planAddTaskOp } from "./plan-add-task.js";
12
+ export { planStartTaskOp } from "./plan-start-task.js";
13
+ export { planCompleteTaskOp } from "./plan-complete-task.js";
14
+ export { planReopenTaskOp } from "./plan-reopen-task.js";
17
15
  export { planStatusOp, type PlanStatusResult } from "./plan-status.js";
18
16
  export { planProgressOp, type PhaseProgressResult } from "./plan-progress.js";
19
17
  export { planGateOp, type GateResultOutput } from "./plan-gate.js";
@@ -8,13 +8,11 @@ export { removeRelationshipOp } from "./remove-relationship.js";
8
8
  export { updateMetadataOp } from "./update-metadata.js";
9
9
  export { nextIdOp } from "./next-id.js";
10
10
  export { initDocumentOp } from "./init-document.js";
11
- export { addPlanTaskOp } from "./add-plan-task.js";
12
- export { updatePlanTaskOp } from "./update-plan-task.js";
13
- export { markTaskDoneOp } from "./mark-task-done.js";
14
- export { markTaskUndoneOp } from "./mark-task-undone.js";
15
- export { taskListOp } from "./task-list.js";
16
11
  export { planInitOp } from "./plan-init.js";
17
12
  export { planAddTaskOp } from "./plan-add-task.js";
13
+ export { planStartTaskOp } from "./plan-start-task.js";
14
+ export { planCompleteTaskOp } from "./plan-complete-task.js";
15
+ export { planReopenTaskOp } from "./plan-reopen-task.js";
18
16
  export { planStatusOp } from "./plan-status.js";
19
17
  export { planProgressOp } from "./plan-progress.js";
20
18
  export { planGateOp } from "./plan-gate.js";
@@ -164,18 +164,6 @@ export declare const inferCompletenessOp: import("./define-operation.js").Define
164
164
  description?: string | string[] | undefined;
165
165
  };
166
166
  }>>;
167
- plan: z.ZodOptional<z.ZodArray<z.ZodObject<{
168
- description: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
169
- is(value: unknown): value is string | string[];
170
- };
171
- done: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
172
- }, z.core.$loose> & {
173
- is(value: unknown): value is {
174
- [x: string]: unknown;
175
- description: string | string[];
176
- done?: boolean | undefined;
177
- };
178
- }>>;
179
167
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
180
168
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
181
169
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -307,11 +295,6 @@ export declare const inferCompletenessOp: import("./define-operation.js").Define
307
295
  target?: string | undefined;
308
296
  description?: string | string[] | undefined;
309
297
  }[] | undefined;
310
- plan?: {
311
- [x: string]: unknown;
312
- description: string | string[];
313
- done?: boolean | undefined;
314
- }[] | undefined;
315
298
  propagation?: Record<string, boolean> | undefined;
316
299
  includes?: string[] | undefined;
317
300
  external_references?: {
@@ -97,10 +97,6 @@ export const inferCompletenessOp = defineOperation({
97
97
  issues.push("Change has no scope");
98
98
  score -= 0.2;
99
99
  }
100
- if (!node.plan || node.plan.length === 0) {
101
- issues.push("Change has no plan");
102
- score -= 0.1;
103
- }
104
100
  }
105
101
  if (node.type === "invariant") {
106
102
  if (!node.description) {