Skip to content

merge branch dev into main - #60

Merged
oxyzenQ merged 128 commits into
mainfrom
dev
May 18, 2026
Merged

merge branch dev into main#60
oxyzenQ merged 128 commits into
mainfrom
dev

Conversation

@oxyzenQ

@oxyzenQ oxyzenQ commented May 18, 2026

Copy link
Copy Markdown
Owner

No description provided.

oxyzenQ added 30 commits May 13, 2026 15:51
- ci.yml: setup-node 20 → 24
- release.yml: add FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 env var
- release.yml: softprops/action-gh-release v2.6.1 → v2 (latest patch)

Fixes Node.js 20 deprecation warning on GitHub Actions runners.
Replace Blade Runner rain with premium atmospheric particle system:

CosmicParticles.svelte:
- Rain drops (falling vertical strips) → Dust particles (tiny floating dots)
- Shooting stars removed entirely
- Slow orbital drift via CSS @Keyframes dustOrbit (9-90s per orbit)
- Micro-glint pulse on high-end devices (dustGlint keyframes)
- Adaptive particle count: mobile 10-14, desktop 14-24 per perf tier
- Ultra-low opacity (0.08-0.26) for cinematic subtlety
- Smooth fade-in/fade-out on toggle (0.7s ease-out transition)
- Parallax scroll effect on high-tier (30fps RAF throttled)
- Visiblity API pause/resume preserved

CSS:
- layout.css: New .dust-particle styles, @Keyframes dustOrbit/dustGlint
- animation.css: Shooting star CSS replaced with display:none legacy marker
- Reduced-motion: 120s slow orbit instead of 12s rain
- nav.css: Performance-tier rules updated for .dust-particle
- tokens.css: --dur-particle/--dur-shoot → --dur-dust-orbit

i18n (all 4 locales):
- 'Toggle render mode' → 'Toggle atmosphere'
- 'Render :' → 'Atmosphere :'

+page.svelte:
- Bot icon → Orbit icon for atmosphere toggle
- Unused Bot import removed

Design philosophy: slow, sparse, atmospheric, implied motion.
Same aesthetic, adaptive complexity — Apple-level premium.
Root cause: visible state never set to true during onMount.
Particles were created in DOM but container stayed at opacity:0
because CSS .cosmic-particles:not(.dust-active) kept it hidden.

Also fixed: bmi:smoothMode event fires before lazy-loaded component
mounts (race condition), so the component missed the activation signal.

Changes:
- Set visible=true after createParticles() in onMount
- Set visible=true in handleSmoothMode when enabling
- Set visible=true in handleVisibility when tab becomes visible
  and particles already exist
Artistic direction: space dust illuminated by invisible blackhole
accretion field — visible but elegant, not nearly invisible.

- Particle count: 10-24 → 20-40 (adaptive)
- Particle size: 1.5-3px → 2-6px (hero larger)
- Opacity: 0.08-0.26 → 0.16-0.40 (perceptible)
- Orbit speed: ~90s → 22-45s (detectable)
- 3-layer depth: far (60%) / mid (40%) / hero (2-3)
- Gravitational center pull: 20% spiral toward center
- Organic cubic-bezier easing, distorted elliptical orbit
- Hero particles: warm glow halo, frequent glint
- JS gravity loop on all tiers (15-30fps)
Engineering maturity: knowing which features to kill.

The particle system was high maintenance, low user value, visually
subtle to the point users didn't notice, and complexity > impact.

Premium identity is already established through:
- Transition system, typography, spacing
- Glassmorphism, depth, lighting, blur hierarchy
- Modal consistency, blackhole gradient ambience

Removed:
- CosmicParticles.svelte (deleted)
- Atmosphere toggle button + Orbit icon from navbar
- bmi:smoothMode event dispatch/listener
- renderModeEnabled/readRenderMode from layout
- smoothModeRequested/smoothModeEnhanced/smoothModeStatus from page
- broadcastSmoothMode/toggleSmoothMode functions
- data-graphics dataset attribute
- RENDER_MODE/SMOOTH_MODE/ULTRA_SMOOTH storage keys
- nav.render/nav.render_aria i18n keys (all 4 locales)
- All CSS: cosmic-particles, dust-particle, dustOrbit, dustGlint,
  hero-particle, mid-particle, gravity-particle rules
- Reduced-motion particle override in animation.css
- Particle-related nav.css performance tier rules

Kept:
- Performance tier system (data-performance-tier) for gauge/backdrop
- prefersReducedMotion for accessibility
- getPerformanceTier for BmiRadialGauge + DebugPanel
- Premium page transitions, hover effects, modal animations
- Page transition now always uses enhanced spring strength

Impact:
- Smaller bundle, less repaint, less GPU usage
- Better battery on mobile, less bug surface
- Cleaner architecture, easier maintainability
- ultraSmooth prop on BmiRadialGauge hardcoded to true
…ents and tokens

- Update animation.css shooting stars comment (dust field → removed)
- Update layout.css header comment (remove 'Cosmic particles')
- Update tokens.css z-index stack comment (remove 'cosmic particles')
- Remove unused --atmosphere-horizon CSS token

Particle system was fully deleted in prior commits. This cleans up
the last stale comments and an orphaned design token.
P0-1: Sync package-lock.json (was stale at v10.5.0, now v18.0.0)
  - Dual lockfile support: bun.lock + package-lock.json

P0-2: Reduce test suite weight
  - Argon2 uses lightweight params in test mode (1 MiB / 1 iter)
  - Add test:fast, test:crypto, test:ci scripts
  - Reduce testTimeout from 15s to 10s

P0-3: Fix verifyPassphrase() always-true bug
  - Old: encrypt+decrypt with same passphrase (trivially true)
  - New: decrypt stored verifier from enableEncryption()
  - Wrong passphrase now correctly returns false

P0-4: Fix enableEncryption() half-implementation
  - Store encrypted verifier in IndexedDB on enable
  - hasPassphrase now checks verifier existence (not just salt)
  - disableEncryption clears verifier

P0-5: Harden release workflow
  - Add @sveltejs/adapter-static to devDependencies
  - Create svelte.config.static.js for release builds
  - Use frozen-lockfile install (no mutations)
  - No more runtime bun add / config heredoc injection
P1-6: Silence 'fatal: not a git repository' build noise
  - vite.config.ts: add stdio: ['ignore', 'pipe', 'ignore'] to git execFileSync

P1-7: Remove dynamic import warning from db.ts
  - warn-dev.ts has no deps on storage/db (circular dep comment was misleading)
  - Convert dynamic import() to static import — zero chunk-split benefit anyway

P1-8: Fix storage/import backup race condition
  - Add StorageSetOptions { skipBackup } to storageSet()
  - history-io importBmiHistory uses skipBackup: true (backup already explicit)

P1-9: Fix migration flag marks complete on partial failure
  - migrateFromLocalStorage: if any key fails, do NOT set META_MIGRATED_KEY
  - Failed keys will be retried on next app load

P1-10: Fix restore backup creates recursive new backup
  - Add setRestoreMode(active) global flag in storage.ts
  - restoreLatestBackup wraps writes in try/finally with setRestoreMode(true/false)
  - storageSet skips triggerBackup when _restoreInProgress is true
- Replace all WebP logo variants (128/216/256/512) with new bmi-logigo-v2.png
- Add centered logo + styled header to README.md
- Source: 1254x1254 RGBA PNG, generated WebP at quality 90
- app.html line 34: og:url corrected
- app.html line 47: twitter:url corrected
P2-13: Remove touchHandled state and handleTouchMove no-op handler
  - touchHandled was written but never read in any decision path
  - handleTouchMove was a passive listener that only set touchHandled
  - Swipe detection already handled purely via touchstart/touchend
  - Reduced +page.svelte by 17 lines (1505 -> ~1488 LOC)

