feat(memcore): memory-lint 过期检测改为提交速度分档
原 Phase 5 用固定 30/90 天日历阈值判定记忆过期,与 AI 辅助开发下的实际迭代速度脱钩:高频项目 7 天内可能已发生大量架构变更却不报警,低活跃项目超 30 天仍可能内容准确却被误报。 改为按「自 last_updated 以来的全仓库提交速度」分档:7 天最低观察窗口 + 速度 ≥1.0/天 ERROR、≥0.3/天 WARN、低速豁免但 180 天绝对兜底。常量集中在 memcore-shared,Phase 8 报告模板同步更新过期条目文案。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019z1dhAgV1vqz7SiniXw96C
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
8289fa6060
commit
a13898b55e
@@ -66,8 +66,10 @@ echo "PROJECT_DIR=$PROJECT_DIR"
|
||||
| 常量 | 值 | 含义 | 使用位置 |
|
||||
|------|----|------|---------|
|
||||
| `SYNTHESIS_THRESHOLD` | `3` | 跨文件引用数 ≥ 此值即为 synthesis 升级候选 | `/memory-update` Phase 3C、`/memory-lint` Phase 3A & Phase 8 |
|
||||
| `LINT_STALE_WARN_DAYS` | `30` | last_updated 超过此天数 → WARN | `/memory-lint` Phase 5 |
|
||||
| `LINT_STALE_ERROR_DAYS` | `90` | last_updated 超过此天数 → ERROR | `/memory-lint` Phase 5 |
|
||||
| `LINT_STALE_MIN_DAYS` | `7` | last_updated 不足此天数 → 跳过过期检测 | `/memory-lint` Phase 5 |
|
||||
| `LINT_HIGH_VELOCITY` | `1.0`(次/天) | 全仓库提交速度 ≥ 此值 → 高频迭代区 → ERROR | `/memory-lint` Phase 5 |
|
||||
| `LINT_LOW_VELOCITY` | `0.3`(次/天) | 全仓库提交速度 ≥ 此值 → 中频迭代区 → WARN | `/memory-lint` Phase 5 |
|
||||
| `LINT_STALE_ABSOLUTE_DAYS` | `180` | 速度低于 `LINT_LOW_VELOCITY` 时的绝对兜底天数 → WARN | `/memory-lint` Phase 5 |
|
||||
| `MULTI_HOST_WARN_DAYS` | `7` | 远程 vs 本地 mtime 差 ≥ 此天数 → 多机不同步警告 | `/memory-sync` Phase 3 |
|
||||
|
||||
子技能引用常量时使用上述名称,调整阈值只需修改本文件单一来源。
|
||||
|
||||
@@ -144,18 +144,35 @@ grep -rn "<!-- merge-conflict\|<!-- remote-diverge" "$PROJECT_DIR/.claude/memory
|
||||
cat "$PROJECT_DIR/pom.xml" || cat "$PROJECT_DIR/package.json" || cat "$PROJECT_DIR/requirements.txt"
|
||||
```
|
||||
|
||||
### Phase 5 过期检测
|
||||
### Phase 5 过期检测(速度分档)
|
||||
|
||||
阈值由 memcore-shared 定义:
|
||||
- WARN ≥ `LINT_STALE_WARN_DAYS`(默认 30 天)
|
||||
- ERROR ≥ `LINT_STALE_ERROR_DAYS`(默认 90 天)
|
||||
|
||||
可由 MEMORY.md 头部 `<!-- lint-stale-warn: N -->` 局部覆盖。
|
||||
不再用固定天数二级阈值,而是用「自 last_updated 以来的全仓库提交速度」判断过期风险的严重程度:高频迭代项目下 7 天未同步就可能已经漂移,低活跃项目下 30 天未动也可能仍然准确。阈值常量由 memcore-shared 定义。
|
||||
|
||||
```bash
|
||||
git -C "$PROJECT_DIR" log --oneline --since="$last_updated" -- .
|
||||
# days_since: last_updated 距今天数
|
||||
days_since=$(( ($(date +%s) - $(date -d "$last_updated" +%s)) / 86400 ))
|
||||
|
||||
# 不足 LINT_STALE_MIN_DAYS(默认 7 天)→ 跳过本文件的过期检测
|
||||
if [ "$days_since" -lt 7 ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# commits_since: 全仓库自 last_updated 以来的提交数
|
||||
commits_since=$(git -C "$PROJECT_DIR" log --oneline --since="$last_updated" -- . | wc -l)
|
||||
|
||||
# velocity: 提交速度(次/天)
|
||||
velocity=$(echo "scale=2; $commits_since / $days_since" | bc)
|
||||
```
|
||||
|
||||
分级(可由 MEMORY.md 头部 `<!-- lint-stale-warn: N -->` 覆盖 `LINT_STALE_MIN_DAYS`):
|
||||
|
||||
| 条件 | 级别 | 语义 |
|
||||
|------|------|------|
|
||||
| `velocity ≥ LINT_HIGH_VELOCITY`(默认 1.0) | ERROR | 高频迭代区,未同步几乎必然漂移 |
|
||||
| `LINT_LOW_VELOCITY ≤ velocity < LINT_HIGH_VELOCITY`(默认 0.3~1.0) | WARN | 中频迭代,需人工确认是否漂移 |
|
||||
| `velocity < LINT_LOW_VELOCITY` 且 `days_since < LINT_STALE_ABSOLUTE_DAYS`(默认 180) | — | 低活跃期,不判定过期 |
|
||||
| `velocity < LINT_LOW_VELOCITY` 且 `days_since ≥ LINT_STALE_ABSOLUTE_DAYS` | WARN | 绝对兜底,防止彻底沉寂的记忆永不复查 |
|
||||
|
||||
### Phase 6 可推断内容污染
|
||||
|
||||
污染特征:大量文件路径、git 流水账、方法签名/SQL、可从依赖文件直读的版本号列表。
|
||||
@@ -304,14 +321,14 @@ last_updated: YYYY-MM-DD
|
||||
- **矩阵**:Q1 答案 = 当前权威;Q2 过时 → 直接更新另一方;Q2 计划 → 末尾标 `**Status:** planned, target HASH`;Q3 有迁移 → 用迁移时间反推
|
||||
<!-- id: e5f6a7b8 -->
|
||||
|
||||
### [WARN] 过期记忆 — last_updated 超阈值
|
||||
### [WARN] 过期记忆 — 提交速度分级超阈值
|
||||
|
||||
- **文件**:`project_progress.md`(last_updated: 2026-01-15,过期 86 天)
|
||||
- **文件**:`project_progress.md`(last_updated: 2026-01-15,过期 86 天,同期 62 次提交,速度 0.72/天 → 中频区 WARN)
|
||||
- **Checklist**:
|
||||
- Q1:覆盖领域近 90 天有里程碑变更?
|
||||
- Q1:覆盖领域在此期间是否有里程碑变更?(速度越高,越可能有)
|
||||
- Q2:现有内容是否仍可指导决策?
|
||||
- Q3:是否有继任 synthesis_* 已分担其职责?
|
||||
- **矩阵**:Q1 是 + Q2 否 → 触发 `/memory-update`;Q2 是(仅日期老)→ 仅刷新 `last_updated`;Q3 是 → 归档/删除,索引指向继任者
|
||||
- **矩阵**:Q1 是 + Q2 否 → 触发 `/memory-update`;Q2 是(仅日期老、速度低)→ 仅刷新 `last_updated`;Q3 是 → 归档/删除,索引指向继任者
|
||||
<!-- id: c9d0e1f2 -->
|
||||
|
||||
### [WARN] 可推断内容污染 — 疑似从代码可 grep 的明细
|
||||
|
||||
Reference in New Issue
Block a user