Pressidian
花园入口
笔记
项目
关于
实验室
GitHub
花园入口
笔记
项目
关于
实验室
GitHub

KNOWLEDGE PATHS

笔记库
当前位置
笔记库/前端/项目笔记/代达罗斯/考试/2026-07-30-仓库导入异步一致性

EXAM-20260730-02:仓库导入的分支与异步一致性

4 分钟阅读 · Note

目录树 578 篇

              • EXAM-20260730-02 答辩与现场接管记录
              • EXAM-20260730-02 交付说明
              • EXAM-20260730-02:仓库导入的分支与异步一致性
            • 代达罗斯前端考试索引
            • 前端能力画像
            • 深色模式
            • 阅卷报告:CrateDetailPageContent
            • 阅卷报告:ThemeProvider.tsx(第二次)
            • CrateDialog
          • 项目待做
          • 性能优化
          • UI设计
      • 前端技术栈
    • 笔记目录
    • CLAUDE.md
    • Vue 组件与 Render 函数

关联笔记 6

↗EXAM-20260730-02 答辩与现场接管记录同一路径↗EXAM-20260730-02 交付说明同一路径↗深色模式共同主题↗阅卷报告:CrateDetailPageContent共同主题↗阅卷报告:ThemeProvider.tsx(第二次)共同主题↗CrateDialog共同主题
  • EXAM-20260730-02:仓库导入的分支与异步一致性

EXAM-20260730-02:仓库导入的分支与异步一致性

历史选题依据

最近练习已经能写出基本异步三态和提交边界,但仍需要证明以下能力可以迁移到新场景:

  • 分清界面默认值、用户显式输入和接口返回值谁是当前数据源;
  • 在组件关闭或身份变化后,阻止过期异步结果污染下一次交互;
  • 从前端类型与调用点确认 payload,而不是用断言或猜测掩盖接口关系;
  • 用自动化测试验证竞态与错误路径,并在提交前清理调试遗留。

Issue 背景

用户通过顶部入口导入 GitHub 仓库时,会先校验仓库,再确认分支并创建项目。这个流程必须保证最终导入的分支与用户看到的一致,也不能让已经关闭的旧请求影响下一次打开弹窗。

当前现象

从 Header 打开 “Import Repository” 弹窗,可以观察到两个问题:

  1. 当仓库默认分支不是 main,用户没有主动指定分支时,校验结果已经返回真实默认分支,但确认界面和最终导入仍可能继续使用 main。
  2. 校验请求尚未结束时关闭弹窗,请求稍后完成仍可能写入旧预览;再次打开时可能看到上一轮仓库的状态。

验收标准

  • [ ] 用户未显式填写分支时,校验成功后展示接口返回的分支,并在导入 payload 中提交同一个值。
  • [ ] 用户在校验前显式填写了分支时,校验成功不得覆盖该选择,最终导入使用用户填写值。
  • [ ] 校验请求进行中关闭弹窗后,该请求无论成功还是失败,都不能在关闭后或下一次打开时恢复旧预览、旧错误或旧 loading 状态。
  • [ ] 返回编辑、修改仓库地址并重新校验时,只允许最新一次有效校验结果进入确认界面。
  • [ ] 校验失败时用户能感知错误并可修改输入后重试;现有凭据缺失/失效的恢复入口保持可用。
  • [ ] validation/import pending 期间不会因重复点击发出重复业务请求,按钮状态与可见文案能够表达当前阶段。
  • [ ] 至少新增两条自动化回归测试,分别覆盖“接口默认分支被采用”和“关闭或新一轮校验后旧结果被忽略”;测试只验证前端行为或可测试状态逻辑。
  • [ ] 目标范围通过 TypeScript 检查、lint、相关测试和 git diff --check,不留下临时日志、注释代码或无理由类型断言。

约束

  • 只修改前端组件、Hook、前端工具函数和前端测试。
  • 保持现有仓库校验接口与创建资源的公共契约,不改变调用方 Props。
  • 不要求复刻翻译 key、精确文案或复杂样式;错误提示的可感知语义仍属于验收范围。
  • 不新增运行时依赖。允许抽取小型纯函数或 Hook,但不要为单个弹窗引入全局状态。

不在范围内

  • 不修改 tRPC router、GitHub 服务、数据库、DAO、认证、环境变量或 Worker。
  • 不重构整个导入流程、Header 或通用 Dialog。
  • 不实现远程分支列表选择器。

三阶段考试规则

  1. 实现交付(60 分):可以正常使用 Agent、IDE、仓库搜索与类型跳转,完成代码、测试和 交付说明.md。
  2. 代码答辩(掌握分的一部分):提交实现后,独立回答 4–6 个基于你真实 diff 的问题。可以看最终代码和类型定义,但不要让 Agent 代答,也不要查看此前 Agent 对话。
  3. 现场接管(掌握分的一部分):答辩结束后才会揭示一个 15–30 分钟的相邻变化或故障题。

交付至少 42/60、掌握至少 24/40 才算真正通过;高交付分不能抵消掌握未通过。

交付物

  • 实现代码和自动化测试;
  • 填写本目录中的 交付说明.md;
  • 完成后明确告诉考官“实现阶段已提交”,不要自行进入答辩或猜测变化题。

起始线索

从 Header 的 “Import Repository” 入口和 ImportRepositoryDialog 组件开始,先画出“输入 → 校验结果 → 确认预览 → 创建 payload”的状态流。

Git 基线与出题验证

  • 基线提交:4e03802a81989b0ae6da6ca775d9fa789a93e773
  • 独立考试工作树:C:\tmp\daedalus-exam-20260730-02
  • 出题时工作树:干净、detached HEAD
  • 已确认当前前端实现可复现至少两个核心现象;服务端文件只用于读取契约,不属于答题范围。