archctx 0.6.3 → 0.7.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "archctx",
3
- "version": "0.6.3",
3
+ "version": "0.7.0",
4
4
  "description": "Local architecture context CLI for agentic coding workflows.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -31,7 +31,7 @@
31
31
  "additionalProperties": false,
32
32
  "required": ["architectureDocs", "agentContext"],
33
33
  "properties": {
34
- "architectureDocs": { "const": "archcontext.docs-renderer/v4" },
34
+ "architectureDocs": { "const": "archcontext.docs-renderer/v5" },
35
35
  "agentContext": { "const": "archcontext.agent-context-renderer/v1" }
36
36
  }
37
37
  },
@@ -39,7 +39,12 @@
39
39
  "type": "array",
40
40
  "minItems": 3,
41
41
  "uniqueItems": true,
42
- "items": { "enum": ["architecture-docs-renderer-v2", "architecture-refresh-signal-v1", "module-statistics-v1", "projection-apply-readback-v1", "projection-apply-receipt-v1", "projection-apply-recovery-v1", "projection-prior-committed-applies-v1", "projection-protocol-v2", "recommendation-v3", "refactor-assessment-v1", "refactor-resolution-v1"] }
42
+ "items": {
43
+ "type": "string",
44
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*-v[0-9]+$",
45
+ "description": "One feature flag: a lowercase kebab-case name that ends in a version suffix (-v1, -v2, ...). The pattern is open, so a validator built from this schema accepts flags that a later archctx adds. A consumer must ignore a flag it does not know. examples lists the flags this schema version knows.",
46
+ "examples": ["architecture-change-capabilities-v1", "architecture-docs-renderer-v2", "architecture-refresh-signal-v1", "changeset-entity-operations-v1", "code-facts-unavailable-error-v1", "module-statistics-v1", "projection-apply-readback-v1", "projection-apply-receipt-v1", "projection-apply-recovery-v1", "projection-apply-replay-v1", "projection-check-freshness-v1", "projection-manifest-contract-v2", "projection-observed-major-change-acceptance-v1", "projection-orphan-review-v1", "projection-preview-v1", "projection-prior-committed-applies-v1", "projection-protocol-v2", "recommendation-scan-decision-v1", "recommendation-v3", "refactor-assessment-v1", "refactor-observation-evidence-v1", "refactor-resolution-v1", "refactor-scan-limits-v1"]
47
+ }
43
48
  }
44
49
  }
45
50
  }
@@ -40,6 +40,12 @@
40
40
  "uniqueItems": true,
41
41
  "items": { "type": "string", "minLength": 1 }
42
42
  },
43
+ "capabilities": {
44
+ "type": "array",
45
+ "minItems": 1,
46
+ "description": "The observed per-capability breakdown of this signal, sorted by capabilityId (enforced by architectureRefreshSignalInvariantIssues). Part of the signal identity; signals committed before it existed lack it.",
47
+ "items": { "$ref": "#/$defs/capabilityChange" }
48
+ },
43
49
  "refreshTargets": {
44
50
  "type": "array",
45
51
  "minItems": 1,
@@ -59,6 +65,27 @@
59
65
  ],
