@cassiomc1/forgeloop 1.13.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/AGENT_COMPATIBILITY.md +8 -0
  2. package/DOCS_INDEX.md +35 -3
  3. package/ENG/nodejs-backend-development-eng.md +2 -2
  4. package/ENG/sec-code-eng.md +7 -7
  5. package/EXECUTION_STATE.md +12 -0
  6. package/LOOP_ENGINEERING.md +28 -2
  7. package/ORCHESTRATOR_INTEGRATION.md +9 -5
  8. package/PROTOCOL_INTEGRATION.md +55 -2
  9. package/README.md +40 -25
  10. package/TERMINOLOGY.md +2 -0
  11. package/THREAT_MODEL.md +140 -1
  12. package/completions/_forgeloop +19 -1
  13. package/completions/forgeloop.bash +37 -1
  14. package/completions/forgeloop.fish +123 -1
  15. package/docs/ADVISORY_CONTEXT.md +25 -0
  16. package/docs/AGENT_BROWSER_ADAPTER.md +81 -0
  17. package/docs/AGENT_BROWSER_VERIFICATION.md +6 -0
  18. package/docs/AGENT_PROTOCOL_SUMMARY.md +27 -2
  19. package/docs/AGENT_SKILL.md +66 -0
  20. package/docs/ARTIFACT_REFERENCE.md +123 -0
  21. package/docs/AUDIT_UX.md +46 -0
  22. package/docs/BROWSER_VERIFICATION.md +136 -0
  23. package/docs/CLI_REFERENCE.md +366 -6
  24. package/docs/CODE_ATTESTATION.md +2 -2
  25. package/docs/DOCUMENTATION_GUIDE.md +32 -11
  26. package/docs/JEV_BENCHMARKS.md +31 -0
  27. package/docs/MODEL_ROUTING.md +37 -0
  28. package/docs/OPENSRC_ADAPTER.md +241 -0
  29. package/docs/PACKAGE_CONTENTS.md +35 -8
  30. package/docs/PROVIDERS.md +126 -0
  31. package/docs/PROVIDER_ARCHITECTURE.md +199 -0
  32. package/docs/RECIPES.md +9 -0
  33. package/docs/RELEASE_CHECKLIST.md +38 -5
  34. package/docs/SECURITY_REVIEW.md +71 -0
  35. package/docs/SEMANTIC_DECISION_PLANE.md +71 -0
  36. package/docs/TEST_INTELLIGENCE.md +29 -0
  37. package/docs/TEST_PRUNING.md +14 -0
  38. package/docs/TROUBLESHOOTING.md +198 -1
  39. package/docs/UNIVERSAL_INTEGRATION.md +31 -0
  40. package/docs/assets/diagrams/forgeloop-code-attestation-flow.html +2 -2
  41. package/docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json +5 -5
  42. package/docs/assets/diagrams/forgeloop-code-attestation-flow.svg +1 -1
  43. package/docs/assets/diagrams/forgeloop-engineering-flow.html +39 -26
  44. package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
  45. package/docs/assets/diagrams/forgeloop-engineering-flow.svg +26 -26
  46. package/docs/assets/diagrams/forgeloop-verification-trust-flow.html +2 -1
  47. package/docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json +5 -5
  48. package/docs/assets/diagrams/forgeloop-verification-trust-flow.svg +1 -1
  49. package/docs/diagrams/README.md +13 -9
  50. package/docs/diagrams/forgeloop-code-attestation-flow.workflow.json +1 -1
  51. package/docs/diagrams/forgeloop-engineering-flow.workflow.json +24 -19
  52. package/docs/diagrams/forgeloop-verification-trust-flow.workflow.json +1 -0
  53. package/docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json +4 -4
  54. package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +4 -4
  55. package/docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json +4 -4
  56. package/docs/documentation-manifest.json +750 -5
  57. package/docs/protocol-requirements.json +24 -0
  58. package/package.json +30 -3
  59. package/schemas/config.schema.json +14 -0
  60. package/schemas/context-plan.schema.json +18 -0
  61. package/schemas/semantic-decision.schema.json +46 -0
  62. package/schemas/test-utility.schema.json +44 -0
  63. package/scripts/CI_VALIDATORS.md +6 -6
  64. package/scripts/benchmark-jev.mjs +5 -0
  65. package/scripts/benchmark-test-intelligence.mjs +4 -0
  66. package/scripts/generate-agent-protocol-summary.mjs +4 -1
  67. package/scripts/generate-forgeloop-skill.mjs +133 -0
  68. package/scripts/jev-smoke.mjs +19 -0
  69. package/skills/forgeloop/README.md +9 -0
  70. package/skills/forgeloop/SKILL.md +77 -0
  71. package/skills/forgeloop/references/lifecycle.md +9 -0
  72. package/skills/forgeloop/references/recovery.md +7 -0
  73. package/skills/forgeloop/references/verification.md +7 -0
  74. package/src/adapters/agent-browser/assertions.js +47 -0
  75. package/src/adapters/agent-browser/commands.js +54 -0
  76. package/src/adapters/agent-browser/index.js +3 -0
  77. package/src/adapters/agent-browser/locator.js +40 -0
  78. package/src/adapters/agent-browser/process.js +215 -0
  79. package/src/adapters/agent-browser/provider.js +313 -0
  80. package/src/adapters/emulated-services/constants.js +24 -0
  81. package/src/adapters/emulated-services/index.js +7 -0
  82. package/src/adapters/emulated-services/process.js +162 -0
  83. package/src/adapters/emulated-services/provider.js +282 -0
  84. package/src/adapters/opensrc/normalize.js +90 -0
  85. package/src/adapters/opensrc/process.js +248 -0
  86. package/src/adapters/opensrc/provider.js +338 -0
  87. package/src/adapters/opensrc/search.js +264 -0
  88. package/src/adapters/typesafe/client.js +28 -0
  89. package/src/adapters/typesafe/engine.js +63 -0
  90. package/src/adapters/typesafe/normalize.js +41 -0
  91. package/src/cli.js +108 -0
  92. package/src/commands/checkpoint-revalidate.js +176 -0
  93. package/src/commands/context-plan.js +38 -0
  94. package/src/commands/contract-create.js +264 -0
  95. package/src/commands/contract-revise.js +236 -0
  96. package/src/commands/decision-show.js +14 -0
  97. package/src/commands/decision-status.js +22 -0
  98. package/src/commands/discover.js +41 -0
  99. package/src/commands/doctor.js +15 -0
  100. package/src/commands/gate-record.js +205 -0
  101. package/src/commands/gate-revalidate.js +137 -0
  102. package/src/commands/model-route.js +32 -0
  103. package/src/commands/route.js +146 -18
  104. package/src/commands/semantic-plan.js +17 -0
  105. package/src/commands/task-abandon.js +224 -0
  106. package/src/commands/task-migrate-contract-bootstrap-repair.js +288 -0
  107. package/src/commands/task-repair-contract-bootstrap.js +263 -0
  108. package/src/commands/test-inventory.js +5 -0
  109. package/src/commands/test-prune-plan.js +5 -0
  110. package/src/commands/test-prune-probe.js +5 -0
  111. package/src/commands/test-utility.js +5 -0
  112. package/src/commands/validate-protocol.js +10 -1
  113. package/src/core/artifact-registry.js +24 -0
  114. package/src/core/audit-ux.js +514 -0
  115. package/src/core/browser-verification/constants.js +149 -0
  116. package/src/core/browser-verification/normalize.js +254 -0
  117. package/src/core/browser-verification/provider.js +519 -0
  118. package/src/core/browser-verification/service.js +115 -0
  119. package/src/core/checkpoint-revalidation.js +319 -0
  120. package/src/core/cli-command-definitions.js +241 -0
  121. package/src/core/command-executors.js +110 -0
  122. package/src/core/command-input.js +115 -43
  123. package/src/core/completion-artifacts.js +14 -5
  124. package/src/core/completion.js +4 -6
  125. package/src/core/config.js +3 -0
  126. package/src/core/context-compiler/budget.js +9 -0
  127. package/src/core/context-compiler/candidates.js +39 -0
  128. package/src/core/context-compiler/compiler.js +63 -0
  129. package/src/core/context-compiler/fingerprint.js +11 -0
  130. package/src/core/context-compiler/policy.js +13 -0
  131. package/src/core/context-compiler/result.js +23 -0
  132. package/src/core/contract-bootstrap-recovery.js +655 -0
  133. package/src/core/contract-revision.js +210 -0
  134. package/src/core/decision/artifact.js +69 -0
  135. package/src/core/decision/benchmarks.js +103 -0
  136. package/src/core/decision/cache.js +27 -0
  137. package/src/core/decision/constants.js +58 -0
  138. package/src/core/decision/cutover.js +34 -0
  139. package/src/core/decision/engine.js +22 -0
  140. package/src/core/decision/errors.js +68 -0
  141. package/src/core/decision/events.js +101 -0
  142. package/src/core/decision/freshness.js +19 -0
  143. package/src/core/decision/normalizers/index.js +115 -0
  144. package/src/core/decision/policy.js +18 -0
  145. package/src/core/decision/projection.js +16 -0
  146. package/src/core/decision/question-registry.js +201 -0
  147. package/src/core/decision/request.js +26 -0
  148. package/src/core/decision/resolver.js +130 -0
  149. package/src/core/decision/result.js +58 -0
  150. package/src/core/decision/service.js +156 -0
  151. package/src/core/decision/state-builder.js +65 -0
  152. package/src/core/decision/task-bindings.js +30 -0
  153. package/src/core/decision/test-provider.js +32 -0
  154. package/src/core/decision/thresholds.js +15 -0
  155. package/src/core/error-codes.js +278 -0
  156. package/src/core/events.js +226 -57
  157. package/src/core/evidence-readiness.js +9 -0
  158. package/src/core/execution-prerequisites.js +14 -0
  159. package/src/core/execution-profile.js +63 -38
  160. package/src/core/gate-provenance.js +124 -0
  161. package/src/core/integration-invocation-policy.js +27 -4
  162. package/src/core/integration-resources.js +86 -61
  163. package/src/core/model-router/constants.js +10 -0
  164. package/src/core/model-router/policy.js +103 -0
  165. package/src/core/model-router/router.js +37 -0
  166. package/src/core/next-action-model.js +58 -0
  167. package/src/core/next-action-phases.js +130 -42
  168. package/src/core/next-action-refresh.js +43 -9
  169. package/src/core/next-action-review-phase.js +7 -2
  170. package/src/core/next-action.js +35 -7
  171. package/src/core/phase.js +128 -10
  172. package/src/core/preflight-consistency.js +23 -9
  173. package/src/core/preflight-loaders.js +37 -5
  174. package/src/core/protocol-info.js +65 -0
  175. package/src/core/protocol.js +20 -0
  176. package/src/core/reconcile-closure.js +128 -52
  177. package/src/core/recovery-history.js +1 -0
  178. package/src/core/resumability.js +154 -44
  179. package/src/core/route-artifact.js +15 -1
  180. package/src/core/router.js +67 -1
  181. package/src/core/runtime-context.js +118 -61
  182. package/src/core/schema-validation.js +3 -0
  183. package/src/core/security-review/constants.js +64 -0
  184. package/src/core/security-review/normalize.js +245 -0
  185. package/src/core/security-review/provider.js +204 -0
  186. package/src/core/security-review/service.js +134 -0
  187. package/src/core/semantic-planning/constants.js +19 -0
  188. package/src/core/semantic-planning/projection.js +94 -0
  189. package/src/core/semantic-planning/service.js +15 -0
  190. package/src/core/sources.js +37 -0
  191. package/src/core/task-claim-state.js +201 -1
  192. package/src/core/task-conflict-inspection.js +31 -5
  193. package/src/core/task-paths.js +13 -0
  194. package/src/core/task-recovery.js +1 -0
  195. package/src/core/templates.js +3 -0
  196. package/src/core/test-intelligence/benchmarks.js +68 -0
  197. package/src/core/test-intelligence/inventory.js +73 -0
  198. package/src/core/test-intelligence/prune.js +90 -0
  199. package/src/core/test-intelligence/semantic-state.js +15 -0
  200. package/src/core/test-intelligence/service.js +40 -0
  201. package/src/core/test-intelligence/utility.js +50 -0
  202. package/src/core/trace.js +11 -7
  203. package/src/core/transaction.js +1 -0
  204. package/src/integration.d.ts +492 -0
  205. package/src/integration.js +54 -0
  206. package/src/providers/README.md +47 -0
  207. package/src/providers/capabilities.js +46 -0
  208. package/src/providers/errors.js +15 -0
  209. package/src/providers/index.js +29 -0
  210. package/src/providers/json-snapshot.js +105 -0
  211. package/src/providers/registry.js +152 -0