P2-15: Fix CSV double-quote escaping in exportBmiHistoryCsv
  - Added cell.replaceAll('"', '""') before wrapping in quotes
  - Prevents CSV corruption if translation values contain quotes

P2-14: No change needed — APP_VERSION already in backup.ts with
  bmi-update-version.ts script handling all version bumps
…1 LOC)

Extracted self-contained pieces from +page.svelte to improve maintainability.
Zero behavioral changes — pure extraction only.

New files:
  - src/lib/utils/pager-spring.ts: Svelte transition function (56 LOC)
  - src/lib/utils/dom.ts: isEditableTarget DOM helper (13 LOC)
  - src/lib/components/sections/AboutSection.svelte: About page (84 LOC)
  - src/lib/components/sections/SettingsSection.svelte: Footer/disclaimer (34 LOC)
  - src/lib/components/StagingSpinner.svelte: Gear overlay spinner (15 LOC)

+page.svelte: 1496→1321 lines (-175 lines, -11.7%)
Removed 9 lucide icon imports (now in section components).
All $state/$derived runes remain in the root component.
327 tests green, build clean.
Extracted 2 modules from EncryptionModal for better maintainability.
Zero behavioral changes — pure extraction only.

New files:
  - src/lib/utils/crack-time.ts: formatCrackTime() utility (31 LOC)
    - Pure function, t() passed as parameter for testability
  - src/lib/components/StrengthMeter.svelte: strength meter display (122 LOC)
    - Absorbs 5 derived + formatCrackTime + template + 44 LOC CSS

EncryptionModal.svelte: 1009→885 lines (-124 lines, -12.3%)
Removed: strengthLevel/Percent/Color/Label/Feedback derived,
  formatCrackTime function, strength meter template, strength CSS.
Kept: strengthResult $state, strengthScore $derived, debounced
  zxcvbn analysis $effect, all modal logic untouched.
415 tests green, build clean.
Security:
- crypto.ts: change plaintext checksum → ciphertext checksum in meta.
  A plaintext SHA-256 leaked equality fingerprints (two files with same
  content share the same checksum). AES-GCM auth tag already provides
  integrity; the ciphertext checksum adds a pre-decryption sanity check
  without leaking plaintext equality.
- history-io.ts: soften HMAC messaging — 'integrity check for corruption
  and casual tampering detection' instead of implying strong security.
  The obfuscated client-side HMAC key is not authentic protection.

Performance:
- vite.config.ts: tighten chunkSizeWarningLimit 2100 → 700 KB so
  future bundle regressions surface early. Document zxcvbn (~465 KB raw)
  as a known heavy lazy chunk (only loaded when encryption modal opens).

Test: 44/44 crypto tests pass (encrypt/decrypt round-trip, integrity
detection, checksum verification all green).
Root cause: mobile CSS treated ALL touch devices as low-end,
destroying glass depth with blur(6px)/blur(4px), capping container
at 400px, and shrinking gauge below SVG size.

Changes:
- responsive-mobile-perf.css: T-GLASS blocks upgraded from
  blur(6px)/blur(4px) to blur(14px)/blur(10px) with desktop-grade
  saturate(170%)/brightness(1.08). Uses CSS variables for consistency.
  Added T-GLASS-FALLBACK for very narrow devices (<360px only).
- NEW responsive-content.css: Final correction layer loaded after
  mobile-perf. Fixes: container max-width:400px cap removed, gauge
  container never smaller than SVG, fluid icon clamp tokens, text
  wrapping for large font/accessibility zoom, auto-fit grid layouts.
- form.css: 40vh margins → 10vh (bmi-grid, bmi-card), min-height
  750px → clamp(560px,70vh,750px) for adaptive card height.
- layout.css: 40vh margins → 10vh (section-header, about-grid,
  footer-disclaimer).