60
66
  "$defs": {
61
67
  "digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
68
+ "capabilityChange": {
69
+ "type": "object",
70
+ "additionalProperties": false,
71
+ "required": ["capabilityId", "reasonCodes", "changedFacets", "proofStatusBefore", "proofStatusAfter"],
72
+ "properties": {
73
+ "capabilityId": { "type": "string", "minLength": 1 },
74
+ "reasonCodes": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/reasonCode" } },
75
+ "changedFacets": { "type": "array", "uniqueItems": true, "items": { "enum": ["constraints", "entrypoints", "interfaces", "lifecycle", "names", "ownership", "placement", "relations", "responsibilities", "riskBoundaries"] } },
76
+ "proofStatusBefore": { "anyOf": [{ "type": "null" }, { "$ref": "#/$defs/proofStatus" }] },
77
+ "proofStatusAfter": { "anyOf": [{ "type": "null" }, { "$ref": "#/$defs/proofStatus" }] }
78
+ }
79
+ },
80
+ "proofStatus": {
81
+ "type": "object",
82
+ "additionalProperties": false,
83
+ "required": ["p1", "p2"],
84
+ "properties": {
85
+ "p1": { "enum": ["proven", "unprovable"] },
86
+ "p2": { "enum": ["not-applicable", "proven", "unprovable"] }
87
+ }
88
+ },
62
89
  "reasonCode": {
63
90
  "enum": ["constraint-changed", "entrypoint-changed", "interface-changed", "lifecycle-changed", "node-added", "node-moved", "node-removed", "node-renamed", "ownership-changed", "relation-changed", "responsibility-changed", "risk-boundary-changed", "verified-flow-proof-changed"]
64
91
  },
@@ -108,24 +108,50 @@
108
108
  "projectionFiles": {
109
109
  "type": "array",
110
110
  "items": {
111
- "type": "object",
112
- "additionalProperties": false,
113
- "required": [
114
- "path",
115
- "expectedHash",
116
- "body"
117
- ],
118
- "properties": {
119
- "path": {
120
- "type": "string"
121
- },
122
- "expectedHash": {
123
- "type": "string"
111
+ "oneOf": [
112
+ {
113
+ "type": "object",
114
+ "additionalProperties": false,
115
+ "required": [
116
+ "path",
117
+ "expectedHash",
118
+ "body"
119
+ ],
120
+ "properties": {
121
+ "path": {
122
+ "type": "string"
123
+ },
124
+ "expectedHash": {
125
+ "type": "string"
126
+ },
127
+ "body": {
128
+ "type": "string"
129
+ }
130
+ }
124
131
  },
125
- "body": {
126
- "type": "string"
132
+ {
133
+ "type": "object",
134
+ "additionalProperties": false,
135
+ "description": "Removes one projection-owned file; accepted only by render_projection with the exact current body hash.",
136
+ "required": [
137
+ "path",
138
+ "expectedHash",
139
+ "delete"
140
+ ],
141
+ "properties": {
142
+ "path": {
143
+ "type": "string"
144
+ },
145
+ "expectedHash": {
146
+ "type": "string",
147
+ "pattern": "^sha256:[a-f0-9]{64}$"
148
+ },
149
+ "delete": {
150
+ "const": true
151
+ }
152
+ }
127
153
  }
128
- }
154
+ ]
129
155
  }
130
156
  }
131
157
  }
@@ -76,7 +76,7 @@
76
76
  "$ref": "#/$defs/digest"
77
77
  },
78
78
  "rendererVersion": {
79
- "const": "archcontext.docs-renderer/v4"
79
+ "const": "archcontext.docs-renderer/v5"
80
80
  },
81
81
  "layoutVersion": {
82
82
  "const": "archcontext.docs-layout/v1"
@@ -87,7 +87,6 @@
87
87
  "required": [
88
88
  "codeGraphPackage",
89
89
  "codeGraphVersion",
90
- "codeGraphBinaryDigest",
91
90
  "codeGraphStatus"
92
91
  ],
93
92
  "properties": {
@@ -97,9 +96,6 @@
97
96
  "codeGraphVersion": {
98
97
  "const": "1.6.1"
99
98
  },
100
- "codeGraphBinaryDigest": {
101
- "$ref": "#/$defs/digest"
102
- },
103
99
  "codeGraphStatus": {
104
100
  "enum": [
105
101
  "ready",
@@ -150,6 +146,9 @@
150
146
  },
151
147
  "outputDigest": {
152
148
  "$ref": "#/$defs/nullableDigest"
149
+ },
150
+ "preview": {
151
+ "$ref": "#/$defs/filePreview"
153
152
  }
154
153
  },
155
154
  "allOf": [
@@ -171,6 +170,13 @@
171
170
  },
172
171
  "outputDigest": {
173
172
  "$ref": "#/$defs/digest"
173
+ },
174
+ "preview": {
175
+ "properties": {
176
+ "format": {
177
+ "const": "body"
178
+ }
179
+ }
174
180
  }
175
181
  }
176
182
  }
@@ -193,6 +199,13 @@
193
199
  },
194
200
  "outputDigest": {
195
201
  "const": null
202
+ },
203
+ "preview": {
204
+ "properties": {
205
+ "format": {
206
+ "const": "unified-diff"
207
+ }
208
+ }
196
209
  }
