v2 delivered 10 workstreams (≈19.3K source lines added, ≈5.4K removed). Two are structural — marked MAJOR CHANGE below — and the rest are new features, enhancements, and fixes.
| Section | What changed | Scale | Delivered |
|---|---|---|---|
| 2.1 Data model | Planning hierarchy went from 3 to 4 levels; Width became the editable lever | 165 files · +5.4K/−2.1K | Jun 29–30 |
| 2.2 UI refresh | New skin from a single design-token system — color, chrome, cell shapes, hover; focused columns | 51 files · +3.5K/−1.9K | Jun 27–29 |
| 2.3 New features | User management · admin engagement dashboard · per-view search | 73 files · +5.5K | Jun 30 |
| 2.4 Enhancements | Distribution % normalization · reset to AI · six smaller improvements | 40+ files · +3.9K | Jun 29–30 |
| 2.5 Minor fixes | 8 fixes (2 high / 3 medium / 3 low) | 8 fixes | Jun 27–Jul 4 |
A new Platform tier was inserted between Brick and Fit, changing the planning hierarchy
from three levels to four. With it, Width was re-established as the value planners edit
directly and Depth is now calculated (Depth = Sell-In ÷ Width), with the
model extended across all four levels.
⇅ Width edits recalculate in both directions from whichever level is edited — down to descendants proportionally (by ratio) and up to parents as the sum of child widths. Sell-In cascades down only (parent Sell-In × child Distribution %); Depth is derived locally at every level.
GenCat → Brick → Platform → Fit drill-down.The schema change ships through the tenant schema template, not a versioned migration. New environments provision correctly with no extra steps — but existing tenant databases must run the two backfill scripts once (exports table; user columns) before using this release. The scripts are idempotent — safe to run more than once. This action also belongs on the go-live checklist in the Operating v2 section.
A hierarchy level is not a feature added at the side — it changes the shape of the planning row itself, and every layer of the system consumes that row. Nothing between the database and the exported workbook was untouched:
platform column in 4 tables · row identity widened to a 6-part key · indexes & level constraint extendedfit_rows → platform_rows)c41bef6), which is the type system doing its job during a structural change.In v1, a planning row in som_inputs was identified by store + level + three
hierarchy fields. In v2 it is six fields — the “6-part composite key” (a row is
now identified by six fields instead of five):
platform column was added to som_inputs, buy_plan_recommendations, and both historical-season tables; the level constraint and indexes were extended to include PLATFORM.category widened to VARCHAR(100) for free-form GenCats.exports table (job tracking: storage key, type, status, expiry) — powers the dashboard’s “downloaded” signal (2.3).users.last_login_at and users.is_active added — enable the engagement KPIs (2.3).| Method | Path | Status | Purpose |
|---|---|---|---|
| GET | /planning/platform (+ /:gencat, /:gencat/:brick) | new | Platform-view drill-down (summary → brick → platform rows) |
| PUT | /planning/platform | new | Save a platform-level plan (GenCat / Brick / Platform / Fit arrays) |
| GET | /planning/brickfit/:gencat/:brick/:platform | new | Fit-level rows under a platform |
| GET | /planning/brickfit/:gencat/:brick | changed — breaking | Now returns platform_rows (was fit_rows). Both first-party apps were updated in the same release; any external consumer of this endpoint must be updated before upgrading — flagged for the Known Limitations / Operating section. |
crypto.timingSafeEqual) is implemented in code and the skip is annotated for manual security verification.0a9726c) reconciled the implementation against the backlog; the seeding script was corrected during UAT (PR #12, Jul 2) so seeded environments provision the 4-level shape.The UI was re-skinned end to end on a new design-token system: every color, gradient, font,
radius, shadow, spacing, and motion value now resolves from a single token source
(design-tokens.json + resolver) through shared styled primitives. The refresh is not
just colors — layout chrome, cell shapes, elevation, and hover behavior all changed with it:
| Area | What changed |
|---|---|
| Color system | Navy #10233f + red #c41230 brand palette; burnt-orange #E8590C for errors (kept distinct from brand red); grey ramp re-derived from token surfaces; legacy blue/indigo removed entirely. |
| Zone bands | Grid header bands color-coded by data source — Structure (navy) / Actuals / Recommendation / Input (red) — with matching low-alpha cell tones per band. |
| Cell shape | “Floating cell” table: separated borders with 6px spacing and 6px per-cell radius; 64px rows, compacted to 48px; fixed 90px pill columns; editable cells get red-tinted borders and red text. |
| Layout chrome | Dark navy gradient header bar, light blue-tinted sidebar, radial page-background gradient, custom scrollbar, restyled breadcrumbs and environment indicator, spinner-free number inputs. |
| Typography | Inter only (Plus Jakarta Sans removed); weight ladder to 900 for display and labels; uppercase eyebrow labels with wide letter-tracking. |
| Shape & elevation | Radius ladder from 32px cards down to 6px cells; navy-tinted shadow ladder (sm → popover) plus a red focus ring on editable inputs. |
| Hover & motion | 150ms ease transitions, 1px hover-lift on buttons and options, hover washes and border-darkening on interactive elements; reduced-motion preference respected. |
| Components | 10 styled primitives (PrettyCard, SectionCard, MetricTile, PillButton, EyebrowChip, AccentBar, combobox shells, …) used across all views; 8 non-action MUI components overridden to navy. |
| Before (v1) | After (v2) |
|---|---|
| Flat grid, all reference columns always expanded | Source-coded zone bands: Structure / Actuals / Recommendation / Input; Historical & AI bands collapse in place to a narrow strip while User Inputs stay visible (state remembered per view) |
| All columns shown per zone | Reduced to the 4 most relevant columns per zone; remaining columns are kept but hidden |
| Level / Assortment scrolled with the grid | Pinned left, layered above the scrolling header bands |
| Editable cells styled like read-only cells | Editable cells are white with red text — the single visual cue for “you can type here” |
| Zone headers mixed-case, low contrast | Uppercase navy band headers; expand buttons are navy squares |
| Tab named “Brick Fit” | Renamed “Fit” across tabs, breadcrumbs, and titles; season relabeled H1-27 across UI and exports |
| Depth edited, Width derived | Width edited, Depth derived (see 2.1) — the red editable column moved accordingly |
6a7ae76) replaced 44 files (+2,545/−1,186 lines), rebuilding the grid around the token system rather than restyling it in place — roughly a third of the grid code it touched was deleted and replaced.a8fd190): columns reduced to the 4 most relevant per zone and the Historical / AI reference bands became collapsible in place — the visual system and the column model shipped as one redesign.Three net-new capabilities, all delivered Jun 30 and hardened through UAT to Jul 4.
8 fixes shipped in v2 — 2 high (login, change-password: folded into User Management above), 3 medium (Platform data rendering, store Segment mapping, multi-store export depth), and 3 low (pinned-column layering, grid visual defects, frontend test tooling). Full list with severity in Appendix C.
| Severity | Fix |
|---|---|
| HIGH | Standard users could not log in — login now resolves the active environment; previously only super-admins authenticated. |
| HIGH | Change-password was a non-functional stub — now fully implemented with current-password verification. |
| MED | Platform View showed empty / zero values — a type cast dropped the new level; fixed so Platform data renders. |
| MED | Store “Segment” mapped to the wrong field — corrected in both the API response and the planning header. |
| MED | Multi-store export skipped the Platform level — export now drills the full hierarchy. |
| LOW | Pinned columns hidden on horizontal scroll — sticky headers rendered over the pinned Level / Assortment columns; z-index layering corrected. |
| LOW | Grid visual defects — mislabeled Historical band color, cell-pill misalignment, and off-center grouped headers corrected. |
| LOW | Frontend test tooling repaired — 13 test files still called the old jest.* API under the Vitest runner; migrated to vi.*, missing msw dependency installed, two broken import paths corrected. |