@cassiomc1/forgeloop 1.10.0 → 1.10.2
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/DOCS_INDEX.md +12 -1
- package/LOOP_ENGINEERING.md +4 -4
- package/LOOP_SYSTEM_DESIGN.md +23 -0
- package/QUALITY_SCORECARD.md +2 -2
- package/README.md +22 -8
- package/docs/ADVISORY_CONTEXT.md +24 -0
- package/docs/AGENT_PROTOCOL_SUMMARY.md +1 -1
- package/docs/ARTIFACT_REFERENCE.md +15 -0
- package/docs/CODE_ATTESTATION.md +9 -0
- package/docs/DOCUMENTATION_GUIDE.md +4 -4
- package/docs/EXECUTION_PROFILE_BENCHMARKS.md +10 -0
- package/docs/MCP.md +13 -1
- package/docs/PACKAGE_CONTENTS.md +88 -0
- package/docs/RELEASE_CHECKLIST.md +10 -2
- package/docs/REVISION_PROVIDERS.md +9 -0
- package/docs/RIPWIRE_ADAPTER.md +189 -0
- package/docs/TROUBLESHOOTING.md +12 -0
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.html +13 -2
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json +6 -6
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.svg +10 -1
- package/docs/assets/diagrams/forgeloop-engineering-flow.html +22 -11
- package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
- package/docs/assets/diagrams/forgeloop-engineering-flow.svg +17 -8
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.html +14 -3
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json +6 -6
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.svg +10 -1
- package/docs/diagrams/README.md +26 -0
- package/docs/diagrams/forgeloop-code-attestation-flow.workflow.json +383 -57
- package/docs/diagrams/forgeloop-engineering-flow.workflow.json +374 -55
- package/docs/diagrams/forgeloop-verification-trust-flow.workflow.json +328 -47
- package/docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json +4 -4
- package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +4 -4
- package/docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json +4 -4
- package/package.json +14 -4
- package/scripts/CI_VALIDATORS.md +24 -0
- package/scripts/check-critical-coverage.mjs +9 -0
- package/src/adapters/ripwire/normalize.js +352 -0
- package/src/adapters/ripwire/process.js +248 -0
- package/src/adapters/ripwire/provider.js +245 -0
- package/src/commands/doctor.js +11 -10
- package/src/core/actions.js +2 -2
- package/src/core/advisory-context/service.js +36 -14
- package/src/core/approvals.js +2 -2
- package/src/core/artifacts.js +3 -3
- package/src/core/checks.js +0 -33
- package/src/core/completion.js +2 -2
- package/src/core/events.js +5 -5
- package/src/core/execution-profile.js +18 -5
- package/src/core/handoff-acceptance.js +10 -1
- package/src/core/next-action-pending-actions.js +255 -0
- package/src/core/next-action-phases.js +26 -764
- package/src/core/next-action-planned-phase.js +51 -0
- package/src/core/next-action-quality-guidance.js +19 -0
- package/src/core/next-action-recovery-phases.js +97 -0
- package/src/core/next-action-refresh.js +20 -0
- package/src/core/next-action-review-phase.js +189 -0
- package/src/core/next-action-verification-phase.js +192 -0
- package/src/core/task-recovery.js +2 -2
- package/src/core/transaction-maintenance.js +70 -0
- package/src/core/transaction.js +31 -10
- package/src/core/work-state.js +20 -11
- package/src/integration.d.ts +30 -3
- package/src/integration.js +2 -0
- package/src/core/cli-metadata.js +0 -23
- package/src/core/decision-classification.js +0 -55
- package/src/core/gates.js +0 -57
- package/src/core/workflow-compatibility.js +0 -151
|
@@ -11,87 +11,411 @@
|
|
|
11
11
|
{
|
|
12
12
|
"id": "completion-to-manifest",
|
|
13
13
|
"label": "Completion to manifest",
|
|
14
|
-
"focus": [
|
|
15
|
-
|
|
14
|
+
"focus": [
|
|
15
|
+
"complete",
|
|
16
|
+
"receipt",
|
|
17
|
+
"manifest",
|
|
18
|
+
"captured"
|
|
19
|
+
],
|
|
20
|
+
"note": "Completion and exact-content evidence bind to the project and task. No supplied CI receipt means NOT_VERIFIED."
|
|
16
21
|
},
|
|
17
22
|
{
|
|
18
23
|
"id": "manifest-to-statement",
|
|
19
24
|
"label": "Manifest to statement",
|
|
20
|
-
"focus": [
|
|
25
|
+
"focus": [
|
|
26
|
+
"manifest",
|
|
27
|
+
"captured",
|
|
28
|
+
"statement",
|
|
29
|
+
"signing",
|
|
30
|
+
"bundle"
|
|
31
|
+
],
|
|
21
32
|
"note": "See how the deterministic code manifest becomes an in-toto Statement v1 and optional signature bundle."
|
|
22
33
|
},
|
|
23
34
|
{
|
|
24
35
|
"id": "revision-range-coverage",
|
|
25
36
|
"label": "Revision-range coverage",
|
|
26
|
-
"focus": [
|
|
37
|
+
"focus": [
|
|
38
|
+
"base",
|
|
39
|
+
"provider",
|
|
40
|
+
"changed",
|
|
41
|
+
"attestations",
|
|
42
|
+
"union",
|
|
43
|
+
"range"
|
|
44
|
+
],
|
|
27
45
|
"note": "Inspect the separate changed-path coverage question and its gap or conflict result."
|
|
28
46
|
}
|
|
29
47
|
],
|
|
30
48
|
"legend": {
|
|
31
49
|
"mode": "auto",
|
|
32
50
|
"entries": {
|
|
33
|
-
"backend": {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
51
|
+
"backend": {
|
|
52
|
+
"label": "Protocol state"
|
|
53
|
+
},
|
|
54
|
+
"database": {
|
|
55
|
+
"label": "Content/evidence"
|
|
56
|
+
},
|
|
57
|
+
"security": {
|
|
58
|
+
"label": "Policy boundary"
|
|
59
|
+
},
|
|
60
|
+
"cloud": {
|
|
61
|
+
"label": "Signer"
|
|
62
|
+
},
|
|
63
|
+
"messagebus": {
|
|
64
|
+
"label": "Failure"
|
|
65
|
+
},
|
|
66
|
+
"external": {
|
|
67
|
+
"label": "Completion"
|
|
68
|
+
}
|
|
39
69
|
}
|
|
40
70
|
}
|
|
41
71
|
},
|
|
42
72
|
"lanes": [
|
|
43
|
-
{
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
{
|
|
48
|
-
|
|
49
|
-
|
|
73
|
+
{
|
|
74
|
+
"id": "completion",
|
|
75
|
+
"label": "Completion Evidence"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "integrity",
|
|
79
|
+
"label": "Content Integrity"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "providers",
|
|
83
|
+
"label": "Provider Boundaries"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "verification",
|
|
87
|
+
"label": "Read-Only Verification"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "results",
|
|
91
|
+
"label": "Attestation Results"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "coverage",
|
|
95
|
+
"label": "Revision-Range Coverage"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "exceptions",
|
|
99
|
+
"label": "Gaps + Conflicts",
|
|
100
|
+
"variant": "exception"
|
|
101
|
+
}
|
|
50
102
|
],
|
|
51
103
|
"phases": [
|
|
52
|
-
{
|
|
53
|
-
|
|
54
|
-
|
|
104
|
+
{
|
|
105
|
+
"id": "capture",
|
|
106
|
+
"label": "Capture content",
|
|
107
|
+
"fromCol": 0,
|
|
108
|
+
"toCol": 1
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"id": "statement",
|
|
112
|
+
"label": "Bind and sign",
|
|
113
|
+
"fromCol": 2,
|
|
114
|
+
"toCol": 3,
|
|
115
|
+
"variant": "emphasis"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "range",
|
|
119
|
+
"label": "Evaluate coverage",
|
|
120
|
+
"fromCol": 4,
|
|
121
|
+
"toCol": 5,
|
|
122
|
+
"variant": "dashed"
|
|
123
|
+
}
|
|
55
124
|
],
|
|
56
125
|
"groups": [
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
|
|
126
|
+
{
|
|
127
|
+
"id": "completion_binding",
|
|
128
|
+
"label": "Completion transaction",
|
|
129
|
+
"lane": "integrity",
|
|
130
|
+
"fromCol": 0,
|
|
131
|
+
"toCol": 3,
|
|
132
|
+
"variant": "emphasis"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "signer_boundary",
|
|
136
|
+
"label": "Optional external signer",
|
|
137
|
+
"lane": "providers",
|
|
138
|
+
"fromCol": 4,
|
|
139
|
+
"toCol": 5,
|
|
140
|
+
"variant": "security"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "coverage_boundary",
|
|
144
|
+
"label": "Coverage is a separate question",
|
|
145
|
+
"lane": "coverage",
|
|
146
|
+
"fromCol": 0,
|
|
147
|
+
"toCol": 5,
|
|
148
|
+
"variant": "dashed"
|
|
149
|
+
}
|
|
150
|
+
],
|
|
151
|
+
"mainPath": [
|
|
152
|
+
"complete",
|
|
153
|
+
"receipt",
|
|
154
|
+
"manifest",
|
|
155
|
+
"captured",
|
|
156
|
+
"statement",
|
|
157
|
+
"signing",
|
|
158
|
+
"bundle",
|
|
159
|
+
"verify"
|
|
60
160
|
],
|
|
61
|
-
"mainPath": ["complete", "receipt", "manifest", "captured", "statement", "signing", "bundle", "verify"],
|
|
62
161
|
"nodes": [
|
|
63
|
-
{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
{
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
162
|
+
{
|
|
163
|
+
"id": "complete",
|
|
164
|
+
"lane": "completion",
|
|
165
|
+
"col": 0,
|
|
166
|
+
"type": "external",
|
|
167
|
+
"label": "VALID",
|
|
168
|
+
"sublabel": "completion",
|
|
169
|
+
"width": 52
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "receipt",
|
|
173
|
+
"lane": "completion",
|
|
174
|
+
"col": 1,
|
|
175
|
+
"type": "database",
|
|
176
|
+
"label": "Receipt",
|
|
177
|
+
"sublabel": "ledger",
|
|
178
|
+
"width": 54
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"id": "manifest",
|
|
182
|
+
"lane": "integrity",
|
|
183
|
+
"col": 2,
|
|
184
|
+
"type": "database",
|
|
185
|
+
"label": "Manifest",
|
|
186
|
+
"sublabel": "SHA-256",
|
|
187
|
+
"tag": "exact",
|
|
188
|
+
"width": 60
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"id": "captured",
|
|
192
|
+
"lane": "integrity",
|
|
193
|
+
"col": 3,
|
|
194
|
+
"type": "security",
|
|
195
|
+
"label": "Captured",
|
|
196
|
+
"sublabel": "transaction",
|
|
197
|
+
"width": 68
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"id": "statement",
|
|
201
|
+
"lane": "providers",
|
|
202
|
+
"col": 4,
|
|
203
|
+
"type": "backend",
|
|
204
|
+
"label": "in-toto v1",
|
|
205
|
+
"sublabel": "statement",
|
|
206
|
+
"width": 72
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"id": "signing",
|
|
210
|
+
"lane": "providers",
|
|
211
|
+
"col": 5,
|
|
212
|
+
"type": "cloud",
|
|
213
|
+
"label": "Signer",
|
|
214
|
+
"sublabel": "optional",
|
|
215
|
+
"tag": "Cosign",
|
|
216
|
+
"width": 58
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"id": "bundle",
|
|
220
|
+
"lane": "verification",
|
|
221
|
+
"col": 5,
|
|
222
|
+
"type": "database",
|
|
223
|
+
"label": "Bundle",
|
|
224
|
+
"sublabel": "policy-bound",
|
|
225
|
+
"width": 66
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"id": "verify",
|
|
229
|
+
"lane": "results",
|
|
230
|
+
"col": 5,
|
|
231
|
+
"type": "security",
|
|
232
|
+
"label": "Verify",
|
|
233
|
+
"sublabel": "read-only",
|
|
234
|
+
"tag": "no mutation",
|
|
235
|
+
"width": 62
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"id": "base",
|
|
239
|
+
"lane": "coverage",
|
|
240
|
+
"col": 0,
|
|
241
|
+
"type": "cloud",
|
|
242
|
+
"label": "Base",
|
|
243
|
+
"sublabel": "revision",
|
|
244
|
+
"width": 52
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"id": "provider",
|
|
248
|
+
"lane": "coverage",
|
|
249
|
+
"col": 1,
|
|
250
|
+
"type": "backend",
|
|
251
|
+
"label": "Rev",
|
|
252
|
+
"sublabel": "provider",
|
|
253
|
+
"width": 52
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"id": "changed",
|
|
257
|
+
"lane": "coverage",
|
|
258
|
+
"col": 2,
|
|
259
|
+
"type": "database",
|
|
260
|
+
"label": "Paths",
|
|
261
|
+
"sublabel": "changed",
|
|
262
|
+
"width": 52
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"id": "attestations",
|
|
266
|
+
"lane": "coverage",
|
|
267
|
+
"col": 3,
|
|
268
|
+
"type": "backend",
|
|
269
|
+
"label": "Attest",
|
|
270
|
+
"sublabel": "valid",
|
|
271
|
+
"width": 42
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"id": "union",
|
|
275
|
+
"lane": "coverage",
|
|
276
|
+
"col": 4,
|
|
277
|
+
"type": "database",
|
|
278
|
+
"label": "Union",
|
|
279
|
+
"sublabel": "digests",
|
|
280
|
+
"width": 42
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"id": "range",
|
|
284
|
+
"lane": "coverage",
|
|
285
|
+
"col": 5,
|
|
286
|
+
"type": "security",
|
|
287
|
+
"label": "Range",
|
|
288
|
+
"sublabel": "coverage",
|
|
289
|
+
"tag": "no gaps",
|
|
290
|
+
"width": 58
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"id": "boundary",
|
|
294
|
+
"lane": "exceptions",
|
|
295
|
+
"col": 3,
|
|
296
|
+
"type": "security",
|
|
297
|
+
"label": "Boundary",
|
|
298
|
+
"sublabel": "scope/coverage",
|
|
299
|
+
"tag": "important",
|
|
300
|
+
"width": 74
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"id": "gap",
|
|
304
|
+
"lane": "exceptions",
|
|
305
|
+
"col": 5,
|
|
306
|
+
"type": "messagebus",
|
|
307
|
+
"label": "Gap",
|
|
308
|
+
"sublabel": "fail closed",
|
|
309
|
+
"width": 60
|
|
310
|
+
}
|
|
79
311
|
],
|
|
80
312
|
"edges": [
|
|
81
|
-
{
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
{
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
313
|
+
{
|
|
314
|
+
"id": "complete-receipt",
|
|
315
|
+
"from": "complete",
|
|
316
|
+
"to": "receipt",
|
|
317
|
+
"variant": "emphasis"
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"id": "receipt-manifest",
|
|
321
|
+
"from": "receipt",
|
|
322
|
+
"to": "manifest",
|
|
323
|
+
"variant": "security",
|
|
324
|
+
"route": "drop",
|
|
325
|
+
"fromSide": "bottom",
|
|
326
|
+
"toSide": "top"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"id": "manifest-captured",
|
|
330
|
+
"from": "manifest",
|
|
331
|
+
"to": "captured",
|
|
332
|
+
"variant": "emphasis"
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"id": "captured-statement",
|
|
336
|
+
"from": "captured",
|
|
337
|
+
"to": "statement",
|
|
338
|
+
"variant": "security",
|
|
339
|
+
"route": "drop",
|
|
340
|
+
"fromSide": "bottom",
|
|
341
|
+
"toSide": "top"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"id": "statement-signing",
|
|
345
|
+
"from": "statement",
|
|
346
|
+
"to": "signing",
|
|
347
|
+
"variant": "dashed",
|
|
348
|
+
"fromSide": "bottom",
|
|
349
|
+
"toSide": "top",
|
|
350
|
+
"route": "drop"
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"id": "signing-bundle",
|
|
354
|
+
"from": "signing",
|
|
355
|
+
"to": "bundle",
|
|
356
|
+
"variant": "security",
|
|
357
|
+
"route": "drop",
|
|
358
|
+
"fromSide": "bottom",
|
|
359
|
+
"toSide": "top"
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"id": "bundle-verify",
|
|
363
|
+
"from": "bundle",
|
|
364
|
+
"to": "verify",
|
|
365
|
+
"variant": "emphasis"
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"id": "base-provider",
|
|
369
|
+
"from": "base",
|
|
370
|
+
"to": "provider",
|
|
371
|
+
"variant": "dashed"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"id": "provider-changed",
|
|
375
|
+
"from": "provider",
|
|
376
|
+
"to": "changed",
|
|
377
|
+
"variant": "security"
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"id": "changed-attestations",
|
|
381
|
+
"from": "changed",
|
|
382
|
+
"to": "attestations",
|
|
383
|
+
"variant": "emphasis"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"id": "attestations-union",
|
|
387
|
+
"from": "attestations",
|
|
388
|
+
"to": "union",
|
|
389
|
+
"variant": "dashed"
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"id": "union-range",
|
|
393
|
+
"from": "union",
|
|
394
|
+
"to": "range",
|
|
395
|
+
"variant": "security"
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"id": "manifest-boundary",
|
|
399
|
+
"from": "manifest",
|
|
400
|
+
"to": "boundary",
|
|
401
|
+
"variant": "dashed",
|
|
402
|
+
"role": "branch",
|
|
403
|
+
"fromSide": "left",
|
|
404
|
+
"toSide": "left",
|
|
405
|
+
"route": "return-left",
|
|
406
|
+
"channelX": 44
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"id": "union-gap",
|
|
410
|
+
"from": "union",
|
|
411
|
+
"to": "gap",
|
|
412
|
+
"variant": "security",
|
|
413
|
+
"role": "error",
|
|
414
|
+
"fromSide": "right",
|
|
415
|
+
"toSide": "left",
|
|
416
|
+
"route": "outside-right",
|
|
417
|
+
"channelX": 550
|
|
418
|
+
}
|
|
95
419
|
],
|
|
96
420
|
"cards": [
|
|
97
421
|
{
|
|
@@ -100,7 +424,8 @@
|
|
|
100
424
|
"items": [
|
|
101
425
|
"PROCESSED means artifacts exist and parse",
|
|
102
426
|
"VERIFIED means completion, evidence, manifest, and content bindings validate",
|
|
103
|
-
"ATTESTED additionally requires a valid external signature policy"
|
|
427
|
+
"ATTESTED additionally requires a valid external signature policy",
|
|
428
|
+
"No supplied CI receipt means NOT_VERIFIED, not a trust level"
|
|
104
429
|
]
|
|
105
430
|
},
|
|
106
431
|
{
|
|
@@ -109,7 +434,8 @@
|
|
|
109
434
|
"items": [
|
|
110
435
|
"The manifest records one SHA-256 digest per changed source entry",
|
|
111
436
|
"The in-toto statement binds the manifest to completion evidence",
|
|
112
|
-
"Read-only verification never rewrites task state or ledger events"
|
|
437
|
+
"Read-only verification never rewrites task state or ledger events",
|
|
438
|
+
"Compaction preserves transaction manifests and event history"
|
|
113
439
|
]
|
|
114
440
|
},
|
|
115
441
|
{
|
|
@@ -118,7 +444,7 @@
|
|
|
118
444
|
"items": [
|
|
119
445
|
"Revision-range coverage asks whether changed paths have valid attestations",
|
|
120
446
|
"Gaps and conflicting task digests fail closed",
|
|
121
|
-
"Verification Scope
|
|
447
|
+
"Verification Scope \u2260 Attestation Coverage"
|
|
122
448
|
]
|
|
123
449
|
}
|
|
124
450
|
]
|