@cleocode/cleo 2026.3.4 → 2026.3.7

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.
Files changed (72) hide show
  1. package/dist/cli/index.js +2277 -609
  2. package/dist/cli/index.js.map +4 -4
  3. package/dist/mcp/index.js +1838 -443
  4. package/dist/mcp/index.js.map +4 -4
  5. package/package.json +1 -1
  6. package/packages/ct-skills/index.js +1 -1
  7. package/packages/ct-skills/package.json +0 -2
  8. package/packages/ct-skills/profiles/core.json +1 -1
  9. package/packages/ct-skills/profiles/full.json +4 -5
  10. package/packages/ct-skills/profiles/minimal.json +3 -3
  11. package/packages/ct-skills/profiles/recommended.json +2 -2
  12. package/packages/ct-skills/provider-skills-map.json +97 -0
  13. package/packages/ct-skills/skills/_shared/skill-chaining-patterns.md +23 -26
  14. package/packages/ct-skills/skills/_shared/testing-framework-config.md +9 -9
  15. package/packages/ct-skills/skills/ct-cleo/SKILL.md +21 -1
  16. package/packages/ct-skills/skills/ct-dev-workflow/SKILL.md +1 -1
  17. package/packages/ct-skills/skills/ct-documentor/SKILL.md +1 -1
  18. package/packages/ct-skills/skills/ct-epic-architect/SKILL.md +1 -1
  19. package/packages/ct-skills/skills/ct-orchestrator/SKILL.md +119 -43
  20. package/packages/ct-skills/skills/ct-orchestrator/orchestrator-prompt.txt +17 -0
  21. package/packages/ct-skills/skills/ct-orchestrator/references/orchestrator-patterns.md +1 -1
  22. package/packages/ct-skills/skills/ct-research-agent/SKILL.md +1 -1
  23. package/packages/ct-skills/skills/ct-spec-writer/SKILL.md +1 -1
  24. package/packages/ct-skills/skills/ct-task-executor/SKILL.md +1 -1
  25. package/packages/ct-skills/skills/ct-validator/SKILL.md +1 -1
  26. package/packages/ct-skills/skills/manifest.json +217 -947
  27. package/packages/ct-skills/skills.json +244 -3
  28. package/server.json +4 -4
  29. package/templates/CLEO-INJECTION.md +24 -0
  30. package/packages/ct-skills/protocols/agent-protocol.md +0 -260
  31. package/packages/ct-skills/protocols/artifact-publish.md +0 -587
  32. package/packages/ct-skills/protocols/consensus.md +0 -309
  33. package/packages/ct-skills/protocols/contribution.md +0 -375
  34. package/packages/ct-skills/protocols/decomposition.md +0 -352
  35. package/packages/ct-skills/protocols/implementation.md +0 -344
  36. package/packages/ct-skills/protocols/provenance.md +0 -600
  37. package/packages/ct-skills/protocols/release.md +0 -635
  38. package/packages/ct-skills/protocols/research.md +0 -248
  39. package/packages/ct-skills/protocols/specification.md +0 -287
  40. package/packages/ct-skills/protocols/testing.md +0 -346
  41. package/packages/ct-skills/protocols/validation.md +0 -229
  42. package/packages/ct-skills/skills/ct-gitbook/SKILL.md +0 -516
  43. package/packages/ct-skills/skills/ct-gitbook/assets/SUMMARY.md +0 -28
  44. package/packages/ct-skills/skills/ct-gitbook/assets/gitbook.yaml +0 -14
  45. package/packages/ct-skills/skills/ct-gitbook/references/api-sdk.md +0 -318
  46. package/packages/ct-skills/skills/ct-gitbook/references/auth-sso.md +0 -208
  47. package/packages/ct-skills/skills/ct-gitbook/references/change-requests.md +0 -169
  48. package/packages/ct-skills/skills/ct-gitbook/references/content-blocks.md +0 -230
  49. package/packages/ct-skills/skills/ct-gitbook/references/docs-sites.md +0 -202
  50. package/packages/ct-skills/skills/ct-gitbook/references/git-sync.md +0 -175
  51. package/packages/ct-skills/skills/ct-gitbook/references/llm-ready.md +0 -178
  52. package/packages/ct-skills/skills/ct-gitbook/references/migration.md +0 -263
  53. package/packages/ct-skills/skills/ct-library-implementer-bash/SKILL.md +0 -316
  54. package/packages/ct-skills/skills/ct-skill-lookup/SKILL.md +0 -179
  55. package/packages/ct-skills/skills/ct-test-writer-bats/SKILL.md +0 -347
  56. package/packages/ct-skills/skills/railway-platform/SKILL.md +0 -506
  57. package/packages/ct-skills/skills/railway-platform/_shared/scripts/railway-api.sh +0 -180
  58. package/packages/ct-skills/skills/railway-platform/_shared/scripts/railway-common.sh +0 -262
  59. package/packages/ct-skills/skills/railway-platform/references/01-getting-started.md +0 -149
  60. package/packages/ct-skills/skills/railway-platform/references/02-projects.md +0 -116
  61. package/packages/ct-skills/skills/railway-platform/references/03-services.md +0 -147
  62. package/packages/ct-skills/skills/railway-platform/references/04-deployments.md +0 -210
  63. package/packages/ct-skills/skills/railway-platform/references/05-databases.md +0 -142
  64. package/packages/ct-skills/skills/railway-platform/references/06-environments.md +0 -261
  65. package/packages/ct-skills/skills/railway-platform/references/07-domains.md +0 -139
  66. package/packages/ct-skills/skills/railway-platform/references/08-volumes.md +0 -533
  67. package/packages/ct-skills/skills/railway-platform/references/09-networking.md +0 -592
  68. package/packages/ct-skills/skills/railway-platform/references/10-cron.md +0 -488
  69. package/packages/ct-skills/skills/railway-platform/references/11-functions.md +0 -170
  70. package/packages/ct-skills/skills/railway-platform/references/12-monorepo.md +0 -294
  71. package/packages/ct-skills/skills/railway-platform/references/13-troubleshooting.md +0 -335
  72. package/packages/ct-skills/skills/railway-platform/references/14-railway-metal.md +0 -197
@@ -1,600 +0,0 @@
1
- # Provenance Protocol
2
-
3
- **Version**: 1.0.0
4
- **Type**: Conditional Protocol
5
- **Max Active**: 3 protocols (including base)
6
-
7
- ---
8
-
9
- ## Trigger Conditions
10
-
11
- This protocol activates when the task involves:
12
-
13
- | Trigger | Keywords | Context |
14
- |---------|----------|---------|
15
- | Supply Chain | "provenance", "supply chain", "chain of custody" | Artifact traceability |
16
- | Attestation | "attest", "attestation", "in-toto", "SLSA" | Cryptographic evidence |
17
- | SBOM | "sbom", "bill of materials", "cyclonedx", "spdx" | Dependency inventory |
18
- | Signing | "sign", "cosign", "sigstore", "verify signature" | Artifact integrity |
19
- | Checksums | "checksum", "digest", "sha256", "integrity" | Content verification |
20
-
21
- **Explicit Override**: `--protocol provenance` flag on task creation.
22
-
23
- ---
24
-
25
- ## Requirements (RFC 2119)
26
-
27
- ### MUST
28
-
29
- | Requirement | Description |
30
- |-------------|-------------|
31
- | PROV-001 | MUST record provenance chain from source commit to published artifact |
32
- | PROV-002 | MUST compute SHA-256 digest for every produced artifact |
33
- | PROV-003 | MUST generate attestation in in-toto Statement v1 format |
34
- | PROV-004 | MUST record SLSA Build Level achieved (L1 minimum) |
35
- | PROV-005 | MUST store provenance record in `.cleo/releases.json` via `record_release()` |
36
- | PROV-006 | MUST verify provenance chain integrity before publishing attestation |
37
- | PROV-007 | MUST set `agent_type: "provenance"` in manifest |
38
-
39
- ### SHOULD
40
-
41
- | Requirement | Description |
42
- |-------------|-------------|
43
- | PROV-010 | SHOULD generate SBOM (CycloneDX or SPDX) for artifacts with dependencies |
44
- | PROV-011 | SHOULD sign attestations using keyless signing (sigstore/cosign) |
45
- | PROV-012 | SHOULD publish provenance attestation alongside artifact |
46
- | PROV-013 | SHOULD verify all input materials (dependencies, base images) have provenance |
47
-
48
- ### MAY
49
-
50
- | Requirement | Description |
51
- |-------------|-------------|
52
- | PROV-020 | MAY achieve SLSA Build Level 3 or 4 |
53
- | PROV-021 | MAY use key-based signing (GPG) as alternative to keyless |
54
- | PROV-022 | MAY generate multiple SBOM formats (both CycloneDX and SPDX) |
55
-
56
- ---
57
-
58
- ## Provenance Chain Model
59
-
60
- ```
61
- commit --> build --> artifact --> attestation --> registry
62
- | | | | |
63
- sha log digest signature published
64
- | | | | |
65
- source env checksum certificate location
66
- identity capture file bundle URL
67
- ```
68
-
69
- ### Chain Links
70
-
71
- | Stage | Input | Output | Required Field |
72
- |-------|-------|--------|----------------|
73
- | Source | Repository URL | Commit SHA | `invocation.configSource.digest.sha1` |
74
- | Build | Commit + Config | Build log | `metadata.buildInvocationId` |
75
- | Artifact | Build output | File + SHA-256 | `artifacts[].sha256` |
76
- | Attestation | Artifact digest | in-toto Statement | `attestation.predicateType` |
77
- | Registry | Attestation + Artifact | Published URL | `artifacts[].registry` |
78
-
79
- ### Chain Integrity Rules
80
-
81
- | Rule | Enforcement |
82
- |------|-------------|
83
- | Each link MUST reference previous link's output | `verify_provenance_chain()` validates |
84
- | No link MAY be modified after creation | Append-only in `releases.json` |
85
- | Missing links MUST be recorded as `incomplete` | `metadata.completeness` flags |
86
- | Chain MUST be verifiable offline | Digests stored locally |
87
-
88
- ---
89
-
90
- ## SLSA Compliance Levels
91
-
92
- ### Requirements Matrix
93
-
94
- | Requirement | L1 | L2 | L3 | L4 |
95
- |-------------|:--:|:--:|:--:|:--:|
96
- | Provenance exists | MUST | MUST | MUST | MUST |
97
- | Provenance is signed | -- | MUST | MUST | MUST |
98
- | Build on hosted platform | -- | MUST | MUST | MUST |
99
- | Non-falsifiable provenance | -- | -- | MUST | MUST |
100
- | All dependencies have provenance | -- | -- | -- | MUST |
101
- | Two-party review | -- | -- | -- | MUST |
102
- | Hermetic, reproducible build | -- | -- | -- | MUST |
103
-
104
- ### Level Detection Decision Tree
105
-
106
- ```
107
- HAS provenance record?
108
- +-- NO -> Level 0 (non-compliant)
109
- +-- YES
110
- +-- IS provenance signed?
111
- | +-- NO -> Level 1
112
- | +-- YES
113
- | +-- IS build on hosted/isolated platform?
114
- | | +-- NO -> Level 1
115
- | | +-- YES
116
- | | +-- IS build non-falsifiable?
117
- | | | +-- NO -> Level 2
118
- | | | +-- YES
119
- | | | +-- ALL deps pinned + hermetic + reproducible?
120
- | | | | +-- NO -> Level 3
121
- | | | | +-- YES -> Level 4
122
- ```
123
-
124
- ### Configuration
125
-
126
- ```json
127
- {
128
- "release": {
129
- "security": {
130
- "provenance": {
131
- "enabled": true,
132
- "framework": "slsa",
133
- "level": "SLSA_BUILD_LEVEL_3"
134
- }
135
- }
136
- }
137
- }
138
- ```
139
-
140
- ---
141
-
142
- ## Attestation Schema
143
-
144
- ### in-toto Statement (v1)
145
-
146
- ```json
147
- {
148
- "_type": "https://in-toto.io/Statement/v1",
149
- "subject": [
150
- {
151
- "name": "<artifact-name>",
152
- "digest": {
153
- "sha256": "<64-hex-chars>"
154
- }
155
- }
156
- ],
157
- "predicateType": "https://slsa.dev/provenance/v1",
158
- "predicate": {
159
- "buildDefinition": {
160
- "buildType": "<build-system-uri>",
161
- "externalParameters": {
162
- "source": {
163
- "uri": "git+<repo-url>",
164
- "digest": { "sha1": "<commit-sha>" }
165
- }
166
- },
167
- "internalParameters": {},
168
- "resolvedDependencies": [
169
- {
170
- "uri": "<dependency-uri>",
171
- "digest": { "sha256": "<dep-digest>" }
172
- }
173
- ]
174
- },
175
- "runDetails": {
176
- "builder": {
177
- "id": "<builder-id-uri>"
178
- },
179
- "metadata": {
180
- "invocationId": "<unique-build-id>",
181
- "startedOn": "<ISO-8601>",
182
- "finishedOn": "<ISO-8601>"
183
- }
184
- }
185
- }
186
- }
187
- ```
188
-
189
- ### Required Fields
190
-
191
- | Field | Required | Validation |
192
- |-------|----------|------------|
193
- | `subject[].digest.sha256` | MUST | 64-char hex, matches artifact |
194
- | `predicateType` | MUST | Valid SLSA provenance URI |
195
- | `buildDefinition.buildType` | MUST | Non-empty URI |
196
- | `runDetails.builder.id` | MUST | Non-empty URI |
197
- | `runDetails.metadata.invocationId` | SHOULD | Unique per build |
198
- | `buildDefinition.resolvedDependencies` | SHOULD (L3+) | Array of URI+digest pairs |
199
-
200
- ### Storage Locations
201
-
202
- | Location | Format | Purpose |
203
- |----------|--------|---------|
204
- | `.cleo/attestations/<version>.intoto.jsonl` | in-toto Statement (DSSE envelope) | Local attestation store |
205
- | `<artifact>.att` | DSSE envelope (JSON) | Bundled with artifact |
206
- | OCI registry (tag: `sha256-<digest>.att`) | Cosign attachment | Registry-hosted attestation |
207
-
208
- ---
209
-
210
- ## SBOM Requirements
211
-
212
- ### When to Generate
213
-
214
- | Condition | SBOM Required |
215
- |-----------|:-------------:|
216
- | Artifact has runtime dependencies | MUST |
217
- | Docker/OCI image | MUST |
218
- | Library/package published to registry | MUST |
219
- | Standalone binary with no deps | SHOULD |
220
- | Documentation-only artifact | MAY skip |
221
-
222
- ### Supported Formats
223
-
224
- | Format | Spec Version | Use Case |
225
- |--------|-------------|----------|
226
- | CycloneDX | 1.5+ | Default (machine-readable, JSON) |
227
- | SPDX | 2.3+ | Compliance-focused (regulatory) |
228
-
229
- ### Minimum Schema (CycloneDX)
230
-
231
- ```json
232
- {
233
- "bomFormat": "CycloneDX",
234
- "specVersion": "1.5",
235
- "version": 1,
236
- "metadata": {
237
- "timestamp": "<ISO-8601>",
238
- "tools": [{ "name": "<generator>", "version": "<version>" }],
239
- "component": {
240
- "type": "application",
241
- "name": "<artifact-name>",
242
- "version": "<artifact-version>",
243
- "purl": "<package-url>"
244
- }
245
- },
246
- "components": [
247
- {
248
- "type": "library",
249
- "name": "<dep-name>",
250
- "version": "<dep-version>",
251
- "purl": "<dep-purl>",
252
- "hashes": [{ "alg": "SHA-256", "content": "<hex-digest>" }]
253
- }
254
- ]
255
- }
256
- ```
257
-
258
- ### Storage
259
-
260
- | Location | Purpose |
261
- |----------|---------|
262
- | `.cleo/sbom/<artifact-name>-<version>.cdx.json` | CycloneDX local store |
263
- | `.cleo/sbom/<artifact-name>-<version>.spdx.json` | SPDX local store |
264
- | `<artifact>.sbom.json` | Bundled with artifact |
265
-
266
- ---
267
-
268
- ## Signing Protocol
269
-
270
- ### Method Decision Tree
271
-
272
- ```
273
- SIGNING_METHOD configured?
274
- +-- "sigstore" (default)
275
- | +-- IS keyless enabled? (default: true)
276
- | +-- YES -> cosign sign-blob --yes <artifact>
277
- | +-- NO -> cosign sign-blob --key <key-ref> <artifact>
278
- +-- "gpg"
279
- | +-- GPG_KEY_ID set?
280
- | +-- YES -> gpg --detach-sign --armor -u <key-id> <artifact>
281
- | +-- NO -> Exit 91 (E_SIGNING_KEY_MISSING)
282
- +-- "none"
283
- +-- Skip signing (SLSA L1 only)
284
- ```
285
-
286
- ### Command Templates
287
-
288
- | Method | Command | Output |
289
- |--------|---------|--------|
290
- | Sigstore (keyless) | `cosign sign-blob --yes --output-signature <sig> --output-certificate <cert> <artifact>` | `.sig` + `.pem` |
291
- | Sigstore (key) | `cosign sign-blob --key <ref> --output-signature <sig> <artifact>` | `.sig` |
292
- | GPG | `gpg --detach-sign --armor -u <key-id> <artifact>` | `.asc` |
293
- | None | (skip) | (none) |
294
-
295
- ### Signing Metadata Record
296
-
297
- ```json
298
- {
299
- "method": "sigstore",
300
- "keyless": true,
301
- "signed": true,
302
- "signedAt": "<ISO-8601>",
303
- "signature": "<path-to-sig>",
304
- "certificate": "<path-to-cert>",
305
- "transparencyLog": {
306
- "index": "<rekor-log-index>",
307
- "url": "https://rekor.sigstore.dev"
308
- }
309
- }
310
- ```
311
-
312
- ### Validation
313
-
314
- | Check | Condition | Exit Code |
315
- |-------|-----------|-----------|
316
- | Method configured | `signing.method` in `["sigstore", "gpg", "none"]` | 90 |
317
- | Key available (if key-based) | Key reference resolves | 91 |
318
- | Signature produced | `.sig` or `.asc` file exists | 92 |
319
- | Signature verifies | `cosign verify-blob` or `gpg --verify` passes | 92 |
320
-
321
- ---
322
-
323
- ## Verification Protocol
324
-
325
- ### Verification Decision Tree
326
-
327
- ```
328
- VERIFY artifact provenance:
329
- +-- 1. Digest check
330
- | +-- Compute SHA-256, compare to recorded digest
331
- | +-- MISMATCH -> Exit 93 (E_DIGEST_MISMATCH)
332
- | +-- MATCH -> continue
333
- +-- 2. Signature check (if signed)
334
- | +-- Verify signature against artifact
335
- | +-- FAIL -> Exit 92 (E_SIGNATURE_INVALID)
336
- | +-- PASS -> continue
337
- +-- 3. Attestation check (if exists)
338
- | +-- Verify attestation subject matches artifact digest
339
- | +-- MISMATCH -> Exit 94 (E_ATTESTATION_INVALID)
340
- | +-- MATCH -> continue
341
- +-- 4. Chain completeness
342
- +-- Walk chain: commit -> build -> artifact -> attestation
343
- +-- BROKEN -> report incomplete (warning, not blocking)
344
- +-- COMPLETE -> VERIFIED
345
- ```
346
-
347
- ### Verification Result Schema
348
-
349
- ```json
350
- {
351
- "artifact": "<name>",
352
- "version": "<version>",
353
- "verified": true,
354
- "checks": {
355
- "digest": { "status": "pass", "algorithm": "sha256", "value": "<hex>" },
356
- "signature": { "status": "pass", "method": "sigstore" },
357
- "attestation": { "status": "pass", "predicateType": "https://slsa.dev/provenance/v1" },
358
- "chain": { "status": "pass", "completeness": { "source": true, "build": true, "artifact": true } }
359
- },
360
- "slsaLevel": "SLSA_BUILD_LEVEL_3",
361
- "verifiedAt": "<ISO-8601>"
362
- }
363
- ```
364
-
365
- ---
366
-
367
- ## Checksum & Digest Management
368
-
369
- ### Supported Algorithms
370
-
371
- | Algorithm | Required | Use Case |
372
- |-----------|:--------:|----------|
373
- | SHA-256 | MUST | All artifacts, attestation subjects |
374
- | SHA-512 | MAY | High-security contexts |
375
-
376
- ### Computation Per Type
377
-
378
- | Artifact Type | Input | Command |
379
- |--------------|-------|---------|
380
- | File | File path | `sha256sum <file> \| awk '{print $1}'` |
381
- | Docker image | Image ref | `docker inspect --format='{{.Id}}' <image>` |
382
- | OCI manifest | Manifest JSON | `sha256sum <manifest.json>` |
383
-
384
- ### Storage Locations
385
-
386
- | Location | Format | Purpose |
387
- |----------|--------|---------|
388
- | `releases.json` -> `artifacts[].sha256` | Hex string (64 chars) | Provenance record |
389
- | `checksums.txt` (release artifact) | `<sha256> <filename>` | Distribution verification |
390
- | Attestation `subject[].digest.sha256` | Hex string (64 chars) | Attestation binding |
391
-
392
- ### Publishing Channels
393
-
394
- | Channel | Format |
395
- |---------|--------|
396
- | Git tag annotation | `SHA-256: <hex>` per artifact |
397
- | GitHub Release body | `## Checksums\n<sha256> <filename>` |
398
- | Registry metadata | Registry-native digest field |
399
- | `checksums.txt` file | `<sha256> <filename>` per line |
400
-
401
- ---
402
-
403
- ## Error Codes (90-94)
404
-
405
- | Code | Constant | Meaning | Recovery |
406
- |------|----------|---------|----------|
407
- | 90 | `E_PROVENANCE_CONFIG_INVALID` | Invalid provenance/signing config | Check `.cleo/config.json` security section |
408
- | 91 | `E_SIGNING_KEY_MISSING` | Signing key not found | Set `GPG_KEY_ID` or configure sigstore keyless |
409
- | 92 | `E_SIGNATURE_INVALID` | Signature verification failed | Re-sign artifact, check key validity |
410
- | 93 | `E_DIGEST_MISMATCH` | Computed digest does not match record | Investigate tampering or rebuild artifact |
411
- | 94 | `E_ATTESTATION_INVALID` | Attestation subject/format error | Regenerate attestation from correct artifact |
412
-
413
- ### Recoverability
414
-
415
- | Code | Recoverable | Agent Action |
416
- |------|:-----------:|--------------|
417
- | 90 | Yes | Fix config, retry |
418
- | 91 | Yes | Set key, retry |
419
- | 92 | Yes | Re-sign, retry |
420
- | 93 | No | Investigate tampering, rebuild |
421
- | 94 | Yes | Regenerate attestation, retry |
422
-
423
- ### Error Recovery Decision Tree
424
-
425
- ```
426
- EXIT CODE?
427
- +-- 90 (CONFIG_INVALID) -> Fix .cleo/config.json security section -> Retry
428
- +-- 91 (SIGNING_KEY) -> Set GPG_KEY_ID or enable sigstore keyless -> Retry
429
- +-- 92 (SIGNATURE_INVALID) -> Re-sign artifact with valid key -> Retry
430
- +-- 93 (DIGEST_MISMATCH) -> Investigate tampering, clean rebuild -> Retry
431
- +-- 94 (ATTESTATION) -> Regenerate attestation from artifact -> Retry
432
- ```
433
-
434
- ---
435
-
436
- ## Output Format
437
-
438
- ### File Output
439
-
440
- ```markdown
441
- # Provenance Report: <artifact-name> v<version>
442
-
443
- **Task**: T####
444
- **Date**: YYYY-MM-DD
445
- **Status**: complete|partial|blocked
446
- **Agent Type**: provenance
447
-
448
- ---
449
-
450
- ## Summary
451
-
452
- {2-3 sentence summary of provenance activities}
453
-
454
- ## Provenance Chain
455
-
456
- | Stage | Value | Verified |
457
- |-------|-------|:--------:|
458
- | Source commit | `<sha>` | PASS |
459
- | Build invocation | `<id>` | PASS |
460
- | Artifact digest | `sha256:<hex>` | PASS |
461
- | Attestation | `<predicate-type>` | PASS |
462
- | Signature | `<method>` | PASS |
463
-
464
- ## SLSA Compliance
465
-
466
- | Check | Status | Notes |
467
- |-------|--------|-------|
468
- | Level achieved | L3 | |
469
- | Provenance exists | PASS | |
470
- | Provenance signed | PASS | sigstore/keyless |
471
- | Hardened build | PASS | CI/CD platform |
472
-
473
- ## SBOM
474
-
475
- | Format | Location | Components |
476
- |--------|----------|:----------:|
477
- | CycloneDX 1.5 | `.cleo/sbom/<name>.cdx.json` | 42 |
478
-
479
- ## Verification Results
480
-
481
- | Artifact | Digest | Signature | Attestation | Chain |
482
- |----------|:------:|:---------:|:-----------:|:-----:|
483
- | `<name>` | PASS | PASS | PASS | PASS |
484
- ```
485
-
486
- ### Manifest Entry
487
-
488
- ```bash
489
- cleo research add \
490
- --title "Provenance: <artifact-name> v<version>" \
491
- --file "YYYY-MM-DD_provenance-<artifact>.md" \
492
- --topics "provenance,supply-chain,slsa,attestation" \
493
- --findings "SLSA L3 achieved,SHA-256 verified,Attestation signed,SBOM generated" \
494
- --status complete \
495
- --task T#### \
496
- --not-actionable \
497
- --agent-type provenance
498
- ```
499
-
500
- ---
501
-
502
- ## Integration Points
503
-
504
- ### Base Protocol
505
-
506
- - Inherits task lifecycle (start, execute, complete)
507
- - Inherits manifest append requirement
508
- - Inherits error handling patterns
509
-
510
- ### Protocol Interactions
511
-
512
- | Combined With | Behavior |
513
- |---------------|----------|
514
- | release | Release triggers provenance record via `record_release()` |
515
- | artifact-publish | Artifact-publish delegates signing/attestation to provenance |
516
- | implementation | Implementation produces artifacts requiring provenance |
517
- | contribution | Contribution commits form source stage of chain |
518
-
519
- ### Existing Infrastructure
520
-
521
- | Function | File | Purpose |
522
- |----------|------|---------|
523
- | `record_release()` | `lib/release-provenance.sh` | Store provenance record |
524
- | `link_task_to_release()` | `lib/release-provenance.sh` | Associate tasks |
525
- | `get_release_provenance()` | `lib/release-provenance.sh` | Retrieve chain |
526
- | `verify_provenance_chain()` | `lib/release-provenance.sh` | Validate integrity |
527
- | `generate_provenance_report()` | `lib/release-provenance.sh` | Human-readable output |
528
- | `get_security_config()` | `lib/release-config.sh` | Read signing/provenance config |
529
-
530
- ### Handoff Patterns
531
-
532
- | Scenario | Handoff Target |
533
- |----------|----------------|
534
- | Provenance complete, ready to publish | artifact-publish protocol |
535
- | SBOM reveals vulnerable dependency | research protocol |
536
- | Signing fails (key issue) | HITL escalation |
537
- | Verification fails on consumed artifact | implementation protocol (rebuild) |
538
-
539
- ---
540
-
541
- ## Workflow Sequence
542
-
543
- ```
544
- 1. Read task requirements (cleo show T####)
545
- 2. Start task (cleo start T####)
546
- 3. Compute artifact digests (SHA-256)
547
- 4. Generate attestation (in-toto Statement v1)
548
- 5. Sign attestation (sigstore/cosign or gpg)
549
- 6. Generate SBOM (if applicable per PROV-010)
550
- 7. Record provenance via record_release()
551
- 8. Verify chain via verify_provenance_chain()
552
- 9. Write output file
553
- 10. Append manifest entry
554
- 11. Complete task (cleo complete T####)
555
- 12. Return: "Provenance complete. See MANIFEST.jsonl for summary."
556
- ```
557
-
558
- ---
559
-
560
- ## Example
561
-
562
- **Task**: Generate provenance for CLEO v0.85.0 release
563
-
564
- **Manifest Entry Command**:
565
- ```bash
566
- cleo research add \
567
- --title "Provenance: CLEO v0.85.0" \
568
- --file "2026-02-09_provenance-v0850.md" \
569
- --topics "provenance,slsa,v0.85.0,supply-chain" \
570
- --findings "SLSA L3 achieved,3 artifacts signed,CycloneDX SBOM generated,Chain verified" \
571
- --status complete \
572
- --task T3200 \
573
- --epic T3195 \
574
- --not-actionable \
575
- --agent-type provenance
576
- ```
577
-
578
- **Return Message**:
579
- ```
580
- Provenance complete. See MANIFEST.jsonl for summary.
581
- ```
582
-
583
- ---
584
-
585
- ## Anti-Patterns
586
-
587
- | Pattern | Why Avoid |
588
- |---------|-----------|
589
- | Skipping digest computation | Breaks chain integrity, unverifiable artifacts |
590
- | Hardcoding signing keys in config | Security risk, key exposure |
591
- | Generating attestation without matching digest | Attestation binds to wrong artifact |
592
- | Publishing artifact before signing | Cannot retrofit signatures |
593
- | Modifying provenance records after creation | Violates immutability, breaks audit trail |
594
- | Skipping SBOM for artifacts with dependencies | Hidden supply chain risk |
595
- | Using SHA-1 or MD5 for digests | Cryptographically broken, non-compliant |
596
- | Storing private keys in `.cleo/` directory | Key compromise risk |
597
-
598
- ---
599
-
600
- *Protocol Version 1.0.0 - Supply Chain Provenance Protocol*