一部长篇作品的事实分散在 Canon、人物文件、场景 YAML、候选正文、审查报告、读者账本、字数预算和任务事件中。前端若直接读取这些文件并自行解释,很容易形成第二套业务逻辑:星仪说场景完成,阅读器仍看不到正文,决策面板又保留已消费选择。
Narrative Projection 将正式项目状态编译为版本化只读模型。后端负责解释事实,前端负责选择怎样看见它。
投影的输入
投影只读取经过内核定义的项目状态:
- 项目、卷、章、场景层级;
- 人物、地点、组织与世界资产;
- 分支候选和正式选择;
- 正文候选、审查、晋升和交付状态;
- Reader Question、Promise/Payoff 与连续性关系;
- 当前任务、阻断、人类决策和 Agent 会话摘要;
- 字数、节奏、健康与完成度指标。
候选与正式事实在投影中拥有不同 lifecycle,视觉层无需猜测某个文件是否已经晋升。
节点、关系与稳定身份
每个投影节点包含稳定 id、类型、层级、标题、摘要、生命周期、来源、状态、统计和可用动作。关系包含 source、target、relation type、方向、强度、证据和所属章节。
典型节点包括:
| 类型 | 代表内容 |
|---|---|
work |
整部作品与总体完成度 |
chapter |
章节义务、字数、节奏与主脉位置 |
scene |
场景功能、状态、正文与当前任务 |
person |
主要人物及其章节参与关系 |
branch |
推演候选和正式选择 |
review |
审查结果、问题和证据 |
promise |
承诺、伏笔、问题与兑现状态 |
稳定身份让相机、窗口和用户选择在增量更新后继续指向同一对象。空间位置可以改变,节点身份不会随渲染重建而漂移。
Projection Revision
投影带 revision 和 schema version。项目状态发生变化时,服务生成新 revision,并通过 SSE 发送完整快照或增量 patch。
formal project event -> projection builder -> normalized nodes and edges -> revision diff -> SSE patch -> client store -> spatial renderer and panels客户端按 revision 顺序应用 patch。断线、丢包或版本不兼容时重新拉取快照,避免在旧图上继续拼接新事件。
只读边界
投影描述“当前是什么”,也可以携带 typed action descriptor 描述“允许请求什么”。它不直接执行写入。
例如场景节点可能声明:
{ "action": "open_current_task", "target": "scene_0004", "risk": "low", "requires_confirmation": false}前端点击后把 descriptor 交给应用命令或 human-choice endpoint。节点发亮、拖动或聚焦不会自行改变项目文件。
聚合与语义缩放
长篇项目可能拥有数百场景和数千关系。投影为不同尺度提供聚合语义:
- 远景以章节锚点和章节重心表达主脉;
- 中景显示章节内部场景簇、主要人物和高价值关系;
- 近景显示分支、审查、承诺与场景细节;
- 聚焦章节时保留全书轮廓,高亮本章内部关系;
- 聚焦人物时保留全景,突出跨章节参与轨迹。
关系在远景可以聚合到章节重心,不需要删除。用户拉近后恢复具体 source 和 target。
章节簇与全书连续性
章节视图和场景视图都展示全书。差别在于节点粒度。每个章节拥有一个锚点,章节内场景围绕锚点形成局部簇;章节锚点沿时间与节奏主曲线排列。
底部章节目录始终对应全书。点击目录时,相机移动到该章节在当前粒度下的区域:章节模式聚焦章节锚点,场景模式聚焦场景簇。所有章节仍存在于同一星图中。
人物与关系
人物节点可以保持在章节主脉两侧,通过参与、冲突、承诺和影响关系连接场景。投影应区分:
- 人物参与场景;
- 人物状态由场景改变;
- 人物与承诺、证据或决策相关;
- 人物在多个章节形成的时间轨迹。
关系线带类型和证据,视觉层可以按焦点、风险与密度选择透明度。已弱化的关系仍可通过图例或筛选恢复。
节奏和时间坐标
章节位置可由时间线控制横向距离,由宏观节奏和张力影响纵向起伏、间距或曲线曲率。这样主曲线既保持阅读顺序,也呈现作品呼吸。
投影提供时间位置、节奏角色、张力和字数信息;前端布局算法把这些值映射为空间,不从几何形状反推文学事实。
Projection Builder 的可靠性
Builder 需要处理缺失、重复和部分完成:
- 一个章节有三个场景时,三个场景都必须投影;
- 每个场景的分支、审查和问题关系独立汇总;
- 临时草稿不会被标成正式正文;
- 已消费决策从 pending 集合移除;
- 新角色以候选或正式 lifecycle 出现;
- 非法路径和乱码只在诊断层暴露,不进入读者界面。
投影测试应覆盖稳定 id、边端点、全书场景计数、章节聚合、增量 patch 和重复事件幂等性。
规模策略
| 规模 | 主要策略 |
|---|---|
| 100 场景以内 | 完整节点与主要关系常驻 |
| 300 场景级 | 章节簇、标签去重、关系聚合与视口裁剪 |
| 1000 场景级 | 分层索引、按焦点加载、边束与增量几何 |
节点不应因摄像机距离突然消失。语义缩放可以改变标签、细节和光效,核心章节与当前任务保持可见。远景关系使用聚合,近景恢复细节。
多界面共享
同一 Projection 支持:
- 星仪的空间布局;
- 正文阅读器的章节与正式稿目录;
- 项目档案的资产状态;
- 决策面板的 pending choices;
- Agent 进程面板的当前任务关联;
- 交付面板的 readiness;
- 顾问的只读项目快照。
共享读模型减少了界面间不一致,也让前端重构保持在表现层。业务规则变化时,先修改 Engine 与 Projection 合同,再迁移消费方。
