Files
DevFlow/docs/02-架构设计/专项设计/项目知识图谱与任务队列系统-2026-06-26.md
绝尘 80239500f1 新增: 知识图谱设计文档 + AI原生上下文地图设计(父②⑥实施基础)
- 项目知识图谱与任务队列系统-2026-06-26.md:AI Working 终局设计(任务网络queue/parent/links + 事件流 + 基础设施 + 注入 + Mission Control 五视图),父②Phase1 + 父⑥Phase2-3 已据此实施落地
- AI原生上下文地图与去AI化进化系统-2026-06-26.md:AI Working 定位体系设计
2026-06-27 01:22:46 +08:00

39 KiB
Raw Blame History

项目知识图谱与任务队列系统 — 设计

日期: 2026-06-26 状态: 设计阶段(待评审) 前提: AI Working — AI 是系统的主要操作者,人是监督者与决策者 关联: ARCHITECTURE.md §AI Working 定位体系 / 多工程方案子1-子5/ todo.md 灵感模块 + AI 对话目标丢失


〇、核心命题

DevFlow 的终局是AI 拥有完整的项目信息知识图谱,比任何人都了解项目。

人在 AI Chat 中描述目标AI 基于图谱自主分解任务、编排依赖、执行推进、自检完成度。人的角色是决策确认和方向把控,不是填表单和翻列表。

本文档定义支撑这一终局所需的数据结构、关联关系和实现路径。


一、问题诊断

1.1 当前缺失

缺失 后果
无全局工作队列 任务散落在各项目下,无法跨项目看"所有待办"
需求无承载体 Idea 是模糊灵感Task 是具体执行,中间缺"已确认要做但还没排期"的需求层
决策无队列 AI Agentic Loop 中产生的"需要人决策"事项散落在对话流里,错过即丢失
任务无纵向关联 无法表达"一个需求拆出多个子任务"(当前用 [子N] 标题前缀硬编码)
任务无横向关联 无法表达任务间依赖关系AI 无法做拓扑排序编排
需求无结构化规格 description 是纯文本AI 无法提取验收标准做自检
无基础设施记录 AI 不知道项目用了什么数据库/缓存/MQ
无统一事件流 回答"上周做了什么"需跨 6 张表 JOIN
溯源链断裂 无法从任务回溯到灵感、从灵感到对话、从对话到决策

1.2 核心原则

每一条数据结构都不是给人填的表单,是给 AI 消费的上下文。

前端可视化是最后的投影层,不是数据结构存在的原因。


二、数据模型设计

当前迁移版本 V27V21=消息拆分 / V22=灵感评估 / V23=嵌入状态 / V24=灵感关联 / V25=评估唯一约束 / V26=任务索引 / V27=审批状态统一)。本设计从 V28 起。

2.1 Task 表扩展V28 迁移)

-- 队列字段AI 行为约束信号
ALTER TABLE tasks ADD COLUMN queue TEXT NOT NULL DEFAULT 'todo';
    -- backlog(需求池) / todo(待办池) / decision(待决策池) / active(执行中) / done(已完成)

-- 父任务 IDAI 分解-执行编排结构
ALTER TABLE tasks ADD COLUMN parent_id TEXT REFERENCES tasks(id);
    -- NULL = 叶子任务;非空 = 子任务(限制 1 级,不允许孙任务)

-- 结构化需求规格AI 可读写的执行规格
ALTER TABLE tasks ADD COLUMN content_json TEXT;
    -- JSON: { background, acceptance_criteria[], scope[], technical_design, custom_fields }

queue 字段语义

queue 值 含义 AI 行为约束
backlog 需求池:确认有价值,未排期 AI 不自主推进,等待人确认排期
todo 待办池:已排期,待执行 AI 可自主推进到 active + in_progress
decision 待决策池:需要人拍板 AI 暂停执行,请求人类输入
active 执行中:正在推进 AI 按状态机推进
done 已完成 终态

queue 与 status 的关系

两个正交维度,各管各的:

queue管理维度backlog → todo → active → done
                                ↑
                           decision临时池

status执行维度todo → in_progress → in_review → testing → done
                    ↑                                       
                 blocked / cancelled

一致性约束IPC 层校验,不进状态机):

  • queue=done 时 status 必须=done
  • queue=backlog 时 status 必须=todo
  • queue=active 时 status ∈ {in_progress, in_review, testing}
  • status=blocked 时 queue 可为 decision 或 active

