Upgrade "@multiverse-io/stardust-react" and/or "@multiverse-io/stardust" in any consumer repo — auto-detects repo structure, runs safe upgrade workflow with visual validation and regression handling. Supports single-repo and fleet (multi-repo wave) modes.
78
Does it follow best practices?
Validation for skill structure
At the start, say: "Using the stardust-consumer-upgrade skill for a safe Stardust upgrade in {repo_name}." For fleet mode, say: "Using the stardust-consumer-upgrade skill for fleet upgrade — {n} repos across {n_waves} waves."
@multiverse-io/stardust-react and/or @multiverse-io/stardust in any Multiverse consumer app.The agent MUST know or discover these before proceeding:
| Input | How to resolve |
|---|---|
| repo_name | Ask User, or infer from CWD / instruction. For fleet mode: "all" or a comma-separated list. |
| target_version | Ask User (e.g. 4.14.0). If not given, check latest on GitHub/npm. |
| upgrade_reason | Ask User (e.g. "rebrand prep", "token migration", "keep current"). Used in PR body. |
| linear_issue | Ask User. Used for branch naming. |
All known Stardust consumers with current versions, risk tiers, and repo structure. The agent should confirm versions at runtime via the discovery step — repos may change.
| Repo | Path | Package path(s) | Pkg mgr | Current version | Risk tier | Risk score |
|---|---|---|---|---|---|---|
ariel | ariel | js/package.json | yarn (in js/) | 4.4.0 / ~4.0.2 | Tier 1 | 5 |
evidence_management | evidence_management | package.json | npm | ~4.2.0 / ~4.0.2 | Tier 1 | 5 |
hello_app | hello_app | package.json | yarn | 4.1.2 / 4.0.2 | Tier 1 | 5 |
aurora | aurora | apps/frontend/package.json | yarn | 4.5.4 / 4.0.3 | Tier 2 | 4 |
user_home | user_home | package.json | npm | ~4.8.0 / ~4.0.2 | Tier 2 | 4 |
client-xp | client-xp | package.json | npm | 4.5.1 / ~4.0.2 | Tier 3 | 3 |
account_hub | account_hub | package.json | yarn | ~4.11.2 / ~4.0.3 | Tier 4 | 2 |
atlas | atlas | client/package.json, components/package.json, admin/package.json | yarn | 4.12.1 / ~4.0.2 | Tier 4 | 1 |
checker | checker | apps/checker/package.json | yarn | 4.9.0 / ~4.0.2 | Tier 4 | 1 |
guidance_hub | guidance_hub | package.json | yarn | ~4.12.1 / ~4.0.3 | Tier 4 | 0 |
guide-allocation-engine | guide-allocation-engine | package.json | npm | core 4.0.0 only | Tier 4 | 0 |
sync-sessions | sync-sessions | package.json | npm | core 4.0.0 only | Tier 4 | 0 |
platform | platform | assets/package.json | yarn | core 3.9.1 | Separate | 5 |
The agent MUST check whether the repo's current version is below each boundary. If the upgrade crosses a boundary, flag it to Sasha before continuing.
| Version | Component | Change | Repos below this line |
|---|---|---|---|
4.3.0 | Button | Removed any prop acceptance — now typed strictly | hello_app, evidence_management, ariel |
4.5.1 | Button | Padding reduced 24px → 16px — layout shift on all CTAs | hello_app, evidence_management, ariel |
4.6.0 | Checkbox, RadioInput | Sizing normalized to 20px; custom CSS overrides may clash | hello_app, evidence_management, ariel, aurora |
4.7.0 | Switch | Full visual redesign; medium size deprecated | hello_app, evidence_management, ariel, aurora |
4.8.0 | Choicebox | Radio/checkbox indicator added, structural change | hello_app, evidence_management, ariel, aurora, user_home |
| Version | Component | Change |
|---|---|---|
4.0.1 | Dropdown | Closing restores focus to trigger |
4.1.3 | GlobalNavigation | Deprecated; moved to @multiverse-io/global-navigation |
4.2.2 | Button | Uses aria-label instead of sr-only div |
4.5.0 | EnvironmentIndicator | Hidden in ci environment |
4.5.2 | SlideIn | Scroll lock removed |
4.8.2 | Badge | SVG icons hidden from screen readers |
4.9.x | Dropdown | Items now full-width clickable |
For the full changelog and risk scoring rubric, see ~/LangolfVault/Multiverse/Stardust/Plans/Stardust Consumer Upgrade Investigation.md.
feat/<linear_issue>-stardust-upgrade-<repo_name>..artifacts/ or similar, gitignored).Do NOT assume the registry is current. Run these checks in the target repo:
repo_root={repo_name}
# Detect package manager
ls "$repo_root"/yarn.lock "$repo_root"/pnpm-lock.yaml "$repo_root"/package-lock.json 2>/dev/null
# Detect monorepo structure
ls "$repo_root"/turbo.json "$repo_root"/lerna.json 2>/dev/null
cat "$repo_root"/package.json | jq -r '.workspaces // empty' 2>/dev/null
# Find all package.json files that reference stardust
rg -l "stardust" --glob "package.json" "$repo_root"
# Check current installed versions
rg '"@multiverse-io/stardust' --glob "package.json" "$repo_root"Record:
stardust-react and stardustIf the repo has a lockfile in a subdirectory (e.g. js/yarn.lock), the install command must run from that subdirectory.
git -C "$repo_root" fetch origin
git -C "$repo_root" status --shortorigin/main.# Worktree (use when main is dirty)
git -C "$repo_root" worktree add _wt_{repo_name}_{linear_issue} -b feat/{linear_issue}-stardust-upgrade-{repo_name} origin/mainRun the install command appropriate for the detected package manager and package path.
yarn (root-level or workspace):
yarn add @multiverse-io/stardust-react@{target_version}
# or for workspaces:
yarn workspace {workspace_name} add @multiverse-io/stardust-react@{target_version}npm:
npm install @multiverse-io/stardust-react@{target_version} @multiverse-io/stardust@{core_target}For core-only consumers (guide-allocation-engine, sync-sessions): bump only @multiverse-io/stardust.
For monorepos with multiple workspaces (atlas): bump in each workspace that has the dep.
Cross-reference the repo's current version against the Critical Changelog Boundaries table above. For each crossed boundary:
rg -l "ComponentName" --type ts --type tsx "$repo_root"For deeper risk assessment, read Stardust Consumer Upgrade Investigation.md.
Run checks appropriate for the repo:
| Repo | TypeScript | Lint | Build | Notes |
|---|---|---|---|---|
ariel | cd js && npx tsc --noEmit | cd js && yarn lint | cd js && yarn build | All commands from js/ |
evidence_management | npx tsc --noEmit | npm run lint | npm run build | |
hello_app | npx tsc --noEmit | yarn lint | yarn build | |
aurora | npx tsc --noEmit | yarn lint | yarn turbo build --filter=frontend | Turborepo |
user_home | npx tsc --noEmit | npm run lint | npm run build | |
client-xp | npx tsc --noEmit | npm run lint | npm run build | |
account_hub | npx tsc --noEmit | yarn lint | yarn build | |
atlas | npx tsc --noEmit | yarn lint | yarn build | Multi-workspace |
checker | npx tsc --noEmit | yarn lint | yarn turbo build | Turborepo |
guidance_hub | npx tsc --noEmit | yarn lint | yarn build | |
platform | — | — | cd assets && yarn build | Elixir/Phoenix + Elm |
| Core-only repos | — | npm run lint | npm run build | guide-allocation-engine, sync-sessions |
SKIP_ENV_VALIDATION=1 or equivalent..artifacts/ (gitignored).If regressions appear:
Before PR, enforce the agreed scope:
PR body template:
## What changed
- Bumped `@multiverse-io/stardust-react` from {old_version} to {target_version}
- [list any regression fixes or wrapper components added]
## Why
{upgrade_reason}
## Scope
{describe what's included and explicitly what's excluded}
## Changelog boundaries crossed
{list each boundary version + component + whether the component is in use}
## Validation
- [ ] `tsc --noEmit` passed
- [ ] Lint passed
- [ ] Build passed
- [ ] Visual comparison: [attach or link artifacts]
- [ ] Risk signals addressed: [list]
## Risk tier
{tier} — score {score}/5 (from Consumer Registry)Use when upgrading multiple repos in a coordinated sequence. Fleet mode runs the single-repo workflow per repo but enforces wave ordering to catch regressions early in low-risk repos before touching high-risk ones.
| Wave | Repos | Gate to next wave |
|---|---|---|
| 0 — No risk | guide-allocation-engine, sync-sessions | Core bump succeeds, build passes |
| 1 — Low risk | guidance_hub, atlas, account_hub, checker | All PRs pass CI; no regressions |
| 2 — Controlled | aurora, user_home, client-xp | Design review sign-off on Choicebox/Badge surfaces |
| 3 — High risk | hello_app, evidence_management, ariel | TypeScript audit + Switch/SegmentedControl audit completed first |
| Separate | platform | Full v3 → v4 migration; dedicated stream |
@multiverse-io/stardust@{core_target} is clean.hello_app + evidence_management: run tsc --noEmit against current code first to establish baseline error countariel: check Switch size usage (rg 'size="medium"' --glob '*.tsx') and SegmentedControl usageWithin a wave, repos can be upgraded in parallel (separate worktrees or separate agent instances). Never run repos from different waves in parallel — wave ordering is the safety gate.
If an upgrade causes issues after merge:
repo_root={repo_name}
# Revert the upgrade commit
git -C "$repo_root" revert {upgrade_commit_sha} --no-edit
# Reinstall to restore lockfile
cd {package_path} && {pm} install
# Verify build passes at old version
{pm} run buildIf the revert is complex (multiple commits, wrapper components added):