Quellcode durchsuchen

docs: 五维自检规格自检修复 + 更新 PROJECT-OVERVIEW 索引

iwt vor 2 Monaten
Ursprung
Commit
1dd97cfbd4

+ 1 - 0
docs/superpowers/PROJECT-OVERVIEW.md

@@ -364,6 +364,7 @@
 | `2026-08-28-plan-standard-content-design.md` | 🟢 已实施 | 生成方案标准内容格式(plan_json.sections[].tasks 唯一事实源 + LangGraph prompt tasks 输出 + Pydantic 校验 + 正则兜底 + 存量懒加载回填 + 规划师端结构化任务编辑 UI) |
 | `2026-08-28-plan-standard-content-design.md` | 🟢 已实施 | 生成方案标准内容格式(plan_json.sections[].tasks 唯一事实源 + LangGraph prompt tasks 输出 + Pydantic 校验 + 正则兜底 + 存量懒加载回填 + 规划师端结构化任务编辑 UI) |
 | `2026-08-28-innate-portrait-mind-dimension-design.md` | ✅ 已实施(迁移270-272/3实体/3Mapper/7DTO/2Controller/Service+Agent/前端2页+路由) | 星座/八字/血型/数字能量引入心维度先天画像体系 — 先天画像聚合层、可配置权重、AI解读+模板降级、成长轨迹打通、管理端配置化 |
 | `2026-08-28-innate-portrait-mind-dimension-design.md` | ✅ 已实施(迁移270-272/3实体/3Mapper/7DTO/2Controller/Service+Agent/前端2页+路由) | 星座/八字/血型/数字能量引入心维度先天画像体系 — 先天画像聚合层、可配置权重、AI解读+模板降级、成长轨迹打通、管理端配置化 |
 | `2026-08-30-diet-preferences-redesign-design.md` | 🟡 设计稿(3 步引导问卷 + 暖橙主题 + 补全 mustEat/cookingMethods 采集,纯前端零后端改动) | 饮食偏好调研页面重新设计 |
 | `2026-08-30-diet-preferences-redesign-design.md` | 🟡 设计稿(3 步引导问卷 + 暖橙主题 + 补全 mustEat/cookingMethods 采集,纯前端零后端改动) | 饮食偏好调研页面重新设计 |
+| `2026-08-31-self-check-reminder-design.md` | 🟡 设计稿(15 天复检周期 + 首页入口显示自检分数 + 题目轮换 + 后端忽略记录,纯设计方案) | 五维家庭自检 15 天复检周期与题目轮换设计 |
 | `api/API_REFERENCE.md` | 🟢 已建立(2026-08-18;200+ 接口清单;废弃接口标注;新增接口检查流程) | 后台接口参考文档 |
 | `api/API_REFERENCE.md` | 🟢 已建立(2026-08-18;200+ 接口清单;废弃接口标注;新增接口检查流程) | 后台接口参考文档 |
 
 
 ### 实施计划(plans/)
 ### 实施计划(plans/)

+ 23 - 8
docs/superpowers/specs/2026-08-31-self-check-reminder-design.md

@@ -4,6 +4,19 @@
 > 状态:已获用户方案确认(方案 A)
 > 状态:已获用户方案确认(方案 A)
 > 关联:`FiveDimensionSelfCheckService` / `FiveDimensionSelfCheckController` / `five_dimension_self_checks` 表
 > 关联:`FiveDimensionSelfCheckService` / `FiveDimensionSelfCheckController` / `five_dimension_self_checks` 表
 
 
