@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.
Files changed (127) hide show
  1. package/DOCS_INDEX.md +26 -4
  2. package/EXECUTION_STATE.md +7 -0
  3. package/LOOP_ENGINEERING.md +58 -0
  4. package/LOOP_SYSTEM_DESIGN.md +54 -0
  5. package/ORCHESTRATOR_INTEGRATION.md +23 -0
  6. package/PROTOCOL_INTEGRATION.md +36 -0
  7. package/QUALITY_SCORECARD.md +21 -0
  8. package/README.md +57 -2
  9. package/TERMINOLOGY.md +11 -0
  10. package/THREAT_MODEL.md +7 -0
  11. package/completions/_forgeloop +85 -0
  12. package/completions/forgeloop.bash +173 -0
  13. package/completions/forgeloop.fish +544 -0
  14. package/docs/AGENT_PROTOCOL_SUMMARY.md +281 -0
  15. package/docs/ARTIFACT_REFERENCE.md +226 -0
  16. package/docs/CLI_REFERENCE.md +308 -2
  17. package/docs/CODE_ATTESTATION.md +141 -0
  18. package/docs/CROSS_HARNESS_CONTINUITY.md +22 -2
  19. package/docs/DOCUMENTATION_GUIDE.md +13 -11
  20. package/docs/GETTING_STARTED.md +98 -1
  21. package/docs/MCP.md +8 -0
  22. package/docs/PLATFORM_ADAPTERS.md +69 -0
  23. package/docs/RECIPES.md +138 -0
  24. package/docs/RELEASE_CHECKLIST.md +54 -0
  25. package/docs/REVISION_PROVIDERS.md +136 -0
  26. package/docs/SIGNING_PROVIDERS.md +83 -0
  27. package/docs/TROUBLESHOOTING.md +184 -0
  28. package/docs/UNIVERSAL_INTEGRATION.md +11 -0
  29. package/docs/assets/diagrams/forgeloop-code-attestation-flow.html +13841 -0
  30. package/docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json +37 -0
  31. package/docs/assets/diagrams/forgeloop-code-attestation-flow.svg +5046 -0
  32. package/docs/assets/diagrams/forgeloop-engineering-flow.html +46 -43
  33. package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
  34. package/docs/assets/diagrams/forgeloop-engineering-flow.svg +41 -41
  35. package/docs/assets/diagrams/forgeloop-verification-trust-flow.html +13783 -0
  36. package/docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json +37 -0
  37. package/docs/assets/diagrams/forgeloop-verification-trust-flow.svg +4988 -0
  38. package/docs/diagrams/README.md +30 -22
  39. package/docs/diagrams/forgeloop-code-attestation-flow.workflow.json +125 -0
  40. package/docs/diagrams/forgeloop-engineering-flow.workflow.json +11 -8
  41. package/docs/diagrams/forgeloop-verification-trust-flow.workflow.json +116 -0
  42. package/docs/diagrams/manifest.json +42 -0
  43. package/docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json +20 -0
  44. package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +3 -3
  45. package/docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json +20 -0
  46. package/integrations/generic-ci/verify.sh +14 -0
  47. package/package.json +31 -9
  48. package/schemas/attestation-verification-result.schema.json +34 -0
  49. package/schemas/code-attestation.schema.json +61 -0
  50. package/schemas/code-manifest.schema.json +57 -0
  51. package/schemas/config.schema.json +57 -1
  52. package/schemas/handoff-envelope.schema.json +57 -0
  53. package/schemas/in-toto-statement.schema.json +32 -0
  54. package/schemas/responsibility.schema.json +37 -0
  55. package/schemas/verification-scope.schema.json +26 -0
  56. package/schemas/workspace-binding.schema.json +20 -0
  57. package/scripts/CI_VALIDATORS.md +3 -0
  58. package/scripts/benchmark-cli-startup.mjs +60 -0
  59. package/scripts/check-changelog-freshness.mjs +88 -0
  60. package/scripts/check-critical-coverage.mjs +58 -0
  61. package/scripts/generate-agent-protocol-summary.mjs +141 -0
  62. package/scripts/generate-shell-completions.mjs +132 -0
  63. package/scripts/write-forgeloop-attestation-summary.mjs +93 -0
  64. package/src/cli.js +114 -6
  65. package/src/commands/attestation-create.js +30 -0
  66. package/src/commands/attestation-status.js +12 -0
  67. package/src/commands/attestation-verify-range.js +32 -0
  68. package/src/commands/attestation-verify.js +23 -0
  69. package/src/commands/handoff-create.js +9 -0
  70. package/src/commands/handoff-list.js +12 -0
  71. package/src/commands/handoff-show.js +10 -0
  72. package/src/commands/responsibility-set.js +20 -0
  73. package/src/commands/responsibility-status.js +12 -0
  74. package/src/commands/run-check.js +43 -3
  75. package/src/commands/task-repair-legacy-recovery.js +1 -2
  76. package/src/commands/verify-scope.js +9 -0
  77. package/src/commands/workspace-bind.js +17 -0
  78. package/src/commands/workspace-status.js +19 -0
  79. package/src/core/artifact-registry.js +84 -0
  80. package/src/core/attestation-coverage.js +134 -0
  81. package/src/core/attestation-verifier.js +227 -0
  82. package/src/core/attestation.js +263 -0
  83. package/src/core/audit.js +67 -1
  84. package/src/core/bundles.js +210 -9
  85. package/src/core/cli-command-definitions.js +196 -0
  86. package/src/core/code-manifest.js +293 -0
  87. package/src/core/command-executors.js +79 -0
  88. package/src/core/command-input.js +69 -18
  89. package/src/core/command-runtime.js +2 -1
  90. package/src/core/completion.js +170 -8
  91. package/src/core/config.js +60 -2
  92. package/src/core/continuity-cli-options.js +9 -3
  93. package/src/core/continuity-reconciliation.js +20 -0
  94. package/src/core/diagnostic-projection.js +3 -1
  95. package/src/core/error-codes.js +146 -0
  96. package/src/core/events.js +109 -13
  97. package/src/core/exit-codes.js +22 -0
  98. package/src/core/handoff.js +208 -0
  99. package/src/core/information-gain-projection.js +3 -3
  100. package/src/core/integration-invocation-policy.js +40 -0
  101. package/src/core/integration-resources.js +54 -0
  102. package/src/core/next-action-phases.js +968 -0
  103. package/src/core/next-action.js +32 -951
  104. package/src/core/phase.js +29 -1
  105. package/src/core/protocol-info.js +41 -1
  106. package/src/core/repository.js +256 -11
  107. package/src/core/responsibility.js +265 -0
  108. package/src/core/revision/git.js +207 -0
  109. package/src/core/revision/provider.js +90 -0
  110. package/src/core/revision/registry.js +5 -0
  111. package/src/core/route-artifact.js +1 -1
  112. package/src/core/schema-validation.js +8 -0
  113. package/src/core/signing/none.js +23 -0
  114. package/src/core/signing/provider.js +21 -0
  115. package/src/core/signing/registry.js +7 -0
  116. package/src/core/signing/sigstore.js +158 -0
  117. package/src/core/task-command.js +9 -1
  118. package/src/core/task-paths.js +72 -0
  119. package/src/core/templates.js +8 -0
  120. package/src/core/verification-scope-capability.js +179 -0
  121. package/src/core/verification-scope.js +271 -0
  122. package/src/core/workspace-binding.js +211 -0
  123. package/src/integration.d.ts +91 -0
  124. package/AGENT_COMPATIBILITY.md +0 -11
  125. package/docs/RELEASE_CHECKLIST_1_4.md +0 -38
  126. package/docs/RELEASE_CHECKLIST_1_5_MCP.md +0 -78
  127. package/docs/RELEASE_CHECKLIST_1_6_1.md +0 -121
@@ -1,23 +1,29 @@
1
1
  # Documentation diagrams
2
2
 
3
- The ForgeLoop architecture flow is authored as typed Archify workflow IR in
4
- [`forgeloop-engineering-flow.workflow.json`](./forgeloop-engineering-flow.workflow.json).
5
- The checked-in outputs are generated from that source with the pinned Archify
6
- v2.15.0 toolchain. The animated interactive explorer is the primary experience:
7
-
8
- - [animated HTML explorer](../assets/diagrams/forgeloop-engineering-flow.html)
9
- - [animated, self-contained SVG fallback](../assets/diagrams/forgeloop-engineering-flow.svg)
10
- - [deterministic generation receipt](../assets/diagrams/forgeloop-engineering-flow.receipt.json)
11
-
12
- The canonical source sets `meta.animation` to `trace`, so the explorer and SVG
13
- trace the workflow edges and nodes. Use the explorer's Present, playback, and
14
- focus controls for the full animated experience; the SVG remains available for
15
- repository previews and text-only fallbacks.
16
-
17
- [`manifest.json`](./manifest.json) is the governance source for diagram types,
18
- renderer support, canonical purposes, artifact ownership, and required
19
- references. The persistent human approval is kept separately in
20
- [`reviews/forgeloop-engineering-flow.review.json`](./reviews/forgeloop-engineering-flow.review.json).
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 repository has
53
- one canonical workflow diagram. Governance support does not imply renderer
54
- support: a type requires an explicit renderer mapping before it can be added as
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 → gated work → validator-backed closure",
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": "facts", "width": 50 },
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": "Gates", "sublabel": "policy", "width": 50 },
69
- { "id": "preflight", "lane": "policy", "col": 4, "type": "security", "label": "READY", "sublabel": "unlock", "tag": "PREFLIGHT", "width": 50 },
70
- { "id": "work", "lane": "execution", "col": 4, "type": "backend", "label": "Work", "sublabel": "checkpoint", "width": 50 },
71
- { "id": "evidence", "lane": "evidence", "col": 4, "type": "database", "label": "Evidence", "sublabel": "checks", "tag": "freshness", "width": 50 },
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": "validator", "tag": "claim", "width": 50 },
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
- "run-check binds commands to an execution reference",
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": "e4778296d1b9b2129b1ff6c956acaa1e7faba3dbfe68e0e5a6fb47dae3499308",
7
- "svgSha256": "f549d1f998c2c84793783b9b6ce7aabe05d9a91edebecb764403c67dfbb4cc52"
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-26"
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.2",
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": "SEE LICENSE IN 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/RELEASE_CHECKLIST_1_4.md",
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/RELEASE_CHECKLIST_1_5_MCP.md",
64
- "docs/RELEASE_CHECKLIST_1_6_1.md"
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 --test integrations/mcp/tests/*.test.js",
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": "./src/integration.js"
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
+ }