相关长期角色系统升级方案见:character-system-upgrade-plan.md。本文件聚焦角色资源与行动能力边界;角色叙事岗位、关系张力和章节角色上下文包由角色系统升级方案统一规划。
角色背包系统不应被设计成独立的道具 CRUD、装备栏或设定百科。它在当前项目中的正确定位是:
角色资源账本,记录角色当前拥有什么、能使用什么、失去了什么、隐藏着什么,以及这些资源如何影响后续章节规划、写作、审阅、修复和重规划。
产品侧可以称为“角色携带物”“关键资源”或“角色背包”。工程侧建议统一命名为 Character Resource Ledger。
它的核心目标不是让用户维护更多资料,而是让系统在写下一章前知道:
- 这个角色现在能做什么;
- 这个角色不能突然做什么;
- 哪些物品或资源必须提前铺垫;
- 哪些关键物已经出现但长期未被使用;
- 哪些资源变化会影响后续剧情窗口。
目标用户仍然是完全不懂写作流程的小白用户,因此角色资源账本必须降低认知负担:
- 默认由 AI 从章节、规划和审阅结果中提取资源变化;
- 用户只处理高风险确认,不需要手动维护全部物品;
- UI 只显示和当前写作决策有关的资源;
- 系统主动提示连续性风险,而不是要求用户翻历史章节自查;
- 背包信息必须进入章节写作链,不能停留在角色页展示。
角色资源账本要接入当前 P0 主链:
书级 framing
-> 故事宏观规划 / 约束引擎
-> 动态角色系统
-> 卷战略 / 卷骨架 / 节奏板
-> 章节细化 bundle
-> 章节执行 / runtime
-> state sync
-> narrative audit / replan
新增能力必须服务“长篇叙事控制”,而不是增加一个孤立页面。
- 角色当前持有或可调用的关键资源;
- 资源的获得、转移、隐藏、消耗、损坏、丢失、恢复;
- 资源的读者可见性、角色知情状态和剧情风险;
- 章节写作前的可用资源提示;
- 审阅和修复阶段的资源连续性检查;
- 重规划阶段的资源缺口、误用和滞留风险;
- 主角、长期角色、临时角色的不同追踪粒度。
- 游戏化装备数值、负重、稀有度和战斗属性体系;
- 所有日用品、衣物、普通消耗品的完整明细;
- 替代世界管理、势力资源库或知识库;
- 替代 payoff ledger 的伏笔回收账本;
- 要求用户在开书前先填完整背包。
不同角色不应维护同等复杂度的背包。推荐按叙事权重分层。
主角必须有完整资源账本。
主角背包本质上是“行动能力边界”。系统需要知道主角是否拥有钥匙、证据、身份凭证、武器、资金、药物、联系方式、线索物、特殊能力凭证等。
主角资源会直接影响:
- 本章能否执行某个行动;
- 下章是否需要先铺垫资源;
- 审阅时是否出现“凭空拿出物品”;
- 修复时应该局部补铺垫还是改行动方案;
- replan 时是否需要调整章节窗口。
核心配角和长期角色需要轻量资源账本。
不追踪所有日常物品,只追踪会影响剧情的资源:
- 关键线索;
- 身份凭证;
- 秘密文件;
- 关系信物;
- 武器或工具;
- 权限和人脉;
- 与主角互相转交的物品;
- 会在后续卷中兑现的承诺物。
这类资源主要用于保证角色行动一致性、关系推进和章节 repair 边界。
反派和对手需要“隐藏资源账本”。
这类资源不一定在产品侧叫背包,更像“底牌 / 可用手段”:
- 可调动的人;
- 控制的地点;
- 掌握的证据;
- 未公开能力;
- 陷阱和布置;
- 对主角的误导资源;
- 尚未揭示的真相入口。
反派资源的关键是可见性控制。读者、主角和反派本人对同一资源的知情状态可能不同,因此不能只做简单“拥有 / 没有”。
临时角色默认不建立长期背包。
临时角色只在章节上下文中记录“场景资源”:
- 当前场景中交出的文件;
- 一次性提供的线索;
- 借给主角的工具;
- 被偷走或被拿走的物品;
- 场景结束后仍可能影响后续的资源。
如果 AI 判断某个资源会跨章复用、影响冲突、绑定伏笔或被主角带走,则自动提升为正式资源账本项。
部分资源不属于角色,而属于组织、地点或世界规则:
- 门派宝库;
- 公司资料库;
- 实验室样本;
- 城市禁区钥匙;
- 势力授权;
- 地点控制权;
- 世界规则中的代价资源。
首版不单独建设完整组织背包,但数据合同应预留 ownerType,允许资源归属为 character | organization | location | world | unknown。角色持有只是 holder,不一定等于归属。
建议首版支持以下资源类型:
physical_item:实体物品,例如钥匙、刀、信件、药物;clue:线索物或证据,例如照片、录音、残页、样本;credential:身份、权限、通行证、令牌、授权;ability_resource:能力凭证、契约、次数、代价槽;relationship_token:关系信物、承诺物、交易物;consumable:金钱、弹药、药量、可消耗次数;hidden_card:底牌、陷阱、未公开手段;world_resource:地点、组织、世界规则相关资源。
资源分类由 AI 结构化判断;代码只负责枚举校验和后处理,不用关键词规则兜底。
建议新增共享类型 CharacterResourceLedgerItem:
type CharacterResourceOwnerType =
| "character"
| "organization"
| "location"
| "world"
| "unknown";
type CharacterResourceStatus =
| "available"
| "hidden"
| "borrowed"
| "transferred"
| "lost"
| "consumed"
| "damaged"
| "destroyed"
| "stale";
type CharacterResourceNarrativeFunction =
| "tool"
| "clue"
| "weapon"
| "proof"
| "key"
| "cost"
| "promise"
| "hidden_card"
| "constraint";
interface CharacterResourceLedgerItem {
id: string;
novelId: string;
resourceKey: string;
name: string;
summary: string;
resourceType: string;
narrativeFunction: CharacterResourceNarrativeFunction;
ownerType: CharacterResourceOwnerType;
ownerId?: string | null;
ownerName?: string | null;
holderCharacterId?: string | null;
holderCharacterName?: string | null;
status: CharacterResourceStatus;
readerKnows: boolean;
holderKnows: boolean;
knownByCharacterIds: string[];
introducedChapterId?: string | null;
introducedChapterOrder?: number | null;
lastTouchedChapterId?: string | null;
lastTouchedChapterOrder?: number | null;
expectedUseStartChapterOrder?: number | null;
expectedUseEndChapterOrder?: number | null;
constraints: string[];
riskSignals: CharacterResourceRiskSignal[];
sourceRefs: CharacterResourceSourceRef[];
evidence: CharacterResourceEvidence[];
confidence?: number | null;
createdAt: string;
updatedAt: string;
}账本项保存当前状态,资源事件保存变化历史:
type CharacterResourceEventType =
| "introduced"
| "acquired"
| "revealed"
| "used"
| "transferred"
| "lost"
| "consumed"
| "damaged"
| "destroyed"
| "recovered"
| "stale_marked";
interface CharacterResourceEvent {
id: string;
novelId: string;
resourceId: string;
chapterId?: string | null;
chapterOrder?: number | null;
eventType: CharacterResourceEventType;
actorCharacterId?: string | null;
fromHolderCharacterId?: string | null;
toHolderCharacterId?: string | null;
summary: string;
evidence: string[];
confidence?: number | null;
createdAt: string;
}建议给 CanonicalCharacterRuntimeState 增加资源摘要:
interface CanonicalCharacterResourceSummary {
resourceId: string;
name: string;
status: CharacterResourceStatus;
narrativeFunction: CharacterResourceNarrativeFunction;
summary: string;
constraints: string[];
riskLevel: "none" | "info" | "warn" | "high";
}再在角色运行态里增加:
resources: CanonicalCharacterResourceSummary[];章节 runtime 不读取全量账本,只读取本章相关资源摘要。
建议新增状态变更类型:
"character_resource_update"其 payload 使用结构化合同:
interface CharacterResourceUpdatePayload {
resourceKey?: string;
resourceId?: string;
resourceName: string;
updateType: CharacterResourceEventType;
ownerType?: CharacterResourceOwnerType;
ownerId?: string | null;
holderCharacterId?: string | null;
previousHolderCharacterId?: string | null;
statusAfter: CharacterResourceStatus;
visibilityAfter: {
readerKnows: boolean;
holderKnows: boolean;
knownByCharacterIds: string[];
};
narrativeImpact: string;
expectedFutureUse?: string | null;
}低风险变更可自动提交,高风险变更进入 pending_review。
资源变化来自四类输入:
- 章节正文完成后;
- 章节审阅和 audit 完成后;
- 章节修复完成后;
- 卷级规划、章节细化或 replan 明确引入关键资源时。
flowchart TD
A["章节正文 / 规划 / 审阅结果"] --> B["AI 结构化提取资源变化"]
B --> C["生成 character_resource_update 候选"]
C --> D["连续性与风险校验"]
D --> E{"风险等级"}
E -->|"低风险"| F["自动提交到账本"]
E -->|"中高风险"| G["进入 pending_review"]
F --> H["刷新 canonical state"]
G --> I["任务中心 / 编辑页显示待确认"]
H --> J["章节 runtime / review / repair / replan 消费"]
新增 PromptAsset,建议命名:
novel.character_resource.extract_updates@v1
输出结构:
{
"updates": [
{
"resourceName": "",
"resourceType": "physical_item",
"updateType": "acquired",
"holderCharacterName": "",
"ownerName": "",
"statusAfter": "available",
"visibilityAfter": {
"readerKnows": true,
"holderKnows": true,
"knownByCharacterNames": []
},
"narrativeFunction": "clue",
"narrativeImpact": "",
"expectedFutureUse": "",
"evidence": [],
"confidence": 0.8,
"riskLevel": "low",
"riskReason": ""
}
],
"continuityRisks": [
{
"title": "",
"summary": "",
"severity": "medium",
"blockingResourceNames": [],
"suggestedAction": "confirm | repair | replan | ignore"
}
]
}不要用关键词表实现产品核心判断,例如:
- 看到“拿起”就判定获得;
- 看到“丢了”就判定丢失;
- 看到“钥匙”就硬归类为通行资源。
这些可以作为证据定位或测试样例,但不能成为核心路由和状态判断。
低风险变更可以自动提交:
- 主角获得普通工具;
- 资源从未出现变成已介绍;
- 物品被使用但未改变主线;
- 章节明确写出角色之间的普通转交;
- 线索被某角色知道;
- 临时场景物品未跨章复用。
以下变更进入 pending_review:
- 关键物品被销毁;
- 主角失去核心行动资源;
- 反派底牌提前暴露;
- 资源归属和现有账本冲突;
- 资源使用会改变卷级规划;
- 资源和 payoff ledger 的兑现窗口冲突;
- 资源突然出现但没有铺垫;
- AI 信心低于阈值。
以下候选应被拒绝或标记为脏状态:
- 证据不足;
- 只是比喻性表达;
- 幻觉出的角色或物品;
- 与章节正文事实冲突;
- 与已有已确认账本状态强冲突且无法解释。
角色详情页新增“关键资源”区域。
主角默认展开,长期角色默认折叠摘要,临时角色默认不显示长期背包。
展示字段:
- 当前可用资源;
- 隐藏资源 / 底牌;
- 最近变化;
- 需要确认;
- 风险提示;
- 与下一章相关的资源。
用户操作:
- 确认资源变化;
- 标记资源不重要;
- 手动补一条关键资源;
- 查看资源历史;
- 跳转到来源章节。
UI 文案应从用户视角表达,例如:
- “这个角色当前可以使用这些关键资源”
- “这些资源可能影响下一章行动”
- “这些变化需要确认后再进入后续写作”
避免写成“资源账本已接入 canonical state”这类实现说明。
章节执行前,在章节准备或执行面板中增加“本章关键资源”。
展示:
- 本章建议使用;
- 本章需要铺垫;
- 本章不要提前使用;
- 缺失但当前计划需要的资源;
- 与 payoff / 伏笔相关的资源。
这些提示不应成为大型配置表,而是用于降低新手风险:
- “写这一章前,系统建议先让主角拿到通行凭证”
- “这个证据还没有被主角发现,不能直接拿来推理”
- “这件物品已经损坏,当前章节不应继续正常使用”
审阅结果中新增资源连续性问题:
- 未获得却使用;
- 已消耗却复用;
- 已转交却仍由原角色持有;
- 读者未知却被当作已铺垫;
- 角色不知情却据此行动;
- 关键资源长时间未触碰。
修复建议优先给 patch_first:
- 局部补一句获得来源;
- 改掉不合理使用;
- 将资源使用后移;
- 改成另一角色提供资源;
- 触发 replan。
当资源变更需要确认时,任务中心展示:
- 哪个角色;
- 哪个资源;
- 系统认为发生了什么变化;
- 为什么需要确认;
- 确认后会影响哪些后续章节或规划。
操作:
- 确认进入账本;
- 拒绝;
- 改为低重要度;
- 请求 AI 重新判断;
- 跳转来源章节。
卷级工作台不显示全部背包,只显示跨章资源承诺:
- 本卷必须出现的关键物;
- 本卷必须消耗或转移的资源;
- 当前卷资源缺口;
- 影响 payoff 的关键物;
- 后续卷需要保留的底牌。
这能避免“资源账本”只在角色页存在,而不参与长篇节奏控制。
建议新增:
-
CharacterResourceLedgerService- 读写资源账本;
- 合并同名或同义资源;
- 计算角色资源摘要;
- 生成章节相关资源窗口。
-
CharacterResourceExtractionService- 调用 PromptAsset;
- 从章节正文、规划和审阅结果提取资源变化;
- 生成
StateChangeProposal。
-
CharacterResourceValidationService- 校验资源连续性;
- 计算风险等级;
- 决定自动提交、待确认或拒绝。
-
CharacterResourceContextBuilder- 给 runtime、review、repair、replan 构造轻量上下文;
- 避免把全量账本塞给模型。
首版建议新增:
CharacterResourceLedgerItemCharacterResourceEvent
可选新增:
CharacterResourceReview- 如果 pending review 需要单独 UI 状态;
- 也可以先复用现有
StateChangeProposal。
首批接口:
GET /api/novels/:id/character-resourcesGET /api/novels/:id/characters/:characterId/resourcesGET /api/novels/:id/chapters/:chapterId/resource-contextPOST /api/novels/:id/chapters/:chapterId/resources/extractPOST /api/novels/:id/character-resources/:resourceId/eventsPOST /api/novels/:id/character-resource-proposals/:proposalId/confirmPOST /api/novels/:id/character-resource-proposals/:proposalId/reject
接口返回应包含 UI 可直接消费的摘要,不要求前端拼复杂状态。
角色资源账本是动态角色系统的执行期补强。
现有动态角色系统关注:
- 角色目标;
- 当前状态;
- 阵营轨迹;
- 关系阶段;
- 缺席风险;
- 卷内职责。
资源账本补上:
- 角色行动资源;
- 资源可见性;
- 物品连续性;
- 底牌和工具的后续使用窗口。
资源账本不是新的大真源。它应作为分域正式资产,由 CanonicalStateService 汇总为当前状态摘要。
原则:
- 资源账本保存长期事实;
- canonical state 保存当前生产需要的轻量视图;
- runtime / review / repair 只消费当前任务相关资源窗口;
- 所有长期变更通过
StateChangeProposal -> StateCommitService进入正式状态。
payoff ledger 管“叙事承诺”,资源账本管“角色资源和行动边界”。
二者会交叉,但不要合并:
- 一把枪可以是资源账本项;
- 如果这把枪被提前铺垫且必须在第 10 章使用,它同时会关联 payoff ledger;
- payoff ledger 负责兑现窗口和风险;
- 资源账本负责持有状态、可见性和使用连续性。
写作前上下文应包含:
- 参与角色的当前关键资源;
- 本章计划需要的资源;
- 缺失资源;
- 不允许提前使用的资源;
- 高风险资源约束。
这部分应进入章节执行上下文,而不是让 writer 自己从长篇资料里推断。
审阅:
- 发现资源连续性问题;
- 标记缺失铺垫;
- 标记资源可见性错误。
修复:
- 优先局部补铺垫;
- 修改不合理使用;
- 必要时触发 replan。
重规划:
- 调整资源出现窗口;
- 前移铺垫章节;
- 后移使用章节;
- 改变角色行动方案。
目标:把系统边界、数据合同和主链接入点固定下来。
任务:
- 新增共享类型草案;
- 明确 Prisma 模型;
- 明确 PromptAsset 输入输出;
- 明确
StateChangeProposal扩展; - 明确 UI 入口和首版展示范围;
- 明确自动提交和 pending review 策略。
验收:
- 文档、类型草案和接口草案一致;
- 不与 payoff ledger、dynamic character 和 canonical state 职责冲突;
- 新手 UI 不要求用户手填全量背包。
目标:能保存、读取和汇总角色关键资源。
任务:
- 新增
CharacterResourceLedgerItem和CharacterResourceEvent; - 新增 service 和 mapper;
- 新增角色资源列表 API;
- 在角色运行态摘要中加入资源摘要;
- 补最小服务端测试。
验收:
- 主角和长期角色能读取当前关键资源;
- 资源事件能追溯到章节;
- canonical state 能读到轻量资源摘要;
- 不影响现有章节写作链。
目标:章节完成后能自动提取资源变化。
任务:
- 新增
novel.character_resource.extract_updates@v1PromptAsset; - 接入章节完成后的后台同步;
- 生成
character_resource_update候选; - 实现低风险自动提交和高风险待确认;
- 对接
StateCommitService。
验收:
- 章节中明确获得、转交、消耗的关键资源能被提取;
- 幻觉资源不会直接进入账本;
- 高风险变更进入 pending review;
- 资源变化能刷新后续上下文。
目标:资源账本真正影响章节生产。
任务:
- runtime 上下文加入本章相关资源;
- review 增加资源连续性检查;
- repair 增加资源问题的
patch_first修复建议; - replan 能看到资源缺口和误用风险;
- 补 targeted regression tests。
验收:
- 角色不会轻易使用未获得资源;
- 已消耗资源不会被正常复用;
- 缺少关键资源时,系统建议先铺垫或改写行动;
- 修复默认局部补丁优先。
目标:用户能看见并确认资源账本,不需要理解内部状态系统。
任务:
- 角色页新增“关键资源”区域;
- 章节准备区新增“本章关键资源”;
- 审阅结果显示资源连续性问题;
- 任务中心显示资源变更待确认;
- 卷级工作台显示跨章资源承诺摘要。
验收:
- 主角资源默认清晰可见;
- 长期角色只显示关键资源;
- 临时角色资源默认只在章节上下文展示;
- 用户能确认或拒绝高风险变更;
- UI 文案从用户视角解释功能和下一步。
目标:让资源账本参与长篇节奏控制。
任务:
- 资源使用窗口接入卷级工作台;
- 资源与 payoff ledger 建立可选关联;
- 增加资源滞留、误回收、提前暴露风险;
- 支持组织 / 地点资源的更完整归属;
- 支持旧项目资源回填。
验收:
- 系统能提醒“这个关键物已经铺垫但长期未用”;
- 系统能提醒“这个资源应在本卷保留,不要提前消耗”;
- replan 能根据资源状态调整章节窗口;
- 旧项目可通过 AI 抽样回填关键资源。
- 创建、更新、读取角色资源账本;
- 资源事件顺序和章节引用;
- 同名资源合并与冲突检测;
- 低风险自动提交;
- 高风险 pending review;
- canonical state 资源摘要;
- runtime 上下文资源裁剪;
- review 资源连续性问题;
- repair 局部修复建议;
- replan 资源缺口判断。
固定样例覆盖:
- 主角获得钥匙;
- 主角把证据交给配角;
- 反派暗中保留底牌;
- 物品被消耗;
- 物品只是比喻,不应入账;
- 临时角色提供线索后消失;
- 资源和 payoff 兑现窗口相关;
- 章节中出现疑似未铺垫资源。
- 主角角色页显示完整关键资源;
- 长期角色显示轻量资源;
- 临时角色不默认进入长期背包;
- 章节执行前展示本章可用资源和缺口;
- 审阅问题能跳到相关资源;
- pending review 能确认、拒绝、跳来源章节;
- UI 文案不出现实现迁移类表述。
风险:背包系统变成另一个需要用户手工维护的大表。
对策:
- 默认 AI 提取;
- 只显示关键资源;
- 临时资源不默认长期化;
- 高风险才打扰用户。
风险:模型提取不存在的资源并写入状态。
对策:
- 提取必须带证据;
- 低信心进入待确认;
- 和已有角色、章节、规划交叉校验;
- 高影响资源不自动提交。
风险:把全量背包塞进 writer,拖慢生成并干扰正文。
对策:
- runtime 只消费本章相关窗口;
- 按参与角色、章节目标、资源风险裁剪;
- 资源账本详情只给审阅、修复和 UI。
风险:资源账本和伏笔账本都在追踪关键物。
对策:
- payoff ledger 管承诺和兑现;
- 资源账本管持有、可见性和使用状态;
- 用可选关联连接,不合并职责。
建议把本能力作为 P0-B / P0-E1 的子项推进:
- 它补强“动态角色系统进入执行期行为判断”;
- 它依赖 canonical state 和 StateCommitService;
- 它能提升章节 runtime、review、repair、replan 的一致性;
- 它能减少小白用户手动盯连续性的负担。
不建议在当前阶段把它升级成独立大模块或独立一级导航。首版更适合嵌入角色页、章节准备区、审阅区和任务中心。
首个可交付版本只需做到:
- 主角和长期角色有关键资源账本;
- 章节完成后 AI 能提取资源变化;
- 低风险自动提交,高风险待确认;
- 章节写作前能看到本章相关资源;
- 审阅能识别至少三类资源连续性问题;
- 用户能在 UI 中确认或拒绝资源变化。
只要这条闭环跑通,角色背包系统就已经从“设定管理”变成“长篇叙事控制”的一部分。
本节记录本轮角色背包 / 角色资源账本的实际落地状态,避免执行计划、TASK 记录和代码进度脱节。
- 数据层与共享类型已完成:新增角色资源账本项、资源事件、资源状态 / 类型 / 叙事功能枚举、风险信号和来源证据,并补齐 Novel、Character、Chapter 关系与索引。
- AI 提取与状态提交已接入:
novel.character_resource.extract_updates@v1已注册为 PromptAsset,章节资源变化会生成character_resource_updateproposal,低风险自动提交,高风险、低置信度、关键销毁 / 消耗保留待确认。 - 章节上下文已消费资源窗口:写作、审阅、修复、重规划只注入本章相关资源摘要,不把全量账本塞进 runtime。
- API 与 UI 首版已落地:支持小说 / 角色 / 章节维度读取资源,支持提取、确认、拒绝资源 proposal;角色准备页展示关键资源,章节执行页展示本章关键资源。
- 当前小说数据已做受控修复:对《古剑镇春秋》执行一次角色动态重建,恢复 5 条卷级角色职责;对历史后台资源 proposal 中可自动入账的 16 条执行确认,剩余 14 条高风险或证据不充分的资源变化继续保留待确认。
- 卷级角色动态不再随每次章节同步反复重建;当前只在版本激活、旧数据迁移,或首次具备章节内容的工作区更新时触发。
chapter_execution_contract_refined与普通章节同步不再触发角色卷级投影重算,避免章节细化 / 执行链路重复消耗大段角色 token。- 章节资源后台提取增加同章同阶段幂等保护:自动导演链路同一章节只自动提取一次;后续修复、重试或后台同步不会重复跑资源提取。
- 手动资源提取仍保留覆盖能力,用于用户主动要求重新识别本章资源变化的场景。
- 空投影和无效投影不会清空已有
CharacterVolumeAssignment;AI 输出必须包含非空 assignment,并且 faction / relation 投影必须带有效卷序。
- 自动导演后台产生的低风险与中等风险资源变化默认自动入账,减少用户在自动模式下被频繁打断。
- 高影响、低置信度、高风险、关键资源销毁 / 消耗、底牌暴露、归属重大变更仍进入待确认。
- 待确认入口面向用户解释为“确认后会影响后续写作”,只保留确实需要人判断的变更。
- 资源账本继续只负责持有、可见性、使用状态和行动边界;伏笔账本继续负责叙事承诺与兑现窗口。
- 角色准备页已具备“关键资源”视角:主角完整展示,长期角色轻量展示,临时角色默认不长期化。
- 章节执行页的“本章关键资源”已移动到右侧执行侧栏,靠近执行动作与章节状态,避免挤占正文规划区域。
- 章节资源面板聚合展示可用资源、需要铺垫、不能提前使用、缺失资源和待确认资源。
- 审阅 / 修复链路可消费资源连续性风险,用于提示未获得却使用、已消耗却复用、转交后归属错误、知情状态错误等问题。
已完成本轮 targeted 验证:
pnpm --filter @ai-novel/server buildpnpm --filter @ai-novel/client buildnode --test tests/stateCommitService.test.js tests/novelDirectorAutoExecutionStatus.test.js tests/chapterLayeredContext.test.js
- 当前项目仍有历史资源 proposal 保持待确认,主要属于高风险、销毁 / 消耗、证据不足或需要人工判断的资源变化;它们已能通过章节面板和小说任务抽屉处理。
- 旧的自动导演任务状态恢复 / 取消策略需要单独处理;它属于任务运行态治理,不属于角色背包账本本身。
- 后续可继续增强资源与 payoff ledger 的显式关联、更细的组织 / 地点资源归属,以及更完整的资源历史时间线。
- 章节执行页已区分自动导演模式和手动模式:自动导演运行时显示“自动同步”,常规资源变化自动入账,只把高风险变更留给用户判断。
- 手动写作模式新增“复查本章资源”入口:用户改完正文后可以主动触发本章资源提取,低风险直接用于后续写作,中等风险和不确定变更进入待确认。
- 本章关键资源面板只展示当前章节相关的待确认资源变更,避免其他章节的历史 proposal 干扰当前执行。
- proposal 摘要已带来源信息,前端可区分“自动同步发现”和“手动复查发现”,方便用户判断这些变更来自后台导演还是主动复查。
- 本轮验证通过
pnpm --filter @ai-novel/shared build、pnpm --filter @ai-novel/server build、pnpm --filter @ai-novel/client build和资源提交 / 章节上下文 targeted tests。
- 小说任务抽屉已显示“资源变更待确认”:用户可以在任务面板里查看来源、确认入账或忽略变化,不必进入具体章节后才发现待处理资源。
- 任务面板的资源 proposal 会展示资源名、持有角色、风险级别、证据、判断原因和来源类型,并支持跳回来源章节。
- 卷战略页已新增“本卷关键资源承诺”:只显示影响本卷行动边界、铺垫或后续兑现的资源,避免把全量背包搬到卷级工作台。
- 角色准备页新增“回填最近章节”入口,用于旧项目或已有正文的轻量资源回填;默认只扫描最近 3 个有正文的章节,并为回填链路保留幂等检查点,避免重复消耗 token。
- 资源复查 / 回填提交时显式跳过通用章节事实提取,只处理角色资源 proposal,避免在资源功能里顺手改动其他状态。
- 本轮验证继续通过 shared/server/client build 和资源提交 / 章节上下文 targeted tests。