parent_id 纵向关联

  • 限制 1 级嵌套parent 有 parent_id 时拒绝再创建子任务
  • 父任务=容器模型:父任务 status 不走状态机(不能 advance_task由子任务聚合计算
  • 聚合规则
子任务状态 父任务推导 status
全 todo todo
任一 in_progress in_progress
任一 blocked blocked
全 done/cancelled done

content_json 结构

{
  "background": "当前 DevFlow 一个项目只能绑一个目录...",     // 背景AI 理解动机
  "acceptance_criteria": [                                    // 验收标准AI 自检清单
    "看板三列拖拽",
    "跨项目展示任务"
  ],
  "scope": ["前端 Board.vue", "task_repo", "router"],        // 影响范围AI 操作边界
  "technical_design": "新增 queue 字段 + task_links 表...",   // 技术方案AI 执行路径
  "custom_fields": {}                                         // 扩展字段
}

定位:不是人填的表单,是 AI 和人协作填充的结构化规格。AI 从对话中提取信息填充,人确认后 AI 执行中用 acceptance_criteria 自检。

CREATE TABLE task_links (
    id          TEXT PRIMARY KEY,
    source_id   TEXT NOT NULL REFERENCES tasks(id),
    target_id   TEXT NOT NULL REFERENCES tasks(id),
    link_type   TEXT NOT NULL,   -- depends_on / blocks / relates_to
    remark      TEXT,            -- 可选备注
    created_at  TEXT NOT NULL
);
CREATE INDEX idx_task_links_source ON task_links(source_id);
CREATE INDEX idx_task_links_target ON task_links(target_id);
类型 语义 AI 用途
depends_on source 依赖 targettarget 完成后 source 才能开始) 拓扑排序调度
blocks source 阻塞 targetsource 不完成则 target 无法推进) 依赖的反向声明
relates_to 弱关联,无执行约束 上下文提示

Idea 的 related_ids JSON 方案是 todo.md 待修的 P1 问题(#8 关联双向同步。JSON 列的缺陷:

  • 无类型区分(不能表达 depends_on vs relates_to
  • 单向A 关联 B 不意味着 B 知道)
  • 无法高效反向查询("谁依赖了我"需全表扫描 JSON

独立表方案:有类型、双向查询、可扩展。

边界约束

约束 规则
循环依赖 创建 link 时 BFS 检测环,拒绝 A→B→A
跨项目 允许(现实中有跨项目依赖)
软删除 Task 软删除时保留 link恢复后关系还在
执行约束 AI 应遵守 depends_on检查依赖全 done 才推进),人可绕过

2.3 project_services 表(基础设施配置)

CREATE TABLE project_services (
    id           TEXT PRIMARY KEY,
    project_id   TEXT NOT NULL REFERENCES projects(id),
    name         TEXT NOT NULL,          -- "主数据库" / "缓存" / "消息队列"
    service_type TEXT NOT NULL,          -- mysql/postgresql/sqlite/redis/mongodb/mq/api/other
    endpoint     TEXT,                   -- 连接地址localhost:3306 / URL
    config_json  TEXT,                   -- 类型相关配置 JSON
    environment  TEXT NOT NULL DEFAULT 'development', -- development/staging/production
    remark       TEXT,
    created_at   TEXT NOT NULL,
    updated_at   TEXT NOT NULL
);

定位AI 执行任务时的基础设施上下文。AI 知道"这个项目用了什么数据库、Redis 在哪、有没有 MQ"。

边界

  • ⚠️ 不存敏感凭证(密码/密钥)—— 只存连接信息,凭证走环境变量/外部密钥管理
  • 这是元数据,不是运维工具 —— 不做连接池/健康检查

2.4 project_events 表(统一事件流)

CREATE TABLE project_events (
    id              TEXT PRIMARY KEY,
    project_id      TEXT NOT NULL REFERENCES projects(id),
    event_type      TEXT NOT NULL,
        -- idea_created / idea_promoted / idea_evaluated
        -- task_created / task_advanced / task_blocked / task_completed
        -- workflow_started / workflow_completed
        -- knowledge_extracted / knowledge_referenced
        -- service_added / service_updated
        -- module_bound / module_unbound
        -- decision_made
    entity_type     TEXT,               -- idea/project/task/workflow/knowledge/module/service
    entity_id       TEXT,               -- 对应实体 ID
    from_state      TEXT,               -- 状态变化前
    to_state        TEXT,               -- 状态变化后
    context_json    TEXT,               -- 事件附加上下文
    source          TEXT,               -- ai / human / system
    conversation_id TEXT,               -- 触发事件的对应对话AI Working 溯源)
    created_at      TEXT NOT NULL
);
CREATE INDEX idx_project_events_project ON project_events(project_id, created_at);
CREATE INDEX idx_project_events_entity ON project_events(entity_type, entity_id);

