Skip to content

feat(messages): show message-carried blurhash before decoded originals - #40

Merged
wesbillman merged 1 commit into
mainfrom
feat/message-blurhash
Sep 13, 2026
Merged

wesbillman merged 1 commit into
mainfrom
feat/message-blurhash

Conversation

@baxen

@baxen baxen commented Sep 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

Show message-carried BlurHash locally while the original image loads, then sharpen in place after the original has decoded. The reserved frame and scroll position stay stable; no thumbnail image is requested.

  • Preserve bounded, validated signed imeta blurhash metadata in attachment projection; folding does no pixel work.
  • Paint a visibility-gated 32×32 canvas using pinned blurhash@2.0.5, then remove it entirely when revealing the decoded original, including behind transparent pixels.
  • Preserve existing source-dimension size caps, stable missing-dimension fallback, scale-down fit, lazy original loading, session media access and click-to-original links. Failed originals retain the blur; invalid/missing hashes and unavailable preview capabilities retain the ordinary background.
  • Add parser/painter/access regressions and Chromium/WebKit coverage for held decode, ready-first, failures/recovery, source changes/unmount/StrictMode, offscreen work, geometry/reading anchors and original-only request ledgers. Document the behavior and tradeoffs.

Implementation by pic-worker-aa352576c7, published on baxen's behalf using his explicitly authorized default Git identity, with agent co-author attribution and author-matching DCO sign-off.

Validation and exact snapshot

Head: 9aa2ab069c1a108e8afcfdb73f081069224f42a3
Base/merge base: c9810f3293266b5741ce16c08aa52710847d5e77
Committed tree: c049ddb4c6ae9b4f8ed749032988efea857876cf

The implementation worker's prior bin/just scan passed (exit 0) on the uncommitted 17-file snapshot, not on a then-nonexistent commit. Before publication, all 17 working-file and staged-file SHA-256 hashes were verified against that saved manifest; afterward, all committed-file hashes matched and the committed tree equaled the checked staged tree. No functional or formatting changes were made during publication. Manifest SHA-256: 0698f7475273c70136d5390d9f0d3a156d577a06ae0fe760567947c21fa84012.

Prior matching-snapshot evidence:

  • Frozen install; formatting/lint, TypeScript/design checks, frontend build and workspace Clippy passed.
  • 35 Node integration tests; 1,117 Vitest tests in 113 files; 16 plugin-manager Rust tests; 9 native Rust tests.
  • 298 Chromium/WebKit browser cases; 14 design-browser cases. Focused image coverage passed in both engines; saved request ledgers contain originals only, including actual remounts. Existing Vite chunk-size advisories were non-failing.
  • A fresh-context independent AI review found no actionable findings, confirmed the same manifest and reused the scan evidence; it was not an independent suite rerun or code-owner approval.
  • Baxen tried the live local preview, reported “this is working quite nicely!”, and requested this PR. This is human visual acceptance, not a claim of new native/cross-platform certification.

Publication checks:

  • Explicit tracked pre-commit wrapper: passed, 14 files checked, no fixes.
  • At this head, explicit tracked pre-push wrapper with the exact new-branch ref update: TypeScript plus all 1,117 Vitest tests passed (dependency change selects the full unit suite).
  • Existing security hooks ran successfully during the normal commit and push. Hook configuration was preserved; no bypass or persistent composition change.
  • Full PR diff/whitespace checks passed; local and remote heads match; worktree clean.

Limits and review

Only messages with valid BlurHash metadata show the blur. It approximates colors/shapes, not alpha or animation. Preview work is bounded per visible mounted image and uncached, so remounts can decode again; without IntersectionObserver the normal background/original path remains. No thumbnail network path, server changes, new media variants, avatars, cache/scheduler, crossfade or scroll/unread changes.

No new worst-case decode/frame-time benchmark, remount soak, native GUI or cross-platform acceptance is claimed. Hosted CI required / DCO Check and required human/code-owner approval remain merge gates. No merge requested or performed.

Origin

buzz://message?channel=6a9d1901-702f-4307-9dbc-b4a4c664ef28&id=5273d8720c55c5e91c46bb3434c562e758eea81a68e7f614c6a674df0cf1d8f3

