feat: ADR-0034 — history journal records err + replay parses/filters the journal
Replay (§3): run_replay parses <ts>|<status>|<source> journal records — runs ok, skips non-ok — while still accepting bare .commands scripts (prefix-detected so a | inside a bare command isn't misread). Fixes replay history.log, which died on line 1. Journal failures (§1/§2): failed commands are recorded err via a new Action::JournalFailure, emitted by the pure-sync App for both parse failures and worker-execution failures (runtime appends best-effort, never fatal). Hydration reads all records so typo'd/rejected commands are recallable across sessions. Amendment 1 — replay filters app-lifecycle commands: a working replay history.log exposed that the journal also records save as/load/new/export/import/rebuild/mode (which would panic the worker dispatch or abort replay). Replay now re-applies only schema/data writes and skips every app-lifecycle command + nested replay, classified by entry word so modal/incomplete forms (save as, bare mode) and quit skip uniformly rather than aborting. All skips continue (reversing the nested-replay refusal); import and nested replay warn. replay.error_nested removed; replay.skipped_import/_replay added; ReplayCompleted carries warnings. requirements.md U3/U4 updated; app-command runtime-failure journalling tracked as a follow-up. 1659 passing / 0 failing / 0 skipped / 1 ignored. Clippy clean.
This commit is contained in:
@@ -76,6 +76,12 @@ pub enum AppEvent {
|
||||
command: Command,
|
||||
error: DbError,
|
||||
facts: crate::friendly::FailureContext,
|
||||
/// The original user-typed source line, retained so the
|
||||
/// App can journal the failed command as an `err` record
|
||||
/// (ADR-0034 §1/§2). The worker only journals successful
|
||||
/// commands, so an execution failure would otherwise be
|
||||
/// lost across sessions.
|
||||
source: String,
|
||||
},
|
||||
/// Refreshed list of tables in the database.
|
||||
TablesRefreshed(Vec<String>),
|
||||
@@ -146,6 +152,11 @@ pub enum AppEvent {
|
||||
ReplayCompleted {
|
||||
path: String,
|
||||
count: usize,
|
||||
/// Pre-rendered `[skip]` warnings for app-lifecycle commands
|
||||
/// whose omission can leave the replayed state incomplete —
|
||||
/// `import` and a nested `replay` (ADR-0034). Other skipped
|
||||
/// app commands are silent and do not appear here.
|
||||
warnings: Vec<String>,
|
||||
},
|
||||
/// A `replay <path>` aborted at line `line_number`. `command`
|
||||
/// is the line text as it appeared in the file (for the
|
||||
|
||||
Reference in New Issue
Block a user