sysprom 1.20.0 → 1.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/schema.json +4 -44
- package/dist/src/cli/commands/add.js +6 -2
- package/dist/src/cli/commands/query.js +5 -3
- package/dist/src/cli/commands/speckit.js +2 -2
- package/dist/src/cli/commands/update.js +6 -4
- package/dist/src/endpoint-types.d.ts +4 -0
- package/dist/src/endpoint-types.js +22 -121
- package/dist/src/json-to-md.js +2 -16
- package/dist/src/lifecycle-state.d.ts +9 -0
- package/dist/src/lifecycle-state.js +22 -0
- package/dist/src/mcp/server.js +3 -6
- package/dist/src/md-to-json.js +1 -19
- package/dist/src/operations/add-node.d.ts +21 -135
- package/dist/src/operations/add-plan-task.d.ts +14 -90
- package/dist/src/operations/add-relationship.d.ts +16 -105
- package/dist/src/operations/check.d.ts +7 -45
- package/dist/src/operations/graph-decision.d.ts +7 -45
- package/dist/src/operations/graph-decision.js +0 -1
- package/dist/src/operations/graph-dependency.d.ts +7 -45
- package/dist/src/operations/graph-dependency.js +3 -23
- package/dist/src/operations/graph-refinement.d.ts +7 -45
- package/dist/src/operations/graph-shared.js +1 -3
- package/dist/src/operations/graph.d.ts +7 -45
- package/dist/src/operations/infer-completeness.d.ts +10 -54
- package/dist/src/operations/infer-derived.d.ts +7 -45
- package/dist/src/operations/infer-derived.js +28 -4
- package/dist/src/operations/infer-impact.d.ts +49 -315
- package/dist/src/operations/infer-impact.js +22 -3
- package/dist/src/operations/infer-lifecycle.d.ts +8 -106
- package/dist/src/operations/infer-lifecycle.js +4 -10
- package/dist/src/operations/init-document.d.ts +7 -45
- package/dist/src/operations/json-to-markdown.d.ts +7 -45
- package/dist/src/operations/mark-task-done.d.ts +14 -90
- package/dist/src/operations/mark-task-undone.d.ts +14 -90
- package/dist/src/operations/markdown-to-json.d.ts +7 -45
- package/dist/src/operations/next-id.d.ts +8 -48
- package/dist/src/operations/node-history.d.ts +7 -45
- package/dist/src/operations/plan-add-task.d.ts +14 -90
- package/dist/src/operations/plan-gate.d.ts +7 -45
- package/dist/src/operations/plan-init.d.ts +7 -45
- package/dist/src/operations/plan-progress.d.ts +7 -45
- package/dist/src/operations/plan-status.d.ts +7 -45
- package/dist/src/operations/query-node.d.ts +29 -195
- package/dist/src/operations/query-nodes.d.ts +15 -91
- package/dist/src/operations/query-nodes.js +6 -4
- package/dist/src/operations/query-relationships.d.ts +9 -60
- package/dist/src/operations/remove-node.d.ts +21 -135
- package/dist/src/operations/remove-node.js +11 -1
- package/dist/src/operations/remove-relationship.d.ts +15 -104
- package/dist/src/operations/rename.d.ts +14 -90
- package/dist/src/operations/search.d.ts +14 -90
- package/dist/src/operations/speckit-diff.d.ts +7 -45
- package/dist/src/operations/speckit-export.d.ts +7 -45
- package/dist/src/operations/speckit-import.d.ts +7 -45
- package/dist/src/operations/speckit-sync.d.ts +22 -136
- package/dist/src/operations/speckit-sync.js +3 -3
- package/dist/src/operations/state-at.d.ts +7 -45
- package/dist/src/operations/stats.d.ts +7 -45
- package/dist/src/operations/sync.d.ts +21 -135
- package/dist/src/operations/task-list.d.ts +7 -45
- package/dist/src/operations/timeline.d.ts +7 -45
- package/dist/src/operations/trace-from-node.d.ts +21 -135
- package/dist/src/operations/update-metadata.d.ts +14 -90
- package/dist/src/operations/update-node.d.ts +20 -155
- package/dist/src/operations/update-plan-task.d.ts +14 -90
- package/dist/src/operations/validate.d.ts +7 -45
- package/dist/src/operations/validate.js +8 -6
- package/dist/src/schema.d.ts +22 -164
- package/dist/src/schema.js +4 -27
- package/dist/src/speckit/generate.js +10 -7
- package/dist/src/speckit/parse.js +6 -3
- package/dist/src/speckit/plan.js +1 -1
- package/package.json +13 -2
- 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" | "
|
|
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.
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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?:
|
|
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" | "
|
|
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 =
|
|
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 =
|
|
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 =
|
|
133
|
-
const dependsRels =
|
|
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) ?? [];
|