@@ -15,16 +15,16 @@
15
15
  "license": "MIT"
16
16
  },
17
17
  "input": {
18
- "sha256": "33bb9c3c4f3fb4a793febeab34b2d07ca7bf2c058d4f5e7575dba3a6065eedeb",
19
- "bytes": 9857
18
+ "sha256": "eb8ca8fdfceb9e50cf7cd07be8622dcac127cfee80c8e2929d604c40138cc594",
19
+ "bytes": 9910
20
20
  },
21
21
  "artifacts": {
22
22
  "html": {
23
- "sha256": "85bb7abf910d3f6dd12037cfcd90c4b67f0aad4dca2b4cb21be1b0112cbdd92e",
24
- "bytes": 653258
23
+ "sha256": "58f12b47996c7e901dadbf60988e0a8aa9b4af3687e3924129e87f62a9a13f89",
24
+ "bytes": 653311
25
25
  },
26
26
  "svg": {
27
- "sha256": "3a768148886ffdfcce75221c11e51ee77a3702510e90917bf6e8ba0581ebdb44",
27
+ "sha256": "876c6400a34f9fe9773e61d968ddf773669cc14153933de2b2ceccd4386506a7",
28
28
  "bytes": 216543
29
29
  }
30
30
  },
@@ -1,4 +1,4 @@
1
- <svg data-archify-version="2.15.0" data-forgeloop-source-sha256="33bb9c3c4f3fb4a793febeab34b2d07ca7bf2c058d4f5e7575dba3a6065eedeb" data-theme="dark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 1024" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
1
+ <svg data-archify-version="2.15.0" data-forgeloop-source-sha256="eb8ca8fdfceb9e50cf7cd07be8622dcac127cfee80c8e2929d604c40138cc594" data-theme="dark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 1024" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
2
2
  <style>
3
3
  .c-bg-rect { fill: var(--bg); }
4
4
  /* Keep boundary labels clear of the first node in each group. */
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en" data-theme="dark" data-preset="signal-flow" data-present="true">
3
3
  <head>
