Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
ba598f2
chore: remove unreferenced code and dead exports
fathiraz Aug 7, 2026
891ad10
refactor: collapse duplicated icon and button-motion declarations
fathiraz Aug 7, 2026
664ce9f
test: replace the custom toEqualValue matcher with vitest's toEqual
fathiraz Aug 7, 2026
5c28c84
refactor: inline single-caller Effect service wrappers
fathiraz Aug 7, 2026
bcf9c44
refactor: replace derived message schemas with a hand-written Protoco…
fathiraz Aug 7, 2026
d79010f
chore: drop unused dependencies
fathiraz Aug 7, 2026
d38002d
test(background): pin bulk verb and cache behaviour before refactor
fathiraz Aug 14, 2026
e662bb3
refactor: collapse duplicated string helpers and drop dead exports
fathiraz Aug 14, 2026
5c8f70a
refactor(background): extract the shared bulk verb runner
fathiraz Aug 14, 2026
33058c5
refactor(background): replace runBulkUpdate's double dispatch with on…
fathiraz Aug 14, 2026
21a316f
refactor(duplicate): extract the repeated section chrome from the modal
fathiraz Aug 14, 2026
2283d04
refactor(cache): drop the fiber TTL machinery for the pattern already…
fathiraz Aug 14, 2026
7944e7b
refactor(bar): collapse the duplicated overlay dismissal
fathiraz Aug 14, 2026
b80d119
chore: drop unused branded schemas and a redundant export
fathiraz Aug 15, 2026
2e74801
refactor: inline the one-line http-service module into the runtime
fathiraz Aug 15, 2026
187cc6f
refactor(ui): replace two inline modal overlays with the existing preset
fathiraz Aug 15, 2026
c0e7289
refactor(sprint): declare the sprint status shape once
fathiraz Aug 15, 2026
f07c462
refactor(ui): share one Kbd keycap across the four hand-copied versions
fathiraz Aug 15, 2026
9635ecd
refactor(ui): route the inline pluralisation through lib/format
fathiraz Aug 15, 2026
ad4e303
refactor(stores): use setTimeout for the dismissal timers
fathiraz Aug 15, 2026
7f4b9f9
refactor(background): drop the Effect round-trip from the message han…
fathiraz Aug 15, 2026
14fdc7a
refactor(queue): iterate the task array instead of round-tripping a Q…
fathiraz Aug 15, 2026
775f927
refactor(background): run every bulk queue through one progress runner
fathiraz Aug 15, 2026
99e9a0a
refactor(background): collapse the two paginated item resolvers into …
fathiraz Aug 15, 2026
3d0ca2c
refactor(ui): replace five parallel metadata switches with one copy t…
fathiraz Aug 15, 2026
9e72fe9
test(bar): pin overlay open/close behaviour before refactor
fathiraz Aug 15, 2026
6be3200
refactor(bar): hold the ten mutually-exclusive overlays in one slot
fathiraz Aug 15, 2026
753a972
test: pin the retry, timeout, cancellation and brand-decode contracts
fathiraz Aug 16, 2026
a18c56f
refactor(logger): call the logger directly instead of through an Effe…
fathiraz Aug 16, 2026
69e5ada
refactor(ids): brand the id types in TypeScript instead of at runtime
fathiraz Aug 16, 2026
7b7288e
refactor(errors): make the tagged errors plain Error subclasses
fathiraz Aug 16, 2026
24e9a46
refactor(graphql): collapse the service stack into one fetch client
fathiraz Aug 16, 2026
272e12f
refactor(queue): cancel with an AbortController instead of a fiber map
fathiraz Aug 16, 2026
8e6d729
chore: drop effect and @effect/platform
fathiraz Aug 16, 2026
8faaa30
refactor(bar): declare the eighteen shortcuts as a table
fathiraz Aug 16, 2026
1cd26af
refactor(relationships): build both dependency kinds with one task bu…
fathiraz Aug 16, 2026
40c8762
refactor(bar): open every overflow overlay through one path
fathiraz Aug 16, 2026
48d9331
refactor(queue): declare the tracker frame once
fathiraz Aug 16, 2026
e09a9b4
refactor: route two id parses and one style preset through what exists
fathiraz Aug 16, 2026
e9ec343
refactor(reorder): use the SectionHeader that already exists
fathiraz Aug 16, 2026
8f08e7d
refactor(dom): try selector lists through one helper
fathiraz Aug 16, 2026
e0f1e3a
refactor(issue-detail): mount the context card through createLightDomUi
fathiraz Aug 16, 2026
1db92fa
docs(tooltip): record why the Tippy wrapper cannot be simplified
fathiraz Aug 16, 2026
3e60194
chore: restore the per-browser build and publish scripts
fathiraz Aug 16, 2026
ed43dff
fix(resolve): match hyphen-spelled item ids by issue number
fathiraz Aug 16, 2026
428b53a
fix(reorder): resolve both id spellings in the reorder path too
fathiraz Aug 16, 2026
c3f173a
chore: drop an unused brand and two needlessly public helpers
fathiraz Aug 22, 2026
2679446
docs: correct the comments the Effect removal made wrong
fathiraz Aug 22, 2026
ab37cab
docs: correct the claim that this repo has no tests
fathiraz Aug 22, 2026
16ac47c
refactor(sprint): parse UTC dates and pick the earliest iteration once
fathiraz Aug 22, 2026
ca49de7
refactor(relationships): flatten the parent issue through one mapper
fathiraz Aug 22, 2026
bde1cca
refactor(sprint): load the sprint status through one hook
fathiraz Aug 22, 2026
b91c44d
refactor(token): share the PAT error banner and input styling
fathiraz Aug 22, 2026
daa2010
refactor(hovercard): derive the project-block meta once
fathiraz Aug 22, 2026
0a75acf
refactor(hovercard): hold the loading skeleton from one place
fathiraz Aug 22, 2026
9e28843
fix(sprint): show the iteration's last day instead of its exclusive end
fathiraz Aug 22, 2026
bd3bf9a
chore: drop four dead bindings and memoise the delete preview
fathiraz Aug 22, 2026
8f969f9
chore: drop the redundant @primer/live-region-element dependency
fathiraz Aug 22, 2026
c2f20b6
refactor(queue): broadcast the pre-queue frame from one place
fathiraz Aug 22, 2026
eef7bbf
refactor(duplicate): render every issue reference through one row
fathiraz Aug 22, 2026
d402d4c
refactor(hierarchy): resolve the item id and the blocking pair once each
fathiraz Aug 22, 2026
e46930e
docs: correct the pnpm version, test count and the z-index comment
fathiraz Aug 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:
thresholds: '50 75'

