Co-Authored-By: OpenAI Codex <codex@openai.com> Co-authored-by: Cursor <cursoragent@cursor.com>
6.1 KiB
AGENTS.md
NeoZQYY Monorepo 顶层规则。子模块详细规范见各自 apps/*/AGENTS.md、docs/database/、apps/etl/connectors/feiqiu/AGENTS.md。
语言(强制)
始终中文:对话、解释、代码注释、commit message(中文描述 + 英文 Co-Authored-By 签名)、PR、审计、文档、错误日志。 保持原文:变量/函数/类名、第三方 API 字段名、CLI 命令、技术术语。 禁止英文段落或英文标题。
CLI / Shell 中文处理
- Python
encoding="utf-8"/PYTHONUTF8=1;CSV 给 Excel 用utf-8-sig;PowerShell/Node 不依赖系统 ANSI。 - 终端中文乱码时,不当作事实;先调编码重跑,或说明"终端编码异常,结果需复核"。
- Shell 路径含中文/空格/特殊字符必须加引号;复杂中文输出走脚本或结构化 API。
项目概览
NeoZQYY = 台球门店全栈数据平台。多门店隔离(site_id + RLS),中文领域语言,CNY,金额 numeric(2)。
| 目录 | 用途 |
|---|---|
apps/etl/connectors/feiqiu/ |
飞球 ETL:API → ODS → DWD → DWS |
apps/backend/ |
FastAPI(JWT 双认证 + WebSocket + AI) |
apps/miniprogram/ |
微信小程序 C 端(Donut + TDesign) |
apps/admin-web/ |
系统管理后台(开发/运维视角,操作 ETL 库) |
apps/tenant-admin/ |
租户管理后台(门店管理员视角,操作业务库) |
apps/demo-miniprogram/ |
MOCK 标杆小程序(样式校对,禁改) |
apps/mcp-server/ |
MCP Server(PostgreSQL 只读) |
packages/shared/ |
跨项目共享包 |
db/ |
DDL(schemas/)+ 迁移 + FDW |
tools/ |
通用工具 |
scripts/ops/ |
日常运维脚本 |
技术栈:Python 3.10+ uv workspace、React+Vite+AntD、PostgreSQL 四库(etl_feiqiu/test_etl_feiqiu/zqyy_app/test_zqyy_app,DSN PG_DSN/APP_DB_DSN)。配置分层 .env < .env.local < env < CLI。
数据库
- 六层 Schema:
meta→ods→dwd→core→dws→app(RLS 视图) - 跨库:
zqyy_app通过 FDW 只读映射etl_feiqiu.app - RLS:
site_id+app.current_site_id会话变量 - RLS 双 Schema 踩坑:DWS/DWD 表的 RLS 视图必须同时建在
dws和appschema,后端走app.v_*。只建dws会让后端查询失败。回滚需逆序 DROP。
飞球数据规范(速查)
consume_money禁止直接计算 → 用items_sum拆分字段- 取数优先级:DWS > DWD > 禁止 ODS
- 参考优先级:DWD-DOC > DWS 权威规范 > BD 手册 > ETL 任务文档 > DDL 注释
_archived/目录禁止读取或参考- 完整规则见
apps/etl/connectors/feiqiu/AGENTS.md
文件归属
| 类型 | 位置 |
|---|---|
| 模块内文档/测试/脚本 | 模块内 docs/、tests/、scripts/ |
| 跨模块文档 | 根 docs/ |
| Monorepo 守护测试 | 根 tests/ |
| 日常运维脚本 | scripts/ops/ |
| 通用工具 | tools/(按类型分子目录) |
| 审计记录 | 根 docs/audit/changes/<YYYY-MM-DD>__<slug>.md(禁止写子模块) |
| 数据库文档 | 根 docs/database/ |
| 归档/待删 | _DEL/(保持原路径,定期清理) |
docs/audit/audit_dashboard.md 由 scripts/audit/gen_audit_dashboard.py 生成,勿手动编辑。
编码前需求审问(强制)
新建功能/接口、重构、多模块联动、需求模糊时:
- 不立即动手,先提问循环(每轮 3-5 个问题)
- 必问:用户角色、核心操作、数据写入/展示/来源、错误/成功反馈、认证权限、存储(哪库/新表)、终端适配、边界(并发/幂等/超时)
- 输出「需求确认摘要」,用户确认后实施
例外:用户说"直接改/跳过审问"、Bug 有明确复现步骤、纯格式调整、已有 spec
逻辑改动前置调研(强制)
任何逻辑改动(ETL/业务规则/API/数据模型/前端交互):
- 委托 Explore 子代理调研:目标模块、
docs/audit/changes/历史、调用方/被调用方、数据流向、影响范围 - 输出「改动前上下文摘要」,用户确认后实施
流程:需求审问 → 确认 → 前置调研 → 确认 → 编码
例外:纯格式/注释/文档修改、用户说"直接改/跳过调研"、新建独立文件
改动后验证(强制)
- 运行相关测试(单元/集成/lint),不能运行需说明原因
- 输出 diff 摘要(文件清单 + 每个改动要点)
- 列出未覆盖风险点(未测路径、副作用、需人工验证场景)
例外:纯格式/文档/注释、用户说"跳过验证"
数据库 Schema 变更
修改 PostgreSQL schema(迁移/DDL/表定义/ORM)时,必须同步 docs/database/:变更说明、兼容性影响、回滚策略、≥3 条校验 SQL。
测试环境
load_dotenv加根.env;必需变量缺失立即报错,禁止静默回退空串- cwd 与正式一致:ETL →
apps/etl/connectors/feiqiu/、后端 →apps/backend/ - 配置走
AppConfig.load(),不得为测试构造简化配置 - 用测试库(
TEST_DB_DSN),禁止连正式库 - 属性测试分组执行(
-k筛选),禁止一次性全跑;hypothesis 默认max_examples=100
例外:用户指定简化环境、纯单元测试用 FakeDB/FakeAPI、--dry-run CLI 验证
脚本规范
- 复杂操作写 Python 脚本,避免复杂 shell
- 一次性运维 →
scripts/ops/;模块专属 → 模块内scripts/ scripts/ops/不在 uv workspace 内,导入 ETL 纯函数用importlib.util+ stub(参考scripts/ops/backfill_finance_area_daily.py)
子代理
- 委托:批量读 ≥3 文件、大范围搜索、不熟悉模块探索、多步 shell
- 主流程直接处理:单文件、单命令、小范围精确搜索
审计
任何逻辑改动必须可追溯、可验证、可回滚。
完成一轮后用 /audit:
python scripts/audit/prescan.py预扫描(自动识别+分类+合规,零 token)- 补充语义上下文(从对话提取每变更原因)
- 委托子代理写
docs/audit/changes/ - 补齐文档同步
python scripts/audit/gen_audit_dashboard.py刷新一览表
prescan.py --files 参数:git status 含大量历史未提交时,只传本次会话文件列表。