4
- <meta name="forgeloop-diagram-source-sha256" content="3c35fbe4e144cd7fb60632996839bcf32b0b503e8a4add2270f29c3bf3e8a658">
4
+ <meta name="forgeloop-diagram-source-sha256" content="3eb4ed7dc7566cf786311b230336b88ff214889ec5a86bb8f2cf0b629a50ae95">
5
5
  <meta name="forgeloop-diagram-renderer" content="archify@2.15.0 (e1ac748f19cf805e44bf74fb93c796662152e273)">
6
6
  <meta charset="UTF-8">
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -4992,8 +4992,8 @@
4992
4992
  <path data-edge-from="gates" data-edge-to="preflight" data-edge-key="4" data-edge-id="gates-preflight" data-composition-points="430,269;430,312;500,312;500,277" d="M 430 269 L 430 312 L 500 312 L 500 277" class="a-security" data-animate="edge" style="--step:4" stroke-width="1.4" marker-end="url(#arrowhead-security)"/>
4993
4993
  <path data-edge-from="preflight" data-edge-to="work" data-edge-key="5" data-edge-id="preflight-work" data-composition-points="500,277;500,290;500,290;500,341" d="M 500 277 L 500 290 L 500 290 L 500 341" class="a-emphasis" data-animate="edge" style="--step:5" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4994
4994
  <path data-edge-from="work" data-edge-to="evidence" data-edge-key="6" data-edge-id="work-evidence" data-composition-points="500,393;500,414;500,414;500,457" d="M 500 393 L 500 414 L 500 414 L 500 457" class="a-dashed" data-animate="edge" style="--step:6" stroke-width="1.4" marker-end="url(#arrowhead-dashed)"/>
4995
- <path data-edge-from="evidence" data-edge-to="review" data-edge-key="7" data-edge-id="evidence-review" data-composition-points="465,491;360,491;360,739;600,739" d="M 465 491 L 360 491 L 360 739 L 600 739" class="a-emphasis" data-animate="edge" style="--step:7" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4996
- <path data-edge-from="review" data-edge-to="valid" data-edge-key="8" data-edge-id="review-valid" data-composition-points="650,739;760,739;760,491;650,491" d="M 650 739 L 760 739 L 760 491 L 650 491" class="a-emphasis" data-animate="edge" style="--step:8" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4995
+ <path data-edge-from="evidence" data-edge-to="review" data-edge-key="7" data-edge-id="evidence-review" data-composition-points="500,525;500,600;500,600;500,713" d="M 500 525 L 500 600 L 500 600 L 500 713" class="a-emphasis" data-animate="edge" style="--step:7" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4996
+ <path data-edge-from="review" data-edge-to="valid" data-edge-key="8" data-edge-id="review-valid" data-composition-points="531,739;594,739" d="M 531 739 L 594 739" class="a-emphasis" data-animate="edge" style="--step:8" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4997
4997
  <path data-edge-from="evidence" data-edge-to="diagnose" data-edge-key="9" data-edge-id="evidence-diagnose" data-composition-points="465,491;360,491;360,615;325,615" d="M 465 491 L 360 491 L 360 615 L 325 615" class="a-security" data-animate="edge" style="--step:12" stroke-width="1.4" marker-end="url(#arrowhead-security)"/>
4998
4998
  <path data-edge-from="diagnose" data-edge-to="correct" data-edge-key="10" data-edge-id="diagnose-correct" data-composition-points="275,615;167,615;167,615;245,615" d="M 275 615 L 167 615 L 167 615 L 245 615" class="a-dashed" data-animate="edge" style="--step:12" stroke-width="1.4" marker-end="url(#arrowhead-dashed)"/>
4999
4999
  <path data-edge-from="correct" data-edge-to="evidence" data-edge-key="11" data-edge-id="correct-evidence" data-composition-points="195,615;160,615;160,491;465,491" d="M 195 615 L 160 615 L 160 491 L 465 491" class="a-security" data-animate="edge" style="--step:12" stroke-width="1.4" marker-end="url(#arrowhead-security)"/>
@@ -5049,16 +5049,16 @@
5049
5049
  <text data-detail="fine" x="300" y="265" class="t-security" font-size="6.3" text-anchor="middle">fail closed</text>
5050
5050
  </g>
5051
5051
 
5052
- <g id="node-gates" data-node-id="gates" data-node-label="Claims" tabindex="0" role="button" aria-label="Focus Claims, Task + gates, Policy Boundary › Contract boundary › Route + authorize" aria-pressed="false" data-node-kind="security" data-node-sublabel="Task + gates" data-node-context="Policy Boundary › Contract boundary › Route + authorize">
5053
- <title>Claims · Task + gates · Policy Boundary › Contract boundary › Route + authorize</title>
5052
+ <g id="node-gates" data-node-id="gates" data-node-label="Gates" tabindex="0" role="button" aria-label="Focus Gates, claims + tasks, Policy Boundary › Contract boundary › Route + authorize" aria-pressed="false" data-node-kind="security" data-node-sublabel="claims + tasks" data-node-context="Policy Boundary › Contract boundary › Route + authorize">
5053
+ <title>Gates · claims + tasks · Policy Boundary › Contract boundary › Route + authorize</title>
5054
5054
  <rect x="399" y="217" width="62" height="52" rx="6" class="c-mask"/>
5055
5055
  <rect x="399" y="217" width="62" height="52" rx="6" class="c-security" data-animate="node" style="--step:4" stroke-width="1.5"/>
5056
5056
  <g aria-hidden="true" data-semantic-sigil="security" class="semantic-sigil s-security" transform="translate(405 223) scale(0.6875)">
5057
5057
  <path d="M8 2.2 13 4v3.5c0 3.1-1.8 5.4-5 6.5-3.2-1.1-5-3.4-5-6.5V4Z"/>
5058
5058
  <path d="m5.8 8 1.5 1.5 3-3"/>
5059
5059
  </g>
5060
- <text data-detail-anchor x="430" y="238" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Claims</text>
5061
- <text data-detail="context" x="430" y="255" class="t-muted" font-size="7.5" text-anchor="middle">Task + gates</text>
5060
+ <text data-detail-anchor x="430" y="238" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Gates</text>
5061
+ <text data-detail="context" x="430" y="255" class="t-muted" font-size="6.4" text-anchor="middle">claims + tasks</text>
5062
5062
  </g>
5063
5063
 
5064
5064
  <g id="node-preflight" data-node-id="preflight" data-node-label="READY" tabindex="0" role="button" aria-label="Focus READY, binding, Policy Boundary › Contract boundary › Route + authorize" aria-pressed="false" data-node-kind="security" data-node-sublabel="binding" data-node-tag="Preflight" data-node-context="Policy Boundary › Contract boundary › Route + authorize">
@@ -5074,15 +5074,15 @@
5074
5074
  <text data-detail="fine" x="500" y="265" class="t-security" font-size="7" text-anchor="middle">Preflight</text>
5075
5075
  </g>
5076
5076
 