197
210
  }
198
211
  }
@@ -221,9 +234,81 @@
221
234
  }
222
235
  }
223
236
  }
237
+ },
238
+ {
239
+ "if": {
240
+ "properties": {
241
+ "action": {
242
+ "const": "update"
243
+ }
244
+ },
245
+ "required": [
246
+ "action"
247
+ ]
248
+ },
249
+ "then": {
250
+ "properties": {
251
+ "preview": {
252
+ "properties": {
253
+ "format": {
254
+ "const": "unified-diff"
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ },
261
+ {
262
+ "if": {
263
+ "properties": {
264
+ "action": {
265
+ "const": "unchanged"
266
+ }
267
+ },
268
+ "required": [
269
+ "action"
270
+ ]
271
+ },
272
+ "then": {
273
+ "not": {
274
+ "required": [
275
+ "preview"
276
+ ]
277
+ }
278
+ }
224
279
  }
225
280
  ]
226
281
  },
282
+ "filePreview": {
283
+ "type": "object",
284
+ "additionalProperties": false,
285
+ "description": "plan results only (#264): the rendered body of a create, or a unified diff of an update or delete, returned in the response and never persisted. content is cut at a line boundary to at most 65536 UTF-8 bytes per file and 1048576 per result; byteLength is the UTF-8 length of the complete content. The byte bounds and truncated/byteLength coupling are enforced by projectionResultInvariantIssues.",
286
+ "required": [
287
+ "format",
288
+ "content",
289
+ "byteLength",
290
+ "truncated"
291
+ ],
292
+ "properties": {
293
+ "format": {
294
+ "enum": [
295
+ "body",
296
+ "unified-diff"
297
+ ]
298
+ },
299
+ "content": {
300
+ "type": "string",
301
+ "maxLength": 65536
302
+ },
303
+ "byteLength": {
304
+ "type": "integer",
305
+ "minimum": 0
306
+ },
307
+ "truncated": {
308
+ "type": "boolean"
309
+ }
310
+ }
311
+ },
227
312
  "humanAction": {
228
313
  "type": "object",
229
314
  "additionalProperties": false,
@@ -237,6 +322,7 @@
237
322
  "enum": [
238
323
  "adoption-required",
239
324
  "manual-region-conflict",
325
+ "orphaned-document-review",
240
326
  "target-collision",
241
327
  "unprovable-required-flow",
242
328
  "unresolved-major-change"
@@ -250,9 +336,49 @@
250
336
  "minLength": 1
251
337
  }
252
338
  },
339
+ "path": {
340
+ "type": "string",
341
+ "minLength": 1,
342
+ "description": "The orphaned managed document a human must review. Present exactly when reasonCode is orphaned-document-review.",
343
+ "not": {
344
+ "anyOf": [
345
+ {
346
+ "pattern": "^/"
347
+ },
348
+ {
349
+ "pattern": "\\\\"
350
+ },
351
+ {
352
+ "pattern": "(^|/)\\.\\.(/|$)"
353
+ }
354
+ ]
355
+ }
356
+ },
253
357
  "requestPayloadDigest": {
254
358
  "$ref": "#/$defs/digest"
255
359
  }
360
+ },
361
+ "if": {
362
+ "properties": {
363
+ "reasonCode": {
364
+ "const": "orphaned-document-review"
365
+ }
366
+ },
367
+ "required": [
368
+ "reasonCode"
369
+ ]
370
+ },
371
+ "then": {
372
+ "required": [
373
+ "path"
374
+ ]
375
+ },
376
+ "else": {
377
+ "not": {
378
+ "required": [
379
+ "path"
380
+ ]
381
+ }
256
382
  }
257
383
  },
258
384
  "digestSet": {
@@ -392,6 +518,14 @@
392
518
  "minLength": 1
393
519
  }
394
520
  },
