Skip to content

fix: simplify automatic log updates - #1099

Merged
xHeaven merged 6 commits into
productionfrom
fix/author-avatar-autofetch
Oct 24, 2026
Merged

xHeaven merged 6 commits into
productionfrom
fix/author-avatar-autofetch

Conversation

@xHeaven

@xHeaven xHeaven commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

Summary

Following and Latest now load new commits quietly and show one New commits control only when ready content is waiting above a scrolled reader. The next 30-second check also removes arrivals that were deleted or are no longer visible, so a four-commit announcement becomes three and disappears if none remain.

Changes

  • Track pending commit identities and derive the accessible count and distinct authors from the surviving arrivals. Preview up to three authors with a circular overflow count capped at 99+.
  • Reconcile pending IDs through the existing partial poll, reusing each feed's visibility rules. Prune unavailable rows locally; fetch the retained feed range only when newer commits arrive.
  • Preserve the reading anchor during insertion and removal. If the newest arrival disappears, observe the next survivor for dismissal. A fixed avatar area keeps the label still when the overflow circle disappears.
  • Keep loading silent at the top. Selecting the control scrolls up; fading starts immediately on reaching the top or newest pending row, followed by a 450 ms exit. Dismissal observation survives highlight expiry and pagination.
  • Remove staged notification phases and separate author-preview polling. Update the public knowledge base.

Validation

  • composer test:lint: PASS; existing unrelated no-floating-promises test warnings remain.
  • composer test:type-coverage: PASS, 100%.
  • composer test:types (PHPStan and TypeScript), bun run build: PASS.
  • bun run test:unit: 153 PASS.
  • bunx vp test run --config tests/draft-images.config.ts: 463 PASS across 44 files, including 35 feed tests.
  • Full isolated PHP coverage with php -d memory_limit=-1 vendor/bin/pest --parallel --processes=8 --ci --coverage --exactly=100.0 --passthru-php="'-d' 'memory_limit=-1'": 4,115 tests, 23,067 assertions, 100% coverage — PASS. An intermediate run overlapped an asset rebuild and hit missing-font/invalid-response failures; the final run after builds settled passed completely.
  • Before implementation, the new regressions failed: four React cases and five PHP cases. Coverage includes deletion without newer arrivals, author/count updates, deleting the newest or all pending commits, replacement dismissal targets, and simultaneous additions/deletions in both logs.
  • Real browser checks: four pending minus one deleted plus four arrivals gives seven; stale row removed; click dismisses. Scrolled deletion matrix: zero measured CLS, reading anchors within 0.5 px, no page errors or horizontal overflow.
  • Hosted CI for 590a4de3: awaiting completion after publication.

Visual evidence

Fresh deletion comparison uses the same synthetic content at prior head 0ca6267f and current head 590a4de3. Browser polling intervals are advanced by 30 seconds between states to keep the clips short; database deletions and HTTP responses are real. Mobile browser clips use 390 × 844 viewport emulation. The old version retains four stale arrivals; the new version changes to three, then fades away when all are deleted.

Latest before Latest after
Before: announcement retains deleted commits After: four arrivals become three, then none
MP4 MP4
Following before Following after
Before: announcement retains deleted commits After: four arrivals become three, then none
MP4 MP4
Deletion comparison — all viewports and themes

Still captures are at 2× resolution.

1440x900, light

Before: still four After: three After: none
Before Three None

1440x900, dark

Before: still four After: three After: none
Before Three None

1366x650, light

Before: still four After: three After: none
Before Three None

1366x650, dark

Before: still four After: three After: none
Before Three None

390x844, light

Before: still four After: three After: none
Before Three None

390x844, dark

Before: still four After: three After: none
Before Three None

Current fixed-slot count boundaries: 1 authors · 3 authors · 4 authors · 102 authors · 103 authors. Exact counts remain accessible; only the overflow display is capped.

Device verification

Fresh iPhone 18 Pro simulator, iOS 27.0, native Safari: client-side Latest → Following transition, scrolling beyond the first screen, and real, unaccelerated 30-second checks showed four → three → none after database deletions. The visible reading position remained still and the control cleared navigation and browser chrome.

Four arrivals After one deletion After all deletions
Four Three None
Earlier feature evidence: production versus 0ca6267

The following captures document the original silent-loading feature before deletion reconciliation. They remain labeled as the earlier revision; current slot alignment, deletion behavior, and native reconciliation are shown above. Earlier keyboard-open draft preservation, primary-action visibility, fresh reload, and native touch-to-scroll were checked on that revision and were not rerun as part of the deletion-specific device pass.

Original production comparison

Local synthetic fixture compared against production 3617849e, with identical arrivals and scroll positions. Desktop screenshots are viewport emulation at 2×; mobile browser recordings are 390 × 844 emulation with cursor overlay. The actual 30-second polling wait is trimmed from recordings.

Latest before Latest after
Latest before: staged notifications Latest after: one New commits action
MP4 MP4
Following before Following after
Following before: click to fetch Following after: silent loading and click to scroll
MP4 MP4

At the top, insertion stays quiet: MP4.

Silent insertion at the top, without a notification
Before/after screenshots — all viewport sizes and themes

1440x900, light, scrolled

Production PR
Before After

1440x900, dark, scrolled

Production PR
Before After

1366x650, light, scrolled

Production PR
Before After

1366x650, dark, scrolled

Production PR
Before After

390x844, light, scrolled

Production PR
Before After

390x844, dark, scrolled

Production PR
Before After
Keyboard focus, count boundaries, and simulated failure
Focus 1440x900, light Focus 1440x900, dark
Focus light Focus dark
Focus 1366x650, light Focus 1366x650, dark
Focus light Focus dark
Focus 390x844, light Focus 390x844, dark
Focus light Focus dark

Count fixtures use actual local database responses, with the poll clock advanced for static capture. The entrance animation is finished before each still. Exact counts remain accessible; the overflow caps at 99+.

1 author · 3 authors · 4 authors · 102 authors · 103 authors ·

Simulated HTTP 503: the existing announcement remains intact; no false successful arrival is announced.

Earlier native verification

Native iPhone 18 Pro simulator, iOS 27.0, Safari (not physical hardware): real polling preserves the composer draft with the keyboard open and keeps Commit visible. Client-side Following → Latest transition, fresh reload, scrolling beyond the first screen, navigation/toolbars, and touch-to-scroll/dismiss were checked. The prompt clears navigation and browser controls.

Keyboard open during silent arrival Scrolled prompt After touch-to-scroll Fresh reload
Keyboard and draft Prompt After scroll Fresh reload
Native Safari touch-to-scroll and dismissal

Native Safari MP4

Independent review

Independent Sol 6.1 review (high reasoning, fast service): CODE PASS · VISUAL PASS, no actionable findings or unresolved blockers. Reviewed the full production diff and final eight-file follow-up at base 3617849edfd2f6684d3ddf2da6098a080521cc1a, head 590a4de3477159264883a6f2c7c2119c16cca45d, tree 958a89708f50fcc0a5846f97aa6649a2976db90a. Current media manifest SHA256: 9aa41f8a051e2f4786973e7696b42de3d7b6fa48d6cbd17742478aef71b0e3f4; historical production-comparison manifest: d63df562a14489a0277e583767d4a16f6cd3fa697fd7044653d342385832015f. Independently reran 35 React tests, checked whitespace and all 94 media hashes across both manifests, inspected galleries, count edges, contact sheets and native captures, and fully decoded all ten MP4s. Fresh guest Latest returned 200 without overflow/errors or a prompt, including after scrolling. Broad local validation was reviewed as supplied evidence. Recordings were sampled; native and historical keyboard/draft/touch evidence was inspected rather than independently rerun.

Limitations

  • Android SDK and physical hardware were unavailable. Browser viewport emulation and native iOS Simulator evidence are identified separately.
  • Reconciliation occurs on the next poll; it is not a live deletion subscription. It covers arrivals still represented by the pending announcement.
  • Intentional top-of-feed insertion moves existing rows (prior measured CLS approximately 0.652). The zero-shift result applies to scrolled insertion/reconciliation, not all feed updates.
  • Video inspection uses sampled frames/contact sheets with full decode validation, not a claim of full playback or universal device coverage.

@xHeaven
xHeaven merged commit 4ff5b70 into production Oct 24, 2026
8 of 9 checks passed
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