From a13898b55ef011b358872ae4a4654ecb7b62b2bd Mon Sep 17 00:00:00 2001 From: SkyJourney Date: Fri, 10 Jul 2026 10:57:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(memcore):=20memory-lint=20=E8=BF=87?= =?UTF-8?q?=E6=9C=9F=E6=A3=80=E6=B5=8B=E6=94=B9=E4=B8=BA=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E9=80=9F=E5=BA=A6=E5=88=86=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原 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 Claude-Session: https://claude.ai/code/session_019z1dhAgV1vqz7SiniXw96C --- .../memcore/skills/memcore-shared/SKILL.md | 6 ++- plugins/memcore/skills/memory-lint/SKILL.md | 39 +++++++++++++------ 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/plugins/memcore/skills/memcore-shared/SKILL.md b/plugins/memcore/skills/memcore-shared/SKILL.md index d6eccf2..6de4612 100644 --- a/plugins/memcore/skills/memcore-shared/SKILL.md +++ b/plugins/memcore/skills/memcore-shared/SKILL.md @@ -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 | 子技能引用常量时使用上述名称,调整阈值只需修改本文件单一来源。 diff --git a/plugins/memcore/skills/memory-lint/SKILL.md b/plugins/memcore/skills/memory-lint/SKILL.md index 343796f..ae63731 100644 --- a/plugins/memcore/skills/memory-lint/SKILL.md +++ b/plugins/memcore/skills/memory-lint/SKILL.md @@ -144,18 +144,35 @@ grep -rn "` 局部覆盖。 +不再用固定天数二级阈值,而是用「自 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_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 有迁移 → 用迁移时间反推 -### [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 是 → 归档/删除,索引指向继任者 ### [WARN] 可推断内容污染 — 疑似从代码可 grep 的明细