521
+ "capabilities": {
522
+ "type": "array",
523
+ "minItems": 1,
524
+ "description": "The observed per-capability breakdown of this signal, sorted by capabilityId (enforced by architectureRefreshSignalInvariantIssues). Part of the signal identity; signals committed before it existed lack it.",
525
+ "items": {
526
+ "$ref": "#/$defs/capabilityChange"
527
+ }
528
+ },
395
529
  "refreshTargets": {
396
530
  "type": "array",
397
531
  "minItems": 1,
@@ -453,6 +587,91 @@
453
587
  }
454
588
  ]
455
589
  },
590
+ "capabilityChange": {
591
+ "type": "object",
592
+ "additionalProperties": false,
593
+ "required": [
594
+ "capabilityId",
595
+ "reasonCodes",
596
+ "changedFacets",
597
+ "proofStatusBefore",
598
+ "proofStatusAfter"
599
+ ],
600
+ "properties": {
601
+ "capabilityId": {
602
+ "type": "string",
603
+ "minLength": 1
604
+ },
605
+ "reasonCodes": {
606
+ "type": "array",
607
+ "uniqueItems": true,
608
+ "items": {
609
+ "$ref": "#/$defs/reasonCode"
610
+ }
611
+ },
612
+ "changedFacets": {
613
+ "type": "array",
614
+ "uniqueItems": true,
615
+ "items": {
616
+ "enum": [
617
+ "constraints",
618
+ "entrypoints",
619
+ "interfaces",
620
+ "lifecycle",
621
+ "names",
622
+ "ownership",
623
+ "placement",
624
+ "relations",
625
+ "responsibilities",
626
+ "riskBoundaries"
627
+ ]
628
+ }
629
+ },
630
+ "proofStatusBefore": {
631
+ "anyOf": [
632
+ {
633
+ "type": "null"
634
+ },
635
+ {
636
+ "$ref": "#/$defs/proofStatus"
637
+ }
638
+ ]
639
+ },
640
+ "proofStatusAfter": {
641
+ "anyOf": [
642
+ {
643
+ "type": "null"
644
+ },
645
+ {
646
+ "$ref": "#/$defs/proofStatus"
647
+ }
648
+ ]
649
+ }
650
+ }
651
+ },
652
+ "proofStatus": {
653
+ "type": "object",
654
+ "additionalProperties": false,
655
+ "required": [
656
+ "p1",
657
+ "p2"
658
+ ],
659
+ "properties": {
660
+ "p1": {
661
+ "enum": [
662
+ "proven",
663
+ "unprovable"
664
+ ]
665
+ },
666
+ "p2": {
667
+ "enum": [
668
+ "not-applicable",
669
+ "proven",
670
+ "unprovable"
671
+ ]
672
+ }
673
+ }
674
+ },
456
675
  "acceptedChange": {
457
676
  "type": "object",
458
677
  "additionalProperties": false,
@@ -600,6 +819,60 @@
600
819
  ]
601
820
  }
602
821
  },
822
+ "freshness": {
823
+ "type": "object",
824
+ "additionalProperties": false,
825
+ "description": "Present on check results only. Canonical wire orders and the ok/reasonCodes/staleNodes coupling are enforced by projectionResultInvariantIssues.",
826
+ "required": [
827
+ "ok",
828
+ "reasonCodes",
829
+ "staleNodes"
830
+ ],
831
+ "properties": {
832
+ "ok": {
833
+ "type": "boolean"
834
+ },
835
+ "reasonCodes": {
836
+ "type": "array",
837
+ "uniqueItems": true,
838
+ "items": {
839
+ "enum": [
840
+ "projection-manifest-missing",
841
+ "projection-manifest-unreadable",
842
+ "projection-snapshot-provenance-missing",
843
+ "projection-source-changed-since-stamp",
844
+ "projection-source-stamp-invalid",
845
+ "projection-source-stamp-missing",
846
+ "projection-source-tree-digest-mismatch"
847
+ ]
848
+ }
849
+ },
850
+ "staleNodes": {
851
+ "type": "array",
852
+ "items": {
853
+ "type": "object",
854
+ "additionalProperties": false,
855
+ "required": [
856
+ "nodeId",
857
+ "stampedDigest",
858
+ "currentDigest"
859
+ ],
860
+ "properties": {
861
+ "nodeId": {
862
+ "type": "string",
863
+ "minLength": 1
864
+ },
865
+ "stampedDigest": {
866
+ "$ref": "#/$defs/digest"
867
+ },
868
+ "currentDigest": {
869
+ "$ref": "#/$defs/digest"
870
+ }
871
+ }
872
+ }
873
+ }
874
+ }
875
+ },
603
876
  "applyIdentity": {
604
877
  "type": "object",
605
878
  "additionalProperties": false,
@@ -744,6 +1017,17 @@
744
1017
  "$ref": "#/$defs/priorCommittedApply"
745
1018
  }