5077
- <g id="node-work" data-node-id="work" data-node-label="Execution" tabindex="0" role="button" aria-label="Focus Execution, root + task, Resumable Execution › Route + authorize" aria-pressed="false" data-node-kind="backend" data-node-sublabel="root + task" data-node-context="Resumable Execution › Route + authorize">
5078
- <title>Execution · root + task · Resumable Execution › Route + authorize</title>
5077
+ <g id="node-work" data-node-id="work" data-node-label="Execute" tabindex="0" role="button" aria-label="Focus Execute, run task, Resumable Execution › Route + authorize" aria-pressed="false" data-node-kind="backend" data-node-sublabel="run task" data-node-context="Resumable Execution › Route + authorize">
5078
+ <title>Execute · run task · Resumable Execution › Route + authorize</title>
5079
5079
  <rect x="469" y="341" width="62" height="52" rx="6" class="c-mask"/>
5080
5080
  <rect x="469" y="341" width="62" height="52" rx="6" class="c-backend" data-animate="node" style="--step:6" stroke-width="1.5"/>
5081
5081
  <g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(475 347) scale(0.6875)">
5082
5082
  <path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
5083
5083
  </g>
5084
- <text data-detail-anchor x="500" y="362" class="t-primary" font-size="10" font-weight="600" text-anchor="middle">Execution</text>
5085
- <text data-detail="context" x="500" y="379" class="t-muted" font-size="8" text-anchor="middle">root + task</text>
5084
+ <text data-detail-anchor x="500" y="362" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Execute</text>
5085
+ <text data-detail="context" x="500" y="379" class="t-muted" font-size="8" text-anchor="middle">run task</text>
5086
5086
  </g>
5087
5087
 
5088
5088
  <g id="node-evidence" data-node-id="evidence" data-node-label="Evidence" tabindex="0" role="button" aria-label="Focus Evidence, run-check, Evidence Ledger › Evidence boundary › Route + authorize" aria-pressed="false" data-node-kind="database" data-node-sublabel="run-check" data-node-tag="observed" data-node-context="Evidence Ledger › Evidence boundary › Route + authorize">
@@ -5098,28 +5098,28 @@
5098
5098
  <text data-detail="fine" x="500" y="513" class="t-database" font-size="7" text-anchor="middle">observed</text>
5099
5099
  </g>
5100
5100
 
5101
- <g id="node-review" data-node-id="review" data-node-label="Review" tabindex="0" role="button" aria-label="Focus Review, drift, Review + Closure › Execute + verify" aria-pressed="false" data-node-kind="backend" data-node-sublabel="drift" data-node-context="Review + Closure › Execute + verify">
5102
- <title>Review · drift · Review + Closure › Execute + verify</title>
5103
- <rect x="600" y="713" width="50" height="52" rx="6" class="c-mask"/>
5104
- <rect x="600" y="713" width="50" height="52" rx="6" class="c-backend" data-animate="node" style="--step:8" stroke-width="1.5"/>
5105
- <g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(606 719) scale(0.6875)">
5101
+ <g id="node-review" data-node-id="review" data-node-label="Review" tabindex="0" role="button" aria-label="Focus Review, check drift, Review + Closure › Route + authorize" aria-pressed="false" data-node-kind="backend" data-node-sublabel="check drift" data-node-context="Review + Closure › Route + authorize">
5102
+ <title>Review · check drift · Review + Closure › Route + authorize</title>
5103
+ <rect x="469" y="713" width="62" height="52" rx="6" class="c-mask"/>
5104
+ <rect x="469" y="713" width="62" height="52" rx="6" class="c-backend" data-animate="node" style="--step:8" stroke-width="1.5"/>
5105
+ <g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(475 719) scale(0.6875)">
5106
5106
  <path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
5107
5107
  </g>
5108
- <text data-detail-anchor x="625" y="734" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Review</text>
5109
- <text data-detail="context" x="625" y="751" class="t-muted" font-size="8" text-anchor="middle">drift</text>
5108
+ <text data-detail-anchor x="500" y="734" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Review</text>
5109
+ <text data-detail="context" x="500" y="751" class="t-muted" font-size="8" text-anchor="middle">check drift</text>
5110
5110
  </g>
5111
5111
 
5112
- <g id="node-valid" data-node-id="valid" data-node-label="VALID" tabindex="0" role="button" aria-label="Focus VALID, completion, Evidence Ledger › Evidence boundary › Execute + verify" aria-pressed="false" data-node-kind="database" data-node-sublabel="completion" data-node-tag="claim" data-node-context="Evidence Ledger › Evidence boundary › Execute + verify">
5113
- <title>VALID · completion · Evidence Ledger › Evidence boundary › Execute + verify · claim</title>
5114
- <rect x="600" y="457" width="50" height="68" rx="6" class="c-mask"/>
5115
- <rect x="600" y="457" width="50" height="68" rx="6" class="c-database" data-animate="node" style="--step:9" stroke-width="1.5"/>
5116
- <g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(606 463) scale(0.6875)">
5112
+ <g id="node-valid" data-node-id="valid" data-node-label="VALID" tabindex="0" role="button" aria-label="Focus VALID, completion, Review + Closure › Execute + verify" aria-pressed="false" data-node-kind="database" data-node-sublabel="completion" data-node-tag="verified" data-node-context="Review + Closure › Execute + verify">
5113
+ <title>VALID · completion · Review + Closure › Execute + verify · verified</title>
5114
+ <rect x="594" y="705" width="62" height="68" rx="6" class="c-mask"/>
5115
+ <rect x="594" y="705" width="62" height="68" rx="6" class="c-database" data-animate="node" style="--step:9" stroke-width="1.5"/>
5116
+ <g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(600 711) scale(0.6875)">
5117
5117
  <ellipse cx="8" cy="4" rx="5" ry="2"/>
5118
5118
  <path d="M3 4v8c0 1.1 2.2 2 5 2s5-.9 5-2V4M3 8c0 1.1 2.2 2 5 2s5-.9 5-2"/>
5119
5119
  </g>
5120
- <text data-detail-anchor x="625" y="478" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">VALID</text>
5121
- <text data-detail="context" x="625" y="495" class="t-muted" font-size="7" text-anchor="middle">completion</text>
5122
- <text data-detail="fine" x="625" y="513" class="t-database" font-size="7" text-anchor="middle">claim</text>
5120
+ <text data-detail-anchor x="625" y="726" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">VALID</text>
5121
+ <text data-detail="context" x="625" y="743" class="t-muted" font-size="8" text-anchor="middle">completion</text>
5122
+ <text data-detail="fine" x="625" y="761" class="t-database" font-size="7" text-anchor="middle">verified</text>
5123
5123
  </g>
5124
5124
 
5125
5125
  <g id="node-diagnose" data-node-id="diagnose" data-node-label="Diagnose" tabindex="0" role="button" aria-label="Focus Diagnose, failure, Recovery + Stops › Reconcile before retry › Discover + scope" aria-pressed="false" data-node-kind="messagebus" data-node-sublabel="failure" data-node-context="Recovery + Stops › Reconcile before retry › Discover + scope">
@@ -5391,6 +5391,7 @@
5391
5391
  <li>&bull; Execution starts only after PREFLIGHT_READY</li>
5392
5392
  <li>&bull; Workspace binding is optional but blocks mismatched execution</li>
5393
5393
  <li>&bull; Failures return to diagnosis before another claim</li>
5394
+ <li>&bull; Evidence-only completion rejection reopens verification from review</li>
5394
5395
  <li>&bull; Completion is validator-backed, not inferred from a screenshot</li>
5395
5396
  <li>&bull; Blocked pre-execution refresh requires a valid ledger and revised route</li>
5396
5397
  </ul>
@@ -5423,6 +5424,18 @@
5423
5424
  </ul>
5424
5425
  </div>
5425
5426
 