- name: Update README badge + summary
run: node scripts/update-coverage-badge.mjs --from-summary --from-markdown code-coverage-results.md
run: node scripts/update-coverage-badge.mjs --from-markdown code-coverage-results.md

- name: Commit updated README
uses: stefanzweifel/git-auto-commit-action@v6
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ This is a **browser extension** (Chrome/Firefox/Edge) built with WXT + React + T
### Key caveats

- **Node.js 25** is required (matches CI). Use `nvm use 25` if multiple versions are installed.
- **pnpm 10.32.1** is specified in `packageManager`; install via `npm install --global pnpm@10.32.1`.
- **No test framework** exists — there are no unit/integration tests. `pnpm typecheck` is the only automated validation.
- **pnpm 11.5.0** is specified in `packageManager`; install via `npm install --global pnpm@11.5.0`.
- **48 vitest test files / 639 cases** run via `pnpm test`. CI gates `typecheck` and `build` only, so run the tests locally — they are not enforced for you.
- `pnpm dev` starts the WXT dev server on port 3000 and auto-opens a Chromium browser with the extension loaded. In headless/cloud environments the auto-opened browser may not be visible; load the built extension manually via `chrome://extensions` → "Load unpacked" → `dist/chrome-mv3` (prod build) or `dist/chrome-mv3-dev` (dev build).
- The `postinstall` script runs `wxt prepare` which generates `.wxt/` types required by `tsconfig.json`. If typecheck fails after a fresh clone, re-run `pnpm install`.
- Styled-components warnings about unknown props (`sx`, `alignItems`, etc.) in the dev console are pre-existing and harmless — they come from `@primer/react` internals.
10 changes: 0 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
"zip:firefox": "wxt zip --browser firefox",
"zip:edge": "wxt zip --browser edge",
"zip:safari": "wxt zip --browser safari",
"submit": "webstore upload --source dist/chrome-mv3.zip --auto-publish",
"publish:chrome": "wxt build --browser chrome && wxt zip --browser chrome",
"publish:firefox": "wxt build --browser firefox && wxt zip --browser firefox",
"publish:edge": "wxt build --browser edge && wxt zip --browser edge",
Comment on lines 20 to 22

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.

