archctx 0.7.2 → 0.8.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/assets/catalog.yaml +2 -2
- package/bin/archctx.mjs +50973 -43428
- package/package.json +2 -2
- package/schemas/repo/refactor-decision.schema.json +218 -0
- package/schemas/runtime/archctx-capabilities.schema.json +2 -2
- package/schemas/runtime/architecture-debt.schema.json +222 -0
- package/schemas/runtime/capability-dependencies.schema.json +10 -6
- package/schemas/runtime/changeset.schema.json +24 -1
- package/schemas/runtime/docs-anchors.schema.json +4 -3
- package/schemas/runtime/hook-debt-checkpoint.schema.json +69 -0
- package/schemas/runtime/native-context-export.schema.json +823 -0
- package/schemas/runtime/practice-checkpoint.schema.json +1 -0
- package/schemas/runtime/product-version-manifest.schema.json +2 -2
- package/schemas/runtime/projection-apply-readback.schema.json +470 -7
- package/schemas/runtime/projection-apply-recovery.schema.json +2 -2
- package/schemas/runtime/projection-manifest.schema.json +81 -186
- package/schemas/runtime/projection-result.schema.json +132 -5
- package/schemas/runtime/projection-target.schema.json +4 -1
- package/schemas/runtime/recommendation-v3.schema.json +106 -0
- package/schemas/runtime/review-result.schema.json +1 -0
- package/schemas/runtime/runtime-recommendation-show.schema.json +234 -13
- package/schemas/runtime/runtime-refactor-scan.schema.json +171 -0
- package/schemas/runtime/structural-observation-payload.schema.json +106 -0
|
@@ -1,29 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://archcontext.dev/schemas/runtime/projection-manifest.schema.json",
|
|
4
|
-
"title": "
|
|
5
|
-
"description": "The committed docs/architecture/.projection-manifest.json the architecture documentation projection writes (#264). Version
|
|
4
|
+
"title": "ArchitectureDocsProjectionManifestV3",
|
|
5
|
+
"description": "The committed docs/architecture/.projection-manifest.json the architecture documentation projection writes (#264, #327). Version v3 records no global digest of all owned sources: header lines change only on a protocol upgrade, semanticBaseline.modelDigest is the one Git-visible anchor, and every other value belongs to one capability or one target row, so changes to different capabilities rewrite disjoint lines. A v1 or v2 manifest is not valid against this schema and is refused with projection-manifest-upgrade-required. Sorted/unique orders, one stamp per node, scale/sourceStamps pairing, the 1-2-5 bucket ladder and the byte layout are enforced by architectureDocsProjectionManifestIssues and serializeArchitectureDocsProjectionManifest.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": [
|
|
9
9
|
"schemaVersion",
|
|
10
10
|
"rendererVersion",
|
|
11
11
|
"profile",
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"projectionDigest",
|
|
12
|
+
"layoutVersion",
|
|
13
|
+
"generatedFrom",
|
|
15
14
|
"semanticBaseline",
|
|
16
|
-
"receiptDigest",
|
|
17
|
-
"targetCount",
|
|
18
|
-
"fileCount",
|
|
19
15
|
"targets"
|
|
20
16
|
],
|
|
21
17
|
"properties": {
|
|
22
18
|
"schemaVersion": {
|
|
23
|
-
"const": "archcontext.architecture-docs-projection-manifest/
|
|
19
|
+
"const": "archcontext.architecture-docs-projection-manifest/v3"
|
|
24
20
|
},
|
|
25
21
|
"rendererVersion": {
|
|
26
|
-
"
|
|
22
|
+
"type": "string",
|
|
23
|
+
"minLength": 1
|
|
27
24
|
},
|
|
28
25
|
"profile": {
|
|
29
26
|
"enum": [
|
|
@@ -31,34 +28,47 @@
|
|
|
31
28
|
"repo-harness/v1"
|
|
32
29
|
]
|
|
33
30
|
},
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
},
|
|
37
|
-
"provenance": {
|
|
38
|
-
"$ref": "#/$defs/provenance"
|
|
31
|
+
"layoutVersion": {
|
|
32
|
+
"const": "archcontext.docs-layout/v1"
|
|
39
33
|
},
|
|
40
|
-
"
|
|
41
|
-
"
|
|
34
|
+
"generatedFrom": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"required": [
|
|
38
|
+
"codeGraphPackage",
|
|
39
|
+
"codeGraphVersion"
|
|
40
|
+
],
|
|
41
|
+
"description": "Reproducible CodeGraph identity only: package name and version. The binary digest, index status and evidence digests are machine-specific runtime facts and never enter the committed manifest (#266, #277).",
|
|
42
|
+
"properties": {
|
|
43
|
+
"codeGraphPackage": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"minLength": 1
|
|
46
|
+
},
|
|
47
|
+
"codeGraphVersion": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"minLength": 1
|
|
50
|
+
}
|
|
51
|
+
}
|
|
42
52
|
},
|
|
43
53
|
"semanticBaseline": {
|
|
44
54
|
"$ref": "#/$defs/semanticBaseline"
|
|
45
55
|
},
|
|
46
|
-
"receiptDigest": {
|
|
47
|
-
"$ref": "#/$defs/digest"
|
|
48
|
-
},
|
|
49
|
-
"targetCount": {
|
|
50
|
-
"type": "integer",
|
|
51
|
-
"minimum": 0
|
|
52
|
-
},
|
|
53
|
-
"fileCount": {
|
|
54
|
-
"type": "integer",
|
|
55
|
-
"minimum": 0
|
|
56
|
-
},
|
|
57
56
|
"targets": {
|
|
58
|
-
"type": "
|
|
59
|
-
"
|
|
57
|
+
"type": "object",
|
|
58
|
+
"description": "Target rows keyed by targetId.",
|
|
59
|
+
"additionalProperties": {
|
|
60
60
|
"$ref": "#/$defs/target"
|
|
61
61
|
}
|
|
62
|
+
},
|
|
63
|
+
"minimumRendererVersion": {
|
|
64
|
+
"type": "string",
|
|
65
|
+
"pattern": "^archcontext\\.docs-renderer/v[1-9][0-9]*$",
|
|
66
|
+
"description": "Optional minimum engine renderer; an older engine refuses rendering and writes."
|
|
67
|
+
},
|
|
68
|
+
"minimumProtocolVersion": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"pattern": "^archcontext\\.projection-request/v[1-9][0-9]*$",
|
|
71
|
+
"description": "Optional minimum projection request protocol supported by the engine."
|
|
62
72
|
}
|
|
63
73
|
},
|
|
64
74
|
"$defs": {
|
|
@@ -66,132 +76,17 @@
|
|
|
66
76
|
"type": "string",
|
|
67
77
|
"pattern": "^sha256:[a-f0-9]{64}$"
|
|
68
78
|
},
|
|
69
|
-
"provenance": {
|
|
70
|
-
"type": "object",
|
|
71
|
-
"additionalProperties": false,
|
|
72
|
-
"required": [
|
|
73
|
-
"schemaVersion",
|
|
74
|
-
"sourceTreeDigest",
|
|
75
|
-
"modelDigest",
|
|
76
|
-
"projectionInputDigest",
|
|
77
|
-
"rendererVersion",
|
|
78
|
-
"layoutVersion",
|
|
79
|
-
"generatedFrom"
|
|
80
|
-
],
|
|
81
|
-
"properties": {
|
|
82
|
-
"schemaVersion": {
|
|
83
|
-
"const": "archcontext.architecture-docs-projection-provenance/v3"
|
|
84
|
-
},
|
|
85
|
-
"sourceTreeDigest": {
|
|
86
|
-
"$ref": "#/$defs/digest"
|
|
87
|
-
},
|
|
88
|
-
"modelDigest": {
|
|
89
|
-
"$ref": "#/$defs/digest"
|
|
90
|
-
},
|
|
91
|
-
"projectionInputDigest": {
|
|
92
|
-
"$ref": "#/$defs/digest"
|
|
93
|
-
},
|
|
94
|
-
"rendererVersion": {
|
|
95
|
-
"const": "archcontext.docs-renderer/v5"
|
|
96
|
-
},
|
|
97
|
-
"layoutVersion": {
|
|
98
|
-
"const": "archcontext.docs-layout/v1"
|
|
99
|
-
},
|
|
100
|
-
"generatedFrom": {
|
|
101
|
-
"type": "object",
|
|
102
|
-
"additionalProperties": false,
|
|
103
|
-
"required": [
|
|
104
|
-
"codeGraphPackage",
|
|
105
|
-
"codeGraphVersion"
|
|
106
|
-
],
|
|
107
|
-
"description": "Reproducible CodeGraph identity only: package name and version. The binary digest, index status and evidence digests are machine-specific runtime facts and never enter the committed manifest (#266, #277).",
|
|
108
|
-
"properties": {
|
|
109
|
-
"codeGraphPackage": {
|
|
110
|
-
"type": "string",
|
|
111
|
-
"minLength": 1
|
|
112
|
-
},
|
|
113
|
-
"codeGraphVersion": {
|
|
114
|
-
"type": "string",
|
|
115
|
-
"minLength": 1
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
79
|
"semanticBaseline": {
|
|
122
|
-
"type": "object",
|
|
123
|
-
"additionalProperties": false,
|
|
124
|
-
"required": [
|
|
125
|
-
"semanticState",
|
|
126
|
-
"digests"
|
|
127
|
-
],
|
|
128
|
-
"properties": {
|
|
129
|
-
"semanticState": {
|
|
130
|
-
"$ref": "#/$defs/semanticState"
|
|
131
|
-
},
|
|
132
|
-
"digests": {
|
|
133
|
-
"$ref": "#/$defs/digestSet"
|
|
134
|
-
},
|
|
135
|
-
"evidence": {
|
|
136
|
-
"type": "object",
|
|
137
|
-
"additionalProperties": false,
|
|
138
|
-
"required": [
|
|
139
|
-
"sourceTreeDigest",
|
|
140
|
-
"selectorEvidenceDigest",
|
|
141
|
-
"rendererVersion"
|
|
142
|
-
],
|
|
143
|
-
"description": "The non-model proof inputs this baseline was rendered from. Absent in manifests written before it existed.",
|
|
144
|
-
"properties": {
|
|
145
|
-
"sourceTreeDigest": {
|
|
146
|
-
"$ref": "#/$defs/digest"
|
|
147
|
-
},
|
|
148
|
-
"selectorEvidenceDigest": {
|
|
149
|
-
"$ref": "#/$defs/digest"
|
|
150
|
-
},
|
|
151
|
-
"rendererVersion": {
|
|
152
|
-
"type": "string",
|
|
153
|
-
"minLength": 1
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
"digestSet": {
|
|
160
80
|
"type": "object",
|
|
161
81
|
"additionalProperties": false,
|
|
162
82
|
"required": [
|
|
163
83
|
"modelDigest",
|
|
164
|
-
"
|
|
165
|
-
"flowProofDigest",
|
|
166
|
-
"projectionDigest"
|
|
84
|
+
"capabilities"
|
|
167
85
|
],
|
|
168
86
|
"properties": {
|
|
169
87
|
"modelDigest": {
|
|
170
|
-
"$ref": "#/$defs/digest"
|
|
171
|
-
|
|
172
|
-
"sourceTreeDigest": {
|
|
173
|
-
"$ref": "#/$defs/digest"
|
|
174
|
-
},
|
|
175
|
-
"flowProofDigest": {
|
|
176
|
-
"$ref": "#/$defs/digest"
|
|
177
|
-
},
|
|
178
|
-
"projectionDigest": {
|
|
179
|
-
"$ref": "#/$defs/digest"
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
"semanticState": {
|
|
184
|
-
"type": "object",
|
|
185
|
-
"additionalProperties": false,
|
|
186
|
-
"required": [
|
|
187
|
-
"schemaVersion",
|
|
188
|
-
"capabilities",
|
|
189
|
-
"semanticFingerprint",
|
|
190
|
-
"flowProofFingerprint"
|
|
191
|
-
],
|
|
192
|
-
"properties": {
|
|
193
|
-
"schemaVersion": {
|
|
194
|
-
"const": "archcontext.architecture-semantic-state/v1"
|
|
88
|
+
"$ref": "#/$defs/digest",
|
|
89
|
+
"description": "The one Git-visible anchor: the digest of the model this baseline was compiled from. Concurrent model changes conflict on this line, as they should."
|
|
195
90
|
},
|
|
196
91
|
"capabilities": {
|
|
197
92
|
"type": "array",
|
|
@@ -199,12 +94,6 @@
|
|
|
199
94
|
"items": {
|
|
200
95
|
"$ref": "#/$defs/capabilityState"
|
|
201
96
|
}
|
|
202
|
-
},
|
|
203
|
-
"semanticFingerprint": {
|
|
204
|
-
"$ref": "#/$defs/digest"
|
|
205
|
-
},
|
|
206
|
-
"flowProofFingerprint": {
|
|
207
|
-
"$ref": "#/$defs/digest"
|
|
208
97
|
}
|
|
209
98
|
}
|
|
210
99
|
},
|
|
@@ -217,7 +106,8 @@
|
|
|
217
106
|
"semanticFingerprint",
|
|
218
107
|
"flowProofFingerprint",
|
|
219
108
|
"proofStatus",
|
|
220
|
-
"facets"
|
|
109
|
+
"facets",
|
|
110
|
+
"selectorEvidenceDigest"
|
|
221
111
|
],
|
|
222
112
|
"properties": {
|
|
223
113
|
"capabilityId": {
|
|
@@ -288,6 +178,10 @@
|
|
|
288
178
|
"$ref": "#/$defs/digest"
|
|
289
179
|
}
|
|
290
180
|
}
|
|
181
|
+
},
|
|
182
|
+
"selectorEvidenceDigest": {
|
|
183
|
+
"$ref": "#/$defs/digest",
|
|
184
|
+
"description": "Digest of the proof-relevant selector evidence for the selectors this capability's flows cite."
|
|
291
185
|
}
|
|
292
186
|
}
|
|
293
187
|
},
|
|
@@ -353,21 +247,15 @@
|
|
|
353
247
|
"type": "object",
|
|
354
248
|
"additionalProperties": false,
|
|
355
249
|
"required": [
|
|
356
|
-
"targetId",
|
|
357
250
|
"type",
|
|
358
251
|
"scope",
|
|
359
252
|
"path",
|
|
360
253
|
"ownership",
|
|
361
|
-
"rendererVersion",
|
|
362
254
|
"format",
|
|
363
|
-
"sourceDigest",
|
|
364
255
|
"outputDigest"
|
|
365
256
|
],
|
|
257
|
+
"description": "One target row, keyed by its targetId. The key and the manifest header carry the targetId and the renderer version, so the row repeats neither.",
|
|
366
258
|
"properties": {
|
|
367
|
-
"targetId": {
|
|
368
|
-
"type": "string",
|
|
369
|
-
"minLength": 1
|
|
370
|
-
},
|
|
371
259
|
"type": {
|
|
372
260
|
"enum": [
|
|
373
261
|
"architecture-index",
|
|
@@ -429,9 +317,6 @@
|
|
|
429
317
|
"mixed"
|
|
430
318
|
]
|
|
431
319
|
},
|
|
432
|
-
"rendererVersion": {
|
|
433
|
-
"const": "archcontext.docs-renderer/v5"
|
|
434
|
-
},
|
|
435
320
|
"format": {
|
|
436
321
|
"enum": [
|
|
437
322
|
"markdown",
|
|
@@ -440,49 +325,59 @@
|
|
|
440
325
|
"likec4"
|
|
441
326
|
]
|
|
442
327
|
},
|
|
443
|
-
"sourceDigest": {
|
|
444
|
-
"$ref": "#/$defs/digest"
|
|
445
|
-
},
|
|
446
328
|
"outputDigest": {
|
|
447
329
|
"$ref": "#/$defs/digest"
|
|
448
330
|
},
|
|
449
|
-
"
|
|
450
|
-
"
|
|
451
|
-
"description": "
|
|
331
|
+
"sourceStamps": {
|
|
332
|
+
"type": "object",
|
|
333
|
+
"description": "entity-summary targets only: the content digest of every declared source footprint this target documents, by node id. Each footprint belongs to its node's nearest ancestor-or-self with an entity-summary target, so each node is stamped on exactly one row.",
|
|
334
|
+
"additionalProperties": {
|
|
335
|
+
"$ref": "#/$defs/digest"
|
|
336
|
+
}
|
|
452
337
|
},
|
|
453
338
|
"scale": {
|
|
454
339
|
"$ref": "#/$defs/scale",
|
|
455
|
-
"description": "
|
|
340
|
+
"description": "Present exactly when sourceStamps stamps the target's own node."
|
|
456
341
|
}
|
|
457
342
|
},
|
|
458
343
|
"allOf": [
|
|
459
344
|
{
|
|
460
345
|
"if": {
|
|
461
346
|
"required": [
|
|
462
|
-
"
|
|
347
|
+
"scale"
|
|
463
348
|
]
|
|
464
349
|
},
|
|
465
350
|
"then": {
|
|
466
351
|
"required": [
|
|
467
|
-
"
|
|
468
|
-
]
|
|
469
|
-
"properties": {
|
|
470
|
-
"type": {
|
|
471
|
-
"const": "entity-summary"
|
|
472
|
-
}
|
|
473
|
-
}
|
|
352
|
+
"sourceStamps"
|
|
353
|
+
]
|
|
474
354
|
}
|
|
475
355
|
},
|
|
476
356
|
{
|
|
477
357
|
"if": {
|
|
478
|
-
"
|
|
479
|
-
"
|
|
480
|
-
|
|
358
|
+
"properties": {
|
|
359
|
+
"type": {
|
|
360
|
+
"not": {
|
|
361
|
+
"const": "entity-summary"
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
481
365
|
},
|
|
482
366
|
"then": {
|
|
483
|
-
"
|
|
484
|
-
"
|
|
485
|
-
|
|
367
|
+
"not": {
|
|
368
|
+
"anyOf": [
|
|
369
|
+
{
|
|
370
|
+
"required": [
|
|
371
|
+
"sourceStamps"
|
|
372
|
+
]
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"required": [
|
|
376
|
+
"scale"
|
|
377
|
+
]
|
|
378
|
+
}
|
|
379
|
+
]
|
|
380
|
+
}
|
|
486
381
|
}
|
|
487
382
|
}
|
|
488
383
|
]
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"properties": {
|
|
9
9
|
"schemaVersion": { "const": "archcontext.projection-result/v2" },
|
|
10
10
|
"requestId": { "type": "string", "pattern": "^[a-zA-Z0-9_.:-]+$", "minLength": 1 },
|
|
11
|
-
"status": { "enum": ["adoption-required", "applied", "applied-reconcile-required", "blocked", "human-action-required", "noop", "permanent-failure", "planned", "retryable-failure"] },
|
|
11
|
+
"status": { "enum": ["adoption-required", "applied", "applied-partial", "applied-reconcile-required", "blocked", "human-action-required", "noop", "permanent-failure", "planned", "planned-partial", "retryable-failure"] },
|
|
12
12
|
"inputSnapshot": { "$ref": "#/$defs/snapshot" },
|
|
13
13
|
"outputSnapshot": { "$ref": "#/$defs/snapshot" },
|
|
14
14
|
"affectedNodeIds": { "type": "array", "uniqueItems": true, "description": "Canonical wire order is lexicographic and is enforced by projectionResultInvariantIssues.", "items": { "type": "string", "minLength": 1 } },
|
|
@@ -18,8 +18,12 @@
|
|
|
18
18
|
"applyReceipt": { "$ref": "#/$defs/applyIdentity" },
|
|
19
19
|
"priorCommittedApplies": { "type": "array", "minItems": 1, "description": "Omitted, never empty. Canonical wire order is by changeSetId and is enforced by projectionResultInvariantIssues.", "items": { "$ref": "#/$defs/priorCommittedApply" } },
|
|
20
20
|
"freshness": { "$ref": "#/$defs/freshness" },
|
|
21
|
+
"architectureDebt": { "$ref": "#/$defs/architectureDebt" },
|
|
22
|
+
"changes": { "type": "array", "description": "Present on every check and plan result and on no other. One entry per target path, the projection manifest excluded. Canonical wire order is by path; the precedence derivation of classification, the reason-code couplings and the binding of plannedAction to files[] and of blocked targets to coverage are enforced by projectionTargetChangesIssues and projectionResultInvariantIssues.", "items": { "$ref": "#/$defs/targetChange" } },
|
|
21
23
|
"replayed": { "const": true, "description": "A repeated apply for the same requestId and request digest returned the committed result without applying again. Excluded from receiptDigest." },
|
|
24
|
+
"written": { "type": "boolean", "description": "Present exactly when replayed is. false: the replay wrote nothing. true: the projection-owned outputs differed from the approved result at the approved snapshot and the replay wrote the committed fixed point again under the original receipt. Excluded from receiptDigest." },
|
|
22
25
|
"majorChangeAcceptance": { "const": "declined-unprovable-proof", "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." },
|
|
26
|
+
"coverage": { "$ref": "#/$defs/coverage" },
|
|
23
27
|
"receiptDigest": { "$ref": "#/$defs/digest" }
|
|
24
28
|
},
|
|
25
29
|
"allOf": [
|
|
@@ -47,12 +51,25 @@
|
|
|
47
51
|
}
|
|
48
52
|
}
|
|
49
53
|
},
|
|
54
|
+
{
|
|
55
|
+
"if": { "properties": { "status": { "enum": ["applied-partial", "planned-partial"] } }, "required": ["status"] },
|
|
56
|
+
"then": {
|
|
57
|
+
"required": ["coverage"],
|
|
58
|
+
"not": { "required": ["applyReceipt"] },
|
|
59
|
+
"properties": { "refreshSignals": { "maxItems": 0 } }
|
|
60
|
+
},
|
|
61
|
+
"else": { "not": { "required": ["coverage"] } }
|
|
62
|
+
},
|
|
50
63
|
{
|
|
51
64
|
"if": { "required": ["replayed"] },
|
|
52
65
|
"then": {
|
|
53
|
-
"required": ["applyReceipt"],
|
|
66
|
+
"required": ["applyReceipt", "written"],
|
|
54
67
|
"properties": { "status": { "enum": ["applied", "applied-reconcile-required"] } }
|
|
55
68
|
}
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"if": { "required": ["written"] },
|
|
72
|
+
"then": { "required": ["replayed"] }
|
|
56
73
|
}
|
|
57
74
|
],
|
|
58
75
|
"$defs": {
|
|
@@ -73,7 +90,7 @@
|
|
|
73
90
|
"codeGraphDigest": { "$ref": "#/$defs/digest" },
|
|
74
91
|
"indexedWorktreeDigest": { "$ref": "#/$defs/nullableDigest" },
|
|
75
92
|
"projectionInputDigest": { "$ref": "#/$defs/digest" },
|
|
76
|
-
"rendererVersion": { "const": "archcontext.docs-renderer/
|
|
93
|
+
"rendererVersion": { "const": "archcontext.docs-renderer/v6" },
|
|
77
94
|
"layoutVersion": { "const": "archcontext.docs-layout/v1" },
|
|
78
95
|
"generatedFrom": {
|
|
79
96
|
"type": "object",
|
|
@@ -81,7 +98,7 @@
|
|
|
81
98
|
"required": ["codeGraphPackage", "codeGraphVersion", "codeGraphStatus"],
|
|
82
99
|
"properties": {
|
|
83
100
|
"codeGraphPackage": { "const": "@colbymchenry/codegraph" },
|
|
84
|
-
"codeGraphVersion": { "const": "1.6.
|
|
101
|
+
"codeGraphVersion": { "const": "1.6.2" },
|
|
85
102
|
"codeGraphStatus": { "enum": ["ready", "unavailable"] }
|
|
86
103
|
}
|
|
87
104
|
}
|
|
@@ -250,7 +267,7 @@
|
|
|
250
267
|
"reasonCodes": {
|
|
251
268
|
"type": "array",
|
|
252
269
|
"uniqueItems": true,
|
|
253
|
-
"items": { "enum": ["projection-manifest-missing", "projection-manifest-unreadable", "projection-
|
|
270
|
+
"items": { "enum": ["projection-manifest-missing", "projection-manifest-unreadable", "projection-source-changed-since-stamp", "projection-source-stamp-missing", "projection-source-tree-digest-mismatch"] }
|
|
254
271
|
},
|
|
255
272
|
"staleNodes": {
|
|
256
273
|
"type": "array",
|
|
@@ -267,6 +284,116 @@
|
|
|
267
284
|
}
|
|
268
285
|
}
|
|
269
286
|
},
|
|
287
|
+
"coverage": {
|
|
288
|
+
"type": "object",
|
|
289
|
+
"additionalProperties": false,
|
|
290
|
+
"description": "Present exactly on planned-partial and applied-partial results; a result that covers every target omits it. Canonical wire orders, the capability bindings and the exclusion of carried-forward paths from files are enforced by projectionCoverageIssues.",
|
|
291
|
+
"required": ["complete", "blockedCapabilityIds", "blockedTargets", "appliedTargetIds"],
|
|
292
|
+
"properties": {
|
|
293
|
+
"complete": { "const": false },
|
|
294
|
+
"blockedCapabilityIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
295
|
+
"blockedTargets": {
|
|
296
|
+
"type": "array",
|
|
297
|
+
"minItems": 1,
|
|
298
|
+
"items": {
|
|
299
|
+
"type": "object",
|
|
300
|
+
"additionalProperties": false,
|
|
301
|
+
"required": ["targetId", "path", "capabilityIds", "reasonCodes"],
|
|
302
|
+
"properties": {
|
|
303
|
+
"targetId": { "type": "string", "minLength": 1 },
|
|
304
|
+
"path": {
|
|
305
|
+
"type": "string",
|
|
306
|
+
"minLength": 1,
|
|
307
|
+
"not": { "anyOf": [{ "pattern": "^/" }, { "pattern": "\\\\" }, { "pattern": "(^|/)\\.\\.(/|$)" }] }
|
|
308
|
+
},
|
|
309
|
+
"capabilityIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
310
|
+
"reasonCodes": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "enum": ["unprovable-required-flow", "verified-flow-proof-changed"] } }
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"appliedTargetIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
"targetChange": {
|
|
318
|
+
"type": "object",
|
|
319
|
+
"additionalProperties": false,
|
|
320
|
+
"description": "How one target changes since the committed projection and what this run's write does to its file (#327). null is an unknown comparison. classification follows blocked > proof-change (a known proof change) > baseline-missing > semantic-change > output-change > stamp-only > unchanged.",
|
|
321
|
+
"required": ["targetId", "path", "affectedCapabilityIds", "stampChanged", "outputChanged", "semanticChanged", "proofChanged", "plannedAction", "classification", "reasonCodes"],
|
|
322
|
+
"properties": {
|
|
323
|
+
"targetId": { "type": "string", "minLength": 1 },
|
|
324
|
+
"path": {
|
|
325
|
+
"type": "string",
|
|
326
|
+
"minLength": 1,
|
|
327
|
+
"not": { "anyOf": [{ "pattern": "^/" }, { "pattern": "\\\\" }, { "pattern": "(^|/)\\.\\.(/|$)" }] }
|
|
328
|
+
},
|
|
329
|
+
"affectedCapabilityIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
330
|
+
"stampChanged": { "type": ["boolean", "null"] },
|
|
331
|
+
"outputChanged": { "type": "boolean" },
|
|
332
|
+
"semanticChanged": { "type": ["boolean", "null"] },
|
|
333
|
+
"proofChanged": { "type": ["boolean", "null"] },
|
|
334
|
+
"plannedAction": { "enum": ["create", "delete", "none", "update"] },
|
|
335
|
+
"classification": { "enum": ["baseline-missing", "blocked", "output-change", "proof-change", "semantic-change", "stamp-only", "unchanged"] },
|
|
336
|
+
"reasonCodes": {
|
|
337
|
+
"type": "array",
|
|
338
|
+
"uniqueItems": true,
|
|
339
|
+
"items": { "enum": ["adoption-required", "ambiguous-ownership", "baseline-missing", "file-bytes-changed", "flow-proof-changed", "model-digest-changed", "orphan-review-required", "rendered-output-changed", "selector-evidence-changed", "semantic-fingerprint-changed", "source-stamp-changed", "target-added", "target-removed", "target-row-missing", "unprovable-required-flow", "verified-flow-proof-changed"] }
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
"allOf": [
|
|
343
|
+
{
|
|
344
|
+
"if": { "properties": { "classification": { "const": "blocked" } }, "required": ["classification"] },
|
|
345
|
+
"then": { "properties": { "plannedAction": { "const": "none" } } }
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"if": { "properties": { "classification": { "enum": ["stamp-only", "unchanged"] } }, "required": ["classification"] },
|
|
349
|
+
"then": { "properties": { "plannedAction": { "const": "none" }, "outputChanged": { "const": false }, "stampChanged": { "type": "boolean" }, "semanticChanged": { "const": false }, "proofChanged": { "const": false } } }
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"if": { "properties": { "classification": { "const": "unchanged" } }, "required": ["classification"] },
|
|
353
|
+
"then": { "properties": { "reasonCodes": { "maxItems": 0 }, "affectedCapabilityIds": { "maxItems": 0 } } },
|
|
354
|
+
"else": { "properties": { "reasonCodes": { "minItems": 1 } } }
|
|
355
|
+
}
|
|
356
|
+
]
|
|
357
|
+
},
|
|
358
|
+
"architectureDebt": {
|
|
359
|
+
"type": "object",
|
|
360
|
+
"additionalProperties": false,
|
|
361
|
+
"description": "Present on every check and plan result and on no other. Never changes status. Canonical wire orders and the coverage/coverageReasonCodes coupling are enforced by projectionArchitectureDebtIssues.",
|
|
362
|
+
"required": ["coverage", "coverageReasonCodes", "items"],
|
|
363
|
+
"properties": {
|
|
364
|
+
"coverage": { "enum": ["complete", "partial", "unknown"] },
|
|
365
|
+
"coverageReasonCodes": {
|
|
366
|
+
"type": "array",
|
|
367
|
+
"uniqueItems": true,
|
|
368
|
+
"items": { "enum": ["code-facts-import-limit", "code-facts-truncated", "code-facts-unavailable", "workspace-resolution-failed"] }
|
|
369
|
+
},
|
|
370
|
+
"items": {
|
|
371
|
+
"type": "array",
|
|
372
|
+
"items": {
|
|
373
|
+
"type": "object",
|
|
374
|
+
"additionalProperties": false,
|
|
375
|
+
"required": ["reasonCode", "fromCapabilityId", "toCapabilityId", "importEdgeCount"],
|
|
376
|
+
"properties": {
|
|
377
|
+
"reasonCode": { "enum": ["undeclared-dependency"] },
|
|
378
|
+
"fromCapabilityId": { "type": "string", "minLength": 1 },
|
|
379
|
+
"toCapabilityId": { "type": "string", "minLength": 1 },
|
|
380
|
+
"importEdgeCount": { "type": "integer", "minimum": 1 }
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
"allOf": [
|
|
386
|
+
{
|
|
387
|
+
"if": { "properties": { "coverage": { "const": "complete" } }, "required": ["coverage"] },
|
|
388
|
+
"then": { "properties": { "coverageReasonCodes": { "maxItems": 0 } } },
|
|
389
|
+
"else": { "properties": { "coverageReasonCodes": { "minItems": 1 } } }
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"if": { "properties": { "coverage": { "const": "unknown" } }, "required": ["coverage"] },
|
|
393
|
+
"then": { "properties": { "items": { "maxItems": 0 } } }
|
|
394
|
+
}
|
|
395
|
+
]
|
|
396
|
+
},
|
|
270
397
|
"priorCommittedApply": {
|
|
271
398
|
"type": "object",
|
|
272
399
|
"additionalProperties": false,
|
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
"title": "ProjectionTarget",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"additionalProperties": false,
|
|
7
|
-
"required": ["schemaVersion", "targetId", "type", "scope", "path", "ownership", "
|
|
7
|
+
"required": ["schemaVersion", "targetId", "type", "scope", "path", "ownership", "rendererVersion", "format", "sourceDigest", "outputDigest"],
|
|
8
|
+
"if": { "properties": { "ownership": { "const": "mixed" } }, "required": ["ownership"] },
|
|
9
|
+
"then": { "required": ["generatedRegion"] },
|
|
10
|
+
"else": { "not": { "required": ["generatedRegion"] } },
|
|
8
11
|
"properties": {
|
|
9
12
|
"schemaVersion": { "const": "archcontext.projection-target/v1" },
|
|
10
13
|
"targetId": { "type": "string", "pattern": "^projection_target\\.[a-zA-Z0-9_.-]+$" },
|