The plan was delivered as wp-suite-implementation-spec.zip and lived only in Downloads, so every "read CLAUDE.md first" instruction in it pointed at a file the repo did not have. Bring it in unchanged: CLAUDE.md, IMPLEMENTATION.md, and docs/waves/wave-0 through wave-9 plus backlog.md. UX-REVIEW-2026-08-14.md is committed alongside it. It is the review that produced F1-F6, S1-S13 and the A/B/C assessments, and item IDs throughout the wave files cite it, so it belongs under version control rather than sitting untracked in the working tree. No application code changes here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
5.4 KiB
Wave 3 — Token consolidation and one button system
Items: C3, S5, A3/F5 (full), A5
Depends on: wave 2 merged
Why here: every remaining visual task lands once instead of four times. Skipping this
means "one button system" gets implemented in four token systems and drifts, which is exactly
how .field-hint broke.
This wave should produce no intentional visual change except the two known defects it fixes. Treat any other diff in the screenshot comparison as a bug in your refactor.
T3.1 — Inventory the token systems
- Items:
C3part 1,S5part 1 - Depends on: T2.3
- Blocks: T3.2
- Surface: documentation
- Files: creates
docs/reference/tokens.md
Problem: Four parallel token systems. #0f62fe alone is declared four times, as
--cds-interactive-01, --primary, and --accent twice.
Do: Produce a mapping table: every custom property and every raw hex, hsl or rgb value in the four stylesheets, where it is declared, what consumes it, and which canonical token it maps to. Include spacing and type scales, not just color. Mark genuine duplicates, near-duplicates (values one or two hex digits apart, which are usually accidents), and one-offs.
Do not: change any stylesheet in this task.
Done when:
docs/reference/tokens.mdlists every declaration with file and line- every value is mapped to a proposed canonical token or flagged as a one-off with a reason
- near-duplicates are called out explicitly, since those are where unintended visual change will come from
- the
#0f62fecount matches or corrects the wave 0 baseline count
T3.2 — Establish one source of truth
- Items:
C3part 2,S5part 2 - Depends on: T3.1
- Blocks: T3.3, T3.4, T4.6, T4.7
- Surface:
html/ - Files: all 4 stylesheets
Do: Create the canonical token set in one place. Convert the other stylesheets to alias it. Page stylesheets declare no new values. Keep existing custom property names as aliases where deleting them would touch large amounts of markup — an alias pointing at the canonical token is fine; a second declaration of the same literal is not.
Do not: change any rendered value in this task, including the two known defects. Fix
those in T3.3 and T3.4 so their diffs are reviewable separately from a 4-stylesheet
refactor.
Done when:
- exactly one declaration exists per canonical value; grep for
#0f62fereturns 1 - no page stylesheet declares a raw color, spacing or type value
- screenshot diff against the wave 2 state is empty on all 6 pages at both widths
docs/reference/tokens.mdis updated to reflect what was actually built
T3.3 — Fix .field-hint and the drift it documents
- Items:
S5part 3 - Depends on: T3.2
- Blocks: nothing
- Surface:
html/ - Files:
work-package-suite-styles.cssaround line 336
Problem: There is a comment at work-package-suite-styles.css:336 describing
.field-hint rendering unstyled. It is the documented consequence of the duplicate token
systems.
Do: Fix .field-hint properly now that the tokens are consolidated, and delete the
comment. Then check for the same class of failure elsewhere: any selector that silently
renders unstyled because it referenced a token the page never saw.
Done when:
.field-hintrenders correctly everywhere it appears- the stale comment is deleted
- any other silently-unstyled selectors found are listed in the PR and either fixed or logged
T3.4 — A3/F5 full fix: fields look editable
- Items:
A3,F5full - Depends on: T3.2
- Blocks: T5.1
- Surface:
html/ - Files: SOP wizard stylesheet
Do: Remove the wizard's local field token override entirely, so it consumes the canonical
field token. Remove the interim fix from T1.5 rather than leaving both.
Done when:
- the wizard declares no field-specific color of its own
- enabled inputs are visually identical to enabled inputs on every other page
- disabled inputs remain clearly distinguishable from enabled ones
- the
T1.5interim change is gone; grep confirms it
T3.5 — A5: one button system
- Items:
A5 - Depends on: T3.2
- Blocks: T5.1, T7.2
- Surface:
html/ - Files: button styles, and any page overriding them
Problem: Green Save & View and green SOP Complete against blue everywhere else. Two
button languages competing.
Do: One button system: primary, secondary, tertiary, destructive. Map every existing button to one of those roles. Green becomes a status color, not an action color.
Apply sentence case to buttons and field labels only.
Do not: touch the uppercase card-header idiom in console.css. It is deliberate, it
works, and the review specifically scoped the sentence-case rule to exclude it. Changing it
is out of scope.
Done when:
- every button in the app maps to one of four documented roles
- no green action buttons remain;
Save & ViewandSOP Completeuse the primary role - buttons and field labels are sentence case
- uppercase card headers in
console.cssare unchanged — confirm by diff - button roles are documented in
docs/reference/tokens.md
Wave 3 exit criteria
- one token source of truth; page sheets alias only
#0f62fedeclared once- no unintended visual change on any page versus wave 2
- fields look editable, buttons speak one language