Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
82 changes: 69 additions & 13 deletions docs/data-dictionary.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 内部数据字典

更新时间:2026-05-14
更新时间:2026-05-20

这份文档只描述当前主线里最值得稳定下来的几类核心结构:

Expand All @@ -22,9 +22,9 @@

主文件来源:

- [creation.py](d:/work2/Dreamforge/src/web/run_ops/creation.py)
- [store.py](d:/work2/Dreamforge/src/web/manifest/store.py)
- [views.py](d:/work2/Dreamforge/src/web/manifest/views.py)
- [creation.py](../../src/web/run_ops/creation.py)
- [store.py](../../src/web/manifest/store.py)
- [views.py](../../src/web/manifest/views.py)

磁盘位置:

Expand Down Expand Up @@ -82,20 +82,36 @@
- `webui`
- 当前运行目录、输入目录、payload 目录、artifact 目录、workspace 根

source of truth 建议
source of truth(已落地)

- 真正驱动业务判断时,优先依赖:
- `status`
- `progress`
- `control`
- `artifacts`
- `summary` 更适合作为概览,不要单独拿来决定核心流程分支
- `summary` 已收口为 derived projection(展示层):
- `summary.status_text` 由 `status/progress/control` 投影得到
- `summary.graph_status` 由 `progress.graph_status`(必要时回退旧字段)投影得到
- `summary.characters_total` / `summary.characters_completed` 由 `progress` 与 `locked_characters` 投影得到
- `summary.elapsed_text` 由 `timing.elapsed_text` 投影得到

实现入口:

- `src/web/run_ops/state.py`
- `derive_summary_status_text`
- `derive_summary_graph_status`
- `project_manifest_summary`

约束:

- 不允许再以 `summary.*` 字段作为核心流程分支判定条件
- 新增业务判定时,优先读取 `status/progress/control/artifacts`

## 2. Package Manifest

主文件来源:

- [packages.py](d:/work2/Dreamforge/src/web/run_ops/packages.py)
- [packages.py](../../src/web/run_ops/packages.py)

压缩包内路径:

Expand All @@ -122,14 +138,27 @@ source of truth 建议:
- `has_relation_graph`
- 导出时是否带关系图谱
- `summary.status_text`
- 导出时摘要状态
- 导出时运行态投影(由 run 真相字段推导)
- `summary.graph_status`
- 导出时图谱状态
- 导出时图谱态投影(由 run 真相字段推导)
- `exported_at`
- `updated_at`
- `builtin`
- 是否作为内置小说包发布

兼容冻结规则(2026-05-20):

- 读取入口统一走 `src/web/run_ops/packages.py::_read_package_manifest` 与 `_normalize_package_manifest`
- 当前支持版本:`0`(legacy)与 `1`(current)
- 未知版本:直接拒绝(`schema_version` 不在支持集合时抛错)
- `schema_version=0` 迁移到 current 规则:
- 缺失 `summary.status_text` 时回填为 `status`
- 缺失 `summary.graph_status` 时按 `has_relation_graph` 回填:`complete` / `pending`
- 缺失 `builtin` 回填 `false`
- 缺失或非法 `character_count` 回填 `0`
- 归一化后对外统一输出 `schema_version=1`(逻辑视角为 current schema)
- 导入流程在解压前先读取并校验 `package_manifest.json`,确保未知版本不会进入后续导入逻辑

定位:

- 这是“包级元数据”,不是完整运行态
Expand All @@ -139,7 +168,7 @@ source of truth 建议:

主文件来源:

- [service.py](d:/work2/Dreamforge/src/web/chat/service.py)
- [service.py](../../src/web/chat/service.py)

磁盘位置:

Expand Down Expand Up @@ -214,8 +243,8 @@ source of truth 建议:

主文件来源:

- [session-state-v1.md](d:/work2/Dreamforge/docs/session-state-v1.md)
- [service.py](d:/work2/Dreamforge/src/web/chat/service.py)
- [session-state-v1.md](./archive/session-state-v1.md)
- [service.py](../../src/web/chat/service.py)

`state` 是会话运行态唯一真相。

Expand Down Expand Up @@ -251,6 +280,33 @@ source of truth 建议:
- `memory`
- 当前会话摘要与压缩态

稳定性分级(2026-05-20):

