sysprom 1.20.0 → 1.21.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 (74) hide show
  1. package/dist/schema.json +4 -44
  2. package/dist/src/cli/commands/add.js +6 -2
  3. package/dist/src/cli/commands/query.js +5 -3
  4. package/dist/src/cli/commands/speckit.js +2 -2
  5. package/dist/src/cli/commands/update.js +6 -4
  6. package/dist/src/endpoint-types.d.ts +4 -0
  7. package/dist/src/endpoint-types.js +22 -121
  8. package/dist/src/json-to-md.js +2 -16
  9. package/dist/src/lifecycle-state.d.ts +9 -0
  10. package/dist/src/lifecycle-state.js +22 -0
  11. package/dist/src/mcp/server.js +3 -6
  12. package/dist/src/md-to-json.js +1 -19
  13. package/dist/src/operations/add-node.d.ts +21 -135
  14. package/dist/src/operations/add-plan-task.d.ts +14 -90
  15. package/dist/src/operations/add-relationship.d.ts +16 -105
  16. package/dist/src/operations/check.d.ts +7 -45
  17. package/dist/src/operations/graph-decision.d.ts +7 -45
  18. package/dist/src/operations/graph-decision.js +0 -1
  19. package/dist/src/operations/graph-dependency.d.ts +7 -45
  20. package/dist/src/operations/graph-dependency.js +3 -23
  21. package/dist/src/operations/graph-refinement.d.ts +7 -45
  22. package/dist/src/operations/graph-shared.js +1 -3
  23. package/dist/src/operations/graph.d.ts +7 -45
  24. package/dist/src/operations/infer-completeness.d.ts +10 -54
  25. package/dist/src/operations/infer-derived.d.ts +7 -45
  26. package/dist/src/operations/infer-derived.js +28 -4
  27. package/dist/src/operations/infer-impact.d.ts +49 -315
  28. package/dist/src/operations/infer-impact.js +22 -3
  29. package/dist/src/operations/infer-lifecycle.d.ts +8 -106
  30. package/dist/src/operations/infer-lifecycle.js +4 -10
  31. package/dist/src/operations/init-document.d.ts +7 -45
  32. package/dist/src/operations/json-to-markdown.d.ts +7 -45
  33. package/dist/src/operations/mark-task-done.d.ts +14 -90
  34. package/dist/src/operations/mark-task-undone.d.ts +14 -90
  35. package/dist/src/operations/markdown-to-json.d.ts +7 -45
  36. package/dist/src/operations/next-id.d.ts +8 -48
  37. package/dist/src/operations/node-history.d.ts +7 -45
  38. package/dist/src/operations/plan-add-task.d.ts +14 -90
  39. package/dist/src/operations/plan-gate.d.ts +7 -45
  40. package/dist/src/operations/plan-init.d.ts +7 -45
  41. package/dist/src/operations/plan-progress.d.ts +7 -45
  42. package/dist/src/operations/plan-status.d.ts +7 -45
  43. package/dist/src/operations/query-node.d.ts +29 -195
  44. package/dist/src/operations/query-nodes.d.ts +15 -91
  45. package/dist/src/operations/query-nodes.js +6 -4
  46. package/dist/src/operations/query-relationships.d.ts +9 -60
  47. package/dist/src/operations/remove-node.d.ts +21 -135
  48. package/dist/src/operations/remove-node.js +11 -1
  49. package/dist/src/operations/remove-relationship.d.ts +15 -104
  50. package/dist/src/operations/rename.d.ts +14 -90
  51. package/dist/src/operations/search.d.ts +14 -90
  52. package/dist/src/operations/speckit-diff.d.ts +7 -45
  53. package/dist/src/operations/speckit-export.d.ts +7 -45
  54. package/dist/src/operations/speckit-import.d.ts +7 -45
  55. package/dist/src/operations/speckit-sync.d.ts +22 -136
  56. package/dist/src/operations/speckit-sync.js +3 -3
  57. package/dist/src/operations/state-at.d.ts +7 -45
  58. package/dist/src/operations/stats.d.ts +7 -45
  59. package/dist/src/operations/sync.d.ts +21 -135
  60. package/dist/src/operations/task-list.d.ts +7 -45
  61. package/dist/src/operations/timeline.d.ts +7 -45
  62. package/dist/src/operations/trace-from-node.d.ts +21 -135
  63. package/dist/src/operations/update-metadata.d.ts +14 -90
  64. package/dist/src/operations/update-node.d.ts +20 -155
  65. package/dist/src/operations/update-plan-task.d.ts +14 -90
  66. package/dist/src/operations/validate.d.ts +7 -45
  67. package/dist/src/operations/validate.js +8 -6
  68. package/dist/src/schema.d.ts +22 -164
  69. package/dist/src/schema.js +4 -27
  70. package/dist/src/speckit/generate.js +10 -7
  71. package/dist/src/speckit/parse.js +6 -3
  72. package/dist/src/speckit/plan.js +1 -1
  73. package/package.json +12 -1
  74. package/schema.json +4 -44
