2026-05-18 22:03:59 -05:00
# CLI
## Shortest Useful Command
```bash
narratio run --session-id 2026-04-04
```
2026-05-21 09:55:56 -05:00
This command uses default system discovery for `pipeline.yml` , `campaign.yml` , and local `session.yml` . If local session discovery misses and S3 storage is configured, `--session-id` can load remote `session.yml` from the canonical session prefix.
Default discovery checks system config locations only. Pass `--config` , `--campaign` , and `--session` to use files from the current working directory.
2026-05-18 22:03:59 -05:00
2026-05-22 17:38:23 -05:00
Ordinary local and remote `session.yml` files must be concrete YAML. Templates belong to `narratio session init` , which renders a configured campaign template before writing the concrete file.
2026-05-18 22:03:59 -05:00
## Command Overview
Implemented commands:
2026-05-19 19:42:28 -05:00
- `run` : execute pipeline stages and persist manifest state.
- `plan` : validate config, prepare workspace layout, and print stage run/skip decisions.
- `resume` : continue from first non-succeeded stage unless forced.
2026-05-21 11:50:20 -05:00
- `status` : read an existing manifest or inspect local/remote state for a session.
2026-05-19 19:42:28 -05:00
- `run-stage` : execute exactly one stage.
2026-05-21 23:02:19 -05:00
- `analyze` : force-rerun the analyze stage.
2026-05-22 11:28:38 -05:00
- `publish` : force-rerun the archive stage.
2026-05-19 22:32:55 -05:00
- `restore` : restore durable local session state from the committed remote archive state.
2026-05-21 11:50:20 -05:00
- `session validate` : run read-only preflight checks for a session.
- `session init` : create local or remote `session.yml` .
- `artifacts list` : list effective artifact source IDs.
2026-05-21 19:36:14 -05:00
- `locks` : list, add, and remove archive promotion locks.
2026-05-21 22:48:18 -05:00
- `clean` : remove local workspace/spool state for one session or all local sessions.
2026-05-18 22:03:59 -05:00
2026-05-19 19:42:28 -05:00
Unknown commands print usage and exit non-zero.
2026-05-18 22:03:59 -05:00
2026-05-19 19:42:28 -05:00
For config semantics, see [docs/config.md ](./config.md ). For operator lifecycle and recovery, see [docs/operations.md ](./operations.md ).
2026-05-18 22:03:59 -05:00
## Complete Flag Reference
### `run`
2026-05-19 19:42:28 -05:00
- `--config <path>` : optional explicit `pipeline.yml` path.
2026-05-20 20:41:28 -05:00
- `--campaign <path>` : optional explicit `campaign.yml` path.
2026-05-19 19:42:28 -05:00
- `--session <path>` : optional explicit `session.yml` path.
2026-05-22 17:38:23 -05:00
- `--session-id <value>` : expected session identifier and remote session lookup value.
- `--previous-session-id <value>` : expected previous session identifier.
2026-05-19 19:42:28 -05:00
- `--force` : force stage execution.
2026-05-22 18:01:05 -05:00
- `--artifacts <names>` : configured artifact keys to execute and publish (repeatable or comma-separated).
2026-05-18 22:03:59 -05:00
### `plan`
- `--config <path>`
2026-05-20 20:41:28 -05:00
- `--campaign <path>`
2026-05-18 22:03:59 -05:00
- `--session <path>`
- `--session-id <value>`
2026-05-20 14:26:32 +00:00
- `--previous-session-id <value>`
2026-05-19 19:42:28 -05:00
- `--force`
2026-05-18 22:03:59 -05:00
### `resume`
- `--config <path>`
2026-05-20 20:41:28 -05:00
- `--campaign <path>`
2026-05-18 22:03:59 -05:00
- `--session <path>`
- `--session-id <value>`
2026-05-20 14:26:32 +00:00
- `--previous-session-id <value>`
2026-05-19 19:42:28 -05:00
- `--force`
2026-05-22 18:01:05 -05:00
- `--artifacts <names>` : configured artifact keys to execute and publish (repeatable or comma-separated).
2026-05-18 22:03:59 -05:00
### `run-stage`
- `--config <path>`
2026-05-20 20:41:28 -05:00
- `--campaign <path>`
2026-05-18 22:03:59 -05:00
- `--session <path>`
- `--session-id <value>`
2026-05-20 14:26:32 +00:00
- `--previous-session-id <value>`
2026-05-18 22:03:59 -05:00
- `--force`
2026-05-22 18:01:05 -05:00
- `--artifacts <names>` : configured artifact keys to execute or publish (repeatable or comma-separated).
2026-05-18 22:03:59 -05:00
- positional `<stage>` : required stage name.
2026-05-21 23:02:19 -05:00
### `analyze`
- `--config <path>`
- `--campaign <path>`
- `--session <path>`
- `--session-id <value>`
- `--previous-session-id <value>`
2026-05-22 18:01:05 -05:00
- `--artifacts <names>` : configured artifact keys to execute (repeatable or comma-separated).
2026-05-21 23:02:19 -05:00
`analyze` is force-by-design and does not accept `--force` .
2026-05-22 11:28:38 -05:00
### `publish`
- `--config <path>`
- `--campaign <path>`
- `--session <path>`
- `--session-id <value>`
- `--previous-session-id <value>`
2026-05-22 18:01:05 -05:00
- `--artifacts <names>` : configured artifact keys to publish (repeatable or comma-separated).
2026-05-22 11:28:38 -05:00
2026-05-22 18:01:05 -05:00
`publish` is force-by-design and does not accept `--force` or a stage positional argument.
2026-05-22 11:28:38 -05:00
2026-05-18 22:03:59 -05:00
Valid stage names:
- `prepare`
- `transcribe`
- `merge`
- `polish`
- `normalize`
- `trim`
- `analyze`
- `archive`
- `notify`
2026-05-19 22:32:55 -05:00
### `restore`
- `--config <path>`
2026-05-20 20:41:28 -05:00
- `--campaign <path>`
2026-05-19 22:32:55 -05:00
- `--session <path>`
- `--session-id <value>`
2026-05-20 14:26:32 +00:00
- `--previous-session-id <value>`
2026-05-19 22:32:55 -05:00
- `--dry-run` : plan restore actions without writing local files.
- `--force` : overwrite local conflicting files with remote archive files.
- `--include-audio` : include durable archived `audio/**` files in restore scope.
2026-05-21 22:48:18 -05:00
### `clean`
- `--session-id <value>` : required for session cleanup unless `--all` is set.
- `--config <path>`
- `--campaign <path>`
- `--session <path>`
- `--previous-session-id <value>`
- `--all` : clean all local session work/spool state using pipeline config only.
- `--dry-run` : print cleanup targets without deleting.
- `--clear-cache` : also remove matching S3 audio cache entries.
2026-05-18 22:03:59 -05:00
### `status`
2026-05-21 11:50:20 -05:00
- `--manifest <path>` : inspect one manifest file.
- `--config <path>`
- `--campaign <path>`
- `--session <path>`
- `--session-id <value>`
- `--previous-session-id <value>`
### `session validate`
- `--config <path>`
- `--campaign <path>`
- `--session <path>`
- `--session-id <value>`
- `--previous-session-id <value>`
### `session init`
2026-05-22 11:36:57 -05:00
- `--config <path>` : optional explicit `pipeline.yml` path.
- `--campaign <path>` : optional explicit `campaign.yml` path.
2026-05-21 11:50:20 -05:00
- `--session-id <value>` : required.
- `--output <path>` : local `session.yml` target; mutually exclusive with `--remote` .
- `--remote` : write remote `session.yml` to the canonical session prefix; mutually exclusive with `--output` .
- `--previous-session-id <value>`
- `--date <value>`
- `--title <value>`
- `--audio-s3-prefix <prefix>` : defaults to `audio/` when neither audio flag is provided.
- `--audio-dir <path>` : local audio directory; mutually exclusive with `--audio-s3-prefix` .
- `--force` : overwrite existing local or remote target.
2026-05-22 17:38:23 -05:00
When `campaign.yml` sets `session_template_file` , `session init` renders that template before writing the concrete session file. Template variables are supplied by these flags: `--session-id` , `--previous-session-id` , `--date` , `--title` , `--audio-s3-prefix` , and `--audio-dir` .
2026-05-21 11:50:20 -05:00
### `artifacts list`
- `--config <path>`
- `--campaign <path>`
- `--session <path>`
- `--session-id <value>`
- `--previous-session-id <value>`
2026-05-21 21:20:41 -05:00
- `--remote` : check remote availability for configured archive promotion destinations.
2026-05-21 11:50:20 -05:00
2026-05-21 19:36:14 -05:00
### `locks`
2026-05-21 11:50:20 -05:00
2026-05-21 19:36:14 -05:00
- `--session-id <value>` : required for list, add, and remove.
- `--config <path>` : optional explicit `pipeline.yml` path.
- `--campaign <path>` : optional explicit `campaign.yml` path.
- `--session <path>` : optional explicit `session.yml` path.
2026-05-22 17:38:23 -05:00
- `--previous-session-id <value>` : optional expected previous session identifier.
2026-05-21 19:36:14 -05:00
- `add <source>` : add a remote lock for one artifact or transcript source.
- `add --reason <text>` : record an optional remote lock reason.
- `add --force` : update the reason for an existing remote lock.
- `remove <source>` : remove one remote lock.
2026-05-18 22:03:59 -05:00
## Command Reference
### `run`
Purpose:
2026-05-19 19:42:28 -05:00
- Execute configured stages in canonical order.
2026-05-18 22:03:59 -05:00
Syntax:
```bash
2026-05-20 20:41:28 -05:00
narratio run [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>] [--force] [--artifacts <name[,name...]>]
2026-05-18 22:03:59 -05:00
```
Success output:
- `narratio run: session <session_id>; executed=<n> skipped=<n>; manifest=<path>`
Common failure cases:
2026-05-21 09:55:56 -05:00
- missing system default config/campaign/session paths when flags omitted.
2026-05-20 20:55:13 -05:00
- missing local session plus missing/unavailable remote `session.yml` .
2026-05-22 17:38:23 -05:00
- templated `session.yml` ; run `narratio session init` to generate concrete YAML.
- concrete session identity mismatch.
2026-05-19 19:42:28 -05:00
- unknown/invalid `--artifacts` value.
- `--artifacts` with unknown configured artifact key.
2026-05-18 22:03:59 -05:00
### `plan`
Purpose:
2026-05-19 19:42:28 -05:00
- Validate config, load secrets (if configured), prepare workdir, and print stage run/skip decisions.
2026-05-18 22:03:59 -05:00
Syntax:
```bash
2026-05-20 20:41:28 -05:00
narratio plan [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>] [--force]
2026-05-18 22:03:59 -05:00
```
Success output includes:
- `narratio plan: workdir prepared at <path>`
- one line per stage (`<stage>: run|skip` )
- `totals: run=<n> skip=<n>`
Common failure cases:
2026-05-20 20:41:28 -05:00
- same config/campaign/session discovery and validation failures as `run` .
2026-05-20 20:55:13 -05:00
- remote session fallback failures when local session discovery misses.
2026-05-18 22:03:59 -05:00
- secrets directory read failures when `pipeline.secrets.env_dir` is configured.
### `resume`
Purpose:
2026-05-19 19:42:28 -05:00
- Continue from session-manifest stage status.
2026-05-18 22:03:59 -05:00
Syntax:
```bash
2026-05-20 20:41:28 -05:00
narratio resume [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>] [--force] [--artifacts <name[,name...]>]
2026-05-18 22:03:59 -05:00
```
Success output:
2026-05-19 19:42:28 -05:00
- `narratio resume: session <session_id> has no remaining stages`
2026-05-18 22:03:59 -05:00
- or `narratio resume: session <session_id>; executed=<n> skipped=<n>; manifest=<path>`
Common failure cases:
2026-05-22 17:38:23 -05:00
- same discovery and validation failures as `run` .
2026-05-19 19:42:28 -05:00
- manifest load errors when existing manifest is unreadable.
- invalid or unknown artifact selections.
2026-05-18 22:03:59 -05:00
### `status`
Purpose:
2026-05-21 11:50:20 -05:00
- Inspect one manifest file, or inspect configured local/remote state for a session.
2026-05-18 22:03:59 -05:00
Syntax:
```bash
narratio status --manifest <manifest.json>
2026-05-21 11:50:20 -05:00
narratio status [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>]
2026-05-18 22:03:59 -05:00
```
2026-05-21 11:50:20 -05:00
Manifest output includes:
2026-05-18 22:03:59 -05:00
- `session_id: <id>`
- `updated_at: <timestamp>`
2026-05-19 19:42:28 -05:00
- `stages:` entries (`- <stage>: <status>` )
2026-05-18 22:03:59 -05:00
2026-05-21 11:50:20 -05:00
Session output includes:
- session ID, campaign, workspace, session config source.
- local manifest state when present.
- remote current archive state when storage is configured.
2026-05-21 20:49:28 -05:00
- catalog-based remote output availability for expected transcript and artifact sources.
2026-05-21 11:50:20 -05:00
- effective archive locks and conservative next actions.
2026-05-18 22:03:59 -05:00
Common failure cases:
2026-05-21 11:50:20 -05:00
- missing `--manifest` when no config/session flags are provided.
2026-05-19 19:42:28 -05:00
- unreadable or invalid manifest path.
2026-05-21 11:50:20 -05:00
- invalid config or remote session fallback failure in session mode.
### `session validate`
Purpose:
- Run read-only preflight checks for a session.
Syntax:
```bash
narratio session validate [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>]
```
Checks include:
- effective config and session source.
- stable input files.
- local or remote audio availability.
- previous-session requirements.
- archive promotions and effective locks.
Warnings do not fail the command. Any `ERROR` finding exits non-zero.
### `session init`
Purpose:
2026-05-22 17:38:23 -05:00
- Create a strict-decoded concrete `session.yml` locally or in object storage.
2026-05-21 11:50:20 -05:00
Syntax:
```bash
2026-05-22 11:36:57 -05:00
narratio session init --session-id <id> --output ./session.yml
narratio session init --session-id <id> --remote
2026-05-21 11:50:20 -05:00
narratio session init --config <pipeline.yml> --campaign <campaign.yml> --session-id <id> --remote
```
Behavior:
- exactly one of `--output` or `--remote` is required.
2026-05-22 11:36:57 -05:00
- `--config` and `--campaign` are optional overrides; omitted values use normal default config discovery.
2026-05-22 17:38:23 -05:00
- if `campaign.yml` sets `session_template_file` , the template path is resolved relative to `campaign.yml` and rendered from init flags.
- if no session template is configured, a minimal concrete session file is generated directly.
- template variables must be supplied by matching flags, and supplied template-related flags must be used by the template.
2026-05-21 11:50:20 -05:00
- remote writes target `{root_prefix}/campaigns/{campaign}/sessions/{session_id}/session.yml` .
- existing local or remote targets fail unless `--force` is passed.
- remote writes use existence checks, not compare-and-swap.
### `artifacts list`
Purpose:
- List built-in, configured, previous-session, promoted, and locked artifact sources.
Syntax:
```bash
narratio artifacts list [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>] [--remote]
```
2026-05-21 21:20:41 -05:00
`--remote` checks promoted top-level object availability through the storage adapter. Remote markers appear only in the `Promoted` section, which reports each configured archive promotion destination and includes `dest=<path>` when that destination differs from the source's canonical path.
2026-05-21 11:50:20 -05:00
2026-05-21 19:36:14 -05:00
### `locks`
2026-05-21 11:50:20 -05:00
Purpose:
2026-05-21 19:36:14 -05:00
- Inspect and mutate source-based archive promotion locks for one session.
2026-05-21 11:50:20 -05:00
Syntax:
```bash
2026-05-21 19:36:14 -05:00
narratio locks --session-id <id>
narratio locks add --session-id <id> [--reason <text>] [--force] <source>
narratio locks remove --session-id <id> <source>
2026-05-21 11:50:20 -05:00
```
Behavior:
2026-05-21 19:36:14 -05:00
- `--session-id` is required for list, add, and remove.
- optional `--config` , `--campaign` , and `--session` override default config discovery.
- list mode prints effective locks from static `pipeline.archive.locks` and remote `{session_prefix}/locks.yml` .
- `locks add` writes only the remote lock store and fails if the source is already locked by pipeline config.
- `locks remove` removes only remote locks and cannot remove static pipeline locks.
- `locks add --force` is required to update an existing remote lock reason.
Examples:
```bash
narratio locks --session-id 2026-04-04
2026-05-22 19:05:23 -05:00
narratio locks add --session-id 2026-04-04 --reason "manual transcript review" narratio.transcript.final_trimmed
narratio locks remove --session-id 2026-04-04 narratio.transcript.final_trimmed
2026-05-21 19:36:14 -05:00
```
2026-05-18 22:03:59 -05:00
### `run-stage`
Purpose:
2026-05-19 19:42:28 -05:00
- Execute exactly one stage.
2026-05-18 22:03:59 -05:00
Syntax:
```bash
2026-05-20 20:41:28 -05:00
narratio run-stage [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>] [--force] [--artifacts <name[,name...]>] <stage>
2026-05-18 22:03:59 -05:00
```
Success output:
- `narratio run-stage: stage=<name> executed=<n> skipped=<n> force=<true|false>; manifest=<path>`
2026-05-19 19:42:28 -05:00
`--artifacts` behavior:
2026-05-22 18:01:05 -05:00
- accepted only when `<stage>` is `analyze` or `archive` .
2026-05-19 19:42:28 -05:00
- names are normalized (trimmed, deduplicated, sorted).
- unknown configured artifact keys fail.
2026-05-22 18:01:05 -05:00
- for `archive` , unselected configured artifact promotions are skipped; built-in transcript and bounds promotions still run.
2026-05-18 22:03:59 -05:00
2026-05-19 19:42:28 -05:00
Common failure cases:
- missing stage positional arg.
2026-05-18 22:03:59 -05:00
- unknown stage name.
2026-05-22 18:01:05 -05:00
- using `--artifacts` with any stage other than `analyze` or `archive` .
2026-05-18 22:03:59 -05:00
2026-05-21 23:02:19 -05:00
### `analyze`
Purpose:
- Force-rerun the analyze stage.
- Provide a shorter equivalent for `narratio run-stage --force analyze` .
Syntax:
```bash
narratio analyze [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>] [--artifacts <name[,name...]>]
```
Success output:
- `narratio analyze: executed=<n> skipped=<n> force=true; manifest=<path>`
Common failure cases:
- positional arguments.
- `--force` , because force is implicit.
- unknown configured artifact keys.
2026-05-22 11:28:38 -05:00
### `publish`
Purpose:
- Force-rerun the archive stage.
- Provide a shorter equivalent for `narratio run-stage --force archive` .
Syntax:
```bash
2026-05-22 18:01:05 -05:00
narratio publish [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>] [--artifacts <name[,name...]>]
2026-05-22 11:28:38 -05:00
```
Success output:
- `narratio publish: executed=<n> skipped=<n> force=true; manifest=<path>`
Common failure cases:
- positional arguments.
- `--force` , because force is implicit.
2026-05-22 18:01:05 -05:00
- unknown configured artifact keys.
2026-05-22 11:28:38 -05:00
- archive-stage failures such as missing required promotion sources or locked storage errors.
2026-05-19 22:32:55 -05:00
### `restore`
Purpose:
2026-05-21 23:31:01 -05:00
- Restore durable session state from the committed remote archive current state.
- Default restore installs `manifest.json` , `transcripts/**` , and `artifacts/**` from the current session archive.
- When configured previous-session inputs require it, restore reconstructs `previous/**` from the previous session's committed current archive, matching what `prepare` would hydrate.
- `audio/**` is restored only with `--include-audio` .
2026-05-19 22:32:55 -05:00
Syntax:
```bash
2026-05-20 20:41:28 -05:00
narratio restore [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--session-id <id>] [--previous-session-id <id>] [--dry-run] [--force] [--include-audio]
2026-05-19 22:32:55 -05:00
```
Success output (dry-run):
- `Restore plan for <campaign>/<session_id>`
- `Remote run: <run_id>`
- `Would download: <n>`
- `Would skip unchanged: <n>`
- `Conflicts: <n>`
Success output (non-dry-run):
- `Restored session archive for <campaign>/<session_id>`
- `Remote run: <run_id>`
- `Downloaded: <n>`
- `Skipped unchanged: <n>`
- `Conflicts: <n>`
Common failure cases:
- storage backend is not configured.
- remote `current/run_id.txt` missing/empty.
- remote `current/manifest.json` missing or invalid.
- remote manifest session/campaign mismatch.
2026-05-21 23:31:01 -05:00
- required previous-session current state or artifact missing.
2026-05-19 22:32:55 -05:00
- local conflicts without `--force` .
- session lock conflict.
2026-05-21 23:31:01 -05:00
Dry-run output may include planned previous-cache downloads. Existing differing files under `previous/**` follow the normal restore conflict policy and require `--force` to overwrite.
2026-05-21 22:22:08 -05:00
When `--include-audio` is set, S3 audio files are restored through the shared audio cache. Cache hits avoid re-downloading large audio objects.
2026-05-21 22:48:18 -05:00
### `clean`
Purpose:
- Remove local Narratio work/spool state for testing, reruns, or recovery from corrupted local files.
- Preserve durable S3 audio cache state unless `--clear-cache` is passed.
Syntax:
```bash
narratio clean --session-id <id> [--config <pipeline.yml>] [--campaign <campaign.yml>] [--session <session.yml>] [--previous-session-id <id>] [--dry-run] [--clear-cache]
narratio clean --all [--config <pipeline.yml>] [--dry-run] [--clear-cache]
```
Session cleanup deletes:
- `{workspace.root}/work/{campaign}/{session_id}`
- `{spool.root}/{campaign}/{session_id}`
All-session cleanup deletes:
- `{workspace.root}/work`
- the contents of `{spool.root}` , while preserving the spool root directory itself.
Cache behavior:
- cache is preserved by default.
- `--clear-cache` in session mode removes cached S3 audio files for the resolved session.
- `--all --clear-cache` removes the configured Narratio S3 audio cache namespace for the configured bucket/root prefix.
- `--clear-cache` does not delete arbitrary files under `pipeline.cache.root` .
Common failure cases:
- missing `--session-id` when `--all` is not set.
- combining `--all` with `--campaign` , `--session` , `--session-id` , or `--previous-session-id` .
- unsafe cleanup target, such as a symlink, a non-directory session target, a configured root directory, or a path outside the configured root.
2026-05-18 22:03:59 -05:00
## Common Workflows
Default-discovery run:
```bash
narratio run --session-id 2026-04-04
```
2026-05-19 19:42:28 -05:00
Run only selected analyze artifacts:
2026-05-18 22:03:59 -05:00
```bash
2026-05-19 19:42:28 -05:00
narratio run --session-id 2026-04-04 --artifacts session_recap,player_handout
2026-05-18 22:03:59 -05:00
```
2026-05-19 19:42:28 -05:00
Resume with selected analyze artifacts:
2026-05-18 22:03:59 -05:00
```bash
2026-05-19 19:42:28 -05:00
narratio resume --session-id 2026-04-04 --artifacts player_handout
2026-05-18 22:03:59 -05:00
```
2026-05-21 23:02:19 -05:00
Force-rerun analyze with selected artifacts:
2026-05-18 22:03:59 -05:00
```bash
2026-05-21 23:02:19 -05:00
narratio analyze --session-id 2026-04-04 --artifacts player_handout
2026-05-18 22:03:59 -05:00
```
2026-05-22 11:28:38 -05:00
Force-rerun archive publishing:
```bash
narratio publish --session-id 2026-04-04
```
2026-05-19 22:32:55 -05:00
Preview restore actions without writes:
```bash
narratio restore --session-id 2026-04-04 --dry-run
```
Restore and then force analyze:
```bash
narratio restore --session-id 2026-04-04
2026-05-21 23:02:19 -05:00
narratio analyze --session-id 2026-04-04
2026-05-19 22:32:55 -05:00
```
2026-05-20 15:17:04 +00:00
Rehydrate canonical previous-session inputs after artifact-input changes:
```bash
narratio run-stage --session-id 2026-04-04 --force prepare
```
2026-05-21 22:48:18 -05:00
Reset local state before testing restore:
```bash
narratio clean --session-id 2026-04-04 --dry-run
narratio clean --session-id 2026-04-04
narratio restore --session-id 2026-04-04 --include-audio
```
Clean all local sessions while keeping cached S3 audio:
```bash
narratio clean --all
```
2026-05-18 22:03:59 -05:00
## Diagnostic / Recovery Commands
2026-05-19 19:42:28 -05:00
Inspect stage status:
2026-05-18 22:03:59 -05:00
```bash
narratio status --manifest <manifest.json>
```
2026-05-19 19:42:28 -05:00
Get manifest path from previous output:
2026-05-22 11:28:38 -05:00
- `run` , `resume` , `run-stage` , `analyze` , and `publish` print `manifest=<path>` on success.
2026-05-19 19:42:28 -05:00
## `--artifacts` and `--force`
2026-05-18 22:03:59 -05:00
2026-05-22 18:01:05 -05:00
- `--artifacts` filters which configured artifacts are executable when analyze runs and which configured artifact promotions archive publishes.
2026-05-19 19:42:28 -05:00
- `--artifacts` does not imply `--force` .
2026-05-19 22:32:55 -05:00
- if analyze is already `succeeded` and `--force` is not set, runner-level skip still applies.
2026-05-22 18:01:05 -05:00
- `--artifacts` does not suppress built-in transcript or bounds promotions.