gemstack-ai 1.2.0 → 1.4.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.
- package/.gemstack/state.json +11 -10
- package/CHANGELOG.md +97 -0
- package/README.md +89 -9
- package/RELEASE_NOTES.md +77 -0
- package/{gemstack-ai-1.2.0.tgz → gemstack-ai-1.4.0.tgz} +0 -0
- package/handoff.md +14 -12
- package/package.json +2 -2
- package/specs/008-cost-provider-safety-gates/.gemstack.json +5 -0
- package/specs/008-cost-provider-safety-gates/closure.json +59 -0
- package/specs/008-cost-provider-safety-gates/plan.md +456 -0
- package/specs/008-cost-provider-safety-gates/spec.md +633 -0
- package/specs/008-cost-provider-safety-gates/tasks.md +635 -0
- package/specs/009-context-capsule/closure.json +59 -0
- package/specs/009-context-capsule/context-capsule.json +428 -0
- package/specs/009-context-capsule/plan.md +663 -0
- package/specs/009-context-capsule/spec.md +913 -0
- package/specs/009-context-capsule/tasks.md +720 -0
- package/specs/010-agent-swarm-visual-qa/.gemstack.json +5 -0
- package/specs/010-agent-swarm-visual-qa/closure.json +59 -0
- package/specs/010-agent-swarm-visual-qa/plan.md +759 -0
- package/specs/010-agent-swarm-visual-qa/spec.md +842 -0
- package/specs/010-agent-swarm-visual-qa/swarm.json +49 -0
- package/specs/010-agent-swarm-visual-qa/tasks.md +873 -0
- package/specs/010-agent-swarm-visual-qa/visual-qa.json +41 -0
- package/src/cli.js +10 -0
- package/src/commands/context.js +95 -0
- package/src/commands/swarm.js +111 -0
- package/src/commands/verify.js +92 -0
- package/src/commands/visual.js +82 -0
- package/src/lib/closure-context.js +18 -1
- package/src/lib/context-capsule.js +594 -0
- package/src/lib/cost-ledger.js +355 -0
- package/src/lib/provider-boundary.js +186 -0
- package/src/lib/provider-registry.js +265 -0
- package/src/lib/safety-gates.js +277 -0
- package/src/lib/swarm.js +639 -0
- package/src/lib/visual-qa.js +499 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "gemstack-closure",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"feature": "specs/009-context-capsule",
|
|
5
|
+
"generated_at": "2026-09-11T18:39:19.476Z",
|
|
6
|
+
"status": "VERIFIED",
|
|
7
|
+
"closure_context": {
|
|
8
|
+
"closure_context_hash": "ae6a5b7319c6a50b6d10d8e2963cc05e87432ac93da03e7cdbff1a2df81d3a35",
|
|
9
|
+
"repository_type": "git",
|
|
10
|
+
"git_commit": "1e19c3d7cc527099e6e7c74cbfdbd4cdf4c23584",
|
|
11
|
+
"working_tree_clean": false,
|
|
12
|
+
"relevant_files_digest": "2dd0751e38c153f4c3c225d766d9302b80ed21af6cad00797448f0f733caad9f"
|
|
13
|
+
},
|
|
14
|
+
"acceptance_signature": "a14a0bb4dd5df3a13fa1af25ac0398fce93af52d45fef5148340e5ae567ed77a",
|
|
15
|
+
"canonical_summary": {
|
|
16
|
+
"required_total": 20,
|
|
17
|
+
"required_passed": 20,
|
|
18
|
+
"supplemental_total": 0,
|
|
19
|
+
"supplemental_passed": 0
|
|
20
|
+
},
|
|
21
|
+
"physical_summary": {
|
|
22
|
+
"supporting_total": 1,
|
|
23
|
+
"supporting_passed": 1,
|
|
24
|
+
"total_executed": 21,
|
|
25
|
+
"total_passed": 21,
|
|
26
|
+
"total_failed": 0,
|
|
27
|
+
"total_skipped": 0
|
|
28
|
+
},
|
|
29
|
+
"reconciliation": {
|
|
30
|
+
"math_valid": true,
|
|
31
|
+
"phantoms_detected": 0,
|
|
32
|
+
"orphans_detected": 0,
|
|
33
|
+
"missing_canonical_ids": []
|
|
34
|
+
},
|
|
35
|
+
"task_traceability_summary": {
|
|
36
|
+
"tasks_total": 24,
|
|
37
|
+
"tasks_with_validation": 24,
|
|
38
|
+
"tasks_documentation_only": 0,
|
|
39
|
+
"unmapped_canonical_tests": []
|
|
40
|
+
},
|
|
41
|
+
"required_gates": {
|
|
42
|
+
"project-tests": "PASS",
|
|
43
|
+
"gate-ci-frontmatter": "PASS",
|
|
44
|
+
"gate-ci-mojibake": "PASS"
|
|
45
|
+
},
|
|
46
|
+
"supplemental_gates": {},
|
|
47
|
+
"exceptions": [],
|
|
48
|
+
"evidence_sources": [
|
|
49
|
+
{
|
|
50
|
+
"type": "PACKAGE_SCRIPT",
|
|
51
|
+
"script": "test",
|
|
52
|
+
"runner": "node:test",
|
|
53
|
+
"exit_code": 0,
|
|
54
|
+
"duration_ms": 272
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"blockers": [],
|
|
58
|
+
"warnings": []
|
|
59
|
+
}
|
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://gemstack.dev/schemas/context-capsule-v1.json",
|
|
3
|
+
"acceptance_matrix": {
|
|
4
|
+
"canonical_ids": [
|
|
5
|
+
"TEST-CONTEXT-A01",
|
|
6
|
+
"TEST-CONTEXT-A02",
|
|
7
|
+
"TEST-CONTEXT-A03",
|
|
8
|
+
"TEST-CONTEXT-A04",
|
|
9
|
+
"TEST-CONTEXT-B01",
|
|
10
|
+
"TEST-CONTEXT-B02",
|
|
11
|
+
"TEST-CONTEXT-B03",
|
|
12
|
+
"TEST-CONTEXT-B04",
|
|
13
|
+
"TEST-CONTEXT-C01",
|
|
14
|
+
"TEST-CONTEXT-C02",
|
|
15
|
+
"TEST-CONTEXT-C03",
|
|
16
|
+
"TEST-CONTEXT-D01",
|
|
17
|
+
"TEST-CONTEXT-D02",
|
|
18
|
+
"TEST-CONTEXT-E01",
|
|
19
|
+
"TEST-CONTEXT-E02",
|
|
20
|
+
"TEST-CONTEXT-E03",
|
|
21
|
+
"TEST-CONTEXT-F01",
|
|
22
|
+
"TEST-CONTEXT-F02",
|
|
23
|
+
"TEST-CONTEXT-G01",
|
|
24
|
+
"TEST-CONTEXT-H01"
|
|
25
|
+
],
|
|
26
|
+
"signature": "a14a0bb4dd5df3a13fa1af25ac0398fce93af52d45fef5148340e5ae567ed77a",
|
|
27
|
+
"total_required": 20
|
|
28
|
+
},
|
|
29
|
+
"architecture_summary": {
|
|
30
|
+
"core_purpose": "Deterministic context compression and safe continuation for AI-assisted engineering.",
|
|
31
|
+
"critical_boundaries": [
|
|
32
|
+
"Capsule is strictly derived, never authoritative",
|
|
33
|
+
"Semantic constraint losslessness: MUST/MUST NOT survive compression",
|
|
34
|
+
"Verification is read-only and never regenerates capsules"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
"canonical_invariants": [
|
|
38
|
+
{
|
|
39
|
+
"id": "INV-001",
|
|
40
|
+
"normative": "MUST_NOT",
|
|
41
|
+
"rule": "**Strict Derived-Artifact Model**: Enforce that the capsule is mechanically derived from authoritative sources. The capsule NEVER supersedes or replaces `spec.md`, `plan.md`, `tasks.md`, or `closure.json`.",
|
|
42
|
+
"source_ref": "spec.md#goals"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "INV-002",
|
|
46
|
+
"normative": "MUST_NOT",
|
|
47
|
+
"rule": "Compression means omitting redundant explanation, conversational padding, and transient execution traces. It **never** permits omitting, softening, or generalizing a normative requirement (`MUST`, `MUST NOT`, `REQUIRED`, `FORBIDDEN`).",
|
|
48
|
+
"source_ref": "spec.md#central-invariant-2:-semantic-constraint-losslessness"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "INV-003",
|
|
52
|
+
"normative": "MUST_NOT",
|
|
53
|
+
"rule": "\"description\": \"Context compression must never drop, weaken, or generalize normative MUST/MUST NOT behavioral constraints or frozen contracts.\"",
|
|
54
|
+
"source_ref": "spec.md#4"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "INV-004",
|
|
58
|
+
"normative": "MUST_NOT",
|
|
59
|
+
"rule": "Downstream tooling MUST NOT use the capsule to override or amend any Level 1–6 artifact.",
|
|
60
|
+
"source_ref": "spec.md#precedence-rule"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "INV-005",
|
|
64
|
+
"normative": "MUST_NOT",
|
|
65
|
+
"rule": "The compiler MUST NOT ingest:",
|
|
66
|
+
"source_ref": "spec.md#strictly-excluded-inputs"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "INV-006",
|
|
70
|
+
"normative": "MUST_NOT",
|
|
71
|
+
"rule": "\"Semantic constraint losslessness: MUST/MUST NOT survive compression\",",
|
|
72
|
+
"source_ref": "spec.md#10"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "INV-007",
|
|
76
|
+
"normative": "MUST",
|
|
77
|
+
"rule": "\"normative\": \"MUST\",",
|
|
78
|
+
"source_ref": "spec.md#10"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "INV-008",
|
|
82
|
+
"normative": "MUST",
|
|
83
|
+
"rule": "\"normative\": \"MUST\",",
|
|
84
|
+
"source_ref": "spec.md#10"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "INV-009",
|
|
88
|
+
"normative": "MUST",
|
|
89
|
+
"rule": "To guarantee that a downstream agent receives complete continuation guidance, the capsule MUST contain:",
|
|
90
|
+
"source_ref": "spec.md#11"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "INV-010",
|
|
94
|
+
"normative": "MUST_NOT",
|
|
95
|
+
"rule": "**Canonical Invariants**: All `MUST` and `MUST NOT` constraints with source cross-references.",
|
|
96
|
+
"source_ref": "spec.md#11"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "INV-011",
|
|
100
|
+
"normative": "MUST_NOT",
|
|
101
|
+
"rule": "Strict normative rules containing `MUST`, `MUST NOT`, `REQUIRED`, `FORBIDDEN`.",
|
|
102
|
+
"source_ref": "spec.md#12"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "INV-012",
|
|
106
|
+
"normative": "MUST_NOT",
|
|
107
|
+
"rule": "**Priority 1 (IMMUTABLE - NEVER CONDENSED)**:",
|
|
108
|
+
"source_ref": "spec.md#deterministic-priority-model-under-pressure"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"id": "INV-013",
|
|
112
|
+
"normative": "MUST_NOT",
|
|
113
|
+
"rule": "Core safety invariants and `MUST` / `MUST NOT` constraints.",
|
|
114
|
+
"source_ref": "spec.md#deterministic-priority-model-under-pressure"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "INV-014",
|
|
118
|
+
"normative": "MUST_NOT",
|
|
119
|
+
"rule": "If Priority 1 and Priority 2 contents alone exceed the hard limit of 64 KB, the generator **MUST NOT** drop constraints. It halts with error:",
|
|
120
|
+
"source_ref": "spec.md#overflow-fail-closed-rule"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "INV-015",
|
|
124
|
+
"normative": "MUST_NOT",
|
|
125
|
+
"rule": "`gemstack verify` **NEVER**:",
|
|
126
|
+
"source_ref": "spec.md#22"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "INV-016",
|
|
130
|
+
"normative": "MUST",
|
|
131
|
+
"rule": "It MUST pass through Upgrade C `ProviderCapabilityGate` and `BillableActionGate`.",
|
|
132
|
+
"source_ref": "spec.md#24"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "INV-017",
|
|
136
|
+
"normative": "MUST_NOT",
|
|
137
|
+
"rule": "| **`CONTEXT_CAPSULE_INVARIANT_DROPPED`** | BLOCKER | Normative MUST/MUST NOT constraint missing. | **NO** |",
|
|
138
|
+
"source_ref": "spec.md#28"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "INV-018",
|
|
142
|
+
"normative": "MUST",
|
|
143
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
144
|
+
"source_ref": "spec.md#31"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"id": "INV-019",
|
|
148
|
+
"normative": "MUST",
|
|
149
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
150
|
+
"source_ref": "spec.md#31"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"id": "INV-020",
|
|
154
|
+
"normative": "MUST",
|
|
155
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
156
|
+
"source_ref": "spec.md#31"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "INV-021",
|
|
160
|
+
"normative": "MUST",
|
|
161
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
162
|
+
"source_ref": "spec.md#31"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "INV-022",
|
|
166
|
+
"normative": "MUST",
|
|
167
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
168
|
+
"source_ref": "spec.md#31"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "INV-023",
|
|
172
|
+
"normative": "MUST",
|
|
173
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
174
|
+
"source_ref": "spec.md#31"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "INV-024",
|
|
178
|
+
"normative": "MUST",
|
|
179
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
180
|
+
"source_ref": "spec.md#31"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"id": "INV-025",
|
|
184
|
+
"normative": "MUST",
|
|
185
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
186
|
+
"source_ref": "spec.md#31"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"id": "INV-026",
|
|
190
|
+
"normative": "MUST",
|
|
191
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
192
|
+
"source_ref": "spec.md#31"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"id": "INV-027",
|
|
196
|
+
"normative": "MUST",
|
|
197
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
198
|
+
"source_ref": "spec.md#31"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"id": "INV-028",
|
|
202
|
+
"normative": "MUST",
|
|
203
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
204
|
+
"source_ref": "spec.md#31"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"id": "INV-029",
|
|
208
|
+
"normative": "MUST_NOT",
|
|
209
|
+
"rule": "\"description\": \"Preserves 100% of MUST and MUST NOT normative constraints from spec.md in canonical_invariants.\",",
|
|
210
|
+
"source_ref": "spec.md#31"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"id": "INV-030",
|
|
214
|
+
"normative": "MUST",
|
|
215
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
216
|
+
"source_ref": "spec.md#31"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"id": "INV-031",
|
|
220
|
+
"normative": "MUST",
|
|
221
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
222
|
+
"source_ref": "spec.md#31"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"id": "INV-032",
|
|
226
|
+
"normative": "MUST",
|
|
227
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
228
|
+
"source_ref": "spec.md#31"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"id": "INV-033",
|
|
232
|
+
"normative": "MUST",
|
|
233
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
234
|
+
"source_ref": "spec.md#31"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"id": "INV-034",
|
|
238
|
+
"normative": "MUST",
|
|
239
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
240
|
+
"source_ref": "spec.md#31"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"id": "INV-035",
|
|
244
|
+
"normative": "MUST",
|
|
245
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
246
|
+
"source_ref": "spec.md#31"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"id": "INV-036",
|
|
250
|
+
"normative": "MUST",
|
|
251
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
252
|
+
"source_ref": "spec.md#31"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"id": "INV-037",
|
|
256
|
+
"normative": "MUST",
|
|
257
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
258
|
+
"source_ref": "spec.md#31"
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"id": "INV-038",
|
|
262
|
+
"normative": "MUST",
|
|
263
|
+
"rule": "\"gate\": \"REQUIRED\"",
|
|
264
|
+
"source_ref": "spec.md#31"
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"id": "INV-039",
|
|
268
|
+
"normative": "MUST_NOT",
|
|
269
|
+
"rule": "Asserts 100% extraction of `MUST` and `MUST NOT` statements into `canonical_invariants`.",
|
|
270
|
+
"source_ref": "spec.md#32"
|
|
271
|
+
}
|
|
272
|
+
],
|
|
273
|
+
"deferred_items": [
|
|
274
|
+
"Autonomous cross-repo capsule federations (out of scope)",
|
|
275
|
+
"LLM narrative fine-tuning (non-authoritative)"
|
|
276
|
+
],
|
|
277
|
+
"frozen_contracts": [
|
|
278
|
+
{
|
|
279
|
+
"id": "capsule-is-derived-not-authority",
|
|
280
|
+
"type": "BOOLEAN_INVARIANT",
|
|
281
|
+
"value": true
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"id": "capsule-offline-deterministic",
|
|
285
|
+
"type": "BOOLEAN_INVARIANT",
|
|
286
|
+
"value": true
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"id": "capsule-secrets-forbidden",
|
|
290
|
+
"type": "BOOLEAN_INVARIANT",
|
|
291
|
+
"value": true
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"id": "capsule-size-budget-fail-closed",
|
|
295
|
+
"type": "BOOLEAN_INVARIANT",
|
|
296
|
+
"value": true
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"id": "compression-preserves-semantic-constraints",
|
|
300
|
+
"type": "BOOLEAN_INVARIANT",
|
|
301
|
+
"value": true
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"id": "legacy-capsule-compatibility",
|
|
305
|
+
"type": "BOOLEAN_INVARIANT",
|
|
306
|
+
"value": true
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"id": "verify-never-regenerates-capsule",
|
|
310
|
+
"type": "BOOLEAN_INVARIANT",
|
|
311
|
+
"value": true
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"id": "zero-dependency-core",
|
|
315
|
+
"type": "BOOLEAN_INVARIANT",
|
|
316
|
+
"value": true
|
|
317
|
+
}
|
|
318
|
+
],
|
|
319
|
+
"generated_at": "2026-09-11T19:51:55.434Z",
|
|
320
|
+
"generator": {
|
|
321
|
+
"name": "gemstack",
|
|
322
|
+
"version": "1.2.0"
|
|
323
|
+
},
|
|
324
|
+
"historical_context": [
|
|
325
|
+
{
|
|
326
|
+
"feature": "specs/006-architecture-consistency-engine",
|
|
327
|
+
"key_guarantees": [
|
|
328
|
+
"Anti-loop findings",
|
|
329
|
+
"Deterministic hashing",
|
|
330
|
+
"Frozen contracts"
|
|
331
|
+
],
|
|
332
|
+
"status": "CLOSED"
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"feature": "specs/007-mechanical-test-matrix-closure-evidence",
|
|
336
|
+
"key_guarantees": [
|
|
337
|
+
"Mechanical test matrix",
|
|
338
|
+
"VERIFY = VALIDATE",
|
|
339
|
+
"closure.json evidence"
|
|
340
|
+
],
|
|
341
|
+
"status": "CLOSED"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"feature": "specs/008-cost-provider-safety-gates",
|
|
345
|
+
"key_guarantees": [
|
|
346
|
+
"Fail-closed gates",
|
|
347
|
+
"NO PROOF = NO EXECUTION",
|
|
348
|
+
"Zero network verify"
|
|
349
|
+
],
|
|
350
|
+
"status": "CLOSED"
|
|
351
|
+
}
|
|
352
|
+
],
|
|
353
|
+
"project": {
|
|
354
|
+
"active_feature": "specs/009-context-capsule",
|
|
355
|
+
"current_phase": "closure",
|
|
356
|
+
"lifecycle_status": "SHIPPED",
|
|
357
|
+
"name": "gemstack-ai",
|
|
358
|
+
"next_permitted_phase": "PLAN"
|
|
359
|
+
},
|
|
360
|
+
"provenance": {
|
|
361
|
+
"source_set_hash": "cb553121ecd975b8c39e1378e0ff07c9adb2d12ef323f2088c34c6780ca33077",
|
|
362
|
+
"sources": [
|
|
363
|
+
{
|
|
364
|
+
"hash": "e7b3f8427fd31ef9d591b6752716ebbf1831d669c5000297a8816eeeaf5e6936",
|
|
365
|
+
"path": ".gemstack/state.json",
|
|
366
|
+
"role": "LIFECYCLE_STATE"
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"hash": "5d7c5bf9eb22a055b10a0073171c8c0879573ac3efcf71727d55d71054219f85",
|
|
370
|
+
"path": "specs/009-context-capsule/closure.json",
|
|
371
|
+
"role": "CLOSURE_EVIDENCE"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"hash": "0d976bfd399cdbd86afac530231603d550bd504c4625330833ef86f8db8bbba9",
|
|
375
|
+
"path": "specs/009-context-capsule/plan.md",
|
|
376
|
+
"role": "PLAN"
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"hash": "aae7b3b11f96a788517496df40a59e030f9285bd420d0b8be99cb9ba94da9fd8",
|
|
380
|
+
"path": "specs/009-context-capsule/spec.md",
|
|
381
|
+
"role": "SPECIFICATION"
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"hash": "8921f2faa46bed964ae74705f6a0870c69f5948b8d3d971b7fbb057d78bb7bff",
|
|
385
|
+
"path": "specs/009-context-capsule/tasks.md",
|
|
386
|
+
"role": "TASKS"
|
|
387
|
+
}
|
|
388
|
+
]
|
|
389
|
+
},
|
|
390
|
+
"relevant_files": [
|
|
391
|
+
"src/commands/context.js",
|
|
392
|
+
"src/lib/context-capsule.js",
|
|
393
|
+
"tests/context-determinism.test.js"
|
|
394
|
+
],
|
|
395
|
+
"schema_version": 1,
|
|
396
|
+
"tasks_state": {
|
|
397
|
+
"active_task_ids": [
|
|
398
|
+
"T001",
|
|
399
|
+
"T002",
|
|
400
|
+
"T003",
|
|
401
|
+
"T004",
|
|
402
|
+
"T005",
|
|
403
|
+
"T006",
|
|
404
|
+
"T007",
|
|
405
|
+
"T008",
|
|
406
|
+
"T009",
|
|
407
|
+
"T010",
|
|
408
|
+
"T011",
|
|
409
|
+
"T012",
|
|
410
|
+
"T013",
|
|
411
|
+
"T014",
|
|
412
|
+
"T015",
|
|
413
|
+
"T016",
|
|
414
|
+
"T017",
|
|
415
|
+
"T018",
|
|
416
|
+
"T019",
|
|
417
|
+
"T020",
|
|
418
|
+
"T021",
|
|
419
|
+
"T022",
|
|
420
|
+
"T023",
|
|
421
|
+
"T024"
|
|
422
|
+
],
|
|
423
|
+
"completed": 0,
|
|
424
|
+
"in_progress": "T001",
|
|
425
|
+
"total": 24
|
|
426
|
+
},
|
|
427
|
+
"unresolved_blockers": []
|
|
428
|
+
}
|