create-cmp-cli 0.24.0 → 0.25.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/bin/create-cmp.mjs +33 -3
- package/package.json +10 -4
- package/packages/harness/package.json +18 -8
- package/packages/harness/src/approve.mjs +10 -11
- package/packages/harness/src/console/console-data.mjs +117 -0
- package/packages/harness/src/console/console-evidence.mjs +122 -0
- package/packages/harness/src/console/console-overview.mjs +642 -0
- package/packages/harness/src/console/console-shell.mjs +1139 -0
- package/packages/harness/src/console/console-tabs.mjs +2828 -0
- package/packages/harness/src/console/contrast.mjs +74 -0
- package/packages/harness/src/console/preview-service.mjs +1384 -0
- package/packages/harness/src/framework-check.mjs +271 -37
- package/packages/harness/src/lib/a11y.mjs +1 -1
- package/packages/harness/src/lib/affected-tests.mjs +99 -44
- package/packages/harness/src/lib/approvals.mjs +177 -350
- package/packages/harness/src/lib/audit-cadence.mjs +1 -1
- package/packages/harness/src/lib/comments.mjs +18 -4
- package/packages/harness/src/lib/determinism.mjs +275 -14
- package/packages/harness/src/lib/evidence-badge.mjs +34 -2
- package/packages/harness/src/lib/evidence-ladder.mjs +202 -0
- package/packages/harness/src/lib/evidence-level.mjs +144 -59
- package/packages/harness/src/lib/feature-brief.mjs +53 -16
- package/packages/harness/src/lib/flight-recorder.mjs +72 -8
- package/packages/harness/src/lib/framework-check.mjs +434 -53
- package/packages/harness/src/lib/harness-lock.mjs +87 -19
- package/packages/harness/src/lib/harness-manifest.mjs +208 -0
- package/packages/harness/src/lib/harness-region.mjs +106 -2
- package/packages/harness/src/lib/harness-source.mjs +142 -0
- package/packages/harness/src/lib/inputs-hash.mjs +175 -22
- package/packages/harness/src/lib/lane-markers.mjs +78 -0
- package/packages/harness/src/lib/lane-narrator.mjs +4 -2
- package/packages/harness/src/lib/lane-runner.mjs +72 -6
- package/packages/harness/src/lib/plan.mjs +44 -11
- package/packages/harness/src/lib/plant-calibration.mjs +135 -0
- package/packages/harness/src/lib/profile-loader.mjs +323 -0
- package/packages/harness/src/lib/profiles/cmp/affected.mjs +70 -0
- package/packages/harness/src/lib/profiles/cmp/android-checks.mjs +56 -0
- package/packages/harness/src/lib/profiles/cmp/artifacts.mjs +381 -0
- package/packages/harness/src/lib/{component-stories.mjs → profiles/cmp/component-stories.mjs} +5 -2
- package/packages/harness/src/lib/profiles/cmp/console-copy.mjs +29 -0
- package/packages/harness/src/lib/profiles/cmp/declarations.mjs +181 -0
- package/{template/qa/lib → packages/harness/src/lib/profiles/cmp}/e2e-coverage.mjs +13 -3
- package/packages/harness/src/lib/profiles/cmp/index.mjs +47 -0
- package/packages/harness/src/lib/profiles/cmp/ladder.mjs +67 -0
- package/packages/harness/src/lib/profiles/cmp/maestro.mjs +113 -0
- package/packages/harness/src/lib/profiles/cmp/plants.mjs +95 -0
- package/{template/qa/lib → packages/harness/src/lib/profiles/cmp}/reachability.mjs +1 -1
- package/packages/harness/src/lib/{steps-cmp.mjs → profiles/cmp/steps-cmp.mjs} +229 -27
- package/packages/harness/src/lib/receipt-validate.mjs +84 -16
- package/packages/harness/src/lib/spec-coverage.mjs +179 -92
- package/packages/harness/src/lib/spec-model.mjs +262 -0
- package/packages/harness/src/lib/step-cache.mjs +11 -2
- package/packages/harness/src/lib/step-outcomes.mjs +84 -151
- package/packages/harness/src/lib/walk.mjs +1 -1
- package/packages/harness/src/preview-gallery.mjs +1 -1
- package/packages/harness/src/receipt-check.mjs +80 -24
- package/packages/harness/src/record-audit.mjs +1 -1
- package/packages/harness/src/scaffold-feature.mjs +10 -2
- package/packages/harness/src/verify.mjs +222 -142
- package/packages/harness/src/watch.mjs +146 -33
- package/packages/receipts/package.json +1 -1
- package/packages/receipts/src/index.mjs +2 -2
- package/packages/receipts/src/inputs-hash.mjs +175 -22
- package/packages/receipts/src/receipt-validate.mjs +84 -16
- package/src/commands/attach.mjs +128 -4
- package/src/commands/harden.mjs +7 -1
- package/src/commands/upgrade.mjs +7 -0
- package/src/lib/minimal.mjs +23 -1
- package/src/scaffold.mjs +8 -0
- package/template/.claude/settings.json +2 -2
- package/template/.claude/skills/add-feature/SKILL.md +7 -3
- package/template/.claude/skills/add-repository/SKILL.md +2 -2
- package/template/.claude/skills/add-screen/SKILL.md +8 -4
- package/template/.githooks/pre-push +9 -0
- package/template/CLAUDE.md +55 -186
- package/template/docs/TESTING.md +1 -1
- package/template/gitignore +3 -0
- package/template/qa/approve.mjs +10 -11
- package/template/qa/comments.json +1 -1
- package/template/qa/evidence/schema.json +258 -34
- package/template/qa/framework-check.mjs +271 -37
- package/template/qa/harness-manifest.json +10 -0
- package/template/qa/lib/a11y.mjs +1 -1
- package/template/qa/lib/affected-tests.mjs +99 -44
- package/template/qa/lib/approvals.mjs +177 -350
- package/template/qa/lib/audit-cadence.mjs +1 -1
- package/template/qa/lib/comments.mjs +18 -4
- package/template/qa/lib/determinism.mjs +275 -14
- package/template/qa/lib/evidence-badge.mjs +34 -2
- package/template/qa/lib/evidence-ladder.mjs +202 -0
- package/template/qa/lib/evidence-level.mjs +144 -59
- package/template/qa/lib/feature-brief.mjs +53 -16
- package/template/qa/lib/flight-recorder.mjs +72 -8
- package/template/qa/lib/framework-check.mjs +434 -53
- package/template/qa/lib/harness-lock.mjs +87 -19
- package/template/qa/lib/harness-manifest.mjs +208 -0
- package/template/qa/lib/harness-region.mjs +106 -2
- package/template/qa/lib/harness-source.mjs +142 -0
- package/template/qa/lib/inputs-hash.mjs +175 -22
- package/template/qa/lib/lane-markers.mjs +78 -0
- package/template/qa/lib/lane-narrator.mjs +4 -2
- package/template/qa/lib/lane-runner.mjs +72 -6
- package/template/qa/lib/plan.mjs +44 -11
- package/template/qa/lib/plant-calibration.mjs +135 -0
- package/template/qa/lib/profile-loader.mjs +323 -0
- package/template/qa/lib/profiles/cmp/affected.mjs +70 -0
- package/template/qa/lib/profiles/cmp/android-checks.mjs +56 -0
- package/template/qa/lib/profiles/cmp/artifacts.mjs +381 -0
- package/template/qa/lib/{component-stories.mjs → profiles/cmp/component-stories.mjs} +5 -2
- package/template/qa/lib/profiles/cmp/console-copy.mjs +29 -0
- package/template/qa/lib/profiles/cmp/declarations.mjs +181 -0
- package/{packages/harness/src/lib → template/qa/lib/profiles/cmp}/e2e-coverage.mjs +13 -3
- package/template/qa/lib/profiles/cmp/index.mjs +47 -0
- package/template/qa/lib/profiles/cmp/ladder.mjs +67 -0
- package/template/qa/lib/profiles/cmp/maestro.mjs +113 -0
- package/template/qa/lib/profiles/cmp/plants.mjs +95 -0
- package/{packages/harness/src/lib → template/qa/lib/profiles/cmp}/reachability.mjs +1 -1
- package/template/qa/lib/{steps-cmp.mjs → profiles/cmp/steps-cmp.mjs} +229 -27
- package/template/qa/lib/receipt-validate.mjs +84 -16
- package/template/qa/lib/spec-coverage.mjs +179 -92
- package/template/qa/lib/spec-model.mjs +262 -0
- package/template/qa/lib/step-cache.mjs +11 -2
- package/template/qa/lib/step-outcomes.mjs +84 -151
- package/template/qa/lib/walk.mjs +1 -1
- package/template/qa/preview-gallery.mjs +1 -1
- package/template/qa/receipt-check.mjs +80 -24
- package/template/qa/record-audit.mjs +1 -1
- package/template/qa/scaffold-feature.mjs +10 -2
- package/template/qa/verified-surface.json +17 -0
- package/template/qa/verify.mjs +222 -142
- package/template/qa/watch.mjs +146 -33
- /package/packages/harness/src/lib/{device-lease.mjs → profiles/cmp/device-lease.mjs} +0 -0
- /package/packages/harness/src/lib/{device-provider.mjs → profiles/cmp/device-provider.mjs} +0 -0
- /package/packages/harness/src/lib/{render.mjs → profiles/cmp/render.mjs} +0 -0
- /package/packages/harness/src/lib/{token-drift.mjs → profiles/cmp/token-drift.mjs} +0 -0
- /package/packages/harness/src/lib/{tree.mjs → profiles/cmp/tree.mjs} +0 -0
- /package/template/qa/lib/{device-lease.mjs → profiles/cmp/device-lease.mjs} +0 -0
- /package/template/qa/lib/{device-provider.mjs → profiles/cmp/device-provider.mjs} +0 -0
- /package/template/qa/lib/{render.mjs → profiles/cmp/render.mjs} +0 -0
- /package/template/qa/lib/{token-drift.mjs → profiles/cmp/token-drift.mjs} +0 -0
- /package/template/qa/lib/{tree.mjs → profiles/cmp/tree.mjs} +0 -0
|
@@ -1,36 +1,94 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "
|
|
3
|
+
"$id": "prooflane-evidence/1",
|
|
4
4
|
"title": "create-cmp verify-lane evidence receipt",
|
|
5
5
|
"type": "object",
|
|
6
|
-
"required": [
|
|
6
|
+
"required": [
|
|
7
|
+
"schema",
|
|
8
|
+
"profile",
|
|
9
|
+
"verdict",
|
|
10
|
+
"commit",
|
|
11
|
+
"steps",
|
|
12
|
+
"pack",
|
|
13
|
+
"artifacts",
|
|
14
|
+
"toolVersions",
|
|
15
|
+
"generatedAt"
|
|
16
|
+
],
|
|
7
17
|
"properties": {
|
|
8
|
-
"schema": {
|
|
9
|
-
|
|
18
|
+
"schema": {
|
|
19
|
+
"enum": [
|
|
20
|
+
"cmp-evidence/1",
|
|
21
|
+
"prooflane-evidence/1"
|
|
22
|
+
],
|
|
23
|
+
"description": "ROUTING METADATA, not part of the claim (ADR-0007): it names the document that defines the rest of this file. The claim is verdict + inputs.hash + steps[] + harness + pack. Renaming the label changed no assertion any receipt has ever made, which is why this is a rename and not a version bump \u2014 a bump would assert the shape changed, and no field moved. BOTH names are valid for the life of /1: a repo that never upgrades keeps writing `cmp-evidence/1` and every reader keeps accepting it. Nothing routes on this field \u2014 readers dispatch on field SHAPE \u2014 so the enum documents behaviour that already existed rather than enabling new behaviour. It would stop being accepted only at /2: a different decision, about a changed shape, needing its own ADR."
|
|
24
|
+
},
|
|
25
|
+
"profile": {
|
|
26
|
+
"enum": [
|
|
27
|
+
"smoke",
|
|
28
|
+
"scaffold",
|
|
29
|
+
"local",
|
|
30
|
+
"ci",
|
|
31
|
+
"nightly",
|
|
32
|
+
"release"
|
|
33
|
+
],
|
|
34
|
+
"description": "Which step set ran. `smoke` is the framework check (Rule 0) and `nightly` proves the harness, not a change; both are refused as done-evidence by qa/receipt-check.mjs."
|
|
35
|
+
},
|
|
10
36
|
"mode": {
|
|
11
|
-
"enum": [
|
|
12
|
-
|
|
37
|
+
"enum": [
|
|
38
|
+
"full",
|
|
39
|
+
"fast"
|
|
40
|
+
],
|
|
41
|
+
"description": "How the lane was run. \"full\" is the done-gate. \"fast\" (verify --fast) excluded the pack's expensive tier (whatever it names in FAST_EXCLUDED_NAMES): an inner-loop signal whose receipt derives no evidence rung and is REFUSED by qa/receipt-check.mjs \u2014 it can never satisfy done. Absent on receipts predating the flag \u2014 treated as full."
|
|
42
|
+
},
|
|
43
|
+
"verdict": {
|
|
44
|
+
"enum": [
|
|
45
|
+
"PASS",
|
|
46
|
+
"FAIL"
|
|
47
|
+
]
|
|
13
48
|
},
|
|
14
|
-
"verdict": { "enum": ["PASS", "FAIL"] },
|
|
15
49
|
"commit": {
|
|
16
50
|
"type": "object",
|
|
17
|
-
"required": [
|
|
51
|
+
"required": [
|
|
52
|
+
"sha",
|
|
53
|
+
"dirty"
|
|
54
|
+
],
|
|
18
55
|
"properties": {
|
|
19
|
-
"sha": {
|
|
20
|
-
|
|
56
|
+
"sha": {
|
|
57
|
+
"type": [
|
|
58
|
+
"string",
|
|
59
|
+
"null"
|
|
60
|
+
],
|
|
61
|
+
"description": "Parent HEAD at run time (the receipt is part of the NEXT commit)"
|
|
62
|
+
},
|
|
63
|
+
"dirty": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"items": {
|
|
66
|
+
"type": "string"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
21
69
|
}
|
|
22
70
|
},
|
|
23
71
|
"inputs": {
|
|
24
72
|
"type": "object",
|
|
25
73
|
"description": "Content-hash binding of the receipt to the verified surface (ADR-0005). Absent on receipts predating evidence binding.",
|
|
26
|
-
"required": [
|
|
74
|
+
"required": [
|
|
75
|
+
"hash",
|
|
76
|
+
"fileCount"
|
|
77
|
+
],
|
|
27
78
|
"properties": {
|
|
28
|
-
"hash": {
|
|
29
|
-
|
|
79
|
+
"hash": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
82
|
+
},
|
|
83
|
+
"fileCount": {
|
|
84
|
+
"type": "number"
|
|
85
|
+
},
|
|
30
86
|
"undeclared": {
|
|
31
87
|
"type": "array",
|
|
32
|
-
"items": {
|
|
33
|
-
|
|
88
|
+
"items": {
|
|
89
|
+
"type": "string"
|
|
90
|
+
},
|
|
91
|
+
"description": "Top-level entries git would commit that no verified-surface entry covers \u2014 unattested by this receipt. A report, never a gate; absent when the surface covers everything."
|
|
34
92
|
}
|
|
35
93
|
}
|
|
36
94
|
},
|
|
@@ -38,42 +96,208 @@
|
|
|
38
96
|
"type": "array",
|
|
39
97
|
"items": {
|
|
40
98
|
"type": "object",
|
|
41
|
-
"required": [
|
|
99
|
+
"required": [
|
|
100
|
+
"name",
|
|
101
|
+
"verdict",
|
|
102
|
+
"durationMs"
|
|
103
|
+
],
|
|
42
104
|
"properties": {
|
|
43
|
-
"name": {
|
|
105
|
+
"name": {
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
44
108
|
"verdict": {
|
|
45
|
-
"enum": [
|
|
46
|
-
|
|
109
|
+
"enum": [
|
|
110
|
+
"PASS",
|
|
111
|
+
"FAIL",
|
|
112
|
+
"SKIP",
|
|
113
|
+
"ERROR",
|
|
114
|
+
"CACHED"
|
|
115
|
+
],
|
|
116
|
+
"description": "ERROR means the step COULD NOT RUN \u2014 a deadline, a throw, a tier that observed nothing. It is never FAIL: 'I could not check this' is not an accusation about the change, and it earns no rung. CACHED appears ONLY on mode:\"fast\" receipts: a pure-Node step's last PASS reused because its content-hashed input set is unchanged (qa/lib/step-cache.mjs). Counts as PASS for the lane verdict but stays visibly distinct \u2014 the full lane never consults the cache."
|
|
117
|
+
},
|
|
118
|
+
"reason": {
|
|
119
|
+
"type": "string"
|
|
120
|
+
},
|
|
121
|
+
"note": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"description": "Honest fine print on a non-FAIL step (fast mode): which unit-test filter ran, or when a CACHED verdict was originally earned."
|
|
47
124
|
},
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"details": {
|
|
125
|
+
"durationMs": {
|
|
126
|
+
"type": "number"
|
|
127
|
+
},
|
|
128
|
+
"details": {
|
|
129
|
+
"type": "object"
|
|
130
|
+
},
|
|
131
|
+
"skipKind": {
|
|
132
|
+
"enum": [
|
|
133
|
+
"structure",
|
|
134
|
+
"environment"
|
|
135
|
+
],
|
|
136
|
+
"description": "WHY a step skipped, and the distinction is load-bearing: `structure` means this project genuinely has no such tier (honest, allowed), `environment` means it could have run and did not (a gap a human can close \u2014 qa/receipt-check.mjs refuses done over it, whatever the step is called)."
|
|
137
|
+
},
|
|
138
|
+
"layer": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"description": "The layer of the stack this step proves, tagged by the pack (fn.layer). Free-form; the console groups the Evidence page by it. Absent when the pack tags nothing."
|
|
141
|
+
},
|
|
142
|
+
"harness": {
|
|
143
|
+
"type": "object",
|
|
144
|
+
"description": "The integrity check's own findings, on the harnessIntegrity row only."
|
|
145
|
+
}
|
|
52
146
|
}
|
|
53
147
|
}
|
|
54
148
|
},
|
|
55
149
|
"evidenceLevel": {
|
|
56
|
-
"type": [
|
|
57
|
-
|
|
58
|
-
|
|
150
|
+
"type": [
|
|
151
|
+
"object",
|
|
152
|
+
"null"
|
|
153
|
+
],
|
|
154
|
+
"description": "The evidence ladder rung (qa/lib/evidence-level.mjs), DERIVED from which steps actually ran and PASSed \u2014 never declared. A SKIPped step never upgrades a rung; null when the lane FAILed (a failed lane has no rung); absent when the pack declares no ladder, which is the honest grade for a ladder nobody has calibrated; and null when the profile ships no plants its Rule 0 instrument can run, because a rung is a claim about gates that have been calibrated and a profile that cannot be calibrated has earned none (\u00a78.9, \u00a76.7). THE RUNG IS THE PACK'S: L2 under one pack and L2 under another are different claims that happen to share a letter, which is why `pack` travels on every receipt. Compare rungs only within a pack.",
|
|
155
|
+
"required": [
|
|
156
|
+
"rung",
|
|
157
|
+
"name",
|
|
158
|
+
"satisfiedBy"
|
|
159
|
+
],
|
|
59
160
|
"properties": {
|
|
60
|
-
"rung": {
|
|
61
|
-
|
|
62
|
-
|
|
161
|
+
"rung": {
|
|
162
|
+
"enum": [
|
|
163
|
+
"L0",
|
|
164
|
+
"L1",
|
|
165
|
+
"L2",
|
|
166
|
+
"L3"
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
"name": {
|
|
170
|
+
"type": "string",
|
|
171
|
+
"description": "The pack's own name for this rung (mobile: scaffold / desktop / device / release). Not an enum \u2014 the ladder is the profile's."
|
|
172
|
+
},
|
|
173
|
+
"satisfiedBy": {
|
|
174
|
+
"type": "array",
|
|
175
|
+
"items": {
|
|
176
|
+
"type": "string"
|
|
177
|
+
},
|
|
178
|
+
"description": "The PASSed step names the rung counts as its evidence, in lane order"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"pack": {
|
|
183
|
+
"type": "object",
|
|
184
|
+
"description": "WHICH STEP PACK produced the step rows \u2014 `harness` names the lane that ran, `pack` names the pack it loaded. A cmp L2 (device e2e) and a backend pack's L2 (integration tests) are different claims; this is what keeps them distinguishable on the wire. Optional until schema/2, once every writer emits it. Version is the harness lock's until profiles are versioned on their own.",
|
|
185
|
+
"required": [
|
|
186
|
+
"id",
|
|
187
|
+
"version"
|
|
188
|
+
],
|
|
189
|
+
"properties": {
|
|
190
|
+
"id": {
|
|
191
|
+
"type": "string",
|
|
192
|
+
"minLength": 1
|
|
193
|
+
},
|
|
194
|
+
"version": {
|
|
195
|
+
"type": [
|
|
196
|
+
"string",
|
|
197
|
+
"null"
|
|
198
|
+
]
|
|
199
|
+
}
|
|
63
200
|
}
|
|
64
201
|
},
|
|
65
202
|
"artifacts": {
|
|
66
203
|
"type": "array",
|
|
67
204
|
"items": {
|
|
68
205
|
"type": "object",
|
|
69
|
-
"required": [
|
|
206
|
+
"required": [
|
|
207
|
+
"path",
|
|
208
|
+
"sha256"
|
|
209
|
+
],
|
|
70
210
|
"properties": {
|
|
71
|
-
"path": {
|
|
72
|
-
|
|
211
|
+
"path": {
|
|
212
|
+
"type": "string"
|
|
213
|
+
},
|
|
214
|
+
"sha256": {
|
|
215
|
+
"type": "string",
|
|
216
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
217
|
+
}
|
|
73
218
|
}
|
|
74
219
|
}
|
|
75
220
|
},
|
|
76
|
-
"toolVersions": {
|
|
77
|
-
|
|
221
|
+
"toolVersions": {
|
|
222
|
+
"type": "object"
|
|
223
|
+
},
|
|
224
|
+
"generatedAt": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"format": "date-time"
|
|
227
|
+
},
|
|
228
|
+
"stage": {
|
|
229
|
+
"enum": [
|
|
230
|
+
"smoke",
|
|
231
|
+
"scaffold",
|
|
232
|
+
"change",
|
|
233
|
+
"merge",
|
|
234
|
+
"nightly",
|
|
235
|
+
"release"
|
|
236
|
+
],
|
|
237
|
+
"description": "The lifecycle stage this run belongs to, derived from the run profile: local->change, ci->merge. What a proof COST is judged against its stage, so the receipt carries it. Absent on receipts predating stages."
|
|
238
|
+
},
|
|
239
|
+
"harness": {
|
|
240
|
+
"type": "object",
|
|
241
|
+
"description": "WHICH LANE issued this verdict \u2014 the harness package, its version, and the sha256 of its machine-owned region. `intact` is a LOCAL claim (unmodified since installed): a checksum, not a signature. What the editor of a lane cannot edit is what the registry published under that version, which is why version and sha256 travel together. Absent on receipts predating harness vouching.",
|
|
242
|
+
"required": [
|
|
243
|
+
"name",
|
|
244
|
+
"version",
|
|
245
|
+
"status"
|
|
246
|
+
],
|
|
247
|
+
"properties": {
|
|
248
|
+
"name": {
|
|
249
|
+
"type": "string"
|
|
250
|
+
},
|
|
251
|
+
"version": {
|
|
252
|
+
"type": [
|
|
253
|
+
"string",
|
|
254
|
+
"null"
|
|
255
|
+
]
|
|
256
|
+
},
|
|
257
|
+
"sha256": {
|
|
258
|
+
"type": [
|
|
259
|
+
"string",
|
|
260
|
+
"null"
|
|
261
|
+
],
|
|
262
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
263
|
+
},
|
|
264
|
+
"status": {
|
|
265
|
+
"enum": [
|
|
266
|
+
"intact",
|
|
267
|
+
"modified",
|
|
268
|
+
"unlocked"
|
|
269
|
+
],
|
|
270
|
+
"description": "unlocked = installed before locks existed; nothing is known to be wrong and nothing is proven either."
|
|
271
|
+
},
|
|
272
|
+
"intact": {
|
|
273
|
+
"type": "boolean"
|
|
274
|
+
},
|
|
275
|
+
"source": {
|
|
276
|
+
"type": [
|
|
277
|
+
"string",
|
|
278
|
+
"null"
|
|
279
|
+
],
|
|
280
|
+
"enum": [
|
|
281
|
+
"local",
|
|
282
|
+
"registry",
|
|
283
|
+
"git",
|
|
284
|
+
null
|
|
285
|
+
],
|
|
286
|
+
"description": "PROVENANCE (ADR-0008): where this lane's bytes came from \u2014 recorded because the resolver knows it, and never counted as a check by anything. ABSENT means unrecorded, which is what every receipt minted before the field existed is; it must never be read as `local`. With `name` and `version` it is the fetch coordinate a checker needs to know WHICH artifact to compare against `lock.files` \u2014 and whether fetching one is meaningful at all. It is exactly as forgeable as the `version` beside it; a notary that performs the comparison reports that as ITS finding, dated and named, never as a property of this receipt."
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
"strength": {
|
|
291
|
+
"type": "object",
|
|
292
|
+
"description": "Fine print about what the run actually exercised, beyond the rung. `onDeviceSteps` lists the steps that ran against a real target rather than the host. Absent on receipts predating it.",
|
|
293
|
+
"properties": {
|
|
294
|
+
"onDeviceSteps": {
|
|
295
|
+
"type": "array",
|
|
296
|
+
"items": {
|
|
297
|
+
"type": "string"
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
78
302
|
}
|
|
79
303
|
}
|