You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A migration can't carry an entry's original publication date through the seed or the CLI, so every imported entry says it was published on the day of the import.
We moved a WordPress site with ~680 posts (2016–2026) to EmDash. After seeding, all 681 entries had published_at = the import day, so the journal was ordered by import time, the RSS feed's pubDates and the sitemap's lastmod were all the same date, and datePublished in the JSON-LD was wrong for every post.
SeedContentEntry (packages/core/src/seed/types.ts) has status, data, taxonomies, bylines, locale… but no date, and status: "published" stamps "now".
emdash content create / update take --data, --slug, --locale, --translation-of, --draft — no date. content schedule --at only accepts a future time.
The REST API does accept publishedAt on a write, and the WordPress importer (cli/commands/import/wordpress.ts) already maps pubDate to publishedAt. So the column and the write path exist; only the seed format and the CLI don't expose them.
We worked around it with a script that writes published_at straight into the database after seeding (and again over wrangler d1 execute for D1, which then also needs the KV content cache cleared by hand). That's the part every migration would rather not write.
Proposal
Small and additive:
SeedContentEntry.publishedAt?: string (ISO 8601). Honoured only with status: "published"; ignored for drafts. Optionally createdAt? too, for the same reason.
emdash content create|update --published-at <iso> that sends the existing publishedAt field.
Past dates allowed (that's the point); a future date keeps meaning "scheduled", as today.
Stored as UTC like everything else since the 1.0 datetime normalization.
Happy to open the PR if this direction is OK.
Drafted with Claude (Opus 5.5) from notes on our migration; checked against main at 584f166.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
The problem
A migration can't carry an entry's original publication date through the seed or the CLI, so every imported entry says it was published on the day of the import.
We moved a WordPress site with ~680 posts (2016–2026) to EmDash. After seeding, all 681 entries had
published_at= the import day, so the journal was ordered by import time, the RSS feed'spubDates and the sitemap'slastmodwere all the same date, anddatePublishedin the JSON-LD was wrong for every post.SeedContentEntry(packages/core/src/seed/types.ts) hasstatus,data,taxonomies,bylines,locale… but no date, andstatus: "published"stamps "now".emdash content create/updatetake--data,--slug,--locale,--translation-of,--draft— no date.content schedule --atonly accepts a future time.publishedAton a write, and the WordPress importer (cli/commands/import/wordpress.ts) already mapspubDatetopublishedAt. So the column and the write path exist; only the seed format and the CLI don't expose them.We worked around it with a script that writes
published_atstraight into the database after seeding (and again overwrangler d1 executefor D1, which then also needs the KV content cache cleared by hand). That's the part every migration would rather not write.Proposal
Small and additive:
SeedContentEntry.publishedAt?: string(ISO 8601). Honoured only withstatus: "published"; ignored for drafts. OptionallycreatedAt?too, for the same reason.emdash content create|update --published-at <iso>that sends the existingpublishedAtfield.Stored as UTC like everything else since the 1.0 datetime normalization.
Happy to open the PR if this direction is OK.
Drafted with Claude (Opus 5.5) from notes on our migration; checked against
mainat 584f166.All reactions