@@ -89,39 +89,18 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
89
89
  gate: "gate";
90
90
  mode: "mode";
91
91
  artefact: "artefact";
92
- artefact_flow: "artefact_flow";
93
92
  decision: "decision";
94
93
  change: "change";
95
94
  view: "view";
96
95
  milestone: "milestone";
97
- version: "version";
98
96
  }> & {
99
- is(value: unknown): value is "intent" | "concept" | "capability" | "element" | "realisation" | "invariant" | "principle" | "policy" | "protocol" | "stage" | "role" | "gate" | "mode" | "artefact" | "artefact_flow" | "decision" | "change" | "view" | "milestone" | "version";
97
+ is(value: unknown): value is "intent" | "concept" | "capability" | "element" | "realisation" | "invariant" | "principle" | "policy" | "protocol" | "stage" | "role" | "gate" | "mode" | "artefact" | "decision" | "change" | "view" | "milestone";
100
98
  };
101
99
  name: z.ZodString;
102
100
  description: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
103
101
  is(value: unknown): value is string | string[];
104
102
  }>;
105
- status: z.ZodOptional<z.ZodEnum<{
106
- deprecated: "deprecated";
107
- proposed: "proposed";
108
- accepted: "accepted";
109
- active: "active";
110
- implemented: "implemented";
111
- adopted: "adopted";
112
- defined: "defined";
113
- introduced: "introduced";
114
- in_progress: "in_progress";
115
- complete: "complete";
116
- consolidated: "consolidated";
117
- experimental: "experimental";
118
- retired: "retired";
119
- superseded: "superseded";
120
- abandoned: "abandoned";
121
- deferred: "deferred";
122
- }> & {
123
- is(value: unknown): value is "deprecated" | "proposed" | "accepted" | "active" | "implemented" | "adopted" | "defined" | "introduced" | "in_progress" | "complete" | "consolidated" | "experimental" | "retired" | "superseded" | "abandoned" | "deferred";
124
- }>;
103
+ status: z.ZodOptional<z.ZodNever>;
125
104
  lifecycle: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>;
126
105
  context: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
127
106
  is(value: unknown): value is string | string[];
@@ -176,8 +155,6 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
176
155
  }>>;
177
156
  propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
178
157
  includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
179
- input: z.ZodOptional<z.ZodString>;
180
- output: z.ZodOptional<z.ZodString>;
181
158
  external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
182
159
  role: z.ZodEnum<{
183
160
  output: "output";
@@ -221,27 +198,14 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
221
198
  affects: "affects";
222
199
  supersedes: "supersedes";
223
200
  must_preserve: "must_preserve";
224
- performs: "performs";
225
201
  part_of: "part_of";
226
202
  precedes: "precedes";
227
203
  must_follow: "must_follow";
228
- blocks: "blocks";
229
- routes_to: "routes_to";
230
- orchestrates: "orchestrates";
231
204
  governed_by: "governed_by";
232
205
  modifies: "modifies";
233
- triggered_by: "triggered_by";
234
- applies_to: "applies_to";
235
206
  produces: "produces";
236
- consumes: "consumes";
237
- transforms_into: "transforms_into";
238
- selects: "selects";
239
- requires: "requires";
240
- disables: "disables";
241
- influence: "influence";
242
- justifies: "justifies";
243
207
  }> & {
244
- is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "orchestrates" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
208
+ is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "part_of" | "precedes" | "must_follow" | "governed_by" | "modifies" | "produces";
245
209
  };
246
210
  description: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
247
211
  is(value: unknown): value is string | string[];
@@ -260,7 +224,7 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
260
224
  [x: string]: unknown;
261
225
  from: string;
262
226
  to: string;
263
- type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "orchestrates" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
227
+ type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "part_of" | "precedes" | "must_follow" | "governed_by" | "modifies" | "produces";
264
228
  description?: string | string[] | undefined;
265
229
  polarity?: "positive" | "negative" | "neutral" | "uncertain" | undefined;
266
230
  strength?: number | undefined;
