大 PR 周知 · feat/phase1-kanban-frontend
这一版表面是「看板规划界面」,但真正的重心是:为了把这个界面做扎实, 顺手把从「线缆契约」到「渲染层分层」的整条栈重塑了一遍。 所以看待它的角度不是「加了个看板」,而是 —— 工程骨架成型,看板是它的第一个落地验证。
看板界面、数据层、主题、设置流跑通,先有一个能用的 Phase-1。
→对照「会不会阻碍后续迭代」逐条审,定位事务边界、看板投影、并发框架等问题。
→一批 follow-up:服务端 board projection、原子事务、幂等 mount、typed 冲突、退役过度设计的并发框架。
client.tasks.move() / client.projects.board() · 传输层按运行时拆分(node / electron-renderer / electron-main) + 凭证 seam@eyrie/api + @eyrie/client做了什么协议从 daemon 里抽出来,独立成「契约包 + 语义客户端包」两层。
新设计@eyrie/api 是唯一协议真相源;三端只消费它,渲染层只能经 @eyrie/client 碰 daemon。
为什么协议一处定义、端到端类型安全,CLI 和桌面端不会再各写一套、互相漂移。
做了什么新增 use-case 层(建项目、建任务带关系、挂载 repo),多步写入包进一个 SQLite 事务。
新设计「要么全成要么全败」由服务端保证;唯一约束冲突映射成 typed 409,不再裸 500。
为什么前端不再串「建任务→挂 repo→挂 label」然后兜半成功,数据一致性收回到服务端。
做了什么新端点 GET /api/projects/:id/board,直接返回按 status 排好的列 × 列内按 position 排好的任务。
新设计列结构 / 排序 / 分组的权威在服务端;前端只渲染投影。
为什么不再把全项目任务拉到内存重建列,性能不随任务数恶化,也为将来实时同步留好接缝。
做了什么repo 主键从文件路径改为 git_common_dir(仓库的规范身份),迁移 0002。
新设计同一仓库自动去重;task_repos 加 worktree_path,为「每任务一个 worktree」铺路。
为什么文件夹改名 / 搬动 / 多 worktree 都不再破坏 repo 身份,是 Agent 工作区隔离的地基。
做了什么shared → entities → features → app 单向依赖分层,并做了去重收敛。
新设计依赖方向用 eslint-plugin-boundaries 在 CI 里作为 error 强制(不是 warning)。
为什么feature 之间不能再互相深 import、依赖不会反转;规模一大也不靠肉眼 review 守。
做了什么light + dark 双色板,全走 --color-* token(组件禁 hex);与传输平行的凭证 seam。
新设计侧栏切换并持久化、原生窗口 chrome 跟随主题;请求 401 时自动失效凭证 + 重试一次。
为什么主题不留死角;daemon 重启换 token 后客户端无感续上,本地/远程两种部署形态都成立。
以上架构都不是空转 —— 它们支撑起一个对照原型做出来的、能用的 Phase-1 看板:
另: 一层 CI 护栏在背后兜底 —— 包边界 / 渲染层边界 / 注释覆盖 / 语言 · 密钥 · lockfile 检查,全部随每次 push 跑。