# Roadmap: Operator Helper Commands ## Status Implemented. The operator helper command set is no longer conceptual. Current behavior is documented in: - `docs/cli.md` - `docs/operations.md` - `docs/config.md` - `docs/internal/artifacts.md` - `docs/internal/stage-archive.md` ## Implemented Commands - `narratio session validate` - `narratio status --manifest ` - `narratio status --session-id ` - `narratio session init --output ` - `narratio session init --remote` - `narratio artifacts list` - `narratio artifacts list --remote` - `narratio locks` - `narratio locks add ` - `narratio locks remove ` ## Implemented Decisions - Helper output is text-only. No JSON schema exists yet. - `status` remains a top-level command. - `session validate`, `session init`, and `artifacts list` are nested helper commands. - `locks` is the single top-level command for listing, adding, and removing archive promotion locks. - Remote session initialization requires explicit `--remote`. - Local session initialization requires `--output`. - Remote artifact availability is opt-in with `artifacts list --remote`. - Mutable locks are source-based and stored at `{session_prefix}/locks.yml`. - The remote lock store uses strict YAML with top-level `locks`. - Static `pipeline.archive.locks` and remote locks are merged; static locks win on duplicate sources. - `locks remove` removes only remote locks. - Ordinary execution `--force` does not override locks. - Remote lock writes use existence checks and `--force` for updates; there is no compare-and-swap protection. ## Remaining Future Enhancements These are intentionally not implemented: - `--json` output for helper commands. - Optimistic concurrency or ETag compare-and-swap for remote lock mutations. - Rich remote artifact availability across historical run-local objects. - Session-lock acquisition for remote mutation helpers. - Broader campaign helper commands such as `campaign validate` or `campaign publish`.