Paint validated message metadata locally into a bounded, visibility-gated
preview, then reveal the decoded original in the existing fixed frame.
Keep lazy original loading, access resolution and original links unchanged;
no thumbnail requests, crossfade or image-driven layout changes.

Implementation by pic-worker-aa352576c7 (run
172b5b30-192d-4659-9481-2b41a2574702), published on baxen's behalf using
his explicitly authorized default Git identity. The committed content
matches the precommit snapshot that passed the full scan, independent
review and baxen's live visual acceptance.

Co-authored-by: pic-worker-aa352576c7 <6838876f3610dc213d19edeb1cdf5a8d0a0b568dc9b40db674ade16725074cce@buzz.block.builderlab.xyz>
Signed-off-by: Bradley Axen <baxen@squareup.com>
@baxen
baxen requested a review from wesbillman as a code owner September 12, 2026 23:48

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9aa2ab069c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread package.json
"@tauri-apps/api": "^2.11.1",
"@xterm/addon-fit": "0.10.0",
"@xterm/xterm": "5.5.0",
"blurhash": "2.0.5",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Add the required DCO sign-off

The reviewed commit has no Signed-off-by: trailer, so it violates the repository's per-commit DCO requirement and cannot pass the documented DCO merge gate. Recreate the commit with a sign-off matching its verified effective author identity.

AGENTS.md reference: AGENTS.md:L49-L54

Useful? React with 👍 / 👎.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-12T23:51:00.274051Z 9aa2ab0 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Review clear

No actionable code, product, or security defects found at head 9aa2ab069c1a108e8afcfdb73f081069224f42a3. Reviewed against merge base c9810f3293266b5741ce16c08aa52710847d5e77; current target base is 834433c580d8e36a8ae9cd9da5695d1166604b94.

  • Traced message-carried metadata through validation, shared channel/thread folding and rendering, signed disk restoration, media resolution and access-loss cleanup. The optional field preserves legacy attachments; preview rendering adds no thumbnail URL or independent media authority.
  • Reviewed original decode, cached-load handling, visibility gating, retired callbacks, source/hash remounts, failures and full canvas removal behind transparent originals. The existing fixed frame, dimension caps, scale-down rendering and original-link behavior remain intact. Independent lifecycle/test-oracle review was integrated before publication.
  • Read the new unit/browser coverage and fixtures. PR-associated CI run34726355386 reports success across required lanes, Chromium/WebKit shards and DCO. This was a Studio-only source/metadata review: no PR code was checked out or executed by the reviewers. CI is supporting evidence, not independent native, performance or soak certification.

Avatars, video links, upload encoding, server variants, caching/scheduling, and scroll/unread policy are outside this change. The existing inline missing-sign-off allegation does not match this head: its commit contains Signed-off-by: Bradley Axen <baxen@squareup.com>.

This is a clear review comment, not GitHub approval or authorization to merge.

@wesbillman
wesbillman merged commit d587700 into main Sep 13, 2026
11 checks passed
@wesbillman
wesbillman deleted the feat/message-blurhash branch September 13, 2026 14:00
delkc added a commit that referenced this pull request Sep 14, 2026
* origin/main:
  fix(messages): prevent native WebKit prepend blanking (#49)
  feat: add shared browser and standard desktop notifications (#38)
  Prevent whole-window scroll bounce (#41)
  test: replace timing races with explicit lifecycle barriers (#45)
  test(browser): isolate fixture optimizer caches (#46)
  test(browser): settle startup catch-up before request baselines (#43)
  feat(messages): show message-carried blurhash before decoded originals (#40)
  Add a shared full-page surface (#29)
  fix(messages): prevent image-driven timeline scroll snap-back (#31)
  Restore grouped channel membership activity (#30)
  feat: add broker-backed Agent Activity panel (#36)

Signed-off-by: Clay Delk <clay.delk@gmail.com>

# Conflicts:
#	src/bundled/channels/ChannelsPage.tsx
#	src/features/messages/ChannelTimeline.tsx
#	src/features/messages/MessageRow.tsx
#	src/features/relay/contracts.ts
#	src/features/relay/fold.ts
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.

2 participants