Skip to content

release: v1.3.3 — fix Google Workspace alias domains - #88

Merged
hoangsvit merged 20 commits into
devfrom
release/v1.3.3-workspace-alias-fix
Jul 29, 2026
Merged

release: v1.3.3 — fix Google Workspace alias domains#88
hoangsvit merged 20 commits into
devfrom
release/v1.3.3-workspace-alias-fix

Conversation

@hoangsvit

@hoangsvit hoangsvit commented Jul 29, 2026

Copy link
Copy Markdown
Member

Summary

  • bump the extension package version from 1.3.2 to 1.3.3;
  • add the 1.3.3 release entry to the changelog displayed in Settings → Changelog;
  • move changelog types and release data out of Settings.tsx into entrypoints/popup/data/changelog.ts;
  • document the Google Workspace alias-domain and account-isolation fixes merged through PR fix: preserve Google Workspace domain in alias suggestions #87;
  • add regression tests that keep the newest changelog version aligned with package.json, enforce unique descending versions, and validate release entries.

Extension changelog

Fixed

  • Website-aware alias suggestions now preserve the selected Google Workspace domain instead of forcing @gmail.com.
  • Previous aliases, recent history, and favorites are filtered by the active account to prevent Gmail data from appearing under a Workspace account.
  • Invalid base email values no longer produce inline alias suggestions.

Structure

entrypoints/popup/data/changelog.ts
├─ ChangelogChangeType
├─ ChangelogChange
├─ ChangelogEntry
└─ CHANGELOG

Settings.tsx now only imports the changelog data and renders the UI.

Testing

  • GitHub Actions workflow validation
  • TypeScript compile
  • Unit tests
  • Changelog data regression tests
  • Production extension build
  • Manifest-scope verification
  • Website build
  • CodeRabbit
  • Review findings resolved
  • eplus-bot approval on the latest head

Notes

  • This PR targets dev.
  • CHANGELOG.md is intentionally unchanged.
  • This PR does not create a tag, GitHub Release, or publish store packages.

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: cac8e9d3-f68a-4e73-b5b6-37a0ecff2ddf

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

@eplus-bot

Copy link
Copy Markdown
Contributor

Thank you for creating this pull request and helping make the project better.

We will review / merge it when we are online.

@eplus-bot eplus-bot added needs-review Pull request is ready for maintainer review build-ci Build, CI, release, or project configuration labels Jul 29, 2026
@eplus-bot
eplus-bot self-requested a review July 29, 2026 14:27
@qodo-code-review

qodo-code-review Bot commented Jul 29, 2026

Copy link
Copy Markdown

PR Summary by Qodo

Release v1.3.3: externalize popup changelog and validate release ordering

✨ Enhancement 🧪 Tests ⚙️ Configuration changes 🕐 10-20 Minutes

Grey Divider

AI Description

• Bump extension version to 1.3.3 and keep the in-extension changelog aligned.
• Move Settings → Changelog data into a typed module to reduce UI noise.
• Add tests to enforce changelog ordering, uniqueness, and version parity.
Diagram

graph TD
  Package["package.json"] --> Version["src/version.ts"] --> Settings["Settings.tsx"]
  Changelog["data/changelog.ts"] --> Settings --> Popup["Popup UI"]
  Tests["changelogData.test.ts"] --> Changelog --> Version
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Generate in-extension changelog from CHANGELOG.md at build time
  • ➕ Single source of truth for release notes
  • ➕ Avoids manual duplication and ordering mistakes
  • ➕ Can enforce formatting/validation in CI as part of generation
  • ➖ Requires build tooling and parsing rules for markdown structure
  • ➖ Harder to curate/shorten entries specifically for the popup UI
  • ➖ Adds build complexity and potential drift if markdown format changes
2. Host changelog remotely and fetch at runtime
  • ➕ Updates changelog without shipping a new extension build
  • ➕ Can centralize release content across web + extension
  • ➖ Breaks offline-first behavior and introduces network/privacy concerns
  • ➖ Requires caching, failure handling, and permissions considerations
  • ➖ Can create mismatch between installed version and displayed notes

Recommendation: The current approach (typed, local TS data + a small validation test) is the best fit for an offline extension and keeps the UI component clean. If duplication with a repository-wide CHANGELOG becomes painful, consider build-time generation later; runtime fetching is likely not worth the added complexity and privacy implications.

Files changed (4) +223 / -161

Enhancement (1) +175 / -0
changelog.tsAdd typed, readonly popup changelog dataset (includes v1.3.3) +175/-0

Add typed, readonly popup changelog dataset (includes v1.3.3)

• Introduces a new module defining changelog types and exporting a readonly CHANGELOG array. Adds the 1.3.3 entry documenting Workspace alias-domain preservation, account-isolated history/favorites, and base-email validation.

entrypoints/popup/data/changelog.ts

Refactor (1) +5 / -160
Settings.tsxImport changelog data/types instead of inlining entries +5/-160

Import changelog data/types instead of inlining entries

• Removes the large in-file changelog array and local type definitions. Settings now imports CHANGELOG plus ChangelogEntry/ChangelogChange types from a dedicated data module, keeping the Changelog tab rendering logic unchanged.

entrypoints/popup/components/Settings.tsx

Tests (1) +42 / -0
changelogData.test.tsAdd tests to enforce changelog version alignment and ordering +42/-0

Add tests to enforce changelog version alignment and ordering

• Adds Vitest coverage ensuring the newest changelog entry matches APP_VERSION, versions are unique and sorted descending, and each release has a valid date plus non-empty change items.

tests/popup/changelogData.test.ts

Other (1) +1 / -1
package.jsonBump extension version from 1.3.2 to 1.3.3 +1/-1

Bump extension version from 1.3.2 to 1.3.3

• Updates the root package version to 1.3.3, which also feeds APP_VERSION via src/version.ts.

package.json

@hoangsvit hoangsvit closed this Jul 29, 2026
@hoangsvit hoangsvit reopened this Jul 29, 2026
@eplus-bot eplus-bot added the documentation Improvements or additions to documentation label Jul 29, 2026

@eplus-bot eplus-bot 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.

Approved by @eplus-bot after all pull request checks passed.

CI run: https://github.com/ePlus-DEV/gmail-alias-toolkit/actions/runs/30461184739

@eplus-bot

eplus-bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

CI passed

Approved by @eplus-bot after all pull request checks passed.

Approval refresh: #4
CI updated: 2026-07-29T15:55:52Z
CI attempt: #1
Approval workflow: #447.1

CI run: https://github.com/ePlus-DEV/gmail-alias-toolkit/actions/runs/30468210771

@qodo-code-review

qodo-code-review Bot commented Jul 29, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (2) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Changelog test not mirrored 📘 Rule violation ⚙ Maintainability ⭐ New
Description
tests/popup/changelogData.test.ts does not mirror the source module path/name
(entrypoints/popup/data/changelog.ts), violating the repository’s test organization standard and
making tests harder to discover and maintain.
Code

tests/popup/changelogData.test.ts[R1-3]

+import { describe, expect, it } from "vitest";
+import { CHANGELOG } from "../../entrypoints/popup/data/changelog";
+import { APP_VERSION } from "../../src/version";
Evidence
PR Compliance ID 4 requires tests under tests/ to mirror the source structure. The module lives
under entrypoints/popup/data/changelog.ts, but the new test is placed at
tests/popup/changelogData.test.ts (missing the data/ subfolder and not matching the module
filename).

CLAUDE.md: Unit Tests Must Follow Repository Test Organization Standards
entrypoints/popup/data/changelog.ts[1-15]
tests/popup/changelogData.test.ts[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new changelog tests are not placed under `tests/` in a structure that mirrors the source module (`entrypoints/popup/data/changelog.ts`), which violates the repo’s test organization standard.

## Issue Context
Current test file is `tests/popup/changelogData.test.ts` while the module under test lives in `entrypoints/popup/data/changelog.ts`.

## Fix Focus Areas
- tests/popup/changelogData.test.ts[1-42]
- entrypoints/popup/data/changelog.ts[1-175]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Missing newline in package.json 📘 Rule violation ⚙ Maintainability
Description
package.json ends without a trailing newline, which is a common Prettier/formatter requirement and
can cause formatting checks to fail in CI. Add a final newline to keep formatting compliant and
avoid diff noise.
Code

package.json[64]

+}
Evidence
Prettier formatting compliance requires consistent formatting; the diff indicates package.json
ends without a newline at EOF, which is a formatting discrepancy centered on the final line.

CLAUDE.md: Prettier Formatting Compliance
package.json[64-64]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`package.json` has no trailing newline at end-of-file, which can violate Prettier/formatting compliance checks.

## Issue Context
The PR diff explicitly indicates `\ No newline at end of file` for `package.json`.

## Fix Focus Areas
- package.json[64-64]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Changelog skips 1.3.2 ✓ Resolved 🐞 Bug ⚙ Maintainability
Description
CHANGELOG.md adds a 1.3.3 section but the next entry is 1.3.1, omitting the 1.3.2 release from the
top-level changelog. This makes the project’s documented release history incomplete/inaccurate for
users and maintainers consuming CHANGELOG.md.
Code

CHANGELOG.md[R9-15]

+## [1.3.3] - 2026-07-29
+
+### :bug: Bug Fixes
+
+- [`63c969f`](https://github.com/ePlus-DEV/gmail-alias-toolkit/commit/63c969f3cacc3c79e91ac7a76b4b8a46885601d5) - preserve Google Workspace domains when generating website aliases and prevent Gmail alias history or favorites from leaking into another active account *(commit by [@hoangsvit](https://github.com/hoangsvit))*
+
## [1.3.1] - 2026-07-20
Evidence
CHANGELOG.md shows 1.3.3 followed immediately by 1.3.1 (no 1.3.2 section in between). The
repository also contains a 1.3.2 release entry in the extension’s embedded changelog and the
package is now at 1.3.3, supporting that 1.3.2 exists and is missing from the top-level
changelog.

CHANGELOG.md[9-17]
entrypoints/popup/components/Settings.tsx[86-116]
package.json[1-8]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The top-level `CHANGELOG.md` currently lists `1.3.3` followed immediately by `1.3.1`, which omits the previously released `1.3.2` information from the canonical changelog.

## Issue Context
- The in-extension changelog data includes a `1.3.2` entry, indicating `1.3.2` existed and should be represented in `CHANGELOG.md` as well.
- This PR bumps the package version to `1.3.3`, so having a complete ordered changelog is important for the release.

## Fix Focus Areas
- CHANGELOG.md[9-15]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

4. NaN semver comparator 🐞 Bug ☼ Reliability ⭐ New
Description
The new changelog test comparator converts version segments with Number(), so versions containing
prerelease/build metadata (e.g. "1.4.0-beta.1" or "1.4.0+build.1") produce NaN and make the
Array.sort() ordering assertion unreliable (it may not correctly detect misordered versions). This
is test-only but can cause false confidence or inconsistent behavior if such versions are introduced
later.
Code

tests/popup/changelogData.test.ts[R6-20]

+function parseVersion(version: string): number[] {
+  return version.split(".").map(Number);
+}
+
+/** Compares two semantic versions from newest to oldest. */
+function compareVersionsDescending(first: string, second: string): number {
+  const firstParts = parseVersion(first);
+  const secondParts = parseVersion(second);
+
+  for (let index = 0; index < 3; index += 1) {
+    const difference = (secondParts[index] ?? 0) - (firstParts[index] ?? 0);
+    if (difference !== 0) return difference;
+  }
+
+  return 0;
Evidence
The comparator returns arithmetic differences of numeric parts derived from Number()-converted
strings; any non-numeric suffix makes Number(...) become NaN, which can propagate into the
comparator return value and break the intended sort-based assertion.

tests/popup/changelogData.test.ts[6-20]
web/release-version.ts[7-16]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`parseVersion()` currently does `version.split(".").map(Number)`, which yields `NaN` for semver strings containing prerelease/build metadata (e.g. `1.4.0-beta.1`, `1.4.0+build.1`). This makes `compareVersionsDescending()` potentially return `NaN`, and `Array.sort()` may then treat comparisons as equal, weakening the ordering test.

## Issue Context
This is a test helper, but the repo already considers prerelease/build metadata valid semver in other code, so the changelog test should either:
- explicitly reject such versions (fail fast), or
- compare them correctly.

## Fix Focus Areas
- tests/popup/changelogData.test.ts[6-20]

## Suggested fix
- Parse only the `major.minor.patch` core reliably, e.g.:
 - Strip prerelease/build: `const core = version.split(/[+-]/, 1)[0];`
 - Validate with a regex: `/^(\d+)\.(\d+)\.(\d+)$/`
 - Convert captures via `Number()` and assert they are finite.
- Optionally (if you want full SemVer precedence), add prerelease-aware comparison rather than stripping it.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

To customize comments, go to the Qodo configuration screen, or learn more in the docs.

Previous review results

Review updated until commit 8b3271e

Results up to commit 162daa6 ⚖️ Balanced


🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)


Remediation recommended
1. Changelog skips 1.3.2 ✓ Resolved 🐞 Bug ⚙ Maintainability
Description
CHANGELOG.md adds a 1.3.3 section but the next entry is 1.3.1, omitting the 1.3.2 release from the
top-level changelog. This makes the project’s documented release history incomplete/inaccurate for
users and maintainers consuming CHANGELOG.md.
Code

CHANGELOG.md[R9-15]

+## [1.3.3] - 2026-07-29
+
+### :bug: Bug Fixes
+
+- [`63c969f`](https://github.com/ePlus-DEV/gmail-alias-toolkit/commit/63c969f3cacc3c79e91ac7a76b4b8a46885601d5) - preserve Google Workspace domains when generating website aliases and prevent Gmail alias history or favorites from leaking into another active account *(commit by [@hoangsvit](https://github.com/hoangsvit))*
+
## [1.3.1] - 2026-07-20
Evidence
CHANGELOG.md shows 1.3.3 followed immediately by 1.3.1 (no 1.3.2 section in between). The
repository also contains a 1.3.2 release entry in the extension’s embedded changelog and the
package is now at 1.3.3, supporting that 1.3.2 exists and is missing from the top-level
changelog.

CHANGELOG.md[9-17]
entrypoints/popup/components/Settings.tsx[86-116]
package.json[1-8]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The top-level `CHANGELOG.md` currently lists `1.3.3` followed immediately by `1.3.1`, which omits the previously released `1.3.2` information from the canonical changelog.

## Issue Context
- The in-extension changelog data includes a `1.3.2` entry, indicating `1.3.2` existed and should be represented in `CHANGELOG.md` as well.
- This PR bumps the package version to `1.3.3`, so having a complete ordered changelog is important for the release.

## Fix Focus Areas
- CHANGELOG.md[9-15]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Results up to commit 6a0b0f2 ⚖️ Balanced


🐞 Bugs (0) 📘 Rule violations (1) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)


Remediation recommended
1. Missing newline in package.json 📘 Rule violation ⚙ Maintainability
Description
package.json ends without a trailing newline, which is a common Prettier/formatter requirement and
can cause formatting checks to fail in CI. Add a final newline to keep formatting compliant and
avoid diff noise.
Code

package.json[64]

+}
Evidence
Prettier formatting compliance requires consistent formatting; the diff indicates package.json
ends without a newline at EOF, which is a formatting discrepancy centered on the final line.

CLAUDE.md: Prettier Formatting Compliance
package.json[64-64]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`package.json` has no trailing newline at end-of-file, which can violate Prettier/formatting compliance checks.

## Issue Context
The PR diff explicitly indicates `\ No newline at end of file` for `package.json`.

## Fix Focus Areas
- package.json[64-64]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Qodo Logo

Comment thread CHANGELOG.md Outdated
@eplus-bot
eplus-bot self-requested a review July 29, 2026 14:48
@hoangsvit hoangsvit closed this Jul 29, 2026
@hoangsvit hoangsvit reopened this Jul 29, 2026
@hoangsvit hoangsvit closed this Jul 29, 2026
@hoangsvit hoangsvit reopened this Jul 29, 2026
@eplus-bot eplus-bot added app Application or extension source code ui User interface or visual changes labels Jul 29, 2026

@eplus-bot eplus-bot 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.

Approved by @eplus-bot after all pull request checks passed.

CI run: https://github.com/ePlus-DEV/gmail-alias-toolkit/actions/runs/30463093149

Comment thread package.json Outdated
@qodo-code-review

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 6a0b0f2

@eplus-bot
eplus-bot self-requested a review July 29, 2026 14:57

@eplus-bot eplus-bot 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.

Approved by @eplus-bot after all pull request checks passed.

CI run: https://github.com/ePlus-DEV/gmail-alias-toolkit/actions/runs/30463477073

