3918 lines
265 KiB
Markdown
3918 lines
265 KiB
Markdown
# 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/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. 当前下一步推荐任务
|
||
|
||
当前已完成:
|
||
|
||
**P8:Review Decision Loop 剩余消费面收口。**
|
||
|
||
原因:
|
||
|
||
- Main Flow 已把 `reviewerRouting` 从“只读建议”推进到 `review request -> reviewer decision -> approval audit`,并复用 `PMFlowApproval` 形成审计记录。
|
||
- Space 已把待审/已请求/已决策事项纳入 `/space` 的个人下一步队列,Account 已补 review decision / high-risk approval 的页面内提醒偏好合同。
|
||
- P8 集成仍不新增战略页面,不改 router/nav,不接真实通知中心;继续使用既有 `/change-review / /team-layer / /space / /me` 表面。
|
||
|
||
### 7.1 P8 并行建议
|
||
|
||
P8 可以三条 lane 并行,但共享高冲突文件必须由 Main Flow 或 Shell / Integration 串行处理。
|
||
|
||
#### Main Flow Packet:`main-flow-p8-review-decision-loop`
|
||
|
||
状态:已完成。
|
||
|
||
目标:
|
||
|
||
- 把 reviewerRouting 从“只读建议”推进到“审查决策闭环”。
|
||
- 支持对待审 ChangeSet 请求审查、记录 reviewer decision、形成 `PMFlowApproval` 审计记录。
|
||
- 让 `ChangeReviewPage / TeamLayerPage` 展示审查状态、审查意见、高风险 approval gate 和下一步动作。
|
||
- reviewer decision 只影响审查/approval 状态,不自动 commit ChangeSet。
|
||
- high-risk ChangeItem 必须继续遵守 C2 approval gate。
|
||
|
||
建议写范围:
|
||
|
||
- `backend/app/api/pmflow_os_api/`
|
||
- `backend/app/services/pmflow_change_review_service.py`
|
||
- `backend/app/services/pmflow_os_projection_service.py`
|
||
- `backend/app/schemas/pmflow_os.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`
|
||
- 相关 Main Flow 文档
|
||
|
||
禁止:
|
||
|
||
- 不新增 migration,优先复用 `PMFlowApproval`。
|
||
- 不新增 route/nav。
|
||
- 不改 Space / Account。
|
||
- 不自动 commit ChangeSet。
|
||
- 不接真实邮件、桌面推送或系统通知中心。
|
||
|
||
#### Space Packet:`space-p7-review-attention-queue`
|
||
|
||
状态:已完成。
|
||
|
||
目标:
|
||
|
||
- 把 Team Review 的待审事项接入 `/space` 的“我的下一步”队列。
|
||
- 只读消费 `truth-state.reviewerRouting`;如果 Main Flow P8 已完成,再只读消费 `reviewDecision / approvalState`。
|
||
- 展示“我需要审什么 / 哪些审查卡住了项目”,所有动作仍只跳主流程。
|
||
|
||
建议写范围:
|
||
|
||
- `frontend/src/api/space.ts`
|
||
- `frontend/src/features/personal-space/`
|
||
- `frontend/src/features/personal-space/PersonalSpacePage.test.tsx`
|
||
- Space 相关文档
|
||
|
||
禁止:
|
||
|
||
- 不写 ChangeSet、`PMFlowApproval`、ProgressEvent、ReleaseValidationRun、FeedbackIngest。
|
||
- 不改 PMFlow OS、Account、router 或 bottom nav。
|
||
- 不虚构 reviewer 或待审项。
|
||
|
||
#### Account Settings Packet:`account-p8-review-decision-preference`
|
||
|
||
状态:已完成。
|
||
|
||
目标:
|
||
|
||
- 扩展 Account Settings 的提醒偏好合同,增加 review decision / reviewer request / high-risk approval 相关偏好。
|
||
- 仍然只控制页面内提醒强度,不接真实通知中心。
|
||
- 偏好关闭只能静默强调,不得隐藏真实 reviewerRouting、approval、evidence 或 audit state。
|
||
|
||
建议写范围:
|
||
|
||
- `frontend/src/api/accountSettings.ts`
|
||
- `frontend/src/features/account-settings/AccountSettingsPanel.tsx`
|
||
- `frontend/src/features/account-settings/accountSettings.test.ts`
|
||
- Account 相关文档
|
||
|
||
禁止:
|
||
|
||
- 不改 PMFlow OS、Space、router 或 backend schema。
|
||
- 不把偏好当业务权限。
|
||
|
||
### 7.2 P8 Integration Owner 收口
|
||
|
||
状态:已完成。
|
||
|
||
目标:
|
||
|
||
- 检查 Main Flow / Space / Account 三个 Packet 的 `git diff --name-only` 是否越界。
|
||
- 统一处理共享文档、API 索引和状态台账冲突。
|
||
- 确认 P8 仍不新增战略页面,仍使用既有 `/change-review / /team-layer / /space / /me` 表面。
|
||
- 跑 Main Flow / Space / Account focused tests、全量 typecheck/build,并在后端变更后重启 backend 确认 healthy。
|
||
- 更新 `## 8. 进度台账`、`CODE_REFERENCE_INDEX.md`、`ARCHITECTURE_INVENTORY.md` 与必要的 `CLAUDE.md`。
|
||
|
||
## 8. 进度台账
|
||
|
||
### 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`。
|