From dcadd2ce43055f54b19483d9c1b71d1685727d6b Mon Sep 17 00:00:00 2001 From: Kevin Buffardi Date: Thu, 8 Oct 2026 23:40:56 -0700 Subject: [PATCH 1/4] fix(ui): keep workspace colors accurate in settings Make the settings click-outside layer transparent and remove its workspace-facing shadow so theme previews remain true to the active palette. --- scripts/e2e-settings-memory-debug.test.mjs | 12 ++++++++++++ src/ui/styles.css | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/scripts/e2e-settings-memory-debug.test.mjs b/scripts/e2e-settings-memory-debug.test.mjs index 21e4746..7cd4f06 100644 --- a/scripts/e2e-settings-memory-debug.test.mjs +++ b/scripts/e2e-settings-memory-debug.test.mjs @@ -161,3 +161,15 @@ test('Settings markup exposes the official UBSan help link in a protected new ta assert.match(html, /rel="noopener noreferrer"/); assert.doesNotMatch(html, /settings-save|Save settings|Apply settings/i); }); + +test('Settings backdrop preserves accurate workspace theme previews', async () => { + const css = await readFile(new URL('../src/ui/styles.css', import.meta.url), 'utf8'); + const backdrop = css.match(/\.settings-backdrop\s*\{([^}]*)\}/)?.[1]; + const panel = css.match(/\.settings-panel\s*\{([^}]*)\}/)?.[1]; + + assert.ok(backdrop, 'Settings backdrop styles should exist for click-outside close'); + assert.match(backdrop, /background:\s*transparent\s*;/); + assert.doesNotMatch(backdrop, /(?:opacity|filter|backdrop-filter)\s*:/); + assert.ok(panel, 'Settings drawer styles should exist'); + assert.doesNotMatch(panel, /box-shadow\s*:/); +}); diff --git a/src/ui/styles.css b/src/ui/styles.css index 1cb177d..1f04161 100644 --- a/src/ui/styles.css +++ b/src/ui/styles.css @@ -176,7 +176,8 @@ select:focus { position: fixed; inset: var(--toolbar-h) 0 var(--statusbar-h) 0; z-index: 30; - background: rgb(17 17 27 / 55%); + /* Keep click-outside close without changing the colors being previewed. */ + background: transparent; } .settings-panel { @@ -190,7 +191,6 @@ select:focus { flex-direction: column; background: var(--mantle); border-left: 1px solid var(--surface1); - box-shadow: -8px 0 24px rgb(0 0 0 / 30%); } .settings-panel-header { From 37e9f2d4a05576337b501db86be232868d7cb312 Mon Sep 17 00:00:00 2001 From: Kevin Buffardi Date: Fri, 9 Oct 2026 04:01:12 -0700 Subject: [PATCH 2/4] test(browser): cover unfaded settings preview Verify the live Settings flow keeps its click-outside target transparent and does not cast a shadow over workspace theme previews. --- scripts/smoke-browser.mjs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/smoke-browser.mjs b/scripts/smoke-browser.mjs index 5cb169c..ddb977a 100644 --- a/scripts/smoke-browser.mjs +++ b/scripts/smoke-browser.mjs @@ -828,16 +828,24 @@ int main() { const openPanel = await evaluate(cdp, sessionId, `(() => { document.getElementById('btn-settings').click(); const panel = document.getElementById('settings-panel'); + const backdrop = document.getElementById('settings-backdrop'); const style = getComputedStyle(panel); + const backdropStyle = getComputedStyle(backdrop); return { hidden: panel.hidden, ariaHidden: panel.getAttribute('aria-hidden'), position: style.position, right: style.right, + boxShadow: style.boxShadow, + backdropHidden: backdrop.hidden, + backdropBackground: backdropStyle.backgroundColor, }; })()`); assert(openPanel.hidden === false && openPanel.ariaHidden === 'false', 'Settings panel did not open'); assert(openPanel.position === 'fixed' && openPanel.right === '0px', 'Settings panel is not a right-side drawer'); + assert(openPanel.backdropHidden === false, 'Settings backdrop should remain available for click-outside close'); + assert(openPanel.backdropBackground === 'rgba(0, 0, 0, 0)', 'Settings backdrop must not fade theme previews'); + assert(openPanel.boxShadow === 'none', 'Settings panel must not cast a shadow over workspace previews'); const toggleChecked = await evaluate(cdp, sessionId, `(() => { const toggle = document.getElementById('setting-memory-debug'); From d81d9ee5db44fc3bb6e2b373e28af836c214c8d7 Mon Sep 17 00:00:00 2001 From: Kevin Buffardi Date: Fri, 9 Oct 2026 10:02:49 -0700 Subject: [PATCH 3/4] chore(release): bump patch version to 0.5.1 Align the manifest, package metadata, and lockfile for the next patch release. --- manifest.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/manifest.json b/manifest.json index 45240b7..fb5dd4d 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "name": "browser.cpp", "short_name": "browser.cpp", "description": "In-browser C++20 IDE powered by Monaco Editor and WASM Clang", - "version": "0.5.0", + "version": "0.5.1", "minimum_chrome_version": "105", "icons": { "16": "icons/icon16.png", diff --git a/package-lock.json b/package-lock.json index c03a077..71f2e0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "browser.cpp", - "version": "0.5.0", + "version": "0.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "browser.cpp", - "version": "0.5.0", + "version": "0.5.1", "dependencies": { "@xterm/addon-fit": "^0.11.0", "@xterm/addon-web-links": "^0.12.0", diff --git a/package.json b/package.json index ecc267b..9f0b581 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "browser.cpp", - "version": "0.5.0", + "version": "0.5.1", "description": "In-browser C++20 IDE with WASM Clang toolchain", "private": true, "scripts": { From 378cee5aa5ea760b4cb2db79e8fbda44bd5c1c5f Mon Sep 17 00:00:00 2001 From: Kevin Buffardi Date: Fri, 9 Oct 2026 10:06:09 -0700 Subject: [PATCH 4/4] docs: add 0.5.1 release bump plan --- ...109-20261009-sdlc_planner-release-0.5.1.md | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 specs/issue-109-20261009-sdlc_planner-release-0.5.1.md diff --git a/specs/issue-109-20261009-sdlc_planner-release-0.5.1.md b/specs/issue-109-20261009-sdlc_planner-release-0.5.1.md new file mode 100644 index 0000000..cdf5da2 --- /dev/null +++ b/specs/issue-109-20261009-sdlc_planner-release-0.5.1.md @@ -0,0 +1,121 @@ +# Feature: Patch release version bump to 0.5.1 + +## Feature Description + +Bump browser.cpp's release metadata from `0.5.0` to `0.5.1` so the next extension package reflects a patch release after the Settings drawer theme-preview fix. The value in `manifest.json` remains the canonical project version, with npm metadata kept in sync. + +## User Story + +As a browser.cpp maintainer +I want to publish a patch version bump +So that the next release clearly identifies the latest patched extension build + +## Problem Statement + +The latest merged fix is still represented by the previous release version `0.5.0` on `main`. Release packaging and user-visible extension metadata need a patch increment to `0.5.1`. + +## Solution Statement + +Update the canonical extension version in `manifest.json` to `0.5.1`, then keep `package.json` and both package-lock root version fields aligned with that value. Validate with the repo's version-sync checks plus the standard lint, build, and E2E commands. + +## Relevant Files + +Use these files to implement the feature: + +- `manifest.json` - Canonical Chrome extension manifest version used by the runtime and release packaging. +- `package.json` - npm package metadata that must match the manifest version. +- `package-lock.json` - lockfile metadata with top-level and root-package versions that must match the manifest version. +- `scripts/sync-version-from-manifest.js` - Existing version alignment check used to validate the metadata. +- `scripts/check-release-version-sync.js` - Release validation for source and built manifest/package version agreement. +- `scripts/e2e-release-packaging.test.mjs` - Existing E2E coverage for version sync and release packaging behavior. + +### New Files + +- `specs/issue-109-20261009-sdlc_planner-release-0.5.1.md` - This implementation plan. + +## Implementation Plan + +### Phase 1: Foundation + +Confirm the current release version on `main`, verify that `manifest.json` is the canonical source, and create GitHub Issue #109 as the source of truth for the release bump. + +### Phase 2: Core Implementation + +Update `manifest.json`, `package.json`, and `package-lock.json` from `0.5.0` to `0.5.1` without changing dependencies, runtime code, or build configuration. + +### Phase 3: Integration + +Run version synchronization, release version checks, lint, build, and E2E validation. Open a pull request from a release branch that closes Issue #109. + +## Step by Step Tasks + +IMPORTANT: Execute every step in order, top to bottom. + +### 1. Confirm Current Version State + +- Read `manifest.json`, `package.json`, and `package-lock.json`. +- Confirm `main` reports `0.5.0` before the bump. +- Confirm no runtime source files need changes. + +### 2. Update Version Metadata + +- Set `manifest.json` version to `0.5.1`. +- Set `package.json` version to `0.5.1`. +- Set `package-lock.json` top-level version to `0.5.1`. +- Set `package-lock.json` `packages[""].version` to `0.5.1`. + +### 3. Validate Version Alignment + +- Run the version sync check. +- Run the release version check after build output exists. +- Confirm no unintended file changes are present. + +### 4. Run Standard Validation + +- Run every command in the Validation Commands section. +- Fix only release-metadata issues if any command fails. + +### 5. Publish Review Artifacts + +- Commit the release bump and plan. +- Push a release branch. +- Open a PR that references `closes #109`. + +## Testing Strategy + +### Unit Tests + +No new unit tests are required because this is static release metadata. Existing release/version tests already cover version synchronization, mismatch detection, and package metadata alignment. + +### Edge Cases + +- `manifest.json` changes but npm metadata does not. +- `package-lock.json` top-level version changes but `packages[""].version` does not. +- Build output manifests retain an old version. +- Release checks run before build output exists. + +## Acceptance Criteria + +- `manifest.json` reports `0.5.1`. +- `package.json` reports `0.5.1`. +- `package-lock.json` reports `0.5.1` for both root version fields. +- Version sync and release sync checks pass. +- Lint, build, and standard E2E tests pass. +- A pull request is opened and linked with `closes #109`. + +## Validation Commands + +Execute every command to validate the feature works correctly with zero regressions. + +```bash +npm run version:check +npm run lint +npm run build +npm run release:check-version +npm run test:e2e +``` + +## Notes + +- This patch bump intentionally does not modify runtime code. +- Browser smoke tests are not required for this metadata-only change; the standard E2E release packaging tests cover the version logic.