PMFlow/docs/architecture/ARCHITECTURE_INVENTORY.md

351 lines
135 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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

# ARCHITECTURE INVENTORY
## 1. 目的
- 本文档承接 PMFlow 的架构库存与关键入口索引。
- `CLAUDE.md` 保留当前架构说明、运行边界和参考模式。
- 本文档记录当前模块分布、重要子包、关键脚本与前端页面分组,后续架构变更统一在此同步。
## 2. 同步规则
- 任何影响目录结构、主入口、模块归属、前后端页面/API 分组、脚本布局的架构变更,都必须同步更新:
- `CLAUDE.md`
- `docs/architecture/ARCHITECTURE_INVENTORY.md`
- API/Schema 契约变更仍需同步:
- `docs/architecture/API_CONTRACTS.md`
- 对应前端 `types/api` 封装
- 路由/函数名/运行时流向变更仍需同步:
- `docs/architecture/DATAFLOW.md`
- `backend/.control_plane/pmflow-routing-rules.json`
## 3. 顶层库存
- `docs/PMFLOW_PRODUCT_BLUEPRINT.md`:PMFlow 产品蓝图真源;锁定“对话驱动的 AI 产品执行操作系统”、`solo-first, team-ready`、项目真相层、ChangeSet 待确认、Execution Bridge 与人机混编团队方向
- `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`:PMFlow 产品推进执行标准;记录当前进度、Phase A-F/P8 推进顺序、单次任务范围、Codex 并行推进协议、进度台账和新线程接续规则;P8 已完成 Review Decision Loop、Space review attention queue、Account review decision preference 与 integration 收口
- `docs/PMFLOW_UI_CONTRACT.md`:PMFlow UI 契约真源;锁定 Logo、浅色白底 + `#2463EB`、移动端固定底部导航、四类视觉语法、核心功能 canonical 契约和当前前端一致性审计
- `docs/architecture/MASTER_CONTRACT.md`:跨栈主契约
- `docs/architecture/CODE_REFERENCE_INDEX.md`:新增代码参考入口与高频代码索引
- `docs/architecture/PMFLOW_OS_PRODUCT_CONTRACT.md`:PMFlow OS 产品合同真源;锁定前端 `ProjectTruthState / ChangeSet / Evidence / Approval / ExecutionContext`、项目级 AI 副驾投影与后端 `truth_nodes / tasks / semantic_facts / ai_project_control / dev_sync` 的复用边界;Phase C1 已实现 review 表和审查 API,Phase C2 backend/frontend 已实现 atomic commit
- `docs/architecture/PMFLOW_AI_MULTI_AGENT_OPERATING_RUNTIME.md`:PMFlow AI Agent OS Runtime 真源;锁定用户侧 PMFlow AI 从 `/ask -> answer` 升级为 `Durable Agent Run -> PMFlowAIOperatingRunService -> OperatingMission -> Specialist Agent Registry -> Work Products -> Agent Council -> Product Object Projection -> Execution Bridge Preparation -> Learning/Next Cycle -> Customer Payload`;`PMFlowAIAgentRunService / GoalFrame / Step Planner / Tool Registry / Evidence Normalizer / Answer Runtime` 只作为 evidence/answer adapter;同时锁定 `/space/pmflow-ai` 工作台、兼容入口和旧链路删除/降级清单。
- `docs/architecture/RUNTIME_GUARDRAILS.md`:运行边界、守门规则与已知运行假设
- `docs/architecture/API_CONTRACTS.md`:接口/Schema 契约
- `docs/architecture/DATAFLOW.md`:主链与数据流说明
- `docs/architecture/TASK_BRIEF_TEMPLATE.md`:并行安全任务包模板;用于声明 Packet 的 `base_ref / read_scope / write_scope / forbidden_paths / shared_files / verification / docs_to_sync`
- `docs/superpowers/plans/`:实现计划
- `docs/superpowers/specs/`:需求/方案规格
- `docs/task_briefs/`:任务包产物与验收截图
## 4. 后端库存
### 4.1 API 路由分组
- `backend/app/api/ai_steward_api/`
- `backend/app/api/ai_pmo_api/`
- `backend/app/api/feishu_api/`
- `backend/app/api/rag_api/`
- `backend/app/api/sstc_api/`
- `backend/app/api/pmflow_launch_api/`
- `backend/app/api/space_api/`
- `backend/app/api/pmflow_os_api/`
- `backend/app/api/signals_api/`
- `backend/app/api/signal_sources_api/`
- `backend/app/api/semantic_facts_api/`
- `backend/app/api/skill_tags_api/`
- `backend/app/api/ai_logs_api/`
### 4.2 AI PMO 与语义主链
- `backend/app/services/ai_pmo/ai_pmo_kernel/`
- `backend/app/services/ai_pmo/ai_pmo_kernel_ingress_flow/`
- `backend/app/services/ai_pmo/project_operating_context_builder.py`
- `backend/app/services/ai_pmo/ai_pmo_typed_executor_execute/`
- `backend/app/services/ai_pmo/ai_pmo_typed_executor_discovery/`
- `backend/app/services/ai_pmo/semantic_context/`
- `backend/app/services/ai_pmo/workflow_semantic_planner/`
- `backend/app/services/ai_pmo/draft_confirm_handler.py`
### 4.3 问答、模型与生成
- `backend/app/services/pmflow_ai_turn_runtime_service.py`
- `backend/app/services/pmflow_ai_turn_object_ledger.py`
- `backend/app/services/pmflow_ai_answer_renderer_registry.py`
- `backend/app/services/pmflow_ai_answer_verifier_registry.py`
- `backend/app/services/pmflow_ai_evidence_tool_registry.py`
- `backend/app/services/pmflow_ai_evidence_absorber.py`
- `backend/app/services/pmflow_ai_evidence_authority.py`
- `backend/app/services/pmflow_ai_static_contract_registry.py`
- `backend/app/services/pmflow_ai_project_execution_observation.py`
- `backend/app/schemas/project_operating_evidence.py`
- `backend/app/services/pmflow_ai_evidence_coverage_gate.py`
- `backend/app/services/space_runtime_context_builder.py`
- `backend/app/services/customer_answer_presentation_service.py`
- `backend/app/services/adaptive_rag_service/`
- `backend/app/services/adaptive_rag_service/internal_query_context.py`
- `backend/app/services/adaptive_rag_service/mixin_project_fit_brief.py`
- `backend/app/services/adaptive_rag_service/mixin_query_route_gateway.py`
- `backend/app/services/adaptive_rag_service/mixin_query_route_governance.py`
- `backend/app/schemas/project_operating_context.py`
- `backend/app/services/external_query_service/`
- `backend/app/services/semantic_fact_service/`
- `backend/app/services/semantic_fact_service/hooks.py`
- `backend/app/services/llm_service/`
- `backend/app/services/ai_steward_service/`
- `backend/app/services/feedback_center/`
- `backend/app/services/task_brief_service.py`
- `backend/app/config/ai_prompts.py`
- `backend/app/config/ai_prompts_catalog/`
- `backend/app/config/ai_prompt_registry.py`
- `backend/app/services/prompt_assets_service.py`
- `backend/app/services/prompt_runtime_service.py`
- `backend/app/services/model/model_routing/service.py`
- `backend/app/services/model/model_config.py`
### 4.4 集成、信号与运行时
- `backend/app/services/integrations/feishu_integration_service/`
- `backend/app/services/integrations/feishu_outbox/service.py`
- `backend/app/services/integrations/feishu_signal_pipeline/`
- `backend/app/services/signal/signal_capture_service/`
- `backend/app/services/signal/signal_source_orchestration/`
- `backend/app/services/signal/signal_source_repair/`
- `backend/app/services/signal/signal_planner/`
- `backend/app/services/signal/draft_generator_service.py`
- `backend/app/core/startup/`
- `backend/app/utils/thread_context.py`
- `backend/app/utils/timezone.py`
- `backend/app/utils/audited_write.py`
- `backend/alembic/versions/`
- `backend/alembic/versions/20260429_rename_glm_provider_to_dashscope.py` 是供应商编码迁移:把历史 `integrations.config` 与 `ai_call_logs.routing_meta/provider` 中的旧内部 provider code `glm` 迁移为配置化 `dashscope`;后续不得恢复 `glm` provider alias,`glm-5` 只可作为模型名出现。
- `backend/app/main.py` 现已把模型连通性探测、飞书长连接、World Model 预热、调度器与后台队列消费收口为显式环境开关;开发环境可直接通过 `STARTUP_*` / `FEISHU_LONG_CONNECTION_ENABLED` 关闭重型副作用,避免热重载每次都付全量启动成本。
- `backend/app/api/router.py` 现改为按模块路径动态注册路由;默认保持 `full`,并支持通过 `API_ROUTE_PROFILE` 与 `API_OPTIONAL_ROUTE_GROUPS` 在开发场景下裁掉重型 optional route group,减少 eager import 开销。
- `backend/app/api/space_api/` + `backend/app/services/space_saved_idea_service.py` + `backend/app/models/saved_idea.py` 是 Personal Space 暂存想法闭环;`saved_ideas` 作为 pre-project idea seed 保存原始输入、来源、准备度、缺失问题、状态、结构化 enrichment 元数据和 Project Launch draft 关联。创建与编辑原始输入时会尝试 `space_saved_idea_enrichment_v1` 结构化判断目标用户、问题、价值假设、验证信号和补充问题,prompt key 为 `PROMPT_SAVED_IDEA_ENRICHMENT`,运行时经 `PromptRuntimeService` 读取平台 active release 并记录 prompt 归因;问候/测试/无实质想法输入必须判为信息不足与 0 准备度,AI 失败时显式保存 `ai_failed/system_baseline`,不冒充 AI 成功。该链路允许创建、列表、更新、归档和 promote 到 Project Launch 草案,但不写 Project Memory、ChangeSet、执行事件或发布对象。
- `backend/app/services/project_copilot_service.py` 是项目级 AI 副驾 truth-bound 服务;入口在 `backend/app/api/pmflow_os_api/` 的 `POST /pmflow-os/projects/{project_id}/project-copilot/ask`,schema 在 `backend/app/schemas/pmflow_os.py`。服务按项目成员边界读取 PMFlow OS `truth-state` 与 `execution-summary`,解析当前 `surface + object_anchor`,返回服务端权威 `project_copilot_context_packet.v1`、`answer_canvas`、客户对象锚点和过程包。当前实现是 deterministic renderer,`model_calls=0`,不写 thread message、不触发 extraction、不 commit ChangeSet、不写 Project Memory、不执行命令、不发布。
- AI-Dual-04 后,`space_operating_packet.v1` 和 `project_copilot_context_packet.v1` 都带 `automation_policy(policy_version=ai_dual_04_low_risk_proactive.v1, mode=suggest_only)` 与 `proactive_suggestions[]`。这些 proactive suggestions 只用于主动排序注意力、准备跳转、准备审查说明或执行上下文预览,并且每条都带 `requires_user_confirm=true`;自动创建项目、写 Project Memory、ChangeSet commit、Execution Bridge handoff、外部命令执行、发布/部署和权限变更仍全部在 forbidden/blocked actions 中。
- 项目级副驾前端通过 `frontend/src/features/pmflow-os/components/ProjectCopilot.tsx` 恢复跨页对象锚点:Space 或项目内链接传入 `changeSetId + itemId / taskId / releaseId / evidenceId` 时,副驾优先绑定对应 ChangeItem、Task、Release 或回流 Evidence,并把该对象写入 `project_copilot_context_packet.v1.object_anchor`;`ChangeReviewPage.tsx` 同步用 `itemId` 默认展开变更项,`ExecutionBridgePage.tsx` 用 `taskId` 默认选中执行任务。该恢复只影响只读上下文和副驾解释,不自动写入、执行、发布或 commit。
- PMFlow AI 当前终局底座以 `PMFLOW_AI_MULTI_AGENT_OPERATING_RUNTIME.md` 为准:`/space/pmflow-ai` 与兼容 `/space/ai-concierge/ask` 都必须进入 `PMFlowAgentRuntimeService.run_space_turn()`;`pmflow_agent_runs / steps / observations / artifacts / verifications / memories` 是用户侧真源;旧 `/ask -> answer`、单 agent 万能顾问、answer shape 主控、关键词/枚举场景分流和 presentation 层业务补戏只能作为兼容/历史能力,不能再作为新能力扩展方向。
### 4.5 Mounted Runtime / 训练相关
- `backend/app/models/reply_iteration.py`
- `backend/app/models/training_pipeline.py`
- `backend/app/models/mounted_ai_runtime.py`
- `backend/app/models/query_route_memory.py`
- `backend/app/models/semantic_fact.py`
- `backend/app/models/semantic_fact_extraction_run.py`
- `backend/app/models/pmflow_launch.py`
- `backend/app/models/saved_idea.py`
- `backend/app/models/pmflow_change_review.py`
- `backend/app/api/ai_steward_api/routes_reply_iteration.py`
- `backend/app/api/ai_steward_api/routes_training_pipeline.py`
- `backend/app/api/ai_steward_api/routes_mounted_ai.py`
### 4.6 结构归并结果
- `backend/app/services/` 根目录已目录化收敛,新增服务优先进入对应子包。
- API canonical 入口优先使用 `*_api/` 子包,不再优先引用顶层兼容壳。
- 运行时业务动作归因优先走“对象/上下文绑定 -> `SemanticContextPacket` -> `SemanticDecision` -> gatekeeper”。
- non-plan `query.answer` 现已在 `AdaptiveRAG` 内增加 `Query Route Gateway`:只消费上游单次结构化 `query_profile/source_policy/effective_source_policy` 与显式 hint,结合 `ProjectOperatingContext` 归一化产出 `route_mode / decision_origin / reply_contract / probe_snapshot(contract audit) / execution_recipe`,不再在运行时执行 internal/external probe 或 route memory 强拍板,再进入检索与回答主链。
- PMFlow AI 用户问答主链已进入拆除式 Runtime First Packet 9:`TurnState -> SufficiencyGate -> ActionSelector -> EvidenceTool -> EvidenceAbsorber -> State-based Answer`。`backend/app/schemas/pmflow_ai_turn_runtime.py` 定义 `PMFlowAITurnState / EvidenceGap / RuntimeAction / RuntimeStep / SufficiencyDecision / EvidenceToolResult / EvidenceAbsorptionResult`,`backend/app/services/pmflow_ai_turn_runtime_service.py` 是 Space AI turn 唯一主控,`backend/app/services/pmflow_ai_evidence_tool_registry.py` 是只读工具注册入口,`backend/app/services/pmflow_ai_evidence_absorber.py` 是唯一 evidence 吸收层,`backend/app/services/customer_answer_presentation_service.py` 已降权为 shape-based renderer;`/space/ai-concierge/ask` 只负责加载 context、调用 `run_space_turn()`、持久化和返回。旧 `PMFlowAIConversationOrchestrator / SpaceAIExecutionContract / SpaceAITaskGraphService / pmflow_ai_runtime_kernel / space_project_lookup_service.py / space_ai_general_evidence_synthesis_service.py` 已删除;route 字段仅作为 `route_hypothesis_only` 兼容 payload,不参与 action 选择。每轮最多 3 步,ActionSelector 只按 `selected_frame / operation_gaps / sufficiency / performed_actions` 选择只读 action,工具层只返回事实、来源、置信度、目标相关性和剩余缺口,不生成 implication/judgement;Absorber 统一生成 `fact / source / implication / relevance_to_goal / confidence`、`remaining_gaps` 和 `JudgementState` 后进入 TurnState 和 CustomerEvidencePacket,且 final answer 不再反灌为 evidence finding。`CustomerEvidencePacket.answer_type` 是 runtime display shape,不再是旧场景枚举;Presentation 只表达 `strategic_judgement / status_answer / clarification / execution_guidance / fact_list / composite_answer / general_answer`,不得重判场景。`answer_process_packet.steps` 来自真实 runtime action,QA session response payload 保存 `pmflow_ai_turn_state` snapshot 供 replay。Packet 8 新增 `backend/app/config/pmflow_ai_turn_runtime_golden_cases.py` 与 `backend/app/services/pmflow_ai_turn_runtime_golden_replay.py`,用跨场景行为合同覆盖开放判断、内部状态、项目查找、追问、写入确认、多任务和外部新近证据;Packet 9 将这些主链文件纳入 `scripts/semantic_lint.py` 守门。该架构是后续 PMFlow AI 能力扩展主约束,禁止退回 executor enum、关键词路由、行业专项分支或 analyzer 早返回。
- Packet A 已在 `backend/app/schemas/pmflow_ai_turn_runtime.py` 增加 Observation-driven WorkingState 终局合同:`PMFlowAIGoalFrame / PMFlowAITargetScope / PMFlowAITargetCollection / PMFlowAIObservation / PMFlowAIOperationGap / PMFlowAIStateRevision / PMFlowAIVerificationFailure`,并在 `PMFlowAITurnState` 上沉淀 `candidate_frames / selected_frame / observations / operation_gaps / state_revisions / verification_failures / customer_packet_draft / step_budget`。这批字段用于后续 Packet B-E 把 Space AI 主循环改为持续 probe/read/draft/prepare/verify、Observation 修正状态、验证失败回流 runtime;旧 `decision_type / evidence_needs` 只能作为当前兼容链路输入,不再作为新增能力合同的终局出口。合同回归见 `backend/tests/test_pmflow_ai_working_state_contract.py`。
- Packet 1/2 新增 `backend/app/services/pmflow_ai_turn_contract.py`,把 Turn Runtime 的目标评估输出归一、合同矩阵和冲突校验集中到一层:`PMFlowAIGoalFrame.source_policy` 明确 internal/external/hybrid/none 来源策略,`normalize_turn_hypothesis_contract()` 在 runtime/reviser 入口前修正 `operation_kind / target_scope / answer_shape / operation_gaps.system_action_hint`,`validate_turn_state_contract()` 将不一致写入 `turn_contract_violation` verification failure。旧 `decision_type / evidence_needs` 只在该文件内作为集中兼容输入;`build_initial_turn_state()`、`PMFlowAITurnStateReviser` 和 ActionSelector 不再散落消费旧字段补动作。针对“帮我搜搜 AI 漫剧的行业趋势”这类外部趋势问题,合同会归一为 `external_public + strategic_judgement + freshness_gap -> external_search`,visible project 只能作为上下文,不能抢成内部项目工具。回归见 `backend/tests/test_pmflow_ai_working_state_contract.py`、`backend/tests/test_pmflow_ai_turn_runtime.py` 与 `backend/tests/test_pmflow_ai_action_selector_packet_d.py`。
- Packet X/Y/Z 新增 `backend/app/services/pmflow_ai_evidence_authority.py`,作为 Turn Runtime 的结构化证据权威门禁。它不读自然语言关键词,而是消费 `PMFlowAITurnState.object_state.primary_object`、binding strength、selected frame 和 `structured_evidence.project_operating_evidence_packet(s)`:强绑定项目的状态、进展、推进建议在没有读取匹配项目运行态证据前,必须先执行 `inspect_project_status`,并阻止 `external_search / external_fetch` 抢首步。`pmflow_ai_turn_runtime_service.py` 在 sufficiency、action selection、canonical action hint、action/frame match 和 final verifier 中都接入该门禁;`pmflow_ai_turn_state_reviser.py` 会把 verifier 的 `next_action_hint=inspect_project_status` 回写为 blocking system gap;`pmflow_ai_turn_contract.py` 同步禁止非 canonical hint、`scope_gap` 或自由文本 hint 隐式生成 external action。回归见 `backend/tests/test_pmflow_ai_object_ledger_packet_i.py`。
- Packet AE 将 `backend/app/services/pmflow_ai_evidence_authority.py` 升级为 Source Authority Gate:同一层现在可声明 `authority_domain / required_evidence / forbidden_first_actions / can_answer_without_tool / renderer_key / verifier_policy / process_label`。`explain_assistant` 不再进入项目或外部 evidence probe,而是绑定 `pmflow_assistant_contract + static_product_contract`,候选动作只保留 `synthesize_answer`,最终由 `_render_source_authority_answer_from_turn_state()` 输出 PMFlow AI 身份与能力边界,CustomerEvidencePacket 不再标记“外部证据不足”。`pmflow_ai_turn_contract.py` 同步保护 direct static-contract frame,旧 `external_search` gap 不得把它改写为 `judge_direction`。回归见 `backend/tests/test_pmflow_ai_source_authority_packet_ae.py`。
- Packet AF 新增 `backend/app/services/pmflow_ai_static_contract_registry.py`,把静态产品能力合同从 runtime renderer 抽成注册表。`PMFlowAIStaticContractRegistry.resolve_for_turn_state()` 消费 canonical `selected_frame` 与 `disclosure_state`,当前 `explain_assistant` 解析到 `assistant_identity.v1`;Source Authority 只返回 `contract_key / renderer_key / process_label / forbidden_first_actions`,`_render_source_authority_answer_from_turn_state()`、CustomerEvidencePacket source/limitations/confidence 和 runtime step label 都从合同读取。回归见 `backend/tests/test_pmflow_ai_static_contract_packet_af.py`,覆盖 renderer 不再内联身份回答正文。
- Packet AG 新增 `backend/app/services/pmflow_ai_answer_renderer_registry.py`,把最终表达选择从 `_run_state_answer_synthesis()` 的手写 if 链收口为 renderer candidate registry。Registry 根据 canonical TurnState 输出 `static_contract / collection_snapshot / project_operating_packet / open_judgement / llm_state_compose / safe_fallback` 候选,runtime 只执行候选并保留现有 deterministic renderer 函数。后续新增 renderer 必须登记 registry 并补行为回归,不能直接改主循环堆分支。回归见 `backend/tests/test_pmflow_ai_answer_renderer_packet_ag.py`。
- Packet AH 新增 `backend/app/services/pmflow_ai_answer_verifier_registry.py`,把 final payload 出站校验从 `_verify_runtime_payload()` 的手写 if 链收口为 verifier policy registry。Registry 统一检查 Source Authority required read、static contract payload、项目运行态 coverage、interaction request 权限和 collection answer shape;runtime 只委托 registry。回归见 `backend/tests/test_pmflow_ai_answer_verifier_packet_ah.py`。
- Packet AI/AJ/AK/AL 为用户侧 PMFlow AI 增加信息披露边界主链:`backend/app/schemas/pmflow_ai_turn_runtime.py` 新增 `PMFlowAIDisclosureState`,`_infer_turn_hypothesis()` 输出 `disclosure_policy`,`backend/app/services/pmflow_ai_turn_contract.py` 负责归一为 `public_product_capability / tenant_business_state / external_public / protected_pmflow_internal / platform_admin_debug` 与 `answer / safe_product_boundary / protected_refusal / platform_admin_redirect`;`PMFlowAITurnStateReviser` 把它落入 TurnState。`PMFlowAIStaticContractRegistry` 新增 `protected_internal_refusal.v1`,当 `disclosure_state` 为 protected 时优先于 `assistant_identity.v1`;Source Authority 只允许 `synthesize_answer`,过程 label 为“识别目标:检查 PMFlow AI 信息披露边界”。`PMFlowAIAnswerVerifierRegistry` 新增 `protected_refusal` policy,保护类问题的最终 payload 必须匹配保护拒答合同 source summary 与 Answer Runtime 计划,不能用身份合同、项目证据、外部证据或通用合成替代。回归见 `backend/tests/test_pmflow_ai_disclosure_policy_packet_ai_aj_ak_al.py`。
- Packet AM 为用户侧 PMFlow AI 增加 Answer Runtime 合同:`backend/app/schemas/pmflow_ai_turn_runtime.py` 新增 `PMFlowAIAnswerObjective / PMFlowAIAnswerPlan / PMFlowAIAnswerDraft / PMFlowAIAnswerQualityFinding`,`backend/app/services/pmflow_ai_turn_runtime_service.py::_refresh_answer_runtime_plan` 在 `_run_state_answer_synthesis()` 进入 renderer 前先生成回答目标、回答计划、证据用法、表达边界、一次性追问列表和 draft source。最终 payload 新增 `answer_runtime_packet`,`_compose_state_answer()` 消费 `answer_objective / answer_plan`,让模型先按本轮目标和证据计划回答,而不是继续依赖 renderer 顺序、静态模板或场景关键词。回归见 `backend/tests/test_pmflow_ai_answer_runtime_packet_am.py`。
- Packet AN 将静态合同从“整段终局回答”改成 Answer Runtime 可消费的合同材料:`PMFlowAIStaticContract` 删除 `answer` 文本字段,改为 `required_claims / customer_safe_capabilities`;`_render_source_authority_answer_from_turn_state()` 通过 `answer_objective / answer_plan` materialize 本轮静态合同 draft;`PMFlowAIAnswerVerifierRegistry._verify_static_contract()` 改为校验 `answer_runtime_packet + source_summary + protected disclosure plan`,不再做全文相等校验。回归见 `backend/tests/test_pmflow_ai_answer_runtime_packet_an.py`,并同步更新 AF/AH/AI-AK 回归。
- Packet AO 将 `PMFlowAIAnswerQualityFinding` 从 schema 接成实际出站门禁:`backend/app/services/pmflow_ai_turn_runtime_service.py::_apply_answer_quality_gate` 在 renderer 产出 draft 后、构建 CustomerEvidencePacket 前运行,检查空 draft、内部运行时术语泄漏、answer plan 策略语句回显、静态合同材料缺失,命中时写入 `answer_quality_findings` 并用客户安全 deterministic draft 重写。`answer_runtime_packet.quality_findings` 进入 payload,便于 replay 解释为什么重写。回归见 `backend/tests/test_pmflow_ai_answer_runtime_packet_ao.py`。
- Packet AP 删除旧 `_sanitize_state_answer()` 单点兜底,让 `llm_state_compose` 只返回 draft,所有内部术语泄漏、空 draft、计划回显和材料缺失都统一进入 Answer Quality Gate。Gate 重写后必须二次复检;若复检仍失败,记录 `post_revision_quality_failed` 与 `block_answer_quality` step,并返回客户安全 fail-closed 答案。回归见 `backend/tests/test_pmflow_ai_answer_runtime_packet_ap.py`。
- Packet AQ 将项目运行态 verification 后处理并入 Answer Runtime 出站门禁:`_run_state_answer_synthesis()` 先把 `project_operating_answer_verification.v1` 对正文的约束合入 `draft_with_project_operating_verification`,再执行 `_apply_answer_quality_gate()`,最终 `answer_runtime_packet.draft.answer_text` 对应出站答案内容。`_apply_project_operating_answer_verification_to_answer/packet/canvas` 通过 `_customer_safe_project_operating_text()` 过滤内部运行时术语,防止 verification action、boundary 或 reason 绕过 quality gate 泄漏到正文、CustomerEvidencePacket 或 answer_canvas。回归见 `backend/tests/test_pmflow_ai_answer_runtime_packet_aq.py`。
- Packet AR/AS/AT 将用户侧最终 payload 和历史归档统一收口到 Customer Payload Gate:`backend/app/api/rag_ask_contract.py::sanitize_customer_rag_payload` 移除 runtime/debug/route/trace 顶层包,`_sanitize_customer_display_packet` 递归剥离内部 key,`_customer_tenant_project_context_packet` 把可答/保护范围转成客户可读标签;`backend/app/api/space_api/__init__.py::_persist_space_direct_payload` 使用 sanitized payload 写入 QARecord answer、sources、evidence_pack 与 `routing_snapshot.response_payload`,避免历史详情继续携带 raw `pmflow_ai_turn_state` 或 runtime packet。回归见 `backend/tests/test_pmflow_ai_customer_payload_packets_ar_as_at.py`。
- Packet AU 增加终局表达材料层:`backend/app/schemas/pmflow_ai_turn_runtime.py` 新增 `PMFlowAIClaim / PMFlowAIBoundary / PMFlowAIAttempt / PMFlowAIAnswerIntentPlan / PMFlowAITerminalAnswerState`,并挂入 `PMFlowAITurnState.terminal_answer_state`;`backend/app/services/pmflow_ai_turn_runtime_service.py::_build_terminal_answer_state` 从 TurnState、静态合同、证据、judgement、verification failures 和 gaps 统一构建 claim/boundary/attempt ledgers;`PMFlowAIAnswerVerifierRegistry` 的 failure 现在携带 `internal_diagnostic` 与 `customer_safe_summary/customer_safe_effect`,Reviser 写入 operation gap 时只使用客户安全摘要;`_build_verification_blocked_payload` 改为从 terminal state 生成客户安全 fallback,不再拼 raw verifier reason 或默认项目运行证据不足。`rag_ask_contract.sanitize_customer_rag_payload` 清理 terminal state 内部诊断,Space history 同步保存 sanitized terminal state。回归见 `backend/tests/test_pmflow_ai_terminal_answer_state_packet_au.py`。
- Packet AV 将 verifier recovery 改成 delta + state-delta gate:`PMFlowAIVerificationFailure.verification_delta` 记录 `claim_deltas / boundary_deltas / attempt_delta / retry_would_change_state / customer_safe_effect / internal_diagnostic`;`PMFlowAIAnswerVerifierRegistry._verification_failure` 和 runtime 本地 `_verification_failure` 都会生成该 delta。`PMFlowAITurnRuntimeService._verification_failure_allows_retry` 统一判断是否允许继续重试,`run_space_turn` 在 can-answer、final-answer 和 fallback recovery 三个校验点都遵守该 gate;`PMFlowAITurnStateReviser.revise_from_verification` 只在 retry 会改变状态时创建 system action gap。回归见 `backend/tests/test_pmflow_ai_verification_delta_packet_av.py`。
- Packet AW 将 `PMFlowAIAnswerIntentPlan` 从占位字段升级为终局表达策略层:`backend/app/services/pmflow_ai_turn_runtime_service.py::_plan_terminal_answer_intent` 从 Claim/Boundary Ledger 选择 `lead_claim_id / lead_boundary_id`,并生成 `opening_move / user_value_focus / answer_moves / composition_guidance / anti_template_rules / detail_level / structure_preference`。该层只规划“怎么表达”,不生成最终 answer、不按业务场景或 verifier failure type 选择固定 presenter、不读用户问句关键词做路由;blocked、保护边界、材料稀疏和材料丰富等状态只影响表达策略和反模板约束。回归见 `backend/tests/test_pmflow_ai_answer_intent_planner_packet_aw.py`。
- Packet AX 把旧 `_render_terminal_state_fallback` 的行拼接改为通用自然表达器:`_compose_terminal_customer_answer / _compose_paragraph_terminal_answer / _compose_grouped_terminal_answer` 按 `AnswerIntentPlan` 和 lead claim/boundary 生成客户安全回答,`_critique_terminal_customer_answer / _repair_terminal_customer_answer` 负责通用质量检查与修复;`_evaluate_answer_quality` 会把固定标题模板和重复句纳入 Answer Quality Gate,`_revise_answer_from_quality_findings` 优先用 terminal composer 修复失败 draft。回归见 `backend/tests/test_pmflow_ai_natural_answer_composer_packet_ax.py`。
- Packet AY 继续删除旧 fallback 出口:`_render_state_answer_fallback()` 改为构建 terminal state 后调用 `_render_terminal_state_fallback()`,不再维护独立段落模板;`_render_answer_quality_fail_closed()` 改为每次重建干净 terminal state,避免失败 draft 作为 `answer_draft_claim` 回流,并在最终仍含内部运行时术语时返回短边界句。`_terminal_claims_from_turn_state / _terminal_boundaries_from_turn_state` 同步吸收 judgement 的 direct/opportunity/can_do/mvp/next_actions/risks,使旧 fallback 需要的判断材料也进入统一 ledger。回归见 `backend/tests/test_pmflow_ai_terminal_fallback_unification_packet_ay.py`。
- Packet AZ 收口展示层二次模板化:`backend/app/services/customer_answer_presentation_service.py::_standardize_canvas_direct_answer` 不再把普通长文本改写成 `**结论** / **判断依据**`,只清洗内部词、去来源尾巴、剥离历史固定标题并裁剪;`_render_state_shape_answer` 不再按 answer shape 加“综合判断/可执行建议/依据”等前缀,只返回 facts/fallback 的自然表达。回归见 `backend/tests/test_customer_answer_presentation_golden.py`。
- Packet AA/AB 进一步把 verifier 回流和项目运行态表达收口到主循环:`PMFlowAITurnRuntimeService.run_space_turn()` 的 fallback synthesis 也必须经过 `_verify_runtime_payload()`,失败后若存在可执行 `next_action_hint`,runtime 会先执行该只读 action、重新吸收 observation、再合成并校验;仍失败时返回客户安全 `verification_blocked` payload,而不是输出未经校验的答案。`_render_project_operating_answer_from_turn_state()` 成为强绑定项目 + `ProjectOperatingEvidencePacket` 的 deterministic renderer,直接用项目全流程 facet、safe actions、blocked actions、answer boundaries 和 coverage 输出状态/推进建议,避免通用 LLM 把结构化 packet 淡化成“无法提供/请补充”的模板话。回归见 `backend/tests/test_pmflow_ai_object_ledger_packet_i.py` 与 `backend/tests/test_pmflow_ai_project_execution_packet_kl.py`。
- Packet AC/AD 收口 Space AI 出口完整性:`backend/app/api/rag_ask_contract.py::attach_answer_process_timing` 不再改写 runtime 真实 step 的 `blocking/status/duration_ms`,只补总耗时和缺失 duration;`_customer_source_label` 明确把 `project_status / project_operating / project_execution` 显示为“项目运行态证据”,把 `internal_projects / project_object_resolver` 显示为“项目数据”。出口层只做客户安全展示,不再用过程包或来源标签参与 action 选择、对象绑定或 answer shape 重判。回归见 `backend/tests/test_pmflow_ai_turn_runtime.py` 与 `backend/tests/test_rag_route_contract.py`。
- Packet 3/4 将追问和主交互展示合同收回 Turn Runtime:`PMFlowAITurnRuntimeService.run_space_turn()` 现在通过 `build_turn_presentation_contract_from_runtime_payload()` 返回 `turn_presentation_contract`,Space API 只在缺失时兜底调用同一 runtime helper,不再保留本地 `_turn_presentation_contract_from_runtime`。`backend/app/api/rag_ask_contract.py::ensure_customer_interaction_request()` 已删除从旧 `route_plan / missing_fields / limitations / answer_canvas.next_actions` 反推 `interaction_request` 的逻辑,只规范化 payload 中已经存在的结构化请求;默认 sanitize 也不会再因为 `pmflow_ai_route_plan.needs_clarification=true` 补出追问卡。回归见 `backend/tests/test_pmflow_ai_turn_runtime.py`,覆盖 Space sanitize 不吃旧 route plan、runtime presentation contract 不吃旧 clarification 字段、选择题 interaction 进入 `selection_required`。
- Packet B 新增 `backend/app/services/pmflow_ai_turn_state_reviser.py`,并把 `PMFlowAITurnRuntimeService.run_space_turn()` 接入 `initialize_working_state -> select_next_minimal_action -> observe_payload -> revise_from_observation -> verify_runtime_payload -> revise_from_verification` 的循环骨架。`PMFlowAITurnStateReviser` 负责把旧 hypothesis 兼容成 `candidate_frames`、把 action payload 归一为 `PMFlowAIObservation`、按 `can_answer_operations` 修正 sufficiency/customer packet draft,并把验证失败回流 `state_revisions`;`select_next_minimal_action()` 优先消费 `selected_frame.operation_kind`,旧 candidate action 队列只作为兼容 fallback。Packet B 行为回归见 `backend/tests/test_pmflow_ai_working_loop_packet_b.py`,锁定 collection 目标优先读集合证据、系统缺口不得触发用户追问、observation 命中目标后才允许进入可回答状态。
- Packet C 将 `backend/app/services/pmflow_ai_evidence_tool_registry.py` 的 evidence tool payload 升级为显式 observation tool payload:内部 surface/saved ideas/project/status 工具和外部 evidence 工具都返回 `runtime_observation`,由 `PMFlowAITurnStateReviser` 优先消费;空工具结果只产生 `system_evidence_gap`,不得触发用户追问。`PMFlowAITurnRuntimeService.absorb_evidence()` 不再因为任意 finding/source 直接设置 `can_answer_now`,可回答状态必须来自 observation 命中 `can_answer_operations`、verification 回流或 final answer。Packet C 行为回归见 `backend/tests/test_pmflow_ai_observation_tools_packet_c.py`,锁定 surface collection observation、空 observation 不放行、sufficiency 优先尊重 WorkingState answerability。
- Packet D 删除旧 `evidence_needs -> candidate_actions` 主控构造,`build_initial_turn_state()` 初始化 WorkingState 后由 `refresh_action_state_from_working_state()` 统一生成 action state;`select_next_minimal_action()` 每次选择前都会按 `selected_frame.operation_kind / operation_gaps / object binding / performed_actions` 重建队列并覆盖 stale queue。`evidence_needs` 只保留为初始化 operation gap 的兼容输入,不再直接决定工具队列。Packet D 行为回归见 `backend/tests/test_pmflow_ai_action_selector_packet_d.py`,锁定 stale queue 不夺权、初始 action 派生发生在 WorkingState 初始化之后、legacy route policy 不能把外部方向判断拉回内部项目工具。
- Packet E 将目标评估层主输出升级为 `goal_frames / operation_gaps`:`_infer_turn_hypothesis()` prompt 不再要求模型以 `decision_type / evidence_needs` 为主控输出;`PMFlowAITurnStateReviser` 新增 direct goal frame / operation gap payload 解析,`build_initial_turn_state()` 优先使用 goal frame 的 answer_shape 和 operation gaps,旧 `decision_type / evidence_needs` 只在 direct payload 缺失时 fallback。Packet E 行为回归见 `backend/tests/test_pmflow_ai_goal_frame_packet_e.py`,锁定无 legacy 字段也能派生外部证据动作、direct goal frame 能覆盖冲突旧字段、用户可处理 operation gap 能进入 clarification gate。
- Packet F/G/H 将旧字段残余从真实链路继续外移:`build_initial_turn_state()` 在 direct WorkingState 存在时不再让旧 `evidence_needs` 设置 sufficiency flags,也不让 raw `needs_user_input` 单独生成阻塞追问;`_runtime_actions_from_working_state()` 可消费 `operation_gaps.system_action_hint` 做低风险 probe;`PMFlowAITurnStateReviser` 可根据 collection observation 把 `fact_list` 误判 frame 修正为 `list_collection` 并写入 `customer_packet_draft`;`_render_collection_answer_from_working_state()` 对集合类问题直接渲染对象列表,`_verify_runtime_payload()` 禁止已有可回答 observation 时再显示 `interaction_request`。Packet F/G/H 回归见 `backend/tests/test_pmflow_ai_turn_runtime.py`,覆盖“现在有啥项目”类问题不能被通用补充表单劫持。
- Packet I 新增 `backend/app/services/pmflow_ai_turn_object_ledger.py`,把 Space AI 每轮真实展示、聚焦或读取到的客户安全对象沉淀为 Session Object Ledger,并由 `backend/app/api/space_api/__init__.py` 写入 `qa_session_states.context_capsules` 与 QA `routing_snapshot.response_payload.object_ledger`。`PMFlowAITurnRuntimeService.build_initial_turn_state()` 在下一轮弱指代且目标框架需要单对象 inspection/execution 时,可把 ledger 的 `current_focus_object` 升级为 `binding_strength=session_object_ledger`;ActionSelector 在已绑定对象且存在系统证据缺口时先执行低风险 `inspect_project_status / inspect_internal_projects / inspect_surface_context`,不再把系统缺口文案暴露成用户追问。`PMFlowAIEvidenceToolRegistry` 的 surface observation items 只表示真实项目/暂存想法对象,数量摘要不再混入对象列表。Packet I 回归见 `backend/tests/test_pmflow_ai_object_ledger_packet_i.py`,覆盖项目清单后的“这个项目...”续问归位、系统 probe 优先和 ledger 持久化。
- Packet J 为 Session Object Ledger 增加 topic switch 与目标相关性门禁:`_infer_turn_hypothesis()` 要求 `object_binding_decision`,`_primary_object_from_hypothesis()` 只在目标框架需要单个既有对象且未拒绝旧焦点时才允许 `session_object_ledger` 绑定;`scope_gap` 不再被 ActionSelector 归一成项目状态读取,非单对象 `guide_execution` 不再因为 ledger 存在就读取旧项目。`PMFlowAIEvidenceAbsorber` 在吸收前过滤 off-topic 项目证据,无强项目对象时旧项目 status/surface facts 不进入 `known_facts`。Packet J 回归继续见 `backend/tests/test_pmflow_ai_object_ledger_packet_i.py`;答案出口内部术语清理由 Packet AO/AP 的 Answer Quality Gate 统一负责。
- Packet M/N 强化持续 runtime loop 与线程工作区记忆:`assess_sufficiency()` 在最终合成前会检查未执行的可执行系统 gap,先执行 read/probe 再回答;`_thread_workspace_from_context()` 可从结构化 `thread_workspace_update/object_binding_decision` 创建或延续 `PMFlowAIThreadWorkspace`,合并 `PMFlowAITurnDelta` 的 answers/supplement,并通过 `_workspace_payload_from_turn_state()` 和 `ResearchWorkspace.collected_inputs/pmflow_ai_thread_workspace` 持久化到 `qa_session_states.active_workspace`。Packet M/N 回归见 `backend/tests/test_pmflow_ai_turn_runtime.py`。
- Packet O/P 补齐开放判断出口与批量追问:`_render_open_judgement_answer_from_turn_state()` 在无强项目绑定、允许带假设回答时,直接消费 workspace slot、success criteria 和非阻塞缺口生成客户安全初判,不再因没有 evidence findings 退回“不能判断”;`_build_thread_workspace_clarification_payload()` 与 `_build_generic_clarification_payload()` 会把 workspace pending questions 和 user-actionable gaps 批量组织为 stepper。Packet O/P 回归见 `backend/tests/test_pmflow_ai_turn_runtime.py`。
- Packet K/L/Q/R/S/T 新增 `backend/app/schemas/project_operating_evidence.py`、`backend/app/services/pmflow_ai_project_execution_observation.py` 与 `backend/app/services/pmflow_ai_evidence_coverage_gate.py`,并在 `backend/app/services/pmflow_ai_turn_runtime_service.py` 接入项目推进答案 verification。项目状态工具现在读取 PMFlow OS truth-state / execution-summary 后输出项目阶段、当前执行任务、验收/发布门禁、阻塞项、候选任务和项目记忆摘要,并通过 `structured_evidence.project_operating_evidence_packet(s)` 输出项目全流程 evidence packet,不再把执行态压扁为 `active`;Packet R 后该 packet 由独立 facet readers 读取指挥台、工作台、决策待确认、执行、测试质量、发布增长、团队、记忆、风险和动态,覆盖 `reviewerRouting / feed / testRuns / releaseSignals / recentProgressEvents / recentDeliveries / artifactReview / deliveryArtifacts` 等 PMFlow OS 投影。Packet S 后 `PMFlowAIEvidenceAbsorber` 会把 structured evidence 合并进 `TurnState.evidence_state.structured_evidence`,coverage gate 在 `status_answer / execution_guidance + current_project` 下只读 packet facet coverage profile,不再读中文 finding 文案;覆盖项目阶段、当前执行、任务队列和阻塞/门禁不足时先触发只读 `inspect_project_status`。Packet T 后最终合成会生成 `project_operating_answer_verification.v1`,把 `safe_next_actions`、`blocked_actions`、`missing_or_partial_facets` 同步约束到正文、CustomerEvidencePacket 和 answer_canvas。Packet K/L/Q/R/S/T 回归见 `backend/tests/test_pmflow_ai_project_execution_packet_kl.py`。
- 结构化追问提交在 `backend/app/api/space_api/__init__.py` 只转为 `PMFlowAITurnDelta` 的原始问题、answers 和 supplement;`intent_hint / evidence_mode / primary_subject` 已从 TurnDelta schema 物理移除,且不能在 API、runtime delta 或 evidence tool registry 恢复。不再根据 question_id、按钮文案、中文关键词或选项值推导意图、来源或主题。`backend/app/services/pmflow_ai_turn_runtime_service.py` 的目标评估器负责判断用户目标、对象锚点、`goal_frames / operation_gaps / primary_object / freshness_required`;visible projects 只能进入 context object,不能因为空间里只有一个项目就升级为 primary object。项目查找、MVP、风险、容量、surface 和 external/kernel 只能作为 evidence tool adapter 接入,不能恢复成 `/space/ai-concierge/ask` 的分支主链。
- 用户侧问答展示层由 `backend/app/schemas/customer_answer.py`、`backend/app/schemas/context_workspace.py` 与 `backend/app/services/customer_answer_presentation_service.py` 承接:`CustomerEvidencePacket` 是客户可见 answer composer 的唯一输入合同,`answer_type` 已开放为 runtime display shape;`ResearchWorkspace / ContextCapsule` 负责把“当前项目 + 研究主题 + 候选集合 + 下一步”沉成可续问对象,不再只靠 transcript。Packet 6 后 `/space/ai-concierge/ask` 是薄入口:先调用 `SpaceRuntimeContextBuilder` 重建客户安全空间上下文,再进入 `PMFlowAITurnRuntimeService.run_space_turn()`,随后只做 QA session 持久化、customer sanitize 和返回;不再经过 route planner、surface direct、planner direct、TaskGraph 或 API 层 presentation 分支。Space runtime 的 `interaction_request` 与 `turn_presentation_contract` 来自 TurnState,不再由 `rag_ask_contract.ensure_customer_interaction_request()` / `apply_turn_presentation_contract()` 从旧 route plan、正文、limitations 或 next_actions 反推。Presentation 不再按旧 answer_type 模板作文,Composer/Verifier 只消费 final TurnState/customer-safe packet,不再直接吃 `System Snapshot / User Snapshot / Project database / raw JSON / 字段名`;返回内容包含 `answer_canvas`、`customer_interaction_context_packet`、`research_workspace` 与可带 `duration_ms / total_duration_ms` 的 `answer_process_packet`,用于 Codex 式内容组织、续问对象锚定、workspace 恢复、前端动态过程和耗时归因展示。
- Packet U/V 后,展示层进一步移除伪过程和伪来源:`CustomerAnswerPresentationService.build_answer_process_packet()` 只保留显式 `process_steps/runtime_steps`,不再按 `answer_type` 生成 renderer steps;`rag_ask_contract._build_customer_direct_payload` 不再为 planner/customer policy 直答写固定 steps;Agent OS 工作台只展示 `agent_os_steps`,无来源时保持空来源,禁止补 `PMFlow 上下文` 或 `个人空间`。
- Space AI 追问选项现由 `PROMPT_SPACE_AI_INTERACTION_OPTION_PLANNER` 在开放合成答案之后生成,输入用户原话、customer-safe packet、已生成答案和 fallback interaction request,输出贴合本轮语义的 `questions[].options[]`;这层只做客户可见候选选项规划,不做路由、检索、写入或事实确认。
- `backend/app/services/pmflow_ai_evidence_tool_registry.py` 是 Space AI Evidence Tool 注册层:Packet 5 当前实现 `surface_context_tool / saved_ideas_tool / internal_project_evidence_tool / project_object_resolver_tool / project_status_evidence_tool / external_query_evidence_tool`,只返回 `PMFlowAIEvidenceToolResult` 或 evidence payload,不得直接给用户最终答案,也不得生成 implication/judgement。Packet Q 后 `PMFlowAIEvidenceToolResult.structured_evidence` 可携带客户安全结构化 evidence packet;`project_status_evidence_tool` 内部消费 `pmflow_ai_project_execution_observation.py`,输出 `ProjectOperatingEvidencePacket` 与兼容 findings,项目查找和项目状态旧服务已删除,逻辑收口到 registry 内置只读 adapter;MVP、风险、容量后续也只能通过 registry 被 TurnState action 调用,再由 `PMFlowAIEvidenceAbsorber` 吸收。
- PMFlow AI Agent OS 后,`backend/app/api/space_api/__init__.py` 的 `/space/ai-concierge/ask` 只做兼容转接;新产品入口是 `/space/pmflow-ai` 和 `/space/pmflow-ai/threads*`。前端 `PMFlowAIWorkspace` 展示 thread 列表、连续 transcript 和每条 assistant message 的客户安全 work log / artifacts / actions / confirmations;旧 `SpaceAIConcierge` 浮窗已删除为个人空间入口。
- query semantics 上游真源也已继续收口:`PROMPT_RAG_QUERY_SEMANTICS` + `mixin_core_intent.py` 现在只把 `query_profile(needs_private_context, needs_freshness, confidence)` 与 `BusinessSemanticFrame` 写回运行时,`query_profile.referenced_objects` 已从 production backend 移除,不再参与 route snapshot、session scope continuity 或任何 read-side 分流;`subject_focus` 只作为历史结构化输入兼容字段进入 `shared_utils.py` 的实体归一化,不得重新作为 route/session 二次拍板来源。
- `WorkflowSemanticPlanner` 冷启动 bundle 现已补上四挡 `interaction_boundary` 合同:`decision_schema.py` 定义 `InteractionBoundaryPacket / AnswerControlDecision / SelfReviewResult`,planner 会把显式 `status / recommendation / draft / execute` 边界与识别出的 `workflow_plans` 合成 `answer_control`,并把 `requested_level / forbidden_levels / effective_level / blocked_workflows` 落进 bundle diagnostics。对“只给建议/先别出草稿”这类 recommendation-only 问法,planner 允许识别到底层 `signal_source_flow`,但最终会按 boundary 把 bundle 降回 `query_flow`,避免误滑到 `draft_pending_confirm`;旧的无 boundary bundle 仍走兼容透传,不会压坏既有写链路。
- `AdaptiveRAG` 与 AI PMO 主链里几个最容易回流硬语义的入口也已继续收口:project progress fast answer 只按结构化 `interaction_level / goal_kind / resource_role / expected_answer_shape` 决定是否绕开 fast path;casual chat 直答只消费 `message_intent=casual_chat` 的结构化结果;typed executor 对 `project_lookup` 直答只认结构化 `message_intent=project_lookup(_question) + query_semantics`,不再被 `项目列表/项目清单/项目#123` 这类词面带偏;signal 数量和“先分析再入库”这类分析模式也只读 `requested_count / analysis_mode / operation_intent_contract`,不再从自然语言里额外解析“3个信号/先分析后入库”。
- internal config 这条 read-side 也继续结构化了:`AdaptiveRAGTargetResolutionMixin` 不再把泛化 `resource_role=config` 自动映射成 `config:system`,必须依赖显式 `object_binding` 区分 `config:model_routing` 与 `config:mcp_template_center`;对应的 deep guard 直答也拆成模型路由和 MCP 配置两个子口径。
- 项目化影响判断不再必须依赖外部实时抓取才能保住“直接影响”那一行:`AdaptiveRAGFastAnswerProjectMainMixin` 现在会根据 `goal_kind=impact_judgment / expected_answer_shape=impact_chain` 保留结构化 `external_impact` 渲染,避免 WMS/税控/评论流这类高频影响问法退回普通项目周报。
- `AdaptiveRAG` 的 follow-up clarification 现在也继续往结构化真源收:`mixin_followup_anchor.py` 不再在 runtime 用“第几条/标签名/最近回复 match_text”去消费 `pending_clarification`;`query_route_selection / followup_anchor_selection` 都先经过统一结构化澄清解析,再把选中的 `source_policy_hint / query_semantics_overrides / selected_qa_id` 透回 `mixin_answer_mainline.py`。这样用户说“内部那个 / 第二条”后,主链会带着明确的 route override 或 anchor QA id 继续,不会再把原问题拿回去后靠最近回复词面重猜。
- internal `Operation Contract / Target Resolver` 已按 business-frame-first 收口:`mixin_target_resolution.py` 现在只消费 `goal_kind / target_scope / resource_role / project_binding / object_binding / expected_answer_shape` 来判定 `project / task / signal / config / feature / doc / user` 绑定,不再让 `subject_focus / referenced_objects` 这类 coarse 字段单独拍板内部对象类型。
- internal object/domain clarify 继续往下一层时,当前由 `backend/app/services/adaptive_rag_service/internal_domain_catalog.py` 提供 catalog 真源;catalog 已覆盖 `project / task / signal / config / feature / doc / user` 这批 internal domain。`mixin_target_resolution.py` 会在只确认大域(如 `resource_role=config` 或 `resource_role=doc`)但尚未唯一落到子对象时生成 `candidate_summary`,`mixin_answer_payload.py` / `mixin_answer_precheck.py` / `mixin_followup_anchor.py` 再把它转成 `internal_target_selection` pending clarification,并在 follow-up 后回填 `query_semantics_overrides` 继续主链。
- `AdaptiveRAG` read-side 那批旧 compatibility consumer 也已一起收口:`shared_utils.py` 统一提供 `BusinessSemanticFrame -> structured entity/project binding` 归一化,`mixin_deterministic_query_core.py`、`mixin_fast_answer_project_main.py`、`mixin_fast_answer_semantic_p1.py`、`mixin_deterministic_query_count.py`、`mixin_deterministic_query_list.py`、`mixin_retrieval_router_db.py`、`mixin_deep_guard_answer.py`、`mixin_answer_mainline.py`、`mixin_manifest_feature_p2.py` 现在只看这层结构化结果决定 `project / task / signal / config / feature / doc / user` 的快答、检索、deep guard 与 internal query plan;`subject_focus` 仅在 `shared_utils.py` 作为上游旧结构化输入的实体类型补充,不允许各 consumer 分散读取或恢复 `referenced_objects` 二次业务分流。
- `ProjectOperatingContext` 当前由 `project_operating_context_builder.py` 统一组装:最小范围固定为“当前项目 + 当前仓库摘要 + 页面/线程锚点”;world model 建完后会回填 `resolved_project_id / repo_scope`,再供 `Query Route Gateway`、`mixin_project_fit_brief.py` 与 answer payload 消费。
- `analysis_packet` 现作为单独的 analysis layer 增量接到问答主链:`analysis_packets.py` 定义 `project_fit_analysis / external_impact_analysis / internal_explain_analysis / followup_explain_analysis` 这组 typed packet,`analysis_packet_builder.py` 只消费 `ProjectOperatingContext / ExecutionRecipe / fit_brief / external_recommendation / InternalContextPacket / clarification` 等 runtime truth 组包,不从回答正文反推。当前 richer packet 会把 `current_subject / candidate_position / rejected_position / reason_chain` 这类对象级分析字段显式落盘,避免 presenter 再用泛句补戏;共享 richer project snapshot 由 `analysis_project_snapshot_loader.py` 统一补 `tasks/signals + description/summary + analysis_object_refs`,供 AdaptiveRAG payload 和 Feishu presenter 复用。最新 snapshot loader 已 fail-closed:没有真实结构锚点时,不再从 task/signal 标题描述推 `fit_candidate_* / fit_rejected_* / primary_*` 关系,也不再生成 `task_signal_scores / signal_task_links` 这类 token-overlap 产物;builder 主路径只消费显式 object ref、精确文本绑定和唯一候选这三类非语义结构证据。
- `analysis_packet_builder.py` 里原来那层“工程任务/信号源占位/展示层”词面 second-guess 已继续收掉:generic fallback、direct-match generic 分支和 internal explain target fallback 现在都不再靠 `_looks_like_engineering_task / _looks_like_signal_placeholder / _task_presentation_hint / token-overlap / partial-name match` 去反驳上游对象关系;没有显式 ref 时只能诚实降级,最多允许“唯一候选”这种纯结构兜底。
- internal `query.answer` 的下一阶段基线已经确认:`Query Route Gateway` 之后不再直接靠快答分支拍板,而是统一进入 `Operation Contract -> Target Resolver -> Query DSL Plan -> InternalContextPacket -> 白名单受控执行器 -> semantic facts 优先 -> verifier` 主链;`InternalContextPacket` 由 `backend/app/services/adaptive_rag_service/internal_query_context.py` 定义,并作为 internal executor / verifier / runtime summary 的运行时单一真源;相关设计规格见 `docs/superpowers/specs/2026-04-15-internal-query-dsl-plan-design.md` 与 `docs/superpowers/specs/2026-04-15-semantic-facts-read-model-design.md`。
- internal 主链现已补上 packet 预检:`mixin_answer_mainline.py` 在组完 `InternalContextPacket` 后,会先拦截 `missing packet / missing operation contract / target clarify / missing query plan contract` 这类上下文不完整场景,再决定是否进入 deterministic fast path、internal model-config fast path、provider-neutral project semantic fast path 或 retrieval;`query_semantics` 对 `operation_contract / target_resolution / query_plan` 的镜像也已收口到单点兼容写回。
- external `query.answer` 已完成 second-pass 收口:`Query Route Gateway` 之后统一进入 `backend/app/services/external_query_service/`,按 `ProjectFitBrief -> External Query Planner -> External Query Gateway -> External Provider Registry -> MCP adapter 优先 -> bounded fallback live search -> external answer verifier -> ExternalContextPacket -> ExternalAnswerPresenter` 执行;planner 会显式消费 `fit_brief_summary / project_scope_hint / recommendation_goal / project_object_anchors / signal_source_objectives`,其中 formal object anchors 优先来自 `ProjectFitBrief.signal_source_anchors`,项目任务目标锚点来自 `ProjectFitBrief.signal_source_objectives`,不再拿 feature capability 名称或固定类别模板直接冒充 formal project object;payload 会拆出 `fit_brief / external_recommendation / research_workspace`,AdaptiveRAG external probe、freshness fetch 与 external route retrieval 已接到这条链上,并对 external sources 执行 fail-closed 过滤。当前 planner 还补了 recommendation query seed guard:命中“推荐外部信号源”问法时,会优先把当前项目任务目标和 formal anchor 驱动的 query 排到 `search_queries` 前面,避免 structured planner 用 `industry best practices / external data sources` 这类泛化词覆盖掉更贴当前项目的 seed query;同时 `interaction_level=recommendation` 会从统一语义规划层经 `answer_control/source_policy_hint` 透传到 `ExternalQueryPlan`,recommendation 分支不再由 presenter 本地 cue list 单独拍板。`presenter.py` 使用独立 external-only prompt 家族,并强制区分 `verifier_blocked / no_relevant_results / retrieval_failed / indirect_only`,不再回流 `industry_trend/external_trend` scene prompt;对 recommendation ask,presenter 现在会先生成 `SignalSourceRecommendationPacket(candidates + caveat)`,再渲染成业务中文的 `1/2/3` 候选建议;对竞品/比较类问法,即使 `impact_status=indirect_only`,也会继续保留候选级 `ResearchWorkspace(candidate_set_binding/candidate_items/analysis_dimensions)` 并输出带不确定性标注的 compare,而不是直接短路成“不能判断”。相关设计规格见 `docs/superpowers/specs/2026-04-15-external-query-gateway-design.md`。
- non-plan recommendation -> signal-source write 当前已补齐结构 carry-over:external recommendation 不再只返回文本,`SignalSourceRecommendationPacket` 里的 candidate set 绑定会经 `reply_anchor_qa_context + action_contract` 一路沉到 `signal_source.onboard` 执行结果,并在 follow-up `把推荐的写进系统 / 确认入库` 时由 `mixin_followup_project_signal_resume.py` 重建回 `operation_intent_contract(candidate_set_binding/candidate_refs/project_binding)`。`signal_source.onboard` 直写链会在 signal 已 materialize 且项目关联成功后把业务结果视为 `succeeded`,同时仅通过 `post_process_status / signal_source_workflow.status` 暴露后续 onboarding/manual 状态;`ai_pmo_reply_renderer.py` 也会把批量 signal source 直写回执渲染成自然业务中文,而不是 requirement draft 或 pending-manual 漂移文案。
- QA session detail 持久化现已补齐 `routing_snapshot.response_payload`:`mixin_core_intent.py` 在写 `QARecord` 时会把 `project_operating_context / execution_recipe / fit_brief / external_recommendation / analysis_packet / handoff_mode / can_enter_plan / recommended_next_step` 一并归档,`mixin_qa_session_list_ops_p1.py` 再将其投影给 AI Steward 历史回放,避免即时回答与 session detail 出现两套合同。
- Feishu QA 呈现现与共享 analysis packet 对齐:`mixin_receive_routing.py` 会先基于 `project_operating_context` 读取当前项目实体快照,再调用 `analysis_packet_builder.py` 生成共享 `analysis_packet`,之后才进入“受控改写 -> blocked-entity 校验 -> deterministic fallback”的渠道 presenter。运行时会同时校验 fixed opener、标签摘要、内部 packet 术语(如 `analysis_packet / missing_mapping / next_step / focus_objects / reason_chain`)以及未入选实体泄漏;若任一条件不满足,则 fail-closed 回退到 packet-based deterministic 文本。同时保留 `draft_pending_confirm / requirement_plan_followup / pending_manual` 优先走 action card,避免把飞书回归修成单纯文案 bypass。最新 `qa_direct` 还新增了一层中文化 presentation policy:内部现状问题若原始 answer 泄出 `Project database / signal_total / 当前盘面 / 建议动作 / External Freshness Guard` 这类英文或内部术语,会优先回退成共享 packet 文本,并最多只追加一行中文来源说明;外部信号源 recommendation ask 若已有推荐正文,则优先直出推荐正文,再补同样的中文来源说明;对 sparse project-fit 这类 packet,deterministic fallback 也会转成人话解释,不再原样暴露 packet 缺口字段。
- Feishu `project.create` 预填与 QA fallback 现继续去 lexical 化:project create 相关字段不再由 `_extract_project_scope / _extract_project_intent_fields / _is_contextual_project_request / heuristic_*` 之类 helper 从用户原话里扣词,而统一消费 `_extract_project_prefill()` 的结构化 `suggested_name / suggested_description / suggested_scope`;QA fallback 也不再用 `_pick_feishu_entity_by_keywords` 按“摘要/拉取/推送”等关键词挑实体,改成只按共享 packet/select entity 的结构顺序兜底。
- `analysis_packet_builder.py` 的 sparse project-fit fallback 也往结构化真源继续收:当前如果 `preferred/rejected` 对象缺失,会直接按“结构对象缺失”降级,不再靠“解释层/当前主链”这类占位词表决定 sparse fallback 分支。
- unified handoff 当前补有最小 rollback guard:`shared_utils.py` 提供 env flag 解析,`mixin_query_route_gateway.py` / `mixin_answer_retrieval.py` / `mixin_answer_payload.py` 分别支持独立关闭 `execution_recipe` 增强、`fit_brief + external_recommendation` 构建、以及默认 `offer_after_answer` 呈现,不需要回退 ingress/context 真源。
- `analysis_packet` 当前也带独立 rollout guard:`PMFLOW_ENABLE_ANALYSIS_PACKET_FAMILY=0` 时,AdaptiveRAG payload / session replay / Feishu presenter 会回退到旧 handoff truth + 旧 presenter,避免影响 `project_operating_context / execution_recipe / fit_brief / external_recommendation` 真源。
- `query.answer` 的客户可见回答展示也已确认独立基线:运行时证据必须拆成 `customer_safe` 与 `admin_debug` 双视图,客户侧统一消费中文化 `display_label`,禁止直接暴露 `raw_source_label`、机器来源或内部术语;external answer presenter 的 prompt 输入也必须保持 external-only,仅允许消费经 verifier 通过的外部证据摘要与计划摘要;相关设计规格见 `docs/superpowers/specs/2026-04-15-answer-presentation-policy-design.md`。
- 下一阶段的全量业务结构化基线已确认:在 `InteractionBoundaryPacket / AnswerControlDecision` 之上继续引入 `BusinessSemanticFrame`、`AnswerShapeContract`、`RecommendationCandidateSet`、`ClarificationDelta / CorrectionDelta` 与 `OperationIntentContract`,把 recommendation、clarification/correction、casual chat、non-planmode direct signal-source write 统一收口到同一语义真源;并以 58 条广覆盖业务语义矩阵作为完整回归基线、以 `docs/superpowers/specs/2026-04-20-business-golden20-refresh.md` 里的 20 条当前项目池黄金案例作为日常 P0/P1 spot check 集。
- `semantic_fact_service` 已升级为统一基线:`semantic_facts / semantic_fact_extraction_runs` 读模型、ORM 提交钩子自动收集对象变更并 upsert `ingest_events(channel=semantic_fact_extract)`、统一 worker 抽取/失活,以及 internal query 的 facts-first 主路径。
- semantic facts 自动抽取覆盖 `project / task / signal / document / user / requirement(charter) / release / review` 八类业务对象;manual retry 与 backfill 走同一队列、同一 worker,不再开旁路。
- MCP 模板接入中心已接入 `backend/app/api/mcp_api/` + `backend/app/services/mcp_config/`:租户内统一保存 MCP 模板 catalog、server 配置 bundle、命令预览、validate 结果、runtime probe 与 `pending_local_apply / user_confirmed / not_required` 状态;`backend_direct` 模板既支持远程 `streamable_http`(如 `microsoft_learn`),也支持后端内建 `backend_adapter` runtime(如 `duckduckgo`),本地 `stdio` 模板只输出 Local Bridge/兼容 host 接入说明,服务端不直写客户机器 `~/.codex/config.toml`。
- `query_route_memories` 作为独立路由记忆表,承接 `QARecord` 的 route audit、feedback 回灌和离线评估样本,不复用原 answer-quality 资产表。
- `query_route_memories` 现已补 manager-only 只读治理入口:`backend/app/api/rag_api/routes_route_governance.py` + `mixin_query_route_governance.py` 负责 `/rag/query-route-governance/summary|items|items/{id}`,统一暴露 `reply_contract / probe_snapshot / query_profile / feedback_outcome` 审计快照,但 v1 不做在线自动调路由。
- `backend/tests/test_runtime_structured_semantics_contract.py` 与 `backend/tests/test_feishu_pipeline_queue_contract.py` 共同守门 runtime 结构化语义收口,锁定飞书入口、signal capture、reply/runtime routing 不得回流旧词法拍板 helper。
- `backend/tests/test_external_query_planner.py` 现已补进 external fallback 回归,锁定 planner fallback 只能产出 generic external plan,不得再根据 `weather/news/public_model/...` 之类对象映射在运行时硬分 query_kind。
## 5. 前端库存
### 5.1 页面分组
- `frontend/src/pages/ai-steward/`(legacy redirect / 迁移占位,不再作为产品页入口)
- `frontend/src/pages/scheduler-center/`
- `frontend/src/pages/project-board/`(legacy 项目控制面,用户入口已下线;旧 `/projects/:id/board` 由 router 重定向到 PMFlow OS 主链,待确认后物理删除)
- `frontend/src/pages/projects/`
- `frontend/src/pages/users/`
- `frontend/src/pages/recipes/`
- `frontend/src/pages/feishu-config/`
- `frontend/src/pages/ai-config/`
- `frontend/src/pages/model-routing-config/`(隐藏 Route Lab,只读函数级路由诊断)
- `frontend/src/pages/ai-config/mcp-config/`
- `frontend/src/pages/query-route-governance/`
- `frontend/src/pages/task-brief-center/`
- `frontend/src/pages/task-brief-runs/`
- `frontend/src/pages/task-brief-template/`
- `frontend/src/pages/charter-detail/`
- `frontend/src/pages/contract-sync-board/`
- `frontend/src/pages/dashboard/`
- `frontend/src/pages/knowledge-graph-context-board/`
- `frontend/src/pages/semantic-facts-board/`
- `frontend/src/pages/login/`
- `frontend/public/brand/`(PMFlow Logo / favicon 源资产)
- `frontend/public/avatars/`(PMFlow 系统默认账号头像源资产;当前提供 3 张男性、3 张女性默认头像)
- `frontend/src/components/brand/`
- `frontend/src/components/login/`
- `frontend/src/features/pmflow-os/pages/`
- `frontend/src/features/pmflow-os/components/`(含 `ProjectCopilot.tsx` 项目级 AI 副驾统一入口)
- `frontend/src/features/account-settings/`
- `frontend/src/features/personal-space/components/`
- `frontend/src/pages/skill-tasks/`
- `frontend/src/pages/skills/`
- `frontend/src/pages/user-profile/`
- `frontend/src/pages/user-skills/`
- `frontend/src/pages/workload-detail/`
- `frontend/src/pages/workloads/`
### 5.2 API 与共享模块
- `frontend/src/api/aiPmo.ts`
- `frontend/src/api/aiSteward.ts`
- `frontend/src/components/brand/PMFlowLogo.tsx` 与 `frontend/src/components/brand/PMFlowUserAvatar.tsx`(PMFlow Logo 与本地品牌头像统一入口;应用壳、营销页、登录视觉和 favicon 读取同一组品牌图,账号头像不依赖随机外链服务)
- `frontend/src/components/marketing/`
- `frontend/src/components/login/`
- `frontend/src/components/layout/LazyBoundary.tsx`
- `frontend/src/components/ai-steward/`
- `frontend/src/components/ai-steward/QAConversationStatusBar.tsx`
- `frontend/src/components/ai-steward/QAResponseMetaCard.tsx`
- `frontend/src/components/ai-steward/QAResponseMetaCard.test.tsx`
- AI Steward 问答展示现分两类:`FloatingQAChat.tsx`、`QAConversationStatusBar.tsx`、`QAResponseMetaCard.tsx` 保留为旧浮窗/历史 QA 兼容组件;个人空间 PMFlow AI 产品面由 `frontend/src/features/personal-space/components/PMFlowAIWorkspace.tsx` 承接,调用 `/space/pmflow-ai/threads*` 并展示连续 transcript 与客户安全 work log。当前产品壳不再全局或在 Space 挂载 `FloatingQAChat`/旧聊天气泡。
- 登录页与营销页仍共享 `frontend/src/components/marketing/` 的部分视觉基线;公开登录页现改由 `frontend/src/components/login/` 目录承载,其中 `LoginExperience.tsx` 负责登录壳层、`LoginForm.tsx` 默认承接手机号验证码登录/自注册,用户名密码仅作为兼容入口,`LoginWorkflowVisual.tsx` 负责左侧场景、`loginScene.ts` / `loginMath.ts` 拆出展示配置与路径几何、`login.css` 负责登录页专属样式边界,`frontend/src/pages/login/LoginPage.tsx` 继续负责真实鉴权、错误态和 redirect 提示;未登录访问 `/` 会经 `frontend/src/router/index.tsx` 直接重定向到 `/login`,无显式 `redirect` 的成功登录现在默认进入 `/command-center`。
- 前端主包治理已切到“同步首屏最小集 + route/page-section lazy + 统一身份边界”模式:`frontend/src/router/index.tsx` 保留 `LoginPage / Layout` 这组同步入口,其余后台重页面通过 `React.lazy + Suspense` 懒加载;统一 fallback 在 `frontend/src/components/layout/LazyBoundary.tsx`,统一身份/权限边界在 `frontend/src/auth/RouteBoundary.tsx`。P0 公共壳冻结后,大模块 route 归属为:`/space` 归 Space lane,真实 `/project-launch` 是启动层入口,`/pmflow-os` 与 `/change-review / /structured-extraction / /memory-writeback-result / /execution-bridge / /release-growth` 归 Main Flow lane,`/me` 归 Account Settings lane,`/ai-config` 是客户空间 AI 使用设置,`/platform/*` 是 PMFlow 平台 AI Operations Console;空间管理入口使用 workspace role,平台运营入口使用 `platform_context.capabilities`,后端 JWT/RBAC 仍是最终校验;`/settings` 当前仅为 reserved route、尚未实现,新增必须由 Shell / Integration owner 串行处理。`/ai-steward` 只做 legacy redirect:`tab=create` 迁到 `/project-launch`,`tab=engine` 迁到 `/ai-config`,`tab=feedback-center` 有 `project_id` 时迁到 `/release-growth?projectId=<id>`、否则迁到 `/space`,其它 legacy tab 迁到 `/space`;导航不再暴露该入口。`/command-center` 保留免登录产品预览壳;`/space`、真实 `/project-launch`、主链 standalone 与 `/me` 均需登录;`/project-launch?demo=1` 或 `?dataSource=demo` 是唯一匿名启动台演示入口。`frontend/src/features/personal-space/` 作为登录后的空间层入口,承载继续推进、待我确认、AI 正在推进、暂存想法、草案箱与新建项目入口。`frontend/src/features/project-launch/` 真实模式默认调用 `pmflow-launch` draft/confirm API,创建成功态主动作跳转后端返回的 `/pmflow-os?projectId=<id>`,401/无 token 必须保存 pending input 并提示重新登录,不展示 Axios 原始错误;只有显式 demo 才启用本地 mock 状态机。`frontend/src/features/account-settings/` 作为登录后的 Account Settings 产品域,通过 `/me` 提供个人资料、默认语言、AI 回答深度、证据展示偏好、待确认/执行回写/发布门禁/失败提醒通知偏好和账户操作入口;该域通过 `frontend/src/api/accountSettings.ts` 建立前端合同,有 token 时优先调用已挂入 `backend/app/api/router.py` 的 `backend/app/api/account_settings_api/` `GET /account-settings/me` / `PUT /account-settings/me` 同步当前账号偏好,后端不可用时明确回落本机暂存,不修改 OAuth/JWT/auth core。`frontend/src/features/pmflow-os/` 作为登录后的真实项目产品域,通过 `PMFlowOsProvider` 在应用根部挂载共享 truth store,并提供 `CommandCenter / ChangeReview / WorkGraph / ExecutionBridge / ReleaseGrowth / TeamLayer / ProjectMemory / Account` 主入口;当前 PMFlow OS 页面已切到专属轻壳,桌面端默认隐藏旧 TopBar,并由 `frontend/src/features/pmflow-os/components/PMFlowOsFrame.tsx` 统一承接“左侧稳定导航 + 顶部上下文条 + 中央视图 + 右侧 AI 副驾”的全局骨架,同时承接项目内 `个人空间 / 当前项目名` 面包屑和项目切换器;账号退出登录由 `frontend/src/features/pmflow-os/components/AccountControls.tsx` 统一承接桌面头像下拉、退出确认与移动端 bottom sheet,正式应用壳移动端底部导航统一由 `frontend/src/features/pmflow-os/components/MobileBottomNav.tsx` 承接。
- PMFlow P8 Review Decision Loop 已由 `big-module-integration-p8` 收口:Main Flow `truth-state.reviewerRouting` 与 `POST /pmflow-os/change-sets/{change_set_id}/review-decisions` 是 reviewer decision / approval audit 真源;Space 只读消费为 `/space` 的 `review_attention` 下一步队列;Account 只提供 `getReviewDecisionNotificationPreference` 页面内提醒偏好;P8 未新增 route/nav,未接真实通知中心,不自动 assign reviewer 或 commit ChangeSet。
- `frontend/src/features/personal-space/PersonalSpacePage.tsx` 是空间首页与 PMFlow AI 工作台视图层,`frontend/src/api/space.ts` 是空间工作面只读聚合 API,`frontend/src/api/aiSteward.ts` 提供 `/space/pmflow-ai/threads*` 用户对话 API 和 `/space/pmflow-ai/runs*` 兼容/debug API 封装。空间首页继续展示 nextActionQueue、执行准备度、待确认、发布关注、发布后反馈、下一轮迭代、执行中、暂存想法、草案箱和最近项目;这些 Space 派生项统一携带客户安全 object anchor 并只跳转主流程,不直接写 Project Memory、ChangeSet、execution event 或 release/growth 对象。`/space/pmflow-ai` 是 PMFlow AI 主入口,`PMFlowAIWorkspace` 展示左侧 thread 列表、中间连续 transcript、底部 composer、每条 assistant message 的 work log / artifacts / actions / confirmations;右下角聊天气泡和旧 `SpaceAIConcierge` 浮窗已删除。
- PMFlow AI 前置研究闭环已加硬门禁:`backend/app/services/pmflow_ai_agent_runtime/agent_evidence_quality.py` 是 Source Quality Gate 与 Claim Quality Gate 的共同真源,`agent_evidence_normalizer.py / agent_state_critic.py / agent_answer_runtime.py / pmflow_ai_operating_runtime/run_service.py` 必须共同过滤页面壳、导航、广告/联系片段、HTML entity、链接密集文本、source candidate、generic source wrapper 与 raw page fragment;ResearchNote 阈值和最终答案只能消费 gated claims。`/space/pmflow-ai/threads*` 的 assistant message 同时返回 `work_log / work_log_full / work_log_meta`,前端显示可见/总步骤数并可展开全部客户安全步骤。
- Space PMFlow AI 的用户侧主入口已切到 Thread + durable Agent OS:`backend/app/api/space_api/__init__.py` 的 `/space/pmflow-ai/threads*` 负责用户可见 thread/message,内部每条 assistant turn 调用 `backend/app/services/pmflow_agent_runtime/service.py::PMFlowAgentRuntimeService.run_space_turn()` 先创建 `pmflow_agent_runs`,再默认委托 `backend/app/services/pmflow_ai_operating_runtime/run_service.py::PMFlowAIOperatingRunService.run_turn()` 执行 mission-first operating loop;`PMFlowAIAgentRunService` 只作为 Operating Runtime 的只读交付子循环。子循环由 `agent_goal_frame_runtime.py` 生成 GoalFrame,`agent_step_planner.py` 规划单步,`agent_tool_registry.py` 执行 typed read/probe tool,`agent_evidence_normalizer.py` 把 raw observation 归一成 source_quality、claim/boundary/gap ledger,`agent_state_critic.py` 判断是否继续并声明 retry 是否会改变状态,`agent_answer_runtime.py` 只基于 terminal answer state 和 ledgers 生成客户安全回答;这些节点的 LLM 参数由 `space_pmflow_ai_agent_runtime` Function Runtime Profile 控制。兼容 `/space/ai-concierge/ask` 和 `/space/pmflow-ai/runs*` 不能重新成为产品主控。旧 `backend/app/services/pmflow_agent_runtime/loop.py` 与 `answer.py` 已删除,禁止恢复 WorkspaceBinder/固定 Planner/ExecutorRegistry/AnswerArbitrator 主控。客户 payload 和历史保存必须优先使用 `thread_id / messages / assistant_message(content, work_log, artifacts, actions, confirmations)`。
- 旧 Space AI Concierge / Turn Runtime 证据规划链路保留为兼容资产:`pmflow_ai_turn_runtime_service.py`、`pmflow_ai_evidence_tool_registry.py`、`pmflow_ai_evidence_absorber.py`、`customer_answer_presentation_service.py` 可被 Agent OS tools/renderers 复用,但不得再作为 `/space/pmflow-ai` 主控,也不得让前端回到“普通聊天气泡 + 展开 answer canvas”的旧形态。新增能力优先接入 Agent OS loop。
- Space AI 容量/工作量/人机协作能力只能经 TurnState evidence tool adapter 接入。`SpaceRuntimeContextBuilder` 可提供可见项目和 capacity surface hint;旧 `SpaceCapacityAssessmentService` 直出服务已删除,容量证据目前由 `inspect_surface_context` 读取 `space_capacity_packet.v1` 后以 facts/gaps/sources 输出,由 EvidenceAbsorber 和 State-based Answer 合并。该链路不写 capacity override、不自动派任务、不请求审查、不写 ChangeSet。
- Space AI 项目风险必须通过 `PMFlowAIEvidenceToolRegistry.inspect_project_status` 消费 PMFlow OS truth-state 与 execution-summary 的项目执行态证据;旧 `ProjectRiskAssessmentService` 直出服务已删除。风险 facts、依据和缺口只能作为 tool evidence 进入 EvidenceAbsorber;该链路不写 review decision、不 commit ChangeSet、不发起执行或发布;风险问答不得退回 `surface_direct` 项目概览。
- 项目风险问答范围解析由 TurnState 统一承担:强项目锚点才允许单项目分析;没有强锚点时可把可见项目作为 evidence scope 扫描,但不能把 surface 项目数量或最近项目当作结论。只读风险扫描默认给结果和 scope 说明,不先追问;涉及处理、分派、提交或发布时再进入 confirmation gate。
- 前端主包治理已切到“同步首屏最小集 + route/page-section lazy”模式:`frontend/src/router/index.tsx` 保留 `LoginPage / Layout` 这组同步入口,其余后台重页面通过 `React.lazy + Suspense` 懒加载;统一 fallback 在 `frontend/src/components/layout/LazyBoundary.tsx`。P0 公共壳冻结后,大模块 route 归属为:`/space` 归 Space lane,`/project-launch` 是启动层入口,`/pmflow-os` 与 `/command-center / /change-review / /execution-bridge / /release-growth` 归 Main Flow lane,`/me` 归 Account Settings lane,`/settings` 当前仅为 reserved route、尚未实现,新增必须由 Shell / Integration owner 串行处理。`frontend/src/features/personal-space/` 作为空间层入口,通过登录后的 `/space` 提供空间入口,承载继续推进、待我确认、AI 正在推进、暂存想法、草案箱与新建项目入口。`frontend/src/features/project-launch/` 作为首次进入页 / 新项目启动台产品域,通过登录后的真实 `/project-launch` 提供启动入口(显式 `?demo=1` 或 `?dataSource=demo` 可匿名演示);Phase B 后默认调用真实 `pmflow-launch` draft/confirm API,创建成功态主动作跳转后端返回的 `/pmflow-os?projectId=<id>`,只有显式 `?demo=1` 或 `?dataSource=demo` 才启用本地 mock 状态机。`frontend/src/features/account-settings/` 作为 Account Settings 产品域,通过 `/me` 提供个人资料、默认语言、AI 回答深度、证据展示偏好、待确认/执行回写/发布门禁/失败提醒通知偏好和账户操作入口;该域通过 `frontend/src/api/accountSettings.ts` 建立前端合同,有 token 时优先调用已挂入 `backend/app/api/router.py` 的 `backend/app/api/account_settings_api/` `GET /account-settings/me` / `PUT /account-settings/me` 同步当前账号偏好,后端不可用时明确回落本机暂存,不修改 OAuth/JWT/auth core。`frontend/src/features/pmflow-os/` 作为新产品域,通过 `PMFlowOsProvider` 在应用根部挂载共享 truth store,并提供 `CommandCenter / ChangeReview / WorkGraph / ExecutionBridge / ReleaseGrowth / TeamLayer / ProjectMemory / Account` 主入口;当前 PMFlow OS 页面已切到专属轻壳,桌面端默认隐藏旧 TopBar,并由 `frontend/src/features/pmflow-os/components/PMFlowOsFrame.tsx` 统一承接“左侧稳定导航 + 顶部上下文条 + 中央视图 + 右侧 AI 副驾”的全局骨架,同时承接项目内 `个人空间 / 当前项目名` 面包屑和项目切换器;`ChangeReviewPage.tsx` 现在可以请求审查、通过、要求修改或拒绝当前变更集,并展示审查状态、审查意见与高风险审批门禁;`TeamLayerPage.tsx` 现在消费 `ProjectTruthState.reviewerRouting(status/summary/items)`、`ProjectTruthState.feed` 与 `execution-capabilities`,以 `团队动态 / 决策台 / 角色收件箱 / 智能体工位 / AI 副驾` 组织团队协作态势,展示待审变更责任路由、审查人建议、审查状态、证据数量、执行单元信号和容量调度;动作只跳 `/change-review?projectId=<id>&changeSetId=<id>` 或下方容量区,不自动分派、不自动审查、不写 Project Memory。账号退出登录由 `frontend/src/features/pmflow-os/components/AccountControls.tsx` 统一承接桌面头像下拉、退出确认与移动端 bottom sheet,`frontend/src/features/pmflow-os/pages/AccountPage.tsx` 提供 `/me` 入口并委托 Account Settings 域渲染设置页;正式应用壳移动端底部导航统一由 `frontend/src/features/pmflow-os/components/MobileBottomNav.tsx` 承接,固定为 `空间 / 指挥台 / 待确认 / 动态 / 我的`,其中 `动态` 当前仍是 `/command-center` 占位。`/command-center` 额外提供免登录产品预览壳,`/pmflow-os` 是真实项目上下文 alias。主视觉按 `#2463EB + 白色` 的 Linear-like 高密度原型展开。`UsersPage` 把创建/删除/重置/导入/批量分配对话框拆为按需 chunk,`UserSkillsPage` 与 `WorkloadDetailPage` 的图表也分别拆到了 `frontend/src/pages/user-skills/components/UserSkillsRadarPanel.tsx` 与 `frontend/src/pages/workload-detail/components/WorkloadTrendChart.tsx`。
- `frontend/src/features/personal-space/SpaceCollectionPages.tsx` 承接空间首页红框区块的二级页面:`/space/ideas` 是暂存想法收集箱,支持状态筛选、搜索、补充、归档与转 Project Launch 草案;`/space/drafts` 是草案箱 / 待确认事项页,支持按待确认、信息不足、冲突、已确认、挂起筛选并回主流程确认。空间首页只预览暂存想法、草案箱和最近项目各少量条目;最近项目完整查看复用 `/space/projects?view=recent`,`ProjectsPage` 内提供“全部 / 最近 / 待处理 / AI 进行中 / 已归档”筛选,不单独新增最近项目页。
- 旧独立收件页已物理删除,`/inbox` route 和侧边栏入口已退场;旧 AI PMO `waiting_manual / draft_pending_confirm` 不再通过独立页面承载,而由 `frontend/src/api/space.ts` 作为 legacy adapter 只读接入 `/space` 的“我的下一步”和草案箱。`missing_project_scope` 只允许在 Space 选择项目后复用 `POST /ai-pmo/work-items/{id}/decision` 继续既有审计链,不新增旁路接口;底层 `notifications` primitive 暂留为未来 in-app reminder/偏好消费基础,不作为真实通知中心暴露。
- 前端主包治理已切到“同步首屏最小集 + route/page-section lazy”模式:`frontend/src/router/index.tsx` 保留 `LoginPage / Layout` 这组同步入口,其余后台重页面通过 `React.lazy + Suspense` 懒加载;统一 fallback 在 `frontend/src/components/layout/LazyBoundary.tsx`。P0 公共壳冻结后,大模块 route 归属为:`/space` 归 Space lane,`/project-launch` 是启动层入口,`/pmflow-os` 与 `/command-center / /change-review / /execution-bridge / /release-growth` 归 Main Flow lane,`/me` 归 Account Settings lane,`/settings` 当前仅为 reserved route、尚未实现,新增必须由 Shell / Integration owner 串行处理。`frontend/src/features/personal-space/` 作为空间层入口,通过登录后的 `/space` 提供空间入口,承载继续推进、待我确认、AI 正在推进、暂存想法、草案箱与新建项目入口。`frontend/src/features/project-launch/` 作为首次进入页 / 新项目启动台产品域,通过登录后的真实 `/project-launch` 提供启动入口(显式 `?demo=1` 或 `?dataSource=demo` 可匿名演示);Phase B 后默认调用真实 `pmflow-launch` draft/confirm API,创建成功态主动作跳转后端返回的 `/pmflow-os?projectId=<id>`,只有显式 `?demo=1` 或 `?dataSource=demo` 才启用本地 mock 状态机。`frontend/src/features/account-settings/` 作为 Account Settings 产品域,通过 `/me` 提供个人资料、默认语言、AI 回答深度、证据展示偏好、待确认/执行回写/发布门禁/失败提醒通知偏好和账户操作入口;该域通过 `frontend/src/api/accountSettings.ts` 建立前端合同,有 token 时优先调用已挂入 `backend/app/api/router.py` 的 `backend/app/api/account_settings_api/` `GET /account-settings/me` / `PUT /account-settings/me` 同步当前账号偏好,后端不可用时明确回落本机暂存,不修改 OAuth/JWT/auth core。`frontend/src/features/pmflow-os/` 作为新产品域,通过 `PMFlowOsProvider` 在应用根部挂载共享 truth store,并提供 `CommandCenter / ChangeReview / WorkGraph / ExecutionBridge / ReleaseGrowth / TeamLayer / ProjectMemory / Account` 主入口;当前 PMFlow OS 页面已切到专属轻壳,桌面端默认隐藏旧 TopBar,并由 `frontend/src/features/pmflow-os/components/PMFlowOsFrame.tsx` 统一承接“左侧稳定导航 + 顶部上下文条 + 中央视图 + 右侧 AI 副驾”的全局骨架,同时承接项目内 `个人空间 / 当前项目名` 面包屑和项目切换器;`TeamLayerPage.tsx` 现在消费 `ProjectTruthState.reviewerRouting(status/summary/items)`、`ProjectTruthState.feed` 与 `execution-capabilities`,以 `团队动态 / 决策台 / 角色收件箱 / 智能体工位 / AI 副驾` 组织团队协作态势,展示待审变更责任路由、审查人建议、审查状态、证据数量、执行单元信号和容量调度;决策台与待审路由卡片按真实条目密度排布,1-2 条不强行占 3 列,操作按钮不挤压正文宽度;动作只跳 `/change-review?projectId=<id>&changeSetId=<id>` 或下方容量区,不自动分派、不自动审查、不写 Project Memory;账号退出登录由 `frontend/src/features/pmflow-os/components/AccountControls.tsx` 统一承接桌面头像下拉、退出确认与移动端 bottom sheet,`frontend/src/features/pmflow-os/pages/AccountPage.tsx` 提供 `/me` 入口并委托 Account Settings 域渲染设置页;正式应用壳移动端底部导航统一由 `frontend/src/features/pmflow-os/components/MobileBottomNav.tsx` 承接,固定为 `空间 / 指挥台 / 待确认 / 动态 / 我的`,其中 `动态` 当前仍是 `/command-center` 占位。`/command-center` 额外提供免登录产品预览壳,`/pmflow-os` 是真实项目上下文 alias。主视觉按 `#2463EB + 白色` 的 Linear-like 高密度原型展开。`UsersPage` 把创建/删除/重置/导入/批量分配对话框拆为按需 chunk,`UserSkillsPage` 与 `WorkloadDetailPage` 的图表也分别拆到了 `frontend/src/pages/user-skills/components/UserSkillsRadarPanel.tsx` 与 `frontend/src/pages/workload-detail/components/WorkloadTrendChart.tsx`。
- `backend/app/api/ai_readiness_api/` + `backend/app/services/ai_readiness_service.py` + `frontend/src/api/aiReadiness.ts` + `frontend/src/features/ai-readiness/` 是空间级 AI 可用状态与 Project Launch 草案门禁合同:后端 `GET /ai-readiness/project-launch` 从平台运行租户供应商配置、published active `structured` 槽、Project Launch scene registry、结构化能力证据和租户最近 24h `pmflow_launch_draft_v1` 调用日志推导 `ready / blocked / recovering / unknown`;单次最近生成失败只作为平台 warning,若 24h 内已有成功且连续失败少于 3 次,用户端仍保持可生成,连续失败达到阈值才进入 recovering;`POST /ai-readiness/project-launch/check` 仅允许 platform AI Ops 触发真实结构化 smoke,固定以平台运行租户执行,复用 Project Launch 草案生成链但不写 draft/project/task/Project Memory,使一次平台 smoke 对所有客户空间的 readiness 恢复生效;前端 `useAIReadiness()` 默认消费后端结果,本机 localStorage 只保留 test 或 `VITE_AI_READINESS_LOCAL_OVERRIDE=true` 覆盖。`/space` 顶部与首屏、真实 `/project-launch`、项目级 `ResponsiveAICopilot`、`/ai-config?tab=setup` 和 `/platform/*` 共用该合同;用户端默认只消费客户可理解的业务影响、保护规则和可继续动作,空间负责人额外看到空间 AI 状态、团队策略和工具连接入口,平台 AI Ops 只有在显式诊断卡或 `/platform/*` 才看到 cause、raw status、供应商、路由、诊断、smoke 和 CTA。
- `frontend/src/features/project-launch/types.ts`、`mockData.ts`、`useProjectLaunchState.ts` 是新项目启动台状态层;默认真实模式通过 `frontend/src/api/pmflowLaunch.ts` 创建 `pmflow_launch_draft_jobs`、轮询 job 状态、拿到草案后再确认创建真实项目,API 失败进入明确失败态,不静默 fallback 成 mock 成功;`mockData.ts` 仅在显式 `?demo=1` 或 `?dataSource=demo` 下作为演示状态机使用,真实模式的步骤摘要、操作流、审查建议、附件引用和计数从当前输入、job 状态、真实草案、warnings/evidence 派生。`components/LaunchShell.tsx` 负责桌面/移动分流,桌面端复用 `frontend/src/features/personal-space/components/SpaceChrome.tsx` 的空间左侧栏和顶部条,并通过真实补充输入弹层提交 `merge_supplement` revision,禁止硬编码追加示例文本;`SpaceSidebar` 承载稳定空间目的地(空间首页、暂存想法、草案箱、所有项目和管理配置),不展示最近项目、待我确认或 AI 正在推进等首页工作台区块项;真实模式下若 `AIReadiness.canGenerateProjectDraft=false`,优先渲染 `AISetupRequiredPanel`,普通成员只记录想法,空间负责人查看空间 AI 可用状态,平台 AI Ops 才进入平台 AI 能力处理,不提供空项目创建入口;低信息输入由后端 `input_needs_more_info` 422 拦截并进入补充输入失败态。`LaunchCanvases.tsx` 和 `MobileLaunchLayout.tsx` 承接高保真图中的意图输入、AI 工作、人类确认、草案修改、生成失败、创建成功过渡与移动端 bottom sheet 交互。
- `frontend/src/features/pmflow-os/store.tsx` 当前是 PMFlow OS 共享 truth store:`?projectId=<id>` 时通过 React Query 调用 `frontend/src/api/pmflowOs.ts` 读取真实 `GET /pmflow-os/projects/{project_id}/truth-state` 与 `GET /pmflow-os/projects/{project_id}/execution-summary`,真实模式下项目内 `sendMessage` 会写 thread message 并触发后端真实 AI extraction;显式 `proposed_items` extraction、ChangeItem `accept/edit/defer`、ChangeSet commit、review decision、Execution Handoff create/consume、execution progress writeback、release validation run create、release feedback ingest、单条 iteration recommendation -> ChangeSet draft 与同组 iteration recommendation 批量 -> ChangeSet draft 均调用 `/pmflow-os` 后端并 refetch;只有显式 `?demo=1` 或 `?dataSource=demo` 时才启用本地 mock 演示状态机。真实读取/动作失败会进入错误/空态,不静默 fallback 成 mock 成功;认证、权限、对象访问和服务错误必须转成客户可理解文案,不直接展示 `Could not validate credentials`、`HTTP 401` 或 Axios 原始错误;AI extraction 失败显示“结构化失败/待补充”,不创建模板 ChangeSet。
- `frontend/src/features/pmflow-os/store.tsx` 仍保留演示用项目内 AI 结构化闭环状态机:`command_idle / ai_extracting / extraction_ready / review_open / writeback_success`。`frontend/src/features/pmflow-os/pages/StructuredExtractionPage.tsx` 是本轮结构化提取页,也是结构化读取检查层:从指挥台进入时主动作进入待确认或继续补充;从 `ChangeReviewPage.tsx` 进入时通过 `origin=change_review / returnTo=change_review / changeSetId / itemId` 保留审查上下文,主动作返回待确认队列,补充证据才回指挥台;已 committed 的轮次显示为结构化写入快照并转向项目记忆或新变更链路。`ChangeReviewPage.tsx` 是决策与待确认中心,真实模式下顶部识别统计、待确认列表与右侧 AI 副驾评估都只消费后端 `changeSets / changeItems / evidence`,没有真实待审项时显示空态,禁止用 demo 审查项补位;确认写入 Project Memory 前,`pending_review / accepted / edited / deferred` ChangeItem 均可继续 accept/edit/defer,只有 `committed / skipped` 或关闭轮次不可再操作;`MemoryWritebackResultPage.tsx` 是项目记忆写入结果页,`WorkGraphPage.tsx` 是项目工作台关系总览与对象投影视图,`ExecutionBridgePage.tsx` 是执行桥上下文包、交接按钮、运行端领取确认、PR/测试与回写状态页;`ReleaseGrowthPage.tsx` 真实模式读取 `execution-summary.releaseGate`、`latestValidationRun` 与 `releaseSignals`,从 branch、commit、PR、test、failed evidence 展示 `可发布 / 阻塞 / 需要人工确认 / 缺少证据` 判断、阻塞原因、下一步动作、发布验证记录和发布后 feedback/revenue/ROI/compliance/recommendation 信号,缺少发布后信号时显示 empty/warning,不执行发布命令、不展示 mock 发布结果;页面可展示 recommendation quality grouping,把真实 recommendation 单条或同组批量生成下一轮待确认 ChangeSet draft,生成后仍进入 Change Review accept/edit/defer,不自动 commit、不写 Project Memory、不创建正式任务;`ChangeReviewPage.tsx` 会展示 `iteration_recommendation_group` evidence 的来源组、feedback 数、recommendation 数、风险、影响和审查优先级;同时读取 Account notification preference helper,用 `releaseGate` 偏好控制发布门禁强调提醒,用 `failureAlert` 偏好控制失败强调提醒,偏好关闭时只静默提醒表达强度,不隐藏 release evidence、阻塞原因、审计状态、validation run 或 releaseSignals;静态发布/增长原型只保留在显式 demo 模式。A3 已接入后端 truth-state,C1 已接入真实 message/extraction/review 状态机,C2 已接入真实 ChangeSet commit,Phase D 已接入真实 execution-summary/dev-sync,D.2 已接入 `POST /execution-handoffs` 创建 PromptPackage + handoff_created progress event,P1 已接入 `POST /execution-handoffs/{prompt_package_id}/consume` 创建 handoff_consumed progress event 并把 execution status 投影为 coding,Release Growth P1 已接入 execution evidence gate,Release Validation P1 已接入 `POST /release-validation-runs` 创建 `ReleaseValidationRun` 快照,Release Feedback P1 已接入 `POST /release-feedback-ingests` 写入 `FeedbackIngest` 并生成 `IterationRecommendation`,Iteration Loop P1 已接入 `POST /iteration-recommendations/{recommendation_id}/change-set-drafts` 把 recommendation 回流到 Change Review,Iteration Loop P2 已接入 `POST /iteration-recommendation-groups/{group_key}/change-set-drafts` 并在 `releaseSignals.recommendationGroups` 暴露分组/去重/风险/影响合同;真实 AI extraction 已接入独立 `change_review` protected scene、`pmflow_change_review_extraction_v1` 运行合同、`PROMPT_PMFLOW_CHANGE_REVIEW_EXTRACTION` Prompt 资产与后端 `llm_service.generate_structured_object`,成功时生成 open ChangeSet、pending_review ChangeItems 与 thread message evidence,失败时 fail-closed,不把 mock 当真实失败 fallback,也不复用 Project Launch draft prompt/function。`ProjectMemoryPage.tsx` 在真实模式下展示后端 `truth_nodes + semantic_facts` 的 `projectMemory` 投影,accepted/edited ChangeItem 只有 commit 成功后才进入 Project Memory。`frontend/src/features/pmflow-os/components/ProjectStructuredLoop.tsx` 提供 `StatusLabel / EvidenceSnippet / ObjectChangeCard / ProjectConversationPanel / StructuredExtractionPanel / ProjectAICopilotPanel` 等闭环组件,并复用契约化 `InlineNotice` 表达“未确认不得写入”的局部提示。
- Execution Result Protocol P1 将 Execution Bridge 的执行结果回写收敛为 `execution_result_protocol_v1`:`backend/app/schemas/pmflow_os.py` 接收 `execution_status` 与 `blocker_summary`,`backend/app/services/pmflow_os_projection_service.py` 写入 `ProgressEvent.payload.protocol_version` 与 `execution_result` envelope,同时保留 `branch_name / commit_sha / pr_number / test_summary / workflow_state` flat 字段兼容现有投影;`frontend/src/api/pmflowOs.ts` 和 `ExecutionBridgePage.tsx` 支持手动记录 status/blocker。该链路只记录 Codex/IDE/Local Bridge/GitHub agent 已产生的结果,不执行本机命令、不推送、不发布、不自动创建正式任务;`execution-summary`、`releaseGate` 与 Team Feed 均从 `ProgressEvent` 只读消费。
- Release Growth 工作台现由 `frontend/src/features/pmflow-os/pages/ReleaseGrowthPage.tsx` 承载真实闭环:首屏发布上下文条展示项目、阶段、发布状态、观察窗口与下一轮 draft;左侧是发布健康闭环、发布门禁和阻塞下一步;中区承接执行证据、发布后反馈主题、增长候选、变现与 ROI、关键指标和合规风险;右侧 AI 发布增长副驾负责解释当前信号、提供反馈摄取和发布验证动作入口。该页只消费 `execution-summary.releaseGate / latestValidationRun / releaseSignals`,可创建 release validation run、摄取 release feedback、把 recommendation 生成待确认 ChangeSet draft;不得执行发布、部署、外部支付、真实合规平台动作、自动 Project Memory commit 或正式 Task 创建,静态发布增长大盘只在显式 demo 模式保留。
- Main Flow D4/D4.5/D4.6/D4.7/D5/D6/D7/D8 已把 Execution Capability Graph、质量合同、验收门禁、执行写回、V1 happy path smoke 和 runtime result 幂等合同接入 `/execution-bridge` 与后端回归:`frontend/src/features/pmflow-os/store.tsx` 读取并刷新真实 `GET /pmflow-os/projects/{project_id}/execution-capabilities`,`ExecutionBridgePage.tsx` 先消费 `truth-state.requirements/tasks` 与 `execution-summary.activeDevTasks` 形成前端只读开发范围模型,展示本轮需求/任务总览、按 Requirement 聚合的需求执行队列、未归属任务和选中任务 Run 详情;D4.7 移除顶部大 Run Header 卡片,刷新/复制上下文迁入执行源包,需求执行队列按 Requirement / 未归属分组本地分页。选中 Run 继续通过单点状态模型推导 `已确认需求 / 上下文包 / 开发 / 测试 / 审查合并 / 回写` 阶段、当前主动作、证据数和阻塞原因。handoff 主按钮受正式 Task、待确认范围、repo/prompt package 与 reviewer gate 约束,技术审查责任缺失时 store 会阻止真实 handoff,缺 repo 时只允许表达交接草案;这里的 repo 是项目代码仓库连接,不限于 GitHub。GitHub App 为当前实现:平台方通过 `backend/app/core/config.py` 的 `GITHUB_APP_ID / GITHUB_APP_PRIVATE_KEY(_PATH) / GITHUB_APP_INSTALL_URL / GITHUB_APP_WEBHOOK_SECRET` 配置一次,`docker-compose.yml` / `docker-compose.dev.yml` 将这些变量透传给 backend,`backend/app/services/ai_project_control_service.py` 可直接用 GitHub App JWT 同步 installation/repository,用户只安装 App 并选择自己的仓库;Gitea/自托管 Git 后续通过 OAuth、Token 或 Local Bridge Provider 适配;手动回写在 drawer 中记录已发生的 branch/commit/PR/test/blocker/status。D5 的 `POST /execution-acceptance-decisions` 只记录用户验收/技术审查,不写 Project Memory;D6 的 `POST /execution-memory-writebacks` 写入 `execution_memory_writeback_v1` ProgressEvent,并把已验收执行事实投影到 Project Memory writebacks、Space next action 和 release gate;D7 后端 smoke 证明 thread/extraction/review/commit/execution/release/feedback/recommendation draft 可连续跑通,且发布验证不执行部署、recommendation draft 不自动 commit;D8 允许外部运行端在 `POST /execution-progress-events` 传 `delivery_id / event_source_id`,并在同 tenant/project/task 下按任一锚点复用已有 `ProgressEvent`,防止运行端重试产生重复证据。该层仍只做能力判定、交接合同和结果回写展示,不执行本机命令、不触发真实 agent、不自动验收、不自动合并、不自动发布。
- Main Flow D11 已把结构化交付证据包接入同一条执行主链:`delivery_artifacts` 支持 changed files、commands run、test outputs、screenshots、logs、risk notes 与 review checklist;`ExecutionSummaryProjection.deliveryArtifacts / artifactCompleteness` 由 `pmflow_os_projection_service.py` 聚合,`ReleaseGate`、`Project Memory writeback` metadata、`ExecutionBridgePage`、`ReleaseGrowthPage` 与 `frontend/src/api/space.ts` 的 next action 均消费同一份证据。缺 changed files、commands run、test outputs、UI 改动截图或 required review checklist 时保持 incomplete,failed/blocked artifact 会阻塞发布;证据包只保存摘要或 artifact ref,不保存 raw binary、无限长日志、secret 或宿主机私有文件内容。
- Main Flow D12 新增交付证据审查/返工闭环:`ExecutionSummaryProjection.artifactReview` 将缺 changed files、commands run、test outputs、UI 截图、review checklist 或 failed/blocked command/test/checklist 转成审查项;`POST /pmflow-os/projects/{project_id}/execution-artifact-review-actions` 记录 `artifact_review_action_v1`,支持要求返工、记录修复说明和标记待重检。Execution Bridge 的回写 drawer 可触发这些动作,Release/Growth 和 `/space` 只读消费同一份 artifact review;该动作不执行命令、不创建正式任务、不写 Project Memory。
- Main Flow D13 新增交付证据返工执行包:`POST /pmflow-os/projects/{project_id}/execution-artifact-rework-packages` 从 `artifactReview.items` 创建新的 `execution_handoff` PromptPackage,并在 `package_payload.handoff_type='artifact_rework'` 下保存 `rework_contract`、上一轮 `delivery_artifacts` 和当前 `artifactCompleteness`。签名 `POST /pmflow-os/runtime/execution-packages` 返回 `package.reworkContract`,运行端仍通过原 result contract 重新回写;普通 handoff 不复用 rework package,避免上下文污染。Execution Bridge 回写 drawer 已接入“生成返工包”动作。
- Main Flow D14 新增返工结果闭环和 UI 证据验收投影:`artifactReview.closure` 根据 `artifact_rework_package_created`、`execution_package_pulled` 和同 `prompt_package_id` 的 `/runtime/execution-results` 生成 review item `resolved/open` 状态、覆盖证据 `evidenceRefs` 与返工时间线;同名最新 passed command/test/checklist 可覆盖旧 failed evidence,但历史事件继续保留。Execution Bridge 展示返工闭环和 UI screenshot artifact ref,Release/Growth 交付证据 gate 展示同源 closure。
- Main Flow D15 新增发布门禁复检与执行写回证据链:`releaseGate.releaseReadinessProof`、`acceptance.evidenceProof` 与 `execution_memory_writeback_v1.writeback_proof` 共用 `artifactCompleteness / artifactReview.closure / execution events`,区分 `awaiting_acceptance / awaiting_memory_writeback / ready / blocked`;closure resolved 且 artifacts ready 时旧 failed artifact 不再阻塞,显式 failed/blocked/test_failed 仍 fail-closed。Execution Bridge 和 Release/Growth 展示同源复检 proof。
- Project Knowledge Hub 读模型由 `GET /pmflow-os/projects/{project_id}/project-memory/overview`、`items`、`items/{item_id}`、`assets`、`context-packs`、`writebacks` 承载,后端在 `backend/app/services/pmflow_os_projection_service.py` 从 `truth_nodes / tasks / semantic_facts / pmflow_evidence_links / pmflow_thread_messages / pmflow_change_sets / pmflow_change_items` 聚合首页雷达、全部记忆、项目资产、上下文包和写入版本记录。前端对应 `ProjectMemoryPage.tsx`、`ProjectMemoryCollectionPages.tsx` 与 `projectMemoryUtils.ts`:列表时间使用短格式,抽屉显示完整时间和北京时间;首页卡片与二级列表单条点击打开右侧详情抽屉,展示来源证据、影响对象和 AI 执行动作跳转;全部记忆支持类型、阶段、来源、状态、搜索筛选。该读模型只读,资产可自动索引,进入项目真相层仍必须经过 Change Review 或可信规则确认。
- `frontend/src/features/account-settings/AccountSettingsPanel.tsx` 是 `/me` 设置页实现:桌面端为个人资料摘要 + 分区设置面板,移动端为分组列表 + `MobileBottomSheet` 编辑;当前覆盖个人资料、系统默认头像 `avatarPreset`、默认语言、AI 回答深度、证据展示偏好、待确认、执行回写、发布门禁和失败提醒通知偏好,并在通知偏好区展示页面内提醒消费说明、提醒强度和证据展示配置;默认头像选择器展示 3 张男性、3 张女性头像。`frontend/src/api/accountSettings.ts` 是前端合同层;有 token 时优先调用 `backend/app/api/account_settings_api/`,失败时回落浏览器本机暂存;P2 新增 `shouldShowAccountNotification` 与 `getAccountNotificationConsumption`,将四类通知偏好映射为本地 UI 的待确认、Execution Bridge、Release/Growth 和失败提醒显示/静默状态;P3 新增 `getReleaseGateNotificationPreference(settings, event)`,把 Release/Growth 的 `release_gate_* / release_validation_*` 事件映射到 `releaseGate` 偏好,把 `failed_event` 映射到 `failureAlert` 偏好;P5/P6 的 `getPostReleaseNotificationPreference(settings, event)` 把发布后 `feedback_received / revenue_signal / compliance_blocked` 映射到 `releaseGate` 偏好,把 `iteration_recommendation / next_change_review` 映射到 `pendingConfirmation` 偏好和 `change_review` surface,并返回 `spaceReadable / evidencePolicy / reminderPolicy` 供 Main Flow 与 Space 消费;P7 将通知偏好扩展为 `reminderIntensity=silent|normal|prominent` 与 `evidenceDisplay=compact|expanded`,并新增 `getAccountReminderConsumption(settings, event)` 覆盖 `change_review_high_risk / iteration_draft_ready / release_blocked / execution_stalled`,输出 `notificationTransport=in_app_only / evidencePolicy=preserve_business_evidence / auditPolicy=preserve_audit_state`;P8 新增 `getReviewDecisionNotificationPreference(settings, event)` 覆盖 `review_requested / review_approved / review_changes_requested / review_rejected / high_risk_approval_required`,继续使用 `pendingConfirmation` 偏好和 `change_review` surface,并声明 reviewerRouting、approval、evidence、audit state 均必须保留。该合同只控制页面内提醒表达,不代表邮件、桌面推送或系统通知中心已接入;偏好关闭也不得隐藏业务证据、reviewerRouting、approval、recommendation、ChangeSet、执行状态或审计状态。`backend/app/schemas/account_settings.py` 定义账号偏好合同,`backend/app/services/account_settings_service.py` 当前复用既有 `integrations` 表按 `tenant_id + user_id` 保存 `account_settings_preferences` 配置包,`backend/app/api/router.py` 已挂载该 API;未改用户表、OAuth/JWT/auth core 或 PMFlow OS truth store。
- `frontend/src/features/pmflow-os/store.tsx` 当前是 PMFlow OS 共享 truth store:`?projectId=<id>` 时通过 React Query 调用 `frontend/src/api/pmflowOs.ts` 读取真实 `GET /pmflow-os/projects/{project_id}/truth-state` 与 `GET /pmflow-os/projects/{project_id}/execution-summary`,真实模式下项目内 `sendMessage` 会写 thread message 并触发后端真实 AI extraction;显式 `proposed_items` extraction、ChangeItem `accept/edit/defer`、ChangeSet commit、review decision、AI feedback、Execution Handoff create/consume、execution progress writeback、release validation run create、release feedback ingest 与 iteration recommendation -> ChangeSet draft 均调用 `/pmflow-os` 后端并 refetch;AI feedback 写入 `pmflow_ai_feedback_events`,在 `truth-state.aiFeedback` 恢复当前用户选择,并由后端按 `prompt_key` 生成待复核 `JudgeRun / OptimizerCandidate` 质量优化候选,用户改回赞同时挂起此前候选,Prompt Asset quality summary 会聚合 PMFlow 反馈与优化候选;只有显式 `?demo=1` 或 `?dataSource=demo` 时才启用本地 mock 演示状态机。真实读取/动作失败会进入错误/空态,不静默 fallback 成 mock 成功;AI extraction 失败显示“结构化失败/待补充”,不创建模板 ChangeSet。
- `frontend/src/features/pmflow-os/store.tsx` 仍保留演示用项目内 AI 结构化闭环状态机:`command_idle / ai_extracting / extraction_ready / review_open / writeback_success`。`frontend/src/features/pmflow-os/pages/StructuredExtractionPage.tsx` 是本轮结构化提取页,`ChangeReviewPage.tsx` 是决策与待确认中心,真实模式下顶部识别统计、待确认列表与右侧 AI 副驾评估都只消费后端 `changeSets / changeItems / evidence`,没有真实待审项时显示空态,禁止用 demo 审查项补位;`MemoryWritebackResultPage.tsx` 是项目记忆写入结果页,`WorkGraphPage.tsx` 是项目工作台关系总览与对象投影视图,`ExecutionBridgePage.tsx` 是执行桥上下文包、交接按钮、运行端领取确认、运行端接入包、PR/测试、交付证据包、证据审查/返工动作、返工包生成与回写状态页;`ReleaseGrowthPage.tsx` 真实模式读取 `execution-summary.releaseGate`、`artifactCompleteness`、`artifactReview`、`latestValidationRun` 与 `releaseSignals`,从 branch、commit、PR、test、failed evidence 与结构化交付证据展示 `可发布 / 阻塞 / 需要人工确认 / 缺少证据` 判断、阻塞原因、下一步动作、发布验证记录和发布后 feedback/revenue/ROI/compliance/recommendation 信号,缺少发布后信号时显示 empty/warning,不执行发布命令、不展示 mock 发布结果;页面可把真实 recommendation 生成下一轮待确认 ChangeSet draft,生成后仍进入 Change Review accept/edit/defer,不自动 commit、不写 Project Memory、不创建正式任务;同时读取 Account notification preference helper,用 `releaseGate` 偏好控制发布门禁强调提醒,用 `failureAlert` 偏好控制失败强调提醒,偏好关闭时只静默提醒表达强度,不隐藏 release evidence、交付证据、artifact review、阻塞原因、审计状态、validation run 或 releaseSignals;静态发布/增长原型只保留在显式 demo 模式。A3 已接入后端 truth-state,C1 已接入真实 message/extraction/review 状态机,C2 已接入真实 ChangeSet commit,Phase D 已接入真实 execution-summary/dev-sync,D.2 已接入 `POST /execution-handoffs` 创建 PromptPackage + handoff_created progress event,P1 已接入 `POST /execution-handoffs/{prompt_package_id}/consume` 创建 handoff_consumed progress event 并把 execution status 投影为 coding,D8 已接入 `delivery_id / event_source_id` 幂等执行结果回写,D9 已接入 `POST /execution-handoffs/{prompt_package_id}/runtime-credential` 生成 handoff-bound 短期凭据,D10 已接入签名 `POST /pmflow-os/runtime/execution-packages` 领取机器可读执行包并写 `execution_package_pulled` 审计,随后通过签名 `POST /pmflow-os/runtime/execution-results` 让 Codex/Local Bridge/GitHub agent 回传执行事实;D11 已接入 `delivery_artifacts` 交付证据合同;D12 已接入 `artifactReview` 与返工审查动作;D13 已接入 `artifact_rework` 执行包生成并继续复用签名拉包;D14 已接入 `artifactReview.closure` 返工闭环、UI screenshot artifact ref 与同名最新证据覆盖;D15 已接入 `releaseGate.releaseReadinessProof`、`acceptance.evidenceProof` 与 execution memory writeback proof;Release Growth P1 已接入 execution evidence gate,Release Validation P1 已接入 `POST /release-validation-runs` 创建 `ReleaseValidationRun` 快照,Release Feedback P1 已接入 `POST /release-feedback-ingests` 写入 `FeedbackIngest` 并生成 `IterationRecommendation`,Iteration Loop P1 已接入 `POST /iteration-recommendations/{recommendation_id}/change-set-drafts` 把 recommendation 回流到 Change Review;真实 AI extraction 已接入后端 `llm_service.generate_structured_object` 与 PMFlow prompt/config/routing 层,成功时生成 open ChangeSet、pending_review ChangeItems 与 thread message evidence,失败时 fail-closed,不把 mock 当真实失败 fallback。`ProjectMemoryPage.tsx` 在真实模式下展示后端 `truth_nodes + semantic_facts` 的 `projectMemory` 投影,accepted/edited ChangeItem 只有 commit 成功后才进入 Project Memory。`frontend/src/features/pmflow-os/components/ProjectStructuredLoop.tsx` 提供 `StatusLabel / EvidenceSnippet / ObjectChangeCard / ProjectConversationPanel / StructuredExtractionPanel / ProjectAICopilotPanel` 等闭环组件,并复用契约化 `InlineNotice` 表达“未确认不得写入”的局部提示。
- PMFlow OS 后端入口位于 `backend/app/api/pmflow_os_api/`,projection service 位于 `backend/app/services/pmflow_os_projection_service.py`,Execution Capability Graph 只读聚合位于 `backend/app/services/team_execution_capability_service.py`,Change Review / commit / review decision 服务位于 `backend/app/services/pmflow_change_review_service.py`,AI feedback 服务位于 `backend/app/services/pmflow_ai_feedback_service.py`,Pydantic 合同位于 `backend/app/schemas/pmflow_os.py`;当前聚合 `truth_nodes / tasks / semantic_facts / ai_project_control / dev_sync`,`Thread / Message` 来自 `pmflow_threads / pmflow_thread_messages`,`ChangeSet / ChangeItem / Approval / EvidenceLink` 来自 `backend/app/models/pmflow_change_review.py` 对应真实表,ChangeSet committer 持久化在 `pmflow_change_sets.committed_by` 并由 `truth-state.lastWritebackBy`、commit result 与 Project Memory writebacks 投影,AI feedback 来自 `pmflow_ai_feedback_events` 并归因到 `scene_key / prompt_key / prompt_release_id / runtime_profile_id`。负反馈只创建待复核 `JudgeRun / OptimizerCandidate`,由 Prompt 资产运营页展示,不直接修改 active prompt 或自动发布;用户改回赞同时自动挂起此前候选。`GET /pmflow-os/projects/{project_id}/execution-capabilities` 返回 `executionModes / personalReadiness / teamSignals / warnings`,复用用户、项目成员、技能绑定、负载、reviewer routing、execution summary 与 workspace binding 数据,只给建议、阻塞和解释,不自动分派任务、不自动请求审查、不写 ChangeSet;缺项目代码仓库、工具、测试命令、reviewer 或证据时返回 warning、`blocked` 或 `needs_human_judgement`,不虚构能力结论。`ProjectTruthState.reviewerRouting` 是 Team layer 的 reviewer routing + decision 读模型:从 open/pending ChangeSet、待审 item 风险、跨对象类型、`iteration_recommendation` evidence、项目成员与 `OWNER / REVIEWER` 角色推导 `{status, warningCode, summary, items}`;item 内含 `sourceType / riskLevel / priority / suggestedReviewer / fallbackReviewerRole / targetUrl / reviewDecision / approvalState / requestedAt / decidedAt / decisionReason`;缺成员、缺角色或缺证据时 fail-closed 给 warning,不虚构 reviewer。P8 新增 `POST /pmflow-os/change-sets/{change_set_id}/review-decisions`,支持 `request_review / approve / request_changes / reject`,`approve / request_changes / reject` 写 `PMFlowApproval` 审计,high-risk approve 后才满足 C2 approval gate,所有 decision 都不自动 commit。C1 已实现 message、真实 AI extraction、显式 `proposed_items` extraction、ChangeSet detail、ChangeItem `accept/edit/defer` 与 AI feedback;真实 AI extraction 失败返回 `ai_extraction_failed / extraction_evidence_insufficient` 且不创建模板假结果;C2 backend/frontend 已实现 `POST /pmflow-os/change-sets/{change_set_id}/commit` 与真实模式前端接入,默认 atomic,将 `Requirement / Decision / Risk` 写入 `truth_nodes`,将 `Task` 写入 `truth_nodes(node_type='task') + tasks`,高风险项强制 approval gate;D.2 已实现 `POST /pmflow-os/projects/{project_id}/execution-handoffs`,校验 task/repo project 边界,生成/复用 `PromptPackage(package_kind='execution_handoff')` 并写 `ProgressEvent(event_type='handoff_created')` 起点;P1 已实现 `POST /pmflow-os/projects/{project_id}/execution-handoffs/{prompt_package_id}/consume`,校验 execution handoff package 后更新 `PromptPackage.package_payload.latest_handoff.handoff_state=consumed` 并写 `ProgressEvent(event_type='handoff_consumed', derived_task_status='coding')`;D9 新增 `PMFlowExecutionRuntimeCredential` 与 migration `20260506_add_execution_runtime_credentials`,登录态 `POST /pmflow-os/projects/{project_id}/execution-handoffs/{prompt_package_id}/runtime-credential` 生成只返回一次 secret 的短期凭据;D10 新增签名 `POST /pmflow-os/runtime/execution-packages` 返回机器可读执行包并写 `execution_package_pulled` 幂等审计,签名 `POST /pmflow-os/runtime/execution-results` 校验 HMAC/timestamp/handoff/source/repo/expiry 后复用 `execution_result_protocol_v1` 写入 `ProgressEvent`;Release Growth P1 在 `ExecutionSummaryProjection.releaseGate` 中从 `ProgressEvent` 推导发布门禁状态,失败事件 fail-closed 阻塞发布,无证据返回 empty/warning;Release Validation P1 新增 `POST /pmflow-os/projects/{project_id}/release-validation-runs`,复用现有 `ReleaseValidationRun` 模型固化当前 `releaseGate` 快照、人工决策、证据、阻塞原因和下一步动作,并在 `releaseGate.latestValidationRun` 返回最新记录;Release Feedback P1 新增 `POST /pmflow-os/projects/{project_id}/release-feedback-ingests`,复用现有 `FeedbackIngest / IterationRecommendation`,在 `ExecutionSummaryProjection.releaseSignals` 中返回真实发布后 feedback、revenue event、ROI snapshot、compliance check 和 iteration recommendation 读模型;Release Business Signal Loop P1 已把 RevenueEvent、ROISnapshot 与 ComplianceCheckRun 纳入 `ExecutionSummaryProjection.releaseSignals` 风险读模型;Iteration Loop P1 新增 `POST /pmflow-os/projects/{project_id}/iteration-recommendations/{recommendation_id}/change-set-drafts`,把真实 recommendation 转为 open ChangeSet、pending_review Requirement/Task/Risk/Decision items 与 `iteration_recommendation` evidence,重复调用复用既有 draft 并在 `releaseSignals` 标记 `changeSetCreated/changeSetId`;这些步骤都不直接执行本机命令、真实发布命令、外部支付、真实推送、自动 Project Memory commit 或正式任务创建;`ModelDecision / MetricSignal` 在 C2 V1 仍 fail-closed。
- Adaptive Human Capacity 后端由 `backend/app/services/adaptive_capacity_service.py`、`backend/app/models/human_capacity_override.py`、`backend/alembic/versions/20260427_add_human_capacity_overrides.py` 与 `backend/app/schemas/pmflow_os.py` 承载;API 位于 `backend/app/api/pmflow_os_api/`:`GET /pmflow-os/projects/{project_id}/capacity-plan` 实时计算每日容量计划,`POST /pmflow-os/projects/{project_id}/capacity-overrides/simulate` 只模拟,`POST /pmflow-os/projects/{project_id}/capacity-overrides` 只写 override 审计,`GET /pmflow-os/projects/{project_id}/capacity-overrides` 返回调整记录;`execution-capabilities` 同步返回 `adaptiveCapacitySummary`。该模型不持久化每日计划快照,不写固定基线,不自动分配任务、不请求审查、不写 ChangeSet;旧 `UserWorkload.workload_ratio` 仅保留为成本参考信号。
- Adaptive Human Capacity 现在也是 Space AI 容量语义域证据源:客户侧只暴露有效/计划/剩余分钟、动态基线、瓶颈、人工触点、AI 预处理可释放时间、建议和 warning;自然语言问答只能只读判断,容量基线调整仍必须走 Team Layer simulate/apply 主链并写审计。
- PMFlow Launch 后端 Phase B 创建链位于 `backend/app/api/pmflow_launch_api/`、`backend/app/services/pmflow_launch_service.py`、`backend/app/schemas/pmflow_launch.py` 与 `backend/app/models/pmflow_launch.py`;`POST /pmflow-launch/drafts` 只写 `pmflow_launch_drafts`,`POST /pmflow-launch/drafts/{draft_id}/confirm` 在同一事务内写 `projects / user_projects / pmflow_threads / pmflow_thread_messages / truth_nodes / tasks / semantic_facts seed / operation_logs`,并把 `launch_draft_id / thread_id / thread_message_id` 写入正式对象 metadata。旧 `POST /ai-steward/project-from-text` 仅由 `backend/app/api/legacy_ai_steward_api.py` 保留 410 响应一个版本周期,且该模块在 lean profile 下也会挂载;禁止绕过草案确认直接创建正式项目。
- `frontend/src/features/pmflow-os/components/ChangeReviewGroup.tsx`、`WorkbenchPanel.tsx`、`ExecutionBridgeCards.tsx`、`PMFlowOsFrame.tsx`、`AccountControls.tsx`、`FeedbackPrimitives.tsx` 是高保真原型新增的行为组件层:分别承载变更 diff 审查块、工作台对象卡组、执行桥上下文/日志卡片、全局上下文条与 AI 副驾、账号菜单/退出登录确认交互,以及 `PageBanner / InlineNotice / HumanDecisionBar / ConfirmDialog / MobileBottomSheet` 这组提示、提醒、确认与移动端 bottom sheet 基础组件,避免再把这些业务片段内联塞回 `pages/`。
- `frontend/vite.config.ts` 保留固定第三方依赖 chunk 分组(`framework / state-query / ui-radix / icons / charts / markdown`);业务源码不再强制切 `ai-steward / sstc / governance` chunk,避免业务模块循环依赖在生产预览中触发初始化顺序错误。登录页与基础导航的体积治理继续依赖 route/page-section lazy。
- 旧登录残留 `frontend/src/components/ui/sign-in.tsx` 与 `frontend/src/components/ui/demo.tsx` 已删除,`frontend/src/components/login/` 成为唯一登录实现真源。
- 前端开发链路已按职责拆分:`docker-compose.dev.yml` 下的 Vite 热更新开发前端固定占用 `5174`,静态生产预览前端默认改为 `5175`;`frontend/scripts/dev-entrypoint.sh` 避免每次容器启动都执行 `npm ci`,`frontend/scripts/login-live-check.mjs` 与 `package.json` 中的 `verify:login-fast / verify:login-responsive / verify:login-full`、`capture:login:matrix` 作为登录页快回路验证入口,截图产物统一落到 `frontend/output/login/`。
- `frontend/src/api/taskBriefs.ts`
- `frontend/src/api/modelRouting.ts`
- `frontend/src/api/aiRouting.ts`
- `frontend/src/api/mcp.ts`
- `frontend/src/api/knowledgeGraph.ts`
- `frontend/src/api/semanticFacts.ts`
- `frontend/src/api/queryRouteGovernance.ts`
- `frontend/src/api/mountedAi.ts`
- `frontend/src/api/feedbackCenter.ts`
- `frontend/src/api/sstc.ts`
- `frontend/src/components/sstc/`
- `frontend/src/pages/scheduler-center/components/`
- `frontend/src/pages/ai-routing/`(平台 AI 运行层页面;业务场景路由优先消费后端 `scene_contract / scene_health / release_gate`,`sceneContracts.ts` 仅作为前端 fallback)
- `backend/app/services/ai_routing_scene_contracts.py`(业务场景路由合同 registry;active 场景参与健康度和发布门禁,candidate 场景只展示合同)
- `backend/app/config/ai_function_runtime_profiles.py` + `backend/app/services/ai_function_runtime_profile_service.py`(Function Runtime Profile 配置与发布服务;保存场景内生成预算、修复预算、temperature、响应模式、前台等待、provider/job 超时、最大重试、大输入策略、冒烟结果和发布历史到 `integrations(type='ai_function_runtime_profiles')`;Project Launch 草案生成、Change Review 变更抽取与 PMFlow AI 客户答案呈现/质检运行时只消费 active profile,draft 只用于平台 AI Ops 校验、冒烟和发布预览;active profile 实际控制 provider HTTP timeout、draft job timeout、transient retry budget、large 输入预处理、客户答案输出预算和前端等待窗口)
- `frontend/src/pages/platform/AICallTracesPage.tsx` + `frontend/src/api/aiCallTraces.ts` + `backend/app/api/ai_call_traces_api.py` + `backend/app/services/ai_call_trace_service.py`(平台 AI 调用审计;只读消费 `ai_call_logs`,按 provider/model/scene/slot/trace/status/time/keyword 过滤,默认只展示真实上游调用记录,能力探测按 `probe_capability_*` 单项上游调用显示,其中 `probe_capability_model_self_report` 是模型自报参考而非 verified 槽位证据;历史 `probe_engine_capabilities` 汇总行默认隐藏;详情只展示完整脱敏 provider 请求/响应 payload、上游尝试链、routing/probe meta、tokens/cost/latency、错误诊断和场景 timeout 策略,不在详情中展示兼容 prompt/response 字段;`structured_timeout` 独立展示为模型超时,不与 JSON 无效/空响应混淆)
- `backend/app/services/ai_scene_runtime_policy.py`(AI 场景运行策略服务;按业务场景、function 和输入规模桶输出 `foreground_wait_seconds / provider_timeout_seconds / job_timeout_seconds / scene_fallback_policy / large_input_policy` 等显式 routing meta。Project Launch draft 当前由该服务提供 small/normal/large 默认策略,再由已发布 Function Runtime Profile 覆盖可运营字段,large 输入标记为预处理/分段生成方向)
- `frontend/src/pages/platform/PromptAssetsPage.tsx` + `frontend/src/api/promptAssets.ts` + `backend/app/api/prompt_assets_api.py` + `backend/app/services/prompt_assets_service.py` + `backend/app/services/prompt_runtime_service.py` + `backend/app/config/ai_prompt_eval_rubrics.py`(平台 Prompt 运营中心;聚合 prompt registry、默认 seed、`prompt_releases` active/draft、`prompt_release_checks` 门禁状态、分层 `prompt_golden_cases`、`prompt_replay_runs / prompt_replay_case_results`、`ai_call_logs` prompt 质量摘要、跨客户空间 PMFlow OS `pmflow_ai_feedback_events` 用户反馈、`optimizer_candidates` 优化候选、调用点和迁移状态,并对 `managed_release` prompt 提供草稿创建、激活和回滚;`guarded_release` 可创建候选并运行契约回放或 LLM 回放,LLM replay 走 `llm_service` 本地路由层并记录 baseline/candidate call log、judge score/label/reason;`PMFLOW_SEMANTIC_CONTEXT_DECISION_PROMPT / PROMPT_PMFLOW_AI_TURN_GOAL_STATE_ASSESSOR / PROMPT_PMFLOW_AI_TURN_STATE_ANSWER_SYNTHESIZER / PROMPT_CUSTOMER_ANSWER_COMPOSER / PROMPT_CUSTOMER_ANSWER_VERIFIER / PROMPT_RAG_QUERY_SEMANTICS / PROMPT_RAG_FOLLOWUP_ANCHOR_SEMANTICS / PROMPT_RAG_PENDING_CLARIFICATION_SELECTION_SEMANTICS` 属于已迁移运行时治理/展示 prompt;`PROMPT_PMFLOW_AI_ROUTE_PLANNER` 只保留为 legacy/deprecated prompt key 和离线 replay 迁移标识,不得被 Space AI runtime 调用;PMFlow OS 负反馈只生成待复核 `JudgeRun / OptimizerCandidate`,由平台 AI Ops 人工复核后再进入 release 流程,不直接修改 active prompt;golden replay 无样本或无 replay run 时 fail-closed,blocking 样本失败阻塞发布,important/observation 样本失败进入 warning/人工复核;release watch 汇总 24h/7d 质量、结构化异常、默认回退与健康/复核/回滚建议;`inline_discovered` 只表示已梳理但待迁移的代码散落 prompt)
- `frontend/src/pages/ai-steward/components/`
- `frontend/src/lib/`
### 5.3 前端结构边界
- 页面级编排逻辑优先收敛到 `pages/*/` 子目录。
- API 调用统一走 `frontend/src/api/`,不在页面或组件内直接 `fetch`。
- `frontend/src/components/sstc/` 继续作为 SSTC 共享组件目录维护。
- AI Steward 浮窗的“当前对象/来源模式/证据状态”必须直接消费 `/rag/ask` 与 QA session API 的显式 contract 字段,禁止在前端靠回答正文反推 internal/external 或 plan 状态。
- 网页问答显式锚点 v1 只能消费稳定强锚点:项目页路径中的 `project_id` 与 URL query 中已显式存在的 `project_id/source_chat_id`;前端禁止自行猜测 `source_chat_id`。
- `/ai-config` 是空间级 AI 使用设置,技术路由继续保留但用户可见不再叫“AI 运营中心”“管理后台”或泛化 AI Config;`/ai-config` 及其子路由必须使用空间配置壳 `SpaceSidebar(activeLabel="AI 使用设置") + SpaceTopBar`,让用户仍处在个人空间/团队空间的配置上下文,不得切入项目工作台侧栏;`/ai-config?tab=setup` 由 `AISetupWizard` 承接 AI 可用状态和项目生成能力门禁,只展示空间业务影响、团队策略和连接入口,不展示“启用供应商/路由/连接测试/额度诊断”类平台动作;连接、知识、团队策略、MCP 模板使用和 Prompt 策略继续组织客户空间可控能力,并明确这些配置影响当前团队空间内所有项目。`AIReadiness` 必须遵守双层表达:用户端默认客户视图,平台人员在用户端也只能通过显式 `platformDiagnostic` 查看 cause/CTA;`/platform/*` 默认平台诊断视图,展示供应商、全局路由、模型槽位、诊断、失败样本和处理动作。平台供应商、全局路由、route/context、semantic facts、高级函数路由和跨租户运营诊断不在客户空间暴露,统一进入 `/platform/*`,由 `PlatformBoundary` 和 `platform_context.capabilities` 保护;旧 `/ai-config/contract-sync-board`、`/ai-config/query-route-governance`、`/ai-config/ai-routing-console`、`/ai-config/model-routing-config`、`/ai-config/knowledge-graph-board` 和 `/ai-config/semantic-facts-board` 只做兼容跳转到 `/platform/*`,其中 model routing 旧入口跳到隐藏 `/platform/route-lab`,避免平台页套入空间壳。`/platform/*` 使用 `PlatformSidebar + PlatformTopBar` 专属壳,侧栏按运行总览、AI 运行层、工具与外部能力层、上下文与语义层、质量与事件层组织,不复用旧项目工作台导航;隐藏 Route Lab 不进侧栏,只读展示函数级规则、最近执行与历史 override 痕迹。AI 路由与供应商控制台由 `backend/app/api/ai_routing.py` 与 `backend/app/services/ai_routing_governance_service.py` 提供聚合,客户负责人只看业务场景策略,平台 AI Ops 才看供应商连接、快速/深度槽位、场景路由、诊断和审计提示;平台 AI 运行总览已合并进 `/platform`,旧 `/platform/ai-routing-console` 只做兼容跳转;AI 运行层前端保留 `/platform/ai-routing-providers`、`/platform/ai-routing-slots`、`/platform/ai-routing-scenes`、`/platform/ai-routing-costs`、`/platform/ai-routing-failures` 五个明确子菜单,共享同一脱敏 admin-console 合同;质量与事件层新增 `/platform/ai-call-traces` AI 调用审计,只给平台 AI Ops 查看 `ai_call_logs` 的脱敏出入参、完整脱敏 provider 请求/响应 payload、上游尝试链、provider/model/slot/routing/tokens/cost/latency 和错误摘要,未脱敏 provider payload、headers 与密钥不暴露;团队策略只写 `integrations(type='ai_team_policy')`,供应商连接写 `integrations(type='llm_engine')` 并在 engine config 内分层保存声明 capabilities、`capability_probe` live evidence 与后端派生 `effective_capabilities`,旧 flat `capability_evidence` 只做兼容;能力探测必须按 registry 逐项验证,JSON Schema 独立于普通 JSON 输出,长上下文声明窗口只能作为 `declared_only`;供应商页允许平台操作人对高成本长上下文能力执行“确认长上下文”,写入带来源、确认人和过期时间的 `operator_verified/operator_attestation` 证据,满足发布校验但不进入 AI 调用审计;能力槽位写 `integrations(type='ai_capability_slots')`,但只有发布后的 `active.slots` 会由 `llm_service` low/high/structured tier 解析消费,draft 只用于平台编辑、校验、发布和回滚;能力槽位发布校验按 `SLOT_REQUIREMENTS` 对 draft primary/fallback 的能力矩阵、缺证据和证据过期做阻塞检查,low 缺 probe 只 warning,reserved 槽当前只展示候选/缺口,除非 draft 显式配置运行时,否则不接 runtime 消费;`backend/.control_plane/pmflow-routing-rules.json` 只作为 baseline rule pack 与冷启动 fallback。MCP 页负责模板化配置、后端直连/Local Bridge 状态展示、runtime probe、命令预览与本机确认;contract sync、route/context、knowledge graph 和 semantic facts 页属于平台 AI Ops 排障治理入口。
- AI Routing Governance P5 已把 AI 路由治理验收锁进平台 AI 运营中心:后端 `backend/app/api/ai_routing.py` 提供 `overview / team-policy / admin-console / diagnostics` 包络接口,`backend/app/services/ai_routing_governance_service.py` 负责脱敏 provider/model/base URL 摘要、scene-slot matrix 与 recent failure 样本聚合;`PUT /ai-routing/team-policy` 只写 `integrations(type='ai_team_policy')` 并记录 `operation_logs(entity_type='ai_routing_policy')`,不改 PMFlow OS 主链、Space、Account Settings、control-plane routing rules 或运行时模型真源。`backend/tests/test_ai_routing_governance_service.py` 与 `frontend/src/pages/ai-routing/AIRoutingPages.test.tsx` 锁定负责人视图不出现 provider/model、admin console 默认隐藏 `function_name` 且 recent failure 不泄露 prompt/key。
- `/platform/prompt-assets` 属于平台质量与事件层,不是客户空间 Prompt 策略页。它可展示平台内部 prompt 正文、默认模板 hash、active/draft release、release gate、replay run、质量归因、golden case、调用点和迁移缺口;客户空间、Space、Project Launch 和项目级 AI 副驾不得暴露 prompt body。标记为 `inline_discovered` / `needs_migration` 的资产只代表已完成清单梳理,运行时仍需单独迁移调用点到 PromptRuntimeService/PromptReleaseService 后才算可运营生效;已迁移调用点必须只消费 active release,当前 tenant 和平台运行租户都缺失 active release 或 release 渲染失败时 fail-closed,不得使用代码内 fallback prompt;`guarded_release` 可创建候选但激活必须通过 replay/schema/golden case 门禁,当前 golden replay 无 active golden case 或无最新 replay run 时保持阻塞;LLM 回放只允许通过本地路由层和显式 routing_meta 执行,不在运营页硬选模型。
- Workspace / Platform 账号边界:当前新增兼容层 `tenant_memberships / tenant_invitations`,把产品语义从“企业租户账号”收敛到 `solo-first, team-ready` 的个人空间/团队空间。手机号是登录、自注册与邀请绑定的主身份,后端通过 `phone_verification_codes`、`users.phone_e164` 和 `tenant_invitations.phone_e164` 串起“验证手机号 -> 创建或绑定账号 -> 创建个人空间 -> 接受团队邀请”的链路。用户账号不归团队所有;注册或受邀创建账号时必须有个人空间,接受邀请只是增加团队空间 membership,退出团队空间后仍保留个人空间。PMFlow 内部平台身份由 `platform_memberships` 单独承载,并在登录响应和 `/users/me` 返回 `platform_context`,客户空间 `OWNER` 不自动拥有平台能力。历史数据修复由 `backend/alembic/versions/20260428_repair_admin_yangyu_workspace_state.py` 承接:`tenant_id=1` 保留为旧团队空间,admin/yangyu 的当前激活 `users.tenant_id` 分别指向自己的 personal workspace。
- AI 路由与供应商用户可见层必须脱敏并分平面:成员视图不得出现 low/high、provider、model、`function_name`、`api_env`、raw routing meta 或明文 key;客户空间负责人只看“质量优先 / 成本均衡 / 速度优先”和项目启动、需求结构化、任务拆解、人员匹配、内部问答、外部查询、飞书理解、飞书回复等场景策略;平台 AI Ops 的业务场景路由也不展示 `function_name`,函数级路线只允许隐藏 Route Lab 只读诊断。
- 左侧导航不再展示团队负载、能力管理、用户管理或 AI 运营中心作为一级产品入口;旧 `/projects`、`/users`、`/users/:id/profile`、`/users/:id/skills`、`/users/:id/skill-tasks/:skillId`、`/workloads`、`/workloads/:id` 与 `/dashboard` 均只作为兼容入口:`/projects` 跳转 `/space/projects`,用户相关旧路径跳转 `/space/settings/members` 或成员详情,`/workloads*` 跳转 `/team-layer?view=capacity`,`/dashboard` 跳转 `/space`。用户可见语义分别收敛为所有项目、成员与权限、团队今日容量;`/space/projects` 使用空间壳承载项目集合和主流程分流,删除等高风险项目动作只放入高级操作;`/team-layer` 承载 reviewer routing、Team Feed、执行能力、自适应容量、负责人容量模拟/调整与团队空间预留;客户侧 AI 使用设置归入 `/ai-config`,PMFlow 平台 AI 路由、供应商和语义治理归入 `/platform/*`。项目级页面通过顶部/右侧 `AI 副驾` 消费 AI 能力,只展示副驾状态、上下文缺口、待确认和项目流程跳转,不提供供应商、模型、MCP 模板或底层路由配置。
- PMFlow OS 原型页是前端独立产品域,不复用 `AI Steward` / `Project Board` 的旧信息架构;新页面只允许消费 `frontend/src/features/pmflow-os/store.tsx` 的共享状态和行为组件,避免把原型再拖回 SSTC/治理后台语义。个人空间首页、新项目启动台和 Account Settings 同样是独立产品域:Space 只能通过 `frontend/src/api/space.ts` 做项目摘要、PMFlow OS `truth-state / execution-summary / execution-capabilities` 的只读聚合并跳回主流程;Project Launch 默认走真实 draft/confirm 创建链,只有显式 demo 参数才使用本地状态机;Account Settings 只管理个人资料、偏好和通知,不改 OAuth/JWT/auth core、PMFlow OS truth store、Project Memory、ChangeSet 或 Execution Bridge 写回。
## 6. 工具与运行库存
- `backend/scripts/repair_requirement_plan_history.py`
- `scripts/start_model_probe.sh`
- `scripts/model_probe.py`
- `scripts/gen_task_brief.sh`
- `scripts/check_contract_sync.sh`
- `frontend/playwright.config.ts`
- `frontend/vitest.setup.ts`
- `frontend/e2e/feishu-project-full-flow.spec.ts`
- `frontend/scripts/dev-entrypoint.sh`
- `frontend/scripts/login-live-check.mjs`
- 前端到后端访问链路已收敛为同源 `/api`:开发环境由 Vite proxy 转发,生产环境由 nginx `/api` 反代;临时外网访问脚本与浏览器侧绝对 API base 配置已移除。
## 7. 维护建议
- 想看“现在怎么跑、边界怎么定”:先看 `AGENTS.md`,再看 `CLAUDE.md`
- 想看“模块都搬到哪里了、目录怎么分组”:看本文档
- 想看“接口/数据流契约”:看 `docs/architecture/API_CONTRACTS.md` 与 `docs/architecture/DATAFLOW.md`