@atomazing-org/design-system 2.0.1 → 3.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/AGENTS.md +92 -0
  2. package/README.MD +263 -335
  3. package/dist/index.d.ts +11 -15
  4. package/dist/index.js +22 -22
  5. package/dist/presets/index.d.ts +15 -2
  6. package/dist/presets/index.js +315 -313
  7. package/dist/themePresets-CwgG5XEL.d.ts +65 -0
  8. package/dist/themePresets-CwgG5XEL.js +1 -0
  9. package/migrations/README.UPDATE.md +34 -20
  10. package/migrations/docs/migrations/design-system/README.md +48 -17
  11. package/migrations/docs/migrations/design-system/routes/adopt-existing/AEROCRM-EXAMPLE.md +197 -0
  12. package/migrations/docs/migrations/design-system/routes/adopt-existing/RUNBOOK.md +185 -25
  13. package/migrations/docs/migrations/design-system/routes/adopt-existing/migration.spec.json +84 -20
  14. package/migrations/docs/migrations/design-system/routes/greenfield/RUNBOOK.md +57 -25
  15. package/migrations/docs/migrations/design-system/routes/greenfield/migration.spec.json +37 -14
  16. package/migrations/docs/migrations/design-system/routes/mui4-to-latest/RUNBOOK.md +136 -77
  17. package/migrations/docs/migrations/design-system/routes/mui4-to-latest/migration.spec.json +104 -29
  18. package/migrations/docs/migrations/design-system/shared/WORKING-RULES.md +194 -0
  19. package/migrations/docs/migrations/design-system/shared/acceptance.md +76 -20
  20. package/migrations/docs/migrations/design-system/shared/common-regressions.md +218 -0
  21. package/migrations/docs/migrations/design-system/shared/gates.md +39 -3
  22. package/migrations/docs/migrations/design-system/shared/manual-qa-matrix.md +70 -0
  23. package/migrations/docs/migrations/design-system/shared/phase-exit-criteria.md +129 -0
  24. package/migrations/docs/migrations/design-system/shared/phases.md +377 -0
  25. package/migrations/skills/design-system-consumer-agent/SKILL.md +84 -0
  26. package/migrations/skills/design-system-migration-agent/SKILL.md +75 -9
  27. package/package.json +14 -4
  28. package/dist/typography-B-BeIk0v.d.ts +0 -120
@@ -1,27 +1,83 @@
1
- # Общие критерии готовности (Acceptance Criteria)
1
+ # Shared Acceptance Criteria
2
2
 
3
- Миграция считается завершённой, когда:
3
+ A migration is complete only when all of the following are true.
4
4
 
5
- ## 1) Зависимости
6
- - В проекте присутствует `@atomazing-org/design-system`.
7
- - Для MUI присутствуют совместимые версии `@mui/material`, `@mui/icons-material`, `@emotion/react`, `@emotion/styled`.
5
+ ## 0. Execution Discipline
8
6
 
9
- ## 2) Источник истины для темы
10
- - Корень приложения обёрнут в `ThemeProviderWrapper`.
11
- - Нет второго конкурентного `ThemeProvider` (если он не нужен как thin-wrapper вокруг DS).
7
+ - The route was executed in phases, not as one giant unvalidated diff.
8
+ - The app remained runnable at the end of each committed phase.
9
+ - If the project is large and broad shell, overlay, or shared-component rewrites were in scope, a smoke safety net existed before those rewrites began.
12
10
 
13
- ## 3) Отсутствие legacy MUI v4
14
- - В `package.json` отсутствуют `@material-ui/*`.
15
- - В коде отсутствуют импорты из `@material-ui/*`.
11
+ ## 1. Dependencies
16
12
 
17
- ## 4) Токены
18
- - Нет прямых импортов/использований устаревших token-файлов (список определяется маршрутом).
19
- - Основные UI-поверхности (фон/текст/бордеры/основные кнопки) используют `theme.palette`.
20
- - Основные тексты используют `Typography` variants (или `theme.typography`).
13
+ - The repo installs `@atomazing-org/design-system`.
14
+ - Compatible peer runtimes are present for `@mui/material`, `@mui/icons-material` when needed, `@emotion/react`, and `@emotion/styled`.
21
15
 
22
- ## 5) Качество
23
- - `npm test` проходит.
24
- - `npm run build` проходит.
25
- - Quality gates проходят (через `migrations/scripts/*` или эквивалентные ручные проверки поиска по коду/импортам).
16
+ ## 2. Theme Source Of Truth
26
17
 
27
-
18
+ - The app root is wrapped with `ThemeProviderWrapper` or an approved thin wrapper around it.
19
+ - There is no second competing root `ThemeProvider`.
20
+ - Theme selection and dark-mode state do not live in a parallel app-specific source of truth unless it only mirrors design-system state.
21
+ - Preset selection is exposed through one explicit app-level theme module, not hidden across generic constants passthrough files.
22
+
23
+ ## 3. Legacy MUI Removal
24
+
25
+ - `package.json` does not contain `@material-ui/*`.
26
+ - App source does not import `@material-ui/*`.
27
+
28
+ ## 4. Token Adoption
29
+
30
+ - Forbidden legacy token imports and identifiers for the selected route are removed.
31
+ - Main UI surfaces use `theme.palette` instead of hardcoded project token files.
32
+ - Main typography uses MUI variants or `theme.typography`.
33
+ - Visible app text is rendered through `Typography` or approved text-owning MUI APIs, not as raw JSX text in layout wrappers.
34
+ - Every `Typography` used by the consumer declares an explicit `variant`.
35
+ - Interactive labels rendered through `Button`, `ToggleButton`, `MenuItem`, `Chip`, or `Alert` use `Typography component="span"` with an explicit variant when they render visible text.
36
+ - Zero-value wrapper components that merely rename stock MUI primitives or surfaces are removed or collapsed into thin MUI wrappers with real behavior.
37
+ - Zero-value surface wrappers that merely forward to MUI `Card`, `Paper`, or similar components are removed.
38
+ - Large inline `sx` objects are not left in migrated consumer components; substantial styling is extracted into local `styled(...)` components declared in the same file near the bottom.
39
+ - Consumer styling does not rely on decorative gradients, direct shadow styling, or palette alpha suffix hacks in normal app surfaces.
40
+ - If the app keeps a preview-only exception such as a theme swatch, that exception is documented and allowlisted explicitly in the repo-local design-contract gate.
41
+
42
+ ## 5. Runtime Startup Health
43
+
44
+ - The app starts with the repo's normal dev or start command.
45
+ - The first route opens successfully in a real browser.
46
+ - Browser console startup errors are fixed before closeout.
47
+ - Startup warnings caused by the migration are fixed before closeout, not merely recorded.
48
+ - Duplicate runtime singleton warnings for `react`, `react-dom`, `@emotion/react`, or `@emotion/styled` are resolved with bundler or runtime alignment.
49
+ - Module-scope code does not depend on browser APIs, storage, or i18n locale activation before app initialization.
50
+ - Core application shell layout is preserved after migration.
51
+ - On desktop layouts, structural regions such as sidebar or menu stay in their intended column and page content stays in its own content region.
52
+ - On mobile layouts, stacked navigation and scroll containers still behave as before.
53
+ - Route roots and primary page containers still fill the intended workspace or content pane; the migration does not leave partial-width page shells, collapsed dashboards, or unused work areas.
54
+ - Shared padded containers such as app-owned cards, page roots, and shell content panes do not overflow horizontally because of `width: 100%` under content-box sizing.
55
+ - The application background is still owned by the active preset; root shells and page wrappers do not hardcode a competing page-level background over it.
56
+ - Shared UI primitives do not regress into placeholder wrappers or empty visual shells; cards, dialogs, drawers, charts, filters, and nav controls still render usable spacing, hierarchy, and interaction states.
57
+ - Shared legends, compact filters, chips, segmented controls, and metric badges remain visually aligned with the active preset; the migration does not replace them with ad hoc chip chrome that fights the preset.
58
+ - Analytics dashboards and metric surfaces keep a clear typographic split between labels and values, and dashboard cards do not drift into accidental full-width spans or mismatched gap patterns on desktop layouts.
59
+ - Shared base primitives that map directly to MUI are implemented with MUI components or thin wrappers around them, not hand-rolled substitutes built from generic nodes.
60
+ - Shared overlays rendered as dialogs, drawers, or bottom sheets expose stable `aria-labelledby` and `aria-describedby` semantics.
61
+ - Shared overlay close actions are labeled, and decorative handles or chrome are hidden from assistive technology when they carry no state.
62
+ - Search overlays that own keyboard-filtered results expose `combobox` and `listbox` semantics instead of generic wrapper markup.
63
+ - Browser event listeners introduced or touched during migration are registered in effects with cleanup rather than render paths or module scope.
64
+ - If smoke or test mode disables auth redirect, the migration provides a deterministic role-bearing user so protected routes can be validated as real screens instead of fallback routes.
65
+ - Automated route checks validate at least one protected content page in addition to shell boot.
66
+ - Automated route checks validate at least one stable overlay interaction when the migration touches shared overlay infrastructure.
67
+ - Touched localized copy, fixtures, and mocks render readable text; the migration does not leave mojibake, replacement characters, or broken non-Latin strings in the shipped UI or smoke-visible test data.
68
+ - Repeated workflow pages that share the same structural shell use a shared layout contract instead of duplicating the page shell across roles.
69
+ - The migration does not leave new circular chunk warnings from local app barrel re-exports when direct local imports are the safer option.
70
+
71
+ ## 6. Quality Gates
72
+
73
+ - `npm test` passes when the repo has tests.
74
+ - `npm run build` passes.
75
+ - `npm run lint` passes when it is part of the repo's normal gate. If baseline lint is already red for unrelated files, record that baseline explicitly and keep the migration diff green.
76
+ - `npm run test:smoke` or the repo's equivalent smoke or e2e route gate passes when the repo provides that check for shell, protected routes, overlays, or other runtime-critical flows touched by the migration.
77
+ - `npm run lint:style-contract` passes when the repo provides a local style-contract or styleless-UI gate.
78
+ - `npm run lint:design-contract` passes when the repo provides a design-token or design-contract check.
79
+ - `npm run lint:design-contract` catches decorative gradient or shadow drift, palette alpha suffix hacks, and unapproved visual-token exceptions when the repo provides that gate.
80
+ - `npm run lint:typography-contract` passes when the repo provides a typography contract check.
81
+ - Consumer-owned build warnings caused by asset config drift or oversized local chunks are fixed rather than silenced.
82
+ - If a remaining build warning comes from an upstream third-party toolchain package, the migration report names that package and warning explicitly.
83
+ - Route-specific and shared migration gates pass through scripts or equivalent manual checks.
@@ -0,0 +1,218 @@
1
+ # Common Migration Regressions
2
+
3
+ Use this document as a fast lookup when a migrated consumer app "builds fine"
4
+ but still looks or behaves wrong at runtime.
5
+
6
+ For each regression class below:
7
+
8
+ - confirm the symptom on a real route
9
+ - fix the structural cause, not only the visible symptom
10
+ - add or tighten smoke or lint coverage when the regression is likely to return
11
+
12
+ ## Startup Crash On First Route
13
+
14
+ Symptom:
15
+
16
+ - app opens to a blank page, hard crash, or startup error in the browser console
17
+
18
+ Common causes:
19
+
20
+ - module-scope i18n work before locale activation
21
+ - module-scope `window`, `document`, `navigator`, or storage access
22
+ - broken root provider wiring
23
+
24
+ Fix:
25
+
26
+ - move browser-only or locale-dependent work into runtime-safe component or hook code
27
+ - verify the root uses the intended provider stack
28
+
29
+ Catch it with:
30
+
31
+ - real browser startup check
32
+ - smoke route that fails on console or page errors
33
+
34
+ ## Duplicate React Or Emotion Runtime
35
+
36
+ Symptom:
37
+
38
+ - startup warning about duplicated `react`, `react-dom`, `@emotion/react`, or `@emotion/styled`
39
+
40
+ Common causes:
41
+
42
+ - bundler dedupe or singleton-sharing not aligned after migration
43
+
44
+ Fix:
45
+
46
+ - align bundler runtime resolution with dedupe, aliasing, or singleton-sharing
47
+
48
+ Catch it with:
49
+
50
+ - browser startup check
51
+ - migration closeout report that records warnings by exact package
52
+
53
+ ## Workspace Does Not Fill The Content Region
54
+
55
+ Symptom:
56
+
57
+ - page content collapses into partial-width cards
58
+ - dashboard or form area leaves empty workspace
59
+
60
+ Common causes:
61
+
62
+ - route roots or page containers lost flex growth, `min-width`, or `min-height`
63
+
64
+ Fix:
65
+
66
+ - restore the shared shell and page-root layout contract
67
+
68
+ Catch it with:
69
+
70
+ - shell smoke check on a real content route
71
+
72
+ ## Right Edge Overflow On Desktop
73
+
74
+ Symptom:
75
+
76
+ - content protrudes past the visible right edge
77
+ - horizontal scrolling appears unexpectedly
78
+
79
+ Common causes:
80
+
81
+ - `width: 100%` plus internal padding under content-box sizing
82
+ - shell content panes or page roots forced wider than the workspace
83
+
84
+ Fix:
85
+
86
+ - use `box-sizing: border-box` on shared padded full-width containers
87
+ - remove forced width where it is not needed
88
+
89
+ Catch it with:
90
+
91
+ - overflow assertion on the shared content pane
92
+ - overflow assertion on at least one routed page root
93
+
94
+ ## Dashboard Metrics Lose Hierarchy
95
+
96
+ Symptom:
97
+
98
+ - metric labels, values, and helper text read like one text level
99
+ - numbers no longer stand out from titles
100
+
101
+ Common causes:
102
+
103
+ - label and value typography share the same effective size and weight
104
+ - broad card cleanup flattened the text hierarchy
105
+
106
+ Fix:
107
+
108
+ - restore distinct label, value, and helper text scales
109
+ - keep metric emphasis explicit instead of relying on defaults
110
+
111
+ Catch it with:
112
+
113
+ - smoke assertion on computed metric label vs value emphasis
114
+ - visual QA on analytics or dashboard routes
115
+
116
+ ## Dashboard Card Falls Into Full-Width Row
117
+
118
+ Symptom:
119
+
120
+ - one analytics or dashboard card drops onto its own row on desktop
121
+ - gaps between dashboard cards become inconsistent
122
+
123
+ Common causes:
124
+
125
+ - stale `gridColumn: 1 / -1`
126
+ - mixed grid gap contracts between dashboard panels
127
+
128
+ Fix:
129
+
130
+ - remove accidental full-width spans
131
+ - keep one explicit grid template and gap rhythm per dashboard surface
132
+
133
+ Catch it with:
134
+
135
+ - smoke assertion on desktop card alignment
136
+
137
+ ## Overlay Semantics Drift
138
+
139
+ Symptom:
140
+
141
+ - dialog or drawer still opens, but labels, descriptions, or close controls are wrong or missing
142
+
143
+ Common causes:
144
+
145
+ - wrapper refactor dropped stable ids
146
+ - decorative overlay chrome was left visible to assistive tech
147
+ - searchable overlay uses generic markup instead of `combobox` or `listbox`
148
+
149
+ Fix:
150
+
151
+ - restore stable `aria-labelledby` and `aria-describedby`
152
+ - label close actions
153
+ - restore proper overlay search semantics
154
+
155
+ Catch it with:
156
+
157
+ - smoke coverage through stable overlay entrypoints
158
+
159
+ ## Compact Controls Drift Away From The Preset
160
+
161
+ Symptom:
162
+
163
+ - legends, chips, segmented filters, or compact badges look like app-local chrome instead of preset-aligned UI
164
+
165
+ Common causes:
166
+
167
+ - consumer restyling replaced neutral shared composition with ad hoc chip-like surfaces
168
+
169
+ Fix:
170
+
171
+ - rebuild compact controls from neutral MUI composition such as `Stack`, markers, and `Typography`
172
+
173
+ Catch it with:
174
+
175
+ - visual QA on charts, segmented controls, and compact summary areas
176
+
177
+ ## Mojibake Or Broken Non-Latin Text
178
+
179
+ Symptom:
180
+
181
+ - Cyrillic or other non-Latin copy renders as broken symbols or replacement characters
182
+
183
+ Common causes:
184
+
185
+ - encoding-sensitive rewrites
186
+ - bulk replacements across localized files
187
+
188
+ Fix:
189
+
190
+ - keep touched files in UTF-8
191
+ - restore corrupted copy from a valid source
192
+
193
+ Catch it with:
194
+
195
+ - mojibake scan
196
+ - real-route verification of localized text
197
+
198
+ ## Consumer Build Warning Left Unowned
199
+
200
+ Symptom:
201
+
202
+ - build stays noisy and nobody knows whether the app or an upstream package owns the warning
203
+
204
+ Common causes:
205
+
206
+ - stale asset globs
207
+ - oversized local chunks
208
+ - local barrel import cycles
209
+ - upstream toolchain warning misclassified as app debt
210
+
211
+ Fix:
212
+
213
+ - fix consumer-owned warnings in the app
214
+ - record upstream-only warnings by exact package and file
215
+
216
+ Catch it with:
217
+
218
+ - final build review during closeout
@@ -13,18 +13,54 @@ npm test
13
13
  npm run build
