Skip to content

chapters timeline seed 与 notes 锚点加载器不同构:segments 种子指纹不可从磁盘复现,notes 确定性失败 #227

Closed

Description

@zj1123581321

现象

BV1fcHD6cEw3:PR #225 修复后 chapters 以 kind=segments 成功重生(fingerprint b5bebec0a91b),随后用户触发详细笔记(generate_notes),notes 层 8ms 确定性失败:chapter anchor fingerprint mismatch(task_744c0ad4f5ea4a2c9539f7a00d510117)。

根因(生产实证)

  • writer(transcription.py:1700-1715 分层缓存补种子):dialogs 不在 → 取 cache_data["segments"](运行态内存片段)作 chapters 时间轴种子,指纹随该内存形态生成
  • reader(notes_processor.load_notes_source_segments kind=segments → transcriber.segments.load_segments):从磁盘 transcript_funasr.json 规范化,556 段,指纹 ed62cc163258
  • 本地复算 MISMATCH(两指纹均留档);writer 与 reader 对「segments 锚点源」不同构,存储指纹不可从磁盘复现
  • 说话人识别任务下两形态差异最大(speaker 标注/规范化路径不同)

触发链

此前 chapters 对该形态必 FAILED(PR #225 修复前),notes-on-chapters 不可达,缺陷潜伏;修复使 chapters 可成功 → notes 路径首次激活即暴露。不是排序归一化的回归,是被它解锁的存量缺陷。

影响

  • chapters 重生后(分段缓存路径),该媒体详细笔记 100% 失败(确定性)
  • 视图目录不受影响(fingerprint mismatch 只降级 jump_ok=False,目录仍渲染)

修复方向

llm_ops/transcription 的 chapters 种子在 segments 分支改用与 reader 同源的 load_segments(cache_dir)(dialogs 分支的 in-memory 形态与 llm_processed.json 同轮写盘、天然一致,可保留);已存不一致指纹的媒体需删除 llm_chapters.json 重提一次重生成。

相关:PR #225、issue #226

Activity

  1. added a commit that references this issue on Oct 10, 2026
  2. zj1123581321 commented on Oct 10, 2026

    @zj1123581321
    CollaboratorAuthor

    根因修正(2026-10-10 晚,PR #228 部署后复测)

    原帖「cache_data[segments] vs load_segments」的归因不完整。PR #228(种子改 load_segments)部署后重生成 chapters,notes 仍失败,拿到生产双侧真实读数:

    • 新 chapters 产物(15:12:30Z,task_0ed340b3):kind="segments"、segment_count=518、fp=b5bebec0a91b——chapters 实际锚在缓存的结构化 dialogs(518 段):coordinator 对 cached structured_data 的优先选择覆盖了 segments 种子(transcription 队列种子只是初始值)
    • notes reader(容器内实测,PYTHONPATH=/app/src + uv run):load_notes_source_segments(kind="segments") → load_segments = 556 段、fp=ed62cc163258 → mismatch
    • source.kind="segments" 标签记录的是队列种子来源,不是 coordinator 最终锚点(structured 覆盖后未改写标签),notes reader 按这个标签选加载器 → 永远错配

    主脑前两版归因(内存形态 vs load_segments)均不完整,本条为第三次修正;两侧指纹与段数均已容器内实测留档。

    真根因

    notes reader 按 source.kind 选加载器,但该 kind 不是 chapters 实际锚点的真相;chapters 实际锚点由 coordinator 的 structured 优先逻辑决定。writer 的「锚点真相」没有随产物传递到 reader。

    修复方向

    让 notes reader 拿到的锚点源与 chapters 实际使用的锚点源同源:要么 source.kind 记录 coordinator 最终输入并让 reader 按 kind 精确复现(dialogs kind → 读 llm_processed.json dialogs),要么 notes 直接复用 chapters 产物内嵌的锚点数据。具体以代码核实为准。

  3. added 3 commits that reference this issue on Oct 10, 2026
  4. added
    领域:缓存与章节缓存产物、章节/笔记锚点与状态一致性
    落点:本仓修复代码在本仓 git 跟踪路径内
    优先级:P2质量债、待拍板的产品决策、可选优化
    on Oct 12, 2026
  5. zj1123581321 commented on Oct 12, 2026

    @zj1123581321
    CollaboratorAuthor

    核实完成,关闭已修复问题

    当前主干基线 c7dc7fcbb1727057ecf2c4d8c3f38e34d3136f72 已包含 PR #228/#229/#231。2026-10-12 主脑在该基线独立工作树用已有解释器、显式 PYTHONPATH 指向该树 src,复跑 python -m pytest tests/unit/test_notes_anchor_source.py -q:7条通过,退出码0。回归覆盖缓存dialogs、segments与声明来源不匹配时明确失败。

    历史生产证据(不是本次生产复测):2026-10-11交接记录kind=cached_dialogs、518段、reader指纹MATCH、notes_status=generated、笔记非空。

    本次没有重新部署或修改产品代码。按已合并修复+当前主干回归+历史生产闭环关闭,不重复派修复卡。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working优先级:P2质量债、待拍板的产品决策、可选优化落点:本仓修复代码在本仓 git 跟踪路径内领域:缓存与章节缓存产物、章节/笔记锚点与状态一致性

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions