PMFlow/docs/PMFLOW_PRODUCT_DELIVERY_STA...

4005 lines
274 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PMFlow 产品推进执行标准
版本日期:2026-04-24
本文档是 PMFlow 产品方案落地的推进标准。它回答四件事:
- 当前产品方案推进到哪里了。
- 下一步应该继续往哪里推进。
- 每次推进的范围、验收和文档回写怎么做。
- 新开 Codex 线程时如何接续,避免重做、漏做或偏离方向。
产品方向真源仍以 `docs/PMFLOW_PRODUCT_BLUEPRINT.md` 为准。本文档不重新定义战略,只管理落地节奏和进度。
## 1. 当前推进判断
截至 2026-04-24,PMFlow 已经完成“产品方向收敛 + 前端本地高保真主链 + 后端局部控制面”的阶段,但还没有完成“真实数据闭环产品化”。
### 1.1 已经推进到位的部分
#### 产品方向
- 已明确 PMFlow 不是“聊天工具 + 项目管理工具”,而是“对话驱动的 AI 产品执行操作系统”。
- 已明确首版方向为 `solo-first, team-ready`,面向个人开发者、一人公司、半技术产品创作者和 1-10 人 AI 应用小团队。
- 已明确团队协作不是传统多人维护任务表,而是围绕 AI 维护的项目真相层进行异步审查和人机混编执行。
- 已明确 V1 主链为:`创意输入 -> AI 结构化提取 -> 变更确认 -> 项目对象沉淀 -> 任务拆解 -> 推送 IDE / agent -> 开发与测试回写 -> 发布 -> 数据反馈 -> 下一轮迭代`。
真源:
- `docs/PMFLOW_PRODUCT_BLUEPRINT.md`
- `USER.md`
#### 前端产品域
当前已经存在三条独立产品域:
- `frontend/src/features/personal-space/`
- 空间入口。
- 用本地 mock 展示继续推进、待我确认、AI 正在推进、暂存想法、草案箱和新建项目入口。
- `frontend/src/features/project-launch/`
- 新项目启动台。
- 用本地状态机覆盖意图输入、AI 工作、人类确认、草案修改、失败态、创建成功态和移动端 bottom sheet。
- `frontend/src/features/pmflow-os/`
- PMFlow OS 项目内主体验。
- 已有本地 truth store 和页面:`CommandCenter / StructuredExtraction / ChangeReview / MemoryWritebackResult / WorkGraph / ExecutionBridge / ReleaseGrowth / TeamLayer / ProjectMemory`。
- 已有本地状态动作:`sendMessage -> generateExtraction -> acceptChange/editChange/deferChange -> promoteAcceptedToGraph -> pushTaskToExecution -> writeBackExecution -> publishRelease -> ingestGrowthSignal`。
当前性质:
- 这是产品主链的高保真原型和本地行为闭环。
- 还不是正式后端数据闭环。
- 显式 demo 模式仍是本地高保真原型;API 模式下 PMFlow OS 已接真实项目对象、真实 thread message、真实 AI extraction、ChangeSet/ChangeItem 审查与 commit 主链。
#### 后端控制面
当前已经出现 AI 应用项目控制面的初步生产化能力:
- `backend/app/models/ai_project_control.py`
- 模型目录、项目模型绑定、模型推荐快照、模型用量、模型评测。
- Prompt Package。
- IDE 工作区绑定、Repo 绑定、GitHub App 安装/仓库/webhook 投递。
- TaskCodeLink、ProgressEvent、DevSession。
- ReleaseValidationRun、FeedbackIngest、IterationRecommendation、RevenueEvent、ROISnapshot、ComplianceCheckRun、EvidencePack。
- `backend/app/services/ai_project_control_service.py`
- 模型推荐、模型绑定、prompt package、开发同步、GitHub/repo 绑定、进度事件、发布验证、反馈/收入/合规等服务能力。
- `backend/app/api/sstc_api/model_control.py`
- 模型推荐、模型绑定、模型用量、Prompt Package、发布验证、反馈摄取、收入记录、合规检查等接口。
- `backend/app/api/dev_sync.py`
- GitHub App 安装、仓库绑定、开发任务、项目 dev-sync summary、任务进度事件等接口。
当前性质:
- 后端已经有 V1 产品化需要的部分基础对象和接口。
- 但它们还没有和 `frontend/src/features/pmflow-os/` 的本地 truth store 正式打通。
- `ChangeSet / Approval / Evidence / Project Memory` 这条主产品链已形成 PMFlow OS 产品级 API 合同:AI extraction 生成 open ChangeSet + pending_review ChangeItems,ChangeReview 负责 accept/edit/defer,commit 后才写入 Project Memory。
### 1.2 当前缺口
当前最大缺口不是再讨论产品方向,而是:
**把已经成立的产品主链从本地原型推进成真实可用的数据闭环。**
关键缺口按优先级排序:
1. `Project Thread / ChangeSet / Evidence / Approval / Project Memory` 的前后端合同已形成主链,后续重点是质量、覆盖面和 UI 真实态 polish。
2. `project-launch` 还没有接真实 AI 结构化、真实项目创建和真实草案确认。
3. `pmflow-os` store 已接后端读写;只有显式 demo 参数才使用 mock truth store。当前缺口是更多页面去静态文案、真实状态细节和失败态打磨。
4. `ChangeReview` 的接受、修改、暂缓还没有写入正式对象、审批记录和证据链。
5. `ExecutionBridge` 已接入真实 execution-summary/dev-sync、execution handoff、运行端领取和 progress writeback;当前缺口不再是执行桥读写合同,而是执行质量、审查责任和个人队列的产品化。
6. `ReleaseGrowth` 已接入 execution evidence gate、release validation run、feedback ingest、revenue event、ROI snapshot、compliance check 和 recommendation -> ChangeSet draft 回流;发布后业务信号已进入统一 `releaseSignals` 读模型,但仍不做完整财务系统、真实支付或真实合规平台。
7. `TeamLayer` 已接入 reviewer routing、review decision 状态展示、Team Feed 只读动态流、执行能力图谱和容量信号;当前页面已收敛为“团队动态 / 决策台 / 角色收件箱 / 智能体工位 / AI 副驾”的协作态势首屏。团队层只做责任路由、阻塞提示和跳转,不作为第二个 Change Review,也不直接写 Project Memory。
5. `ExecutionBridge` 页面还没有消费 dev-sync / GitHub / PromptPackage 真实接口。
6. `ReleaseGrowth` 已接入 execution evidence gate、release validation run、feedback ingest、revenue event、ROI snapshot 与 compliance check;这些信号已统一进入 `releaseSignals`,可辅助生成下一轮 ChangeSet draft,但不自动 commit。
7. `TeamLayer` 已接入 reviewer routing / review decision 读模型与 Team Feed 只读动态流,能展示待审变更集、建议审查人、审查原因、风险类型、缺角色 warning、审查状态、审查意见,以及 review / execution / release gate 聚合动态;首屏已按团队协作驾驶舱组织为团队动态、决策台、角色收件箱、智能体工位和上下文 AI 副驾。Role Inbox、Decision Desk 当前仍是基于现有 truth state 的摘要表达,完整真实收件箱与决策台模型仍是后续 Team lane 工作。
8. `Execution Capability Graph` 已确认为团队空间前置模型:旧 `用户管理 / 能力管理 / 团队负载` 不再作为一级产品功能;成员能力进入 `/space/settings/members`,容量进入 `/team-layer?view=capacity`,个人空间展示执行准备度,TeamLayer 展示执行能力与容量信号;后续团队空间只能扩展 `AI + 工具 + 人类判断责任 + 项目上下文 + 容量信号`,不得回到传统用户/技能/工时报表三件套。
9. `Adaptive Human Capacity` 已确认为旧工时负载的替代模型:每日 `suggestedBaseline` 必须由当天真实任务池动态生成,所有人工触点共享同一个容量池;总时间判断硬上限,类型占比只判断疲劳和质量风险。负责人 override 必须先 simulate,再 apply,并记录原因、审计、过期时间;团队空间后续不得回到固定工作类型槽、静态技能标签或旧 workload ratio 直接派活。
## 2. 下一步推进方向
下一步不要扩大战线,不要新增新的战略产品表面;可以在已确认的 `Main Flow / Space / Account Settings` 这些既有表面内并行推进。正确方向是:
**把 V1 主链真实闭环化。**
也就是从“本地高保真原型”推进到“真实项目对象 + 真实 AI 提取 + 真实确认写入 + 真实执行回写”。
### 2.1 下一阶段总目标
阶段目标命名为:
**V1 Productized Loop**
验收标准:
- 用户从 `/project-launch` 输入一个 AI 应用创意。
- 后端生成可审查的结构化草案或变更集。
- 用户确认后创建项目,并写入项目真相层。
- 进入 `/command-center` 后能看到真实项目线程、结构化提取、待确认项和项目对象。
- 用户接受变更后,正式对象、审批记录、证据链同步更新。
- 至少一个任务能生成 Prompt Package,并进入 Execution Bridge。
- Execution Bridge 能消费真实 dev-sync summary 或 progress event。
- 发布/反馈页能消费至少一类真实 release validation / feedback / revenue / compliance 数据。
### 2.2 暂不推进的方向
下一阶段暂不推进:
- 完整财务系统。
- 完整合规平台。
- 企业组织树和复杂权限矩阵。
- 多项目 portfolio。
- 应用市场、投融资、孵化生态。
- 前台多 agent 选择器。
- 与产品主链无关的后台治理页扩展。
这些都不是当前瓶颈。
## 3. 推荐推进顺序
### 3.0 功能原型一致性治理
任何 PMFlow 核心功能在继续出图、重画、实现或新开线程接续前,必须先确认是否已有 canonical 功能契约。若已有契约,后续只能在该契约下新增状态、补充局部区域或做明确版本迭代,不能把同一功能重新设计成另一套页面。
功能契约至少包含:
- 功能定位
- 页面/状态列表
- 固定导航壳
- 核心对象模型
- 状态标签体系
- 用户动作
- AI 动作
- 系统状态
- 移动端规则
- 不可随意改变的部分
- 可扩展的部分
确认流程:
1. 先列出本轮涉及的功能清单。
2. 每次只提交一个功能契约给用户确认。
3. 用户确认后,才把该功能契约写入本文档或对应产品真源。
4. 后续原型图、实现、验收都以已确认契约为准。
5. 如需重构,必须先说明旧版是什么、新版改什么、迁移影响是什么,并得到明确确认。
当前需要逐个确认的功能清单:
- 新项目启动台
- 个人空间首页
- 项目指挥台
- 本轮结构化提取
- 决策与待确认
- 项目记忆
- 移动端底部导航
- 项目切换器
- 项目工作台
- 开发执行联动
- 发布与增长
- 团队协作
### 3.1 审查、写入记忆与开发执行边界
当前产品方案确认以下顺序为 Main Flow 主链合同,后续原型和实现不得绕开:
```text
对话 / 材料输入
-> Structured Extraction
-> ChangeSet / ChangeItem / EvidenceLink
-> Change Review 初审与分流
-> 必要时 Team Layer 角色审查
-> accepted / edited / deferred / rejected 审查结果
-> 确认写入 Project Memory
-> Work Graph 形成正式 Task / Decision / Risk / Requirement
-> Execution Capability Graph 判断执行模式
-> Execution Bridge 发起执行交接
-> Codex / Local Bridge / GitHub agent / IDE 执行与回写
```
关键判断:
- 不允许先写入项目记忆再要求团队补审;高风险、跨角色、缺证据或需要专业判断的变更必须先完成角色审查。
- 团队层不是第二套待确认中心,只做责任路由、角色收件箱、团队动态、审查状态、阻塞解释和跳转。
- `accept / edit / defer / reject / review decision` 只改变审查与 approval 状态,不写 Project Memory。
- `确认写入项目记忆` 是唯一把 accepted / edited 项提交到 `truth_nodes / tasks / semantic_facts` 等正式对象的动作。
- 开发执行不能从 AI 候选 Task 直接开始;必须先由 Project Memory commit 形成正式 Task,再进入执行准备与 handoff。
- 人员或 agent 分配分两层:审查责任在 Change Review / Team Layer 阶段确定;执行责任在正式 Task 形成后、Execution Bridge handoff 前通过 Execution Capability Graph 与容量信号确定。
- `发起执行交接 / 推送到 IDE / 分派给 agent` 只能在正式任务、上下文包、repo/runtime、测试与回写证据满足最小条件后成为可执行主按钮;否则显示 blocked/warning 和下一步。
按钮状态限制:
| 动作 | 允许使用 | 禁止或限制 |
| --- | --- | --- |
| 接受 | 候选项正确、证据充分,可进入待写入集合 | 不写 Project Memory;高风险缺 reviewer gate 时不可执行 |
| 修改 | 候选项方向正确但字段或范围需修订 | 必须保留原始 proposal、before/after 与 evidence |
| 暂不落库 | 当前不写入但保留后续处理空间 | 不等于拒绝;不得进入 commit eligible 集合 |
| 拒绝 | AI 误读、重复、证据错误或方向错误 | terminal discard;不得用 defer 冒充 |
| 批量接受 | 低风险、同类、证据充分且无需角色审查 | 不得混入高风险、缺证据、unsupported 或 required review 项 |
| 稍后处理 | 队列提醒 / 排序,不改变业务状态 | 不得写 approval、defer 或 reject |
| 请求审查 | 需要产品、技术、QA、增长等角色异步判断 | reviewer 缺失时只显示阻塞,不虚构分派 |
| 通过审查 | reviewer 认可变更质量 | 不写 Project Memory,不触发执行 |
| 要求修改 | reviewer 要求补字段、证据、范围或验收标准 | 不终止 item,回到 owner 修改 |
| 确认写入项目记忆 | accepted / edited 项通过 gate 后 atomic commit | 存在 pending required review、无 eligible item、缺 evidence 或 unsupported object type 时不可执行 |
| 发起执行交接 | 正式 Task 已存在且执行准备度满足最低条件 | 不得针对 pending ChangeItem 或 draft Task 执行 |
### Phase A:产品合同收口
目标:
把 `pmflow-os` 本地类型、现有 SSTC/semantic facts/ai_project_control 后端对象和 V1 蓝图对象对齐。
范围:
- 梳理 `ProjectThread / ChangeSet / ChangeItem / Evidence / Approval / ProjectMemory / ExecutionRun` 的后端合同。
- 明确哪些对象复用现有表,哪些需要新表或投影表。
- 明确 `frontend/src/features/pmflow-os/types.ts` 如何映射到 API response。
- 明确哪些接口走已有 `sstc_api` / `dev_sync`,哪些需要新增 `pmflow_os_api`。
产物:
- API/Schema 设计说明或直接 Pydantic schema。
- 更新 `docs/architecture/CODE_REFERENCE_INDEX.md`。
- 如新增表,必须 Alembic migration。
验收:
- 能回答“前端每一个本地对象从哪个后端字段来,写回到哪里去”。
- 不能再出现前端原型对象和后端业务对象各讲各话。
### Phase B:Project Launch 真实创建链
目标:
把新项目启动台从本地状态机接到真实项目创建/草案确认主链。
范围:
- `/project-launch` 意图输入接真实 API。
- AI 结构化结果必须产出可审查草案,而不是直接静默创建。
- 用户确认后创建项目,并跳转真实 `/command-center`。
- 创建结果必须写入项目真相层初始对象:Idea、Requirement、Decision、Risk、Task 或等价 SSTC 对象。
验收:
- 真实接口创建项目。
- 失败时显式失败,不用 mock 冒充成功。
- 创建成功后进入真实项目上下文。
- 项目创建前移动端仍不展示正式底部导航。
### Phase C:Change Review 与 Project Memory 写入
目标:
让对话/结构化提取生成的 ChangeSet 能被接受、修改、暂缓,并写入正式项目对象和证据链。
当前拆分:
- C1:真实 Change Review 数据底座与审查状态机,已实现项目线程消息、真实 AI extraction、显式 `proposed_items` draft、`ChangeSet / ChangeItem / Approval / EvidenceLink` 表和 `accept / edit / defer`;AI extraction 失败必须显式失败,不生成模板假结果。
- C2:提交入库,把已接受/已编辑 ChangeItem 写入 `truth_nodes / tasks / semantic_facts` 并完成高风险 approval gate。
范围:
- `StructuredExtractionPage` 接真实提取结果。
- `ChangeReviewPage` 接真实 ChangeSet。
- 接受/修改/暂缓动作调用后端。
- C2 写入后 `ProjectMemoryPage / WorkGraphPage / TeamFeed` 能读到最新对象。
验收:
- ChangeSet 有 Evidence。
- 高风险变更需要 Approval。
- C1 接受后只进入 `accepted / edited / deferred` 审查状态,不进入 Project Memory。
- C2 commit 后对象状态从 proposed/draft 进入 confirmed 或对应正式状态。
- 暂缓后不进入项目真相层,但仍留审计。
### Phase D:Execution Bridge 真实开发同步
目标:
让 PMFlow 真正连接开发执行,而不是只展示执行概念。
范围:
- `ExecutionBridgePage` 消费 `devSyncApi`。
- 任务能生成 Prompt Package。
- 能绑定 repo 或展示 GitHub App 安装状态。
- 能创建或读取 ProgressEvent。
- 能把 PR/commit/test 信息回写到任务和 Team Feed。
验收:
- 至少一个真实任务能进入执行桥。
- 能看到真实 Prompt Package 或 dev task。
- 能看到真实 progress event。
- 任务状态能随回写变化。
### Phase E:Release / Growth 轻量闭环
目标:
上线后反馈进入下一轮迭代,不停在“开发完成”。
范围:
- `ReleaseGrowthPage` 已消费 execution evidence gate、release validation run、feedback ingest 与统一 `releaseSignals`。
- `releaseSignals` 已聚合 feedback / revenue / ROI / compliance / recommendation,缺数据时返回 explicit empty/warning,不用静态 mock 指标补位。
- revenue event、基础 ROI snapshot 与 compliance check 只作为轻量发布后经营/风险信号,不扩成完整财务系统、真实支付或真实合规平台。
- 真实 recommendation 能生成下一轮 ChangeSet draft。
验收:
- 发布前有门禁。
- 发布后有反馈/收入/成本/合规至少一类真实信号。
- 信号能回流为下一轮建议,不只是展示图表。
### Phase F:Team-ready 最小闭环
目标:
不做重型团队管理,但补齐小团队围绕项目真相层协作的最小能力。
范围:
- 成员归属。
- 执行能力图谱:先判断 AI 直接执行、AI+用户验收、AI+技术审查、需人类补判断或当前阻塞。
- 角色收件箱 Role Inbox。
- Team Feed。
- Decision Desk 或高风险变更多人审查。
- Agent Workforce 的只读可见化。
验收:
- 不同角色看到不同待处理项。
- 高风险变更集能先展示建议审查人/负责人、审查原因与证据数量;自动指定或权限化分派不属于当前最小闭环。
- 团队层是协作态势与责任路由页,不能成为第二个待确认中心;正式接受、修改、暂缓、拒绝和写入 Project Memory 仍回到 `ChangeReviewPage`。
- Team Feed 展示 AI 提取、人工确认、执行回写、测试/发布变化。
## 4. 单次任务范围标准
每次 Codex 执行产品推进任务,必须控制为一个“可闭环增量”,不要跨太多面。
### 4.1 默认范围
一次任务最多覆盖:
- 一个产品表面:如 Project Launch / Change Review / Execution Bridge。
- 一个后端合同或服务切片。
- 一个前端接入切片。
- 对应测试。
- 对应文档进度回写。
如果预计改动超过 5 个核心文件或超过约 200 行业务代码,必须先拆子任务,除非是同一根因的缺陷修复。
### 4.2 推荐任务模板
每次新任务开始前,先给自己明确:
- 本次要推进的 Phase。
- 本次要打通的用户路径。
- 涉及的前端入口。
- 涉及的后端 API / service / model。
- 本次不处理的边界。
- 最小验证命令。
- 完成后要更新的进度文档。
### 4.3 禁止范围漂移
产品推进任务里禁止顺手做:
- 无关视觉重构。
- 无关后台治理页扩展。
- 无关权限体系大改。
- 无关 AI prompt 大改。
- 无关模型路由策略调整。
- 无关文案大清洗。
除非这些问题直接阻断本次用户路径。
### 4.4 Codex 并行推进协议
PMFlow 允许多个 Codex 线程并行推进。产品上可以按“大模块 lane”长期并行,例如主流程、空间、个人中心,但实际执行单位仍必须是明确的 `Packet`。不能只用“做空间”“做个人中心”“做主流程”这类模糊大模块直接开工;每个模块 lane 都必须拆成带 `write_scope` 的 Packet。没有 `write_scope` 的任务不允许并行执行。
每个并行 `Packet` 开始前必须声明:
- `packet_id`
- `phase`
- `owner_thread`
- `base_ref`
- `read_scope`
- `write_scope`
- `forbidden_paths`
- `shared_files`
- `depends_on`
- `merge_after`
- `verification`
- `docs_to_sync`
并行硬规则:
- 只有 `write_scope` 不重叠的 Packet 才允许并行。
- 任意两个 Packet 若同时需要改 `router / schema / migration / shared API client / shared store / CLAUDE.md / CODE_REFERENCE_INDEX.md`,必须串行。
- 每轮并行最多保留一个 `contract / migration / router owner`;其它线程只能消费该 owner 已定义的稳定接口。
- 并行线程不得在自己的 `write_scope` 外做“顺手修复”;发现阻塞问题时,只记录到 integration notes 或新建后续 Packet。
- 同一批并行开发必须指定一个 `integration owner`,负责最终合并共享文件、跑集成验证和更新进度台账。
### 4.4.1 大模块并行治理
大模块并行的目标是让不同产品表面长期同时推进,但不让它们抢同一批共享文件、共享状态和共享合同。
大模块 lane 可以长期存在;Packet 必须短生命周期。lane owner 负责该产品表面的连续性,Packet owner 负责一次可验证增量。一个 lane 同一时间可以只有一个活跃 Packet,也可以拆成同 lane 内串行小 Packet;不同 lane 只有在 `write_scope` 不重叠时才允许并行。
大模块并行必须遵守以下规则:
- 先由 `Shell / Integration owner` 冻结公共壳、路由、导航、Provider、共享 API client、共享文档归属。
- `Main Flow / Space / Account Settings` 等模块线程只能写自己 lane 的 owned files。
- 任一模块需要改共享文件,必须先把该修改拆给 `Shell / Integration owner`,不能在模块 Packet 里顺手改。
- 模块之间只能通过稳定合同交互:URL、route params、只读 summary API、事件/待确认摘要、用户偏好 API;禁止跨模块直接 import 对方 store 内部实现。
- Space 只能聚合和跳转,不直接写 Project Memory、ChangeSet commit、Execution Bridge 回写。
- Account Settings 只能处理用户资料、偏好、通知和账户壳,不直接改项目主链、权限核心或 AI 路由。
- Main Flow 可以继续推进 PMFlow OS 主链,但不得顺手重做 Space 首页或个人中心。
- 每批大模块并行仍必须有一个 integration owner 统一执行 `Parallel Integration Gate`。
共享高冲突文件默认只归 `Shell / Integration owner`:
- `frontend/src/router/index.tsx`
- `frontend/src/main.tsx`
- `frontend/src/lib/api.ts` 或其它共享 API base
- `frontend/src/features/pmflow-os/components/PMFlowOsFrame.tsx`
- `frontend/src/features/pmflow-os/components/MobileBottomNav.tsx`
- `backend/app/api/router.py`
- `backend/app/models/__init__.py`
- `backend/alembic/versions/*`
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/architecture/API_CONTRACTS.md`
### 4.4.2 当前大模块 lane 划分
#### Lane 0:Shell / Integration
定位:
- 冻结公共应用壳、路由、移动底部导航、Provider、共享文档和合并顺序。
- 不承担具体产品表面的大量 UI 实现。
默认写范围:
- `frontend/src/router/index.tsx`
- `frontend/src/main.tsx`
- `frontend/src/features/pmflow-os/components/PMFlowOsFrame.tsx`
- `frontend/src/features/pmflow-os/components/MobileBottomNav.tsx`
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/API_CONTRACTS.md`
#### Lane 1:Main Flow / PMFlow OS 主流程
定位:
- 打穿 V1 主链:Project Thread -> Structured Extraction -> Change Review -> Project Memory -> Execution Bridge -> Release/Growth。
- 这是产品核心闭环,优先级最高。
默认写范围:
- `frontend/src/features/pmflow-os/`
- `frontend/src/api/pmflowOs.ts`
- `backend/app/api/pmflow_os_api/`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/app/services/pmflow_change_review_service.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/tests/test_pmflow_*`
默认禁止:
- 不改 `frontend/src/features/personal-space/`。
- 不改 Account Settings 域。
- 不改共享 router / nav / docs,除非本 Packet 就是 integration owner。
#### Lane 2:Space / 个人空间入口
定位:
- 建设 `/space` 作为所有项目、想法、草案、待确认和 AI 推进状态的上层入口。
- Space 是聚合与导航层,不是 Project Memory 或 ChangeSet 的写入层。
默认写范围:
- `frontend/src/features/personal-space/`
- `frontend/src/pages/PersonalSpacePage.tsx`
- `frontend/src/api/space.ts`(如需要)
- `backend/app/api/space_api/`(如需要,只读聚合优先)
- Space 相关测试
默认禁止:
- 不改 `frontend/src/features/pmflow-os/store.tsx`。
- 不改 PMFlow OS 主流程页面。
- 不改 ChangeSet commit / Execution Bridge 写回服务。
- 不直接写项目真相层;写动作必须跳转或调用已有主流程合同。
#### Lane 3:Account Settings / 个人中心与设置
定位:
- 建设 `/me`、个人资料、偏好、通知、AI 使用偏好和账户操作。
- Account Settings 是用户偏好层,不是项目协作层或权限核心重构。
默认写范围:
- `frontend/src/features/account-settings/`(建议新建)
- `frontend/src/features/pmflow-os/pages/AccountPage.tsx`
- `frontend/src/features/pmflow-os/components/AccountControls.tsx`
- `frontend/src/api/accountSettings.ts`(如需要)
- `backend/app/api/account_settings_api/`(如需要)
- Account Settings 相关测试
默认禁止:
- 不改 Project Memory / ChangeSet / Execution Bridge。
- 不改 Space 聚合。
- 不改 OAuth/JWT/auth core;如必须改,另开安全 Packet。
- 不改共享 router / nav,除非由 integration owner 串行处理。
### 4.4.3 P0 公共壳冻结结果
截至 2026-04-26,P0 对当前共享壳的冻结结论如下。后续 `main-flow-phase-d-execution / space-v1-workbench / account-settings-v1` 必须按此边界开工。
#### Route 归属
| 路由 | 当前实现 | 归属 lane | 后续规则 |
| --- | --- | --- | --- |
| `/space` | 已存在,`PersonalSpaceStandalone` -> `frontend/src/pages/PersonalSpacePage.tsx` -> `frontend/src/features/personal-space/` | Space | Space lane 可改页面域;不得在本 lane 改 router,除非通过 Shell owner |
| `/project-launch` | 已存在,`ProjectLaunchStandalone` -> `frontend/src/pages/ProjectLaunchPage.tsx` -> `frontend/src/features/project-launch/` | Project Launch / Shell owned route | 非本批三线程主任务;后续只作为 Space 和 Main Flow 的入口/跳转消费 |
| `/pmflow-os` | 已存在,alias 到 `CommandCenterStandalone`,支持 `?projectId=<id>` 真实项目上下文 | Main Flow | Main Flow lane 消费;route alias 归 Shell owner |
| `/command-center` | 已存在,standalone 与 AuthGuard children 双入口均存在 | Main Flow | 当前作为免登录产品预览壳和项目指挥台入口;后续是否收敛双入口由 Shell owner 单独处理 |
| `/change-review` | 已存在,移动底导“待确认”指向此路由 | Main Flow | Space 只能聚合摘要并跳转,不直接写 Change Review 状态 |
| `/execution-bridge` | 已存在于 AuthGuard children | Main Flow | Phase D 真实接入由 Main Flow lane 负责 |
| `/release-growth` | 已存在于 AuthGuard children | Main Flow | Phase E 再推进,不进入本批 Space / Account scope |
| `/me` | 已存在,standalone 与 AuthGuard children 双入口均存在,页面来自 `frontend/src/features/pmflow-os/pages/AccountPage.tsx` | Account Settings | Account lane 可改 AccountPage/AccountControls;route 归 Shell owner |
| `/settings` | 当前未实现 | Account Settings reserved | 不在 P0 临时新增;由 `account-settings-v1` 提出需要后,Shell owner 串行加 route |
#### Provider 与共享状态
- `frontend/src/main.tsx` 当前全局挂载 `QueryClientProvider -> PMFlowOsProvider -> ToastProvider -> RouterProvider`。
- `PMFlowOsProvider` 当前是全局 provider,但业务所有权归 `Main Flow / PMFlow OS`。
- Space 和 Account Settings 可读取稳定公开 hook/API,但禁止直接改 `frontend/src/features/pmflow-os/store.tsx` 或依赖其内部 mutation 细节。
- 如果 Space 需要“待确认 / AI 正在推进 / 最近项目”摘要,优先新增 `frontend/src/api/space.ts` 与只读后端聚合接口,不能从 PMFlow OS store 内部反向拼。
- 如果 Account Settings 需要用户偏好,优先新增 `frontend/src/api/accountSettings.ts` 与独立后端接口,不能把个人偏好塞进 PMFlow OS truth store。
#### 导航与移动底部栏
- `frontend/src/features/pmflow-os/components/MobileBottomNav.tsx` 是正式应用壳唯一移动底部导航实现。
- 当前五项固定为:`空间 -> /space`、`指挥台 -> /command-center`、`待确认 -> /change-review`、`动态 -> /command-center`、`我的 -> /me`。
- Space / Main Flow / Account 三个模块线程不得各自改底部导航。任何导航项新增、重命名、跳转变更,都必须交给 Shell owner。
- 当前 `动态` 暂时回到 `/command-center`,属于保留占位;后续如实现 `/activity` 或动态页,必须单独开 Shell / Integration Packet。
#### 下一批开工条件
- `main-flow-phase-d-execution` 可以直接开工,前提是不改 router、MobileBottomNav、PMFlowOsFrame 的导航归属。
- `space-v1-workbench` 可以直接开工,前提是只改 `personal-space` owned files 和可选 `space.ts / space_api`,不碰 PMFlow OS store。
- `account-settings-v1` 可以直接开工,前提是不新增 `/settings` route;如确需 `/settings`,先把 route 需求写入 integration notes,再由 Shell owner 添加。
### 4.5 V1 Productized Loop 默认并行切片
V1 主链并行开发默认按 lane 切分:
- `Contract Lane`:API / Schema / DB migration / 核心对象合同,只允许单线程拥有。
- `Backend Lane`:service + route + tests,必须依赖 Contract Lane。
- `Frontend Lane`:`frontend/src/api/` + React Query / store 接入,必须依赖稳定 API 合同。
- `UI Lane`:页面展示、状态、交互、响应式,只能改功能域内组件,不能改 API 合同。
- `Docs/Test Lane`:回归补充、文档同步、验证矩阵,可以和非共享代码并行,但最终由 integration owner 统一收口。
默认合并顺序:
1. Contract / migration
2. Backend service / API
3. Frontend API / store
4. UI / page
5. Docs / test / integration
### 4.6 Phase C2 并行试点拆包
当前下一阶段 `Phase C2:ChangeSet commit 入库` 默认拆成四个 Packet:
- `C2-contract`
- Lane:`Contract Lane`
- 目标:定义 commit API、写入规则、高风险 approval gate、响应合同和失败语义。
- 写范围:PMFlow OS 产品合同、API 合同、schema 草案或对应设计文档。
- 退出条件:后端和前端实现线程不需要再自行决定 API shape。
- `C2-backend`
- Lane:`Backend Lane`
- 目标:实现 ChangeSet commit service、route、transaction、权限边界和后端测试。
- 依赖:`C2-contract`
- 写范围:`backend/app/api/pmflow_os_api/`、`backend/app/services/pmflow_change_review_service.py`、`backend/app/schemas/pmflow_os.py`、相关 tests;若需要 migration,必须回到 Contract Lane 串行处理。
- `C2-frontend`
- Lane:`Frontend Lane`
- 目标:接入 commit API,更新 `pmflow-os` store、Change Review 状态和错误/成功反馈。
- 依赖:`C2-contract`
- 写范围:`frontend/src/api/pmflowOs.ts`、`frontend/src/features/pmflow-os/store.tsx`、`ChangeReviewPage` 或 owned 组件测试。
- `C2-docs-verification`
- Lane:`Docs/Test Lane`
- 目标:同步产品推进台账、代码索引、API 合同、架构库存,并执行最终集成验证。
- 依赖:`C2-backend`、`C2-frontend`
- 写范围:文档和验证记录;共享文档由 integration owner 统一合并。
`C2-contract` 必须先完成;`C2-backend` 和 `C2-frontend` 只能在合同稳定后有限并行;最终必须由一个 integration owner 统一收口。
### 4.7 分支与 worktree 协议
并行开发默认使用独立分支和独立 worktree:
- 分支命名:`codex/<packet_id>`。
- 每个 Packet 必须记录启动时的 `base_ref`。
- 每个并行线程优先使用独立 git worktree,避免同一工作区文件互相覆盖。
- 合并前必须检查当前分支是否落后主集成分支。
- 合并前必须检查 `git diff --name-only`,确认没有写出 `write_scope`。
- 触碰共享高冲突文件时,必须交由 integration owner 合并。
### 4.8 Packet commit 协议
并行开发不是“每改一行就提交”,也不是“多个 Packet 混在一个长期分支里攒”。默认规则:
- 一个 Packet 对应一个短生命周期分支:`codex/<packet_id>`。
- Packet 完成、验证通过、文档同步完成后,必须形成至少一个可审查 commit。
- Codex 必须自行执行 commit gate 判定,不把“该不该提交”默认丢给用户判断。
- 复杂 Packet 可以在同一分支内做多个 checkpoint commit,但每个 commit 都必须是逻辑完整切片,不能提交半成品、失败验证或越界改动。
- 不允许把多个不同 Packet 的实现混进同一个 commit。
- 不允许在旧 Packet 分支上继续做新 Packet;新 Packet 必须从最新 integration base 或明确依赖分支重新开 `codex/<new_packet_id>`。
- 如果新 Packet 依赖尚未合并的 `Contract Lane`,优先等待合同分支合入;确需提前开发时,必须以该合同分支作为 `base_ref`,并在任务包里写明 `depends_on / merge_after`。
- integration owner 只合并通过 `Parallel Integration Gate` 的 Packet commit;未验证 commit 只能留在 Packet 分支内,不进入主集成分支。
- 每个 Packet 合并后,旧 Packet 分支只用于追溯,不再追加新业务改动。
commit gate 判定:
- `auto_commit`:满足全部条件时,Codex 应自行提交当前 Packet 分支。
- 当前改动全部在 `write_scope` 内。
- 没有混入用户或其它线程的未归属改动。
- 触碰共享高冲突文件时,当前线程就是该文件的 owner 或 integration owner。
- 必要验证已通过;若验证无法执行,原因和影响已经写入结果与任务包。
- 必要文档已同步。
- commit 内容只包含当前 Packet。
- `hold_no_commit`:满足任一条件时,Codex 不得提交,只能报告阻塞和证据。
- 验证失败且失败与本 Packet 相关。
- `git diff --name-only` 发现越界改动。
- 工作区混入无法归属的用户改动或其它线程改动。
- 发现 migration 多 head、合同不稳定、API shape 未定或依赖 Packet 未完成。
- 需要破坏性删除、重置、强推、覆盖、批量迁移等高风险操作。
- `ask_before_commit`:满足任一条件时,Codex 必须先说明事实并等用户拍板。
- 用户明确要求只改不提交。
- commit 需要包含共享高冲突文件,但当前线程不是 owner。
- 验证无法运行且该 Packet 风险较高。
- 需要把多个 Packet 的改动临时合在一个 commit 里。
- 需要提交历史遗留脏改动才能让当前 Packet 自洽。
推荐 commit 节奏:
1. `contract` Packet:合同文档、schema 草案或 migration 约束稳定后 commit。
2. `backend` Packet:后端实现和对应测试通过后 commit。
3. `frontend` Packet:API/store/UI 接入和对应前端验证通过后 commit。
4. `docs-verification` Packet:文档同步、最终验证记录和进度台账完成后 commit。
### 4.9 Parallel Integration Gate
每批并行开发结束后,integration owner 必须执行集成验收:
- `git diff --name-only` 检查每个 Packet 是否越界。
- 后端改动:`python -m py_compile` + 相关 `pytest`。
- 前端改动:`npm run typecheck` + `npm run build` + 相关 focused tests。
- migration 改动:`alembic heads` 必须单 head;必要时执行 `alembic upgrade head`。
- 文档:产品推进台账、代码索引、API 合同、架构库存同步完成。
- 若后端或 migration 改动已经落地,按项目规则执行热部署/重启;若不能执行,必须明确写阻塞原因。
## 5. 每次完成后的进度回写标准
后续 Codex 每完成一个 PMFlow 产品推进任务,必须自己更新进度,不需要用户额外提醒。
### 5.1 必须更新的地方
每次完成后至少更新:
1. 本文档 `## 8. 进度台账`
- 新增一条记录。
- 写清完成内容、影响范围、验证结果、下一步建议。
2. 如果新增/删除/重命名文件或入口:
- 更新 `CLAUDE.md`
- 更新 `docs/architecture/ARCHITECTURE_INVENTORY.md`
- 更新 `docs/architecture/CODE_REFERENCE_INDEX.md`
3. 如果新增/修改 API/Schema:
- 更新 `docs/architecture/CODE_REFERENCE_INDEX.md`
- 必要时更新 `docs/architecture/API_CONTRACTS.md`
4. 如果新增运行边界、禁止项或系统行为约束:
- 更新 `docs/architecture/RUNTIME_GUARDRAILS.md`
5. 如果改变产品战略或不可偏离项:
- 更新 `docs/PMFLOW_PRODUCT_BLUEPRINT.md`
- 更新 `USER.md`
### 5.2 进度台账记录格式
每条记录必须包含:
- 日期。
- Phase。
- 状态:`done / partial / blocked`。
- 完成内容。
- 涉及文件。
- 验证命令和结果。
- 未完成或风险。
- 下一步建议。
### 5.3 什么时候不用更新蓝图
普通实现、接 API、修 bug、补测试,不更新产品蓝图。
只有以下情况才更新蓝图:
- 用户改变产品定位。
- V1 范围改变。
- 团队方向改变。
- 新增/删除核心产品表面。
- 改变不可偏离项。
## 6. 新开线程接续标准
任何新 Codex 线程,如果用户要求继续 PMFlow 产品推进,必须先读:
1. `USER.md`
2. `docs/PMFLOW_PRODUCT_BLUEPRINT.md`
3. `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
4. `CLAUDE.md`
5. `docs/architecture/CODE_REFERENCE_INDEX.md`
然后再查当前目标相关代码。
新线程不得:
- 重新讨论 PMFlow 是否应该做对话驱动 OS。
- 重新建议变成传统项目管理工具。
- 重新发散大而全模块。
- 忽略 `## 8. 进度台账` 直接从头设计。
- 把本地原型当成真实后端闭环。
- 把已有后端 `ai_project_control / dev_sync / sstc model_control` 忽略后重造一套。
## 7. 当前下一步推荐任务
当前已完成:
**main-flow-d4.7-execution-queue-cleanup:执行桥页面减负与队列分页。**
原因:
- `/execution-bridge` 已移除冗余的大 Run Header 卡片,选中 Run 状态收进“开发执行流转”,主动作保留在 AI 副驾,刷新/复制上下文迁入执行源包。
- 页面容器去掉居中最大宽限制,避免大屏下出现无意义的外侧空圈;核心内容直接使用可用工作区宽度。
- “需求执行队列”已按 Requirement 分页,默认每页 4 个队列分组,用户手动翻页不会被当前选中任务自动拉回第一页;选中任务变化时才自动定位到所在页。
- 本轮继续只改前端页面和测试,复用既有 `truth-state / execution-summary / execution-capabilities / execution-progress-events`,不新增后端合同,不执行命令,不自动验收、合并或写 Project Memory。
### 7.1 下一步推荐 Packet:`main-flow-d5-execution-acceptance-loop`
状态:建议下一步。
目标:
- 把 `execution_result_protocol_v1` 回写后的结果接到“用户验收 / 技术审查 / 发布门禁”状态流。
- 区分 `待回写 / 执行中 / 执行受阻 / 待用户验收 / 待技术审查 / 已验收`,并让 Space next action 在验收后能收敛。
- 技术审查模式必须保留 reviewer gate;agent / IDE / Local Bridge 回写测试通过,不等于自动完成。
- 通过验收后再让 Release/Growth 门禁读取稳定状态,缺 PR、测试或阻塞证据时继续 fail-closed。
建议写范围:
- `backend/app/api/pmflow_os_api/`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `frontend/src/features/pmflow-os/pages/ReleaseGrowthPage.tsx`
- 必要文档
禁止:
- 不执行本机命令、不推送、不发布。
- 不自动创建正式任务。
- 不绕过 Project Memory commit 后才能执行的边界。
- 不把测试通过自动等同于用户验收或技术审查通过。
## 8. 进度台账
### 2026-05-06 / main-flow-d4.7-execution-queue-cleanup / implemented
完成内容:
- 删除 `/execution-bridge` 顶部大 Run Header 卡片,减少首屏纵向占位。
- 去掉页面内容区 `max-w-[1760px] + mx-auto` 居中外框,避免大屏出现无意义外侧空圈。
- 将顶部卡片内仍有价值的“刷新”和“复制上下文”迁移到右侧“执行源包”头部;主动作继续由 AI 副驾承载,回写证据继续由当前阶段工作台 / AI 副驾承载。
- 将选中任务标题、当前阶段、范围规模、执行模式、正式 Task 与仓库状态收进“开发执行流转”头部。
- 为“需求执行队列”增加本地分页:按 Requirement / 未归属分组分页,每页 4 组;选中任务变化时自动定位到所在页,用户手动翻页不被自动定位覆盖。
- 补充测试覆盖 Header 删除、队列分页、翻页后回到第一页、任务切换和回写 drawer。
涉及文件:
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
验证:
- `cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:35 passed。
- `cd frontend && npm run build` 通过。
- Playwright 浏览器检查 `http://127.0.0.1:5178/execution-bridge?projectId=141` 通过:mock 11 个 Requirement / 10 个 Task,顶部大 Header 已移除,队列显示 `1/3`,点击“下一页”可看到后续 Requirement;桌面 body 无横向溢出,移动端 body 无横向溢出。截图落点:
- `output/playwright/execution-queue-cleanup-d47-desktop.png`
- `output/playwright/execution-queue-cleanup-d47-page2.png`
- `output/playwright/execution-queue-cleanup-d47-mobile.png`
未完成或风险:
- 队列分页当前仍是前端只读分页;后续若后端提供 execution run list / scope list 合同,可下沉为后端分页或游标分页。
- 本轮不新增真实验收、技术审查、合并或 Project Memory 回写状态合同,这仍属于 `main-flow-d5-execution-acceptance-loop`。
### 2026-05-06 / main-flow-d4.6-execution-scope-board / implemented
完成内容:
- 在 `/execution-bridge` 增加“本轮开发范围”总览,展示已确认需求、正式任务、执行中、待生成包、待测试/审查与阻塞数量。
- 增加“需求执行队列”,按 Requirement 聚合开发任务;同一需求下多个 Task 可以切换到对应 Run 详情。
- 对无法从 `state.requirements/state.tasks` 关联到需求的执行任务,进入“未归属任务”区,明确展示但不反推业务关系。
- 保留 D4.5 的单 Run 工作台作为选中详情:中间展示当前任务的阶段 rail 与工作台,右侧展示执行源包、AI 阶段决策与范围缺口。
- 新增前端只读范围模型,合并 `truth-state` 的 Requirement/Task 与 `execution-summary.activeDevTasks`,再为选中任务生成 scoped execution summary;不新增后端 API。
- 焦点测试覆盖多任务开发范围、需求队列、任务切换和切换后的 Run 主动作。
涉及文件:
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
验证:
- `cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:35 passed。
- `cd frontend && npm run build` 通过。
- Playwright 浏览器检查 `http://localhost:5178/execution-bridge?demo=1` 通过:桌面与移动端均无页面横向溢出,首屏可见“本轮开发范围 / 需求执行队列”,点击“前置企业接入权限说明”后能切换到对应 Run;截图落点:
- `output/playwright/execution-scope-board-d46-desktop.png`
- `output/playwright/execution-scope-board-d46-desktop-selected.png`
- `output/playwright/execution-scope-board-d46-mobile.png`
- `output/playwright/execution-scope-board-d46-mobile-selected.png`
- 浏览器控制台仍有既有 `GET /api/ai-readiness/project-launch` 401,属于现有 AI readiness 探针鉴权噪声,本 Packet 未改该链路。
未完成或风险:
- Requirement -> Task -> Execution Run 关联当前仍优先消费现有前端读模型和执行摘要;后续若后端提供稳定 run/list 合同,应将 scoped summary 推导下沉到后端。
- 本轮不新增真实验收、技术审查、合并或 Project Memory 回写状态合同,这仍属于 `main-flow-d5-execution-acceptance-loop`。
下一步建议:
- 进入 `main-flow-d5-execution-acceptance-loop`:在 D4.6 的范围视图基础上,补真实验收、技术审查、合并确认和项目记忆回写状态,供 Space next action 与 Release/Growth 门禁稳定消费。
### 2026-05-06 / main-flow-d4.5-execution-run-workspace-redesign / implemented
完成内容:
- 将 `/execution-bridge` 重构为开发执行 Run 工作台:首屏从“能力卡片 + 结果卡片 + 回写表单”改为 Run Header、阶段流转、执行源包、当前阶段工作台和 AI 副驾决策区。
- 新增单点 Run 状态模型,统一推导 `已确认需求 / 上下文包 / 开发 / 测试 / 审查合并 / 回写` 六阶段、当前阶段、证据数、阻塞原因和唯一主动作。
- 左侧执行源包固定展示正式 Task、项目记忆节点、Prompt Package、仓库、负责人和状态,强调开发必须基于已确认需求与 Project Memory。
- 中间工作区按当前阶段展示上下文、开发证据、测试、审查合并或回写内容;手动回写进展从常驻表单改为 drawer,避免页面表单化。
- 右侧 AI 副驾改为阶段决策面板,围绕当前主动作、阶段审查重点和下一步建议工作;仍不调用新 LLM,不自动合并、不自动写 Project Memory。
- 焦点测试覆盖执行 Run 工作台渲染、阶段 rail、执行源包、AI 副驾、主按钮和回写 drawer。
涉及文件:
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- `cd frontend && npm run test -- src/features/pmflow-os/store.api.test.tsx -t "execution run workspace|technical review|execution bridge"` 通过:2 passed,32 skipped。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:35 passed;仍有既有 React Router future flag warning。
- `cd frontend && npm run build` 通过。
- Playwright / Chromium 打开 `http://localhost:5177/execution-bridge?demo=1`,桌面 1440x1100 与移动 390x844 均能渲染 Run 工作台、阶段流转、执行源包、AI 副驾与“补充测试结论”主按钮;移动端 `main` 容器无横向溢出,截图输出到 `output/playwright/execution-run-workspace-d45-desktop.png`、`output/playwright/execution-run-workspace-d45-mobile.png` 与 `output/playwright/execution-run-workspace-d45-mobile-main-scrolled.png`。
未完成或风险:
- 本轮没有新增真实验收、技术审查、合并或 Project Memory 回写后端合同;这些仍属于 `main-flow-d5-execution-acceptance-loop`。
- `Execution Run` 阶段仍由现有 `execution-summary` 与 `ProgressEvent` 派生,后续 D5 需要把 `review / acceptance / merge / memory_writeback` 做成更稳定的后端状态合同。
- 浏览器实测仍会出现项目壳既有 `GET /api/ai-readiness/project-launch` 401,本地 demo 的 Run 工作台渲染与主流程不受影响。
下一步建议:
- 进入 `main-flow-d5-execution-acceptance-loop`:补真实用户验收、技术审查、合并确认和项目记忆回写状态,供 Space next action 与 Release/Growth 门禁稳定消费。
### 2026-05-05 / main-flow-d4-execution-runtime-capability / implemented
完成内容:
- PMFlow OS store 新增真实 `execution-capabilities` 查询状态,`refetchApiState` 会同步刷新 truth-state、execution-summary 与 execution-capabilities。
- `createExecutionHandoff` 在正式任务 gate 之外新增 reviewer/capability gate:当技术审查责任缺失时阻止真实 handoff,提示先回团队层或待确认中心补齐审查责任。
- `/execution-bridge` 首屏新增“执行模式判定”,消费 Execution Capability Graph 展示 `AI 直接执行 / AI 执行 + 用户验收 / AI 执行 + 技术审查 / 需要人类先补判断 / 当前不可执行`。
- `/execution-bridge` 新增“本次执行结果”汇总,把运行端、代码证据、测试证据、阻塞与下一步收敛为验收前判断;缺证据时保持待回写,不进入发布成功表达。
- 执行交接主按钮改为能力 gate:候选/草稿任务、待确认范围、缺 reviewer 会阻塞;缺 repo 时只允许生成交接草案;缺 Prompt Package 时提示生成上下文包。
- AI 副驾从泛审查文案升级为执行裁决建议,只基于 execution-summary、execution-capabilities、progress event 与 release gate,不调用新 LLM,不编造 PR/测试/代码质量。
涉及文件:
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- `cd frontend && npm run test -- src/features/pmflow-os/store.api.test.tsx -t "execution capability|technical review|execution bridge"` 通过:2 passed,32 skipped。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:35 passed;仍有既有 React Router future flag warning。
- `cd frontend && npm run build` 通过。
- Playwright / Chromium 打开 `http://localhost:5176/execution-bridge?demo=1`,桌面 1440x1100 与移动 390x844 均能渲染“执行模式判定 / 本次执行结果 / 执行交接”模块;截图输出到 `output/playwright/execution-bridge-d4-desktop.png` 与 `output/playwright/execution-bridge-d4-mobile.png`。
- 本轮只修改前端和文档,未修改后端代码、Schema 或 migration,因此未执行后端编译、数据库迁移或热重启。
未完成或风险:
- 当前未接真实 Deep Agents runtime,也不执行本机命令;Execution Bridge 仍只做上下文包、handoff 合同与结果回写展示。
- 浏览器实测中本地无后端认证导致既有 `GET /api/ai-readiness/project-launch` 401,这属于项目壳 AI readiness 本地环境问题,不影响本页模块渲染结论。
下一步建议:
- 进入 `main-flow-d5-execution-acceptance-loop`:把执行结果回写接到用户验收 / 技术审查 / 发布门禁状态流,避免测试通过后仍停留在“待回写”或被误认为自动完成。
### 2026-05-05 / main-flow-d3-execution-bridge-productization / implemented
完成内容:
- 将 `/execution-bridge` 从字段调试式页面重组为产品化开发执行工作面:顶部执行链路、左侧开发上下文包、中间执行回写视图、右侧 AI 副驾审查、底部联动流水线。
- 将用户可见的执行状态、事件类型、运行端、仓库状态、上下文包状态、warning code 统一中文化;`repo_bindings_empty / prompt_package_empty / progress_events_empty` 等工程码不再直接暴露给客户。
- 保留既有真实 API 合同:仍消费 `execution-summary`、`execution-handoffs`、`consume` 与 `execution-progress-events`,不改后端 schema,不绕过 Project Memory commit 后才能 handoff 的门禁。
- 手动回写表单改为中文选项与产品语义;PR、测试、提交、终端输出和回写日志按证据 tab 展示,没有证据时保持明确空态。
- AI 副驾审查区按需求覆盖、代码质量、测试影响、回写完整度生成审查重点和下一步建议,作为执行桥的审查辅助,不执行真实写操作。
- `ExecutionBridgeCards` 补充 warning 展示映射,并将新区域圆角收敛到项目 UI 规范内。
涉及文件:
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `frontend/src/features/pmflow-os/components/ExecutionBridgeCards.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run test -- src/features/pmflow-os/store.api.test.tsx` 通过:32 passed;仍有既有 React Router future flag warning。
- `cd frontend && npm run build` 通过。
- Playwright 打开 `http://localhost:5176/execution-bridge?demo=1` 做桌面与移动截图检查;页面本身无 React key warning,demo 登录壳仍有既有 `GET /api/ai-readiness/project-launch` 401,因为本地未接真实后端认证,不影响本页 UI 结论。
- 本轮只修改前端 UI 与进度文档,未修改后端代码、Schema 或 migration,因此未执行后端编译、数据库迁移或热重启。
未完成或风险:
- 本轮未接 Deep Agents runtime;Deep Agents 仍作为后续运行端适配器/架构参考,不进入当前 UI 主链。
- 当前工作区存在大量既有未提交改动,本 Packet 未提交,避免把非本次范围的改动混入 commit。
下一步建议:
- 进入 `main-flow-d4-execution-runtime-capability`:把 Execution Capability Graph 更深接入开发执行页,形成 `AI 直接执行 / AI+用户验收 / AI+技术审查 / 需人工判断 / 阻塞` 的可视化执行模式与 reviewer gate。
### 2026-05-05 / structured-extraction-selection-count-fix / implemented
完成内容:
- 修复 `/structured-extraction` 结构化写入快照中候选对象 checkbox 只展示选中态、未回写页面选择集合的问题。
- `ObjectChangeCard` 增加显式 `onSelectedChange` 回调与对象级 aria label;未接入选择回调的复用场景中 checkbox 会禁用,避免出现可点但无效的控件。
- `StructuredExtractionPage` 增加 `selectedItemIds` 状态,候选项变化时自动清理失效选择;底部固定决策栏的 `已选择 N 项` 改为真实计数,勾选和取消都会同步更新。
- 选择行为只影响当前页面 UI 选择态,不改变 ChangeItem 审查状态、不写 Project Memory,也不触发 defer/accept 等业务动作。
涉及文件:
- `frontend/src/features/pmflow-os/pages/StructuredExtractionPage.tsx`
- `frontend/src/features/pmflow-os/components/ProjectStructuredLoop.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run test -- src/features/pmflow-os/store.api.test.tsx -t "structured extraction selected count|updates the structured extraction selected count"` 通过:1 passed,31 skipped。
- `cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:33 passed。
- `cd frontend && npm run build` 通过。
- 本轮只修改前端 UI 与文档,未修改后端代码、Schema 或 migration,因此未执行后端编译、数据库迁移或热重启。
### 2026-05-05 / review-memory-execution-product-gates-implementation / implemented
完成内容:
- `ChangeReviewPage` 按产品门禁限制按钮状态:高风险候选在缺 reviewer approval 前不能直接接受;缺证据候选不能直接接受;`确认写入项目记忆` 只有在目标 ChangeSet 存在 accepted / edited 项、无 pending_review、证据齐全、高风险 approval 满足且对象类型受支持时才可执行。
- 批量操作收敛语义:`接受可处理项` 只处理低风险、高置信、有证据且无需角色审查的候选;`批量修改` 仍允许对 reviewable item 产生人工修订;`稍后处理` 改为队列级提醒/清空选择,不再调用 `defer` 或改变 ChangeItem 审查状态。
- 审查决策按钮增加状态限制:缺明确 reviewer 时不能虚构 `请求审查`;无待审上下文时不能通过、要求修改或拒绝。
- `ExecutionBridgePage` 与 PMFlow OS store 双层加执行交接守门:只有已写入项目记忆后形成的正式 task 状态才允许创建 handoff;draft/proposed/pending/candidate 等候选任务只显示阻塞说明,不调用真实 handoff API。
- `ChangeReviewAiCopilotPanel` 主按钮支持 disabled reason,避免右侧 AI 副驾绕过主按钮门禁。
- 测试 wrapper 补齐 `ToastProvider`,并修正一个未 await 的 `promoteAcceptedToGraph` 测试调用,避免异步 act 泄漏污染后续用例。
涉及文件:
- `frontend/src/features/pmflow-os/pages/ChangeReviewPage.tsx`
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `frontend/src/features/pmflow-os/components/ProjectStructuredLoop.tsx`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- `cd frontend && npm run test -- src/features/pmflow-os/store.api.test.tsx -t "blocks high-risk|batch snooze|prevents direct execution"` 通过:3 passed,28 skipped。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:32 passed。
- `cd frontend && npm run build` 通过。
- 本轮未修改后端代码、Schema 或 migration,因此未执行后端编译、数据库迁移或热重启。
### 2026-05-05 / review-memory-execution-product-gates / documented
完成内容:
- 明确结构化提取后的主顺序:`Structured Extraction -> ChangeSet -> Change Review -> 必要时 Team Layer 角色审查 -> 确认写入 Project Memory -> Work Graph -> Execution Capability Graph -> Execution Bridge`。
- 确认团队层只做责任路由、角色收件箱、团队动态、审查状态、阻塞解释和跳转,不作为第二套待确认中心,不直接写 Project Memory。
- 明确 `accept / edit / defer / reject / review decision` 只处理审查状态;`确认写入项目记忆` 才是正式写入边界;开发执行必须晚于 Project Memory commit。
- 补齐决策与待确认按钮的使用场景和限制,包括接受、修改、暂不落库、拒绝、批量接受、稍后处理、请求审查、通过审查、要求修改、确认写入项目记忆、发起执行交接。
- 明确人员或 agent 跟进分两层:审查责任在 Change Review / Team Layer 阶段确定;执行责任在正式 Task 形成后、Execution Bridge handoff 前通过 Execution Capability Graph 和容量信号确定。
涉及文件:
- `docs/PMFLOW_PRODUCT_BLUEPRINT.md`
- `docs/PMFLOW_UI_CONTRACT.md`
- `docs/architecture/PMFLOW_OS_PRODUCT_CONTRACT.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `AGENTS.md`
验证:
- 本轮只更新产品与架构文档,未修改代码、API、Schema 或 migration;未运行编译、单测、构建或热重启。
- `rg` 已核对新增合同关键词覆盖审查、写入记忆、按钮限制、执行交接和责任分配边界。
### 2026-05-05 / team-layer-routing-card-density / implemented
完成内容:
- 补齐团队层当前契约确认:团队层只做只读协作态势、责任路由、阻塞解释和跳转;正式接受、修改、暂缓、拒绝和写入项目记忆仍回到 `ChangeReviewPage`。
- 优化 `/team-layer` 决策台与待审变更责任路由卡片密度:操作按钮从正文右侧移到顶部操作区,标题、摘要、审查原因、证据和建议审查人使用完整卡片宽度;当只有 1-2 条路由时不再强行占 3 列,避免出现卡片内部右侧大块空白。
- 继续保持用户可见文案中文化,不暴露 `Team Layer / ChangeSet / REVIEWER / OWNER` 等工程或后端标签。
涉及文件:
- `frontend/src/features/pmflow-os/pages/TeamLayerPage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npm run test -- src/features/pmflow-os/store.api.test.tsx -t "renders reviewer routing on team layer"` 通过。
- `cd frontend && npm run typecheck` 通过。
### 2026-05-04 / team-layer-collaboration-dashboard / implemented
完成内容:
- 将 `/team-layer` 从纵向“审查路由 + 能力/容量模块”重组为团队协作驾驶舱:首页按 `团队动态 / 决策台 / 角色收件箱 / 智能体工位 / AI 副驾` 展示项目真相层最近变化、待拍板事项、角色责任、执行单元阻塞和协同建议。
- 明确产品边界:团队层只做责任路由、阻塞解释、执行态势和跳转;正式接受、修改、暂缓、拒绝和写入项目记忆仍回到 `/change-review?projectId=<id>&changeSetId=<id>`,避免出现第二套 Change Review。
- 用户可见文案中文化:团队层展示层将 `ChangeSet / REVIEWER / OWNER / high risk` 等后端/英文标签转换为 `变更集 / 审查人 / 负责人 / 高风险`,按钮按状态改为 `进入待确认 / 查看审查进展 / 回到变更处理 / 查看决策`。
- 容量调度下沉到执行态势之后;首屏先展示团队动态、决策台、角色收件箱和智能体工位,减少超宽屏无意义留白。
涉及文件:
- `frontend/src/features/pmflow-os/pages/TeamLayerPage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run test -- src/features/pmflow-os/store.api.test.tsx -t "renders reviewer routing on team layer"` 通过。
- `cd frontend && npm run build` 通过。
- 整文件 `store.api.test.tsx` 当前仍受既有 `ChangeReviewPage` 测试包裹缺 `ToastProvider` 问题影响,非本次团队层改动引入。
### 2026-05-03 / structured-extraction-review-detail-ui / implemented
完成内容:
- 将 `/structured-extraction` 红框内候选对象从轻列表升级为可展开审查卡片:折叠态保留对象类型、标题、功能描述、置信度、风险、优先级、证据数量和审查完整度;展开态补齐功能描述、证据来源、写入项目记忆后字段预览、验收标准、优先级与风险说明、补充一句入口。
- 页面层接入现有 `acceptChange / editChange / deferChange`,支持默认展开高风险待确认项、单项展开/收起、按组“全部展开/全部收起”、修改保存和补充一句生成修订,不新增后端合同。
- 顶部统计从单纯对象类型数量调整为审查决策指标:候选对象、待确认、证据充分、写入风险、缺失信息;右侧写入前检查新增审查完整度,继续只基于真实候选和 projection warning 派生。
- 修复 demo `createdAt=10:22` 被格式化成 `Invalid Date` 的显示问题;移动端操作按钮改为窄屏两列并收敛横向溢出。
涉及文件:
- `frontend/src/features/pmflow-os/pages/StructuredExtractionPage.tsx`
- `frontend/src/features/pmflow-os/components/ProjectStructuredLoop.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过。
- 本地 Vite `http://127.0.0.1:5174/structured-extraction?demo=1` + Playwright smoke:桌面 1728px 下功能描述、证据来源、写入项目记忆后、验收标准、优先级与风险、补充一句均渲染;移动端 390px 下无横向溢出。
### 2026-05-01 / space-inbox-secondary-pages / implemented
完成内容:
- 将空间首页红框内的 `暂存想法 / 草案箱 / 最近项目` 收敛为工作雷达预览:首页只展示少量高优先级条目,数量多时通过明确的“查看全部”进入二级处理面。
- 新增 `frontend/src/features/personal-space/SpaceCollectionPages.tsx`,承接 `/space/ideas` 暂存想法收集箱和 `/space/drafts` 草案箱;暂存想法支持状态筛选、搜索、补充、归档和转 Project Launch 草案,草案箱支持按待确认、信息不足、冲突、已确认、挂起筛选并跳回主流程确认。
- `SpaceSidebar / Layout / router` 增加空间二级入口,保持空间壳,不把这些对象写入项目真相层;Space 仍只允许 saved idea 作为 pre-project seed 写入,草案确认和项目执行回到主流程。
- `ProjectsPage` 增加“全部 / 最近 / 待处理 / AI 进行中 / 已归档”筛选,首页最近项目通过 `/space/projects?view=recent` 复用所有项目页承接,不新增单独最近项目页。
涉及文件:
- `frontend/src/features/personal-space/SpaceCollectionPages.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/components/SpaceChrome.tsx`
- `frontend/src/components/layout/Layout.tsx`
- `frontend/src/router/index.tsx`
- `frontend/src/pages/projects/ProjectsPage.tsx`
- `frontend/src/api/space.ts`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过。
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过,7 passed;仍有既有 React Router v7 future flag warning。
- 本地 Vite `http://127.0.0.1:5174` + Playwright smoke:`/space`、`/space/ideas`、`/space/drafts`、`/space/projects?view=recent` 均能渲染空间壳;移动端 390px 下 `/space/ideas` 可渲染。
### 2026-04-27 / integration-current-worktree-cleanup / done
完成内容:
- 收口当前 `codex/team-feed-p1-review-activity-stream` 脏工作区,确认本批次改动属于同一轮 Shell / Integration 收口:Team Feed 只读动态流、Adaptive Human Capacity、AI Routing / Providers 产品化控制台、Legacy AI Steward 下线、旧 Inbox 独立页删除,以及对应文档台账同步。
- 共享入口已统一:`frontend/src/router/index.tsx` 只保留 `/ai-steward` legacy redirect、旧项目路由 redirect、`/space` 与项目主链身份边界、AI 运营中心 manager boundary;`backend/app/api/router.py` 将 `legacy_ai_steward_api / ai_routing / model_routing` 放入核心路由,确保 lean profile 下治理入口不 404。
- migration 链路已检查:`20260427_add_human_capacity_overrides` 单 head,父级为 `20260426_add_pmflow_change_review_tables`,未形成多 head。
- Inbox 旧独立页已退场:`/inbox` route、侧边栏入口、旧 `frontend/src/pages/inbox/`、`frontend/src/components/inbox/`、`frontend/src/types/inbox.ts` 与三阶段清单文档删除;旧 AI PMO `waiting_manual / draft_pending_confirm / missing_project_scope` 由 Space legacy adapter 承接。
- 未继续新增业务功能;本轮仅做集成一致性确认、文档台账补齐、验证命令收口和小范围测试稳定性修复。
验证:
- 越界检查:`git diff --name-only` / `git status --short` 已检查,当前 diff 是同一 integration 批次,不再拆分;共享文件变更集中在 router、后端 API router、models init、docs 与测试配置。
- 后端编译:`find backend/app -name '*.py' -print0 | xargs -0 /opt/homebrew/bin/python3.11 -m py_compile` 通过。
- 后端测试:`PYTHONPATH=. /opt/homebrew/bin/python3.11 -m pytest tests/test_pmflow_os_projection_api.py tests/test_ai_routing_governance_service.py -q` 在 `backend/` 下通过,`36 passed`,仅剩既有 Pydantic V2 class-based config deprecation warning。
- Alembic:`PYTHONPATH=. /opt/homebrew/bin/python3.11 -m alembic heads` 在 `backend/` 下返回 `20260427_add_human_capacity_overrides (head)`。
- 前端:`npm run typecheck` 通过。
- 前端:`npm run build` 通过。
### 2026-04-27 / Main Flow AI Extraction Production Loop / done
完成内容:
- 打通 API 模式下的项目线程输入主链:`sendMessage -> createPMFlowThreadMessage -> createPMFlowExtraction -> open ChangeSet -> pending_review ChangeItems -> ChangeReview`。
- `POST /pmflow-os/projects/{project_id}/extractions` 支持两种受控路径:显式 `proposed_items` draft 继续保留;未传候选项时由后端调用真实 `llm_service.generate_structured_object`,通过 PMFlow prompt/config/routing 层生成待审对象。
- AI extraction 成功时只生成 open ChangeSet、pending_review ChangeItems 和 thread message evidence;失败时返回 `ai_extraction_failed / extraction_evidence_insufficient`,不创建模板假结果,不绕过 ChangeReview 写 Project Memory。
- `StructuredExtractionPage` 与 `CommandCenterPage` 在真实模式显示结构化失败/待补充状态,并按真实 ChangeItems 动态显示数量,不再用固定 27/6/21 文案冒充真实结果。
涉及文件:
- `backend/app/services/pmflow_change_review_service.py`
- `backend/app/api/pmflow_os_api/`
- `backend/app/schemas/pmflow_os.py`
- `backend/tests/test_pmflow_change_review_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/pages/CommandCenterPage.tsx`
- `frontend/src/features/pmflow-os/pages/StructuredExtractionPage.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- 后端编译:`python3 -m py_compile backend/app/services/pmflow_change_review_service.py backend/app/schemas/pmflow_os.py backend/app/api/pmflow_os_api/__init__.py backend/tests/test_pmflow_change_review_api.py` 通过。
- 后端测试:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_change_review_api.py backend/tests/test_pmflow_os_projection_api.py -q` 通过,39 passed。
- 前端测试:`npm run test -- src/features/pmflow-os` 通过,13 passed。
- 前端:`npm run typecheck` 通过。
- 前端:`npm run build` 通过。
- Diff hygiene:`git diff --check` 通过;未发现 Git 冲突标记。
### 2026-04-27 / release-business-signal-loop-p1 / done
完成内容:
- `GET /pmflow-os/projects/{project_id}/execution-summary` 的 `releaseSignals` 从单一 feedback/recommendation 读模型扩展为统一发布后业务信号:真实聚合 `FeedbackIngest / RevenueEvent / ROISnapshot / ComplianceCheckRun / IterationRecommendation`。
- `releaseSignals.summary` 新增 `roiSnapshotCount / complianceCheckCount / riskSignalCount`,`relationship.businessSignalTypes` 显示当前可用信号类型;缺 feedback、revenue、ROI、compliance 或 recommendation 时返回明确 warning,不用静态 mock 指标补成功态。
- ROI 为负或合规 blocked/failed/open issues 时进入风险态,ReleaseGrowthPage 真实模式展示 feedback、revenue、ROI、compliance、recommendation/group 的空态、数据态和风险态。
- recommendation 单条/同组仍只生成下一轮 open ChangeSet draft,继续由 ChangeReview accept/edit/defer/commit;本 Packet 不接真实支付、不做完整财务系统、不接真实合规平台、不自动 commit。
涉及文件:
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/pages/ReleaseGrowthPage.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- 后端编译:`python3 -m py_compile backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py backend/app/api/pmflow_os_api/*.py` 通过。
- 后端测试:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过,30 passed。
- 前端测试:`npm run test -- src/features/pmflow-os` 通过,13 passed。
- 前端:`npm run typecheck` 通过。
- 前端:`npm run build` 通过。
### 2026-04-27 / space-consume-mainflow-next-signals / done
完成内容:
- `/space` 的 `nextActionQueue` 只读消费 Main Flow 新信号:AI extraction 成功后的 pending ChangeSet / ChangeItem、review attention、execution failed / blocked / delivery failed、release blocked、releaseSignals 中的 feedback / revenue / ROI / compliance,以及 recommendation 下一轮 draft。
- `feedbackAttention` 优先消费 `execution-summary.releaseSignals.feedback / revenueEvents / roiSnapshots / complianceChecks` 结构化字段,再兼容旧 `metricSignals`,不再只靠文本猜测发布后业务信号。
- 新增执行结果阻塞类 next action:`recentProgressEvents` 的 `failed / blocked / test_failed` 与 `recentDeliveries.status=failed` 只跳 `/execution-bridge?projectId=<id>`。
- 优先级收口为待确认、待审查、执行阻塞、发布阻塞、发布后反馈、下一轮草案;所有动作只跳主流程页面,不写 ChangeSet、PMFlowApproval、ProgressEvent、ReleaseValidationRun、FeedbackIngest 或任何 release business 表。
涉及文件:
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过,4 passed。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过。
### 2026-04-28 / navigation-shell-migration-p1 / implemented
完成内容:
- 将旧 `/projects` 一级入口迁移为 `/space/projects`,继续复用项目可见性真源,但用户语义改为“空间内所有项目”,主动作回到 PMFlow OS 主链;项目删除收进高级操作。
- 将旧 `/users`、`/users/:id/profile`、`/users/:id/skills`、`/users/:id/skill-tasks/:skillId` 迁移为 `/space/settings/members` 与 `/space/settings/members/:id`,用户语义收敛为“成员与权限 / 成员能力与责任”,不再暴露后台用户管理入口。
- 将旧 `/workloads`、`/workloads/:id` 迁移为 `/team-layer?view=capacity`,Team Layer 会滚动到团队今日容量调度台;旧工时负载不再作为一级产品入口。
- 将 `/dashboard` 兼容跳转 `/space`;`SpaceSidebar` 新增稳定目的地“所有项目”和管理员“成员与权限”,仍不把最近项目、暂存想法、草案箱、待确认或 AI 正在推进拆成一级导航。
- `Layout` 增加空间配置壳覆盖 `/space/projects` 与 `/space/settings/*`,避免这些页面继续落入旧 `Sidebar + TopBar`。
涉及文件:
- `frontend/src/router/index.tsx`
- `frontend/src/components/layout/Layout.tsx`
- `frontend/src/components/layout/TopBar.tsx`
- `frontend/src/features/personal-space/components/SpaceChrome.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/pmflow-os/pages/TeamLayerPage.tsx`
- `frontend/src/pages/projects/ProjectsPage.tsx`
- `frontend/src/pages/users/UsersPage.tsx`
- `frontend/src/pages/user-profile/UserProfilePage.tsx`
- `frontend/src/components/SkillRadarChart.tsx`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 前端:`npm run typecheck` 通过。
- 前端:`vitest run src/router/legacyAIStewardRedirect.test.ts src/features/personal-space/PersonalSpacePage.test.tsx src/components/layout/Sidebar.test.tsx` 通过。
- 前端:`npm run build` 通过。
### 2026-04-27 / adaptive-human-capacity-p1 / implemented
完成内容:
- 将旧“工时负载”升级为 `Adaptive Human Capacity`:后端新增只读每日容量计划、simulate-before-apply、override 审计记录,计划由当前 truth-state / execution-summary / reviewer routing / workspace binding 实时聚合。
- 新增 `human_capacity_overrides` 持久化表,只存负责人手工调整与审计,不存每日计划快照;过期 override 不参与今日计划。
- `execution-capabilities` 补充 `adaptiveCapacitySummary`;个人空间展示“我的今日容量”;Team Layer 增加团队今日容量调度台、模拟结果、负责人调整入口和调整记录;旧 `/workloads*` 前端入口兼容跳转到 `/team-layer?view=capacity`,传统工时只保留为底层成本参考信号。
- 产品边界写入蓝图和 guardrails:每日建议基线不得固定,工作类型共享容量池,负责人 override 必须有原因、审计、过期时间,后续团队空间不得回到固定工时槽、静态技能标签或旧 workload ratio 派活。
涉及文件:
- `backend/app/models/human_capacity_override.py`
- `backend/alembic/versions/20260427_add_human_capacity_overrides.py`
- `backend/app/services/adaptive_capacity_service.py`
- `backend/app/services/team_execution_capability_service.py`
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/api/space.ts`
- `frontend/src/features/pmflow-os/types.ts`
- `frontend/src/features/pmflow-os/pages/TeamLayerPage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/router/index.tsx`
- `frontend/src/components/layout/Layout.tsx`
- `frontend/src/features/personal-space/components/SpaceChrome.tsx`
- `frontend/src/pages/projects/ProjectsPage.tsx`
- `frontend/src/pages/users/UsersPage.tsx`
- `frontend/src/pages/user-profile/UserProfilePage.tsx`
- `docs/PMFLOW_PRODUCT_BLUEPRINT.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `CLAUDE.md`
验证:
- 后端:`python -m py_compile backend/app` 通过;`pytest tests/test_pmflow_os_projection_api.py -q` 通过。
- 数据库:`alembic upgrade head` 成功升级到 `20260427_add_human_capacity_overrides`。
- 前端:`npm run typecheck`、`npm run build`、`vitest run src/features/personal-space/PersonalSpacePage.test.tsx src/features/pmflow-os/store.api.test.tsx src/components/layout/Sidebar.test.tsx` 通过。
- 浏览器:检查 `/space`、`/team-layer?projectId=1`、`/team-layer?projectId=1&view=capacity`,容量区块/空态/不可用 warning 可见,未使用 mock 或旧负载比例冒充;旧 `/workloads?projectId=1` 仅作为兼容入口跳转。
- 运行态:`docker compose restart backend` 后 `pmflow-backend` health 为 `healthy`。
### 2026-04-26 / team-feed-p1-review-activity-stream / implemented
完成内容:
- `ProjectTruthState.feed` 从静态/局部 feed 扩展为 Team Feed 只读动态流,聚合 review request、review decision、ChangeSet 状态、execution progress 和 release gate 事件。
- 后端只读消费既有 `PMFlowChangeSet / PMFlowChangeItem / PMFlowApproval / PMFlowEvidenceLink / ProgressEvent / releaseGate` 投影,不新增表、不新增 route、不写审批、不写 ChangeSet、不写通知。
- `TeamLayerPage` 直接展示真实 `state.feed` 聚合动态;feed 为空时明确显示无真实动态,不使用 mock 动态冒充团队事件。
- 团队动态区增加真实时间格式化和空态,保留角色收件箱/决策台为摘要展示,不塞入业务操作。
涉及文件:
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/features/pmflow-os/components/TeamFeedPanel.tsx`
- `frontend/src/features/pmflow-os/pages/TeamLayerPage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `CLAUDE.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`24 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`13 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环)。
- `docker compose restart backend` 已执行,`docker compose ps backend` 确认 `pmflow-backend` 恢复 `healthy`。
未完成或风险:
- 本轮只做 Team Feed 只读动态流,不新增战略页面,不改 router/nav,不写审批/ChangeSet/通知。
- Role Inbox 与 Decision Desk 仍是 TeamLayer 摘要/占位表达,完整真实收件箱与决策台模型不在本 Packet。
### 2026-04-26 / big-module-integration-p8 / done
完成内容:
- 从 `e8bb125` P8 共同基线新建 `codex/big-module-integration-p8`,依次合入 `main-flow-p8-review-decision-loop`、`space-p7-review-attention-queue`、`account-p8-review-decision-preference`。
- 确认 P8 未新增 route/nav,`frontend/src/router/index.tsx` 与 `frontend/src/features/pmflow-os/components/MobileBottomNav.tsx` 未进入集成 diff。
- Main Flow 合同作为 reviewer decision 真源:`truth-state.reviewerRouting` 包含 `reviewDecision / approvalState / requestedAt / decidedAt / decisionReason`,`POST /pmflow-os/change-sets/{change_set_id}/review-decisions` 只写审查/approval 审计,不自动 commit。
- Space 只读消费 `truth-state.reviewerRouting` 生成 `/space` 的 `review_attention` 下一步队列,不写 ChangeSet、`PMFlowApproval`、ProgressEvent 或发布/反馈对象。
- Account 只提供 `getReviewDecisionNotificationPreference` 页面内提醒偏好消费合同;偏好关闭只能静默提醒强度,不隐藏 reviewerRouting、approval、evidence 或 audit state。
- 共享文档、代码索引和 inventory 已统一为 P8 收口后的边界说明。
涉及文件:
- 合并依赖分支带入的 Main Flow / Space / Account owned files
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_change_review_service.py backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_change_review_api.py backend/tests/test_pmflow_os_projection_api.py backend/tests/test_account_settings_api.py -q` 通过:`35 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`13 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`3 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`12 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环)。
- `docker compose restart backend` 已执行,`docker compose ps backend` 确认 `pmflow-backend` 恢复 `healthy`。
### 2026-04-26 / main-flow-p8-review-decision-loop / done
完成内容:
- 新增 `POST /pmflow-os/change-sets/{change_set_id}/review-decisions`,支持 `request_review / approve / request_changes / reject`,统一 `{code,message,data}` 包络返回 `changeSetDetail / truthState / warnings`。
- `request_review` 校验 reviewer 必须属于当前项目且具备 `OWNER / REVIEWER` 角色;缺 reviewer 时 fail-closed 返回 `reviewer_missing` warning,不写入虚假审查状态。
- `approve / request_changes / reject` 复用 `PMFlowApproval` 写审查审计记录;`approve` 只把选中待审项标为 accepted,并使 high-risk item 满足 C2 approval gate,仍不自动 commit ChangeSet;`request_changes / reject` 不写 Project Memory、不创建正式任务。
- `ProjectTruthState.reviewerRouting` 扩展 `reviewDecision / approvalState / requestedAt / decidedAt / decisionReason` 和 requested/approved/changes/rejected 汇总计数;已决策项可继续在 Team layer 留痕,terminal decision 不再误报缺 reviewer。
- `ChangeReviewPage` 增加审查决策面板,展示审查状态、建议 reviewer、审查意见、高风险 approval gate 和四类决策动作。
- `TeamLayerPage` 增加待我审、已请求、已决策统计,并展示每个 routing item 的审查状态、审查意见与请求/决策时间。
涉及文件:
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/app/services/pmflow_change_review_service.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/tests/test_pmflow_change_review_api.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/types.ts`
- `frontend/src/features/pmflow-os/pages/ChangeReviewPage.tsx`
- `frontend/src/features/pmflow-os/pages/TeamLayerPage.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `CLAUDE.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_change_review_service.py backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_change_review_api.py backend/tests/test_pmflow_os_projection_api.py -q` 通过:`31 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`13 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run typecheck` 未通过,阻塞在当前 worktree 缺失多项 `frontend/src/lib/*` 公共 helper(如 `@/lib/api`、`@/lib/utils`、`@/lib/datetime`),不属于本 Packet write scope。
- `cd frontend && npm run build` 未通过,原因同 `typecheck`,停在同一批缺失 `frontend/src/lib/*` 公共 helper。
- `docker compose ps backend` / `docker compose --env-file .env.example ps backend` 未能进入 backend health 检查:当前 worktree 缺少 `.env`,Compose 要求 `BACKEND_PORT / LLM_PROVIDER / DASHSCOPE_API_KEY` 等必填 runtime env,`.env.example` 中 API key 为空;未写宿主机配置,未用 dummy secret 重启服务。
未完成或风险:
- 本 Packet 不接 Space 个人队列、不扩展 Account review preference、不接真实通知中心;后续仍按 P8 剩余消费面推进。
- 本 Packet 不新增 migration、不改 router/nav、不改 Space/Account,不执行真实外部通知或自动 Project Memory commit。
### 2026-04-26 / space-p7-review-attention-queue / implemented
完成内容:
- `/space` 的 `nextActionQueue` 新增 `review_attention` 类型,只读消费 `ProjectTruthState.reviewerRouting(status/warningCode/summary/items)`。
- Team Review 待审事项按“高风险待我审 -> request_changes/rejected 后待处理 -> reviewer missing warning -> 普通 pending review”排序进入“我的下一步”。
- 高风险、普通待审与 review decision 后待处理项只跳 `/change-review?projectId=<id>&changeSetId=<id>`;reviewer 缺失 warning 只跳已有 `/team-layer?projectId=<id>`。
- `PersonalSpacePage` 仅补充待审查的队列表达、icon、CTA 与空态文案,不新增模块,不写 ChangeSet、`PMFlowApproval`、ProgressEvent 或 PMFlow OS store。
- reviewerRouting 为空时保持空态,不虚构 reviewer、审查意见或待审 ChangeSet。
涉及文件:
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`3 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环),构建成功。
### 2026-04-26 / account-p8-review-decision-preference / implemented
完成内容:
- 在 `frontend/src/api/accountSettings.ts` 新增 `getReviewDecisionNotificationPreference(settings, event)`,覆盖 `review_requested / review_approved / review_changes_requested / review_rejected / high_risk_approval_required`。
- Review decision 类事件统一映射到现有 `pendingConfirmation` 偏好,继续输出 P7 的 `reminderIntensity / evidenceDisplay / showInAppReminder / showProminentReminder` 合同,并固定 `notificationTransport=in_app_only`。
- helper 明确返回 `reviewerRoutingPolicy=preserve_reviewer_routing`、`approvalPolicy=preserve_approval_state`、`evidencePolicy=preserve_business_evidence`、`auditPolicy=preserve_audit_state`;偏好关闭只静默页面内提醒,不隐藏真实 reviewerRouting、approval、evidence 或 audit state。
- `AccountSettingsPanel` 通知偏好文案扩展到 review request / decision 与高风险 approval,不新增后端字段、不改 schema、不接真实通知中心。
涉及文件:
- `frontend/src/api/accountSettings.ts`
- `frontend/src/features/account-settings/AccountSettingsPanel.tsx`
- `frontend/src/features/account-settings/accountSettings.test.ts`
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`12 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环),构建成功。
未完成或风险:
- 本轮只定义 Account Settings 偏好消费合同,不改 Main Flow review request / decision API,不改 Space attention queue。
- Review 偏好仍只影响页面内提醒表达;不得被 Main Flow 当作业务权限或 evidence/filter 开关。
### 2026-04-26 / shell-p8-rebaseline-next-plan / done
完成内容:
- 将第 7 节“当前下一步推荐任务”从已完成的 Team Review P1 重定为 `P8:Review Decision Loop`。
- 明确 P8 当前目标为 `reviewerRouting -> review request -> reviewer decision -> approval audit -> personal attention`,不再停留在 reviewer routing 只读建议。
- 写清 P8 三条可并行 Packet 边界:`main-flow-p8-review-decision-loop`、`space-p7-review-attention-queue`、`account-p8-review-decision-preference`,以及 `big-module-integration-p8` 的收口职责。
- 明确 P8 不新增战略页面、不改 router/nav、不接真实通知中心;仍使用既有 `/change-review / /team-layer / /space / /me` 表面。
涉及文件:
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `CLAUDE.md`
验证:
- `git diff --name-only` 已执行,diff 仅包含本 Packet 文档 write scope。
- `rg -n "当前最建议下一步|P8|Review Decision Loop|Team Review P1" docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md CLAUDE.md docs/architecture/CODE_REFERENCE_INDEX.md docs/architecture/ARCHITECTURE_INVENTORY.md` 已用于确认推荐任务真源更新。
### 2026-04-26 / big-module-integration-p7 / done
完成内容:
- 新建 `codex/big-module-integration-p7`,从 `codex/big-module-integration-p6` 依次收口 `shell-p7-rebaseline-next-plan`、`iteration-loop-p2-recommendation-quality-batch`、`space-p6-personal-next-action-queue`、`account-p7-review-notification-intensity`。
- 确认本轮未新增 route/nav,仍使用既有 `/release-growth`、`/change-review`、`/space`、`/me` 表面;`frontend/src/router/index.tsx` 与 `frontend/src/features/pmflow-os/components/MobileBottomNav.tsx` 未进入 P7 集成 diff。
- Main Flow 已把同组 recommendation 批量生成 ChangeSet draft、recommendation quality grouping、Change Review 来源解释接入集成线;Space 已把“我的下一步”队列接入 `/space` 只读聚合;Account 已把提醒强度和证据展示偏好合同接入 `/me`。
涉及文件:
- 合并依赖分支带入的 Main Flow / Space / Account owned files
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- P7 integration 分支已形成 merge commits:`86c6ec7 merge shell p7 rebaseline`、`8d60b18 merge iteration loop p2 recommendation quality`、`4a74eea merge space p6 personal next action queue`、`77fa288 merge account p7 notification intensity`。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py backend/tests/test_account_settings_api.py -q` 通过:`24 passed`。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`10 passed`。
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`2 passed`。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`11 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环)。
- `docker compose restart backend` 已执行,`docker compose ps backend` 确认 `pmflow-backend` 恢复 `healthy`。
- `docker compose restart backend` 已执行,`docker compose ps backend` 确认 `pmflow-backend` 恢复 `healthy`。
未完成或风险:
- P7 本身不包含 Team Review;Team Review 已由后续 `team-review-p1-change-review-routing-p7` 从 P7 base 单独收口。
### 2026-04-26 / team-review-p1-change-review-routing-p7 / done
完成内容:
- 从 `codex/big-module-integration-p7` 新开 `codex/team-review-p1-change-review-routing-p7`,合入既有 `codex/team-review-p1-change-review-routing` 实现,解决与 Iteration Loop P2 在 schema、projection、store 和测试上的重叠。
- 在 `ProjectTruthState` 新增 `reviewerRouting(status, warningCode, summary, items)` 只读投影,从 open/pending ChangeSet、待审 item 风险、跨对象类型、`iteration_recommendation` evidence、项目成员与 `OWNER / REVIEWER` 角色生成建议审查人、来源、风险等级、优先级、审查原因、fallback role 和目标跳转 URL。
- `TeamLayerPage` 真实模式展示待审 ChangeSet reviewer routing:ready / empty / warning、来源(下一轮迭代 / AI 提取 / 手动)、风险等级、建议审查人或 fallback role、审查原因、待审 item 数、证据数,并跳转 `/change-review?projectId=<id>&changeSetId=<id>`。
- 保持监督式边界:不新增 route,不新增 migration,不做复杂权限系统,不自动 assign reviewer,不写 approval;缺成员、缺 `OWNER / REVIEWER` 角色或缺 evidence 时只显示 warning,不虚构 reviewer。
- 保留 P7 的 recommendation group 批量 ChangeSet draft 合同和测试,没有用 reviewer routing 覆盖 Iteration Loop P2。
涉及文件:
- `backend/app/schemas/pmflow_os.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/types.ts`
- `frontend/src/features/pmflow-os/pages/TeamLayerPage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py backend/tests/test_pmflow_os_projection_api.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`23 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py backend/tests/test_account_settings_api.py -q` 通过:`27 passed`;仍有同一 Pydantic warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`12 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`2 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`11 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环)。
未完成或风险:
- 该历史记录对应 Team Review P1,当时只是 reviewer routing 读模型与 TeamLayer 展示;Main Flow P8 之后已接入 review decision / PMFlowApproval 审计,但仍不代表正式 reviewer assignment、权限审批流、通知或自动审查任务已接入。
- Team Feed P1 已接 review / execution / release gate 只读动态流;Role Inbox、Decision Desk 的完整真实数据模型仍是后续 Team lane 工作。
### 2026-04-26 / shell-p7-rebaseline-next-plan / implemented
完成内容:
- 将第 7 节“当前下一步推荐任务”从已完成的 `Phase D.2:Execution Bridge 执行交接合同` 重定为 `P7:Iteration Quality / Reviewer / Personal Queue 三线并行`。
- 明确 P6 后当前真实闭环状态:`feedback -> recommendation -> ChangeSet draft -> Change Review accept/edit/defer` 已成立,仍不自动 commit、不写 Project Memory、不创建正式 Task。
- 写清 P7 三个推荐 Packet 边界:`main-flow-p7-iteration-quality`、`main-flow-p7-reviewer-decision-desk`、`space-p7-personal-queue`。
- 明确 P7 不新增战略页面、不新增顶层路由、不改移动底部导航,不绕过 Change Review 人类确认边界。
验证:
- `git diff --name-only` 仅包含本 Packet 文档 write scope。
- `rg -n "Phase D.2|当前最建议下一步|P7|Iteration Quality" docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md CLAUDE.md docs/architecture/CODE_REFERENCE_INDEX.md docs/architecture/ARCHITECTURE_INVENTORY.md` 已用于确认推荐任务真源更新。
### 2026-04-26 / space-p6-personal-next-action-queue / implemented
完成内容:
- 在 `frontend/src/api/space.ts` 新增 `nextActionQueue` 只读聚合模型,把 AI extraction 待确认、review attention、execution failed/blocked/delivery failed、release blocked / failed evidence、handoff consumed 后缺少 progress、feedback/revenue/ROI/compliance 信号和 iteration draft 待确认收敛为统一“我的下一步”队列。
- `/space` 桌面端和移动端新增首屏“我的下一步”队列,按优先级和更新时间排序;每个 item 只跳转 `/change-review`、`/execution-bridge` 或 `/release-growth`。
- 保留原有继续推进、待确认、执行中、发布关注、发布后反馈、下一轮迭代建议等明细区块作为二级上下文;空态明确,不虚构项目、反馈、recommendation 或 ChangeSet。
- 本轮不写 ChangeSet、不写 ProgressEvent、不写 ReleaseValidationRun、不写 FeedbackIngest,不改 PMFlow OS 页面、Account Settings 或 router。
涉及文件:
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`2 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run typecheck` 未通过,阻塞来自本 packet 禁止路径外的既有 Account Settings / PMFlow OS 测试类型错误:`frontend/src/features/account-settings/accountSettings.test.ts` 的 `reminderIntensity` 字面量推断为 `string`,以及 `frontend/src/features/pmflow-os/store.api.test.tsx` 的 `AccountNotificationPreference` 测试 fixture 缺少 `reminderIntensity / evidenceDisplay`。
- `cd frontend && npm run build` 同样在 `tsc -b` 阶段被上述禁止路径外类型错误阻塞,尚未进入 Vite build。
未完成或风险:
- 当前工作区同时存在 Main Flow / Account Settings lane 的未提交改动;Space P6 提交只能 stage 本 packet 文件与文档,不能混入这些越界文件。
- 若 integration owner 要求全量 typecheck/build 绿灯,需要先由 Account / Main Flow owner 修复对应测试 fixture 类型。
### 2026-04-26 / account-p7-review-notification-intensity / implemented
完成内容:
- 将 Account Settings 通知偏好从简单开关扩展为本地 UI 提醒表达合同:每类提醒继续保留 `enabled / desktop / emailDigest` 兼容字段,同时新增 `reminderIntensity=silent|normal|prominent` 与 `evidenceDisplay=compact|expanded`。
- 新增 `getAccountReminderConsumption(settings, event)`,覆盖 `change_review_high_risk / iteration_draft_ready / release_blocked / execution_stalled`,稳定输出 `surface / notificationKey / reminderIntensity / evidenceDisplay / showInAppReminder / showProminentReminder / evidencePolicy / auditPolicy / notificationTransport=in_app_only`。
- 默认值向后兼容 P1-P6:旧数据缺少新字段时,旧开启等价 `normal + compact`,旧关闭等价 `silent + compact`;偏好关闭只静默页面内提醒,不隐藏 ChangeSet、recommendation、release evidence、execution 状态或审计状态。
- `AccountSettingsPanel` 通知偏好区新增提醒强度和证据展示配置;桌面提醒、邮件摘要仍只记录偏好,不代表真实邮件、桌面推送或系统通知中心已接入。
- 本轮只扩展前端本地 helper 和页面设置,不改后端 schema、migration、router、PMFlow OS store、Space 或 Main Flow 页面。
涉及文件:
- `frontend/src/api/accountSettings.ts`
- `frontend/src/features/account-settings/AccountSettingsPanel.tsx`
- `frontend/src/features/account-settings/accountSettings.test.ts`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`11 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环),构建成功。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`22 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`11 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环)。
- `docker compose restart backend` 已执行,`docker compose ps backend` 确认 `pmflow-backend` 恢复 `healthy`。
- `git diff --name-only` 已执行,diff 均在本 Packet write scope 内。
未完成或风险:
- 该历史记录对应 Team Review P1,当时只是 reviewer routing 读模型与 TeamLayer 展示;Main Flow P8 之后已接入 review decision / PMFlowApproval 审计,但仍不代表正式 reviewer assignment、权限审批流、通知或自动审查任务已接入。
- Team Feed P1 已接 review / execution / release gate 只读动态流;Role Inbox、Decision Desk 的完整真实数据模型仍是后续 Team lane 工作。
### 2026-04-26 / big-module-integration-p6 / done
完成内容:
- 收口 Iteration Loop P1、Space P5 与 Account P6 的并行成果,当前集成分支已包含 `ea8f9d0 feat(pmflow-os): draft changesets from iteration recommendations`、`5db6f71 feat(space): surface iteration draft attention`、`8cc0cd9 feat(account): map iteration review reminders`。
- 确认本轮没有修改 `frontend/src/router/index.tsx`、`frontend/src/features/pmflow-os/components/MobileBottomNav.tsx` 或新增 route/nav;现有 `/release-growth`、`/change-review`、`/space`、`/me` 入口继续承接本批成果。
- 共享文档边界已同步:Main Flow 负责 recommendation -> ChangeSet draft 写入口与 ReleaseGrowth 触发动作;Space 只读消费 recommendation draft 状态并跳转主流程;Account 只把 `iteration_recommendation / next_change_review` 映射到待确认提醒偏好,不接真实邮件、桌面推送或系统通知中心。
- P6 后,Space 现在只读消费 Main Flow 的 AI extraction、execution result 与 release business signals;发布后反馈闭环已从“feedback -> recommendation 展示”推进到“recommendation -> 下一轮 ChangeSet draft -> Change Review accept/edit/defer”,仍保持不自动 commit、不写 Project Memory、不创建正式任务的监督式边界。
涉及文件:
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- 合并依赖分支带入的 Main Flow / Space / Account owned files
验证:
- `git diff --name-only` 已执行,最终待提交 diff 仅为 P6 integration 文档收口。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py backend/tests/test_account_settings_api.py -q` 通过:`23 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`9 passed`。
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`2 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`10 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环)。
- `docker compose restart backend` 已执行,`docker compose ps backend` 确认 `pmflow-backend` 恢复 `healthy`。
未完成或风险:
- P6 仍不执行真实发布、不接外部支付、不接真实邮件/桌面推送或系统通知中心。
- 下一轮可以继续做 recommendation draft 的质量分组、批量生成策略或 Team/Reviewer 审查,但必须保持 Change Review 人类确认边界。
### 2026-04-26 / account-p6-iteration-review-preference-consume / implemented
完成内容:
- 扩展 `frontend/src/api/accountSettings.ts` 的 post-release 偏好合同,新增 `next_change_review` 事件,并把 `iteration_recommendation / next_change_review` 的 surface 收敛到 `change_review`。
- `pendingConfirmation` 偏好控制 iteration recommendation 与下一轮 ChangeSet 待审的页面内提醒;偏好关闭只静默提醒,不隐藏 ChangeSet、recommendation 或证据。
- 本轮只做 Account Settings API/helper 与测试,不改 ReleaseGrowthPage、Space、PMFlow OS store、router、auth core,不接真实邮件/桌面推送。
涉及文件:
- `frontend/src/api/accountSettings.ts`
- `frontend/src/features/account-settings/accountSettings.test.ts`
验证:
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`10 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- Main Flow / Space 只消费该 helper 语义,不把偏好当业务权限;待确认对象仍由 Change Review 真源控制。
### 2026-04-26 / space-p5-iteration-draft-attention / implemented
完成内容:
- 在 `frontend/src/api/space.ts` 将发布后反馈关注继续扩展到 iteration draft attention:只读识别 `releaseSignals.recommendations[*].changeSetCreated / changeSetId` 和待审 ChangeSet 关系。
- `/space` 桌面端和移动端能把“下一轮待确认变更 / 已生成 ChangeSet draft”的关注项展示出来;项目动作跳 `/change-review?projectId=<id>&changeSetId=<id>` 或 `/release-growth?projectId=<id>`。
- 本轮不生成 recommendation、不创建 ChangeSet、不写 ChangeSet 状态、不写 Project Memory、不执行发布或外部支付。
涉及文件:
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 在 P6 integration 中通过:`2 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run typecheck` 在 P6 integration 中通过。
- `cd frontend && npm run build` 在 P6 integration 中通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- Space P5 只消费主流程结果,不负责 recommendation -> ChangeSet draft 写入;后续字段调整仍由 Space lane 只读适配。
### 2026-04-26 / big-module-integration-p5 / done
完成内容:
- 收口 Release Feedback P1、Space P4 与 Account P5 的并行成果,当前集成分支已包含 `1d213ba feat(pmflow-os): ingest release feedback signals`、`7025459 feat(space): surface post-release feedback attention`、`66ec4c7 feat(account): define post-release notification preferences`。
- 确认本轮没有修改 `frontend/src/router/index.tsx`、`frontend/src/features/pmflow-os/components/MobileBottomNav.tsx` 或新增 route/nav;现有 `/release-growth`、`/space`、`/me` 入口继续承接本批成果。
- 共享文档边界已同步:Main Flow 负责 `release-feedback-ingests`、`execution-summary.releaseSignals` 与 ReleaseGrowth 真实信号展示;Space 只读消费 `releaseSignals`、execution result 与 AI extraction 待确认状态,派生“我的下一步”和“发布后反馈关注”并跳转主流程;Account 只提供 post-release 通知偏好 helper,不接真实邮件、桌面推送或系统通知中心。
- P5 后,Release/Growth 已从“发布前门禁 + 验证记录”推进到“发布后 feedback / revenue / iteration recommendation 信号读模型雏形”;下一步应优先把 iteration recommendation 进入 ChangeSet draft,而不是扩新页面。
涉及文件:
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- 合并依赖分支带入的 Main Flow / Space / Account owned files
验证:
- `git diff --name-only` 已执行,最终待提交 diff 仅为 P5 integration 文档收口。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py backend/tests/test_account_settings_api.py -q` 通过:`22 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`8 passed`。
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`2 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`10 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环)。
- `docker compose restart backend` 已执行,`docker compose ps backend` 确认 `pmflow-backend` 恢复 `healthy`。
未完成或风险:
- P5 仍不执行真实发布、不接外部支付、不接真实邮件/桌面推送或系统通知中心。
- `IterationRecommendation` 当前只作为发布后建议底座展示;进入 ChangeSet draft 需后续 Main Flow packet 单独处理。
### 2026-04-26 / account-p5-feedback-notification-preference-contract / implemented
完成内容:
- 在 `frontend/src/api/accountSettings.ts` 新增 `AccountPostReleaseNotificationEvent` 与 `getPostReleaseNotificationPreference(settings, event)`,覆盖 `feedback_received / revenue_signal / compliance_blocked / iteration_recommendation`。
- feedback、revenue、compliance 事件映射到 `releaseGate` 偏好;iteration recommendation 映射到 `pendingConfirmation` 偏好。
- helper 返回 `spaceReadable / showInAppReminder / desktopPreference / emailDigestPreference / evidencePolicy / reminderPolicy / mutedDetail`,明确偏好只控制页面内提醒表达,不隐藏业务证据。
- 本轮只做 Account Settings API/helper 与测试,不改 ReleaseGrowthPage、Space、PMFlow OS store、router、auth core,不接真实邮件/桌面推送。
涉及文件:
- `frontend/src/api/accountSettings.ts`
- `frontend/src/features/account-settings/accountSettings.test.ts`
验证:
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`10 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- Main Flow / Space 尚未消费该 post-release helper;本阶段只冻结偏好合同。
- `desktopPreference / emailDigestPreference` 仍只是偏好记录,不代表真实系统级桌面通知、邮件通知或通知中心已接入。
### 2026-04-26 / space-p4-feedback-attention-readmodel / implemented
完成内容:
- 在 `frontend/src/api/space.ts` 新增 `feedbackAttention` 只读聚合,从 PMFlow OS `execution-summary.releaseSignals` 派生发布后 feedback、revenue、ROI、compliance 与 iteration recommendation 关注项。
- `/space` 桌面端和移动端新增“发布后反馈关注”区块;项目主动作仍只跳 `/release-growth?projectId=<id>`。
- 发布后信号缺失时显示明确空态,不使用 mock feedback、mock revenue 或默认成功结果冒充真实运营信号。
- 本轮不创建 feedback ingest、不写 RevenueEvent、不写 ComplianceCheckRun、不写 ProgressEvent、不写 ChangeSet、不执行发布或外部支付。
涉及文件:
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 在 P5 integration 中通过:`2 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run typecheck` 在 P5 integration 中通过。
- `cd frontend && npm run build` 在 P5 integration 中通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- Space P4 只消费发布后信号读模型,不负责信号创建或下一轮建议落 ChangeSet。
- 如果后续 PMFlow OS 暴露独立 `releaseSignals` 明细页或独立 recommendation 合同,Space 仍应只读切换字段并保持跳转主流程。
### 2026-04-26 / release-feedback-p1-feedback-ingest-readmodel / implemented
完成内容:
- 在 PMFlow OS 后端新增轻量写入口 `POST /pmflow-os/projects/{project_id}/release-feedback-ingests`,复用现有 `AIProjectControlService.ingest_feedback` 与 `FeedbackIngest / IterationRecommendation` 模型,不新增 migration。
- `GET /pmflow-os/projects/{project_id}/execution-summary` 的 `releaseSignals` 投影聚合真实发布后 `feedback / revenueEvents / roiSnapshots / complianceChecks / recommendations`,并显式返回 `releaseGateStatus / latestValidationRunId / changeSetCreated / businessSignalTypes` 关系信息。
- `ReleaseGrowthPage` 真实模式新增“发布后反馈信号”区域和“摄取发布后反馈”表单;无信号时展示明确 empty/warning,不用 mock 成功数据补位。
- 前端 `PMFlowOsProvider` 新增 `createReleaseFeedbackIngest` 动作,真实模式调用 PMFlow OS API 并 refetch truth-state / execution-summary;demo 模式仍只在显式 `?demo=1` 下走本地演示 mutation。
- 本阶段只沉淀下一轮 iteration recommendation 所需数据,不自动创建 ChangeSet,不触发真实发布,不接外部支付,不接邮件/桌面推送。
涉及文件:
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/pages/ReleaseGrowthPage.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `CLAUDE.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`18 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`2 passed / 8 passed`。
- `cd frontend && npm run typecheck` 未通过:当前独立 worktree 没有被 `.gitignore` 忽略的 `frontend/src/lib/*` 本地 helper 文件,导致全仓 `@/lib/api`、`@/lib/utils`、`@/lib/datetime`、`@/lib/display`、`@/lib/rbac` 等 alias 解析失败;这些文件不在本 Packet write scope,未越界补入。
- `cd frontend && npm run build` 同样停在上述 `frontend/src/lib/*` 缺失的 TypeScript 解析错误,未进入 Vite build。
未完成或风险:
- Release Business Signal Loop P1 已将 RevenueEvent、ROISnapshot 与 ComplianceCheckRun 纳入 `releaseSignals` 读模型;当前仍只做轻量经营/风险信号,不接真实支付、不做完整财务或合规平台。
- iteration recommendation 已能生成下一轮 ChangeSet draft;P7 继续推进 recommendation quality batch,使同类建议可分组、去重、评估风险并批量进入待确认中心。
- 全量前端 typecheck/build 需在包含 `frontend/src/lib/*` helper 的集成环境或由 Shell / Integration owner 修正该 ignored 文件边界后重新验证。
### 2026-04-26 / iteration-loop-p1-recommendation-to-changeset-draft / implemented
完成内容:
- 新增 `POST /pmflow-os/projects/{project_id}/iteration-recommendations/{recommendation_id}/change-set-drafts`,复用项目成员/OWNER/REVIEWER 权限边界和统一 `{code,message,data}` 包络。
- 后端从真实 `IterationRecommendation` 生成 open `PMFlowChangeSet`、pending_review `PMFlowChangeItem` 和 `PMFlowEvidenceLink(source_type='iteration_recommendation')`;item 类型限定在 `Requirement / Task / Risk / Decision`,不自动 commit、不写 Project Memory、不创建正式 Task。
- recommendation 的 `recommendation_summary` 会记录 `changeSetId / changeSetCreated / changeSetCreatedAt`,重复调用复用既有 draft 并返回 `iteration_recommendation_changeset_reused` warning。
- `execution-summary.releaseSignals` 会把 recommendation 的 `changeSetCreated / changeSetId` 和 relationship 聚合状态投影给前端,nextActions 从“只展示建议”推进为“生成下一轮待确认 ChangeSet draft”。
- `ReleaseGrowthPage` 在真实 recommendation 卡片上新增“生成下一轮待确认变更”动作,成功后通过 store refetch truth-state / execution-summary,使 Change Review 能继续 accept / edit / defer。
涉及文件:
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/pages/ReleaseGrowthPage.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `CLAUDE.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`19 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`2 files / 9 tests passed`。
- `cd frontend && npm run typecheck` 未通过:当前独立 worktree 没有被 `.gitignore` 忽略的 `frontend/src/lib/*` 本地 helper 文件,导致全仓 `@/lib/api`、`@/lib/utils`、`@/lib/datetime`、`@/lib/display`、`@/lib/rbac` 等 alias 解析失败;这些文件不在本 Packet write scope,未越界补入。
- `cd frontend && npm run build` 同样停在上述 `frontend/src/lib/*` 缺失的 TypeScript 解析错误,未进入 Vite build。
边界:
- 本阶段只把 release feedback recommendation 转入 Change Review 待确认中心;不执行部署、不触发外部支付/推送、不自动写 Project Memory、不自动创建正式任务。
- Space 仍只读消费 `releaseSignals` 并跳转主流程;Account Settings 只提供偏好 helper,不参与 PMFlow OS 写入。
### 2026-04-26 / iteration-loop-p2-recommendation-quality-batch / implemented
完成内容:
- `execution-summary.releaseSignals.recommendations` 新增 recommendation quality 字段:`groupKey / duplicateOf / mergedCount / impactLevel / riskLevel / suggestedChangeTypes / reviewPriority / quality`,并新增 `recommendationGroups` 聚合同组建议。
- 新增 `POST /pmflow-os/projects/{project_id}/iteration-recommendation-groups/{group_key}/change-set-drafts`,支持按同组 recommendation 批量生成一个 open ChangeSet draft;重复调用会复用既有 draft 并返回 `iteration_recommendation_group_changeset_reused`。
- 后端批量 draft 仍只生成 pending_review `Requirement / Task / Risk / Decision` ChangeItem 与 `PMFlowEvidenceLink(source_type='iteration_recommendation_group')`,不自动 commit、不写 Project Memory、不创建正式 Task。
- 已生成 draft 的 recommendation 会在 `recommendation_summary` 追踪 `groupKey / groupChangeSetId / changeSetId / changeSetCreated`,使 releaseSignals 与 Change Review 能解释同组反馈来源。
- `ReleaseGrowthPage` 新增 recommendation group 卡片,展示合并数量、影响、风险、审查优先级、建议变更类型与生成理由,并调用真实批量 API;单条 recommendation 动作保留。
- `ChangeReviewPage` 在打开来自 release feedback iteration group 的 ChangeSet 时展示来源组、recommendation 数、feedback 数、风险/影响/审查优先级与 rationale,帮助 reviewer 判断为什么生成这一组待确认变更。
涉及文件:
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/pages/ReleaseGrowthPage.tsx`
- `frontend/src/features/pmflow-os/pages/ChangeReviewPage.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `CLAUDE.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`20 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`2 files / 10 tests passed`。
- `cd frontend && npm run typecheck` 未通过:当前独立 worktree 缺少被 `.gitignore` 排除的 `frontend/src/lib/*` 本地 helper 文件,导致全仓 `@/lib/api`、`@/lib/utils`、`@/lib/datetime`、`@/lib/display`、`@/lib/rbac` 等 alias 解析失败;这些文件不在本 Packet write scope,未越界补入。
- `cd frontend && npm run build` 同样停在上述 `frontend/src/lib/*` 缺失的 TypeScript 解析错误,未进入 Vite build。
边界:
- 本阶段只提升下一轮建议质量与批量待确认能力;不执行部署、不接外部支付、不接推送、不自动写 Project Memory、不创建正式 Task。
- Space / Account / router / bottom nav 未改;Personal Queue 承接可在后续 P7 packet 中单独推进。
### 2026-04-26 / big-module-integration-p4 / done
完成内容:
- 收口 Release Validation P1、Space P3、Account P3 与 Release/Growth P2 的并行成果,当前集成分支已包含 `875b929 feat(pmflow-os): record release validation runs`、`b9b4b5a feat(space): surface release validation attention`、`fe7807b feat(account): define release notification consumption`、`32af422 feat(pmflow-os): respect release notification preferences`。
- 确认本轮只做共享文档收口和依赖分支合并,没有修改 `frontend/src/router/index.tsx`、`frontend/src/features/pmflow-os/components/MobileBottomNav.tsx` 或新增 route/nav;现有 `/release-growth`、`/space`、`/me` 入口足够承接本批成果。
- 共享文档冲突已按 lane 边界合并:Main Flow 负责 release gate、release validation run 和 ReleaseGrowth 偏好消费;Space 只读消费 `truth-state.releases / execution-summary.releaseGate` 并跳转主流程;Account 只提供通知偏好 helper,不接真实邮件、桌面推送或通知中心。
- `CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与 `CLAUDE.md` 已同步到 P4 后的当前合同,明确 ReleaseGrowthPage 可创建 validation run、消费 Account notification preference,但不执行部署命令、不隐藏真实证据和审计状态。
涉及文件:
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- 合并依赖分支带入的 Main Flow / Space / Account owned files
验证:
- `git diff --name-only` 已执行,最终待提交 diff 仅为 P4 integration 文档收口。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py backend/tests/test_account_settings_api.py -q` 通过:`21 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`6 passed`。
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`2 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`9 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning(`ai-steward / sstc / charts / governance` chunk 环)。
- `docker compose restart backend` 已执行,`docker compose ps backend` 确认 `pmflow-backend` 恢复 `healthy`。
未完成或风险:
- P4 仍不接真实发布部署、邮件、桌面推送或系统通知中心;这些必须后续单独开 Packet。
- 本轮未做路由/导航变更;如后续新增 `/settings` 或发布验证独立入口,必须继续由 Shell / Integration owner 串行处理。
### 2026-04-26 / release-growth-p2-notification-preference-consume / implemented
完成内容:
- `ReleaseGrowthPage` 真实模式读取 Account Settings 通知偏好,通过 `shouldShowAccountNotification(settings, "releaseGate")` 控制发布门禁强调提醒,通过 `shouldShowAccountNotification(settings, "failureAlert")` 控制失败强调提醒。
- `releaseGate` 偏好关闭时,页面不展示“发布门禁提醒”强调卡,也降低缺证据 / 阻塞门禁视觉强调;底层 `releaseGate` 状态、执行证据、阻塞原因、下一步动作和发布验证记录仍完整展示。
- `failureAlert` 偏好关闭时,失败 evidence 与阻塞原因仍可见,但不展示额外醒目的“失败提醒”卡,也不把阻塞原因渲染成额外告警态。
- 本阶段只消费本地页面内提醒偏好,不接邮件、桌面推送或通知中心;不修改 Account Settings 合同、PMFlow OS store、后端发布验证 API、router、Space 或 Account 页面。
- `store.api.test.tsx` 补充 ReleaseGrowth 偏好开启 / 关闭两条路径,覆盖提醒展示、静默展示和 release evidence 仍可见。
涉及文件:
- `frontend/src/features/pmflow-os/pages/ReleaseGrowthPage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`2 passed / 6 passed`。
- `cd frontend && npm run typecheck` 未通过:当前前端树缺失整组共享 `src/lib/*` 模块(例如 `@/lib/api`、`@/lib/utils`、`@/lib/datetime`、`@/lib/display`、`@/lib/rbac`),影响全仓大量既有文件和 forbidden `router/index.tsx`;本 Packet 未越界修复。
- `cd frontend && npm run build` 同样停在上述共享 `src/lib/*` 缺失的 TypeScript 解析错误,未进入 Vite build。
未完成或风险:
- 本阶段不隐藏业务真相,只控制提醒表达强度;发布证据、审计状态和 validation run 仍以 PMFlow OS 真实读侧为准。
- 全量前端 typecheck/build 需由 Shell / Integration owner 或共享前端基础模块 owner 先恢复 `frontend/src/lib/*` 后再重新验证。
### 2026-04-26 / release-validation-p1-real-run-records / implemented
完成内容:
- 新增 `POST /pmflow-os/projects/{project_id}/release-validation-runs`,复用 PMFlow OS 项目成员/OWNER/REVIEWER 权限边界和统一 `{code,message,data}` 返回包络。
- 复用现有 `ReleaseValidationRun` 模型,不新增 migration;从当前 `execution-summary.releaseGate` 固化 `status / evidence / blockingReasons / nextActions / createdBy / createdAt / humanDecision`。
- ready evidence + `enter_release_candidate` 生成 `ready` run;needs confirmation evidence 生成 `needs_confirmation` run;failed / blocked evidence 或 `keep_blocked` 生成 `blocked` run。
- 无 execution evidence 或 `releaseGate.status=empty` 时返回 `release_validation_evidence_empty`,不创建成功 run,也不使用 mock validation。
- `execution-summary.releaseGate.latestValidationRun` 返回最新发布验证记录,`ReleaseGrowthPage` 真实模式新增“发布验证记录”区域和“生成发布验证记录 / 记录保持阻塞”动作;页面仍不执行真实部署。
- `frontend/src/api/pmflowOs.ts` 改为 PMFlow OS API 层自包含 `/api` fetch 包络解析,避免当前工作树缺失共享 `@/lib/api` 时影响 PMFlow OS focused tests;不改全局 API client。
涉及文件:
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/pages/ReleaseGrowthPage.tsx`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`17 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`4 passed`。
- `cd frontend && npm run typecheck` 未通过:当时前端树缺失整组共享 `src/lib/*` 模块(例如 `@/lib/api`、`@/lib/utils`、`@/lib/datetime`、`@/lib/display`、`@/lib/rbac`),影响全仓大量既有文件和 forbidden `router/index.tsx`;本 Packet 未越界修复。
- `cd frontend && npm run build` 同样停在上述共享 `src/lib/*` 缺失的 TypeScript 解析错误,未进入 Vite build。
未完成或风险:
- 本阶段只创建发布验证记录和人工确认快照,不执行部署命令、不写外部系统。
- 全量前端 typecheck/build 需由 Shell / Integration owner 在整合最新主线后重新验证。
### 2026-04-26 / account-p3-release-notification-consumption-contract / implemented
完成内容:
- 在 `frontend/src/api/accountSettings.ts` 新增 `AccountReleaseNotificationEvent` 与 `getReleaseGateNotificationPreference(settings, event)` 轻量合同。
- Release/Growth 后续页面可按事件类型消费偏好:`release_gate_blocked / release_gate_ready / release_validation_blocked / release_validation_needs_confirmation` 映射到 `releaseGate`,`failed_event` 映射到 `failureAlert`。
- helper 明确返回 `inAppEnabled / desktopPreference / emailDigestPreference`,以及 `notificationKey / surface / reason`,用于后续 Main Flow 页面决定页面内提醒展示或静默。
- 本轮只做 Account Settings API/helper 与测试,不改 `ReleaseGrowthPage`、PMFlow OS store、router、auth core,不新增后端字段,不接入真实邮件/桌面推送。
涉及文件:
- `frontend/src/api/accountSettings.ts`
- `frontend/src/features/account-settings/accountSettings.test.ts`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`9 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- Main Flow 尚未在 `ReleaseGrowthPage` 消费该 helper;后续应由 Main Flow lane 读取账号设置后按 release gate / release validation / failed event 类型调用。
- `desktopPreference / emailDigestPreference` 仍只是偏好记录,不代表真实系统级桌面通知、邮件通知或通知中心已接入。
### 2026-04-26 / space-p3-validation-run-attention / implemented
完成内容:
- 在 `frontend/src/api/space.ts` 将 `releaseAttention` 从单纯 release gate 关注升级为 `truth-state.releases` 发布验证投影 + `execution-summary.releaseGate` 的只读聚合。
- `/space` 桌面端和移动端“发布关注”区块现在优先显示“发布验证阻塞 / 发布验证待确认”;没有发布验证投影时才回落显示“发布候选 / 发布门禁阻塞”。
- 发布关注项只展示来源标签、验证/门禁状态、检查项摘要、阻塞原因和更新时间;点击只跳转 `/release-growth?projectId=<id>`。
- 发布验证缺失时显示“暂无发布验证记录”空态,不使用 mock 或默认成功结果冒充真实验证。
- 本轮不创建 validation run、不写 ProgressEvent、不写 ReleaseValidationRun、不新增后端接口、不执行发布命令。
涉及文件:
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`2 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- Space P3 只消费 release validation 投影,不负责创建/更新 release validation run;真实运行记录仍由 Release/Growth lane 维护。
- 当前 Space 侧使用 `truth-state.releases` 的状态和 gateItems 表达验证结果;若后续 PMFlow OS 暴露独立 `validationRuns` 合同,需要由 Space lane 再切换到更精确字段。
### 2026-04-26 / big-module-integration-p3 / done
完成内容:
- 收口 Release/Growth P1、Space P2 与 Account P2 的并行成果,确认三条 lane 均已形成独立提交后再进入集成验证。
- Release/Growth P1 已形成 `e90adbc feat(pmflow-os): gate releases on execution evidence`,将 `execution-summary.releaseGate` 接入 `ReleaseGrowthPage`,从 branch、commit、PR、test、failed evidence 推导 `ready / blocked / needs_confirmation / empty` 发布门禁状态。
- Space P2 已形成 `9ba9876 feat(space): surface release attention read model`,只读消费 `execution-summary.releaseGate` 并在 `/space` 展示发布关注项,动作只跳 `/release-growth?projectId=<id>`。
- Account P2 已形成 `5a86007 feat(account): map notification preferences to surfaces`,把通知偏好映射到待确认、Execution Bridge、Release/Growth 和失败提醒四类页面内提醒消费模型,不接入真实邮件/桌面推送。
- 本轮未修改 router、MobileBottomNav 或 PMFlow OS frame;现有 `/release-growth`、`/space`、`/me` 入口已足够承接本批成果。
- 同步 `CLAUDE.md`、`CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与本交付台账,确认 Main Flow 产出发布门禁判断、Space 只读聚合、Account 只影响本地 UI 提醒消费。
涉及文件:
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py backend/tests/test_account_settings_api.py -q` 通过。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过。
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- Release/Growth P1 仍只做发布门禁判断,不执行真实部署、不写 release validation run。
- Space 暂存想法真实只读聚合后端合同仍未实现。
- Account P2 只控制页面内提醒消费模型,不代表系统级桌面通知、邮件通知或通知中心已接入。
- 本轮未执行热部署/重启;当前环境是本地开发工作区。部署环境要生效,需要按实际栈执行 backend restart/reload。
下一步建议:
- 进入 `release-validation-p1-real-run-records`:把当前 release gate 判断推进为真实 release validation run 记录,保留“不执行真实部署”的边界,先沉淀发布前证据链和人工确认结果。
### 2026-04-26 / release-growth-p1-execution-evidence-gate / implemented
完成内容:
- 在 `ExecutionSummaryProjection` 中新增 `releaseGate` 投影,从 `ProgressEvent` 的 branch、commit、PR、test、failed / blocked 证据推导发布判断。
- `releaseGate.status` 覆盖 `ready / blocked / needs_confirmation / empty`:测试通过可进入发布候选,failed / test_failed / blocked 事件 fail-closed 阻塞发布,无 execution evidence 时返回明确 empty/warning。
- 扩展 execution progress event 合同,允许显式 `failed` event 回写。
- `ReleaseGrowthPage` 真实模式改为只消费 `execution-summary.releaseGate`、execution evidence、阻塞原因、下一步动作和 warning;不再展示静态“已发布/增长指标”mock 结果。
- 静态高保真发布/增长原型只保留在显式 `?demo=1` / `dataSource=demo` 模式。
- 本轮不执行发布命令、不做真实部署、不新增 migration。
涉及文件:
- `backend/app/schemas/pmflow_os.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/pages/ReleaseGrowthPage.tsx`
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`14 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`4 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- ReleaseGrowth P1 只生成发布判断和下一步动作,不触发真实部署、不写 release validation run。
- 增长反馈、收入、ROI 和 compliance 已进入统一 `releaseSignals` 读模型;后续重点是更多真实写入口和运营证据质量,不是用 mock 指标补页面。
### 2026-04-26 / space-p2-release-attention-readmodel / implemented
完成内容:
- 在 `frontend/src/api/space.ts` 新增 `releaseAttention` 只读聚合,从已有项目摘要、`truth-state` 与 `execution-summary.releaseGate` 派生个人空间发布关注项。
- `/space` 桌面端和移动端新增“发布关注”区块,显示测试失败、PR 未合并、发布门禁阻塞、发布候选或需要人工确认的项目。
- 发布关注项只展示 release gate 状态、阻塞原因、证据标签和更新时间;点击只跳转 `/release-growth?projectId=<id>`。
- 本轮不写 Project Memory、不写 ChangeSet、不写 ProgressEvent、不新增后端接口、不执行发布命令。
- 暂存想法仍保持真实 empty/warning,不使用 mock 冒充。
涉及文件:
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`2 passed`;仍有既有 React Router v7 future flag warning。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- Space P2 依赖 Main Flow `release-growth-p1-execution-evidence-gate` 的 `execution-summary.releaseGate` 合同;最终合并需确保该合同先进入 integration base。
- 本轮只做个人空间 read model,不做发布验证运行、真实部署、增长反馈或发布后指标聚合。
### 2026-04-26 / big-module-integration-p2 / done
完成内容:
- 收口 Main Flow D.3、Space P1 与 Account P1 的并行成果,并将 Space / Account lane 代码先分别形成独立 commit,避免 forbidden lane 文件混入 integration commit。
- Main Flow D.3 已形成 `a7008bb feat(pmflow-os): add execution progress writeback`,负责把 branch、commit、PR、test progress event 回写到 execution-summary。
- Space P1 已形成 `6c0f6da feat(space): route workbench execution items`,执行中 / AI 正在推进项只跳转 `/execution-bridge?projectId=<id>`,不写 execution event。
- Account P1 已形成 `95892d2 feat(account): add account settings sync contract`,新增 `account_settings_api`、schema、service 与测试,不改 OAuth/JWT/auth core。
- Shell / Integration 串行补上 `backend/app/api/router.py` 的 `account_settings_api` 核心路由挂载,避免前端 `/api/account-settings/me` 在真实环境 404。
- 同步 `CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与本交付台账,确认 Space 只读、Account 独立偏好合同、Main Flow 执行回写三条边界。
涉及文件:
- `backend/app/api/router.py`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/router.py backend/app/api/account_settings_api/__init__.py backend/app/schemas/account_settings.py backend/app/services/account_settings_service.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_account_settings_api.py -q` 通过:`4 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过。
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`2 passed`;仍有既有 React Router future flag warning。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`5 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
未完成或风险:
- 本轮未执行热部署/重启;当前环境是本地开发工作区。部署环境要生效,需要按实际栈执行 backend restart/reload。
- Account P1 当前复用 `integrations` 表保存偏好包,后续如要独立偏好表,必须另开 migration Packet。
- Space 暂存想法真实只读聚合后端合同仍未实现,当前仍明确展示 empty/warning。
下一步建议:
- Release/Growth P1 已由 `e90adbc feat(pmflow-os): gate releases on execution evidence` 完成,后续应进入真实 release validation run 记录。
### 2026-04-26 / space-p1-real-workbench-dashboard / implemented
完成内容:
- 将 `/space` 继续收敛为真实个人工作台 read model:继续推进、待确认、执行中、最近项目、草案、暂存想法均来自 `frontend/src/api/space.ts` 的只读聚合,不写主流程状态。
- 继续推进项目卡片主动作保持 `/pmflow-os?projectId=<id>`;待确认项保持 `/change-review?projectId=<id>&changeSetId=<id>`;执行中 / AI 正在推进项改为 `/execution-bridge?projectId=<id>`。
- 执行中仍只消费 PMFlow OS `execution-summary`、`recentProgressEvents`、`activeDevTasks` 与 `loopStage` 摘要,不直接写 execution event 或触发执行动作。
- 暂存想法后端合同仍未接入,继续返回空数组并展示明确 warning,不使用 mock/demo 数据冒充真实状态。
- 补充 Space focused 测试,锁定六个工作台区块和三类主流程导航 URL。
涉及文件:
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍提示既有 manual chunk circular warning,但构建成功。
剩余缺口:
- 暂存想法真实只读聚合后端合同尚未实现;当前 Space 明确暴露为空态和 warning,不使用演示数据兜底。
### 2026-04-26 / main-flow-p1-execution-handoff-consume / done
完成内容:
- 在 D.2 的 `handoff_created` 起点上继续补齐执行交接消费闭环,新增 `POST /pmflow-os/projects/{project_id}/execution-handoffs/{prompt_package_id}/consume`。
- 后端校验项目成员权限、项目边界与 `PromptPackage(package_kind='execution_handoff')` 边界;消费动作只记录运行端领取,不执行本机命令、不写宿主机配置。
- `PMFlowOSProjectionService.consume_execution_handoff` 将 `PromptPackage.package_payload.latest_handoff` 更新为 `handoff_state=consumed`,并写入 `ProgressEvent(event_type='handoff_consumed', derived_task_status='coding')`。
- `execution-summary` 会因最新 `handoff_consumed` 事件把执行状态投影为 `coding`,前端执行桥可显示“运行端领取确认”。
- 前端 `ExecutionBridgePage` 在真实模式新增“标记为已领取”动作,调用 `consumePMFlowExecutionHandoff` 后 refetch `truth-state / execution-summary`;demo 模式仍只走本地演示推进。
- 修复 D.2 中 active `PromptPackage.package_payload` 嵌套 JSONB 更新可能未被 SQLAlchemy 标脏的问题,显式使用 `flag_modified`。
涉及文件:
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`10 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
- `cd frontend && npm run test -- src/features/pmflow-os/store.api.test.tsx` 通过:`3 passed`。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`4 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过。
未完成或风险:
- 本轮仍不执行真实命令;Codex / Local Bridge / GitHub agent 的 branch、commit、PR、test 回写仍属于下一步 D.3。
- 本轮新增后端运行时代码但未执行热部署/重启;当前环境是本地开发工作区,未连接实际部署服务。部署环境需要按实际栈执行 backend restart/reload。
下一步建议:
- 进入 D.3:补 Dev Sync 写回闭环,把运行端执行结果回写为 branch/commit/PR/test progress event,并投影回 `execution-summary / truth-state`。
### 2026-04-26 / big-module-integration-p1 / done
完成内容:
- 作为 `Shell / Integration owner` 收口 Batch P1 三条 lane:Main Flow D.2、Space V1 Workbench Hardening、Account Settings V1。
- 已确认当前分支为 `codex/main-flow-phase-d2-execution-handoff-contract`,Main Flow D.2 已落提交 `f95bd15 feat(pmflow-os): add execution handoff contract`,本轮不重写 D.2,只验证其与 Space / Account dirty worktree 的组合。
- 已检查 tracked diff 与 untracked files,当前脏文件均落在本次集成范围:`AGENTS.md / CLAUDE.md / TASK_BRIEF_TEMPLATE.md / ARCHITECTURE_INVENTORY.md / personal-space / account-settings / accountSettings.ts / space.ts / AccountPage.tsx`。
- Space 改动符合 P0 边界:`frontend/src/api/space.ts` 只读聚合项目摘要、PMFlow OS `truth-state / execution-summary`,待确认项只跳转 `/change-review`,不直接写 Project Memory、ChangeSet 状态或 Execution Bridge event。
- Account Settings 改动符合 P0 边界:`/me` 由 `AccountSettingsPanel` 承接个人资料、AI 偏好和通知偏好;当时首版只做浏览器本机持久化,不改 OAuth/JWT/auth core、router、MobileBottomNav、PMFlow OS store 或项目主链,后续已由 `account-p1-preferences-backend-contract` 补后端同步合同。
- P0 文档残留已收口:`AGENTS.md / CLAUDE.md / TASK_BRIEF_TEMPLATE.md` 的大模块 lane、integration owner、共享文件锁与 Packet 模板规则可纳入 integration commit;`ARCHITECTURE_INVENTORY.md` 修正旧的 Space 只能消费 mock data / 禁止接后端描述,改为当前只读聚合合同。
- `CODE_REFERENCE_INDEX.md` 已确认包含 Space API、Account Settings API、PMFlow OS D.2 execution handoff API 索引;`CLAUDE.md` 已确认不再保留旧的“commit 未实现”描述。
涉及文件:
- `AGENTS.md`
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/TASK_BRIEF_TEMPLATE.md`
- `frontend/src/api/space.ts`
- `frontend/src/api/accountSettings.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `frontend/src/features/personal-space/components/SpaceChrome.tsx`
- `frontend/src/features/account-settings/AccountSettingsPanel.tsx`
- `frontend/src/features/account-settings/accountSettings.test.ts`
- `frontend/src/features/pmflow-os/pages/AccountPage.tsx`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过:`1 passed`。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`3 passed`。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过:`4 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍输出既有 manual chunk circular warning(`ai-steward / sstc / charts / governance`),未阻断构建。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`9 passed`;仍有既有 `backend/app/schemas/recipe.py` Pydantic V2 class-based config deprecation warning。
未完成或风险:
- 本 integration packet 未新增或修改后端运行时代码、Schema 或 migration;本轮未执行热部署/重启。当前验证发生在本地开发工作区,未连接实际部署服务;若要让 Main Flow D.2 的后端提交在部署环境生效,需要在对应部署机执行 `docker compose restart backend`、`scripts/docker_stack.sh restart|dev-restart` 或等价发布流程。
- Space 的 `savedIdeas` 后端只读聚合合同仍未实现;当前 UI 明确展示 empty/warning,不使用 mock 数据冒充真实内容。
- Account Settings V1 当时仍是前端合同 + 本机持久化;后续已由 `account-p1-preferences-backend-contract` 独立新增 `account_settings_api` 合同,当前全局 router 挂载仍需 Shell / Integration owner 串行处理。
下一步建议:
- 进入 D.3:补 Dev Sync 写回闭环,把 Codex / Local Bridge / GitHub agent 的 branch、commit、PR、test progress event 回写到 `execution-summary / truth-state`。
### 2026-04-26 / Space V1 Workbench Hardening / implemented
完成内容:
- 将 `/space` 收敛为只读个人工作面聚合入口,继续覆盖 `继续推进 / 待我确认 / AI 正在推进 / 暂存想法 / 草案箱 / 最近项目`,不写 Project Memory、ChangeSet 状态或 Execution Bridge event。
- `frontend/src/api/space.ts` 作为 Space read model wrapper,仅消费项目摘要、PMFlow OS `truth-state` 与 `execution-summary`;项目主动作仍进入 `/pmflow-os?projectId=<id>`。
- 待确认项只读取 ChangeSet / approvals 摘要,点击进入稳定主流程 `/change-review?projectId=<id>&changeSetId=<id>`,不直接执行 accept/edit/defer/commit。
- 暂存想法合同已显式建模为 `savedIdeas`;当前后端只读聚合未接入时返回空数组并展示 warning,禁止用 mock/demo 数据冒充真实想法。
- 移动端继续使用 Space 独立单手路径,补齐最近项目区块,不把桌面多栏布局压缩到手机。
- 补充 `PersonalSpacePage.test.tsx` focused 回归,锁定六个 Space 区块与“暂存想法未接入不冒充真实数据”的空态。
涉及文件:
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `frontend/src/features/personal-space/components/SpaceChrome.tsx`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run test -- src/features/personal-space/PersonalSpacePage.test.tsx` 通过。
- `cd frontend && npm run typecheck` 未通过,阻塞来自 Main Flow 越界文件 `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx:21` 的既有 `import type` 语法错误,本 Space 包不跨线修。
- `cd frontend && npm run build` 未通过,同样阻塞于 `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx:21`,未进入 Vite build 阶段。
剩余缺口:
- 暂存想法真实只读聚合后端合同尚未实现;当前 Space 明确暴露为空态和 warning,不使用演示数据兜底。
### 2026-04-26 / Account P2 Notification Preference Consumption / implemented
完成内容:
- `frontend/src/api/accountSettings.ts` 新增通知偏好消费模型,将 `pendingConfirmation / executionWriteback / releaseGate / failureAlert` 映射到 `待确认中心 / Execution Bridge / Release Growth / 全局失败提醒` 四类页面内提醒。
- 新增 `shouldShowAccountNotification` 与 `getAccountNotificationConsumption`,用于本地 UI 判断页面提醒显示或静默;不接入真实邮件、桌面推送或系统级通知中心。
- 修正通知偏好合并逻辑:旧本机缓存或后端返回缺字段时,按默认偏好逐项补齐,避免浅合并导致 `desktop/emailDigest` 丢失。
- `AccountSettingsPanel` 在通知偏好区域展示“页面内提醒消费说明”,明确哪些开关会影响待确认、执行回写、发布门禁和失败提醒,也明确桌面/邮件仅记录偏好、不代表系统级推送已接入。
- 测试覆盖通知偏好读取、保存、消费模型和 fallback。
涉及文件:
- `frontend/src/api/accountSettings.ts`
- `frontend/src/features/account-settings/AccountSettingsPanel.tsx`
- `frontend/src/features/account-settings/accountSettings.test.ts`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`7 passed`。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍输出既有 manual chunk circular warning,未阻断构建。
未完成或风险:
- 本轮只在 Account Settings 合同和本地 UI 消费层落地通知偏好,不修改 PMFlow OS truth store、router、JWT/OAuth/auth core,也不新增后端表。
- 由于本包 write scope 不包含 `ExecutionBridgePage / ReleaseGrowthPage / ChangeReviewPage`,本轮没有跨页直接接入这些页面;后续如要让各页面读取该 helper,应单独开对应 Main Flow/Integration packet。
### 2026-04-26 / Account P1 Preferences Backend Contract / implemented
完成内容:
- 新增 `backend/app/api/account_settings_api/`,建立 `GET /account-settings/me` 与 `PUT /account-settings/me` 合同,统一返回 `{code,message,data}`。
- 新增 `backend/app/schemas/account_settings.py`,锁定个人资料、默认语言、AI 回答深度、证据显示偏好、待确认/执行回写/发布门禁/失败提醒通知偏好合同。
- 新增 `backend/app/services/account_settings_service.py`,当前复用既有 `integrations` 表以 `account_settings_preferences` 类型按 `tenant_id + user_id` 持久化账号偏好;未新增表,因此未触发 Alembic migration。
- `frontend/src/api/accountSettings.ts` 改为有 token 时优先账号同步;后端不可用或未登录时明确回落本机暂存。
- Shell / Integration 已将 `account_settings_api` 挂入 `backend/app/api/router.py` 的核心路由组,真实环境可通过 `/api/account-settings/me` 访问。
- `/me` 保存状态继续区分 `已保存到当前账号 / 仅本机暂存 / 保存失败`,不假装云端成功。
- 本 Packet 不改 OAuth/JWT/auth core,不改 `/settings` route,不改 PMFlow OS store,不做组织权限、账单、安全中心、设备管理或团队空间。
涉及文件:
- `frontend/src/api/accountSettings.ts`
- `frontend/src/features/account-settings/AccountSettingsPanel.tsx`
- `frontend/src/features/account-settings/accountSettings.test.ts`
- `backend/app/api/router.py`
- `backend/app/api/account_settings_api/__init__.py`
- `backend/app/schemas/account_settings.py`
- `backend/app/services/account_settings_service.py`
- `backend/tests/test_account_settings_api.py`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `cd backend && /Users/guojing/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/bin/python3 -m pytest tests/test_account_settings_api.py` 通过:`4 passed`。
- `cd frontend && npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`5 passed`。
未完成或风险:
- 本轮已由 Shell / Integration owner 串行 include `account_settings_api`;后续新增账号设置子能力仍不得塞入 OAuth/JWT/auth core。
- 当前复用 `integrations` 表承接 P1 合同,避免越界新增 model/migration;后续如果需要独立偏好表,再开 migration Packet。
### 2026-04-26 / Account Settings V1 / implemented
完成内容:
- 新增 `frontend/src/api/accountSettings.ts`,定义个人资料、默认语言、AI 回答深度、证据展示偏好和通知偏好前端合同;首版用浏览器本地持久化承接设置保存,不写 PMFlow OS truth store。
- 新增 `frontend/src/features/account-settings/AccountSettingsPanel.tsx`,承接 `/me` 桌面设置页与移动端分组列表 + bottom sheet。
- 将 `/me` 的 `AccountPage.tsx` 改为薄入口,继续复用 `AccountControls.tsx` 的退出登录 bottom sheet,不改 router、MobileBottomNav、PMFlow OS store 或 OAuth/JWT/auth core。
- 通知偏好已覆盖 `待确认 / 执行回写 / 发布门禁 / 失败提醒`,每类支持总开关、桌面提醒和邮件摘要。
- 保存状态已收口为 `仅本机暂存 / 已保存到当前账号 / 保存失败` 三态;当前 V1 只做本机暂存,不假装云端账号保存。
- 补充 `frontend/src/features/account-settings/accountSettings.test.ts`,锁定默认设置和持久化行为。
涉及文件:
- `frontend/src/api/accountSettings.ts`
- `frontend/src/features/account-settings/AccountSettingsPanel.tsx`
- `frontend/src/features/account-settings/accountSettings.test.ts`
- `frontend/src/features/pmflow-os/pages/AccountPage.tsx`
- `CLAUDE.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `npm run test -- src/features/account-settings/accountSettings.test.ts` 通过:`3 passed`。
- `npm run typecheck` 通过。
- `npm run build` 通过;Vite 仍输出既有 manual chunk circular warning,未阻断构建。
- Playwright 本地浏览器检查通过:`http://localhost:5186/me` 桌面与 390px 移动视口均可渲染,移动端通知偏好 bottom sheet 可打开。
未完成或风险:
- Account Settings V1 当时是前端合同 + 本地持久化;后续已由 `account-p1-preferences-backend-contract` 独立新增 `backend/app/api/account_settings_api/` 同步合同,仍不能塞入 auth core 或 PMFlow OS truth store。
### 2026-04-26 / P0 Shell Module Boundaries / done
完成内容:
- 核对当前公共壳真实落点:`frontend/src/router/index.tsx`、`frontend/src/main.tsx`、`MobileBottomNav.tsx`、`PMFlowOsFrame.tsx`。
- 冻结大模块 route 归属:`/space` 归 Space,`/project-launch` 作为启动层入口,`/pmflow-os / /command-center / /change-review / /execution-bridge / /release-growth` 归 Main Flow,`/me` 归 Account Settings。
- 明确 `/settings` 当前未实现,仅作为 Account Settings reserved route;后续如需新增,必须由 Shell / Integration owner 串行处理。
- 冻结全局 provider 归属:`QueryClientProvider -> PMFlowOsProvider -> ToastProvider -> RouterProvider`,Space / Account 不得直接改 PMFlow OS store 内部 mutation。
- 冻结移动端底部导航归属:唯一实现为 `MobileBottomNav.tsx`,固定 `空间 / 指挥台 / 待确认 / 动态 / 我的`;其中 `动态` 仍是 `/command-center` 占位,后续要做 `/activity` 必须单独开 Shell Packet。
- 同步修正 `ARCHITECTURE_INVENTORY.md` 中 C1/C2 commit 的旧描述,明确 C2 backend/frontend commit 已完成。
涉及文件:
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `CLAUDE.md`
验证:
- `git diff --name-only` 已确认本轮只改文档与约束文件,未改前端共享壳代码。
- 本轮未修改前端代码,因此未运行 `npm run typecheck`。
未完成或风险:
- `/settings` 尚未实现;`account-settings-v1` 如需要该入口,必须先把 route 需求交给 Shell / Integration owner。
- `动态` 底部导航仍指向 `/command-center`,后续如做动态页需独立 Packet。
下一步建议:
- 并行启动 `main-flow-phase-d-execution`、`space-v1-workbench`、`account-settings-v1`;三个 Packet 均不得改 router/nav/provider/shared docs,最终由 integration owner 收口。
### 2026-04-26 / Phase D.2 - Execution Handoff Contract / done
完成内容:
- 新增 `POST /pmflow-os/projects/{project_id}/execution-handoffs` 后端入口,复用 PMFlow OS 项目成员/OWNER/REVIEWER 权限边界。
- `PMFlowOSProjectionService.create_execution_handoff` 校验 task/project/tenant 边界,校验可选 active repo binding;无 repo 时允许创建 handoff draft 并保留 repo warning。
- 对任务复用 active `PromptPackage`;没有 active package 时,从真实 `Project / Task / Project Memory / RepoBinding` 生成 deterministic `PromptPackage(package_kind='execution_handoff')`,不使用 demo 文案。
- 创建 `ProgressEvent(event_type='handoff_created', source='pmflow_os')` 作为执行起点,payload 记录 `runtime_target / prompt_package_id / repo_binding_id / boundary`。
- 前端 `ExecutionBridgePage` 在真实模式展示“发起执行交接”按钮,调用 `createPMFlowExecutionHandoff` 后 refetch `truth-state / execution-summary`;demo 模式仍只走本地推进。
- 无 active task、无 repo、无 prompt package 时继续显示明确 empty/warning 和下一步,不回退假数据。
涉及文件:
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/pages/ExecutionBridgePage.tsx`
- `frontend/src/features/pmflow-os/components/ExecutionBridgeCards.tsx`
- `docs/architecture/PMFLOW_OS_PRODUCT_CONTRACT.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_os_projection_service.py backend/app/schemas/pmflow_os.py` 通过。
- `PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_pmflow_os_projection_api.py -q` 通过:`9 passed`。
- `cd frontend && npm run test -- src/features/pmflow-os` 通过。
- `cd frontend && npm run typecheck` 通过。
- `cd frontend && npm run build` 通过;Vite 仍输出既有 manual chunk circular warning,未阻断构建。
未完成或风险:
- D.2 只创建 handoff 合同、PromptPackage 与 progress event 起点,不直接执行本机命令;真实命令执行仍必须通过 Local Bridge、Codex、GitHub agent 或兼容 MCP host。
- 当前未新增 migration,沿用既有 `PromptPackage / RepoBinding / ProgressEvent`。
下一步建议:
- 进入 D.3:补 Dev Sync 写回闭环,把 Codex/Local Bridge/GitHub agent 的执行结果回写为 branch/commit/PR/test progress event,并把任务状态/证据链投影回 `truth-state`。
### 2026-04-26 / Big Module Parallel Governance / done
完成内容:
- 将大模块并行治理写入产品推进标准:允许 `Main Flow / Space / Account Settings` 作为长期模块 lane 并行,但实际执行仍必须拆成带 `write_scope` 的短生命周期 Packet。
- 明确 `Shell / Integration owner` 负责共享路由、导航、Provider、共享 API base、共享文档和合并顺序。
- 定义当前四条 lane:`Shell / Integration`、`Main Flow / PMFlow OS 主流程`、`Space / 个人空间入口`、`Account Settings / 个人中心与设置`。
- 明确每条 lane 的默认写范围、默认禁止范围和跨模块交互边界。
- 更新下一批推荐任务:先执行 `P0-shell-module-boundaries`,再并行推进 `main-flow-phase-d-execution / space-v1-workbench / account-settings-v1`,最后由 integration owner 收口。
涉及文件:
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/TASK_BRIEF_TEMPLATE.md`
- `AGENTS.md`
- `CLAUDE.md`
验证:
- 文档静态检查完成;本轮只更新治理文档和任务模板,未改代码、API、Schema 或 migration,未运行编译/单测。
未完成或风险:
- 该记录是大模块治理规则落盘;具体公共壳真实路由和 provider 核对已由后续 `P0 Shell Module Boundaries` 完成。
下一步建议:
- 后续按 P0 冻结结果同时分派 `main-flow-phase-d-execution`、`space-v1-workbench`、`account-settings-v1` 三个大模块 Packet。
### 2026-04-26 / Phase C2 Frontend - ChangeSet Commit Wiring / done
完成内容:
- 在 `frontend/src/api/pmflowOs.ts` 增加 `commitPMFlowChangeSet`,调用 `POST /pmflow-os/change-sets/{change_set_id}/commit`,默认 `mode=atomic`。
- 扩展 PMFlow OS 前端类型,允许后端投影返回 `ChangeSet.status=committed/partially_committed` 与 `ChangeItem.status=committed/skipped`。
- 将 `PMFlowOsProvider.promoteAcceptedToGraph` 的真实模式接到后端 commit API,commit 后 refetch `truth-state`;demo 模式继续使用本地 mutation。
- 将 `ChangeReviewPage` 的真实模式主按钮从“下一阶段开放”改为“确认写入项目记忆”,不再用前端本地状态冒充正式写入。
- 补充 API 模式 store 测试,确认 `promoteAcceptedToGraph("11")` 会调用 `commitPMFlowChangeSet("11", { mode: "atomic", ... })`,且不会本地写入 `requirements`。
涉及文件:
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/types.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/pages/ChangeReviewPage.tsx`
- `frontend/src/features/pmflow-os/components/ProjectStructuredLoop.tsx`
- `frontend/src/features/pmflow-os/components/chrome.tsx`
- `docs/architecture/PMFLOW_OS_PRODUCT_CONTRACT.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `npm run test -- src/features/pmflow-os/store.api.test.tsx` 通过:`3 passed`。
- `npm run test -- src/features/pmflow-os` 通过:`4 passed`。
- `npm run typecheck` 通过。
- `npm run build` 通过;Vite 仍输出既有 manual chunk circular warning,未阻断构建。
未完成或风险:
- 前端真实 commit 依赖后端已完成审查状态;若仍存在 `pending_review` item,后端会按合同显式返回 `changeset_not_reviewed`。
- Release / ModelDecision / MetricSignal commit 仍按 C2 合同暂缓或 fail-closed。
- 当前为本地开发工作区验证,未执行部署环境热重启。
下一步建议:
- 执行 Phase D:把 `ExecutionBridgePage` 切到 `GET /pmflow-os/projects/{project_id}/execution-summary` 与 dev-sync 真实数据,继续保留 demo fallback。
### 2026-04-26 / Phase C2 Backend - ChangeSet Atomic Commit / done
完成内容:
- 新增 `POST /pmflow-os/change-sets/{change_set_id}/commit` 后端入口,复用项目成员/OWNER/REVIEWER 权限边界,统一响应包络。
- 在 `PMFlowChangeReviewService` 实现 atomic commit:只处理 `accepted / edited` 项,默认提交全部 eligible items;存在未审项时阻断全量 commit;任一写入失败则回滚整个事务。
- 将 `Requirement / Decision / Risk` 写入 `truth_nodes`,将 `Task` 写入 `truth_nodes(node_type='task') + tasks`,并为 truth node/task 写入 `semantic_facts` seed。
- 补齐高风险 approval gate:`risk_level=high` 必须存在同 item 的 approved/edited approval 与 evidence,否则返回 `409 high_risk_approval_required` 且不写正式对象。
- 将 `PMFlowChangeSet / PMFlowChangeItem` 序列化扩展到 `committed / partially_committed / skipped` 状态,避免 commit 后投影被误映射为 deferred。
- 将 `backend/app/api/__init__.py` 改为轻量包入口,避免 focused API 测试导入单个模块时拉起 Feishu/MCP 等可选依赖。
涉及文件:
- `backend/app/api/__init__.py`
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/app/services/pmflow_change_review_service.py`
- `backend/tests/test_pmflow_change_review_api.py`
- `docs/architecture/PMFLOW_OS_PRODUCT_CONTRACT.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `/opt/homebrew/bin/python3.11 -m py_compile backend/app/api/__init__.py backend/app/api/pmflow_os_api/__init__.py backend/app/services/pmflow_change_review_service.py backend/app/schemas/pmflow_os.py backend/tests/test_pmflow_change_review_api.py` 通过。
- `/opt/homebrew/bin/python3.11 -m pytest tests/test_pmflow_change_review_api.py -q` 通过:`6 passed`。
- `/opt/homebrew/bin/python3.11 -m pytest tests/test_pmflow_change_review_api.py tests/test_pmflow_os_projection_api.py tests/test_pmflow_launch_api.py -q` 通过:`18 passed`。
未完成或风险:
- C2 V1 暂不支持 `ModelDecision / MetricSignal` commit;按合同必须 fail-closed。
- 本地仍有未提交删除痕迹,未纳入本次提交。
- 当前为本地开发工作区验证,未执行部署环境热重启。
下一步建议:
- 已执行 `C2-frontend`;下一步进入 Phase D Execution Bridge 真实数据接入。
### 2026-04-26 / G0 Freeze + C2 Contract / done
完成内容:
- 将当前非删除工作区成果直接 checkpoint 到 `master`,形成 `b52428f docs: codify PMFlow product delivery governance` 与 `e04ea4d chore: checkpoint current PMFlow workspace` 两个提交;删除痕迹未提交,避免未确认地固化旧截图、表格、tunnel 脚本和临时文件删除。
- 收口 Phase C2 commit 合同:`POST /pmflow-os/change-sets/{change_set_id}/commit` 的请求体、权限、原子提交模式、响应结构、错误码、高风险 approval gate、C2 V1 objectType 白名单和 ProjectTruthState 投影规则。
- 明确 C2 V1 默认 `mode=atomic`,任一 eligible item 写入失败时整个 commit 回滚,禁止半写入 Project Memory。
- 明确 C2 必须实现 `Requirement / Decision / Task / Risk`;`Release` 可选;`ModelDecision / MetricSignal` 暂缓并必须 fail-closed。
涉及文件:
- `docs/architecture/PMFLOW_OS_PRODUCT_CONTRACT.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- `git status --short --branch` 已确认 checkpoint 后仅剩未提交删除痕迹。
- `git diff --cached --name-status` 阶段检查未发现删除项被纳入 checkpoint。
- 本轮 C2-contract 只改合同文档,未新增代码、Schema 或 migration,未运行编译/单测。
未完成或风险:
- 工作区仍有未提交删除痕迹,需用户单独确认是否删除或恢复。
- C2 后端 route/service/schema 与前端 API/store 尚未实现。
下一步建议:
- 执行 `C2-backend`:实现 atomic ChangeSet commit service、route、权限、事务、高风险 gate 与后端测试。
- 合同稳定后并行执行 `C2-frontend`:接入 commit API,替换真实模式下的 demo-only `promoteAcceptedToGraph`。
### 2026-04-26 / Parallel Delivery Governance / done
完成内容:
- 新增 Codex 并行推进协议,明确并行单位必须是带 `read_scope / write_scope / forbidden_paths / shared_files / base_ref / merge_after` 的 Packet。
- 建立 V1 Productized Loop 默认并行 lane:`Contract / Backend / Frontend / UI / Docs-Test`,并固定合同、后端、前端、UI、文档集成的合并顺序。
- 将下一阶段 Phase C2 拆成 `C2-contract / C2-backend / C2-frontend / C2-docs-verification` 四个可分派 Packet,明确依赖和写范围。
- 新增分支、worktree、Packet commit 与 commit gate 协议:并行线程默认使用 `codex/<packet_id>` 分支、记录 `base_ref`、优先独立 worktree;Packet 完成后由 Codex 自行判定 `auto_commit / hold_no_commit / ask_before_commit`,通过验证后形成可审查 commit,新 Packet 从最新 integration base 或明确依赖分支重新开分支。
- 新增 `Parallel Integration Gate`,要求 integration owner 检查越界 diff、后端/前端/migration 验证、文档同步和热部署说明。
涉及文件:
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `docs/architecture/TASK_BRIEF_TEMPLATE.md`
- `AGENTS.md`
- `CLAUDE.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- 文档静态检查通过:新增协议覆盖并行前置条件、Packet 模板、write scope / forbidden paths、共享文件锁、branch / worktree / base ref、Packet commit、commit gate、merge order、integration gate。
- 本轮只改治理文档,未新增代码、API、Schema 或 migration,未运行编译/单测。
未完成或风险:
- 当前仓库仍是大面积脏工作区;正式启动多线程并行前,需要先冻结当前改动归属,避免历史脏状态被误判为新冲突。
下一步建议:
- 以 `C2-contract` 作为第一条并行治理试点 Packet,先锁定 ChangeSet commit 合同,再分派后端和前端线程。
### 2026-04-25 / Phase A - PMFlow OS Product Contract / done
完成内容:
- 新增 PMFlow OS 产品合同,明确 `ProjectTruthState / Thread / Message / ChangeSet / ChangeItem / Evidence / Approval / Requirement / Decision / Task / Risk / ModelDecision / TestRun / Release / MetricSignal / ExecutionContext / TeamFeed` 的前后端映射。
- 明确复用边界:正式项目对象优先复用 `truth_nodes / tasks / semantic_facts`,AI 应用控制面复用 `ai_project_control` 与 SSTC model_control,执行桥复用 `dev_sync / prompt_packages / progress_events`。
- 明确建议新增但本轮不建表的 PMFlow OS 专属合同对象:`pmflow_threads / pmflow_thread_messages / pmflow_change_sets / pmflow_change_items / pmflow_approvals / pmflow_evidence_links`。
- 定义 PMFlow OS API 草案:`truth-state / messages / extractions / change-set detail / accept / edit / defer / commit / execution-summary`。
- 明确 `accept/edit/defer` 只改变审查状态,`commit` 才写入 `truth_nodes / tasks / semantic_facts` 等正式对象。
涉及文件:
- `docs/architecture/PMFLOW_OS_PRODUCT_CONTRACT.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `CLAUDE.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 静态检查引用路径与核心对象完成。
- 本轮只改文档,未新增代码、API、Schema 或 migration,未运行编译/单测。
未完成或风险:
- API 尚未实现,数据库 migration 尚未创建。
- `truth_nodes.node_type` 的历史值需要在后续 projection 实现时做白名单映射。
- `ChangeSet / Approval / EvidenceLink / Thread` 仍需后续实现真实表与服务。
下一步建议:
- 执行 A3 最小真实读路径:新增只读 `pmflow_os_api` projection,先实现 `GET /pmflow-os/projects/{project_id}/truth-state` 与 `GET /pmflow-os/projects/{project_id}/execution-summary`。
### 2026-04-25 / A3 - PMFlow OS 最小真实读路径 / done
完成内容:
- 新增只读后端入口 `backend/app/api/pmflow_os_api/`,注册 `GET /pmflow-os/projects/{project_id}/truth-state` 与 `GET /pmflow-os/projects/{project_id}/execution-summary`,统一返回 `{code,message,data}`。
- 新增 `backend/app/services/pmflow_os_projection_service.py` 与 `backend/app/schemas/pmflow_os.py`,把 `ProjectTruthState` 投影接到真实后端对象:`Requirement / Decision / Risk / Release` 来自 `truth_nodes`,`Task` 来自 `tasks`,`Project Memory` 来自 `truth_nodes + semantic_facts`,`ExecutionContext` 来自 `dev-sync summary + prompt_packages + progress_events + repo/task code link`。
- `Thread / ChangeSet / ChangeItem / Approval / EvidenceLink` 本轮没有稳定表,不用 mock 冒充;接口返回空集合并通过 `projectionWarnings` 明确说明。
- 新增前端 API `frontend/src/api/pmflowOs.ts`,封装 `getPMFlowTruthState(projectId)` 与 `getPMFlowExecutionSummary(projectId)`。
- `frontend/src/features/pmflow-os/store.tsx` 现支持 `?projectId=<id>` 通过 React Query 读取真实 `truth-state`;只有显式 `?demo=1` 或 `?dataSource=demo` 才启用本地 mock 演示动作。真实 API 失败时显示错误/空态,不静默 fallback 成 mock 成功。
- `ProjectMemoryPage` 在真实模式下展示后端 `projectMemory.truthNodeFacts / semanticFacts`,不再把前端 mock 当作项目记忆来源。
涉及文件:
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/app/api/router.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/components/PMFlowOsFrame.tsx`
- `frontend/src/features/pmflow-os/pages/CommandCenterPage.tsx`
- `frontend/src/features/pmflow-os/pages/ProjectMemoryPage.tsx`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `CLAUDE.md`
验证:
- 静态路径检查完成。
- 后端:`python -m py_compile`(Python 3.12 runtime)通过。
- 后端:`pytest tests/test_pmflow_os_projection_api.py -q` 通过,覆盖空项目 truth-state、Project Memory projection、tasks projection、execution-summary 空态、tenant/project 权限边界。
- 后端 router import smoke:`from app.api.router import api_router` 通过。
- 前端:`npm run typecheck` 通过。
- 前端:`npm run build` 通过。
剩余缺口:
- 本轮不新增 migration,因此 `Thread / ChangeSet / ChangeItem / Approval / EvidenceLink` 仍为空集合或 warning;后续 Phase C 再补真实表与 mutation。
- `WorkGraph / ExecutionBridge / ReleaseGrowth` 仍有部分静态展示区,A3 只保证 truth store 与 Project Memory 真实读取入口,不做 UI 重画和完整页面数据替换。
- 后端代码已改,但当前是在本地开发工作区执行验证,未连接运行中的部署服务;热部署/重启需要在实际部署环境执行。
### 2026-04-25 / Phase B - Project Launch 真实创建链 / done
完成内容:
- 新增 Phase B 专用启动链表 migration `backend/alembic/versions/20260425_add_pmflow_launch_tables.py`,只创建 `pmflow_launch_drafts / pmflow_threads / pmflow_thread_messages`;本轮未创建 `pmflow_change_sets / pmflow_change_items / pmflow_approvals / pmflow_evidence_links`。
- 新增后端启动链入口 `backend/app/api/pmflow_launch_api/`,注册 `POST /pmflow-launch/drafts` 与 `POST /pmflow-launch/drafts/{draft_id}/confirm`,统一返回 `{code,message,data}`。
- 新增 `backend/app/services/pmflow_launch_service.py` 与 `backend/app/schemas/pmflow_launch.py`:草案生成调用 `llm_service.generate_structured_object(function_name="pmflow_launch_draft_v1")` 并显式传 `routing_meta`;结构化失败返回明确错误或 warnings,不用模板句冒充成功。
- confirm 在同一事务内锁定草案并创建 `Project / UserProject / PMFlowThread / PMFlowThreadMessage / truth_nodes / tasks / semantic_facts seed / OperationLog`,随后更新草案 `status=confirmed` 与 `confirmed_project_id`;重复 confirm 幂等返回同一 `project_id`,不重复写正式对象。
- `truth_nodes.content` 与任务 payload 写入 `launch_draft_id / thread_id / thread_message_id / source=pmflow_launch_confirmed_draft / confidence / evidence`,确保初始 Project Memory 与 Task 能追溯到启动草案和首条用户输入。
- A3 `truth-state` projection 已更新为优先读取 `pmflow_threads` 默认启动线程与 `pmflow_thread_messages`,Project Memory 仍只来自 `truth_nodes + semantic_facts`,不从 launch draft 直接拼。
- 新增前端 API `frontend/src/api/pmflowLaunch.ts`,封装 `createPMFlowLaunchDraft` 与 `confirmPMFlowLaunchDraft`。
- `frontend/src/features/project-launch/useProjectLaunchState.ts` 默认走真实 API;只有显式 `?demo=1` 或 `?dataSource=demo` 才启用本地演示状态机。draft/confirm 失败进入明确失败态,不静默跳 mock 成功态。
- 新增 `/pmflow-os` route alias,创建成功后使用后端返回的 `/pmflow-os?projectId=<id>` 进入 A3 真实读路径。
涉及文件:
- `backend/alembic/versions/20260425_add_pmflow_launch_tables.py`
- `backend/app/models/pmflow_launch.py`
- `backend/app/api/pmflow_launch_api/__init__.py`
- `backend/app/services/pmflow_launch_service.py`
- `backend/app/schemas/pmflow_launch.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/app/config/ai_prompts_catalog/part_scenes_06.py`
- `backend/app/services/llm_service/shared_part_01.py`
- `backend/tests/test_pmflow_launch_api.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowLaunch.ts`
- `frontend/src/features/project-launch/useProjectLaunchState.ts`
- `frontend/src/features/project-launch/useProjectLaunchState.test.ts`
- `frontend/src/router/index.tsx`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `CLAUDE.md`
验证:
- 后端:`python -m py_compile` 新增后端模块、migration、router、prompt 聚合文件通过。
- 后端:`pytest tests/test_pmflow_launch_api.py tests/test_pmflow_os_projection_api.py -q` 通过,覆盖 draft 成功、结构化字段缺失、warnings、confirm 创建 Project/thread/message/truth_nodes/tasks、truth-state 回读、幂等、过期/跨 tenant/跨 user、rollback。
- Alembic:`alembic upgrade head` 在本地开发 PostgreSQL 成功从 `20260421_finalize_v1_productization` 升级到 `20260425_add_pmflow_launch_tables`。
- 前端:`npm run test -- src/features/project-launch/useProjectLaunchState.test.ts` 通过,覆盖真实 draft API、draft 失败、confirm 成功、confirm 失败不进成功态、显式 demo 分支。
- 前端:`npm run typecheck` 通过。
- 前端:`npm run build` 通过。
剩余缺口:
- Phase B 只覆盖首次 Project Launch 创建链;项目内后续 ChangeSet / ChangeItem / Approval / EvidenceLink 审查系统仍留给 Phase C。
- 初始 `semantic_facts` seed 仅写用户确认后的 project-level facts;完整异步抽取和治理仍复用既有 semantic facts 管线。
### 2026-04-26 / Phase C1 - PMFlow Change Review 数据底座与审查状态机 / done
完成内容:
- 新增 C1 review 表 migration `backend/alembic/versions/20260426_add_pmflow_change_review_tables.py`,只创建 `pmflow_change_sets / pmflow_change_items / pmflow_approvals / pmflow_evidence_links`;未新增 commit 或 Phase C2 表。
- 新增模型 `backend/app/models/pmflow_change_review.py`,所有表包含 `tenant_id`,并按 `tenant_id + project_id` 查询;`ChangeItem` 归属 `ChangeSet`,`Approval` 记录 `accept / edit / defer` 的 before/after,`EvidenceLink` 可引用 thread message。
- 新增服务 `backend/app/services/pmflow_change_review_service.py`,实现项目内消息、`proposed_items` extraction、ChangeSet detail、accept/edit/defer 审查状态机;老项目无真实线程时仅允许 `default` 或 `thread-project-{project_id}` 懒创建默认线程。
- 在 `backend/app/api/pmflow_os_api/` 扩展 `/pmflow-os` API:`POST /projects/{project_id}/threads/{thread_id}/messages`、`POST /projects/{project_id}/extractions`、`GET /projects/{project_id}/change-sets/{change_set_id}`、`POST /change-items/{change_item_id}/accept|edit|defer`,统一响应包络。
- `PMFlowOSProjectionService` 已投影 `changeSets / changeItems / evidence / approvals`,`activeChangeSetId` 取最近 open ChangeSet,`loopStage` 映射为 `command_idle / extraction_ready / review_open`;Project Memory 仍只来自 `truth_nodes + semantic_facts`。
- 前端 `frontend/src/api/pmflowOs.ts` 增加 Change Review API wrapper;`frontend/src/features/pmflow-os/store.tsx` 真实模式调用后端 message/extraction/accept/edit/defer,并在成功后 refetch truth-state。真实模式不再本地 promote accepted item,也不假装写入项目记忆;demo 模式仍需显式 `?demo=1` 或 `?dataSource=demo`。
涉及文件:
- `backend/alembic/versions/20260426_add_pmflow_change_review_tables.py`
- `backend/app/models/pmflow_change_review.py`
- `backend/app/services/pmflow_change_review_service.py`
- `backend/app/api/pmflow_os_api/__init__.py`
- `backend/app/schemas/pmflow_os.py`
- `backend/app/services/pmflow_os_projection_service.py`
- `backend/tests/test_pmflow_change_review_api.py`
- `backend/tests/test_pmflow_os_projection_api.py`
- `frontend/src/api/pmflowOs.ts`
- `frontend/src/features/pmflow-os/store.tsx`
- `frontend/src/features/pmflow-os/store.api.test.tsx`
- `frontend/src/features/pmflow-os/pages/ChangeReviewPage.tsx`
- `frontend/src/features/pmflow-os/components/ProjectStructuredLoop.tsx`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/PMFLOW_OS_PRODUCT_CONTRACT.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `CLAUDE.md`
验证:
- 后端:`python -m py_compile` 新增后端模型、service、schema、router、migration 通过。
- 后端:`pytest tests/test_pmflow_change_review_api.py tests/test_pmflow_os_projection_api.py tests/test_pmflow_launch_api.py -q` 通过,覆盖 message 懒创建线程、extraction、change items、evidence link、detail、accept/edit/defer、reviewed 自动推进、权限边界、truth-state 投影,以及 accepted/edited 不进入 Project Memory。
- Alembic:`alembic heads` 返回 `20260426_add_pmflow_change_review_tables (head)`;`alembic upgrade head` 在本地开发 PostgreSQL 成功从 `20260425_add_pmflow_launch_tables` 升级到 `20260426_add_pmflow_change_review_tables`。
- 前端:`npm run test -- src/features/pmflow-os` 通过。
- 前端:`npm run typecheck` 通过。
- 前端:`npm run build` 通过;Vite 仍提示既有循环 chunk warning,但构建成功。
剩余缺口:
- C1 不实现 `/commit`,不写 `truth_nodes / tasks / semantic_facts`;accepted/edited 仅代表审查状态,不代表 confirmed Project Memory。
- 该历史 C1 记录已被 Main Flow AI Extraction Production Loop 覆盖:`POST /extractions` 未传 `proposed_items` 时会调用真实 AI extraction;失败显式返回结构化失败/证据不足,不创建模板假结果。
- 高风险 `risk_level=high` 本轮只记录风险等级和 approval,commit gate 留给 C2。
下一步建议:
- 执行 Phase C2:实现 ChangeSet commit,把 `accepted / edited` ChangeItem 按对象类型写入正式 `truth_nodes / tasks / semantic_facts`,并补齐高风险 approval gate 与部分失败回滚/明细返回。
### 2026-04-24 / Product Blueprint / done
完成内容:
- 整理并落盘 PMFlow 产品蓝图真源。
- 明确 PMFlow 是“对话驱动的 AI 产品执行操作系统”。
- 明确 `solo-first, team-ready`、项目真相层、ChangeSet 待确认、Execution Bridge、人机混编团队等不可偏离项。
涉及文件:
- `docs/PMFLOW_PRODUCT_BLUEPRINT.md`
- `USER.md`
- `CLAUDE.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- 文档新增与引用检查完成。
- 无代码改动,未运行编译/测试。
下一步:
- 执行 Phase A:PMFlow OS 产品合同收口。
### 2026-04-24 / Delivery Standard / done
完成内容:
- 建立 PMFlow 产品推进执行标准。
- 记录当前推进状态、下一阶段方向、Phase A-F 推进顺序、单次任务范围标准和完成后进度回写标准。
- 明确新开线程必须先读蓝图、执行标准和代码索引,避免重做或漏做。
涉及文件:
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
- `USER.md`
- `CLAUDE.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
验证:
- 文档新增与引用检查完成。
- 无代码改动,未运行编译/测试。
下一步:
- 从 A1 对象合同映射开始,把前端 `pmflow-os/types.ts` 与后端现有对象逐一对齐。
### 2026-04-27 / Legacy AI Steward Launch Downline / done
完成内容:
- 下线用户可见的 `/ai-steward` 产品页与侧边栏入口;legacy route 只保留迁移重定向,`tab=create` 进入 `/project-launch`,`tab=engine / tab=feedback-center` 进入 `/ai-config`,其它 legacy tab 进入 `/space`。
- 收敛新建项目入口:前端移除 `aiStewardApi` 的直接创建调用与相关类型,后端 `POST /ai-steward/project-from-text` 返回 410 包络错误;真实项目创建唯一走 `POST /pmflow-launch/drafts -> POST /pmflow-launch/drafts/{draft_id}/confirm`。
- 保留并迁移仍有价值的能力:QA 浮窗、状态条、回答元卡片继续保留在 `frontend/src/components/ai-steward/`;QA URL 新生成到 `/space?view=ai-history`;反馈中心入口迁到 `/ai-config`;Context Cache Feature Catalog 与信号通知默认目标改到 `/space`。
- 历史页面文件未做物理删除,只作为迁移占位或断链壳保留;如需后续清理文件,需要按删除确认流程列路径后单独执行。
涉及文件:
- `frontend/src/router/index.tsx`
- `frontend/src/components/layout/Sidebar.tsx`
- `frontend/src/components/layout/TopBar.tsx`
- `frontend/src/components/ai-steward/qaPageAnchor.ts`
- `frontend/src/components/sstc/FeedbackSummaryCard.tsx`
- `frontend/src/api/aiSteward.ts`
- `frontend/src/pages/ai-steward/AIStewardPage.tsx`
- `frontend/src/pages/ai-steward/sections/CreateProjectTab.tsx`
- `backend/app/api/ai_steward_api/routes_capture.py`
- `backend/app/api/ai_steward_api/schemas.py`
- `backend/app/api/legacy_ai_steward_api.py`
- `backend/app/api/router.py`
- `backend/app/services/context_cache_service/mixin_profile_basics.py`
- `backend/app/services/context_cache_service/mixin_profile_route_parser.py`
- `backend/app/services/signal/signal_capture_service/mixin_capture_legacy.py`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`/opt/homebrew/bin/python3.11 -m py_compile backend/app/api/ai_routing.py backend/app/api/llm_engines.py backend/app/services/ai_routing_governance_service.py backend/app/services/llm_service/mixin_engine_admin.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_ai_routing_governance_service.py backend/tests/test_ai_service_core_runtime.py -q` 通过,40 passed。
- 前端 focused:`cd frontend && npm test -- src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,12 passed。
- 前端类型检查:`cd frontend && npm run typecheck` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
- 热重启:`docker compose restart backend && docker compose ps backend` 已执行,`pmflow-backend` healthy。
验证:
- 残留检索:计划指定的 legacy create 入口、direct create API 名称、旧项目文本创建类型名与旧中文入口名均无命中。
- 后端:`/opt/homebrew/bin/python3.11 -m compileall -q app` 通过。
- 后端:`/opt/homebrew/bin/python3.11 -m pytest tests/test_ai_steward_project_from_text_contract.py tests/test_context_cache_profile_catalog.py tests/test_pmflow_launch_api.py -q` 通过,27 passed。
- 前端:`npx vitest run src/router/legacyAIStewardRedirect.test.ts src/components/layout/Sidebar.test.tsx src/components/ai-steward/qaPageAnchor.test.ts` 通过,9 passed。
- 前端:`npm run typecheck` 通过。
- 前端:`npm run build` 通过。
### 2026-04-28 / Workspace vs Platform AI Ops Boundary / done
完成内容:
- 按“三平面模型”收口账号体系:`users` 只代表登录身份,`tenant_memberships` 表达客户个人/团队空间角色,新增 `platform_memberships` 表达 PMFlow 内部平台运营身份;平台角色按 `user_id + role` 唯一,允许一个内部账号组合多个平台职责。
- 登录响应和 `/users/me` 新增 `platform_context`,前端可用 `platform_context.capabilities` 判断 `/platform/*` 入口;客户空间 `OWNER/REVIEWER` 不再等同 PMFlow 平台管理员。
- 后端将平台治理能力从客户角色中剥离:LLM 引擎、AI 路由 overview/admin-console/diagnostics、高级模型路由、route/context 治理、semantic facts 治理改为要求 `platform.*` capability;团队 AI 策略仍保留为空间 Owner/Reviewer 可见的客户侧策略。
- 前端新增 `/platform` 平台 AI Operations Console 首页,并将 AI 路由与供应商、高级路由、Route Context 治理、Semantic Facts 治理放入平台权限边界;`/ai-config` 收敛为空间级 AI 使用设置,不再向普通客户 Owner 展示平台诊断组。
- 文档同步更新 `AGENTS.md`、`CLAUDE.md`、`API_CONTRACTS.md`、`RUNTIME_GUARDRAILS.md`、`CODE_REFERENCE_INDEX.md` 与 `ARCHITECTURE_INVENTORY.md`,明确客户空间 Owner 与平台运营账号的边界。
涉及文件:
- `backend/app/models/platform_membership.py`
- `backend/alembic/versions/20260428_add_platform_memberships.py`
- `backend/app/services/platform_access_service.py`
- `backend/app/dependencies/permissions.py`
- `backend/app/api/auth.py`
- `backend/app/services/phone_auth_service.py`
- `backend/app/api/users_api/routes_query.py`
- `backend/app/api/ai_routing.py`
- `backend/app/api/llm_engines.py`
- `backend/app/api/model_routing.py`
- `backend/app/api/rag_api/routes_route_governance.py`
- `backend/app/api/semantic_facts_api/routes.py`
- `frontend/src/auth/RouteBoundary.tsx`
- `frontend/src/lib/rbac.ts`
- `frontend/src/router/index.tsx`
- `frontend/src/pages/platform/PlatformConsolePage.tsx`
- `frontend/src/pages/ai-config/AIConfigPage.tsx`
- `frontend/src/pages/ai-config/constants.ts`
- `frontend/src/pages/ai-config/components/AISetupWizard.tsx`
- `frontend/src/pages/ai-config/components/GovernanceToolsCard.tsx`
- `frontend/src/pages/ai-routing/AIRoutingConsolePage.tsx`
- `frontend/src/pages/query-route-governance/QueryRouteGovernancePage.tsx`
- `frontend/src/pages/semantic-facts-board/SemanticFactsBoardPage.tsx`
验证:
- 后端:`python3 -m py_compile backend/app/models/platform_membership.py backend/app/services/platform_access_service.py backend/app/dependencies/permissions.py backend/app/api/auth.py backend/app/services/phone_auth_service.py backend/app/api/users_api/routes_query.py backend/app/api/ai_routing.py backend/app/api/llm_engines.py backend/app/api/model_routing.py backend/app/api/rag_api/routes_route_governance.py backend/app/api/semantic_facts_api/routes.py` 通过;当前环境没有 `python` 命令,使用 `python3` 执行。
- 前端:`npm run typecheck` 通过。
- 前端:`npx vitest run src/pages/ai-config/AIConfigPage.test.tsx src/pages/ai-routing/AIRoutingPages.test.tsx src/pages/query-route-governance/QueryRouteGovernancePage.test.tsx src/auth/RouteBoundary.test.tsx src/router/legacyAIStewardRedirect.test.ts` 通过,21 passed。
- 前端:`npm run build` 通过。
- 部署生效:`docker compose exec -T backend alembic upgrade head` 已执行,`alembic current` 为 `20260428_add_platform_memberships (head)`;`platform_memberships` 表和 `uq_platform_memberships_user_role` 约束已在本地 Postgres 存在;`docker compose restart backend` 已执行,`docker compose ps backend` 显示 healthy。
下一步:
- 如需给真实 PMFlow 内部账号开平台权限,优先写入 `platform_memberships`;临时 bootstrap 可用 `PMFLOW_PLATFORM_ADMIN_USERS` 或 `PMFLOW_AI_OPS_USERS` 环境变量。
### 2026-04-28 / Platform Shell & Navigation IA / done
完成内容:
- `/platform/*` 从旧项目工作台侧栏/顶部条中剥离,统一使用平台专属 `PlatformSidebar + PlatformTopBar`。
- 平台后台信息架构确定为“运行总览 / AI 运行层 / 上下文与语义层 / 质量与事件层”:只承载 PMFlow 内部 AI 运行、供应商路由、上下文、语义事实、评测和事故复盘,不承载客户空间项目、成员、容量或项目主链菜单。
- `/platform` 首页改为平台 AI Operations Console 总览,按当前 `platform_context.capabilities` 展示可操作工具,并明确客户空间 Owner 不进入平台控制面。
- 平台诊断旧路径从 `/ai-config/*` 兼容迁移到 `/platform/*`:AI 路由与供应商、高级路由、Contract Sync、Route Context、Knowledge Graph、Semantic Facts 均不再套入空间配置壳。
涉及文件:
- `frontend/src/components/layout/Layout.tsx`
- `frontend/src/auth/RouteBoundary.tsx`
- `frontend/src/router/index.tsx`
- `frontend/src/pages/platform/PlatformChrome.tsx`
- `frontend/src/pages/platform/PlatformConsolePage.tsx`
- `frontend/src/pages/ai-config/constants.ts`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 前端:`npm run typecheck` 通过。
- 前端:`npx vitest run src/pages/ai-config/AIConfigPage.test.tsx src/pages/ai-routing/AIRoutingPages.test.tsx src/pages/query-route-governance/QueryRouteGovernancePage.test.tsx src/auth/RouteBoundary.test.tsx` 通过,14 passed。
- 前端:`npm run build` 通过。
- 浏览器烟测:`http://localhost:5176/platform` 已显示平台专属侧栏和顶部条,并出现 Contract Sync 入口;旧“指挥台 / 项目工作台 / 决策与待确认 / 开发执行 / 发布与增长 / 团队层 / 项目记忆”菜单不再出现;旧 `/ai-config/knowledge-graph-board` 已跳转到 `/platform/knowledge-graph-board` 并进入同一平台壳。该页面当前仍命中旧 `GET /api/ai-steward/knowledge-graph/capability-summary` 404,这是治理页 API 路径的存量问题,不影响平台导航壳迁移结论。
### 2026-04-28 / AI Readiness 双层表达与平台诊断边界 / done
完成内容:
- `AIReadiness` 前端合同升级为双层表达:客户层输出 `customerState / title / summary / blockers / customerActions / workspaceOwnerActions`,平台层输出 `platformDiagnostic(causeCode / causeOwner / rawStatus / affectedScenes / platformActions)`。
- 用户端默认只表达业务影响和可继续动作:普通成员看到“AI 草案生成暂不可用,可继续记录想法、处理待确认、推进现有项目”;空间负责人看到空间 AI 可用状态、团队策略、工具连接、知识治理和确认边界;平台人员进入用户端也先看客户视图,只能通过显式平台诊断卡进入具体 cause/CTA。
- `/platform/*` 明确作为 PMFlow 平台 AI Ops 控制面,默认展示供应商、全局路由、模型槽位、诊断、失败样本、额度和连接测试等平台控制面内容;这些内容不得出现在普通客户空间默认视图。
- `/ai-config?tab=setup` 改为“空间 AI 可用状态 / AI 使用设置”,不再展示“启用供应商 / 运行测试并启用 / 额度诊断”类平台 CTA;空间侧只保留团队策略、工具连接、知识治理和人工确认边界。
- Space 首屏、顶部状态、项目启动台、项目级 AI 副驾、空间 AI 管家、`/ai-config` 与 `/platform` 统一消费同一 readiness 合同,避免不同入口各自编文案导致权限边界漂移。
- 同步更新 `USER.md`、`CLAUDE.md`、`CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md`,把该方向记录为后续 AI 可用状态、空间配置和平台诊断相关功能的产品边界。
验证:
- 前端:`npm run typecheck` 通过。
- 前端:`npx vitest run src/features/personal-space/PersonalSpacePage.test.tsx src/pages/ai-config/AIConfigPage.test.tsx src/pages/ai-routing/AIRoutingPages.test.tsx src/components/layout/Layout.test.tsx` 通过,13 passed。
- 前端:`npm run build` 通过。
涉及文件:
- `frontend/src/features/ai-readiness/types.ts`
- `frontend/src/features/ai-readiness/readiness.ts`
- `frontend/src/features/ai-readiness/components.tsx`
- `frontend/src/features/project-launch/components/LaunchCanvases.tsx`
- `frontend/src/features/pmflow-os/components/PMFlowOsFrame.tsx`
- `frontend/src/features/personal-space/components/SpaceAIConcierge.tsx`
- `frontend/src/pages/ai-config/components/AISetupWizard.tsx`
- `frontend/src/lib/rbac.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 前端:`npx vitest run src/features/personal-space/PersonalSpacePage.test.tsx src/pages/ai-config/AIConfigPage.test.tsx src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,12 passed。
- 前端:`npm run typecheck` 通过。
- 前端:`npm run build` 通过。
### 2026-04-28 / Space Saved Ideas Pre-project Loop / implemented
完成内容:
- 将“暂存想法”从前端临时提示升级为真实 pre-project idea seed 闭环:用户在 Project Launch 可保存未成型想法,`/space` 可看到真实列表、详情、原始输入、准备度、缺失问题、归档和“生成项目草案”动作。
- 后端新增 `saved_ideas` 表与 Space API:`GET/POST/PATCH /space/saved-ideas`、`POST /space/saved-ideas/{idea_id}/archive`、`POST /space/saved-ideas/{idea_id}/promote`。该表只保存原始想法、来源、状态、准备度、缺失问题和 Project Launch draft 关联,不写 Project Memory、ChangeSet、任务、执行事件或发布信号。
- `promote` 只复用 Project Launch draft 生成链,生成后通过前端 `project_launch_draft` pending intent 回到 `/project-launch` human review;仍需用户显式确认后才创建正式项目。
- Space 首页继续作为聚合与导航层:除 `saved_ideas` pre-project seed 外,不写 PMFlow OS 主链对象;后续 team-ready 扩展必须围绕共享、补充、协作权限扩展 seed,不得把暂存想法直接升级成项目事实。
- 同步更新 `CLAUDE.md`、`API_CONTRACTS.md`、`CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与 `RUNTIME_GUARDRAILS.md`,把该方向固化为后续持续推进边界。
涉及文件:
- `backend/alembic/versions/20260428_add_saved_ideas.py`
- `backend/app/models/saved_idea.py`
- `backend/app/schemas/space.py`
- `backend/app/services/space_saved_idea_service.py`
- `backend/app/api/space_api/__init__.py`
- `backend/app/api/router.py`
- `backend/tests/test_space_saved_ideas_api.py`
- `frontend/src/api/space.ts`
- `frontend/src/lib/pendingIntent.ts`
- `frontend/src/features/project-launch/types.ts`
- `frontend/src/features/project-launch/useProjectLaunchState.ts`
- `frontend/src/features/project-launch/components/LaunchCanvases.tsx`
- `frontend/src/features/project-launch/components/LaunchShell.tsx`
- `frontend/src/features/project-launch/components/MobileLaunchLayout.tsx`
- `frontend/src/features/project-launch/useProjectLaunchState.test.ts`
- `frontend/src/features/project-launch/components/LaunchCanvasesFailure.test.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`python3 -m py_compile backend/app/models/saved_idea.py backend/app/schemas/space.py backend/app/services/space_saved_idea_service.py backend/app/api/space_api/__init__.py backend/app/api/router.py backend/tests/test_space_saved_ideas_api.py` 通过。
- 后端 focused:`cd backend && /opt/homebrew/bin/python3.11 -m pytest tests/test_space_saved_ideas_api.py` 通过,2 passed。
- 前端:`cd frontend && npm run typecheck` 通过。
### 2026-04-28 / Space Saved Ideas Structured Enrichment / implemented
完成内容:
- 将暂存想法的“信息不足 / 继续补充会更准 / 准备度”从纯系统初判升级为 AI-ready 结构化判断:保存或继续完善原始输入时,后端先调用 `space_saved_idea_enrichment_v1`,结构化输出 `summary / target_user / problem / value_hypothesis / validation_signal / constraints / missing_questions / readiness_score / status / confidence`。
- `saved_ideas` 新增 enrichment 元数据:`enrichment_status / enrichment_payload / enrichment_error / enriched_at`。`ai_enriched` 代表 AI 结构化成功;`ai_failed` 代表 AI 不可用或解析失败并显式回落 `system_baseline`;`baseline` 代表只有系统初判。任何 fallback 都不能冒充 AI 结论。
- `/space` 暂存想法详情新增“完整度判断”区块,展示判断来源、AI 结构化字段和继续补充问题;“继续完善”保存后会重新触发结构化判断。“生成项目草案”仍只进入 Project Launch human review,确认前不创建项目、不写项目记忆。
- 后续 team-ready 方向继续沿用该 seed 模型扩展共享、协作补充、权限和审计,不把暂存想法直接升级成 Project Memory、ChangeSet、任务或执行事件。
涉及文件:
- `backend/alembic/versions/20260428_add_saved_idea_enrichment.py`
- `backend/app/models/saved_idea.py`
- `backend/app/schemas/space.py`
- `backend/app/services/space_saved_idea_service.py`
- `backend/app/config/ai_prompts.py`
- `backend/app/config/ai_prompts_catalog/__init__.py`
- `backend/app/config/ai_prompts_catalog/part_scenes_06.py`
- `backend/tests/test_space_saved_ideas_api.py`
- `frontend/src/api/space.ts`
- `frontend/src/features/personal-space/PersonalSpacePage.tsx`
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
- `frontend/src/features/project-launch/useProjectLaunchState.test.ts`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`python3 -m py_compile backend/app/models/saved_idea.py backend/app/schemas/space.py backend/app/services/space_saved_idea_service.py backend/app/config/ai_prompts.py backend/app/config/ai_prompts_catalog/__init__.py backend/app/config/ai_prompts_catalog/part_scenes_06.py backend/tests/test_space_saved_ideas_api.py` 通过。
- 后端 focused:`cd backend && /opt/homebrew/bin/python3.11 -m pytest tests/test_space_saved_ideas_api.py` 通过,3 passed。
- 前端 focused:`cd frontend && npx vitest run src/features/personal-space/PersonalSpacePage.test.tsx src/features/project-launch/useProjectLaunchState.test.ts` 通过,19 passed。
- 前端类型检查:`cd frontend && npm run typecheck` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
- 迁移与热重启:`docker compose exec -T backend alembic upgrade head` 已升级到 `20260428_add_saved_idea_enrichment (head)`;`docker compose restart backend` 后 `pmflow-backend` healthy。
### 2026-05-01 / Saved Idea Prompt Runtime Migration / implemented
完成内容:
- 将暂存想法结构化整理从直接 format `PROMPT_SAVED_IDEA_ENRICHMENT` 迁到 `PromptRuntimeService`,运行时优先读取平台 Prompt 运营中心 active release,并把 `prompt_key / prompt_release_id / prompt_source` 写入 `space_saved_idea_enrichment_v1` 的 routing meta。
- 补齐截图场景的 prompt 约束:问候、测试词、无意义短语或无实质想法内容必须判为 `needs_more_info`、`readiness_score=0.0`,并给出“解决什么问题 / 目标用户 / 预期价值”三类补充问题。
- 修正 prompt registry 中 `PROMPT_SAVED_IDEA_ENRICHMENT` 的 call site,并增加回归测试锁定 active release 覆盖与非想法输入约束。
涉及文件:
- `backend/app/services/space_saved_idea_service.py`
- `backend/app/config/ai_prompts_catalog/part_scenes_06.py`
- `backend/app/config/ai_prompt_registry.py`
- `backend/tests/test_space_saved_ideas_api.py`
- `backend/tests/test_ai_prompt_registry_contract.py`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`PYTHONPATH=backend python3.11 -m py_compile backend/app/services/space_saved_idea_service.py backend/app/config/ai_prompts_catalog/part_scenes_06.py backend/app/config/ai_prompt_registry.py backend/tests/test_space_saved_ideas_api.py backend/tests/test_ai_prompt_registry_contract.py` 通过。
- 后端 focused:`PYTHONPATH=backend python3.11 -m pytest backend/tests/test_space_saved_ideas_api.py backend/tests/test_ai_prompt_registry_contract.py -q` 通过,9 passed,保留既有 Pydantic deprecation warning。
- Prompt runtime focused:`PYTHONPATH=backend python3.11 -m pytest backend/tests/test_prompt_runtime_service.py -q` 通过,2 passed。
- 本轮仅改后端 runtime prompt 读取、prompt catalog/registry、测试和文档;未新增 migration。后端热重启:`docker compose restart backend` 后 `docker compose ps backend` 为 healthy。
### 2026-04-28 / Platform AI Ops Runtime Menus / implemented
完成内容:
- 将平台侧“AI 路由与供应商”从单页诊断聚合拆成平台运行总览 + AI 运行层子菜单:运行总览合并到 `/platform`,AI 运行层保留 `供应商与凭据 / 能力槽位 / 业务场景路由 / 成本、配额与缓存 / 失败诊断`。
- 旧 `/platform/ai-routing-console` 只做兼容跳转到 `/platform`;新增 `/platform/ai-routing-providers`、`/platform/ai-routing-slots`、`/platform/ai-routing-scenes`、`/platform/ai-routing-costs`、`/platform/ai-routing-failures`,旧裸路径与 `/ai-config/ai-routing-*` 只做兼容跳转。
- 平台侧栏同步新增“工具与外部能力层”规划组,MCP / 外部查询 / 工具权限暂以 planned 菜单表达,不冒充已接入真实运行数据。
- 所有新增平台菜单继续消费现有脱敏 `GET /ai-routing/admin-console` 和只读 `POST /ai-routing/diagnostics/run`,不新增 provider secret 写入、不改 runtime route 真源、不把平台细节暴露到客户空间。
- 同步更新 `CLAUDE.md`、`API_CONTRACTS.md`、`CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与 `RUNTIME_GUARDRAILS.md`。
涉及文件:
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `frontend/src/pages/ai-routing/AIRoutingConsolePage.tsx`
- `frontend/src/pages/AIRoutingProvidersPage.tsx`
- `frontend/src/pages/AIRoutingCapabilitySlotsPage.tsx`
- `frontend/src/pages/AIRoutingSceneRoutesPage.tsx`
- `frontend/src/pages/AIRoutingCostQuotaCachePage.tsx`
- `frontend/src/pages/AIRoutingFailureDiagnosticsPage.tsx`
- `frontend/src/pages/AIRoutingModuleMapPage.tsx`
- `frontend/src/pages/platform/PlatformChrome.tsx`
- `frontend/src/router/index.tsx`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `CLAUDE.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 前端 focused:`cd frontend && npx vitest run src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,8 passed。
- 前端类型检查:`cd frontend && npm run typecheck` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
### 2026-04-28 / Platform Provider Runtime Semantics / implemented
完成内容:
- 将供应商连接从“单个启用引擎”改成“多个连接可同时启用 + 一个全局兜底默认”:`active_engine_id` 保留兼容,新增语义以 `default_fallback_engine_id` 为准。
- 平台供应商和函数级模型路由固定读取 PMFlow 内部平台运行作用域(默认 `PMFLOW_PLATFORM_RUNTIME_TENANT_ID=1`),不再随客户 workspace tenant 切换;客户空间仍只保存团队 AI 使用策略。
- 供应商连接新增 `enabled / connection_status / last_test_status / last_test_at / last_error_summary` 运行状态;连接测试会回写测试状态,但不会自动改兜底默认。
- LLM runtime 解析、low/high tier 选择和低阶失败升级会跳过 `enabled=false` 的连接;停用连接仍可保留、编辑和测试。
- `/platform/ai-routing-providers` 文案和操作改为“启用/停用/设为兜底/测试/编辑/删除”,不再把供应商启用误表达为唯一默认调用模型。
- 同步更新 `API_CONTRACTS.md`、`CODE_REFERENCE_INDEX.md` 与 `RUNTIME_GUARDRAILS.md`,明确平台供应商、多连接启用、能力槽位和兜底默认边界。
验证:
- 后端编译与 focused:`docker exec pmflow-backend sh -lc "python -m py_compile ... && PYTHONPATH=/app/backend pytest -q tests/test_ai_service_core_runtime.py::test_default_fallback_resolution_skips_disabled_engine tests/test_ai_service_core_runtime.py::test_control_plane_rule_ignores_env_api_key_and_uses_saved_key tests/test_ai_service_core_runtime.py::test_engine_runtime_keeps_saved_key_when_env_placeholder_exists tests/test_ai_routing_governance_service.py"` 通过,10 passed。
- 前端 focused:`cd frontend && npx vitest run src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,9 passed。
- 前端类型检查:`cd frontend && npm run typecheck` 通过。
### 2026-04-28 / Capability Slot Runtime Binding / implemented
完成内容:
- 将“能力槽位”从只读诊断卡升级为平台 AI Ops 可配置编排页:供应商与凭据负责维护 runtime inventory,能力槽位负责从已启用供应商连接中选择 primary runtime 与 fallback chain。
- 新增 `integrations(type='ai_capability_slots')` 平台运行时配置,固定写入 `PMFLOW_PLATFORM_RUNTIME_TENANT_ID` 作用域;`low/high` 当前可配置,结构化、长上下文、工具、外部查询、私有、多模态槽继续作为 reserved slots 展示,不冒充已启用能力。
- 新增 `GET /ai-routing/capability-slots` 与 `PUT /ai-routing/capability-slots/{slot_key}`;保存槽位配置会校验运行时存在、已启用、保护槽不可降级,并写入 `operation_logs(entity_type='ai_capability_slot')`。
- `llm_service` 运行时解析已改为优先消费槽位绑定:control-plane rule、函数级 tier override、普通 low/high tier hint 和 low-to-high escalation 都先走 slot primary/fallback;`backend/.control_plane/pmflow-routing-rules.json` 退为 baseline/default rule pack 与冷启动 fallback。
- 前端槽位卡片保留运营态势展示,同时提供“配置运行时 / 测试主运行时 / 保存槽位配置”,配置区用表单表达主运行时、备用链路、失败策略和保护槽降级边界。
- 同步更新 `CLAUDE.md`、`API_CONTRACTS.md`、`CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与 `RUNTIME_GUARDRAILS.md`,明确 `供应商库存 -> 能力槽位绑定 -> 业务场景路由 -> 隐藏 Route Lab 只读诊断` 的产品与运行边界;函数级 override 不再作为运营常规入口暴露。
涉及文件:
- `backend/app/api/ai_routing.py`
- `backend/app/services/ai_routing_governance_service.py`
- `backend/app/services/llm_service/mixin_engine_resolution_core.py`
- `backend/app/services/llm_service/mixin_control_plane_routing.py`
- `backend/app/services/llm_service/mixin_tier_engine_selection.py`
- `backend/app/services/llm_service/mixin_tier_escalation.py`
- `backend/app/services/llm_service/shared_part_01.py`
- `backend/tests/test_ai_routing_governance_service.py`
- `backend/tests/test_ai_service_core_runtime.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`/opt/homebrew/bin/python3.11 -m py_compile backend/app/services/ai_routing_governance_service.py backend/app/api/ai_routing.py backend/app/services/llm_service/mixin_engine_resolution_core.py backend/app/services/llm_service/mixin_control_plane_routing.py backend/app/services/llm_service/mixin_tier_engine_selection.py backend/app/services/llm_service/mixin_tier_escalation.py backend/app/services/llm_service/shared_part_01.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_ai_routing_governance_service.py backend/tests/test_ai_service_core_runtime.py -q` 通过,35 passed。
- 前端 focused:`cd frontend && npm test -- src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,10 passed。
- 前端类型检查:`cd frontend && npm run typecheck` 通过。
### 2026-04-29 / AI Capability Slot Release Control / implemented
完成内容:
- 将能力槽位从 live binding 升级为 release-controlled binding:`integrations(type='ai_capability_slots')` 兼容旧 `{slots}`,并规范为 `active / draft / history / active_version / draft_version`。
- `PUT /ai-routing/capability-slots/{slot_key}/draft` 和兼容 `PUT /ai-routing/capability-slots/{slot_key}` 只保存草稿;新增 `validate / publish / rollback`,发布成功才把 draft 提升为 active 并生成版本,回滚会以历史快照发布为新 active 版本。
- `llm_service` runtime 只消费 active slots;draft 不参与 control-plane rule、函数级 override、low/high tier 解析或 low-to-high escalation。
- 能力槽位页新增发布控制区,展示当前 active version、草稿 dirty 状态、阻塞/警告校验、发布草稿、回滚上一版;槽位卡片同时展示当前生效运行时和草稿配置。
- 发布校验阻止缺失、停用、测试失败运行时、高阶槽绑定 Ollama、保护槽降级等关键风险;重复 fallback 或未测试连接保留 warning。
- 同步更新 `CLAUDE.md`、`API_CONTRACTS.md`、`CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与 `RUNTIME_GUARDRAILS.md`,明确 draft 不生效、publish 才切 active、runtime active-only。
涉及文件:
- `backend/app/api/ai_routing.py`
- `backend/app/services/ai_routing_governance_service.py`
- `backend/app/services/llm_service/mixin_engine_resolution_core.py`
- `backend/app/services/llm_service/mixin_control_plane_routing.py`
- `backend/app/services/llm_service/mixin_tier_engine_selection.py`
- `backend/tests/test_ai_routing_governance_service.py`
- `backend/tests/test_ai_service_core_runtime.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`/opt/homebrew/bin/python3.11 -m py_compile backend/app/api/ai_routing.py backend/app/services/ai_routing_governance_service.py backend/app/services/llm_service/mixin_tier_engine_selection.py backend/app/services/llm_service/mixin_control_plane_routing.py backend/app/services/llm_service/mixin_engine_resolution_core.py backend/app/services/llm_service/mixin_tier_escalation.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_ai_routing_governance_service.py backend/tests/test_ai_service_core_runtime.py -q` 通过,37 passed。
- 前端 focused:`cd frontend && npm test -- src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,11 passed。
- 前端类型检查:`cd frontend && npm run typecheck` 通过。
### 2026-04-29 / AI Slot Capability Matrix / implemented
完成内容:
- 将供应商 runtime 从“连接信息”扩展为“连接信息 + 能力矩阵”:`integrations(type='llm_engine').config.engines[*].capabilities` 保存结构化输出、JSON Schema、工具调用、长上下文、多模态、本地/私有、外部查询、上下文窗口、成本层级和稳定性层级等标签;旧数据在服务层按 provider/model 归一化默认 capabilities,页面不会因历史配置缺字段崩溃。
- 供应商新增/编辑接口和 `/platform/ai-routing-providers` 表单支持保存、展示和编辑能力标签;连接启用、兜底默认、连通测试语义不变。
- `AI Routing Governance Service` 增加 `SLOT_REQUIREMENTS`,能力槽位发布校验会检查 draft 的 primary/fallback 是否满足槽位能力要求:high 禁止 local-only/Ollama,structured 要求 `structured_output + json_schema`,long_context 要求 `max_context_tokens >= 32768`,tool 要求 `tool_calling`。
- `external_query / private / multimodal` 当前仍是 candidate/reserved 槽,只展示 requirements、候选 runtime、能力覆盖和缺口;除非 draft 已显式存在运行时配置,否则不接 runtime 消费,不冒充已启用。
- `/platform/ai-routing-slots` 同时展示 active 当前生效、draft 编辑态、能力覆盖、缺口和发布阻塞项;publish 仍只在 validation 无 critical 时把 draft 提升为 active,runtime 仍只读取 active slots。
- 同步更新 `CLAUDE.md`、`API_CONTRACTS.md`、`CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与 `RUNTIME_GUARDRAILS.md`,明确供应商 capabilities 是槽位发布门禁输入,不是 runtime 直接切换入口。
涉及文件:
- `backend/app/api/llm_engines.py`
- `backend/app/services/llm_service/mixin_engine_admin.py`
- `backend/app/services/ai_routing_governance_service.py`
- `backend/tests/test_ai_routing_governance_service.py`
- `backend/tests/test_ai_service_core_runtime.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/api/aiSteward.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`/opt/homebrew/bin/python3.11 -m py_compile backend/app/api/llm_engines.py backend/app/services/llm_service/mixin_engine_admin.py backend/app/services/ai_routing_governance_service.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_ai_routing_governance_service.py backend/tests/test_ai_service_core_runtime.py -q` 通过,42 passed。
- 前端 focused:`cd frontend && npx vitest run src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,13 passed。
- 前端类型检查:`cd frontend && npx tsc --noEmit` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
### 2026-04-29 / ai-slot-capability-probe-v1 / implemented
完成内容:
- 将供应商 capabilities 从纯人工/默认标签升级为可探测、可审计的 capability evidence:`POST /ai-steward/llm-engines/{engine_id}/capability-probe` 会执行结构化 JSON、工具调用和长上下文 v1 轻量探测,并把结果写回 `integrations(type='llm_engine').config.engines[*].capabilities.capability_probe`。
- `capabilities` 新增规范 `capability_probe={status,last_verified_at,verified_capabilities,evidence,source}`,并继续同步兼容 `capability_source / capability_probe_status / capability_last_verified_at / capability_blocking_reasons / capability_evidence`,不新增 migration;旧 runtime 仍按 provider/model 归一化默认能力和 `capability_probe.status=untested`,但默认/人工标签不会冒充 verified evidence。
- 能力槽位发布门禁在 `structured / tool / long_context` 上区分“缺能力”“缺证据”和“证据过期”:能力本身为 false 或低于阈值返回 `*_capability_missing`,能力标签存在但缺 verified probe evidence 返回 `*_capability_evidence_missing`,证据超过 TTL 返回 `*_capability_evidence_stale`,protected slot 会被阻止 publish;low 缺 probe 只 warning。
- `/platform/ai-routing-providers` 展示 capability source、last verified、probe status、probe error summary 和阻塞原因,并提供“能力探测”操作;`/platform/ai-routing-slots` 的能力覆盖区域展示缺能力、缺证据和证据过期三类缺口。
- 同步更新 `API_CONTRACTS.md`、`CODE_REFERENCE_INDEX.md` 与 `RUNTIME_GUARDRAILS.md`,明确 capability probe 是供应商 evidence 输入,不直接切换 runtime active slots。
涉及文件:
- `backend/app/api/llm_engines.py`
- `backend/app/services/llm_service/mixin_engine_admin.py`
- `backend/app/services/ai_routing_governance_service.py`
- `backend/tests/test_ai_routing_governance_service.py`
- `backend/tests/test_ai_service_core_runtime.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/api/aiSteward.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`/opt/homebrew/bin/python3.11 -m py_compile backend/app/api/llm_engines.py backend/app/services/llm_service/mixin_engine_admin.py backend/app/services/ai_routing_governance_service.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_ai_routing_governance_service.py backend/tests/test_ai_service_core_runtime.py -q` 通过,42 passed。
- 前端 focused:`cd frontend && npx vitest run src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,13 passed。
### 2026-04-29 / ai-slot-structured-runtime-v1 / implemented
完成内容:
- `llm_service.generate_structured_object` 的 DB runtime 路径现在在 `response_contract=structured` 时优先消费已发布 active `structured` capability slot 的 primary runtime + fallback chain。
- active structured runtime 选择会跳过 disabled/deleted runtime 和不满足 `structured_output + json_schema` 的 runtime;primary 调用失败后只会继续尝试同一 active structured slot 的 fallback chain,全部 structured runtime 失败后显式失败,不再绕回模板假成功或无关 low/high 路由。
- 未发布 draft structured slot 只参与平台 AI Ops 校验和发布预览,不影响 runtime;没有 active structured slot 时继续回到既有 low/high/control-plane 链路,保持旧 runtime 兼容。
- active structured slot 已配置但没有可用 runtime 时,项目启动、需求结构化、任务拆解、ChangeSet extraction 等保护结构化函数显式失败;非保护结构化函数可降级到既有路径,但必须带 `slot_degraded=true`。
- routing meta 允许审计 `planned_tier/executed_tier=structured`、`route_source=slot_binding`、`slot_key=structured`、`slot_version`、`slot_runtime_source`、`slot_fallback_index` 与 `slot_degraded`,用于区分结构化槽实际命中、slot fallback 和 degraded 旧路径。
- structured slot publish 仍受 capability evidence gate 保护:缺 `structured_output/json_schema` 能力或缺 verified probe evidence 都会阻止 publish,禁止把人工标签当运行时发布证据。
涉及文件:
- `backend/app/services/llm_service/shared_part_02.py`
- `backend/app/services/llm_service/mixin_tier_engine_selection.py`
- `backend/app/services/llm_service/mixin_engine_resolution_core.py`
- `backend/tests/test_ai_service_core_runtime.py`
- `backend/tests/test_ai_routing_governance_service.py`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`/opt/homebrew/bin/python3.11 -m py_compile backend/app/services/llm_service/shared_part_02.py backend/app/services/llm_service/mixin_tier_engine_selection.py backend/app/services/llm_service/mixin_engine_resolution_core.py backend/app/services/ai_routing_governance_service.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_ai_service_core_runtime.py::test_structured_object_runtime_uses_active_structured_slot backend/tests/test_ai_service_core_runtime.py::test_structured_object_runtime_ignores_unpublished_structured_draft backend/tests/test_ai_routing_governance_service.py::test_reserved_slot_validation_distinguishes_missing_probe_evidence -q` 通过,3 passed。
- 前端类型检查:`cd frontend && npx tsc --noEmit` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
### 2026-04-29 / ai-slot-runtime-activation-v2 / implemented
完成内容:
- 能力槽位从 `low/high` 可配置升级为 `low/high/structured/tool/long_context` 均可配置;这五类槽位都可保存 primary runtime、fallback chain 和 failure policy 草稿。
- `external_query / private / multimodal` 保持不可配置候选槽,只展示候选状态、能力缺口和未来接入边界,不接 `llm_service` runtime。
- publish validation 继续阻止 structured/tool/long_context 的缺能力、缺 verified probe evidence 和证据过期:structured 要求 `structured_output + json_schema`,long_context 要求 `long_context + max_context_tokens >= 32768`,tool 要求 `tool_calling`;low 缺证据只 warning,high 继续禁止 local-only/Ollama。
- 能力槽位矩阵保持表格形态,列出 `槽位 / Active Runtime / Draft Runtime / 能力要求 / 证据状态 / 缺口 / 影响场景 / 操作`;structured/tool/long_context 行显示“配置运行时”。
- 槽位详情弹层区分满足要求的候选 runtime 和不满足要求的 runtime 缺口原因;发布控制区新增发布预览,展示草稿影响场景、保护函数数量、critical blockers 和 warnings。
- runtime 行为保持不变:业务运行时只消费已发布 active slots,draft 修改不会影响线上调用。
涉及文件:
- `backend/app/services/ai_routing_governance_service.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `backend/tests/test_ai_routing_governance_service.py`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`python3.11 -m py_compile backend/app/api/ai_routing.py backend/app/services/ai_routing_governance_service.py backend/app/services/llm_service/mixin_tier_engine_selection.py backend/app/services/llm_service/mixin_engine_resolution_core.py` 通过。
- 后端 focused:`PYTHONPATH=backend python3.11 -m pytest backend/tests/test_ai_routing_governance_service.py backend/tests/test_ai_service_core_runtime.py -q` 通过,59 passed。
- 前端 focused:`cd frontend && npm test -- src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,13 passed。
- 前端类型检查:`cd frontend && npm run typecheck` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
- 后端热重启:`docker compose restart backend && docker compose ps backend`
### 2026-04-29 / ai-slot-publish-observability-v1 / implemented
完成内容:
- `GET /ai-routing/admin-console` 新增 `slot_observability`,按 active `low/high/structured/long_context/tool` 槽位聚合发布后运行表现。
- 观测窗口固定为 24h 与 7d,返回调用量、失败量、失败率、fallback 命中、degraded 调用、平均延迟、估算成本和脱敏失败样本。
- 聚合优先识别 `ai_call_logs` 中的 routing meta 语义:`slot_runtime_source=active_slot / active_slot_degraded`、`slot_fallback_index > 0` 与 `slot_degraded`;兼容旧日志的 `planned_tier / executed_tier / routing_decision` 槽位信号。
- 无日志窗口返回 `status=empty` 与“暂无运行样本”,不伪造成功率、成本或延迟;成本和延迟只显示调用日志估算来源,不包装成供应商精确账单。
- `/platform/ai-routing-slots` 主矩阵新增 7d 失败率和 fallback 命中摘要;槽位详情弹层新增“运行观测”区,展示 24h/7d 指标、active/degraded/fallback 样本和数据来源。
- 不改变 slot publish/rollback 语义,不改变 runtime 路由决策。
涉及文件:
- `backend/app/services/ai_routing_governance_service.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `backend/tests/test_ai_routing_governance_service.py`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_ai_routing_governance_service.py -q` 通过,19 passed。
- 前端 focused:`cd frontend && npm test -- src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,13 passed。
### 2026-04-29 / ai-slot-recommendation-v1 / implemented
完成内容:
- `GET /ai-routing/admin-console` 新增 `slot_recommendations`,基于能力证据、候选 runtime 与 24h/7d 运行观测生成确定性运营建议。
- 建议规则不调用 LLM,也不自动修改 draft、不自动 publish:缺 verified evidence 建议运行 capability probe,证据过期建议重新 probe,7d failure/fallback/degraded 异常建议补 fallback、评估 fallback 升 primary、修复 active slot 或回滚。
- low 槽在成本或延迟异常且存在候选 runtime 时给出低成本/低延迟切换建议;structured/tool/long_context 没有候选 runtime 时提示回供应商页补能力、补凭证或接入新 runtime。
- 每条建议返回 `severity / slot_key / reason / evidence_summary / suggested_action`,可选 `target_engine_id`;证据不足时返回空数组,前端展示“暂无建议”,不编造优化动作。
- `/platform/ai-routing-slots` 顶部新增“运营建议”,槽位详情弹层同步展示该 slot 的建议;按钮只跳转到槽位详情或供应商页,不触发发布。
涉及文件:
- `backend/app/services/ai_routing_governance_service.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `backend/tests/test_ai_routing_governance_service.py`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
### 2026-04-29 / ai-slot-external-query-runtime-v1 / implemented
完成内容:
- `external_query` 从候选槽升级为正式可配置槽位,但绑定对象不是普通 LLM engine,而是 external provider registry 的受控外部查询执行链。
- external_query draft 归一化保存 `primary_provider_id / fallback_provider_ids / verifier_required=true / source_filtering_required=true / failure_policy=explicit_fail`;为兼容现有 API request,前端仍通过现有 `primary_engine_id/fallback_engine_ids` 字段提交 provider id,后端在 service 层归一化。
- 发布校验 fail-closed:至少一个 external provider 可用,MCP adapter 或 bounded live search fallback 至少一个可用,verifier 可用,source filtering 必须 fail-closed,failure policy 必须 explicit_fail;不满足时返回 critical blocker。
- AdaptiveRAG 外部查询入口只在 `route_mode=external` 或等价 external source policy 后读取 active external_query slot;internal query 和未发布 draft 不消费该槽。active slot 执行失败时返回 verifier/freshness guard 元信息,不回退普通 LLM 编造外部事实。
- 能力槽位页将 external_query 行展示为“配置外部链”,详情弹层展示 provider registry、MCP adapter、bounded live search fallback、verifier 和 source filtering 状态,并可保存 provider chain 草稿。
涉及文件:
- `backend/app/services/ai_routing_governance_service.py`
- `backend/app/services/external_query_service/registry.py`
- `backend/app/services/adaptive_rag_service/mixin_answer_retrieval.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `backend/tests/test_mcp_external_query_bridge.py`
- `backend/tests/test_external_query_planner.py`
- `backend/tests/test_adaptive_rag_mainline_contract.py`
- `backend/tests/test_ai_routing_governance_service.py`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
### 2026-04-29 / ai-slot-long-tool-runtime-v1 / implemented
完成内容:
- `llm_service` 在显式长上下文调用中接入已发布 active `long_context` capability slot:只有 `routing_meta.slot_key/planned_tier/tier_alias=long_context` 才会消费该槽,普通调用和 draft 不生效。
- `llm_service` 在显式工具调用 / MCP execution planning 中接入已发布 active `tool` capability slot:只有 `routing_meta` 显式请求 `tool` 或 `execution_mode=local_planner|local_worker` 才会消费该槽。
- long_context/tool runtime 选择会跳过 disabled/deleted runtime 和能力不足 runtime:长上下文要求 `long_context + max_context_tokens >= 32768`,工具槽要求 `tool_calling`。
- active long_context/tool slot 已配置但没有可用 runtime 时显式失败;没有 active slot 时继续走既有 low/high/control-plane 路径。`external_query / private / multimodal` 保持候选槽,不接 `llm_service` runtime。
- publish gate 继续要求 tool/long_context 的 verified probe evidence,缺证据不能 publish。
涉及文件:
- `backend/app/services/llm_service/mixin_engine_resolution_core.py`
- `backend/app/services/llm_service/mixin_tier_engine_selection.py`
- `backend/tests/test_ai_service_core_runtime.py`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`python3.11 -m py_compile backend/app/services/llm_service/mixin_engine_resolution_core.py backend/app/services/llm_service/mixin_tier_engine_selection.py backend/app/services/llm_service/shared_part_02.py backend/app/services/ai_routing_governance_service.py` 通过。
- 后端 focused:`PYTHONPATH=backend python3.11 -m pytest backend/tests/test_ai_service_core_runtime.py backend/tests/test_ai_routing_governance_service.py -q` 通过,58 passed。
- 后端热重启:`docker compose restart backend && docker compose ps backend`
### 2026-04-29 / ai-scene-contract-runtime-v1 / implemented
完成内容:
- 将业务场景合同从前端展示映射升级为后端只读 registry:新增 `backend/app/services/ai_routing_scene_contracts.py`,`GET /ai-routing/admin-console` 的 `scene_routes[]` 与 `scene_slot_matrix[]` 注入 `scene_contract`。
- `scene_slot_matrix[]` 新增 `scene_health` 与 `release_gate`:按 active runtime、能力缺口、证据状态、保护场景、7d 失败样本和 draft 影响计算健康状态、发布阻塞原因和建议动作;candidate 场景不参与 protected release block。
- 扩展 candidate 场景合同:`release_review / retrospective_summary / change_review / project_memory_writeback / mcp_execution_planning / contract_sync` 只展示业务合同和预期槽位,不改 runtime、不强行接槽位。
- `/platform/ai-routing-scenes` 优先消费后端 `scene_contract`,`sceneContracts.ts` 仅作为 fallback;页面新增场景健康、发布门禁、候选生命周期展示和健康度筛选。
- 修复动作完成 deep-link 闭环:业务场景路由可跳到 `/platform/ai-routing-slots?slot=...&scene=...`、`/platform/ai-routing-providers?scene=...&capability=...`、`/platform/ai-routing-failures?scene=...`,目标页自动聚焦 slot / capability / scene failure samples。
- `recent_failures[]` 增加 `scene_key / scene_label`,供失败诊断按业务场景过滤;仍不展示原始错误、prompt 或函数级细节。
涉及文件:
- `backend/app/services/ai_routing_scene_contracts.py`
- `backend/app/services/ai_routing_governance_service.py`
- `backend/tests/test_ai_routing_governance_service.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/pages/ai-routing/sceneContracts.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`python3 -m py_compile backend/app/services/ai_routing_scene_contracts.py backend/app/services/ai_routing_governance_service.py`
- 后端 focused:`cd backend && python -m pytest tests/test_ai_routing_governance_service.py`
- 前端 focused:`cd frontend && npm run test -- src/pages/ai-routing/AIRoutingPages.test.tsx`
- 前端类型检查:`cd frontend && npm run typecheck`
- 前端构建:`cd frontend && npm run build`
### 2026-04-29 / ai-scene-contract-impact-console-v2 / implemented
完成内容:
- `/platform/ai-routing-scenes` 从 scene-slot matrix v1 升级为 Scene Contract & Impact Console,只读展示业务目标、输入对象、输出合同、成功标准、失败策略、确认策略、证据策略、active/draft runtime、能力缺口和发布影响。
- 新增 `frontend/src/pages/ai-routing/sceneContracts.ts`,按 `scene_key` 提供确定性业务合同映射,覆盖项目启动、需求结构化、任务拆解、人员匹配、内部问答、外部实时查询、飞书理解和飞书回复;该映射不调用 LLM,不参与 runtime 路由选择,后续可被后端 `scene_contract` 合同替换。
- 业务场景路由新增发布影响预览、搜索、状态筛选、排序和确定性 Action Rail:Active 未绑定指向能力槽位,缺 probe evidence 指向供应商能力探测,缺 capability 指向供应商能力补齐,draft 变更指向槽位发布影响,失败样本指向失败诊断。
- 主矩阵继续禁止展示 `function_name`、规则名和 override 来源;函数级检查仍只进入隐藏 Route Lab。
- 不改后端 runtime 行为,不新增 migration,不修改 control-plane JSON。
涉及文件:
- `frontend/src/pages/ai-routing/sceneContracts.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 前端 focused:`cd frontend && npm run test -- src/pages/ai-routing/AIRoutingPages.test.tsx`
- 前端类型检查:`cd frontend && npm run typecheck`
- 前端构建:`cd frontend && npm run build`
### 2026-04-29 / ai-slot-scene-impact-matrix-v1 / implemented
完成内容:
- `GET /ai-routing/admin-console` 补全 `scene_slot_matrix` 的发布影响字段:`required_slot / active_slot_runtime / draft_slot_runtime / draft_dirty / capability_gap / recent_failure_count`,同时兼容旧的 `current_slot / active_runtime / draft_runtime / recent_failure_rate`。
- `capability_gap` 汇总场景所需 slot 的缺能力、缺 probe evidence、证据过期和阻塞原因,让发布前能区分“缺能力”和“缺证据”对业务场景的影响。
- `/platform/ai-routing-scenes` 矩阵默认展示“场景 / 当前槽位 / Active Runtime / Draft Runtime / 保护等级 / 能力缺口 / 发布影响”,函数名、规则名和 override 来源不在业务场景路由页展示,函数级检查统一进入隐藏 Route Lab。
- `/platform/ai-routing-slots` 的槽位详情弹层新增“影响场景”,直接展示当前 slot 发布会影响哪些 PMFlow 场景及 active/draft runtime 状态。
- 不改 runtime 行为,不新增 migration,不修改 control-plane JSON。
涉及文件:
- `backend/app/services/ai_routing_governance_service.py`
- `backend/tests/test_ai_routing_governance_service.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`python3.11 -m py_compile backend/app/services/ai_routing_governance_service.py`
- 后端 focused:`PYTHONPATH=backend python3.11 -m pytest backend/tests/test_ai_routing_governance_service.py backend/tests/test_ai_service_core_runtime.py -q`
- 前端 focused:`cd frontend && npm test -- src/pages/ai-routing/AIRoutingPages.test.tsx`
- 前端类型检查:`cd frontend && npm run typecheck`
- 前端构建:`cd frontend && npm run build`
- 后端热重启:`docker compose restart backend && docker compose ps backend`
### 2026-04-29 / ai-slot-scene-matrix-v1 / implemented
完成内容:
- `GET /ai-routing/admin-console` 新增/扩展 `scene_slot_matrix`,把 PMFlow 业务场景解释为 `scene -> current slot -> active/draft runtime -> risk -> runtime version`,运营可直接看到一次槽位发布会影响项目启动、需求结构化、任务拆解、人员匹配、问答和飞书场景。
- 矩阵按 active capability slot 版本聚合,同时带 draft 预览:每个场景返回 `scene_key / scene_label / current_slot / required_capabilities / protected / active_runtime / draft_runtime / active_version / recent_failure_rate / impact_summary`,以及能力覆盖、缺能力/缺证据/未发布绑定风险和高级函数列表。
- 默认映射落为 project_launch、requirement_structuring、task_breakdown -> structured,assignee_matching -> high,internal_qa -> low/high mixed,external_query -> external_query candidate,feishu_understanding、feishu_reply -> low。
- `/platform/ai-routing-scenes` 改为默认展示业务场景、当前槽位、必需能力、active/draft runtime、近期失败率、风险和运行版本;函数名、规则名和 override 来源不在业务场景路由页展示,函数级检查统一进入隐藏 Route Lab。
- 函数级模型路由覆盖继续只接受 `low/high` 槽位别名,不开放任意模型名编辑;受保护业务场景不能被保存或展示为降级到不满足能力要求的 slot。
- 同步更新 `API_CONTRACTS.md`、`CODE_REFERENCE_INDEX.md` 与 `RUNTIME_GUARDRAILS.md`,明确 scene-slot matrix 是只读 explainability 层,不直接写 provider、slot 或模型路由。
涉及文件:
- `backend/app/services/ai_routing_governance_service.py`
- `backend/app/api/model_routing.py`
- `backend/app/services/model/model_routing/service.py`
- `backend/tests/test_ai_routing_governance_service.py`
- `backend/tests/test_model_routing_service.py`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/pages/ai-routing/AIRoutingOperationsPages.tsx`
- `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`/opt/homebrew/bin/python3.11 -m py_compile backend/app/services/ai_routing_governance_service.py backend/app/services/model/model_routing/service.py backend/app/api/model_routing.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_ai_routing_governance_service.py backend/tests/test_model_routing_service.py -q` 通过,25 passed。
- 前端 focused:`cd frontend && npx vitest run src/pages/ai-routing/AIRoutingPages.test.tsx` 通过,13 passed。
- 前端类型检查:`cd frontend && npx tsc --noEmit` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
### 2026-04-29 / prompt-asset-center-foundation / implemented
完成内容:
- 新增平台 Prompt 运营中心基础层:`/platform/prompt-assets` 展示 prompt key、业务场景、family、风险、发布策略、默认模板、active release、draft 数、调用点和迁移缺口。
- 后端新增 `PromptAssetService`,聚合 `ai_prompt_registry`、`ai_prompts` 默认 seed 和 `prompt_releases` active/draft 状态;新增 core `GET /prompt-assets` 与 detail 接口,均要求 `platform.ai_routing.manage`。
- `ai_prompt_registry` 扩展 `runtime_source / editable_policy / risk_level`,补齐 catalog 漏项,并登记 runtime guardrail、semantic fact prompt 与本轮梳理出的 inline discovered prompt。`inline_discovered` 当前只代表已形成清单,运行时调用点仍需后续迁移到 release 读取。
- 平台侧新增 `frontend/src/api/promptAssets.ts` 与 `frontend/src/pages/platform/PromptAssetsPage.tsx`,入口挂在 Platform Console “质量与事件层”;客户空间、Space、Project Launch 与项目级 AI 副驾不暴露 prompt body。
- 同步更新 `CLAUDE.md`、`API_CONTRACTS.md`、`CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与 `RUNTIME_GUARDRAILS.md`,明确 Prompt 资产中心是平台控制面,待迁移项不能被表达为已生效配置。
涉及文件:
- `backend/app/config/ai_prompt_registry.py`
- `backend/app/api/prompt_assets_api.py`
- `backend/app/services/prompt_assets_service.py`
- `backend/app/api/ai_steward_api/routes_reply_iteration.py`
- `backend/tests/test_ai_prompt_registry_contract.py`
- `backend/tests/test_prompt_assets_api.py`
- `backend/tests/test_prompt_assets_service.py`
- `frontend/src/api/promptAssets.ts`
- `frontend/src/pages/platform/PromptAssetsPage.tsx`
- `frontend/src/pages/platform/PlatformChrome.tsx`
- `frontend/src/router/index.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`/opt/homebrew/bin/python3.11 -m py_compile backend/app/config/ai_prompt_registry.py backend/app/services/prompt_assets_service.py backend/app/api/prompt_assets_api.py backend/app/api/router.py backend/app/api/ai_steward_api/routes_reply_iteration.py backend/tests/test_prompt_assets_service.py backend/tests/test_prompt_assets_api.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_ai_prompt_registry_contract.py backend/tests/test_prompt_assets_service.py backend/tests/test_prompt_assets_api.py backend/tests/test_reply_iteration_service.py::test_prompt_release_service_prefers_active_release_and_falls_back_on_format_error -q` 通过,9 passed。
- 前端类型检查:`cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
- 后端热重启:`docker compose restart backend` 后 `docker compose ps backend` 为 healthy;未登录 `GET /prompt-assets` 返回 401,确认 core route 已挂载且受鉴权保护。
### 2026-04-29 / prompt-release-console-p1 / implemented
完成内容:
- 将 Prompt 运营中心从只读资产清单推进到 P1 发布控制台:`managed_release` 且已配置化的 prompt 支持创建草稿 release、激活 release、回滚 archived release。
- 后端新增 platform core 写接口:`POST /prompt-assets/{prompt_key}/releases`、`POST /prompt-assets/{prompt_key}/releases/{release_id}/activate`、`POST /prompt-assets/{prompt_key}/releases/{release_id}/rollback`,继续要求 `platform.ai_routing.manage`。
- `PromptAssetService` 增加发布策略校验:`guarded_release` 必须等待 replay/schema/golden case 门禁,`needs_migration` / `inline_discovered` 只读;release 模板不能引入默认模板变量契约之外的新变量。
- 新增 `PromptRuntimeService` 作为运行时读取 active release 的统一薄层,并把 external answer presenter 第一批低风险呈现 prompt 接入该层;active release 格式异常时回退默认模板。
- 前端详情弹层升级为基础信息、模板 Diff、版本历史和运行信息;guarded/待迁移项显示禁用原因,避免被运营误认为可直接上线。
涉及文件:
- `backend/app/api/prompt_assets_api.py`
- `backend/app/schemas/prompt_assets.py`
- `backend/app/services/prompt_assets_service.py`
- `backend/app/services/prompt_release/service.py`
- `backend/app/services/prompt_runtime_service.py`
- `backend/app/services/external_query_service/presenter.py`
- `backend/tests/test_prompt_assets_api.py`
- `backend/tests/test_prompt_assets_service.py`
- `backend/tests/test_prompt_runtime_service.py`
- `frontend/src/api/promptAssets.ts`
- `frontend/src/pages/platform/PromptAssetsPage.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/prompt_assets_api.py backend/app/schemas/prompt_assets.py backend/app/services/prompt_assets_service.py backend/app/services/prompt_release/service.py backend/app/services/prompt_runtime_service.py backend/app/services/external_query_service/presenter.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_prompt_assets_service.py backend/tests/test_prompt_assets_api.py backend/tests/test_prompt_runtime_service.py backend/tests/test_reply_iteration_service.py::test_prompt_release_service_prefers_active_release_and_falls_back_on_format_error -q` 通过,10 passed。
- 前端类型检查:`cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
- 后端热重启:`docker compose restart backend` 后 `docker compose ps backend` 为 healthy;未登录 `GET /prompt-assets` 返回 401,确认 core route 仍受鉴权保护。
- Playwright smoke:使用本地 admin 登录态打开 `/platform/prompt-assets`,点击首行“查看”并切到“模板 Diff”,确认详情弹层标题、草稿创建入口和禁用说明可见,且无页面级 JS 错误或 Dialog 可访问性告警。
### 2026-04-29 / prompt-release-gate-p2 / implemented
完成内容:
- 新增 Prompt Release Gate MVP:`prompt_release_checks` 记录 release 级门禁检查,支持 `variable_contract / schema_smoke / golden_replay` 三类检查。
- 后端新增 platform core 门禁接口:`GET /prompt-assets/{prompt_key}/releases/{release_id}/checks` 与 `POST /prompt-assets/{prompt_key}/releases/{release_id}/checks/run`,继续要求 `platform.ai_routing.manage`。
- 调整发布边界:`guarded_release` 现在可创建候选 release,但激活必须通过门禁;当前 `golden_replay` 无样本时返回 `skipped` 且 blocking,禁止伪造成通过。`needs_migration` / `inline_discovered` 仍只读。
- `PromptReleaseService.activate_release` 增加 guarded gate 兜底拦截,避免绕过 `PromptAssetService` 直接激活受保护 prompt。
- 前端 Prompt 运营中心详情弹层新增“发布门禁”页签,版本历史显示门禁状态,可运行检查;guarded release 未通过门禁时激活/回滚按钮保持禁用并展示阻塞原因。
- 本地开发数据库已通过 Alembic 升级到 `20260429_add_prompt_release_checks`。
涉及文件:
- `backend/alembic/versions/20260429_add_prompt_release_checks.py`
- `backend/app/models/reply_iteration.py`
- `backend/app/models/__init__.py`
- `backend/app/api/prompt_assets_api.py`
- `backend/app/schemas/prompt_assets.py`
- `backend/app/services/prompt_assets_service.py`
- `backend/app/services/prompt_release/service.py`
- `backend/tests/test_prompt_assets_api.py`
- `backend/tests/test_prompt_assets_service.py`
- `frontend/src/api/promptAssets.ts`
- `frontend/src/pages/platform/PromptAssetsPage.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/api/prompt_assets_api.py backend/app/schemas/prompt_assets.py backend/app/services/prompt_assets_service.py backend/app/services/prompt_release/service.py backend/app/services/prompt_runtime_service.py backend/app/models/reply_iteration.py backend/alembic/versions/20260429_add_prompt_release_checks.py backend/tests/test_prompt_assets_api.py backend/tests/test_prompt_assets_service.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_prompt_assets_service.py backend/tests/test_prompt_assets_api.py backend/tests/test_prompt_runtime_service.py backend/tests/test_reply_iteration_service.py::test_prompt_release_service_prefers_active_release_and_falls_back_on_format_error -q` 通过,12 passed。
- Alembic:`docker compose exec -T backend alembic upgrade head` 通过;`alembic current` 返回 `20260429_add_prompt_release_checks (head)`。
- 前端类型检查:`cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
- 后端热重启:`docker compose restart backend` 后 `docker compose ps backend` 为 healthy;未登录 `GET /prompt-assets` 返回 401。
- Playwright smoke:使用本地 admin 登录态打开 `/platform/prompt-assets`,点击首行“查看”并切到“发布门禁”,确认门禁页签可见且无页面级 JS 错误。
### 2026-04-29 / prompt-quality-linkage-p3 / implemented
完成内容:
- 将 Prompt 运营中心推进到质量归因与 golden case 基础层:`ai_call_logs` 新增 `prompt_key / prompt_release_id / prompt_source`,AI 调用审计支持按 prompt 维度过滤,详情展示 prompt 版本来源。
- `PromptRuntimeService` 渲染结果返回 `release_id` 和可直接写入 `routing_meta` 的 prompt 归因元数据;已接入的 external answer presenter 会把 prompt_key/release/source 写入 LLM 调用日志。
- 新增 `prompt_golden_cases` 表与 platform core 接口:`GET/POST /prompt-assets/{prompt_key}/golden-cases`、`POST /prompt-assets/{prompt_key}/golden-cases/from-call/{ai_call_log_id}`。
- 新增 `GET /prompt-assets/{prompt_key}/quality-summary`,返回 24h/7d/30d 维度的调用数、失败率、默认回退、active release 调用、成本、延迟、失败样本和 release breakdown。
- Prompt Release Gate 的 `golden_replay` 从固定 no-case 阻塞升级为:无 active golden case 时继续 blocking;有样本时只做确定性契约冒烟并明确 `contract_smoke_no_llm`,不伪造成真实 LLM replay。
- 前端 Prompt 运营中心新增“质量归因”页签,展示 7 天质量摘要、失败样本、active golden cases,可 deep-link 到 AI 调用审计并从失败调用生成 golden case;AI 调用审计新增 prompt_key/source 筛选。
涉及文件:
- `backend/alembic/versions/20260429_add_prompt_quality_linkage.py`
- `backend/app/models/ai_call_log.py`
- `backend/app/models/reply_iteration.py`
- `backend/app/models/__init__.py`
- `backend/app/api/prompt_assets_api.py`
- `backend/app/api/ai_call_traces_api.py`
- `backend/app/schemas/prompt_assets.py`
- `backend/app/services/prompt_assets_service.py`
- `backend/app/services/prompt_runtime_service.py`
- `backend/app/services/prompt_release/service.py`
- `backend/app/services/external_query_service/presenter.py`
- `backend/app/services/ai_call_trace_service.py`
- `backend/app/services/llm_service/shared_part_02.py`
- `backend/app/services/llm_service/mixin_prompt_profile_runtime.py`
- `backend/app/services/llm_service/mixin_generate_db_chat.py`
- `backend/app/services/llm_service/mixin_generate_db_structured.py`
- `backend/tests/test_prompt_assets_api.py`
- `backend/tests/test_prompt_assets_service.py`
- `backend/tests/test_prompt_runtime_service.py`
- `backend/tests/test_ai_call_traces_api.py`
- `frontend/src/api/promptAssets.ts`
- `frontend/src/api/aiCallTraces.ts`
- `frontend/src/pages/platform/PromptAssetsPage.tsx`
- `frontend/src/pages/platform/AICallTracesPage.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile ...` 覆盖本次新增/修改后端文件与测试文件,通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_prompt_assets_service.py backend/tests/test_prompt_assets_api.py backend/tests/test_prompt_runtime_service.py backend/tests/test_ai_call_traces_api.py -q` 通过,14 passed。
- 前端类型检查:`cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
- Alembic:当前环境存在两个并行 head(`20260429_add_ai_call_log_provider_payloads` 与 `20260429_add_prompt_quality_linkage`),`alembic upgrade head` 被 Alembic 拦截;已定向执行 `docker compose exec -T backend alembic upgrade 20260429_add_prompt_quality_linkage` 并通过,`alembic current` 返回本次 head 与另一个并行 head。
- 后端热重启:`docker compose restart backend` 后 `docker compose ps backend` 为 healthy;未登录 `GET /prompt-assets` 返回 401。
- Playwright smoke:使用本地 admin 登录态打开 `/platform/prompt-assets`,点击首行“查看”并切到“质量归因”,确认质量页签可见;打开 `/platform/ai-call-traces?prompt_key=PROMPT_EXTERNAL_DIRECT_FACT_QA&status=failed`,确认 Prompt Key 查询框带入参数且无页面级 JS 错误。
### 2026-04-30 / prompt-replay-review-p4 / implemented
完成内容:
- 将 Prompt 运营中心从“有 golden case 才放行”推进到真实 release replay run 记录:新增 `prompt_replay_runs` 和 `prompt_replay_case_results`,每次回放有 run 级摘要、样本明细、风险标记和计数。
- 后端新增 platform core 回放接口:`POST /prompt-assets/{prompt_key}/releases/{release_id}/replay-runs`、`GET /prompt-assets/{prompt_key}/releases/{release_id}/replay-runs`、`GET /prompt-assets/{prompt_key}/replay-runs/{run_id}`,继续要求 `platform.ai_routing.manage`。
- `PromptAssetService` 的 guarded release 门禁更新为:无 active golden case 阻塞;有样本但未执行最新 release replay run 仍阻塞;最新 replay run 失败样本数大于 0 时阻塞;当前 replay 只做确定性契约冒烟,不执行真实 LLM。
- 前端 Prompt 运营中心详情弹层新增“回放评审”页签,版本历史可直接运行回放,发布概览展示最新 replay 摘要;AI 调用审计详情可从 prompt-attributed 调用直接生成 Golden case。
- 文档同步了 Prompt 运营中心的新数据表、接口、门禁边界、平台/客户可见边界和当前非 LLM replay 的能力边界。
涉及文件:
- `backend/alembic/versions/20260430_add_prompt_replay_runs.py`
- `backend/app/models/reply_iteration.py`
- `backend/app/models/__init__.py`
- `backend/app/api/prompt_assets_api.py`
- `backend/app/schemas/prompt_assets.py`
- `backend/app/services/prompt_assets_service.py`
- `backend/tests/test_prompt_assets_api.py`
- `backend/tests/test_prompt_assets_service.py`
- `frontend/src/api/promptAssets.ts`
- `frontend/src/pages/platform/PromptAssetsPage.tsx`
- `frontend/src/pages/platform/AICallTracesPage.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m py_compile backend/app/models/reply_iteration.py backend/app/models/__init__.py backend/app/services/prompt_assets_service.py backend/app/api/prompt_assets_api.py backend/app/schemas/prompt_assets.py backend/alembic/versions/20260430_add_prompt_replay_runs.py backend/tests/test_prompt_assets_service.py backend/tests/test_prompt_assets_api.py` 通过。
- 后端 focused:`PYTHONPATH=backend /opt/homebrew/bin/python3.11 -m pytest backend/tests/test_prompt_assets_service.py backend/tests/test_prompt_assets_api.py backend/tests/test_prompt_runtime_service.py backend/tests/test_ai_call_traces_api.py -q` 通过,16 passed。
- 前端类型检查:`cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
- Alembic:当前环境仍有两个并行 head(`20260430_add_prompt_replay_runs` 与 `20260429_add_ai_call_log_provider_payloads`);已定向执行 `docker compose exec -T backend alembic upgrade 20260430_add_prompt_replay_runs` 并通过,`alembic current` 返回这两个 head;`prompt_replay_runs / prompt_replay_case_results` 已存在。
- 后端热重启:`docker compose restart backend` 后 `docker compose ps backend` 为 healthy;未登录 `GET /prompt-assets` 返回 401。
- Playwright smoke:使用本地 admin 登录态打开 `/platform/prompt-assets`,点击首行“查看”并切到“回放评审”,确认回放页签可见且无页面级 JS 错误。
### 2026-04-30 / prompt-evaluation-lab-p5 / implemented
完成内容:
- 将 Prompt 运营中心从“回放记录”推进到 Prompt Evaluation Lab:release replay 支持 `contract_smoke` 与 `llm_compare`,LLM 回放通过 `llm_service` + 显式 `routing_meta` 进入本地路由层,不硬编码 provider/model。
- 新增 Prompt Eval Rubric 配置 `backend/app/config/ai_prompt_eval_rubrics.py`,按 prompt family 与重点 prompt key 提供评估维度,judge 结构化输出 `score / label / decision / reason / risk_flags / dimension_scores`。
- 扩展 `prompt_golden_cases` 为分层样本:`case_type / priority / scenario_key / tags / last_run_status / last_failed_at`;从 AI 调用日志生成样本时自动写入 source、scenario 与 tags。`priority=blocking` 失败阻塞发布,`important/observation` 失败降为 warning 和人工复核。
- 扩展 `prompt_replay_case_results`:记录 baseline/candidate AI call log、judge score/label/reason;回放明细可追溯到真实 AI 调用审计。
- 新增 release watch 摘要接口 `GET /prompt-assets/{prompt_key}/releases/{release_id}/watch-summary`:按 24h/7d 聚合 release 级调用、失败、结构化异常、默认回退和失败样本,并输出 `healthy / watch / needs_review / rollback_suggested` 建议;只建议,不自动回滚。
- 前端回放评审页拆出“契约回放 / LLM 回放”按钮,展示 run mode、judge 评分、judge 理由、关联 call log 与风险标记;发布概览新增 release watch 卡片;Active Golden Cases 展示 priority、case_type、last_run_status、scenario 和 tags。
- 本地开发数据库已通过 Alembic 定向升级到 `20260430_extend_prompt_eval_replay`,当前仍保留另一个既有并行 head `20260429_add_ai_call_log_provider_payloads`。
涉及文件:
- `backend/alembic/versions/20260430_extend_prompt_eval_replay.py`
- `backend/app/config/ai_prompt_eval_rubrics.py`
- `backend/app/models/reply_iteration.py`
- `backend/app/api/prompt_assets_api.py`
- `backend/app/schemas/prompt_assets.py`
- `backend/app/services/prompt_assets_service.py`
- `backend/tests/test_prompt_assets_api.py`
- `backend/tests/test_prompt_assets_service.py`
- `frontend/src/api/promptAssets.ts`
- `frontend/src/pages/platform/PromptAssetsPage.tsx`
- `CLAUDE.md`
- `docs/architecture/API_CONTRACTS.md`
- `docs/architecture/CODE_REFERENCE_INDEX.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- `docs/architecture/RUNTIME_GUARDRAILS.md`
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`
验证:
- 后端编译:`python3.11 -m py_compile backend/app/config/ai_prompt_eval_rubrics.py backend/alembic/versions/20260430_extend_prompt_eval_replay.py backend/app/models/reply_iteration.py backend/app/schemas/prompt_assets.py backend/app/api/prompt_assets_api.py backend/app/services/prompt_assets_service.py backend/tests/test_prompt_assets_api.py backend/tests/test_prompt_assets_service.py` 通过。
- 后端 focused:`DATABASE_URL=postgresql+asyncpg://pmflow:pmflow_pass@127.0.0.1:5435/pmflow PYTHONPATH=backend python3.11 -m pytest backend/tests/test_prompt_assets_service.py backend/tests/test_prompt_assets_api.py backend/tests/test_prompt_runtime_service.py backend/tests/test_ai_call_traces_api.py -q` 通过,19 passed,保留既有 Pydantic deprecation warning。
- 前端类型检查:`cd frontend && npx tsc --noEmit --pretty false --incremental false` 通过。
- 前端构建:`cd frontend && npm run build` 通过。
- Alembic:`docker compose exec -T backend alembic upgrade 20260430_extend_prompt_eval_replay` 通过;`alembic current` 返回 `20260430_extend_prompt_eval_replay (head)` 与 `20260429_add_ai_call_log_provider_payloads (head)`。
- 后端热重启:`docker compose restart backend` 后 `docker compose ps backend` 为 healthy;未登录 `GET /prompt-assets` 返回 401。
- Playwright smoke:使用本地 admin 登录态打开 `/platform/prompt-assets`,点击首行“查看”并切到“回放评审”,本地创建一个草稿 release 验证“契约回放 / LLM 回放”和 release watch 卡片可见;浏览器 console 0 error;截图保存到 `output/playwright/prompt-assets-p5-replay.png`。