tentative→confirmed 自动晋升通道实现(issue #175 grill) #175

Open
opened 2026-08-20 08:06:35 +00:00 by KumaAgent · 0 comments
Member

Parent

issue #175 grill(2026-08-20 拍板:现在实现);ADR 更新见 PR #177(ADR-0009 更新节 + CONTEXT.md
「画像」词条同步)

What to build

正式实现 ADR-0009 2026-07-08 更新节 ADOPTED、此前从未落地的 tentative→confirmed 自动晋升通道。

原文(docs/adr/0009-memory-engineering.md「更新(2026-08-20,issue #175 grill)」节):

决策:现在实现,定案如下

  • 晋升方式 = 原地转正:命中晋升条件时,把该 tentative 行的 status 直接改成 confirmed
    不新增一条独立的 confirmed 记录。
  • 计数单位 = 独立日期,不是独立压缩批次:按"独立日期"计数,同一天内多次命中只算一次。
    存储上需要追踪"这行 tentative 记录最近一次命中的日期",新命中的日期与已存日期不同才计数
    +1 并更新该日期;相同则忽略。
  • N 默认值 = 2(静态 config,ADR-0011 阈值三层分类,保守起步值,待真实数据后标定)。
  • source 标记:晋升产生的记录标 source="auto_promoted"update_profile 显式纠正产生
    的记录标 source="user_confirmed"

Acceptance criteria

  • ProfileFact/ProfileCandidateprofile.py)新增 source: Literal["user_confirmed", "auto_promoted"] | None 字段;update_profile 工具写入路径(write_confirmed_fact)显式传
    source="user_confirmed"
  • ProfileFactModelstorage.py)新增列以支持晋升判定:至少需要"独立命中日期计数"+
    "最近命中日期"两个信息(具体列设计/是否合并成一列自定,只要能正确实现"同一天多次命中只
    加一次计数"这条语义)
  • _upsert_fact(或其调用方 write_tentative_facts)在写入 tentative 分支时:若本次命中
    日期与该行已存的"最近命中日期"不同,计数 +1 并更新该日期;相同则不计数、只按既有逻辑覆盖
    value/updated_at
  • 计数达到 arise_profile_promotion_threshold(新增静态 config,默认 2,按 ADR-0011
    阈值三层分类声明)时,原地把该行 status 改成 confirmedsource"auto_promoted"
    ——不新增行,不触碰其它字段
  • confirmed/tentative 现有的"同 key 可并存"这条既有行为不因本票改变——本票只处理
    tentative 行自身何时被原地转正,不影响它与另一条已存在的 confirmed 行(若有)的共存关系
  • 补测试:同一事实跨 2 个不同日期独立命中 → 原地转正为 confirmed 且 source="auto_promoted"
    同一天内多次命中 → 不提前转正(计数不超前累加);晋升后再次命中同一 key 的 tentative 写入
    路径行为不因"这行已经不是 tentative 了"而报错(新的 tentative 候选应该开始一轮新的计数,
    不是复用已转正那行的历史计数)

Not in scope

  • 不改 update_profile 显式纠正路径的既有行为
  • 不改三因子召回——画像事实本来就不在三因子召回的消费范围内(recall.py 只处理事件记忆)
  • 不做 N 值的真实数据标定——本票只交付保守默认值,标定留给后续按 ADR-0011 流程处理
  • 不改 confirmed/tentative 同 key 并存这条既有存储设计本身
## Parent issue #175 grill(2026-08-20 拍板:现在实现);ADR 更新见 PR #177(ADR-0009 更新节 + CONTEXT.md 「画像」词条同步) ## What to build 正式实现 ADR-0009 2026-07-08 更新节 ADOPTED、此前从未落地的 tentative→confirmed 自动晋升通道。 原文(`docs/adr/0009-memory-engineering.md`「更新(2026-08-20,issue #175 grill)」节): > **决策:现在实现,定案如下**: > > - **晋升方式 = 原地转正**:命中晋升条件时,把该 tentative 行的 `status` 直接改成 `confirmed`, > 不新增一条独立的 confirmed 记录。 > - **计数单位 = 独立日期,不是独立压缩批次**:按"独立日期"计数,同一天内多次命中只算一次。 > 存储上需要追踪"这行 tentative 记录最近一次命中的日期",新命中的日期与已存日期不同才计数 > +1 并更新该日期;相同则忽略。 > - **N 默认值 = 2**(静态 config,ADR-0011 阈值三层分类,保守起步值,待真实数据后标定)。 > - **source 标记**:晋升产生的记录标 `source="auto_promoted"`;`update_profile` 显式纠正产生 > 的记录标 `source="user_confirmed"`。 ## Acceptance criteria - [ ] `ProfileFact`/`ProfileCandidate`(`profile.py`)新增 `source: Literal["user_confirmed", "auto_promoted"] | None` 字段;`update_profile` 工具写入路径(`write_confirmed_fact`)显式传 `source="user_confirmed"` - [ ] `ProfileFactModel`(`storage.py`)新增列以支持晋升判定:至少需要"独立命中日期计数"+ "最近命中日期"两个信息(具体列设计/是否合并成一列自定,只要能正确实现"同一天多次命中只 加一次计数"这条语义) - [ ] `_upsert_fact`(或其调用方 `write_tentative_facts`)在写入 tentative 分支时:若本次命中 日期与该行已存的"最近命中日期"不同,计数 +1 并更新该日期;相同则不计数、只按既有逻辑覆盖 value/updated_at - [ ] 计数达到 `arise_profile_promotion_threshold`(新增静态 config,默认 `2`,按 ADR-0011 阈值三层分类声明)时,**原地**把该行 `status` 改成 `confirmed`、`source` 写 `"auto_promoted"` ——不新增行,不触碰其它字段 - [ ] `confirmed`/`tentative` 现有的"同 key 可并存"这条既有行为不因本票改变——本票只处理 tentative 行自身何时被原地转正,不影响它与另一条已存在的 confirmed 行(若有)的共存关系 - [ ] 补测试:同一事实跨 2 个不同日期独立命中 → 原地转正为 confirmed 且 `source="auto_promoted"`; 同一天内多次命中 → 不提前转正(计数不超前累加);晋升后再次命中同一 key 的 tentative 写入 路径行为不因"这行已经不是 tentative 了"而报错(新的 tentative 候选应该开始一轮新的计数, 不是复用已转正那行的历史计数) ## Not in scope - 不改 `update_profile` 显式纠正路径的既有行为 - 不改三因子召回——画像事实本来就不在三因子召回的消费范围内(`recall.py` 只处理事件记忆) - 不做 N 值的真实数据标定——本票只交付保守默认值,标定留给后续按 ADR-0011 流程处理 - 不改 `confirmed`/`tentative` 同 key 并存这条既有存储设计本身
KumaAgent changed title from 评估:tentative→confirmed 自动晋升通道要不要实现(ADR-0009) to tentative→confirmed 自动晋升通道实现(issue #175 grill) 2026-08-20 08:57:22 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ProjectKuma/arise#175
No description provided.