Release v1.16.0#278
Merged
Merged
Conversation
…row gaps (#257) (#273) #258 normalized the handle at WRITE time (admin save + Test), but every consumer reads credentials via getBlueskyCredentials(), which returned the handle raw. All 12 call sites feed it straight into agent.login(), so a `@`-prefixed handle still failed with a misleading InvalidEmail — and did so silently, since crossposts, polls and DM sync run as background jobs. Two paths were affected, not one: - BLUESKY_HANDLE (env) is never normalized anywhere — nothing touches it. - DB rows written before #258 were stored raw, and no migration backfills them. Normalize both branches of getBlueskyCredentials()'s return instead: one choke point, no call sites change, and it's robust to rows written by hand or by a future migration. Also normalize getIntegrationStatus()'s handle so the admin panel shows what we actually log in with, regardless of source. Tests: env-fallback normalization, legacy raw DB row, and status reporting — all three fail against the pre-fix code. Docs: note the leading-@ tolerance in .env.example + docs/bluesky-integration.md. Co-authored-by: Samuel Lison <samuel@slcolonies.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
….34.5 (#274) - @atproto/api 0.20.29 → 0.20.30 - tailwindcss + @tailwindcss/postcss 4.3.2 → 4.3.3 Deliberately NOT bumping sharp 0.34.5 → 0.35.3, despite triage verifying it green. Caret on a 0.x pins the minor, so our ^0.34.5 (>=0.34.5 <0.35.0) and ^0.35.3 are disjoint with next 16.2.10's optionalDependencies.sharp ^0.34.5 — npm can't dedupe, so we'd get ours hoisted plus next's nested, i.e. two full libvips native toolchains (~16MB each) in the standalone image, with next's optimizer loading 0.34.5 while our code loads 0.35.3 in the same process. tsc/vitest/next build all pass either way because none of them assert dependency-tree shape — the duplicate is invisible to every gate we run. Only `npm ls sharp --all` shows it. Revisit when next widens its optional pin. Verified: npm ls sharp --all → exactly one, deduped under next. Audit unchanged: 3 moderate, all the known postcss-inside-next chain (#12). Co-authored-by: Samuel Lison <samuel@slcolonies.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…icker (#250) (#275) Ships the first alternative theme and the admin control to select it. These land together on purpose: a picker with one theme is dead UI, and a theme with no picker is unreachable. Editorial is pure data — warm sepia surfaces, a terracotta accent, sage moss, and an inverted type pairing (sans headlines over serif body). No new machinery: buildThemeStyle already diffs a theme's tokens against the default and injects the delta, and resolveLayout already honours its layout preset (feed: "list"). Adding a theme is one file plus one registry line. Constraint worth recording: every theme must be DARK for now. ~56 files and the global body class hardcode Tailwind neutrals (text-white, text-gray-200) that no theme token can reach, because @theme extends the palette rather than replacing it — on a paper ground text-white is 1.07:1, i.e. an invisible site. themes.test.ts now encodes this as a contrast invariant over every registered theme, so it can't be violated by accident (verified: a light surface-950 fails it). Light themes need those utilities migrated to tokens first. Fonts only swap round because buildThemeStyle can't register @font-face and only Inter + Source Serif 4 are self-hosted; mono is untouched so it diffs out. Also fixes two things a second theme would otherwise have exposed: - viewport.themeColor and the PWA manifest hardcoded the default's #0a0a0f, so the browser chrome and installed-app splash clashed with any other theme. Both now derive from the active theme's surface-950 (static `viewport` had to become `generateViewport` — Next forbids exporting both). - The Site settings save wrote `layout.feed || "cards"`, pinning an explicit override on first save even if untouched, which would stop Editorial's list preset from ever applying. Feed layout now offers "Inherit from theme". Verified: default injects nothing and still reports #0a0a0f (pixel-identical); editorial injects all 18 tokens and reports #17120e; both eyeballed via THEME=<id> next dev. 490 tests. Co-authored-by: Samuel Lison <samuel@slcolonies.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Roll the Unreleased block into a dated 1.16.0 section and bump package.json + lockfile 1.15.0 → 1.16.0. MINOR: the "Editorial" second theme + theme picker (#250, #275), a dependency refresh (#274), plus the Bluesky env-handle fix (#257, #273). No breaking changes; default instances render identically. Co-authored-by: Samuel Lison <samuel@slcolonies.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cuts v1.16.0 —
dev→main.🎨 What's shipping
@-prefixed handle silently failing every crosspost/poll. (Bluesky integration: handle with leading @ fails to connect (not stripped → InvalidEmail) #257, fix(bluesky): normalize the handle on read, closing the env + legacy-row gaps (#257) #273)MINOR: backward-compatible features, no breaking changes. Default instances render identically.
Merge with a merge commit — not squash.
🤖 Generated with Claude Code