Open source · Content & Publishing

Editorial Status Machine

Model draft, review, scheduled, published and retired content transitions.

v0.1.0 · Node.js 22+ · MIT

Browse the public repository · View releases

Decide editorial lifecycle commands against an explicit state machine — declared states, declared transitions, and the actor roles allowed to perform each — and append the accepted ones to a local, hash-chained, append-only event log.

This walkthrough uses the tool's public README and checked-in example files. Run the command from a repository checkout with Node.js 22+.

Run the checked-in example

node bin/editorial-status-machine.mjs --root examples/clean --machine machine.json --commands commands.json --events ../../build/editorial-events.jsonl --now 2026-03-10T12:00:00Z

Read the result

An input that was named but is not there is evidence missing, not a configuration error: it is reported as input-unreadable in an incomplete report. stdout is empty only when the run never had a subject at all — an unusable flag, an unreadable root, a path outside it.

Scope

Bounds are enforced and reported by name — maxFileBytes, maxCommands, maxEvents, maxDocuments, maxStates, maxTransitions, maxActors. Exceeding one is incomplete with a finding, never a quietly shorter answer.