P3: Each publish:* script runs the build twice: wxt zip --browser X already runs a production build before creating the zip, so the leading wxt build --browser X && before it is redundant and doubles the release build time and dist output churn. Drop the explicit wxt build and keep only wxt zip --browser X for each publish:* script.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At package.json, line 20:

<comment>Each `publish:*` script runs the build twice: `wxt zip --browser X` already runs a production build before creating the zip, so the leading `wxt build --browser X &&` before it is redundant and doubles the release build time and dist output churn. Drop the explicit `wxt build` and keep only `wxt zip --browser X` for each `publish:*` script.</comment>

<file context>
@@ -6,11 +6,22 @@
     "zip:firefox": "wxt zip --browser firefox",
     "zip:edge": "wxt zip --browser edge",
+    "zip:safari": "wxt zip --browser safari",
+    "publish:chrome": "wxt build --browser chrome && wxt zip --browser chrome",
+    "publish:firefox": "wxt build --browser firefox && wxt zip --browser firefox",
+    "publish:edge": "wxt build --browser edge && wxt zip --browser edge",
</file context>

Expand All @@ -31,7 +30,6 @@
"test": "vitest run",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
"test:coverage-badge": "node scripts/update-coverage-badge.mjs",
"prepare": "husky"
},
"lint-staged": {
Expand All @@ -43,28 +41,21 @@
"dependencies": {
"@atlaskit/pragmatic-drag-and-drop": "^1.8.1",
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
"@effect/platform": "^0.96.1",
"@effect/platform-browser": "^0.76.0",
"@emotion/is-prop-valid": "^1.4.0",
"@primer/live-region-element": "0.8.0",
"@primer/octicons-react": "^19.28.0",
"@primer/react": "^37.31.0",
"@tippyjs/react": "^4.2.6",
"@webext-core/messaging": "^3.0.1",
"driver.js": "^1.4.0",
"effect": "^3.21.2",
"marked": "^18.0.4",
"react": "^19.2.6",
"react-dom": "^19.2.6",
"styled-components": "^6.4.2",
"tippy.js": "^6.3.7"
},
"devDependencies": {
"@resvg/resvg-js": "^2.6.2",
"@types/marked": "^6.0.0",
"@types/react": "^19.2.15",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^6.0.2",
"@vitest/coverage-v8": "^4.1.8",
"@wxt-dev/module-react": "^1.2.2",
"eslint": "^10.4.1",
Expand All @@ -77,7 +68,6 @@
"typescript": "^6.0.3",
"typescript-eslint": "^8.60.0",
"vite": "^8.0.16",
"vite-node": "^6.0.0",
"vitest": "^4.1.8",
"wxt": "^0.20.26"
}
Expand Down
Loading
Loading