定位AI 精准检索的基础。回答"上周做了什么""这个任务为什么 blocked""这个决策是什么时候做的"。

与 knowledge_events 的关系knowledge_events 保持不变知识库专属向后兼容。project_events 是全局事件流knowledge 事件同时写入两者。

埋点策略:在现有 IPC 命令create_task / advance_task / create_project 等)的执行后追加事件写入。不侵入业务逻辑,用 hook/after 模式。

2.5 Inbox 项目project_id NOT NULL 兼容)

需求池的任务可能还没决定归到哪个项目。保持 project_id NOT NULL 约束,系统初始化自动创建 Inbox 项目:

  • name = "收件箱"
  • status = planning
  • 特殊标记不可删除
  • 不参与 Dashboard 统计

三、完整图谱视图

                       💡 Idea
                        │  ╲
               evaluations  related_ids
                      │
                 promoted_to
                      │
                      ▼
     ┌────── 📂 Project ──────────────────────────────────┐
     │               │    ╲                               │
     │     modules  services  project_events               │
     │     (多工程)  (基础设施) (统一事件流)                  │
     │                                                    │
     │               │    ╲                               │
     │      parent   links   workflow                      │
     │      (纵向)  (横向)   (执行)                         │
     │         │       │        │                          │
     │         ▼       ▼        ▼                          │
     │      🔀 Task ── Task ── ⚙️ Workflow                  │
     │         │                    ╲                     │
     │      content_json     nodes   branches              │
     │      (执行规格)      (节点执行) (分支)                │
     │                                                    │
     │      queue (管理池: backlog/todo/decision/active/done) │
     │                                                    │
     │      ai_tool_executions ←─ conversation_id ──→ 💬 对话  │
     │      (AI 操作审计)              (AI Working 留痕)       │
     │                                                    │
     │      knowledges ←── knowledge_events                 │
     │      (经验沉淀)    (知识事件)                          │
     └────────────────────────────────────────────────────┘

     每条线都是 AI 可查询、可推理的关系。

四、AI 上下文注入

4.1 get_project_context 工具

AI "比人懂项目"的技术实现 —— 一次调用获得完整心智模型:

// get_project_context(project_id) →
{
  "project": {
    "id", "name", "status", "stack",
    "created_from": { "idea_id", "ai_analysis", "score" }
  },
  "modules": [
    { "name", "path", "stack", "dependencies": [...] }
  ],
  "services": [
    { "type", "endpoint", "environment" }
  ],
  "task_summary": {
    "total", "by_status", "by_queue",
    "blocked_tasks": [{ "id", "title", "blocked_by" }],
    "in_progress": [{ "id", "title", "progress" }]
  },
  "task_graph": {
    "parent_children": { "parent_id": ["child_id", ...] },
    "dependencies": [{ "from", "to", "type" }]
  },
  "recent_events": [/* 最近 20 条事件 */],
  "key_decisions": [/* 重要决策记录 */],
  "known_pitfalls": [/* knowledges kind=pitfall */]
}

4.2 自动注入策略

此上下文可自动注入到每次 AI 对话的 system prompt类似现有 useAiContext让 AI 在每轮交互中都带着完整的项目认知。

Token 预算:完整上下文可能较大,需分级注入:

  • L0始终注入project 基础信息 + task_summary~500 token
  • L1对话开始注入task_graph + recent_events~2000 token
  • L2按需调用full contextget_project_context 工具)

五、AI 工具注册表

工具 用途 风险等级
create_task 创建任务(支持 queue/parent_id/content_json low
list_tasks 查询(支持 queue/parent_id/status 筛选) low只读
move_task_queue 跨池移动backlog→todo→active→done medium
create_task_link 建立任务关联depends_on/blocks/relates_to medium
remove_task_link 解除关联 medium
list_task_links 查询任务关联AI 编排调度用) low只读
get_task_tree 获取父子任务树(含子任务进度聚合) low只读
update_content 更新 content_json 结构化规格 medium
get_project_context 获取项目完整图谱投影 low只读
get_project_timeline 查询项目事件流 low只读
add_project_service 添加基础设施配置 medium
list_project_services 查询基础设施 low只读

