# React Migration Status - 2026-04-17 ## Current Verdict - The active renderer bootstrap is React-only. - The legacy Vue bootstrap, page tree, component tree, store tree, request/api layer, and the final leftover `src/**` tree have been removed. - The repository source/runtime is now effectively React-only. ## What Changed In This Pass 1. `index.html -> src/main.tsx` is now the only active renderer startup path. 2. The temporary compatibility shims `renderer-main.ts`, `ui-framework.ts`, `src/main.ts`, and `src/framework.ts` have been removed. 3. The dead Vue bootstrap chain was removed: - `src/main-vue.ts` - `src/router/index.ts` - `src/permission.ts` - `src/App.vue` 4. The dead Vue runtime tree was removed: - `src/pages/**` - `src/components/**` - `src/stores/**` - `src/api/**` - `src/utils/request.ts` - `src/auto-imports.d.ts` - legacy Vue-only composables and i18n bootstrap files - the remaining `src/main.ts`, `src/framework.ts`, assets, constants, locales, shared helpers, and utility files 5. `global.d.ts` no longer declares Vue-era modules or the deleted `@assets/images/*` alias. 6. `tsconfig.app.json`, `tsconfig.json`, and `vite.config.ts` no longer keep the stale `src/**` alias surface. 7. `openapi-ts-request.config.ts` now points at `src/api`, and `src/api/request.ts` provides the React-side generated request bridge. 8. `package.json` no longer lists Vue-era runtime/UI dependencies. ## Validation On 2026-04-17 - `pnpm typecheck` passes. - `pnpm build:vite` passes. - The renderer build, Electron main build, and preload build all complete successfully in the current workspace. - The current build still emits a warning and skips bytenode bytecode compilation when the local Electron binary is unavailable in `node_modules/electron`. ## Remaining Non-Blocking Notes 1. `package-lock.json` still contains historical Vue-era entries; the active workspace lockfile is `pnpm-lock.yaml`. 2. `pnpm-lock.yaml` still includes `@vue/compiler-sfc` transitively through `openapi-ts-request`, not through the application runtime. ## Remaining Follow-Up 1. Clean up stale historical docs that still mention `src/**` as a live runtime path. 2. Decide whether to keep or remove `package-lock.json` in a `pnpm`-managed repo. 3. Keep build and typecheck green while the React/runtime-shared structure continues to evolve. ## Build Chain Notes 1. `vite.config.ts` now scopes Electron `build.watch` to development mode so `pnpm build:vite` exits cleanly in production mode. 2. The main-process Vite build now uses the same alias map as renderer/preload, so Electron imports like `@lib/constants` resolve correctly. 3. `vite-plugin-electron-encrypt` now degrades gracefully when the local Electron executable is missing, logging a warning instead of failing the build. 4. React router now guards workspace routes and redirects authenticated users away from `/login`. ## Practical Boundary After This Pass - Safe now: - Treat React as the only supported renderer startup path. - Treat the old Vue tree as fully retired code. - Remove `src/**` from migration planning, because it is no longer part of the repo. - Not safe yet: - Assume every transitive `vue` string in lockfiles is a runtime blocker; some now come only from tooling. - Remove `@runtime/*` without replacing the shared Electron/runtime contract. ## Recommended Next Gate Only consider the final Vue exit once: 1. No source file imports any Vue-era runtime package. 2. `package.json` stays free of the Vue-era dependencies and `pnpm-lock.yaml` stays refreshed. 3. Build and typecheck keep passing after future runtime-shared and React-side changes. 4. The remaining historical references are treated as documentation cleanup, not runtime migration blockers.