# USER.md 本文件是这个用户在本项目内的主真源。 目标不是堆规则,而是让我在这个项目里越来越懂这个用户,稳定贴合其协作方式、判断方式、已拍板决策与反复踩过的坑。 工程、系统、安全与验证硬约束仍以 `AGENTS.md` 和更外层提示为准;若 `~/.codex/AGENTS.md` 与本文件冲突,以本文件为准。 未写进这里的内容,不默认视为本项目内已拍板决策或稳定偏好。 ## 协作偏好 ### 长期稳定偏好 - 默认先自己读项目、历史、日志、配置和运行痕迹;不要把本该我自己挖出来的东西再反问给用户。 - 默认直接推进;只在高风险分岔、破坏性操作或根因不明时停下来确认。 - 回答要直接、具体、贴当前对象,优先给证据链、调用链和真实落点;不要写成模板化汇报。 - 不确定就明确说不确定,不要假装完整。 - 已拍板方案不要反复推荐替代品;配置和偏好尽量收敛,别分散。 - 前端默认视觉标准:品牌主色固定为 `#2463EB`;浅色界面默认以白色 + `#2463EB` 为主,不再回到泛紫、泛青的 AI 套板。 - 前端默认交互和样式参考 `Linear` 的克制层级与节奏;所有用户可见内容默认使用中文,除非我明确要求保留英文。 - PMFlow 原型图默认标准:统一使用浅色白底 + `#2463EB` 主色;整体交互密度、节奏、层级、边界处理默认参考 `Linear` 的产品气质,但不照搬品牌元素;原型图内所有用户可见内容、页面标题、按钮、状态、说明、标注默认全部使用中文;默认需要考虑移动端适配,原型设计时同步关注移动端信息层级、导航结构、单手操作路径、底部安全区、滚动区域与关键交互在小屏上的可用性。 - PMFlow Logo 默认标准:以用户在本轮提供的品牌规范图为唯一 Logo 方向;主标识使用蓝色几何图标 + 深色 `PMFlow` 字标组合,图标主色沿用 `#2463EB`,字标使用深色中性黑灰;图标可独立用于应用图标、侧边栏、favicon、移动端入口和小尺寸场景;后续不要再重新发散生成其它 Logo 风格。 - PMFlow 移动端底部导航默认标准:项目创建前(新项目启动台 / 首次进入 / 草案确认流程)不展示全局底部导航,只保留顶部上下文、单列主内容、底部主 CTA 和 AI 底部抽屉;项目创建后进入正式应用壳,底部导航固定为 5 项且不得漂移:`空间`、`指挥台`、`待确认`、`动态`、`我的`。`空间` 是所有项目/想法/草案的上层入口,`指挥台` 是当前项目主工作面,`待确认` 聚合 AI 生成但需用户拍板的事项,`动态` 聚合 AI 进展/回写/系统事件,`我的` 承载账户、设置和个人偏好。具体项目内的 `工作台 / 开发执行 / 发布增长 / 项目记忆` 不进入底部导航,默认通过项目内二级入口、分段切换或更多菜单进入。 - PMFlow 同一功能原型一致性标准:同一功能一旦出现已确认原型或实现,后续再出图、改图或开发时必须先沿用该功能的既有定位、信息架构、导航壳、核心对象、状态标签和视觉语法;只能在此基础上新增状态、补充局部区域或做明确版本迭代,禁止把同一功能重新设计成另一套页面。若确实需要重构,必须先说明“旧版是什么、新版改什么、迁移影响是什么”,并得到明确确认。比如 `项目记忆` 必须区分为同一功能下的 `项目记忆主视图` 与 `项目记忆写入结果态`,二者应共享同一项目壳、对象分类、证据/确认/写入语义和右侧 AI 副驾规则,而不是两套互不相干的页面。 - PMFlow 高保真原型默认不能按“桌面原型画布宽度”锁死主内容区。桌面保真不等于固定画布:必须同时考虑普通桌面、超宽屏和小屏三档。默认规则是: - 普通桌面宽度保持原型密度与节奏; - 超宽屏必须继续扩展主内容区,或设置明确且足够宽的内容上限(如更合理的 wide container),不能让右侧出现大面积无意义留白; - 小屏必须改为堆叠/抽屉/分段,不允许直接压缩桌面三栏。 - 做 PMFlow 这类多栏产品时,默认先检查这三个点:`主内容是否被隐性画布宽度卡死`、`超宽屏是否吃满可用空间`、`右侧留白是否来自容器上限而不是业务布局本身`。 - 当前产品原型与首版体验默认面向个人开发者与 `1-10` 人小团队,采用 `solo-first, team-ready` 方向;不要按 `10-50` 人重型团队工具去设计。 - PMFlow 产品蓝图真源已沉淀到 `docs/PMFLOW_PRODUCT_BLUEPRINT.md`:PMFlow 是“对话驱动的 AI 产品执行操作系统”,不是聊天工具 + 项目管理工具,也不是 Jira 加 AI;后续产品/原型/实现默认围绕 `Project Thread -> Structured Extraction -> ChangeSet Review -> Project Memory -> Work Graph -> Execution Bridge -> Release/Growth Feedback` 主链推进。 - 团队方向已拍板为“AI-native team operating system”:单人版解决“一个人如何像团队一样推进”,团队版解决“小团队如何围绕 AI 维护的项目真相层,通过异步审查和人机混编执行协作”;不要退回传统多人维护任务表、开会同步、手动填状态的项目管理范式。 - PMFlow AI 可用状态已拍板为“双层表达”:用户端默认只表达客户可理解的业务影响、可继续动作和保护规则,不暴露供应商、路由、模型槽位、连接测试、trace、函数名或平台诊断;平台人员进入用户端也先看客户视图,只有显式平台诊断入口才看具体原因和 CTA。`/platform/*` 是平台 AI Ops 控制面,默认展示供应商、路由、诊断、模型槽位、失败样本和对应处理动作。 - PMFlow 产品推进执行标准已沉淀到 `docs/PMFLOW_PRODUCT_DELIVERY_STANDARD.md`:后续每次 PMFlow 产品推进任务完成后,Codex 默认要自己更新该文档的进度台账;新增/修改入口、API、Schema、边界时同步更新 `CLAUDE.md`、`ARCHITECTURE_INVENTORY.md`、`CODE_REFERENCE_INDEX.md`、`API_CONTRACTS.md` 或 `RUNTIME_GUARDRAILS.md`。新开线程继续产品推进时,必须先读 `USER.md`、产品蓝图、执行标准、`CLAUDE.md` 和代码索引,不得从头重想方案。 - 原型图与首版视觉交付默认只做浅色主题,不要求同时输出暗色模式;暗色模式属于后续产品实现能力,不作为当前原型标准。 - 后续只要我在本项目里让你“出原型图 / 重画原型 / 生成产品视觉稿”,若我没有额外说明,就自动沿用这套原型图标准,不要再回到深色、紫色系、英文 UI 或泛后台风格。 ### 学习与更新方式 - 会话里要持续吸收用户纠正,不要让用户反复教同一件事。 - 用户纠正某次排障或分析方式时,要吸收背后的通用思路,迁移到后续问题中;不要只把反馈当成这一次案例的补丁。 - 学到的是方法论,不是死模板:后续先找最小对照/反证,再分层定位根因并验证;但要按具体问题调整,不要机械套步骤。 - 反复出现、会长期影响判断的偏好,要主动沉淀到本文件。 - 一次性情绪、临时波动和不影响后续决策的内容,不要频繁落盘。 - 非必要不要更新真源文件;只有新信息足够稳定、能减少误判或能减少用户重复纠正时,才值得更新。 ## 判断优先级 ### 什么时候才准问用户 - 先自己查。能从代码、配置、历史、日志里读出来的,别问用户。 - 只有这几种情况才停下来: - 要做破坏性操作 - 方案真的分叉了 - 根因没搞清,继续改大概率越改越歪 - 问的时候别铺垫,直接说:已经查到什么、卡在哪、要用户拍哪个板。 ### 改错后的默认动作 - 错了就指出具体错点,别演。 - 能直接补就直接补,补完再说原因、影响和验证。 - 有扩散风险先止血,再继续修。 - 别把一次纠错搞成新的流程负担。 ### 冲突时怎么取舍 - 先查主链、上下文、路由和证据,别上来就改 prompt、补词表、补正则。 - 显式 `reply/thread`、卡片动作和当前 requirement context 优先于旧 session 和记忆续写。 - 已经进入 `requirement_plan` / draft confirm 的线程,后续必须留在对应主链,不要掉回普通 QA。 - AI 架构类回答优先讲当前调用链、入口、路由和模型网关,不要退回通用技术栈摘要。 - 证据不足时直接说不确定,不要用模板化确定性答案补满。 - 已经定过的方案别来回摇。 ## 已拍板技术决策 - 后端:FastAPI + Python 3.11+ + SQLAlchemy 2.x + Alembic - 前端:React 18 + TypeScript + Vite - UI / 样式:shadcn/ui 风格组件层 + Radix UI + Tailwind CSS - 数据与缓存:PostgreSQL + pgvector + Redis - 鉴权:OAuth2PasswordBearer + JWT - 部署:Docker Compose - 验证基线:后端 `python -m py_compile` + 相关单测;前端 `npm run build` + `tsc --noEmit` - AI 路由对外名称:PMFlow 本地路由层 - AI 路由内部主名:`control_plane` - 路由规则真源:`backend/.control_plane/pmflow-routing-rules.json` - 模型策略:业务代码不要硬编码模型名;provider / tier / model 由路由规则决定 - Prompt 策略:新增或修改运行时 LLM prompt 不得直接写死在业务服务/API 中;必须先进入 Prompt 运营中心资产合同(`ai_prompts.py` 默认模板 + `ai_prompt_registry.py` 注册 + active `prompt_releases` 运行时读取),并在 `ai_call_logs` 写入 `prompt_key / prompt_release_id / prompt_source` 归因。历史 `needs_migration` 存量只能作为待迁移清单,不得作为新增写法。 - 历史路由命名已废弃,不再把旧名字当现行架构,也不再建议回退 - 以上栈默认不再主动建议替代方案,除非用户明确要求比较或迁移 ## 反复踩过的坑 / 不要再做 - 把“AI 架构”答成通用技术栈总览,而不是当前调用链、入口、路由和模型网关。 - 证据不足时还给模板化的确定性答案。 - 短协议回复掉回通用 QA,不按当前 `thread` 和上一轮选项解释。 - 飞书连续追问时继续沿着旧上下文跑,不先尊重显式 `reply/thread`。 - 用户纠错后不先纠正当前主题,还带着旧主题继续扩写。 - 遇到链路问题先补 prompt、关键词、正则,而不是先查 routing、context、session、gatekeeper。 - 用 fallback、默认句、stub、模板话术冒充成功。 - 把本该直答的问题拖进过深推理、官样文章或汇报体输出。 - 做高保真原型时把页面按“桌面截图尺寸”做成隐性固定画布,导致超宽屏右侧出现大面积未使用留白;以后默认按“桌面保真 + 超宽屏扩展 + 小屏重排”三档检查,不再只盯原型图单一尺寸。 ## 前端快回路与线程治理 ### 前端任务分级 - `L1 微调类`:文案、字重、边框、间距、颜色、单元素位置。默认只允许 focused live 页确认或快验证,不默认跑 full build。 - `L2 视觉逻辑类`:响应式、跨屏对齐、布局算法、曲线路径、动画节奏。允许 `build + 多视口截图`,但不夹带无关文案和样式修补。 - `L3 结构治理类`:拆组件、拆路由、拆包、改 compose、改启动链路。必须单独线程处理,不和单页 comment 修复混做。 ### 线程是否继续的判断规则 - 同一对象、同一路径、同一验证面,优先留在原线程直接做完。 - 满足任两条时,优先新开线程继续:需求从分析切到实现;目标文件集合明显变化;验证方式变化;用户开始要求“完整方案/全仓整治/顺手再修几个点”;同一核心文件重复读取;线程已经发生 context compaction;已经拖过 15 分钟还没形成第一个闭环。 - 当前改动已经能独立闭环时,不顺手带 unrelated fix;尤其不要把 `L1 微调` 混进 `L2 视觉逻辑` 或 `L3 结构治理`。 ### 强制止损阈值 - 同一线程出现 `context_compacted` 后,如果任务仍未闭环,优先建议切新线程;出现两次 compaction,不再继续混合任务。 - 从用户发起到首次实际代码编辑超过 `8` 分钟,必须先说明卡点,不继续闷头探索。 - 同一核心文件读取超过 `2` 次,必须先总结当前判断,再决定是否继续读。 - 同一轮工具调用超过 `20` 次但仍没有形成首个有效闭环,必须收口范围或切线程。 ### 前端验证预算 - `L1 微调类`:优先 `verify:login-fast` 或 focused screenshot,不默认跑 `npm run build`。 - `L2 视觉逻辑类`:优先 `verify:login-responsive` 或 `capture:login:matrix`,验证目标是跨尺寸一致,不是单视口碰巧正确。 - `L3 结构治理类`:独立线程里跑 `typecheck + build + focused smoke`,不拿页面 comment 回合承载。 ## 当前知道但暂不处理的项目问题 - SQLite 已废弃,不作为当前运行时或正式技术方案;但少量历史测试夹具仍沿用 SQLite 内存库。 - `backend/tests/test_training_pipeline_service.py` 目前仍有历史 SQLite 测试夹具下的 `JSONB` 建表失败问题,这不是本轮改名引入的,需要单独清理测试基座。 - `backend/app/schemas/recipe.py` 与 `backend/app/schemas/skill.py` 仍有 Pydantic V2 的 class-based config deprecation 警告。 - 当前运行环境里的 `lark_oapi` / `websockets` 仍有上游 deprecation 警告,后续需要统一升级或兼容处理。 - Project Launch 失败页需要后续补产品化排查能力:展示本次请求耗时、后端 trace id、后端是否稍后成功生成草案,并提供“恢复最近草案”入口,用于定位前端超时/代理断开但后端实际成功的情况;当前先记录,不实现。