Add stable checkpoint decision diagnostics
This commit is contained in:
@@ -43,6 +43,17 @@ not permit stale downstream reuse. The CLI's selective recomputation policy
|
||||
records `forced_recompute` for the selected step and its dependents while
|
||||
requiring compatible predecessor checkpoints.
|
||||
|
||||
The loader assigns a typed category and reason code at each validation site;
|
||||
diagnostic prose is not classified after the fact. The runner then applies
|
||||
forced-execution policy, validates reusable artifact bytes through the prepared
|
||||
codec, and records the final decision before enforcing a required-predecessor
|
||||
failure. That failure names only the step, lane, and stable reason code. Decision
|
||||
detail passes through one UTF-8-safe bounded sanitizer and contains only
|
||||
allowlisted diagnostic context, never payloads, references, credentials,
|
||||
environment values, or physical paths. Typed categories and codes remain intact
|
||||
through pipeline events and become strings only in manifest and debug-summary
|
||||
JSON.
|
||||
|
||||
`internal/core/fileio` provides confined atomic file writes used by state
|
||||
collaborators. The chunk-plan store retains its stronger entry validation.
|
||||
|
||||
|
||||
@@ -173,6 +173,33 @@ then inspect checkpoint decision categories and reason codes. A
|
||||
`dependency_invalidated` decision means the stored producer, codec identity,
|
||||
schema, or canonical content no longer matches; a missing or rejected producer
|
||||
requires rerunning it rather than copying an artifact into the checkpoint root.
|
||||
The decision that caused a required-predecessor failure is retained before the
|
||||
run returns, and the CLI error identifies its step, lane, and reason code.
|
||||
|
||||
Checkpoint reason codes are stable diagnostic identifiers:
|
||||
|
||||
| Reason code | Operator meaning |
|
||||
| --- | --- |
|
||||
| `loading_disabled` | This invocation did not enable checkpoint loading. |
|
||||
| `checkpoint_missing` | The requested checkpoint file does not exist. |
|
||||
| `checkpoint_path_invalid` | The requested checkpoint location failed confinement validation. |
|
||||
| `checkpoint_read_failed` | An existing checkpoint could not be read. |
|
||||
| `checkpoint_decode_failed` | Checkpoint JSON could not be decoded. |
|
||||
| `workspace_schema_incompatible` | The stored workspace schema is not supported by this build. |
|
||||
| `identity_mismatch` | The stored invocation identity differs from the current invocation. |
|
||||
| `stage_mismatch`, `step_mismatch`, `lane_mismatch`, `module_mismatch` | Stored scope does not match the requested pipeline scope. |
|
||||
| `status_not_reusable` | The stored operation did not finish in a reusable status. |
|
||||
| `dependency_mismatch` | Stored dependencies differ; the category is `dependency_invalidated`. |
|
||||
| `artifact_payload_invalid` | Stored artifact payload structure or encoding is invalid. |
|
||||
| `artifact_digest_mismatch` | Stored artifact bytes do not match their recorded digest. |
|
||||
| `artifact_codec_incompatible` | Stored artifact identity is incomplete or incompatible with the codec contract. |
|
||||
| `artifact_not_canonical` | The codec can decode the artifact, but its bytes are not canonical. |
|
||||
| `checkpoint_reused` | The stored checkpoint passed validation and was reused. |
|
||||
| `recompute_step` | Selective recomputation forced execution of this lane. |
|
||||
|
||||
Decision detail is bounded explanatory text, not a data-recovery channel. It
|
||||
never contains checkpoint paths, artifact or reference content, source content,
|
||||
credentials, or environment values.
|
||||
|
||||
## Debug Bundles
|
||||
|
||||
|
||||
Reference in New Issue
Block a user