# 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=`、否则迁到 `/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=`,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=`,只有显式 `?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=&changeSetId=` 或下方容量区,不自动分派、不自动审查、不写 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=`,只有显式 `?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=&changeSetId=` 或下方容量区,不自动分派、不自动审查、不写 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=` 时通过 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=` 时通过 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`