docs: 任务编号改为中文领域前缀
This commit is contained in:
+53
-52
@@ -20,52 +20,53 @@
|
|||||||
- 本文档不记载开发过程,只保留「待办 + 依据 + 验收标准」。禁止写入任何密钥、密码、Token 明文。
|
- 本文档不记载开发过程,只保留「待办 + 依据 + 验收标准」。禁止写入任何密钥、密码、Token 明文。
|
||||||
- 条目粒度按「一个代理能独立完成并自测」切分,跨仓库条目已标注涉及仓库。
|
- 条目粒度按「一个代理能独立完成并自测」切分,跨仓库条目已标注涉及仓库。
|
||||||
- §3「设计决策」不是待办:改动前必须先与维护者确认,禁止当成缺陷直接「修复」。若某项决策需要调整,先在 §3 改写该条,再开对应实现条目。
|
- §3「设计决策」不是待办:改动前必须先与维护者确认,禁止当成缺陷直接「修复」。若某项决策需要调整,先在 §3 改写该条,再开对应实现条目。
|
||||||
|
- 编号规则:条目编号以中文领域前缀开头,形如 `复习-02`,前缀必须让人一眼看出改动落在哪块(会话、复习、报告、归属、导出、AI、数据、安全、运维、清理);设计决策用 `会话-决策01` 这种形式。编号不复用,旧编号作为别名保留在条目首次出现处(如 `复习-02(原 LPT-09)`)。
|
||||||
|
|
||||||
## 2. 状态总览
|
## 2. 状态总览
|
||||||
|
|
||||||
| 优先级 | 条目 |
|
| 优先级 | 条目 |
|
||||||
|--------|------|
|
|--------|------|
|
||||||
| P0 数据正确性 | LPT-01、LPT-03 ~ LPT-05(原 LPT-02 已改为设计决策 D-01,编号不再复用)|
|
| P0 数据正确性 | 会话-01 ~ 会话-04(原 LPT-01、LPT-03 ~ LPT-05;原 LPT-02 已改为设计决策 会话-决策01,编号不再复用)|
|
||||||
| P1 会挡路的功能缺口 | LPT-07 ~ LPT-10(原 LPT-06 已实现,编号不再复用)|
|
| P1 会挡路的功能缺口 | 会话-05、报告-01、复习-02、导出-01(原 LPT-07 ~ LPT-10;原 LPT-06 已实现,编号不再复用)|
|
||||||
| P2 AI 链路 | LPT-11 ~ LPT-14 |
|
| P2 AI 链路 | AI-01 ~ AI-04(原 LPT-11 ~ LPT-14)|
|
||||||
| P3 检索与数据增长 | LPT-15 ~ LPT-20 |
|
| P3 检索与数据增长 | 数据-01、复习-03 ~ 复习-05、数据-02 ~ 数据-03(原 LPT-15 ~ LPT-20)|
|
||||||
| P4 安全与运维 | LPT-21 ~ LPT-26 |
|
| P4 安全与运维 | 安全-01 ~ 安全-04、运维-01、清理-01(原 LPT-21 ~ LPT-26)|
|
||||||
| 待实施的设计变更 | DC-01 内容归属与待归类 |
|
| 待实施的设计变更 | 归属-01 内容归属与待归类(原 DC-01)|
|
||||||
| 待确认的设计缺口 | DC-02 复习回路补全 |
|
| 待确认的设计缺口 | 复习-01 复习回路补全(原 DC-02)|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. 已确认的设计决策(不是待办,不要当缺陷改)
|
## 3. 已确认的设计决策(不是待办,不要当缺陷改)
|
||||||
|
|
||||||
### D-01 少于 10 分钟的有效学习时间不计入总学习时间
|
### 会话-决策01(原 D-01)少于 10 分钟的有效学习时间不计入总学习时间
|
||||||
|
|
||||||
- **依据**:`StudySessionsEntity.endedStudySession()`:`effectiveTime < 10 * 60 → setEffectiveTime(0); setEffectivenessRatio(0)`;常量 `MIN_EFFECTIVE_TIME_SECONDS`。
|
- **依据**:`StudySessionsEntity.endedStudySession()`:`effectiveTime < 10 * 60 → setEffectiveTime(0); setEffectivenessRatio(0)`;常量 `MIN_EFFECTIVE_TIME_SECONDS`。
|
||||||
- **决策**:25 分钟的番茄钟已经足够碎片化,更短的碎片视为噪声,刻意不记录。
|
- **决策**:25 分钟的番茄钟已经足够碎片化,更短的碎片视为噪声,刻意不记录。
|
||||||
- **注意**:这与 `lpt-docs/design/principles.md` 中「量化,但不评判」存在张力,但已由维护者确认为有意取舍。除非维护者主动改变口径,否则不要改成「保留真实值 + 打标记」。
|
- **注意**:这与 `lpt-docs/design/principles.md` 中「量化,但不评判」存在张力,但已由维护者确认为有意取舍。除非维护者主动改变口径,否则不要改成「保留真实值 + 打标记」。
|
||||||
- **来源**:原 LPT-02 条目,2026-09-14 由维护者澄清后重新归类。
|
- **来源**:原 LPT-02 条目,2026-09-14 由维护者澄清后重新归类。
|
||||||
|
|
||||||
### D-02 遗忘判定阈值为 50 分钟(2 × `WORK_DURATION`)
|
### 会话-决策02(原 D-02)遗忘判定阈值为 50 分钟(2 × `WORK_DURATION`)
|
||||||
|
|
||||||
- **依据**:`StudySessionsEntity.isOverTime()`:`minutes >= WORK_DURATION * 2`;触发时按 `lastStartTime + 25 分钟` 截断有效时间。
|
- **依据**:`StudySessionsEntity.isOverTime()`:`minutes >= WORK_DURATION * 2`;触发时按 `lastStartTime + 25 分钟` 截断有效时间。
|
||||||
- **决策**:25~50 分钟区间默认用户仍在屏幕前(番茄钟已提醒但可能正在收尾),不做截断;超过 50 分钟才判定为「忘了点暂停/结束」。
|
- **决策**:25~50 分钟区间默认用户仍在屏幕前(番茄钟已提醒但可能正在收尾),不做截断;超过 50 分钟才判定为「忘了点暂停/结束」。
|
||||||
- **注意**:不要把这个阈值改成等于番茄钟长度(25 分钟);阈值存在的意义是区分「在学」与「忘了关」。真正要修的是执行路径不统一,见 LPT-01。
|
- **注意**:不要把这个阈值改成等于番茄钟长度(25 分钟);阈值存在的意义是区分「在学」与「忘了关」。真正要修的是执行路径不统一,见 会话-01。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 4. P0 数据正确性
|
## 4. P0 数据正确性
|
||||||
|
|
||||||
### LPT-01 遗忘检测只在「重新进入学习页面」这一条路径上执行
|
### 会话-01(原 LPT-01)遗忘检测只在「重新进入学习页面」这一条路径上执行
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`(可选 `lpt-fe` 心跳)
|
- **涉及仓库**:`lpt-be`(可选 `lpt-fe` 心跳)
|
||||||
- **前提**:系统已具备遗忘检测(见 D-02),问题不在于缺少机制,而在于它只挂在一条路径上。
|
- **前提**:系统已具备遗忘检测(见 会话-决策02),问题不在于缺少机制,而在于它只挂在一条路径上。
|
||||||
- **依据**:`pausedStudySession(lastStartTime.plusMinutes(WORK_DURATION))` 只在 `StudySessionsServiceImpl.startOrContinueStudySession()` 中出现(全仓唯一)。而 `pauseStudySession()` 与 `StudySessionsEntity.endedStudySession()`(内部 `pausedStudySession(now)`)都是直接 `effective += now - lastStartTime`,没有遗忘检测。
|
- **依据**:`pausedStudySession(lastStartTime.plusMinutes(WORK_DURATION))` 只在 `StudySessionsServiceImpl.startOrContinueStudySession()` 中出现(全仓唯一)。而 `pauseStudySession()` 与 `StudySessionsEntity.endedStudySession()`(内部 `pausedStudySession(now)`)都是直接 `effective += now - lastStartTime`,没有遗忘检测。
|
||||||
- **影响**:页面不刷新、停留在前台时,pause / ended 两条路径依然可达。典型场景:番茄钟响起后用户离开,3 小时后回到同一个页面点「休息」(`StartTask.vue` 的 `restTimer()` → `stopTimer()` → pause 接口),这 3 小时被全额计入有效学习时间。是否被截断取决于用户有没有刷新过页面。
|
- **影响**:页面不刷新、停留在前台时,pause / ended 两条路径依然可达。典型场景:番茄钟响起后用户离开,3 小时后回到同一个页面点「休息」(`StartTask.vue` 的 `restTimer()` → `stopTimer()` → pause 接口),这 3 小时被全额计入有效学习时间。是否被截断取决于用户有没有刷新过页面。
|
||||||
- **理由**:这恰好落在 D-02 想覆盖的「忘了点暂停/结束」场景里,属于检测点遗漏,会让同一行为产生两种统计结果,直接损害时间数据的可信度。
|
- **理由**:这恰好落在 会话-决策02 想覆盖的「忘了点暂停/结束」场景里,属于检测点遗漏,会让同一行为产生两种统计结果,直接损害时间数据的可信度。
|
||||||
- **建议**:抽出统一的结算时间函数(如 `resolveSettlementTime(session)`:`now - lastStartTime > 50min` 时返回 `lastStartTime + 25min`,否则返回 `now`),在 pause / ended / 定时收敛三条路径共用;番茄钟长度与两类阈值统一配置化。
|
- **建议**:抽出统一的结算时间函数(如 `resolveSettlementTime(session)`:`now - lastStartTime > 50min` 时返回 `lastStartTime + 25min`,否则返回 `now`),在 pause / ended / 定时收敛三条路径共用;番茄钟长度与两类阈值统一配置化。
|
||||||
- **验收**:构造「ONGOING 且 `last_start_time` 为 3 小时前」的会话,分别调用 pause 与 ended 接口,断言 `effective_time` 被截断到 25 分钟;`StudySessionsEntityTest` 同步补用例。
|
- **验收**:构造「ONGOING 且 `last_start_time` 为 3 小时前」的会话,分别调用 pause 与 ended 接口,断言 `effective_time` 被截断到 25 分钟;`StudySessionsEntityTest` 同步补用例。
|
||||||
|
|
||||||
### LPT-03 `isOverTime()` 误报「超时 25 分钟」
|
### 会话-02(原 LPT-03)`isOverTime()` 误报「超时 25 分钟」
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -74,7 +75,7 @@
|
|||||||
- **建议**:拆分「是否需要截断」与「是否需要提示」两个判定,并纳入 `end_time` / `state`。
|
- **建议**:拆分「是否需要截断」与「是否需要提示」两个判定,并纳入 `end_time` / `state`。
|
||||||
- **验收**:对 `state=PAUSED` 且 `end_time` 已存在的会话,接口不返回 `systemMessage`。
|
- **验收**:对 `state=PAUSED` 且 `end_time` 已存在的会话,接口不返回 `systemMessage`。
|
||||||
|
|
||||||
### LPT-04 结束会话不幂等,会产生重复学习报告
|
### 会话-03(原 LPT-04)结束会话不幂等,会产生重复学习报告
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -83,25 +84,25 @@
|
|||||||
- **建议**:`state != ENDED` 才允许写报告,否则幂等返回;接口层可加幂等键。
|
- **建议**:`state != ENDED` 才允许写报告,否则幂等返回;接口层可加幂等键。
|
||||||
- **验收**:对同一 `sessionNum` 连续调用两次结束接口,第二次不新增报告(断言报告条数)。
|
- **验收**:对同一 `sessionNum` 连续调用两次结束接口,第二次不新增报告(断言报告条数)。
|
||||||
|
|
||||||
### LPT-05 缺少服务端兜底:悬挂会话与超长会话无人收敛
|
### 会话-04(原 LPT-05)缺少服务端兜底:悬挂会话与超长会话无人收敛
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
- **依据**:全仓无 `@Scheduled` / `EnableScheduling`;`getActiveSession()` 直接返回最新的 ONGOING/PAUSED 会话;遗忘检测只在用户主动访问该任务页面时执行(见 LPT-01)。
|
- **依据**:全仓无 `@Scheduled` / `EnableScheduling`;`getActiveSession()` 直接返回最新的 ONGOING/PAUSED 会话;遗忘检测只在用户主动访问该任务页面时执行(见 会话-01)。
|
||||||
- **影响**:
|
- **影响**:
|
||||||
- 会话可长期停留「进行中/暂停」,只能等用户回到该任务页才被被动修正;用户不访问时「今日有效学习时间」等统计是滞后或错误的。
|
- 会话可长期停留「进行中/暂停」,只能等用户回到该任务页才被被动修正;用户不访问时「今日有效学习时间」等统计是滞后或错误的。
|
||||||
- 用户始终不回到该任务时,ONGOING 会话永久悬挂,并被 LPT-07 的活跃会话守卫用来阻塞新任务。
|
- 用户始终不回到该任务时,ONGOING 会话永久悬挂,并被 会话-05 的活跃会话守卫用来阻塞新任务。
|
||||||
- **建议**:
|
- **建议**:
|
||||||
1. 增加超长会话硬兜底:ONGOING 且 `now - last_start_time` 超过第二阈值(暂定 2 小时)时强制暂停、按遗忘规则(D-02)截断,并打异常标记,供前端提示「本次会话疑似忘记结束」。
|
1. 增加超长会话硬兜底:ONGOING 且 `now - last_start_time` 超过第二阈值(暂定 2 小时)时强制暂停、按遗忘规则(会话-决策02)截断,并打异常标记,供前端提示「本次会话疑似忘记结束」。
|
||||||
2. 收敛方式:惰性收敛(读取时收敛)+ 低频定时扫描兜底,二选一或并用。
|
2. 收敛方式:惰性收敛(读取时收敛)+ 低频定时扫描兜底,二选一或并用。
|
||||||
3. 三类阈值(25 分钟番茄钟、50 分钟遗忘判定、2 小时强制暂停)统一配置化,不要散落在实体常量里。
|
3. 三类阈值(25 分钟番茄钟、50 分钟遗忘判定、2 小时强制暂停)统一配置化,不要散落在实体常量里。
|
||||||
- **验收**:制造一个 3 小时前的 ONGOING 会话,在不访问该任务页面的前提下,惰性/定时收敛后状态为 PAUSED 且有效时间已按 D-02 截断;正常进行中的会话不受影响。
|
- **验收**:制造一个 3 小时前的 ONGOING 会话,在不访问该任务页面的前提下,惰性/定时收敛后状态为 PAUSED 且有效时间已按 会话-决策02 截断;正常进行中的会话不受影响。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. P1 会挡路的功能缺口
|
## 5. P1 会挡路的功能缺口
|
||||||
|
|
||||||
### LPT-07 活跃会话拦截没有出路,会永久堵住新任务
|
### 会话-05(原 LPT-07)活跃会话拦截没有出路,会永久堵住新任务
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-fe`(+ `lpt-be` 需提供结束/放弃能力)
|
- **涉及仓库**:`lpt-fe`(+ `lpt-be` 需提供结束/放弃能力)
|
||||||
@@ -110,7 +111,7 @@
|
|||||||
- **建议**:弹窗补充「结束它并开始新任务」或「放弃该会话」出口;复用已实现的会话关闭能力(`POST /{sessionNum}/study-sessions/ended` 与 `.../abort`,后者仅限未产生学习残片的会话)。
|
- **建议**:弹窗补充「结束它并开始新任务」或「放弃该会话」出口;复用已实现的会话关闭能力(`POST /{sessionNum}/study-sessions/ended` 与 `.../abort`,后者仅限未产生学习残片的会话)。
|
||||||
- **验收**:存在陈旧活跃会话时,用户可在一次交互内开始新任务。
|
- **验收**:存在陈旧活跃会话时,用户可在一次交互内开始新任务。
|
||||||
|
|
||||||
### LPT-08 学习报告与知识碎片不可修订
|
### 报告-01(原 LPT-08)学习报告与知识碎片不可修订
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`(+ `lpt-fe`)
|
- **涉及仓库**:`lpt-be`(+ `lpt-fe`)
|
||||||
@@ -120,22 +121,22 @@
|
|||||||
- **建议**:报告支持编辑与删除;碎片支持删除;删除需考虑对标准导图、回忆记录、统计的影响(软删除 + 标记重建导图)。
|
- **建议**:报告支持编辑与删除;碎片支持删除;删除需考虑对标准导图、回忆记录、统计的影响(软删除 + 标记重建导图)。
|
||||||
- **验收**:报告/碎片可编辑与删除;删除后 Feed 与统计不再包含该条。
|
- **验收**:报告/碎片可编辑与删除;删除后 Feed 与统计不再包含该条。
|
||||||
|
|
||||||
### LPT-09 复习 Feed 只读,没有反馈动作
|
### 复习-02(原 LPT-09)复习 Feed 只读,没有反馈动作
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`(+ `lpt-fe`)
|
- **涉及仓库**:`lpt-be`(+ `lpt-fe`)
|
||||||
- **依据**:Feed 仅提供列表/详情/回忆对比;`ReviewServiceImpl.reviewNeedWeight()` 的智能权重只有两个信号——时间衰减(`createdTime`)与任务最近一次回忆覆盖率。
|
- **依据**:Feed 仅提供列表/详情/回忆对比;`ReviewServiceImpl.reviewNeedWeight()` 的智能权重只有两个信号——时间衰减(`createdTime`)与任务最近一次回忆覆盖率。
|
||||||
- **影响**:无法表达「这条其实很熟」与「这条完全没印象」;权重长期只有两个偏置,也没有「已复习」状态,同一批内容会反复出现。
|
- **影响**:无法表达「这条其实很熟」与「这条完全没印象」;权重长期只有两个偏置,也没有「已复习」状态,同一批内容会反复出现。
|
||||||
- **建议**:加轻量动作(稍后再看 / 已掌握),把「上次复习时间」变成第三个权重信号;保持既有「无压力、偶遇式」设计,不引入强制清单。
|
- **建议**:加轻量动作(稍后再看 / 已掌握),把「上次复习时间」变成第三个权重信号;保持既有「无压力、偶遇式」设计,不引入强制清单。
|
||||||
- **依赖**:动作形态需先确认 DC-02(§11)中的反馈动作取舍。
|
- **依赖**:动作形态需先确认 复习-01(§11)中的反馈动作取舍。
|
||||||
- **验收**:用户反馈动作可落库并在下一次 Feed 排序中生效。
|
- **验收**:用户反馈动作可落库并在下一次 Feed 排序中生效。
|
||||||
|
|
||||||
### LPT-10 无数据导出
|
### 导出-01(原 LPT-10)无数据导出
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`(+ `lpt-fe`)
|
- **涉及仓库**:`lpt-be`(+ `lpt-fe`)
|
||||||
- **依据**:端点清单中没有任何导出能力。
|
- **依据**:端点清单中没有任何导出能力。
|
||||||
- **理由**:`lpt-docs` 明确系统定位是「辅助学习的工具」,工具型系统应保证数据可携带;同时可缓解备份粒度过粗的问题(见 LPT-25)。
|
- **理由**:`lpt-docs` 明确系统定位是「辅助学习的工具」,工具型系统应保证数据可携带;同时可缓解备份粒度过粗的问题(见 运维-01)。
|
||||||
- **建议**:导出学习报告、知识碎片、任务统计为 Markdown / JSON,按任务或时间范围筛选。
|
- **建议**:导出学习报告、知识碎片、任务统计为 Markdown / JSON,按任务或时间范围筛选。
|
||||||
- **验收**:导出内容可独立阅读,包含报告/碎片原文与时间信息。
|
- **验收**:导出内容可独立阅读,包含报告/碎片原文与时间信息。
|
||||||
|
|
||||||
@@ -143,16 +144,16 @@
|
|||||||
|
|
||||||
## 6. P2 AI 链路(收益成本比最高)
|
## 6. P2 AI 链路(收益成本比最高)
|
||||||
|
|
||||||
### LPT-11 `recallCompare` 在事务中同步等待 AI,长事务占用数据库连接
|
### AI-01(原 LPT-11)`recallCompare` 在事务中同步等待 AI,长事务占用数据库连接
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
- **依据**:`StandardMindMapServiceImpl.recallCompare()` 标注 `@Transactional`,内部同步调用 `AiServiceClient.compareRecall()`(轮询上限 `lpt.ai-service.timeout-seconds: 600`)。Hikari 连接池未显式配置,为默认 10。
|
- **依据**:`StandardMindMapServiceImpl.recallCompare()` 标注 `@Transactional`,内部同步调用 `AiServiceClient.compareRecall()`(轮询上限 `lpt.ai-service.timeout-seconds: 600`)。Hikari 连接池未显式配置,为默认 10。
|
||||||
- **影响**:并发几个回忆对比即可耗尽连接池,导致全站请求阻塞。**这是建议最先修的一条:把 AI 调用移出事务即可,改动小、风险低。**
|
- **影响**:并发几个回忆对比即可耗尽连接池,导致全站请求阻塞。**这是建议最先修的一条:把 AI 调用移出事务即可,改动小、风险低。**
|
||||||
- **建议**:先做纯读的对比计算(事务外),再开短事务写入回忆记录;或引入任务表 + 异步回写(与 LPT-12 一起做)。
|
- **建议**:先做纯读的对比计算(事务外),再开短事务写入回忆记录;或引入任务表 + 异步回写(与 AI-02 一起做)。
|
||||||
- **验收**:AI 调用期间不持有数据库连接(可通过连接池监控或长事务日志证明)。
|
- **验收**:AI 调用期间不持有数据库连接(可通过连接池监控或长事务日志证明)。
|
||||||
|
|
||||||
### LPT-12 AI 全链路同步阻塞,用户需干等最长 10 分钟
|
### AI-02(原 LPT-12)AI 全链路同步阻塞,用户需干等最长 10 分钟
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be` + `lpt-fe` + `lpt-ai`
|
- **涉及仓库**:`lpt-be` + `lpt-fe` + `lpt-ai`
|
||||||
@@ -161,7 +162,7 @@
|
|||||||
- **建议**:`lpt-be` 建 AI 任务表(提交后立即返回 taskId),前端轮询 `lpt-be`;结果回写后前端再取。生成期间允许离开页面再回来。
|
- **建议**:`lpt-be` 建 AI 任务表(提交后立即返回 taskId),前端轮询 `lpt-be`;结果回写后前端再取。生成期间允许离开页面再回来。
|
||||||
- **验收**:提交 AI 任务后接口在秒级返回任务标识;任务结果可重复获取,无需重试即可拿到。
|
- **验收**:提交 AI 任务后接口在秒级返回任务标识;任务结果可重复获取,无需重试即可拿到。
|
||||||
|
|
||||||
### LPT-13 `lpt-ai` 单 worker 串行且无重试
|
### AI-03(原 LPT-13)`lpt-ai` 单 worker 串行且无重试
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-ai`(+ `lpt-be` 超时策略)
|
- **涉及仓库**:`lpt-ai`(+ `lpt-be` 超时策略)
|
||||||
@@ -170,7 +171,7 @@
|
|||||||
- **建议**:worker pool(并发度对齐服务商限流)+ 429/5xx 退避重试 + 幂等键/结果缓存(同一导图、同一报告草稿的相同输入直接复用)。
|
- **建议**:worker pool(并发度对齐服务商限流)+ 429/5xx 退避重试 + 幂等键/结果缓存(同一导图、同一报告草稿的相同输入直接复用)。
|
||||||
- **验收**:并发 N 个任务时耗时不再线性增长;可重试错误不产生失败结论。
|
- **验收**:并发 N 个任务时耗时不再线性增长;可重试错误不产生失败结论。
|
||||||
|
|
||||||
### LPT-14 防并发锁是 JVM 内存锁
|
### AI-04(原 LPT-14)防并发锁是 JVM 内存锁
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -183,7 +184,7 @@
|
|||||||
|
|
||||||
## 7. P3 检索与数据增长
|
## 7. P3 检索与数据增长
|
||||||
|
|
||||||
### LPT-15 业务主表缺索引,而每条查询都被追加租户条件
|
### 数据-01(原 LPT-15)业务主表缺索引,而每条查询都被追加租户条件
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -192,7 +193,7 @@
|
|||||||
- **建议**:按实际查询补复合索引,例如 `(created_by, task_num, session_state)`、`(created_by, session_num, created_time)`、`(created_by, created_time)`、`(created_by, task_num, calculated_priority)`。
|
- **建议**:按实际查询补复合索引,例如 `(created_by, task_num, session_state)`、`(created_by, session_num, created_time)`、`(created_by, created_time)`、`(created_by, task_num, calculated_priority)`。
|
||||||
- **验收**:`EXPLAIN` 显示关键查询走索引而非全表扫描。
|
- **验收**:`EXPLAIN` 显示关键查询走索引而非全表扫描。
|
||||||
|
|
||||||
### LPT-16 Feed 使用 `ORDER BY RAND()`
|
### 复习-03(原 LPT-16)Feed 使用 `ORDER BY RAND()`
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -201,7 +202,7 @@
|
|||||||
- **建议**:改为 id 区间随机、预生成候选池或「按时间窗口随机 + 按需补充」。
|
- **建议**:改为 id 区间随机、预生成候选池或「按时间窗口随机 + 按需补充」。
|
||||||
- **验收**:Feed 接口不产生全表随机排序(`EXPLAIN` 可验证)。
|
- **验收**:Feed 接口不产生全表随机排序(`EXPLAIN` 可验证)。
|
||||||
|
|
||||||
### LPT-17 取「每任务最近一次回忆覆盖率」时拉取全部回忆记录
|
### 复习-04(原 LPT-17)取「每任务最近一次回忆覆盖率」时拉取全部回忆记录
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
- **建议**:改为分组取最新(子查询/`MAX(created_time)`),或把最近覆盖率冗余到任务表/导图表。
|
- **建议**:改为分组取最新(子查询/`MAX(created_time)`),或把最近覆盖率冗余到任务表/导图表。
|
||||||
- **验收**:该查询返回行数等于任务数而非回忆记录数。
|
- **验收**:该查询返回行数等于任务数而非回忆记录数。
|
||||||
|
|
||||||
### LPT-18 统计聚合在内存中完成且无时间范围
|
### 数据-02(原 LPT-18)统计聚合在内存中完成且无时间范围
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -219,7 +220,7 @@
|
|||||||
- **建议**:下推为 SQL 聚合(含今日/本周条件),必要时物化统计表。
|
- **建议**:下推为 SQL 聚合(含今日/本周条件),必要时物化统计表。
|
||||||
- **验收**:统计接口加载的会话行数与任务数同阶,不随历史会话数线性增长。
|
- **验收**:统计接口加载的会话行数与任务数同阶,不随历史会话数线性增长。
|
||||||
|
|
||||||
### LPT-19 Feed 返回全文
|
### 复习-05(原 LPT-19)Feed 返回全文
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be` + `lpt-fe`
|
- **涉及仓库**:`lpt-be` + `lpt-fe`
|
||||||
@@ -227,7 +228,7 @@
|
|||||||
- **建议**:Feed 返回摘要字段(含长度标记),详情接口按需拉全文。
|
- **建议**:Feed 返回摘要字段(含长度标记),详情接口按需拉全文。
|
||||||
- **验收**:Feed 响应体积显著下降且展示行为不变。
|
- **验收**:Feed 响应体积显著下降且展示行为不变。
|
||||||
|
|
||||||
### LPT-20 编号生成有撞号风险且无唯一约束
|
### 数据-03(原 LPT-20)编号生成有撞号风险且无唯一约束
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -240,7 +241,7 @@
|
|||||||
|
|
||||||
## 8. P4 安全与运维
|
## 8. P4 安全与运维
|
||||||
|
|
||||||
### LPT-21 数据库凭证明文入库
|
### 安全-01(原 LPT-21)数据库凭证明文入库
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be` + `lpt-infra`
|
- **涉及仓库**:`lpt-be` + `lpt-infra`
|
||||||
@@ -249,7 +250,7 @@
|
|||||||
- **验收**:仓库中不再出现明文凭证;本地开发通过环境变量或本地未跟踪配置提供。
|
- **验收**:仓库中不再出现明文凭证;本地开发通过环境变量或本地未跟踪配置提供。
|
||||||
- **注意**:**不要把任何密码值复制进本文档。**
|
- **注意**:**不要把任何密码值复制进本文档。**
|
||||||
|
|
||||||
### LPT-22 Actuator 端点鉴权边界未固定
|
### 安全-02(原 LPT-22)Actuator 端点鉴权边界未固定
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -258,7 +259,7 @@
|
|||||||
- **建议**:显式固定暴露白名单,或把管理端点放到独立端口并加网络策略。
|
- **建议**:显式固定暴露白名单,或把管理端点放到独立端口并加网络策略。
|
||||||
- **验收**:未鉴权可访问的端点清单与预期完全一致。
|
- **验收**:未鉴权可访问的端点清单与预期完全一致。
|
||||||
|
|
||||||
### LPT-23 `lpt-ai` 缺少入站防护(SSRF 与滥用)
|
### 安全-03(原 LPT-23)`lpt-ai` 缺少入站防护(SSRF 与滥用)
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-ai`
|
- **涉及仓库**:`lpt-ai`
|
||||||
@@ -266,7 +267,7 @@
|
|||||||
- **建议**:抓取改为白名单/内网地址黑名单 + 协议与重定向校验;入站加鉴权与限流;`/admin` 加访问控制;日志中学习内容按需脱敏或缩短保留期。
|
- **建议**:抓取改为白名单/内网地址黑名单 + 协议与重定向校验;入站加鉴权与限流;`/admin` 加访问控制;日志中学习内容按需脱敏或缩短保留期。
|
||||||
- **验收**:`/fetch-title` 无法访问内网与元数据地址;未授权请求无法提交 AI 任务。
|
- **验收**:`/fetch-title` 无法访问内网与元数据地址;未授权请求无法提交 AI 任务。
|
||||||
|
|
||||||
### LPT-24 生产环境打印全部 SQL
|
### 安全-04(原 LPT-24)生产环境打印全部 SQL
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be`
|
- **涉及仓库**:`lpt-be`
|
||||||
@@ -275,7 +276,7 @@
|
|||||||
- **建议**:改为 `Slf4jImpl` 并按环境分级,生产默认不打印参数。
|
- **建议**:改为 `Slf4jImpl` 并按环境分级,生产默认不打印参数。
|
||||||
- **验收**:生产环境不再输出逐条 SQL。
|
- **验收**:生产环境不再输出逐条 SQL。
|
||||||
|
|
||||||
### LPT-25 备份只在集群内同一 PVC
|
### 运维-01(原 LPT-25)备份只在集群内同一 PVC
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-infra`
|
- **涉及仓库**:`lpt-infra`
|
||||||
@@ -284,7 +285,7 @@
|
|||||||
- **建议**:增加异地/对象存储副本,按库分文件,并定期做恢复演练。
|
- **建议**:增加异地/对象存储副本,按库分文件,并定期做恢复演练。
|
||||||
- **验收**:可在集群外取得可恢复的备份,并完成一次演练记录。
|
- **验收**:可在集群外取得可恢复的备份,并完成一次演练记录。
|
||||||
|
|
||||||
### LPT-26 死代码与死表清理
|
### 清理-01(原 LPT-26)死代码与死表清理
|
||||||
|
|
||||||
- [ ] 未完成
|
- [ ] 未完成
|
||||||
- **涉及仓库**:`lpt-be` + `lpt-fe`
|
- **涉及仓库**:`lpt-be` + `lpt-fe`
|
||||||
@@ -296,17 +297,17 @@
|
|||||||
|
|
||||||
## 9. 建议落地顺序
|
## 9. 建议落地顺序
|
||||||
|
|
||||||
1. **LPT-11**(AI 移出事务)—— 最小改动,避免全站卡死。
|
1. **AI-01**(AI 移出事务)—— 最小改动,避免全站卡死。
|
||||||
2. **LPT-01 / LPT-04**(结算时间统一、结束幂等)—— 一批改完即修正时间数据口径,建议同时补用例。
|
2. **会话-01 / 会话-03**(结算时间统一、结束幂等)—— 一批改完即修正时间数据口径,建议同时补用例。
|
||||||
3. **LPT-05 / LPT-07**(服务端收敛与 2 小时硬兜底、活跃会话出口)。
|
3. **会话-04 / 会话-05**(服务端收敛与 2 小时硬兜底、活跃会话出口)。
|
||||||
4. **LPT-12 / LPT-13**(AI 异步化与队列可靠性)。
|
4. **AI-02 / AI-03**(AI 异步化与队列可靠性)。
|
||||||
5. **LPT-15 ~ LPT-18**(索引与聚合下推)—— 数据量还小时成本最低。
|
5. **数据-01 / 复习-03 / 复习-04 / 数据-02**(索引与聚合下推)—— 数据量还小时成本最低。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 10. 已确认的设计变更(待实施)
|
## 10. 已确认的设计变更(待实施)
|
||||||
|
|
||||||
### DC-01 内容归属与待归类
|
### 归属-01(原 DC-01)内容归属与待归类
|
||||||
|
|
||||||
- **文档**:`lpt-docs/docs/concepts/knowledge-ownership.md`(设计已确认,见文末结论)、`lpt-docs/docs/concepts/learning-report.md`(结构化报告形态)、`lpt-docs/docs/design/system-structure.md`(设计总纲)
|
- **文档**:`lpt-docs/docs/concepts/knowledge-ownership.md`(设计已确认,见文末结论)、`lpt-docs/docs/concepts/learning-report.md`(结构化报告形态)、`lpt-docs/docs/design/system-structure.md`(设计总纲)
|
||||||
- **背景**:学习 A 内容时顺手记下的旁支知识(例:学 AI 时记下“1B = one billion”)目前会被算作 A 的知识,进 A 的导图与回忆对比基准。根因是把「记录地点」当成了「内容归属」。
|
- **背景**:学习 A 内容时顺手记下的旁支知识(例:学 AI 时记下“1B = one billion”)目前会被算作 A 的知识,进 A 的导图与回忆对比基准。根因是把「记录地点」当成了「内容归属」。
|
||||||
@@ -319,19 +320,19 @@
|
|||||||
|
|
||||||
## 11. 待确认的设计缺口(确认前不要实施)
|
## 11. 待确认的设计缺口(确认前不要实施)
|
||||||
|
|
||||||
### DC-02 复习回路补全
|
### 复习-01(原 DC-02)复习回路补全
|
||||||
|
|
||||||
- **文档**:`lpt-docs/docs/design/review-loop.md`(立场、内容来源、两个层级、排序、归类、反馈、AI 边界)、`lpt-docs/docs/concepts/review-overview.md`(新增)、`recall-review.md`(回忆记录、覆盖率、复习起点、遗漏项)、`review-feed.md`、`lpt-docs/docs/design/principles.md`、`module-boundaries.md`。
|
- **文档**:`lpt-docs/docs/design/review-loop.md`(立场、内容来源、两个层级、排序、归类、反馈、AI 边界)、`lpt-docs/docs/concepts/review-overview.md`(新增)、`recall-review.md`(回忆记录、覆盖率、复习起点、遗漏项)、`review-feed.md`、`lpt-docs/docs/design/principles.md`、`module-boundaries.md`。
|
||||||
- **背景**:复习此前只有零散描述(Feed、导图、回忆对比各自成文),缺少系统级口径:复习内容的完整来源、任务级与条目级两层入口、覆盖率与掌握度的定义、遗漏项的语义、反馈动作、归类动作落点、AI 边界都未定;文档写的是“Feed 展示碎片和学习报告”,实现只返回碎片。
|
- **背景**:复习此前只有零散描述(Feed、导图、回忆对比各自成文),缺少系统级口径:复习内容的完整来源、任务级与条目级两层入口、覆盖率与掌握度的定义、遗漏项的语义、反馈动作、归类动作落点、AI 边界都未定;文档写的是“Feed 展示碎片和学习报告”,实现只返回碎片。
|
||||||
- **本次补全(已按以下取向写入文档)**:复习只做“低阻力反复出现 + 主动提取”,不做到期调度、打卡、评分;Feed 条目单位是碎片,报告从任务记录进入;覆盖率按任务聚合成掌握度,作为排序信号之一;遗漏项是每次对比的快照,不做跨次累计待办;归类动作落在复习里;AI 只做语义匹配与归属建议。
|
- **本次补全(已按以下取向写入文档)**:复习只做“低阻力反复出现 + 主动提取”,不做到期调度、打卡、评分;Feed 条目单位是碎片,报告从任务记录进入;覆盖率按任务聚合成掌握度,作为排序信号之一;遗漏项是每次对比的快照,不做跨次累计待办;归类动作落在复习里;AI 只做语义匹配与归属建议。
|
||||||
- **待确认**:
|
- **待确认**:
|
||||||
1. Feed 是否包含学习报告(文档取向:不含)。
|
1. Feed 是否包含学习报告(文档取向:不含)。
|
||||||
2. 反馈动作形态:只读 /“已掌握 + 稍后再看”/ 仅“稍后再看”(关联 LPT-09)。
|
2. 反馈动作形态:只读 /“已掌握 + 稍后再看”/ 仅“稍后再看”(关联 复习-02)。
|
||||||
3. 覆盖率口径:最近一次 / 最近若干次加权。
|
3. 覆盖率口径:最近一次 / 最近若干次加权。
|
||||||
4. 待归类内容的呈现:总览独立分类 / Feed 混排打标;归类是否需在卡片上一键完成。
|
4. 待归类内容的呈现:总览独立分类 / Feed 混排打标;归类是否需在卡片上一键完成。
|
||||||
5. 遗漏项语义:快照 + 回看原文 / 跨次累计集合。
|
5. 遗漏项语义:快照 + 回看原文 / 跨次累计集合。
|
||||||
6. 排序信号是否对用户可配置(掌握度与时间效应的强度)。
|
6. 排序信号是否对用户可配置(掌握度与时间效应的强度)。
|
||||||
- **关联实现**:LPT-09(反馈动作)、LPT-16(Feed 随机取样)、LPT-17(覆盖率查询)、LPT-19(Feed 摘要)。
|
- **关联实现**:复习-02(反馈动作)、复习-03(Feed 随机取样)、复习-04(覆盖率查询)、复习-05(Feed 摘要)。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user