@cassiomc1/forgeloop 1.13.0 → 2.0.0-rc.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.
- package/AGENT_COMPATIBILITY.md +8 -0
- package/CONTRIBUTING.md +11 -7
- package/DOCS_INDEX.md +37 -4
- package/ENG/c-development-eng.md +2 -2
- package/ENG/cpp-development-eng.md +2 -2
- package/ENG/dotnet-aspnetcore-development-eng.md +7 -1
- package/ENG/flutter-development-eng.md +4 -2
- package/ENG/go-development-eng.md +2 -2
- package/ENG/java-development-eng.md +3 -3
- package/ENG/nodejs-backend-development-eng.md +10 -6
- package/ENG/php-development-eng.md +3 -3
- package/ENG/python-development-eng.md +205 -0
- package/ENG/rust-development-eng.md +42 -1
- package/ENG/sec-code-eng.md +7 -7
- package/ENG/sql-development-eng.md +4 -4
- package/ENG/swift-development-eng.md +5 -4
- package/ENG/test-code-eng.md +1 -1
- package/ENG/typescript-development-eng.md +4 -4
- package/EXECUTION_STATE.md +12 -0
- package/GUIDE_ROUTER.md +6 -0
- package/LICENSE +133 -21
- package/LOOP_ENGINEERING.md +28 -2
- package/LOOP_SYSTEM_DESIGN.md +10 -10
- package/ORCHESTRATOR_INTEGRATION.md +9 -5
- package/PROTOCOL_INTEGRATION.md +55 -2
- package/README.md +63 -59
- package/TERMINOLOGY.md +2 -0
- package/THIRD_PARTY_NOTICES.md +3 -4
- package/THREAT_MODEL.md +140 -1
- package/completions/_forgeloop +29 -3
- package/completions/forgeloop.bash +55 -3
- package/completions/forgeloop.fish +183 -1
- package/docs/ADVISORY_CONTEXT.md +25 -0
- package/docs/AGENT_BROWSER_ADAPTER.md +81 -0
- package/docs/AGENT_BROWSER_VERIFICATION.md +6 -0
- package/docs/AGENT_PROTOCOL_SUMMARY.md +74 -39
- package/docs/AGENT_SKILL.md +66 -0
- package/docs/ARTIFACT_REFERENCE.md +171 -35
- package/docs/AUDIT_UX.md +46 -0
- package/docs/BROWSER_VERIFICATION.md +136 -0
- package/docs/CLI_REFERENCE.md +512 -8
- package/docs/CODE_ATTESTATION.md +2 -2
- package/docs/DOCUMENTATION_GUIDE.md +34 -11
- package/docs/GETTING_STARTED.md +3 -3
- package/docs/JEV_BENCHMARKS.md +31 -0
- package/docs/MODEL_ROUTING.md +37 -0
- package/docs/OPENSRC_ADAPTER.md +241 -0
- package/docs/PACKAGE_CONTENTS.md +46 -18
- package/docs/PROVIDERS.md +126 -0
- package/docs/PROVIDER_ARCHITECTURE.md +199 -0
- package/docs/RECIPES.md +9 -0
- package/docs/RELEASE_CHECKLIST.md +116 -12
- package/docs/SECURITY_REVIEW.md +71 -0
- package/docs/SELF_HOSTED_TESTS.md +121 -0
- package/docs/SEMANTIC_DECISION_PLANE.md +71 -0
- package/docs/TEST_INTELLIGENCE.md +29 -0
- package/docs/TEST_PRUNING.md +14 -0
- package/docs/TROUBLESHOOTING.md +198 -1
- package/docs/UNIVERSAL_INTEGRATION.md +31 -0
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.html +2 -2
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json +5 -5
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.svg +1 -1
- package/docs/assets/diagrams/forgeloop-engineering-flow.html +39 -26
- package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
- package/docs/assets/diagrams/forgeloop-engineering-flow.svg +26 -26
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.html +2 -1
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json +5 -5
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.svg +1 -1
- package/docs/diagrams/README.md +13 -9
- package/docs/diagrams/forgeloop-code-attestation-flow.workflow.json +1 -1
- package/docs/diagrams/forgeloop-engineering-flow.workflow.json +24 -19
- package/docs/diagrams/forgeloop-verification-trust-flow.workflow.json +1 -0
- package/docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json +4 -4
- package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +4 -4
- package/docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json +4 -4
- package/docs/documentation-manifest.json +774 -16
- package/docs/protocol-requirements.json +24 -0
- package/package.json +43 -11
- package/schemas/config.schema.json +14 -0
- package/schemas/context-plan.schema.json +18 -0
- package/schemas/semantic-decision.schema.json +46 -0
- package/schemas/task-bundle.schema.json +7 -2
- package/schemas/test-utility.schema.json +44 -0
- package/scripts/CI_VALIDATORS.md +6 -6
- package/scripts/benchmark-jev.mjs +5 -0
- package/scripts/benchmark-test-intelligence.mjs +4 -0
- package/scripts/generate-agent-protocol-summary.mjs +6 -3
- package/scripts/generate-forgeloop-skill.mjs +133 -0
- package/scripts/jev-smoke.mjs +19 -0
- package/scripts/run-mcp-clean-tests.mjs +30 -0
- package/skills/forgeloop/README.md +9 -0
- package/skills/forgeloop/SKILL.md +77 -0
- package/skills/forgeloop/references/lifecycle.md +9 -0
- package/skills/forgeloop/references/recovery.md +7 -0
- package/skills/forgeloop/references/verification.md +7 -0
- package/src/adapters/agent-browser/assertions.js +47 -0
- package/src/adapters/agent-browser/commands.js +54 -0
- package/src/adapters/agent-browser/index.js +3 -0
- package/src/adapters/agent-browser/locator.js +40 -0
- package/src/adapters/agent-browser/process.js +215 -0
- package/src/adapters/agent-browser/provider.js +316 -0
- package/src/adapters/emulated-services/constants.js +24 -0
- package/src/adapters/emulated-services/index.js +7 -0
- package/src/adapters/emulated-services/process.js +162 -0
- package/src/adapters/emulated-services/provider.js +289 -0
- package/src/adapters/opensrc/normalize.js +90 -0
- package/src/adapters/opensrc/process.js +248 -0
- package/src/adapters/opensrc/provider.js +338 -0
- package/src/adapters/opensrc/search.js +264 -0
- package/src/adapters/temporary-paths.js +18 -0
- package/src/adapters/typesafe/client.js +28 -0
- package/src/adapters/typesafe/engine.js +63 -0
- package/src/adapters/typesafe/normalize.js +41 -0
- package/src/cli.js +218 -174
- package/src/commands/action-show.js +5 -2
- package/src/commands/advance.js +5 -1
- package/src/commands/baseline.js +13 -11
- package/src/commands/checkpoint-revalidate.js +192 -0
- package/src/commands/complete.js +19 -3
- package/src/commands/context-plan.js +38 -0
- package/src/commands/contract-create.js +266 -0
- package/src/commands/contract-revise.js +236 -0
- package/src/commands/decision-show.js +14 -0
- package/src/commands/decision-status.js +22 -0
- package/src/commands/discover.js +41 -0
- package/src/commands/doctor.js +51 -13
- package/src/commands/gate-record.js +194 -0
- package/src/commands/gate-revalidate.js +135 -0
- package/src/commands/handoff-list.js +6 -1
- package/src/commands/handoff-show.js +6 -1
- package/src/commands/migrate-protocol.js +2 -2
- package/src/commands/model-route.js +40 -0
- package/src/commands/next.js +7 -1
- package/src/commands/policy-diff.js +25 -4
- package/src/commands/progress.js +17 -11
- package/src/commands/record-diagnosis.js +3 -0
- package/src/commands/route.js +146 -18
- package/src/commands/semantic-plan.js +41 -0
- package/src/commands/status.js +6 -1
- package/src/commands/storage-backup.js +15 -0
- package/src/commands/storage-migrate.js +5 -0
- package/src/commands/storage-migration-resume.js +5 -0
- package/src/commands/storage-migration-status.js +44 -0
- package/src/commands/storage-restore-resume.js +7 -0
- package/src/commands/storage-restore.js +8 -0
- package/src/commands/task-abandon.js +224 -0
- package/src/commands/task-list.js +8 -43
- package/src/commands/task-migrate-contract-bootstrap-repair.js +288 -0
- package/src/commands/task-migrate.js +3 -3
- package/src/commands/task-recover.js +10 -2
- package/src/commands/task-repair-contract-bootstrap.js +263 -0
- package/src/commands/task-scope.js +18 -2
- package/src/commands/task-show.js +16 -2
- package/src/commands/test-inventory.js +5 -0
- package/src/commands/test-prune-plan.js +5 -0
- package/src/commands/test-prune-probe.js +5 -0
- package/src/commands/test-utility.js +5 -0
- package/src/commands/validate-protocol.js +39 -15
- package/src/commands/validate-receipt.js +8 -1
- package/src/config/guides.json +4 -0
- package/src/core/action-ledger-projection.js +10 -3
- package/src/core/actions.js +38 -75
- package/src/core/activation.js +11 -3
- package/src/core/approvals.js +17 -51
- package/src/core/artifact-registry.js +83 -2
- package/src/core/artifacts.js +81 -27
- package/src/core/attachment-paths.js +45 -0
- package/src/core/attestation-coverage.js +6 -1
- package/src/core/attestation-verifier.js +21 -2
- package/src/core/attestation.js +17 -6
- package/src/core/audit-ux.js +514 -0
- package/src/core/audit.js +6 -1
- package/src/core/browser-verification/constants.js +149 -0
- package/src/core/browser-verification/normalize.js +254 -0
- package/src/core/browser-verification/provider.js +519 -0
- package/src/core/browser-verification/service.js +115 -0
- package/src/core/bundles.js +160 -66
- package/src/core/checkpoint-revalidation.js +321 -0
- package/src/core/cli-command-definitions.js +350 -7
- package/src/core/code-manifest.js +9 -3
- package/src/core/command-executors.js +274 -108
- package/src/core/command-input.js +136 -44
- package/src/core/completion-artifacts.js +85 -34
- package/src/core/completion-ownership.js +19 -8
- package/src/core/completion-recovery-rebind.js +11 -1
- package/src/core/completion.js +64 -15
- package/src/core/config.js +3 -0
- package/src/core/conformance.js +2 -1
- package/src/core/context-compiler/budget.js +9 -0
- package/src/core/context-compiler/candidates.js +39 -0
- package/src/core/context-compiler/compiler.js +63 -0
- package/src/core/context-compiler/fingerprint.js +11 -0
- package/src/core/context-compiler/policy.js +13 -0
- package/src/core/context-compiler/result.js +23 -0
- package/src/core/continuity-lint.js +13 -2
- package/src/core/continuity-reconciliation.js +16 -3
- package/src/core/continuity.js +16 -8
- package/src/core/contract-bootstrap-recovery.js +656 -0
- package/src/core/contract-revision.js +209 -0
- package/src/core/decision/artifact.js +70 -0
- package/src/core/decision/benchmarks.js +103 -0
- package/src/core/decision/cache.js +27 -0
- package/src/core/decision/constants.js +58 -0
- package/src/core/decision/cutover.js +34 -0
- package/src/core/decision/engine.js +22 -0
- package/src/core/decision/errors.js +68 -0
- package/src/core/decision/events.js +104 -0
- package/src/core/decision/freshness.js +19 -0
- package/src/core/decision/normalizers/index.js +115 -0
- package/src/core/decision/policy.js +18 -0
- package/src/core/decision/projection.js +16 -0
- package/src/core/decision/question-registry.js +201 -0
- package/src/core/decision/request.js +26 -0
- package/src/core/decision/resolver.js +138 -0
- package/src/core/decision/result.js +58 -0
- package/src/core/decision/service.js +181 -0
- package/src/core/decision/state-builder.js +65 -0
- package/src/core/decision/task-bindings.js +35 -0
- package/src/core/decision/test-provider.js +32 -0
- package/src/core/decision/thresholds.js +15 -0
- package/src/core/diagnosis-model.js +11 -0
- package/src/core/diagnosis.js +10 -1
- package/src/core/diagnostic-projection.js +29 -12
- package/src/core/diagnostic-record.js +28 -3
- package/src/core/efficiency.js +6 -1
- package/src/core/error-codes.js +278 -0
- package/src/core/events.js +535 -147
- package/src/core/evidence-readiness.js +9 -0
- package/src/core/execution-prerequisites.js +36 -13
- package/src/core/execution-profile.js +63 -38
- package/src/core/execution.js +26 -40
- package/src/core/filesystem.js +11 -0
- package/src/core/gate-artifact.js +105 -19
- package/src/core/gate-provenance.js +125 -0
- package/src/core/handoff.js +26 -14
- package/src/core/history.js +39 -35
- package/src/core/hypothesis-projection.js +32 -0
- package/src/core/information-gain-projection.js +104 -100
- package/src/core/inspect.js +12 -3
- package/src/core/integration-invocation-policy.js +37 -4
- package/src/core/integration-resources.js +119 -87
- package/src/core/ledger-event-collection.js +189 -0
- package/src/core/ledger-relations.js +23 -0
- package/src/core/model-router/constants.js +10 -0
- package/src/core/model-router/policy.js +103 -0
- package/src/core/model-router/router.js +37 -0
- package/src/core/native-storage.js +12 -0
- package/src/core/next-action-continuity.js +31 -9
- package/src/core/next-action-model.js +58 -0
- package/src/core/next-action-phases.js +131 -43
- package/src/core/next-action-refresh.js +43 -9
- package/src/core/next-action-review-phase.js +9 -4
- package/src/core/next-action-verification-phase.js +2 -1
- package/src/core/next-action.js +56 -9
- package/src/core/phase.js +266 -103
- package/src/core/policy-engine.js +12 -13
- package/src/core/preflight-consistency.js +89 -62
- package/src/core/preflight-loaders.js +48 -9
- package/src/core/preflight-model.js +6 -1
- package/src/core/preflight.js +29 -12
- package/src/core/progress.js +21 -10
- package/src/core/protocol-info.js +68 -0
- package/src/core/protocol-migration.js +7 -6
- package/src/core/protocol.js +20 -0
- package/src/core/reconcile-closure.js +281 -67
- package/src/core/recovery-history.js +67 -47
- package/src/core/reflection.js +72 -77
- package/src/core/responsibility.js +25 -13
- package/src/core/resumability.js +154 -44
- package/src/core/route-artifact.js +28 -4
- package/src/core/router.js +67 -1
- package/src/core/runtime-context.js +123 -61
- package/src/core/schema-validation.js +11 -3
- package/src/core/security-review/constants.js +64 -0
- package/src/core/security-review/normalize.js +245 -0
- package/src/core/security-review/provider.js +204 -0
- package/src/core/security-review/service.js +134 -0
- package/src/core/semantic-planning/constants.js +19 -0
- package/src/core/semantic-planning/projection.js +94 -0
- package/src/core/semantic-planning/service.js +15 -0
- package/src/core/settlement.js +12 -1
- package/src/core/signing/bundle-file.js +53 -0
- package/src/core/signing/bundle-reference.js +15 -0
- package/src/core/signing/sigstore.js +60 -33
- package/src/core/signing/statement-file.js +27 -0
- package/src/core/sources.js +37 -0
- package/src/core/storage-runtime-registry.js +41 -0
- package/src/core/structural-quality/artifacts.js +20 -14
- package/src/core/structural-quality/service.js +81 -56
- package/src/core/target-layout.js +1 -1
- package/src/core/task-claim-state.js +249 -15
- package/src/core/task-command.js +21 -1
- package/src/core/task-conflict-inspection.js +133 -102
- package/src/core/task-descriptor.js +29 -22
- package/src/core/task-discovery.js +288 -90
- package/src/core/task-lock.js +66 -306
- package/src/core/task-migration-validation.js +5 -5
- package/src/core/task-migration.js +17 -287
- package/src/core/task-paths.js +13 -0
- package/src/core/task-recovery.js +1 -0
- package/src/core/task-snapshot.js +51 -8
- package/src/core/task-storage-migration.js +18 -0
- package/src/core/templates.js +23 -8
- package/src/core/test-intelligence/benchmarks.js +68 -0
- package/src/core/test-intelligence/inventory.js +73 -0
- package/src/core/test-intelligence/prune.js +94 -0
- package/src/core/test-intelligence/semantic-state.js +15 -0
- package/src/core/test-intelligence/service.js +40 -0
- package/src/core/test-intelligence/utility.js +50 -0
- package/src/core/trace.js +164 -105
- package/src/core/trajectory-evaluation.js +15 -3
- package/src/core/trajectory-metrics.js +47 -32
- package/src/core/transaction.js +16 -287
- package/src/core/verification-scope.js +20 -12
- package/src/core/work-state.js +100 -59
- package/src/integration.d.ts +492 -0
- package/src/integration.js +54 -0
- package/src/providers/README.md +47 -0
- package/src/providers/capabilities.js +46 -0
- package/src/providers/errors.js +15 -0
- package/src/providers/index.js +29 -0
- package/src/providers/json-snapshot.js +105 -0
- package/src/providers/registry.js +152 -0
- package/src/repository-index/binary-manager.js +7 -5
- package/src/storage/artifact-bytes.js +22 -0
- package/src/storage/attachment-binding.js +11 -0
- package/src/storage/attachment-files.js +82 -0
- package/src/storage/attachment-references.js +36 -0
- package/src/storage/backup.js +53 -0
- package/src/storage/capabilities.js +31 -0
- package/src/storage/connection-owner.js +119 -0
- package/src/storage/connection.js +376 -0
- package/src/storage/existing-project-scope.js +45 -0
- package/src/storage/export-destination.js +44 -0
- package/src/storage/exporter.js +284 -0
- package/src/storage/file-durability.js +46 -0
- package/src/storage/importer.js +461 -0
- package/src/storage/index.js +74 -0
- package/src/storage/leases.js +63 -0
- package/src/storage/ledger-event-snapshot.js +150 -0
- package/src/storage/ledger-relations.js +220 -0
- package/src/storage/legacy-maintenance-boundary.js +18 -0
- package/src/storage/legacy-signature.js +115 -0
- package/src/storage/maintenance-handoff.js +129 -0
- package/src/storage/maintenance-owner.js +42 -0
- package/src/storage/maintenance.js +310 -0
- package/src/storage/metadata-json.js +35 -0
- package/src/storage/migration-activate.js +59 -0
- package/src/storage/migration-archive.js +57 -0
- package/src/storage/migration-attachment-root.js +61 -0
- package/src/storage/migration-candidate.js +398 -0
- package/src/storage/migration-publication.js +143 -0
- package/src/storage/migration-rollback-admission.js +54 -0
- package/src/storage/migration-rollback-preparation.js +132 -0
- package/src/storage/migration-rollback-publication.js +183 -0
- package/src/storage/migration-rollback-release.js +66 -0
- package/src/storage/migration-rollback-source-stage.js +103 -0
- package/src/storage/migration-rollback.js +43 -0
- package/src/storage/migration-source-partition.js +56 -0
- package/src/storage/migration-source.js +255 -0
- package/src/storage/migration-terminal.js +39 -0
- package/src/storage/migration-validation.js +75 -0
- package/src/storage/migration.js +43 -0
- package/src/storage/operational-attachments.js +49 -0
- package/src/storage/operational-context.js +50 -0
- package/src/storage/project-backup.js +98 -0
- package/src/storage/project-bootstrap.js +24 -0
- package/src/storage/project-boundary.js +79 -0
- package/src/storage/project-read-snapshot.js +18 -0
- package/src/storage/project-replacement.js +137 -0
- package/src/storage/project-restore.js +203 -0
- package/src/storage/record-definitions.js +45 -0
- package/src/storage/repository.js +507 -0
- package/src/storage/restore-journal.js +62 -0
- package/src/storage/restore-layout.js +30 -0
- package/src/storage/restore-preparation.js +84 -0
- package/src/storage/restore-replacement-archive.js +162 -0
- package/src/storage/restore-replacement-owner.js +31 -0
- package/src/storage/restore-replacement-preparation.js +128 -0
- package/src/storage/restore-replacement.js +142 -0
- package/src/storage/restore-terminal.js +32 -0
- package/src/storage/runtime.js +31 -0
- package/src/storage/schema.js +214 -0
- package/src/storage/singleton-import.js +84 -0
- package/src/storage/snapshot-continuity.js +16 -0
- package/src/storage/snapshot.js +36 -0
- package/src/storage/storage-marker.js +79 -0
- package/src/storage/task-guards.js +107 -0
- package/src/storage/topology.js +42 -0
- package/src/storage/transaction.js +179 -0
- package/src/storage/unit-of-work.js +663 -0
- package/src/storage/windows-process-incarnation.js +206 -0
- package/.forgeloop/forgeloop.gitignore +0 -4
- package/LICENSE-DOCS.md +0 -13
- package/src/core/transaction-maintenance.js +0 -70
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Test intelligence
|
|
2
|
+
|
|
3
|
+
ForgeLoop discovers test units deterministically and assigns stable IDs from
|
|
4
|
+
framework, path, suite, and trimmed name. Utility analysis is non-evidence
|
|
5
|
+
data. The task-bound utility command sends bounded batches of actual test
|
|
6
|
+
metadata (including source summary, target file, framework, signals, and
|
|
7
|
+
runtime or branch-coverage fields when present; deterministic inventory
|
|
8
|
+
currently supplies them as `null`) to canonical Jev `TEST_UTILITY` decisions.
|
|
9
|
+
Each test receives its own bounded semantic judgment. Protected or
|
|
10
|
+
contract-linked tests are never prune-authorized, and missing or low-confidence
|
|
11
|
+
utility remains blocked.
|
|
12
|
+
|
|
13
|
+
An unprotected semantic duplicate with sufficient confidence is classified as a
|
|
14
|
+
`REDUNDANT_CANDIDATE` and may reach the isolated `PROBE_REMOVAL` stage. The
|
|
15
|
+
probe is non-destructive and does not authorize deletion; protected tests,
|
|
16
|
+
low-confidence candidates, unknown utility, and candidates requiring a second
|
|
17
|
+
review remain blocked or retained.
|
|
18
|
+
|
|
19
|
+
`test-utility` persists the non-evidence `test-utility.json` analysis under
|
|
20
|
+
the task namespace. The canonical task mutation may also persist bounded
|
|
21
|
+
semantic-decision artifacts and task transaction or ledger state required to
|
|
22
|
+
make the analysis task-bound and reproducible. It does not delete tests, alter
|
|
23
|
+
completion evidence, or authorize external work.
|
|
24
|
+
|
|
25
|
+
`npm run benchmark:test-intelligence` exercises the real utility classifier on
|
|
26
|
+
a deterministic labeled fixture for redundancy, obsolescence, protected-test
|
|
27
|
+
false positives, and deletion safety. It reports precision and recall from the
|
|
28
|
+
classifier's observed output against the labeled fixture and never grants
|
|
29
|
+
deletion authority.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Test pruning safety
|
|
2
|
+
|
|
3
|
+
`test-prune-plan` can return `KEEP`, `PROBE_REMOVAL`, or `BLOCKED`.
|
|
4
|
+
`PROBE_REMOVAL` requires both protected-test policy and sufficient deterministic
|
|
5
|
+
and semantic evidence. Unknown utility is `BLOCKED`.
|
|
6
|
+
|
|
7
|
+
The safe candidate boundary is an unprotected, high-confidence
|
|
8
|
+
`REDUNDANT_CANDIDATE`. Protected tests and low-confidence or ambiguous
|
|
9
|
+
recommendations remain `KEEP`/`BLOCKED`. The isolated probe is
|
|
10
|
+
non-destructive: it records an observation without editing the live worktree
|
|
11
|
+
or authorizing deletion.
|
|
12
|
+
|
|
13
|
+
`test-prune-probe` is fail-closed and must use an isolated disposable workspace.
|
|
14
|
+
No command in this feature deletes or edits a test in the live working tree.
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -12,6 +12,7 @@ This guide provides symptom-first recovery procedures for common ForgeLoop proto
|
|
|
12
12
|
- [`forgeloop next` returns `RECORD_DIAGNOSIS`](#symptom-forgeloop-next-returns-record_diagnosis)
|
|
13
13
|
- [Progress is `STALLED` or `forgeloop next` returns `CHANGE_STRATEGY`](#symptom-progress-is-stalled)
|
|
14
14
|
- [Protocol state or contract is `STALE`](#symptom-state-or-contract-is-stale)
|
|
15
|
+
- [A pre-execution checkpoint is stale because the repository moved](#symptom-a-pre-execution-checkpoint-is-stale-because-the-repository-moved)
|
|
15
16
|
- [Execution continuity is `STALE`](#symptom-continuity-is-stale)
|
|
16
17
|
- [Multiple tasks ambiguous (`E_TASK_AMBIGUOUS`)](#symptom-multiple-tasks-ambiguous)
|
|
17
18
|
- [Verification tool is missing (`E_VERIFICATION_TOOL_UNAVAILABLE`)](#symptom-verification-tool-is-missing)
|
|
@@ -329,6 +330,73 @@ the blocked preflight is resolved, `preflight` appends a fresh
|
|
|
329
330
|
details differ *without* an intervening BLOCKED outcome is still refused with
|
|
330
331
|
`E_PHASE_CHRONOLOGY_INVALID`.
|
|
331
332
|
|
|
333
|
+
### Symptom: A pre-execution checkpoint is stale because the repository moved
|
|
334
|
+
|
|
335
|
+
#### What it means
|
|
336
|
+
|
|
337
|
+
A `ROUTED` checkpoint has valid ownership, contract identity, route identity,
|
|
338
|
+
and no execution history, but its recorded repository branch or HEAD differs
|
|
339
|
+
from the current checkout. `next` returns `REVALIDATE_CHECKPOINT` with
|
|
340
|
+
`E_REPOSITORY_CHANGED` and `E_STATE_REVALIDATION_REQUIRED`.
|
|
341
|
+
|
|
342
|
+
#### Safe recovery
|
|
343
|
+
|
|
344
|
+
Run the canonical mutation:
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
forgeloop checkpoint-revalidate --task <id> --json
|
|
348
|
+
forgeloop next --task <id> --explain --json
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
The command derives the repository fingerprint from ForgeLoop while holding
|
|
352
|
+
the task mutation boundary. It preserves the phase, contract fingerprint,
|
|
353
|
+
route fingerprint, selected guides, gates, checks, and evidence. It does not
|
|
354
|
+
revise the contract, reroute the task, fabricate continuity or receipt
|
|
355
|
+
artifacts, or operate after `EXECUTION_STARTED`.
|
|
356
|
+
|
|
357
|
+
If the command fails with `E_CHECKPOINT_REVALIDATION_UNSAFE`, follow the named
|
|
358
|
+
contract, route, artifact, ownership, or lifecycle boundary. Do not edit
|
|
359
|
+
`work-state.json`, pass a caller-supplied branch or HEAD, or use
|
|
360
|
+
`reconcile-closure` for a `ROUTED` task.
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
### Symptom: The task contract must change before execution
|
|
365
|
+
|
|
366
|
+
#### What it means
|
|
367
|
+
|
|
368
|
+
The task is still before execution, but its objective, deliverables, or
|
|
369
|
+
constraints have changed. Existing route, preflight, gate, and plan evidence
|
|
370
|
+
must not authorize the new contract.
|
|
371
|
+
|
|
372
|
+
#### Safe recovery
|
|
373
|
+
|
|
374
|
+
Use exactly one bounded replacement source:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
forgeloop contract-revise --task <id> --preset <documentation|bug|feature|release> --json
|
|
378
|
+
forgeloop contract-revise --task <id> --contract-file <path> --json
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
The command appends `CONTRACT_REVISED` followed immediately by
|
|
382
|
+
`TRANSACTION_COMMITTED(operation=contract-revise)`, resets derived evidence,
|
|
383
|
+
and preserves the task descriptor claims. A `ROUTED` task must be routed and
|
|
384
|
+
preflighted again; a `PLANNED` task is rewound to `ROUTED` and must receive a
|
|
385
|
+
fresh canonical route, preflight, and plan. Historical checkpoint identity
|
|
386
|
+
remains valid only when later contract and route evolution is proven by the
|
|
387
|
+
canonical append-only provenance chain.
|
|
388
|
+
|
|
389
|
+
`previousStateFingerprint` and `revisedStateFingerprint` on `CONTRACT_REVISED`
|
|
390
|
+
are transition-time audit bindings. They are checked when the revision is the
|
|
391
|
+
current state transition and participate in append-only event integrity; they
|
|
392
|
+
are not treated as permanently frozen current-state identity after later
|
|
393
|
+
canonical mutations.
|
|
394
|
+
|
|
395
|
+
Contract revision is unavailable after `EXECUTION_STARTED` and for active
|
|
396
|
+
contract-bootstrap repair or migration anchors. Do not rewrite the contract,
|
|
397
|
+
state, route, or ledger files manually. If `next` reports a stale route,
|
|
398
|
+
reroute it with the normal `route` command before running preflight.
|
|
399
|
+
|
|
332
400
|
---
|
|
333
401
|
|
|
334
402
|
### Symptom: `EXECUTING`/`VERIFYING` task is stale because the repository moved (`E_REPOSITORY_CHANGED`)
|
|
@@ -346,7 +414,7 @@ forgeloop reconcile-closure --task <id> --id <verification-id> \
|
|
|
346
414
|
|
|
347
415
|
`reconcile-closure` requires:
|
|
348
416
|
|
|
349
|
-
1. The task is `EXECUTING`, `VERIFYING`, or `REVIEWING`. A `REVIEWING` task
|
|
417
|
+
1. The task is `EXECUTING`, `VERIFYING`, or `REVIEWING`. A `REVIEWING` task may use authorized completion recovery (a persisted evidence-only rejection bound to the current checkpoint), or, when no completion rejection exists, the narrow bootstrap path for repository-only drift. The bootstrap path does not change phase, append completion events, or release claims.
|
|
350
418
|
2. The only drift is `REPOSITORY_CHANGED` (contract or required-artifact drift stays blocked).
|
|
351
419
|
3. The append-only event ledger is valid.
|
|
352
420
|
4. `--id` and `--requirement` exactly match a `VERIFICATION` item of the task contract, and the executed command exits 0, proving the objective is present in the current repository.
|
|
@@ -361,6 +429,12 @@ forgeloop advance --task <id> --to REVIEWING
|
|
|
361
429
|
forgeloop complete --task <id>
|
|
362
430
|
```
|
|
363
431
|
|
|
432
|
+
The bootstrap path is intentionally narrower than completion recovery: contract
|
|
433
|
+
identity, required artifacts, ledger validity, and active claim ownership must
|
|
434
|
+
already be valid, and the freshness classifier must report exactly
|
|
435
|
+
`REPOSITORY_CHANGED`. Contract or artifact drift remains blocked and must use
|
|
436
|
+
its dedicated canonical recovery surface.
|
|
437
|
+
|
|
364
438
|
#### Drifted completion-rejection snapshots (`E_COMPLETION_REJECTION_STATE_FINGERPRINT_MISMATCH`)
|
|
365
439
|
|
|
366
440
|
A `REVIEWING` task with a persisted evidence-only completion rejection can lose
|
|
@@ -487,6 +561,38 @@ corrupt, or unreadable evidence fails closed as `INCONSISTENT`. A `REVIEWING`
|
|
|
487
561
|
phase plus an old timestamp alone is never `STALE`; post-execution tasks whose
|
|
488
562
|
only drift is `REPOSITORY_CHANGED` remain `RECOVERABLE`.
|
|
489
563
|
|
|
564
|
+
#### Contract bootstrap repair
|
|
565
|
+
|
|
566
|
+
When `next` reports `REPAIR_CONTRACT_BOOTSTRAP`, do not edit `events.ndjson` or
|
|
567
|
+
`work-state.json`. Run the official, explicitly acknowledged repair:
|
|
568
|
+
|
|
569
|
+
```bash
|
|
570
|
+
forgeloop task-repair-contract-bootstrap --task <task-id> --acknowledge-repair --json
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
Only the exact duplicate `CONTRACT_VALIDATED` signature is accepted. The command
|
|
574
|
+
preserves historical lines, reconstructs the proven `CONTRACT_READY` or `ROUTED`
|
|
575
|
+
checkpoint, and records an append-only marker. Tampered artifacts, unrelated
|
|
576
|
+
chronology errors, live locks, or later meaningful activity fail closed.
|
|
577
|
+
If the ledger already contains `ROUTE_VALIDATED`, the route artifact is
|
|
578
|
+
required and must remain valid and contract-bound; ForgeLoop never downgrades
|
|
579
|
+
that history to `CONTRACT_READY`. After repair, a changed route identity is
|
|
580
|
+
accepted only when the route/state pair is canonical and a later
|
|
581
|
+
`TRANSACTION_COMMITTED` event has `operation: "route"`.
|
|
582
|
+
|
|
583
|
+
When `next` reports `MIGRATE_CONTRACT_BOOTSTRAP_REPAIR`, run the official
|
|
584
|
+
caller-acknowledged migration:
|
|
585
|
+
|
|
586
|
+
```bash
|
|
587
|
+
forgeloop task-migrate-contract-bootstrap-repair --task <task-id> --acknowledge-migration --json
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
This path is limited to the legacy marker schema that predates
|
|
591
|
+
`reconstructedStateRevision`. It proves the current state and route against the
|
|
592
|
+
recorded reconstruction, appends a bound migration witness, and preserves the
|
|
593
|
+
legacy marker byte-for-byte. It does not accept progressed ledgers, ambiguous
|
|
594
|
+
markers, or unknown/corrupt lock ownership.
|
|
595
|
+
|
|
490
596
|
#### Safe recovery
|
|
491
597
|
|
|
492
598
|
Follow the classification:
|
|
@@ -1232,6 +1338,25 @@ package/process recovery boundary. The relevant stable codes are
|
|
|
1232
1338
|
`E_PERSISTENT_TRANSPORT_HOST_STALE`, and
|
|
1233
1339
|
`E_PERSISTENT_TRANSPORT_PROTOCOL_MISMATCH`.
|
|
1234
1340
|
|
|
1341
|
+
### Symptom: Security Review provider is unavailable or rejected
|
|
1342
|
+
|
|
1343
|
+
#### Error Codes: `E_SECURITY_REVIEW_PROVIDER_INVALID`, `E_SECURITY_REVIEW_PROVIDER_UNAVAILABLE`, `E_SECURITY_REVIEW_REQUEST_INVALID`, `E_SECURITY_REVIEW_RESULT_INVALID`, `E_SECURITY_REVIEW_TIMEOUT`, `E_SECURITY_REVIEW_CANCELLED`, `E_SECURITY_REVIEW_OUTPUT_LIMIT`, `E_SECURITY_REVIEW_EXECUTION_FAILED`
|
|
1344
|
+
|
|
1345
|
+
#### What it means
|
|
1346
|
+
|
|
1347
|
+
The optional Security Review Integration API provider was not registered,
|
|
1348
|
+
failed the strict provider/request/result contract, exceeded its shared
|
|
1349
|
+
deadline or output budget, was cancelled, or threw during observation. This
|
|
1350
|
+
surface is advisory and never blocks or authorizes ForgeLoop lifecycle.
|
|
1351
|
+
|
|
1352
|
+
#### Safe recovery
|
|
1353
|
+
|
|
1354
|
+
Register an explicit host-owned provider with a matching portable ID, use
|
|
1355
|
+
bounded project-relative request paths and limits, and make the provider honor
|
|
1356
|
+
the supplied `AbortSignal`. Do not install or discover a scanner through
|
|
1357
|
+
ForgeLoop, and do not treat findings as evidence, completion, commands, or
|
|
1358
|
+
canonical task state.
|
|
1359
|
+
|
|
1235
1360
|
## Stable Error and Reason Codes
|
|
1236
1361
|
|
|
1237
1362
|
<!-- BEGIN FORGELOOP GENERATED: public-error-codes -->
|
|
@@ -1298,6 +1423,17 @@ package/process recovery boundary. The relevant stable codes are
|
|
|
1298
1423
|
| `E_AUTHORITY_UNTRUSTED_SOURCE` | Authority file placed inside untrusted project tree. | Place authority file in host-managed trusted location. |
|
|
1299
1424
|
| `E_BASELINE_EXPANSION` | Attempted unauthorized addition of new violations to brownfield baseline. | Resolve new violations rather than expanding the baseline. |
|
|
1300
1425
|
| `E_BASELINE_RECORD_DURING_ACTIVE_TASK` | Cannot re-record baseline during an active task with policy snapshot. | Resolve new violations or use monotonic baseline --update. |
|
|
1426
|
+
| `E_BROWSER_VERIFICATION_CANCELLED` | Browser verification was cancelled by its caller before a valid observation completed. | Retry only when the caller still requires the optional observation. |
|
|
1427
|
+
| `E_BROWSER_VERIFICATION_EXECUTION_FAILED` | The optional browser provider process failed without establishing a valid observation. | Inspect the host-provided browser executable and retry; process success is not verification success. |
|
|
1428
|
+
| `E_BROWSER_VERIFICATION_ORIGIN_DENIED` | Browser verification navigation left the request origin allowlist. | Add the intended origin to allowedOrigins or correct the provider navigation result. |
|
|
1429
|
+
| `E_BROWSER_VERIFICATION_OUTPUT_LIMIT` | Browser verification output exceeded the configured character or item limit. | Reduce steps, assertions, snapshots, diagnostics, or artifacts at the provider. |
|
|
1430
|
+
| `E_BROWSER_VERIFICATION_PROVIDER_INVALID` | Browser verification provider configuration or interface implementation is invalid. | Use a provider implementing id, verify(input) with the documented browser-verification contract; verification is optional. |
|
|
1431
|
+
| `E_BROWSER_VERIFICATION_PROVIDER_UNAVAILABLE` | Requested browser verification provider is not registered in runtime context. | Register the provider in runtime context before verify, or proceed without browser verification; provider failure never blocks canonical lifecycle. |
|
|
1432
|
+
| `E_BROWSER_VERIFICATION_REQUEST_INVALID` | Browser verification request failed validation or exceeded budget. | Provide a bounded request with 1-8 https origins, 1-64 steps, 1-64 assertions, and timeoutMs within limits. |
|
|
1433
|
+
| `E_BROWSER_VERIFICATION_RESULT_INVALID` | Browser verification provider returned an invalid result structure. | Ensure provider returns a status with bounded assertions, diagnostics, and artifacts, and no authority fields. |
|
|
1434
|
+
| `E_BROWSER_VERIFICATION_TIMEOUT` | Browser verification exceeded its execution timeout. | Use a responsive provider or increase timeout within limits; verification is optional. |
|
|
1435
|
+
| `E_BROWSER_VERIFICATION_VERSION_UNSUPPORTED` | The configured Agent Browser version does not satisfy the provider's exact version contract. | Provide the expected host-qualified Agent Browser version or update the explicit executable selection. |
|
|
1436
|
+
| `E_CHECKPOINT_REVALIDATION_UNSAFE` | A pre-execution checkpoint could not be safely rebound to the current repository without changing lifecycle identity. | Preserve the checkpoint and resolve the reported contract, route, ownership, artifact, or lifecycle boundary through its canonical command. |
|
|
1301
1437
|
| `E_CHECK_INERT` | An enabled check has no effective scope or target files. | Provide an applicable target scope, configure matching files, or mark the rule unsupported. |
|
|
1302
1438
|
| `E_CHECK_INVALID` | Check structure or required parameters are invalid. | Provide valid check ID, requirement, and parameters. |
|
|
1303
1439
|
| `E_CHECK_MUTATION_EXECUTION_ERROR` | A policy checker threw an unhandled exception while evaluating its mutation fixture. | Repair the checker execution path and rerun rule verification. |
|
|
@@ -1319,14 +1455,39 @@ package/process recovery boundary. The relevant stable codes are
|
|
|
1319
1455
|
| `E_CONTINUITY_SCHEMA_UNSUPPORTED` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1320
1456
|
| `E_CONTINUITY_STATE_MISSING` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1321
1457
|
| `E_CONTINUITY_TASK_MISMATCH` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1458
|
+
| `E_CONTRACT_BOOTSTRAP_INCONSISTENT` | Contract bootstrap evidence is inconsistent and cannot be treated as a normal idempotent checkpoint. | Inspect the task ledger and use the exact official contract bootstrap repair only when next recommends it. |
|
|
1459
|
+
| `E_CONTRACT_BOOTSTRAP_REPAIR_AUTHORIZATION_REQUIRED` | The official contract bootstrap repair requires explicit caller acknowledgement. | Re-run with --acknowledge-repair after reviewing next and the exact defect signature. |
|
|
1460
|
+
| `E_CONTRACT_BOOTSTRAP_REPAIR_AVAILABLE` | The exact recognized contract bootstrap defect has an official append-only repair path. | Run forgeloop task-repair-contract-bootstrap --task <id> --acknowledge-repair. |
|
|
1461
|
+
| `E_CONTRACT_BOOTSTRAP_REPAIR_INVALID` | The contract bootstrap repair marker or its bound artifacts are invalid or tampered. | Restore the original artifacts from trusted evidence; ForgeLoop refuses to guess or rewrite history. |
|
|
1462
|
+
| `E_CONTRACT_BOOTSTRAP_REPAIR_MIGRATION_AUTHORIZATION_REQUIRED` | The legacy contract bootstrap repair migration requires fresh explicit caller acknowledgement. | Re-run with --acknowledge-migration after reviewing next and the exact legacy marker boundary. |
|
|
1463
|
+
| `E_CONTRACT_BOOTSTRAP_REPAIR_MIGRATION_AVAILABLE` | The exact legacy contract bootstrap repair marker has an official append-only migration path. | Run forgeloop task-migrate-contract-bootstrap-repair --task <id> --acknowledge-migration. |
|
|
1464
|
+
| `E_CONTRACT_BOOTSTRAP_REPAIR_MIGRATION_INVALID` | Legacy contract bootstrap repair migration was refused because its exact marker, state, route, lock, or ledger boundary could not be proven. | Inspect the structured migration errors; ambiguous or progressed historical ledgers remain inconsistent and are never rewritten. |
|
|
1465
|
+
| `E_CONTRACT_BOOTSTRAP_REPAIR_UNSAFE` | The historical contract bootstrap defect does not satisfy the narrow repair safety boundary. | Do not force repair; resolve the ledger inconsistency through a separately reviewed migration. |
|
|
1322
1466
|
| `E_CONTRACT_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1323
1467
|
| `E_CONTRACT_MISSING` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1324
1468
|
| `E_CONTRACT_STALE` | Contract modified after downstream artifacts were generated. | Re-run forgeloop route and forgeloop preflight. |
|
|
1325
1469
|
| `E_CONTRACT_UNRESOLVED_DECISION` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1326
1470
|
| `E_CONTRIBUTOR_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1327
1471
|
| `E_CONTRIBUTOR_REFERENCE_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1472
|
+
| `E_DECISION_CACHE_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1328
1473
|
| `E_DECISION_CRITERION_INVALID` | Decision settlement criterion details or parameters are malformed. | Provide non-empty decision text and settledBy criterion. |
|
|
1474
|
+
| `E_DECISION_ENGINE_AUTH_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1475
|
+
| `E_DECISION_ENGINE_AUTH_REQUIRED` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1476
|
+
| `E_DECISION_ENGINE_UNAVAILABLE` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1477
|
+
| `E_DECISION_LOW_CONFIDENCE` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1478
|
+
| `E_DECISION_MODEL_UNSUPPORTED` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1329
1479
|
| `E_DECISION_NOT_UNRESOLVED` | A settlement criterion referenced a decision not present in current unresolvedDecisions. | Use the exact current unresolved decision text or update the contract first. |
|
|
1480
|
+
| `E_DECISION_POLICY_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1481
|
+
| `E_DECISION_QUESTION_SET_STALE` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1482
|
+
| `E_DECISION_QUESTION_SET_UNKNOWN` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1483
|
+
| `E_DECISION_RATE_LIMITED` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1484
|
+
| `E_DECISION_REQUEST_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1485
|
+
| `E_DECISION_REQUIRED` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1486
|
+
| `E_DECISION_RESULT_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1487
|
+
| `E_DECISION_STALE` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1488
|
+
| `E_DECISION_STATE_LIMIT` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1489
|
+
| `E_DECISION_STATE_UNSAFE` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1490
|
+
| `E_DECISION_TIMEOUT` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1330
1491
|
| `E_DIAGNOSIS_CYCLE_MISMATCH` | Diagnosis verification cycle does not match the active work state verification cycle. | Record diagnosis for the current active verification cycle. |
|
|
1331
1492
|
| `E_DIAGNOSIS_EVIDENCE_INVALID` | Referenced diagnosis evidence is missing or has no failed checks in the current cycle. | Reference at least one failed or blocked check ID from the active verification cycle. |
|
|
1332
1493
|
| `E_DIAGNOSIS_INVALID` | Diagnosis record details or parameters are malformed. | Provide valid failureClass, hypothesis, evidenceRefs, settledBy, and nextSafeAction. |
|
|
@@ -1350,6 +1511,8 @@ package/process recovery boundary. The relevant stable codes are
|
|
|
1350
1511
|
| `E_FAILURE_SIGNATURE_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1351
1512
|
| `E_FUTURE_LIFECYCLE_EVIDENCE` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1352
1513
|
| `E_FUTURE_TERMINAL_EVIDENCE` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1514
|
+
| `E_GATE_INVALID` | Gate input or evidence artifact is invalid or unsafe. | Use project-relative regular artifact paths and valid gate evidence. |
|
|
1515
|
+
| `E_GATE_NOT_REQUIRED` | Requested gate is not required by the active route or policy. | Inspect the active route and record only a required gate. |
|
|
1353
1516
|
| `E_GATE_REQUIRED` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1354
1517
|
| `E_GATE_STALE` | Referenced gate artifact changed after approval. | Update artifact SHA-256 in gate file. |
|
|
1355
1518
|
| `E_GATE_UNVERIFIED` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
@@ -1389,6 +1552,7 @@ package/process recovery boundary. The relevant stable codes are
|
|
|
1389
1552
|
| `E_PERSISTENT_TRANSPORT_TIMEOUT` | A persistent-search connection, handshake, or request exceeded its bounded timeout. | Retry once through the ownership-checked recovery path and inspect host/index health if it persists. |
|
|
1390
1553
|
| `E_PERSISTENT_TRANSPORT_UNAVAILABLE` | The user-scoped persistent-search endpoint was not reachable. | ForgeLoop starts one verified local host and retries once; persistent failure is reported without an rg fallback. |
|
|
1391
1554
|
| `E_PHASE_CHRONOLOGY_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1555
|
+
| `E_PHASE_FREEZE` | The requested gate mutation is forbidden after execution begins. | Record required gates before entering EXECUTING. |
|
|
1392
1556
|
| `E_PHASE_PREREQUISITE_MISSING` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1393
1557
|
| `E_PHASE_TRANSITION_INVALID` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1394
1558
|
| `E_POLICY_DRIFT` | Active policy lock does not match the policy snapshot captured at task activation. | Re-verify affected checks or restore original policy. |
|
|
@@ -1467,6 +1631,14 @@ package/process recovery boundary. The relevant stable codes are
|
|
|
1467
1631
|
| `E_ROUTE_MISSING` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1468
1632
|
| `E_ROUTE_REASON_MISSING` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1469
1633
|
| `E_ROUTE_STALE` | Routing result does not match the active contract fingerprint. | Re-run forgeloop route. |
|
|
1634
|
+
| `E_SECURITY_REVIEW_CANCELLED` | Security review provider execution was cancelled before a valid observation completed. | Retry only when the caller still requires the optional observation. |
|
|
1635
|
+
| `E_SECURITY_REVIEW_EXECUTION_FAILED` | The optional security review provider failed without producing a valid observation. | Inspect the host-provided provider and retry explicitly; provider failure never changes ForgeLoop state. |
|
|
1636
|
+
| `E_SECURITY_REVIEW_OUTPUT_LIMIT` | Security review provider output exceeded the bounded result limits. | Reduce findings, diagnostics, strings, or result size at the provider. |
|
|
1637
|
+
| `E_SECURITY_REVIEW_PROVIDER_INVALID` | Security review provider configuration or interface implementation is invalid. | Use a provider implementing id and review(input) through the explicit host-injected Integration API. |
|
|
1638
|
+
| `E_SECURITY_REVIEW_PROVIDER_UNAVAILABLE` | The requested security review provider is not registered in runtime context. | Register an optional host-owned provider before explicit invocation; ForgeLoop never installs one. |
|
|
1639
|
+
| `E_SECURITY_REVIEW_REQUEST_INVALID` | The bounded security review request failed validation. | Provide explicit scope, bounded project-relative paths, categories, requirements, identities, and timeout. |
|
|
1640
|
+
| `E_SECURITY_REVIEW_RESULT_INVALID` | The security review provider returned malformed or contradictory findings. | Return only bounded findings and diagnostics without authority, lifecycle, evidence, or executable fields. |
|
|
1641
|
+
| `E_SECURITY_REVIEW_TIMEOUT` | Security review provider execution exceeded the shared deadline. | Use a responsive provider or a bounded timeout within the supported limit; timed-out output is discarded. |
|
|
1470
1642
|
| `E_STATE_LEDGER_DIVERGENCE` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1471
1643
|
| `E_STATE_MISSING` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1472
1644
|
| `E_STATE_MISSING_AFTER_PREFLIGHT_READY` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
@@ -1494,6 +1666,11 @@ package/process recovery boundary. The relevant stable codes are
|
|
|
1494
1666
|
| `E_STRUCTURAL_QUALITY_SOURCE_DRIFT` | Structural-quality evidence did not satisfy its provider, artifact, comparison, or lifecycle boundary. | Ensure the worktree is not mutated during provider observation and rerun quality-baseline or quality-verify. |
|
|
1495
1667
|
| `E_STRUCTURAL_QUALITY_SOURCE_FINGERPRINT_UNAVAILABLE` | Structural-quality evidence did not satisfy its provider, artifact, comparison, or lifecycle boundary. | Repair unreadable or unsafe source material before structural-quality evidence can be trusted. |
|
|
1496
1668
|
| `E_STRUCTURAL_QUALITY_TIMEOUT` | Structural-quality evidence did not satisfy its provider, artifact, comparison, or lifecycle boundary. | Use a responsive provider or a bounded timeout within the supported limit; never promote a timed-out scan. |
|
|
1669
|
+
| `E_TASK_ABANDON_AUTHORIZATION_REQUIRED` | task-abandon requires explicit caller acknowledgement and never grants completion or publication authority. | Re-run task-abandon with --acknowledge-abandonment after confirming the explicit task identity and intended claim release. |
|
|
1670
|
+
| `E_TASK_ABANDON_INCONSISTENT` | Explicit abandonment was refused because canonical ownership or append-only ledger evidence is inconsistent. | Repair and validate the task descriptor, recovery artifact, and ledger through their dedicated protocol paths before retrying. |
|
|
1671
|
+
| `E_TASK_ABANDON_INVALID_STATE` | The selected task is terminal or otherwise not eligible for explicit active-task abandonment. | Inspect task-show and next; only a valid non-terminal active task may be explicitly abandoned. |
|
|
1672
|
+
| `E_TASK_ABANDON_UNSAFE` | Task identity, lifecycle revision, ledger boundary, or claim ownership changed during explicit abandonment. | Re-inspect the task and retry only after the competing mutation has settled; never force claim release. |
|
|
1673
|
+
| `E_TASK_ALREADY_ABANDONED` | The task already has an active explicit-abandonment recovery boundary. | Inspect the existing recovery state; use task-resume only when explicit reacquisition is intended. |
|
|
1497
1674
|
| `E_TASK_ALREADY_EXISTS` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1498
1675
|
| `E_TASK_ALREADY_RECOVERED` | The task already has active durable recovered state. | Inspect the existing recovery metadata; use task-resume to reacquire claims or leave the task recovered. |
|
|
1499
1676
|
| `E_TASK_AMBIGUOUS` | Multiple tasks exist in the project but no task selector was provided. | Select a task explicitly using --task <id> or FORGELOOP_TASK=<id>. |
|
|
@@ -1556,3 +1733,23 @@ that order, satisfy any remaining gates, and require `READY` again.
|
|
|
1556
1733
|
This recovery guidance is unavailable after execution has started, for an
|
|
1557
1734
|
invalid ledger, or when the new route does not match the contract. Preserve
|
|
1558
1735
|
those barriers and follow the task's canonical recovery guidance.
|
|
1736
|
+
|
|
1737
|
+
## Gate Recording
|
|
1738
|
+
|
|
1739
|
+
When `preflight` reports `E_GATE_UNVERIFIED`, use the executable command returned
|
|
1740
|
+
by `next` or record the required gate directly:
|
|
1741
|
+
|
|
1742
|
+
```bash
|
|
1743
|
+
node src/cli.js gate-record \
|
|
1744
|
+
--task <task-id> \
|
|
1745
|
+
--gate threat-boundary \
|
|
1746
|
+
--status satisfied \
|
|
1747
|
+
--artifact THREAT_MODEL.md \
|
|
1748
|
+
--decision "Threat boundary reviewed for this task" \
|
|
1749
|
+
--json
|
|
1750
|
+
```
|
|
1751
|
+
|
|
1752
|
+
ForgeLoop validates that the gate is required by the active route or policy,
|
|
1753
|
+
rejects traversal and symlink escapes, and computes artifact hashes itself.
|
|
1754
|
+
Changed referenced files produce `E_GATE_STALE`; manual gate JSON editing is not
|
|
1755
|
+
supported. Caller-recorded decisions are observations, not host attestation.
|
|
@@ -67,6 +67,31 @@ may be absent only when the canonical protocol marks it not applicable;
|
|
|
67
67
|
presentation depth cannot change evidence, verification truth, authority,
|
|
68
68
|
provenance, safety-floor, or validator-backed completion requirements.
|
|
69
69
|
|
|
70
|
+
### Audit UX read model
|
|
71
|
+
|
|
72
|
+
The read-only `task/audit-view` resource provides a bounded operator-facing
|
|
73
|
+
projection of canonical status, audit, report, history, trace, ownership, next
|
|
74
|
+
action, approvals, diagnostics, recovery, and completion data. It is suitable
|
|
75
|
+
for timelines and audit panels, but it is not a lifecycle or evidence
|
|
76
|
+
authority:
|
|
77
|
+
|
|
78
|
+
```js
|
|
79
|
+
const view = await readForgeLoopIntegrationResource("task/audit-view", {
|
|
80
|
+
taskId: "task-1",
|
|
81
|
+
limit: 50,
|
|
82
|
+
categories: ["LIFECYCLE", "CHECK", "DIAGNOSTIC"],
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Timeline items use deterministic sequence-backed IDs and explicit `null`
|
|
87
|
+
timestamps when the ledger lacks an authoritative timestamp. `limit`,
|
|
88
|
+
`beforeSequence`, `afterSequence`, and category filters are bounded. Raw event
|
|
89
|
+
payloads, commands, environment values, credentials, absolute paths, and
|
|
90
|
+
provider output are not exposed. Reading the resource performs no command,
|
|
91
|
+
provider, artifact, claim, or lifecycle mutation. Use the canonical CLI/API
|
|
92
|
+
commands for every state-changing operation. See [`AUDIT_UX.md`](./AUDIT_UX.md)
|
|
93
|
+
for the complete projection contract.
|
|
94
|
+
|
|
70
95
|
### Repository Search boundary
|
|
71
96
|
|
|
72
97
|
The Integration API exposes direct, transport-neutral repository operations:
|
|
@@ -183,6 +208,12 @@ there is no stock `context-recall` command. A consumer that only understands
|
|
|
183
208
|
`canonicalHandoffs` v1 may disable only the handoff-specific UI while retaining
|
|
184
209
|
the rest of Protocol v1 functionality.
|
|
185
210
|
|
|
211
|
+
`advisoryContextProviders` v1 is the existing dedicated, lazy, opt-in
|
|
212
|
+
Integration API capability. `providerExtensions` v1 is the broader experimental
|
|
213
|
+
architecture vocabulary advertised by `protocol-info`. Generic provider
|
|
214
|
+
registry injection is not public yet; do not add a generic `providers` field
|
|
215
|
+
to `createForgeLoopContext()`.
|
|
216
|
+
|
|
186
217
|
## Consumers
|
|
187
218
|
|
|
188
219
|
| Surface | Entry |
|
|
@@ -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="
|
|
4
|
+
<meta name="forgeloop-diagram-source-sha256" content="eb8ca8fdfceb9e50cf7cd07be8622dcac127cfee80c8e2929d604c40138cc594">
|
|
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">
|
|
@@ -5432,7 +5432,7 @@
|
|
|
5432
5432
|
<h3>Trust Levels</h3>
|
|
5433
5433
|
</div>
|
|
5434
5434
|
<ul>
|
|
5435
|
-
<li>• PROCESSED
|
|
5435
|
+
<li>• PROCESSED is a minimum reported level; MISSING, DISABLED, and INVALID remain separate statuses</li>
|
|
5436
5436
|
<li>• VERIFIED means completion, evidence, manifest, and content bindings validate</li>
|
|
5437
5437
|
<li>• ATTESTED additionally requires a valid external signature policy</li>
|
|
5438
5438
|
<li>• No supplied CI receipt means NOT_VERIFIED, not a trust level</li>
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
"license": "MIT"
|
|
16
16
|
},
|
|
17
17
|
"input": {
|
|
18
|
-
"sha256": "
|
|
19
|
-
"bytes":
|
|
18
|
+
"sha256": "eb8ca8fdfceb9e50cf7cd07be8622dcac127cfee80c8e2929d604c40138cc594",
|
|
19
|
+
"bytes": 9910
|
|
20
20
|
},
|
|
21
21
|
"artifacts": {
|
|
22
22
|
"html": {
|
|
23
|
-
"sha256": "
|
|
24
|
-
"bytes":
|
|
23
|
+
"sha256": "58f12b47996c7e901dadbf60988e0a8aa9b4af3687e3924129e87f62a9a13f89",
|
|
24
|
+
"bytes": 653311
|
|
25
25
|
},
|
|
26
26
|
"svg": {
|
|
27
|
-
"sha256": "
|
|
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="
|
|
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="
|
|
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="
|
|
4996
|
-
<path data-edge-from="review" data-edge-to="valid" data-edge-key="8" data-edge-id="review-valid" data-composition-points="
|
|
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="
|
|
5053
|
-
<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">
|
|
5061
|
-
<text data-detail="context" x="430" y="255" class="t-muted" font-size="
|
|
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="
|
|
5078
|
-
<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="
|
|
5085
|
-
<text data-detail="context" x="500" y="379" class="t-muted" font-size="8" text-anchor="middle">
|
|
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 ›
|
|
5102
|
-
<title>Review · drift · Review + Closure ›
|
|
5103
|
-
<rect x="
|
|
5104
|
-
<rect x="
|
|
5105
|
-
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(
|
|
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="
|
|
5109
|
-
<text data-detail="context" x="
|
|
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,
|
|
5113
|
-
<title>VALID · completion ·
|
|
5114
|
-
<rect x="
|
|
5115
|
-
<rect x="
|
|
5116
|
-
<g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(
|
|
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="
|
|
5121
|
-
<text data-detail="context" x="625" y="
|
|
5122
|
-
<text data-detail="fine" x="625" y="
|
|
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>• Execution starts only after PREFLIGHT_READY</li>
|
|
5392
5392
|
<li>• Workspace binding is optional but blocks mismatched execution</li>
|
|
5393
5393
|
<li>• Failures return to diagnosis before another claim</li>
|
|
5394
|
+
<li>• Evidence-only completion rejection reopens verification from review</li>
|
|
5394
5395
|
<li>• Completion is validator-backed, not inferred from a screenshot</li>
|
|
5395
5396
|
<li>• 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>• Jev is mandatory at required semantic checkpoints</li>
|
|
5434
|
+
<li>• Typed Jev output is bounded non-authoritative input</li>
|
|
5435
|
+
<li>• 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>
|