Explorar el Código

docs(visualization): document fake data boundaries

SamLee hace 1 día
padre
commit
4235eddebb

+ 3 - 19
visualization/.gitignore

@@ -1,27 +1,11 @@
-# Python
+.cache/*
+!.cache/.gitkeep
 backend/.venv/
 backend/.venv/
 backend/**/__pycache__/
 backend/**/__pycache__/
 backend/.pytest_cache/
 backend/.pytest_cache/
-backend/.coverage
-
-# Node / Next.js
-frontend/node_modules/
 frontend/.next/
 frontend/.next/
+frontend/node_modules/
 frontend/coverage/
 frontend/coverage/
-frontend/playwright-report/
-frontend/test-results/
 frontend/*.tsbuildinfo
 frontend/*.tsbuildinfo
-
-# Local environment
-.env
-.env.local
-backend/.env
-frontend/.env.local
-
-# Generated artifacts must stay under visualization, but are not committed.
-.cache/*
-!.cache/.gitkeep
-exports/*
-!exports/.gitkeep
 test-artifacts/*
 test-artifacts/*
 !test-artifacts/.gitkeep
 !test-artifacts/.gitkeep

+ 28 - 0
visualization/DATA_CONTRACT.md

@@ -0,0 +1,28 @@
+# Fake 数据合同与已知缺口
+
+新版只提供 fake 数据,但顶层字段不使用自创命名。`backend/app/contracts.py` 逐项镜像以下当前源码合同:
+
+- Host:`ScriptBuildInputSnapshotV1`、`MissionBinding`、`MissionOwnerToken`、全部 Phase 1/2/3 Artifact、`Publication`、`PublicationResult`、HTTP command journal、旧 `script_build_record`。
+- Agent wire:`TaskView`、`TaskSpecView`、`OperationView`、`AttemptView`、`ValidationView`、`PlannerDecisionView`。
+- 枚举:Build / Task / Attempt / Validation / Artifact / Publication 状态,以及全部 `ScriptTaskKind`。
+
+每个画布节点的 `record.model_name` 指向其中一个合同,`record.payload` 必须与合同完全同键。后端测试同时拒绝缺键和额外键。
+
+## 不能由当前源码进一步约束的字段
+
+以下字段在业务源码中本身就是开放的 `dict[str, Any]` / JSON,没有更窄的稳定 schema,因此 fake 数据只能保持顶层字段精确,不能声称其嵌套键是产品合同:
+
+- `topic`、`account`、`persona_points`、`section_patterns`、`strategies`
+- `prompt_manifest`、`datasource_manifest`、`model_manifest`
+- `query`、`source_lineage`、`change_manifest`
+- Agent `payload`、ArtifactRef `metadata`、HTTP `response_json`
+- Paragraph 的 `content_range` 与各类 `*_elements`
+- Element 的 `commonality_analysis`、`topic_support`、`weight_score`、`support_elements`
+
+## 接真实数据前仍缺少
+
+1. Host 面向可视化的只读聚合 API;当前没有一个接口能直接返回 Phase 1→3 的完整闭包和连接关系。
+2. TraceStore 中消息父链、policy migration、owner acquire/release/fence、publication attempt/rollback/commit/readback 的统一脱敏投影。
+3. Candidate Artifact / Validation / Decision 的批量分页读取接口,避免前端逐节点请求。
+4. 对上述开放 JSON 字段的版本化 strict schema。没有这些 schema 时,任何“嵌套字段一模一样”的承诺都不可验证。
+

+ 0 - 115
visualization/DATA_SOURCE_CONTRACT.md

@@ -1,115 +0,0 @@
-# V8 数据源与决策真实性契约
-
-## 业务事实表
-
-| 表 | V8 中的唯一业务含义 |
-|---|---|
-| `script_build_record` | Run 状态、当前创作方向、最终总结和模型配置 |
-| `script_build_round` | 轮次目标和当前保存的多路规划 |
-| `script_build_branch` | 实现任务、方案类型、当前处置状态和理由 |
-| `script_build_data_decision` | 实现 Agent 对取数结果的采用、组合和排除 |
-| `script_build_multipath_decision` | 主 Agent 对 `branch_ids` 指向的一批候选结果作出的综合决策 |
-| `script_build_domain_info` | 已核实并独立保存的领域事实 |
-| 段落、元素、关联三表 | 当前主脚本和内容方案候选产物 |
-
-## 运行记录表
-
-`script_build_event` 和 `script_build_event_body` 只用于补充:
-
-- `script_multipath_evaluator` 对候选方案的逐支评审、跨方案比较和建议;
-- `script_evaluator` 对主 Agent 决策后的主脚本进行整体评审;
-- 实现 Agent 直接调用的取数 Tool;
-- 取数 Agent 实例、Agent 内多次查询和 Agent 输出的初筛整理;
-- 规划工具在运行时留下的修订记录;
-- Inspector 中的原始输入输出。
-
-## 主 Agent 前三阶段决策链
-
-- 创作目标的当前业务事实是 `script_build_record.script_direction`;成功的 `save_script_direction` 只用来还原它何时保存及保存前主 Agent 直接读取了什么。
-- 本轮目标的当前业务事实是 `script_build_round.goal`。`begin_round` 调用前携带的 `round_index` 仍是旧轮次,新轮次优先取成功返回中的 `round_index`,其次才取紧随的 `round_begin` marker。
-- 实现规划的当前业务事实是 `multipath_plan / race_or_divide / plan_note`。成功的 `record_multipath_plan` 保留为同轮修订版本,失败调用只进技术记录。
-- “主 Agent 直接读取”只认 `agent_role=main + agent_depth=0 + 真实主 scope`;评审 Agent 内部的工具调用不得并入。
-- “主 Agent 收到评审”要求评审 Agent 明确返回主 scope;只有结构化轮次和时间顺序时,只能写“形成前可见”,不得写成已采用依据。
-- 评审报告正文里的轮次文字与结构化事件冲突时,以事件的 `round_index` 为准。
-
-## 统一 Agent 决策契约
-
-- `direction`:创作目标、本轮目标、实现规划,由主 Agent 最终决定。
-- `tradeoff`:实现 Agent 数据取舍仅在当前方案内有效;主 Agent 多路决策是候选方案的最终取舍。
-- `evaluation`:多方案评审与主脚本整体评审只提供判断、问题和建议,不直接决定 Branch 状态或 Run 状态。
-- `creative`:只有安全关联的实现 Agent `think_and_plan` 与写入事件才能形成创作处理;候选脚本本身不能反推创作过程。
-- 所有输入同时标记“观察到的关系”和“是否明确作为依据”。读取过的数据默认只能说明形成前可见,不能自动升级为已采用依据。
-
-评审正文只由带版本号的 `EvaluationReportParser` 解析。业务区只展示结构化的评审对象、标准、逐项结论、达成项、问题、总结论和建议;原始 Markdown、表格和正文中的内部 ID 只进入技术记录。报告正文中的构建 ID 和轮次不参与关联。
-
-## Prompt 准确性
-
-- Agent 派发事件中保存的任务可显示为“本次真实任务”。
-- 当前 system prompt 从当前数据库配置或当前文件读取,只能显示为“当前版本规则”。
-- 系统没有保存每次 Run 的完整 Prompt 快照,因此当前规则不得描述成“当次运行完整 Prompt”。
-- Prompt 只通过懒加载接口读取,统一脱敏、限制长度,不进入 execution-view 主响应。
-
-实现 Agent 与取数 Agent 的归属仅使用 `parent_event_id` / `scope_event_id` 及明确的 `round_index + branch_id`。缺少父子关系时进入未归属技术记录,不通过中文任务文本猜测。
-
-## 取数三层事实
-
-1. **取到什么**:来自 Tool 调用状态和轻量结果摘要。0 条结果是“无结果”,不是失败。
-2. **初筛了什么**:只来自取数 Agent 的 `output_content.summary`,不从工具结果自动总结。
-3. **正式采用什么**:只来自 `script_build_data_decision`,由实现 Agent 做决定。
-
-`script_build_data_decision.sources` 没有 Agent 事件 ID,因此只做数据类型级对照,不声称某条证据来自同类 Agent 的某一次具体调用。取过但没有进入正式来源的数据,也不自动标记为“被排除”。
-
-## 取数分类
-
-- 工具取数:实现 Agent 直接读取选题、创作总目标、当前脚本、账号段落模式、账号人设或领域信息。
-- Agent 取数:解构 Case、知识、外部搜索、Pattern / Relation Agent。每次 `agent_invoke` 是一个独立实例,即使 Agent 类型相同也不合并。
-- Agent 内的 `think_and_plan` 和上下文 `get_script_snapshot` 不计入源数据查询次数。
-
-## 禁止解释
-
-1. 不读取或展示 `branch_id <= 0` 的旧语义数据决策。
-2. 不用 Branch 的 merged、parked、discarded 状态生成一条不存在的多路决策。
-3. 不用事件内容覆盖业务表中的决定、Branch 状态或领域事实。
-4. 不把领域事实已经入库解释成其来源内容方案已经进入主脚本。
-5. 不把当前规划解释成完整的规划修订历史。
-6. 不把候选处置前快照解释成本轮合并后的完整主脚本。
-7. 不用模型生成缺失的理由、评审结论或业务影响。
-8. 不把取数 Agent 的初筛整理解释成实现 Agent 的正式数据取舍。
-9. 不因为同一实现 Agent 调用多个取数 Agent 就显示为并行;必须存在真实时间重叠。
-10. 不用模糊的 `evaluator` 名称匹配评审类型;两类评审只认精确事件名。
-11. 不把“决策形成前发生过读取”直接解释为“这些数据导致了决策”。
-12. 不把评审 Agent 内部读取的数据解释为主 Agent 直接读取。
-13. 不把多方案评审或整体评审的建议解释为主 Agent 最终决定。
-14. 不从候选脚本或最终主脚本反推实现 Agent 的创作处理过程。
-15. 不把当前 Prompt 配置解释成历史 Run 实际使用的完整 Prompt 快照。
-
-## 多批次决策
-
-- 同一轮的多路决策按 `created_at, id` 排序。
-- 每条记录独立生成一个收敛节点。
-- `branch_ids` 决定进入该节点的连接线。
-- 同一 Branch 多次出现时保留全部决策记录,不声明后者覆盖前者。
-- 引用不存在的 Branch 时保留决策,但标记为部分完整。
-- 有 Branch、无多路决策时显示“未记录主 Agent 多路决策”。
-
-## 多方案评审与主决策关联
-
-- 同一轮允许存在多个收敛批次。
-- 多方案评审先用报告中明确的 Branch ID 确认候选范围。
-- 只有 Branch 集合相同、且决策时间不早于评审结束时间时,评审和数据库决策才会关联。
-- 无法安全关联的评审进入未归属运行记录,不强行挂到某个方案。
-- Branch 的当前状态和处置理由只作为主 Agent 决策的逐方案结果展示,不再生成实现 Agent 内部的“方案处理”节点。
-
-## 领域信息方案
-
-- `path_type=领域信息` 的产出来自 `script_build_domain_info`。
-- 领域事实按 `script_build_id` 全局累加,`round_index/branch_id` 只用于复盘来源。
-- 领域事实数量与 Branch 状态分别展示。
-- 领域信息方案不得显示段落、元素或“合入主脚本”的候选统计。
-
-## 只读边界
-
-- 数据库连接使用 visualization 自有连接池。
-- 物理连接创建时设置 MySQL Session 为只读。
-- Repository 仅允许 Query,不允许 flush、commit 或写操作。
-- 活动正文和候选快照按需读取,所有技术输出统一脱敏。

+ 0 - 51
visualization/DESIGN.md

@@ -1,51 +0,0 @@
-# V8 决策可视化设计规范
-
-## 阅读顺序
-
-画布从上到下按轮次讲述一次构建;每轮内部仍从左到右展示业务流程:
-
-```text
-确定方向 → 实现规划 → 多路实现 → 多方案评审 → 主 Agent 最终取舍 → 整体评审 → 本轮产出
-```
-
-实现方案内部使用“发散后汇聚”的结构:工具取数和 Agent 取数平级展开,取数 Agent 内只展示查询与初筛;正式数据取舍始终放在实现 Agent 范围。
-
-## 卡片信息预算
-
-- 每张决策卡只展示一条主结论、默认两条摘要,最多三条摘要。
-- Direction 展示最终方向、形成前信息与真实约束。
-- Tradeoff 展示取舍范围、明确处理结果与记录中的理由。
-- Evaluation 展示评审结论、关键达成项与真实问题或建议。
-- Creative 以“产生候选创作表”展示真实记录的创作处理与候选产出;完整创作任务只在前置“实现任务”节点展示,不在产出节点重复。
-- Implementation Plan 使用专用“本轮实施路线”结构,逐路展示动作、类型、作用范围、实施方法与路线侧重;规划理由紧随路线,完整形成依据折叠展示。
-- 输出、取数与普通执行节点不使用决策标签,也不显示 Prompt 入口。
-
-主画布不展示数据库表名、字段名、事件 ID、Tool 名、JSON 或原始 Markdown。
-
-## 决定权视觉
-
-- 主 Agent 最终决定:珊瑚色主轮廓,标签为“最终决定”。
-- 评审 Agent:紫色辅助轮廓,标签为“评审建议”,不使用最终态语气。
-- 实现 Agent 内部决策:蓝色轮廓,标签为“本方案内有效”。
-- 成功、暂存、未采用分别使用绿、黄、红,只标注真实状态。
-
-## Inspector
-
-Inspector 只保留三层:
-
-1. **业务详情**:按决策类型展示问题、输入关系、结论、理由、评审建议与最终处理。
-2. **产出与改动**:仅在存在可确认的候选产物或主脚本变化时出现。
-3. **技术记录**:按数据来源、关联方式、原始输入、原始输出、耗时成本与原始记录分组。
-
-Agent 的“本次真实任务 / 当前版本规则”只从 Inspector 内的规则按钮进入;主画布的候选产出卡优先保留“查看完整候选脚本”。
-
-实现规划的画布卡只承担摘要职责;Inspector 不得复用画布 preview,形成依据保留完整业务文本并默认折叠。
-
-评审建议与主 Agent 最终决定并排对照;只有主 Agent 理由明确记录接受、部分接受、延后转化或拒绝时,才显示“对建议的处理”。
-
-## 交互与响应式
-
-- 画布支持 Mac 双指平移和捏合缩放,不显示 Minimap。
-- 节点可拖动;轮询刷新不重置视口、用户位置、展开状态或 Inspector 页签。
-- Prompt Drawer 和 Inspector 遵守顶层弹层优先级;`Escape` 只关闭最上层,关闭后恢复到原触发按钮。
-- 桌面端按轮次纵向分行,每轮内部保持横向流程;移动端使用同一业务投影的轮次折叠列表,不在浏览器里另行解释业务。

+ 0 - 43
visualization/EVENT_AUDIT_AND_GAPS.md

@@ -1,43 +0,0 @@
-# V8 事件记录能力与剩余缺口
-
-## 当前已经具备
-
-数据库已经提供结构化运行事件及独立正文表,可记录工具调用、模型轮次、子 Agent 派发、返回状态、输入输出和执行时间。V8 用这些记录补充取数树、Agent 初筛、创作处理、多方案评审和主脚本整体评审,但业务主线仍以业务表为准。
-
-## 仍然存在的缺口
-
-1. `script_build_event.round_index` 在部分运行中为空,无法直接关联轮次。
-2. 事件表没有 `branch_id`,取数活动经常无法直接关联实现方案。
-3. `parent_event_id` 尚未稳定建立“主 Agent → 实现 Agent → 取数 Agent”的完整父子树。
-4. 评审结果仍是报告正文,没有独立的轮次评审和 Branch 评审业务表。
-5. `script_build_round.multipath_plan` 保存当前版本,同轮早期规划仍需从运行事件补充。
-6. parked 方案没有处置时历史快照,后续只能查看基于当前主脚本计算的 overlay。
-7. 主脚本没有逐轮版本,无法精确还原每轮合并完成后的完整状态。
-
-## V8 的保守策略
-
-- 只有明确评审结论才能显示通过、部分通过或需要继续。
-- `script_multipath_evaluator` 只表示候选方案评审,`script_evaluator` 只表示主脚本整体评审。
-- 多方案评审与主 Agent 决策只有在 Branch 集合和时间顺序一致时才关联。
-- 事件明确携带轮次或 Branch 时使用直接关联。
-- 文本中只有一个合法轮次或 Branch 时,允许标记为“运行记录关联”。
-- 多个候选同时匹配时不猜测,记录进入 `unassigned.runtimeEvents`。
-- 事件中的规划记录只进入轮次详情,不覆盖当前规划。
-- 当前主脚本只描述为“当前”,候选快照只描述为“处置前快照”或“当前 overlay”。
-- 评审报告统一解析为结构化业务字段,原始 Markdown 只留在技术记录。
-- 实现 Agent 没有安全关联的创作处理事件时,只显示候选产出,不补空决策节点。
-- 当前 Prompt 配置只称为“当前版本规则”,不伪装成历史运行快照。
-
-## 后续建议
-
-无需再新建一套事件表,优先完善现有事件字段:
-
-- 所有事件写入真实 `round_index`;
-- 增加可空 `branch_id`;
-- 实现 Agent 派发事件写入 Branch 创建后的稳定 ID;
-- 取数 Agent 和工具事件写入 `parent_event_id`;
-- 评审结果增加结构化正文:结论、问题列表、下一轮目标、维度结果;
-- 主脚本每次合并后保存内容寻址的版本引用;
-- parked、merged、discarded 都保存统一的处置前候选快照。
-
-这些改进需要修改父业务服务和数据库,本次 V8 可视化不执行迁移。

+ 0 - 52
visualization/PRODUCT.md

@@ -1,52 +0,0 @@
-# Product
-
-## Register
-
-product
-
-## Users
-
-主要面向需要理解脚本构建过程与最终脚本的业务人员。他们不需要理解数据库、事件或 Agent 内部实现,但需要快速看懂每轮做了什么、为什么这样决定,以及最终产出了什么。
-
-## Product Purpose
-
-以横向 n8n 式流程还原真实的脚本构建过程,并提供与原业务页一致的最终脚本表,让非技术用户可以从流程故事下钻到完整业务数据。
-
-## Brand Personality
-
-清晰、克制、可信。
-
-## Anti-references
-
-- 不做将数据库字段直接堆到界面上的技术审计台。
-- 不用大量套话、重复标签和缺失提示干扰主流程。
-- 不为某个 Run、Case 或 Branch 编写展示特例。
-
-## Design Principles
-
-- 主画布先讲清业务顺序和决策,技术记录只在下钻时出现。
-- 数据库业务事实优先,运行事件只做补充,不把推测写成事实。
-- 每张卡片只回答该阶段最重要的问题,完整原文放入 Inspector。
-- 主 Agent 的前三阶段按“当前结论、形成前可见信息、明确理由”分层;运行中看过的信息不能自动写成已采用依据。
-- 严格区分“主 Agent 直接读取”“评审 Agent 返回报告”和“仅按运行顺序关联”,评审 Agent 内部读取不得归到主 Agent。
-- 创作目标显示当前数据库保存值并保留运行版本记录;实现规划显示当前规划,历史修订只在详情中展开。
-- 所有 Agent 决策卡使用一个主结论、默认两个摘要、最多三个摘要;不同决策保留各自的业务问题,不套用同一组固定句式。
-- 业务详情只解释问题、输入关系、决定、理由和结果;表名、字段名、内部 ID、Tool、原始 Markdown 和 JSON 统一进入技术记录。
-- 评审建议与最终决定必须视觉和语义分离;多方案评审、整体评审都没有替主 Agent 做最终取舍的权限。
-- “本次真实任务”来自运行事件;“当前版本规则”来自当前数据库或文件配置,不得称为当次运行时的完整 Prompt。
-- 最终脚本表尊重已有业务表达,不为了“简化”丢失字段或改变语义。
-- 相同交互在不同 Run 与不同屏幕上保持一致。
-
-## Decision Relationship Vocabulary
-
-- `主 Agent 直接读取`:同一主 Agent scope、`agent_role=main`、`agent_depth=0` 的真实读取。
-- `主 Agent 收到评审`:评审 Agent 已完成并把报告返回到主流程。
-- `形成前可见`:记录在决定前出现,但没有证据证明被采用,只能描述时间关系。
-- `明确作为依据`:只有业务记录或运行记录明确表达采用关系时才能使用。
-- `评审建议`:评审 Agent 返回的判断和建议,不等于主 Agent 的最终决定。
-- `最终决定`:主 Agent 或当前实现方案内有明确决定权的 Agent 实际保存的取舍。
-- `当前保存值`:数据库现在能够确认的结果,不等同于不可覆盖的永久版本。
-
-## Accessibility & Inclusion
-
-保证键盘可操作、明确焦点、减少动效支持、语义化表格表头,以及文字与背景的可读对比度。

+ 25 - 119
visualization/README.md

@@ -1,143 +1,49 @@
-# 脚本构建真实运行可视化 V8
+# Script Build Mission Control
 
 
-独立、只读的 FastAPI + Next.js 运行台。V8 只消费最新业务表和结构化运行事件,把真实脚本构建过程整理成非技术人员能够顺着读完的横向故事,并统一四类 Agent 决策的权限、摘要和详情表达
+当前智能创作构建系统的独立可视化。后端是只提供确定性 fake 数据的 FastAPI,前端是 Next.js + React Flow 的 n8n 风格节点画布
 
 
-```text
-创作目标 → 本轮规划 → 实现 Agent 多路方案 → 多方案评审 Agent → 主 Agent 多路决策 → 主脚本整体评审 → 本轮产出
-```
-
-每轮先发散为多个实现方案。展开方案后,取数阶段将“实现 Agent 直接调用工具”和“委派取数 Agent”放在同一层级;取数 Agent 内部展示多次查询和自己的初筛整理。实现 Agent 的正式数据取舍位于取数阶段之后,不与初筛混合。
-
-```text
-实现任务
-  → 取数阶段
-      ├─ 工具取数
-      └─ Agent 取数 → 多次查询 → 初筛整理
-  → 实现 Agent 数据取舍
-  → 候选产出
-```
-
-所有候选产出在实现 Agent 区结束,随后按真实批次汇入 `script_multipath_evaluator`。评审只提供候选比较和建议;最终采用、暂存或未采用由 `script_build_multipath_decision` 与 Branch 状态共同展示。合并后的主脚本再由 `script_evaluator` 做整体评审。
-
-取数操作按运行时间投影为单项、依次、并行、混合或先后未确认。没有时间重叠时不会仅因为存在多个 Agent 就显示为并行。
-
-## 数据真实性
-
-- `script_build_data_decision` 只表示实现 Agent 对数据的采用和排除。
-- `script_build_multipath_decision` 只表示主 Agent 对一批候选结果的综合决策。
-- `script_build_domain_info` 是独立累加的领域事实;即使来源方案后来未采用,已核实事实仍然存在。
-- `script_build_event/body` 只补充评审和运行活动,不覆盖业务表事实。
-- 当前 `script_build_round.multipath_plan` 是当前保存值,不描述成完整规划历史。
-- 当前主脚本是最终 `branch_id=0` 数据,不描述成任何一轮结束时的精确快照。
-- 旧语义 `data_decision` 记录不会被解释成主 Agent 决策。
-- 没有多路决策记录时明确显示缺失,不用 Branch 状态反推决定。
-
-完整数据优先级和禁止解释见 [DATA_SOURCE_CONTRACT.md](./DATA_SOURCE_CONTRACT.md)。
-
-## 架构
-
-```text
-LocalDatabaseProvider
-        ↓
-ScriptBuildRepository(MySQL 会话级只读)
-        ↓
-Business Bundle
-        ├─ RuntimeEventProjector(只负责编排)
-        │   └─ RuntimeEventIndex(一次建立顺序、父子、scope、actor 和轮次索引)
-        │       ├─ RetrievalEventProjector
-        │       ├─ EvaluationEventProjector + EvaluationReportParser
-        │       └─ MainAgentDecisionProjector
-        │           ├─ ObjectiveDecisionProjector
-        │           ├─ RoundGoalDecisionProjector
-        │           └─ ImplementationPlanDecisionProjector
-        ├─ CreativeEventProjector
-        ├─ AgentDecisionProjector
-        └─ Artifact Projection
-        ↓
-ExecutionViewV8
-        ↓
-React Flow 横向发散—收敛画布
-```
-
-主接口只返回业务摘要和详情引用。完整事件正文、候选快照、数据库行和技术字段在点击卡片后按需读取。最终主脚本使用单独的只读三表查询,不会为打开脚本表重复加载轮次、分支、决策和事件。
-
-主 Agent 前三阶段分别由专用来源投影器还原事实,再统一投影为 `AgentDecisionProjection`。Direction、Tradeoff、Evaluation、Creative 共用一个卡片与详情协议:画布只展示一个主结论和最多三个摘要,完整输入关系、理由、评审对照和技术证据进入 Inspector。
-
-评审报告只通过一个带版本号的解析器进入业务区,解析失败不会把原始 Markdown 倾倒给业务用户。Agent 派发任务和当前版本规则通过独立懒加载接口查看,并明确标注当前规则不是历史运行 Prompt 快照。
-
-产品信息架构、视觉与交互规范、数据真实性边界分别见 [`PRODUCT.md`](./PRODUCT.md)、[`DESIGN.md`](./DESIGN.md) 和 [`DATA_SOURCE_CONTRACT.md`](./DATA_SOURCE_CONTRACT.md)。
+画布按真实新流程展开:输入快照与 Mission Binding → Direction → 多路 Evidence → Structure / Paragraph / ElementSet → Compare / Compose / Portfolio → Phase 3 Root Delivery → 原子发布 → 旧 API 回读。每个任务继续细分为冻结合同、Operation、Worker Attempt、Artifact、Validator、Validation 和 Planner Decision。
 
 
 ## 启动
 ## 启动
 
 
 ```bash
 ```bash
-cd aiddit/pattern/patter_from_global_and_build/visualization/backend
-python3 -m venv .venv
-source .venv/bin/activate
-PIP_CACHE_DIR=../.cache/pip pip install -r requirements.txt
-PATTERN_DB_HOST_OVERRIDE=192.168.202.204 uvicorn app.main:app --host 127.0.0.1 --port 8788
+cd visualization/backend
+python -m venv .venv
+.venv/bin/pip install -r requirements.txt
+.venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8788
 ```
 ```
 
 
 ```bash
 ```bash
-cd aiddit/pattern/patter_from_global_and_build/visualization/frontend
-npm_config_cache=../.cache/npm npm install
+cd visualization/frontend
+npm install
 NEXT_PUBLIC_API_BASE=http://127.0.0.1:8788 npm run dev
 NEXT_PUBLIC_API_BASE=http://127.0.0.1:8788 npm run dev
 ```
 ```
 
 
-打开 `http://127.0.0.1:3008`。
-
-### 环境变量
-
-| 变量 | 默认值 | 作用 |
-|---|---|---|
-| `PATTERN_RUNTIME_DIR` | visualization 的父业务目录 | 定位父项目的 `db_manager.py` 和 `models.py` |
-| `PATTERN_DB_HOST_OVERRIDE` | 空 | 只在 visualization 的独立连接池中替换 DB host |
-| `VISUALIZATION_CORS_ORIGINS` | `localhost/127.0.0.1:3008` | CORS 白名单 |
-| `NEXT_PUBLIC_API_BASE` | `http://127.0.0.1:8788` | 前端访问的可视化后端 |
-
-无论是否配置 Host Override,后端都创建独立连接池,并在每个物理连接上执行 `SET SESSION TRANSACTION READ ONLY`。Repository 不包含新增、更新、删除、flush 或 commit。
+访问 `http://127.0.0.1:3008`。后端不会读取数据库;所有接口都明确返回 `data_mode=fake`。
 
 
 ## API
 ## API
 
 
-```text
-GET /api/health
-GET /api/capabilities
-GET /api/script-builds?limit=30&status=
-GET /api/script-builds/{id}/execution-view
-GET /api/script-builds/{id}/rounds/{round_index}
-GET /api/script-builds/{id}/activities/{activity_id}
-GET /api/script-builds/{id}/card-data/{detail_ref}
-GET /api/script-builds/{id}/inspector-view/{detail_ref}
-GET /api/script-builds/{id}/artifacts/{snapshot_ref}
-GET /api/script-builds/{id}/decision-prompts/{prompt_ref}
-```
+- `GET /api/health`
+- `GET /api/runs`
+- `GET /api/runs/{script_build_id}/graph`
+- `GET /api/runs/{script_build_id}/nodes/{node_id}`
+- `GET /api/schema-catalog`
 
 
-真实 ID 读取失败返回 404/503,不切换为示例数据。生产后端没有示例数据接口、远程旧接口适配器或原始执行日志接口。
-
-## 前端交互
-
-- 横向 n8n 式画布,轮次从左向右推进。
-- 当前轮默认展开,终态 Run 默认折叠历史轮。
-- 内容方案和领域信息方案使用不同图标与产出标签。
-- 取数 Agent 默认只展示查询统计和初筛结论;用户可在原地展开每次查询,单次查询结果按需读取。
-- Mac 双指自由平移、捏合缩放,普通滚轮不缩放;不显示 MiniMap。
-- 所有业务卡片可拖动,最小缩放为 60%,操作按钮始终保留。
-- 面向业务阅读的 Inspector 保持原有单列展示;独立的“数据来源”Inspector 用于调试对照。
-- “数据来源”按“业务详情中的一项|这一项的数据依据|对应的原始字段或原文”逐行对齐,来源明确区分数据库、运行事件、产物、确定性计算和日志锚点。
-- 最终结果的“查看完整主脚本”会打开近全屏文档表,支持完整表/精简表、脚本元素关联、表头与前两列固定;关闭后回到原画布位置。
-
-真实 Run 的数据来源回归可在后端目录执行:
+## 验证
 
 
 ```bash
 ```bash
-.venv/bin/python scripts/validate_source_inspector.py --runs 422 443 444 446 --workers 8
+cd visualization/backend && python -m pytest -q
+cd visualization/frontend && npm test && npm run typecheck && npm run build
 ```
 ```
-- 轮询不会重置画布位置、节点选择、轮次展开或 Inspector 页签。
 
 
-## 验证
+在父项目依赖已安装的开发环境中,还可直接用当前 Host/Agent constructors、Pydantic wire models 与 SQLAlchemy table metadata 交叉验证:
 
 
 ```bash
 ```bash
-cd backend && .venv/bin/pytest -q
-cd ../frontend && npm test && npm run typecheck && npm run build
-PLAYWRIGHT_USE_SYSTEM_CHROME=1 npm run test:e2e
+cd visualization/backend
+PYTHONPATH=.:/tmp/scriptbuild-dbdeps:../../agent:../../script_build_host/src \
+  ../../agent/.venv/bin/python scripts/validate_host_contracts.py
 ```
 ```
 
 
-所有缓存、截图和测试产物必须留在 `visualization/.cache`、`visualization/exports` 或 `visualization/test-artifacts`。实现不得修改父业务代码或旧 Demo。
+`backend/app/contracts.py` 固化了当前项目领域对象与 Agent wire model 的字段清单。测试要求每个 fake payload 与对应清单完全同键,防止为了展示而发明字段或漏字段。
+
+字段来源、开放 JSON 边界和接真实数据仍缺的接口见 [DATA_CONTRACT.md](./DATA_CONTRACT.md)。