Inventory before import
We began with a list of content types, URL patterns, media assumptions, and undocumented habits. The database was only one part of the system we were moving.
The useful questions were concrete: Which slugs must remain stable? Which categories still help readers? Which images have enough resolution for the new card crop? Which drafts should stay behind?
post = Railspress::Post.find_or_initialize_by(slug: source.slug)
post.assign_attributes(title: source.title, status: :draft)
post.save!
Starting imported records as drafts created a deliberate editorial checkpoint. Redirects and attachment verification happened before publication, not after readers found the gaps.