746
1019
  },
1020
+ "freshness": {
1021
+ "$ref": "#/$defs/freshness"
1022
+ },
1023
+ "replayed": {
1024
+ "const": true,
1025
+ "description": "A repeated apply for the same requestId and request digest returned the committed result without applying again. Excluded from receiptDigest."
1026
+ },
1027
+ "majorChangeAcceptance": {
1028
+ "const": "declined-unprovable-proof",
1029
+ "description": "Present only when the request sent acceptObservedMajorChange and the provider declined it because a capability proof is unprovable; humanActions then carries unprovable-required-flow instead of unresolved-major-change."
1030
+ },
747
1031
  "receiptDigest": {
748
1032
  "$ref": "#/$defs/digest"
749
1033
  }
@@ -799,6 +1083,64 @@
799
1083
  }
800
1084
  }
801
1085
  }
1086
+ },
1087
+ {
1088
+ "if": {
1089
+ "required": [
1090
+ "majorChangeAcceptance"
1091
+ ]
1092
+ },
1093
+ "then": {
1094
+ "properties": {
1095
+ "status": {
1096
+ "const": "human-action-required"
1097
+ },
1098
+ "humanActions": {
1099
+ "contains": {
1100
+ "properties": {
1101
+ "reasonCode": {
1102
+ "const": "unprovable-required-flow"
1103
+ }
1104
+ },
1105
+ "required": [
1106
+ "reasonCode"
1107
+ ]
1108
+ },
1109
+ "not": {
1110
+ "contains": {
1111
+ "properties": {
1112
+ "reasonCode": {
1113
+ "const": "unresolved-major-change"
1114
+ }
1115
+ },
1116
+ "required": [
1117
+ "reasonCode"
1118
+ ]
1119
+ }
1120
+ }
1121
+ }
1122
+ }
1123
+ }
1124
+ },
1125
+ {
1126
+ "if": {
1127
+ "required": [
1128
+ "replayed"
1129
+ ]
1130
+ },
1131
+ "then": {
1132
+ "required": [
1133
+ "applyReceipt"
1134
+ ],
1135
+ "properties": {
1136
+ "status": {
1137
+ "enum": [
1138
+ "applied",
1139
+ "applied-reconcile-required"
1140
+ ]
1141
+ }
1142
+ }
1143
+ }
802
1144
  }
803
1145
  ]
804
1146
  },
@@ -892,7 +1234,7 @@
892
1234
  "$ref": "#/$defs/digestSet"
893
1235
  },
894
1236
  "rendererVersion": {
895
- "const": "archcontext.docs-renderer/v4"
1237
+ "const": "archcontext.docs-renderer/v5"
896
1238
  },
897
1239
  "layoutVersion": {
898
1240
  "const": "archcontext.docs-layout/v1"
@@ -903,7 +1245,6 @@
903
1245
  "required": [
904
1246
  "codeGraphPackage",
905
1247
  "codeGraphVersion",
906
- "codeGraphBinaryDigest",
907
1248
  "codeGraphStatus"
908
1249
  ],
909
1250
  "properties": {
@@ -913,9 +1254,6 @@
913
1254
  "codeGraphVersion": {
914
1255
  "const": "1.6.1"
915
1256
  },
916
- "codeGraphBinaryDigest": {
917
- "$ref": "#/$defs/digest"
918
- },
919
1257
  "codeGraphStatus": {
920
1258
  "enum": [
921
1259
  "ready",
@@ -929,6 +1267,9 @@
929
1267
  },
930
1268
  "receiptDigest": {
931
1269
  "$ref": "#/$defs/digest"
1270
+ },
1271
+ "requestDigest": {
1272
+ "$ref": "#/$defs/digest"
932
1273
  }
933
1274
  }
934
1275
  },
@@ -38,11 +38,10 @@
38
38
  "generatedFrom": {
39
39
  "type": "object",
40
40
  "additionalProperties": false,
41
- "required": ["codeGraphPackage", "codeGraphVersion", "codeGraphBinaryDigest", "codeGraphStatus"],
41
+ "required": ["codeGraphPackage", "codeGraphVersion", "codeGraphStatus"],
42
42
  "properties": {
43
43
  "codeGraphPackage": { "const": "@colbymchenry/codegraph" },
44
44
  "codeGraphVersion": { "const": "1.6.1" },
45
- "codeGraphBinaryDigest": { "$ref": "#/$defs/digest" },
46
45
  "codeGraphStatus": { "enum": ["ready", "unavailable"] }
47
46
  }
48
47
  },
@@ -63,6 +62,27 @@
63
62
  "projectionDigest": { "$ref": "#/$defs/digest" }
64
63
  }