5427
+ <div class="card">
5428
+ <div class="card-header">
5429
+ <div class="card-dot violet"></div>
5430
+ <h3>Semantic checkpoint</h3>
5431
+ </div>
5432
+ <ul>
5433
+ <li>&bull; Jev is mandatory at required semantic checkpoints</li>
5434
+ <li>&bull; Typed Jev output is bounded non-authoritative input</li>
5435
+ <li>&bull; Jev cannot advance lifecycle, release claims, create evidence, or complete</li>
5436
+ </ul>
5437
+ </div>
5438
+
5426
5439
  <div class="card">
5427
5440
  <div class="card-header">
5428
5441
  <div class="card-dot emerald"></div>
@@ -15,17 +15,17 @@
15
15
  "license": "MIT"
16
16
  },
17
17
  "input": {
18
- "sha256": "3c35fbe4e144cd7fb60632996839bcf32b0b503e8a4add2270f29c3bf3e8a658",
19
- "bytes": 10229
18
+ "sha256": "3eb4ed7dc7566cf786311b230336b88ff214889ec5a86bb8f2cf0b629a50ae95",
19
+ "bytes": 10484
20
20
  },
21
21
  "artifacts": {
22
22
  "html": {
23
- "sha256": "26e82be933acaca0d7f07e917413d87135b901195aef22bd42ef974fe1548ad3",
24
- "bytes": 648893
23
+ "sha256": "e56ebf6f1224de3d19dfc318f33c2cbd1c13416a0740007a8a35f07a3f3a76b7",
24
+ "bytes": 649363
25
25
  },
26
26
  "svg": {
27
- "sha256": "040fc511d09be1532ff7173baf46a98503e89734460a516582426aa426eea888",
28
- "bytes": 211370
27
+ "sha256": "42571b1a2ffc1a97f6fd11875078603e72b6f0481648d30972381b74b05971e8",
28
+ "bytes": 211291
29
29
  }
30
30
  },
31
31
  "staticSvg": {
@@ -1,4 +1,4 @@
1
- <svg data-archify-version="2.15.0" data-forgeloop-source-sha256="3c35fbe4e144cd7fb60632996839bcf32b0b503e8a4add2270f29c3bf3e8a658" data-theme="dark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 850 900" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
1
+ <svg data-archify-version="2.15.0" data-forgeloop-source-sha256="3eb4ed7dc7566cf786311b230336b88ff214889ec5a86bb8f2cf0b629a50ae95" data-theme="dark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 850 900" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
2
2
  <style>
3
3
  .c-bg-rect { fill: var(--bg); }
4
4
  /* Keep boundary labels clear of the first node in each group. */
@@ -4802,8 +4802,8 @@
4802
4802
  <path data-edge-from="gates" data-edge-to="preflight" data-edge-key="4" data-edge-id="gates-preflight" data-composition-points="430,269;430,312;500,312;500,277" d="M 430 269 L 430 312 L 500 312 L 500 277" class="a-security" data-animate="edge" style="--step:4" stroke-width="1.4" marker-end="url(#arrowhead-security)"/>
4803
4803
  <path data-edge-from="preflight" data-edge-to="work" data-edge-key="5" data-edge-id="preflight-work" data-composition-points="500,277;500,290;500,290;500,341" d="M 500 277 L 500 290 L 500 290 L 500 341" class="a-emphasis" data-animate="edge" style="--step:5" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4804
4804
  <path data-edge-from="work" data-edge-to="evidence" data-edge-key="6" data-edge-id="work-evidence" data-composition-points="500,393;500,414;500,414;500,457" d="M 500 393 L 500 414 L 500 414 L 500 457" class="a-dashed" data-animate="edge" style="--step:6" stroke-width="1.4" marker-end="url(#arrowhead-dashed)"/>
4805
- <path data-edge-from="evidence" data-edge-to="review" data-edge-key="7" data-edge-id="evidence-review" data-composition-points="465,491;360,491;360,739;600,739" d="M 465 491 L 360 491 L 360 739 L 600 739" class="a-emphasis" data-animate="edge" style="--step:7" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4806
- <path data-edge-from="review" data-edge-to="valid" data-edge-key="8" data-edge-id="review-valid" data-composition-points="650,739;760,739;760,491;650,491" d="M 650 739 L 760 739 L 760 491 L 650 491" class="a-emphasis" data-animate="edge" style="--step:8" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4805
+ <path data-edge-from="evidence" data-edge-to="review" data-edge-key="7" data-edge-id="evidence-review" data-composition-points="500,525;500,600;500,600;500,713" d="M 500 525 L 500 600 L 500 600 L 500 713" class="a-emphasis" data-animate="edge" style="--step:7" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4806
+ <path data-edge-from="review" data-edge-to="valid" data-edge-key="8" data-edge-id="review-valid" data-composition-points="531,739;594,739" d="M 531 739 L 594 739" class="a-emphasis" data-animate="edge" style="--step:8" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
4807
4807
  <path data-edge-from="evidence" data-edge-to="diagnose" data-edge-key="9" data-edge-id="evidence-diagnose" data-composition-points="465,491;360,491;360,615;325,615" d="M 465 491 L 360 491 L 360 615 L 325 615" class="a-security" data-animate="edge" style="--step:12" stroke-width="1.4" marker-end="url(#arrowhead-security)"/>
4808
4808
  <path data-edge-from="diagnose" data-edge-to="correct" data-edge-key="10" data-edge-id="diagnose-correct" data-composition-points="275,615;167,615;167,615;245,615" d="M 275 615 L 167 615 L 167 615 L 245 615" class="a-dashed" data-animate="edge" style="--step:12" stroke-width="1.4" marker-end="url(#arrowhead-dashed)"/>
4809
4809
  <path data-edge-from="correct" data-edge-to="evidence" data-edge-key="11" data-edge-id="correct-evidence" data-composition-points="195,615;160,615;160,491;465,491" d="M 195 615 L 160 615 L 160 491 L 465 491" class="a-security" data-animate="edge" style="--step:12" stroke-width="1.4" marker-end="url(#arrowhead-security)"/>
@@ -4859,16 +4859,16 @@
4859
4859
  <text data-detail="fine" x="300" y="265" class="t-security" font-size="6.3" text-anchor="middle">fail closed</text>
4860
4860
  </g>
4861
4861
 
4862
- <g id="node-gates" data-node-id="gates" data-node-label="Claims" tabindex="0" role="button" aria-label="Focus Claims, Task + gates, Policy Boundary › Contract boundary › Route + authorize" aria-pressed="false" data-node-kind="security" data-node-sublabel="Task + gates" data-node-context="Policy Boundary › Contract boundary › Route + authorize">
4863
- <title>Claims · Task + gates · Policy Boundary › Contract boundary › Route + authorize</title>
4862
+ <g id="node-gates" data-node-id="gates" data-node-label="Gates" tabindex="0" role="button" aria-label="Focus Gates, claims + tasks, Policy Boundary › Contract boundary › Route + authorize" aria-pressed="false" data-node-kind="security" data-node-sublabel="claims + tasks" data-node-context="Policy Boundary › Contract boundary › Route + authorize">
4863
+ <title>Gates · claims + tasks · Policy Boundary › Contract boundary › Route + authorize</title>
4864
4864
  <rect x="399" y="217" width="62" height="52" rx="6" class="c-mask"/>
4865
4865
  <rect x="399" y="217" width="62" height="52" rx="6" class="c-security" data-animate="node" style="--step:4" stroke-width="1.5"/>
4866
4866
  <g aria-hidden="true" data-semantic-sigil="security" class="semantic-sigil s-security" transform="translate(405 223) scale(0.6875)">
4867
4867
  <path d="M8 2.2 13 4v3.5c0 3.1-1.8 5.4-5 6.5-3.2-1.1-5-3.4-5-6.5V4Z"/>
4868
4868
  <path d="m5.8 8 1.5 1.5 3-3"/>
4869
4869
  </g>
4870
- <text data-detail-anchor="true" x="430" y="238" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Claims</text>
4871
- <text data-detail="context" x="430" y="255" class="t-muted" font-size="7.5" text-anchor="middle">Task + gates</text>
4870
+ <text data-detail-anchor="true" x="430" y="238" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Gates</text>
4871
+ <text data-detail="context" x="430" y="255" class="t-muted" font-size="6.4" text-anchor="middle">claims + tasks</text>
4872
4872
  </g>
4873
4873
 
4874
4874
  <g id="node-preflight" data-node-id="preflight" data-node-label="READY" tabindex="0" role="button" aria-label="Focus READY, binding, Policy Boundary › Contract boundary › Route + authorize" aria-pressed="false" data-node-kind="security" data-node-sublabel="binding" data-node-tag="Preflight" data-node-context="Policy Boundary › Contract boundary › Route + authorize">
@@ -4884,15 +4884,15 @@
4884
4884
  <text data-detail="fine" x="500" y="265" class="t-security" font-size="7" text-anchor="middle">Preflight</text>
4885
4885
  </g>
4886
4886
 
4887
- <g id="node-work" data-node-id="work" data-node-label="Execution" tabindex="0" role="button" aria-label="Focus Execution, root + task, Resumable Execution › Route + authorize" aria-pressed="false" data-node-kind="backend" data-node-sublabel="root + task" data-node-context="Resumable Execution › Route + authorize">
4888
- <title>Execution · root + task · Resumable Execution › Route + authorize</title>
4887
+ <g id="node-work" data-node-id="work" data-node-label="Execute" tabindex="0" role="button" aria-label="Focus Execute, run task, Resumable Execution › Route + authorize" aria-pressed="false" data-node-kind="backend" data-node-sublabel="run task" data-node-context="Resumable Execution › Route + authorize">
4888
+ <title>Execute · run task · Resumable Execution › Route + authorize</title>
4889
4889
  <rect x="469" y="341" width="62" height="52" rx="6" class="c-mask"/>
4890
4890
  <rect x="469" y="341" width="62" height="52" rx="6" class="c-backend" data-animate="node" style="--step:6" stroke-width="1.5"/>
4891
4891
  <g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(475 347) scale(0.6875)">
4892
4892
  <path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
4893
4893
  </g>
4894
- <text data-detail-anchor="true" x="500" y="362" class="t-primary" font-size="10" font-weight="600" text-anchor="middle">Execution</text>
4895
- <text data-detail="context" x="500" y="379" class="t-muted" font-size="8" text-anchor="middle">root + task</text>
4894
+ <text data-detail-anchor="true" x="500" y="362" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Execute</text>
4895
+ <text data-detail="context" x="500" y="379" class="t-muted" font-size="8" text-anchor="middle">run task</text>
4896
4896
  </g>
4897
4897
 
4898
4898
  <g id="node-evidence" data-node-id="evidence" data-node-label="Evidence" tabindex="0" role="button" aria-label="Focus Evidence, run-check, Evidence Ledger › Evidence boundary › Route + authorize" aria-pressed="false" data-node-kind="database" data-node-sublabel="run-check" data-node-tag="observed" data-node-context="Evidence Ledger › Evidence boundary › Route + authorize">
@@ -4908,28 +4908,28 @@
4908
4908
  <text data-detail="fine" x="500" y="513" class="t-database" font-size="7" text-anchor="middle">observed</text>
4909
4909
  </g>
4910
4910
 
4911
- <g id="node-review" data-node-id="review" data-node-label="Review" tabindex="0" role="button" aria-label="Focus Review, drift, Review + Closure › Execute + verify" aria-pressed="false" data-node-kind="backend" data-node-sublabel="drift" data-node-context="Review + Closure › Execute + verify">
4912
- <title>Review · drift · Review + Closure › Execute + verify</title>
4913
- <rect x="600" y="713" width="50" height="52" rx="6" class="c-mask"/>
4914
- <rect x="600" y="713" width="50" height="52" rx="6" class="c-backend" data-animate="node" style="--step:8" stroke-width="1.5"/>
4915
- <g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(606 719) scale(0.6875)">
4911
+ <g id="node-review" data-node-id="review" data-node-label="Review" tabindex="0" role="button" aria-label="Focus Review, check drift, Review + Closure › Route + authorize" aria-pressed="false" data-node-kind="backend" data-node-sublabel="check drift" data-node-context="Review + Closure › Route + authorize">
4912
+ <title>Review · check drift · Review + Closure › Route + authorize</title>
4913
+ <rect x="469" y="713" width="62" height="52" rx="6" class="c-mask"/>
4914
+ <rect x="469" y="713" width="62" height="52" rx="6" class="c-backend" data-animate="node" style="--step:8" stroke-width="1.5"/>
4915
+ <g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(475 719) scale(0.6875)">
4916
4916
  <path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
4917
4917
  </g>
4918
- <text data-detail-anchor="true" x="625" y="734" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Review</text>
4919
- <text data-detail="context" x="625" y="751" class="t-muted" font-size="8" text-anchor="middle">drift</text>
4918
+ <text data-detail-anchor="true" x="500" y="734" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Review</text>
4919
+ <text data-detail="context" x="500" y="751" class="t-muted" font-size="8" text-anchor="middle">check drift</text>
4920
4920
  </g>
4921
4921
 
4922
- <g id="node-valid" data-node-id="valid" data-node-label="VALID" tabindex="0" role="button" aria-label="Focus VALID, completion, Evidence Ledger › Evidence boundary › Execute + verify" aria-pressed="false" data-node-kind="database" data-node-sublabel="completion" data-node-tag="claim" data-node-context="Evidence Ledger › Evidence boundary › Execute + verify">
4923
- <title>VALID · completion · Evidence Ledger › Evidence boundary › Execute + verify · claim</title>
4924
- <rect x="600" y="457" width="50" height="68" rx="6" class="c-mask"/>
4925
- <rect x="600" y="457" width="50" height="68" rx="6" class="c-database" data-animate="node" style="--step:9" stroke-width="1.5"/>
4926
- <g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(606 463) scale(0.6875)">
4922
+ <g id="node-valid" data-node-id="valid" data-node-label="VALID" tabindex="0" role="button" aria-label="Focus VALID, completion, Review + Closure › Execute + verify" aria-pressed="false" data-node-kind="database" data-node-sublabel="completion" data-node-tag="verified" data-node-context="Review + Closure › Execute + verify">
4923
+ <title>VALID · completion · Review + Closure › Execute + verify · verified</title>
4924
+ <rect x="594" y="705" width="62" height="68" rx="6" class="c-mask"/>
4925
+ <rect x="594" y="705" width="62" height="68" rx="6" class="c-database" data-animate="node" style="--step:9" stroke-width="1.5"/>
4926
+ <g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(600 711) scale(0.6875)">
4927
4927
  <ellipse cx="8" cy="4" rx="5" ry="2"/>
4928
4928
  <path d="M3 4v8c0 1.1 2.2 2 5 2s5-.9 5-2V4M3 8c0 1.1 2.2 2 5 2s5-.9 5-2"/>
4929
4929
  </g>
4930
- <text data-detail-anchor="true" x="625" y="478" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">VALID</text>
4931
- <text data-detail="context" x="625" y="495" class="t-muted" font-size="7" text-anchor="middle">completion</text>
4932
- <text data-detail="fine" x="625" y="513" class="t-database" font-size="7" text-anchor="middle">claim</text>
4930
+ <text data-detail-anchor="true" x="625" y="726" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">VALID</text>
4931
+ <text data-detail="context" x="625" y="743" class="t-muted" font-size="8" text-anchor="middle">completion</text>
4932
+ <text data-detail="fine" x="625" y="761" class="t-database" font-size="7" text-anchor="middle">verified</text>
4933
4933
  </g>
4934
4934
 
4935
4935
  <g id="node-diagnose" data-node-id="diagnose" data-node-label="Diagnose" tabindex="0" role="button" aria-label="Focus Diagnose, failure, Recovery + Stops › Reconcile before retry › Discover + scope" aria-pressed="false" data-node-kind="messagebus" data-node-sublabel="failure" data-node-context="Recovery + Stops › Reconcile before retry › Discover + scope">
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en" data-theme="dark" data-preset="signal-flow" data-present="true">
3
3
  <head>
4
- <meta name="forgeloop-diagram-source-sha256" content="ba0016d705a7d89be0cdff7529b29112e844ef806ae9f87a1bbff8db8c109043">
4
+ <meta name="forgeloop-diagram-source-sha256" content="86b11945f1ec4325f244c034d81f137646b508ceda5b11fce6729d4242365269">
5
5
  <meta name="forgeloop-diagram-renderer" content="archify@2.15.0 (e1ac748f19cf805e44bf74fb93c796662152e273)">
6
6
  <meta charset="UTF-8">
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -5375,6 +5375,7 @@
5375
5375
  </div>
5376
5376
  <ul>
5377
5377
  <li>&bull; AUTO uses CHANGED or CLAIMED only with a trusted scoped checker</li>
5378
+ <li>&bull; AUTO falls back to CLAIMED when changed paths cannot be safely narrowed and claims are valid; otherwise it falls back to FULL</li>
5378
5379
  <li>&bull; Without that capability, AUTO resolves safely to FULL</li>
5379
5380
  <li>&bull; Explicit CHANGED or CLAIMED without a checker returns unresolved</li>
5380
5381
  <li>&bull; A test name or file filter is not a canonical scope boundary</li>
@@ -15,16 +15,16 @@
15
15
  "license": "MIT"
16
16
  },
17
17
  "input": {
18
- "sha256": "ba0016d705a7d89be0cdff7529b29112e844ef806ae9f87a1bbff8db8c109043",
19
- "bytes": 8793
18
+ "sha256": "86b11945f1ec4325f244c034d81f137646b508ceda5b11fce6729d4242365269",
19
+ "bytes": 8930
20
20
  },
21
21
  "artifacts": {
22
22
  "html": {
23
- "sha256": "0a56559866acd7276b93977cb3308993e5ce043da29d911f2f52294b78a1bebd",
24
- "bytes": 646847
23
+ "sha256": "3d9fcd1bc6b6757ed88d0e4991913f7b1f746f04e8a649f006a29168960e06b6",
24
+ "bytes": 646999
25
25
  },
26
26
  "svg": {
27
- "sha256": "5c63af3190251de5b6268c62ea5a6ae6fb325fe20fd9a69e996a95566fe6ebd0",
27
+ "sha256": "9208211a2a7b66baa2c3671e8b6436aabc98f57e9771c33b39ec98c9bd6d8ca3",
28
28
  "bytes": 210148
29
29
  }
30
30
  },
@@ -1,4 +1,4 @@
1
- <svg data-archify-version="2.15.0" data-forgeloop-source-sha256="ba0016d705a7d89be0cdff7529b29112e844ef806ae9f87a1bbff8db8c109043" data-theme="dark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 850 900" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
1
+ <svg data-archify-version="2.15.0" data-forgeloop-source-sha256="86b11945f1ec4325f244c034d81f137646b508ceda5b11fce6729d4242365269" data-theme="dark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 850 900" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
2
2
  <style>
3
3
  .c-bg-rect { fill: var(--bg); }
4
4
  /* Keep boundary labels clear of the first node in each group. */
@@ -39,19 +39,23 @@ dark presentation so it remains legible in repository previews; the adjacent tex
39
39
  [`README.md`](../../README.md#architecture-flow) carries the same lifecycle
40
40
  semantics for text-only readers.
41
41
 
42
- Advisory context, including the optional Ripwire adapter, is intentionally not
43
- drawn as a lifecycle node or transition. It is a host-injected, explicit,
44
- non-evidence input that can guide inspection while remaining outside state,
45
- authority, verification, completion, and next-action decisions. Its boundary
46
- is documented in [`ADVISORY_CONTEXT.md`](../ADVISORY_CONTEXT.md) and
47
- [`RIPWIRE_ADAPTER.md`](../RIPWIRE_ADAPTER.md); keeping it out of these P0
48
- visuals prevents an optional side channel from being mistaken for protocol
49
- control flow.
42
+ Jev is shown only as a bounded semantic checkpoint outside lifecycle authority.
43
+ Its invocation is mandatory where required, but its typed result cannot advance
44
+ state, release claims, satisfy gates, create evidence, complete a task, or
45
+ authorize publication. Advisory context, including the optional Ripwire adapter,
46
+ is intentionally not drawn as a lifecycle node or transition. It is a
47
+ host-injected, explicit, non-evidence input that can guide inspection while
48
+ remaining outside state, authority, verification, completion, and next-action
49
+ decisions. Its boundary is documented in
50
+ [`ADVISORY_CONTEXT.md`](../ADVISORY_CONTEXT.md) and
51
+ [`RIPWIRE_ADAPTER.md`](../RIPWIRE_ADAPTER.md).
50
52
 
51
53
  Archify is vendored at `vendor/archify/v2.15.0/archify` under its MIT license.
52
54
  The exact source commit and cryptographic vendor-tree hash are recorded in
53
55
  `vendor/archify/v2.15.0/PIN.json`; generated-file hashes are recorded in the
54
- receipt and the visual approval binds the current source and SVG fingerprints.
56
+ receipt. A review file binds the current source and SVG fingerprints as a
57
+ review assertion; the checker does not independently authenticate the reviewer
58
+ or prove that a person inspected the rendered artifact.
55
59
 
56
60
  `PIN.json` uses ForgeLoop Archify PIN `schemaVersion: 2`. This version describes
57
61
  the metadata and integrity-declaration format and is independent of Archify's
@@ -422,7 +422,7 @@
422
422
  "dot": "rose",
423
423
  "title": "Trust Levels",
424
424
  "items": [
425
- "PROCESSED means artifacts exist and parse",
425
+ "PROCESSED is a minimum reported level; MISSING, DISABLED, and INVALID remain separate statuses",
426
426
  "VERIFIED means completion, evidence, manifest, and content bindings validate",
427
427
  "ATTESTED additionally requires a valid external signature policy",
428
428
  "No supplied CI receipt means NOT_VERIFIED, not a trust level"
@@ -208,8 +208,8 @@
208
208
  "lane": "policy",
209
209
  "col": 3,
210
210
  "type": "security",
211
- "label": "Claims",
212
- "sublabel": "Task + gates",
211
+ "label": "Gates",
212
+ "sublabel": "claims + tasks",
213
213
  "width": 62
214
214
  },
215
215
  {
@@ -227,8 +227,8 @@
227
227
  "lane": "execution",
228
228
  "col": 4,
229
229
  "type": "backend",
230
- "label": "Execution",
231
- "sublabel": "root + task",
230
+ "label": "Execute",
231
+ "sublabel": "run task",
232
232
  "width": 62
233
233
  },
234
234
  {
@@ -244,21 +244,21 @@
244
244
  {
245
245
  "id": "review",
246
246
  "lane": "closure",
247
- "col": 5,
247
+ "col": 4,
248
248
  "type": "backend",
249
249
  "label": "Review",
250
- "sublabel": "drift",
251
- "width": 50
250
+ "sublabel": "check drift",
251
+ "width": 62
252
252
  },
253
253
  {
254
254
  "id": "valid",
255
- "lane": "evidence",
255
+ "lane": "closure",
256
256
  "col": 5,
257
257
  "type": "database",
258
258
  "label": "VALID",
259
259
  "sublabel": "completion",
260
- "tag": "claim",
261
- "width": 50
260
+ "tag": "verified",
261
+ "width": 62
262
262
  },
263
263
  {
264
264
  "id": "diagnose",
@@ -349,20 +349,15 @@
349
349
  "from": "evidence",
350
350
  "to": "review",
351
351
  "variant": "emphasis",
352
- "fromSide": "left",
353
- "toSide": "left",
354
- "route": "return-left",
355
- "channelX": 360
352
+ "fromSide": "bottom",
353
+ "toSide": "top",
354
+ "route": "drop"
356
355
  },
357
356
  {
358
357
  "id": "review-valid",
359
358
  "from": "review",
360
359
  "to": "valid",
361
- "variant": "emphasis",
362
- "fromSide": "right",
363
- "toSide": "right",
364
- "route": "outside-right",
365
- "channelX": 760
360
+ "variant": "emphasis"
366
361
  },
367
362
  {
368
363
  "id": "evidence-diagnose",
@@ -415,6 +410,7 @@
415
410
  "Execution starts only after PREFLIGHT_READY",
416
411
  "Workspace binding is optional but blocks mismatched execution",
417
412
  "Failures return to diagnosis before another claim",
413
+ "Evidence-only completion rejection reopens verification from review",
418
414
  "Completion is validator-backed, not inferred from a screenshot",
419
415
  "Blocked pre-execution refresh requires a valid ledger and revised route"
420
416
  ]
@@ -440,6 +436,15 @@
440
436
  "Matching task IDs never authorize cross-project transaction reuse"
441
437
  ]
442
438
  },
