48 KiB
48 KiB
PMFlow 项目结构说明(CLAUDE.md)
1. Agent 入口文件(你关心的“进项目先读什么”)
AGENTS.md:Codex/Coding Agent 的主规则入口(优先级最高的项目级约束)CLAUDE.md:面向 Claude 风格的项目说明文档(补充背景)- 建议:规则放
AGENTS.md,架构/目录说明放CLAUDE.md - 当前 AI 行为的系统宪章已在
AGENTS.md中升级为“事实层 / 评审层 / 生成层 / 执行层”四层分治;所有新增 AI 业务默认按该宪章接入。CLAUDE.md当前承载的是“架构说明 + 运行边界 + 目录库存”,不再假定自己只包含背景说明 - 新增执行约定:计划类需求一旦确认进入实现阶段,默认连续执行到“实现完成 + 验证完成 + 统一回复验收结果”;仅在明确阻塞、高风险冲突、context 限制或用户主动中断时才中途打断。
- 新增 bugfix 执行约定:缺陷修复/回归修复允许跨多个直接相关文件端到端完成,不再按文件数硬性拆分;但必须同时满足“改动范围围绕同一根因”“不夹带无关重构”“最终附带编译/测试验证”。大功能开发或结构性重构仍优先按子任务拆分。
- 新增发布约定:凡后端代码或数据库迁移发生改动,完成编译/测试后必须继续执行当前环境对应的热部署/重启/重载步骤,确认服务已加载新版本;若当前机器不是部署环境、缺少权限或不具备热部署条件,必须在结果中明确说明未执行原因与阻塞点,禁止默认省略。
- 新增前端快回路约定:
L1 微调默认走verify:login-fast或 focused screenshot,L2 视觉逻辑默认走verify:login-responsive或capture:login:matrix,出现context_compacted或超过8分钟仍未落代码时优先收口或切线程。 - 新增并行开发约定:多个 Codex 线程可以按
Main Flow / Space / Account Settings / Shell Integration等大模块 lane 长期并行,但实际执行仍必须按 Packet 分派,声明module_lane / read_scope / write_scope / forbidden_paths / shared_files / cross_lane_inputs / cross_lane_outputs / base_ref,默认使用codex/<packet_id>独立分支和独立 worktree;共享路由、导航、Provider、API base 和文档只能由 integration owner 统一合并。当前 P0 已冻结 route 归属:/space归 Space,/pmflow-os / /command-center / /change-review / /execution-bridge / /release-growth归 Main Flow,/me归 Account Settings,/settings仅为 reserved route、尚未实现。 - 下面各节中大量
新增/更新/移除清单用于保留“当前架构库存”和关键入口索引,不等同于运行时主规范;行为约束与禁止项仍以AGENTS.md为准。
2. 项目定位
- 项目名:
PMFlow / Neural Sync - 形态:AI 原生项目管理系统(多租户 + 角色权限 + SSTC 工作流)
- 技术栈:
- 后端:
FastAPI + SQLAlchemy + Alembic - 前端:
React + TypeScript + Vite + Tailwind + Radix + React Query
- 后端:
3. 顶层目录(精简版)
AIProjectManger/
├── AGENTS.md # Agent 执行规则(建议优先维护)
├── CLAUDE.md # 当前架构说明与运行边界
├── start.sh / stop.sh # 一键启动/停止入口
├── docker-compose*.yml # 容器编排
├── mdproject/ # 执行计划与任务清单(中文为主)
├── backend/ # FastAPI 后端
├── frontend/ # React 前端(后台工作台 + 登录页)
├── scripts/ # 根目录运维脚本
└── docs/ # 额外文档
- 详细架构库存已迁到
docs/architecture/ARCHITECTURE_INVENTORY.md。 - 本地预览端口现按职责拆分:
docker-compose.dev.yml的热更新开发前端固定占用5174,docker-compose.yml的静态生产预览前端默认改为5175(可通过FRONTEND_PROD_PORT覆盖),避免再和 Vite live preview 抢端口。 docs/architecture/当前包含:MASTER_CONTRACT.md、RUNTIME_GUARDRAILS.md、CODE_REFERENCE_INDEX.md、API_CONTRACTS.md、DATAFLOW.md、TASK_BRIEF_TEMPLATE.md、ARCHITECTURE_INVENTORY.mddocs/PMFLOW_PRODUCT_BLUEPRINT.md是当前产品蓝图真源:定义 PMFlow 为“对话驱动的 AI 产品执行操作系统”,并锁定solo-first, team-ready、项目真相层、待确认变更中心、执行桥、人机混编团队等产品方向。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 收口;仍不新增 route/nav、不接真实通知中心。docs/PMFLOW_UI_CONTRACT.md是 PMFlow UI 契约真源:锁定 Logo、浅色白底 +#2463EB、移动端固定底部导航、用户动作/AI 操作/系统状态/待确认视觉语法、核心功能 canonical 契约和当前前端一致性审计;后续原型图和代码化原型不得绕过该文档。docs/superpowers/plans/保存实现计划,docs/superpowers/specs/保存需求/方案规格,docs/task_briefs/保存任务包产物与验收截图。- 当前与“统一 AI handoff / 全量业务结构化”直接相关的设计规格包括:
docs/superpowers/specs/2026-04-17-unified-project-ai-handoff.md、docs/superpowers/specs/2026-04-19-interaction-boundary-four-level-contract-design.md、docs/superpowers/specs/2026-04-20-full-business-structuring-and-conversation-baseline-design.md与docs/superpowers/specs/2026-04-20-business-golden20-refresh.md;它们分别对应统一入口与项目型 AI 方向、四挡 interaction boundary、全量业务结构化与 58 条广覆盖语义矩阵,以及面向当前真实项目池和 plan mode 主链的 20 条核心黄金案例。
4. 后端结构(backend/)
backend/
├── app/
│ ├── api/ # 路由层(canonical 入口优先使用 *_api/ 子包)
│ ├── core/ # 配置、日志、启动与核心能力
│ ├── dependencies/ # 鉴权/租户等依赖注入
│ ├── middleware/ # 请求中间件
│ ├── models/ # SQLAlchemy 模型
│ ├── schemas/ # Pydantic 模型
│ ├── services/ # 业务服务(已目录化收敛)
│ ├── config/ # 配置与 prompt
│ └── utils/ # 通用工具
├── alembic/ # 数据库迁移真源
├── scripts/ # 后端运维/修复脚本(含历史 backfill / requirement-plan 修复)
├── tests/ # 后端回归测试
├── requirements.txt
└── Dockerfile
- 当前后端重点入口优先看:
backend/app/api/下的*_api/子包与聚合 routerbackend/app/services/ai_pmo/(AI PMO 主链、Mounted Runtime、semantic context)backend/app/services/ai_pmo/project_operating_context_builder.py+backend/app/schemas/project_operating_context.py(统一ProjectOperatingContext / ProjectFitBrief / ExecutionRecipe合同;/rag/ask、/ai-pmo/process-text、kernel ingress 会先补当前项目/仓库/线程锚点,再给 Query Route Gateway、fit brief builder 与 answer payload 消费)backend/app/schemas/analysis_packets.py+backend/app/services/analysis_packet_builder.py+backend/app/services/analysis_project_snapshot_loader.py(统一 analysis packet family:在 runtime truth 之上增量生成project_fit_analysis / external_impact_analysis / internal_explain_analysis / followup_explain_analysis;当前 richer packet 已显式带current_subject / candidate_position / rejected_position / reason_chain这类对象级分析字段,供 Web、Feishu、QA session replay 的分析型展示消费;shared loader 统一补 richertasks/signals + description/summary + analysis_object_refs,但 loader 现已 fail-closed,不再从 task/signal 标题描述推 task-signal 关系或 fit 对位;builder 主路径只吃显式 object ref、精确文本绑定和唯一候选这类非语义结构证据,不再使用 token-overlap、partial-match 或本地词表 second-guess 上游关系)backend/app/services/adaptive_rag_service/mixin_target_resolution.py(internal target resolution 现已按 business-frame-first 收口:goal_kind / target_scope / resource_role / project_binding / object_binding / expected_answer_shape先决定 project/task/signal/config/feature/doc/user 绑定;session follow-up project binding、internal domain clarify 与 semantic filter 都只看结构化 frame,不再靠subject_focus / referenced_objects这类 coarse 字段拍板对象)backend/app/services/adaptive_rag_service/shared_utils.py+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(AdaptiveRAG read-side 兼容层现已统一改成 business-frame-first:deterministic query、fast answer、structured DB retrieval、deep guard、feature evidence 与 internal query plan 都只消费BusinessSemanticFrame / target_resolution / query_plan归一化后的结构,不再用subject_focus / referenced_objects做 project/task/signal/config/feature/doc/user 的二次分流)backend/app/config/ai_prompts.py+backend/app/services/adaptive_rag_service/mixin_core_intent.py+backend/app/services/adaptive_rag_service/mixin_query_route_gateway.py+backend/app/services/adaptive_rag_service/mixin_session_state.py(query semantics 上游真源已同步切到business_frame + query_profile(needs_private_context, needs_freshness, confidence):production backend 不再生成、透传或持久化subject_focus / query_profile.referenced_objects,route snapshot、follow-up scope continuity 与 session state 只保留 project/target/business-frame binding 这组结构)backend/app/services/adaptive_rag_service/(只读问答主链;mixin_query_route_gateway.py负责 non-planquery.answer的 internal/external/uncertain 来源合同归一化、contract 审计与显式来源回复合同;mixin_project_fit_brief.py负责 current-project customer-safe fit brief;mixin_answer_retrieval.py现已把route_mode=external接到独立外部查询主链,并在 payload 暴露fit_brief / external_recommendation;internal 路径新增internal_query_context.py里的InternalContextPacket作为Operation Contract -> Target Resolver -> Query DSL Plan -> 受控执行器 -> semantic facts 优先 -> verifier的运行时单一真源)backend/app/services/adaptive_rag_service/mixin_fast_answer_project_main.py+backend/app/services/ai_pmo/ai_pmo_typed_executor_execute/mixin_execute_query_project.py+backend/app/services/ai_pmo/ai_pmo_kernel/ai_pmo_typed_executor_mixins_parse.py(runtime 去 lexical fallback 的关键入口:project progress fast answer bypass 现在只吃结构化interaction_level / goal_kind / resource_role / expected_answer_shape;casual chat 直答只吃message_intent=casual_chat;project lookup 直答只吃结构化message_intent=project_lookup(_question) + query_semantics;signal 数量与 strict analysis 只吃结构化requested_count / analysis_mode / operation_intent_contract,不再从自然语言里靠词表/正则判断)backend/app/services/adaptive_rag_service/mixin_target_resolution.py+backend/app/services/adaptive_rag_service/mixin_deep_guard_answer.py(internal config 主链:resource_role=config不再默认降成泛化config:system;必须靠显式object_binding区分config:model_routing与config:mcp_template_center,并分别走模型路由快答与 MCP 配置快答)backend/app/services/adaptive_rag_service/internal_domain_catalog.py+mixin_target_resolution.py+mixin_followup_anchor.py+mixin_answer_precheck.py+mixin_answer_payload.py(internal object/domain clarify 主链:当前 catalog 已覆盖project / task / signal / config / feature / doc / user;当 internal query 只确认到大域、还没唯一命中子对象时,先产出internal_target_selection澄清协议;follow-up 选项会回填query_semantics_overrides再继续受控检索,避免“澄清后继续复读旧答案”)backend/app/config/ai_prompts.py(PROMPT_RAG_QUERY_SEMANTICS现在明确要求 internal domain 问答把resource_role / object_binding打出来;模型配置示例绑定config:model_routing,MCP 配置示例绑定config:mcp_template_center,功能/文档问法则分别绑定resource_role=feature/doc)backend/app/services/adaptive_rag_service/mixin_followup_anchor.py+mixin_answer_mainline.py(follow-up 澄清恢复主链:query_route_selection / followup_anchor_selection现在先走统一结构化澄清解析,再把source_policy_hint / query_semantics_overrides / selected_qa_id透回主链;用户澄清“第二条/内部那个”后,不再靠本地词面去猜上一轮回复或 option)backend/app/services/integrations/feishu_signal_pipeline/mixin_intent_gate_core.py+mixin_context_prefill_a.py+mixin_context_prefill_b.py+mixin_serialization.py(Feishuproject.create预填链现在统一吃_extract_project_prefill()的结构化suggested_name / suggested_description / suggested_scope,不再在 runtime 用_extract_project_scope / _extract_project_intent_fields / _is_contextual_project_request / heuristic_*之类词面 helper 扣项目字段)backend/app/api/rag_api/routes_route_governance.py(manager-only 的 route/context 治理接口:/rag/query-route-governance/summary|items|items/{id},只读暴露query_route_memories的 summary/list/detail)backend/app/services/external_query_service/(externalquery.answer主链:External Query Planner -> External Query Gateway -> External Provider Registry -> MCP 优先 -> bounded fallback live search -> verifier -> ExternalContextPacket -> ExternalAnswerPresenter;其中schemas.py负责结构化 plan/evidence/context packet,presenter.py负责 external-only 回答生成。当前已额外支持“推荐外部信号源”问法:recommendation ask 的进入条件优先来自统一语义规划层透传到ExternalQueryPlan.interaction_level=recommendation的结构化层级,不再由 presenter 本地 cue list 拍板;命中后不再退回external_verifier_blocked拒答,而是先产出SignalSourceRecommendationPacket(candidates + caveat),再渲染成业务中文的top-N candidate + why;recommendation 结果现在还会同步沉成可 carry-over 的 candidate set 绑定(candidate_set_id + candidates + materialization payload),供 reply-anchor follow-up 继续走 non-plansignal_source.onboard直写链,不再默认 requirement draft;即使当前外部公开资料仍在校验,也只允许显式标成“推荐,不是已验证事实”,不能滑回架构腔或边界空话)backend/app/services/mcp_config/(MCP 模板接入中心:catalog、bundle 持久化、后端直连 runtime probe / Microsoft Learn 检索桥接、Local Bridge 接入说明与本机确认状态)backend/app/services/semantic_fact_service/(semantic facts 读模型、八类业务对象统一抽取/失活、ORM 提交钩子入队、治理看板查询)backend/app/api/semantic_facts_api/(semantic facts 治理后台接口:overview / objects / detail / reextract / backfill)backend/app/api/mcp_api/(MCP 模板接入中心后台接口:catalog / servers / validate / confirm-client-apply)backend/app/services/llm_service/(显式routing_meta协议)backend/app/services/integrations/feishu_integration_service/(飞书入站与卡片回调;mixin_receive_routing.py的qa_direct现已支持 recommendation ask 直出推荐正文,并把原始Project database / signal_total / 当前盘面 / 建议动作 / External Freshness Guard这类内部/英文术语压成单行中文来源说明)backend/app/services/signal/(信号接入、编排、planner、repair)
- 本轮新增的问答路由审计存储为
backend/app/models/query_route_memory.py,通过backend/alembic/versions/20260415_add_query_route_memories.py建表;只用于 route audit / feedback 回灌 / 离线评估,不做在线自动调参。 - 本轮新增的语义事实读模型为
backend/app/models/semantic_fact.py与backend/app/models/semantic_fact_extraction_run.py,通过backend/alembic/versions/20260415_add_semantic_facts.py建表;用于内部查询的 facts-first 命中与异步抽取审计。 - 本轮新增的外部查询 fallback、fit brief 与展示回归测试位于
backend/tests/test_external_query_planner.py、backend/tests/test_mcp_external_query_bridge.py、backend/tests/test_internal_query_context_packet.py与backend/tests/test_adaptive_rag_mainline_contract.py;它们一起锁定“Query Route Gateway 不再跑 runtime probes、External Query Planner fallback 不再按对象重分类、fit brief 会显式进入 external planner、external answer presenter 必须区分verifier_blocked / no_relevant_results / retrieval_failed / indirect_only、external freshness follow-up 不再靠硬编码词表”。 - 详细目录迁移、兼容壳清理与新增模块清单见库存文档。
5. 前端结构(frontend/)
frontend/
├── e2e/ # Playwright 真实浏览器 E2E 用例
├── src/
│ ├── api/ # 接口封装
│ ├── features/ # 新产品域与原型状态机(如 PMFlow OS / 个人空间 / 新项目启动台)
│ ├── pages/ # 页面级组件(已目录化)
│ ├── components/ # 通用组件与 SSTC/Inbox 共享组件
│ ├── hooks/ # 自定义 hooks
│ ├── lib/ # 通用工具
│ ├── stores/ # 状态管理
│ ├── router/ # 路由
│ └── types/ # TS 类型定义
├── package.json
├── playwright.config.ts
└── vite.config.ts
- 当前前端重点入口优先看:
frontend/src/api/(统一 API 封装)frontend/src/router/index.tsx(顶层路由懒加载入口;登录页与 Layout 保持同步首屏,登录后默认主入口已切到/command-center,/space、/project-launch、/pmflow-os与/me是可直接打开的个人空间 / 新项目启动台 / PMFlow OS 项目上下文 / 我的账号入口,/command-center也提供免登录产品预览壳,其余后台重页面按 route-level lazy 进入)frontend/src/features/personal-space/(个人空间首页;通过frontend/src/api/space.ts只读聚合项目摘要、PMFlow OS truth-state / execution-summary,承载继续推进、待确认、AI 正在推进、草案箱和最近项目入口)frontend/src/features/project-launch/(首次进入页 / 新项目启动台;默认调用真实frontend/src/api/pmflowLaunch.tsdraft/confirm API 创建项目,只有显式?demo=1或?dataSource=demo才启用本地 mock 演示状态机)frontend/src/features/account-settings/(/me个人中心与设置;通过frontend/src/api/accountSettings.ts管理个人资料、默认语言、AI 回答深度、证据展示偏好和通知偏好,移动端使用分组列表与 bottom sheet,不进入 auth core)frontend/src/features/pmflow-os/(PMFlow OS 前端产品域;共享 truth store 已支持?projectId=<id>读取真实后端 projection,真实模式下 message、proposed_itemsextraction、ChangeItemaccept/edit/defer、ChangeSetcommit、review decision、Team reviewer routing、单条 iteration recommendation -> ChangeSet draft 与同组 iteration recommendation 批量 -> ChangeSet draft 均调后端,显式?demo=1才启用本地演示状态机)backend/app/api/pmflow_os_api/+backend/app/services/pmflow_os_projection_service.py+backend/app/services/pmflow_change_review_service.py+backend/app/schemas/pmflow_os.py+backend/app/models/pmflow_change_review.py(PMFlow OS A3/C1/C2/P8 真实路径;提供truth-state、execution-summary、thread message、proposed_itemsextraction、ChangeSet detail、ChangeItemaccept/edit/defer、ChangeSetcommit、review decision、execution handoff/progress writeback、release validation run、release feedback ingest、Team reviewer routing、recommendation change-set draft 与 recommendation group change-set draft;复用truth_nodes / tasks / semantic_facts / ai_project_control / dev_sync / FeedbackIngest / IterationRecommendation并投影pmflow_threads / pmflow_thread_messages / pmflow_change_sets / pmflow_change_items / pmflow_approvals / pmflow_evidence_links;truth-state.reviewerRouting是{status, warningCode, summary, items}合同,生成建议审查人/原因/来源/风险/跳转 URL,并投影reviewDecision / approvalState / requestedAt / decidedAt / decisionReason;POST /pmflow-os/change-sets/{change_set_id}/review-decisions支持 request_review/approve/request_changes/reject,复用PMFlowApproval审计,不自动 commit;C2 commit 默认 atomic,ModelDecision / MetricSignal暂 fail-closed)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(Project Launch Phase B 真实创建链;drafts只写pmflow_launch_drafts,confirm在同一事务写真实 Project、启动线程、启动消息、初始 truth_nodes、tasks 与 semantic_facts seed)docs/architecture/PMFLOW_OS_PRODUCT_CONTRACT.md(PMFlow OS 产品合同真源;真实后端接入前先读,锁定本地 truth store 对象与truth_nodes / tasks / semantic_facts / ai_project_control / dev_sync的映射;Phase C1 review 表和审查 API 已实现,Phase C2 backend/frontend commit 已实现)frontend/src/pages/inbox/(消息台)frontend/src/pages/ai-steward/(AI 管家)frontend/src/components/ai-steward/(问答浮窗、状态条、回答元卡片;FloatingQAChat.tsx现会透传并回放project_operating_context / execution_recipe / fit_brief / external_recommendation / analysis_packet / recommended_next_step,QAConversationStatusBar.tsx与QAResponseMetaCard.tsx负责显性展示)frontend/src/pages/ai-config/mcp-config/(AI Config -> Governance Tools 下的 MCP 模板接入中心)frontend/src/pages/query-route-governance/(AI Config -> Governance Tools 下的 route/context 治理页)frontend/src/pages/semantic-facts-board/(AI Config -> Governance Tools 下的 semantic facts 治理页)frontend/src/components/layout/LazyBoundary.tsx(统一 route/page-section/dialog 级 loading skeleton)frontend/src/components/login/(公开登录页组件目录;LoginExperience.tsx负责双栏登录壳,LoginWorkflowVisual.tsx负责左侧场景,loginScene.ts/loginMath.ts拆出展示配置与路径几何,login.css收口登录页专属样式)frontend/src/api/queryRouteGovernance.ts(route/context 治理页前端 API)frontend/src/pages/scheduler-center/(Mounted AI Console)frontend/src/components/sstc/(SSTC 工作流组件)frontend/src/pages/user-skills/components/UserSkillsRadarPanel.tsx与frontend/src/pages/workload-detail/components/WorkloadTrendChart.tsx(图表按页面内二级 chunk 拆分后的入口)
- 页面目录化、Mounted AI Console、Inbox、AI Steward 与 Recipes/Projects/Users 等模块化拆分的详细库存见库存文档。
- 顶层路由已改为
React.lazy + Suspense,统一 fallback 使用frontend/src/components/layout/LazyBoundary.tsx;AI Steward / AI Config 页面按 active tab 只渲染当前可见区块,Projects/Users/图表页则把重对话框与图表从同步入口拆出。 frontend/src/features/project-launch/是新项目启动台独立产品域:types.ts / useProjectLaunchState.ts承载状态合同和真实 API 编排,mockData.ts只在显式 demo 模式下使用;默认路径调用POST /pmflow-launch/drafts生成可审查草案,确认后调用POST /pmflow-launch/drafts/{draft_id}/confirm创建真实项目并跳转/pmflow-os?projectId=<id>。LaunchShell桌面端复用frontend/src/features/personal-space/components/SpaceChrome.tsx的空间左侧栏和顶部条,主画布仍由IntentInputPanel / AIProgressCanvas / HumanReviewCanvas / DraftEditCanvas / FailureStatePanel / SuccessTransitionPanel承接,移动端仍由MobileLaunchLayout承接;frontend/src/pages/ProjectLaunchPage.tsx仅做薄入口。frontend/src/features/personal-space/是空间层入口:PersonalSpacePage.tsx承接桌面个人工作面与独立移动单手布局,frontend/src/api/space.ts只读聚合projectssummary、PMFlow OStruth-state、execution-summary并生成nextActionQueue我的下一步队列、继续推进、待确认、review attention、发布关注、发布后反馈关注、下一轮迭代草稿关注、AI 正在推进、草案箱、最近项目摘要;Space P6 的下一步队列按高风险待确认、发布阻塞/失败证据、handoff consumed 后缺少后续 progress、下一轮 draft、发布后反馈/收入/合规信号排序;Space P7 新增review_attention,只读消费truth-state.reviewerRouting,按高风险待我审、request_changes / rejected后待处理、reviewer_missingwarning、普通 pending review 排序进入“我的下一步”,点击只跳/change-review?projectId=<id>&changeSetId=<id>、已有/team-layer?projectId=<id>、/execution-bridge?projectId=<id>或/release-growth?projectId=<id>;Space P3 的发布关注优先消费truth-state.releases的 release validation 投影,没有验证投影时才回落execution-summary.releaseGate;Space P4/P5 的发布后反馈/下一轮草稿关注只读消费execution-summary.releaseSignals;不在 Space 写 Project Memory、PMFlowApproval、ProgressEvent、ReleaseValidationRun、FeedbackIngest、RevenueEvent、ComplianceCheckRun、ChangeSet 状态或发布执行,不虚构 reviewer、审查意见或待审 ChangeSet。components/SpaceChrome.tsx承接空间层左侧栏、顶部条与空间用量组件,并被/project-launch桌面首次新建壳复用;frontend/src/pages/PersonalSpacePage.tsx仅做薄入口。frontend/src/features/account-settings/是 Account Settings 独立产品域:AccountSettingsPanel.tsx承接/me桌面设置页、移动端分组列表与 bottom sheet,frontend/src/api/accountSettings.ts定义个人资料、默认语言、AI 回答深度、证据展示偏好和四类通知偏好合同;当前已有账号同步 API fallback、本地 UI 通知消费模型、Release/Growth 偏好 helper、post-release / next change review 偏好 helper、getAccountReminderConsumption(settings, event)提醒强度消费合同,以及getReviewDecisionNotificationPreference(settings, event)review decision 偏好合同;支持reminderIntensity=silent|normal|prominent与evidenceDisplay=compact|expanded,并覆盖review_requested / review_approved / review_changes_requested / review_rejected / high_risk_approval_required;releaseGate / failureAlert / pendingConfirmation / executionWriteback只影响页面内提醒表达强度和证据展开方式,不代表真实邮件、桌面推送或系统通知中心已接入,也不得隐藏真实业务证据、reviewerRouting、approval 或审计状态,不改 OAuth/JWT/auth core;frontend/src/features/pmflow-os/pages/AccountPage.tsx仅做薄入口并复用既有退出登录 bottom sheet。frontend/src/features/pmflow-os/当前承载新的对话驱动前端产品域:store.tsx提供共享 truth store;真实模式通过?projectId=<id>调用frontend/src/api/pmflowOs.ts读取后端ProjectTruthStateprojection,并调用真实 message、proposed_itemsextraction、ChangeItemaccept/edit/defer、ChangeSetcommit、review decision、Execution Handoff create/consume、execution progress writeback、release validation run create、release feedback ingest、单条 iteration recommendation -> ChangeSet draft 与同组 iteration recommendation 批量 -> ChangeSet draft API,成功后 refetch truth-state / execution-summary;显式?demo=1才启用command_idle -> ai_extracting -> extraction_ready -> review_open -> writeback_success本地演示状态机,以及本地promoteAcceptedToGraph等演示动作。pages/下包含CommandCenter / StructuredExtraction / ChangeReview / MemoryWritebackResult / WorkGraph / ExecutionBridge / ReleaseGrowth / TeamLayer / ProjectMemory / Account主页面;ChangeReviewPage真实模式可请求审查、通过、要求修改或拒绝当前 ChangeSet,展示审查状态、建议 reviewer、审查意见和 high-risk approval gate,但不自动 commit;TeamLayerPage真实模式读取state.reviewerRouting展示 ready/empty/warning、待审 ChangeSet、来源、风险等级、建议审查人或 fallback role、审查原因、待审 item 数、证据数、审查状态、审查意见和请求/决策时间,动作跳转/change-review?projectId=<id>&changeSetId=<id>;ExecutionBridgePage已支持创建 handoff、运行端领取确认和执行进度回写;ReleaseGrowthPage真实模式展示execution-summary.releaseGate、execution evidence、阻塞原因、下一步动作、latestValidationRun和releaseSignals,可创建 release validation run、摄取发布后 feedback、展示 recommendation quality grouping、从真实 recommendation 单条或同组批量生成下一轮待确认 ChangeSet draft,并消费 Account notification preference 静默强调型提醒,但不隐藏真实证据、审计状态或发布后信号;静态发布/增长原型仅保留在显式 demo 模式;后端只记录 review decision/progress/release gate/release validation/release feedback/recommendation draft 元数据,不执行本机命令、真实发布命令、外部支付、真实推送、自动 Project Memory commit 或正式任务创建;ProjectMemoryPage在真实模式消费后端truth_nodes + semantic_facts的projectMemory投影,真实模式下 accepted/edited ChangeItem 只有 commit 成功后才进入 Project Memory。components/下除了ProjectStageRail / ThreadComposer / ExtractionRail / ChangeGroupPanel / ObjectGraphSection / ContextPacketPanel / ExecutionTimeline / ReleaseGatePanel / TeamFeedPanel之外,新增ProjectStructuredLoop / PMFlowOsFrame / AccountControls / FeedbackPrimitives等行为组件,用来承接项目指挥台、结构化提取、待确认审查、项目记忆写入结果、项目内面包屑、项目切换器、账号退出登录交互,以及PageBanner / InlineNotice / HumanDecisionBar / ConfirmDialog / MobileBottomSheet这组契约化提示提醒组件;components/MobileBottomNav.tsx是正式应用壳唯一移动底部导航,固定为空间 / 指挥台 / 待确认 / 动态 / 我的。- 旧登录实现
frontend/src/components/ui/sign-in.tsx与frontend/src/components/ui/demo.tsx已移除,frontend/src/components/login/是当前唯一登录真源。
5.1 frontend/src/components/sstc/ 目录说明(模块化拆分后)
SSTCWorkspace.tsx:SSTC 工作区主容器(组装各阶段组件)useSSTCWorkspaceOrchestration.ts:工作区编排 Hook(状态聚合、请求编排、事件路由)sstcUtils.ts:SSTC 工具函数(数据转换、状态判断、通用 helper)SSTCSignalStagePanel.tsx:信号阶段面板SSTCCharterStagePanel.tsx:宪章阶段面板SSTCTaskStagePanel.tsx:任务阶段面板SSTCExecutionBoardPanel.tsx:执行看板阶段面板SSTCReleaseStagePanel.tsx:发布阶段面板SSTCReviewStagePanel.tsx:复盘阶段面板SSTCTaskCreateDialog.tsx:任务创建弹窗SSTCReleaseCreateDialog.tsx:发布创建弹窗SSTCReviewCreateDialog.tsx:复盘创建弹窗AIVisibilityPanel.tsx:AI 可视化信息面板FeedbackSummaryCard.tsx:反馈中心摘要卡片(任务阶段/执行看板复用)SSTCGlobalHeader.tsx:SSTC 全局头部SSTCStageNav.tsx:阶段导航SSTCChainView.tsx:链路视图SSTCRiskFloatPanel.tsx:风险浮层SignalContentHoverCard.tsx:信号内容悬浮卡片charterModules.ts:宪章模块配置与映射
5.2 修改前必须执行 FIND_USAGE 的 SSTC 组件清单
SSTCWorkspace.tsxuseSSTCWorkspaceOrchestration.tssstcUtils.tsSSTCCharterStagePanel.tsxSSTCSignalStagePanel.tsxSSTCTaskStagePanel.tsxSSTCExecutionBoardPanel.tsxSSTCReleaseStagePanel.tsxSSTCReviewStagePanel.tsxSSTCReleaseCreateDialog.tsxSSTCReviewCreateDialog.tsxSSTCTaskCreateDialog.tsx
6. 运行命令(高频)
根目录
./start.sh dev # 推荐:docker-dev 热更新模式
./stop.sh dev
./scripts/start_model_probe.sh # 独立模型连通性检测(中文日志)
- 启动入口收敛:用户入口统一使用
./start.sh。 - 前端浏览器请求统一走同源
/api;开发环境由 Vite proxy 转发,生产环境由 nginx/api反代到后端。 - 运行脚本、模型探针、契约校验与 E2E 工具清单已迁到
docs/architecture/ARCHITECTURE_INVENTORY.md。 - 当前新增的 requirement-plan 历史修复工具位于
backend/scripts/repair_requirement_plan_history.py,默认 dry-run,仅在显式--apply时写回mounted_draft_workspaces / mounted_topic_workspaces。
前端
cd frontend
npm run dev
npm run build
npm test
npm run e2e:feishu
后端(本地直跑)
cd backend
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
7. 团队维护建议(简版)
- 规则变更:只改
AGENTS.md - 结构变更:同步改
CLAUDE.md+docs/architecture/ARCHITECTURE_INVENTORY.md - 运行边界 / 已知 runtime 假设变更:同步改
AGENTS.md+docs/architecture/RUNTIME_GUARDRAILS.md - API/契约变更:后端
schemas+ 前端types同步更新
8. 服务边界约束(禁止越界)
- 当前必须立即遵守的摘要规则以
AGENTS.md第 8 节为准。 - 长运行边界、跨链路守门细节、失败语义和已知 runtime 假设已迁到
docs/architecture/RUNTIME_GUARDRAILS.md。 - 当前最重要的摘要只保留:
- 写操作必须经 Alembic / 受控执行器 / outbox / 审计日志,禁止业务路径直写或同步直发。
- 用户可见核心业务内容禁止 fallback、stub、模板句冒充成功;失败必须显式失败或标记待确认。
- MCP 模板接入中心只保存模板参数、命令预览、runtime probe 和手动确认状态;
backend_direct模板可由 PMFlow 后端直连(远程streamable_httpMCP 或内建backend_adapterruntime),stdio模板只能走 Local Bridge / 兼容 MCP host;禁止从服务端直写宿主机~/.codex/config.toml或替客户执行本机命令。 - 运行时业务动作归因统一走“对象/上下文绑定 ->
SemanticContextPacket->SemanticDecision-> gatekeeper”。 backend/app运行时代码禁止恢复散落的中文关键词、正则、looks_like_*、*_HINTS/*_KEYWORDS业务拍板逻辑。llm_service只认显式routing_meta协议,不再靠函数名或 hint 推断 tier / contract / fallback。- 内部只读查询必须走
Operation Contract -> Target Resolver -> Query DSL Plan -> InternalContextPacket -> 白名单受控执行器 -> semantic facts 优先 -> verifier,其中 mainline 要先做 packet 预检,query_semantics只作上游 scratchpad/兼容镜像并且只允许单点兼容写回;禁止继续充当 internal executor 或 verifier 的运行时真源,同时禁止自由 SQL 和无证据脑补。 semantic_facts自动抽取统一走 ORM 提交钩子 ->ingest_events(channel=semantic_fact_extract)-> 统一 worker,支持project/task/signal/document/user/requirement/release/review八类对象;禁止在各路由散落手工 enqueue。- AI Steward、Requirement Plan、Signal Source、AdaptiveRAG 等核心链路的详细 guardrails 统一以
RUNTIME_GUARDRAILS.md为准。
9. 新增代码的参考模式
- 详细的接口、页面与服务参考入口已迁到
docs/architecture/CODE_REFERENCE_INDEX.md。 - 当前只保留高价值摘要:
- 新增后端接口:优先参考
backend/app/api/sstc_api/的结构 - 新增前端 API 调用:优先参考
frontend/src/api/sstc.ts - 新增数据库表:参考
alembic/versions/最新 migration - 新增飞书事件处理:参考
backend/app/services/integrations/feishu_integration_service/ - 更细的 AI Steward / RAG / AI PMO / Signal / SSTC / 前端页面入口索引统一以
CODE_REFERENCE_INDEX.md为准
- 新增后端接口:优先参考
10. 幂等与事务约束
- 所有入站事件必须经过
ingest_events幂等去重 - 飞书回复必须经过
feishu_reply_outbox,禁止同步直接发送 - 飞书回复发送幂等:
reply_hash = MD5(source_message_id + reply_text),同租户下status=sent的相同哈希不得重复发送 - 跨表写操作必须在同一个数据库事务内完成
11. 已知 BOUNDARY(不要幻构行为)
- 详细已知运行边界与环境假设统一维护在
docs/architecture/RUNTIME_GUARDRAILS.md。 - 当前高价值摘要只保留:
- 飞书回调字段可能缺失文件名/大小,仅保证
attachment_id/key/type可用。 - 真实飞书网页 E2E 依赖本机已登录的 Chrome/Feishu 会话,结果校验统一走数据库探针。
- 路由配置唯一真源固定为
backend/.control_plane/pmflow-routing-rules.json;请求超时统一以LLM_REQUEST_TIMEOUT为准。 - World Model 静态层已接入 Redis 缓存(
wm:static:{tenant_id}:{project_id},TTL 600s),写操作后主动 invalidate,动态层不缓存。 signal_sources仅作为 AI Steward 创建结果区的内联展示;项目看板与 SSTC 信号阶段统一只读正式Signal。
- 飞书回调字段可能缺失文件名/大小,仅保证
12. 技术债务清单
mixin_auto.py_safe_intNameError:已通过显式导入_safe_int+ 回归测试锁定,避免后续共享导出调整导致运行时未定义- AI 入口主链已统一:飞书长连接(
capture_from_feishu)、/ai-pmo/process-text与/rag/ask已统一收敛到AIPMOKernelService.process_ingress主链;/rag/ask通过rag_ask_contract.build_kernel_ingress_kwargs透传 RAG 上下文(session_id/new_session/thinking_mode/action_mode/...),query 执行后由build_rag_response_payload保持 HTTP 响应兼容,回归由test_rag_route_contract.py、test_ai_pmo_qa_http_mainline_e2e.py、test_ai_pmo_ingress_mainline.py锁定 - Unified Project Operating Context 已接到问答入口:
/rag/ask、/ai-pmo/process-text与 kernel ingress 现会先透传最小project_operating_context(当前项目、当前仓库摘要、页面/线程锚点),AdaptiveRAG 的Query Route Gateway进一步产出execution_recipe;external 主链会在需要时补fit_brief,回答 payload 同步暴露project_operating_context / execution_recipe / fit_brief / external_recommendation / analysis_packet / recommended_next_step / handoff_mode,回归由test_project_operating_context_contract.py、test_rag_route_contract.py、test_ai_pmo_qa_http_mainline_e2e.py、test_external_query_planner.py、test_mcp_external_query_bridge.py、test_adaptive_rag_mainline_contract.py、test_analysis_packet_contract.py锁定 - 飞书入口层耦合已收敛:飞书真实入口已拆为三段职责链(预处理
mixin_receive_prepare.py/ capture 执行mixin_receive_capture_flow.py/ 编排mixin_receive.py);mixin_receive.py不再混合传输解析、附件标准化、capture 异常兜底与收尾回执逻辑,分层边界通过test_feishu_receive_orchestration_contract.py锁定 task.create已升级为一等 typed intent:IntentResolver/RouteResolver新增task.create常量与task.create路由族;TypedExecutor 已接入任务落库执行(含project_id/任务标题槽位守卫、对齐 Charter 校验、persist_task写入);WorkflowRegistry、ReplyRenderer、followup校验与草稿确认闭环已纳入task.create;并补test_ai_pmo_task_intent_contract.py回归锁定task.create已接入消息级幂等账本:Feishusource_message_id/feishu_message_id作为task.create账本 key,重复确认只回放同一结果,不再重复落库;回归由test_feishu_pipeline_queue_contract.py锁定signal_source.onboard已接入消息级幂等账本与 non-plan 直写 carry-over:TypedExecutor 以source_system + source_message_id作为 onboarding ledger key,重复提交只回放同一结果,不再重复跑信号源接入编排;recommendation candidate set 会经reply_anchor_qa_context + action_contract沉到执行结果里,供后续把刚才推荐的写进系统 / 确认入库继续走prepare_write -> confirm_write -> execute_write直写链,而不是默认 requirement draft;回归由test_ai_pmo_signal_source_onboard_contract.py锁定- AdaptiveRAG 职责已完成首轮收敛:
answer_question入口已分层为prepare runtime与base mainline两段,写确认逻辑通过_should_trigger_write_ack_gate独立门控;基础问答主路径不再与写确认判断混写在同一函数体。分层契约由test_adaptive_rag_mainline_contract.py锁定(read 绕过 ack、write 命中 ack、feishu write 维持主链) - 执行层已形成统一执行账本与参数来源约束:ingress 执行路径统一通过
KernelIngressStorageMixin生成execution_result.action_contract(固定param_source=decision.execution_plan.actions+workflow_route+execution_result)并写入operation_execution_ledger(applied/pending_manual/pending_confirmation/failed);mixin_auto.py、mixin_prepare_manual.py的operation_code日志来源已对齐action_contract,回归由test_ai_pmo_execution_ledger_contract.py锁定 - QA/RAG 路由契约双轨已收敛:
/ai-steward/rag/ask兼容入口已移除,问答统一收敛到POST /rag/ask;参数构造与 tenant 解析收口在backend/app/api/rag_ask_contract.py,前端FloatingQAChat与 Context Cache API 目录均已对齐,backend/tests/test_rag_route_contract.py与backend/tests/test_context_cache_profile_catalog.py已锁定回归 - 三模式交互上下文基线已显性化:
/rag/ask、QA session detail 与 session state replay 现统一透出route_decision / clarification_code / clarification_candidates / answer_mode / grounding_status / evidence_pack / project_operating_context / execution_recipe / fit_brief / external_recommendation / analysis_packet / handoff_mode / can_enter_plan / recommended_next_step;前端FloatingQAChat会在即时回答与历史回放两条路径都接入这批字段,QAConversationStatusBar与QAResponseMetaCard显式展示当前对象、来源模式、仓库/执行通道、项目画像、分析结果、外部推荐状态与下一步;/ai-pmo/process-text与GET /ai-pmo/work-items现同步投影plan_mode / plan_status / requirement_plan_context_summary到 Inbox 展开区,回归由test_ai_pmo_qa_http_mainline_e2e.py、test_ai_pmo_ingress_mainline.py、FloatingQAChat.test.tsx、QAResponseMetaCard.test.tsx、InboxListItem.test.tsx锁定 - AI 管家浮窗交互已与 Grounding Runtime 对齐:回答区已切到 markdown 渲染,顾问标签升级为显式交互按钮;
consultant_mode_preference只用于/rag/ask内部重答,允许执行明确交接到/ai-pmo/process-text,避免 query/execute 边界回退到旧的一锅煮 - Retrieval source registry / metadata 已统一:AdaptiveRAG 检索链已建立统一 source registry / metadata normalizer,
citations[]/sources_used[]直接消费标准字段source_type/source_id/chunk_id/target_url/project_id/updated_at/permission_scope/source_priority;doc/url/feishu/pmflow/graph/db的来源元数据与排序键已收口,并由test_rag_route_contract.py、test_adaptive_rag_mainline_contract.py锁定 - 语义治理 baseline 已清零:
backend/app运行时代码中的looks_like_* / *_HINTS / *_KEYWORDS残留已清空,主链统一改为对象/上下文绑定 +SemanticContextPacket -> SemanticDecision -> gatekeeper;scripts/semantic_lint_baseline.txt已清空,并由scripts/semantic_lint.py与backend/tests/test_semantic_lint.py做仓库级守门 - 结构化 runtime 收口回归已补齐:
backend/tests/test_runtime_structured_semantics_contract.py额外锁定backend/app运行时代码里_is_question_like / _is_project_lookup_question / _is_capability_question / classify_intent_complex等旧语义拍板残留不得回流;backend/tests/test_feishu_pipeline_queue_contract.py同步覆盖followup线程锚点优先与 signal capture 不再依赖问句词法兜底 - 历史 Feishu 队列 /
feishu_items兼容链仍未完全退场:飞书真实入口、卡片动作、文本 queue followup,以及project_knowledge_graph的主增量/API 命名都已切到work_item主链;当前剩余债务主要是feishu_items存量读链路、历史 pending 事件兼容消费,以及 legacyfeishu_delta证据/回放兼容壳。后续需在历史存量清空后正式封存该兼容层 - AdaptiveRAG 向量检索 legacy fallback 已移除:
AdaptiveRAGRetrievalVectorMixin._retrieve_vector_context()现在只支持 PostgreSQL/pgvector 主路径;非 PostgreSQL 或 PG 查询失败时直接返回空结果,不再回退 Python 侧 legacy 扫描,边界由test_adaptive_rag_mainline_contract.py锁定 - 历史 Alembic 链幂等性缺陷已修复:
add_users_table_rbac.py的 PostgreSQL ENUM 创建已改为显式创建 + 列类型create_type=False复用,userrole/userstatus不再在同一条 migration 内重复建型;回归由test_add_users_table_rbac_migration.py锁定 - 食谱图片上传仍是示例桩实现:
backend/app/services/recipe/service.py仍以模拟 URL 代替对象存储,POST /recipes/upload-image也还停留在示例接口形态;若该模块继续保留,需要补齐真实对象存储接入、租户隔离与统一{code,message,data}响应包络,否则应明确标注为非核心示例模块 - LLM 运行时仍未完全收敛:
ai_service_core._invoke_with_retry与stream_chat已统一走llm_service;旧_get_llm路径已显式禁用,并补回归测试锁定 - QA 主链自动化测试覆盖已补齐:
backend/tests/已覆盖问答/RAG 主路径与关键场景;新增test_ai_pmo_qa_http_mainline_e2e.py通过 HTTP 层锁定/rag/ask的qa_readonly/mixed契约以及/ai-pmo/process-text的draft_pending_confirm主链返回,配合test_ai_pmo_ingress_mainline.py、test_ai_pmo_task_intent_contract.py、test_ai_pmo_tactical_brain_contract.py形成稳定回归基线 - 飞书交互闭环已补齐:执行场景回执在
draft_pending_confirm/pending_manual下优先生成按钮卡片并经 outbox 异步发送;card.action.trigger已覆盖confirm/revise/cancel/continue回调分发,分别复用DraftConfirmHandler.handle_api_decision与 AI PMOprocess_ingress主链继续执行;回调 HTTP 现在会同步返回 toast 反馈,确保点击按钮后至少有可见结果;backend/tests/test_feishu_card_action_contract.py已补卡片构造与continue回归契约