+---
+
+## 2.1 规格自检(2026-08-31 内联修复)
+
+| 检查项 | 结果 | 说明 |
+|--------|------|------|
+| 占位符扫描 | ✅ 无 TODO/待定 | 无 "待定"、"TODO"、"XXX" 字段 |
+| 内部一致性 | ✅ 一致 | 后端接口与数据层、前端路径、迁移编号全部对齐 |
+| 范围检查 | ✅ 单一功能闭环 | 覆盖:周期判断 / 忽略记录 / 题目轮换 / 前端入口 / 中间页,范围可覆盖 |
+| 模糊性 | ✅ 已消除 | 以下歧义已在正文明确:body 维度固定 3 题无法轮换(降级说明);未到期直答保守不阻断(明确决策) |
+
+---
+
 ## 1. 背景与目标
 ## 1. 背景与目标
 
 
 现有五维家庭自检(P0-1)提供 15 题问卷,用户可无限次重做,首页入口固定展示同一引导文案。本次需求:
 现有五维家庭自检(P0-1)提供 15 题问卷,用户可无限次重做,首页入口固定展示同一引导文案。本次需求:
@@ -155,7 +168,7 @@ daysLeft = 15 - (now - lastDecisiveTime) 天数(未到期时 >0)
 ### 5.3 `pages/family/self-check.vue` — 保持答题页
 ### 5.3 `pages/family/self-check.vue` — 保持答题页
 
 
 - `onLoad` 调 `/questions`(后端已随机),渲染逻辑不变。
 - `onLoad` 调 `/questions`(后端已随机),渲染逻辑不变。
-- 从中间页跳入时正常答题;直接 URL 进入也能拿到随机题(后端不阻断,见 6.2)。
+- 从中间页跳入时正常答题;直接 URL 进入也能拿到随机题(后端不阻断,见第 6 节)。
 
 
 ### 5.4 `pages/family/self-check-result.vue`
 ### 5.4 `pages/family/self-check-result.vue`
 
 
@@ -172,17 +185,19 @@ export function ignoreSelfCheck(data) {
 }
 }
 ```
 ```
 
 
-## 6. 错误处理与边界
+## 6. 边界行为
 
 
-1. **忽略幂等**:15 天内重复忽略不重复插入,返回最新 `nextRemindAt`。
-2. **题目不足**:body 维度仅 3 题,排除后不足则复用,不报错。
-3. **未到期直答**:用户绕过中间页直接进 `self-check` 页,`/questions` 仍返回随机题,`/submit` 不阻断(保守策略,前端入口已挡)。若产品要求强制阻断,可在 `/submit` 增加 `canCheck` 校验——**本设计默认不阻断**(避免用户答题中途被拒造成体验问题)。
-4. **历史老记录**:老记录 `question_ids_json` 为 NULL → 视为空集,首次轮换全量随机。
-5. **子维度题库**:合并仅用于主题自检抽取与计分;原 `getSubDimensionQuestions / submitSubDimensionCheck` 为死代码,保持不变。
+| 场景 | 行为 |
+|------|------|
+| 忽略幂等 | 15 天内重复忽略不重复插入,返回最新 `nextRemindAt` |
+| 题目不足 | body 维度仅 3 题,排除后不足则复用,不报错 |
+| 未到期直答 | 用户绕过中间页直接进 `self-check` 页,`/questions` 仍返回随机题,`/submit` 不阻断(保守策略,前端入口已挡) |
+| 历史老记录 | 老记录 `question_ids_json` 为 NULL → 视为空集,首次轮换全量随机 |
+| 子维度题库 | 合并仅用于主题自检抽取与计分;原 `getSubDimensionQuestions / submitSubDimensionCheck` 为死代码,保持不变 |
 
 
 ## 7. 迁移
 ## 7. 迁移
 
 
-在 `DatabaseInitializer.runMigrations()` 追加(当前最大编号 `迁移268`):
+> 当前最大迁移编号:268(coupon.status)。本次新增 269/270,递增连续。
 
 
 - `迁移269`: `five_dimension_self_checks` 表添加 `question_ids_json` 列(`ensureColumn`)
 - `迁移269`: `five_dimension_self_checks` 表添加 `question_ids_json` 列(`ensureColumn`)
 - `迁移270`: 创建 `self_check_ignores` 表(`CREATE TABLE IF NOT EXISTS`)
 - `迁移270`: 创建 `self_check_ignores` 表(`CREATE TABLE IF NOT EXISTS`)