14
14
  ```
15
15
 
16
+ If the target repo exposes repo-local contract gates such as
17
+ `npm run lint:style-contract`, `npm run lint:design-contract`, or
18
+ `npm run lint:typography-contract`, run them as part of the migration.
19
+
20
+ If the target repo exposes smoke or e2e coverage for shell, protected routes,
21
+ or overlays such as `npm run test:smoke`, run that as part of the migration too.
22
+
23
+ Also run the repo's normal dev or start command and open the app in a real browser.
24
+
25
+ ## Phase gates for large projects
26
+
27
+ For large migrations, do not wait until the end of the route to validate.
28
+
29
+ - Re-run the relevant checks after each meaningful phase.
30
+ - Keep the app runnable at the end of every phase before moving to the next one.
31
+ - At minimum, re-run the repo's typecheck or lint-equivalent after broad mechanical edits and re-run build after dependency or bundler changes.
32
+ - Before broad shell, overlay, or shared-component rewrites, make sure smoke coverage exists for:
33
+ - the application shell
34
+ - at least one protected content route when route guards exist
35
+ - at least one stable overlay interaction when overlays are in scope
36
+ - at least one content-dense route such as a dashboard, analytics page, or workflow screen when shared charts, filters, or page-level layout containers are in scope
37
+ - Do not continue to the next phase when the current phase introduced startup console errors or route-blocking runtime warnings.
38
+
16
39
  ## Required checks
17
40
 
18
41
  - `ThemeProviderWrapper` is wired at the app root (or an approved thin wrapper around it).
19
42
  - No route-blocking dependency conflicts remain after dependency updates.
20
- - The app reaches the v2 target state (MUI v7 + design-system v2 contract).
43
+ - The app reaches the v2 target state (MUI v7 plus design-system v2 contract).
44
+ - The app boots on the first route after migration.
45
+ - Browser console startup errors are fixed before closeout.
46
+ - Startup warnings introduced or exposed by the migration are fixed before closeout when they indicate broken runtime alignment.
47
+ - If the repo provides smoke or e2e checks for shell, protected routes, overlays, or other runtime-critical flows touched by the migration, those checks pass before closeout.
48
+ - If the repo provides a local style-contract or styleless-UI gate, keep that gate green during the migration.
49
+ - If the app reports duplicated runtime singleton warnings (`react`, `react-dom`, `@emotion/react`, `@emotion/styled`), fix bundler or runtime alignment with dedupe, aliasing, or the repo's equivalent singleton-sharing mechanism.
50
+ - The migration does not introduce local barrel-based chunk cycle warnings when direct app-local imports resolve them.
51
+ - Consumer-owned build warnings from stale asset globs or oversized local chunks are fixed before closeout.
52
+ - If shell workspaces or page-root containers were touched, verify the main content still fills the content region and that page grids did not collapse into partial-width stacks.
53
+ - If shell workspaces, shared cards, or page-root containers were touched, verify shared padded containers do not overflow horizontally because of `width: 100%` plus content-box sizing.
54
+ - If shared charts, legends, chips, segmented filters, or compact badges were touched, verify compact controls remain preset-aligned instead of drifting into ad hoc chip-like chrome.
55
+ - If analytics dashboards, metric cards, or dashboard grids were touched, verify labels and values still read as different hierarchy levels and desktop cards do not accidentally fall into full-width or broken-row spans.
56
+ - If bulk replacements or localized non-Latin copy were touched, scan for mojibake or replacement characters and verify readable text on at least one real route.
21
57
 
22
58
  ## Route-specific checks
23
59
 
24
60
  - `mui4-to-latest`:
25
61
  - no `@material-ui/*` dependencies remain
26
62
  - no `@material-ui/*` imports remain in app source
27
- - `adopt-existing` / `mui5-6-to-v7` coverage:
63
+ - `adopt-existing` or `mui5-6-to-v7` coverage:
28
64
  - no forbidden hardcoded token imports remain (per route config)
29
65
  - `greenfield`:
30
66
  - provider wiring compiles and basic theme switching works (if UI switcher is added)
@@ -32,4 +68,4 @@ npm run build
32
68
  ## Notes
33
69
 
34
70
  - Token hardcode detection is noisy by nature; keep route configs (`token-gate.config.json`) app-specific.
35
- - Real app dry-runs can be deferred in this repo backlog flow (`docs/spec-first`) and executed later in app repos / optional closeout.
71
+ - Real app dry-runs can be deferred in this repo backlog flow (`docs/spec-first`) and executed later in app repos or optional closeout.
@@ -0,0 +1,70 @@
1
+ # Manual QA Matrix
2
+
3
+ Use this matrix after automated gates pass.
4
+
5
+ Skip rows that are clearly out of scope for the target app, but do not skip a row
6
+ just because build and lint are green.
7
+
8
+ ## Startup And Runtime
9
+
10
+ - Open the first route and confirm there are no startup console errors.
11
+ - Confirm any migration-caused warnings were removed, not just recorded.
12
+ - If the app uses non-Latin text, verify at least one real localized route renders readable copy.
13
+
14
+ ## Shell And Layout
15
+
16
+ - Desktop:
17
+ - sidebar or navigation stays in its intended column
18
+ - content stays inside the visible workspace
19
+ - routed page roots fill the content pane
20
+ - Mobile:
21
+ - stacked shell still behaves correctly
22
+ - scroll containers and navigation still feel normal
23
+
24
+ ## Theme And Preset Ownership
25
+
26
+ - Verify the active preset still owns the page background.
27
+ - Verify root shells and page wrappers do not paint a competing page-level background.
28
+ - If the app exposes multiple presets or theme switching, verify the selection still works from the intended app theme module.
29
+
30
+ ## Protected Routes
31
+
32
+ - Verify at least one protected route as real product content, not a fallback page.
33
+ - If smoke mode or QA mode bypasses auth redirect, verify the seeded user still has the required roles.
34
+
35
+ ## Overlays
36
+
37
+ - Dialogs, drawers, and bottom sheets:
38
+ - open correctly
39
+ - expose the expected title and description
40
+ - have labeled close actions
41
+ - Search overlays:
42
+ - keyboard filtering still works
43
+ - combobox or listbox semantics still match the behavior
44
+
45
+ ## Dashboards And Dense Screens
46
+
47
+ - Metric cards:
48
+ - labels are visually quieter than values
49
+ - values remain the primary reading target
50
+ - helper text does not compete with the metric
51
+ - Dashboard grids:
52
+ - cards align on desktop as intended
53
+ - no accidental full-width spans appear
54
+ - gap rhythm is consistent
55
+ - Compact legends, badges, and segmented filters:
56
+ - still look preset-aligned
57
+ - do not drift into app-local chip chrome
58
+
59
+ ## Forms And Workflow Screens
60
+
61
+ - Shared workflow layouts still align correctly across the related pages.
62
+ - Inputs, labels, helper text, and errors still render through the intended MUI or Typography contract.
63
+ - Clear buttons, adornments, drawers, and form overlays still behave correctly after primitive cleanup.
64
+
65
+ ## Build And Asset Hygiene
66
+
67
+ - If the app uses PWA or Workbox, verify referenced static assets actually exist in the emitted app.
68
+ - If build output still warns, confirm whether the warning is:
69
+ - consumer-owned and must be fixed
70
+ - or upstream-only and should be recorded precisely
@@ -0,0 +1,129 @@
1
+ # Phase Exit Criteria
2
+
3
+ Use this document with `shared/phases.md`.
4
+
5
+ Do not move to the next migration phase until the current phase satisfies its
6
+ exit criteria.
7
+
8
+ ## Phase 1: Route Selection And Scope
9
+
10
+ Exit when:
11
+
12
+ - the route is explicit
13
+ - the app root, theme source, shell, overlays, and protected routes are identified
14
+ - required validation commands are listed
15
+
16
+ Do not proceed if:
17
+
18
+ - route choice is still ambiguous
19
+ - the migration boundary is undefined
20
+
21
+ ## Phase 2: Baseline And Safety Net
22
+
23
+ Exit when:
24
+
25
+ - baseline lint, test, and build state is recorded
26
+ - pre-existing failures are separated from migration failures
27
+ - shell or route smoke coverage exists when broad shared rewrites are planned
28
+
29
+ Do not proceed if:
30
+
31
+ - you cannot distinguish old failures from new ones
32
+ - broad shell or overlay changes would be untested
33
+
34
+ ## Phase 3: Dependency Landing
35
+
36
+ Exit when:
37
+
38
+ - dependency changes install successfully
39
+ - route-incompatible packages are removed or isolated
40
+ - dependency conflicts are not blocking compile or startup work
41
+
42
+ Do not proceed if:
43
+
44
+ - install is still broken
45
+ - dependency state is half-migrated and unstable
46
+
47
+ ## Phase 4: Mechanical Migration Or Provider Landing
48
+
49
+ Exit when:
50
+
51
+ - the route-specific mechanical landing is complete
52
+ - the app compiles after the structural change
53
+ - the theme-root direction is clear and not duplicated
54
+
55
+ Do not proceed if:
56
+
57
+ - competing root providers still exist
58
+ - codemod or provider landing left the app uncompilable
59
+
60
+ ## Phase 5: Runtime Startup Cleanup
61
+
62
+ Exit when:
63
+
64
+ - the first route opens in a real browser
65
+ - startup console errors are fixed
66
+ - migration-caused startup warnings are fixed
67
+ - protected routes can render real content when they are in scope
68
+
69
+ Do not proceed if:
70
+
71
+ - the app is only build-green but not browser-runnable
72
+ - duplicate runtime warnings still remain unresolved
73
+
74
+ ## Phase 6: Shared Infrastructure Stabilization
75
+
76
+ Exit when:
77
+
78
+ - desktop and mobile shell layout behaves as intended
79
+ - page roots still fill the workspace
80
+ - shared padded containers do not overflow horizontally
81
+ - overlays keep stable semantics
82
+ - shared dashboards or compact controls do not show preset drift
83
+
84
+ Do not proceed if:
85
+
86
+ - the shell still has layout regressions
87
+ - shared dashboards, overlays, or route roots are visually or semantically broken
88
+
89
+ ## Phase 7: Token, Typography, And Primitive Cleanup
90
+
91
+ Exit when:
92
+
93
+ - visible text uses `Typography` with explicit variants
94
+ - zero-value primitive and surface wrappers are removed or collapsed
95
+ - token drift is reduced through `theme.*` usage and helpers
96
+ - localized copy remains readable if touched
97
+
98
+ Do not proceed if:
99
+
100
+ - raw text nodes, variantless typography, or visual-token drift are still spreading
101
+ - decorative consumer chrome is still replacing preset-owned surface behavior
102
+
103
+ ## Phase 8: Domain Migration Waves
104
+
105
+ Exit when:
106
+
107
+ - the current feature wave is validated independently
108
+ - route-specific smoke or lint checks are green again
109
+ - the app remains runnable before the next feature wave starts
110
+
111
+ Do not proceed if:
112
+
113
+ - the current wave reintroduced shared regressions
114
+ - multiple unfinished feature waves are open at once
115
+
116
+ ## Phase 9: Final Gates And Closeout
117
+
118
+ Exit when:
119
+
120
+ - shared gates and route-specific exit conditions are satisfied
121
+ - lint, build, tests, and smoke gates are green when available
122
+ - remaining warnings are either fixed or recorded as upstream-only by exact package
123
+ - manual QA follow-up is documented
124
+
125
+ Do not close the migration if:
126
+
127
+ - runtime startup still depends on manual excuses
128
+ - unresolved warnings are consumer-owned
129
+ - the app is not verified on a real route in a browser