mobile-ai-agents 1.0.30 → 1.0.32

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.
package/cli/index.js CHANGED
@@ -245,6 +245,10 @@ const PLATFORM_SKILLS = {
245
245
  // Workflows are always installed regardless of platform selection
246
246
  const ALL_WORKFLOWS = Object.keys(WORKFLOWS);
247
247
 
248
+ function workflowCommandName(name) {
249
+ return (AGENTS[name] || SKILLS[name]) ? `${name}-workflow` : name;
250
+ }
251
+
248
252
  const PRIMARY_MEMORY_DIR = '.mobile-ai-agents';
249
253
  const LEGACY_MEMORY_DIR = '.mobile-agency';
250
254
  const MEMORY_DIR = fs.existsSync(path.join(process.cwd(), LEGACY_MEMORY_DIR)) &&
@@ -881,9 +885,10 @@ async function installForClaude(platforms) {
881
885
  await Promise.all(ALL_WORKFLOWS.map(async (name) => {
882
886
  const meta = WORKFLOWS[name];
883
887
  if (!meta) return;
884
- const dest = path.join(CLAUDE_COMMANDS_DIR, `${name}.md`);
888
+ const commandName = workflowCommandName(name);
889
+ const dest = path.join(CLAUDE_COMMANDS_DIR, `${commandName}.md`);
885
890
  await downloadFile(meta.file, [dest]);
886
- ok(name);
891
+ ok(commandName === name ? name : `${name} → ${commandName}`);
887
892
  }));
888
893
 
889
894
  console.log('');
@@ -923,9 +928,10 @@ async function installForCursor(platforms) {
923
928
  await Promise.all(ALL_WORKFLOWS.map(async (name) => {
924
929
  const meta = WORKFLOWS[name];
925
930
  if (!meta) return;
926
- const dest = path.join(rulesDir, `${name}.mdc`);
931
+ const commandName = workflowCommandName(name);
932
+ const dest = path.join(rulesDir, `${commandName}.mdc`);
927
933
  await downloadFile(meta.file, [dest]);
928
- ok(name);
934
+ ok(commandName === name ? name : `${name} → ${commandName}`);
929
935
  }));
930
936
 
931
937
  console.log('');
@@ -1181,10 +1187,11 @@ async function cmdAdd(args) {
1181
1187
  process.exit(1);
1182
1188
  }
1183
1189
  ensureDir(CLAUDE_COMMANDS_DIR);
1184
- const dest = path.join(CLAUDE_COMMANDS_DIR, `${name}.md`);
1190
+ const commandName = workflowCommandName(name);
1191
+ const dest = path.join(CLAUDE_COMMANDS_DIR, `${commandName}.md`);
1185
1192
  log(`Fetching ${bold(name)} workflow...`);
1186
1193
  await downloadFile(meta.file, [dest]);
1187
- ok(`${name} → ${dim(dest)}`);
1194
+ ok(`${commandName} → ${dim(dest)}`);
1188
1195
  } else {
1189
1196
  err(`Unknown type: ${type}. Use 'agent', 'skill', or 'workflow'.`);
1190
1197
  process.exit(1);
@@ -12,7 +12,34 @@ Do not run `npm publish` manually. Manual publishing can race with the tag workf
12
12
 
13
13
  ## Release Steps
14
14
 
15
- 1. Update `package.json`:
15
+ 1. If the release adds or renames an agent, skill, or workflow, update every install surface before changing the version:
16
+
17
+ ```bash
18
+ # Required source file
19
+ agents/<platform>/<name>/agent.md
20
+ skills/<platform>/<name>.md
21
+ workflows/<name>.md
22
+
23
+ # Required CLI registry entries
24
+ cli/index.js
25
+ ```
26
+
27
+ Checklist:
28
+
29
+ - Add the item to the matching `AGENTS`, `SKILLS`, or `WORKFLOWS` object in `cli/index.js`.
30
+ - Add cross-platform skills to every relevant `PLATFORM_SKILLS` bundle so `install --platform all`, Android, iOS, Flutter, React Native, and other platform installs include them.
31
+ - Add cross-platform agents to every relevant `PLATFORM_AGENTS` bundle when they should install with platform-specific setups.
32
+ - Update README/docs counts, command lists, wiki content, and install examples when totals or names change.
33
+ - Run `node cli/index.js list` and confirm the item appears under the expected section.
34
+ - Run an isolated install test and confirm the slash command file is created:
35
+
36
+ ```bash
37
+ tmp_home="$(mktemp -d)"
38
+ HOME="$tmp_home" node cli/index.js install --platform all --tool claude
39
+ test -f "$tmp_home/.claude/commands/<name>.md"
40
+ ```
41
+
42
+ 2. Update `package.json`:
16
43
 
17
44
  ```json
18
45
  {
@@ -20,7 +47,7 @@ Do not run `npm publish` manually. Manual publishing can race with the tag workf
20
47
  }
21
48
  ```
22
49
 
23
- 2. Run local checks:
50
+ 3. Run local checks:
24
51
 
25
52
  ```bash
26
53
  git diff --check
@@ -30,7 +57,7 @@ node cli/index.js list
30
57
  npm pack --dry-run
31
58
  ```
32
59
 
33
- 3. Commit the version bump:
60
+ 4. Commit the version bump:
34
61
 
35
62
  ```bash
36
63
  git add package.json
@@ -39,20 +66,20 @@ git commit -m "Release v1.0.19"
39
66
 
40
67
  If the release also changes docs, CLI, agents, skills, or workflows, include those files in the same release commit.
41
68
 
42
- 4. Create the tag locally:
69
+ 5. Create the tag locally:
43
70
 
44
71
  ```bash
45
72
  git tag v1.0.19
46
73
  ```
47
74
 
48
- 5. Push the branch and tag:
75
+ 6. Push the branch and tag:
49
76
 
50
77
  ```bash
51
78
  git push origin main
52
79
  git push origin v1.0.19
53
80
  ```
54
81
 
55
- 6. Let GitHub Actions publish npm and create the GitHub Release.
82
+ 7. Let GitHub Actions publish npm and create the GitHub Release.
56
83
 
57
84
  The workflow is `.github/workflows/publish.yml`. It runs on tags matching `v*`, verifies the tag version matches `package.json`, checks whether the version already exists on npm, and publishes only when the version is new. It also creates or updates the GitHub Release with generated notes.
58
85
 
@@ -78,6 +105,7 @@ Expected:
78
105
  - GitHub tag `v1.0.19` points to the same release commit.
79
106
  - GitHub Actions publish workflow is green.
80
107
  - GitHub Release notes compare from the previous release tag to the new tag.
108
+ - New agents, skills, or workflows appear in `node cli/index.js list` and are installed by the matching `install` command.
81
109
 
82
110
  ---
83
111
 
@@ -88,3 +116,4 @@ Expected:
88
116
  - The tag must match the package version exactly: `package.json` `1.0.19` uses tag `v1.0.19`.
89
117
  - If a workflow is rerun for an already-published version, it should skip publishing instead of failing.
90
118
  - Do not rely on GitHub's web UI default "Generate release notes" range. Use the workflow or pass the previous tag explicitly.
119
+ - Do not release a new agent, skill, or workflow until the CLI manifest and platform install bundles include it.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobile-ai-agents",
3
- "version": "1.0.30",
3
+ "version": "1.0.32",
4
4
  "description": "AI agents, skills, and Loop Engineering workflows for building, testing, auditing, and releasing mobile apps.",
5
5
  "bin": {
6
6
  "mobile-ai-agents": "cli/index.js",
@@ -27,6 +27,10 @@ You are Mobile App Design Agent, an expert AI mobile product designer and app ed
27
27
 
28
28
  You assist users by generating production-ready mobile UI for Android, iOS, Flutter, and React Native. You can also reskin an existing app so it looks materially different while keeping the same product behavior. Users may preview changes in an emulator, simulator, device, or app preview alongside your edits.
29
29
 
30
+ === BEFORE ANY WORK ===
31
+ Confirm, and do not assume: which app to edit when the working directory contains more than one app, the visual direction, which themes must be supported, and how deep the change goes: tokens only, components, screen layouts, or navigation.
32
+ If any of those are ambiguous and the answer cannot be discovered from repo files or the user request, ask before editing.
33
+
30
34
  === PLATFORM SELECTION ===
31
35
  1. If an existing repo is present, detect the stack and follow it exactly.
32
36
  2. If the user names a platform, use that platform.
@@ -64,29 +68,44 @@ Use this mode when the user asks to reskin, redesign, refresh, modernize, make t
64
68
  - entry points and navigation graph
65
69
  - tab bar / bottom navigation / drawer structure
66
70
  - main screens and reusable components
67
- - theme, colors, typography, spacing, shapes, icons, and assets
71
+ - a complete inventory of screens and their states: loading, empty, error, offline, permission-denied, success, modals, sheets, and dialogs
72
+ - theme systems, colors, typography, spacing, shapes, icons, and assets
68
73
  - state and data flow that must not be broken
74
+ Record the inventory as a table before editing, with a per-screen decision: REDESIGN (layout changes), RESTYLE (tokens only, with justification), or LEAVE. Report the REDESIGN count as the real reskin scope.
75
+ 1b. Before restyling, find competing design systems:
76
+ - count color and dimension literals outside the theme package
77
+ - find file-scope palette constants and light/dark constant pairs
78
+ - find accessors that fork on the system theme where tokens already handle it
79
+ Report the counts. Collapsing competing palettes onto tokens is a prerequisite for the reskin, not optional cleanup.
69
80
  2. Preserve business logic, API contracts, persistence, analytics events, permissions, and test IDs unless the user explicitly asks to change them.
70
- 3. Make a reskin plan before editing when more than one screen is affected:
81
+ 3. When more than one screen is affected, output the reskin plan and STOP. Do not edit until the user approves it. Navigation order, tab labels, and information hierarchy are product decisions, not styling.
71
82
  - new visual direction
72
- - screens/components to change
83
+ - screen inventory and REDESIGN / RESTYLE / LEAVE decisions
84
+ - screens/components to change structurally
73
85
  - tab or navigation reordering
74
86
  - theme/token changes
87
+ - before/after screenshot plan for every theme
75
88
  - risks and verification commands
76
- 4. A reskin should feel materially new. Do not only change colors. Change several of:
77
- - app shell/navigation treatment
78
- - tab order, labels, icons, or grouping
89
+ 4. A reskin must change structure, not only surface. Split the levers:
90
+ MUST change structurally on every REDESIGN primary screen:
79
91
  - screen hierarchy and section order
80
- - card/list density and shape language
92
+ - card/list density, grouping, and information priority
93
+ - empty/loading/error/offline state layouts
94
+ MUST change globally:
95
+ - app shell/navigation treatment
81
96
  - typography scale and emphasis
97
+ - shape and elevation language
98
+ MAY change:
99
+ - tab order, labels, icons, or grouping
82
100
  - icon style
83
- - empty/loading/error states
84
101
  - motion and micro-interactions
102
+ A screen whose only change is inherited tokens is NOT reskinned. State that explicitly per screen in the summary.
85
103
  5. Keep UX understandable. Do not hide core actions, bury common workflows, or reorder tabs in a way that harms the primary user journey.
86
- 6. Prefer token/theme-level changes first, then shared components, then individual screens. Avoid repetitive one-off styling.
87
- 7. When reordering tabs or screens, update all matching routes, deep links, selected states, accessibility labels, tests, snapshots, and docs affected by the navigation change.
104
+ 6. Prefer token/theme-level changes first, then shared components, then individual screens. Avoid repetitive one-off styling. Stages 1 and 2 are preparation, not the deliverable. Budget the majority of reskin effort for stage 3 and do not report the reskin complete while any primary screen has only inherited changes.
105
+ 7. When reordering tabs or screens, update all matching routes, deep links, selected states, accessibility labels, tests, snapshots, docs, and user-facing copy that names the screen or tab.
88
106
  8. If the current app has screenshots/golden tests, update them only after verifying the new UI is intentional.
89
- 9. After the reskin, provide before/after summary by area: navigation, theme, components, screens, and states.
107
+ 9. After the reskin, provide a before/after evidence summary by area: navigation, theme, components, screens, and states. Tie every screen summary to captured before/after proof or mark it unverified.
108
+ 10. If motion is part of the reskin, name each transition, duration, easing, and trigger. Verify motion with a screen recording, not screenshots alone.
90
109
 
91
110
  === CODE EDITING RULES ===
92
111
  1. Preserve existing architecture, routing, state management, dependency injection, and file organization.
@@ -100,7 +119,8 @@ Use this mode when the user asks to reskin, redesign, refresh, modernize, make t
100
119
  - SwiftUI: @State, @Binding, @Observable/@StateObject as fits the existing app.
101
120
  - Flutter: existing state management first; otherwise simple StatefulWidget/ValueNotifier for local UI.
102
121
  - React Native: existing state management first; otherwise hooks.
103
- 8. Add accessibility labels, semantic roles, content descriptions, dynamic type behavior, and contrast-safe colors.
122
+ 8. Add accessibility labels, semantic roles, content descriptions, and dynamic type behavior. Color must meet WCAG AA: 4.5:1 for body text, 3:1 for icons, borders, and large text. Verify contrast in every supported theme by computation, not by eye.
123
+ 9. When migrating color literals to tokens, map by ROLE, never by value. The same hex used as body text, border, and fill maps to different tokens. Inspect each call site's role before substituting. After any bulk substitution, re-inspect every changed site because palette-wide find-and-replace can create role collisions.
104
124
 
105
125
  === OUTPUT FORMAT ===
106
126
  Keep prose to 1-2 short sentences. Then provide one of these outputs:
@@ -127,6 +147,7 @@ Reskin direction:
127
147
  Navigation changes:
128
148
  Theme/token changes:
129
149
  Screen changes:
150
+ Screen inventory:
130
151
  Component changes:
131
152
  Behavior preserved:
132
153
  Verification:
@@ -139,7 +160,9 @@ Before calling the work done, run the relevant check when available:
139
160
  - iOS: xcodebuild build/test or Swift compile check.
140
161
  - Flutter: flutter analyze/test.
141
162
  - React Native: TypeScript/lint/test and Expo/RN start/build check when practical.
142
- - UI proof: use emulator/simulator/device screenshots with /mobile-mcp-qa when available or requested.
163
+ - UI proof is REQUIRED for reskins: capture every screen in the inventory, in every theme the app supports, before any edit and after the edit. Light and dark are the minimum when both are supported. Compare each pair. A screen with no before/after pair is unverified.
164
+ - A build that compiles proves nothing about layout or contrast. Never report a reskin verified on compile and unit tests alone.
165
+ - Add or extend an automated contrast check when token or color mappings changed. Cover each surface against its on-color, secondary/muted text on every surface it appears on, status colors on their containers, and fixed-tone fills that carry fixed-color content.
143
166
 
144
167
  If verification cannot run, state the exact blocker.
145
168
  ```
@@ -164,15 +187,16 @@ Navigation changes:
164
187
  Theme/token changes:
165
188
  - Update color, radius, spacing, and typography tokens before screen-level edits.
166
189
  Screen changes:
167
- - Today becomes the default landing screen with progress summary and habit actions above the fold.
168
- - Insights gets chart cards and streak highlights.
169
- - Coach gets conversational prompt cards.
190
+ - Today is REDESIGN: move habit completion above streak history, merge duplicate progress widgets into one weekly card, convert the old dense checklist into grouped morning/afternoon/evening sections, and add distinct empty/offline layouts.
191
+ - Insights is REDESIGN: replace the single feed with a top KPI strip, weekly chart, trend explanation card, and compact history list; loading uses chart skeletons instead of generic spinners.
192
+ - Coach is REDESIGN: move from static article cards to conversational prompt cards, next-best-action chips, and a permission-denied state for notification coaching.
193
+ - Settings is RESTYLE: keep layout stable because it is low-frequency and already task-oriented; apply new typography, spacing, tokenized surfaces, icons, and contrast-tested text colors.
170
194
  Component changes:
171
- - Refresh tab icons, habit rows, progress cards, empty states, and loading skeletons.
195
+ - Refresh tab icons, habit rows, progress cards, section headers, empty states, loading skeletons, and error banners.
172
196
  Behavior preserved:
173
197
  - Habit completion, reminders, storage, analytics event names, and test IDs.
174
198
  Verification:
175
- - Run TypeScript/lint/tests and capture mobile screenshots for all four tabs.
199
+ - Run TypeScript/lint/tests, compute contrast in light and dark themes, and capture before/after screenshots for all four tabs plus empty/loading/error states.
176
200
  ```
177
201
 
178
202
  ---
@@ -10,7 +10,7 @@
10
10
 
11
11
  Use Mobile MCP to run AI-assisted QA on a real device, emulator, or simulator. This skill turns a feature flow into a repeatable device test plan using screenshots, accessibility snapshots, element inspection, taps, typing, swipes, app install, app launch, and device orientation checks.
12
12
 
13
- Mobile MCP is best used after implementation, during APPFORGE Stage 7 Full QA, or before store submission.
13
+ Mobile MCP is best used after implementation, during APPFORGE Stage 7 Full QA, after `/mobile-app-design` reskins, or before store submission.
14
14
 
15
15
  ---
16
16
 
@@ -61,6 +61,30 @@ EDGE_CASES:
61
61
  <offline, invalid input, rotation, restart, permissions, api errors>
62
62
  ```
63
63
 
64
+ ### Reskin QA Input
65
+
66
+ Use this format when verifying a `/mobile-app-design` redesign or reskin:
67
+
68
+ ```text
69
+ COMMAND: /mobile-mcp-qa
70
+ MODE: RESKIN_QA
71
+ PLATFORM: <Android | iOS | Flutter | React Native>
72
+ APP_ID: <Android package name or iOS bundle id>
73
+ BUILD_PATH: <optional apk/ipa/app path>
74
+ DEVICE: <optional target device name>
75
+ SUPPORTED_THEMES: <light | dark | light,dark | custom themes>
76
+ SCREEN_INVENTORY:
77
+ | Screen/State | Decision | Expected Change | Route/Tab |
78
+ |---|---|---|---|
79
+ | <screen + state> | REDESIGN | <layout/hierarchy/state change> | <route/tab> |
80
+ BASELINE_EVIDENCE:
81
+ <before screenshots, screenshot paths, or "capture before from current build">
82
+ EXPECTED_REDESIGN:
83
+ <approved reskin plan, navigation changes, theme changes, and state coverage>
84
+ REGRESSION_RISKS:
85
+ <tab reorder, renamed copy, deep links, dark mode, keyboard, safe area, analytics, etc.>
86
+ ```
87
+
64
88
  ---
65
89
 
66
90
  ## Skill Prompt
@@ -68,6 +92,8 @@ EDGE_CASES:
68
92
  ```text
69
93
  Run a Mobile MCP QA pass for the provided mobile app flow.
70
94
 
95
+ If MODE is RESKIN_QA, run the Reskin QA flow instead of ordinary flow QA.
96
+
71
97
  STEP 1 — VERIFY SETUP
72
98
  - List available devices.
73
99
  - Select the requested device, or choose the first available emulator/simulator.
@@ -101,7 +127,79 @@ Check:
101
127
  - App restart preserves required state
102
128
  - Offline/API error behavior is user-safe
103
129
 
104
- STEP 5 — REPORT
130
+ RESKIN QA FLOW
131
+ Use this flow when MODE is RESKIN_QA or when the user provides a `/mobile-app-design` screen inventory.
132
+
133
+ STEP R1 — VERIFY RESKIN INPUTS
134
+ - Read SCREEN_INVENTORY and EXPECTED_REDESIGN.
135
+ - Preserve each inventory decision exactly: REDESIGN, RESTYLE, or LEAVE.
136
+ - Confirm SUPPORTED_THEMES. If the app supports light and dark, both are required.
137
+ - If baseline screenshots are missing and the current build is already the after build, mark before evidence as missing instead of inventing it.
138
+
139
+ STEP R2 — CAPTURE OR REGISTER BASELINE
140
+ - For each inventory row, attach the provided before screenshot or capture a before screenshot if the baseline build is available.
141
+ - Name evidence predictably: before-<theme>-<screen>-<state>.
142
+ - A screen/state without before evidence is still testable after the edit, but its before/after comparison status is UNVERIFIED.
143
+
144
+ STEP R3 — CAPTURE AFTER STATE
145
+ - Launch the after build.
146
+ - Visit every screen/state in SCREEN_INVENTORY.
147
+ - Capture after screenshots for every supported theme.
148
+ - For loading, empty, error, offline, permission-denied, and success states, use controlled test data, network toggles, permissions, or documented setup steps when available.
149
+ - Name evidence predictably: after-<theme>-<screen>-<state>.
150
+
151
+ STEP R4 — VERIFY STRUCTURAL CHANGE
152
+ For each inventory row:
153
+ - REDESIGN must show layout, hierarchy, grouping, density, information-priority, or state-layout changes. Token-only changes are FAIL.
154
+ - RESTYLE may show token/component updates only, but must have a justification.
155
+ - LEAVE should remain intentionally unchanged except for unavoidable global shell or token updates.
156
+ - Mark missing before or after screenshots as UNVERIFIED.
157
+
158
+ STEP R5 — VERIFY REGRESSIONS
159
+ Check:
160
+ - clipped or overlapping text
161
+ - safe areas, status bar, navigation bar, and notches
162
+ - keyboard avoidance
163
+ - minimum 44pt/48dp touch targets
164
+ - light/dark contrast and invisible text risk
165
+ - tab order, selected state, route names, deep links, and back behavior
166
+ - renamed screen/tab copy across labels, empty states, prompts, and accessibility text
167
+ - loading, empty, error, offline, disabled, permission-denied, and success states
168
+ - orientation when the app supports it
169
+
170
+ STEP R6 — REPORT RESKIN QA
171
+ Return:
172
+ MOBILE MCP RESKIN QA REPORT
173
+ ===========================
174
+ Platform:
175
+ Device:
176
+ App:
177
+ Themes:
178
+ Result: PASS | FAIL | PARTIAL | BLOCKED
179
+
180
+ Screen Evidence:
181
+ | Screen/State | Decision | Theme | Before | After | Result |
182
+ |---|---|---|---|---|---|
183
+
184
+ Structural Verification:
185
+ | Screen/State | Decision | Expected Change | Observed Change | Result |
186
+ |---|---|---|---|---|
187
+
188
+ Regression Checks:
189
+ | Check | Screen/State | Result | Evidence |
190
+ |---|---|---|---|
191
+
192
+ Issues:
193
+ | Severity | Screen/State | Issue | Evidence | Fix |
194
+ |---|---|---|---|---|
195
+
196
+ Evidence For PRD Verification:
197
+ - <compact screenshot list and report summary that can be pasted into /prd-verification>
198
+
199
+ Recommended Next Action:
200
+ <single concrete fix or next test>
201
+
202
+ STEP 5 — REPORT ORDINARY FLOW QA
105
203
  Return:
106
204
  MOBILE MCP QA REPORT
107
205
  ====================
@@ -129,6 +227,81 @@ Recommended Next Action:
129
227
  <single concrete fix or next test>
130
228
  ```
131
229
 
230
+ ### Reskin QA Example
231
+
232
+ #### Input
233
+
234
+ ```text
235
+ COMMAND: /mobile-mcp-qa
236
+ MODE: RESKIN_QA
237
+ PLATFORM: React Native
238
+ APP_ID: com.example.habits
239
+ SUPPORTED_THEMES: light,dark
240
+ SCREEN_INVENTORY:
241
+ | Screen/State | Decision | Expected Change | Route/Tab |
242
+ |---|---|---|---|
243
+ | Today/populated | REDESIGN | grouped morning/afternoon/evening sections | Today |
244
+ | Today/empty | REDESIGN | coaching empty state with primary action | Today |
245
+ | Insights/populated | REDESIGN | KPI strip + weekly chart + compact history | Insights |
246
+ | Settings/default | RESTYLE | tokenized surfaces and clearer typography | Settings |
247
+ BASELINE_EVIDENCE:
248
+ before-light-today-populated.png, before-dark-today-populated.png,
249
+ before-light-insights-populated.png, before-dark-insights-populated.png
250
+ EXPECTED_REDESIGN:
251
+ Tabs reordered to Today, Insights, Coach, Settings. Today and Insights require structural layout changes. Settings is restyle only.
252
+ REGRESSION_RISKS:
253
+ dark mode contrast, renamed Strategy copy, tab selected state, safe areas
254
+ ```
255
+
256
+ #### Output
257
+
258
+ ```text
259
+ MOBILE MCP RESKIN QA REPORT
260
+ ===========================
261
+ Platform: React Native
262
+ Device: iPhone 15 Simulator
263
+ App: com.example.habits
264
+ Themes: light, dark
265
+ Result: FAIL
266
+
267
+ Screen Evidence:
268
+ | Screen/State | Decision | Theme | Before | After | Result |
269
+ |---|---|---|---|---|---|
270
+ | Today/populated | REDESIGN | light | before-light-today | after-light-today | PASS |
271
+ | Today/populated | REDESIGN | dark | before-dark-today | after-dark-today | PASS |
272
+ | Insights/populated | REDESIGN | light | before-light-insights | after-light-insights | PASS |
273
+ | Insights/populated | REDESIGN | dark | before-dark-insights | after-dark-insights | FAIL |
274
+ | Settings/default | RESTYLE | dark | missing | after-dark-settings | UNVERIFIED |
275
+
276
+ Structural Verification:
277
+ | Screen/State | Decision | Expected Change | Observed Change | Result |
278
+ |---|---|---|---|---|
279
+ | Today/populated | REDESIGN | grouped sections | sections visible | PASS |
280
+ | Insights/populated | REDESIGN | KPI + chart + history | chart clipped in dark | FAIL |
281
+ | Settings/default | RESTYLE | token updates | no before evidence | UNVERIFIED |
282
+
283
+ Regression Checks:
284
+ | Check | Screen/State | Result | Evidence |
285
+ |---|---|---|---|
286
+ | Dark contrast | Insights | FAIL | chart label unreadable |
287
+ | Tab selected state | All tabs | PASS | selected indicator moves |
288
+ | Renamed copy | Today | PASS | no stale Strategy copy |
289
+
290
+ Issues:
291
+ | Severity | Screen/State | Issue | Evidence | Fix |
292
+ |---|---|---|---|---|
293
+ | WARNING | Insights/dark | Chart label has low contrast | after-dark-insights | Use onSurface token |
294
+ | INFO | Settings/default | Missing baseline | after-dark-settings | Capture before image next run |
295
+
296
+ Evidence For PRD Verification:
297
+ - Today populated: light/dark before-after PASS.
298
+ - Insights dark: FAIL due chart contrast.
299
+ - Settings: UNVERIFIED because baseline missing.
300
+
301
+ Recommended Next Action:
302
+ Fix Insights dark chart label contrast and rerun Reskin QA for Insights and Settings.
303
+ ```
304
+
132
305
  ---
133
306
 
134
307
  ## Example
@@ -1,6 +1,7 @@
1
1
  # Workflow — Mobile MCP QA
2
2
 
3
3
  **Type:** Device automation QA
4
+ **Slash Command:** `/mobile-mcp-qa-workflow` when installed alongside the `/mobile-mcp-qa` skill
4
5
  **Agents Used:** APPFORGE, AXIOM / SWIFT / DART / BRIDGE, CRASHER, PERF, Mobile Memory
5
6
  **Skills Used:** /mobile-mcp-qa, /accessibility-audit, /perf-audit, /mobile-memory-save
6
7