docs(tracker-web): tick CC.1-CC.8 cross-cutting + Expand-wave status (UX-CC)
Mark the cross-cutting items complete with evidence: full suite green per wave (CC.1), dark-mode parity via the --bl-* bridge (CC.2), zero new color literals (CC.3), offline axe on /login + /roadmap (CC.4), master ROADMAP left untouched per default (CC.5), gzip-verified bundle budgets (CC.7), enforced 80% coverage thresholds at 94/87/94/97 (CC.8). Add an Expand-waves status table with commit SHAs and document the data-gated deferrals (UX-12.3, UX-13.1). Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
parent
3d22c3031f
commit
64e6cc11a1
@ -250,27 +250,48 @@ pnpm build # final gate
|
||||
(Added `@bytelyst/notifications-ui` workspace dep with a minimal `link:` lockfile entry;
|
||||
`SystemBanners` mounts `BannerStack` (env `NEXT_PUBLIC_SYSTEM_NOTICE`, dismissible) +
|
||||
a localStorage-dismissible `Announcement` at the top of the dashboard shell. UX-13.2
|
||||
verified: tc/lint/test 165 ✓/build/e2e 18 ✓.)
|
||||
`3d22c303`: tc/lint/test 165 ✓/build/e2e 18 ✓.)
|
||||
|
||||
## Cross-cutting (run continuously)
|
||||
|
||||
- [ ] **CC.1** Full suite green after every wave: `pnpm typecheck && pnpm lint && pnpm test && pnpm build`.
|
||||
- [ ] **CC.2** Dark mode parity — every migrated surface looks correct in `.dark`.
|
||||
- [ ] **CC.3** Zero new hardcoded color literals (grep `slate-|blue-600|#[0-9a-f]{6}` in changed files).
|
||||
- [ ] **CC.4** a11y — if `@axe-core/playwright` runs offline, assert no new violations on `/roadmap`
|
||||
- [x] **CC.1** Full suite green after every wave: `pnpm typecheck && pnpm lint && pnpm test && pnpm build`.
|
||||
(Run after every UX-9…13 commit; final state UX-13.2: typecheck ✓ / lint ✓ / test 165 ✓ /
|
||||
build ✓ / e2e 18 ✓.)
|
||||
- [x] **CC.2** Dark mode parity — every migrated surface looks correct in `.dark`.
|
||||
(Achieved structurally: the extended `--bl-*` bridge maps every adopted token onto tracker's
|
||||
OKLCH vars — which already flip under `.dark` — or `color-mix` of them, plus semantic
|
||||
`--success/--warning/--info` defined per-theme. No adopted component carries a fixed color.)
|
||||
- [x] **CC.3** Zero new hardcoded color literals (grep `slate-|blue-600|#[0-9a-f]{6}` in changed files).
|
||||
(`git diff <UX-base>..HEAD -- src` → no new `slate-N` / `blue-600` / `#hex` / `bg-[#…]`; in fact
|
||||
UX-12.1 removed the roadmap toggle's `blue-600` literals.)
|
||||
- [x] **CC.4** a11y — if `@axe-core/playwright` runs offline, assert no new violations on `/roadmap`
|
||||
and `/login`; otherwise Vitest render assertions for roles/labels.
|
||||
- [ ] **CC.5** Update master `docs/ROADMAP.md` Phase 2.1 checkboxes **only if** the operator asks —
|
||||
(axe-core runs offline in the Playwright suite asserting no serious/critical violations on
|
||||
`/login` and `/roadmap`; both green. Added aria-labels where the shared `LoginForm` shipped
|
||||
placeholder-only inputs.)
|
||||
- [x] **CC.5** Update master `docs/ROADMAP.md` Phase 2.1 checkboxes **only if** the operator asks —
|
||||
default: leave it, this doc is the source of truth for the integration.
|
||||
(Default applied: master `docs/ROADMAP.md` left untouched — operator did not request it.)
|
||||
- [x] **CC.6** **UI-drift ratchet:** once UX-9 lands, add an ESLint `no-restricted-imports` rule
|
||||
forbidding direct `@bytelyst/ui` imports outside `src/components/ui/Primitives.tsx`, so all
|
||||
future UI goes through the adapter. Fix any existing violations in the same commit.
|
||||
(Done: rule + adapter exemption in `eslint.config.mjs`; no pre-existing violations; probe confirms it fires.)
|
||||
- [ ] **CC.7** **Bundle budget:** after chart/motion/rich-text waves, re-check the `bundlesize`
|
||||
- [x] **CC.7** **Bundle budget:** after chart/motion/rich-text waves, re-check the `bundlesize`
|
||||
budgets in `package.json`. If a route grows, prefer dynamic `import()` for heavy surfaces
|
||||
(charts, rich-text editor) over raising a budget. Note the gzipped sizes in the log.
|
||||
- [ ] **CC.8** **Coverage ratchet:** keep the enforced Vitest thresholds (80%) green; each wave
|
||||
(`bundlesize` itself is env-blocked — `iltorb` won't build on Node 25, see TEST_VALIDATION_LOG —
|
||||
so budgets were verified by gzipping the built chunks: all within budget, no budget raised.
|
||||
Largest: framework 58.3 kB / 100, main 37.3 kB / 50, layout 3.6 kB / 150; heaviest route
|
||||
`/dashboard/items` 6.9 kB / 30, `/roadmap` 3.8 kB / 30, `/login` 3.1 kB / 30. No dynamic
|
||||
import needed — charts/motion/rich-text waves were not adopted in this scope.)
|
||||
- [x] **CC.8** **Coverage ratchet:** keep the enforced Vitest thresholds (80%) green; each wave
|
||||
that adds a component should add the render/export test that keeps `Primitives.tsx` and new
|
||||
surfaces above threshold (no silently-dead gates — see `docs/TEST_VALIDATION_LOG.md`).
|
||||
(Enforced thresholds stay green: 94.36% stmts / 86.58% branch / 94.28% funcs / 96.99% lines,
|
||||
165 tests. Added export/import smoke tests for the Primitives adapter, auth-ui and
|
||||
notifications-ui. Note: v8 reports the pure re-export `Primitives.tsx` barrel as 0% — there
|
||||
are no executable bodies to instrument — but the global gate is green and the export test
|
||||
guards every re-export.)
|
||||
|
||||
## Progress
|
||||
|
||||
@ -286,3 +307,29 @@ all app code imports from), and `src/app/dashboard/items/page.tsx` (the working
|
||||
adoption — the reference pattern). Execute **one task at a time**, verify + commit after each, and
|
||||
do the **Core** waves (UX-2 … UX-8) before the **Expand** waves (UX-9 … UX-13). Treat 12.3 and all
|
||||
of UX-13 as data-gated stretch — leave them `- [ ]` with a note if the backend can't support them.
|
||||
|
||||
---
|
||||
|
||||
## Status — Expand waves complete (2026-05-28)
|
||||
|
||||
The **Expand** waves (UX-9 … UX-13) and **all cross-cutting items (CC.1 … CC.8)** are done,
|
||||
strictly scoped to `dashboards/tracker-web`. Each item was verified
|
||||
(`typecheck` + `lint` + `test` + `build` + Playwright e2e/axe) and shipped as its own
|
||||
conventional commit referencing its roadmap ID:
|
||||
|
||||
| Wave / item | Commit | Summary |
|
||||
| ----------- | ---------- | ---------------------------------------------------------- |
|
||||
| UX-9 | `18a09b25` | Broaden Primitives adapter + export-presence test |
|
||||
| CC.6 | `73d2891d` | `no-restricted-imports` UI-drift ratchet |
|
||||
| UX-10 | `3a9621f0` | `ErrorPage` + `PageHeader` + `LoadingSpinner` page chrome |
|
||||
| UX-1.2 ext | `ccee7dfa` | Full `--bl-*` token bridge (enables CC.2 dark-mode parity) |
|
||||
| UX-11 | `328e3072` | `LoginForm` + `MfaChallenge` on the login surface |
|
||||
| UX-12.1 | `ddf25cf5` | `SegmentedControl` view toggle + board `Tooltip`s |
|
||||
| UX-12.2 | `32dac7d4` | item-detail `ActionMenu` + `Timeline` comments |
|
||||
| UX-13.2 | `3d22c303` | `BannerStack` + `Announcement` system messaging |
|
||||
|
||||
**Deferred (data-gated, documented above):** UX-12.3 (`RichTextEditor` — backend stores plain
|
||||
text, no HTML sanitization) and UX-13.1 (`NotificationCenter` — no notifications feed). Both deps
|
||||
that are needed are wired/smoke-tested so a future enablement starts from green.
|
||||
|
||||
**Out of scope for this run:** the **Core** waves UX-2 … UX-8 remain `⬜`.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user