Problem
Splash orchestration state is spread across the conversation, accepted.json, report.json, generated artifacts, and implicit knowledge of which command ran last. After a restart, context compaction, terminal failure, or handoff to another journalist, there is no deterministic way to answer:
- Which gate is this run at?
- Which elements are accepted, produced, reviewed, approved, or delivered?
- What is the next valid action?
- Is the current report/artifact still the one that was reviewed?
The agent currently reconstructs this from prose and files, which is fragile and not auditable.
@rmdms
Suggested solution
Add a versioned run manifest and a deterministic resume command, for example:
bun skills/splash/scripts/resume.mjs exports/<slug>/run.json
The manifest should be the canonical orchestration ledger and contain no secrets. It should record:
- Run ID, schema version, project/input paths, and hashes of article/data inputs.
- Confirmed CADRAGE answers and per-element confirmed takeaways.
- Accepted proposal IDs and hashes.
- Per-element gate state: proposed, accepted, produced, reviewed, previewed, approved, delivered, blocked, or dropped.
- Current artifact/report hashes, generation timestamps, and provenance links.
- Structured review findings and overrides.
- Requested deliverables and completed delivery artifacts.
- Current gate plus the finite set of valid next actions.
Every gate command should update the manifest atomically after success. Failed commands should append a bounded failure event without advancing state. accepted.json and report.json can remain pipeline artifacts, but the run manifest owns orchestration progress and points to their exact versions.
resume should validate hashes/provenance, print a concise journalist-facing status, and emit the exact next command(s). It must never infer completion from conversation text alone.
Acceptance criteria
- Closing and reopening a run resumes at the same gate with the same valid next actions.
- Multi-element runs track each element independently without dropping unfinished work.
- A newer artifact, stale report, or changed accepted spec is detected and cannot inherit prior review/approval.
- Manifest updates are atomic and recover safely after interruption.
- No API keys, tokens, article secrets, or full credentials enter the manifest.
- Tests cover every gate transition, invalid transitions, crash recovery, stale provenance, schema migration, and multi-element resume.
Problem
Splash orchestration state is spread across the conversation,
accepted.json,report.json, generated artifacts, and implicit knowledge of which command ran last. After a restart, context compaction, terminal failure, or handoff to another journalist, there is no deterministic way to answer:The agent currently reconstructs this from prose and files, which is fragile and not auditable.
@rmdms
Suggested solution
Add a versioned run manifest and a deterministic resume command, for example:
The manifest should be the canonical orchestration ledger and contain no secrets. It should record:
Every gate command should update the manifest atomically after success. Failed commands should append a bounded failure event without advancing state.
accepted.jsonandreport.jsoncan remain pipeline artifacts, but the run manifest owns orchestration progress and points to their exact versions.resumeshould validate hashes/provenance, print a concise journalist-facing status, and emit the exact next command(s). It must never infer completion from conversation text alone.Acceptance criteria