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:
jackyu66git
2026-08-13 01:27:58 +08:00
co-authored by Cursor
parent 13860bf1ef
commit 89756f65b4
227 changed files with 7405 additions and 1407 deletions
@@ -0,0 +1,34 @@
# HANDOFF — ECR-012 Architect → Engineer
**Date:** 2026-08-12
**ECR:** ECR-012**Approved**
**BD:** BD-2026-012 Approved
## Task interpretation
用户自由文字统一合规闸门:后端 `textsafe` 权威;H5 `@yuxingu/utils` 镜像即时提示;错误码 **40060**
## Load
1. `docs/ECR/ECR-012-input-compliance.md`
2. `docs/BACKEND_DESIGN/BD-2026-012-input-compliance.md`
3. Spec`.ai/product/feature-spec/input-compliance.md`
4. `docs/PROJECT_RULES.md` · `.ai/definition-of-done.md`
## Ordered plan
1. 实现 `internal/textsafe` + 单测
2. 挂接 auth / profile / ask / companion / growth / synastry(及 mood note 若在 Spec
3. Handler`ErrRejected` → 40060
4. utils + 关键表单即时错误
5. OpenAPI 注明 40060 · TEST_REPORT · HANDOFF→reviewer
## Smoke checklist
- [ ] 违规昵称 / ask / note → 40060
- [ ] 合法中文名通过
- [ ] 前端至少昵称/问答/档案名有即时错误
## Owner
`STATE.owner = engineer`
@@ -0,0 +1,26 @@
# HANDOFF — ECR-012 Engineer → Reviewer
**From:** Engineer
**To:** Reviewer
**Date:** 2026-08-13
**ECR:** ECR-012
## Delivered
- Spec `input-compliance.md` Active
- `apps/api/internal/textsafe/` + unit tests
- Wired services/handlers → **40060**
- `@yuxingu/utils` `validateUserText` + 关键 H5 表单
- `docs/TEST_REPORT/ECR-012.md` PASS
- `docs/BACKEND_DESIGN/BD-2026-012-input-compliance.md`
## Verify
```bash
cd apps/api && go test ./internal/textsafe/ -count=1
# 可选:对本机 API 复跑 TEST_REPORT 用例表
```
## Owner next
`STATE.owner = reviewer`
@@ -0,0 +1,28 @@
# HANDOFF — ECR-013 Architect → Engineer
**Date:** 2026-08-13
**ECR:** ECR-013**Approved**
**BD:** BD-2026-013 Approved
## Task interpretation
落地探索 curated 题库 A 集:目录 API · 作答/结果回看 · H5 宫格/分类 · OpenAPI · 图标去重 · 探索返回。
## Load
1. `docs/ECR/ECR-013-scale-bank-explore.md`
2. `docs/BACKEND_DESIGN/BD-2026-013-scale-bank-explore.md`
3. Spec `explore-test.md`
4. `.ai/definition-of-done.md`
## Ordered plan
1. 核对 scalebank embed 与 R13 范围(无临床)
2. OpenAPI 补 `/scale-bank/*`
3. 抽取 H5 图标 allowlist;确认 R8/R14
4. 单测 + integration + vitest
5. TEST_REPORT · HANDOFF→reviewer · STATE
## Owner
`STATE.owner = engineer`
@@ -0,0 +1,27 @@
# HANDOFF — ECR-013 Engineer → Reviewer
**From:** Engineer
**To:** Reviewer
**Date:** 2026-08-13
**ECR:** ECR-013
## Delivered
- scalebank curated A 集 · catalog/category API · bank Get/Submit/Latest
- H5 Explore 精选/分类 · R8/R14 · 独立图标 · 探索返回
- 重构:`lib/homeToolIconName.ts`(类型 + resolve
- OpenAPI `/scale-bank/*`
- TEST_REPORT/ECR-013.md
## Verify
```bash
export ESS_ROOT=/Users/jack/Project/skills/engineering-spec-system
cd apps/api && go test ./internal/scalebank/ ./internal/integration/ -run 'TestCatalogCuratedASet|TestScaleBankResultRoundtrip' -count=1
cd ../user-h5 && npx vitest run src/pages/ScalePage.spec.ts
cd ../.. && python scripts/ess-validate.py --phase coding --ecr ECR-013
```
## Owner next
`STATE.owner = reviewer`
@@ -0,0 +1,21 @@
# HANDOFF — ECR-013 Implementation Report
**ECR:** ECR-013
**Date:** 2026-08-13
## Summary
落地探索 curated 题库(非临床 A 集):embed 目录、作答落库、二次进入只看结果/重测、探索 UI 与返回、OpenAPI。
## Key paths
| Area | Path |
|------|------|
| Bank | `apps/api/internal/scalebank/` |
| Service | `apps/api/internal/service/scale/service.go` |
| H5 | `ExplorePage.vue` · `ExploreBankCategoryPage.vue` · `useScalePage.ts` |
| Icons | `lib/homeToolIconName.ts` · `HomeToolIcon.vue` |
## Deviations
无(相对 BD-2026-013
@@ -0,0 +1,27 @@
# HANDOFF — ECR-014 Architect → Engineer
**Date:** 2026-08-13
**ECR:** ECR-014**Approved** · **Retrospective: true**
**BD:** BD-2026-014 Approved
## Task interpretation
将后台时效字段与前端 `scheduleRefresh` / `useHomeDailyTips` / star·rhythm 静默刷新对齐;补 OpenAPI;跑测。
**禁止**顺手头像 / 题库。
## Load
1. `docs/ECR/ECR-014-temporal-refresh.md`
2. `docs/BACKEND_DESIGN/BD-2026-014-temporal-refresh.md`
3. Spec`home` · `star-profile` · `life-rhythm`
## Ordered plan
1. 确认 migration `000023` 可应用;Tips repo 已注入 router
2. OpenAPIHomeDailyTips / report summary `as_of`+`valid_until` 契约写清
3. `go test` home + report temporal
4. TEST_REPORT · HANDOFF→reviewer · 更新 STATE/TRACE/CHANGELOG
## Owner
`STATE.owner = engineer`
@@ -0,0 +1,29 @@
# HANDOFF — ECR-014 Engineer → Reviewer
**From:** Engineer
**To:** Reviewer
**Date:** 2026-08-13
**ECR:** ECR-014
**Retrospective:** true
## Delivered
- Architect 包已存在;本阶段补齐 OpenAPI 契约(HomeDailyTips envelope · GrowthReport summary 时效说明)
- 确认 migration `000023` / Tips 注入 / temporal refresh 已接线
- `go test` home + report PASS · TEST_REPORT
## Out of this ECR
头像(Spec account-auth R9 已有,须另开 ECR-015)· scalebankECR-013)· textsafeECR-012
## Verify
```bash
export ESS_ROOT=/Users/jack/Project/skills/engineering-spec-system
cd apps/api && go test ./internal/service/home/ ./internal/service/report/ -count=1
cd ../.. && python scripts/ess-validate.py --phase coding --ecr ECR-014
```
## Owner next
`STATE.owner = reviewer`
@@ -0,0 +1,35 @@
# HANDOFF — ECR-015 Architect → Engineer
**Date:** 2026-08-13
**ECR:** ECR-015**Approved** · **Retrospective: true**
**BD:** BD-2026-015 Approved
## Task interpretation
收口头像:确认 migration/接线/OpenAPI/H5/SDK 与 Spec R9 一致;补缺测与 TEST_REPORT;不扩 Scope。
## Load
1. `docs/ECR/ECR-015-account-avatar.md`
2. `docs/BACKEND_DESIGN/BD-2026-015-account-avatar.md`
3. Spec `account-auth.md` R9
4. `.ai/definition-of-done.md`
## Ordered plan
1. 确认 `000018` 已应用;`users.avatar_url` 可读
2. 核对 UploadAvatar · MediaHandler · avatar.Store/ResolveAbs
3.`internal/avatar` 单测(大小/类型/路径穿越)若缺
4. OpenAPI / SDK / MinePage 默认图路径核对
5. TEST_REPORT · HANDOFF→reviewer · STATE
## Smoke checklist
- [ ] 登录后「我的」上传 JPG <2MB → 头像更新
- [ ] WebP/PNG OK;>2MB 或 exe 失败文案可读
- [ ] 未设置头像显示 default-avatar
- [ ] 新标签打开 `/api/v1/media/avatars/...` 可见图
## Owner
`STATE.owner = engineer`
@@ -0,0 +1,26 @@
# HANDOFF — ECR-015 Engineer → Reviewer
**From:** Engineer
**To:** Reviewer
**Date:** 2026-08-13
**ECR:** ECR-015
**Retrospective:** true
## Delivered
- 核对 Spec R9 接线(migration / auth / media / H5 / SDK
- 新增 `internal/avatar/store_test.go`(穿越 · 类型 · 大小 · 覆盖写)
- OpenAPI 补错误码与路径约束说明
- TEST_REPORT
## Verify
```bash
export ESS_ROOT=/Users/jack/Project/skills/engineering-spec-system
cd apps/api && go test ./internal/avatar/ -count=1
cd ../.. && python scripts/ess-validate.py --phase coding --ecr ECR-015
```
## Owner next
`STATE.owner = reviewer`
@@ -0,0 +1,5 @@
# HANDOFF — ECR-016 Architect → Engineer
**ECR:** ECR-016 Approved · RETRO
核对 migrations 已应用 · go test scale · OpenAPI 会员锁说明若缺则补 · TEST_REPORT → reviewer。
`STATE.owner=engineer`
@@ -0,0 +1,3 @@
# HANDOFF — ECR-016 Engineer → Reviewer
核对 DB 题量 · scale 单测 PASS · OpenAPI 会员锁。请 CODE_REVIEW 记 Retro。