已有工具(扩展参数):advance_taskupdate_tasklist_tasks


六、AI Working 完整工作流

人在 AI Chat 说:"我想给 DevFlow 加队列看板功能"
  │
  ▼ ① AI 创建需求
  create_task(
    title="队列看板功能",
    queue="backlog",
    content_json={ background, acceptance_criteria, scope, technical_design }
  )
  │
  ▼ ② 人确认需求AI Chat 内审批)
  人修改 content_json → AI 执行 move_task_queue(backlog → todo)
  │
  ▼ ③ AI 自主分解
  AI 创建子任务parent_id 指向父任务):
    child-1: "V28 迁移 + queue 列 + task_links 表"
    child-2: "TaskRecord + Repo 扩展"
    child-3: "Board.vue 看板视图"
    child-4: "AI 工具注册"
  │
  ▼ ④ AI 建立依赖
  create_task_link(child-3, depends_on, child-1)
  create_task_link(child-3, depends_on, child-2)
  create_task_link(child-4, depends_on, child-2)
  │
  ▼ ⑤ AI 按拓扑序执行
  拓扑排序child-1 → child-2 → child-3 ∥ child-4
  AI 逐个 advance_task(todo → in_progress → ... → done)
  每完成一个检查后继解锁
  每步操作写入 project_events
  │
  ▼ ⑥ AI 自检
  对照 content_json.acceptance_criteria 逐项检查
  │
  ▼ ⑦ 父任务聚合
  全部子任务 done → 父任务自动聚合 done
  AI 报告人类:"队列看板功能已完成"

七、改动影响评估

改动 量级 风险
df-storage V28 queue 列 + parent_id 列 + content_json 列 + task_links 表 + project_services 表 + project_events 表 低(纯加列加表)
df-types TaskRecord 加 3 字段 + TaskLink / ProjectService / ProjectEvent 类型
task_repo insert/update 补字段 + TaskLinkRepo / ProjectServiceRepo / ProjectEventRepo
task_state_machine 不改
父任务聚合逻辑 新增(子任务 status 变化时重算父 status 中(需定义聚合规则)
事件埋点 在现有 IPC 命令后追加事件写入 hook 模式,不侵入)
IPC create_task 加可选参数 + link/service/event CRUD + move_task_queue
AI 工具 新增 12 个工具注册 + create_task 参数扩展
前端 Board 看板 新增视图
前端 Task 详情 结构化渲染 content_json + 子任务列表 + 关联面板
前端项目详情 基础设施面板 + 时间线面板
Inbox 项目 系统初始化创建

八、实现路径(按 AI 价值排序)

Phase 1 — 任务网络基础AI 编排的地基)

任务 内容 依赖
V28 迁移 queue + parent_id + content_json 列 + task_links 表
TaskRecord 扩展 df-types + df-storage models 补字段 V28
TaskLinkRepo CRUD + 按 source/target 查询 + 循环依赖检测 V28
task_repo 扩展 insert/update 补 queue/parent_id/content_json TaskRecord
IPC: create_task 扩展 加 queue/parent_id/content_json 可选参数 task_repo
IPC: task_link CRUD create/remove/list_task_links TaskLinkRepo
IPC: move_task_queue 跨池移动 + 一致性约束校验 task_repo
父任务聚合 子任务 status 变化时重算父 status task_repo
AI 工具注册 create_task_link / remove_task_link / list_task_links / get_task_tree / move_task_queue / update_content IPC

Phase 2 — 统一事件流AI 精准检索的地基)

任务 内容 依赖
project_events 表 V28或 V29 独立迁移)
ProjectEventRepo CRUD + 按 project_id 查询 + 按 entity 查询 project_events
事件埋点 create_task / advance_task / create_project / idea_promote 等追加事件写入 ProjectEventRepo
IPC: get_project_timeline 事件流查询(支持时间范围/事件类型筛选) ProjectEventRepo
AI 工具注册 get_project_timeline IPC

Phase 3 — 项目基础设施AI 上下文补全)

任务 内容 依赖
project_services 表 V28或 V30 独立迁移)
ProjectServiceRepo CRUD project_services
IPC: service CRUD add/update/remove/list_project_services ProjectServiceRepo
modules 表 复用多工程方案子1
AI 工具注册 add_project_service / list_project_services IPC

Phase 4 — AI 上下文注入AI 使用知识图谱的接口)

任务 内容 依赖
get_project_context 工具 聚合查询返回完整图谱投影 Phase 1-3
分级注入策略 L0 始终注入 / L1 对话开始 / L2 按需调用 get_project_context
useAiContext 扩展 对接现有上下文注入机制 分级注入策略

Phase 5 — 前端可视化(人的查看层)

任务 内容 依赖
Board 看板 三列拖拽 + 跨项目展示 + 快速录入 Phase 1
Task 详情增强 content_json 结构化渲染 + 子任务列表 + 关联面板 Phase 1
项目时间线 事件流可视化 Phase 2
基础设施面板 服务列表 + 增删改 Phase 3
项目图谱视图 全景关系图(可选,优先级最低) Phase 1-3

九、关键设计决策记录

# 决策点 选择 理由
D1 queue vs status 扩展 新增 queue 字段 正交维度,状态机不动,职责分离
D2 parent_id 嵌套深度 限制 1 级 避免递归复杂度和进度幻觉
D3 父任务语义 容器模型status 聚合计算 父任务不执行工作流
D4 横向关联 独立 task_links 表 有类型、可双向查询,避免 JSON 方案已知缺陷
D5 需求结构化 content_json + description 并存 结构化渲染 + 自由描述互补
D6 project_id 约束 保持 NOT NULL + Inbox 项目 最小改动GTD 收件箱模式
D7 depends_on 执行约束 AI 应遵守,人可绕过 过强约束会被绕过
D8 循环依赖检测 创建 link 时 BFS 检测 task_links 数据量小,检测成本低
D9 事件流与 knowledge_events 并存不替代 knowledge_events 向后兼容
D10 敏感凭证 不存入 project_services 安全边界,凭证走环境变量
D11 数据结构定位 为 AI 消费设计,非为人填表单 AI Working 核心原则
D12 实现优先级 按 AI 价值排序非按 UI 需求 AI Working 核心原则

十、任务全景视图设计Mission Control

核心目标:一个页面,看清全部项目的任务推进过程、状态分布、依赖关系、时间维度、卡点阻塞。

10.1 信息架构

用户要的是五个维度的清晰呈现,对应五种视图模式:

维度 视图 核心问题 数据来源
推进过程 看板视图 任务在 backlog→todo→active→done 各池的分布和流动 tasks.queue
状态分布 热力矩阵 每个项目 × 每个状态的交叉分布,一眼看全局 tasks GROUP BY project, status
依赖关系 DAG 图 任务间依赖链、拓扑序、关键路径 task_links + parent_id
时间维度 时间线 任务的创建/推进/完成时间线,最近活跃度 tasks.created_at/updated_at + project_events
卡点阻塞 阻塞面板 哪些任务 blocked、为什么 blocked、阻塞了谁 tasks.status=blocked + task_links(blocks)

10.2 路由 & 页面结构

/mission-control  →  MissionControl.vue壳页面顶部 Tab 切换五种视图)
  ├── Tab 1: 看板KanbanView.vue        — 默认视图
  ├── Tab 2: 矩阵MatrixView.vue
  ├── Tab 3: 依赖图DagView.vue
  ├── Tab 4: 时间线TimelineView.vue
  ├── Tab 5: 阻塞BlockedView.vue
  └── 公共侧栏: 筛选器(项目/优先级/负责人)

侧栏新增导航项:🚀 任务全景Mission Control位于"任务"和"知识库"之间。

10.3 各视图详细设计

10.3.1 看板视图KanbanView— 推进过程

┌─────────────────────────────────────────────────────────────────────────┐
│  💡 需求池(3)     │  📋 待办(5)        │  🔨 执行中(2)    │  ✅ 完成(12) │
│                   │                    │                  │              │
│ ┌───────────────┐ │ ┌────────────────┐ │ ┌──────────────┐ │ ┌──────────┐ │
│ │ 队列看板功能   │ │ │ V28 迁移+表结构 │ │ │ TaskRecord扩 │ │ │ 软删除   │ │
│ │ DevFlow · P1   │ │ │ DevFlow · P0    │ │ │ DevFlow·P1   │ │ │ B-13     │ │
│ │ 🔗 4 子任务    │ │ │ 🔗 → Board.vue  │ │ │ ▓▓▓▓▓░░ 70%  │ │ │ 06-16    │ │
│ └───────────────┘ │ └────────────────┘ │ └──────────────┘ │ └──────────┘ │
│ ┌───────────────┐ │ ┌────────────────┐ │                                  │
│ │ 插件机制      │ │ │ DagView 依赖图  │ │                                  │
│ │ DevFlow · P2   │ │ │ DevFlow · P1    │ │                                  │
│ └───────────────┘ │ └────────────────┘ │                                  │
│                   │                    │                                  │
│  ⚠️ 待决策(1)     │                    │  🚫 阻塞(1)                      │
│ ┌───────────────┐ │                    │ ┌──────────────┐                 │
│ │ API 协议选型   │ │                    │ │ IPC 层封装    │                 │
│ │ ❓需确认       │ │                    │ │ 被 V28 阻塞   │                 │
│ └───────────────┘ │                    │ └──────────────┘                 │
└─────────────────────────────────────────────────────────────────────────┘

列定义(对应 queue 值):

queue 子列 说明
需求池 backlog 确认有价值,未排期
待决策 decision 需要人拍板,红色高亮
待办 todo 已排期,可执行
执行中 active 正常 按状态机推进中
执行中 active 阻塞 status=blocked红色边框 + 阻塞原因
完成 done 终态

卡片信息密度

┌──────────────────────────┐
│ 任务标题1 行截断)       │  ← title
│ 项目名 · 优先级标签        │  ← project.name + priority badge
│ 🔗 3 子任务 / 🔗→ 依赖任务  │  ← parent_id 子任务计数 / depends_on 链
│ ▓▓▓▓░░ 60%               │  ← 子任务完成率(父任务)/ 状态机进度(叶子)
│ 🚫 被 xxx 阻塞             │  ← blocked 时显示阻塞源(仅红色卡片)
│ 06-26                     │  ← updated_at相对时间
└──────────────────────────┘

交互

  • 点击卡片 → 跳转 TaskDetail
  • 卡片左滑/右滑 → 快捷 move_task_queue需确认
  • 列头显示计数 + 拖拽提示
  • 顶部全局筛选:项目(多选)/ 优先级 / 负责人

跨项目展示卡片左上角的项目色条3px区分项目归属悬停显示项目全名。

10.3.2 热力矩阵MatrixView— 状态分布

              todo   in_progress  in_review  testing  blocked  done   总计
DevFlow        3        2            1          0        2       12     20
u-ask          1        0            0          0        0        5      6
u-img          0        1            0          0        0        3      4
workpod        2        0            0          0        0        1      3
─────────────────────────────────────────────────────────────────────────
总计           6        3            1          0        2       21     33

视觉每个格子是一个色块数字越大颜色越深热力图。blocked 列红色系done 列绿色系,其他列蓝色系

交互

  • 点击格子 → 展开该项目该状态的任务列表inline accordion 或侧抽屉)
  • 行/列可排序(按总计降序)
  • 顶部摘要条:33 任务 · 2 阻塞 · 3 执行中 · 完成率 64%

AI 消费价值get_project_context 的 task_summary.by_status / by_queue 就是这个矩阵的数据源。AI 读到 blocked: 2 就知道要主动排查阻塞。

10.3.3 依赖图DagView— 依赖关系

     ┌──────────┐
     │ V28 迁移  │ ← 无依赖,可立即执行
     │  (done)   │
     └────┬─────┘
          │ depends_on
          ▼
     ┌──────────┐
     │ TaskRepo  │
     │ 扩展(todo) │
     └──┬────┬──┘
        │    │
        ▼    ▼
  ┌─────────┐  ┌──────────┐
  │ IPC 封装 │  │ AI 工具   │
  │(blocked)│  │ 注册(todo) │ ← 被 V28 阻塞(虚线 blocks
  └────┬────┘  └──────────┘
       │
       ▼
  ┌─────────┐
  │Board.vue │
  │ (todo)   │
  └─────────┘

节点视觉

  • 状态颜色todo=灰 / in_progress=蓝 / in_review=黄 / testing=橙 / done=绿 / blocked=红
  • 父任务=大圆角矩形,子任务=小圆角矩形,用虚线框分组
  • depends_on=实线箭头 → / blocks=红色虚线箭头 ⇢ / relates_to=灰色点线 ⋯

布局算法

  • 拓扑排序分层Sugiyama / 简化版:按依赖深度分层)
  • 同层节点水平排列
  • 父子关系用虚线框圈住

交互

  • 点击节点 → 高亮该节点的所有依赖链(上游+下游路径加粗)
  • 双击节点 → 跳转 TaskDetail
  • 悬停节点 → 显示 tooltip标题/状态/阻塞原因)
  • 右键节点 → 快捷操作(推进/解除阻塞/编辑依赖)
  • 顶部工具栏:仅看阻塞链 / 仅看关键路径 / 按项目着色

关键路径标注:拓扑排序后,从入度=0 的节点到出度=0 的节点的最长路径,用粗线标注。

数据量控制

  • 默认只渲染 active + todo + blocked 的任务(隐藏 done/cancelled
  • 超过 30 个节点时提示"节点过多,请按项目筛选"
  • 支持按项目过滤

10.3.4 时间线TimelineView— 时间维度

两种模式:

模式 A甘特图横向时间轴

         06-24  06-25  06-26  06-27  06-28  06-29  06-30
V28迁移   ████████←done
TaskRepo          ████████←in_progress 70%
IPC封装                   ██████←blocked(等V28)
Board.vue                       ░░░░░░←todo(未开始)
AI工具注册                      ░░░░░░←todo
  • 横轴=日期created_at → 预估完成 / 实际 updated_at
  • 每行一个任务,条形颜色=状态色
  • blocked 段叠加红色斜纹
  • 父任务行展开显示子任务

模式 B事件流纵向时间轴

  今天 06-26
  │
  ├─ 14:30  ✅ V28 迁移完成        DevFlow
  ├─ 13:15  🔨 TaskRepo 扩展开始    DevFlow
  ├─ 11:00  🚫 IPC 封装被阻塞       DevFlow  ← 红色高亮
  │         原因:等待 V28 迁移完成
  ├─ 09:45  💡 创建需求"队列看板"   DevFlow
  │
  昨天 06-25
  │
  ├─ 22:10  ✅ B-27 审批状态统一    DevFlow
  ├─ 18:30  🔨 V28 迁移开始         DevFlow
  ...
  • 来源project_events 表
  • 事件类型图标 + 颜色区分
  • blocked/decision 事件红色高亮
  • 按天分组,可折叠
  • 支持按项目/事件类型筛选
  • 无限滚动加载

切换:顶部 Toggle 切换甘特/事件流两种模式。

10.3.5 阻塞面板BlockedView— 卡点

这是最重要的视图 —— 回答"哪里卡住了、为什么、阻塞了谁"。

┌─────────────────────────────────────────────────────────────────────┐
│  🚫 阻塞任务 (2)                                                    │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  🔴 IPC 层封装                                    DevFlow · P1       │
│     状态: blocked ← 3 天                                            │
│     阻塞原因: 等待 V28 迁移完成                                      │
│     阻塞了谁: ↓                                                     │
│        └─ Board.vue 看板视图 (todo无法开始)                        │
│        └─ AI 工具注册 (todo无法开始)                               │
│     连锁影响: 2 个下游任务被阻塞                                     │
│     [解除阻塞] [查看详情]                                           │
│                                                                     │
│  🔴 API 协议选型                                  u-ask · P0        │
│     状态: blocked ← 7 天  ⚠️ 长时间阻塞                             │
│     阻塞原因: 需要确认 REST vs GraphQL                              │
│     阻塞了谁: ↓                                                     │
│        └─ 后端 API 重构 (todo)                                      │
│        └─ 前端适配 (todo)                                           │
│     连锁影响: 3 个下游任务被阻塞                                     │
│     [解除阻塞] [查看详情]                                           │
│                                                                     │
├─────────────────────────────────────────────────────────────────────┤
│  ⚠️ 待决策 (1)                                                      │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ❓ 缓存策略选型                                  workpod · P2       │
│     队列: decision ← 2 天                                           │
│     决策内容: Redis vs 本地缓存                                     │
│     阻塞了谁: ↓                                                     │
│        └─ 缓存模块实现 (backlog)                                    │
│     [做出决策] [查看详情]                                           │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

数据来源

  • tasks WHERE status = 'blocked' → 阻塞任务列表
  • task_links WHERE target_id = :blocked_task_id AND link_type = 'depends_on' → 查谁被它阻塞
  • tasks WHERE queue = 'decision' → 待决策列表
  • BFS 遍历依赖链计算"连锁影响数"(下游被间接阻塞的任务总数)

关键视觉

  • 阻塞时间 > 3 天 → 黄色警告标记
  • 阻塞时间 > 7 天 → 红色闪烁标记 + 置顶
  • 连锁影响 > 3 → 加粗影响数
  • 每个阻塞项可展开"阻塞链"树形图

排序策略

  1. 连锁影响数降序(阻塞越多越优先处理)
  2. 阻塞时间降序(越久越紧急)
  3. 优先级降序

10.4 公共筛选器(侧栏)

所有视图共享的筛选维度:

┌──────────────────────┐
│  🔍 筛选             │
│                      │
│  项目                 │
│  ☑ DevFlow           │
│  ☑ u-ask             │
│  ☐ u-img             │
│  ☑ workpod           │
│                      │
│  优先级               │
│  ☑ P0 紧急           │
│  ☑ P1 高             │
│  ☑ P2 中             │
│  ☐ P3 低             │
│                      │
│  负责人               │
│  [全部 ▾]            │
│                      │
│  隐藏已完成           │
│  [开关]              │
│                      │
│  仅看阻塞链           │
│  [开关]              │
└──────────────────────┘

10.5 后端 API 设计

IPC Command 用途 参数
get_mission_kanban 看板视图数据(按 queue 分组) project_ids?, priority?
get_mission_matrix 热力矩阵数据project × status 交叉统计) project_ids?
get_mission_dag DAG 依赖图数据(节点+边) project_ids?, include_done?
get_mission_timeline 时间线数据(事件流 or 甘特图) project_ids?, date_from?, date_to?, mode
get_mission_blocked 阻塞面板数据(含连锁影响计算) project_ids?

