commits on main
2026-09-01
39d31c5d Mary chore: use terser for bundle minification
chore: use terser for bundle minification
51578f5d Mary chore: upgrade dependencies
chore: upgrade dependencies
82442302 Mary fix: close floating popups during navigation
fix: close floating popups during navigation
2026-08-30
95f2b363 Mary fix: send valid video metadata hints when starting an upload
fix: send valid video metadata hints when starting an upload
57f31dc5 Mary refactor: prioritize handles across the interface
refactor: prioritize handles across the interface
0393ac84 Mary feat: preview Tangled strings in composer
feat: preview Tangled strings in composer
76577b3d Mary fix: keep Tangled string previews at a fixed height
fix: keep Tangled string previews at a fixed height
efbefd1f Mary fix: align post placeholder content
fix: align post placeholder content
22a4905b Mary fix: correct regressions from the list state component migration
fix: correct regressions from the list state component migration
d4d2688c Mary refactor!: retire ListFooter and ListMaybePlaceholder
refactor!: retire ListFooter and ListMaybePlaceholder
34d6dc21 Mary refactor: move the remaining tail-only lists onto ListTail
refactor: move the remaining tail-only lists onto ListTail
fea2565a Mary refactor: let dialog lists compose their own pagination tail
refactor: let dialog lists compose their own pagination tail
496f05c2 Mary refactor: migrate the profile collection lists to the new list state components
refactor: migrate the profile collection lists to the new list state components
1fbb5acb Mary refactor: migrate messages and notifications lists to the new list state components
refactor: migrate messages and notifications lists to the new list state components
a8df7417 Mary refactor: migrate list-replacing screens to the new list state components
refactor: migrate list-replacing screens to the new list state components
2026-08-29
ed271434 Mary refactor: migrate profile feedgens to the new list state components
refactor: migrate profile feedgens to the new list state components
drops the sentinel-row machinery in favour of the whole-surface components, and fixes two defects it was hiding: `isEmpty` is true whenever there is no data, failure included, so an initial error pushed `ERROR_ITEM` and then `EMPTY` — the screen told the user the request had failed and that they had no feeds, stacked. it now renders a single `ListError`. `LOAD_MORE_ERROR_ITEM` was unreachable: its branch required `!isEmpty`, which implies `data?.pages` is truthy, so the preceding branch always won. `LoadMoreRetryBtn` never rendered here. also drops two inert props on the way past. `hasNextPage` is only read as `!hasNextPage && showEndMessage`, and `showEndMessage` was never passed; `height={180}` restated the css default. the footer additionally rendered during the initial load, since `isEmpty` is gated on `!isPending`, putting a bordered 180px box under the skeleton. Claude-Session: https://claude.ai/code/session_01DZRW2fBuJdbQENW4Rq9fy8
7a1b320b Mary fix: stop skeleton card rows stretching to fill leftover space
fix: stop skeleton card rows stretching to fill leftover space
ad067679 Mary refactor: split list loading and error states into distinct components
refactor: split list loading and error states into distinct components
f20707e3 Mary fix: handle query network failures
fix: handle query network failures
ef67ceeb Mary fix: expire persisted query cache entries
fix: expire persisted query cache entries
614e06e5 Mary refactor: persist queries individually
refactor: persist queries individually
ebb1a28b Mary fix: keep history header visible while scrolling
fix: keep history header visible while scrolling
e5708adf Mary fix: prevent tangled embed footer overflow
fix: prevent tangled embed footer overflow
2ae28537 Mary refactor: configure scroll-away lead-in
refactor: configure scroll-away lead-in
32addfc2 Mary refactor: parse dates once in isStatusStillActive
refactor: parse dates once in isStatusStillActive
8644b701 Mary fix: keep tangled string embed height on load failure
fix: keep tangled string embed height on load failure
Claude-Session: https://claude.ai/code/session_0138rjvapq5AKYNuvdnZYrMG
2026-08-28
81a8d65c Mary chore: make Vite bundled dev mode work again
chore: make Vite bundled dev mode work again
c42621f3 Mary chore: upgrade dependencies
chore: upgrade dependencies
0dce3329 Mary chore: use bundled dev mode by default
chore: use bundled dev mode by default
b2402494 Mary chore: upgrade to pnpm 12
chore: upgrade to pnpm 12
9075f418 Mary feat: embed Tangled code files
feat: embed Tangled code files
c6787d04 Mary feat: give the starter pack page a scroll-away header
feat: give the starter pack page a scroll-away header
c88ad192 Mary fix: let header content shrink instead of overflowing
fix: let header content shrink instead of overflowing
554f35e6 Mary feat: move the profile overflow menu into the sticky header
feat: move the profile overflow menu into the sticky header
09a056eb Mary docs: advance the reviewed upstream tip to 5eb5ac4800
docs: advance the reviewed upstream tip to 5eb5ac4800
d0ccb0b6 Mary refactor: read the message draft through an effect event
refactor: read the message draft through an effect event
the render-synced ref was doing what useEffectEvent is for. same behaviour — the cleanup still sees the last committed message — with one fewer effect, and it matches how the rest of the codebase reaches non-reactive values from an effect.
33bcfdf2 Mary refactor: hoist finally blocks out of the way of React Compiler
refactor: hoist finally blocks out of the way of React Compiler
React Compiler cannot lower a `try` with a `finalizer` clause, so it silently skipped optimizing every component and hook containing one — 13 sites, confirmed by running the compiler over `src/`. none of the guarded bodies return or rethrow, so running the cleanup after the `try`/`catch` is equivalent. three of the sites were empty `finally {}` leftovers and are just gone.
9cda03b8 Mary fix: check every loaded page before calling a list empty
fix: check every loaded page before calling a list empty
these lists only looked at the first page, so a profile whose first page of feeds, lists, or starter packs came back empty rendered the empty state even after later pages loaded.
326eaa2e Mary fix: stop feeds from stalling on filtered-out pages
fix: stop feeds from stalling on filtered-out pages
a feed gave up whenever a page's items were all filtered out client-side, and `CustomFeedAPI` suppressed the cursor on an empty page, so a feed could report itself exhausted while more pages existed upstream. one empty page is the wrong predicate for exhaustion — the appview legitimately returns an empty page with a cursor when hydration drops everything. extract the paginator both feeds had copied into `useAutoPagination`, and make exhaustion the concern of `getNextPageParam`, which is where the next page param is minted and where a cursor the server has already served can be recognised. `hasNextPage` then tells the truth for manual scrolling too, not just for the auto-paginator.
acd3c472 Mary chore: use own vanilla extract plugin
chore: use own vanilla extract plugin
2026-08-27
b2b1ae86 Mary refactor: tend to the profile search page
refactor: tend to the profile search page
f31e0281 Mary chore: allow bundled dev to work
chore: allow bundled dev to work
b3d2bb52 Mary refactor: move layered helper out of layers.css.ts
refactor: move layered helper out of layers.css.ts
30cd2de5 Mary fix: hide empty profile collection placeholders
fix: hide empty profile collection placeholders
33ba0976 Mary fix: align scroll-away border with header edge
fix: align scroll-away border with header edge
646382fe Mary fix: state header edge slots explicitly
fix: state header edge slots explicitly
2b31fcd1 Mary feat: add scroll-away headers
feat: add scroll-away headers
74cb1247 Mary chore: avoid running build
chore: avoid running build
23eb34af Mary fix: show bottom border on the list header when no tab bar follows
fix: show bottom border on the list header when no tab bar follows
2026-08-26
93beae7a Mary chore: advance upstream marker
chore: advance upstream marker