修复: DOC-01 ARCHITECTURE 数据模型重写(删 9 虚构表+补 7 遗漏+字段对齐)

第六章数据模型段重写(其余 9 段未动)——删 9 虚构表(workflow_defs/runs/artifacts/connections/features/test_cases/test_runs/annotations/decisions)+补 7 遗漏(branches/node_executions/ai_conversations/ai_tool_executions/knowledges/knowledge_events/app_settings)+workflow 合并修正为单表 workflow_executions(dag_json 序列化)+字段对齐 models.rs/migrations.rs V1-V13(时间戳 INTEGER→TEXT 毫秒串,projects.idea_id 补外键)。主代理核查:虚构表零命中/CREATE TABLE 13 与 migrations.rs 一致/表名清单吻合。批2,另一会话文档核对 §1
This commit is contained in:
2026-06-15 05:30:06 +08:00
parent f93b7584ff
commit af8f74e29e

View File

@@ -263,214 +263,194 @@ pub struct Decision {
### SQLite 表结构 ### SQLite 表结构
> 真相源:`crates/df-storage/src/migrations.rs`V1-V13幂等迁移。下表对齐真实 schema字段/类型/默认值/外键与迁移文件一致。Rust 结构体见 `crates/df-storage/src/models.rs`。
**13 张业务表**(另含内部表 `schema_version` 记录迁移版本)。
```sql ```sql
-- 想法池 -- 想法池 (V1 建表 / V2 补 promoted_to + ai_analysis + scores)
CREATE TABLE ideas ( CREATE TABLE ideas (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
title TEXT NOT NULL, title TEXT NOT NULL,
description TEXT, description TEXT NOT NULL DEFAULT '',
tags TEXT, -- JSON array status TEXT NOT NULL DEFAULT 'draft', -- draft/pending_review/approved/rejected/promoted/archived
source TEXT NOT NULL, -- Manual/Clipboard/AI priority INTEGER NOT NULL DEFAULT 1,
status TEXT NOT NULL, -- Draft/PendingReview/Approved/Rejected/Promoted/Archived score REAL,
scores TEXT, -- JSON: {market_potential, competition, feasibility, roi, overall} tags TEXT, -- JSON 数组
ai_analysis TEXT, source TEXT,
related_ideas TEXT, -- JSON array of idea ids promoted_to TEXT, -- 晋升后的 project_id (V2)
promoted_to TEXT, -- project id ai_analysis TEXT, -- AI 分析结果 JSON (V2)
created_at INTEGER NOT NULL, scores TEXT, -- 多维评分 JSON: feasibility/impact/urgency/overall (V2)
updated_at INTEGER NOT NULL created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
); );
-- 项目 -- 项目 (V1 建表 / V11 补 deleted_at / V12 补 path + stack)
CREATE TABLE projects ( CREATE TABLE projects (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
name TEXT NOT NULL, name TEXT NOT NULL,
description TEXT, description TEXT NOT NULL DEFAULT '',
idea_id TEXT, -- 来源想法 status TEXT NOT NULL DEFAULT 'planning',
repo_path TEXT, -- 仓库路径 idea_id TEXT REFERENCES ideas(id),
tech_stack TEXT, -- JSON array path TEXT, -- 绑定的本地代码目录绝对路径 (V12,可空=未绑定)
status TEXT NOT NULL, -- Planning/InProgress/Testing/Releasing/Completed/Paused/Cancelled stack TEXT, -- 技术栈 JSON 数组字符串 (V12,探测填充)
priority INTEGER NOT NULL DEFAULT 1, -- 0=Low, 1=Medium, 2=High, 3=Critical deleted_at TEXT, -- 软删回收站: NULL=正常, 非空=已进回收站 (V11)
current_stage TEXT, -- Idea/Requirement/Coding/Testing/Release created_at TEXT NOT NULL,
config TEXT, -- JSON: 项目级配置 updated_at TEXT NOT NULL
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
); );
-- 工作流定义 -- 任务 (V1 建表 / V2 补 workflow_def_id + base_branch)
CREATE TABLE workflow_defs (
id TEXT PRIMARY KEY,
project_id TEXT NOT NULL,
task_id TEXT, -- 关联的任务 (可为空,如项目级工作流)
name TEXT NOT NULL,
description TEXT,
dag TEXT NOT NULL, -- JSON: DAG 结构
template_id TEXT, -- 来源模板
version INTEGER NOT NULL DEFAULT 1,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
-- 任务 (项目内的并行工作单元)
CREATE TABLE tasks ( CREATE TABLE tasks (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
project_id TEXT NOT NULL, project_id TEXT NOT NULL REFERENCES projects(id),
title TEXT NOT NULL, title TEXT NOT NULL,
description TEXT, description TEXT NOT NULL DEFAULT '',
status TEXT NOT NULL, -- Todo/InProgress/InReview/Testing/Done/Blocked/Cancelled status TEXT NOT NULL DEFAULT 'todo', -- todo/in_progress/in_review/testing/done/blocked/cancelled
priority INTEGER NOT NULL DEFAULT 1, -- 0=Low, 1=Medium, 2=High, 3=Critical priority INTEGER NOT NULL DEFAULT 1,
branch_name TEXT, -- Git 分支名 branch_name TEXT,
base_branch TEXT DEFAULT 'main', -- 基于哪个分支创建 assignee TEXT,
workflow_def_id TEXT, -- 关联的工作流定义 workflow_def_id TEXT, -- 关联的工作流定义 ID (V2)
assignee TEXT, -- AI agent 或人工 base_branch TEXT, -- 基础分支 (V2)
merge_conflict TEXT, -- JSON: 冲突信息 created_at TEXT NOT NULL,
merged_at INTEGER, updated_at TEXT NOT NULL
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
); );
-- 发布计划 (合并多个 Task → 发布) -- 分支 (V2 建表) — 任务与 Git 分支绑定
CREATE TABLE branches (
id TEXT PRIMARY KEY,
project_id TEXT NOT NULL REFERENCES projects(id),
task_id TEXT REFERENCES tasks(id),
name TEXT NOT NULL,
base TEXT NOT NULL DEFAULT 'main',
status TEXT NOT NULL DEFAULT 'active',
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
merged_at TEXT
);
-- 发布计划 (V1 建表)
CREATE TABLE releases ( CREATE TABLE releases (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
project_id TEXT NOT NULL, project_id TEXT NOT NULL REFERENCES projects(id),
version TEXT NOT NULL, -- e.g. v2.3.0 version TEXT NOT NULL,
branch_name TEXT, -- release 分支 status TEXT NOT NULL DEFAULT 'planned',
task_ids TEXT NOT NULL, -- JSON array: 包含的 Task ID 列表 task_ids TEXT NOT NULL DEFAULT '[]', -- JSON 数组: 包含的 Task ID 列表
status TEXT NOT NULL, -- Planning/Integrating/Testing/Ready/Published changelog TEXT,
workflow_def_id TEXT, -- 发布工作流 created_at TEXT NOT NULL,
changelog TEXT, released_at TEXT
published_at INTEGER,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
); );
-- 工作流执行 -- 工作流执行 (V1 建表 / V2 补 project_id + task_id)
CREATE TABLE workflow_runs ( -- 注: 不区分 def/run, DAG 直接序列化进 dag_json, 一次执行一行
id TEXT PRIMARY KEY, CREATE TABLE workflow_executions (
workflow_def_id TEXT NOT NULL, id TEXT PRIMARY KEY,
project_id TEXT NOT NULL, name TEXT NOT NULL,
task_id TEXT, -- 关联的任务 (可为空) dag_json TEXT NOT NULL, -- DAG 的 JSON 序列化
release_id TEXT, -- 关联的发布 (可为空) status TEXT NOT NULL DEFAULT 'pending', -- pending/running/paused/completed/failed/cancelled
status TEXT NOT NULL DEFAULT 'pending', -- Pending/Running/Paused/Completed/Failed/Cancelled triggered_by TEXT,
node_states TEXT, -- JSON: {node_id: {status(Pending/Running/Completed/Failed/Skipped/Waiting), output, started_at, finished_at}} project_id TEXT, -- 关联项目 ID (V2)
current_layer INTEGER, task_id TEXT, -- 关联任务 ID (V2)
started_at INTEGER, created_at TEXT NOT NULL,
finished_at INTEGER, completed_at TEXT
error TEXT
); );
-- 产出物 -- 节点执行 (V1 建表) — 工作流执行过程中每个节点的运行快照
CREATE TABLE artifacts ( CREATE TABLE node_executions (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
project_id TEXT NOT NULL, workflow_id TEXT NOT NULL REFERENCES workflow_executions(id),
workflow_run_id TEXT, node_id TEXT NOT NULL,
node_id TEXT, node_type TEXT NOT NULL,
kind TEXT NOT NULL, -- PRD/CodeChange/TestReport/ReleaseNote/Image status TEXT NOT NULL DEFAULT 'pending',
title TEXT, input_json TEXT,
content TEXT, output_json TEXT,
file_path TEXT, error_message TEXT,
metadata TEXT, -- JSON started_at TEXT,
created_at INTEGER NOT NULL completed_at TEXT
); );
-- 连接配置 -- AI 提供商配置 (V9 建表) — 多 Provider 统一抽象
CREATE TABLE connections (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
kind TEXT NOT NULL, -- MySQL/SSH/MongoDB/Redis/HTTP
config TEXT NOT NULL, -- JSON (加密存储)
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
-- AI 模型配置
CREATE TABLE ai_providers ( CREATE TABLE ai_providers (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
provider TEXT NOT NULL, -- Claude/GLM/DeepSeek/OpenAI name TEXT NOT NULL,
api_key TEXT, -- 加密存储 provider_type TEXT NOT NULL DEFAULT 'openai_compat',
base_url TEXT, api_key TEXT NOT NULL,
models TEXT, -- JSON: 可用模型列表 base_url TEXT NOT NULL,
is_default INTEGER DEFAULT 0, default_model TEXT NOT NULL,
config TEXT -- JSON: 额外配置 models TEXT, -- JSON array of model names
is_default INTEGER NOT NULL DEFAULT 0,
config TEXT, -- JSON extra config
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
); );
-- 需求功能清单 -- AI 对话 (V3 建表 / V4 补 archived / V5 补 prompt_tokens + completion_tokens / V6 补 models)
CREATE TABLE features ( CREATE TABLE ai_conversations (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
project_id TEXT NOT NULL, title TEXT,
task_id TEXT, -- 关联任务 messages TEXT NOT NULL DEFAULT '[]', -- JSON array of ChatMessage
requirement_id TEXT, -- 来源需求 provider_id TEXT,
title TEXT NOT NULL, model TEXT,
description TEXT, models TEXT, -- 用过的所有 model JSON 数组字符串 (去重, V6)
status TEXT NOT NULL DEFAULT 'selected', -- Selected/Deferred/Rejected/Completed archived INTEGER NOT NULL DEFAULT 0, -- 是否归档(侧栏折叠展示, V4)
priority INTEGER NOT NULL DEFAULT 1, -- 0=Low, 1=Medium, 2=High, 3=Critical prompt_tokens INTEGER, -- 输入 token 累计 (流式 usage 落库, V5)
rejection_reason TEXT, -- 不做的原因(自动进入决策留痕) completion_tokens INTEGER, -- 输出 token 累计 (流式 usage 落库, V5)
test_case_count INTEGER DEFAULT 0, created_at TEXT NOT NULL,
order_index INTEGER NOT NULL, -- 排序 updated_at TEXT NOT NULL
metadata TEXT, -- JSON: 额外属性
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
); );
-- 测试用例 -- AI 工具执行审计 (V9 建表) — Agent 工具调用的审批/执行留痕
CREATE TABLE test_cases ( CREATE TABLE ai_tool_executions (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
project_id TEXT NOT NULL, conversation_id TEXT,
feature_id TEXT NOT NULL, -- 关联功能 tool_call_id TEXT NOT NULL,
title TEXT NOT NULL, tool_name TEXT NOT NULL,
description TEXT, arguments TEXT NOT NULL,
preconditions TEXT, -- 前置条件 result TEXT,
steps TEXT NOT NULL, -- JSON: 测试步骤 [{step, expected}] status TEXT NOT NULL DEFAULT 'pending', -- pending/approved/rejected/executing/completed/failed
kind TEXT NOT NULL DEFAULT 'Manual', -- Manual/Auto/AI-Generated risk_level TEXT NOT NULL DEFAULT 'medium', -- low/medium/high
priority INTEGER NOT NULL DEFAULT 1, -- 0=Low, 1=Medium, 2=High, 3=Critical requested_at TEXT NOT NULL,
executed_at TEXT,
decided_by TEXT -- human/auto
); );
-- 测试执行记录 -- 知识条目 (V7 建表 / V8 补 embedding / V10 补 reasoning) — 经验沉淀基本单元, 共享记忆层
CREATE TABLE test_runs ( -- 状态机: candidate → pending_review → published → archived
id TEXT PRIMARY KEY, CREATE TABLE knowledges (
project_id TEXT NOT NULL, id TEXT PRIMARY KEY,
task_id TEXT, -- 关联任务 kind TEXT NOT NULL DEFAULT 'pitfall', -- 7 种: review_rule/prompt_template/pitfall/architecture_pattern/diagnosis/deployment_note/workflow_optimization
feature_id TEXT, -- 关联功能 title TEXT NOT NULL,
test_case_id TEXT NOT NULL, content TEXT NOT NULL DEFAULT '',
status TEXT NOT NULL, -- Passed/Failed/Skipped/Blocked tags TEXT, -- JSON 数组字符串
actual_result TEXT, status TEXT NOT NULL DEFAULT 'candidate', -- candidate|pending_review|published|archived
error_detail TEXT, -- 失败详情 confidence TEXT, -- high|medium|low (AI 提炼自评)
executed_by TEXT, -- AI/Human reuse_count INTEGER NOT NULL DEFAULT 0, -- 唯一客观排序信号
duration_ms INTEGER, verified INTEGER NOT NULL DEFAULT 0, -- 发布审核时一次性人工标
executed_at INTEGER NOT NULL source_project TEXT, -- 来源项目(仅溯源不过滤)
source_ref TEXT, -- 来源实体引用(如 conv:{id})
reasoning TEXT, -- AI 提炼判断依据("为何值得沉淀"), 手动录入为 NULL (V10)
embedding BLOB, -- Vec<f32> 小端字节序列化, NULL=未嵌入走 LIKE 降级 (V8)
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
); );
-- 标注 (贯穿所有内容) -- 知识生命线事件 (V10 建表) — 追加型审计: 产生/审核/引用/归档
CREATE TABLE annotations ( CREATE TABLE knowledge_events (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
project_id TEXT NOT NULL, knowledge_id TEXT NOT NULL,
entity_type TEXT NOT NULL, -- Requirement/Feature/Code/TestCase/TestReport/DesignDoc event_type TEXT NOT NULL, -- created | extracted | status_changed | referenced | archived
entity_id TEXT NOT NULL, -- 关联实体 ID source_ref TEXT, -- 触发来源: conv:{id} / manual / system
marker TEXT NOT NULL, -- FIXME/TODO/QUESTION/RISK/DECISION/OPTIMIZE context_json TEXT, -- JSON: 因 event_type 而异
content TEXT NOT NULL, -- 标注内容 timestamp TEXT NOT NULL
location TEXT, -- 文件路径+行号 / 文档段落
status TEXT NOT NULL DEFAULT 'Open', -- Open/AI-Processing/Resolved/WontFix
resolved_by TEXT, -- AI/Human
resolution TEXT, -- 处理结果
created_at INTEGER NOT NULL,
resolved_at INTEGER
); );
-- 决策留痕 -- 通用应用设置 (V13 建表) — 前端 localStorage 迁移目标 KV 表
CREATE TABLE decisions ( CREATE TABLE app_settings (
id TEXT PRIMARY KEY, key TEXT PRIMARY KEY,
project_id TEXT NOT NULL, value TEXT NOT NULL, -- JSON 字符串
context TEXT NOT NULL, -- 决策背景 updated_at TEXT NOT NULL
question TEXT NOT NULL, -- 需要决定的问题
alternatives TEXT, -- JSON array: 考虑过的方案
decision TEXT NOT NULL, -- 最终决定
reason TEXT NOT NULL, -- 决策原因
decided_by TEXT NOT NULL, -- AI/Human
entity_type TEXT, -- 关联实体类型
entity_id TEXT, -- 关联实体 ID
impact TEXT, -- 影响范围
stage TEXT, -- Idea/Requirement/Coding/Testing/Release
created_at INTEGER NOT NULL
); );
-- 内部表: schema_version (version INTEGER PRIMARY KEY) — 迁移版本记录
``` ```
## 七、阶段模板 ## 七、阶段模板