7ca82ba7aa
审批卡链路的三处项目锁错误改为脱敏后再进typed错误
阶段进度按等待状态显示真实轮次,不再透传0-indexed值
去掉reconcile错误的重复code拼接
补一条Rust脱敏回归与两条前端轮次回归
锁错误脱敏(方案 §18.3「返回值不包含绝对路径……或内部诊断」):
acquire_project_write_lock 的 Err 内嵌 .agent/project.lock 真实绝对路径。补
redact_agent_runtime_project_paths 的三处是前端审批卡真正会显示的那条链——
reconcile_plan_gdd_approval_projections_at(hydrate 在取自己的锁之前调它)、
hydrate 自己的锁、decide_plan_gdd_at(其错误与 hydrate 的错误渲染在同一个
错误区)。planning 另有 14 个取锁点沿用未脱敏写法,属 M1B/M1C 既有模式,
本次不扩面。脱敏不破坏「项目正在被其他写操作占用:」前缀,project_gates.rs
与 provider_recovery.rs 两处按前缀分类的判据不受影响。
澄清轮次口径:clarificationRound 与 awaitingAnswerFor.round 都由
static_delegate_lineage_counters 派生,该函数排除目标自身,是 0-indexed 的
「已答轮数」;后端判上限用的是 current_round + 1。原样渲染成「轮次 X/3」
整体差一格——问最后一轮时显示「轮次 2/3」,字面暗示还剩一轮。只改前端
文案、不动 DTO 语义:等待回答时显示「第 N+1 轮 / 共 3 轮」(此时
latestDelegationId 就是当前 delivery,+1 恰好等于后端校验用的轮次),
其余状态退回「已完成 N/3 轮澄清」,不猜当前轮。
顺带:planning_hydrate.rs 里 reconcile 的错误原本用同一 code 把 to_string()
当 detail 重包一层,而 PlanningStorageError 的 Display 已是「{code}: {detail}」,
渲染出 CODE: CODE: detail;code 与 detail 均无变化,改为直接 ? 传播,并把
「不重复拼 code」钉进回归。
测试陷阱:写「占住项目锁」的 fixture 必须给锁 JSON 填真实 createdAt。失效锁
回收的年龄判定读的是该 JSON 字段而不是文件 mtime,填 0 会让锁显得约 1.7e9 秒
老、越过 600 秒阈值被当场回收删除,hydrate 反而成功。第一版 fixture 正是这样
自证失败的,注释已写明。
验证:Rust planning_ 组 155 passed / 0 failed(原 154 + 本次 1 条);
appSurface.test.ts 383 passed / 0 failed(378 原有 + 5 条新增);三条新回归均经
变异验证,逆转对应修复即变红。cargo fmt --check、agc:typecheck、ESLint
--max-warnings 0、check:encoding、git diff --check 通过。
撤回一条此前的审查发现:曾判定 hydrate 读 manifest 缺符号链接判定。复核后不
成立——read_manifest 自身在 is_symlink 处即拒,防护在另一层;.agent 目录本身
为符号链接的残差也无窗口,紧随其后的 resolve_planning_path 同样逐段判定。
未据此改动代码。
新记一条既有问题(非 M1D 引入):seedManifest.projectId 是常量
local-project-draft,App 的 5 个 init/import 调用点全传它,因此本机所有项目
projectId 相同。§18.3 第 1 步依赖的 projectId 校验因此分辨不出任意两个项目,
该门当前近乎恒真,须单独立项。
仍未修:hydrate 身份校验排在落盘投影修复之后(修它须注意 reconcile 自取项目
锁、.agent/project.lock 不可重入,不能把检查直接挪到 hydrate 取锁之后);
design 组展示名剩两处硬编码,且与 taskGroupLabels 命名体系不同,需先定口径。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
文档总览
docs/ 只把当前融合文档和仍在维护的专题文档作为实现依据。旧创作模板、旧创作入口及其专属服务文档仅保留为历史材料,不再要求继续实现或兼容。
必读入口
- Agent 工作入口与执行准则
- 当前产品与工程约束
- server-rs 与 SpacetimeDB 数据契约
- 平台入口与玩法链路
- 本地开发验证与生产运维
- AI 游戏创作项目开发工作台 PRD
- AI 游戏创作智能体 App 实施计划
- 客户端素材创作无限画布阶段一合同
团队长期约定、决策、流程和排障摘要统一从 项目记忆入口 读取。代码、当前融合文档与项目记忆冲突时,以代码和最新融合文档为准。
当前专题
AI 游戏创作与 Agent Runtime
图片编辑器与 Agent
- 客户端素材创作无限画布阶段一合同
- 图片画布编辑器 MVP 接入方案
- 图片画布编辑器前端拆分计划
- 图片画布游戏场景生成链路
- 画板音乐生成入口设计
- SFX 生成优化 V2.0 任务拆解
- SFX 生成优化 V2.0 T6 测试与发布门禁
- 音频生成 Composer 恢复共享分流方案
- BGM 提示词优化 T6 测试与发布门禁
- 画布 Agent 对话面板
- 画布 Agent 会话消息存 OSS
- 图片画布撤销范围与操作提示方案
- 浏览器内 AI Web 工程沙箱预览
- AI Web 工程 Runner 安全模型
后端与公开数据
- 外部生成 Worker 化方案
- BgFilter 受限资源调度方案(同步内部 HTTP 原地等待版)
- 统一公开作品 Read Model 设计
- 外部 OpenAPI 与 API Key 接入方案
- SpacetimeDB 连接池取消安全
后台、宿主壳与运维
- Dashboard 运营看板方案
- Jenkins 容器预览部署控制面
- 后台多账号与 Tab 访问权限
- 宿主壳能力统一协议
- Expo React Native 与 Tauri 宿主壳方案
- Pingora 独立网关试点
- 本地 SSH 服务器管理面板
测试与协作
历史文档边界
- 旧创作模板、旧创作入口、旧运行态和旧素材生成方案不再从本页索引,也不再作为修复目标。
maincloud、旧 Node/Express/PostgreSQL/Go 后端和人工spacetime --root-dir口径均已废弃。- 历史文档不得覆盖当前融合文档、代码契约或
docs/project-memory/shared-memory/decision-log.md中更新的决策。
命名规则
后续新增 Markdown 文档文件名使用 【标签名】中文标题-日期.md。历史文件不做无关批量重命名;本次涉及的旧文档可直接删除或在当前入口中取消引用。