feat(ECR-012–016): 合规、题库、时辰刷新、头像、MBTI OEJTS 与埋点
落地输入合规、探索题库、报告日/时辰刷新、账号头像、OEJTS 量表,并补齐 H5 埋点与 Admin 漏斗;同步 ESS 工件、切至自建 Git、清理 GitHub Actions。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# ECR-012
|
||||
|
||||
**Title:** 用户文字输入合规(后端 textsafe + 前端镜像)
|
||||
**Status:** Approved
|
||||
**Date:** 2026-08-12
|
||||
**Approved:** 2026-08-12(Human:文字输入全规则;后端为重点)
|
||||
**Change Level:** L2
|
||||
|
||||
## Change
|
||||
|
||||
1. Active Spec:`.ai/product/feature-spec/input-compliance.md`
|
||||
2. `internal/textsafe`:长度 · XSS/控制字符 · lexicon · 刷屏特征 · Normalize
|
||||
3. 挂接 C 端:auth 昵称 · profile 名 · ask content · companion note · growth title/focus/note · synastry invite display_name
|
||||
4. `@yuxingu/utils` 镜像校验供 H5 即时提示
|
||||
5. 错误码 `40060`
|
||||
|
||||
## Motivation
|
||||
|
||||
自由文字缺少统一合规闸门,易进库/进模型。
|
||||
|
||||
## Scope
|
||||
|
||||
### Allowed
|
||||
|
||||
- 上列 Spec / textsafe / 指定 Handler·Service / utils
|
||||
|
||||
### Forbidden
|
||||
|
||||
- 第三方审核 SaaS · 语音 · 改开放登录 · Ops 全文案重构(可后 ECR)
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [x] 违规 nickname / ask / note → 40060
|
||||
- [x] 合法中文名通过
|
||||
- [x] go test textsafe PASS
|
||||
- [x] 关键表单前端有即时错误(至少昵称/问答/档案名)
|
||||
|
||||
## Trace
|
||||
|
||||
Spec `input-compliance` · TASK-012 · TEST_REPORT/ECR-012.md
|
||||
@@ -0,0 +1,41 @@
|
||||
# ECR-013
|
||||
|
||||
**Title:** 探索 curated 题库(A 集)+ 结果回看
|
||||
**Status:** Approved
|
||||
**Date:** 2026-08-13
|
||||
**Approved:** 2026-08-13(Human:探索题库非临床 A 集;完成后只看结果/重测;探索返回)
|
||||
**Change Level:** L2
|
||||
|
||||
## Change
|
||||
|
||||
1. Active Spec 更新:`.ai/product/feature-spec/explore-test.md`(R8/R13/R14 · 路由)
|
||||
2. `internal/scalebank`:embed curated A 集;Catalog / Category / Get / ScoreSum
|
||||
3. API:`GET /scale-bank/catalog` · `GET /scale-bank/categories/:key`;bank slug 走 `GET|POST /scales/:slug(/result)`
|
||||
4. H5:探索题库精选宫格 + 分类列表页;每量表独立图标;R8 结果回看;探索顶栏返回
|
||||
5. SDK/types · OpenAPI
|
||||
|
||||
## Motivation
|
||||
|
||||
探索需可运营的非临床题库入口;与产品向 `mbti-lite` 并存;禁止临床筛查进 C 端。
|
||||
|
||||
## Scope
|
||||
|
||||
### Allowed
|
||||
|
||||
- Spec explore-test · scalebank · scale service/handler · Explore* 页 · useScalePage · HomeToolIcon 题库图标 · AppHeader 探索返回 · sdk/types · openapi
|
||||
|
||||
### Forbidden
|
||||
|
||||
- 临床类量表上架 · 第三方题库实时抓取进生产 · 改支付/Ops CMS 本 ECR
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [x] catalog 返回精选 + 四分类;无临床类
|
||||
- [x] bank slug 可 Get / Submit / LatestResult;二次进入只看结果+重测
|
||||
- [x] 精选图标互不相同
|
||||
- [x] `/explore` 显示返回
|
||||
- [x] go test scalebank + integration TestScaleBankResultRoundtrip · vitest ScalePage · ess-validate coding/review
|
||||
|
||||
## Trace
|
||||
|
||||
Spec `explore-test` · TASK-013 · BD-2026-013 · TEST_REPORT/ECR-013.md
|
||||
@@ -0,0 +1,53 @@
|
||||
# ECR-014
|
||||
|
||||
**Title:** 时效刷新契约对齐(首页时辰贴士 · 星座/节律按日)
|
||||
**Status:** Approved
|
||||
**Date:** 2026-08-13
|
||||
**Approved:** 2026-08-13(Human:后台按前端本次时效刷新改动对齐;走 ESS Intake)
|
||||
**Change Level:** L2
|
||||
**Retrospective:** true
|
||||
|
||||
## Retro(异常路径 — 不得伪装正序)
|
||||
|
||||
| Field | Content |
|
||||
|-------|---------|
|
||||
| Original drift | 前端已用 `valid_until` / `scheduleRefresh` / 时辰贴士;后台实现先进树,未先挂 Active ECR |
|
||||
| Scope freeze | 仅本 ECR Allowed 所列;禁止扩到头像、题库、textsafe、Ops |
|
||||
| Process debt | 倒序实现;CODE_REVIEW 须点名流程债;不得写成「一直按正序 Approved」 |
|
||||
|
||||
## Change
|
||||
|
||||
1. 对齐 Spec:`home.md` R5–R8 · `star-profile.md` R12–R14 · `life-rhythm.md` R8–R11
|
||||
2. 后台:`home_daily_tips` 缓存 · `shichen`/`valid_until`;star/rhythm GET 换日原地刷新 `as_of`/`valid_until`
|
||||
3. OpenAPI / types 契约与前端 SDK 一致
|
||||
4. 单测 + 必要 integration
|
||||
|
||||
## Motivation
|
||||
|
||||
前端静默刷新依赖后端时效字段;无契约收口则易漂移。
|
||||
|
||||
## Scope
|
||||
|
||||
### Allowed
|
||||
|
||||
- `internal/service/home`(daily_tips · shichen)· `repository/home_tips_repo` · migration `000023`
|
||||
- `internal/service/report/temporal*` · Get/Latest 换日刷新
|
||||
- `proto/openapi.yaml` 相关 schema/描述
|
||||
- `packages/types` HomeDailyTips / report summary 字段(若缺)
|
||||
- Spec 已 Active 的上述规则;TEST_REPORT / HANDOFF
|
||||
|
||||
### Forbidden
|
||||
|
||||
- 头像上传(另 ECR)· scalebank / 临床题库 · textsafe · Admin CMS · 新支付
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [x] GET `/home/daily-tips` 含 `shichen` · `shichen_name` · `valid_until`
|
||||
- [x] GET star/rhythm latest|id:跨日原地更新 `as_of`,返回 `valid_until`;同日不重算本命层
|
||||
- [x] OpenAPI 描述与字段一致
|
||||
- [x] `go test` home + report/temporal PASS
|
||||
- [x] ess-validate coding PASS;CODE_REVIEW 记录 Retro
|
||||
|
||||
## Trace
|
||||
|
||||
Spec home / star-profile / life-rhythm · TASK-014 · BD-2026-014 · TEST_REPORT/ECR-014.md
|
||||
@@ -0,0 +1,57 @@
|
||||
# ECR-015
|
||||
|
||||
**Title:** 账号头像上传与媒体读取
|
||||
**Status:** Approved
|
||||
**Date:** 2026-08-13
|
||||
**Approved:** 2026-08-13(Human:开 Architect · 头像另 Context)
|
||||
**Change Level:** L2
|
||||
**Retrospective:** true
|
||||
|
||||
## Retro(异常路径)
|
||||
|
||||
| Field | Content |
|
||||
|-------|---------|
|
||||
| Original drift | Spec `account-auth` R9 与 FE「我的」页、migration `000018`、handler/media/avatar 已先于本 ECR 进树 |
|
||||
| Scope freeze | 仅头像上传/存储/读取与 `avatar_url` 契约;禁止顺手改昵称规则、登录开放策略、Ops |
|
||||
| Process debt | 倒序实现;CODE_REVIEW 须点名;不得伪装正序路径 |
|
||||
|
||||
## Change
|
||||
|
||||
1. 对齐 Spec `account-auth.md` R9 · §8–§10
|
||||
2. 后台:`users.avatar_url` · `POST /auth/me/avatar` · `GET /media/avatars/:file` · 本地 `data/avatars/`
|
||||
3. H5:「我的」更换头像(相册/拍照);默认 `public/default-avatar.png`
|
||||
4. SDK `authUploadAvatar` · types `avatar_url` · OpenAPI
|
||||
5. 单测(类型/大小校验)+ 冒烟清单
|
||||
|
||||
## Motivation
|
||||
|
||||
账号展示位需要可换头像;与昵称同属账号资产。
|
||||
|
||||
## Scope
|
||||
|
||||
### Allowed
|
||||
|
||||
- migration `000018_user_avatar`
|
||||
- `internal/avatar` · `handler` UploadAvatar / MediaHandler
|
||||
- `service/auth` UpdateAvatar · auth_repo avatar 字段
|
||||
- H5 MinePage 头像 UI · `defaultAvatar` / `apiAsset`(若缺则补)
|
||||
- `packages/sdk` · `packages/types` · `proto/openapi.yaml` 头像相关
|
||||
- Spec account-auth R9;TEST / HANDOFF
|
||||
|
||||
### Forbidden
|
||||
|
||||
- 改 R1 OpenLogin 策略 · textsafe 规则扩 scope · scalebank · 时效刷新(ECR-014)· Admin · 对象存储/CDN 上云(可后 ECR)
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [x] 已登录 POST multipart jpeg/png/webp ≤2MB → 200 · `avatar_url` 非空
|
||||
- [x] 超限/错误类型 → 4xx 可读文案
|
||||
- [x] GET `/media/avatars/:file` 可公开读已存文件;路径穿越拒绝
|
||||
- [x] GET `/auth/me` 含 `avatar_url`;未设置时 H5 显示默认愈心小人
|
||||
- [x] OpenAPI 覆盖 upload + media
|
||||
- [x] go test avatar PASS;ess-validate coding PASS
|
||||
- [x] CODE_REVIEW 记 Retro(Reviewer)
|
||||
|
||||
## Trace
|
||||
|
||||
Spec `account-auth` · TASK-015 · BD-2026-015 · TEST_REPORT/ECR-015.md
|
||||
@@ -0,0 +1,49 @@
|
||||
# ECR-016
|
||||
|
||||
**Title:** MBTI 标准/完整版(OEJTS)题库与计分
|
||||
**Status:** Approved
|
||||
**Date:** 2026-08-13
|
||||
**Approved:** 2026-08-13(Human:授权自主 Loop 收口剩余 WIP)
|
||||
**Change Level:** L2
|
||||
**Retrospective:** true
|
||||
|
||||
## Retro
|
||||
|
||||
| Field | Content |
|
||||
|-------|---------|
|
||||
| Original drift | migrations 000019–022 · jungian/mbti_result · Spec R10–R11 已先于本 ECR |
|
||||
| Scope freeze | 仅 `mbti-lite`/`mbti-full` 题库、计分、会员锁;禁止 scalebank A 集、头像、时效、OpenLogin |
|
||||
| Process debt | 倒序;CODE_REVIEW 须点名 |
|
||||
|
||||
## Change
|
||||
|
||||
1. Spec `explore-test` R9–R12:`mbti-lite` 32 题免费 · `mbti-full` 60 题会员
|
||||
2. migrations 019–022 · soft-delete 旧题/旧结果
|
||||
3. `ScoreJungian` / `BuildJungianResult`
|
||||
4. GET locked / POST 403 未会员
|
||||
5. 单测
|
||||
|
||||
## Scope
|
||||
|
||||
### Allowed
|
||||
|
||||
- `apps/api/migrations/000019`–`000022`
|
||||
- `internal/scale` jungian/mbti_result/score
|
||||
- `service/scale` mbti-lite/full 分支
|
||||
- OpenAPI 若缺会员锁说明则补
|
||||
- H5 ScaleIntro 双轨入口(已有则核对)
|
||||
|
||||
### Forbidden
|
||||
|
||||
- scalebank curated · avatar · temporal · textsafe 改规则 · Admin
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [x] mbti-lite 32 题 · 四维计分出类型码
|
||||
- [x] mbti-full 未会员 locked;会员可交
|
||||
- [x] go test ./internal/scale/ PASS
|
||||
- [x] ess-validate coding;CODE_REVIEW Retro
|
||||
|
||||
## Trace
|
||||
|
||||
Spec explore-test · TASK-016 · BD-2026-016 · TEST_REPORT/ECR-016.md
|
||||
Reference in New Issue
Block a user