| fix(web): keep the published-release fact current instead of after the fact (#5612) * fix(web): keep the published-release fact current instead of after the fact web/data/latest-published-release.json is hand-maintained and feeds facts.generated.ts. Nothing ever wrote it, so it sat at v0.9.10 while v0.9.11 had been published on 2026-08-23. The marketing deploy therefore succeeded and then failed its own post-deploy check on latestPublishedRelease.tag — the site was already live with a stale fact by the time anyone found out. - web/scripts/sync-latest-release.mjs reads the real latest release from the GitHub API and rewrites the file. --check makes drift a failing gate instead of a silent one. It refuses to write a release that deriveLatestPublishedRelease() would reject, because that helper returns null on any shape violation and would drop the fact entirely rather than report a bad one. - web.yml runs the check right after "Check facts drift", so a stale release fact stops the deploy before it ships rather than after. - The file and facts.generated.ts are refreshed to v0.9.11. The fact stays checked in on purpose: derive-facts.mjs must work with no network. This adds the missing write path, it does not move the read path online. * fix(web): sync the published-release fact into its docs mirror too The fact lives in two checked-in places and both feed the public surface: web/data/latest-published-release.json (read by derive-facts.mjs) docs/public-surface-facts.json (latestPublishedRelease, which names the file above as its `sources`) sync-latest-release.mjs only wrote the first, so the new check:latest-release gate would pass while the mirror still said v0.9.10 — and web/lib/public-surface-contract.test.ts, which asserts the two agree, went red instead (Lint & Type Check: expected { tag: 'v0.9.10' } to deeply equal { tag: 'v0.9.11' }). Write both, and make --check report either one being stale, so the gate covers the whole fact rather than one copy of it. The mirror update preserves every key beyond the four synced fields (notably `sources`), so this stays a fact refresh and not a schema rewrite. Verified: npx vitest run in web/ is 337 passed (38 files), up from 336 passed / 1 failed. --------- Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 11 天前 |