- components.css: hero-content margin-bottom 40vh → 12vh.
- +layout.svelte: Added responsive-content.css import after
  mobile-perf.css.

Design principle: mobile optimization should remove expensive
motion/hover/shine, NOT downgrade core glass visual identity.
Desktop and mobile now share the same premium design language.
…velte. Eslint warning resolved.

Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>
- Add MOBILE PREMIUM GLASS block at bottom of responsive-content.css
  as final source of truth, loaded after responsive-mobile-perf.css.
  Ensures blur(16px) saturate(180%) brightness(1.15) on all cards
  at max-width:600px regardless of earlier layer overrides.
- Remove .footer-disclaimer from shared width:100% card selector;
  use width:auto + max-width:100% + margin-inline:0 to prevent
  right-edge overflow caused by width:100% + horizontal margins.
- Add .github-footer margin-inline:0 neutralization.
- Dedicate .footer-disclaimer premium glass rule (separate from
  generic card group) with full desktop-quality backdrop values.
…g v19.1

- Remove preload for new_bmi_logo_216.webp (logo uses srcset responsive
  images + opacity animation, preload causes unused-resource warning)
- Add ZERO SHADOW POLICY at absolute bottom of responsive-content.css:
  *, *::before, *::after { box-shadow: none !important; }
- Rewrite FINAL MOBILE GLASS SOURCE OF TRUTH with:
  - Stronger selectors (html body .main-container) to beat earlier layers
  - Width-based @media (not pointer-based) for DevTools compatibility
  - Gradient background replacing box-shadow for glass depth
  - outline + outline-offset for subtle border depth
  - blur(16px) saturate(180%) brightness(1.15) on all cards
  - blur(12px) saturate(160%) brightness(1.08) on results card
- Remove T-GLASS/T-GLASS-HERO/T-GLASS-CALC/T-GLASS-RESULTS/
  T-GLASS-FALLBACK from responsive-mobile-perf.css — this file now
  ONLY handles performance (transitions, animations, transforms, will-change).
  Glass visuals are the sole responsibility of responsive-content.css.
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>
Co-authored-by: oxchin <198712908+oxchin@users.noreply.github.com>

Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 534df68f7efe · 3 file · +18/-17 · 2026-05-14T07:43:55Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 6e3423c5eee4 · 2 file · +7/-6 · 2026-05-14T07:49:31Z
- Bump version 18.0.0 → 20.0.0 via bmi-update-version.ts
  (package.json, README, app.html, i18n locales, LICENSE, backup.ts)

- Dead code cleanup:
  - Delete src/lib/assets/favicon.svg (0 bytes, unused)
  - Delete static/.well-known/appspecific/com.chrome.devtools.json
  - Delete STORAGE_UPGRADE_SUMMARY.md (stale migration doc)
  - Remove 9 unused CSS classes (~100 lines):
    .skeleton-results, .shooting-star, .btn-haptic (animation.css)
    .cosmic-orbs, .orb, .orb-1 (components.css)
    .sparkle-icon (components.css)
    .plasma-star (layout.css + nav.css perf rule)
    .text-overflow-ellipsis, .text-break-word (base.css)

- Move misplaced test: share-image.test.ts from components/__tests__
  to utils/__tests__ (tests a utils module, not a component)

- Fix vitest.config.ts: use path.resolve(__dirname) for setupFiles
  instead of relative path (fixes module resolution in nested CWD)

- CI path filtering: only trigger full CI on src/, scripts/,
  config files, and lock files. Skip for docs-only and
  non-code changes.
- Fix bmi-update-version.ts: add AboutSection.svelte to update targets,
  expand fixVersionDrift() to check README.md and AboutSection.svelte,
  remove border decorations from console output
- Fix version drift: README.md v18.0 → v20.0, AboutSection.svelte v18.0 → v20.0
- README.md: ensure Stellar version appears only once (title only),
  update project structure to reflect 17 CSS files, update CSS Architecture
