@daemux/store-automator 0.8.0 → 0.9.0

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 (35) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/package.json +1 -1
  3. package/plugins/store-automator/.claude-plugin/plugin.json +1 -1
  4. package/plugins/store-automator/agents/appstore-meta-creator.md +13 -8
  5. package/plugins/store-automator/agents/architect.md +42 -1
  6. package/plugins/store-automator/agents/devops.md +26 -27
  7. package/scripts/check_google_play.py +1 -1
  8. package/scripts/manage_version_ios.py +1 -1
  9. package/src/install-paths.mjs +2 -3
  10. package/src/templates.mjs +2 -2
  11. package/templates/CLAUDE.md.template +70 -16
  12. package/templates/codemagic.template.yaml +131 -96
  13. package/templates/fastlane/android/Fastfile.template +21 -3
  14. package/templates/fastlane/ios/Fastfile.template +4 -3
  15. package/templates/github/workflows/android-release.yml +108 -39
  16. package/templates/github/workflows/codemagic-trigger.yml +15 -5
  17. package/templates/github/workflows/ios-release.yml +94 -37
  18. package/templates/scripts/check_google_play.py +1 -1
  19. package/templates/scripts/ci/android/check-readiness.sh +18 -24
  20. package/templates/scripts/ci/android/manage-version.sh +17 -16
  21. package/templates/scripts/ci/android/sync-iap.sh +6 -6
  22. package/templates/scripts/ci/android/update-data-safety.sh +2 -2
  23. package/templates/scripts/ci/android/upload-metadata.sh +23 -5
  24. package/templates/scripts/ci/common/install-fastlane.sh +1 -1
  25. package/templates/scripts/ci/common/link-fastlane.sh +1 -1
  26. package/templates/scripts/ci/common/read-config.sh +3 -0
  27. package/templates/scripts/ci/ios/build.sh +39 -0
  28. package/templates/scripts/ci/ios/set-build-number.sh +17 -20
  29. package/templates/scripts/ci/ios/setup-signing.sh +48 -7
  30. package/templates/scripts/ci/ios/sync-iap.sh +6 -17
  31. package/templates/scripts/ci/ios/upload-binary.sh +0 -1
  32. package/templates/scripts/ci/ios/upload-metadata.sh +3 -13
  33. package/templates/scripts/create_app_record.py +1 -1
  34. package/templates/scripts/manage_version_ios.py +1 -1
  35. package/templates/scripts/update_data_safety.py +1 -1
@@ -5,14 +5,14 @@
5
5
  },
6
6
  "metadata": {
7
7
  "description": "App Store & Google Play automation for Flutter apps",
8
- "version": "0.7.1"
8
+ "version": "0.9.0"
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "store-automator",
13
13
  "source": "./plugins/store-automator",
14
14
  "description": "3 agents for app store publishing: reviewer, meta-creator, media-designer",
15
- "version": "0.7.1",
15
+ "version": "0.9.0",
16
16
  "keywords": ["flutter", "app-store", "google-play", "fastlane", "codemagic"]
17
17
  }