@eplus-bot
eplus-bot self-requested a review July 29, 2026 15:46
@eplus-bot eplus-bot added the tests Test coverage or test tooling changes label Jul 29, 2026
@hoangsvit hoangsvit closed this Jul 29, 2026
@hoangsvit hoangsvit reopened this Jul 29, 2026
@hoangsvit hoangsvit closed this Jul 29, 2026
@hoangsvit hoangsvit reopened this Jul 29, 2026
@hoangsvit hoangsvit closed this Jul 29, 2026
@hoangsvit hoangsvit reopened this Jul 29, 2026

@eplus-bot eplus-bot 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.

Approved by @eplus-bot after all pull request checks passed.

CI run: https://github.com/ePlus-DEV/gmail-alias-toolkit/actions/runs/30468210771

Comment on lines +1 to +3
import { describe, expect, it } from "vitest";
import { CHANGELOG } from "../../entrypoints/popup/data/changelog";
import { APP_VERSION } from "../../src/version";

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

1. Changelog test not mirrored 📘 Rule violation ⚙ Maintainability

tests/popup/changelogData.test.ts does not mirror the source module path/name
(entrypoints/popup/data/changelog.ts), violating the repository’s test organization standard and
making tests harder to discover and maintain.
Agent Prompt
## Issue description
The new changelog tests are not placed under `tests/` in a structure that mirrors the source module (`entrypoints/popup/data/changelog.ts`), which violates the repo’s test organization standard.

## Issue Context
Current test file is `tests/popup/changelogData.test.ts` while the module under test lives in `entrypoints/popup/data/changelog.ts`.

## Fix Focus Areas
- tests/popup/changelogData.test.ts[1-42]
- entrypoints/popup/data/changelog.ts[1-175]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +6 to +20
function parseVersion(version: string): number[] {
return version.split(".").map(Number);
}

/** Compares two semantic versions from newest to oldest. */
function compareVersionsDescending(first: string, second: string): number {
const firstParts = parseVersion(first);
const secondParts = parseVersion(second);

for (let index = 0; index < 3; index += 1) {
const difference = (secondParts[index] ?? 0) - (firstParts[index] ?? 0);
if (difference !== 0) return difference;
}

return 0;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Informational

2. Nan semver comparator 🐞 Bug ☼ Reliability

The new changelog test comparator converts version segments with Number(), so versions containing
prerelease/build metadata (e.g. "1.4.0-beta.1" or "1.4.0+build.1") produce NaN and make the
Array.sort() ordering assertion unreliable (it may not correctly detect misordered versions). This
is test-only but can cause false confidence or inconsistent behavior if such versions are introduced
later.
Agent Prompt
## Issue description
`parseVersion()` currently does `version.split(".").map(Number)`, which yields `NaN` for semver strings containing prerelease/build metadata (e.g. `1.4.0-beta.1`, `1.4.0+build.1`). This makes `compareVersionsDescending()` potentially return `NaN`, and `Array.sort()` may then treat comparisons as equal, weakening the ordering test.

## Issue Context
This is a test helper, but the repo already considers prerelease/build metadata valid semver in other code, so the changelog test should either:
- explicitly reject such versions (fail fast), or
- compare them correctly.

## Fix Focus Areas
- tests/popup/changelogData.test.ts[6-20]

## Suggested fix
- Parse only the `major.minor.patch` core reliably, e.g.:
  - Strip prerelease/build: `const core = version.split(/[+-]/, 1)[0];`
  - Validate with a regex: `/^(\d+)\.(\d+)\.(\d+)$/`
  - Convert captures via `Number()` and assert they are finite.
- Optionally (if you want full SemVer precedence), add prerelease-aware comparison rather than stripping it.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@qodo-code-review

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 8b3271e

@hoangsvit
hoangsvit merged commit a260291 into dev Jul 29, 2026
6 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for helping make Gmail Alias Toolkit better!

@hoangsvit
hoangsvit deleted the release/v1.3.3-workspace-alias-fix branch July 29, 2026 16:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app Application or extension source code build-ci Build, CI, release, or project configuration documentation Improvements or additions to documentation needs-review Pull request is ready for maintainer review tests Test coverage or test tooling changes ui User interface or visual changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants