"subject":"Phase 0 deployed — draft links + Sveltia admin live on me.nech.pl, push to git.nech.pl, 2026-10-06",
"subject":"Phase 0 deployed — draft links + Sveltia admin live on me.nech.pl, push to git.nech.pl, 2026-10-06",
"completedAt":"2026-10-06",
"completedAt":"2026-10-06",
"learnings":"Runbook rsync recipe includes --delete (exact mirror, like games/opal). Trailing-slash smoke shape: trailingSlash:false pages answer on /tdah not /tdah/ (slash variant 404s; directory-without-index 403s as on /blog/). Client-component fixes verify via served-chunk md5 vs local build, not static HTML grep."
"learnings":"Runbook rsync recipe includes --delete (exact mirror, like games/opal). Trailing-slash smoke shape: trailingSlash:false pages answer on /tdah not /tdah/ (slash variant 404s; directory-without-index 403s as on /blog/). Client-component fixes verify via served-chunk md5 vs local build, not static HTML grep."
},
{
"id":"blog-6",
"subject":"Bilingual blog folder model deployed (drafts at /blog/d/<id> noindexed, per-collection admin) + GitLab implicit-grant auth fix, 2026-10-07",
"completedAt":"2026-10-07",
"learnings":"Folder-model migration: drafts live only under /blog/d/ gated by noindex + robots.txt Disallow, so smoke checks both URL shape (old /blog/hello-world-again.html must be absent) and served config.yml (auth_type: implicit for GitLab public-client PKCE failure). Sveltia config ships as a static artifact — verify the live copy, not just the repo."