@rengler33/prov 0.1.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/README.md +314 -0
- package/dist/cli.d.ts +26 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +381 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agent.d.ts +107 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +197 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/agent.test.d.ts +5 -0
- package/dist/commands/agent.test.d.ts.map +1 -0
- package/dist/commands/agent.test.js +199 -0
- package/dist/commands/agent.test.js.map +1 -0
- package/dist/commands/constraint.d.ts +100 -0
- package/dist/commands/constraint.d.ts.map +1 -0
- package/dist/commands/constraint.js +763 -0
- package/dist/commands/constraint.js.map +1 -0
- package/dist/commands/constraint.test.d.ts +9 -0
- package/dist/commands/constraint.test.d.ts.map +1 -0
- package/dist/commands/constraint.test.js +470 -0
- package/dist/commands/constraint.test.js.map +1 -0
- package/dist/commands/graph.d.ts +99 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +552 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/graph.test.d.ts +2 -0
- package/dist/commands/graph.test.d.ts.map +1 -0
- package/dist/commands/graph.test.js +258 -0
- package/dist/commands/graph.test.js.map +1 -0
- package/dist/commands/impact.d.ts +83 -0
- package/dist/commands/impact.d.ts.map +1 -0
- package/dist/commands/impact.js +319 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/impact.test.d.ts +2 -0
- package/dist/commands/impact.test.d.ts.map +1 -0
- package/dist/commands/impact.test.js +234 -0
- package/dist/commands/impact.test.js.map +1 -0
- package/dist/commands/init.d.ts +45 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +94 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/init.test.d.ts +7 -0
- package/dist/commands/init.test.d.ts.map +1 -0
- package/dist/commands/init.test.js +174 -0
- package/dist/commands/init.test.js.map +1 -0
- package/dist/commands/integration.test.d.ts +10 -0
- package/dist/commands/integration.test.d.ts.map +1 -0
- package/dist/commands/integration.test.js +456 -0
- package/dist/commands/integration.test.js.map +1 -0
- package/dist/commands/mcp.d.ts +21 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +616 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/mcp.test.d.ts +7 -0
- package/dist/commands/mcp.test.d.ts.map +1 -0
- package/dist/commands/mcp.test.js +132 -0
- package/dist/commands/mcp.test.js.map +1 -0
- package/dist/commands/plan.d.ts +218 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +1307 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/plan.test.d.ts +9 -0
- package/dist/commands/plan.test.d.ts.map +1 -0
- package/dist/commands/plan.test.js +569 -0
- package/dist/commands/plan.test.js.map +1 -0
- package/dist/commands/spec.d.ts +94 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +635 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/spec.test.d.ts +9 -0
- package/dist/commands/spec.test.d.ts.map +1 -0
- package/dist/commands/spec.test.js +407 -0
- package/dist/commands/spec.test.js.map +1 -0
- package/dist/commands/trace.d.ts +157 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +847 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/trace.test.d.ts +9 -0
- package/dist/commands/trace.test.d.ts.map +1 -0
- package/dist/commands/trace.test.js +524 -0
- package/dist/commands/trace.test.js.map +1 -0
- package/dist/graph.d.ts +204 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +496 -0
- package/dist/graph.js.map +1 -0
- package/dist/graph.test.d.ts +2 -0
- package/dist/graph.test.d.ts.map +1 -0
- package/dist/graph.test.js +382 -0
- package/dist/graph.test.js.map +1 -0
- package/dist/hash.d.ts +72 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +137 -0
- package/dist/hash.js.map +1 -0
- package/dist/hash.test.d.ts +2 -0
- package/dist/hash.test.d.ts.map +1 -0
- package/dist/hash.test.js +227 -0
- package/dist/hash.test.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +11 -0
- package/dist/index.test.js.map +1 -0
- package/dist/output.d.ts +84 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +175 -0
- package/dist/output.js.map +1 -0
- package/dist/output.test.d.ts +7 -0
- package/dist/output.test.d.ts.map +1 -0
- package/dist/output.test.js +146 -0
- package/dist/output.test.js.map +1 -0
- package/dist/staleness.d.ts +162 -0
- package/dist/staleness.d.ts.map +1 -0
- package/dist/staleness.js +309 -0
- package/dist/staleness.js.map +1 -0
- package/dist/staleness.test.d.ts +2 -0
- package/dist/staleness.test.d.ts.map +1 -0
- package/dist/staleness.test.js +448 -0
- package/dist/staleness.test.js.map +1 -0
- package/dist/storage.d.ts +267 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +623 -0
- package/dist/storage.js.map +1 -0
- package/dist/storage.test.d.ts +5 -0
- package/dist/storage.test.d.ts.map +1 -0
- package/dist/storage.test.js +434 -0
- package/dist/storage.test.js.map +1 -0
- package/dist/types.d.ts +270 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/types.test.d.ts +2 -0
- package/dist/types.test.d.ts.map +1 -0
- package/dist/types.test.js +232 -0
- package/dist/types.test.js.map +1 -0
- package/dist/watcher.d.ts +139 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +406 -0
- package/dist/watcher.js.map +1 -0
- package/dist/watcher.test.d.ts +5 -0
- package/dist/watcher.test.d.ts.map +1 -0
- package/dist/watcher.test.js +327 -0
- package/dist/watcher.test.js.map +1 -0
- package/package.json +53 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for prov entities.
|
|
3
|
+
*
|
|
4
|
+
* These types represent the fundamental entities in the intent graph:
|
|
5
|
+
* specifications, constraints, plans, decisions, steps, and traces.
|
|
6
|
+
*
|
|
7
|
+
* All entities are content-addressable via SHA-256 hash.
|
|
8
|
+
*
|
|
9
|
+
* @see spec:core-model:v1
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* SHA-256 content hash, represented as `sha256:{first-12-hex-chars}`.
|
|
13
|
+
* Used for content-addressable storage and change detection.
|
|
14
|
+
*
|
|
15
|
+
* @see req:hashing
|
|
16
|
+
*/
|
|
17
|
+
export type Hash = `sha256:${string}`;
|
|
18
|
+
/**
|
|
19
|
+
* ISO 8601 timestamp string.
|
|
20
|
+
*/
|
|
21
|
+
export type Timestamp = string;
|
|
22
|
+
/**
|
|
23
|
+
* Entity identifier types following the format `{type}:{name}` or `{type}:{parent}:{name}`.
|
|
24
|
+
* IDs are lowercase alphanumeric with hyphens and colons.
|
|
25
|
+
*
|
|
26
|
+
* @see req:identifiers
|
|
27
|
+
*/
|
|
28
|
+
export type SpecId = `spec:${string}:v${number}`;
|
|
29
|
+
export type RequirementId = `req:${string}:${string}`;
|
|
30
|
+
export type ConstraintId = `constraint:${string}:v${number}`;
|
|
31
|
+
export type InvariantId = `inv:${string}:${string}`;
|
|
32
|
+
export type PlanId = `plan:${string}:v${number}`;
|
|
33
|
+
export type DecisionId = `dec:${string}:${string}`;
|
|
34
|
+
export type StepId = `step:${string}:${number}`;
|
|
35
|
+
export type TraceId = `trace:${string}`;
|
|
36
|
+
/**
|
|
37
|
+
* Union of all entity ID types.
|
|
38
|
+
*/
|
|
39
|
+
export type EntityId = SpecId | RequirementId | ConstraintId | InvariantId | PlanId | DecisionId | StepId | TraceId;
|
|
40
|
+
/**
|
|
41
|
+
* Entity status values.
|
|
42
|
+
*/
|
|
43
|
+
export type EntityStatus = 'draft' | 'active' | 'deprecated' | 'archived';
|
|
44
|
+
/**
|
|
45
|
+
* Acceptance criteria for a requirement.
|
|
46
|
+
*/
|
|
47
|
+
export interface AcceptanceCriterion {
|
|
48
|
+
/** Human-readable description of what must be true */
|
|
49
|
+
readonly description: string;
|
|
50
|
+
/** Optional verification method (command, test ref, or assertion) */
|
|
51
|
+
readonly verification?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Requirement is an atomic unit of intent within a spec.
|
|
55
|
+
*
|
|
56
|
+
* @see req:entity:requirement
|
|
57
|
+
*/
|
|
58
|
+
export interface Requirement {
|
|
59
|
+
/** Unique id in format `req:{spec}:{name}` */
|
|
60
|
+
readonly id: RequirementId;
|
|
61
|
+
/** Human-readable description */
|
|
62
|
+
readonly description: string;
|
|
63
|
+
/** Acceptance criteria that define when requirement is met */
|
|
64
|
+
readonly acceptance: readonly (string | AcceptanceCriterion)[];
|
|
65
|
+
/** Optional dependencies on other requirements */
|
|
66
|
+
readonly dependencies?: readonly RequirementId[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Specification entity represents declarative intent.
|
|
70
|
+
*
|
|
71
|
+
* @see req:entity:spec
|
|
72
|
+
*/
|
|
73
|
+
export interface Spec {
|
|
74
|
+
/** Unique id in format `spec:{name}:v{version}` */
|
|
75
|
+
readonly id: SpecId;
|
|
76
|
+
/** Semantic version */
|
|
77
|
+
readonly version: string;
|
|
78
|
+
/** Human-readable title */
|
|
79
|
+
readonly title: string;
|
|
80
|
+
/** Entity status */
|
|
81
|
+
readonly status: EntityStatus;
|
|
82
|
+
/** Human-readable intent description */
|
|
83
|
+
readonly intent: string;
|
|
84
|
+
/** One or more requirements */
|
|
85
|
+
readonly requirements: readonly Requirement[];
|
|
86
|
+
/** Content hash (computed, not stored in YAML) */
|
|
87
|
+
readonly hash?: Hash;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Verification method for an invariant.
|
|
91
|
+
*/
|
|
92
|
+
export interface VerificationMethod {
|
|
93
|
+
/** Type of verification */
|
|
94
|
+
readonly type: 'command' | 'test' | 'assertion' | 'manual';
|
|
95
|
+
/** Command to run, test reference, or assertion expression */
|
|
96
|
+
readonly value: string;
|
|
97
|
+
/** Expected outcome for command verification (e.g., 'success', 'failure', or custom pattern) */
|
|
98
|
+
readonly expect?: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Invariant is an atomic rule within a constraint.
|
|
102
|
+
*
|
|
103
|
+
* @see req:entity:invariant
|
|
104
|
+
*/
|
|
105
|
+
export interface Invariant {
|
|
106
|
+
/** Unique id in format `inv:{constraint}:{name}` */
|
|
107
|
+
readonly id: InvariantId;
|
|
108
|
+
/** What must always be true */
|
|
109
|
+
readonly rule: string;
|
|
110
|
+
/** How to verify compliance */
|
|
111
|
+
readonly verification: VerificationMethod;
|
|
112
|
+
/** Whether violation blocks plan execution */
|
|
113
|
+
readonly blocking?: boolean;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Constraint represents an invariant that must hold.
|
|
117
|
+
*
|
|
118
|
+
* @see req:entity:constraint
|
|
119
|
+
*/
|
|
120
|
+
export interface Constraint {
|
|
121
|
+
/** Unique id in format `constraint:{name}:v{version}` */
|
|
122
|
+
readonly id: ConstraintId;
|
|
123
|
+
/** Semantic version */
|
|
124
|
+
readonly version: string;
|
|
125
|
+
/** Human-readable title */
|
|
126
|
+
readonly title: string;
|
|
127
|
+
/** Entity status */
|
|
128
|
+
readonly status: EntityStatus;
|
|
129
|
+
/** Human-readable description of the constraint's purpose */
|
|
130
|
+
readonly description: string;
|
|
131
|
+
/** One or more invariants */
|
|
132
|
+
readonly invariants: readonly Invariant[];
|
|
133
|
+
/** Content hash (computed, not stored in YAML) */
|
|
134
|
+
readonly hash?: Hash;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Decision records a choice made during planning.
|
|
138
|
+
*
|
|
139
|
+
* @see req:entity:decision
|
|
140
|
+
*/
|
|
141
|
+
export interface Decision {
|
|
142
|
+
/** Unique id in format `dec:{plan}:{name}` */
|
|
143
|
+
readonly id: DecisionId;
|
|
144
|
+
/** The question being resolved */
|
|
145
|
+
readonly question: string;
|
|
146
|
+
/** The choice made */
|
|
147
|
+
readonly choice: string;
|
|
148
|
+
/** Rationale for the decision */
|
|
149
|
+
readonly rationale: string;
|
|
150
|
+
/** Requirements/constraints that motivated this decision */
|
|
151
|
+
readonly tracesTo: readonly (RequirementId | InvariantId)[];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Step is an actionable unit of implementation work.
|
|
155
|
+
*
|
|
156
|
+
* @see req:entity:step
|
|
157
|
+
*/
|
|
158
|
+
export interface Step {
|
|
159
|
+
/** Unique id in format `step:{plan}:{number}` */
|
|
160
|
+
readonly id: StepId;
|
|
161
|
+
/** Step number within the plan */
|
|
162
|
+
readonly number: number;
|
|
163
|
+
/** Concrete action to take */
|
|
164
|
+
readonly action: string;
|
|
165
|
+
/** Detailed description of what to do */
|
|
166
|
+
readonly description?: string;
|
|
167
|
+
/** Decisions, requirements, and invariants this step implements */
|
|
168
|
+
readonly tracesTo: readonly (DecisionId | RequirementId | InvariantId)[];
|
|
169
|
+
/** Dependencies on other steps (must complete first) */
|
|
170
|
+
readonly dependencies?: readonly StepId[];
|
|
171
|
+
/** Expected artifacts produced by this step */
|
|
172
|
+
readonly artifacts?: readonly string[];
|
|
173
|
+
/** Step completion status */
|
|
174
|
+
readonly status?: 'pending' | 'in_progress' | 'completed' | 'blocked';
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Source reference for a plan (spec or constraint it derives from).
|
|
178
|
+
*/
|
|
179
|
+
export interface SourceReference {
|
|
180
|
+
/** Entity ID of the source */
|
|
181
|
+
readonly id: SpecId | ConstraintId;
|
|
182
|
+
/** Hash of the source at plan creation time */
|
|
183
|
+
readonly hash: Hash;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Plan captures implementation decisions derived from specs.
|
|
187
|
+
*
|
|
188
|
+
* @see req:entity:plan
|
|
189
|
+
*/
|
|
190
|
+
export interface Plan {
|
|
191
|
+
/** Unique id in format `plan:{name}:v{version}` */
|
|
192
|
+
readonly id: PlanId;
|
|
193
|
+
/** Semantic version */
|
|
194
|
+
readonly version: string;
|
|
195
|
+
/** Human-readable title */
|
|
196
|
+
readonly title: string;
|
|
197
|
+
/** Entity status */
|
|
198
|
+
readonly status: EntityStatus;
|
|
199
|
+
/** Specs and constraints this plan derives from */
|
|
200
|
+
readonly sources: readonly SourceReference[];
|
|
201
|
+
/** Decisions that resolve ambiguity in specs */
|
|
202
|
+
readonly decisions: readonly Decision[];
|
|
203
|
+
/** Ordered implementation steps */
|
|
204
|
+
readonly steps: readonly Step[];
|
|
205
|
+
/** Content hash (computed, not stored in YAML) */
|
|
206
|
+
readonly hash?: Hash;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* File location for a trace (path with optional line range).
|
|
210
|
+
*/
|
|
211
|
+
export interface FileLocation {
|
|
212
|
+
/** Relative file path from project root */
|
|
213
|
+
readonly path: string;
|
|
214
|
+
/** Starting line number (1-indexed) */
|
|
215
|
+
readonly startLine?: number;
|
|
216
|
+
/** Ending line number (1-indexed, inclusive) */
|
|
217
|
+
readonly endLine?: number;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Trace links implementation artifacts to their provenance.
|
|
221
|
+
*
|
|
222
|
+
* @see req:entity:trace
|
|
223
|
+
*/
|
|
224
|
+
export interface Trace {
|
|
225
|
+
/** Unique id in format `trace:{hash}` */
|
|
226
|
+
readonly id: TraceId;
|
|
227
|
+
/** File location of the artifact */
|
|
228
|
+
readonly artifact: FileLocation;
|
|
229
|
+
/** Plan step this artifact implements */
|
|
230
|
+
readonly step: StepId;
|
|
231
|
+
/** Content hash of the artifact at trace time */
|
|
232
|
+
readonly artifactHash: Hash;
|
|
233
|
+
/** Timestamp when trace was created */
|
|
234
|
+
readonly createdAt: Timestamp;
|
|
235
|
+
/** Whether the trace is stale (artifact changed since trace) */
|
|
236
|
+
readonly stale?: boolean;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Node types in the intent graph.
|
|
240
|
+
*/
|
|
241
|
+
export type NodeType = 'spec' | 'requirement' | 'constraint' | 'invariant' | 'plan' | 'decision' | 'step' | 'artifact';
|
|
242
|
+
/**
|
|
243
|
+
* Edge types in the intent graph.
|
|
244
|
+
*/
|
|
245
|
+
export type EdgeType = 'contains' | 'derives_from' | 'traces_to' | 'implements' | 'depends_on';
|
|
246
|
+
/**
|
|
247
|
+
* A node in the intent graph.
|
|
248
|
+
*/
|
|
249
|
+
export interface GraphNode {
|
|
250
|
+
readonly id: EntityId;
|
|
251
|
+
readonly type: NodeType;
|
|
252
|
+
readonly hash?: Hash;
|
|
253
|
+
readonly data: Spec | Requirement | Constraint | Invariant | Plan | Decision | Step | Trace;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* An edge in the intent graph.
|
|
257
|
+
*/
|
|
258
|
+
export interface GraphEdge {
|
|
259
|
+
readonly from: EntityId;
|
|
260
|
+
readonly to: EntityId;
|
|
261
|
+
readonly type: EdgeType;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* The complete intent graph.
|
|
265
|
+
*/
|
|
266
|
+
export interface IntentGraph {
|
|
267
|
+
readonly nodes: ReadonlyMap<EntityId, GraphNode>;
|
|
268
|
+
readonly edges: readonly GraphEdge[];
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for prov entities.
|
|
3
|
+
*
|
|
4
|
+
* These types represent the fundamental entities in the intent graph:
|
|
5
|
+
* specifications, constraints, plans, decisions, steps, and traces.
|
|
6
|
+
*
|
|
7
|
+
* All entities are content-addressable via SHA-256 hash.
|
|
8
|
+
*
|
|
9
|
+
* @see spec:core-model:v1
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../src/types.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
describe('Type definitions', () => {
|
|
3
|
+
describe('ID formats', () => {
|
|
4
|
+
it('SpecId follows spec:{name}:v{version} format', () => {
|
|
5
|
+
const id = 'spec:core-model:v1';
|
|
6
|
+
expect(id).toMatch(/^spec:[a-z0-9-]+:v\d+$/);
|
|
7
|
+
});
|
|
8
|
+
it('RequirementId follows req:{spec}:{name} format', () => {
|
|
9
|
+
const id = 'req:core-model:entity-spec';
|
|
10
|
+
expect(id).toMatch(/^req:[a-z0-9-]+:[a-z0-9-]+$/);
|
|
11
|
+
});
|
|
12
|
+
it('ConstraintId follows constraint:{name}:v{version} format', () => {
|
|
13
|
+
const id = 'constraint:code-quality:v1';
|
|
14
|
+
expect(id).toMatch(/^constraint:[a-z0-9-]+:v\d+$/);
|
|
15
|
+
});
|
|
16
|
+
it('InvariantId follows inv:{constraint}:{name} format', () => {
|
|
17
|
+
const id = 'inv:code-quality:no-any';
|
|
18
|
+
expect(id).toMatch(/^inv:[a-z0-9-]+:[a-z0-9-]+$/);
|
|
19
|
+
});
|
|
20
|
+
it('PlanId follows plan:{name}:v{version} format', () => {
|
|
21
|
+
const id = 'plan:bootstrap:v1';
|
|
22
|
+
expect(id).toMatch(/^plan:[a-z0-9-]+:v\d+$/);
|
|
23
|
+
});
|
|
24
|
+
it('DecisionId follows dec:{plan}:{name} format', () => {
|
|
25
|
+
const id = 'dec:bootstrap:storage-format';
|
|
26
|
+
expect(id).toMatch(/^dec:[a-z0-9-]+:[a-z0-9-]+$/);
|
|
27
|
+
});
|
|
28
|
+
it('StepId follows step:{plan}:{number} format', () => {
|
|
29
|
+
const id = 'step:bootstrap:1';
|
|
30
|
+
expect(id).toMatch(/^step:[a-z0-9-]+:\d+$/);
|
|
31
|
+
});
|
|
32
|
+
it('TraceId follows trace:{hash} format', () => {
|
|
33
|
+
const id = 'trace:abc123def456';
|
|
34
|
+
expect(id).toMatch(/^trace:[a-z0-9]+$/);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('Hash format', () => {
|
|
38
|
+
it('Hash follows sha256:{12-hex-chars} format', () => {
|
|
39
|
+
const hash = 'sha256:a1b2c3d4e5f6';
|
|
40
|
+
expect(hash).toMatch(/^sha256:[a-f0-9]+$/);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('Spec entity', () => {
|
|
44
|
+
it('can be constructed with required fields', () => {
|
|
45
|
+
const spec = {
|
|
46
|
+
id: 'spec:test:v1',
|
|
47
|
+
version: '1.0.0',
|
|
48
|
+
title: 'Test Specification',
|
|
49
|
+
status: 'draft',
|
|
50
|
+
intent: 'Test intent description',
|
|
51
|
+
requirements: [
|
|
52
|
+
{
|
|
53
|
+
id: 'req:test:first',
|
|
54
|
+
description: 'First requirement',
|
|
55
|
+
acceptance: ['Acceptance criterion 1'],
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
expect(spec.id).toBe('spec:test:v1');
|
|
60
|
+
expect(spec.requirements).toHaveLength(1);
|
|
61
|
+
});
|
|
62
|
+
it('supports optional hash field', () => {
|
|
63
|
+
const spec = {
|
|
64
|
+
id: 'spec:test:v1',
|
|
65
|
+
version: '1.0.0',
|
|
66
|
+
title: 'Test Specification',
|
|
67
|
+
status: 'active',
|
|
68
|
+
intent: 'Test intent',
|
|
69
|
+
requirements: [],
|
|
70
|
+
hash: 'sha256:abc123def456',
|
|
71
|
+
};
|
|
72
|
+
expect(spec.hash).toBe('sha256:abc123def456');
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('Requirement entity', () => {
|
|
76
|
+
it('can have string acceptance criteria', () => {
|
|
77
|
+
const req = {
|
|
78
|
+
id: 'req:test:simple',
|
|
79
|
+
description: 'Simple requirement',
|
|
80
|
+
acceptance: ['Criterion 1', 'Criterion 2'],
|
|
81
|
+
};
|
|
82
|
+
expect(req.acceptance).toHaveLength(2);
|
|
83
|
+
});
|
|
84
|
+
it('can have structured acceptance criteria', () => {
|
|
85
|
+
const req = {
|
|
86
|
+
id: 'req:test:structured',
|
|
87
|
+
description: 'Structured requirement',
|
|
88
|
+
acceptance: [
|
|
89
|
+
{
|
|
90
|
+
description: 'Criterion with verification',
|
|
91
|
+
verification: 'npm run test',
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
expect(req.acceptance[0]).toHaveProperty('verification');
|
|
96
|
+
});
|
|
97
|
+
it('can have dependencies on other requirements', () => {
|
|
98
|
+
const req = {
|
|
99
|
+
id: 'req:test:dependent',
|
|
100
|
+
description: 'Dependent requirement',
|
|
101
|
+
acceptance: ['Criterion'],
|
|
102
|
+
dependencies: ['req:test:base'],
|
|
103
|
+
};
|
|
104
|
+
expect(req.dependencies).toContain('req:test:base');
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe('Constraint entity', () => {
|
|
108
|
+
it('contains invariants with verification methods', () => {
|
|
109
|
+
const constraint = {
|
|
110
|
+
id: 'constraint:quality:v1',
|
|
111
|
+
version: '1.0.0',
|
|
112
|
+
title: 'Code Quality',
|
|
113
|
+
status: 'active',
|
|
114
|
+
description: 'Ensures code quality standards',
|
|
115
|
+
invariants: [
|
|
116
|
+
{
|
|
117
|
+
id: 'inv:quality:no-any',
|
|
118
|
+
rule: 'No use of any type',
|
|
119
|
+
verification: {
|
|
120
|
+
type: 'command',
|
|
121
|
+
value: 'npm run typecheck',
|
|
122
|
+
expect: 'success',
|
|
123
|
+
},
|
|
124
|
+
blocking: true,
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
};
|
|
128
|
+
expect(constraint.invariants[0]?.verification.type).toBe('command');
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe('Plan entity', () => {
|
|
132
|
+
it('references source specs/constraints with hashes', () => {
|
|
133
|
+
const plan = {
|
|
134
|
+
id: 'plan:impl:v1',
|
|
135
|
+
version: '1.0.0',
|
|
136
|
+
title: 'Implementation Plan',
|
|
137
|
+
status: 'active',
|
|
138
|
+
sources: [
|
|
139
|
+
{ id: 'spec:core:v1', hash: 'sha256:abc123def456' },
|
|
140
|
+
{ id: 'constraint:quality:v1', hash: 'sha256:789xyz123456' },
|
|
141
|
+
],
|
|
142
|
+
decisions: [],
|
|
143
|
+
steps: [],
|
|
144
|
+
};
|
|
145
|
+
expect(plan.sources).toHaveLength(2);
|
|
146
|
+
});
|
|
147
|
+
it('contains decisions and steps', () => {
|
|
148
|
+
const plan = {
|
|
149
|
+
id: 'plan:impl:v1',
|
|
150
|
+
version: '1.0.0',
|
|
151
|
+
title: 'Implementation Plan',
|
|
152
|
+
status: 'active',
|
|
153
|
+
sources: [],
|
|
154
|
+
decisions: [
|
|
155
|
+
{
|
|
156
|
+
id: 'dec:impl:format',
|
|
157
|
+
question: 'What format for storage?',
|
|
158
|
+
choice: 'YAML',
|
|
159
|
+
rationale: 'Human readable',
|
|
160
|
+
tracesTo: ['req:core:storage'],
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
steps: [
|
|
164
|
+
{
|
|
165
|
+
id: 'step:impl:1',
|
|
166
|
+
number: 1,
|
|
167
|
+
action: 'Create storage module',
|
|
168
|
+
tracesTo: ['dec:impl:format'],
|
|
169
|
+
status: 'pending',
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
};
|
|
173
|
+
expect(plan.decisions).toHaveLength(1);
|
|
174
|
+
expect(plan.steps).toHaveLength(1);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
describe('Trace entity', () => {
|
|
178
|
+
it('links artifacts to steps with hash tracking', () => {
|
|
179
|
+
const trace = {
|
|
180
|
+
id: 'trace:abc123',
|
|
181
|
+
artifact: {
|
|
182
|
+
path: 'src/storage.ts',
|
|
183
|
+
startLine: 10,
|
|
184
|
+
endLine: 50,
|
|
185
|
+
},
|
|
186
|
+
step: 'step:impl:1',
|
|
187
|
+
artifactHash: 'sha256:def456abc123',
|
|
188
|
+
createdAt: '2024-01-01T00:00:00Z',
|
|
189
|
+
};
|
|
190
|
+
expect(trace.artifact.path).toBe('src/storage.ts');
|
|
191
|
+
expect(trace.artifactHash).toMatch(/^sha256:/);
|
|
192
|
+
});
|
|
193
|
+
it('can be marked as stale', () => {
|
|
194
|
+
const trace = {
|
|
195
|
+
id: 'trace:xyz789',
|
|
196
|
+
artifact: { path: 'src/modified.ts' },
|
|
197
|
+
step: 'step:impl:2',
|
|
198
|
+
artifactHash: 'sha256:old123hash456',
|
|
199
|
+
createdAt: '2024-01-01T00:00:00Z',
|
|
200
|
+
stale: true,
|
|
201
|
+
};
|
|
202
|
+
expect(trace.stale).toBe(true);
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
describe('Graph types', () => {
|
|
206
|
+
it('GraphNode wraps entities with type info', () => {
|
|
207
|
+
const node = {
|
|
208
|
+
id: 'spec:test:v1',
|
|
209
|
+
type: 'spec',
|
|
210
|
+
hash: 'sha256:abc123def456',
|
|
211
|
+
data: {
|
|
212
|
+
id: 'spec:test:v1',
|
|
213
|
+
version: '1.0.0',
|
|
214
|
+
title: 'Test',
|
|
215
|
+
status: 'draft',
|
|
216
|
+
intent: 'Test',
|
|
217
|
+
requirements: [],
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
expect(node.type).toBe('spec');
|
|
221
|
+
});
|
|
222
|
+
it('GraphEdge connects nodes with relationship type', () => {
|
|
223
|
+
const edge = {
|
|
224
|
+
from: 'spec:test:v1',
|
|
225
|
+
to: 'req:test:first',
|
|
226
|
+
type: 'contains',
|
|
227
|
+
};
|
|
228
|
+
expect(edge.type).toBe('contains');
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
//# sourceMappingURL=types.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../src/types.test.ts"],"names":[],"mappings":"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"}
|