Skip to content

Apply Bswup improvements (#12408) - #12418

Open
msynk wants to merge 59 commits into
bitfoundation:developfrom
msynk:12408-bswup-improvements
Open

Apply Bswup improvements (#12408)#12418
msynk wants to merge 59 commits into
bitfoundation:developfrom
msynk:12408-bswup-improvements

Conversation

@msynk

@msynk msynk commented May 31, 2026

Copy link
Copy Markdown
Member

closes #12408

Summary by CodeRabbit

  • New Features
    • Added update polling/visibility options, persistent storage support, stall safeguards, and forceRefresh cache filtering.
    • Enhanced progress/splash experience with more robust reload/retry controls and fatal error UI; BswupProgress.AutoReload now defaults off.
    • Added a dedicated cleanup flow to back out previously deployed service-worker behavior.
  • Bug Fixes
    • Hardened service-worker routing/fetch resilience (blocked URLs, stricter caching rules, safer fallback behavior including byte-range handling).
    • Improved overlay UI resilience and accessibility status/error messaging.
  • Tests
    • Expanded Vitest coverage for service worker, page orchestration, and progress UI; CI now runs JS tests.
  • Documentation
    • Refreshed README and demo/docs site with new/updated pages covering options, events, migration, cleanup, progress UI, and the JavaScript API.

@coderabbitai

coderabbitai Bot commented May 31, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Bit.Bswup updates service-worker caching and lifecycle coordination, registration-aware page behavior, accessible progress UI, build outputs, demo applications, documentation, and comprehensive JavaScript validation.

Changes

Bit.Bswup runtime and service worker

Layer / File(s) Summary
Service-worker lifecycle and caching
src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts, src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
Adds manifest validation, scoped cache reconciliation, resilient fetch routing, retries, integrity handling, range responses, lifecycle messaging, and cleanup-worker teardown.
Page runtime and update coordination
src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
Adds idempotent startup, registration-aware updates, polling, Blazor startup coordination, scoped cache refresh, persistence, and new lifecycle/error messages.
Progress UI and accessibility
src/Bswup/Bit.Bswup/BswupProgress.razor, src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts, src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
Replaces image bootstrap wiring with data attributes and adds accessible progress, reload, fatal-error, retry, and overlay behavior.

Build, demos, documentation, and validation

Layer / File(s) Summary
Build pipeline and demo applications
src/Bswup/Bit.Bswup/Bit.Bswup.csproj, src/Bswup/Bit.Bswup/tsconfig*.json, src/Bswup/Demos/*, src/Bswup/Bit.Bswup.Demo/*
Refactors JavaScript compilation and static-web-asset inclusion, reorganizes demo projects, and adds a documentation site with navigation, playground actions, sample workers, and updated application shells.
Documentation and API examples
src/Bswup/README.md, src/Bswup/Bit.Bswup.Demo/Pages/*
Documents configuration, lifecycle events, update polling, public APIs, progress UI requirements, service-worker behavior, migration changes, and cleanup procedures.
JavaScript harness and validation
src/Bswup/Tests/bit-bswup-js/*, .github/workflows/bit.ci.Bswup.yml
Adds VM-based browser and worker fakes, Vitest suites for runtime, fetch, caching, progress, cleanup, and version consistency, plus CI execution.

Estimated code review effort: 5 (Critical) | ~120 minutes

Suggested reviewers: cyrus-sushiant, mhrastegari, yasmoradi, zahra-yousefi

Poem

A rabbit watched the workers cache,
Then hopped through updates in a flash.
Progress bars glow, errors heal,
New demos show the running wheel.
“Thump-thump!” says Bun, “the build is bright!”
And carrots ship with every write.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 47.45% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and clearly refers to the Bswup improvement work in this PR.
Linked Issues check ✅ Passed The PR implements the listed Bswup improvements across runtime, service-worker, UI, docs, demos, and tests.
Out of Scope Changes check ✅ Passed The changes stay focused on Bswup improvements, docs, demo updates, and related tests with no clear unrelated additions.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts`:
- Around line 47-57: The manifest validation detects errors (MANIFEST_ERRORS
from validateAssetsManifest) but the code continues to run and later
dereferences self.assetsManifest.assets, causing a crash; after calling
sendError you should stop further startup: return/throw to prevent asset
enumeration, and guard any access to self.assetsManifest.assets (e.g., use
Array.isArray(self.assetsManifest.assets) before iterating) and ensure VERSION
fallback is computed safely (use (self.assetsManifest && typeof
self.assetsManifest.version === 'string') ? self.assetsManifest.version :
'0.0.0-invalid-manifest') so the service worker does not proceed when the
manifest is invalid; update the block around MANIFEST_ERRORS, sendError,
VERSION, and any asset-enumeration code that uses self.assetsManifest.assets to
enforce this early exit and safe checks.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts`:
- Around line 321-324: The catch block in checkForUpdate currently calls
handle(BswupMessage.error, ...) which routes transient registration.update()
failures into the blocking install-error path; change this to emit a
non-blocking message instead (e.g., add a new enum/value like
BswupMessage.updateCheckFailed or use a non-fatal level such as
BswupMessage.warn/info) and call handle(...) with that new message name,
preserving the payload ({ reason: 'update', message: String((err && (err as
any).message) || err), reload }) so callers can still react but the default
progress handler will not hide the app or show the install-failed UI. Ensure to
update any switch/handler that consumes BswupMessage.* to treat the new
updateCheckFailed value as non-blocking.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: ae99fd6f-8550-4920-b5b5-7982f9b3572d

📥 Commits

Reviewing files that changed from the base of the PR and between 046d116 and 825d8af.

📒 Files selected for processing (7)
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/README.md

Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts Outdated
@msynk

msynk commented Jun 1, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai re-review

@coderabbitai

coderabbitai Bot commented Jun 1, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
echo "=== bit-bswup.sw.ts ==="
fd "bit-bswup.sw.ts" --exec cat {}

echo ""
echo "=== bit-bswup.ts ==="
fd "bit-bswup.ts" -E "*.js" --exec cat {}

echo ""
echo "=== bit-bswup.progress.ts ==="
fd "bit-bswup.progress.ts" --exec cat {}

echo ""
echo "=== BswupProgress.razor ==="
fd "BswupProgress.razor" --exec cat {}

echo ""
echo "=== bit-bswup.progress.css ==="
fd "bit-bswup.progress.css" --exec cat {}

echo ""
echo "=== service-worker.js (demo) ==="
fd "service-worker.js" --search-path "Bit.Bswup.Demo" --exec cat {}

echo ""
echo "=== README.md (Bswup) ==="
cat src/Bswup/README.md

Length of output: 87174



@msynk: Reviewed the PR thoroughly. The improvements are substantial — the structured error reporting, errorTolerance: 'strict' default, retry logic with exponential backoff, update polling, cacheVersion, and multi-tab lifecycle fixes are all well-designed. A few issues worth addressing:


🔴 Critical — Crash when assetsManifest fails to load

In bit-bswup.sw.ts, validateAssetsManifest correctly catches a missing/null manifest and pushes an error — but execution continues and the module-level ALL_ASSETS initialisation immediately dereferences .assets on the potentially-null manifest:

const MANIFEST_ERRORS = validateAssetsManifest(self.assetsManifest);
if (MANIFEST_ERRORS.length) {
    sendError({ reason: 'manifest', message: '...', url: ASSETS_URL });
    // ↑ execution falls through!
}
// ...
const ALL_ASSETS = self.assetsManifest.assets   // TypeError: Cannot read properties of null
    .filter(...);

If the importScripts(ASSETS_URL) call fails (404, network error, syntax error in the generated assets file), self.assetsManifest is undefined and the SW crashes with an unhandled TypeError before any error event can reach the page. Suggest guarding:

if (MANIFEST_ERRORS.length) {
    sendError({ ... });
    // Prevent further initialisation from crashing on a null manifest.
    self.addEventListener('install', (e: any) => e.waitUntil(Promise.reject(new Error('Invalid assetsManifest'))));
    throw new Error('assetsManifest validation failed: ' + MANIFEST_ERRORS.join('; '));
}

🟡 Moderate — checkForUpdate may emit spurious updateNotFound

In bit-bswup.ts, after await registration.update(), the code reads registration.installing immediately:

await registration.update();
if (!registration.installing && !registration.waiting) {
    handle(BswupMessage.updateNotFound);   // ← may fire even when install is in-flight
}

reg.update() resolves when the server responds (the SW byte-comparison is done), but the browser may not have set reg.installing synchronously by the time the next microtask runs. This can produce a false UPDATE_NOT_FOUND that races with the updatefound event. A small setTimeout(0) / requestAnimationFrame or relying solely on the absence of an updatefound event would be more reliable.


🟡 Moderate — Retry button shown for non-retriable errors

In bit-bswup.progress.ts, errorRetryButton is revealed for every BswupMessage.error including manifest validation failures (reason: 'manifest') and SRI integrity failures (reason: 'integrity'). For those cases, reloading won't help without a redeployment. Consider hiding the retry button (or changing its label to "Reload") when data.reason is one of those permanent failure types.


🟡 Moderate — Handler parameter injected unsanitised into JS string

In BswupProgress.razor:

BitBswupProgress.start(..., '@(Handler)');

If Handler contains a single quote or semicolon (e.g. '; alert(1)//), it breaks out of the string literal. Handler is a developer-supplied [Parameter] so the practical risk is low, but HttpUtility.JavaScriptStringEncode or @Json.Serialize(Handler) would make it safe and consistent.


🟢 Minor — verbose() is defined but never called

In bit-bswup.ts, verbose() is defined alongside error/warn/info/debug but is never invoked in the script. If it's intended to be part of the public log-level hierarchy it should be used, otherwise it can be removed to keep the codebase clean.


🟢 Minor — Error panel shown over partial progress bar

When BswupMessage.error fires mid-download in bit-bswup.progress.ts, the error panel appears but the progress bar and percentage elements remain visible showing a partial value. Consider hiding them when revealing the error panel:

case BswupMessage.error:
    // ...
    if (progressEl) progressEl.parentElement!.style.display = 'none';
    if (percentEl) percentEl.style.display = 'none';
    if (errorEl) errorEl.style.display = 'block';

🟢 Minor — README sample handler missing error case

The bitBswupHandler switch in README.md covers updateNotFound (new) but omits BswupMessage.error. Since structured error reporting is a headline feature of this PR, adding a sample case would help developers wire it up:

case BswupMessage.error:
    console.error('Bswup install error:', data.reason, data.message);
    // optionally surface data.url / data.hash for diagnostics
    return;

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR improves Bit.Bswup’s update experience and robustness by adding user-visible install error reporting (with retry), introducing opt-in update polling (interval and/or tab visibility), improving multi-tab update consistency, and expanding Blazor script auto-detection to cover both Blazor Web App and standalone WebAssembly entry points.

Changes:

  • Add update polling controls (updateInterval, updateOnVisibility) and expose/extend JS API docs (BitBswup.checkForUpdate, skipWaiting, forceRefresh).
  • Improve service worker install reliability (manifest validation, retries/backoff, strict vs lax error tolerance, safer multi-tab activation/claim behavior).
  • Enhance the progress UI with an error panel (message/details + retry) and corresponding styles.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/Bswup/README.md Documents new script attributes, error tolerance behavior, multi-tab behavior, security notes, and JS API.
src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css Adds styling for the new install error panel and retry button behavior.
src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts Adds idempotent initialization, update polling, better controllerchange handling, richer logging levels, and expanded Blazor script detection.
src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts Adds manifest validation + error reporting, retry/backoff for asset fetches, strict/lax install semantics, safer cache update sequencing, and RegExp parsing improvements.
src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts Adds UI handling for install errors (message/details/retry) and keeps assets list visibility in sync with runtime config changes.
src/Bswup/Bit.Bswup/BswupProgress.razor Updates the progress component markup to include an error panel and changes initialization to run via a <script> block.
src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js Removes demo precachedAssetsInclude config line.
src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js Adjusts demo config to use errorTolerance = 'lax' with explanatory comment.

Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts Outdated
Comment thread src/Bswup/Bit.Bswup/BswupProgress.razor Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts Outdated
Comment thread src/Bswup/Bit.Bswup/BswupProgress.razor Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
@msynk
msynk requested a review from Copilot June 2, 2026 19:39
@msynk

msynk commented Jun 2, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai re-review

@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown

@msynk: Sure, I'll kick off a fresh review of the PR now.

✅ Actions performed

Full review triggered.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Comment thread src/Bswup/Bit.Bswup/BswupProgress.razor Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts

@coderabbitai coderabbitai 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.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts (1)

333-362: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Use e.waitUntil() for async work in the service worker message handler.

Returning a Promise from the message listener doesn’t reliably keep the worker alive; use ExtendableMessageEvent.waitUntil(...) for skipWaiting(), clients.claim(), cache deletion/filling, and the follow-up postMessage.

Suggested fix
-function handleMessage(e: MessageEvent<string>) {
+function handleMessage(e: any) {
     diag('handleMessage:', e);

     if (e.data === 'SKIP_WAITING') {
-        return self.skipWaiting()
-            .then(() => self.clients.claim())
-            .then(() => deleteOldCaches())
-            .then(() => sendMessage('WAITING_SKIPPED'));
+        e.waitUntil(
+            self.skipWaiting()
+                .then(() => self.clients.claim())
+                .then(() => deleteOldCaches())
+                .then(() => sendMessage('WAITING_SKIPPED'))
+        );
+        return;
     }

     if (e.data === 'CLAIM_CLIENTS') {
-        return self.clients.claim()
-            .then(() => deleteOldCaches())
-            .then(() => e.source?.postMessage('CLIENTS_CLAIMED'));
+        e.waitUntil(
+            self.clients.claim()
+                .then(() => deleteOldCaches())
+                .then(() => e.source?.postMessage('CLIENTS_CLAIMED'))
+        );
+        return;
     }

     if (e.data === 'BLAZOR_STARTED') {
-        createAssetsCache(true);
+        e.waitUntil(createAssetsCache(true));
+        return;
     }

     if (e.data === 'CLEAN_UP') {
-        deleteOldCaches(); // remove the old caches
+        e.waitUntil(deleteOldCaches()); // remove the old caches
     }
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts` around lines 333 - 362, The
message handler currently returns Promises but must use e.waitUntil(...) to keep
the service worker alive; wrap each async branch so that SKIP_WAITING uses
e.waitUntil(self.skipWaiting().then(() => self.clients.claim()).then(() =>
deleteOldCaches()).then(() => sendMessage('WAITING_SKIPPED'))), CLAIM_CLIENTS
uses e.waitUntil(self.clients.claim().then(() => deleteOldCaches()).then(() =>
e.source?.postMessage('CLIENTS_CLAIMED'))), BLAZOR_STARTED uses
e.waitUntil(createAssetsCache(true)), and CLEAN_UP uses
e.waitUntil(deleteOldCaches()), ensuring all calls to self.skipWaiting(),
self.clients.claim(), deleteOldCaches(), createAssetsCache(true), sendMessage
and e.source?.postMessage are inside the waitUntil chains.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Bswup/Bit.Bswup/BswupProgress.razor`:
- Around line 37-39: The inline script in BswupProgress.razor calls
BitBswupProgress.start(...) unguarded which throws if bit-bswup.progress.js
hasn't loaded; update the init to check for the global before invoking (e.g.,
use window.BitBswupProgress?.start(...) or an explicit if
(window.BitBswupProgress) call) passing the same parameters (AutoReload,
ShowLogs, ShowAssets, AppContainer, HideApp, AutoHide, Handler), or
alternatively move the startup into the component lifecycle (OnAfterRenderAsync)
and call JS interop to invoke BitBswupProgress.start to guarantee ordering.
- Line 38: The call to BitBswupProgress.start injects AppContainer and Handler
as raw single-quoted JS literals which can be broken by
quotes/backslashes/newlines; change those embeddings to JSON-encoded JS-safe
strings instead (e.g., replace the single-quoted '@(AppContainer)' and
'@(Handler)' with the output of
System.Text.Json.JsonSerializer.Serialize(AppContainer) and
JsonSerializer.Serialize(Handler) so the values are properly escaped and already
quoted), update the BswupProgress.razor to use JsonSerializer.Serialize for both
AppContainer and Handler and add the required using/import for System.Text.Json
if missing.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts`:
- Around line 86-94: The cache bucket currently uses only CACHE_VERSION (derived
from self.cacheVersion or VERSION) which allows different manifests to share a
bucket; change the cache naming so the manifest VERSION is always part of the
bucket identity. Keep the existing CACHE_VERSION calculation (using
self.cacheVersion fallback to VERSION) but construct CACHE_NAME to include both
VERSION and CACHE_VERSION (e.g. `${CACHE_NAME_PREFIX} - ${VERSION} -
${CACHE_VERSION}`), so the manifest VERSION remains in the cache bucket while
cacheVersion can still be used to pin/force refresh.
- Around line 516-540: The current logic sets isIntegrity true whenever
hasIntegrity && fetchErr instanceof TypeError, which treats all TypeError fetch
rejections as SRI failures and prevents retries; change the detection in the
addCache flow so a bare TypeError does NOT automatically mark an integrity
failure: remove fetchErr instanceof TypeError from the isIntegrity predicate and
instead only classify as integrity when there is a clear integrity signal (e.g.,
the error message matches the integrity/digest regex) or after explicitly
recomputing and comparing the response bytes to asset.hash; keep transient
TypeError cases as retryable (use lastError/continue while attempt <
MAX_RETRIES), and only increment integrityFailureCount, set sendError.reason to
'integrity', and skip retries when you have a confirmed integrity mismatch (use
the integrity regex or the explicit digest comparison to decide).

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts`:
- Line 35: Guard runBswup against late script injection by checking
document.readyState before adding the listener: if the document is already
"interactive" or "complete" call runBswup() immediately, otherwise attach
window.addEventListener('DOMContentLoaded', runBswup) (refer to the runBswup
symbol). Also fix BitBswup.forceRefresh where cacheFilter.test(key) is used:
avoid inconsistent results when cacheFilter has the global (g) or sticky (y)
flags by resetting cacheFilter.lastIndex = 0 before each test or by creating a
non-global equivalent RegExp from cacheFilter (use cacheFilter.source with flags
stripped of g/y) and testing against that; reference the BitBswup.forceRefresh
method and the cacheFilter variable so the change is made exactly where repeated
RegExp.test calls occur.
- Around line 497-500: forceRefresh builds the shouldDelete predicate from
cacheFilter but when cacheFilter is a RegExp it calls cacheFilter.test()
repeatedly, which can misbehave for /.../g or /.../y because RegExp.lastIndex is
mutated; fix by updating the RegExp branch in the shouldDelete construction
(used in forceRefresh) to reset cacheFilter.lastIndex = 0 before calling
cacheFilter.test(key) so each key is tested from the start; reference the
shouldDelete variable and cacheFilter RegExp usage in forceRefresh when making
the change.

---

Outside diff comments:
In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts`:
- Around line 333-362: The message handler currently returns Promises but must
use e.waitUntil(...) to keep the service worker alive; wrap each async branch so
that SKIP_WAITING uses e.waitUntil(self.skipWaiting().then(() =>
self.clients.claim()).then(() => deleteOldCaches()).then(() =>
sendMessage('WAITING_SKIPPED'))), CLAIM_CLIENTS uses
e.waitUntil(self.clients.claim().then(() => deleteOldCaches()).then(() =>
e.source?.postMessage('CLIENTS_CLAIMED'))), BLAZOR_STARTED uses
e.waitUntil(createAssetsCache(true)), and CLEAN_UP uses
e.waitUntil(deleteOldCaches()), ensuring all calls to self.skipWaiting(),
self.clients.claim(), deleteOldCaches(), createAssetsCache(true), sendMessage
and e.source?.postMessage are inside the waitUntil chains.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: d3c76fdc-5fec-4833-85fc-89e300ee0dd0

📥 Commits

Reviewing files that changed from the base of the PR and between 046d116 and 733a05a.

📒 Files selected for processing (8)
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/README.md
💤 Files with no reviewable changes (1)
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js

Comment thread src/Bswup/Bit.Bswup/BswupProgress.razor Outdated
Comment thread src/Bswup/Bit.Bswup/BswupProgress.razor Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts Outdated
@msynk
msynk requested a review from Copilot June 4, 2026 10:16
@msynk

msynk commented Jun 4, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai re-review

@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown

@msynk: Sure, triggering a fresh review of the PR now.

✅ Action performed

Full review finished.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

Comment thread src/Bswup/Bit.Bswup/BswupProgress.razor Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts

@coderabbitai coderabbitai 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.

Actionable comments posted: 7

🧹 Nitpick comments (1)
src/Bswup/README.md (1)

105-110: ⚡ Quick win

Consider showing complete error details in the example.

The comment documents that data.url and data.hash are available "when known", but the example only logs data.reason and data.message. For a more complete reference example, consider showing all available fields.

📝 Suggested enhancement
         case BswupMessage.error:
             // Structured install failure. data.reason is one of 'manifest' | 'integrity' |
             // 'fetch' | 'cache' | 'request' | 'install-incomplete'; data.message is human
             // readable, and data.url / data.hash point at the offending asset when known.
-            console.error('Bswup install error:', data.reason, data.message);
+            console.error('Bswup install error:', data.reason, data.message, data.url, data.hash);
             return;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/README.md` around lines 105 - 110, The example logging for the
BswupMessage.error case only prints data.reason and data.message; update the
handler for the BswupMessage.error branch (the switch case) to log all available
error details (data.reason, data.message, and when present data.url and
data.hash, plus the whole data object for unknown fields) so consumers see the
complete failure context; use the existing BswupMessage.error case and data
variable to append url and hash if defined and include a fallback of logging the
entire data object.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts`:
- Around line 129-149: The retry suppression omitted the 'install-incomplete'
reason so deterministic failures can still show the retry button; update the
nonRetriableReasons used where errorRetryButton is handled (the
nonRetriableReasons array and the isRetriable check in the same block) to
include 'install-incomplete' alongside 'manifest' and 'integrity' so isRetriable
becomes false for that reason, keep the existing behavior for invoking
data.reload() or window.location.reload() unchanged.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts`:
- Around line 388-425: The extract() function currently assigns options =
(window[optionsName] || defaultoptions) which replaces defaults when a partial
window[optionsName] exists; change it to merge defaults with any global config
(e.g. create options by combining defaultoptions and window[optionsName] such as
Object.assign({}, defaultoptions, window[optionsName]) or using the spread
operator) so missing keys in window[optionsName] fall back to defaultoptions;
keep the subsequent attribute overrides (log, sw, scope, handlerName,
blazorScript, updateInterval, updateOnVisibility) applied on top of the merged
options.
- Around line 427-438: The current handle function permanently replaces
options.handler with a noop when window[options.handlerName] is missing,
preventing later attachment from being picked up; change it so you do not
overwrite options.handler on missing handler — instead read
window[options.handlerName] into a local variable (e.g., foundHandler) or only
assign to options.handler when a real function is present, call that local/found
handler if available, and leave options.handler untouched (so future
registrations on window[options.handlerName] can be discovered); update the
logic in the handle function that references options.handlerName and
options.handler to reflect this non-destructive check.

In `@src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css`:
- Around line 74-89: Replace the deprecated word-break: break-word in the
.bit-bswup-error-message and .bit-bswup-error-details selectors by removing
those declarations and adding overflow-wrap: anywhere (leave existing
white-space: pre-wrap intact) so the stylesheet no longer triggers the Stylelint
warning.

In `@src/Bswup/README.md`:
- Line 218: Update the README entry for the `FullOffline` mode to correct the
grammar by changing "from first time the app is loaded" to "from the first time
the app is loaded" so the description reads: "Enables the full offline mode
where all assets are cached and served from the cache from the first time the
app is loaded."
- Around line 228-234: Update the "Polling for updates" paragraph to fix the
numeric inconsistency: change "There are three ways to check more often:" to
"There are two ways to check more often:" (since only the built-in options using
updateInterval/updateOnVisibility and calling BitBswup.checkForUpdate() are
listed), ensuring the section header "Polling for updates" and references to
updateInterval, updateOnVisibility and BitBswup.checkForUpdate() remain
unchanged.
- Line 213: The README wording incorrectly states that per-asset ?v= and SRI
derive from the manifest version; update the text to accurately reflect that
CACHE_VERSION / cacheVersion only affect the cache bucket name (computed into
CACHE_NAME) while per-asset cache-buster and integrity are set inside
createNewAssetRequest() using each asset's asset.hash (with fallback to
self.assetsManifest.version) and requestInit.integrity = asset.hash; replace the
sentence to mention that ?v= primarily comes from asset.hash (fallback to
manifest.version) and SRI uses asset.hash, and remove any implication that those
values reference self.cacheVersion or CACHE_VERSION.

---

Nitpick comments:
In `@src/Bswup/README.md`:
- Around line 105-110: The example logging for the BswupMessage.error case only
prints data.reason and data.message; update the handler for the
BswupMessage.error branch (the switch case) to log all available error details
(data.reason, data.message, and when present data.url and data.hash, plus the
whole data object for unknown fields) so consumers see the complete failure
context; use the existing BswupMessage.error case and data variable to append
url and hash if defined and include a fallback of logging the entire data
object.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 427f1025-c5ef-456e-b74d-6a2168e132d7

📥 Commits

Reviewing files that changed from the base of the PR and between 046d116 and de9c330.

📒 Files selected for processing (9)
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/README.md
💤 Files with no reviewable changes (1)
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js

Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
Comment thread src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
Comment thread src/Bswup/README.md Outdated
Comment thread src/Bswup/README.md Outdated
Comment thread src/Bswup/README.md
@msynk
msynk requested a review from Copilot June 6, 2026 06:44
@msynk

msynk commented Jun 6, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai re-review

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

@msynk: Starting a complete fresh review of #12418.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/Bswup/Tests/bit-bswup-js/page-script.test.js (1)

263-285: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Optional: hoist fakeWorker / progress100 into the harness. Both are duplicated here (Lines 264-278, 285, 765, 868) and again in progress-ui.test.js (Lines 377-390); a shared export keeps the lifecycle fake in one place as the SW contract evolves.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Tests/bit-bswup-js/page-script.test.js` around lines 263 - 285,
Optionally extract the duplicated fakeWorker helper and progress100 fixture from
the reload determinism tests and progress UI tests into the shared test harness.
Export and reuse these shared symbols so the ServiceWorker lifecycle fake and
100% progress message remain defined in one place.
src/Bswup/Tests/bit-bswup-js/harness.js (1)

465-473: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Optional: window and document listeners share one registry. document.addEventListener and window.addEventListener both push into listeners, so api.fire('visibilitychange') can't distinguish which target the bundle actually registered on — a regression that moves a listener between targets stays green. Separate maps (with fire(type, target)) would pin the contract.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Tests/bit-bswup-js/harness.js` around lines 465 - 473, Separate the
event listener registries used by the sandbox window and document in the harness
setup, rather than sharing listeners. Update the exposed fire API to accept a
target and dispatch only listeners registered on that target, preserving
addEventListener and removeEventListener behavior for each registry so
target-specific registration regressions are detected.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor`:
- Around line 172-192: Update the errorTolerance documentation in the
ServiceWorkerPage markup to identify strict as the default instead of lax, and
ensure the strict description reflects that default without changing the
documented lax behavior.

In `@src/Bswup/Bit.Bswup/Bit.Bswup.csproj`:
- Around line 90-99: The BuildJavaScript incremental inputs do not change when
switching configurations, allowing Release-minified outputs to be reused in
Debug. Update the BuildJavaScript Target’s Inputs to include a
configuration-scoped stamp or equivalent build-configuration signal, ensuring
tsc reruns after configuration changes while preserving the existing source and
package inputs.

---

Nitpick comments:
In `@src/Bswup/Tests/bit-bswup-js/harness.js`:
- Around line 465-473: Separate the event listener registries used by the
sandbox window and document in the harness setup, rather than sharing listeners.
Update the exposed fire API to accept a target and dispatch only listeners
registered on that target, preserving addEventListener and removeEventListener
behavior for each registry so target-specific registration regressions are
detected.

In `@src/Bswup/Tests/bit-bswup-js/page-script.test.js`:
- Around line 263-285: Optionally extract the duplicated fakeWorker helper and
progress100 fixture from the reload determinism tests and progress UI tests into
the shared test harness. Export and reuse these shared symbols so the
ServiceWorker lifecycle fake and 100% progress message remain defined in one
place.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c597aa0d-26a2-4097-b2f0-a34d3f38f4f1

📥 Commits

Reviewing files that changed from the base of the PR and between 826c1ad and b7269d0.

⛔ Files ignored due to path filters (8)
  • src/Bswup/Demos/BasicDemo/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/BasicDemo/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/BasicDemo/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/FullDemo/Client/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Tests/bit-bswup-js/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (100)
  • .github/workflows/bit.ci.Bswup.yml
  • src/Bit.CI.Release.slnx
  • src/Bit.slnx
  • src/Bswup/Bit.Bswup.Demo/App.razor
  • src/Bswup/Bit.Bswup.Demo/Bit.Bswup.Demo.csproj
  • src/Bswup/Bit.Bswup.Demo/Pages/CleanupPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/GettingStartedPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/HomePage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/JsApiPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/MigrationPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ScriptOptionsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor
  • src/Bswup/Bit.Bswup.Demo/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.Demo/Shared/Callout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor
  • src/Bswup/Bit.Bswup.Demo/_Imports.razor
  • src/Bswup/Bit.Bswup.Demo/wwwroot/app.css
  • src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/index.html
  • src/Bswup/Bit.Bswup.Demo/wwwroot/manifest.json
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.slnx
  • src/Bswup/Bit.Bswup/Bit.Bswup.csproj
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/Bit.Bswup/tsconfig.json
  • src/Bswup/Bit.Bswup/tsconfig.sw.json
  • src/Bswup/Demos/BasicDemo/App.razor
  • src/Bswup/Demos/BasicDemo/Bit.Bswup.BasicDemo.csproj
  • src/Bswup/Demos/BasicDemo/Pages/CounterPage.razor
  • src/Bswup/Demos/BasicDemo/Pages/HomePage.razor
  • src/Bswup/Demos/BasicDemo/Program.cs
  • src/Bswup/Demos/BasicDemo/Properties/launchSettings.json
  • src/Bswup/Demos/BasicDemo/_Imports.razor
  • src/Bswup/Demos/BasicDemo/wwwroot/index.html
  • src/Bswup/Demos/BasicDemo/wwwroot/manifest.json
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Client/Bit.Bswup.FullDemo.Client.csproj
  • src/Bswup/Demos/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Error.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Home.razor
  • src/Bswup/Demos/FullDemo/Client/Program.cs
  • src/Bswup/Demos/FullDemo/Client/Routes.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor.css
  • src/Bswup/Demos/FullDemo/Client/_Imports.razor
  • src/Bswup/Demos/FullDemo/Client/wwwroot/manifest.json
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Server/Bit.Bswup.FullDemo.Server.csproj
  • src/Bswup/Demos/FullDemo/Server/Components/App.razor
  • src/Bswup/Demos/FullDemo/Server/Components/_Imports.razor
  • src/Bswup/Demos/FullDemo/Server/Program.cs
  • src/Bswup/Demos/FullDemo/Server/Properties/launchSettings.json
  • src/Bswup/Demos/FullDemo/Server/appsettings.json
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/README.md
  • src/Bswup/Tests/bit-bswup-js/.gitignore
  • src/Bswup/Tests/bit-bswup-js/fetch-resilience.test.js
  • src/Bswup/Tests/bit-bswup-js/harness.js
  • src/Bswup/Tests/bit-bswup-js/package.json
  • src/Bswup/Tests/bit-bswup-js/page-script.test.js
  • src/Bswup/Tests/bit-bswup-js/progress-ui.test.js
  • src/Bswup/Tests/bit-bswup-js/service-worker.test.js
  • src/Bswup/Tests/bit-bswup-js/version-consistency.test.js
💤 Files with no reviewable changes (23)
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css

Comment thread src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor
Comment thread src/Bswup/Bit.Bswup/Bit.Bswup.csproj
@msynk

msynk commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

@msynk: Starting a complete fresh review of #12418.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai 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.

Actionable comments posted: 4

🧹 Nitpick comments (2)
src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor (1)

21-80: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Announce event-log updates to assistive tech.

#bswup-demo-events and the #pg-* status cells are mutated by JS after user actions ("Refresh status", "Check for update"), but nothing signals the change to a screen reader — the button appears to do nothing. Adding aria-live="polite" to the log list and the status <dl> makes the playground usable without sight.

🔧 Proposed fix
-            <dl class="status-list">
+            <dl class="status-list" aria-live="polite">
@@
-    <ul id="bswup-demo-events" class="event-log"></ul>
+    <ul id="bswup-demo-events" class="event-log" aria-live="polite"></ul>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor` around lines 21 - 80,
Add aria-live="polite" to the status-list <dl> containing the `#pg-`* status cells
and to the `#bswup-demo-events` event-log <ul>. Keep the existing status and event
markup unchanged so screen readers announce JavaScript-driven updates after user
actions.
src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts (1)

399-423: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Local el shadows the module-level el(id) helper.

autoStart() (Line 400), the MutationObserver callback (Line 470), and startObserving() (Line 493) each declare const el = document.getElementById('bit-bswup'), shadowing the cached element-resolver function el(id: string) defined at Line 36. No current call site inside these scopes invokes the outer helper, so it's not an active bug, but any future edit that tries to call el('some-other-id') inside these functions will silently resolve to the DOM element instead and throw at runtime.

Suggested fix
     function autoStart() {
-        const el = document.getElementById('bit-bswup');
-        if (!el || el.getAttribute('data-bit-bswup-config') !== 'true') return;
-        if (el.getAttribute('data-bit-bswup-initialized') === 'true') return;
+        const bswupRoot = document.getElementById('bit-bswup');
+        if (!bswupRoot || bswupRoot.getAttribute('data-bit-bswup-config') !== 'true') return;
+        if (bswupRoot.getAttribute('data-bit-bswup-initialized') === 'true') return;
         ...
     }

Also applies to: 469-498

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts` around lines 399 - 423,
Rename the local DOM-element variables in autoStart, the MutationObserver
callback, and startObserving so they no longer shadow the module-level el(id)
helper. Update all references within those scopes to use the new local name
while preserving the existing behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js`:
- Around line 17-20: Update record so it tracks a monotonically increasing event
revision independently of the capped events array, and have renderEvents use
that revision when determining whether new events need rendering. Preserve the
200-item cap while ensuring events added after the cap continue updating the UI.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts`:
- Around line 340-367: Update the nonRetriableReasons list in the
errorRetryButton handling to include 'install-infra', ensuring this terminal
install failure hides the retry button while preserving existing behavior for
all other reasons.

In `@src/Bswup/Demos/BasicDemo/wwwroot/index.html`:
- Around line 132-144: Update the data.reload flow in the demo startup handler
to include the same timeout fallback used by bit-bswup.progress.ts. Ensure a
reload that neither navigates nor settles eventually restores the splash and
retry controls, wiring reloadButton back to data.reload just like the existing
rejection path, while preserving successful reload behavior.

In `@src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js`:
- Line 69: Remove the self.importScripts call from the development service
worker so it remains a no-op and always uses network behavior. Keep the Bswup
engine import only in service-worker.published.js.

---

Nitpick comments:
In `@src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor`:
- Around line 21-80: Add aria-live="polite" to the status-list <dl> containing
the `#pg-`* status cells and to the `#bswup-demo-events` event-log <ul>. Keep the
existing status and event markup unchanged so screen readers announce
JavaScript-driven updates after user actions.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts`:
- Around line 399-423: Rename the local DOM-element variables in autoStart, the
MutationObserver callback, and startObserving so they no longer shadow the
module-level el(id) helper. Update all references within those scopes to use the
new local name while preserving the existing behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 634c7f63-19dd-4c00-a5dc-69c393c88e63

📥 Commits

Reviewing files that changed from the base of the PR and between 826c1ad and a41f645.

⛔ Files ignored due to path filters (8)
  • src/Bswup/Demos/BasicDemo/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/BasicDemo/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/BasicDemo/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/FullDemo/Client/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Tests/bit-bswup-js/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (100)
  • .github/workflows/bit.ci.Bswup.yml
  • src/Bit.CI.Release.slnx
  • src/Bit.slnx
  • src/Bswup/Bit.Bswup.Demo/App.razor
  • src/Bswup/Bit.Bswup.Demo/Bit.Bswup.Demo.csproj
  • src/Bswup/Bit.Bswup.Demo/Pages/CleanupPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/GettingStartedPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/HomePage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/JsApiPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/MigrationPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ScriptOptionsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor
  • src/Bswup/Bit.Bswup.Demo/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.Demo/Shared/Callout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor
  • src/Bswup/Bit.Bswup.Demo/_Imports.razor
  • src/Bswup/Bit.Bswup.Demo/wwwroot/app.css
  • src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/index.html
  • src/Bswup/Bit.Bswup.Demo/wwwroot/manifest.json
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.slnx
  • src/Bswup/Bit.Bswup/Bit.Bswup.csproj
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/Bit.Bswup/tsconfig.json
  • src/Bswup/Bit.Bswup/tsconfig.sw.json
  • src/Bswup/Demos/BasicDemo/App.razor
  • src/Bswup/Demos/BasicDemo/Bit.Bswup.BasicDemo.csproj
  • src/Bswup/Demos/BasicDemo/Pages/CounterPage.razor
  • src/Bswup/Demos/BasicDemo/Pages/HomePage.razor
  • src/Bswup/Demos/BasicDemo/Program.cs
  • src/Bswup/Demos/BasicDemo/Properties/launchSettings.json
  • src/Bswup/Demos/BasicDemo/_Imports.razor
  • src/Bswup/Demos/BasicDemo/wwwroot/index.html
  • src/Bswup/Demos/BasicDemo/wwwroot/manifest.json
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Client/Bit.Bswup.FullDemo.Client.csproj
  • src/Bswup/Demos/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Error.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Home.razor
  • src/Bswup/Demos/FullDemo/Client/Program.cs
  • src/Bswup/Demos/FullDemo/Client/Routes.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor.css
  • src/Bswup/Demos/FullDemo/Client/_Imports.razor
  • src/Bswup/Demos/FullDemo/Client/wwwroot/manifest.json
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Server/Bit.Bswup.FullDemo.Server.csproj
  • src/Bswup/Demos/FullDemo/Server/Components/App.razor
  • src/Bswup/Demos/FullDemo/Server/Components/_Imports.razor
  • src/Bswup/Demos/FullDemo/Server/Program.cs
  • src/Bswup/Demos/FullDemo/Server/Properties/launchSettings.json
  • src/Bswup/Demos/FullDemo/Server/appsettings.json
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/README.md
  • src/Bswup/Tests/bit-bswup-js/.gitignore
  • src/Bswup/Tests/bit-bswup-js/fetch-resilience.test.js
  • src/Bswup/Tests/bit-bswup-js/harness.js
  • src/Bswup/Tests/bit-bswup-js/package.json
  • src/Bswup/Tests/bit-bswup-js/page-script.test.js
  • src/Bswup/Tests/bit-bswup-js/progress-ui.test.js
  • src/Bswup/Tests/bit-bswup-js/service-worker.test.js
  • src/Bswup/Tests/bit-bswup-js/version-consistency.test.js
💤 Files with no reviewable changes (23)
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css

Comment thread src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
Comment thread src/Bswup/Demos/BasicDemo/wwwroot/index.html Outdated
Comment thread src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
@msynk

msynk commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

@msynk: Starting a complete fresh review of #12418.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts (1)

55-60: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Prefer a locally-named event shape over augmenting the global Event.

Declaring waitUntil/respondWith on the lib's Event interface makes them appear (as required, any) on every Event in this compilation — including bit-bswup.sw-cleanup.ts, which shares these ambient declarations. A dedicated interface BswupExtendableEvent { waitUntil: any; respondWith: any } used in the handler signatures keeps the same untyped ergonomics without widening a lib type.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts` around lines 55 - 60, Replace
the locally declared global Event interface with a dedicated
BswupExtendableEvent interface containing waitUntil and respondWith, then update
the install, activate, and fetch handler signatures to use it. Preserve the
existing untyped handler ergonomics without augmenting Event for other
compilation units.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor`:
- Line 29: Update the AutoReload documentation row in ProgressUIPage to use the
same v-10-5-0 release noted by the BswupProgress parameter XML comment, keeping
the stated default and behavior unchanged.

In `@src/Bswup/README.md`:
- Around line 210-214: Update the security note in the README to qualify SRI
verification of service-worker manifest assets with the opt-in
enableIntegrityCheck setting, stating that verification is available only when
it is enabled; leave the service-worker script limitation unchanged.

---

Nitpick comments:
In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts`:
- Around line 55-60: Replace the locally declared global Event interface with a
dedicated BswupExtendableEvent interface containing waitUntil and respondWith,
then update the install, activate, and fetch handler signatures to use it.
Preserve the existing untyped handler ergonomics without augmenting Event for
other compilation units.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f7414868-2f18-4d6d-98ed-007b65f06587

📥 Commits

Reviewing files that changed from the base of the PR and between 826c1ad and 8e970da.

⛔ Files ignored due to path filters (8)
  • src/Bswup/Demos/BasicDemo/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/BasicDemo/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/BasicDemo/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/FullDemo/Client/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Tests/bit-bswup-js/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (100)
  • .github/workflows/bit.ci.Bswup.yml
  • src/Bit.CI.Release.slnx
  • src/Bit.slnx
  • src/Bswup/Bit.Bswup.Demo/App.razor
  • src/Bswup/Bit.Bswup.Demo/Bit.Bswup.Demo.csproj
  • src/Bswup/Bit.Bswup.Demo/Pages/CleanupPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/GettingStartedPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/HomePage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/JsApiPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/MigrationPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ScriptOptionsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor
  • src/Bswup/Bit.Bswup.Demo/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.Demo/Shared/Callout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor
  • src/Bswup/Bit.Bswup.Demo/_Imports.razor
  • src/Bswup/Bit.Bswup.Demo/wwwroot/app.css
  • src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/index.html
  • src/Bswup/Bit.Bswup.Demo/wwwroot/manifest.json
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.slnx
  • src/Bswup/Bit.Bswup/Bit.Bswup.csproj
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/Bit.Bswup/tsconfig.json
  • src/Bswup/Bit.Bswup/tsconfig.sw.json
  • src/Bswup/Demos/BasicDemo/App.razor
  • src/Bswup/Demos/BasicDemo/Bit.Bswup.BasicDemo.csproj
  • src/Bswup/Demos/BasicDemo/Pages/CounterPage.razor
  • src/Bswup/Demos/BasicDemo/Pages/HomePage.razor
  • src/Bswup/Demos/BasicDemo/Program.cs
  • src/Bswup/Demos/BasicDemo/Properties/launchSettings.json
  • src/Bswup/Demos/BasicDemo/_Imports.razor
  • src/Bswup/Demos/BasicDemo/wwwroot/index.html
  • src/Bswup/Demos/BasicDemo/wwwroot/manifest.json
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Client/Bit.Bswup.FullDemo.Client.csproj
  • src/Bswup/Demos/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Error.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Home.razor
  • src/Bswup/Demos/FullDemo/Client/Program.cs
  • src/Bswup/Demos/FullDemo/Client/Routes.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor.css
  • src/Bswup/Demos/FullDemo/Client/_Imports.razor
  • src/Bswup/Demos/FullDemo/Client/wwwroot/manifest.json
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Server/Bit.Bswup.FullDemo.Server.csproj
  • src/Bswup/Demos/FullDemo/Server/Components/App.razor
  • src/Bswup/Demos/FullDemo/Server/Components/_Imports.razor
  • src/Bswup/Demos/FullDemo/Server/Program.cs
  • src/Bswup/Demos/FullDemo/Server/Properties/launchSettings.json
  • src/Bswup/Demos/FullDemo/Server/appsettings.json
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/README.md
  • src/Bswup/Tests/bit-bswup-js/.gitignore
  • src/Bswup/Tests/bit-bswup-js/fetch-resilience.test.js
  • src/Bswup/Tests/bit-bswup-js/harness.js
  • src/Bswup/Tests/bit-bswup-js/package.json
  • src/Bswup/Tests/bit-bswup-js/page-script.test.js
  • src/Bswup/Tests/bit-bswup-js/progress-ui.test.js
  • src/Bswup/Tests/bit-bswup-js/service-worker.test.js
  • src/Bswup/Tests/bit-bswup-js/version-consistency.test.js
💤 Files with no reviewable changes (23)
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml

Comment thread src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
Comment thread src/Bswup/README.md
@msynk

msynk commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

@msynk: Starting a complete fresh review of #12418.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

♻️ Duplicate comments (2)
src/Bswup/Demos/FullDemo/Server/Components/App.razor (1)

42-43: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Progress bootstrap still loads before the progress markup.

bit-bswup.progress.js self-initializes from the data-bit-bswup-* attributes emitted by BswupProgress.razor, but the script tag on Line 42 is parsed before <DemoBswupProgressBar /> renders on Line 43, so the config element isn't in the DOM yet.

🔧 Proposed reorder
-    <script src="_content/Bit.Bswup/bit-bswup.progress.js"></script>
-    <DemoBswupProgressBar />
+    <DemoBswupProgressBar />
+    <script src="_content/Bit.Bswup/bit-bswup.progress.js"></script>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Demos/FullDemo/Server/Components/App.razor` around lines 42 - 43,
Reorder the progress bootstrap in App.razor so DemoBswupProgressBar renders
before the bit-bswup.progress.js script tag, ensuring the script can discover
its data-bit-bswup-* configuration attributes during initialization.
src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts (1)

729-743: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Failed/unavailable Blazor start still reports BLAZOR_STARTED.

The rejection branch (Line 733-736) and the undefined branch (Line 742) both call onStarted(), which posts BLAZOR_STARTED to the worker even though Blazor never booted. Releasing the queued reload resolvers is correct; signalling startup success to the worker is not — consider splitting the resolver release from the BLAZOR_STARTED post (e.g. post BLAZOR_START_FAILED on those paths).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts` around lines 729 - 743, Separate
the reload-promise resolver from the worker startup-success notification in the
startPromise rejection and unavailable-Blazor branches of the surrounding
startup logic. Keep resolving queued reloads on failure, but do not call the
success-reporting onStarted path; instead notify the worker with the established
failure signal, such as BLAZOR_START_FAILED, while preserving the successful
BLAZOR_STARTED behavior for actual startup completion.
🧹 Nitpick comments (2)
src/Bswup/Demos/BasicDemo/wwwroot/index.html (1)

116-127: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Wrap the downloadProgress case body in a block.

const li, const urlEl, const percent are declared directly in the case clause, leaking into switch-scope — the same pattern already fixed with a block wrapper in bit-bswup.progress.ts's equivalent case. Apply the same fix here for consistency and to avoid a future duplicate-declaration error if another case adds a same-named const.

♻️ Proposed fix
-                case BswupMessage.downloadProgress:
+                case BswupMessage.downloadProgress: {
                     const li = document.createElement('li');
                     const urlEl = document.createElement('b');
                     urlEl.textContent = data.asset.url;
                     li.append(`${data.index}: `, urlEl, `: ${data.asset.hash}`);
                     assetsUl.prepend(li);
                     const percent = Math.round(data.percent);
                     progressBar.style.width = `${percent}%`;
                     percentLabel.textContent = `${percent} %`;
                     return console.log('asset downloaded:', data);
+                }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Demos/BasicDemo/wwwroot/index.html` around lines 116 - 127, Wrap
the body of the BswupMessage.downloadProgress case in its own block, enclosing
the const declarations for li, urlEl, and percent and the associated statements,
while preserving the existing behavior and return.
src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js (1)

70-117: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Remove leftover template dead code.

This is the default Blazor WASM PWA scaffold (onInstall/onActivate/onFetch), fully superseded by the Bswup engine loaded above. Keeping it commented out invites confusion about which caching logic is actually active, and the PR's own goals call for removing dead code.

♻️ Proposed removal
-//// Caution! Be sure you understand the caveats before publishing an application with
-//// offline support. See https://aka.ms/blazor-offline-considerations
-
-//self.importScripts('./service-worker-assets.js');
-//self.addEventListener('install', event => event.waitUntil(onInstall(event)));
-//self.addEventListener('activate', event => event.waitUntil(onActivate(event)));
-//self.addEventListener('fetch', event => event.respondWith(onFetch(event)));
-
-//const cacheNamePrefix = 'offline-cache-';
-//const cacheName = `${cacheNamePrefix}${self.assetsManifest.version}`;
-//const offlineAssetsInclude = [ /\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/ ];
-//const offlineAssetsExclude = [ /^service-worker\.js$/ ];
-
-//async function onInstall(event) {
-//    console.info('Service worker: Install');
-
-//    // Fetch and cache all matching items from the assets manifest
-//    const assetsRequests = self.assetsManifest.assets
-//        .filter(asset => offlineAssetsInclude.some(pattern => pattern.test(asset.url)))
-//        .filter(asset => !offlineAssetsExclude.some(pattern => pattern.test(asset.url)))
-//        .map(asset => new Request(asset.url, { integrity: asset.hash }));
-//    await caches.open(cacheName).then(cache => cache.addAll(assetsRequests));
-//}
-
-//async function onActivate(event) {
-//    console.info('Service worker: Activate');
-
-//    // Delete unused caches
-//    const cacheKeys = await caches.keys();
-//    await Promise.all(cacheKeys
-//        .filter(key => key.startsWith(cacheNamePrefix) && key !== cacheName)
-//        .map(key => caches.delete(key)));
-//}
-
-//async function onFetch(event) {
-//    let cachedResponse = null;
-//    if (event.request.method === 'GET') {
-//        // For all navigation requests, try to serve index.html from cache
-//        // If you need some URLs to be server-rendered, edit the following check to exclude those URLs
-//        const shouldServeIndexHtml = event.request.mode === 'navigate';
-
-//        const request = shouldServeIndexHtml ? 'index.html' : event.request;
-//        const cache = await caches.open(cacheName);
-//        cachedResponse = await cache.match(request);
-//    }
-
-//    return cachedResponse || fetch(event.request);
-//}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js` around
lines 70 - 117, Remove the fully commented-out Blazor PWA scaffold, including
the inactive service-worker event registrations and the onInstall, onActivate,
and onFetch functions, along with their related cache configuration constants
and comments; retain the active Bswup service-worker implementation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor`:
- Around line 54-68: Update the BswupDemo.checkForUpdate wrapper in demo.js to
await BitBswup.checkForUpdate() and catch unexpected rejections, recording the
failure consistently with the other async wrappers. Ensure button-triggered
calls do not produce unhandled promise rejections while preserving the existing
successful update-check behavior.

In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts`:
- Around line 314-330: Update the fatal-error handling block to also hide or
clear assetsEl, the downloaded-asset list populated by downloadProgress when
showAssets is enabled. Ensure no partial asset rows remain visible beside the
failure message, while preserving the existing progress and percentage cleanup.

---

Duplicate comments:
In `@src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts`:
- Around line 729-743: Separate the reload-promise resolver from the worker
startup-success notification in the startPromise rejection and
unavailable-Blazor branches of the surrounding startup logic. Keep resolving
queued reloads on failure, but do not call the success-reporting onStarted path;
instead notify the worker with the established failure signal, such as
BLAZOR_START_FAILED, while preserving the successful BLAZOR_STARTED behavior for
actual startup completion.

In `@src/Bswup/Demos/FullDemo/Server/Components/App.razor`:
- Around line 42-43: Reorder the progress bootstrap in App.razor so
DemoBswupProgressBar renders before the bit-bswup.progress.js script tag,
ensuring the script can discover its data-bit-bswup-* configuration attributes
during initialization.

---

Nitpick comments:
In `@src/Bswup/Demos/BasicDemo/wwwroot/index.html`:
- Around line 116-127: Wrap the body of the BswupMessage.downloadProgress case
in its own block, enclosing the const declarations for li, urlEl, and percent
and the associated statements, while preserving the existing behavior and
return.

In `@src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js`:
- Around line 70-117: Remove the fully commented-out Blazor PWA scaffold,
including the inactive service-worker event registrations and the onInstall,
onActivate, and onFetch functions, along with their related cache configuration
constants and comments; retain the active Bswup service-worker implementation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5d259870-34f2-4057-9580-77304034fb80

📥 Commits

Reviewing files that changed from the base of the PR and between 826c1ad and 03525eb.

⛔ Files ignored due to path filters (8)
  • src/Bswup/Demos/BasicDemo/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/BasicDemo/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/BasicDemo/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/FullDemo/Client/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Tests/bit-bswup-js/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (100)
  • .github/workflows/bit.ci.Bswup.yml
  • src/Bit.CI.Release.slnx
  • src/Bit.slnx
  • src/Bswup/Bit.Bswup.Demo/App.razor
  • src/Bswup/Bit.Bswup.Demo/Bit.Bswup.Demo.csproj
  • src/Bswup/Bit.Bswup.Demo/Pages/CleanupPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/GettingStartedPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/HomePage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/JsApiPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/MigrationPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ScriptOptionsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor
  • src/Bswup/Bit.Bswup.Demo/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.Demo/Shared/Callout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor
  • src/Bswup/Bit.Bswup.Demo/_Imports.razor
  • src/Bswup/Bit.Bswup.Demo/wwwroot/app.css
  • src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/index.html
  • src/Bswup/Bit.Bswup.Demo/wwwroot/manifest.json
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.slnx
  • src/Bswup/Bit.Bswup/Bit.Bswup.csproj
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/Bit.Bswup/tsconfig.json
  • src/Bswup/Bit.Bswup/tsconfig.sw.json
  • src/Bswup/Demos/BasicDemo/App.razor
  • src/Bswup/Demos/BasicDemo/Bit.Bswup.BasicDemo.csproj
  • src/Bswup/Demos/BasicDemo/Pages/CounterPage.razor
  • src/Bswup/Demos/BasicDemo/Pages/HomePage.razor
  • src/Bswup/Demos/BasicDemo/Program.cs
  • src/Bswup/Demos/BasicDemo/Properties/launchSettings.json
  • src/Bswup/Demos/BasicDemo/_Imports.razor
  • src/Bswup/Demos/BasicDemo/wwwroot/index.html
  • src/Bswup/Demos/BasicDemo/wwwroot/manifest.json
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Client/Bit.Bswup.FullDemo.Client.csproj
  • src/Bswup/Demos/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Error.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Home.razor
  • src/Bswup/Demos/FullDemo/Client/Program.cs
  • src/Bswup/Demos/FullDemo/Client/Routes.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor.css
  • src/Bswup/Demos/FullDemo/Client/_Imports.razor
  • src/Bswup/Demos/FullDemo/Client/wwwroot/manifest.json
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Server/Bit.Bswup.FullDemo.Server.csproj
  • src/Bswup/Demos/FullDemo/Server/Components/App.razor
  • src/Bswup/Demos/FullDemo/Server/Components/_Imports.razor
  • src/Bswup/Demos/FullDemo/Server/Program.cs
  • src/Bswup/Demos/FullDemo/Server/Properties/launchSettings.json
  • src/Bswup/Demos/FullDemo/Server/appsettings.json
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/README.md
  • src/Bswup/Tests/bit-bswup-js/.gitignore
  • src/Bswup/Tests/bit-bswup-js/fetch-resilience.test.js
  • src/Bswup/Tests/bit-bswup-js/harness.js
  • src/Bswup/Tests/bit-bswup-js/package.json
  • src/Bswup/Tests/bit-bswup-js/page-script.test.js
  • src/Bswup/Tests/bit-bswup-js/progress-ui.test.js
  • src/Bswup/Tests/bit-bswup-js/service-worker.test.js
  • src/Bswup/Tests/bit-bswup-js/version-consistency.test.js
💤 Files with no reviewable changes (23)
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor

Comment thread src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor Outdated
Comment thread src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
@msynk

msynk commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

@msynk: Starting a complete fresh review of #12418.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai 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.

♻️ Duplicate comments (2)
src/Bswup/Bit.Bswup/Bit.Bswup.csproj (1)

29-34: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Re-flagging: None Include still duplicates SDK default globbing.

package*.json/tsconfig*.json are already implicitly included as @(None) by the SDK's default item globs (EnableDefaultNoneItems defaults to true). Re-including them here without first removing the implicit entries risks an NETSDK1022 duplicate-item build error. This was flagged in a prior review round and does not appear to have been addressed yet.

🐛 Proposed fix
 <ItemGroup>
     <Content Remove="package*.json;tsconfig*.json" />
+    <None Remove="package*.json;tsconfig*.json" />
     <None Include="package*.json;tsconfig*.json" />
 </ItemGroup>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup/Bit.Bswup.csproj` around lines 29 - 34, Update the
project-file item handling around the Content and None entries so the implicitly
included package*.json and tsconfig*.json items are removed before being
explicitly included as None. Preserve their visibility in the project while
preventing duplicate SDK default items and NETSDK1022 errors.
src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor (1)

19-19: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Version label still mismatched.

Rest of the PR ships as 10.5.0; this label still reads "10-6-0". Update for consistency.

Proposed fix
-    <NavLink href="migration">Migrating to 10-6-0</NavLink>
+    <NavLink href="migration">Migrating to 10-5-0</NavLink>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor` at line 19, Update the NavLink
label in the navigation menu from “Migrating to 10-6-0” to match the PR’s 10.5.0
version, while preserving the existing migration link and navigation structure.
🧹 Nitpick comments (1)
src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor (1)

4-4: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Avoid inline event handlers in the documentation app.

These onclick attributes require CSP to allow inline scripts, so copy, navigation, and theme controls fail under a strict policy. Use Blazor @onclick bindings where interactive, or data-* actions with an externally bound listener.

  • src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor#L4-L4: replace the inline copy handler.
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor#L4-L4: replace the sidebar-toggle handler.
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor#L13-L13: replace the theme-toggle handler.
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor#L22-L22: replace the sidebar-close handler.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor` at line 4, Replace the
inline onclick handlers with CSP-compatible Blazor `@onclick` bindings or
externally handled data-* actions: update CodeBlock.razor lines 4-4 for copy,
MainLayout.razor lines 4-4 for sidebar toggle, line 13 for theme toggle, and
line 22 for sidebar close, preserving each control’s existing behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor`:
- Line 19: Update the NavLink label in the navigation menu from “Migrating to
10-6-0” to match the PR’s 10.5.0 version, while preserving the existing
migration link and navigation structure.

In `@src/Bswup/Bit.Bswup/Bit.Bswup.csproj`:
- Around line 29-34: Update the project-file item handling around the Content
and None entries so the implicitly included package*.json and tsconfig*.json
items are removed before being explicitly included as None. Preserve their
visibility in the project while preventing duplicate SDK default items and
NETSDK1022 errors.

---

Nitpick comments:
In `@src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor`:
- Line 4: Replace the inline onclick handlers with CSP-compatible Blazor
`@onclick` bindings or externally handled data-* actions: update CodeBlock.razor
lines 4-4 for copy, MainLayout.razor lines 4-4 for sidebar toggle, line 13 for
theme toggle, and line 22 for sidebar close, preserving each control’s existing
behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7fd5edb2-3193-4ad6-afe2-1773c2220fd5

📥 Commits

Reviewing files that changed from the base of the PR and between 826c1ad and d8e7aa8.

⛔ Files ignored due to path filters (8)
  • src/Bswup/Demos/BasicDemo/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/BasicDemo/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/BasicDemo/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/FullDemo/Client/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Tests/bit-bswup-js/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (100)
  • .github/workflows/bit.ci.Bswup.yml
  • src/Bit.CI.Release.slnx
  • src/Bit.slnx
  • src/Bswup/Bit.Bswup.Demo/App.razor
  • src/Bswup/Bit.Bswup.Demo/Bit.Bswup.Demo.csproj
  • src/Bswup/Bit.Bswup.Demo/Pages/CleanupPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/GettingStartedPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/HomePage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/JsApiPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/MigrationPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ScriptOptionsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor
  • src/Bswup/Bit.Bswup.Demo/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.Demo/Shared/Callout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor
  • src/Bswup/Bit.Bswup.Demo/_Imports.razor
  • src/Bswup/Bit.Bswup.Demo/wwwroot/app.css
  • src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/index.html
  • src/Bswup/Bit.Bswup.Demo/wwwroot/manifest.json
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.slnx
  • src/Bswup/Bit.Bswup/Bit.Bswup.csproj
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/Bit.Bswup/tsconfig.json
  • src/Bswup/Bit.Bswup/tsconfig.sw.json
  • src/Bswup/Demos/BasicDemo/App.razor
  • src/Bswup/Demos/BasicDemo/Bit.Bswup.BasicDemo.csproj
  • src/Bswup/Demos/BasicDemo/Pages/CounterPage.razor
  • src/Bswup/Demos/BasicDemo/Pages/HomePage.razor
  • src/Bswup/Demos/BasicDemo/Program.cs
  • src/Bswup/Demos/BasicDemo/Properties/launchSettings.json
  • src/Bswup/Demos/BasicDemo/_Imports.razor
  • src/Bswup/Demos/BasicDemo/wwwroot/index.html
  • src/Bswup/Demos/BasicDemo/wwwroot/manifest.json
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Client/Bit.Bswup.FullDemo.Client.csproj
  • src/Bswup/Demos/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Error.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Home.razor
  • src/Bswup/Demos/FullDemo/Client/Program.cs
  • src/Bswup/Demos/FullDemo/Client/Routes.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor.css
  • src/Bswup/Demos/FullDemo/Client/_Imports.razor
  • src/Bswup/Demos/FullDemo/Client/wwwroot/manifest.json
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Server/Bit.Bswup.FullDemo.Server.csproj
  • src/Bswup/Demos/FullDemo/Server/Components/App.razor
  • src/Bswup/Demos/FullDemo/Server/Components/_Imports.razor
  • src/Bswup/Demos/FullDemo/Server/Program.cs
  • src/Bswup/Demos/FullDemo/Server/Properties/launchSettings.json
  • src/Bswup/Demos/FullDemo/Server/appsettings.json
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/README.md
  • src/Bswup/Tests/bit-bswup-js/.gitignore
  • src/Bswup/Tests/bit-bswup-js/fetch-resilience.test.js
  • src/Bswup/Tests/bit-bswup-js/harness.js
  • src/Bswup/Tests/bit-bswup-js/package.json
  • src/Bswup/Tests/bit-bswup-js/page-script.test.js
  • src/Bswup/Tests/bit-bswup-js/progress-ui.test.js
  • src/Bswup/Tests/bit-bswup-js/service-worker.test.js
  • src/Bswup/Tests/bit-bswup-js/version-consistency.test.js
💤 Files with no reviewable changes (23)
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css

@msynk

msynk commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

@msynk: Starting a complete fresh review of #12418.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai 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.

Actionable comments posted: 3

🧹 Nitpick comments (2)
src/Bswup/Tests/bit-bswup-js/harness.js (1)

375-396: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Fake DOM nodes have no parent links, so the error path's bar-hiding branch is untestable. bit-bswup.progress.ts hides the progress bar through progressEl.parentElement, which the harness never populates; the resulting assertion in the progress suite passes unconditionally.

  • src/Bswup/Tests/bit-bswup-js/harness.js#L375-L396: set parentElement on appended/prepended nodes in createElement so the fake models parent links.
  • src/Bswup/Tests/bit-bswup-js/progress-ui.test.js#L93-L93: once parents exist, assert the bar's wrapper display on the error path instead of the currently vacuous not.toBe('none') check on the bar itself.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Tests/bit-bswup-js/harness.js` around lines 375 - 396, The fake DOM
in createElement lacks parent links, making the progress bar error-path hide
behavior untestable. In src/Bswup/Tests/bit-bswup-js/harness.js lines 375-396,
update append and prepend to assign each inserted node’s parentElement to the
containing element while preserving child ordering. In
src/Bswup/Tests/bit-bswup-js/progress-ui.test.js line 93, change the error-path
assertion to verify the bar wrapper’s display state rather than the bar’s own
display value.
src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js (1)

1-18: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Version references are inconsistent. Header says 10.5.0 (matching bit-bswup.sw version / BitBswup.version), but the comments here and in the runtime describe behavior "since v-10-6-0". Consider aligning the wording (or the version) so readers don't chase a release that doesn't match the shipped bundle.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js` around lines 1 -
18, The version references in the service-worker header and explanatory comments
are inconsistent. Update the “since v-10-6-0” wording near self.assetsUrl to
match the shipped 10.5.0 version and its actual behavior, without changing the
runtime configuration or asset-path logic.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js`:
- Around line 6-11: Update the Resiliency knobs comment beside
self.errorTolerance to document strict as the default and lax as the opt-in
best-effort mode, without changing the configuration code.

In `@src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js`:
- Around line 11-14: Update the comments in
src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js lines 11-14 to describe lax
as an explicit demo override of the strict default, while preserving the
rationale about exercising progress and error reporting. Also update the
resiliency example comments in
src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js lines 12-17 to
identify strict as the default error tolerance.

In `@src/Bswup/Tests/bit-bswup-js/progress-ui.test.js`:
- Line 93: Remove or replace the vacuous display assertion in the progress UI
test because the fake progress bar never receives a display value and its parent
element is not modeled. Assert the progress behavior that the implementation
actually updates, such as style.width or aria-valuenow, using the existing
progress test setup.

---

Nitpick comments:
In `@src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js`:
- Around line 1-18: The version references in the service-worker header and
explanatory comments are inconsistent. Update the “since v-10-6-0” wording near
self.assetsUrl to match the shipped 10.5.0 version and its actual behavior,
without changing the runtime configuration or asset-path logic.

In `@src/Bswup/Tests/bit-bswup-js/harness.js`:
- Around line 375-396: The fake DOM in createElement lacks parent links, making
the progress bar error-path hide behavior untestable. In
src/Bswup/Tests/bit-bswup-js/harness.js lines 375-396, update append and prepend
to assign each inserted node’s parentElement to the containing element while
preserving child ordering. In src/Bswup/Tests/bit-bswup-js/progress-ui.test.js
line 93, change the error-path assertion to verify the bar wrapper’s display
state rather than the bar’s own display value.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e88fc714-d4d8-40e3-9a76-2760dba3dc4f

📥 Commits

Reviewing files that changed from the base of the PR and between 826c1ad and 66a374c.

⛔ Files ignored due to path filters (8)
  • src/Bswup/Demos/BasicDemo/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/BasicDemo/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/BasicDemo/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/FullDemo/Client/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Tests/bit-bswup-js/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (100)
  • .github/workflows/bit.ci.Bswup.yml
  • src/Bit.CI.Release.slnx
  • src/Bit.slnx
  • src/Bswup/Bit.Bswup.Demo/App.razor
  • src/Bswup/Bit.Bswup.Demo/Bit.Bswup.Demo.csproj
  • src/Bswup/Bit.Bswup.Demo/Pages/CleanupPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/GettingStartedPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/HomePage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/JsApiPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/MigrationPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ScriptOptionsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor
  • src/Bswup/Bit.Bswup.Demo/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.Demo/Shared/Callout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor
  • src/Bswup/Bit.Bswup.Demo/_Imports.razor
  • src/Bswup/Bit.Bswup.Demo/wwwroot/app.css
  • src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/index.html
  • src/Bswup/Bit.Bswup.Demo/wwwroot/manifest.json
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.slnx
  • src/Bswup/Bit.Bswup/Bit.Bswup.csproj
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/Bit.Bswup/tsconfig.json
  • src/Bswup/Bit.Bswup/tsconfig.sw.json
  • src/Bswup/Demos/BasicDemo/App.razor
  • src/Bswup/Demos/BasicDemo/Bit.Bswup.BasicDemo.csproj
  • src/Bswup/Demos/BasicDemo/Pages/CounterPage.razor
  • src/Bswup/Demos/BasicDemo/Pages/HomePage.razor
  • src/Bswup/Demos/BasicDemo/Program.cs
  • src/Bswup/Demos/BasicDemo/Properties/launchSettings.json
  • src/Bswup/Demos/BasicDemo/_Imports.razor
  • src/Bswup/Demos/BasicDemo/wwwroot/index.html
  • src/Bswup/Demos/BasicDemo/wwwroot/manifest.json
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Client/Bit.Bswup.FullDemo.Client.csproj
  • src/Bswup/Demos/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Error.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Home.razor
  • src/Bswup/Demos/FullDemo/Client/Program.cs
  • src/Bswup/Demos/FullDemo/Client/Routes.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor.css
  • src/Bswup/Demos/FullDemo/Client/_Imports.razor
  • src/Bswup/Demos/FullDemo/Client/wwwroot/manifest.json
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Server/Bit.Bswup.FullDemo.Server.csproj
  • src/Bswup/Demos/FullDemo/Server/Components/App.razor
  • src/Bswup/Demos/FullDemo/Server/Components/_Imports.razor
  • src/Bswup/Demos/FullDemo/Server/Program.cs
  • src/Bswup/Demos/FullDemo/Server/Properties/launchSettings.json
  • src/Bswup/Demos/FullDemo/Server/appsettings.json
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/README.md
  • src/Bswup/Tests/bit-bswup-js/.gitignore
  • src/Bswup/Tests/bit-bswup-js/fetch-resilience.test.js
  • src/Bswup/Tests/bit-bswup-js/harness.js
  • src/Bswup/Tests/bit-bswup-js/package.json
  • src/Bswup/Tests/bit-bswup-js/page-script.test.js
  • src/Bswup/Tests/bit-bswup-js/progress-ui.test.js
  • src/Bswup/Tests/bit-bswup-js/service-worker.test.js
  • src/Bswup/Tests/bit-bswup-js/version-consistency.test.js
💤 Files with no reviewable changes (23)
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs

Comment thread src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
Comment thread src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js
Comment thread src/Bswup/Tests/bit-bswup-js/progress-ui.test.js Outdated
@msynk

msynk commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

@msynk: Starting a complete fresh review of #12418.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai 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.

Actionable comments posted: 5

♻️ Duplicate comments (2)
src/Bswup/Demos/FullDemo/Server/Components/App.razor (1)

42-43: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Duplicate: render the progress component before its bootstrap script.

The script initializes before <DemoBswupProgressBar /> emits the required data-bit-bswup-* elements, so first-load initialization cannot discover its configuration.

Proposed fix
-    <script src="_content/Bit.Bswup/bit-bswup.progress.js"></script>
     <DemoBswupProgressBar />
+    <script src="_content/Bit.Bswup/bit-bswup.progress.js"></script>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Demos/FullDemo/Server/Components/App.razor` around lines 42 - 43,
Reorder the DemoBswupProgressBar markup and the bit-bswup.progress.js script in
the App component so the progress component renders first and emits its
data-bit-bswup-* configuration elements before the bootstrap script initializes.
src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js (1)

6-11: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the shared error-tolerance documentation. These samples still state that lax is the default, but this PR establishes strict as the default and lax as the opt-in best-effort mode.

  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js#L6-L11: describe lax as opt-in.
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js#L11-L14: describe the active lax assignment as an intentional override.
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js#L12-L17: identify strict as the default.
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js#L61-L66: identify strict as the default.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js` around lines 6
- 11, Update the shared error-tolerance comments in
src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js lines 6-11,
src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js lines 11-14,
src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js lines 12-17, and
src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js lines 61-66:
state that strict is the default, describe lax as opt-in best-effort behavior,
and identify the active lax assignment in BasicDemo’s service-worker.js as an
intentional override.
🧹 Nitpick comments (3)
src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor (1)

9-9: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Unify the Bswup version strings to 10.5.0 / v10.5.0. The demo service workers, component scripts, and demo layout all mark this release as 10.5.0, while several docs and page references still use v-10-6-0/10-6-0; align those docs links and headers with the current release instead of labeling 10.5.0 as migration content.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor` at line 9, Unify release
references to 10.5.0/v10.5.0: update MainLayout.razor (9-9) and NavMenu.razor
(21-21) version labels, and revise EventsPage.razor (57-63) documentation links
and headers from v-10-6-0/10-6-0 migration content to the current 10.5.0
release.
src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js (1)

70-117: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Remove the obsolete template service-worker implementation.

This disabled install/activate/fetch implementation describes a competing cache lifecycle after Bswup is imported. Keep the short offline-support reference, but remove the dead template implementation to avoid conflicting guidance.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js` around
lines 70 - 117, Remove the commented-out service-worker implementation,
including the importScripts call, lifecycle event registrations, cache
configuration constants, and onInstall/onActivate/onFetch functions. Preserve
only the introductory offline-support caution and reference link in
service-worker.published.js.
src/Bswup/Tests/bit-bswup-js/service-worker.test.js (1)

62-73: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider draining pending work in tests that skip settle().

This test (and a few others, e.g. Lines 1032-1033 do it correctly) resolves the install without awaiting sw.settle(), so background download/report work can still be running when the test ends. That risks cross-test unhandled rejections and flakes. Adding await sw.settle() after the assertion keeps each case self-contained.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Tests/bit-bswup-js/service-worker.test.js` around lines 62 - 73,
Add await sw.settle() after the install assertion in the test around the boot
call, ensuring all background download and reporting work completes before the
test exits.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor`:
- Around line 84-93: Resolve the contradiction in the EventsPage reason and
fatality documentation: update the `reason` description for `install-infra` to
acknowledge that it can be lax/non-fatal, while retaining the fatal behavior for
strict failures. Ensure the adjacent `fatal` column remains consistent with this
distinction and does not describe all `install-infra` failures as always fatal.

In `@src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor`:
- Around line 7-10: Update the lifecycle wording in the explanatory paragraph
near the BswupProgress reference from past tense to present tense: change “It
registered” to “It registers.”
- Around line 54-56: Update the first-install failure handling and its
documentation around the ProgressUIPage fatal-error panel so manifest parsing
failures and integrity mismatches do not render the Retry button, while other
retryable fatal errors retain it. Ensure the documented behavior matches the
runtime contract and the existing error classification used by the page.

In `@src/Bswup/Demos/BasicDemo/wwwroot/index.html`:
- Line 77: Update the first-install overlay text in the bit-bswup-title
paragraph to use wording that indicates the application is being installed or
downloaded for the first time, rather than announcing a new version. Preserve
the existing title element and styling.

In `@src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js`:
- Around line 16-18: Align both service workers with the stamped Bswup version:
update self.assetsUrl in service-worker.js and service-worker.published.js to
use the 10.5.0 root-absolute default, or consistently upgrade their
stamped/runtime version to 10.6.0 and retain the relative
service-worker-assets.js behavior.

---

Duplicate comments:
In `@src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js`:
- Around line 6-11: Update the shared error-tolerance comments in
src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js lines 6-11,
src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js lines 11-14,
src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js lines 12-17, and
src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js lines 61-66:
state that strict is the default, describe lax as opt-in best-effort behavior,
and identify the active lax assignment in BasicDemo’s service-worker.js as an
intentional override.

In `@src/Bswup/Demos/FullDemo/Server/Components/App.razor`:
- Around line 42-43: Reorder the DemoBswupProgressBar markup and the
bit-bswup.progress.js script in the App component so the progress component
renders first and emits its data-bit-bswup-* configuration elements before the
bootstrap script initializes.

---

Nitpick comments:
In `@src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor`:
- Line 9: Unify release references to 10.5.0/v10.5.0: update MainLayout.razor
(9-9) and NavMenu.razor (21-21) version labels, and revise EventsPage.razor
(57-63) documentation links and headers from v-10-6-0/10-6-0 migration content
to the current 10.5.0 release.

In `@src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js`:
- Around line 70-117: Remove the commented-out service-worker implementation,
including the importScripts call, lifecycle event registrations, cache
configuration constants, and onInstall/onActivate/onFetch functions. Preserve
only the introductory offline-support caution and reference link in
service-worker.published.js.

In `@src/Bswup/Tests/bit-bswup-js/service-worker.test.js`:
- Around line 62-73: Add await sw.settle() after the install assertion in the
test around the boot call, ensuring all background download and reporting work
completes before the test exits.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ff3e1742-facc-4583-9902-09a1e8faf121

📥 Commits

Reviewing files that changed from the base of the PR and between 826c1ad and f39a481.

⛔ Files ignored due to path filters (8)
  • src/Bswup/Demos/BasicDemo/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/BasicDemo/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/BasicDemo/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/FullDemo/Client/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Tests/bit-bswup-js/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (100)
  • .github/workflows/bit.ci.Bswup.yml
  • src/Bit.CI.Release.slnx
  • src/Bit.slnx
  • src/Bswup/Bit.Bswup.Demo/App.razor
  • src/Bswup/Bit.Bswup.Demo/Bit.Bswup.Demo.csproj
  • src/Bswup/Bit.Bswup.Demo/Pages/CleanupPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/GettingStartedPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/HomePage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/JsApiPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/MigrationPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ScriptOptionsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor
  • src/Bswup/Bit.Bswup.Demo/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.Demo/Shared/Callout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor
  • src/Bswup/Bit.Bswup.Demo/_Imports.razor
  • src/Bswup/Bit.Bswup.Demo/wwwroot/app.css
  • src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/index.html
  • src/Bswup/Bit.Bswup.Demo/wwwroot/manifest.json
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.slnx
  • src/Bswup/Bit.Bswup/Bit.Bswup.csproj
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/Bit.Bswup/tsconfig.json
  • src/Bswup/Bit.Bswup/tsconfig.sw.json
  • src/Bswup/Demos/BasicDemo/App.razor
  • src/Bswup/Demos/BasicDemo/Bit.Bswup.BasicDemo.csproj
  • src/Bswup/Demos/BasicDemo/Pages/CounterPage.razor
  • src/Bswup/Demos/BasicDemo/Pages/HomePage.razor
  • src/Bswup/Demos/BasicDemo/Program.cs
  • src/Bswup/Demos/BasicDemo/Properties/launchSettings.json
  • src/Bswup/Demos/BasicDemo/_Imports.razor
  • src/Bswup/Demos/BasicDemo/wwwroot/index.html
  • src/Bswup/Demos/BasicDemo/wwwroot/manifest.json
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Client/Bit.Bswup.FullDemo.Client.csproj
  • src/Bswup/Demos/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Error.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Home.razor
  • src/Bswup/Demos/FullDemo/Client/Program.cs
  • src/Bswup/Demos/FullDemo/Client/Routes.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor.css
  • src/Bswup/Demos/FullDemo/Client/_Imports.razor
  • src/Bswup/Demos/FullDemo/Client/wwwroot/manifest.json
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Server/Bit.Bswup.FullDemo.Server.csproj
  • src/Bswup/Demos/FullDemo/Server/Components/App.razor
  • src/Bswup/Demos/FullDemo/Server/Components/_Imports.razor
  • src/Bswup/Demos/FullDemo/Server/Program.cs
  • src/Bswup/Demos/FullDemo/Server/Properties/launchSettings.json
  • src/Bswup/Demos/FullDemo/Server/appsettings.json
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/README.md
  • src/Bswup/Tests/bit-bswup-js/.gitignore
  • src/Bswup/Tests/bit-bswup-js/fetch-resilience.test.js
  • src/Bswup/Tests/bit-bswup-js/harness.js
  • src/Bswup/Tests/bit-bswup-js/package.json
  • src/Bswup/Tests/bit-bswup-js/page-script.test.js
  • src/Bswup/Tests/bit-bswup-js/progress-ui.test.js
  • src/Bswup/Tests/bit-bswup-js/service-worker.test.js
  • src/Bswup/Tests/bit-bswup-js/version-consistency.test.js
💤 Files with no reviewable changes (23)
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/FullDemo/Client/_Imports.razor

Comment thread src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor
Comment thread src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
Comment thread src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
Comment thread src/Bswup/Demos/BasicDemo/wwwroot/index.html Outdated
Comment thread src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
@msynk

msynk commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

@msynk: Starting a complete fresh review of PR #12418.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai 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.

🧹 Nitpick comments (1)
src/Bswup/Tests/bit-bswup-js/service-worker.test.js (1)

1345-1350: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider pinning install behavior for the malformed (not just missing) manifest. The sibling test asserts install rejects when assetsManifest is undefined, but this one only asserts module evaluation doesn't throw. Since version: 5 / assets: 'not-an-array' also fails validateAssetsManifest, asserting the resulting error message (reason === 'manifest', fatal) and whether install rejects would lock down the normalize-vs-refuse contract that this PR changed.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Bswup/Tests/bit-bswup-js/service-worker.test.js` around lines 1345 -
1350, Extend the malformed-manifest test around createServiceWorkerContext and
sw.load to exercise install behavior as well as module evaluation. Assert that
the invalid assets manifest is refused with the expected manifest reason and
fatal status, and pin whether install rejects, matching the sibling
undefined-manifest test while preserving the non-throwing load assertion.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/Bswup/Tests/bit-bswup-js/service-worker.test.js`:
- Around line 1345-1350: Extend the malformed-manifest test around
createServiceWorkerContext and sw.load to exercise install behavior as well as
module evaluation. Assert that the invalid assets manifest is refused with the
expected manifest reason and fatal status, and pin whether install rejects,
matching the sibling undefined-manifest test while preserving the non-throwing
load assertion.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 568c502b-416c-45c4-9046-9c23c1655711

📥 Commits

Reviewing files that changed from the base of the PR and between 826c1ad and 8953762.

⛔ Files ignored due to path filters (8)
  • src/Bswup/Demos/BasicDemo/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/BasicDemo/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/BasicDemo/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/bit-bw-64.png is excluded by !**/*.png
  • src/Bswup/Demos/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Demos/FullDemo/Client/wwwroot/icon-512.png is excluded by !**/*.png
  • src/Bswup/FullDemo/Client/wwwroot/favicon.ico is excluded by !**/*.ico
  • src/Bswup/Tests/bit-bswup-js/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (100)
  • .github/workflows/bit.ci.Bswup.yml
  • src/Bit.CI.Release.slnx
  • src/Bit.slnx
  • src/Bswup/Bit.Bswup.Demo/App.razor
  • src/Bswup/Bit.Bswup.Demo/Bit.Bswup.Demo.csproj
  • src/Bswup/Bit.Bswup.Demo/Pages/CleanupPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/EventsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/GettingStartedPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/HomePage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/JsApiPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/MigrationPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/PlaygroundPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ProgressUIPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ScriptOptionsPage.razor
  • src/Bswup/Bit.Bswup.Demo/Pages/ServiceWorkerPage.razor
  • src/Bswup/Bit.Bswup.Demo/Properties/launchSettings.json
  • src/Bswup/Bit.Bswup.Demo/Shared/Callout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/CodeBlock.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/MainLayout.razor
  • src/Bswup/Bit.Bswup.Demo/Shared/NavMenu.razor
  • src/Bswup/Bit.Bswup.Demo/_Imports.razor
  • src/Bswup/Bit.Bswup.Demo/wwwroot/app.css
  • src/Bswup/Bit.Bswup.Demo/wwwroot/demo.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/index.html
  • src/Bswup/Bit.Bswup.Demo/wwwroot/manifest.json
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.Demo/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/Bit.Bswup.slnx
  • src/Bswup/Bit.Bswup/Bit.Bswup.csproj
  • src/Bswup/Bit.Bswup/BswupProgress.razor
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.progress.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw-cleanup.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.sw.ts
  • src/Bswup/Bit.Bswup/Scripts/bit-bswup.ts
  • src/Bswup/Bit.Bswup/Styles/bit-bswup.progress.css
  • src/Bswup/Bit.Bswup/tsconfig.json
  • src/Bswup/Bit.Bswup/tsconfig.sw.json
  • src/Bswup/Demos/BasicDemo/App.razor
  • src/Bswup/Demos/BasicDemo/Bit.Bswup.BasicDemo.csproj
  • src/Bswup/Demos/BasicDemo/Pages/CounterPage.razor
  • src/Bswup/Demos/BasicDemo/Pages/HomePage.razor
  • src/Bswup/Demos/BasicDemo/Program.cs
  • src/Bswup/Demos/BasicDemo/Properties/launchSettings.json
  • src/Bswup/Demos/BasicDemo/_Imports.razor
  • src/Bswup/Demos/BasicDemo/wwwroot/index.html
  • src/Bswup/Demos/BasicDemo/wwwroot/manifest.json
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.js
  • src/Bswup/Demos/BasicDemo/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Client/Bit.Bswup.FullDemo.Client.csproj
  • src/Bswup/Demos/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Error.razor
  • src/Bswup/Demos/FullDemo/Client/Pages/Home.razor
  • src/Bswup/Demos/FullDemo/Client/Program.cs
  • src/Bswup/Demos/FullDemo/Client/Routes.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor
  • src/Bswup/Demos/FullDemo/Client/Shared/MainLayout.razor.css
  • src/Bswup/Demos/FullDemo/Client/_Imports.razor
  • src/Bswup/Demos/FullDemo/Client/wwwroot/manifest.json
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/Demos/FullDemo/Client/wwwroot/service-worker.published.js
  • src/Bswup/Demos/FullDemo/Server/Bit.Bswup.FullDemo.Server.csproj
  • src/Bswup/Demos/FullDemo/Server/Components/App.razor
  • src/Bswup/Demos/FullDemo/Server/Components/_Imports.razor
  • src/Bswup/Demos/FullDemo/Server/Program.cs
  • src/Bswup/Demos/FullDemo/Server/Properties/launchSettings.json
  • src/Bswup/Demos/FullDemo/Server/appsettings.json
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/README.md
  • src/Bswup/Tests/bit-bswup-js/.gitignore
  • src/Bswup/Tests/bit-bswup-js/fetch-resilience.test.js
  • src/Bswup/Tests/bit-bswup-js/harness.js
  • src/Bswup/Tests/bit-bswup-js/package.json
  • src/Bswup/Tests/bit-bswup-js/page-script.test.js
  • src/Bswup/Tests/bit-bswup-js/progress-ui.test.js
  • src/Bswup/Tests/bit-bswup-js/service-worker.test.js
  • src/Bswup/Tests/bit-bswup-js/version-consistency.test.js
💤 Files with no reviewable changes (23)
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.Development.json
  • src/Bswup/FullDemo/Server/Startup/Middlewares.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Routes.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/MainLayout.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Program.cs
  • src/Bswup/FullDemo/Server/Startup/Services.cs
  • src/Bswup/FullDemo/Client/Properties/launchSettings.json
  • src/Bswup/FullDemo/Server/Pages/_Host.cshtml
  • src/Bswup/FullDemo/Server/Program.cs
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/appsettings.json
  • src/Bswup/FullDemo/Client/Shared/DemoBswupProgressBar.razor.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.published.js
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/Pages/Error.razor
  • src/Bswup/FullDemo/Client/_Imports.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/app.css
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Layout/DemoBswupProgressBar.razor
  • src/Bswup/FullDemo/Server/Pages/_Layout.cshtml
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Components/App.razor
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/wwwroot/service-worker.js
  • src/Bswup/FullDemo/Client/Pages/Counter.razor
  • src/Bswup/FullDemo/Client/wwwroot/service-worker.js

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.

bit Bswup improvements

2 participants