@cassiomc1/forgeloop 1.10.0 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/DOCS_INDEX.md +12 -1
  2. package/LOOP_ENGINEERING.md +4 -4
  3. package/LOOP_SYSTEM_DESIGN.md +23 -0
  4. package/QUALITY_SCORECARD.md +2 -2
  5. package/README.md +22 -8
  6. package/docs/ADVISORY_CONTEXT.md +24 -0
  7. package/docs/AGENT_PROTOCOL_SUMMARY.md +1 -1
  8. package/docs/ARTIFACT_REFERENCE.md +15 -0
  9. package/docs/CODE_ATTESTATION.md +9 -0
  10. package/docs/DOCUMENTATION_GUIDE.md +4 -4
  11. package/docs/EXECUTION_PROFILE_BENCHMARKS.md +10 -0
  12. package/docs/MCP.md +13 -1
  13. package/docs/PACKAGE_CONTENTS.md +88 -0
  14. package/docs/RELEASE_CHECKLIST.md +10 -2
  15. package/docs/REVISION_PROVIDERS.md +9 -0
  16. package/docs/RIPWIRE_ADAPTER.md +189 -0
  17. package/docs/TROUBLESHOOTING.md +12 -0
  18. package/docs/assets/diagrams/forgeloop-code-attestation-flow.html +13 -2
  19. package/docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json +6 -6
  20. package/docs/assets/diagrams/forgeloop-code-attestation-flow.svg +10 -1
  21. package/docs/assets/diagrams/forgeloop-engineering-flow.html +22 -11
  22. package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
  23. package/docs/assets/diagrams/forgeloop-engineering-flow.svg +17 -8
  24. package/docs/assets/diagrams/forgeloop-verification-trust-flow.html +14 -3
  25. package/docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json +6 -6
  26. package/docs/assets/diagrams/forgeloop-verification-trust-flow.svg +10 -1
  27. package/docs/diagrams/README.md +26 -0
  28. package/docs/diagrams/forgeloop-code-attestation-flow.workflow.json +383 -57
  29. package/docs/diagrams/forgeloop-engineering-flow.workflow.json +374 -55
  30. package/docs/diagrams/forgeloop-verification-trust-flow.workflow.json +328 -47
  31. package/docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json +4 -4
  32. package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +4 -4
  33. package/docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json +4 -4
  34. package/package.json +14 -4
  35. package/scripts/CI_VALIDATORS.md +24 -0
  36. package/scripts/check-critical-coverage.mjs +9 -0
  37. package/src/adapters/ripwire/normalize.js +352 -0
  38. package/src/adapters/ripwire/process.js +248 -0
  39. package/src/adapters/ripwire/provider.js +245 -0
  40. package/src/commands/doctor.js +11 -10
  41. package/src/core/actions.js +2 -2
  42. package/src/core/advisory-context/service.js +36 -14
  43. package/src/core/approvals.js +2 -2
  44. package/src/core/artifacts.js +3 -3
  45. package/src/core/checks.js +0 -33
  46. package/src/core/completion.js +2 -2
  47. package/src/core/events.js +5 -5
  48. package/src/core/execution-profile.js +18 -5
  49. package/src/core/handoff-acceptance.js +10 -1
  50. package/src/core/next-action-pending-actions.js +255 -0
  51. package/src/core/next-action-phases.js +26 -764
  52. package/src/core/next-action-planned-phase.js +51 -0
  53. package/src/core/next-action-quality-guidance.js +19 -0
  54. package/src/core/next-action-recovery-phases.js +97 -0
  55. package/src/core/next-action-refresh.js +20 -0
  56. package/src/core/next-action-review-phase.js +189 -0
  57. package/src/core/next-action-verification-phase.js +192 -0
  58. package/src/core/task-recovery.js +2 -2
  59. package/src/core/transaction-maintenance.js +70 -0
  60. package/src/core/transaction.js +31 -10
  61. package/src/core/work-state.js +20 -11
  62. package/src/integration.d.ts +30 -3
  63. package/src/integration.js +2 -0
  64. package/src/core/cli-metadata.js +0 -23
  65. package/src/core/decision-classification.js +0 -55
  66. package/src/core/gates.js +0 -57
  67. package/src/core/workflow-compatibility.js +0 -151
@@ -1299,3 +1299,15 @@ current-cycle validation.
1299
1299
  | `E_WORKSPACE_IDENTITY_UNAVAILABLE` | A ForgeLoop boundary, artifact, provider, or attestation validation condition was not satisfied. | Inspect the structured command result, correct the named boundary or artifact, then retry the canonical command. |
1300
1300
 
1301
1301
  <!-- END FORGELOOP GENERATED: public-error-codes -->
1302
+
1303
+ ## Revised contract after a blocked preflight
1304
+
1305
+ Before execution starts, a revised contract and route can leave the old
1306
+ checkpoint stale. Run `forgeloop next --task <id> --json`. When the validated
1307
+ history ends in a blocked preflight and the new route binds the revised
1308
+ contract, it offers `clear-state` followed by `preflight`. Execute those in
1309
+ that order, satisfy any remaining gates, and require `READY` again.
1310
+
1311
+ This recovery guidance is unavailable after execution has started, for an
1312
+ invalid ledger, or when the new route does not match the contract. Preserve
1313
+ those barriers and follow the task's canonical recovery guidance.
@@ -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="669966fba9e69df0525a3581baa4e90075923dbe3069f81f706761a40abf9073">
4
+ <meta name="forgeloop-diagram-source-sha256" content="33bb9c3c4f3fb4a793febeab34b2d07ca7bf2c058d4f5e7575dba3a6065eedeb">
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">
@@ -40,6 +40,15 @@
40
40
  <style>
41
41
  /* Keep boundary labels clear of the first node in each group. */
42
42
  [data-composition-frame-kind="group"] + text { transform: translateY(-18px); }
43
+ @media (max-width: 720px) {
44
+ html:not([data-present="true"]) .toolbar {
45
+ top: 0;
46
+ right: 0;
47
+ width: 100%;
48
+ flex-wrap: wrap;
49
+ justify-content: flex-start;
50
+ }
51
+ }
43
52
 
44
53
  /* ==========================================================
45
54
  THEME VARIABLES — switch by toggling [data-theme] on <html>
@@ -4868,7 +4877,7 @@
4868
4877
  <p class="subtitle">Exact content binding from valid completion to read-only trust results</p>
4869
4878
  </div>
4870
4879
 
4871
- <script id="archify-guided-views-data" type="application/json">[{"id":"completion-to-manifest","label":"Completion to manifest","focus":["complete","receipt","manifest","captured"],"note":"Follow the transactional binding between valid completion evidence and exact source content."},{"id":"manifest-to-statement","label":"Manifest to statement","focus":["manifest","captured","statement","signing","bundle"],"note":"See how the deterministic code manifest becomes an in-toto Statement v1 and optional signature bundle."},{"id":"revision-range-coverage","label":"Revision-range coverage","focus":["base","provider","changed","attestations","union","range"],"note":"Inspect the separate changed-path coverage question and its gap or conflict result."}]</script>
4880
+ <script id="archify-guided-views-data" type="application/json">[{"id":"completion-to-manifest","label":"Completion to manifest","focus":["complete","receipt","manifest","captured"],"note":"Completion and exact-content evidence bind to the project and task. No supplied CI receipt means NOT_VERIFIED."},{"id":"manifest-to-statement","label":"Manifest to statement","focus":["manifest","captured","statement","signing","bundle"],"note":"See how the deterministic code manifest becomes an in-toto Statement v1 and optional signature bundle."},{"id":"revision-range-coverage","label":"Revision-range coverage","focus":["base","provider","changed","attestations","union","range"],"note":"Inspect the separate changed-path coverage question and its gap or conflict result."}]</script>
4872
4881
 
4873
4882
  <div class="guided-views no-print" id="guided-views" hidden aria-label="Guided diagram views">
4874
4883
  <button id="guided-view-prev" type="button" aria-label="Previous guided view" title="Previous guided view ([)">&#8592;</button>
@@ -5426,6 +5435,7 @@
5426
5435
  <li>&bull; PROCESSED means artifacts exist and parse</li>
5427
5436
  <li>&bull; VERIFIED means completion, evidence, manifest, and content bindings validate</li>
5428
5437
  <li>&bull; ATTESTED additionally requires a valid external signature policy</li>
5438
+ <li>&bull; No supplied CI receipt means NOT_VERIFIED, not a trust level</li>
5429
5439
  </ul>
5430
5440
  </div>
5431
5441
 
@@ -5438,6 +5448,7 @@
5438
5448
  <li>&bull; The manifest records one SHA-256 digest per changed source entry</li>
5439
5449
  <li>&bull; The in-toto statement binds the manifest to completion evidence</li>
5440
5450
  <li>&bull; Read-only verification never rewrites task state or ledger events</li>
5451
+ <li>&bull; Compaction preserves transaction manifests and event history</li>
5441
5452
  </ul>
5442
5453
  </div>
5443
5454
 
@@ -15,17 +15,17 @@
15
15
  "license": "MIT"
16
16
  },
17
17
  "input": {
18
- "sha256": "669966fba9e69df0525a3581baa4e90075923dbe3069f81f706761a40abf9073",
19
- "bytes": 7744
18
+ "sha256": "33bb9c3c4f3fb4a793febeab34b2d07ca7bf2c058d4f5e7575dba3a6065eedeb",
19
+ "bytes": 9857
20
20
  },
21
21
  "artifacts": {
22
22
  "html": {
23
- "sha256": "62666342ec4efbc295ed65f4450008ca5a39072d8a11ff7b8b675ab258711286",
24
- "bytes": 652836
23
+ "sha256": "85bb7abf910d3f6dd12037cfcd90c4b67f0aad4dca2b4cb21be1b0112cbdd92e",
24
+ "bytes": 653258
25
25
  },
26
26
  "svg": {
27
- "sha256": "0af63dd51683d07981fc681042c437377a78ae8a7e6a7175c18a1def02e6280a",
28
- "bytes": 216313
27
+ "sha256": "3a768148886ffdfcce75221c11e51ee77a3702510e90917bf6e8ba0581ebdb44",
28
+ "bytes": 216543
29
29
  }
30
30
  },
31
31
  "staticSvg": {
@@ -1,8 +1,17 @@
1
- <svg data-archify-version="2.15.0" data-forgeloop-source-sha256="669966fba9e69df0525a3581baa4e90075923dbe3069f81f706761a40abf9073" 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="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">
2
2
  <style>
3
3
  .c-bg-rect { fill: var(--bg); }
4
4
  /* Keep boundary labels clear of the first node in each group. */
5
5
  [data-composition-frame-kind="group"] + text { transform: translateY(-18px); }
6
+ @media (max-width: 720px) {
7
+ html:not([data-present="true"]) .toolbar {
8
+ top: 0;
9
+ right: 0;
10
+ width: 100%;
11
+ flex-wrap: wrap;
12
+ justify-content: flex-start;
13
+ }
14
+ }
6
15
 
7
16
  /* ==========================================================
8
17
  THEME VARIABLES — switch by toggling [data-theme] on &lt;html>
@@ -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="a83128a8639db5db497ac552cfdbc318839e6451c718581fbfcd064e3e869981">
4
+ <meta name="forgeloop-diagram-source-sha256" content="0bfd5bbf8d6bbeaec23db543deb1e99844321c77b3c7feb21ee0cc877bbba9a9">
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">
@@ -40,6 +40,15 @@
40
40
  <style>
41
41
  /* Keep boundary labels clear of the first node in each group. */
42
42
  [data-composition-frame-kind="group"] + text { transform: translateY(-18px); }
43
+ @media (max-width: 720px) {
44
+ html:not([data-present="true"]) .toolbar {
45
+ top: 0;
46
+ right: 0;
47
+ width: 100%;
48
+ flex-wrap: wrap;
49
+ justify-content: flex-start;
50
+ }
51
+ }
43
52
 
44
53
  /* ==========================================================
45
54
  THEME VARIABLES — switch by toggling [data-theme] on <html>
@@ -4865,10 +4874,10 @@
4865
4874
  <div class="pulse-dot"></div>
4866
4875
  <h1>ForgeLoop Evidence-First Engineering Flow</h1>
4867
4876
  </div>
4868
- <p class="subtitle">Typed intent → scoped work → observed evidence → validator-backed closure</p>
4877
+ <p class="subtitle">Structured intent → project-bound work → observed evidence → valid closure</p>
4869
4878
  </div>
4870
4879
 
4871
- <script id="archify-guided-views-data" type="application/json">[{"id":"contract-to-work","label":"Contract to work","focus":["request","profile","contract","route","gates","preflight","work"],"note":"Follow how a request becomes scoped, routed, and safe to execute."},{"id":"evidence-to-close","label":"Evidence to close","focus":["work","evidence","review","valid"],"note":"See the evidence and review boundary that makes completion trustworthy."},{"id":"recovery-loop","label":"Recovery loop","focus":["evidence","diagnose","correct","preflight","blocked"],"note":"Failures return to diagnosis and correction before another claim is made."}]</script>
4880
+ <script id="archify-guided-views-data" type="application/json">[{"id":"contract-to-work","label":"Contract to work","focus":["request","profile","contract","route","gates","preflight","work"],"note":"Structured obligations and explicit risks set the profile; exclusions do not create required actions."},{"id":"evidence-to-close","label":"Evidence to close","focus":["work","evidence","review","valid"],"note":"See the evidence and review boundary that makes completion trustworthy."},{"id":"recovery-loop","label":"Recovery loop","focus":["evidence","diagnose","correct","preflight","blocked"],"note":"Before execution, blocked refresh needs a valid ledger and revised route. Later failures use diagnosis and correction."}]</script>
4872
4881
 
4873
4882
  <div class="guided-views no-print" id="guided-views" hidden aria-label="Guided diagram views">
4874
4883
  <button id="guided-view-prev" type="button" aria-label="Previous guided view" title="Previous guided view ([)">&#8592;</button>
@@ -4911,9 +4920,9 @@
4911
4920
 
4912
4921
  <!-- Main Diagram -->
4913
4922
  <div class="diagram-container" data-detail-level="read">
4914
- <svg viewBox="0 0 720 900" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
4923
+ <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">
4915
4924
  <title id="archify-diagram-title">ForgeLoop Evidence-First Engineering Flow</title>
4916
- <desc id="archify-diagram-description">Typed intent → scoped work → observed evidence → validator-backed closure</desc>
4925
+ <desc id="archify-diagram-description">Structured intent → project-bound work → observed evidence → valid closure</desc>
4917
4926
  <!-- Definitions -->
4918
4927
  <defs>
4919
4928
  <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
@@ -5065,19 +5074,19 @@
5065
5074
  <text data-detail="fine" x="500" y="265" class="t-security" font-size="7" text-anchor="middle">Preflight</text>
5066
5075
  </g>
5067
5076
 
5068
- <g id="node-work" data-node-id="work" data-node-label="Execution" tabindex="0" role="button" aria-label="Focus Execution, checkpoint, Resumable Execution › Route + authorize" aria-pressed="false" data-node-kind="backend" data-node-sublabel="checkpoint" data-node-context="Resumable Execution › Route + authorize">
5069
- <title>Execution · checkpoint · Resumable Execution › Route + authorize</title>
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>
5070
5079
  <rect x="469" y="341" width="62" height="52" rx="6" class="c-mask"/>
5071
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"/>
5072
5081
  <g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(475 347) scale(0.6875)">
5073
5082
  <path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
5074
5083
  </g>
5075
5084
  <text data-detail-anchor x="500" y="362" class="t-primary" font-size="10" font-weight="600" text-anchor="middle">Execution</text>
5076
- <text data-detail="context" x="500" y="379" class="t-muted" font-size="8" text-anchor="middle">checkpoint</text>
5085
+ <text data-detail="context" x="500" y="379" class="t-muted" font-size="8" text-anchor="middle">root + task</text>
5077
5086
  </g>
5078
5087
 
5079
- <g id="node-evidence" data-node-id="evidence" data-node-label="Evidence" tabindex="0" role="button" aria-label="Focus Evidence, scope + checks, Evidence Ledger › Evidence boundary › Route + authorize" aria-pressed="false" data-node-kind="database" data-node-sublabel="scope + checks" data-node-tag="observed" data-node-context="Evidence Ledger › Evidence boundary › Route + authorize">
5080
- <title>Evidence · scope + checks · Evidence Ledger › Evidence boundary › Route + authorize · observed</title>
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">
5089
+ <title>Evidence · run-check · Evidence Ledger › Evidence boundary › Route + authorize · observed</title>
5081
5090
  <rect x="465" y="457" width="70" height="68" rx="6" class="c-mask"/>
5082
5091
  <rect x="465" y="457" width="70" height="68" rx="6" class="c-database" data-animate="node" style="--step:7" stroke-width="1.5"/>
5083
5092
  <g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(471 463) scale(0.6875)">
@@ -5085,7 +5094,7 @@
5085
5094
  <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"/>
5086
5095
  </g>
5087
5096
  <text data-detail-anchor x="500" y="478" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Evidence</text>
5088
- <text data-detail="context" x="500" y="495" class="t-muted" font-size="7.3" text-anchor="middle">scope + checks</text>
5097
+ <text data-detail="context" x="500" y="495" class="t-muted" font-size="8" text-anchor="middle">run-check</text>
5089
5098
  <text data-detail="fine" x="500" y="513" class="t-database" font-size="7" text-anchor="middle">observed</text>
5090
5099
  </g>
5091
5100
 
@@ -5383,6 +5392,7 @@
5383
5392
  <li>&bull; Workspace binding is optional but blocks mismatched execution</li>
5384
5393
  <li>&bull; Failures return to diagnosis before another claim</li>
5385
5394
  <li>&bull; Completion is validator-backed, not inferred from a screenshot</li>
5395
+ <li>&bull; Blocked pre-execution refresh requires a valid ledger and revised route</li>
5386
5396
  </ul>
5387
5397
  </div>
5388
5398
 
@@ -5396,6 +5406,7 @@
5396
5406
  <li>&bull; run-check binds exact commands to an execution reference</li>
5397
5407
  <li>&bull; record-check covers manual observations</li>
5398
5408
  <li>&bull; Drift reopens verification instead of being hidden</li>
5409
+ <li>&bull; Matching task IDs never authorize cross-project transaction reuse</li>
5399
5410
  </ul>
5400
5411
  </div>
5401
5412
 
@@ -15,17 +15,17 @@
15
15
  "license": "MIT"
16
16
  },
17
17
  "input": {
18
- "sha256": "a83128a8639db5db497ac552cfdbc318839e6451c718581fbfcd064e3e869981",
19
- "bytes": 7610
18
+ "sha256": "0bfd5bbf8d6bbeaec23db543deb1e99844321c77b3c7feb21ee0cc877bbba9a9",
19
+ "bytes": 9779
20
20
  },
21
21
  "artifacts": {
22
22
  "html": {
23
- "sha256": "55d71098d15a46778454d53690110195e0e923d37f34cb6c57fcc5e6601ab7ec",
24
- "bytes": 647796
23
+ "sha256": "251e09f3cc36d54c4b8567dd3e6dd8a890a2621cdd12667fb80cc61e7dbf4b7c",
24
+ "bytes": 648281
25
25
  },
26
26
  "svg": {
27
- "sha256": "37244a07cc862e3fe4a7188f5236a509a4adf565d5b785ba3c0932057ac6f3a8",
28
- "bytes": 211160
27
+ "sha256": "ef3effe7e756494c7dffef9ee315e970bbbdb9fddc0ee0a1e4bfccfbb0c05534",
28
+ "bytes": 211373
29
29
  }
30
30
  },
31
31
  "staticSvg": {
@@ -1,8 +1,17 @@
1
- <svg data-archify-version="2.15.0" data-forgeloop-source-sha256="a83128a8639db5db497ac552cfdbc318839e6451c718581fbfcd064e3e869981" data-theme="dark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 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="0bfd5bbf8d6bbeaec23db543deb1e99844321c77b3c7feb21ee0cc877bbba9a9" 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. */
5
5
  [data-composition-frame-kind="group"] + text { transform: translateY(-18px); }
6
+ @media (max-width: 720px) {
7
+ html:not([data-present="true"]) .toolbar {
8
+ top: 0;
9
+ right: 0;
10
+ width: 100%;
11
+ flex-wrap: wrap;
12
+ justify-content: flex-start;
13
+ }
14
+ }
6
15
 
7
16
  /* ==========================================================
8
17
  THEME VARIABLES — switch by toggling [data-theme] on &lt;html>
@@ -4723,7 +4732,7 @@
4723
4732
  </style>
4724
4733
  <rect width="100%" height="100%" class="c-bg-rect" />
4725
4734
  <title id="archify-diagram-title">ForgeLoop Evidence-First Engineering Flow</title>
4726
- <desc id="archify-diagram-description">Typed intent → scoped work → observed evidence → validator-backed closure</desc>
4735
+ <desc id="archify-diagram-description">Structured intent → project-bound work → observed evidence → valid closure</desc>
4727
4736
  <!-- Definitions -->
4728
4737
  <defs>
4729
4738
  <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
@@ -4875,19 +4884,19 @@
4875
4884
  <text data-detail="fine" x="500" y="265" class="t-security" font-size="7" text-anchor="middle">Preflight</text>
4876
4885
  </g>
4877
4886
 
4878
- <g id="node-work" data-node-id="work" data-node-label="Execution" tabindex="0" role="button" aria-label="Focus Execution, checkpoint, Resumable Execution › Route + authorize" aria-pressed="false" data-node-kind="backend" data-node-sublabel="checkpoint" data-node-context="Resumable Execution › Route + authorize">
4879
- <title>Execution · checkpoint · Resumable Execution › Route + authorize</title>
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>
4880
4889
  <rect x="469" y="341" width="62" height="52" rx="6" class="c-mask"/>
4881
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"/>
4882
4891
  <g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(475 347) scale(0.6875)">
4883
4892
  <path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
4884
4893
  </g>
4885
4894
  <text data-detail-anchor="true" x="500" y="362" class="t-primary" font-size="10" font-weight="600" text-anchor="middle">Execution</text>
4886
- <text data-detail="context" x="500" y="379" class="t-muted" font-size="8" text-anchor="middle">checkpoint</text>
4895
+ <text data-detail="context" x="500" y="379" class="t-muted" font-size="8" text-anchor="middle">root + task</text>
4887
4896
  </g>
4888
4897
 
4889
- <g id="node-evidence" data-node-id="evidence" data-node-label="Evidence" tabindex="0" role="button" aria-label="Focus Evidence, scope + checks, Evidence Ledger › Evidence boundary › Route + authorize" aria-pressed="false" data-node-kind="database" data-node-sublabel="scope + checks" data-node-tag="observed" data-node-context="Evidence Ledger › Evidence boundary › Route + authorize">
4890
- <title>Evidence · scope + checks · Evidence Ledger › Evidence boundary › Route + authorize · observed</title>
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">
4899
+ <title>Evidence · run-check · Evidence Ledger › Evidence boundary › Route + authorize · observed</title>
4891
4900
  <rect x="465" y="457" width="70" height="68" rx="6" class="c-mask"/>
4892
4901
  <rect x="465" y="457" width="70" height="68" rx="6" class="c-database" data-animate="node" style="--step:7" stroke-width="1.5"/>
4893
4902
  <g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(471 463) scale(0.6875)">
@@ -4895,7 +4904,7 @@
4895
4904
  <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"/>
4896
4905
  </g>
4897
4906
  <text data-detail-anchor="true" x="500" y="478" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Evidence</text>
4898
- <text data-detail="context" x="500" y="495" class="t-muted" font-size="7.3" text-anchor="middle">scope + checks</text>
4907
+ <text data-detail="context" x="500" y="495" class="t-muted" font-size="8" text-anchor="middle">run-check</text>
4899
4908
  <text data-detail="fine" x="500" y="513" class="t-database" font-size="7" text-anchor="middle">observed</text>
4900
4909
  </g>
4901
4910
 
@@ -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="6fe11b0530cc6640f7b0f07d0f2d7e5a1f961745491f39016b340bc354af0e79">
4
+ <meta name="forgeloop-diagram-source-sha256" content="ba0016d705a7d89be0cdff7529b29112e844ef806ae9f87a1bbff8db8c109043">
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">
@@ -40,6 +40,15 @@
40
40
  <style>
41
41
  /* Keep boundary labels clear of the first node in each group. */
42
42
  [data-composition-frame-kind="group"] + text { transform: translateY(-18px); }
43
+ @media (max-width: 720px) {
44
+ html:not([data-present="true"]) .toolbar {
45
+ top: 0;
46
+ right: 0;
47
+ width: 100%;
48
+ flex-wrap: wrap;
49
+ justify-content: flex-start;
50
+ }
51
+ }
43
52
 
44
53
  /* ==========================================================
45
54
  THEME VARIABLES — switch by toggling [data-theme] on <html>
@@ -4868,7 +4877,7 @@
4868
4877
  <p class="subtitle">Canonical scope planning before exact command execution</p>
4869
4878
  </div>
4870
4879
 
4871
- <script id="archify-guided-views-data" type="application/json">[{"id":"scope-resolution","label":"Resolve verification scope","focus":["claims","changes","checker","cycle","fingerprints","scope"],"note":"Follow the trusted inputs that determine whether a checker may narrow its execution."},{"id":"exact-execution","label":"Bind exact execution","focus":["scope","argv","observed"],"note":"See how the resolved scope binds the exact argv and observed execution evidence."},{"id":"fail-closed","label":"Fail closed when trust is missing","focus":["checker","full","unresolved","reject"],"note":"No trusted checker means AUTO uses FULL; explicit narrowing without one is unresolved."}]</script>
4880
+ <script id="archify-guided-views-data" type="application/json">[{"id":"scope-resolution","label":"Resolve verification scope","focus":["claims","changes","checker","cycle","fingerprints","scope"],"note":"Follow the trusted inputs that determine whether a checker may narrow its execution."},{"id":"exact-execution","label":"Bind exact execution","focus":["scope","argv","observed"],"note":"run-check proves execution; manual-review is explicit. Test filters do not establish canonical verification scope."},{"id":"fail-closed","label":"Fail closed when trust is missing","focus":["checker","full","unresolved","reject"],"note":"No trusted checker means AUTO uses FULL; explicit narrowing without one is unresolved."}]</script>
4872
4881
 
4873
4882
  <div class="guided-views no-print" id="guided-views" hidden aria-label="Guided diagram views">
4874
4883
  <button id="guided-view-prev" type="button" aria-label="Previous guided view" title="Previous guided view ([)">&#8592;</button>
@@ -4911,7 +4920,7 @@
4911
4920
 
4912
4921
  <!-- Main Diagram -->
4913
4922
  <div class="diagram-container" data-detail-level="read">
4914
- <svg viewBox="0 0 720 900" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
4923
+ <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">
4915
4924
  <title id="archify-diagram-title">ForgeLoop Verification Trust Flow</title>
4916
4925
  <desc id="archify-diagram-description">Canonical scope planning before exact command execution</desc>
4917
4926
  <!-- Definitions -->
@@ -5368,6 +5377,7 @@
5368
5377
  <li>&bull; AUTO uses CHANGED or CLAIMED only with a trusted scoped checker</li>
5369
5378
  <li>&bull; Without that capability, AUTO resolves safely to FULL</li>
5370
5379
  <li>&bull; Explicit CHANGED or CLAIMED without a checker returns unresolved</li>
5380
+ <li>&bull; A test name or file filter is not a canonical scope boundary</li>
5371
5381
  </ul>
5372
5382
  </div>
5373
5383
 
@@ -5380,6 +5390,7 @@
5380
5390
  <li>&bull; RevisionProvider changes and task claims are canonical inputs</li>
5381
5391
  <li>&bull; Contract, repository, and cycle fingerprints bind the scope</li>
5382
5392
  <li>&bull; argv prefix and selected paths are checked before launch</li>
5393
+ <li>&bull; Manual evidence declares manual-review; command metadata is not execution</li>
5383
5394
  </ul>
5384
5395
  </div>
5385
5396
 
@@ -15,17 +15,17 @@
15
15
  "license": "MIT"
16
16
  },
17
17
  "input": {
18
- "sha256": "6fe11b0530cc6640f7b0f07d0f2d7e5a1f961745491f39016b340bc354af0e79",
19
- "bytes": 6917
18
+ "sha256": "ba0016d705a7d89be0cdff7529b29112e844ef806ae9f87a1bbff8db8c109043",
19
+ "bytes": 8793
20
20
  },
21
21
  "artifacts": {
22
22
  "html": {
23
- "sha256": "9dee511d07c01b6570dbfe0e6127517813f7843056e7faa93af00b133b6e44ba",
24
- "bytes": 646396
23
+ "sha256": "0a56559866acd7276b93977cb3308993e5ce043da29d911f2f52294b78a1bebd",
24
+ "bytes": 646847
25
25
  },
26
26
  "svg": {
27
- "sha256": "e225c69f2ec90f403c394d88b5d41af75363c7fa336181ee85664f5d495f4555",
28
- "bytes": 209918
27
+ "sha256": "5c63af3190251de5b6268c62ea5a6ae6fb325fe20fd9a69e996a95566fe6ebd0",
28
+ "bytes": 210148
29
29
  }
30
30
  },
31
31
  "staticSvg": {
@@ -1,8 +1,17 @@
1
- <svg data-archify-version="2.15.0" data-forgeloop-source-sha256="6fe11b0530cc6640f7b0f07d0f2d7e5a1f961745491f39016b340bc354af0e79" data-theme="dark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 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="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">
2
2
  <style>
3
3
  .c-bg-rect { fill: var(--bg); }
4
4
  /* Keep boundary labels clear of the first node in each group. */
5
5
  [data-composition-frame-kind="group"] + text { transform: translateY(-18px); }
6
+ @media (max-width: 720px) {
7
+ html:not([data-present="true"]) .toolbar {
8
+ top: 0;
9
+ right: 0;
10
+ width: 100%;
11
+ flex-wrap: wrap;
12
+ justify-content: flex-start;
13
+ }
14
+ }
6
15
 
7
16
  /* ==========================================================
8
17
  THEME VARIABLES — switch by toggling [data-theme] on &lt;html>
@@ -39,6 +39,15 @@ 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.
50
+
42
51
  Archify is vendored at `vendor/archify/v2.15.0/archify` under its MIT license.
43
52
  The exact source commit and cryptographic vendor-tree hash are recorded in
44
53
  `vendor/archify/v2.15.0/PIN.json`; generated-file hashes are recorded in the
@@ -61,3 +70,20 @@ three workflow diagrams because the pinned wrapper currently maps only
61
70
  an explicit renderer mapping before it can be added as an active diagram.
62
71
  Additional safety-boundary, resume, or provider visuals remain intentionally
63
72
  deferred until their mappings are proven.
73
+
74
+ ## Current behavioral boundaries
75
+
76
+ The engineering explorer describes structured obligations, project/task-bound
77
+ transactions, and bounded refresh of blocked pre-execution checkpoints. Its
78
+ later correction loop still returns through verification.
79
+
80
+ The verification explorer distinguishes test filtering from a canonical
81
+ verification scope and executed command evidence from explicit manual review.
82
+ The attestation explorer distinguishes absent CI receipts (`NOT_VERIFIED`)
83
+ from attestation trust levels and notes that payload compaction preserves
84
+ transaction manifests and event history.
85
+
86
+ These explanations are part of the JSON sources and generated explorers;
87
+ matching textual fallbacks live in the README, revision-provider guide, and
88
+ attestation guide. Re-render before renewing a visual review, then inspect
89
+ the new output at desktop and narrow widths before binding the review hashes.