439
+ {
440
+ "dot": "violet",
441
+ "title": "Semantic checkpoint",
442
+ "items": [
443
+ "Jev is mandatory at required semantic checkpoints",
444
+ "Typed Jev output is bounded non-authoritative input",
445
+ "Jev cannot advance lifecycle, release claims, create evidence, or complete"
446
+ ]
447
+ },
443
448
  {
444
449
  "dot": "emerald",
445
450
  "title": "Portable output",
@@ -369,6 +369,7 @@
369
369
  "title": "Fail-Closed Narrowing",
370
370
  "items": [
371
371
  "AUTO uses CHANGED or CLAIMED only with a trusted scoped checker",
372
+ "AUTO falls back to CLAIMED when changed paths cannot be safely narrowed and claims are valid; otherwise it falls back to FULL",
372
373
  "Without that capability, AUTO resolves safely to FULL",
373
374
  "Explicit CHANGED or CLAIMED without a checker returns unresolved",
374
375
  "A test name or file filter is not a canonical scope boundary"
@@ -3,8 +3,8 @@
3
3
  "diagramId": "forgeloop-code-attestation-flow",
4
4
  "status": "approved",
5
5
  "binding": {
6
- "sourceSha256": "33bb9c3c4f3fb4a793febeab34b2d07ca7bf2c058d4f5e7575dba3a6065eedeb",
7
- "svgSha256": "3a768148886ffdfcce75221c11e51ee77a3702510e90917bf6e8ba0581ebdb44"
6
+ "sourceSha256": "eb8ca8fdfceb9e50cf7cd07be8622dcac127cfee80c8e2929d604c40138cc594",
7
+ "svgSha256": "876c6400a34f9fe9773e61d968ddf773669cc14153933de2b2ceccd4386506a7"
8
8
  },
9
9
  "checks": {
10
10
  "darkThemeLegible": true,
@@ -15,6 +15,6 @@
15
15
  "textFallbackEquivalent": true,
16
16
  "accessibleMetadataPresent": true
17
17
  },
18
- "reviewedBy": "Codex visual review",
19
- "reviewedAt": "2026-09-05"
18
+ "reviewedBy": "Visual review of desktop and narrow SVG previews",
19
+ "reviewedAt": "2026-09-24"
20
20
  }
@@ -3,8 +3,8 @@
3
3
  "diagramId": "forgeloop-engineering-flow",
4
4
  "status": "approved",
5
5
  "binding": {
6
- "sourceSha256": "3c35fbe4e144cd7fb60632996839bcf32b0b503e8a4add2270f29c3bf3e8a658",
7
- "svgSha256": "040fc511d09be1532ff7173baf46a98503e89734460a516582426aa426eea888"
6
+ "sourceSha256": "3eb4ed7dc7566cf786311b230336b88ff214889ec5a86bb8f2cf0b629a50ae95",
7
+ "svgSha256": "42571b1a2ffc1a97f6fd11875078603e72b6f0481648d30972381b74b05971e8"
8
8
  },
9
9
  "checks": {
10
10
  "darkThemeLegible": true,
@@ -15,6 +15,6 @@
15
15
  "textFallbackEquivalent": true,
16
16
  "accessibleMetadataPresent": true
17
17
  },
18
- "reviewedBy": "Codex visual review",
19
- "reviewedAt": "2026-09-09"
18
+ "reviewedBy": "Visual review of desktop and narrow SVG previews",
19
+ "reviewedAt": "2026-09-24"
20
20
  }
@@ -3,8 +3,8 @@
3
3
  "diagramId": "forgeloop-verification-trust-flow",
4
4
  "status": "approved",
5
5
  "binding": {
6
- "sourceSha256": "ba0016d705a7d89be0cdff7529b29112e844ef806ae9f87a1bbff8db8c109043",
7
- "svgSha256": "5c63af3190251de5b6268c62ea5a6ae6fb325fe20fd9a69e996a95566fe6ebd0"
6
+ "sourceSha256": "86b11945f1ec4325f244c034d81f137646b508ceda5b11fce6729d4242365269",
7
+ "svgSha256": "9208211a2a7b66baa2c3671e8b6436aabc98f57e9771c33b39ec98c9bd6d8ca3"
8
8
  },
9
9
  "checks": {
10
10
  "darkThemeLegible": true,
@@ -15,6 +15,6 @@
15
15
  "textFallbackEquivalent": true,
16
16
  "accessibleMetadataPresent": true
17
17
  },
18
- "reviewedBy": "Codex visual review",
19
- "reviewedAt": "2026-09-05"
18
+ "reviewedBy": "Visual review of desktop and narrow SVG previews",
19
+ "reviewedAt": "2026-09-24"
20
20
  }