feat: 支持依赖(deps)创建后编辑 (tsk_UQ7sNRM0Yi1L)
deps 此前仅建任务时可设,本次让 PATCH /api/tasks/:id 受理 deps, 拆解后可随时调整任务依赖,无需删重建。 - API:PATCH /api/tasks/:id 受理 deps:string[](类型校验) - Store.patchTask:写 deps 前复用建任务校验(存在/同项目/非自身) 并加 DFS 环检测(拒绝 A→B→A);越权/缺失/成环 → StoreError(400) - 仅允许在未进入执行链路的状态改 deps(与 complexity 同一组守卫) - 写后调 reconcileDeps 重算:未满足 ready→blocked、刚补全 blocked→ready, 广播 status.changed - 看板:任务详情加依赖编辑器(多选当前项目其它任务,排除自身与会成环者), 保存走 PATCH - 测试:加/删 dep、已 done 依赖放行、环检测、跨项目/缺失拒绝、 执行链路状态拒绝、status.changed 重算(test/patch.test.ts) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -735,6 +735,22 @@ li.ev-updated { --ev: var(--muted); }
|
||||
.dep-item:hover { background: var(--panel-2); border-color: var(--muted); }
|
||||
.dep-go { margin-left: auto; color: var(--faint); font-size: 12px; }
|
||||
.dep-item:hover .dep-go { color: var(--cyan); }
|
||||
/* 依赖编辑器 */
|
||||
.deps-edit-btn { margin-left: 8px; vertical-align: middle; }
|
||||
.dep-empty { font-size: 12px; color: var(--faint); padding: 4px 10px; }
|
||||
.dep-pick-list { max-height: 240px; overflow-y: auto; }
|
||||
.dep-pick {
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
font-size: 12px; padding: 4px 10px; cursor: pointer;
|
||||
background: var(--bg-deep); border: 1px solid var(--line-soft);
|
||||
border-left: 2px solid var(--line-soft);
|
||||
transition: border-color .12s, background .12s;
|
||||
}
|
||||
.dep-pick:hover { background: var(--panel-2); border-color: var(--muted); }
|
||||
.dep-pick.on { border-left-color: var(--cyan); }
|
||||
.dep-pick.on .dep-check { color: var(--cyan); }
|
||||
.dep-check { font-size: 13px; color: var(--faint); }
|
||||
.deps-edit-foot { display: flex; gap: 8px; margin-top: 6px; }
|
||||
.task-row.flash { animation: locate-flash 1.8s ease-out; }
|
||||
@keyframes locate-flash {
|
||||
0%, 35% { background: var(--amber-dim); box-shadow: inset 2px 0 0 var(--amber); }
|
||||
|
||||
Reference in New Issue
Block a user