65
64
  },
65
+ "capabilityChange": {
66
+ "type": "object",
67
+ "additionalProperties": false,
68
+ "required": ["capabilityId", "reasonCodes", "changedFacets", "proofStatusBefore", "proofStatusAfter"],
69
+ "properties": {
70
+ "capabilityId": { "type": "string", "minLength": 1 },
71
+ "reasonCodes": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/reasonCode" } },
72
+ "changedFacets": { "type": "array", "uniqueItems": true, "items": { "enum": ["constraints", "entrypoints", "interfaces", "lifecycle", "names", "ownership", "placement", "relations", "responsibilities", "riskBoundaries"] } },
73
+ "proofStatusBefore": { "anyOf": [{ "type": "null" }, { "$ref": "#/$defs/proofStatus" }] },
74
+ "proofStatusAfter": { "anyOf": [{ "type": "null" }, { "$ref": "#/$defs/proofStatus" }] }
75
+ }
76
+ },
77
+ "proofStatus": {
78
+ "type": "object",
79
+ "additionalProperties": false,
80
+ "required": ["p1", "p2"],
81
+ "properties": {
82
+ "p1": { "enum": ["proven", "unprovable"] },
83
+ "p2": { "enum": ["not-applicable", "proven", "unprovable"] }
84
+ }
85
+ },
66
86
  "reasonCode": {
67
87
  "enum": ["constraint-changed", "entrypoint-changed", "interface-changed", "lifecycle-changed", "node-added", "node-moved", "node-removed", "node-renamed", "ownership-changed", "relation-changed", "responsibility-changed", "risk-boundary-changed", "verified-flow-proof-changed"]
68
88
  },
@@ -112,7 +132,7 @@
112
132
  "codeGraphDigest": { "$ref": "#/$defs/digest" },
113
133
  "indexedWorktreeDigest": { "type": ["string", "null"], "pattern": "^sha256:[a-f0-9]{64}$" },
114
134
  "projectionInputDigest": { "$ref": "#/$defs/digest" },
115
- "rendererVersion": { "const": "archcontext.docs-renderer/v4" },
135
+ "rendererVersion": { "const": "archcontext.docs-renderer/v5" },
116
136
  "layoutVersion": { "const": "archcontext.docs-layout/v1" },
117
137
  "generatedFrom": { "$ref": "#/$defs/readyGeneratedFrom" }
118
138
  }
@@ -168,6 +188,7 @@
168
188
  "acceptedChange": { "$ref": "#/$defs/acceptedChange" },
169
189
  "reasonCodes": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/reasonCode" } },
170
190
  "affectedNodeIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
191
+ "capabilities": { "type": "array", "minItems": 1, "description": "The observed per-capability breakdown of this signal, sorted by capabilityId (enforced by architectureRefreshSignalInvariantIssues). Part of the signal identity; signals committed before it existed lack it.", "items": { "$ref": "#/$defs/capabilityChange" } },
171
192
  "refreshTargets": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "enum": ["architecture-contract-context", "architecture-readiness", "architecture-request-index", "capability-context", "capability-index"] } },
172
193
  "baseDigests": { "$ref": "#/$defs/digestSet" },
173
194
  "resultingDigests": { "$ref": "#/$defs/digestSet" },