18
18
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daemux/store-automator",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Full App Store & Google Play automation for Flutter apps with Claude Code agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "store-automator",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "App Store & Google Play automation agents for Flutter app publishing",
5
5
  "author": {
6
6
  "name": "Daemux"
@@ -152,14 +152,19 @@ af, am, ar, hy-AM, az-AZ, eu-ES, be, bn-BD, bg, my-MM, ca, zh-HK, zh-CN, zh-TW,
152
152
  ## Translation Process
153
153
 
154
154
  1. Create complete English (en-US) metadata for both platforms first
155
- 2. For EACH target language from ci.config.yaml metadata.languages, spawn a sub-agent (Task tool) with:
156
- - The complete English source texts for all files
157
- - Target locale code (Apple and Google variants)
158
- - Platform (ios and android)
159
- - Character limits per field (critical -- translations often expand 20-40%)
160
- - Translation instructions (see below)
161
- 3. Launch up to 10 sub-agents in parallel for speed
162
- 4. Each sub-agent writes files directly to the correct locale directory
155
+ 2. Group target languages from ci.config.yaml metadata.languages by similarity:
156
+ - Romance: es-ES, es-MX, fr-FR, fr-CA, it, pt-BR, pt-PT, ro, ca, gl-ES
157
+ - Germanic: de-DE, nl-NL, sv, da, no, fi
158
+ - Slavic: ru, uk, pl, cs, sk, hr, bg, sr, sl, mk-MK, be
159
+ - CJK: ja, ko, zh-Hans, zh-Hant, zh-Hant-HK, zh-CN, zh-TW, zh-HK
160
+ - South/Southeast Asian: hi, th, vi, id, ms, bn-BD, ta-IN, te-IN, ml-IN, mr-IN, kn-IN, gu, my-MM, km-KH, lo-LA, si-LK
161
+ - Middle Eastern: ar, ar-SA, he, tr, fa, ur
162
+ - Other: hu, el, et, lv, lt, ka-GE, hy-AM, az-AZ, kk, ky-KG, mn-MN, ne-NP, af, am, sw, zu, fil, is-IS, eu-ES, rm, pa
163
+ 3. Create a translation team using TeamCreate with 2-5 teammates:
164
+ - Each teammate handles 2-5 language groups (based on total languages configured)
165
+ - Teammate prompt includes: English source texts, target locale codes (Apple + Google variants), character limits per field, translation instructions
166
+ - Each teammate writes files directly to the correct locale directories
167
+ 4. Wait for all teammates to complete, then verify all languages are covered
163
168
 
164
169
  ### Translation Instructions for Sub-Agents
165
170
 
@@ -138,7 +138,48 @@ If a `.claude/.tasks/` file path is provided, read ONLY that file for requiremen
138
138
  Scan the codebase for already-implemented items. Pick 3-5 UNIMPLEMENTED
139
139
  related requirements. Design only those. Report: "Batch: N of ~M remaining."
140
140
 
141
+ ## Team Composition Recommendation
142
+
143
+ **MANDATORY section in your output.** The orchestrator uses this to create teams.
144
+
145
+ After your architecture design, include this section:
146
+
147
+ ```
148
+ ### Team Recommendations for Orchestrator
149
+
150
+ **Files touched:** {count}
151
+
152
+ #### Developer Team (Flutter)
153
+ - **Teammates:** {N} (based on file count: 3-4 files → 2, 5-7 → 3, 8+ → 4)
154
+ - **Teammate 1 scope:** Screens and widgets — {list of files}
155
+ - **Teammate 2 scope:** Providers and repositories — {list of files}
156
+ - **Teammate 3 scope:** Firebase/backend services — {list of files} (if applicable)
157
+ - **Rationale:** {why this split works}
158
+
159
+ #### Reviewer Team
160
+ - **Teammates:** 2-3
161
+ - **Reviewer 1 focus:** Dart code quality, patterns, maintainability — files: {list}
162
+ - **Reviewer 2 focus:** Security, Firebase rules, data validation — files: {list}
163
+ - **Reviewer 3 focus:** Performance, store compliance — files: {list} (if 5+ files)
164
+
165
+ #### Tester Team
166
+ - **Teammates:** 2-4
167
+ - **Tester 1 focus:** Flutter unit and widget tests — {scope}
168
+ - **Tester 2 focus:** Mobile UI testing (iOS) — {scope}
169
+ - **Tester 3 focus:** Mobile UI testing (Android) — {scope} (if applicable)
170
+
171
+ #### App Designer Team (if design stage applies)
172
+ - **Teammates:** 2-3
173
+ - **Designer 1 scope:** App screen designs — {deliverables}
174
+ - **Designer 2 scope:** Store screenshots — {deliverables}
175
+ - **Designer 3 scope:** Web page design — {deliverables} (if applicable)
176
+
177
+ **TEAM EXCEPTION:** If task touches <3 files, output: "Files touched: {N} — below team threshold, single agents recommended."
178
+ ```
179
+
180
+ Include concrete file assignments. The orchestrator will use this to create `TeamCreate` with the exact scopes you specify.
181
+
141
182
  ## Output Footer
142
183
  ```
143
- NEXT: product-manager(PRE) to validate approach before implementation
184
+ NEXT: product-manager(PRE) to validate approach and team composition before implementation
144
185
  ```
@@ -4,16 +4,18 @@ description: "DevOps operations: Codemagic CI/CD builds, Firebase deployment, Cl
4
4
  model: opus
5
5
  hooks:
6
6
  PreToolUse:
7
- - matcher: "Edit|Write"
8
- hooks:
9
- - type: command
10
- command: "exit 0"
11
7
  - matcher: "Bash"
12
8
  hooks:
13
9
  - type: command
14
10
  command: "exit 0"
15
11
  ---
16
12
 
13
+ **SCOPE RESTRICTION:**
14
+ - You CANNOT edit or create ANY local project files (no Edit/Write tools)
15
+ - This includes: source code, CI/CD configs, GitHub Actions workflows, scripts, codemagic.yaml, etc.
16
+ - You CAN only: run deployments, check logs, monitor builds, manage infrastructure via Bash and MCP tools
17
+ - If ANY local file changes are needed (code, configs, CI/CD, scripts), report what needs changing and ask the developer agent to make the edits
18
+
17
19
  # DevOps Agent
18
20
 
19
21
  Handles Codemagic CI/CD builds, Firebase deployment, Cloudflare Pages deployment, and Firestore management for Flutter mobile apps.
@@ -24,7 +26,7 @@ Handles Codemagic CI/CD builds, Firebase deployment, Cloudflare Pages deployment
24
26
  - `codemagic` - Build monitoring, deployment tracking, log analysis, build triggering
25
27
  - `firebase` - Deploy Cloud Functions, security rules, Firestore indexes
26
28
  - `cloudflare` - Deploy web pages via Cloudflare Pages
27
- - `database + migrate` - Firestore security rules updates, index management, data migration scripts
29
+ - `database + deploy` - Deploy Firestore security rules, indexes, and run data migration scripts
28
30
  - `database + optimize` - Firestore query optimization, index analysis, security rules audit
29
31
 
30
32
  Additional parameters vary by mode (see each section).
@@ -283,38 +285,35 @@ RECOMMENDATION: [action if needed]
283
285
 
284
286
  ---
285
287
 
286
- ## Mode: database + migrate
288
+ ## Mode: database + deploy
287
289
 
288
- Manage Firestore security rules, indexes, and data migration scripts. Firestore is NoSQL -- there are no SQL migrations.
290
+ Deploy Firestore security rules, indexes, and run data migration scripts. Firestore is NoSQL -- there are no SQL migrations.
289
291
 
290
- ### Security Rules Updates
292
+ ### Security Rules Deployment
291
293
 
292
- 1. Read current rules in `firestore.rules`
293
- 2. Read task file for new access requirements
294
- 3. Update rules with proper authenticated read/write and per-document ownership checks
295
- 4. Test rules locally: `firebase emulators:start --only firestore`
296
- 5. Deploy: `firebase deploy --only firestore:rules`
294
+ 1. Deploy rules: `firebase deploy --only firestore:rules`
295
+ 2. Verify deployment succeeded in Firebase Console or CLI output
296
+ 3. Test rules against expected access patterns
297
297
 
298
- ### Index Management
298
+ ### Index Deployment
299
299
 
300
- 1. Review `firestore.indexes.json` for existing composite indexes
301
- 2. Add new indexes for query patterns that require them
302
- 3. Deploy: `firebase deploy --only firestore:indexes`
303
- 4. Monitor index build status (can take minutes for large collections)
300
+ 1. Deploy indexes: `firebase deploy --only firestore:indexes`
301
+ 2. Monitor index build status (can take minutes for large collections)
302
+ 3. Verify all indexes reach READY state
304
303
 
305
- ### Data Migration Scripts
304
+ ### Data Migration Execution
306
305
 
307
- For schema-like changes in Firestore documents:
308
- 1. Write a migration script (Node.js) that reads and updates documents
309
- 2. Run against local emulator first for testing
310
- 3. Run against production with batched writes (max 500 per batch)
311
- 4. Log progress and handle partial failures gracefully
306
+ For running migration scripts (created by the developer agent):
307
+ 1. Run migration script against local emulator first: `firebase emulators:start --only firestore`
308
+ 2. Run against production with monitoring
309
+ 3. Verify data integrity after migration completes
310
+ 4. Log progress and report any failures
312
311
 
313
312
  ### Output
314
313
 
315
314
  ```
316
- OPERATION: Firestore Migration
317
- CHANGES: [list of rule/index/data changes]
315
+ OPERATION: Firestore Deploy
316
+ CHANGES: [list of deployed rules/indexes/migrations]
318
317
  EMULATOR TEST: Passed | Failed
319
318
  DEPLOYED: [rules | indexes | data migration]
320
319
  RESULT: Success | Failed
@@ -390,5 +389,5 @@ After editing `ci.config.yaml`, regenerate the Codemagic config:
390
389
  ## Output Footer
391
390
 
392
391
  ```
393
- NEXT: [context-dependent - for migrations: simplifier -> reviewer -> product-manager(POST)]
392
+ NEXT: [context-dependent - for database deploy: verify deployment succeeded]
394
393
  ```
@@ -25,7 +25,7 @@ except ImportError:
25
25
  print("Installing dependencies...", file=sys.stderr)
26
26
  import subprocess
27
27
  subprocess.check_call(
28
- [sys.executable, "-m", "pip", "install", "PyJWT", "cryptography", "requests"],
28
+ [sys.executable, "-m", "pip", "install", "--break-system-packages", "PyJWT", "cryptography", "requests"],
29
29
  stdout=subprocess.DEVNULL,
30
30
  )
31
31
  import jwt
@@ -32,7 +32,7 @@ except ImportError:
32
32
  print("Installing dependencies...", file=sys.stderr)
33
33
  import subprocess
34
34
  subprocess.check_call([
35
- sys.executable, "-m", "pip", "install",
35
+ sys.executable, "-m", "pip", "install", "--break-system-packages",
36
36
  "PyJWT", "cryptography", "requests"
37
37
  ], stdout=subprocess.DEVNULL)
38
38
  import jwt
@@ -2,7 +2,7 @@ import { execSync, execFileSync } from 'node:child_process';
2
2
  import { installGitHubActionsTemplates, installMatchfile } from './templates.mjs';
3
3
  import { findAppByRepo, addApp, normalizeRepoUrl } from './codemagic-api.mjs';
4
4
  import {
5
- writeCiAppId, writeCiTeamId, writeMatchConfig, readFlutterRoot,
5
+ writeCiAppId, writeCiTeamId, writeMatchConfig,
6
6
  } from './ci-config.mjs';
7
7
  import { updateMcpAppId, updateMcpTeamId } from './mcp-setup.mjs';
8
8
 
@@ -68,8 +68,7 @@ export function installGitHubActionsPath(projectDir, packageDir, cliTokens) {
68
68
  console.log('Configuring GitHub Actions mode...');
69
69
  installGitHubActionsTemplates(projectDir, packageDir);
70
70
 
71
- const flutterRoot = readFlutterRoot(projectDir);
72
- installMatchfile(projectDir, packageDir, flutterRoot, {
71
+ installMatchfile(projectDir, packageDir, {
73
72
  matchGitUrl: cliTokens.matchGitUrl,
74
73
  bundleId: cliTokens.bundleId,
75
74
  });
package/src/templates.mjs CHANGED
@@ -134,12 +134,12 @@ export function installGitHubActionsTemplates(projectDir, packageDir) {
134
134
  }
135
135
  }
136
136
 
137
- export function installMatchfile(projectDir, packageDir, flutterRoot, { matchGitUrl, bundleId }) {
137
+ export function installMatchfile(projectDir, packageDir, { matchGitUrl, bundleId }) {
138
138
  console.log('Installing Matchfile...');
139
139
  const src = join(packageDir, 'templates', 'Matchfile.template');
140
140
  if (!existsSync(src)) return;
141
141
 
142
- const destDir = join(projectDir, flutterRoot, 'ios', 'fastlane');
142
+ const destDir = join(projectDir, 'fastlane', 'ios');
143
143
  ensureDir(destDir);
144
144
  const dest = join(destDir, 'Matchfile');
145
145
 
@@ -14,7 +14,7 @@ This is a Flutter app with Firebase backend, automated for App Store and Google
14
14
  - If unsure which agent to use, use the Task tool with a general-purpose, explore or any other built-in agent
15
15
 
16
16
  ### DevOps Agent Required
17
- ALL deployment and infrastructure operations SHOULD use the devops agent (codemagic, firebase, cloudflare, database/migrate, database/optimize).
17
+ ALL deployment and infrastructure operations SHOULD use the devops agent (codemagic, firebase, cloudflare, database/deploy, database/optimize).
18
18
  Prefer using the devops agent over direct Bash/SSH for structured operations.
19
19
 
20
20
  ### Code Quality (enforced by agents)
@@ -127,7 +127,7 @@ appstore-meta-creator → appstore-reviewer
127
127
 
128
128
  #### Database Flow
129
129
  ```
130
- devops(database,migrate) → simplifier → reviewer → product-manager(POST) → [devops(firebase)]
130
+ architect → developer(backend) → simplifier → reviewer → product-manager(POST) → [devops(firebase)]
131
131
  ```
132
132
 
133
133
  #### Infra Flow
@@ -140,6 +140,39 @@ devops (standalone)
140
140
  architect → product-manager(PRE) → app-designer → developer(flutter) → simplifier → reviewer → tester(flutter) → tester(mobile-ui) → appstore-meta-creator → appstore-reviewer → product-manager(POST) → devops(codemagic)
141
141
  ```
142
142
 
143
+ #### Team Size Annotations
144
+
145
+ Flows above use single agents by default. For tasks touching 3+ files, apply team sizes:
146
+
147
+ | Files Touched | Team Size |
148
+ |--------------|-----------|
149
+ | 1-2 files | Single agent (no team) |
150
+ | 3-4 files | 2 teammates |
151
+ | 5-7 files | 3 teammates |
152
+ | 8+ files | 4 teammates |
153
+
154
+ **Team-annotated flows** (apply when task scope exceeds 2 files):
155
+
156
+ ##### Standard Flow (with teams)
157
+ ```
158
+ architect{T:2} → product-manager(PRE) → developer{T:2-4} → simplifier → reviewer{T:2} → tester{T:2} → product-manager(POST) → [devops]
159
+ ```
160
+
161
+ ##### Flutter Flow (with teams)
162
+ ```
163
+ architect{T:2} → product-manager(PRE) → [app-designer{T:2-3}] → developer(flutter){T:2-4} → simplifier → reviewer{T:2-3} → tester(flutter){T:2} → tester(mobile-ui){T:2} → product-manager(POST) → [devops(codemagic)]
164
+ ```
165
+
166
+ ##### Backend Flow (with teams)
167
+ ```
168
+ architect{T:2} → product-manager(PRE) → developer(backend){T:2-4} → simplifier → reviewer{T:2} → tester(backend){T:2} → product-manager(POST) → [devops(firebase)]
169
+ ```
170
+
171
+ ##### Full Publishing Flow (with teams)
172
+ ```
173
+ architect{T:2} → product-manager(PRE) → app-designer{T:2-3} → developer(flutter){T:2-4} → simplifier → reviewer{T:2-3} → tester(flutter){T:2} → tester(mobile-ui){T:2} → appstore-meta-creator{T:2-5} → appstore-reviewer → product-manager(POST) → devops(codemagic)
174
+ ```
175
+
143
176
  ### Agents Reference
144
177
 
145
178
  | Agent | When to use |
@@ -150,7 +183,7 @@ architect → product-manager(PRE) → app-designer → developer(flutter) → s
150
183
  | simplifier | AFTER developer - simplifies Dart/Flutter code |
151
184
  | reviewer | After ANY code changes - Dart/Flutter quality review |
152
185
  | tester | After review passes (type: flutter/mobile-ui/web/backend/integration) |
153
- | devops | Operations (mode: codemagic/firebase/cloudflare/database+migrate/database+optimize) |
186
+ | devops | Operations (mode: codemagic/firebase/cloudflare/database+deploy/database+optimize) |
154
187
  | app-designer | Stitch MCP design: app screens + store screenshots + web page design |
155
188
  | appstore-meta-creator | Generate store listing texts for all configured languages |
156
189
  | appstore-reviewer | Full App Store/Play compliance review including live app UI testing via mobile-mcp |
@@ -240,21 +273,42 @@ Push to main. Codemagic detects changes and uploads modified assets. Version aut
240
273
  **If you are a TEAMMATE, skip to "For Teammates" section below.**
241
274
  ---
242
275
 
243
- ### Agent Teams (Evaluate per stage)
276
+ ### Agent Teams (MANDATORY by default)
277
+
278
+ **Teams are the DEFAULT for most workflow stages.** Single-agent is the exception, not the norm.
279
+
280
+ #### Mandatory Team Stages
281
+
282
+ These stages MUST use teams unless the task touches fewer than 3 files:
283
+
284
+ | Stage | Default Size | Split Strategy |
285
+ |-------|-------------|----------------|
286
+ | architect | 2 | Split by concern: structure/patterns vs integration/data-flow |
287
+ | developer | 2-4 | Split by file group: screens/widgets vs providers/repos vs Firebase/backend |
288
+ | reviewer | 2-3 | Split by focus: Dart quality vs security+Firebase rules vs performance+store compliance |
289
+ | tester | 2-4 | Split by type: flutter unit/widget vs mobile-ui iOS vs mobile-ui Android vs web |
290
+ | app-designer | 2-3 | Split by deliverable: app screens vs store screenshots vs web page |
291
+ | appstore-meta-creator | 2-5 | Split by language group: each teammate handles 2-5 languages grouped by similarity |
292
+
293
+ #### Single-Agent Stages (exceptions)
244
294
 
245
- **You MUST evaluate team suitability for EACH workflow stage and print your decision in the output format.**
295
+ These stages stay single-agent teams add no value:
246
296
 
247
- Evaluate each stage independently — a task may use single agents for some stages and teams for others.
297
+ | Stage | Reason |
298
+ |-------|--------|
299
+ | simplifier | Works on same files developer just touched — no parallelism possible |
300
+ | product-manager | Single evaluation checkpoint — multiple perspectives don't help |
301
+ | devops | Single deployment target — cannot parallelize |
302
+ | appstore-reviewer | Single compliance evaluation — one holistic review needed |
248
303
 
249
- **Use team for a stage when:**
250
- - Multiple perspectives improve quality
251
- - Competing approaches find better solutions
252
- - Stage work splits into independent file groups
304
+ #### Team Size Triggers
253
305
 
254
- **Use single agent for a stage when:**
255
- - Work touches the same files
256
- - Stage is a single focused operation
257
- - Adding perspectives adds no value
306
+ | Files Touched | Team Size |
307
+ |--------------|-----------|
308
+ | 1-2 files | Single agent TEAM EXCEPTION |
309
+ | 3-4 files | 2 teammates |
310
+ | 5-7 files | 3 teammates |
311
+ | 8+ files | 4 teammates |
258
312
 
259
313
  **Team Enforcement (MANDATORY):**
260
314
  If `TEAMS:` output includes any stage using teams, you MUST call `TeamCreate` before spawning agents for that stage. Spawning agents via `Task` without `team_name` does NOT count as using teams. Violation = workflow non-compliance.
@@ -324,7 +378,7 @@ TASK TYPE: [flutter/backend/design/metadata/database/infra/standard]
324
378
  RECOMMENDED FLOW:
325
379
  <copy the EXACT flow from Agent Flows section - include ALL agents with [optional] ones>
326
380
 
327
- TEAMS: [per-stage evaluation: which stages use teams and why, or NO if all stages use single agents]
381
+ TEAMS: [MANDATORY — list team stages with sizes. Single-agent exceptions: list which stages and why. "NO" only valid for tasks <3 files]
328
382
 
329
383
  DEPLOYMENT: [AVAILABLE - deployment configured | NOT CONFIGURED - workflow ends at product-manager(POST)]
330
384
 
@@ -342,7 +396,7 @@ LAUNCHING: [first-agent-name]
342
396
  - **backend**: `architect → product-manager(PRE) → developer(backend) → simplifier → reviewer → tester(backend) → product-manager(POST) → [devops(firebase)]`
343
397
  - **design**: `app-designer → appstore-reviewer`
344
398
  - **metadata**: `appstore-meta-creator → appstore-reviewer`
345
- - **database**: `devops(database,migrate) → simplifier → reviewer → product-manager(POST) → [devops(firebase)]`
399
+ - **database**: `architect → developer(backend) → simplifier → reviewer → product-manager(POST) → [devops(firebase)]`
346
400
  - **infra**: `devops (standalone)`
347
401
  - **standard**: `architect → product-manager(PRE) → developer → simplifier → reviewer → tester → product-manager(POST) → [devops]`
348
402