@cassiomc1/forgeloop 1.6.2 → 1.6.4
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 +26 -4
- package/EXECUTION_STATE.md +7 -0
- package/LOOP_ENGINEERING.md +58 -0
- package/LOOP_SYSTEM_DESIGN.md +54 -0
- package/ORCHESTRATOR_INTEGRATION.md +23 -0
- package/PROTOCOL_INTEGRATION.md +36 -0
- package/QUALITY_SCORECARD.md +21 -0
- package/README.md +57 -2
- package/TERMINOLOGY.md +11 -0
- package/THREAT_MODEL.md +7 -0
- package/completions/_forgeloop +85 -0
- package/completions/forgeloop.bash +173 -0
- package/completions/forgeloop.fish +544 -0
- package/docs/AGENT_PROTOCOL_SUMMARY.md +281 -0
- package/docs/ARTIFACT_REFERENCE.md +226 -0
- package/docs/CLI_REFERENCE.md +308 -2
- package/docs/CODE_ATTESTATION.md +141 -0
- package/docs/CROSS_HARNESS_CONTINUITY.md +22 -2
- package/docs/DOCUMENTATION_GUIDE.md +13 -11
- package/docs/GETTING_STARTED.md +98 -1
- package/docs/MCP.md +8 -0
- package/docs/PLATFORM_ADAPTERS.md +69 -0
- package/docs/RECIPES.md +138 -0
- package/docs/RELEASE_CHECKLIST.md +54 -0
- package/docs/REVISION_PROVIDERS.md +136 -0
- package/docs/SIGNING_PROVIDERS.md +83 -0
- package/docs/TROUBLESHOOTING.md +184 -0
- package/docs/UNIVERSAL_INTEGRATION.md +11 -0
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.html +13841 -0
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json +37 -0
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.svg +5046 -0
- package/docs/assets/diagrams/forgeloop-engineering-flow.html +46 -43
- package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
- package/docs/assets/diagrams/forgeloop-engineering-flow.svg +41 -41
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.html +13783 -0
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json +37 -0
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.svg +4988 -0
- package/docs/diagrams/README.md +30 -22
- package/docs/diagrams/forgeloop-code-attestation-flow.workflow.json +125 -0
- package/docs/diagrams/forgeloop-engineering-flow.workflow.json +11 -8
- package/docs/diagrams/forgeloop-verification-trust-flow.workflow.json +116 -0
- package/docs/diagrams/manifest.json +42 -0
- package/docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json +20 -0
- package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +3 -3
- package/docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json +20 -0
- package/integrations/generic-ci/verify.sh +14 -0
- package/package.json +31 -9
- package/schemas/attestation-verification-result.schema.json +34 -0
- package/schemas/code-attestation.schema.json +61 -0
- package/schemas/code-manifest.schema.json +57 -0
- package/schemas/config.schema.json +57 -1
- package/schemas/handoff-envelope.schema.json +57 -0
- package/schemas/in-toto-statement.schema.json +32 -0
- package/schemas/responsibility.schema.json +37 -0
- package/schemas/verification-scope.schema.json +26 -0
- package/schemas/workspace-binding.schema.json +20 -0
- package/scripts/CI_VALIDATORS.md +3 -0
- package/scripts/benchmark-cli-startup.mjs +60 -0
- package/scripts/check-changelog-freshness.mjs +88 -0
- package/scripts/check-critical-coverage.mjs +58 -0
- package/scripts/generate-agent-protocol-summary.mjs +141 -0
- package/scripts/generate-shell-completions.mjs +132 -0
- package/scripts/write-forgeloop-attestation-summary.mjs +93 -0
- package/src/cli.js +114 -6
- package/src/commands/attestation-create.js +30 -0
- package/src/commands/attestation-status.js +12 -0
- package/src/commands/attestation-verify-range.js +32 -0
- package/src/commands/attestation-verify.js +23 -0
- package/src/commands/handoff-create.js +9 -0
- package/src/commands/handoff-list.js +12 -0
- package/src/commands/handoff-show.js +10 -0
- package/src/commands/responsibility-set.js +20 -0
- package/src/commands/responsibility-status.js +12 -0
- package/src/commands/run-check.js +43 -3
- package/src/commands/task-repair-legacy-recovery.js +1 -2
- package/src/commands/verify-scope.js +9 -0
- package/src/commands/workspace-bind.js +17 -0
- package/src/commands/workspace-status.js +19 -0
- package/src/core/artifact-registry.js +84 -0
- package/src/core/attestation-coverage.js +134 -0
- package/src/core/attestation-verifier.js +227 -0
- package/src/core/attestation.js +263 -0
- package/src/core/audit.js +67 -1
- package/src/core/bundles.js +210 -9
- package/src/core/cli-command-definitions.js +196 -0
- package/src/core/code-manifest.js +293 -0
- package/src/core/command-executors.js +79 -0
- package/src/core/command-input.js +69 -18
- package/src/core/command-runtime.js +2 -1
- package/src/core/completion.js +170 -8
- package/src/core/config.js +60 -2
- package/src/core/continuity-cli-options.js +9 -3
- package/src/core/continuity-reconciliation.js +20 -0
- package/src/core/diagnostic-projection.js +3 -1
- package/src/core/error-codes.js +146 -0
- package/src/core/events.js +109 -13
- package/src/core/exit-codes.js +22 -0
- package/src/core/handoff.js +208 -0
- package/src/core/information-gain-projection.js +3 -3
- package/src/core/integration-invocation-policy.js +40 -0
- package/src/core/integration-resources.js +54 -0
- package/src/core/next-action-phases.js +968 -0
- package/src/core/next-action.js +32 -951
- package/src/core/phase.js +29 -1
- package/src/core/protocol-info.js +41 -1
- package/src/core/repository.js +256 -11
- package/src/core/responsibility.js +265 -0
- package/src/core/revision/git.js +207 -0
- package/src/core/revision/provider.js +90 -0
- package/src/core/revision/registry.js +5 -0
- package/src/core/route-artifact.js +1 -1
- package/src/core/schema-validation.js +8 -0
- package/src/core/signing/none.js +23 -0
- package/src/core/signing/provider.js +21 -0
- package/src/core/signing/registry.js +7 -0
- package/src/core/signing/sigstore.js +158 -0
- package/src/core/task-command.js +9 -1
- package/src/core/task-paths.js +72 -0
- package/src/core/templates.js +8 -0
- package/src/core/verification-scope-capability.js +179 -0
- package/src/core/verification-scope.js +271 -0
- package/src/core/workspace-binding.js +211 -0
- package/src/integration.d.ts +91 -0
- package/AGENT_COMPATIBILITY.md +0 -11
- package/docs/RELEASE_CHECKLIST_1_4.md +0 -38
- package/docs/RELEASE_CHECKLIST_1_5_MCP.md +0 -78
- package/docs/RELEASE_CHECKLIST_1_6_1.md +0 -121
package/docs/diagrams/README.md
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
# Documentation diagrams
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- [
|
|
10
|
-
- [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
[`
|
|
3
|
+
ForgeLoop maintains three canonical P0 visuals in typed Archify workflow IR.
|
|
4
|
+
The manifest is the governance source for their identities, canonical
|
|
5
|
+
purposes, renderer mapping, artifact ownership, references, and review files:
|
|
6
|
+
|
|
7
|
+
| Visual | Canonical purpose | Source | Explorer | SVG fallback |
|
|
8
|
+
| --- | --- | --- | --- | --- |
|
|
9
|
+
| Engineering Flow | `high-level-engineering-flow` | [`forgeloop-engineering-flow.workflow.json`](./forgeloop-engineering-flow.workflow.json) | [HTML](../assets/diagrams/forgeloop-engineering-flow.html) | [SVG](../assets/diagrams/forgeloop-engineering-flow.svg) |
|
|
10
|
+
| Verification Trust Flow | `differential-verification-trust-boundary` | [`forgeloop-verification-trust-flow.workflow.json`](./forgeloop-verification-trust-flow.workflow.json) | [HTML](../assets/diagrams/forgeloop-verification-trust-flow.html) | [SVG](../assets/diagrams/forgeloop-verification-trust-flow.svg) |
|
|
11
|
+
| Code Attestation Chain | `code-attestation-chain` | [`forgeloop-code-attestation-flow.workflow.json`](./forgeloop-code-attestation-flow.workflow.json) | [HTML](../assets/diagrams/forgeloop-code-attestation-flow.html) | [SVG](../assets/diagrams/forgeloop-code-attestation-flow.svg) |
|
|
12
|
+
|
|
13
|
+
Each visual also has a deterministic [receipt directory](../assets/diagrams/)
|
|
14
|
+
entry and a source-bound [review directory](./reviews/). The Engineering Flow
|
|
15
|
+
is the conceptual lifecycle; the Verification Trust Flow explains the
|
|
16
|
+
fail-closed Differential Verification boundary; and the Code Attestation Chain
|
|
17
|
+
explains exact-content provenance, optional signing, and revision-range
|
|
18
|
+
coverage. Their text fallbacks remain in
|
|
19
|
+
[`README.md`](../../README.md#architecture-flow),
|
|
20
|
+
[`REVISION_PROVIDERS.md`](../REVISION_PROVIDERS.md#differential-verification-scope),
|
|
21
|
+
and [`CODE_ATTESTATION.md`](../CODE_ATTESTATION.md#completion-flow).
|
|
22
|
+
|
|
23
|
+
The canonical sources set `meta.animation` to `trace`, so the explorers and
|
|
24
|
+
SVGs trace workflow edges and emphasize active nodes. Use each explorer's
|
|
25
|
+
Present, playback, and focus controls for the full animated experience; every
|
|
26
|
+
SVG remains available for repository previews and text-only fallbacks.
|
|
21
27
|
|
|
22
28
|
The JSON IR is the source of truth. Do not edit the generated HTML or SVG by
|
|
23
29
|
hand. Run `npm run docs:diagrams` to regenerate the outputs and
|
|
@@ -49,7 +55,9 @@ canonical inputs only from `docs/diagrams/` and permits deliver outputs only
|
|
|
49
55
|
under `docs/assets/diagrams/`.
|
|
50
56
|
|
|
51
57
|
ForgeLoop governs five documentation-diagram categories: workflow,
|
|
52
|
-
architecture, sequence, dataflow, and lifecycle. The current
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
an active diagram.
|
|
58
|
+
architecture, sequence, dataflow, and lifecycle. The current active set uses
|
|
59
|
+
three workflow diagrams because the pinned wrapper currently maps only
|
|
60
|
+
`workflow`. Governance support does not imply renderer support: a type requires
|
|
61
|
+
an explicit renderer mapping before it can be added as an active diagram.
|
|
62
|
+
Additional safety-boundary, resume, or provider visuals remain intentionally
|
|
63
|
+
deferred until their mappings are proven.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "workflow",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "ForgeLoop Code Attestation Chain",
|
|
6
|
+
"subtitle": "Exact content binding from valid completion to read-only trust results",
|
|
7
|
+
"animation": "trace",
|
|
8
|
+
"visual_preset": "signal-flow",
|
|
9
|
+
"quality_profile": "showcase",
|
|
10
|
+
"views": [
|
|
11
|
+
{
|
|
12
|
+
"id": "completion-to-manifest",
|
|
13
|
+
"label": "Completion to manifest",
|
|
14
|
+
"focus": ["complete", "receipt", "manifest", "captured"],
|
|
15
|
+
"note": "Follow the transactional binding between valid completion evidence and exact source content."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "manifest-to-statement",
|
|
19
|
+
"label": "Manifest to statement",
|
|
20
|
+
"focus": ["manifest", "captured", "statement", "signing", "bundle"],
|
|
21
|
+
"note": "See how the deterministic code manifest becomes an in-toto Statement v1 and optional signature bundle."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "revision-range-coverage",
|
|
25
|
+
"label": "Revision-range coverage",
|
|
26
|
+
"focus": ["base", "provider", "changed", "attestations", "union", "range"],
|
|
27
|
+
"note": "Inspect the separate changed-path coverage question and its gap or conflict result."
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"legend": {
|
|
31
|
+
"mode": "auto",
|
|
32
|
+
"entries": {
|
|
33
|
+
"backend": { "label": "Protocol state" },
|
|
34
|
+
"database": { "label": "Content/evidence" },
|
|
35
|
+
"security": { "label": "Policy boundary" },
|
|
36
|
+
"cloud": { "label": "Signer" },
|
|
37
|
+
"messagebus": { "label": "Failure" },
|
|
38
|
+
"external": { "label": "Completion" }
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"lanes": [
|
|
43
|
+
{ "id": "completion", "label": "Completion Evidence" },
|
|
44
|
+
{ "id": "integrity", "label": "Content Integrity" },
|
|
45
|
+
{ "id": "providers", "label": "Provider Boundaries" },
|
|
46
|
+
{ "id": "verification", "label": "Read-Only Verification" },
|
|
47
|
+
{ "id": "results", "label": "Attestation Results" },
|
|
48
|
+
{ "id": "coverage", "label": "Revision-Range Coverage" },
|
|
49
|
+
{ "id": "exceptions", "label": "Gaps + Conflicts", "variant": "exception" }
|
|
50
|
+
],
|
|
51
|
+
"phases": [
|
|
52
|
+
{ "id": "capture", "label": "Capture content", "fromCol": 0, "toCol": 1 },
|
|
53
|
+
{ "id": "statement", "label": "Bind and sign", "fromCol": 2, "toCol": 3, "variant": "emphasis" },
|
|
54
|
+
{ "id": "range", "label": "Evaluate coverage", "fromCol": 4, "toCol": 5, "variant": "dashed" }
|
|
55
|
+
],
|
|
56
|
+
"groups": [
|
|
57
|
+
{ "id": "completion_binding", "label": "Completion transaction", "lane": "integrity", "fromCol": 0, "toCol": 3, "variant": "emphasis" },
|
|
58
|
+
{ "id": "signer_boundary", "label": "Optional external signer", "lane": "providers", "fromCol": 4, "toCol": 5, "variant": "security" },
|
|
59
|
+
{ "id": "coverage_boundary", "label": "Coverage is a separate question", "lane": "coverage", "fromCol": 0, "toCol": 5, "variant": "dashed" }
|
|
60
|
+
],
|
|
61
|
+
"mainPath": ["complete", "receipt", "manifest", "captured", "statement", "signing", "bundle", "verify"],
|
|
62
|
+
"nodes": [
|
|
63
|
+
{ "id": "complete", "lane": "completion", "col": 0, "type": "external", "label": "VALID", "sublabel": "completion", "width": 52 },
|
|
64
|
+
{ "id": "receipt", "lane": "completion", "col": 1, "type": "database", "label": "Receipt", "sublabel": "ledger", "width": 54 },
|
|
65
|
+
{ "id": "manifest", "lane": "integrity", "col": 2, "type": "database", "label": "Manifest", "sublabel": "SHA-256", "tag": "exact", "width": 60 },
|
|
66
|
+
{ "id": "captured", "lane": "integrity", "col": 3, "type": "security", "label": "Captured", "sublabel": "transaction", "width": 68 },
|
|
67
|
+
{ "id": "statement", "lane": "providers", "col": 4, "type": "backend", "label": "in-toto v1", "sublabel": "statement", "width": 72 },
|
|
68
|
+
{ "id": "signing", "lane": "providers", "col": 5, "type": "cloud", "label": "Signer", "sublabel": "optional", "tag": "Cosign", "width": 58 },
|
|
69
|
+
{ "id": "bundle", "lane": "verification", "col": 5, "type": "database", "label": "Bundle", "sublabel": "policy-bound", "width": 66 },
|
|
70
|
+
{ "id": "verify", "lane": "results", "col": 5, "type": "security", "label": "Verify", "sublabel": "read-only", "tag": "no mutation", "width": 62 },
|
|
71
|
+
{ "id": "base", "lane": "coverage", "col": 0, "type": "cloud", "label": "Base", "sublabel": "revision", "width": 52 },
|
|
72
|
+
{ "id": "provider", "lane": "coverage", "col": 1, "type": "backend", "label": "Rev", "sublabel": "provider", "width": 52 },
|
|
73
|
+
{ "id": "changed", "lane": "coverage", "col": 2, "type": "database", "label": "Paths", "sublabel": "changed", "width": 52 },
|
|
74
|
+
{ "id": "attestations", "lane": "coverage", "col": 3, "type": "backend", "label": "Attest", "sublabel": "valid", "width": 42 },
|
|
75
|
+
{ "id": "union", "lane": "coverage", "col": 4, "type": "database", "label": "Union", "sublabel": "digests", "width": 42 },
|
|
76
|
+
{ "id": "range", "lane": "coverage", "col": 5, "type": "security", "label": "Range", "sublabel": "coverage", "tag": "no gaps", "width": 58 },
|
|
77
|
+
{ "id": "boundary", "lane": "exceptions", "col": 3, "type": "security", "label": "Boundary", "sublabel": "scope/coverage", "tag": "important", "width": 74 },
|
|
78
|
+
{ "id": "gap", "lane": "exceptions", "col": 5, "type": "messagebus", "label": "Gap", "sublabel": "fail closed", "width": 60 }
|
|
79
|
+
],
|
|
80
|
+
"edges": [
|
|
81
|
+
{ "id": "complete-receipt", "from": "complete", "to": "receipt", "variant": "emphasis" },
|
|
82
|
+
{ "id": "receipt-manifest", "from": "receipt", "to": "manifest", "variant": "security", "route": "drop", "fromSide": "bottom", "toSide": "top" },
|
|
83
|
+
{ "id": "manifest-captured", "from": "manifest", "to": "captured", "variant": "emphasis" },
|
|
84
|
+
{ "id": "captured-statement", "from": "captured", "to": "statement", "variant": "security", "route": "drop", "fromSide": "bottom", "toSide": "top" },
|
|
85
|
+
{ "id": "statement-signing", "from": "statement", "to": "signing", "variant": "dashed", "fromSide": "bottom", "toSide": "top", "route": "drop" },
|
|
86
|
+
{ "id": "signing-bundle", "from": "signing", "to": "bundle", "variant": "security", "route": "drop", "fromSide": "bottom", "toSide": "top" },
|
|
87
|
+
{ "id": "bundle-verify", "from": "bundle", "to": "verify", "variant": "emphasis" },
|
|
88
|
+
{ "id": "base-provider", "from": "base", "to": "provider", "variant": "dashed" },
|
|
89
|
+
{ "id": "provider-changed", "from": "provider", "to": "changed", "variant": "security" },
|
|
90
|
+
{ "id": "changed-attestations", "from": "changed", "to": "attestations", "variant": "emphasis" },
|
|
91
|
+
{ "id": "attestations-union", "from": "attestations", "to": "union", "variant": "dashed" },
|
|
92
|
+
{ "id": "union-range", "from": "union", "to": "range", "variant": "security" },
|
|
93
|
+
{ "id": "manifest-boundary", "from": "manifest", "to": "boundary", "variant": "dashed", "role": "branch", "fromSide": "left", "toSide": "left", "route": "return-left", "channelX": 44 },
|
|
94
|
+
{ "id": "union-gap", "from": "union", "to": "gap", "variant": "security", "role": "error", "fromSide": "right", "toSide": "left", "route": "outside-right", "channelX": 550 }
|
|
95
|
+
],
|
|
96
|
+
"cards": [
|
|
97
|
+
{
|
|
98
|
+
"dot": "rose",
|
|
99
|
+
"title": "Trust Levels",
|
|
100
|
+
"items": [
|
|
101
|
+
"PROCESSED means artifacts exist and parse",
|
|
102
|
+
"VERIFIED means completion, evidence, manifest, and content bindings validate",
|
|
103
|
+
"ATTESTED additionally requires a valid external signature policy"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"dot": "cyan",
|
|
108
|
+
"title": "Exact Content",
|
|
109
|
+
"items": [
|
|
110
|
+
"The manifest records one SHA-256 digest per changed source entry",
|
|
111
|
+
"The in-toto statement binds the manifest to completion evidence",
|
|
112
|
+
"Read-only verification never rewrites task state or ledger events"
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"dot": "emerald",
|
|
117
|
+
"title": "Coverage Boundary",
|
|
118
|
+
"items": [
|
|
119
|
+
"Revision-range coverage asks whether changed paths have valid attestations",
|
|
120
|
+
"Gaps and conflicting task digests fail closed",
|
|
121
|
+
"Verification Scope ≠ Attestation Coverage"
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"diagram_type": "workflow",
|
|
4
4
|
"meta": {
|
|
5
5
|
"title": "ForgeLoop Evidence-First Engineering Flow",
|
|
6
|
-
"subtitle": "Typed intent →
|
|
6
|
+
"subtitle": "Typed intent → scoped work → observed evidence → validator-backed closure",
|
|
7
7
|
"animation": "trace",
|
|
8
8
|
"visual_preset": "signal-flow",
|
|
9
9
|
"quality_profile": "showcase",
|
|
@@ -62,15 +62,15 @@
|
|
|
62
62
|
"mainPath": ["request", "profile", "contract", "route", "gates", "preflight", "work", "evidence", "review", "valid"],
|
|
63
63
|
"nodes": [
|
|
64
64
|
{ "id": "request", "lane": "intent", "col": 0, "type": "external", "label": "Request", "sublabel": "intent", "width": 50 },
|
|
65
|
-
{ "id": "profile", "lane": "intent", "col": 1, "type": "backend", "label": "Profile", "sublabel": "
|
|
65
|
+
{ "id": "profile", "lane": "intent", "col": 1, "type": "backend", "label": "Profile", "sublabel": "discover", "width": 50 },
|
|
66
66
|
{ "id": "contract", "lane": "intent", "col": 2, "type": "security", "label": "Contract", "sublabel": "scope", "tag": "saved", "width": 50 },
|
|
67
67
|
{ "id": "route", "lane": "policy", "col": 2, "type": "security", "label": "Route", "sublabel": "guides", "tag": "fail closed", "width": 50 },
|
|
68
|
-
{ "id": "gates", "lane": "policy", "col": 3, "type": "security", "label": "
|
|
69
|
-
{ "id": "preflight", "lane": "policy", "col": 4, "type": "security", "label": "READY", "sublabel": "
|
|
70
|
-
{ "id": "work", "lane": "execution", "col": 4, "type": "backend", "label": "
|
|
71
|
-
{ "id": "evidence", "lane": "evidence", "col": 4, "type": "database", "label": "Evidence", "sublabel": "checks", "tag": "
|
|
68
|
+
{ "id": "gates", "lane": "policy", "col": 3, "type": "security", "label": "Claims", "sublabel": "Task + gates", "width": 62 },
|
|
69
|
+
{ "id": "preflight", "lane": "policy", "col": 4, "type": "security", "label": "READY", "sublabel": "binding", "tag": "Preflight", "width": 60 },
|
|
70
|
+
{ "id": "work", "lane": "execution", "col": 4, "type": "backend", "label": "Execution", "sublabel": "checkpoint", "width": 62 },
|
|
71
|
+
{ "id": "evidence", "lane": "evidence", "col": 4, "type": "database", "label": "Evidence", "sublabel": "scope + checks", "tag": "observed", "width": 70 },
|
|
72
72
|
{ "id": "review", "lane": "closure", "col": 5, "type": "backend", "label": "Review", "sublabel": "drift", "width": 50 },
|
|
73
|
-
{ "id": "valid", "lane": "evidence", "col": 5, "type": "database", "label": "VALID", "sublabel": "
|
|
73
|
+
{ "id": "valid", "lane": "evidence", "col": 5, "type": "database", "label": "VALID", "sublabel": "completion", "tag": "claim", "width": 50 },
|
|
74
74
|
{ "id": "diagnose", "lane": "recovery", "col": 2, "type": "messagebus", "label": "Diagnose", "sublabel": "failure", "width": 50 },
|
|
75
75
|
{ "id": "correct", "lane": "recovery", "col": 1, "type": "backend", "label": "Correct", "sublabel": "repair", "width": 50 },
|
|
76
76
|
{ "id": "blocked", "lane": "recovery", "col": 0, "type": "security", "label": "Blocked", "sublabel": "stop", "width": 50 }
|
|
@@ -96,6 +96,7 @@
|
|
|
96
96
|
"title": "Safety boundary",
|
|
97
97
|
"items": [
|
|
98
98
|
"Execution starts only after PREFLIGHT_READY",
|
|
99
|
+
"Workspace binding is optional but blocks mismatched execution",
|
|
99
100
|
"Failures return to diagnosis before another claim",
|
|
100
101
|
"Completion is validator-backed, not inferred from a screenshot"
|
|
101
102
|
]
|
|
@@ -104,7 +105,8 @@
|
|
|
104
105
|
"dot": "cyan",
|
|
105
106
|
"title": "Evidence contract",
|
|
106
107
|
"items": [
|
|
107
|
-
"
|
|
108
|
+
"Verification scope narrows only through a fresh canonical boundary",
|
|
109
|
+
"run-check binds exact commands to an execution reference",
|
|
108
110
|
"record-check covers manual observations",
|
|
109
111
|
"Drift reopens verification instead of being hidden"
|
|
110
112
|
]
|
|
@@ -115,6 +117,7 @@
|
|
|
115
117
|
"items": [
|
|
116
118
|
"JSON IR is the source of truth",
|
|
117
119
|
"HTML stays explorable and SVG stays GitHub-safe",
|
|
120
|
+
"Attestation remains optional and separate from verification scope",
|
|
118
121
|
"The text fallback carries the same lifecycle semantics"
|
|
119
122
|
]
|
|
120
123
|
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "workflow",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "ForgeLoop Verification Trust Flow",
|
|
6
|
+
"subtitle": "Canonical scope planning before exact command execution",
|
|
7
|
+
"animation": "trace",
|
|
8
|
+
"visual_preset": "signal-flow",
|
|
9
|
+
"quality_profile": "showcase",
|
|
10
|
+
"views": [
|
|
11
|
+
{
|
|
12
|
+
"id": "scope-resolution",
|
|
13
|
+
"label": "Resolve verification scope",
|
|
14
|
+
"focus": ["claims", "changes", "checker", "cycle", "fingerprints", "scope"],
|
|
15
|
+
"note": "Follow the trusted inputs that determine whether a checker may narrow its execution."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "exact-execution",
|
|
19
|
+
"label": "Bind exact execution",
|
|
20
|
+
"focus": ["scope", "argv", "observed"],
|
|
21
|
+
"note": "See how the resolved scope binds the exact argv and observed execution evidence."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "fail-closed",
|
|
25
|
+
"label": "Fail closed when trust is missing",
|
|
26
|
+
"focus": ["checker", "full", "unresolved", "reject"],
|
|
27
|
+
"note": "No trusted checker means AUTO uses FULL; explicit narrowing without one is unresolved."
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"legend": {
|
|
31
|
+
"mode": "auto",
|
|
32
|
+
"entries": {
|
|
33
|
+
"backend": { "label": "Task/provider state" },
|
|
34
|
+
"database": { "label": "Bound evidence" },
|
|
35
|
+
"security": { "label": "Trust boundary" },
|
|
36
|
+
"messagebus": { "label": "Fail-closed result" },
|
|
37
|
+
"external": { "label": "Task input" }
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"viewBox": [720, 900]
|
|
41
|
+
},
|
|
42
|
+
"lanes": [
|
|
43
|
+
{ "id": "inputs", "label": "Task + Revision Inputs" },
|
|
44
|
+
{ "id": "policy", "label": "Trust and Scope Policy" },
|
|
45
|
+
{ "id": "execution", "label": "Exact Execution" },
|
|
46
|
+
{ "id": "evidence", "label": "Observed Evidence" },
|
|
47
|
+
{ "id": "exceptions", "label": "Fail-Closed Outcomes", "variant": "exception" },
|
|
48
|
+
{ "id": "closure", "label": "Verification Boundary" }
|
|
49
|
+
],
|
|
50
|
+
"phases": [
|
|
51
|
+
{ "id": "inputs", "label": "Collect bound inputs", "fromCol": 0, "toCol": 1 },
|
|
52
|
+
{ "id": "resolve", "label": "Resolve safe scope", "fromCol": 2, "toCol": 3, "variant": "emphasis" },
|
|
53
|
+
{ "id": "execute", "label": "Execute and observe", "fromCol": 4, "toCol": 5, "variant": "dashed" }
|
|
54
|
+
],
|
|
55
|
+
"groups": [
|
|
56
|
+
{ "id": "scope_boundary", "label": "Verification scope boundary", "lane": "policy", "fromCol": 2, "toCol": 5, "variant": "emphasis" },
|
|
57
|
+
{ "id": "fail_closed_boundary", "label": "No guessed narrowing", "lane": "exceptions", "fromCol": 2, "toCol": 5, "variant": "security" }
|
|
58
|
+
],
|
|
59
|
+
"mainPath": ["claims", "changes", "checker", "cycle", "fingerprints", "scope", "argv", "observed"],
|
|
60
|
+
"nodes": [
|
|
61
|
+
{ "id": "claims", "lane": "inputs", "col": 0, "type": "external", "label": "Claims", "sublabel": "write scope", "width": 64 },
|
|
62
|
+
{ "id": "changes", "lane": "inputs", "col": 1, "type": "backend", "label": "Changes", "sublabel": "provider", "width": 70 },
|
|
63
|
+
{ "id": "checker", "lane": "policy", "col": 2, "type": "security", "label": "Checker", "sublabel": "trusted scope", "tag": "capability", "width": 64 },
|
|
64
|
+
{ "id": "cycle", "lane": "policy", "col": 3, "type": "backend", "label": "Cycle", "sublabel": "fresh", "width": 50 },
|
|
65
|
+
{ "id": "fingerprints", "lane": "policy", "col": 4, "type": "security", "label": "Bind", "sublabel": "contract/repo", "width": 58 },
|
|
66
|
+
{ "id": "scope", "lane": "evidence", "col": 4, "type": "database", "label": "verify-scope", "sublabel": "AUTO / explicit", "tag": "scope", "width": 82 },
|
|
67
|
+
{ "id": "argv", "lane": "execution", "col": 5, "type": "security", "label": "argv", "sublabel": "paths", "tag": "exact", "width": 50 },
|
|
68
|
+
{ "id": "observed", "lane": "evidence", "col": 5, "type": "database", "label": "Evidence", "sublabel": "executionRef", "tag": "observed", "width": 70 },
|
|
69
|
+
{ "id": "full", "lane": "exceptions", "col": 2, "type": "messagebus", "label": "AUTO → FULL", "sublabel": "no checker", "tag": "safe", "width": 76 },
|
|
70
|
+
{ "id": "unresolved", "lane": "exceptions", "col": 3, "type": "security", "label": "Open", "sublabel": "narrow", "tag": "unresolved", "width": 50 },
|
|
71
|
+
{ "id": "reject", "lane": "exceptions", "col": 4, "type": "security", "label": "Reject", "sublabel": "pre-launch", "tag": "argv drift", "width": 50 },
|
|
72
|
+
{ "id": "boundary", "lane": "closure", "col": 5, "type": "security", "label": "Boundary", "sublabel": "scope/coverage", "width": 64 }
|
|
73
|
+
],
|
|
74
|
+
"edges": [
|
|
75
|
+
{ "id": "claims-changes", "from": "claims", "to": "changes", "variant": "emphasis" },
|
|
76
|
+
{ "id": "changes-checker", "from": "changes", "to": "checker", "variant": "default", "route": "drop", "fromSide": "bottom", "toSide": "top" },
|
|
77
|
+
{ "id": "checker-cycle", "from": "checker", "to": "cycle", "variant": "emphasis" },
|
|
78
|
+
{ "id": "cycle-fingerprints", "from": "cycle", "to": "fingerprints", "variant": "security", "fromSide": "bottom", "toSide": "bottom", "route": "bottom-channel", "channelY": 312 },
|
|
79
|
+
{ "id": "fingerprints-scope", "from": "fingerprints", "to": "scope", "variant": "emphasis", "fromSide": "bottom", "toSide": "top", "route": "drop" },
|
|
80
|
+
{ "id": "scope-argv", "from": "scope", "to": "argv", "variant": "security", "fromSide": "right", "toSide": "left", "route": "bottom-channel", "channelY": 408 },
|
|
81
|
+
{ "id": "argv-observed", "from": "argv", "to": "observed", "variant": "dashed", "fromSide": "bottom", "toSide": "top", "route": "drop" },
|
|
82
|
+
{ "id": "checker-full", "from": "checker", "to": "full", "variant": "dashed", "role": "branch", "fromSide": "left", "toSide": "right", "route": "return-left" },
|
|
83
|
+
{ "id": "checker-unresolved", "from": "checker", "to": "unresolved", "variant": "security", "role": "error", "fromSide": "bottom", "toSide": "top", "route": "drop" },
|
|
84
|
+
{ "id": "scope-reject", "from": "scope", "to": "reject", "variant": "security", "role": "error", "fromSide": "bottom", "toSide": "top", "route": "drop" },
|
|
85
|
+
{ "id": "observed-boundary", "from": "observed", "to": "boundary", "variant": "dashed", "role": "branch", "fromSide": "left", "toSide": "right", "route": "return-left" }
|
|
86
|
+
],
|
|
87
|
+
"cards": [
|
|
88
|
+
{
|
|
89
|
+
"dot": "rose",
|
|
90
|
+
"title": "Fail-Closed Narrowing",
|
|
91
|
+
"items": [
|
|
92
|
+
"AUTO uses CHANGED or CLAIMED only with a trusted scoped checker",
|
|
93
|
+
"Without that capability, AUTO resolves safely to FULL",
|
|
94
|
+
"Explicit CHANGED or CLAIMED without a checker returns unresolved"
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"dot": "cyan",
|
|
99
|
+
"title": "Exact Process Binding",
|
|
100
|
+
"items": [
|
|
101
|
+
"RevisionProvider changes and task claims are canonical inputs",
|
|
102
|
+
"Contract, repository, and cycle fingerprints bind the scope",
|
|
103
|
+
"argv prefix and selected paths are checked before launch"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"dot": "emerald",
|
|
108
|
+
"title": "Evidence Boundary",
|
|
109
|
+
"items": [
|
|
110
|
+
"run-check records exact process provenance as observed evidence",
|
|
111
|
+
"Stale scope or argv drift cannot become verification evidence",
|
|
112
|
+
"Verification scope is not attestation coverage"
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
@@ -37,6 +37,48 @@
|
|
|
37
37
|
"docs/DOCUMENTATION_GUIDE.md",
|
|
38
38
|
"docs/diagrams/README.md"
|
|
39
39
|
]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "forgeloop-verification-trust-flow",
|
|
43
|
+
"type": "workflow",
|
|
44
|
+
"defaultTheme": "dark",
|
|
45
|
+
"canonicalFor": [
|
|
46
|
+
"differential-verification-trust-boundary"
|
|
47
|
+
],
|
|
48
|
+
"source": "docs/diagrams/forgeloop-verification-trust-flow.workflow.json",
|
|
49
|
+
"html": "docs/assets/diagrams/forgeloop-verification-trust-flow.html",
|
|
50
|
+
"svg": "docs/assets/diagrams/forgeloop-verification-trust-flow.svg",
|
|
51
|
+
"receipt": "docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json",
|
|
52
|
+
"review": "docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json",
|
|
53
|
+
"fallback": "docs/REVISION_PROVIDERS.md#differential-verification-scope",
|
|
54
|
+
"referencedBy": [
|
|
55
|
+
"README.md",
|
|
56
|
+
"DOCS_INDEX.md",
|
|
57
|
+
"LOOP_SYSTEM_DESIGN.md",
|
|
58
|
+
"docs/REVISION_PROVIDERS.md",
|
|
59
|
+
"docs/diagrams/README.md"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "forgeloop-code-attestation-flow",
|
|
64
|
+
"type": "workflow",
|
|
65
|
+
"defaultTheme": "dark",
|
|
66
|
+
"canonicalFor": [
|
|
67
|
+
"code-attestation-chain"
|
|
68
|
+
],
|
|
69
|
+
"source": "docs/diagrams/forgeloop-code-attestation-flow.workflow.json",
|
|
70
|
+
"html": "docs/assets/diagrams/forgeloop-code-attestation-flow.html",
|
|
71
|
+
"svg": "docs/assets/diagrams/forgeloop-code-attestation-flow.svg",
|
|
72
|
+
"receipt": "docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json",
|
|
73
|
+
"review": "docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json",
|
|
74
|
+
"fallback": "docs/CODE_ATTESTATION.md#completion-flow",
|
|
75
|
+
"referencedBy": [
|
|
76
|
+
"README.md",
|
|
77
|
+
"DOCS_INDEX.md",
|
|
78
|
+
"QUALITY_SCORECARD.md",
|
|
79
|
+
"docs/CODE_ATTESTATION.md",
|
|
80
|
+
"docs/diagrams/README.md"
|
|
81
|
+
]
|
|
40
82
|
}
|
|
41
83
|
]
|
|
42
84
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"diagramId": "forgeloop-code-attestation-flow",
|
|
4
|
+
"status": "approved",
|
|
5
|
+
"binding": {
|
|
6
|
+
"sourceSha256": "669966fba9e69df0525a3581baa4e90075923dbe3069f81f706761a40abf9073",
|
|
7
|
+
"svgSha256": "0af63dd51683d07981fc681042c437377a78ae8a7e6a7175c18a1def02e6280a"
|
|
8
|
+
},
|
|
9
|
+
"checks": {
|
|
10
|
+
"darkThemeLegible": true,
|
|
11
|
+
"noOverlap": true,
|
|
12
|
+
"labelsReadable": true,
|
|
13
|
+
"trustBoundariesClear": true,
|
|
14
|
+
"mobilePreviewAcceptable": true,
|
|
15
|
+
"textFallbackEquivalent": true,
|
|
16
|
+
"accessibleMetadataPresent": true
|
|
17
|
+
},
|
|
18
|
+
"reviewedBy": "repository-maintainer",
|
|
19
|
+
"reviewedAt": "2026-08-29"
|
|
20
|
+
}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"diagramId": "forgeloop-engineering-flow",
|
|
4
4
|
"status": "approved",
|
|
5
5
|
"binding": {
|
|
6
|
-
"sourceSha256": "
|
|
7
|
-
"svgSha256": "
|
|
6
|
+
"sourceSha256": "a83128a8639db5db497ac552cfdbc318839e6451c718581fbfcd064e3e869981",
|
|
7
|
+
"svgSha256": "37244a07cc862e3fe4a7188f5236a509a4adf565d5b785ba3c0932057ac6f3a8"
|
|
8
8
|
},
|
|
9
9
|
"checks": {
|
|
10
10
|
"darkThemeLegible": true,
|
|
@@ -16,5 +16,5 @@
|
|
|
16
16
|
"accessibleMetadataPresent": true
|
|
17
17
|
},
|
|
18
18
|
"reviewedBy": "repository-maintainer",
|
|
19
|
-
"reviewedAt": "2026-08-
|
|
19
|
+
"reviewedAt": "2026-08-29"
|
|
20
20
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"diagramId": "forgeloop-verification-trust-flow",
|
|
4
|
+
"status": "approved",
|
|
5
|
+
"binding": {
|
|
6
|
+
"sourceSha256": "6fe11b0530cc6640f7b0f07d0f2d7e5a1f961745491f39016b340bc354af0e79",
|
|
7
|
+
"svgSha256": "e225c69f2ec90f403c394d88b5d41af75363c7fa336181ee85664f5d495f4555"
|
|
8
|
+
},
|
|
9
|
+
"checks": {
|
|
10
|
+
"darkThemeLegible": true,
|
|
11
|
+
"noOverlap": true,
|
|
12
|
+
"labelsReadable": true,
|
|
13
|
+
"trustBoundariesClear": true,
|
|
14
|
+
"mobilePreviewAcceptable": true,
|
|
15
|
+
"textFallbackEquivalent": true,
|
|
16
|
+
"accessibleMetadataPresent": true
|
|
17
|
+
},
|
|
18
|
+
"reviewedBy": "repository-maintainer",
|
|
19
|
+
"reviewedAt": "2026-08-29"
|
|
20
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
set -eu
|
|
3
|
+
|
|
4
|
+
: "${FORGELOOP_REVISION_PROVIDER:=git}"
|
|
5
|
+
: "${FORGELOOP_BASE_REVISION:?FORGELOOP_BASE_REVISION is required}"
|
|
6
|
+
: "${FORGELOOP_HEAD_REVISION:?FORGELOOP_HEAD_REVISION is required}"
|
|
7
|
+
|
|
8
|
+
exec forgeloop attestation-verify-range \
|
|
9
|
+
--revision-provider "$FORGELOOP_REVISION_PROVIDER" \
|
|
10
|
+
--base "$FORGELOOP_BASE_REVISION" \
|
|
11
|
+
--head "$FORGELOOP_HEAD_REVISION" \
|
|
12
|
+
--require-complete-coverage \
|
|
13
|
+
--json \
|
|
14
|
+
"$@"
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cassiomc1/forgeloop",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.4",
|
|
4
4
|
"description": "Portable, verifiable engineering protocol for AI coding environments and developer workflows",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/cassiomc1/forgeloop.git"
|
|
8
8
|
},
|
|
9
9
|
"homepage": "https://github.com/cassiomc1/forgeloop#readme",
|
|
10
|
-
"license": "
|
|
10
|
+
"license": "MIT",
|
|
11
11
|
"publishConfig": {
|
|
12
12
|
"access": "public"
|
|
13
13
|
},
|
|
@@ -36,7 +36,6 @@
|
|
|
36
36
|
"ORCHESTRATOR_INTEGRATION.md",
|
|
37
37
|
"THREAT_MODEL.md",
|
|
38
38
|
"CONTRACT_COVERAGE.md",
|
|
39
|
-
"AGENT_COMPATIBILITY.md",
|
|
40
39
|
"PROJECT_PROFILE.md",
|
|
41
40
|
"THIRD_PARTY_NOTICES.md",
|
|
42
41
|
"LICENSE",
|
|
@@ -54,14 +53,25 @@
|
|
|
54
53
|
"docs/TROUBLESHOOTING.md",
|
|
55
54
|
"docs/RECIPES.md",
|
|
56
55
|
"docs/DOCUMENTATION_GUIDE.md",
|
|
57
|
-
"docs/
|
|
56
|
+
"docs/RELEASE_CHECKLIST.md",
|
|
58
57
|
"scripts/CI_VALIDATORS.md",
|
|
59
58
|
"docs/MCP.md",
|
|
60
59
|
"docs/UNIVERSAL_INTEGRATION.md",
|
|
61
60
|
"docs/DIAGNOSTIC_MODEL.md",
|
|
62
61
|
"docs/EXECUTION_TRACE.md",
|
|
63
|
-
"docs/
|
|
64
|
-
"docs/
|
|
62
|
+
"docs/CODE_ATTESTATION.md",
|
|
63
|
+
"docs/REVISION_PROVIDERS.md",
|
|
64
|
+
"docs/SIGNING_PROVIDERS.md",
|
|
65
|
+
"docs/PLATFORM_ADAPTERS.md",
|
|
66
|
+
"docs/AGENT_PROTOCOL_SUMMARY.md",
|
|
67
|
+
"scripts/generate-shell-completions.mjs",
|
|
68
|
+
"scripts/generate-agent-protocol-summary.mjs",
|
|
69
|
+
"scripts/benchmark-cli-startup.mjs",
|
|
70
|
+
"scripts/check-critical-coverage.mjs",
|
|
71
|
+
"scripts/check-changelog-freshness.mjs",
|
|
72
|
+
"scripts/write-forgeloop-attestation-summary.mjs",
|
|
73
|
+
"completions",
|
|
74
|
+
"integrations/generic-ci"
|
|
65
75
|
],
|
|
66
76
|
"scripts": {
|
|
67
77
|
"test": "node scripts/run-tests.js",
|
|
@@ -78,9 +88,18 @@
|
|
|
78
88
|
"docs:report": "node scripts/report_documentation_health.mjs",
|
|
79
89
|
"docs:check": "node scripts/run-docs-check.js",
|
|
80
90
|
"lint": "eslint .",
|
|
81
|
-
"coverage": "c8 --all --include=src/**/*.js --reporter=text --reporter=lcov --check-coverage --lines=80 --functions=75 --branches=70 --statements=80 node scripts/run-tests.js",
|
|
91
|
+
"coverage": "c8 --all --include=src/**/*.js --reporter=text --reporter=lcov --reporter=json-summary --check-coverage --lines=80 --functions=75 --branches=70 --statements=80 node scripts/run-tests.js",
|
|
82
92
|
"dependency:policy": "node scripts/check-dependency-policy.mjs",
|
|
83
|
-
"mcp:test": "node
|
|
93
|
+
"mcp:test": "node scripts/run-mcp-tests.mjs",
|
|
94
|
+
"completions:generate": "node scripts/generate-shell-completions.mjs --write",
|
|
95
|
+
"completions:check": "node scripts/generate-shell-completions.mjs --check",
|
|
96
|
+
"test:quick": "node --test tests/cli.test.js tests/schema-health.test.js tests/schema-golden.test.js tests/protocol-info.test.js tests/integration-capabilities.test.js",
|
|
97
|
+
"performance:check": "node scripts/benchmark-cli-startup.mjs",
|
|
98
|
+
"critical-coverage:check": "node scripts/check-critical-coverage.mjs",
|
|
99
|
+
"changelog:check": "node scripts/check-changelog-freshness.mjs",
|
|
100
|
+
"attestation:summary": "node scripts/write-forgeloop-attestation-summary.mjs",
|
|
101
|
+
"summary:generate": "node scripts/generate-agent-protocol-summary.mjs --write",
|
|
102
|
+
"summary:check": "node scripts/generate-agent-protocol-summary.mjs --check",
|
|
84
103
|
"mcp:setup": "node scripts/mcp-setup.mjs",
|
|
85
104
|
"mcp:pack:check": "node scripts/mcp-package-smoke.mjs",
|
|
86
105
|
"poc:evidence:verify": "node scripts/verify_poc_evidence.mjs",
|
|
@@ -92,6 +111,9 @@
|
|
|
92
111
|
},
|
|
93
112
|
"exports": {
|
|
94
113
|
".": "./src/cli.js",
|
|
95
|
-
"./integration":
|
|
114
|
+
"./integration": {
|
|
115
|
+
"types": "./src/integration.d.ts",
|
|
116
|
+
"default": "./src/integration.js"
|
|
117
|
+
}
|
|
96
118
|
}
|
|
97
119
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "forgeloop://schemas/attestation-verification-result.schema.json",
|
|
4
|
+
"title": "ForgeLoop attestation verification result",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "status", "level", "revisionProvider", "baseRevision", "headRevision", "changedPaths", "coveredPaths", "uncoveredPaths", "tasks", "signature"],
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": 1 },
|
|
10
|
+
"status": { "enum": ["VALID", "INVALID"] },
|
|
11
|
+
"level": { "enum": ["PROCESSED", "VERIFIED", "ATTESTED"] },
|
|
12
|
+
"revisionProvider": { "type": "string", "minLength": 1 },
|
|
13
|
+
"baseRevision": { "type": "string", "minLength": 1 },
|
|
14
|
+
"headRevision": { "type": "string", "minLength": 1 },
|
|
15
|
+
"changedPaths": { "type": "integer", "minimum": 0 },
|
|
16
|
+
"coveredPaths": { "type": "integer", "minimum": 0 },
|
|
17
|
+
"uncoveredPaths": { "type": "array", "items": { "type": "string" } },
|
|
18
|
+
"tasks": { "type": "integer", "minimum": 0 },
|
|
19
|
+
"overlaps": { "type": "array", "items": { "type": "object" } },
|
|
20
|
+
"errors": { "type": "array", "items": { "type": "object" } },
|
|
21
|
+
"signature": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"required": ["required", "status"],
|
|
24
|
+
"additionalProperties": false,
|
|
25
|
+
"properties": {
|
|
26
|
+
"required": { "type": "boolean" },
|
|
27
|
+
"status": { "enum": ["UNSIGNED", "VALID", "INVALID", "UNAVAILABLE", "UNTRUSTED", "NOT_CHECKED"] },
|
|
28
|
+
"provider": { "type": "string" },
|
|
29
|
+
"identity": { "type": "string" },
|
|
30
|
+
"issuer": { "type": "string" }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|