@@ -300,10 +264,10 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
300
264
  nodes: {
301
265
  [x: string]: unknown;
302
266
  id: string;
303
- type: "intent" | "concept" | "capability" | "element" | "realisation" | "invariant" | "principle" | "policy" | "protocol" | "stage" | "role" | "gate" | "mode" | "artefact" | "artefact_flow" | "decision" | "change" | "view" | "milestone" | "version";
267
+ type: "intent" | "concept" | "capability" | "element" | "realisation" | "invariant" | "principle" | "policy" | "protocol" | "stage" | "role" | "gate" | "mode" | "artefact" | "decision" | "change" | "view" | "milestone";
304
268
  name: string;
305
269
  description?: string | string[] | undefined;
306
- status?: "deprecated" | "proposed" | "accepted" | "active" | "implemented" | "adopted" | "defined" | "introduced" | "in_progress" | "complete" | "consolidated" | "experimental" | "retired" | "superseded" | "abandoned" | "deferred" | undefined;
270
+ status?: undefined;
307
271
  lifecycle?: Record<string, string | boolean> | undefined;
308
272
  context?: string | string[] | undefined;
309
273
  options?: {
@@ -327,8 +291,6 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
327
291
  }[] | undefined;
328
292
  propagation?: Record<string, boolean> | undefined;
329
293
  includes?: string[] | undefined;
330
- input?: string | undefined;
331
- output?: string | undefined;
332
294
  external_references?: {
333
295
  role: "output" | "input" | "context" | "evidence" | "source" | "standard" | "prior_art";
334
296
  identifier: string;
@@ -351,7 +313,7 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
351
313
  [x: string]: unknown;
352
314
  from: string;
353
315
  to: string;
354
- type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "orchestrates" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
316
+ type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "part_of" | "precedes" | "must_follow" | "governed_by" | "modifies" | "produces";
355
317
  description?: string | string[] | undefined;
356
318
  polarity?: "positive" | "negative" | "neutral" | "uncertain" | undefined;
357
319
  strength?: number | undefined;
@@ -1,6 +1,7 @@
1
1
  import * as z from "zod";
2
2
  import { defineOperation } from "./define-operation.js";
3
3
  import { SysProMDocument } from "../schema.js";
4
+ import { isViewReadModelDependsOnRelationship } from "../endpoint-types.js";
4
5
  /**
5
6
  * A derived relationship inferred from transitive closure or composition.
6
7
  */
@@ -61,8 +62,17 @@ export const inferDerivedOp = defineOperation({
61
62
  output: DerivedOutput,
62
63
  fn: (input) => {
63
64
  const derived = [];
65
+ const nodeMap = new Map(input.doc.nodes.map((n) => [n.id, n]));
64
66
  const existingKeys = new Set((input.doc.relationships ?? []).map((r) => `${r.from}:${r.type}:${r.to}`));
65
67
  const derivedKeys = new Set();
68
+ const relationships = input.doc.relationships ?? [];
69
+ const isReadModelViewDependsOn = (rel) => {
70
+ const fromNode = nodeMap.get(rel.from);
71
+ const toNode = nodeMap.get(rel.to);
72
+ if (!fromNode || !toNode)
73
+ return false;
74
+ return isViewReadModelDependsOnRelationship(rel.type, fromNode.type, toNode.type);
75
+ };
66
76
  // Helper to add derived relationship if not already existing
67
77
  const addDerived = (from, to, type, derivedFrom, derivationType) => {
68
78
  const key = `${from}:${type}:${to}`;
@@ -73,7 +83,14 @@ export const inferDerivedOp = defineOperation({
73
83
  };
74
84
  // 1. Transitive relationships - compute full transitive closure with path tracking
75
85
  for (const [relType, derivedType] of Object.entries(TRANSITIVE_RELATIONSHIPS)) {
76
- const rels = (input.doc.relationships ?? []).filter((r) => r.type === relType);
86
+ const rels = relationships.filter((r) => {
87
+ if (r.type !== relType)
88
+ return false;
89
+ if (relType === "depends_on" && isReadModelViewDependsOn(r)) {
90
+ return false;
91
+ }
92
+ return true;
93
+ });
77
94
  // Build adjacency list
78
95
  const adj = new Map();
79
96
  for (const r of rels) {
@@ -123,14 +140,21 @@ export const inferDerivedOp = defineOperation({
123
140
  }
124
141
  // 2. Inverse relationships
125
142
  for (const [relType, inverseType] of Object.entries(INVERSE_RELATIONSHIPS)) {
126
- const rels = (input.doc.relationships ?? []).filter((r) => r.type === relType);
143
+ const rels = relationships.filter((r) => {
144
+ if (r.type !== relType)
145
+ return false;
146
+ if (relType === "depends_on" && isReadModelViewDependsOn(r)) {
147
+ return false;
148
+ }
149
+ return true;
150
+ });
127
151
  for (const r of rels) {
128
152
  addDerived(r.to, r.from, inverseType, [{ from: r.from, to: r.to, type: r.type }], "inverse");
129
153
  }
130
154
  }
131
155
  // 3. Composite patterns (A affects B, B depends_on C => A potentially_affects C)
132
- const affectsRels = (input.doc.relationships ?? []).filter((r) => r.type === "affects");
133
- const dependsRels = (input.doc.relationships ?? []).filter((r) => r.type === "depends_on");
156
+ const affectsRels = relationships.filter((r) => r.type === "affects");
157
+ const dependsRels = relationships.filter((r) => r.type === "depends_on" && !isReadModelViewDependsOn(r));
134
158
  const dependsMap = new Map();
135
159
  for (const r of dependsRels) {
136
160
  const deps = dependsMap.get(r.from) ?? [];