- `state.version`: `stable`
- 仅在发生明确破坏性迁移时升级版本号
- `state.scene`: `stable`
- 允许在保持语义不变前提下增补可选字段
- `state.presence`: `stable`
- 参与者在场/离场语义保持稳定
- `state.progression`: `evolving`
- 节奏与转场策略仍在持续打磨,字段可能继续细化
- `state.relations.matrix`: `stable`
- 作为基线关系视图,优先保持向后兼容
- `state.relations.delta`: `evolving`
- 会话增量表达仍会按对话质量优化而迭代
- `state.characters.snapshots`: `evolving`
- 快照字段会随演出连贯性需求扩展
- `state.signals`: `experimental`
- 事件信号仍处于探索期,不保证字段长期稳定
- `state.memory.summary`: `evolving`
- 压缩摘要结构将继续围绕长会话质量调整

升级影响约定:

- `stable`:新增可选字段可接受;删除/重命名需显式迁移说明
- `evolving`:允许增补或收敛字段,但需保持旧字段至少一版兼容期
- `experimental`:可能快速调整;调用方应做缺省容错与非阻塞降级

规则:

- 新逻辑优先写入 `state`
Expand Down Expand Up @@ -321,7 +377,7 @@ source of truth 建议:

来源:

- [service.py](d:/work2/Dreamforge/src/web/chat/service.py)
- [service.py](../../src/web/chat/service.py)

定位:

Expand Down
59 changes: 0 additions & 59 deletions docs/manifest-compatibility.md

This file was deleted.

51 changes: 0 additions & 51 deletions docs/release-regression-checklist.md

This file was deleted.

35 changes: 35 additions & 0 deletions docs/release-regression-signoff.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"release_tag": "v2026.05.16",
"checked_at": "2026-05-20",
"checked_by": [
"manual-qa",
"release-owner"
],
"notes": "Manual regression completed across Windows / WSL / Linux / Termux for install, update, run, and import_export flows.",
"platforms": {
"windows": {
"install": "pass",
"update": "pass",
"run": "pass",
"import_export": "pass"
},
"wsl": {
"install": "pass",
"update": "pass",
"run": "pass",
"import_export": "pass"
},
"linux": {
"install": "pass",
"update": "pass",
"run": "pass",
"import_export": "pass"
},
"termux": {
"install": "pass",
"update": "pass",
"run": "pass",
"import_export": "pass"
}
}
}
40 changes: 39 additions & 1 deletion docs/runtime-contract.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Runtime Contract

更新时间:2026-05-14
更新时间:2026-05-20

这份文档只描述运行期边界,不讨论产品路线。
目标是把安装、更新、运行、导入导出这些入口的职责固定下来,减少后续继续散开。
Expand Down Expand Up @@ -143,3 +143,41 @@
- 导出包不得写入宿主机器绝对路径作为 source-of-truth
- 运行入口不得把安装期逻辑和业务运行逻辑混在一起
- compatibility 修补不得继续散落到 UI、列表、导入、视图多个模块里重复出现

## 7. 代码目录职责映射(P2-3)

为了避免“边界写在文档里、代码里却继续散开”,运行期主线职责固定到以下目录:

- 安装入口与安装期脚本:
- `scripts/install.sh`
- 仅负责安装期依赖与启动命令落地,不写业务运行数据
- 运行入口:
- `scripts/run_webui.py`
- `src/cli`
- 仅负责启动与参数分发,不承担导入导出业务逻辑
- 更新与版本检查:
- `src/web/service_facades/update.py`
- `scripts/release_skill.py`
- 保持“更新程序不覆盖用户业务数据”约束
- 运行编排与状态推进:
- `src/web/service_facades`
- `src/web/pipeline`
- `src/web/run_ops`
- 负责 run 创建、推进、停止、重启与状态投影
- manifest 与兼容层:
- `src/web/manifest`
- 兼容修补集中入口(路径重写、导入语义迁移、缺失产物降级)
- 导入导出小说包:
- `src/web/run_ops/packages.py`
- 负责 package manifest 校验、schema 兼容、导入导出边界
- 对话运行态:
- `src/web/chat`
- canonical `session state` 的读写与派生视图
- 前端展示层:
- `src/web/static`
- 只消费 canonical/derived 数据,不新增后端兼容补丁

约束:

- 新增代码若涉及边界变更,必须同时更新本节映射与对应测试断言
- 目录职责冲突时,优先保持“兼容层集中、入口轻量、业务层单一职责”
Loading
Loading