Classic-to-Default Sync
Given a commit ID, audit all web/classic changes and ensure web/default reaches feature parity with the best possible implementation.
Input
The user must supply a <commit-id>.
Workflow
Step 1 — Extract classic diff
git show <commit-id> -- web/classic
Read every changed file in web/classic. Identify the logical changes (new features, UI/UX improvements, bug fixes, config tweaks, removed dead code, etc.) — not just line diffs.
Step 2 — Map to default counterparts
For each logical change found in Step 1, locate the equivalent file(s) in web/default/src/. Use Glob/Grep/SemanticSearch as needed. Consider that:
web/classicuses React 18 + Vite + Semi Designweb/defaultuses React 19 + Rsbuild + Radix UI + Tailwind CSS- Component names, file paths, and API shapes may differ; match by functionality, not filename.
Step 3 — Triage each change
Classify every logical change as one of:
| Status | Meaning | Action |
|---|---|---|
| OK | Already present & optimal | No action needed |
| IMPROVE | Present but suboptimal | Improve: logic, layout, style, or code quality |
| MISSING | Missing | Implement from scratch in default's stack |
Step 4 — Implement
For each IMPROVE or MISSING item:
- Read the target file(s) in
web/defaultbefore editing (required by project conventions). - Implement using
web/defaultconventions:- React 19 patterns (hooks, Suspense, etc.)
- Radix UI primitives where applicable
- Tailwind CSS for styling (no inline styles or Semi Design imports)
useTranslation()+t('English key')for all user-visible strings- TypeScript — explicit types, no
any - No dead code, no redundant comments
- Follow Rule 6 (pointer types for optional relay DTOs) if touching relay-related TS types.
- After editing, run
ReadLintson changed files and fix any introduced lint errors.
Step 5 — i18n
If any new user-visible strings were added, run the i18n sync:
cd web/default && bun run i18n:sync
Then add missing translations for all supported locales (en, zh, fr, ja, ru, vi) following the i18n-translate skill.
Step 6 — Report
Summarise the work in a concise table:
| # | Change (from classic commit) | Status | Action taken |
|---|---|---|---|
| 1 | ... | OK / IMPROVE / MISSING | None / Improved / Implemented |
If every item is OK with no action needed, simply reply: "已完成 - web/default 已具备此次提交的所有功能,且实现质量良好,无需修改。"
Quality bar
- No unused imports, variables, or components
- No commented-out code left behind
- Consistent naming with surrounding
web/defaultcode - All interactive elements accessible (keyboard nav, ARIA labels where Radix doesn't provide them automatically)
- No regressions: existing behaviour in
web/defaultmust not break