Article

The Node revision engine: every save leaves a trail

CPalius core now records a snapshot of the editorial slice on every Node save; restoring produces a new revision.

· ZemoCA · 1 min read

Losing content is the most annoying story in most CMSs. CPalius now keeps an automatic revision on every Node save.

What is stored

NodeSnapshot captures the editorial slice: title, slug, status, moderation_state, data (JSON body + SEO), published_at, category and tag ids. Identity fields such as type and locale are not part of the snapshot — they are the record's identity, not its content.

How it works

  • NodeRevisionListener takes a snapshot on Node post-persist / post-update (same pattern as NodeIndexListener).
  • If the same content hash repeats back-to-back, no revision is written — no noise.
  • Restore never overwrites the old row; it creates a new revision from the current state. History always moves forward.
  • The PruneNodeRevisionsTask cron trims revisions beyond the per-node limit (default 25).

Settings and UI

content.revisions.enabled and content.revisions.max_per_node are managed from AACP. The /aacp/content/{id}/revisions screen shows the revision list, diffs and a restore button. Capability: content.revision.manage.

The engine lives in core; Blog, Pages and every future content module gain this history with no extra code.

Comments (0)

No comments yet. Be the first to write one.

Leave a comment

Your comment will appear after it is reviewed.

Related Posts