性能考虑

  • 任务量级 ~50-200桌面应用单用户全量查询无压力
  • DAG 连锁影响用 Rust BFS 遍历,不走 SQL 递归
  • 时间线分页加载(每次 50 条事件)
  • 矩阵统计用 SQL GROUP BY project_id, status 一次查询

10.6 AI 消费场景

这些视图的数据结构同时也是 AI 的上下文:

AI 场景 数据来源 对应视图
"项目进展如何?" get_mission_matrix 热力矩阵
"有什么卡住了?" get_mission_blocked 阻塞面板
"下一步做什么?" get_mission_dag拓扑排序入度=0 的 todo 任务) 依赖图
"上周做了什么?" get_mission_timeline事件流 时间线
"这个需求拆得对不对?" get_task_tree + get_mission_dag 看板 + 依赖图

AI 自动排查阻塞:当 get_project_context 返回 blocked_tasks 非空时AI 可主动在对话中提示"检测到 2 个任务被阻塞,是否需要排查?"并附带阻塞链摘要。

10.7 实现优先级

优先级 视图 理由
P0 阻塞面板 最高价值:一眼看卡点,当前完全缺失
P0 看板视图 核心交互queue 流动可视化
P1 热力矩阵 全局分布:跨项目状态一览
P1 时间线(事件流模式) 追溯能力:做了什么/何时做的
P2 依赖图DAG 编排可视化:需要 task_links 先落地
P2 时间线(甘特图模式) 锦上添花:需要预估完成时间字段

P0 可独立先做:阻塞面板 + 看板视图只需要 tasks 表的 queue/status 字段Phase 1不依赖 task_links依赖图才需要


十一、边界与风险

10.1 已识别风险

风险 影响 缓解
queue 与 status 一致性 两个字段可能不同步 IPC 层强制校验约束规则
父任务聚合性能 子任务变化触发父重算 项目内任务量小(~50实时计算无压力
事件流写入失败 埋点失败影响事件完整性 事件写入失败不阻断主操作best-effort
get_project_context 体积 大项目上下文可能超 token 预算 分级注入 L0/L1/L2
task_links 循环依赖 死锁 BFS 检测 + 拒绝创建

10.2 不做的事

  • 不做无限嵌套任务树(限制 1 级)
  • 不做凭证存储/管理(安全边界外)
  • 不做事件流回填(历史数据不补事件,从上线时间点开始记录)
  • 不做前端拖拽排序的 sort_orderqueue 内排序按 priority + created_at
  • 不做看板的 WIP 限制(列宽限制,过度设计)