# GitHub 退役清理

围绕自建 Gitea 的战略确定后（见 gitea-integration），移除 GitHub 作为 git 后端的全部纠缠。
排查发现纠缠比蓝图标记的深：GitHub OAuth 是应用登录门槛（App.tsx 无账号连界面都进不去），
spaces.json 每 5 分钟同步 GitHub 仓库，git_ops 所有凭据硬依赖 github_token。

## 边界（保留项）

- `server_software.rs` 的 GitHub 镜像管理：用途是 Releases 下载加速，与 git 后端无关，保留
- `gitea_migrate_repo` 对 GitHub 的引用：迁移功能需要读旧家，保留
- `cicd.rs` 后端命令：保留，待 gitea-integration「Gitea Actions workflow 生成」卡改造
- DB 表（github_mirrors、settings 旧 key 等）：代码停用但表不删，避免旧版本升级 migration 断裂（R05）

## 任务卡

### ✅ D1. 免登录改造（去掉 GitHub OAuth 登录门槛）
- status: done
- complexity: M
- files: src/App.tsx, src/components/auth/LoginPage.tsx（删）, src/components/layout/Sidebar.tsx, src-tauri/src/commands/github.rs（删）, src-tauri/src/commands/settings.rs, src-tauri/src/lib.rs, src/lib/commands.ts
- acceptance: 应用启动直接进主界面，无登录页；github.rs 及 8 个 OAuth 命令删除；Sidebar 账户区与「应用设置」GitHub OAuth 弹窗删除；健康检查移除 GitHub Token 项；GLOBAL_KEYS 移除 github_client_id/secret；typecheck + cargo test 通过

### ✅ D2. 移除 GitHub 发布 / 导入 / PR / CI 状态入口
- status: done
- complexity: M
- files: src/components/dashboard/PublishModal.tsx（删）, src/components/dashboard/ImportRepoModal.tsx（删）, src/components/dashboard/ProjectCard.tsx, src/components/dashboard/RepoRegistryModal.tsx, src/components/dashboard/CicdModal.tsx, src/components/manage/ManagePage.tsx, src-tauri/src/commands/publish.rs, src/lib/commands.ts
- acceptance: 发布按钮 / 从 GitHub 导入 / PR compare 链接 / Actions 运行状态显示全部移除；publish.rs 仅删 github_create_repo / git_push_to_github / get_token，通用工具（WSL 路径、scan_local_git 等）保留；CicdModal 保留配置 tab、删 runs tab；typecheck 通过

### ✅ D3. 删除 spacesSync（单机化，跨空间 GitHub 云同步下线）
- status: done
- complexity: S
- files: src/lib/spacesSync.ts（删）, src/hooks/useSpacesSync.ts（删）, src/components/spaces/SpacesPage.tsx（删，已无引用的死代码）, src/components/dashboard/Dashboard.tsx, src/components/dashboard/ProjectCard.tsx, src/components/dashboard/ProjectModal.tsx
- acceptance: spacesJson prop 链（App → Dashboard → ProjectCard）拆除；跨空间感知/接续 UI、可发现项目区块、push 后 catalog 上报全部移除；typecheck 通过

### ✅ D4. git_ops 凭据去 GitHub 化
- status: done
- complexity: M
- files: src-tauri/src/commands/git_ops.rs
- acceptance: git_clone/fetch/pull/push/upstream_behind 不再硬依赖 settings.github_token；凭据链改为 git credential helper → gitea_instances token 前缀匹配 → ssh agent → default；无 token 时不再报「未登录 GitHub 账户」；cargo test 通过

## 决策记录

- 免登录而非换 Gitea 登录：炼境是单人本地工具，"登录"概念本身无收益；Gitea 身份已由 gitea_instances.access_token 承载，远端操作按需取凭据
- spacesSync 直接删而非迁 Gitea：用户确认单机使用，跨空间感知无真实场景
- git 凭据优先走 git credential helper：与用户 CLI 使用同一凭据源（Windows Credential Manager），GitHub/Gitea 通吃，炼境不再自管 git 凭据

## 复盘笔记

【复盘】GitHub 退役清理（D1-D4，2026-07-02）
任务类型: 架构调整
复杂度: M×3 + S×1
实际轮数: 1轮（预估 2 轮）
是否返工: 否
有效策略: 先全量排查（grep 全代码库）再动手，发现蓝图未标记的两个深耦合（登录门槛、spacesSync 定时同步）；按"前端入口 → 封装层 → 后端命令 → 凭据层"顺序拆除，每层完成即 typecheck
遗留风险: ① Gitea token 作 basic auth username 的凭据方式（userpass_plaintext(token, "")）未在真实 Gitea 实例上验证过 push；② CicdModal 仍生成 GitHub Actions 模板，待 gitea-integration 的 workflow 改造卡处理；③ 前端测试清零（parseRepoPath 测试随功能删除），vitest 配了 passWithNoTests
auto_applied_rules: R01, R05
rule_effectiveness: R01=有效（删命令时同步删 commands.ts 封装，无断层）, R05=有效（保留 DB 表不删避免 migration 断裂）

【陷阱记录】servers.rs 存量测试 schema 漂移（顺手修复）
测试 setup 的 CREATE TABLE 手抄了 project_server_map 旧 schema，缺 deploy_type/container_name/start_command 三列，与 db.rs migrate() 不一致导致 2 个测试常红。已补齐。根因：测试建表语句是手抄副本而非复用 migrate()，schema 演进时必然漂移——后续新测试应从 db::migrate 复制对应段（CONVENTIONS 测试模板已有此要求）。