- data-cards.css: add border-left and border-right 1px solid var(--text-muted)
  to ref-row-underweight through ref-row-obese for consistent table borders
Add @media (max-width: 400px) rule for .bmi-encryption-badge:
- flex-wrap: wrap to allow content wrapping
- white-space: normal (override nowrap)
- justify-content: center for balanced layout
- Slightly smaller font sizes for label and algo text
- max-width: 100% to prevent overflow
…mpanion'

P0 changes:
- package.json: name → bmi-stellar, new description & keywords
- app.html: SEO meta, OG, Twitter cards → BMI Stellar branding
- manifest.json: name, short_name, description, categories updated
- AboutSection.svelte: expand from 2→6 cards (limitations, features,
  privacy, encrypted backups, open source + info-row overhaul)
- README.md: project description, privacy claim, SvelteKit version,
  test count, mobile perf section, zero-shadow policy

P1 changes:
- i18n: meta.*, hero.*, about.limit_*, about.features_*,
  about.privacy_*, about.backup_*, about.opensource_*,
  about.data_model/local_first/backup_optional/pwa_type/status_rc
  keys added to all 4 locales (en/id/ja/zh)
- crypto.encryption_badge: 'End-to-end encrypted' →
  'Passphrase-encrypted backup' (all locales)
- share.title/footer/card_branding/card_header → BMI Stellar (all locales)
- history.invalid_format → BMI Stellar (all locales)
- JSDoc comments: 'BMI Calculator' → 'BMI Stellar' (6 files)
- share-image.ts: share title → 'BMI Stellar Result'
- +error.svelte: page title → 'BMI Stellar'
- package-lock.json: name → bmi-stellar
- LICENSE.md: header → 'BMI Stellar – v20.0'

Sweep:
- share.test.ts: brand assertion → 'BMI Stellar'
- share-image.test.ts: mock branding → 'BMI Stellar'
Bug 1 — About page new icons (ListChecks, Database, LockKeyhole,
HeartPulse) were missing color and size styling:
- icons.css: add new icons to .Lightbulb/.Users group with
  color: var(--cosmic-purple) + clamp(30px,6vw,48px) sizing
- responsive-content.css: add new icons to icon-card-md group
- responsive-width.css: add new icons to both compact (36px) and
  further-reduced (30px) breakpoints

Bug 2 — Navbar top/bottom looked plain black instead of premium
glass like all other containers:
- nav.css: add brightness(1.15) to match content-container glass,
  change blur 24px→16px for consistency, upgrade border from
  var(--w-8) → var(--w-10)
- +page.svelte: update scoped border to var(--w-10)
- responsive-mobile-perf.css: add brightness(1.15) to mobile
  navbar glass rule
Bug 1 — Icons in 'Open Source & Release' info-row inherited the large
about-card-header sizing (30–48px) because .Database/.LockKeyhole
selectors were unscoped.  Now the large sizing only applies inside
.about-card-header, and a new .info-row override forces compact 20px
icons that are independent from the header rules.  All responsive
breakpoints (480px, 360px, 600px) updated to match the scoped
selector pattern.

Bug 2 — Navbar backgrounds rendered as plain black on some
mobile/desktop combinations because Svelte scoped styles
(.pager-nav-shell.svelte-xxxxx, specificity 0-2-0) could interfere
with the global glassmorphism rules (.pager-nav-shell, specificity
0-1-0).  Added high-specificity selectors (html body .pager-nav-shell,
specificity 0-3-0) with !important in nav.css, responsive-content.css,
responsive-mobile-perf.css, and responsive-backdrop.css to guarantee
the glassmorphism backdrop-filter and background always win.
…gn v20.0

Bug fixes:
- Fix navbar (top/bottom) glassmorphism: add backdrop-filter with
  !important to Svelte scoped .pager-nav-shell style, ensuring glass
  effect wins over scoped specificity on both mobile and desktop
- Remove contain:layout from navbar shells in responsive-mobile-perf.css
  (changed to contain:style only) — contain:layout can interfere with
  backdrop-filter compositing on some mobile browsers
- Fix info-row icons (Database, LockKeyhole) in 'Open Source & Release'
  card body: increase specificity to .about-card .info-row :is() to
  guarantee win over .about-card-header responsive overrides
- Add semantic color tokens for all info-row icons (purple for brand,
  green for security/trust, red for health)
- Add .about-card-header .AlertTriangle to about header icon rule
  (was inheriting global yellow instead of purple like other about icons)

Responsive design (v20.0 premium hardening):
- Add base styles for .app-info, .info-row, .commit-id, .text-gradient-
  elegant in layout.css (previously unstyled)
- Add fluid responsive rules for about cards at <=600px: header gap,
  h3, paragraph text, info-row layout with flex-wrap and clamp()
- Add emergency compact rules at <=360px: tighter gaps, smaller fonts
- Add extreme compact rules at <=300px and <=250px for info-rows
- Add fluid info-row body icon sizing at <=600px: clamp(16px, 5vw, 20px)
  independent from header icon sizing
oxyzenQ added 19 commits May 17, 2026 23:23
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 97fc14eaf4a1 · 3 file · +3/-0 · 2026-05-17T16:23:54Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · f663e2c8b20e · 1 file · +1/-1 · 2026-05-17T16:58:38Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · e7016f08d4b4 · 4 file · +77/-35 · 2026-05-18T02:00:46Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 5ee5cd2d8387 · 8 file · +0/-0 · 2026-05-18T02:09:09Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 8b0eb1810ba1 · 2 file · +62/-98 · 2026-05-18T02:50:33Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · f7b4db5edfe2 · 7 file · +28/-28 · 2026-05-18T03:19:52Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 022c311eef89 · 4 file · +123/-64 · 2026-05-18T03:45:57Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · c60c8593fbda · 4 file · +20/-12 · 2026-05-18T04:08:12Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 38dfc4ee4e9f · 2 file · +127/-11 · 2026-05-18T04:24:25Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 90369026fada · 1 file · +20/-6 · 2026-05-18T04:59:01Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 70b91e4f0aae · 4 file · +4/-4 · 2026-05-18T05:10:36Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 51df639e59e3 · 6 file · +34/-59 · 2026-05-18T06:05:15Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 584fd2c51777 · 8 file · +60/-43 · 2026-05-18T06:48:31Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · fdbc8e45f3ae · 4 file · +80/-48 · 2026-05-18T07:06:53Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · f51df54f413a · 5 file · +44/-6 · 2026-05-18T07:27:25Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · a2018f448d75 · 6 file · +11/-1035 · 2026-05-18T07:44:04Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 49fcd772f280 · 2 file · +0/-0 · 2026-05-18T08:01:14Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · 3654be12cbcc · 3 file · +95/-95 · 2026-05-18T08:14:40Z
Signed-off-by: rezky_nightky <130107241+oxyzenQ@users.noreply.github.com>

── bmi/dev · c328a045eeb0 · 1 file · +93/-93 · 2026-05-18T08:20:56Z
@oxyzenQ oxyzenQ added this to the think-1 milestone May 18, 2026
@oxyzenQ oxyzenQ self-assigned this May 18, 2026
@oxyzenQ oxyzenQ added bug Something isn't working documentation Improvements or additions to documentation duplicate This issue or pull request already exists enhancement New feature or request labels May 18, 2026
Comment thread src/service-worker.ts
@@ -19,113 +20,122 @@

let runtimeTrimInProgress = false;

sw.addEventListener('message', (event) => {
Comment thread src/lib/utils/logger.ts Dismissed
@vercel

vercel Bot commented May 18, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
bmi Ready Ready Preview, Comment May 18, 2026 8:40am

…ication in `postMessage` handler'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
@oxyzenQ
oxyzenQ merged commit e73bc4c into main May 18, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working documentation Improvements or additions to documentation duplicate This issue or pull request already exists enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants