Skip to content

Show transcript images as tiles, and clear removed sibling worktrees - #107

Merged
eivindjonassen merged 3 commits into
mainfrom
images/justified-tiles
Nov 10, 2026
Merged

eivindjonassen merged 3 commits into
mainfrom
images/justified-tiles

Conversation

@eivindjonassen

@eivindjonassen eivindjonassen commented Nov 10, 2026 •

Copy link
Copy Markdown
Member

Summary

Two changes: transcript images become small tiles with a swipeable viewer, and the unavailable-location warning now clears for removed worktrees that sit beside their project root.

Transcript image tiles

Transcript images showed as full-width images, or as square crops when there were several. They now show as small tiles you tap to open.

  • Justified tiles. Each tile keeps its image's shape, and every tile in a row shares one height. Rows aim for 170 points and stop at 200, so a lone portrait screenshot is about 92×200 instead of filling the screen. Each image joins the row its midpoint falls in when the total width is cut into equal shares, so seven screenshots split three and four, not three, three, and one. Very tall or wide images are cropped in the tile (aspect 0.4 to 2.5); the viewer always shows the whole image.
  • Swipeable viewer. Tapping a tile opens the full-screen viewer on that image. You can swipe between the group's images, and a counter ("2 of 3") shows the position. iOS keeps a zooming scroll view inside each page. Android turns paging off while an image is zoomed, and its pan gesture only activates when zoomed, so an unzoomed swipe reaches the pager.
  • Layout timing. Tiles start square and take their shape once the image loads, because the image's dimensions are only known then. Inline data URIs load fast, so the change should be brief.

Removed sibling worktrees

An iPhone kept a permanent unavailable-location warning for an external worktree that only archived sessions referenced, after the directory was removed.

  • Root entry in a parent listing. The removed-directory check lists a worktree's parent through the live project root. When that parent is an ancestor of the root, V2 lists the entry leading back to the root as ./ (or ../ one level higher) among the ../name/ siblings. The check rejected the whole listing as malformed, and a rejected listing never proves absence. It now ignores only that single entry; any other unexpected entry still rejects the listing. The 2026-10-25 fix only covered worktrees whose parent does not contain the root.
  • Selected location. Opening a session sets the selected location, and it stays set after leaving the session. The selected location was exempt from the check, so one visit kept the warning until the app restarted. Selection no longer protects a location, and a failed lookup of a selected location that the check proved removed no longer marks attention coverage incomplete. Active locations, notification attention, and cached pending requests keep their protections.

Both changes are already published as an EAS Update to preview (runtime 0.1.6) after both native fingerprints matched the installed baseline.

Verification

  • pnpm check (1532 mobile tests, adapter tests, both Hermes exports)
  • pnpm native:doctor (18/18)
  • pnpm crap --threshold 30
  • Tests cover the changed behavior: tile row partitioning and height cap, opening the viewer from a tile, the counter, swiping, no paging for a single image; adapter listings for a sibling worktree and a higher ancestor; selected-location retirement and coverage.
  • Platform behavior is verified on the affected targets, or the gap is documented. Neither change is verified on a device yet; both gaps are recorded in docs/COMPATIBILITY.md. For images, check that an Android pinch starting with sideways motion zooms rather than pages, and that zoom inside the pager behaves on iOS. For worktrees, check that the warning clears on the iPhone that showed it.
  • No credentials, addresses, identifiers, user content, private paths, or deployment files are included.
  • Documentation and TODO.md reflect the resulting behavior.

Images form justified rows that keep each image's shape. Rows aim for
170 points and stop at 200, so a lone portrait screenshot stays a small
tile instead of filling the screen. A small linear partition balances
the rows, so seven screenshots read as three and four.

The full-screen viewer now pages between the group's images and shows
a position counter. iOS keeps a zooming scroll view per page. Android
locks paging while zoomed, and its pan activates only when zoomed so an
unzoomed swipe reaches the pager.
Rows now come from a midpoint rule instead of a linear partition, so the layout has no uncovered nullable branches. Pan no longer rechecks zoom in its update, since it activates only while zoomed.
The removed-directory check lists a worktree's parent through the live
project root. When that parent is an ancestor of the root, the server
lists the entry leading back to the root as "." or "..", and the check
rejected the whole listing as malformed, so the location never retired.
It now ignores only that single entry; any other unexpected entry still
rejects the listing.

The selected location was also exempt from the check, and it outlives
the session screen that set it, so one visit kept the warning until the
app restarted. Selection no longer protects a location, and a failed
lookup of a selected location the check proved removed no longer marks
attention coverage incomplete.
@eivindjonassen eivindjonassen changed the title Show transcript images as tiles with a swipeable viewer Show transcript images as tiles, and clear removed sibling worktrees Nov 10, 2026
@eivindjonassen
eivindjonassen merged commit 44e662e into main Nov 10, 2026
4 checks passed
@eivindjonassen
eivindjonassen deleted the images/justified-tiles branch November 10, 2026 09:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant