Repository navigation
Show direct articles sooner and shrink browser icons - #75
Conversation
PR reader API performanceResult: INCONCLUSIVE 3 inconclusive · 5 within threshold. Zero request failures across all six runs. Base Three independent runs per revision, each on a fresh GitHub-hosted ARM64 runner. 16 users, 60 seconds/run, 1,000 synthetic articles, cache off, five PgBouncer slots. Latency comparisonAll latency values are in milliseconds; lower is better. Values are medians of three runs.
Additional latency and throughput metricsEach cell shows base → PR. Latencies are in milliseconds.
Individual runs
How to interpret this reportRegressed / Improved: a p95 regression needs >20% and >20 ms increase in the medians and at least two head samples versus the base median. Improvements use the inverse threshold. Within threshold means the change did not meet both thresholds. Inconclusive: a within-revision p95 range >35% of its median and >20 ms is too noisy for a confident latency verdict. Inconclusive latency comparisons are non-blocking: the check passes without claiming an improvement. Confirmed regressions and test/report errors fail the PR gate. Throughput is descriptive: paced users do not measure maximum capacity. This uncached public API test does not establish production health, browser performance or worker capacity. Separate runners can differ in hardware or host load; repetitions and noise checks reduce but cannot eliminate that uncertainty. Full HTML/CSV reports and logs · attempt 1 |
Code Review ✅ Approved🟡 Medium risk · Direct-article streaming and compact icon delivery change bounded web and extension behavior. Renders direct articles before the background feed and reduces favicon sizes by 99.6%, with the article now showing as soon as its data is ready in a separate Suspense boundary. Feed loading, preview dismissal, and feed failures are properly isolated. Web/admin favicons shrink from 347,552 bytes to 1,481 bytes, Apple touch icons to 7,182 bytes, and extension icons to 4,781 bytes. All new regression tests pass, asset generation produces byte-identical PNGs, and no issues were found. OptionsAuto-apply is off → Gitar will not commit updates to this branch. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar |
|



What changes and why?
Direct article URLs awaited the complete background feed and its filter options before returning the preview. The favicon also pointed to the original 1,254 × 1,254 logo, so opening a page could transfer 347,552 bytes for a browser icon.
The requested article now renders as soon as its own data is ready, with the background feed in a separate Suspense boundary. The reader shell shows a loading placeholder underneath the preview until the feed arrives. Closing the preview works while the feed is still pending, and a failed feed does not remove the article. The loaded background feed and existing preview navigation remain available once ready.
Web/admin metadata uses precomputed 32-pixel favicons and 180-pixel Apple touch icons. Chrome and Edge package a 128-pixel icon/reader mark and the same 32-pixel favicon. The original logo remains available for artwork. The asset generator uses the existing pinned Sharp dependency and reproduces the committed variants byte for byte.
A read-only request to the running production web application confirmed that its current favicon is still 347,552 bytes / 1,254 × 1,254. These changes are pending release.
Validation
Updated against master after #74. All checks pass on commit
19e737e53d835566a14f8da58be58ab9fae1f1cd: CI run,CI required, all CodeQL analyses, SonarQube and SonarCloud Code Analysis. Auto-merge remains disabled.The first updated-head scan exposed 0% new-code coverage, with no open Sonar code issues. Browser-only test support now lives in the existing browser-test directory. Twelve additional regressions exercise actual React server streaming with pending/failed background feeds, unavailable articles and SEO, web/admin icon metadata, byte-identical Sharp asset generation, and real Chrome/Edge packaging. The generator and extension builder expose callable functions while their CLI commands retain their behavior. Sonar thresholds and application-source exclusions are unchanged. The final quality gate passes with 80.0% new-code coverage, zero new duplication and no new issues; the article page has 100% measured line and branch coverage.
CI also exposed a missing generator module in the web Docker type-check context. The builder now copies it. The exact AMD64 Docker builder passed production compilation and TypeScript locally; hosted ARM64 image checks passed.
git diff --checkpassed. The API performance comparison passed; it does not establish a production speed improvement.Element is not attached to the DOM). One rerun of that job passed on the identical commit. A lasting fixture fix will be isolated in a separate PR before continuing the merge queue.Local screenshots captured the article while feed responses were still blocked:
reports/article-first-web-slow-feed.pngandreports/article-first-web-failed-feed.png. Native GitHub attachment upload is unavailable in this environment; screenshots remain untracked and are not hosted through repository files.Rollout notes
No API, configuration, database or dependency change is required. The background feed still loads to preserve reader context and article navigation; Suspense removes it from the article's rendering path. Feed query volume is unchanged. Previous/next controls become available after that feed's sequence loads.
Favicon imports produce new hashed static URLs, allowing browsers to fetch the smaller assets on release. Chrome/Edge store publication and production deployment are pending the normal release process. Linux AMD64 behavior was checked locally; hosted ARM64 image checks,
CI requiredand CodeQL passed before merge.Ready for review