@cassiomc1/forgeloop 1.3.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +1 -0
- package/AGENTS.md +1 -0
- package/CLAUDE.md +1 -0
- package/DOCS_INDEX.md +20 -8
- package/EXECUTION_STATE.md +60 -0
- package/LOOP_ENGINEERING.md +135 -5
- package/LOOP_SYSTEM_DESIGN.md +54 -1
- package/PROTOCOL_INTEGRATION.md +87 -0
- package/QUALITY_SCORECARD.md +2 -0
- package/README.md +69 -9
- package/TERMINOLOGY.md +15 -0
- package/THIRD_PARTY_NOTICES.md +30 -0
- package/THREAT_MODEL.md +59 -1
- package/docs/ARTIFACT_REFERENCE.md +183 -0
- package/docs/CLI_REFERENCE.md +391 -6
- package/docs/CROSS_HARNESS_CONTINUITY.md +23 -0
- package/docs/DIAGNOSTIC_MODEL.md +181 -0
- package/docs/DOCUMENTATION_GUIDE.md +36 -13
- package/docs/EXECUTION_TRACE.md +76 -0
- package/docs/GETTING_STARTED.md +1 -0
- package/docs/MCP.md +159 -0
- package/docs/RECIPES.md +149 -0
- package/docs/RELEASE_CHECKLIST_1_4.md +38 -0
- package/docs/RELEASE_CHECKLIST_1_5_MCP.md +78 -0
- package/docs/TROUBLESHOOTING.md +217 -3
- package/docs/UNIVERSAL_INTEGRATION.md +48 -0
- package/docs/assets/diagrams/forgeloop-engineering-flow.html +13797 -0
- package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +37 -0
- package/docs/assets/diagrams/forgeloop-engineering-flow.svg +5002 -0
- package/docs/diagrams/README.md +55 -0
- package/docs/diagrams/forgeloop-engineering-flow.workflow.json +122 -0
- package/docs/diagrams/manifest.json +42 -0
- package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +20 -0
- package/package.json +21 -8
- package/schemas/action.schema.json +100 -0
- package/schemas/approval.schema.json +51 -0
- package/schemas/capability-policy.schema.json +41 -0
- package/schemas/diagnostic-case.schema.json +85 -0
- package/schemas/execution-receipt.schema.json +16 -0
- package/schemas/hypothesis-disposition.schema.json +16 -0
- package/schemas/intervention.schema.json +27 -0
- package/schemas/policy-lock.schema.json +1 -0
- package/schemas/policy-snapshot.schema.json +2 -0
- package/schemas/task-recovery.schema.json +61 -0
- package/schemas/trajectory-evaluation.schema.json +64 -0
- package/schemas/trajectory-scenario.schema.json +42 -0
- package/src/cli.js +267 -347
- package/src/commands/action-authorize.js +41 -0
- package/src/commands/action-propose.js +10 -0
- package/src/commands/action-reconcile.js +10 -0
- package/src/commands/action-record.js +47 -0
- package/src/commands/action-show.js +10 -0
- package/src/commands/action-verify.js +10 -0
- package/src/commands/advance.js +7 -2
- package/src/commands/approval-request.js +64 -0
- package/src/commands/approval-resolve.js +10 -0
- package/src/commands/audit.js +5 -0
- package/src/commands/baseline.js +3 -3
- package/src/commands/eval.js +6 -0
- package/src/commands/history.js +18 -0
- package/src/commands/init.js +2 -2
- package/src/commands/inspect.js +55 -0
- package/src/commands/metrics.js +7 -0
- package/src/commands/next.js +8 -2
- package/src/commands/policy-discover.js +2 -2
- package/src/commands/progress.js +6 -2
- package/src/commands/record-diagnosis.js +37 -1
- package/src/commands/record-hypothesis-disposition.js +45 -0
- package/src/commands/record-intervention.js +35 -0
- package/src/commands/reflect.js +38 -0
- package/src/commands/report.js +9 -1
- package/src/commands/run-action.js +18 -0
- package/src/commands/status.js +17 -0
- package/src/commands/task-create.js +39 -1
- package/src/commands/task-list.js +14 -1
- package/src/commands/task-lock-status.js +2 -2
- package/src/commands/task-recover.js +202 -0
- package/src/commands/task-repair-legacy-recovery.js +417 -0
- package/src/commands/task-resume.js +172 -0
- package/src/commands/task-scope.js +23 -4
- package/src/commands/task-show.js +18 -4
- package/src/commands/trace.js +34 -0
- package/src/commands/validate-protocol.js +40 -15
- package/src/core/action-authorization.js +106 -0
- package/src/core/action-constants.js +86 -0
- package/src/core/action-execution.js +105 -0
- package/src/core/action-ledger-projection.js +302 -0
- package/src/core/action-model.js +581 -0
- package/src/core/action-readiness.js +141 -0
- package/src/core/action-reconciliation-policy.js +49 -0
- package/src/core/action-reconciliation.js +66 -0
- package/src/core/action-verification.js +111 -0
- package/src/core/actions.js +462 -0
- package/src/core/approvals.js +405 -0
- package/src/core/artifact-registry.js +60 -0
- package/src/core/audit.js +45 -4
- package/src/core/bundles.js +30 -0
- package/src/core/capability-policy.js +226 -0
- package/src/core/cli-command-definitions.js +260 -5
- package/src/core/command-executors.js +543 -0
- package/src/core/command-input.js +107 -0
- package/src/core/command-runtime.js +117 -0
- package/src/core/completion-artifacts.js +39 -15
- package/src/core/completion-ownership.js +88 -0
- package/src/core/completion-recovery-rebind.js +194 -0
- package/src/core/completion.js +70 -0
- package/src/core/continuity-reconciliation.js +24 -5
- package/src/core/diagnostic-model.js +396 -0
- package/src/core/diagnostic-projection.js +51 -0
- package/src/core/diagnostic-record.js +360 -0
- package/src/core/error-codes.js +461 -1
- package/src/core/events.js +171 -2
- package/src/core/execution-prerequisites.js +4 -1
- package/src/core/execution.js +26 -188
- package/src/core/failure-signature.js +70 -0
- package/src/core/failure-surface.js +57 -0
- package/src/core/filesystem.js +55 -6
- package/src/core/history.js +110 -0
- package/src/core/hypothesis-projection.js +85 -0
- package/src/core/information-gain-projection.js +283 -0
- package/src/core/information-gain.js +138 -0
- package/src/core/inspect.js +132 -7
- package/src/core/integration-invocation-policy.js +217 -0
- package/src/core/integration-limits.js +20 -0
- package/src/core/integration-resources.js +178 -0
- package/src/core/next-action-model.js +94 -0
- package/src/core/next-action.js +490 -3
- package/src/core/phase.js +42 -22
- package/src/core/policy-engine.js +113 -6
- package/src/core/preflight-consistency.js +31 -5
- package/src/core/preflight.js +19 -2
- package/src/core/prepared-execution.js +227 -0
- package/src/core/progress.js +41 -4
- package/src/core/project-root.js +21 -0
- package/src/core/protocol-info.js +61 -0
- package/src/core/protocol.js +14 -0
- package/src/core/receipt.js +1 -0
- package/src/core/reconcile-closure.js +35 -10
- package/src/core/recovery-history.js +116 -0
- package/src/core/reflection.js +305 -0
- package/src/core/resumability.js +57 -3
- package/src/core/schema-validation.js +9 -0
- package/src/core/strategy-analysis.js +97 -0
- package/src/core/task-claim-state.js +272 -0
- package/src/core/task-command.js +5 -1
- package/src/core/task-conflict-inspection.js +321 -0
- package/src/core/task-context.js +32 -29
- package/src/core/task-discovery.js +14 -1
- package/src/core/task-lock.js +216 -22
- package/src/core/task-paths.js +31 -2
- package/src/core/task-recovery-migration.js +192 -0
- package/src/core/task-recovery.js +205 -0
- package/src/core/task-scope.js +33 -1
- package/src/core/task-snapshot.js +53 -0
- package/src/core/templates.js +9 -0
- package/src/core/trace.js +548 -0
- package/src/core/trajectory-evaluation.js +71 -0
- package/src/core/trajectory-metrics.js +80 -0
- package/src/core/transaction.js +36 -2
- package/src/core/work-state.js +10 -5
- package/src/integration.js +47 -0
- package/docs/assets/forgeloop-flow.svg +0 -1
- package/docs/forgeloop-flow.mmd +0 -51
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -19,11 +19,13 @@ This guide provides symptom-first recovery procedures for common ForgeLoop proto
|
|
|
19
19
|
- [`forgeloop complete` returns `INCOMPLETE`](#symptom-forgeloop-complete-returns-incomplete)
|
|
20
20
|
- [`forgeloop complete` returns `INVALID`](#symptom-forgeloop-complete-returns-invalid)
|
|
21
21
|
- [Policy lock mismatch (`E_POLICY_LOCK_MISMATCH`)](#symptom-policy-lock-mismatch)
|
|
22
|
+
- [Capability policy epoch drift (`E_ACTION_POLICY_DRIFT`)](#symptom-capability-policy-epoch-drift)
|
|
22
23
|
- [Invalid policy artifacts fail closed (`E_POLICY_INVALID`)](#symptom-invalid-policy-artifacts-fail-closed)
|
|
23
24
|
- [Policy weakening detected (`E_POLICY_WEAKENING`)](#symptom-policy-weakening-detected)
|
|
24
25
|
- [Baseline re-record blocked during active task (`E_BASELINE_RECORD_DURING_ACTIVE_TASK`)](#symptom-baseline-re-record-blocked-during-active-task)
|
|
25
26
|
- [Mutation checker execution error (`E_CHECK_MUTATION_EXECUTION_ERROR`)](#symptom-mutation-checker-execution-error)
|
|
26
27
|
- [Another harness cannot resume the task](#symptom-another-harness-cannot-resume)
|
|
28
|
+
- [Task claim conflict or recovered task](#symptom-task-creation-blocked-by-a-write-claim-conflict-e_task_scope_conflict)
|
|
27
29
|
- [Stable Error & Reason Code Reference](#stable-error-and-reason-codes)
|
|
28
30
|
|
|
29
31
|
---
|
|
@@ -33,7 +35,7 @@ This guide provides symptom-first recovery procedures for common ForgeLoop proto
|
|
|
33
35
|
Confirm the local CLI's public metadata before diagnosing a harness/version
|
|
34
36
|
mismatch. This check does not create or mutate task state.
|
|
35
37
|
|
|
36
|
-
<!-- FORGELOOP EXAMPLE: troubleshooting:protocol-info | exit=0 | json.errors.0.code=
|
|
38
|
+
<!-- FORGELOOP EXAMPLE: troubleshooting:protocol-info | exit=0 | json.errors.0.code=E_ACTION_APPROVAL_NOT_REQUIRED -->
|
|
37
39
|
```bash
|
|
38
40
|
forgeloop protocol-info --json
|
|
39
41
|
```
|
|
@@ -202,6 +204,20 @@ forgeloop status --task <id> --json
|
|
|
202
204
|
forgeloop validate-protocol --task <id> --json
|
|
203
205
|
```
|
|
204
206
|
|
|
207
|
+
If a checkpoint must be recreated after `clear-state` (or loss), `preflight`
|
|
208
|
+
rebuilds a resumable checkpoint from the preserved contract and route artifacts.
|
|
209
|
+
The resume phase is derived from the validated ledger chronology: a ledger that
|
|
210
|
+
already records `EXECUTION_STARTED` (or a later verification milestone) resumes
|
|
211
|
+
at the phase that chronology supports instead of restarting at `ROUTED`, so no
|
|
212
|
+
duplicate non-repeatable lifecycle milestone is ever appended.
|
|
213
|
+
|
|
214
|
+
A `PREFLIGHT_READY` that was superseded by a later `PREFLIGHT_BLOCKED` outcome
|
|
215
|
+
(contract evolution, added gate requirement) does not block re-readiness: once
|
|
216
|
+
the blocked preflight is resolved, `preflight` appends a fresh
|
|
217
|
+
`PREFLIGHT_READY` bound to the current contract and route. A READY refresh whose
|
|
218
|
+
details differ *without* an intervening BLOCKED outcome is still refused with
|
|
219
|
+
`E_PHASE_CHRONOLOGY_INVALID`.
|
|
220
|
+
|
|
205
221
|
---
|
|
206
222
|
|
|
207
223
|
### Symptom: `EXECUTING`/`VERIFYING` task is stale because the repository moved (`E_REPOSITORY_CHANGED`)
|
|
@@ -219,7 +235,7 @@ forgeloop reconcile-closure --task <id> --id <verification-id> \
|
|
|
219
235
|
|
|
220
236
|
`reconcile-closure` requires:
|
|
221
237
|
|
|
222
|
-
1. The task is `EXECUTING` or `
|
|
238
|
+
1. The task is `EXECUTING`, `VERIFYING`, or `REVIEWING`. A `REVIEWING` task additionally requires authorized completion recovery (a persisted evidence-only rejection bound to the current checkpoint), or a rejection snapshot that can be rebound (see below).
|
|
223
239
|
2. The only drift is `REPOSITORY_CHANGED` (contract or required-artifact drift stays blocked).
|
|
224
240
|
3. The append-only event ledger is valid.
|
|
225
241
|
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.
|
|
@@ -234,7 +250,37 @@ forgeloop advance --task <id> --to REVIEWING
|
|
|
234
250
|
forgeloop complete --task <id>
|
|
235
251
|
```
|
|
236
252
|
|
|
253
|
+
#### Drifted completion-rejection snapshots (`E_COMPLETION_REJECTION_STATE_FINGERPRINT_MISMATCH`)
|
|
254
|
+
|
|
255
|
+
A `REVIEWING` task with a persisted evidence-only completion rejection can lose
|
|
256
|
+
its snapshot binding when the checkpoint is mutated after the rejection (for
|
|
257
|
+
example by a recovery/resume cycle or a repository move). Both sanctioned
|
|
258
|
+
closure paths — `reconcile-closure` from `REVIEWING` and the
|
|
259
|
+
`REVIEWING -> VERIFYING` recovery transition — then fail with
|
|
260
|
+
`E_COMPLETION_REJECTION_STATE_FINGERPRINT_MISMATCH`, while `complete` cannot
|
|
261
|
+
persist a fresh snapshot because it deduplicates logically identical rejections.
|
|
262
|
+
This deadlocks the task.
|
|
263
|
+
|
|
264
|
+
ForgeLoop resolves this with an append-only **rejection rebind**: when the only
|
|
265
|
+
authorization failures are state/receipt fingerprint mismatches and the
|
|
266
|
+
rejection's logical fields (`verificationCycle`, sorted `reasonCodes`, sorted
|
|
267
|
+
`missingRequirementIds`) are still identical between work-state and the latest
|
|
268
|
+
matching ledger rejection, the recovery surfaces automatically append a rebound
|
|
269
|
+
`COMPLETION_REJECTED` event carrying the current fingerprints (referencing the
|
|
270
|
+
snapshot it supersedes via `reboundFromStateFingerprint`) and re-bind the
|
|
271
|
+
execution receipt. The original rejection is never modified, any logical
|
|
272
|
+
difference is still refused, and closure must still produce fresh observed
|
|
273
|
+
evidence in the current repository.
|
|
274
|
+
|
|
237
275
|
Write claims release only when completion is validator-backed (`COMPLETE`).
|
|
276
|
+
A `phase: COMPLETE` that was never produced by the official completion pipeline
|
|
277
|
+
is not sufficient: the ownership resolver requires canonical lifecycle proof (a
|
|
278
|
+
validated ledger containing the task-bound `COMPLETION_VALIDATED` event with
|
|
279
|
+
coherent state). Unproven completion reports
|
|
280
|
+
`E_COMPLETION_OWNERSHIP_UNPROVEN` / `E_TASK_CLAIM_OWNERSHIP_INCONSISTENT`,
|
|
281
|
+
retains historical claims, and blocks mutation and overlapping acquisition.
|
|
282
|
+
Re-run the official completion pipeline or restore the canonical completion
|
|
283
|
+
event; never edit `work-state.json` by hand.
|
|
238
284
|
|
|
239
285
|
---
|
|
240
286
|
|
|
@@ -303,6 +349,94 @@ export FORGELOOP_TASK="<task-id>"
|
|
|
303
349
|
|
|
304
350
|
---
|
|
305
351
|
|
|
352
|
+
### Symptom: Task Creation Blocked by a Write-Claim Conflict (`E_TASK_SCOPE_CONFLICT`)
|
|
353
|
+
|
|
354
|
+
#### What it means
|
|
355
|
+
|
|
356
|
+
Another non-`COMPLETE` task already holds a write claim that overlaps the claims you requested. ForgeLoop inspects the conflicting task automatically before failing and attaches a deterministic classification to the error.
|
|
357
|
+
|
|
358
|
+
#### Inspect
|
|
359
|
+
|
|
360
|
+
The conflict error carries machine-readable fields directly on each
|
|
361
|
+
`error.conflicts[]` entry, plus the full nested `inspection`:
|
|
362
|
+
|
|
363
|
+
- `classification`: one of `ACTIVE`, `RECOVERABLE`, `STALE`, `ABANDONED`, `INCONSISTENT`, `RECOVERED`, or `COMPLETE`;
|
|
364
|
+
- `reasonCodes`: the deterministic evidence codes behind the classification;
|
|
365
|
+
- `nextAction`: the deterministic recovery or wait action;
|
|
366
|
+
- `commandSpecs`: direct-process command metadata and required inputs;
|
|
367
|
+
- `inspection`: the complete classification evidence.
|
|
368
|
+
|
|
369
|
+
Classification is derived from machine state only: the validated relationship
|
|
370
|
+
between descriptor, work state, recovery artifact, and complete recovery
|
|
371
|
+
history; lock/lease,
|
|
372
|
+
checkpoint freshness, drift kinds, ledger validity, all recorded check statuses,
|
|
373
|
+
verification evidence, meaningful ledger activity, and idle time. Lock state
|
|
374
|
+
distinguishes `NONE`, `LIVE`, `STALE`, `UNKNOWN`, and `CORRUPT`; unknown,
|
|
375
|
+
corrupt, or unreadable evidence fails closed as `INCONSISTENT`. A `REVIEWING`
|
|
376
|
+
phase plus an old timestamp alone is never `STALE`; post-execution tasks whose
|
|
377
|
+
only drift is `REPOSITORY_CHANGED` remain `RECOVERABLE`.
|
|
378
|
+
|
|
379
|
+
#### Safe recovery
|
|
380
|
+
|
|
381
|
+
Follow the classification:
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
# RECOVERABLE: reconcile through the official pipeline first
|
|
385
|
+
forgeloop reconcile-closure --task <task-id> --id <verification-id> \
|
|
386
|
+
--requirement "<exact contract verification text>" -- <command>
|
|
387
|
+
|
|
388
|
+
# STALE / ABANDONED only: caller-acknowledged claim release
|
|
389
|
+
forgeloop task-recover --task <task-id> --acknowledge-recovery --json
|
|
390
|
+
|
|
391
|
+
# RECOVERED: reacquire claims through normal ownership checks
|
|
392
|
+
forgeloop task-resume --task <task-id> --json
|
|
393
|
+
|
|
394
|
+
# INCONSISTENT: diagnose; do not force claim release
|
|
395
|
+
forgeloop validate-protocol --task <task-id> --json
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
`task-recover` uses an explicit allowlist: only `STALE` and `ABANDONED` are
|
|
399
|
+
accepted. It refuses `ACTIVE`, `RECOVERABLE`, `INCONSISTENT`, `RECOVERED`,
|
|
400
|
+
`COMPLETE`, and unknown future classifications. A stale task lock is released
|
|
401
|
+
only if its lock ID, heartbeat, and owner instance still match the observation;
|
|
402
|
+
recovery then revalidates phase, revision, ledger sequence, and classification
|
|
403
|
+
under project-claims and task locks.
|
|
404
|
+
|
|
405
|
+
The command writes durable `recovery.json` and a linked append-only recovery
|
|
406
|
+
event in one transaction. For PR #66 compatibility, the writer retains the
|
|
407
|
+
event name `OPERATOR_RECOVERY_RECORDED`, but records
|
|
408
|
+
`authorityKind: CALLER_ACKNOWLEDGED`; readers also accept
|
|
409
|
+
`TASK_RECOVERY_RECORDED`. Recovery does not refresh `work-state.json`, change
|
|
410
|
+
phase, erase evidence, alter policy/continuity, or fabricate completion.
|
|
411
|
+
Historical descriptor claims remain visible, while canonical effective claims
|
|
412
|
+
are empty only when that relationship validates; ordinary mutations then fail
|
|
413
|
+
with `E_TASK_RECOVERED`. Fake, missing, corrupt, deleted, or mismatched recovery
|
|
414
|
+
evidence is `INCONSISTENT`, keeps historical claims effective, disables
|
|
415
|
+
mutation, and routes `next` to `RESOLVE_RECOVERY_INCONSISTENCY`.
|
|
416
|
+
|
|
417
|
+
`--acknowledge-recovery` is a caller declaration, not host-attested authority.
|
|
418
|
+
The deprecated `--operator-authorized` alias has the same limited meaning.
|
|
419
|
+
Only `task-resume` can transactionally remove recovery state and reacquire
|
|
420
|
+
claims. If another task owns an overlapping path, resume returns
|
|
421
|
+
`E_TASK_SCOPE_CONFLICT` and leaves the recovered task suspended.
|
|
422
|
+
|
|
423
|
+
Never create, delete, or edit `recovery.json` manually. Never remove task
|
|
424
|
+
recovery state to resume a task. Never interpret `recovery.json` without
|
|
425
|
+
validating its ledger binding. Direct changes bypass locks, transactions,
|
|
426
|
+
expected revisions, and the append-only ledger.
|
|
427
|
+
|
|
428
|
+
If `.forgeloop/.claims.lock` is stale, ForgeLoop quarantines and removes it only
|
|
429
|
+
when `lockId`, `heartbeatAt`, and `ownerInstanceId` still match. A live lock
|
|
430
|
+
returns `E_TASK_LOCKED`; unknown, corrupt, or concurrently replaced ownership
|
|
431
|
+
returns `E_PROJECT_CLAIMS_LOCK_INCONSISTENT`. Do not force-delete unknown lock
|
|
432
|
+
ownership.
|
|
433
|
+
|
|
434
|
+
A project containing active task recovery state requires ForgeLoop 1.4.0 or
|
|
435
|
+
newer. An older reader that cannot advertise validated claim projection must
|
|
436
|
+
fail closed instead of inferring ownership from the descriptor or tombstone.
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
306
440
|
### Symptom: Verification Tool is Missing
|
|
307
441
|
|
|
308
442
|
#### Error Code: `E_VERIFICATION_TOOL_UNAVAILABLE`
|
|
@@ -443,6 +577,32 @@ forgeloop policy-status --json
|
|
|
443
577
|
|
|
444
578
|
---
|
|
445
579
|
|
|
580
|
+
### Symptom: Capability Policy Epoch Drift
|
|
581
|
+
|
|
582
|
+
#### Error Code: `E_ACTION_POLICY_DRIFT`
|
|
583
|
+
|
|
584
|
+
#### What it means
|
|
585
|
+
|
|
586
|
+
The current capability-policy artifact no longer matches the policy lock or
|
|
587
|
+
the task-scoped policy snapshot. The same guard is enforced by
|
|
588
|
+
`action-authorize`, `next`, and `approval-request`.
|
|
589
|
+
|
|
590
|
+
#### Safe recovery
|
|
591
|
+
|
|
592
|
+
ForgeLoop fails closed before authorization guidance or approval creation. Do
|
|
593
|
+
not create an approval manually or retry `action-authorize` against the
|
|
594
|
+
modified file. Restore the policy epoch recorded at task activation, or use
|
|
595
|
+
the supported policy update flow to create a new lock and task snapshot, then
|
|
596
|
+
rerun:
|
|
597
|
+
|
|
598
|
+
```bash
|
|
599
|
+
forgeloop next --task <id> --json
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
Changing `capabilities.json` alone is not a valid policy update.
|
|
603
|
+
|
|
604
|
+
---
|
|
605
|
+
|
|
446
606
|
### Symptom: Invalid Policy Artifacts Fail Closed
|
|
447
607
|
|
|
448
608
|
#### Error Code: `E_POLICY_INVALID`
|
|
@@ -572,6 +732,29 @@ forgeloop next --task <id> --json
|
|
|
572
732
|
|
|
573
733
|
| Code | Meaning | Safe Resolution |
|
|
574
734
|
| --- | --- | --- |
|
|
735
|
+
| `E_ACTION_APPROVAL_NOT_REQUIRED` | The current capability policy allows the action without an approval artifact. | Do not create an approval; authorize the action through the current policy path. |
|
|
736
|
+
| `E_ACTION_APPROVAL_REQUIRED` | Policy requires a current fingerprint-bound approval before this action may proceed. | Request approval with forgeloop approval-request and resolve it via forgeloop approval-resolve, then rerun the action. |
|
|
737
|
+
| `E_ACTION_AUTHORITY_REQUIRED` | Policy requires host-attested authority that was not supplied through a host trust boundary. | Perform the action through a host integration that supplies trusted authority context; standalone CLI cannot mint it. |
|
|
738
|
+
| `E_ACTION_AUTHORIZATION_INVALID` | Action authorization evidence is missing, incomplete, or was not produced by the canonical authorization service. | Authorize the action through forgeloop run-action or a trusted embedding host; caller surfaces can never mint AUTHORIZED. |
|
|
739
|
+
| `E_ACTION_CAPABILITY_DENIED` | Capability policy denies this capability. | Obtain an operator policy change outside the task, or do not perform the action. |
|
|
740
|
+
| `E_ACTION_CAPABILITY_UNKNOWN` | Action capability is not part of the canonical capability vocabulary. | Use a documented capability from forgeloop protocol-info; unknown capabilities fail closed. |
|
|
741
|
+
| `E_ACTION_COMMIT_UNKNOWN` | External commit state of a started action cannot be proven. | Do not retry; reconcile the observed external state with forgeloop action-reconcile. |
|
|
742
|
+
| `E_ACTION_EVIDENCE_INVALID` | Evidence supplied for verification or reconciliation is missing, malformed, or unbounded. | Supply bounded evidence references appropriate to the action type; do not paste raw external output into the ledger. |
|
|
743
|
+
| `E_ACTION_IDEMPOTENCY_CONFLICT` | The idempotency key already binds to a different canonical action fingerprint in this task. | Use a new idempotency key with a new actionId, or reuse the existing logical action unchanged; never relabel an executed effect. |
|
|
744
|
+
| `E_ACTION_IDEMPOTENCY_REQUIRED` | Side-effecting action class requires an idempotency key. | Supply a stable --idempotency-key that identifies the logical external action. |
|
|
745
|
+
| `E_ACTION_INVALID` | Durable action artifact or parameters are malformed or schema-invalid. | Correct the action fields reported by the structured error, then retry through forgeloop action-propose or run-action. |
|
|
746
|
+
| `E_ACTION_NOT_FOUND` | Referenced durable action ID does not exist for the task. | List actions with forgeloop action-show or propose the action first. |
|
|
747
|
+
| `E_ACTION_POLICY_DRIFT` | The current capability policy does not match the policy lock or task policy snapshot binding this task. | Restore the policy epoch recorded at task activation or create a new valid lock and snapshot before side effects. |
|
|
748
|
+
| `E_ACTION_POLICY_LOCK_REQUIRED` | A capability policy is present but no valid policy lock exists to bind authorization identity. | Record a valid policy lock (forgeloop baseline or policy-discover --write) before authorizing durable actions. |
|
|
749
|
+
| `E_ACTION_RECONCILIATION_AUTHORITY_REQUIRED` | Settling COMMIT_UNKNOWN external state requires trusted host attestation that was not supplied out-of-band. | Reconcile through a trusted embedding host boundary; actor-supplied observations may only record UNKNOWN. |
|
|
750
|
+
| `E_ACTION_RECONCILIATION_EVIDENCE_INVALID` | Settling reconciliation requires at least one bounded evidence reference binding the observation to the action. | Supply bounded external-state evidence references alongside trusted authority before settling ambiguity. |
|
|
751
|
+
| `E_ACTION_RECONCILIATION_REQUIRED` | An action is COMMIT_UNKNOWN and blocks progress until explicitly reconciled. | Observe the external system and run forgeloop action-reconcile --outcome COMMITTED\|NOT_COMMITTED\|UNKNOWN with evidence references. |
|
|
752
|
+
| `E_ACTION_STATE_MISMATCH` | Requested durable action transition is not part of the canonical state machine. | Inspect current action state with forgeloop action-show and use a legal transition; never edit action artifacts by hand. |
|
|
753
|
+
| `E_ACTION_VERIFICATION_INVALID` | Verification evidence does not resolve to a canonical passed ForgeLoop artifact bound to this task and action. | Supply a canonical execution or check reference produced by run-check for this task; arbitrary strings fail closed. |
|
|
754
|
+
| `E_ACTION_VERIFICATION_REQUIRED` | The action cannot reach VERIFIED through this surface; canonical independent postcondition evidence is required. | Run an independent verification check, then record it with forgeloop action-verify; exit code 0 alone is not verification. |
|
|
755
|
+
| `E_APPROVAL_ALREADY_RESOLVED` | Approval is one-time resolvable and has already been approved or rejected. | Request a new approval if another decision is required. |
|
|
756
|
+
| `E_APPROVAL_INVALID` | Approval artifact is malformed or does not bind the required fingerprint tuple. | Request a new approval with forgeloop approval-request; never hand-edit approval artifacts. |
|
|
757
|
+
| `E_APPROVAL_STALE` | Approval no longer matches the current action fingerprint, contract fingerprint, task revision, or capability. | Request and resolve a fresh approval against the current action revision. |
|
|
575
758
|
| `E_AUTHORITY_INVALID` | Authority grant file is malformed or expired. | Obtain a valid authority grant from host operator. |
|
|
576
759
|
| `E_AUTHORITY_SCOPE_MISMATCH` | Authority grant does not cover the requested package. | Request updated authority scope. |
|
|
577
760
|
| `E_AUTHORITY_UNTRUSTED_SOURCE` | Authority file placed inside untrusted project tree. | Place authority file in host-managed trusted location. |
|
|
@@ -584,6 +767,7 @@ forgeloop next --task <id> --json
|
|
|
584
767
|
| `E_CHECK_STATUS_CONTRADICTION` | 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. |
|
|
585
768
|
| `E_CIRCULAR_COMPLETION_REQUIREMENT` | 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. |
|
|
586
769
|
| `E_COMMAND_RESOLUTION_AMBIGUOUS` | 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. |
|
|
770
|
+
| `E_COMPLETION_OWNERSHIP_UNPROVEN` | Work-state claims COMPLETE but the canonical lifecycle/ledger completion proof is missing or invalid, so historical claims stay reserved. | Restore the canonical completion event and a valid ledger, or re-run the official completion pipeline; phase=COMPLETE alone never releases claims. |
|
|
587
771
|
| `E_COMPLETION_RECOVERY_UNAUTHORIZED` | 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. |
|
|
588
772
|
| `E_COMPLETION_REJECTED` | 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. |
|
|
589
773
|
| `E_COMPLETION_REJECTION_LEDGER_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. |
|
|
@@ -600,6 +784,8 @@ forgeloop next --task <id> --json
|
|
|
600
784
|
| `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. |
|
|
601
785
|
| `E_CONTRACT_STALE` | Contract modified after downstream artifacts were generated. | Re-run forgeloop route and forgeloop preflight. |
|
|
602
786
|
| `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. |
|
|
787
|
+
| `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. |
|
|
788
|
+
| `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. |
|
|
603
789
|
| `E_DECISION_CRITERION_INVALID` | Decision settlement criterion details or parameters are malformed. | Provide non-empty decision text and settledBy criterion. |
|
|
604
790
|
| `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. |
|
|
605
791
|
| `E_DIAGNOSIS_CYCLE_MISMATCH` | Diagnosis verification cycle does not match the active work state verification cycle. | Record diagnosis for the current active verification cycle. |
|
|
@@ -607,6 +793,9 @@ forgeloop next --task <id> --json
|
|
|
607
793
|
| `E_DIAGNOSIS_INVALID` | Diagnosis record details or parameters are malformed. | Provide valid failureClass, hypothesis, evidenceRefs, settledBy, and nextSafeAction. |
|
|
608
794
|
| `E_DIAGNOSIS_NO_NEW_INFORMATION` | The proposed retry repeats the previous hypothesis with the same evidence. | Change the hypothesis, collect independent evidence, or change strategy. |
|
|
609
795
|
| `E_DIAGNOSIS_REQUIRED` | Current correction cycle has no append-only diagnosis record. | Run forgeloop record-diagnosis with current failed evidence before correcting. |
|
|
796
|
+
| `E_DIAGNOSTIC_CASE_CYCLE_MISMATCH` | Diagnostic case verification cycle does not match the active work state verification cycle. | Record the diagnostic case for the current active verification cycle. |
|
|
797
|
+
| `E_DIAGNOSTIC_CASE_EVIDENCE_INVALID` | A diagnostic case evidence reference does not match any check from the active verification cycle. | Reference check IDs recorded during the active verification cycle. |
|
|
798
|
+
| `E_DIAGNOSTIC_CASE_INVALID` | Structured diagnostic case details or parameters are malformed. | Provide valid observations, contributors, hypotheses with settlement criteria, and nextSafeAction. |
|
|
610
799
|
| `E_EVIDENCE_COVERAGE_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. |
|
|
611
800
|
| `E_EVIDENCE_COVERAGE_PARTIAL` | 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. |
|
|
612
801
|
| `E_EVIDENCE_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. |
|
|
@@ -615,19 +804,29 @@ forgeloop next --task <id> --json
|
|
|
615
804
|
| `E_EVIDENCE_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. |
|
|
616
805
|
| `E_EVIDENCE_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. |
|
|
617
806
|
| `E_EXECUTION_REF_INVALID` | Referenced execution ID does not exist. | Re-run check via forgeloop run-check. |
|
|
807
|
+
| `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. |
|
|
618
808
|
| `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. |
|
|
619
809
|
| `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. |
|
|
620
810
|
| `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. |
|
|
621
811
|
| `E_GATE_STALE` | Referenced gate artifact changed after approval. | Update artifact SHA-256 in gate file. |
|
|
622
812
|
| `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. |
|
|
813
|
+
| `E_HYPOTHESIS_DISPOSITION_EVIDENCE_INVALID` | Hypothesis disposition evidence references do not resolve to checks of the active cycle. | Reference at least one check ID recorded in the active verification cycle. |
|
|
814
|
+
| `E_HYPOTHESIS_DISPOSITION_INVALID` | Hypothesis disposition is malformed or references an unknown hypothesis or disallowed transition. | Record a disposition for a known hypothesis using an allowed status transition. |
|
|
815
|
+
| `E_HYPOTHESIS_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. |
|
|
816
|
+
| `E_HYPOTHESIS_SETTLEMENT_MISSING` | An open hypothesis lacks a falsifiable settlement condition. | Provide a structured settledBy predicate, check status, or observation binding. |
|
|
623
817
|
| `E_INIT_KIT_CONFLICT` | A canonical ForgeLoop kit destination already exists with content that does not match the shipped canonical template. | Inspect the conflicting `.forgeloop/kit/...` file. If it is stale or partial ForgeLoop output, remove or restore it and rerun `forgeloop init`. Do not overwrite unknown content automatically. |
|
|
624
818
|
| `E_INSTALLATION_AUTHORITY_REQUIRED` | Attempted software installation without host authority grant. | Use local non-installing binaries or request host authority grant. |
|
|
819
|
+
| `E_INTERVENTION_HYPOTHESIS_MISSING` | Intervention does not bind to any hypothesis. | Bind the intervention to at least one recorded hypothesis. |
|
|
820
|
+
| `E_INTERVENTION_INVALID` | Intervention record is malformed. | Provide id, kind, statement, and at least one bound hypothesisRef. |
|
|
821
|
+
| `E_INTERVENTION_REFERENCE_INVALID` | Intervention references an unknown hypothesis. | Record the diagnostic case containing the hypothesis before recording the intervention. |
|
|
822
|
+
| `E_LEGACY_RECOVERY_MIGRATION_INVALID` | The legacy recovery-event repair was refused because the ledger does not match the exact known legacy defect signature, has incompatible later activity, holds a live lock, or is otherwise ambiguous. | Inspect the structured plan/errors; ambiguous or tampered ledgers stay INCONSISTENT and are never migrated. |
|
|
625
823
|
| `E_MIGRATION_INCOMPLETE` | 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. |
|
|
626
824
|
| `E_MIGRATION_WRITE_VERIFY` | 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. |
|
|
627
825
|
| `E_MIXED_TERMINAL_REQUIREMENT` | 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. |
|
|
628
826
|
| `E_NATIVE_ADAPTER_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. |
|
|
629
827
|
| `E_NATIVE_ADAPTER_TARGET_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. |
|
|
630
828
|
| `E_NEW_POLICY_VIOLATION` | New executable policy violation detected that is not present in brownfield baseline. | Fix the violation before completing the task. |
|
|
829
|
+
| `E_OBSERVATION_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. |
|
|
631
830
|
| `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. |
|
|
632
831
|
| `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. |
|
|
633
832
|
| `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. |
|
|
@@ -654,6 +853,7 @@ forgeloop next --task <id> --json
|
|
|
654
853
|
| `E_PROFILE_SOURCE_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. |
|
|
655
854
|
| `E_PROFILE_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. |
|
|
656
855
|
| `E_PROGRESS_STALLED` | Persisted correction history shows no new diagnostic information. | Use an independent check, revisit assumptions, or record a materially different diagnosis. |
|
|
856
|
+
| `E_PROJECT_CLAIMS_LOCK_INCONSISTENT` | The project-wide claim reservation lock has unknown, corrupt, or concurrently changed ownership metadata. | Inspect .forgeloop/.claims.lock and retry only after its lease and owner identity can be validated; never force-delete unknown ownership. |
|
|
657
857
|
| `E_PROTOCOL_MIGRATION_TARGET_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. |
|
|
658
858
|
| `E_PUBLICATION_CLAIM_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. |
|
|
659
859
|
| `E_PUBLICATION_REQUIREMENT_PENDING` | 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. |
|
|
@@ -682,10 +882,14 @@ forgeloop next --task <id> --json
|
|
|
682
882
|
| `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. |
|
|
683
883
|
| `E_STATE_REVALIDATION_REQUIRED` | The work-state checkpoint must be revalidated before the lifecycle can continue. | Run forgeloop reconcile-closure for externally satisfied EXECUTING tasks, or inspect the freshness reasons for other drift. |
|
|
684
884
|
| `E_STATE_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. |
|
|
885
|
+
| `E_STRATEGY_OSCILLATION` | Correction history oscillates between previously exhausted strategies without new information. | Gather a genuinely new observation or test a materially different falsifiable hypothesis. |
|
|
685
886
|
| `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. |
|
|
887
|
+
| `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. |
|
|
686
888
|
| `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>. |
|
|
687
889
|
| `E_TASK_CHANGE_ATTRIBUTION_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. |
|
|
688
890
|
| `E_TASK_CHANGE_OUTSIDE_SCOPE` | Modified paths in repository exceed the declared task write claims. | Update write claims with forgeloop task-scope or revert out-of-scope modifications. |
|
|
891
|
+
| `E_TASK_CLAIM_OWNERSHIP_INCONSISTENT` | ForgeLoop cannot prove whether a task still owns its historical write claims. | Repair and validate the task descriptor, recovery artifact, and complete event ledger before acquiring overlapping claims or mutating the task. |
|
|
892
|
+
| `E_TASK_COMPLETE` | A validator-backed COMPLETE task is terminal and cannot be mutated. | Create or select a non-terminal task for further work; do not modify terminal task state. |
|
|
689
893
|
| `E_TASK_CONTEXT_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. |
|
|
690
894
|
| `E_TASK_DESCRIPTOR_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. |
|
|
691
895
|
| `E_TASK_KEY_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. |
|
|
@@ -695,8 +899,15 @@ forgeloop next --task <id> --json
|
|
|
695
899
|
| `E_TASK_MIGRATION_IDENTITY_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. |
|
|
696
900
|
| `E_TASK_MIGRATION_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. |
|
|
697
901
|
| `E_TASK_NOT_FOUND` | 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. |
|
|
902
|
+
| `E_TASK_NOT_RECOVERED` | task-resume was requested for a task without active recovered state. | Inspect the task with forgeloop task-show; task-resume is only valid while recovery.json is active. |
|
|
903
|
+
| `E_TASK_RECOVERED` | The task released its write claims through recovery and ordinary mutation is suspended. | Run forgeloop task-resume --task <id> to reacquire the released claims before mutating the task. |
|
|
904
|
+
| `E_TASK_RECOVERY_AUTHORITY_INVALID` | Recovery authority metadata is invalid or claims host attestation without a host-owned grant reference. | Use caller acknowledgement, or provide a host-attested recovery grant through a trusted host integration. |
|
|
905
|
+
| `E_TASK_RECOVERY_AUTHORIZATION_REQUIRED` | task-recover requires explicit caller acknowledgement; this is not host-attested authority. | Re-run with --acknowledge-recovery only when evidence shows the task is STALE or ABANDONED; --operator-authorized remains a deprecated alias. |
|
|
906
|
+
| `E_TASK_RECOVERY_INCONSISTENT` | Claim-release recovery was refused because the task state, recovery artifact, lock, or event ledger is inconsistent. | Repair the underlying artifact through its dedicated recovery surface; do not force-complete an unreadable task. |
|
|
907
|
+
| `E_TASK_RECOVERY_OFFICIAL_PATH_AVAILABLE` | Claim-release recovery was refused because canonical lifecycle reconciliation is available. | Use forgeloop reconcile-closure and the normal verification/completion pipeline instead of task-recover. |
|
|
908
|
+
| `E_TASK_RECOVERY_UNSAFE` | Claim-release recovery was refused because the conflicting task is active, inconsistent, already complete, or holds a live lease. | Resolve the reported classification first; live leases must expire or be released by their owner before recovery. |
|
|
698
909
|
| `E_TASK_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. |
|
|
699
|
-
| `E_TASK_SCOPE_CONFLICT` | Task write claims overlap with another non-complete task in the same checkout. |
|
|
910
|
+
| `E_TASK_SCOPE_CONFLICT` | Task write claims overlap with another non-complete task in the same checkout. | Inspect the conflicting task classification reported in error.conflicts, then reconcile or recover it through its reported official recovery commands before retrying task creation. |
|
|
700
911
|
| `E_TASK_SCOPE_DIRTY` | Claimed paths contain pre-existing uncommitted changes. | Commit or stash changes in claimed paths before defining or adopting the scope. |
|
|
701
912
|
| `E_TASK_SCOPE_FROZEN` | 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. |
|
|
702
913
|
| `E_TASK_SCOPE_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. |
|
|
@@ -706,6 +917,9 @@ forgeloop next --task <id> --json
|
|
|
706
917
|
| `E_TERMINAL_REQUIREMENT_TYPE_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. |
|
|
707
918
|
| `E_TERMINAL_REQUIREMENT_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. |
|
|
708
919
|
| `E_TERMINAL_STATUS_REGRESSION` | 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. |
|
|
920
|
+
| `E_TRACE_SNAPSHOT_INCONSISTENT` | Task artifacts changed while the execution trace was being read. | Rerun the read-only projection to obtain a consistent view. |
|
|
921
|
+
| `E_TRAJECTORY_REFERENCE_REQUIRED` | Comparative efficiency requires a reference scenario with positive comparableSteps. | Provide --scenario with reference.comparableSteps, or omit efficiency from the result. |
|
|
922
|
+
| `E_TRAJECTORY_SCENARIO_INVALID` | Trajectory scenario file is missing required fields or schema-invalid. | Correct the scenario JSON against schemas/trajectory-scenario.schema.json. |
|
|
709
923
|
| `E_VERIFICATION_TOOL_UNAVAILABLE` | Required verification executable is missing in environment. | Use local equivalent, obtain host authority, or record NOT_VERIFIED. |
|
|
710
924
|
|
|
711
925
|
<!-- END FORGELOOP GENERATED: public-error-codes -->
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Universal ForgeLoop Integration
|
|
2
|
+
|
|
3
|
+
ForgeLoop applies to any agent, harness, IDE, or orchestration runtime — with
|
|
4
|
+
or without MCP. The universal rule:
|
|
5
|
+
|
|
6
|
+
> If the active host exposes an official ForgeLoop structured integration,
|
|
7
|
+
> prefer it for protocol operations. Otherwise use the project-local ForgeLoop
|
|
8
|
+
> CLI. Never manually synthesize ForgeLoop-managed lifecycle, claim, recovery,
|
|
9
|
+
> ledger, or completion state because an integration is unavailable.
|
|
10
|
+
|
|
11
|
+
## The programmatic integration API
|
|
12
|
+
|
|
13
|
+
`@cassiomc1/forgeloop/integration` (integration API version 1) is the
|
|
14
|
+
transport-neutral entrypoint:
|
|
15
|
+
|
|
16
|
+
```js
|
|
17
|
+
import {
|
|
18
|
+
executeForgeLoopCommand,
|
|
19
|
+
validateForgeLoopCommandInput,
|
|
20
|
+
getForgeLoopCapabilities,
|
|
21
|
+
classifyForgeLoopInvocation,
|
|
22
|
+
readForgeLoopIntegrationResource,
|
|
23
|
+
} from "@cassiomc1/forgeloop/integration";
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- `executeForgeLoopCommand({command, projectPath, input})` returns a
|
|
27
|
+
deterministic envelope: `{ok, command, exitCode, result, error, metadata}`.
|
|
28
|
+
Domain rejections (preflight BLOCKED, audit INVALID) keep `ok:true` with a
|
|
29
|
+
non-zero exit code; `ok:false` means the command could not be executed and
|
|
30
|
+
preserves the canonical public error code.
|
|
31
|
+
- Ownership values always come from `resolveTaskClaimState()` through the
|
|
32
|
+
`task/ownership` resource — never derived from raw artifacts.
|
|
33
|
+
- Invocation risk classes (READ_ONLY, LOOP_MUTATION, CLAIM_REACQUISITION,
|
|
34
|
+
EXTERNAL_EXECUTION, MAINTENANCE, CLAIM_RELEASE_RECOVERY, LEGACY_MIGRATION,
|
|
35
|
+
FORCE_DESTRUCTIVE) describe what an invocation would do; launch policy
|
|
36
|
+
decides what is allowed.
|
|
37
|
+
|
|
38
|
+
## Consumers
|
|
39
|
+
|
|
40
|
+
| Surface | Entry |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| ForgeLoop CLI | human terminal rendering over the same executors |
|
|
43
|
+
| ForgeLoop MCP | `@cassiomc1/forgeloop-mcp`: stdio (default/recommended) plus optional strict-modern loopback-only HTTP; see [MCP.md](./MCP.md) |
|
|
44
|
+
| Studio / IDE / CI adapters | the same integration subpath |
|
|
45
|
+
|
|
46
|
+
All consumers share one protocol authority: `.forgeloop/` state written only
|
|
47
|
+
by canonical ForgeLoop commands, so cross-harness continuity and recovery work
|
|
48
|
+
identically regardless of transport.
|