Why Articles Can Stay Old After a Code Update
Three places to update
Page code lives in Git, runtime files live in an image, and projects and notes live in SQLite. Pulling a changed JSON file does not replace database records automatically.
A versioned draft and a live database
The content importer validates backend/content/portfolio.json and updates projects and notes by slug. New notes are published; existing notes keep their publication state. Unrelated records are retained.
The image has another copy
The Dockerfile copies content into the image. Updating the host directory leaves that copy unchanged unless the image is rebuilt or the current content directory is mounted into a one-off importer container.
Coordinate edits
Admin edits change the database directly. Importing an old draft can overwrite those changes, so reconcile edits or keep an export first. The importer creates a backup before writing, but does not automatically resolve editorial conflicts.