Files
danyang-match/Codex开发执行总指令、项目规则与任务拆解.md
T

5023 lines
55 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 丹阳公益婚恋服务平台
# V1.0 Codex开发执行总指令、项目规则与任务拆解
版本:V1.0
文档级别:最高优先级开发执行文件
适用对象:Codex、研发人员、测试人员、后续维护人员
执行原则:严格继承既有设计,不擅自扩展,不擅自删减,不擅自重新定义产品
---
# 第一章 文档定位
本文件用于指导Codex完整开发:
> 丹阳公益婚恋服务平台 V1.0
本文件不是普通PRD。
它同时承担:
```text
产品总约束
+
技术总约束
+
开发顺序
+
项目长期记忆
+
不可变规则
+
验收标准
+
任务拆解
```
Codex在整个项目开发周期内,应将本文件视为:
> **项目最高执行规则。**
---
# 第二章 总开发目标
开发一套:
> 面向丹阳市成年单身人士,由公益组织参与运营的实名制公益婚恋服务平台。
核心服务路径:
```text
实名认证
↓
人工资料审核
↓
系统精准匹配
↓
用户双向喜欢
↓
平台内安全聊天
↓
公益红娘辅助
↓
公益线下相亲活动
↓
双方进一步了解
↓
成功牵手
```
---
# 第三章 产品核心定位
正式定位:
> 面向丹阳市成年单身人士,由公益组织参与运营的实名制公益婚恋服务平台,通过实名认证、人工审核、智能匹配、双向喜欢、在线沟通、公益红娘和线下相亲活动,帮助本地单身人士安全、高效、真实地寻找合适伴侣。
核心价值:
```text
真实
公益
本地
安全
高效
```
---
# 第四章 V1最高产品原则
所有研发决策必须服从:
> 用户简单易用。
> 工作人员容易运营。
> 数据安全优先。
> 用户自主决定。
> 系统帮助而不是操控。
> 公益属性优先。
> 本地服务优先。
> 低开发复杂度。
> 易维护、易升级。
---
# 第五章 明确禁止偏离产品方向
Codex不得将平台开发成:
```text
商业婚恋VIP平台
陌生人社交平台
直播平台
短视频平台
社区平台
内容平台
游戏化交友平台
付费聊天平台
婚介CRM销售系统
```
---
# 第六章 V1用户收费规则
用户:
> 免费。
V1禁止:
```text
VIP
会员
金币
礼物
付费曝光
超级喜欢
付费聊天
付费联系方式
付费活动
```
除非未来产品负责人明确重新立项。
---
# 第七章 用户准入
用户必须:
```text
18周岁以上
+
微信登录
+
手机号
+
姓名/身份证实名认证
+
人工资料审核
```
未成年人:
> 禁止进入婚恋服务。
---
# 第八章 重要法律语义
必须区分:
```text
成年人
≠
达到法定结婚登记年龄
```
产品不得将18岁描述为:
> 已具备法定结婚登记资格。
---
# 第九章 实名认证语义
“已实名认证”只代表:
> 用户身份通过实名认证。
不代表:
```text
婚姻状态已经官方验证
职业已经验证
收入已经验证
所有资料100%真实
```
---
# 第十章 婚姻状态
当前V1:
```text
未婚
离异
丧偶
```
属于:
> 用户自行申报 + 人工资料审核。
不得宣传:
> 官方婚姻状态认证。
---
# 第十一章 用户端技术形态
必须开发:
> 微信小程序。
底部导航固定:
```text
首页
找对象
消息
活动
我的
```
不得擅自改成其他导航结构。
---
# 第十二章 后台技术形态
推荐并按V1执行:
> 一个统一Web后台。
通过:
```text
Operator
+
Role
+
Permission
+
Data Scope
```
分别提供:
- 公益红娘工作台
- 运营后台
- 平台管理后台
不需要开发三套完全独立后台。
---
# 第十三章 用户核心资料
必须字段:
```text
性别
出生年月
所在区域
身高
婚姻状况
是否有子女
学历
职业
头像
```
选填:
```text
兴趣
性格/生活方式
吸烟
饮酒
婚姻态度
结婚计划
自我介绍
```
---
# 第十四章 用户资料输入原则
优先:
> 选择 / 标签 / Picker。
减少:
> 大段人工输入。
不要做超长复杂注册表。
---
# 第十五章 用户隐私字段
普通用户不得看到:
```text
真实姓名
完整手机号
微信号
身份证
精确地址
精确单位
内部风险信息
举报记录
```
---
# 第十六章 择偶条件
基础:
```text
年龄
身高
地区
婚姻状况
学历
是否接受有子女
```
扩展:
```text
职业
吸烟
饮酒
婚姻计划
定居意愿
生活方式
兴趣
```
---
# 第十七章 条件语义不可改变
每一项条件支持:
```text
必须符合
最好符合
```
Required:
> 不符合直接淘汰。
Preferred:
> 可参与评分。
Codex不得把Required自动降级。
---
# 第十八章 V1匹配算法
必须采用:
```text
资格过滤
+
双向Required
+
双向规则评分
+
推荐排序
+
推荐理由
```
不采用:
- AI黑盒匹配
- 大模型判断婚姻幸福
- 向量数据库
- 深度学习推荐
- 颜值评分
---
# 第十九章 双向匹配
算法必须同时计算:
```text
A → B
B → A
```
不是只满足A。
---
# 第二十章 MutualScore
建议公式实现为配置:
```text
MutualScore
=
0.6 × min(scoreAB, scoreBA)
+
0.4 × average(scoreAB, scoreBA)
```
公式版本必须:
> 可版本化。
---
# 第二十一章 算法参数特别说明
此前文档中出现过:
```text
6人每日推荐
60分阈值
100分权重
180天Pass冷却
```
这些属于:
> 示例/建议参数。
不得硬编码为不可修改业务常量。
必须通过:
> Config / Match Rule Version
实现。
---
# 第二十二章 推荐前台展示
用户端不得显示:
```text
92%
87.5分
AI匹配成功率
```
只显示:
```text
很合适
比较合适
值得了解
```
以及:
> 为什么推荐。
---
# 第二十三章 推荐理由
必须来源真实资料。
例如:
```text
年龄符合双方条件
都长期生活在丹阳
婚姻计划接近
双方都不吸烟
有共同兴趣
```
禁止AI虚构。
---
# 第二十四章 首页
首页必须:
> 推荐优先。
不要开发:
- 新闻
- Feed
- 广告
- 热门榜
- 用户排行榜
- 直播入口
---
# 第二十五章 用户关系
单向:
```text
neutral
liked
passed
blocked
```
双向:
```text
mutual_match
```
---
# 第二十六章 Mutual Match
只有双方Like:
> 才创建Match。
必须保证并发情况下:
> 同一对用户只有一个有效Match实例/有效关系阶段。
---
# 第二十七章 Chat准入
必须:
```text
Mutual Match
+
双方账号允许
+
无Block
+
Conversation active
```
才允许聊天。
---
# 第二十八章 聊天V1支持
```text
文字
图片
Emoji
系统消息
安全提示
未读
历史分页
失败重试
```
---
# 第二十九章 V1聊天禁止开发
```text
语音消息
实时语音通话
视频
群聊
红包
转账
文件
阅后即焚
已读回执展示
正在输入
AI代聊
```
---
# 第三十章 聊天发送架构
V1采用:
```text
REST发送
+
WebSocket接收
```
不要为了炫技改成全WebSocket协议。
---
# 第三十一章 消息持久化原则
必须:
```text
先落PostgreSQL
↓
再实时推送
```
推送失败:
> 消息仍然成功。
---
# 第三十二章 消息幂等
每条消息:
```text
senderId + clientMessageId
```
唯一。
弱网重试:
> 不得重复消息。
---
# 第三十三章 Block
Block最高优先级。
发生后立即:
```text
停止聊天
排除推荐
排除Search
排除红娘候选
停止互相可见
```
---
# 第三十四章 Unblock
解除Block后:
不得自动:
```text
恢复Like
恢复Match
恢复Conversation
```
重新建立关系必须重新走业务流程。
---
# 第三十五章 Unmatch
解除匹配后:
```text
Match失效
Conversation只读
停止新消息
```
Unmatch:
> 不等于Block。
---
# 第三十六章 RelationshipStatus
此前技术模型:
```text
searching
getting_to_know
paused
matched_successfully
service_exited
```
属于:
> 技术建议状态模型。
具体代码可采用等义命名,但不得随意扩展产品含义。
---
# 第三十七章 Paused
暂停寻找:
> 不进入新推荐。
但:
> 已有聊天保留。
---
# 第三十八章 Getting To Know
“正在了解”是否自动暂停其他推荐:
> 不能硬编码。
应由:
- 用户选择
- 配置
决定。
---
# 第三十九章 Successful
成功牵手:
必须:
> 一方发起 + 对方确认。
不能:
- 红娘确认
- 管理员确认
- 系统自动确认
---
# 第四十章 公益活动
必须支持:
```text
活动列表
活动详情
报名
资格检查
人工审核
报名结果
签到
反馈
活动互选
```
---
# 第四十一章 活动名额
必须支持:
```text
总人数
可选性别名额
```
性别名额:
> 配置项。
不能写死每场都50:50。
---
# 第四十二章 Activity Pending
V1建议:
> Pending不占正式名额。
Approved:
> 占正式名额。
审核通过必须事务检查剩余名额。
---
# 第四十三章 活动签到
采用:
> 短期签名二维码Token。
不能二维码直接放:
```text
身份证
手机号
userId明文
```
---
# 第四十四章 活动互选
必须独立表:
```text
activity_interests
```
不能在feedback中只放一个interestedUserId。
因为用户可能:
> 选择多个意向对象。
---
# 第四十五章 活动意向隐私
A选择B但B没选A:
> B不知道。
双方选择:
> 才产生Match/通知。
---
# 第四十六章 活动互选不是成功牵手
只能表达:
> 双方愿意进一步了解。
---
# 第四十七章 公益红娘
用户可申请:
```text
推荐合适对象
调整择偶条件
联系意向对象
参加活动
长期无匹配
聊天帮助
其他
```
---
# 第四十八章 红娘核心原则
红娘:
> 可以推荐。
不能:
> 替用户Like。
红娘:
> 可以辅助联系。
不能:
> 私自提供手机号。
红娘:
> 可以提供聊天建议。
不能:
> 看完整私人聊天。
---
# 第四十九章 红娘候选来源
必须调用:
> Match Engine。
红娘不能绕过Required搜索全库强推。
---
# 第五十章 红娘推荐
推荐前服务端必须二次检查:
```text
目标账号
审核
Block
Relationship
Required
```
---
# 第五十一章 红娘联系意向对象
V1采用保守实现:
```text
A明确请求
↓
红娘触发平台中性邀请
↓
B自行查看/拒绝
```
不得:
> 自动给A或红娘释放B联系方式。
---
# 第五十二章 红娘服务记录
每次正式跟进:
```text
时间
渠道
摘要
结果
下一步
下次跟进
```
必须结构化保存。
---
# 第五十三章 红娘不能看到
```text
身份证
私人聊天
举报证据
无关风险调查
精确住址
```
---
# 第五十四章 后台Operator
所有工作人员统一:
```text
operators
```
不要创建:
```text
reviewer_accounts
matchmaker_accounts
volunteer_accounts
```
多套账号体系。
---
# 第五十五章 V1角色
建议:
```text
super_admin
platform_admin
organization_admin
reviewer
matchmaker
activity_manager
risk_operator
volunteer
data_viewer
```
---
# 第五十六章 权限结构
必须采用:
```text
RBAC
+
Data Scope
+
Sensitive Permission
```
---
# 第五十七章 Data Scope
至少支持:
```text
platform
organization
assigned
self
activity_scope
```
---
# 第五十八章 用户不属于某个机构私有
禁止简单设计:
```text
users.organization_id
```
作为用户唯一归属。
用户是:
> 平台用户。
组织通过:
- 活动
- 红娘服务
- 审核任务
- 授权
获得必要访问。
---
# 第五十九章 机构之间
机构合作:
> 不代表数据完全共享。
必须按业务关系限制。
---
# 第六十章 后台权限必须服务端执行
不能:
> 只隐藏菜单。
每个API:
必须检查:
```text
Authentication
Permission
Data Scope
Sensitive Permission
```
---
# 第六十一章 聊天隐私
后台普通用户详情中:
> 禁止“聊天记录”Tab。
只有风控案件场景:
> 才允许有限访问。
---
# 第六十二章 敏感访问
查看:
```text
完整身份证
风控证据
案件聊天
```
必须:
- 特殊权限
- 原因
- SensitiveAccessLog
---
# 第六十三章 用户数据安全
身份证:
```text
id_number_enc
+
id_number_hash
```
手机:
```text
phone_enc
+
phone_hash
```
禁止生产明文。
---
# 第六十四章 WeChat账号数据
不要仅:
```text
users.openid
```
推荐:
```text
user_wechat_accounts
```
唯一:
```text
app_id + openid
```
unionid允许为空。
---
# 第六十五章 实名Provider数据
只保留:
> 业务必要结果。
不要默认存储:
> 第三方完整原始响应。
---
# 第六十六章 用户照片
必须:
> Private Object Storage。
通过:
> Signed URL。
---
# 第六十七章 图片处理
至少:
- MIME检查
- Magic Number
- 大小限制
- 图片解码
- EXIF清理
---
# 第六十八章 数据库
V1推荐:
> PostgreSQL。
具体技术栈仍可根据最终后端语言确认。
但数据模型和约束不可改变业务含义。
---
# 第六十九章 Redis
只用于:
```text
Cache
Session
Rate Limit
WebSocket
临时状态
```
不得成为:
> Match等业务事实唯一数据源。
---
# 第七十章 Backend架构
V1采用:
> Modular Monolith。
不要擅自拆微服务。
---
# 第七十一章 模块
至少:
```text
Auth
User
Verification
Profile
Review
Match
Relationship
Messaging
Activity
Matchmaker
Risk
Notification
Organization
Permission
Analytics
Audit
Config
```
---
# 第七十二章 模块之间规则
禁止:
> Module A直接跨模块修改Module B表。
通过:
> Service / Domain接口。
---
# 第七十三章 后端语言
此前推荐:
```text
Java 21 + Spring Boot 3.x
```
或者:
```text
Node.js + NestJS
```
尚未锁死。
Codex如果当前仓库没有既有技术栈:
优先建议:
> Java 21 + Spring Boot 3.x + PostgreSQL + Redis。
原因:
- 权限
- 事务
- 状态机
- 长期维护
- 国内团队适配
但若用户后续明确指定技术栈:
以用户指令为准。
---
# 第七十四章 前端技术
微信小程序:
优先:
> 原生微信小程序或成熟稳定框架。
不要为了技术炫技引入过重跨端体系。
后台:
> Vue 3 或 React均可。
如果无既有代码:
建议:
```text
Vue 3
TypeScript
Vite
Pinia
```
---
# 第七十五章 组件库
后台可采用:
> Element Plus
或等价成熟组件库。
用户小程序:
> 自建统一轻量组件。
---
# 第七十六章 Design Token
必须继承此前Design Token规范。
页面不能:
> 每个开发者自己写一套颜色、间距、圆角。
---
# 第七十七章 UI原则
用户端:
```text
简单
温和
可信
公益
非商业化
```
避免:
```text
大量粉红
皇冠
钻石
金币
火焰
排行榜
夜店风
```
---
# 第七十八章 页面架构
小程序核心路由必须继承既有U01-U48设计。
不得随意合并导致业务缺失。
---
# 第七十九章 用户启动路由优先级
服务端状态判断:
```text
1 登录
2 手机
3 实名
4 资料完整
5 审核
6 账号风险
7 婚恋服务状态
8 正常业务
```
页面自己不能猜。
---
# 第八十章 State Store
前端建议:
```text
AuthStore
UserStore
MatchStore
MessageStore
ActivityStore
MatchmakerStore
AppStore
```
---
# 第八十一章 Server Truth
所有关键状态:
> 后端数据库为最终事实。
前端Store:
> 只是显示缓存。
---
# 第八十二章 API Base
统一:
```text
/api/v1
```
---
# 第八十三章 API响应
统一:
```json
{
"success": true,
"code": "OK",
"message": "success",
"data": {}
}
```
建议同时包含:
> requestId / timestamp
并在全项目保持一致。
---
# 第八十四章 HTTP Status
必须合理使用:
```text
400 参数错误
401 未认证
403 权限/禁止
404 不存在/不可见
409 状态冲突
422 业务校验(如选用)
429 限流
500 服务端异常
```
---
# 第八十五章 API DTO
禁止:
> 数据库Entity直接作为API Response。
必须:
```text
PublicUserDTO
SelfUserDTO
MatchmakerUserDTO
AdminUserDTO
SensitiveIdentityDTO
```
等隔离。
---
# 第八十六章 OpenAPI
必须:
> 维护Swagger/OpenAPI。
并建议:
> 生成TypeScript Client。
减少前后端接口不一致。
---
# 第八十七章 Production Swagger
不得无保护公开管理API文档。
可:
- 内网
- 鉴权
- Production关闭
---
# 第八十八章 数据库主键
建议:
> 应用生成UUID。
不要依赖可枚举自增ID作为对外资源ID。
---
# 第八十九章 数据库时间
统一:
> TIMESTAMPTZ。
展示:
> Asia/Shanghai。
---
# 第九十章 状态字段
推荐:
> VARCHAR + CHECK / 字典。
不建议PG Native ENUM。
便于状态演进。
---
# 第九十一章 JSONB原则
只用于:
- 配置
- Snapshot
- 小型扩展字段
不能把核心实体全部塞JSON。
---
# 第九十二章 关键数据库唯一约束
必须有:
```text
微信 app_id + openid
身份证hash
手机号hash(按业务需要)
user relation
activity registration
clientMessageId
Match active pair
```
---
# 第九十三章 Match历史
不要设计成:
> 一对用户永远只有一条不可变Match且无法未来重新建立。
必须支持:
> 历史关系和新的有效关系阶段。
可采用:
- Match Episode
- 历史记录
- Active Pair Unique
具体表结构由Codex合理实现。
---
# 第九十四章 Pass
需要预留:
```text
expires_at
```
但冷却周期:
> 配置。
---
# 第九十五章 AccountStatus
技术状态:
```text
normal
reviewing_risk
limited
suspended
banned
closed
```
属于建议技术模型。
如果Codex优化命名:
> 语义必须一致。
---
# 第九十六章 RiskLevel
建议:
```text
normal
watch
high
critical
```
RiskLevel:
> 不等于AccountStatus。
---
# 第九十七章 RiskAction
建议:
```text
warning
feature_limit
temporary_suspend
ban
manual_investigation
```
---
# 第九十八章 Report
Report是否成立:
与:
> 风控如何处置
必须分开。
---
# 第九十九章 风控原则
不得:
> 单个关键词直接永久封禁。
默认:
```text
规则发现
↓
风险事件
↓
人工判断
↓
处置
```
明显技术攻击除外。
---
# 第一百章 申诉
Appeal此前属于:
> 推荐V1功能。
如果开发资源充足:
应实现。
若必须缩减:
> 可作为V1.0.x补充,但数据结构建议预留。
---
# 第一百零一章 数据统计
正式指标必须唯一口径。
尤其:
```text
注册
实名
审核通过
推荐曝光
Like
Mutual Match
Chat Started
Activity Mutual
Successful Match
```
不得混淆。
---
# 第一百零二章 Success统计
只有:
> 双方成功牵手确认
才算:
```text
successful
```
活动互选:
> 不是成功牵手。
---
# 第一百零三章 Chat Started
必须是真实用户消息。
SystemMessage:
> 不算。
---
# 第一百零四章 数据统计架构
V1:
```text
PostgreSQL业务表
+
Daily Summary
+
Redis缓存
```
足够。
禁止提前建设:
- Kafka
- Flink
- ClickHouse
- Data Lake
---
# 第一百零五章 部署
必须:
```text
Docker
Docker Compose
Nginx
PostgreSQL
Redis
Private Object Storage
```
---
# 第一百零六章 V1禁止基础设施过度设计
不得擅自引入:
```text
Kubernetes
Service Mesh
Kafka
Elasticsearch
Neo4j
Milvus
分布式数据库
```
除非出现明确、经过验证的必要性。
---
# 第一百零七章 配置
区分:
```text
业务Config
部署Config
Secret
```
Secret:
> 不进Git。
---
# 第一百零八章 CI/CD
至少:
```text
Lint
Unit Test
Integration Test
Migration Validation
Build
```
通过后:
> 构建固定版本镜像。
---
# 第一百零九章 生产发布
禁止:
```text
SSH生产
git pull
现场npm install
现场mvn package
```
生产只拉:
> 已构建Artifact/Image。
---
# 第一百一十章 Migration
所有数据库变化:
> Migration管理。
生产禁止:
> 手工无记录ALTER TABLE。
---
# 第一百一十一章 Health
必须:
```text
/health/live
/health/ready
/version
```
---
# 第一百一十二章 监控
至少:
```text
CPU
Memory
Disk
API 5xx
P95
PostgreSQL
Redis
Backup
证书
```
---
# 第一百一十三章 日志
必须:
> Structured Log。
统一:
```text
requestId
```
---
# 第一百一十四章 日志禁区
禁止记录:
```text
完整身份证
完整Token
密码
聊天正文
举报完整正文
敏感图片URL
```
---
# 第一百一十五章 Backup
必须:
```text
数据库自动备份
+
独立位置
+
加密
+
恢复验证
```
---
# 第一百一十六章 Restore
必须真正演练。
只有“有backup文件”:
> 不算合格。
---
# 第一百一十七章 Rollback
每个生产Release:
必须知道:
> 上一个稳定版本。
---
# 第一百一十八章 Feature Flag
至少支持:
```text
activityEnabled
matchmakerEnabled
imageChatEnabled
```
以及必要核心模块Kill Switch。
---
# 第一百一十九章 测试最高优先级
开发过程中测试顺序:
```text
权限
数据一致性
Match
Block
Chat
实名认证
审核
活动并发
红娘
统计
UI细节
```
---
# 第一百二十章 Codex开发模式
Codex必须采用:
> 分阶段、可运行、可验证。
禁止:
> 一次生成全项目大量代码然后最后统一调试。
---
# 第一百二十一章 每阶段基本流程
每一个阶段执行:
```text
读取本阶段规则
↓
确认相关数据模型
↓
建立测试
↓
实现后端
↓
实现前端
↓
运行测试
↓
验证核心流程
↓
更新开发记录
↓
进入下一阶段
```
---
# 第一百二十二章 不允许静默改变需求
如果Codex发现:
- 规则冲突
- 前文未确认
- 技术实现存在多种方案
必须:
> 保持原需求。
对于未确认内容:
标记:
```text
TODO_PRODUCT_CONFIRMATION
```
或者:
> 使用可配置实现。
不得擅自拍板改变产品。
---
# 第一百二十三章 不允许“为了方便”简化核心规则
禁止:
> 为了开发简单取消双向匹配。
禁止:
> 为了查询方便给管理员全部权限。
禁止:
> 为了快速推荐自动放宽Required。
禁止:
> 为了聊天方便允许陌生私信。
---
# 第一百二十四章 技术债原则
允许:
> 简化技术架构。
不允许:
> 简化产品安全规则。
---
# 第一百二十五章 项目目录建议
如果从零开发,建议:
```text
project/
├── backend/
├── miniapp/
├── admin-web/
├── infrastructure/
├── docs/
├── scripts/
└── tests/
```
---
# 第一百二十六章 Backend目录建议
以模块化单体为原则:
```text
backend/src/
├── auth/
├── user/
├── verification/
├── profile/
├── review/
├── match/
├── relationship/
├── messaging/
├── activity/
├── matchmaker/
├── risk/
├── notification/
├── organization/
├── permission/
├── analytics/
├── audit/
├── config/
└── shared/
```
具体语言框架结构可调整。
---
# 第一百二十七章 Miniapp目录建议
```text
miniapp/
├── pages/
├── components/
├── stores/
├── services/
├── utils/
├── theme/
├── constants/
└── types/
```
---
# 第一百二十八章 Admin目录建议
```text
admin-web/src/
├── pages/
├── layouts/
├── components/
├── modules/
├── stores/
├── api/
├── permissions/
├── router/
├── theme/
└── types/
```
---
# 第一百二十九章 Docs必须进入Git
至少:
```text
docs/
├── product/
├── architecture/
├── api/
├── database/
├── security/
├── testing/
├── ops/
└── decisions/
```
---
# 第一百三十章 ADR
重要技术决策建议记录:
```text
docs/decisions/
ADR-001-backend-stack.md
ADR-002-auth-strategy.md
ADR-003-object-storage.md
```
---
# 第一百三十一章 Codex项目记忆文件
建议仓库根目录建立:
```text
AGENTS.md
```
用于放:
> Codex执行规则摘要。
---
# 第一百三十二章 AGENTS.md必须写入
至少:
```text
不得改变V1范围
Required不可放宽
Mutual后才能聊天
红娘不可替用户操作
隐私最小化
禁止VIP/付费
禁止陌生人私信
禁止管理员默认查看聊天
模块化单体
不引入微服务/K8s
```
---
# 第一百三十三章 STATUS.md
建议:
```text
docs/STATUS.md
```
记录:
```text
已完成
开发中
未开始
已知问题
待确认事项
```
Codex每阶段更新。
---
# 第一百三十四章 CHANGELOG
每次版本更新:
> CHANGELOG.md。
---
# 第一百三十五章 第一阶段:项目基础骨架
目标:
> 项目可以启动。
任务:
```text
初始化Backend
初始化Mini Program
初始化Admin Web
Docker环境
PostgreSQL
Redis
基础配置
统一Response
Error Handling
Logging
RequestId
Migration
```
---
# 第一百三十六章 第一阶段验收
必须:
```text
Backend可启动
数据库Migration成功
Redis正常
Admin可打开
Miniapp可打开
Health正常
CI通过
```
---
# 第一百三十七章 第二阶段:认证与Operator基础
用户:
```text
微信登录
手机号
Session
/me/status
```
后台:
```text
Operator login
Role
Permission
Organization
```
---
# 第一百三十八章 第二阶段重点
必须先做好:
> 权限框架。
不要等整个后台开发完才补权限。
---
# 第一百三十九章 第二阶段测试
重点:
```text
Token
Refresh
Logout
Operator Disable
RBAC
Data Scope基础
```
---
# 第一百四十章 第三阶段:实名认证
开发:
```text
IdentityProvider接口
实名请求
实名认证状态
年龄检查
身份证加密/hash
去重
日志脱敏
```
---
# 第一百四十一章 第三阶段验收
必须:
- 未成年拦截
- 重复身份证处理
- Provider失败可恢复
- 数据库无明文身份证
- 日志无身份证
---
# 第一百四十二章 第四阶段:用户Profile
开发:
```text
Basic Profile
Lifestyle
Photos
Interests
Self Intro
Relationship Intent
Privacy
Preference
```
---
# 第一百四十三章 第四阶段重点
必须同时完成:
> Draft / Completion / Validation。
---
# 第一百四十四章 第五阶段:人工审核
开发:
```text
ReviewTask
ReviewItem
Claim
Approve
Need Edit
Reject
Review History
```
---
# 第一百四十五章 第五阶段后台
完成:
> Reviewer工作台最小可用版本。
---
# 第一百四十六章 第五阶段并发
必须测试:
> 多审核员同时Claim。
---
# 第一百四十七章 第六阶段:推荐Match Engine
优先只做后端。
开发:
```text
Eligibility
RequiredCondition
DirectionalScore
MutualScore
Reasons
Ranking
RecommendationRecord
```
---
# 第一百四十八章 第六阶段测试
必须覆盖:
> 每个维度 + 双向Required。
算法测试必须自动化。
---
# 第一百四十九章 第七阶段:首页与找对象
开发:
```text
推荐卡
推荐理由
详情
Find
Filter
临时筛选
```
---
# 第一百五十章 第七阶段重点
确保:
> Search和Recommendation使用同一Eligibility基础规则。
---
# 第一百五十一章 第八阶段:Like与Match
开发:
```text
Like
Cancel Like
Pass
Block
Unblock
Mutual Match
Match History
```
---
# 第一百五十二章 第八阶段最高风险
重点验证:
```text
并发Like
重复Like
Match唯一性
Block优先级
```
---
# 第一百五十三章 第九阶段:Conversation与Text Chat
先只做:
```text
Conversation
Text Message
REST Send
WebSocket Receive
Unread
History
```
暂不先做图片。
---
# 第一百五十四章 第九阶段完成条件
A/B双方:
```text
Like
↓
Match
↓
打开Chat
↓
发送文字
↓
另一方实时收到
```
必须完整。
---
# 第一百五十五章 第十阶段:Chat安全与图片
增加:
```text
图片
上传
Signed URL
Risk Notice
Rate Limit
Block实时
Ban实时
```
---
# 第一百五十六章 第十一阶段:系统通知
统一NotificationService。
接:
```text
审核
Match
活动
红娘
风险
```
---
# 第一百五十七章 第十二阶段:Relationship状态
开发:
```text
Paused
Getting To Know
Successful Request
Confirm
Decline
```
Success必须双确认。
---
# 第一百五十八章 第十三阶段:公益红娘
开发:
```text
MatchmakerService
分配
Claim
候选
推荐
Followup
Waiting User
Complete
Risk Referral
```
---
# 第一百五十九章 第十三阶段用户端
完成:
```text
公益红娘首页
申请
进度
红娘推荐
```
---
# 第一百六十章 第十四阶段:活动基础
开发:
```text
Activity CRUD
Publish
Cancel
Browse
Apply
Review
My Activities
```
---
# 第一百六十一章 第十四阶段并发
必须完成:
> Activity capacity事务。
---
# 第一百六十二章 第十五阶段:签到
开发:
```text
Signed Checkin Token
Staff Scan
Manual Checkin
Duplicate Check
```
---
# 第一百六十三章 第十六阶段:活动反馈与互选
开发:
```text
Feedback
ActivityInterest
Mutual Interest
Activity Source Match
```
---
# 第一百六十四章 第十六阶段隐私重点
单向Activity Interest:
> 不得向对方暴露。
---
# 第一百六十五章 第十七阶段:举报与风控
开发:
```text
Report
Evidence
RiskEvent
RiskProfile
RiskAction
Account Capability
Risk Admin
```
---
# 第一百六十六章 第十七阶段实时联动
封禁/限制:
必须立即影响:
```text
Recommendation
Like
Chat
Activity
Matchmaker
```
---
# 第一百六十七章 第十八阶段:申诉
如果列入V1正式范围:
```text
Appeal
Process
Approve
Reject
Recalculate Account Status
```
---
# 第一百六十八章 第十九阶段:后台完善
完成:
```text
User Management
Organization
Operator
Role
Permission
Audit
SensitiveAccess
```
---
# 第一百六十九章 第二十阶段:Analytics
实现:
```text
Dashboard
User Funnel
Match Funnel
Matchmaker Stats
Activity Stats
Risk Stats
Daily Summary
```
---
# 第一百七十章 第二十一阶段:注销与数据生命周期
完成:
```text
Account Deletion
Service Exit
Visibility Removal
Activity Cleanup
Matchmaker Cleanup
Retention Hooks
```
---
# 第一百七十一章 第二十二阶段:部署体系
完成:
```text
Dockerfile
Docker Compose
Nginx
Health
CI/CD
Staging
Backup
Restore
Rollback
Monitoring
```
---
# 第一百七十二章 第二十三阶段:完整系统测试
必须执行:
```text
核心E2E
权限矩阵
IDOR
并发
聊天弱网
活动并发
风控
统计
恢复
```
---
# 第一百七十三章 第二十四阶段:UAT
邀请:
```text
普通用户
审核员
红娘
活动管理员
风控员
志愿者
```
进行真实操作。
---
# 第一百七十四章 第二十五阶段:RC
生成:
```text
v1.0.0-rc.1
```
进入Staging最终回归。
---
# 第一百七十五章 第二十六阶段:生产上线
上线前:
```text
Backup
Migration
Deploy
Smoke
Monitor
```
---
# 第一百七十六章 开发任务优先级
定义:
```text
P0
P1
P2
```
---
# 第一百七十七章 P0
所有上线必须功能:
```text
认证
实名
Profile
审核
Preference
推荐
Like
Mutual
Chat
Block
Report
Matchmaker基础
Activity基础
权限
风控
```
---
# 第一百七十八章 P1
V1必须完成但可以后置开发:
```text
图片聊天
活动互选
高级红娘协同
Analytics
申诉
动态水印
```
其中:
> 活动互选属于V1最终上线必需闭环,不得拖到V2。
---
# 第一百七十九章 P2
可V1.0.x:
```text
更高级统计
异常登录提醒
MFA强化
更多运营辅助
高级风控规则
```
---
# 第一百八十章 V1明确不做列表
Codex遇到以下需求不得自行开发:
```text
直播
短视频
动态Feed
朋友圈
群聊
语音房
视频相亲
礼物
金币
积分商城
排行榜
VIP
支付
超级喜欢
Boost
付费解锁联系方式
AI数字人
AI代聊
AI婚恋预测
颜值评分
财富评分
复杂智能排桌
```
---
# 第一百八十一章 Git规则
建议:
```text
main
develop
feature/*
fix/*
hotfix/*
```
小团队也可以简化。
但Production发布必须:
> 有Tag。
---
# 第一百八十二章 Commit原则
每个Commit:
> 一个明确任务。
不要:
```text
update
fix stuff
final
```
建议:
```text
feat(match): implement mutual eligibility
fix(chat): prevent send after block
```
---
# 第一百八十三章 Branch完成规则
合并前:
```text
Tests pass
Lint pass
Build pass
Migration pass
```
---
# 第一百八十四章 数据Migration与代码同PR
新增字段:
> Migration必须随代码提交。
不能:
> 口头告诉运维自己建表。
---
# 第一百八十五章 环境变量
`.env.example`必须持续同步。
新增环境变量:
> 同时更新文档。
---
# 第一百八十六章 API变更
每次:
> 更新OpenAPI。
不得代码改了API但文档不变。
---
# 第一百八十七章 前后端共享类型
如果可能:
> 自动生成。
避免手写两套Enum。
---
# 第一百八十八章 状态枚举
所有状态:
> 单一来源。
尤其:
```text
AccountStatus
ReviewStatus
RelationshipStatus
MatchStatus
ActivityStatus
RegistrationStatus
MatchmakerStatus
ReportStatus
```
---
# 第一百八十九章 业务配置
所有未确认数量型规则:
必须:
> Configurable。
例如:
```text
推荐数量
照片数量
兴趣数量
Pass冷却
活动互选人数
消息长度
限流阈值
```
---
# 第一百九十章 不要过度配置
只有:
> 业务可能变化的值
才配置。
不要把所有按钮颜色都放数据库。
UI走:
> Design Token。
---
# 第一百九十一章 代码注释原则
复杂业务:
> 解释为什么。
例如:
```text
// Required preferences must never be relaxed.
// This is a product invariant.
```
而不是:
```text
// if
```
---
# 第一百九十二章 核心Invariant
Codex必须在代码、测试中明确保护以下Invariant:
```text
未Mutual不可聊天
Required不可自动放宽
Block即时禁止互动
工作人员不能替用户Like
成功牵手必须双确认
单向活动意向不泄露
敏感身份默认脱敏
跨组织默认拒绝
```
---
# 第一百九十三章 事务边界
以下必须事务:
```text
Mutual Match创建
Activity名额批准
Review Claim
Successful Confirm
RiskAction + AccountStatus
```
---
# 第一百九十四章 事务外副作用
例如:
```text
Notification
WebSocket
Analytics
```
事务提交后执行。
失败:
> 补偿/重试。
不能回滚已成功核心业务。
---
# 第一百九十五章 Outbox
V1如果通知可靠性实现复杂:
建议:
> Lightweight Outbox Pattern。
无需Kafka。
---
# 第一百九十六章 Scheduler
允许:
> Backend内置Scheduler。
多实例时加锁。
---
# 第一百九十七章 后台删除原则
重要实体:
> 不物理删除。
采用:
```text
disabled
cancelled
closed
soft_delete
```
---
# 第一百九十八章 Audit
后台关键操作:
> 必须Audit。
包括:
```text
审核
风险
活动取消
角色权限
Operator
敏感访问
系统配置
匹配规则
```
---
# 第一百九十九章 测试优先要求
每完成模块:
Codex必须运行:
> 相关测试。
不得直到最后一次性运行。
---
# 第二百章 Match模块完成定义
必须同时满足:
```text
算法单测通过
Required测试通过
Mutual并发测试通过
Block测试通过
Recommendation API通过
```
才算完成。
---
# 第二百零一章 Chat模块完成定义
必须:
```text
无Match不可发送
Match可发送
重复clientMessage不重复
Block即时失效
Unmatch即时失效
WS恢复
```
---
# 第二百零二章 Activity完成定义
必须:
```text
资格正确
名额并发正确
重复报名安全
签到安全
单向意向私密
Mutual创建一次
```
---
# 第二百零三章 Permission完成定义
必须使用:
> 非超级管理员测试。
至少测试:
```text
reviewer
matchmaker
activity_manager
risk_operator
volunteer
organization_admin
```
---
# 第二百零四章 敏感数据完成定义
必须确认:
```text
DB无身份证明文
日志无身份证
Public DTO无手机号
Bucket非公开
SensitiveAccess有审计
```
---
# 第二百零五章 不接受“先做功能以后补安全”
本项目安全不是后置模块。
权限、敏感数据、Block:
> 必须和功能一起实现。
---
# 第二百零六章 用户体验完成定义
页面不只要:
> 功能存在。
必须:
- Loading
- Empty
- Error
- Success feedback
- Disabled state
- Retry
完整。
---
# 第二百零七章 普通用户错误提示
不得展示:
```text
NullPointerException
SQLSTATE
403 Forbidden
```
使用业务文案。
---
# 第二百零八章 后台技术错误
可以显示:
> RequestId
帮助技术排查。
但仍不得展示敏感Stack。
---
# 第二百零九章 Codex每阶段输出要求
每完成一个阶段:
更新:
```text
docs/STATUS.md
CHANGELOG.md
OpenAPI
Migration
Tests
```
---
# 第二百一十章 STATUS示例
```text
## Phase 8 Like & Match
Status: Completed
Implemented:
- Like
- Pass
- Block
- Mutual Match
Tests:
- simultaneous like
- duplicate like
- block override
Known:
- pass cooldown configurable, default not finalized
```
---
# 第二百一十一章 待确认内容管理
建立:
```text
docs/PENDING_DECISIONS.md
```
---
# 第二百一十二章 当前需要标记为可配置/待确认的项目
包括但不限于:
```text
每日推荐数量
推荐最低阈值
最终权重
Pass冷却
照片上限
兴趣标签上限
Self Intro长度
Privacy默认值
Getting To Know是否自动暂停推荐
活动是否默认审核
活动男女名额
活动互选人数
活动互选截止时间
Matchmaker联系目标的电话授权规则
RelationshipStatus最终业务命名
Appeal是否V1首发
```
---
# 第二百一十三章 Codex不得把待确认项硬编码
必须:
- Config
- Feature Flag
- 合理默认技术值
- 文档标记
并明确:
> 默认值只是当前技术默认,不代表产品最终确认。
---
# 第二百一十四章 不得修改已确认内容
例如:
```text
用户免费
必须实名认证
人工资料审核
双向喜欢后聊天
公益活动顶级Tab
红娘不代操作
Required不可放宽
```
这些不是待确认。
---
# 第二百一十五章 代码质量原则
优先:
```text
可读
明确
少魔法
少抽象
可测试
```
不要为了:
> “架构高级”
创建大量无意义层。
---
# 第二百一十六章 不提前设计十年后的架构
当前只需:
> 支持V1 + 平滑扩容。
不要构建:
- Plugin Platform
- Workflow Engine
- Rule DSL
- Distributed Saga
除非实际需要。
---
# 第二百一十七章 Domain Service原则
业务规则集中。
Controller:
> 不写核心业务逻辑。
---
# 第二百一十八章 Repository原则
数据访问统一。
不要:
> Service里到处拼SQL。
---
# 第二百一十九章 Validation
分:
```text
DTO validation
+
Business validation
```
两者不要混淆。
---
# 第二百二十章 异常体系
例如:
```text
AuthenticationException
PermissionDeniedException
BusinessConflictException
ResourceUnavailableException
ValidationException
```
统一映射API错误。
---
# 第二百二十一章 Security默认拒绝
任何:
> 权限不确定
应:
> 拒绝。
---
# 第二百二十二章 Recommendation降级
推荐Reason失败:
> 可返回候选。
Eligibility失败:
> 不可绕过。
---
# 第二百二十三章 Privacy优先
Privacy设置:
> 高于推荐便利。
---
# 第二百二十四章 Risk优先
Risk状态:
> 高于普通业务状态。
---
# 第二百二十五章 Block优先
Block:
> 高于Match。
---
# 第二百二十六章 数据库Source of Truth
Redis/前端与DB不一致:
> DB为准。
---
# 第二百二十七章 前端Optimistic Update
可以用于:
```text
Like
Pass
Privacy
```
但失败必须回滚。
以下不要盲目Optimistic:
```text
实名
审核
成功牵手
活动通过
封禁
```
---
# 第二百二十八章 WebSocket只是通知通道
不能:
> 依赖WebSocket事件作为唯一业务状态。
断线后:
> REST可重建。
---
# 第二百二十九章 外部Provider
必须Adapter封装。
后续:
> 可更换供应商。
---
# 第二百三十章 中国大陆环境适配
优先:
```text
国内网络稳定
国内云服务
微信生态
中国大陆对象存储
国内实名认证Provider
```
避免核心依赖境外不可控服务。
---
# 第二百三十一章 第三方依赖最小化
V1不需要大量SDK。
只接:
> 真正必要能力。
---
# 第二百三十二章 开源依赖选型原则
选择:
- 活跃维护
- 社区成熟
- License清晰
- 国内可用
- 不过度绑定云厂商
---
# 第二百三十三章 License
Codex新增开源库时:
必须确认License。
避免引入:
> 与商业/公益部署冲突的许可证风险。
---
# 第二百三十四章 Dependency清单
维护:
```text
docs/DEPENDENCIES.md
```
列:
```text
名称
版本
用途
License
```
---
# 第二百三十五章 Security Dependency
定期扫描:
- npm audit
- Maven/Gradle依赖扫描
- Container CVE
但不要盲目自动升级破坏生产。
---
# 第二百三十六章 可观测性
每个模块关键操作应有:
```text
Metrics
Logs
Audit(需要时)
```
---
# 第二百三十七章 Match Observability
至少记录:
```text
candidate_count
required_reject_count
recommendation_count
match_created
```
不记录敏感推断。
---
# 第二百三十八章 Message Observability
至少:
```text
send_success
send_failure
ws_push_failure
reconnect
```
---
# 第二百三十九章 Activity Observability
至少:
```text
apply
approve
checkin
capacity_conflict
```
---
# 第二百四十章 Risk Observability
至少:
```text
report_created
risk_action
appeal
```
---
# 第二百四十一章 生产数据禁止Seed测试用户
正式环境:
> 禁止默认插入测试用户。
---
# 第二百四十二章 Test Account
如果生产必须保留运营测试账号:
必须明确标记:
```text
is_test_account
```
并排除:
- 推荐
- 统计
- 用户搜索
---
# 第二百四十三章 数据统计必须排除测试账号
否则运营指标污染。
---
# 第二百四十四章 小程序发布前
Codex必须准备:
```text
微信合法域名清单
API域名
Upload域名
Download域名
WebSocket域名
隐私配置清单
```
---
# 第二百四十五章 小程序权限申请
只申请业务需要能力。
不要申请:
> GPS等当前不需要权限。
---
# 第二百四十六章 位置
V1:
> 不做持续GPS。
区域:
> 用户选择行政区。
---
# 第二百四十七章 用户协议页面
必须可访问:
```text
用户服务协议
隐私政策
个人信息收集清单
第三方共享清单
活动规则
```
---
# 第二百四十八章 Privacy版本
必须:
> 版本化。
用户同意:
> 可追溯。
---
# 第二百四十九章 Consent
建议表:
```text
consent_records
```
至少记录:
```text
user
type
version
agreed_at
```
---
# 第二百五十章 删除/注销
Codex必须设计:
> 正式后端流程。
不能只:
> 前端隐藏账号。
---
# 第二百五十一章 删除原则
需要:
```text
停止展示
停止服务
停止推荐
关闭Session
按保留规则处理数据
```
---
# 第二百五十二章 数据保留期限
精确法律/运营期限:
> 不在代码硬编码。
使用:
> Data Retention Config / Policy。
---
# 第二百五十三章 成功案例
默认:
> Private。
宣传必须:
> 单独授权。
---
# 第二百五十四章 活动现场宣传照片
如有:
> 单独授权/规则。
不能把报名视作永久宣传授权。
---
# 第二百五十五章 红娘工作台数据
禁止提供:
> 一键导出所有用户资料。
---
# 第二百五十六章 Admin数据导出
必须单独权限:
```text
data.export
```
并:
> 脱敏 + Audit。
---
# 第二百五十七章 后台临时账号
志愿者建议:
> expires_at。
活动结束后失效。
---
# 第二百五十八章 数据权限生命周期
服务结束后:
> 应减少无必要访问。
V1至少保证:
> assigned任务权限结束后不能继续编辑。
---
# 第二百五十九章 Codex不得擅自加入“内部用户价值评分”
禁止:
```text
A级用户
高价值用户
低质量用户
颜值分
财富分
```
---
# 第二百六十章 算法不使用
禁止推断:
```text
宗教
政治
健康
性生活
财富等级
```
作为匹配分。
---
# 第二百六十一章 成功标准
本项目不是:
> 页面全部完成。
而是以下闭环真正运行:
```text
注册
↓
实名
↓
审核
↓
推荐
↓
Mutual
↓
Chat
↓
红娘/活动
↓
进一步了解
↓
成功
```
---
# 第二百六十二章 V1核心验收用户故事一
新用户进入。
应能:
```text
微信登录
↓
绑定手机
↓
实名
↓
填写资料
↓
设置择偶
↓
提交审核
↓
等待
```
---
# 第二百六十三章 用户故事二
审核员:
```text
登录
↓
待审核
↓
领取
↓
查看
↓
通过/退回
```
---
# 第二百六十四章 用户故事三
用户审核通过:
```text
首页看到推荐
↓
看详情
↓
Like
```
---
# 第二百六十五章 用户故事四
双方Like:
```text
Mutual Match
↓
Conversation
↓
聊天
```
---
# 第二百六十六章 用户故事五
用户觉得不合适:
```text
Unmatch
```
随后:
> 不能继续聊天。
---
# 第二百六十七章 用户故事六
用户遭骚扰:
```text
Block
+
Report
```
立即停止联系。
---
# 第二百六十八章 用户故事七
长期没结果:
```text
申请红娘
↓
红娘接手
↓
系统候选
↓
人工推荐
```
---
# 第二百六十九章 用户故事八
用户参加活动:
```text
报名
↓
审核
↓
签到
↓
互选
↓
Mutual
```
---
# 第二百七十章 用户故事九
风控员:
```text
处理举报
↓
采取Action
↓
用户立即受限
```
---
# 第二百七十一章 用户故事十
双方关系稳定:
```text
一方发成功请求
↓
另一方确认
↓
成功牵手
↓
停止新推荐
```
---
# 第二百七十二章 Codex阶段验收机制
每完成Phase:
必须回答:
```text
完成了什么?
测试了什么?
有哪些已知问题?
有哪些待确认?
是否影响之前功能?
```
---
# 第二百七十三章 Codex禁止声明完成的情况
如果:
```text
代码写完
测试没跑
Migration没验证
权限没测
核心E2E没跑
```
不得说:
> 完成。
---
# 第二百七十四章 Regression
每个新模块:
必须确保:
> 不破坏之前通过的核心流程。
---
# 第二百七十五章 优先自动化场景
一定自动化:
```text
Required
Mutual
Block
Chat permission
Activity capacity
RBAC
Data Scope
```
---
# 第二百七十六章 Go-Live阻断
上线前以下必须为0:
```text
P0
未接受P1
严重权限漏洞
敏感数据明文
Match并发错误
Activity超卖
```
---
# 第二百七十七章 V1开发路线总览
```text
Phase 01 基础架构
Phase 02 Auth + Operator
Phase 03 Verification
Phase 04 Profile
Phase 05 Review
Phase 06 Match Engine
Phase 07 Home/Discover
Phase 08 Like/Relationship
Phase 09 Text Chat
Phase 10 Image/Safety Chat
Phase 11 Notification
Phase 12 Relationship Progress
Phase 13 Matchmaker
Phase 14 Activity
Phase 15 Check-in
Phase 16 Activity Mutual Interest
Phase 17 Risk
Phase 18 Appeal
Phase 19 Admin Complete
Phase 20 Analytics
Phase 21 Account Lifecycle
Phase 22 Ops/Deployment
Phase 23 Full Testing
Phase 24 UAT
Phase 25 RC
Phase 26 Production
```
---
# 第二百七十八章 Codex每次启动工作时
必须先阅读:
```text
AGENTS.md
docs/STATUS.md
docs/PENDING_DECISIONS.md
本阶段相关设计文档
```
然后再改代码。
---
# 第二百七十九章 Codex发现旧代码与文档冲突
优先级:
```text
用户最新明确指令
>
本总指令
>
已确认专项设计
>
旧代码实现
```
不得因为:
> “现在代码已经这样写了”
就倒逼修改产品规则。
---
# 第二百八十章 文档冲突处理
如果两个旧文档存在不一致:
优先:
> 后续明确修正文档。
例如已明确:
- Privacy默认值未确认
- Recommendation数量未确认
- Pass冷却未确认
不得引用旧示例当最终规则。
---
# 第二百八十一章 已知需要纠正的旧示例
Codex特别注意:
以下不是固定产品要求:
```text
每天6人
60分
照片最多6张
兴趣最多8个
180天Pass
所有Privacy默认true
活动男50女50
活动必须审核
活动互选只能1人
```
都必须配置/待确认。
---
# 第二百八十二章 不重复造轮子原则
使用成熟组件:
- JWT/session库
- PostgreSQL driver
- Redis library
- Validation
- Migration
- WebSocket
- Object Storage SDK
但核心业务规则:
> 自己明确实现。
---
# 第二百八十三章 不引入完整婚恋开源项目替代业务
可以参考开源代码。
但不能为了快:
> 把商业社交项目直接改皮肤。
因为产品逻辑差异很大。
---
# 第二百八十四章 核心开发哲学
本项目真正复杂的地方不是:
> UI页面数量。
而是:
```text
状态
权限
双向关系
隐私
并发
线下闭环
```
Codex投入重点必须放在这些地方。
---
# 第二百八十五章 研发优先级原则
如果时间不够:
先保证:
```text
正确
安全
完整
```
再做:
```text
动画
视觉细节
非必要运营功能
```
---
# 第二百八十六章 后端优先于高级视觉
推荐流程、权限、活动容量等后端正确前:
> 不要优先花时间做复杂UI动画。
---
# 第二百八十七章 V1不追求“智能感”
匹配系统只需要:
> 准、稳定、解释清楚。
不需要到处写:
> AI智能。
---
# 第二百八十八章 AI使用边界
V1可以未来使用AI:
> 润色自我介绍等辅助。
但不得:
- 自动虚构用户资料
- 自动代聊
- 自动决定Match
- 自动判断婚姻幸福
---
# 第二百八十九章 对用户尊重
产品文案、标签不得:
```text
没人喜欢
低匹配用户
难匹配
条件太高
高价值
低质量
```
---
# 第二百九十章 空候选文案
使用:
> 暂时没有完全符合你条件的人。
然后提供:
```text
查看择偶条件
申请公益红娘
参加活动
```
---
# 第二百九十一章 数据和用户不是商品
开发界面中不要使用:
```text
库存用户
优质资源
资源池等级
```
可以使用:
```text
候选用户
可匹配用户
用户池
```
---
# 第二百九十二章 用户自主权最终红线
系统和工作人员不得替用户执行:
```text
Like
确认成功牵手
主动发送私人聊天
```
---
# 第二百九十三章 上线前产品验收
必须最终检查:
> 页面是否仍符合公益定位。
如果最终UI变成:
> Tinder/直播/商业婚介风格
即使功能全:
> 也不合格。
---
# 第二百九十四章 上线前技术验收
必须:
```text
Core E2E Pass
Permission Pass
Security Pass
Concurrency Pass
Backup Restore Pass
Rollback Pass
```
---
# 第二百九十五章 上线前运营验收
必须:
```text
审核员会用
红娘会用
活动管理员会用
志愿者能签到
风控能处理举报
```
---
# 第二百九十六章 项目最终交付物
Codex必须至少交付:
```text
完整源码
数据库Migration
OpenAPI文档
Docker部署
CI配置
环境变量示例
测试代码
运营后台
微信小程序
数据库说明
部署说明
备份恢复说明
权限矩阵
测试报告
Release Notes
```
---
# 第二百九十七章 README
必须写清:
```text
项目是什么
技术栈
如何本地启动
环境变量
如何Migration
如何运行测试
如何Build
如何Deploy
```
---
# 第二百九十八章 一键本地启动
目标:
```text
docker compose up
```
可以启动必要基础设施。
应用本身根据技术栈一条标准命令运行。
---
# 第二百九十九章 新开发人员接手标准
一个新的研发人员:
> 不依赖原作者口头解释。
通过:
```text
README
AGENTS
Docs
Migration
Tests
```
应能够理解并启动项目。
---
# 第三百章 最终完成标准
只有同时满足:
```text
用户端完整
后台完整
核心业务完整
权限正确
安全正确
测试通过
部署可用
备份恢复可用
文档完整
运营可以执行
```
才允许定义:
> V1.0开发完成。
---
# 第三百零一章 Codex最终执行宣言
在整个开发过程中必须始终遵守:
> **不要重新设计已经确认的产品。**
> **不要擅自增加商业化功能。**
> **不要为了开发方便降低安全要求。**
> **不要把技术示例当成已经确认的业务规则。**
> **所有未确认数量参数配置化。**
> **用户Required绝不自动放宽。**
> **没有双向意愿绝不创建聊天。**
> **拉黑必须立即有效。**
> **红娘只能辅助,不能替用户决定。**
> **活动单向意愿必须保密。**
> **后台人员只能看到完成工作必要的数据。**
> **敏感数据默认拒绝访问。**
> **数据库是业务事实源。**
> **关键动作必须幂等、事务安全、可审计。**
> **系统必须可以部署、升级、备份、恢复和回滚。**
---
# 第三百零二章 Codex项目最终原则
整个项目只围绕一件事情设计:
> **让丹阳本地真实单身用户,用最低的学习成本,在一个可信、安全、有公益组织参与的平台中,获得线上精准匹配、人工红娘辅助和线下公益活动服务。**
技术存在的目的不是增加复杂度。
算法存在的目的不是替用户选择。
红娘存在的目的不是替用户决定。
后台存在的目的不是让工作人员无限查看数据。
数据存在的目的不是建立用户价值等级。
因此V1.0最终开发原则可以浓缩为:
> **真实身份是基础。**
> **双向意愿是边界。**
> **隐私安全是底线。**
> **规则匹配是效率工具。**
> **公益红娘是人工补位。**
> **线下活动是服务延伸。**
> **用户本人永远拥有最终决定权。**
---
# 第三百零三章 Codex收到本文档后的第一条执行指令
Codex不得立即开始无序编码。
首先执行:
```text
1. 创建项目文档目录
2. 创建AGENTS.md
3. 创建STATUS.md
4. 创建PENDING_DECISIONS.md
5. 确认当前仓库是否已有代码
6. 输出当前代码基线审计
7. 确认最终技术栈
8. 建立Phase 01任务清单
9. 建立测试基础设施
10. 再开始Phase 01开发
```
如果仓库已经存在:
> 不得直接推翻重写。
先进行:
```text
现状分析
↓
与V1规范Gap Analysis
↓
保留可复用代码
↓
渐进重构
```
---
# 第三百零四章 Codex首次仓库审计必须输出
```text
当前技术栈
目录结构
已有模块
已有数据库
已有API
已有测试
已有部署
和V1需求一致的部分
存在冲突的部分
可复用部分
必须重构部分
风险
Phase 01建议
```
---
# 第三百零五章 若仓库为空
则严格按照:
> Phase 01 → Phase 26
顺序推进。
禁止:
> Phase 01时顺手把后面所有功能都做一点。
---
# 第三百零六章 长期连续开发规则
每次任务结束必须留下:
```text
Current Phase
Completed
Next Task
Known Issues
Pending Decisions
Test Result
```
保证下一次Codex恢复上下文时:
> 可以从项目状态继续,而不是重新理解整个项目。
---
# 第三百零七章 最终交付原则
整个V1.0项目最终应呈现为:
> **代码能运行。**
> **文档能接手。**
> **测试能证明。**
> **部署能复现。**
> **数据能恢复。**
> **权限能控制。**
> **业务能闭环。**
> **运营能执行。**
这才是本项目真正意义上的“完成”。