{
  "schema_version": 1,
  "updated_utc": "2026-10-14T16:24:00Z",
  "scope": "全部250章与每章适合交互的局部知识点。97仅为历史初筛数量，不是目标或上限。",
  "completion_rule": "逐节复核全部概念，记录实现/复用或不做交互的具体理由，完成模型与浏览器验证后才能认定一章已完成。当前没有宣称任何章节已穷尽覆盖。",
  "chapter_count": 250,
  "chapters": [
    {
      "id": "ch-001",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 函数.md",
      "title": "Go 函数：看清参数何时传入，代码何时执行",
      "source_sha256": "c91d1b8ba6499714de6ed2a9a9e8639dfe0a02cedd138407779fbcb6f17b8076",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "defer 登记与执行时机",
        "reason": "逐步显示参数何时保存、闭包何时读变量，比只猜最终输出更能解释差异。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-002",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 包与可见性.md",
      "title": "Go 包与可见性：让依赖关系能被编译器检查",
      "source_sha256": "d7e1cfaaec4e5ce7ced39e8b2edbdd4afc5f233d99d2046bde80bff318cb3708",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "包依赖、internal 边界与初始化",
        "reason": "需要稳定地看清谁能导入谁；现有编译反例比额外控件更直接。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-003",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 反射 unsafe cgo 与代码生成.md",
      "title": "Go 反射 unsafe cgo 与代码生成",
      "source_sha256": "680603e322d3ba37a8b0c649281f280126e0e1f3d0a75086244e02a5392f65c1",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "反射、地址、跨语言所有权",
        "reason": "工具跨越不同阶段；示意必须保留具体版本和安全前提，不模拟任意指针操作。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-004",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 接口.md",
      "title": "Go 接口",
      "source_sha256": "b76136cb367bb0ca0c3436b174dae7d0c36ea03b6aa5cb836eb36332765c92a7",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "接口动态类型与 typed nil",
        "reason": "改变动态类型和值后显示 nil 判断，能揭示指针为空而接口非空的原因。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-005",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 标准库必熟.md",
      "title": "Go 标准库必熟：从一件具体工作找到入口",
      "source_sha256": "33e8469d992184f8964cf049a5bb172a041a5ca602b56457d97d2d7a26631c90",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "按工作寻找标准库入口",
        "reason": "本章是多包参考；统一做成交互会拉长检索路径，原有短例更适合查阅。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-006",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 泛型.md",
      "title": "Go 泛型：同一套算法，怎样保留不同的具体类型",
      "source_sha256": "c124b235f6f2644ebbca3e8663d6e8eaa1c779fa547f0496332926eb640cb072",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "泛型约束与类型集合",
        "reason": "重点是语言规则和编译期约束；静态包含关系足够，不应以浏览器假装 Go 编译器。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-007",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 类型系统.md",
      "title": "Go 类型系统",
      "source_sha256": "956515d837f597e872e1dbe3cb4eb9a2ad060d2000d00617bf91e9b6a52e1f2c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "slice 长度容量与底层数组共享",
        "reason": "移动切片边界与执行 append/copy 能直接暴露共享、容量限制和复制的区别。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-008",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 结构体与方法.md",
      "title": "Go 结构体与方法",
      "source_sha256": "20b36a83b806eb0789254fab1609d1628448fd778f6b1cb24f169c35bd70b094",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "接收者复制与方法集",
        "reason": "方法可调用和接口实现需要并排核对规则，固定例子与表格更易查证。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-009",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 迭代器.md",
      "title": "Go 迭代器：把“怎样取下一个”留给集合",
      "source_sha256": "ceb11758b43f9694d173f7df6e3df50eefae9d43fdda6117d0c189ddebeef3da",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "yield、break 与控制权交接",
        "reason": "交替推进提供者和使用者，并停在 yield(false)，能看清停止如何传回去。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-010",
      "book": "go",
      "path": "books/go/articles/01_语言基础/Go 错误处理.md",
      "title": "Go 错误处理：保留原因，让调用者知道下一步怎么做",
      "source_sha256": "612d152ac9597adf73d52263ea9ad5fec5f82cb1a8e544044272fb64ba35ffc5",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "错误包装、Is/As 与 Join",
        "reason": "树形关系能表达多条原因；保留具体 API 代码，避免把匹配条件藏在控件里。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-011",
      "book": "go",
      "path": "books/go/articles/02_并发编程/Channel.md",
      "title": "Channel：把数据交出去，也把结束方式说清楚",
      "source_sha256": "db46c9a71d3d71927a0a3e907324b7fbcde2b1e97e65cd181ba1eb86baec62c8",
      "review_status": "reviewed_sections_concepts_recorded",
      "concept_review": {
        "path": "books/go/articles/02_并发编程/Channel.md",
        "review_depth": "main_concept_sections_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "buffer-handoff-backpressure",
            "sections": [
              "先判断它会不会等"
            ],
            "status": "implemented_reuse",
            "component": "ChannelDemo",
            "reason": "容量、G和发送值可调，手动观察无缓冲配对、满缓冲等待和空位交接。"
          },
          {
            "id": "close-and-ok",
            "sections": [
              "先判断它会不会等",
              "关闭的是数据流，不是 goroutine"
            ],
            "status": "implemented_reuse",
            "component": "ChannelDemo",
            "reason": "关闭后读完已有值、0与ok的区别、唤醒等待者、发送与重复关闭panic均可实际操作。"
          },
          {
            "id": "close-ownership",
            "sections": [
              "关闭的是数据流，不是 goroutine"
            ],
            "status": "static_or_existing_code",
            "reason": "谁能证明全部发送结束属于协议设计；现有责任表和WaitGroup代码比可随意close的按钮更完整，不能把模型可点击误认为关闭安全。"
          },
          {
            "id": "nil-select-readiness",
            "sections": [
              "nil channel 很危险，也很有用",
              "select 选的是当前能做的动作"
            ],
            "status": "implemented_reuse",
            "reason": "对照nil、空、有值、关闭与Done/default的就绪集合，手动选择合法接收；不声称书写顺序优先或有限等待公平。",
            "component": "SelectReadinessDemo"
          },
          {
            "id": "select-evaluation",
            "sections": [
              "select 选的是当前能做的动作"
            ],
            "status": "candidate",
            "reason": "逐步显示所有channel表达式与发送值表达式先求值，然后才选择通信分支。"
          },
          {
            "id": "timeout-budget",
            "sections": [
              "超时要先决定：等一条，还是等整段工作"
            ],
            "status": "candidate",
            "reason": "可控虚拟时钟对比单次等待重新计时与整段请求共用deadline，不能将虚拟时间当调度精度。"
          },
          {
            "id": "shared-reference-after-send",
            "sections": [
              "超时要先决定：等一条，还是等整段工作"
            ],
            "status": "candidate",
            "reason": "展示slice/map/指针传值后仍指向共享底层对象；需要明确的所有权协议，不把同步点当永久线程安全。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "interactive",
        "concept": "channel 缓冲、关闭与阻塞",
        "reason": "手动发送、接收和关闭能让容量、等待、取完后的零值与 panic 边界可见。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "ChannelDemo",
          "placement": "## 先判断它会不会等",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        },
        {
          "component": "SelectReadinessDemo",
          "placement": "## select 选的是当前能做的动作",
          "implementation": "implemented",
          "model_tests": "passed_local_node_jsdom_2026_10_14",
          "browser_tests": "passed_at_recorded_commit",
          "remaining_concepts": "recorded_in_concept_review",
          "official_contract_tests": "passed_eb69b9f2",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          }
        }
      ],
      "next_action": "本批新增模型与浏览器验证单独记录；继续审视该章其余候选，不因已有实验而结束复核。"
    },
    {
      "id": "ch-012",
      "book": "go",
      "path": "books/go/articles/02_并发编程/Go 内存模型.md",
      "title": "Go 内存模型：怎样证明另一个 goroutine 能看见你的写入",
      "source_sha256": "6e8c7d718f0515bcbe9f4779470fe76fcc02d90cc55c32aecc2666b0d025eb3e",
      "review_status": "full_chapter_read_concepts_recorded",
      "concept_review": {
        "path": "books/go/articles/02_并发编程/Go 内存模型.md",
        "review_depth": "full_chapter_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "publication-happens-before",
            "sections": [
              "先看一条能证明的顺序"
            ],
            "status": "candidate",
            "reason": "写入、close、观察关闭、读取之间的同步路径可逐边展示；不把墙钟先后当证明。"
          },
          {
            "id": "data-race-drf-sc",
            "sections": [
              "数据竞争到底指什么"
            ],
            "status": "prose_or_existing_code",
            "reason": "保留普通访问、原子访问、DRF-SC定义与边界表；随机动画不能证明无竞争。"
          },
          {
            "id": "synchronization-tools",
            "sections": [
              "平时用的同步工具，分别连起哪条边"
            ],
            "status": "prose_or_existing_code",
            "reason": "现有关系表逐项列出承诺与限制，库存实验不代表覆盖所有工具。"
          },
          {
            "id": "buffered-confirmation",
            "sections": [
              "缓冲会改变确认的位置"
            ],
            "status": "candidate",
            "reason": "可对比C=0/1时发送完成能否推出接收；已有channel实验未完整覆盖happens-before证明。"
          },
          {
            "id": "atomic-reservation-interleaving",
            "sections": [
              "没有数据竞争，也能把一件商品卖两次",
              "修正：让检查和更新成为一个不可拆开的决定"
            ],
            "status": "implemented_reuse",
            "reason": "逐步推进两个请求，观察拆开的Load/check/Add超卖与CAS失败后重新读取检查；可对比串行和0–3库存。",
            "component": "AtomicReservationDemo"
          },
          {
            "id": "race-detector-boundary",
            "sections": [
              "go test -race：找到了就修，没找到还要继续推理"
            ],
            "status": "prose_or_existing_code",
            "reason": "真实检测报告与Go测试更合适；浏览器不充当race detector，也不把没检测到当完整证明。"
          },
          {
            "id": "reproduction-evidence",
            "sections": [
              "依据与本次验证",
              "完整代码与复现方法"
            ],
            "status": "prose_or_existing_code",
            "reason": "保留原章可运行代码与历史验证条件；本批最小契约测试不是原章所有程序的复跑。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "interactive",
        "concept": "happens-before 与执行先后",
        "reason": "添加同步边并检查可证明的顺序，有助于区分碰巧先发生与语言保证；不生成未定义结果预测。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "AtomicReservationDemo",
          "placement": "## 没有数据竞争，也能把一件商品卖两次",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "remaining_concepts": "recorded_in_concept_review",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          }
        }
      ],
      "next_action": "继续逐节处理未覆盖候选；现有互动通过记录只对应注明的提交。"
    },
    {
      "id": "ch-013",
      "book": "go",
      "path": "books/go/articles/02_并发编程/Go 并发工具选型.md",
      "title": "Go 并发工具选型：errgroup、singleflight、semaphore 各管哪一段",
      "source_sha256": "bad1c5dc674ed835ae641067cfb73f5460094d3c1405bb74da84c04e2e0eb6a1",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "errgroup、singleflight 与 semaphore",
        "reason": "本章核心是选对问题；一张对照表比把三种并发协议混成一个游戏清楚。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-014",
      "book": "go",
      "path": "books/go/articles/02_并发编程/Go 并发常见坑.md",
      "title": "Go 并发常见坑：用四个小反例找到真正的失误",
      "source_sha256": "cb9dfeae052e3c5952f11142208ffe4a76a9d96bf2dd46706be9348fc2252e43",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "并发反例的失败条件",
        "reason": "已有可复现负例能准确展示版本与失败条件；静态等待图足以解释死锁。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-015",
      "book": "go",
      "path": "books/go/articles/02_并发编程/Go 并发模式.md",
      "title": "Go 并发模式：把任务分开以后，怎样一起收尾",
      "source_sha256": "896885651122ffbb695283b0a433d1d09ee3333c83e3ff14ee0efe9507cdbbc7",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "流水线背压与取消收尾",
        "reason": "调慢消费者后显示积压和阻塞传播，再取消，能检验每个发送端是否能退出。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-016",
      "book": "go",
      "path": "books/go/articles/02_并发编程/Goroutine.md",
      "title": "Goroutine：启动以后，怎样让它按时结束",
      "source_sha256": "84120e5095aecf4f6eac4d071bd5e95a0708f67e81ba8f262f8ccd9af11ba077",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "goroutine 生命周期责任",
        "reason": "主题是接口与所有权；保留阻塞点逐项检查，比自动播放任务数量更有用。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-017",
      "book": "go",
      "path": "books/go/articles/02_并发编程/context.md",
      "title": "context：让一条调用链共用退出信号和时间预算",
      "source_sha256": "40c48e67ecd8fd33db4e00368336cbce16ab3e99ea0fa86149976ff41b90cf94",
      "review_status": "full_chapter_read_concepts_recorded",
      "concept_review": {
        "path": "books/go/articles/02_并发编程/context.md",
        "review_depth": "full_chapter_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "context-method-state",
            "sections": [
              "开篇"
            ],
            "status": "candidate",
            "reason": "显示Deadline/Done/Err/Value各自状态，尤其未取消和永不可取消的区别。"
          },
          {
            "id": "cancel-tree-deadline",
            "sections": [
              "先画出取消会走到哪里",
              "子级只能收紧有效 deadline"
            ],
            "status": "implemented_reuse",
            "reason": "可改父子预算、取消分支并推进虚拟时钟，对照有效deadline与Done/Err；精确虚拟事件不代表真实调度时刻。",
            "component": "ContextTreeDemo"
          },
          {
            "id": "cancel-not-join",
            "sections": [
              "每次派生都接住 cancel，即使预计很快会成功",
              "有 Done 并不代表代码就会停"
            ],
            "status": "candidate",
            "reason": "本批实验明确解释cancel不等于join，并另有Go标准库完成屏障测试；独立可交互的任务退出流程仍待设计。"
          },
          {
            "id": "first-cause-wins",
            "sections": [
              "Err 回答取消类别，Cause 保留具体原因"
            ],
            "status": "candidate",
            "reason": "选择子级或父级先取消，分别展示Err类别与首次Cause；超时cause与手动cancel不能混同。"
          },
          {
            "id": "context-value-shadowing",
            "sections": [
              "WithValue 只放请求范围内需要跨层流转的元数据"
            ],
            "status": "candidate",
            "reason": "逐层查找键并对比子级遮蔽与父级不变；不能伪装可变对象线程安全。"
          },
          {
            "id": "afterfunc-stop-race",
            "sections": [
              "两个扩展入口，用前先看清谁负责善后"
            ],
            "status": "candidate",
            "reason": "按明确事件次序比较stop成功和回调已开始；false不等于回调已完成。"
          },
          {
            "id": "withoutcancel-boundary",
            "sections": [
              "两个扩展入口，用前先看清谁负责善后"
            ],
            "status": "candidate",
            "reason": "展示值查找保留但Done/deadline/cause断开，并提示需要新的退出预算与任务负责人。"
          },
          {
            "id": "parameter-policy",
            "sections": [
              "开篇",
              "WithValue 只放请求范围内需要跨层流转的元数据"
            ],
            "status": "prose_or_existing_code",
            "reason": "ctx参数惯例、私有可比较键、元数据与必需依赖边界适合现有代码和接口审查。"
          },
          {
            "id": "defer-cleanup",
            "sections": [
              "每次派生都接住 cancel，即使预计很快会成功"
            ],
            "status": "candidate",
            "reason": "循环内defer何时真正执行可复用未来defer作用域实验，区分任务结束与资源清理。"
          },
          {
            "id": "external-effects",
            "sections": [
              "有 Done 并不代表代码就会停"
            ],
            "status": "prose_or_existing_code",
            "reason": "驱动、外部I/O和业务副作用取消需真实接口与事务证据，不能由本地教学状态机保证。"
          },
          {
            "id": "source-experiments",
            "sections": [
              "依据与本次验证",
              "完整代码与复现方法"
            ],
            "status": "prose_or_existing_code",
            "reason": "原书Go测试与race/vet记录保留为原作者条件，不把本轮Node模型测试当已重跑Go。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "interactive",
        "concept": "context 取消树与 deadline",
        "reason": "选择取消父/子节点并改变期限，可直观看到传播方向及子级不能延长总预算。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "ContextTreeDemo",
          "placement": "### 子级只能收紧有效 deadline",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "remaining_concepts": "recorded_in_concept_review",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          }
        }
      ],
      "next_action": "继续逐节处理未覆盖候选；现有互动通过记录只对应注明的提交。"
    },
    {
      "id": "ch-018",
      "book": "go",
      "path": "books/go/articles/02_并发编程/sync 包.md",
      "title": "sync 包：从保护一组状态，到等一批任务结束",
      "source_sha256": "5b77ebf0ab717a2ce1a24c9aa29a3b0c82f93a86582cab5175c946105ddf50b7",
      "review_status": "full_chapter_read_concepts_recorded",
      "concept_review": {
        "path": "books/go/articles/02_并发编程/sync 包.md",
        "review_depth": "full_chapter_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "sync-selection",
            "sections": [
              "先按工作选择入口"
            ],
            "status": "prose_or_existing_code",
            "reason": "选型表明确保护约束、等待和取消不是同一件事，静态比较便于查阅。"
          },
          {
            "id": "mutex-invariant",
            "sections": [
              "Mutex：锁住的是约定，不是字段本身",
              "锁的几个边界"
            ],
            "status": "candidate",
            "reason": "可展示完整检查更新的锁范围与错误小临界区；本批只解释多字段约束，不宣称模拟锁。"
          },
          {
            "id": "rwmutex-performance",
            "sections": [
              "RWMutex：读多只是候选条件，不是性能结论"
            ],
            "status": "prose_or_existing_code",
            "reason": "升级降级限制和性能适用条件以正文保留，不用动画推导吞吐。"
          },
          {
            "id": "waitgroup-lifecycle",
            "sections": [
              "WaitGroup：把“都结束了”做成一个可靠边界"
            ],
            "status": "candidate",
            "reason": "登记任务与等待归零、错误的goroutine内Add时序可逐步观察。"
          },
          {
            "id": "once-panic",
            "sections": [
              "Once：执行一次，连失败语义也只认一次"
            ],
            "status": "candidate",
            "reason": "可对照Once和OnceValue在panic后的重复调用语义，不把一次执行当成功保证。"
          },
          {
            "id": "cond-recheck",
            "sections": [
              "Cond：等待的主角是条件，通知只是催你再看一眼"
            ],
            "status": "candidate",
            "reason": "可展示Wait解锁、通知、重新获取锁与循环重检条件的不同步骤。"
          },
          {
            "id": "pool-boundaries",
            "sections": [
              "Pool：借出临时对象，归还后停止使用"
            ],
            "status": "prose_or_existing_code",
            "reason": "对象生命周期与可随时移除的约定应保留；浏览器不能推断GC或分配收益。"
          },
          {
            "id": "map-boundaries",
            "sections": [
              "Map：一条原子操作能解决的事，别拆成两条"
            ],
            "status": "prose_or_existing_code",
            "reason": "原子方法、值内部对象和多键约束以真实API和代码解释，不造性能结果。"
          },
          {
            "id": "atomic-reservation-reuse",
            "sections": [
              "atomic：单个操作可靠，组合逻辑还要自己证明"
            ],
            "status": "implemented_reuse",
            "reason": "复用同一个库存交错模型，直接验证Load与Add不自动合成业务事务。",
            "component": "AtomicReservationDemo"
          },
          {
            "id": "sync-original-evidence",
            "sections": [
              "依据与本次验证",
              "完整代码与复现方法"
            ],
            "status": "prose_or_existing_code",
            "reason": "保留原章完整示例与历史验证条件，本批只执行独立的context/atomic契约测试。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "sync 各工具守住的约束",
        "reason": "包含多种语义不同的原语，优先保留逐项契约和测试，不做一个泛化锁模拟器。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "AtomicReservationDemo",
          "placement": "## atomic：单个操作可靠，组合逻辑还要自己证明",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "remaining_concepts": "recorded_in_concept_review",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          }
        }
      ],
      "next_action": "继续逐节处理未覆盖候选；现有互动通过记录只对应注明的提交。"
    },
    {
      "id": "ch-019",
      "book": "go",
      "path": "books/go/articles/03_运行时与底层原理/Go defer select timer 与 netpoller.md",
      "title": "Go defer、select、timer 与 netpoller：调用结束了，等待怎样结束",
      "source_sha256": "ab358f69bd6a84b341117d2fd5c97be7058d23e8ba80e17cfc60456bcca5c7e1",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "defer、select、timer、netpoller 的责任",
        "reason": "API 行为带版本边界；先用静态时序解释到期、唤醒和执行的不同。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-020",
      "book": "go",
      "path": "books/go/articles/03_运行时与底层原理/Go 内存分配.md",
      "title": "Go 内存分配：一次申请怎样变成可用空间",
      "source_sha256": "c4fc482e00fd3b3c1cc00f1369b167f706a63347b78e9c63b5e637b78ff7192c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "对象大小、size class 与分配层级",
        "reason": "调整对象尺寸观察内部空余，能解释申请字节与占用字节不同；表数据需绑定工具链。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-021",
      "book": "go",
      "path": "books/go/articles/03_运行时与底层原理/Go 垃圾回收.md",
      "title": "Go 垃圾回收：先看活着的对象，再谈调参",
      "source_sha256": "cb441bdf58592cbe7e3c57ae8749d0b4e62532200dae6f655493042cd1bc571d",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "可达性标记与 GC 预算",
        "reason": "断开引用后逐轮标记，可纠正业务无用等于不可达；预算只演算公式，不预测暂停时间。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-022",
      "book": "go",
      "path": "books/go/articles/03_运行时与底层原理/Go 数据结构实现.md",
      "title": "Go 数据结构实现：值复制了，底下的数据复制了吗",
      "source_sha256": "0101ea24f4c309be517aa1774812717d126a96c88f9d573cbebd279b567e5e6a",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "slice、map、channel、interface、string 的表示",
        "reason": "多种布局适合并排参照；slice 与接口互动复用专章入口，避免重复实现。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-023",
      "book": "go",
      "path": "books/go/articles/03_运行时与底层原理/什么是GMP.md",
      "title": "什么是 GMP：goroutine 怎样得到执行机会",
      "source_sha256": "874ee9ea213171b11e7a9e33f29ca9b65820109a09850c302317b6ce0890e8a5",
      "review_status": "selected_concepts_reviewed",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "G、M、P 与等待后的调度",
        "reason": "让同一批 G 在本地/全局队列、执行和等待之间流动，区分 G 停放与系统调用占住 M。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "GmpDemo",
          "placement": "chapter_end",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-024",
      "book": "go",
      "path": "books/go/articles/03_运行时与底层原理/逃逸分析.md",
      "title": "逃逸分析：为什么同一个指针，有时不分配堆内存",
      "source_sha256": "3023a5cd69d9521a3ac1d14b56cae6d425d5b57d2f674a5102aff69aab5eaf23",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "逃逸与实际分配的证据",
        "reason": "优化器决定依赖版本和调用位置，浏览器规则模拟易误导；应保留真实编译结果。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-025",
      "book": "go",
      "path": "books/go/articles/04_工程化/Go 代码质量.md",
      "title": "Go 代码质量：格式、静态检查、测试和审查各管一段",
      "source_sha256": "ae95b13574c9789041dd48ad799b37de43e435e73ccabb0b1159d1ca1cc72c5e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "质量门禁的分工",
        "reason": "本章依赖真实检查器和审查判断，交互控件不会增加关键证据。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-026",
      "book": "go",
      "path": "books/go/articles/04_工程化/Go 依赖注入.md",
      "title": "Go 依赖注入：谁创建对象，谁把依赖交给它，谁负责收尾",
      "source_sha256": "60d984e1e20d5e17b9505626387535746c1cf2db18025b1de10dea0ccbbd1b23",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "依赖构造与逆序清理",
        "reason": "对象图和逆序释放关系适合静态展开；保留本地代码验证错误路径。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-027",
      "book": "go",
      "path": "books/go/articles/04_工程化/Go 工程工具选型.md",
      "title": "Go 工程工具选型：沿着一个项目的重复劳动逐个选择",
      "source_sha256": "f0e667e6209120d7c491d9c27f1d7011133e327b53df3a12c1914532277b448a",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "Go 工程工具的分层选型",
        "reason": "选型由项目约束和版本决定，避免用不可靠的自动打分器代替文字判断。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-028",
      "book": "go",
      "path": "books/go/articles/04_工程化/Go 构建与发布.md",
      "title": "Go 构建与发布：从一个二进制追到它的源码、参数和验证结果",
      "source_sha256": "1e9d9d548f6dd10742fa5146a49f2b528f960181ead03ee19bd0f949a40925da",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "构建输入、制品身份与发布",
        "reason": "关键是检查源码、参数、目标平台与制品之间的证据链，静态图已足够。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-029",
      "book": "go",
      "path": "books/go/articles/04_工程化/Go 模块管理.md",
      "title": "Go 模块管理：弄清这次构建到底用了哪份代码",
      "source_sha256": "44c6d4bc1411f6e25ff6146e5bb26372d5f05d63bd75aa8f9ee84e3c04a04063",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "最小版本选择 MVS",
        "reason": "修改一条最低版本需求后重新求构建列表，能解释名称中的“最小”并非选所有最低版。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-030",
      "book": "go",
      "path": "books/go/articles/04_工程化/Go 测试.md",
      "title": "Go 测试：让一次失败告诉你该改哪里",
      "source_sha256": "f54c2f488595da7b602d2828afe2137cc7a259c2606342ae00d2aeac52dc79a0",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "测试层次与可解释失败",
        "reason": "交互不能替代编译运行、fake 与真实 HTTP 边界，保留已有实验更诚实。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-031",
      "book": "go",
      "path": "books/go/articles/04_工程化/Go 结构化日志.md",
      "title": "Go 结构化日志：让一次事件能查到，也别把秘密写进去",
      "source_sha256": "f33ff6c9127b6c9cb421c7435893d93b05b5461b4524669c2f5ed8898cdc43b3",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "日志字段、脱敏与输出责任",
        "reason": "本章着重事件契约和安全边界，不需要增加会诱导输入真实秘密的在线日志框。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-032",
      "book": "go",
      "path": "books/go/articles/04_工程化/Go 配置管理.md",
      "title": "Go 配置管理：启动前，把来源、类型和错误处理清楚",
      "source_sha256": "6bb1af64d2cfa6eb20cc6058334b2120b98cafcf626583fb3c97a856a8ac2f3f",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "配置来源优先级与缺失值",
        "reason": "切换未设置、空串、零值后显示最终值来自哪一层，能揭示覆盖规则。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-033",
      "book": "go",
      "path": "books/go/articles/04_工程化/Go 项目结构.md",
      "title": "Go 项目结构：让目录边界和依赖方向说同一件事",
      "source_sha256": "76121dc5043476bac5b1125b5d8374f6c08cb5c0d4f6969dfad46da3b0407334",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "项目目录与实际依赖方向",
        "reason": "目录名不是架构保证；并排显示实际依赖即可支持判断。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-034",
      "book": "go",
      "path": "books/go/articles/04_工程化/设计原则.md",
      "title": "设计原则：用 Go 守住业务规则，再决定需要多少抽象",
      "source_sha256": "cc650c41daa304de4eda26f07ad4ac9ba6055d68e7c6c001d96b0fdc17683964",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "以业务变化检验抽象",
        "reason": "设计选择需要上下文论证，强行量化或拖动层级会淡化实际约束。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-035",
      "book": "go",
      "path": "books/go/articles/05_计算机基础/Linux.md",
      "title": "Linux：从一个故障问题出发，选命令、读指标、写可控脚本",
      "source_sha256": "6e674b11b0bf367a869d2078169d9880d1667a70d32ee268e411d9ca6baf1912",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "根据故障选 Linux 证据",
        "reason": "用户应练习读取真实证据；模拟终端容易被误当作已运行的系统状态。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-036",
      "book": "go",
      "path": "books/go/articles/05_计算机基础/操作系统.md",
      "title": "操作系统：把“程序在等什么”和“资源归谁”讲清楚",
      "source_sha256": "355821ea74d374c2d29525ff8991bf6ae8b3a2c67ec60b27f74e80931cb6a79c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "应用对象与内核资源的对应",
        "reason": "本章跨度大，静态资源关系比一个省略大量内核行为的统一模拟更可靠。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-037",
      "book": "go",
      "path": "books/go/articles/05_计算机基础/数据结构与算法.md",
      "title": "数据结构与算法：从操作需求出发，理解每一种结构为什么存在",
      "source_sha256": "93c14ccdb09d6baa67149ff7a1124a25207a3a526c57d3d3c84fd6b4935a7982",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "堆的不变量与局部修复",
        "reason": "只选堆这一处逐步更新父子关系，避免把八类结构做成无主线动画库。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-038",
      "book": "go",
      "path": "books/go/articles/05_计算机基础/计算机网络.md",
      "title": "计算机网络：沿着一次请求，把协议各自负责的事分清",
      "source_sha256": "eeebc46c5768f57d1d4c2c5fceae821441eea00c2e822d7555ea51e9a5d532ef",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "一次 HTTPS 请求的协议责任",
        "reason": "静态图可同时标明请求边界、TLS、DNS 和连接复用，不虚构公网时延。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-039",
      "book": "go",
      "path": "books/go/articles/06_Web与API/Go HTTP 中间件.md",
      "title": "Go HTTP 中间件：包住 Handler，也要守住响应边界",
      "source_sha256": "54d045af214a35e8488ab6963509b2c38c62d1f87d75467c5a07671b6b8a5208",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "中间件包装与响应提交",
        "reason": "改变鉴权、日志和 recover 顺序后观察进入/退出与首次写出，能解释组合边界。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-040",
      "book": "go",
      "path": "books/go/articles/06_Web与API/Go Web 与 RPC 工具选型.md",
      "title": "Go Web 与 RPC 工具选型：先分清它们替你承担哪一层",
      "source_sha256": "f57d1a99b5cb0bd7b978c767a02d3986c79517430c7d0d4266f9abe21c754a26",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "Web 与 RPC 工具层次",
        "reason": "框架选型主要是版本、协议和既有资产判断，不需要自动推荐控件。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-041",
      "book": "go",
      "path": "books/go/articles/06_Web与API/Go 请求处理.md",
      "title": "Go 请求处理：把不可信输入变成明确结果",
      "source_sha256": "ba1c2318aff6478d0c185d84eba01053c70d451ed247b23c2544a30b34c4ff08",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "请求解析、大小限制与输入契约",
        "reason": "边界测试已是最直接教材；交互表单易掩盖具体 net/http 行为。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-042",
      "book": "go",
      "path": "books/go/articles/06_Web与API/RESTful 设计.md",
      "title": "RESTful 设计：让调用方知道一次请求究竟做了什么",
      "source_sha256": "1c48186e27e9d05fcbec6b04fab5294a647adc6ab93edb19bad0467abbb16d1f",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "重试、条件更新与 REST 契约",
        "reason": "用两次并发更新及 ETag 静态对照即可解释丢失更新与幂等责任。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-043",
      "book": "go",
      "path": "books/go/articles/06_Web与API/RPC 与 gRPC.md",
      "title": "RPC 与 gRPC：像调用函数一样使用，也要按网络请求处理",
      "source_sha256": "c1063ea837006d47d10e2dcf31f24cdf77252dd5a1e3c9bcd2987b4cde2a90f6",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "四种 RPC 流与半关闭",
        "reason": "重点是两侧何时结束发送和如何读最终状态，静态时序更适合反复对照。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-044",
      "book": "go",
      "path": "books/go/articles/06_Web与API/WebSocket GraphQL 与 Webhook.md",
      "title": "WebSocket、GraphQL 与 Webhook：三种不同的问题，三条不同的链路",
      "source_sha256": "bc5a549caa02bee5204acf7838330995bfab6e9351b9ec709383dc23d3bdcdac",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "WebSocket、GraphQL、Webhook 的链路",
        "reason": "三者负责不同问题，不适合合成一个互动选择器；分别标清故障责任。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-045",
      "book": "go",
      "path": "books/go/articles/06_Web与API/net-http.md",
      "title": "net/http：把一个请求从接收到收尾讲清楚",
      "source_sha256": "9a620a4994b37e0dc5b33e80ea0f096e573815bebafc9154bcf535c7773329d2",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "HTTP 请求、Body、连接与退出",
        "reason": "保留具体 Go 测试，图只帮助区分 handler 结束、body 读完与连接归还。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-046",
      "book": "go",
      "path": "books/go/articles/07_数据存储/Go 数据库工具选型.md",
      "title": "Go 数据库工具选型",
      "source_sha256": "be26f35017e1db1815a72bdf6bc889b1e500aef7e56927f9e2eb661f386a1e0c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "数据库驱动、查询层与迁移选型",
        "reason": "选型不具有可靠的单一评分，正文更能保留环境和维护代价。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-047",
      "book": "go",
      "path": "books/go/articles/07_数据存储/Go 数据访问.md",
      "title": "Go 数据访问：管好连接、事务和 SQL 边界",
      "source_sha256": "958169925bdd7a5dcf34b55d0c30188fa600cb0c5ae5d32bbc908c1ef9f79d85",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "连接池借用、等待与释放",
        "reason": "调小池容量或不归还 Rows 能直接展示请求如何排队；不把模型时间当数据库性能。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-048",
      "book": "go",
      "path": "books/go/articles/07_数据存储/MySQL.md",
      "title": "MySQL：沿着一次提交，认识 InnoDB、日志与复制",
      "source_sha256": "53d3ddd4315b50adcb10ed1c57d4254caf0c884c6458268e1dc93ee9b4eafca4",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "redo、undo、binlog 与复制确认",
        "reason": "必须区分引擎和配置保证；现有文档解释配静态确认点最稳妥。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-049",
      "book": "go",
      "path": "books/go/articles/07_数据存储/NoSQL 与专用存储.md",
      "title": "NoSQL 与专用存储",
      "source_sha256": "e47436ce9c038a80abf9ceaa34cade0d620229d0709bd0fcc6ca0f3724dfc29e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "专用存储按访问方式分工",
        "reason": "重点是数据模型与产品约束，交互不会补足真实选型所需负载证据。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-050",
      "book": "go",
      "path": "books/go/articles/07_数据存储/PostgreSQL.md",
      "title": "PostgreSQL：把版本清理、JSONB 与索引选对",
      "source_sha256": "db175cc554ef68e2f03463d7595791d371a1d7892c2d4fa274a05076cf9f26c9",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "行版本、清理与专用索引",
        "reason": "VACUUM 和索引语义适合固定图；不模拟优化器性能或实际物理布局。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-051",
      "book": "go",
      "path": "books/go/articles/07_数据存储/SQL 基础.md",
      "title": "SQL 基础：先确定一行代表什么，再写查询",
      "source_sha256": "12e2f4140b7205b7beb651215119f76d82c04071a3446e2aa33e829c5f23ffae",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "JOIN、NULL、聚合与行数",
        "reason": "逐步连接两张小表，显示重复行如何产生以及聚合怎样放大金额，可暴露无语法错误的逻辑错。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-052",
      "book": "go",
      "path": "books/go/articles/07_数据存储/数据库事务.md",
      "title": "数据库事务：让一组修改成立，也让并发判断成立",
      "source_sha256": "cf4088880b1b1eeb59d5edc7c81209ab640cf8de80c76480d9333cad284b5722",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "事务交错、快照与业务约束",
        "reason": "让读者选择读/写/提交顺序并观察异常，能解释事务存在不等于业务正确。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-053",
      "book": "go",
      "path": "books/go/articles/07_数据存储/数据库扩展性.md",
      "title": "数据库扩展性：先找瓶颈，再增加分布式边界",
      "source_sha256": "6ff7939b181a17319a7436324b7d23077b36471c3c84c23fe77e273e0eb4a09b",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "数据库扩展与迁移边界",
        "reason": "扩展性依赖实际瓶颈；路由计算可转到数据分布专章，避免重复控件。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-054",
      "book": "go",
      "path": "books/go/articles/07_数据存储/数据库索引.md",
      "title": "数据库索引：从少读哪些数据，理解一条查询为什么快",
      "source_sha256": "cbd9347fcbf2fad3ef1e92e56e626fec32f570dc34662de89a7016812bc6de9f",
      "review_status": "main_sections_read_concepts_recorded",
      "concept_review": {
        "path": "books/go/articles/07_数据存储/数据库索引.md",
        "review_depth": "main_concept_sections_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "btree-navigation",
            "sections": [
              "一棵树为什么能少读很多页"
            ],
            "status": "candidate",
            "reason": "调有序键和页容量，跟踪分隔键导航与叶页范围遍历；不套固定三层或虚构实测IO。"
          },
          {
            "id": "clustered-vs-heap",
            "sections": [
              "同样叫“主键”，InnoDB 和 PostgreSQL 存的东西不同"
            ],
            "status": "candidate",
            "reason": "按两个明确存储布局追踪二级键到聚簇键或堆位置的路径，区分列覆盖和MVCC可见性。"
          },
          {
            "id": "composite-order-and-bounds",
            "sections": [
              "联合索引是按多个键依次排序"
            ],
            "status": "implemented_reuse",
            "component": "IndexSearchDemo",
            "reason": "编辑整数行与谓词，真实二分定位一个候选区间，再过滤并核对集合；保留重复键。"
          },
          {
            "id": "skip-scan",
            "sections": [
              "联合索引是按多个键依次排序",
              "一次真实实验：先看计划形状，暂时不比较毫秒"
            ],
            "status": "candidate",
            "reason": "改变前导列不同值数，对比逐组定位与完整索引扫描的机制；不能把比较次数当优化器成本或声称总会选skip scan。"
          },
          {
            "id": "covering-icp-visibility",
            "sections": [
              "覆盖索引和索引下推分别省哪一步"
            ],
            "status": "candidate",
            "reason": "选择返回列、索引可过滤谓词与可见性标记，分别数候选和必须读取的完整行；避免混淆Using index与Using index condition。"
          },
          {
            "id": "selectivity-estimation",
            "sections": [
              "少背“失效清单”，多问四个具体问题"
            ],
            "status": "candidate",
            "reason": "修改数据分布并比较真实选择率与过时统计估计；不用自创成本公式预测数据库计划。"
          },
          {
            "id": "real-plan-evidence",
            "sections": [
              "一次真实实验：先看计划形状，暂时不比较毫秒",
              "EXPLAIN 要从估计读到实际"
            ],
            "status": "prose_or_existing_code",
            "reason": "保留原书真实EXPLAIN与复现脚本，不能将模拟结果替换为生产计划；ANALYZE副作用说明应始终可见。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "interactive",
        "concept": "联合索引排序与候选扫描",
        "reason": "改变条件后高亮必须扫描的键区间，解释走索引不等于少读数据；不预测真实执行计划。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "IndexSearchDemo",
          "placement": "## 联合索引是按多个键依次排序",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-055",
      "book": "go",
      "path": "books/go/articles/08_缓存/Go 缓存工具选型.md",
      "title": "Go 缓存工具选型",
      "source_sha256": "1697491f21d67d8fe2ac1d77c7bde9ca5bce1e9757a82f009e2a05f1790284b2",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "远程缓存客户端与本地缓存",
        "reason": "先按层和一致性选型，避免用动画给出未经测量的快慢排名。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-056",
      "book": "go",
      "path": "books/go/articles/08_缓存/Redis 原理.md",
      "title": "Redis 原理",
      "source_sha256": "b23041a839d51b24ecd6cd95df4d06e0e783276142dbc4d1fe614ffd0d9fb18a",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "Redis 执行、持久化与复制",
        "reason": "重点是明确何时进入内存、落盘或副本，静态路径更能保留配置限制。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-057",
      "book": "go",
      "path": "books/go/articles/08_缓存/Redis 数据结构.md",
      "title": "Redis 数据结构",
      "source_sha256": "87c257f773918e79842ffa3cf884050733cecf5e6733a607dd4fbf65a3668a03",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "Redis 类型接口与内部编码",
        "reason": "九种结构是查阅内容，优先保留操作需求和版本边界，不做统一玩具 Redis。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-058",
      "book": "go",
      "path": "books/go/articles/08_缓存/Redis 缓存进阶.md",
      "title": "Redis 缓存进阶",
      "source_sha256": "4c1eb0444b9bbcc3bff7ef1e92df572d3a005433678058bf7599aa96b0cbc24e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "热 key、大 key 与多级缓存",
        "reason": "二维关系可直接说明不同治理方向；具体吞吐必须继续依赖测量。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-059",
      "book": "go",
      "path": "books/go/articles/08_缓存/缓存三大问题.md",
      "title": "缓存三大问题",
      "source_sha256": "fb64e9cb0728cc637426fb2b6daf1de0c0bb01f66a4f4d82b1fc0dbcb50765e9",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "缓存失效时的回源工作量",
        "reason": "对比集中失效、空值缓存和合并重建后数据库收到的工作量，能解释保护对象。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-060",
      "book": "go",
      "path": "books/go/articles/08_缓存/缓存模式.md",
      "title": "缓存模式",
      "source_sha256": "44b94c3945e77ae1326df167a8e0dfee472191607aad744be272d46fc1fe07f7",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "缓存双写与失效竞态",
        "reason": "手动交错读、写、失效和失败，能证明延迟双删不是一致性保证。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-061",
      "book": "go",
      "path": "books/go/articles/09_消息队列/Go 消息与工作流工具选型.md",
      "title": "Go 消息与工作流工具选型：先选需要哪一层，再检查确认和重试",
      "source_sha256": "0b16a9e5d1075ce39014eb5d24005f25b01c0a5285e15535d9dde6c8f428090d",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "消息客户端、任务与工作流分层",
        "reason": "工具版本与协议差异比动画重要；复用后续可靠性章节解释失败窗口。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-062",
      "book": "go",
      "path": "books/go/articles/09_消息队列/Kafka.md",
      "title": "Kafka：从分区日志理解复制、吞吐、Rebalance 与事务",
      "source_sha256": "18cd2e2478d5d76d88920de3ed337d4ee6cc10418846d1e2ed51ec48ae35e84e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "Kafka 分区、ISR 与消费位置",
        "reason": "静态图能标出有序范围及提交点；完整 rebalance 模拟代价高且容易省错条件。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-063",
      "book": "go",
      "path": "books/go/articles/09_消息队列/消息队列其他选型.md",
      "title": "消息队列其他选型：从路由、重放和业务交接来选择",
      "source_sha256": "e127162f0927df240b9eb60ec4c2f96f4099cf8fb4fdd4dd609887d1806dac17",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "消息队列选型依据",
        "reason": "应保留候选系统保证差异，不以一个简化 UI 给出产品排名。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-064",
      "book": "go",
      "path": "books/go/articles/09_消息队列/消息队列可靠性.md",
      "title": "消息队列可靠性：把每一个故障窗口处理清楚",
      "source_sha256": "68d66f09848feb104d1ca1b57ff8603928032ec7cfe272493a2aea0d78d1b8cd",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "处理完成与确认之间的故障窗口",
        "reason": "在业务提交和 ACK 间插入崩溃，直观看到重投递为何必须靠幂等兜底。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-065",
      "book": "go",
      "path": "books/go/articles/09_消息队列/消息队列应用模式.md",
      "title": "消息队列应用模式：从一次订单提交走到可靠的异步处理",
      "source_sha256": "4dc0375750d0c62d1459e4ba4305ba24bee829041bd6c0b7af028687d18097d0",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "Outbox、本地提交与重复投递",
        "reason": "展示同事务消除第一道裂缝、relay 仍可能重复，能阻止把 Outbox 当全链 exactly-once。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-066",
      "book": "go",
      "path": "books/go/articles/09_消息队列/消息队列核心概念.md",
      "title": "消息队列核心概念：一条消息由谁保管，处理进度记在哪里",
      "source_sha256": "9b72c022d5749414d985f9f5c220b4455e3d1cc87908ad98bc041f48ddfbb8b2",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "消息保管与消费进度",
        "reason": "基础名词的关系适合静态总图，避免和可靠性示例重复。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-067",
      "book": "go",
      "path": "books/go/articles/10_微服务与分布式/Go 微服务治理工具选型.md",
      "title": "Go 微服务治理工具选型：先分层，再比较同一层的代价",
      "source_sha256": "a2b3efdf307980d01c401a9899c7fa87f90c4ae46f7006bb66453daec524c809",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "协调、框架、代理与服务网格",
        "reason": "治理工具不在同一层竞争；上下文判断比互动评分更重要。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-068",
      "book": "go",
      "path": "books/go/articles/10_微服务与分布式/共识算法.md",
      "title": "共识算法：主节点换了，已经答应的事不能反悔",
      "source_sha256": "0471d9ec66f84521196ef032c27691a5ce86db8bfcb6da32ebb18866f26d788c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "Raft 任期、日志与提交安全性",
        "reason": "只演示已审查的选主与旧任期提交反例，不能把随机动画当完整协议验证器。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-069",
      "book": "go",
      "path": "books/go/articles/10_微服务与分布式/分布式事务.md",
      "title": "分布式事务：两边不能一起提交时，怎样把账做完整",
      "source_sha256": "c390ee623c3fe2b54b35ac4070a6507a0be6b3bba65c4960f12dbb960b761cda",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "2PC、TCC、Saga 的保证边界",
        "reason": "多种协议的失败假设不同，静态状态对照更容易保留“结果未知”和补偿语义。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-070",
      "book": "go",
      "path": "books/go/articles/10_微服务与分布式/分布式基础组件.md",
      "title": "分布式基础组件：锁、ID、任务和会话都要面对“旧请求还活着”",
      "source_sha256": "5b77d6c5dc6db70eb5ff8669deb2f508496a46d7ec98db5524780d24a0e07534",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "租约失效与 fencing token",
        "reason": "暂停旧持有者再恢复写入，能显示有锁和仍有权写资源是两件事。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-071",
      "book": "go",
      "path": "books/go/articles/10_微服务与分布式/分布式理论基础.md",
      "title": "分布式理论基础：先说清“什么结果算对”",
      "source_sha256": "fb8c64c892d6a8a121929dfd7b536462b3fd208476c738765b75c02a69b73df0",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "一致性、可用性与故障假设",
        "reason": "需要精确陈述理论假设；避免把 CAP 简化成任意三选二的互动三角形。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-072",
      "book": "go",
      "path": "books/go/articles/10_微服务与分布式/微服务拆分方法.md",
      "title": "微服务拆分方法：先把边界分清，再决定要不要跨网络",
      "source_sha256": "cea7936bf6134be9ae607e594445a287f4227e6b1b8777e56aad238ecfb473c0",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "微服务拆分与业务边界",
        "reason": "选择高度依赖团队和业务，不适合用可视化自动判定拆分优劣。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-073",
      "book": "go",
      "path": "books/go/articles/10_微服务与分布式/数据分布.md",
      "title": "数据分布：决定数据放哪里，也决定以后怎么搬",
      "source_sha256": "c85e2358dcc358f50047d2803985a132d7fe65b053d48e5bfba0b3598d1bcddd",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "一致性哈希与成员变化",
        "reason": "增删节点后高亮迁移的键，比较取模路由；明确虚拟节点不能解决所有热点。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-074",
      "book": "go",
      "path": "books/go/articles/10_微服务与分布式/服务治理.md",
      "title": "服务治理：让请求找到合适的实例，并在变化时有序退出",
      "source_sha256": "db56b440944fef852457cab93fea69223156dff7fc4342305d523eff4a11cce3",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "服务发现、就绪与排空",
        "reason": "快照、版本和生命周期可用静态时序说明，保留真实治理工具验证。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-075",
      "book": "go",
      "path": "books/go/articles/11_高并发与高可用/Go 稳定性与压测工具选型.md",
      "title": "Go 稳定性与压测工具选型：先选保护边界，再选测量方式",
      "source_sha256": "0476ff3eb6cc7e6c013912f6619937311af881cc0a2b8fdb495129842d5edc0f",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "稳定性库与压测模型选型",
        "reason": "工具选择依赖具体策略顺序；算法互动集中到稳定性章节，不重复造压测器。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-076",
      "book": "go",
      "path": "books/go/articles/11_高并发与高可用/发布安全.md",
      "title": "发布安全：新版本能接班，旧版本也要能退场",
      "source_sha256": "6a25382e55d5b574e934579fc040753fe15d6197e1f579517df6d06e49cd28e6",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "发布时停止接流量与排空",
        "reason": "分步触发 ready、终止、摘流和超时，能让宽限期中的竞态可见。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-077",
      "book": "go",
      "path": "books/go/articles/11_高并发与高可用/可靠性度量.md",
      "title": "可靠性度量：先写清分母，再谈几个 9",
      "source_sha256": "bceeb9f749f564b8df31162fb50c38a23b771a677db8dd2559c11d3f1c4aa764",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "SLI 分母、错误预算与 burn rate",
        "reason": "改变坏事件、总事件和窗口即显示预算消耗，并明确无流量与缺数据不能算满分。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-078",
      "book": "go",
      "path": "books/go/articles/11_高并发与高可用/容灾.md",
      "title": "容灾：副本能接班，备份能回到过去，恢复还需要演练",
      "source_sha256": "94c9c0e37ff3f14e221a46e57cfaf7d6e84fab276c957ae3149d5174c830f7a5",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "副本、备份与可恢复历史",
        "reason": "容灾应从真实恢复验收判断，交互时间拖动不能证明备份可用。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-079",
      "book": "go",
      "path": "books/go/articles/11_高并发与高可用/容量与弹性.md",
      "title": "容量与弹性：先量出可用容量，再讨论扩多少实例",
      "source_sha256": "3aabeff774435c4bf4339836e754d8a5098795c9d18e7b1722af6b2bf4708713",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "开环/闭环负载与扩容延迟",
        "reason": "在服务变慢时比较发送率和已完成请求延迟，帮助理解协调遗漏与排队。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-080",
      "book": "go",
      "path": "books/go/articles/11_高并发与高可用/幂等设计.md",
      "title": "幂等设计：超时以后，怎样安全地再试一次",
      "source_sha256": "da6934e5b11297f92268549642e342a4bdacb05997b7733d16d87992c5482355",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "幂等键、请求状态与重放",
        "reason": "切断响应后重试并显示业务效果次数，能解释见过请求还不等于已有结果。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-081",
      "book": "go",
      "path": "books/go/articles/11_高并发与高可用/稳定性手段.md",
      "title": "稳定性手段：让慢依赖和突发流量止步于有限资源",
      "source_sha256": "3a556c8c4affee3893dfd6f565ba2541b9c37af9d8533643b8f19d836626ca44",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "令牌桶、重试和熔断",
        "reason": "先只实现令牌桶或熔断器一种机制，显示突发与等待；不承诺生产稳定性。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-082",
      "book": "go",
      "path": "books/go/articles/11_高并发与高可用/高并发手段.md",
      "title": "高并发手段：减少重复工作，并给共享资源设上限",
      "source_sha256": "96e706fdefd2146decf30ec7b25f1d511e047657268d8dd2e32782c8643866eb",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "池化、批量与异步的成本转移",
        "reason": "方法众多且需证据选择，复用连接池和背压示例入口即可。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-083",
      "book": "go",
      "path": "books/go/articles/12_安全/Go 安全工具选型.md",
      "title": "Go 安全工具选型：先分清库、扫描器和密钥服务",
      "source_sha256": "0ca2ea0450148808e0fd5990241c59311699f5a92a6299dc4e822bbd77a4ec41",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "安全库、扫描器和密钥服务分工",
        "reason": "安全判断不能靠视觉绿灯，保留具体验证规则和失败反例。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-084",
      "book": "go",
      "path": "books/go/articles/12_安全/供应链与运行时安全.md",
      "title": "供应链与运行时安全：从依赖来源追到线上进程",
      "source_sha256": "82ec8e40bafc58f510b99e417220f4cb167a5af84cc4a20463e73c2b4025d6fd",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "依赖、制品、签名与线上身份",
        "reason": "强调每种证据证明什么，静态溯源图比模拟安全评分更可靠。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-085",
      "book": "go",
      "path": "books/go/articles/12_安全/密码学应用.md",
      "title": "密码学应用：先决定要保护什么，再选算法",
      "source_sha256": "5924a96a066ce5d7f0808bc2b0082a665e48d37bc8e724585730f7a738f5d6e8",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "哈希、MAC、签名、加密的威胁边界",
        "reason": "图可解释谁有能力伪造，交互不应接收真实密码或暗示实现经过安全审计。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-086",
      "book": "go",
      "path": "books/go/articles/12_安全/常见安全漏洞.md",
      "title": "常见安全漏洞：沿着输入找到危险操作",
      "source_sha256": "1a81f8ece807ae23e09a1ee2af66996e7afe2c5ebe6b562de8877fe8ef9f674b",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "输入到危险操作的安全检查",
        "reason": "现有受控反例更贴近修复；不增加联网攻击靶场或任意代码执行入口。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-087",
      "book": "go",
      "path": "books/go/articles/12_安全/授权.md",
      "title": "授权：把“谁能对哪份数据做什么”写成可检查的规则",
      "source_sha256": "6be98a2768ff3da451ef2af3dba9577a9dc32c71bb1003803572d52749bc1ff6",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "主体、资源、动作与授权关系",
        "reason": "明确策略例外与检查时序更重要；可视化只展示虚构主体，不做真实权限变更。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-088",
      "book": "go",
      "path": "books/go/articles/12_安全/接口安全.md",
      "title": "接口安全：让每一道检查都有明确的边界",
      "source_sha256": "bd2829a1784b258ff5fcd5d09c5f595cb30c133527a5de190937e68d3244cd15",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "校验、防重放与输出边界",
        "reason": "一条静态信任边界路线能保留不同安全机制的责任，不用交互绿灯代替审查。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-089",
      "book": "go",
      "path": "books/go/articles/12_安全/认证.md",
      "title": "认证：从“登录成功”到每次请求都认对人",
      "source_sha256": "841cbddbb0ab06922772cfb6a0762a233e2cf63901419332e1ddf1147903f7d9",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "会话、JWT、OAuth/OIDC 与吊销",
        "reason": "协议细节和威胁条件必须明确，静态图更适合伴读官方流程。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-090",
      "book": "go",
      "path": "books/go/articles/13_可观测性/Go 可观测性工具选型.md",
      "title": "Go 可观测性工具选型：先分清谁采集、谁保存、谁帮你定位问题",
      "source_sha256": "f9b660d0f64ff0980ed7ae9a9bc537ad94f4eddeecad0230f0d4030ce81a2308",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "遥测采集、存储与诊断工具",
        "reason": "多后端选型主要是团队需求与成本，交互仪表盘不会补充证据。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-091",
      "book": "go",
      "path": "books/go/articles/13_可观测性/OpenTelemetry.md",
      "title": "OpenTelemetry：让 Go 服务产生、传播并交付遥测数据",
      "source_sha256": "e20e2f487c1424135f345102e576e5ca551a0d349850d54930bf2969e0fbaf60",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "Span 生命周期、传播与导出",
        "reason": "分开记录、采样、结束和交付能解释缺 trace，静态分层足够。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-092",
      "book": "go",
      "path": "books/go/articles/13_可观测性/可观测性三大支柱.md",
      "title": "可观测性三大支柱：从“服务变慢了”找到下一条证据",
      "source_sha256": "fb84277e4608ca3fe67b79373456a5f66ed2b708092f2a06a925a0c2bb101a60",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "直方图聚合与分位数陷阱",
        "reason": "合并样本后重算分位数，展示平均各实例 p99 不等于全局 p99。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-093",
      "book": "go",
      "path": "books/go/articles/13_可观测性/告警设计.md",
      "title": "告警设计：让每一次叫醒都指向一件值得做的事",
      "source_sha256": "e2a2114a92b2f8f929da7ba2299588e726d44b74e2f32caf1a32fa3bce736c7e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "多窗口 burn rate 告警",
        "reason": "移动坏事件突发区间并显示两个窗口条件，能解释为何用 AND 且不能把无数据当正常。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-094",
      "book": "go",
      "path": "books/go/articles/13_可观测性/持续剖析.md",
      "title": "持续剖析：把一次性能排查，变成能回看时间和版本的证据",
      "source_sha256": "560cc18e3e8a45cc051b8bb6e9e53805308ed0e1fc94c38847fcb1b0b117ce9d",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "CPU、内存与等待 profile 口径",
        "reason": "保留实测图与采样边界，避免生成看似真实的火焰图。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-095",
      "book": "go",
      "path": "books/go/articles/13_可观测性/故障复盘.md",
      "title": "故障复盘：把当时发生的事，变成可以验证的改进",
      "source_sha256": "7cb6f93d382a9ce3aa1611d8188626b8bb79de6ee233914e387349c6f3a25d3b",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "事故证据、决策条件和改进验收",
        "reason": "核心是事实核对和人的判断，互动控件没有比清晰叙述更强的解释力。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-096",
      "book": "go",
      "path": "books/go/articles/14_性能与调试/Go trace.md",
      "title": "Go trace：把“请求在等什么”放回时间线上",
      "source_sha256": "ed72ccd37541e156aec6d6156f9261654c0f016592cf0e27335ecc95ae41192f",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "G 等待、就绪与实际运行",
        "reason": "移动光标区分阻塞等待和调度等待，复用 GMP 概念；明确数据为教学构造。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-097",
      "book": "go",
      "path": "books/go/articles/14_性能与调试/Go 典型故障排查.md",
      "title": "Go 典型故障排查：从八种症状找到下一份证据",
      "source_sha256": "d5ae1f16388d95e39ad4b401f394483dffd9d0e9ec38db08cbe3f75c1c880965",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "根据症状查下一份证据",
        "reason": "故障排查应联系真实指标与调用链，不能靠模拟的症状选择器替代取证。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-098",
      "book": "go",
      "path": "books/go/articles/14_性能与调试/Go 基准测试.md",
      "title": "Go 基准测试：让“更快了”有可以复核的含义",
      "source_sha256": "74bc10d1581efebe1db3e4e51ee921969de60b3ca59cf4b8d1e636c3c8e7da2c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "重复基准与统计比较",
        "reason": "不补造测量；已有运行记录和反例是主证据，静态图可作为可选附件。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-099",
      "book": "go",
      "path": "books/go/articles/14_性能与调试/Go 常见优化点.md",
      "title": "Go 常见优化点：把成本降下来，也把语义保住",
      "source_sha256": "f5df68c66e9aaaacc678db0228bca7c2a4d9a87ff5ba9475bbb6e436d335eaf9",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "保留语义的性能优化",
        "reason": "优化是否值得取决于热点和真实成本，避免给滑块设置虚构加速比。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-100",
      "book": "go",
      "path": "books/go/articles/14_性能与调试/Go 性能诊断工具选型.md",
      "title": "Go 性能诊断工具选型：六个工具，六种不同的问题",
      "source_sha256": "0d0c73c668a247d5262250b80531b169aabef4a245b7daf1aa9e691c3fbe3d26",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "诊断工具各能回答的问题",
        "reason": "工具选型以问题和取证开销为中心，交互不会代替实际 profile。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-101",
      "book": "go",
      "path": "books/go/articles/14_性能与调试/Go 调试.md",
      "title": "Go 调试：断点看状态，GODEBUG 看运行时，core 留住现场",
      "source_sha256": "a34e7fdcebd826aaddfd2cc88269707b8cd790ec1f47205e540675998f9aa928",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "断点、core 与运行时日志",
        "reason": "程序状态需真实调试器核验，浏览器假终端会造成不必要的混淆。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-102",
      "book": "go",
      "path": "books/go/articles/14_性能与调试/pprof.md",
      "title": "pprof：先选对“在量什么”，再找热点",
      "source_sha256": "92dcf4f6906d9d3f2b4faf5244ffdd632227c5df2edcf552a70a622bcf69005c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "profile 类型、flat/cum 和宽度",
        "reason": "静态小树能解释归因关系；不将火焰图横轴画成时间线。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-103",
      "book": "go",
      "path": "books/go/articles/15_部署与云原生/Go CI-CD 与 GitOps.md",
      "title": "Go CI-CD 与 GitOps",
      "source_sha256": "09d20418174a3909ecccb86863dcbd982a0af6f7b89f4b0cd13b3d2aba9782ad",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "CI、制品晋级与 GitOps 纠偏",
        "reason": "持续协调与单次流水线需分清，现有本地验证比动画更重要。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-104",
      "book": "go",
      "path": "books/go/articles/15_部署与云原生/Go 云原生工具选型.md",
      "title": "Go 云原生工具选型",
      "source_sha256": "afaf807dc70c5fc4e0693388a4d14763be8391a87b1dda4b095338f8e3c1597a",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "云原生构建、打包与控制器选型",
        "reason": "工具处于不同生命周期，保留选型理由和权限边界即可。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-105",
      "book": "go",
      "path": "books/go/articles/15_部署与云原生/Go 在容器中.md",
      "title": "Go 在容器中",
      "source_sha256": "0dd61dfac9ffee9d03f99b91b2c9c95015ca09a27a6d6cbbd2ac40001d75fbed",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "CPU 配额、P 数、内存软限与退出",
        "reason": "容量关系高度依赖运行时与内核，复用 GMP 入口但不模拟真实容器节流。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-106",
      "book": "go",
      "path": "books/go/articles/15_部署与云原生/Kubernetes.md",
      "title": "Kubernetes",
      "source_sha256": "1e1722e57df4a015dcf48cb012ddc3d117e012c91f8023a52f57be568add942e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "声明状态与控制器协调",
        "reason": "删除一个教学 Pod 后逐步补齐期望副本，解释 desired 不等于 ready；不冒充真实集群。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-107",
      "book": "go",
      "path": "books/go/articles/15_部署与云原生/后端云服务.md",
      "title": "后端云服务",
      "source_sha256": "a0c8ea0d6bece770ef6a4a84715de84336b56172933756a6cbd602d236cc0c99",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "请求路径、故障域与云服务责任",
        "reason": "云服务选型需要业务条件，静态责任与故障域图更清楚。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-108",
      "book": "go",
      "path": "books/go/articles/15_部署与云原生/基础设施即代码.md",
      "title": "基础设施即代码",
      "source_sha256": "68bda3c4d67f5afa5f5f2f135179805fec06c34659be735f95fb88c0a721a28c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "配置、state、计划与实际资源",
        "reason": "plan 与 apply 的区别应清楚标注，避免可点击销毁一类拟真操作增加误解。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-109",
      "book": "go",
      "path": "books/go/articles/15_部署与云原生/容器与 Docker.md",
      "title": "容器与 Docker",
      "source_sha256": "28dfbb67c49b15a9e129e5eee8c200ffc3a42c9811b3bc890aefed2f7085d3f8",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "镜像分层与容器隔离",
        "reason": "静态文件层覆盖图即可解释删文件不等于移除旧层内容。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-110",
      "book": "go",
      "path": "books/go/articles/15_部署与云原生/网关与代理.md",
      "title": "网关与代理",
      "source_sha256": "db6e595e575bf4374d80505b5eba7bc35346d97eaf63bc76bc396841f51f963b",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "代理双连接、缓冲和超时",
        "reason": "代理责任随配置改变，保留真实回环测试和限制，图只解释边界。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-111",
      "book": "go",
      "path": "books/go/articles/16_系统设计/Go 源码阅读方法.md",
      "title": "Go 源码阅读方法",
      "source_sha256": "fe4a4f714cbb75fb1576f460d7d5911a400690feddbcf64197873143d7527ae1",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "以问题追踪源码责任",
        "reason": "学习目标是阅读真实固定源码和收尾路径，不需再套动画层。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-112",
      "book": "go",
      "path": "books/go/articles/16_系统设计/架构演进.md",
      "title": "架构演进：每拆开一个边界，都要重新回答谁负责提交和恢复",
      "source_sha256": "79691daf0a2b137f90d6a73f196652b27ae7775fb5b266cf7debd9c4d0fb29a7",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "架构边界、事件与投影恢复",
        "reason": "拓扑能帮助比较演进，但仍应保留业务约束与失败处理的完整叙述。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-113",
      "book": "go",
      "path": "books/go/articles/16_系统设计/系统容量估算.md",
      "title": "系统容量估算：把请求、字节和等待时间算到同一张账上",
      "source_sha256": "028b84c1f42ba5b6ab03e4a6fe98f78de8ff87cf0340313c80ca6046de406a79",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "QPS、字节、并发与冗余预算",
        "reason": "调整假设逐项显示平均/峰值、存储和平均并发，防止把 p99 代入 Little 定律。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-114",
      "book": "go",
      "path": "books/go/articles/16_系统设计/系统设计方法论.md",
      "title": "系统设计方法论：把需求一步步变成能验证的方案",
      "source_sha256": "85ded161d17f206f06098563525d4bacbfcfd84bec4e7c1bebdce5a345c2c7f1",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "从需求到可验证架构的推理链",
        "reason": "方法论需要读完论证，交互组件可在引用的具体机制章学习，不拆碎主线。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-115",
      "book": "go",
      "path": "books/go/articles/16_系统设计/系统设计经典题目.md",
      "title": "系统设计经典题目：十二种系统，十二组必须守住的约束",
      "source_sha256": "70c0fb2b7e0602077fef479a25b2b53b5db78472f9fd38f8b818fbc205202a42",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "十二种系统的业务不变量",
        "reason": "题型广且各自保证不同，应连接幂等、限流等专章互动，避免每题另造浅层动画。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-116",
      "book": "seo/book",
      "path": "books/seo/book/chapters/01_seo_value.md",
      "title": "第 1 章 SEO 是什么以及它怎样创造商业价值",
      "source_sha256": "68118350e5e9865e9250a8a393d45c8144307e49337e4972d342e541961e726a",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "搜索需求到商业结果的链路",
        "reason": "重点是投入是否值得，静态链路能保留需求、转化和交付成本之间的条件。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-117",
      "book": "seo/book",
      "path": "books/seo/book/chapters/02_search_pipeline.md",
      "title": "第 2 章 搜索引擎怎样发现和处理一个页面",
      "source_sha256": "a3bb3730ee38d89ae4f5037f4c5cb69ca181f64c919cd15587f2c9efb846befe",
      "review_status": "full_chapter_read_concepts_recorded",
      "concept_review": {
        "path": "books/seo/book/chapters/02_search_pipeline.md",
        "review_depth": "full_chapter_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "discovery-crawl-index-boundary",
            "sections": [
              "2.1",
              "2.3",
              "2.5",
              "2.10"
            ],
            "status": "implemented_reuse",
            "reason": "复用信号实验辨别已发现、抓取许可、已读取与索引未知，避免把流程图当执行承诺。",
            "component": "IndexingSignalsDemo"
          },
          {
            "id": "discovery-link-graph",
            "sections": [
              "2.2"
            ],
            "status": "candidate",
            "reason": "可编辑链接图寻找孤立页和可达路径；不能由可达性推出搜索引擎已抓取。"
          },
          {
            "id": "url-value-and-links",
            "sections": [
              "2.2"
            ],
            "status": "prose_or_existing_code",
            "reason": "真实href与sitemap代码可直接检查，URL独立价值仍是内容判断。"
          },
          {
            "id": "crawler-access-context",
            "sections": [
              "2.3"
            ],
            "status": "prose_or_existing_code",
            "reason": "网络、登录、身份与访问频率需要实际请求证据，当前模型只假设一次内容页请求。"
          },
          {
            "id": "html-render-resource-evidence",
            "sections": [
              "2.4"
            ],
            "status": "candidate",
            "reason": "并排比较初始HTML、渲染DOM和失败资源，说明何时缺少内容。"
          },
          {
            "id": "framework-access-decisions",
            "sections": [
              "2.4"
            ],
            "status": "prose_or_existing_code",
            "reason": "框架及权限选择属于项目条件，不自动公开受限内容。"
          },
          {
            "id": "canonical-content-judgment",
            "sections": [
              "2.5"
            ],
            "status": "prose_or_existing_code",
            "reason": "当前实验解释canonical提示，但真实重复内容与用户任务仍需审阅。"
          },
          {
            "id": "search-context-comparison",
            "sections": [
              "2.6"
            ],
            "status": "candidate",
            "reason": "对照查询、地区和时间等已知上下文，展示观察差异但不制造排序权重。"
          },
          {
            "id": "ranking-mechanisms",
            "sections": [
              "2.6"
            ],
            "status": "prose_or_existing_code",
            "reason": "相关性、排名与展示需要官方限定；不能编造统一评分公式。"
          },
          {
            "id": "historical-versus-live",
            "sections": [
              "2.7",
              "2.10"
            ],
            "status": "candidate",
            "reason": "历史抓取快照与实时测试对照，可解释为什么一次成功请求不等于索引恢复。"
          },
          {
            "id": "search-console-operation",
            "sections": [
              "2.7"
            ],
            "status": "prose_or_existing_code",
            "reason": "实际工具操作和账号访问保留正文，不伪造真实站点记录。"
          },
          {
            "id": "diagnostic-evidence-tree",
            "sections": [
              "2.8"
            ],
            "status": "candidate",
            "reason": "按证据分支定位访问、渲染、信号问题；不把分支结论写成排名保证。"
          },
          {
            "id": "business-priority",
            "sections": [
              "2.8",
              "2.9"
            ],
            "status": "prose_or_existing_code",
            "reason": "权限、业务影响和验收优先级取决于真实目标，避免统一假分数。"
          },
          {
            "id": "regional-value-checklist",
            "sections": [
              "2.10",
              "2.11",
              "本章参考来源"
            ],
            "status": "prose_or_existing_code",
            "reason": "地区页价值、执行清单及来源保留阅读与真实证据核对。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "static",
        "concept": "发现、抓取、渲染、索引与展示",
        "reason": "状态之间不保证自动推进；静态图加证据入口比虚构搜索引擎运行更可靠。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "IndexingSignalsDemo",
          "placement": "## 2.5 索引是一种选择而非网页备份",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-118",
      "book": "seo/book",
      "path": "books/seo/book/chapters/03_intent_quality.md",
      "title": "第 3 章 理解搜索意图与结果质量",
      "source_sha256": "573ff7385600f156d7833ad786d3d4223e79009d588b4eb6cc955e7ce21669dd",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "从查询提出意图与质量假设",
        "reason": "意图需要情境判断，自动分类互动容易让读者把假设当确定标签。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-119",
      "book": "seo/book",
      "path": "books/seo/book/chapters/04_strategy_priorities.md",
      "title": "第 4 章 把 SEO 目标变成可执行的项目",
      "source_sha256": "b325c36135d5945ad4d940aac5595229db94aa8239d0e8bbc1eee9a2da499ebc",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "项目取舍、预算与验收",
        "reason": "战略依赖业务事实和人力限制，不宜用未经校准的分数替代讨论。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-120",
      "book": "seo/book",
      "path": "books/seo/book/chapters/05_keyword_discovery.md",
      "title": "第 5 章 关键词发现：从真实问题到可信的数据集",
      "source_sha256": "4e6b37afc4a85886193d9ed4d84ac858d39d1111f08fac527178d2cf9922e082",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "关键词候选的数据来源与口径",
        "reason": "交互词表会偏向数量而不是证据，保留查证路径与工具边界更重要。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-121",
      "book": "seo/book",
      "path": "books/seo/book/chapters/06_intent_mapping_priority.md",
      "title": "第 6 章 搜索意图、关键词聚类与页面规划",
      "source_sha256": "c09dc670e3cb13c447940d50d7e1e71d4391a87815be7007293a46f56a34699f",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "SERP 重合、聚类与页面职责",
        "reason": "切换两组结果的共同项可复算重合比例，并明确它只是辅助证据，不是自动合并判决。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-122",
      "book": "seo/book",
      "path": "books/seo/book/chapters/07_competitor_serp_research.md",
      "title": "第 7 章 竞对与搜索结果研究：找到可以验证的差距",
      "source_sha256": "9b69ce749befa24c53e7209f4fa7f9caf4d589aaeb1bb88aa75c76081c777210",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "竞对差距的可验证依据",
        "reason": "核心是完整完成页面任务并记录差异，互动打分器容易制造排名公式幻觉。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-123",
      "book": "seo/book",
      "path": "books/seo/book/chapters/08_long_tail_programmatic_validation.md",
      "title": "第 8 章 长尾需求、程序化 SEO 与机会验证",
      "source_sha256": "8f5c9f2e4b77f7c84e01695038e1b0989e43234ad002a317d7004a86dc87c085",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "组合空间与允许发布集合",
        "reason": "改变有资料、可交付和独特价值条件，显示组合数为何不等于可发布页数。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-124",
      "book": "seo/book",
      "path": "books/seo/book/chapters/09_site_architecture.md",
      "title": "第 9 章 从域名到内链 建立可以持续生长的网站",
      "source_sha256": "219e472a96372d180a5852255e1fd162173ba627579d8a0895d803a69bdadaa8",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "页面类型、稳定 URL 与内链",
        "reason": "结构需要长期维护，静态图足以呈现用户路径，不做无条件的内链评分。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-125",
      "book": "seo/book",
      "path": "books/seo/book/chapters/10_onpage_optimization.md",
      "title": "第 10 章 页面优化 让搜索承诺与访问体验一致",
      "source_sha256": "68bb2a3e1da60a1604b8c24bf2832314fd35e8eba8e6e9b54061efed21765dc7",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "搜索承诺与页面任务一致",
        "reason": "并排展示标题、正文和行动入口比动画更利于编辑核对。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-126",
      "book": "seo/book",
      "path": "books/seo/book/chapters/11_content_strategy.md",
      "title": "第 11 章 内容策略 从选题到持续维护",
      "source_sha256": "0baec16cbf9b76e37c2d913a9ace93cc368c106184fb1079ac6ad9e69e979a43",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "内容证据、原创和维护责任",
        "reason": "内容判断不能靠视觉控件证明，保留证据与论证完整性。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-127",
      "book": "seo/book",
      "path": "books/seo/book/chapters/12_site_type_playbooks.md",
      "title": "第 12 章 不同站型的 SEO 把通用方法放进真实业务",
      "source_sha256": "282fdcd257c3487dba1852a59ad7e4e2567b1432c9f665403815386606692810",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "站型对象与页面生命周期",
        "reason": "不同业务的下架、版本和审核条件应并排呈现，避免统一成一个发布按钮。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-128",
      "book": "seo/book",
      "path": "books/seo/book/chapters/13_crawling_indexing.md",
      "title": "第 13 章 抓取与索引控制：让正确页面进入正确队列",
      "source_sha256": "f6061ae69aa3f7c2108384c0e16b094659c9350578a2f98db08afe5d8256d3a6",
      "review_status": "full_chapter_read_concepts_recorded",
      "concept_review": {
        "path": "books/seo/book/chapters/13_crawling_indexing.md",
        "review_depth": "full_chapter_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "signal-dependencies",
            "sections": [
              "13.1",
              "13.8"
            ],
            "status": "implemented_reuse",
            "reason": "逐步区分配置、抓取许可、实际响应和已读取信号；保留未知的真实索引状态。",
            "component": "IndexingSignalsDemo"
          },
          {
            "id": "page-purpose-security",
            "sections": [
              "13.1"
            ],
            "status": "prose_or_existing_code",
            "reason": "公开、保密和业务意图需要真实权限决策；教学模型不能代替身份验证。"
          },
          {
            "id": "robots-indexing-boundary",
            "sections": [
              "13.2"
            ],
            "status": "implemented_reuse",
            "reason": "阻止抓取时不读取页面状态及HTML信号，明确URL仍可能出现。",
            "component": "IndexingSignalsDemo"
          },
          {
            "id": "robots-rule-matching",
            "sections": [
              "13.2"
            ],
            "status": "candidate",
            "reason": "可编辑路径与规则，对照分组和最长匹配；当前实验只使用已经解析的有效许可。"
          },
          {
            "id": "robots-host-cache-errors",
            "sections": [
              "13.2"
            ],
            "status": "prose_or_existing_code",
            "reason": "多主机、缓存和robots文件本身错误需结合线上请求与官方行为，不在当前内容页模型中。"
          },
          {
            "id": "readable-noindex",
            "sections": [
              "13.3",
              "13.8",
              "练习一"
            ],
            "status": "implemented_reuse",
            "reason": "只改robots许可，观察同一noindex从未读取变为已读取；不承诺即时删除。",
            "component": "IndexingSignalsDemo"
          },
          {
            "id": "headers-and-html",
            "sections": [
              "13.3",
              "13.8"
            ],
            "status": "candidate",
            "reason": "响应头与HTML冲突、路径代理规则可通过两份响应证据定位；当前只模拟HTML指令。"
          },
          {
            "id": "snippet-controls",
            "sections": [
              "13.3"
            ],
            "status": "static_or_existing_code",
            "reason": "摘要限制和data-nosnippet的代码与范围对照已有明确静态示例。"
          },
          {
            "id": "removal-and-nofollow",
            "sections": [
              "13.3"
            ],
            "status": "prose_or_existing_code",
            "reason": "安全移除与nofollow有各自目标，不能由当前索引案例推断。"
          },
          {
            "id": "canonical-hint",
            "sections": [
              "13.4",
              "13.8"
            ],
            "status": "implemented_reuse",
            "reason": "自引用或指向重复原文只表达偏好；选定规范版本始终未知，并提示与noindex混用的边界。",
            "component": "IndexingSignalsDemo"
          },
          {
            "id": "duplicate-pagination-decisions",
            "sections": [
              "13.4",
              "练习三"
            ],
            "status": "prose_or_existing_code",
            "reason": "排序变体和分页内容是否满足不同任务需要真实内容判断；不能用地址相似度替代。"
          },
          {
            "id": "canonical-syntax",
            "sections": [
              "13.4"
            ],
            "status": "static_or_existing_code",
            "reason": "HTML和响应头写法保留可复制代码，不另做装饰动画。"
          },
          {
            "id": "sitemap-data-validation",
            "sections": [
              "13.5",
              "练习二"
            ],
            "status": "candidate",
            "reason": "URL集合、重复条目、容量拆分和lastmod校验适合可编辑数据检验；提交不等于收录。"
          },
          {
            "id": "sitemap-submission",
            "sections": [
              "13.5"
            ],
            "status": "prose_or_existing_code",
            "reason": "XML示例和提交诊断流程仍靠真实工具与证据，不模拟成功收录。"
          },
          {
            "id": "response-semantics",
            "sections": [
              "13.6"
            ],
            "status": "implemented_reuse",
            "reason": "200/404/503分支区分正常内容、删除和暂时失败，不读取错误正文中的指令。",
            "component": "IndexingSignalsDemo"
          },
          {
            "id": "redirect-chain",
            "sections": [
              "13.6"
            ],
            "status": "candidate",
            "reason": "可展示每跳状态及目标，帮助区分多跳、循环与最终响应。"
          },
          {
            "id": "soft404-business",
            "sections": [
              "13.6"
            ],
            "status": "prose_or_existing_code",
            "reason": "软404、HTTP方法和库存策略需实际内容及业务语义，玩具状态不足以判断。"
          },
          {
            "id": "faceted-url-combinations",
            "sections": [
              "13.7"
            ],
            "status": "candidate",
            "reason": "可调筛选维度计算URL组合及约束后的集合，不推导虚构抓取预算。"
          },
          {
            "id": "crawl-demand-capacity",
            "sections": [
              "13.7"
            ],
            "status": "prose_or_existing_code",
            "reason": "容量与需求要由访问日志、发布时间和资源证据区分，不生成预算或收录预测分数。"
          },
          {
            "id": "canonical-template-failure",
            "sections": [
              "13.8"
            ],
            "status": "candidate",
            "reason": "从多篇文章错误指向首页的样本定位模板回退；现有案例不模拟CMS模板。"
          },
          {
            "id": "timeline-evidence",
            "sections": [
              "13.9"
            ],
            "status": "candidate",
            "reason": "将发布、修复、最近抓取和索引记录放在时间线上，区分已修复与待处理。"
          },
          {
            "id": "operational-checks",
            "sections": [
              "13.9",
              "执行清单",
              "本章参考来源"
            ],
            "status": "prose_or_existing_code",
            "reason": "curl/grep和固定样本的回归流程继续使用真实命令；三层验收不能互相替代。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "interactive",
        "concept": "robots、noindex、canonical 与重定向",
        "reason": "切换少量声明后解释冲突，例如抓取被挡可能看不到 noindex；不承诺实际收录结果。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "IndexingSignalsDemo",
          "placement": "## 13.8 把多个控制合起来检查",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-129",
      "book": "seo/book",
      "path": "books/seo/book/chapters/14_rendering_experience.md",
      "title": "第 14 章 渲染、移动端与页面体验：让内容确实可见、可用",
      "source_sha256": "99a0004ba70e20638a61a4707b061241d82728ea04514214253aee6d2928fad0",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "CSR、SSR、SSG 与内容可见时间",
        "reason": "稳定图能区分内容出现与水合接管，真实性能仍须测量。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-130",
      "book": "seo/book",
      "path": "books/seo/book/chapters/15_structured_data.md",
      "title": "第 15 章 结构化数据与富结果：把页面事实准确地交给机器",
      "source_sha256": "7c729f14035aa2ca928649d17e7be107f48f16fcf2832407ced95e68184e1135",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "页面事实与 JSON-LD 同源",
        "reason": "静态一致性对照足够说明结构化数据，不伪装 Google 富结果资格验证器。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-131",
      "book": "seo/book",
      "path": "books/seo/book/chapters/16_audit_migration_incidents.md",
      "title": "第 16 章 技术审计、日志与迁移：把问题缩小到能够修复的范围",
      "source_sha256": "81a731574a33054e312dc513645b2902d5ac1904d703656457051553c1fed027",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "审计证据、迁移映射与回滚",
        "reason": "成效来自真实清单及日志的核对；动画不能证明迁移正确。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-132",
      "book": "seo/book",
      "path": "books/seo/book/chapters/17_international_seo.md",
      "title": "第 17 章 国际、多语言与多地区 SEO",
      "source_sha256": "029adf40ab43e91403a4955c7a94b7ba0f6f65a6da52893ca32bd440680b265f",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "hreflang 家族与 canonical",
        "reason": "互返、语言/地区与代表地址适合静态拓扑，避免错误推导为排名保证。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-133",
      "book": "seo/book",
      "path": "books/seo/book/chapters/18_search_engine_ecosystems.md",
      "title": "第 18 章 以 Google 为基准理解搜索引擎与站长工具",
      "source_sha256": "6aee0e84fb0f72d9e09cb3616a9f5e66f74589ad6d8cd0f3a67bec40a6050434",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "站长工具报告与提交边界",
        "reason": "功能易变且涉及账号，保留当前官方入口和核验方法，不做失真的工具模拟。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-134",
      "book": "seo/book",
      "path": "books/seo/book/chapters/19_local_search.md",
      "title": "第 19 章 本地搜索、地图商家与位置页面",
      "source_sha256": "6b2e6cc67faebfbf67b8b05ee96f7a5fbb3daf858aeebd97caa2425ddf448045",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "真实服务覆盖与位置页面资格",
        "reason": "商家资格及服务能力是事实判断，不应由交互地图虚构覆盖。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-135",
      "book": "seo/book",
      "path": "books/seo/book/chapters/20_offsite_links_pr.md",
      "title": "第 20 章 站外 SEO：外链、数字公关与品牌可信度",
      "source_sha256": "647c13727bd2e6b55edb489345cfd002a668589e5e42ce5629150aa2273697d5",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "链接的真实引用理由与风险",
        "reason": "引用质量与合作情境无法由简单滑块评分，正文更能说明边界。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-136",
      "book": "seo/book",
      "path": "books/seo/book/chapters/21_measurement_attribution.md",
      "title": "第 21 章 SEO测量 归因与商业价值",
      "source_sha256": "6f41a9c9630535536c16a32ba2832afce9eb2ccd5615b0623163f1105f4f27ae",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "点击、会话、转化与归因口径",
        "reason": "使用合成记录分开计数不同系统，说明不能把不相容分母硬接成漏斗。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-137",
      "book": "seo/book",
      "path": "books/seo/book/chapters/22_experiments_diagnostics_operations.md",
      "title": "第 22 章 SEO实验 流量诊断与运营治理",
      "source_sha256": "7dae1d0f9b4334b41ae2a37374abce1dae602f52ba4e0681b02774de3449b5aa",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "前后变化与对照实验",
        "reason": "让共同趋势同时影响两组，说明上涨不必然由改版引起；不用模拟结果宣称真实增量。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-138",
      "book": "seo/book",
      "path": "books/seo/book/chapters/23_ai_search_automation.md",
      "title": "第 23 章 AI搜索可见性与SEO自动化",
      "source_sha256": "f1596ad4c2dd45f7309560834d7e1ed84dbe5be77a9d69f4bf9e6ea4ab2ff89d",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "AI 搜索引用、报告与控制边界",
        "reason": "平台机制快速变化，重点是核验与权限，互动模拟容易显得比证据更确定。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-139",
      "book": "seo/book",
      "path": "books/seo/book/chapters/24_ninety_day_practice.md",
      "title": "第 24 章 从零到上线的九十天实践",
      "source_sha256": "e298e02cd0515d5e7f07f8fdfdb3c0fc051c6f00c33a9b4017c08d953c974cc7",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "九十天交付与运营验收",
        "reason": "日程是项目建议，交互倒计时容易误导为索引或排名承诺。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-140",
      "book": "seo/book",
      "path": "books/seo/book/chapters/25_seo_monetization.md",
      "title": "第 25 章 如何通过 SEO 赚钱",
      "source_sha256": "3f3fbc5f467a15a6c3a1727010e29c0813a17fe286084d9f50cd4fedea089cd8",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "变现模型、有效收入与持续成本",
        "reason": "输入浏览量、转化或佣金及维护成本，显示假设如何影响净额；默认值均标教学假设。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-141",
      "book": "seo/book",
      "path": "books/seo/book/chapters/26_ai_for_seo_workflows.md",
      "title": "第 26 章 把 AI 用进 SEO：从资料整理到可审核的工作流",
      "source_sha256": "6dadebcbf95b42e15437ab9c02b085863db850cb62eed63968585930fb8d6990",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "资料、建议、核验与执行分工",
        "reason": "清楚显示事实来源和批准边界，避免给演示接真实发布权限。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-142",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/01_从案例到可验证假设.md",
      "title": "01 从案例到可验证假设",
      "source_sha256": "2ce68ebc29c8132f1631295b0c73f00aef52f50446c3b4a546c12da48df554fd",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "案例陈述到可验证假设",
        "reason": "重点是别把案例当普遍收益证明，文字能保留未知与核验条件。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-143",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/02_总架构与数据合同.md",
      "title": "02　让 AI 主导工作，让证据和权限决定能否执行",
      "source_sha256": "b2e19e487317ca648483aaeeb258ec56b89326faa52025c907e19ead37f49e17",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "证据、建议和执行权限分层",
        "reason": "数据合同与窄授权应稳定查阅，静态图比可点击权限界面更明确。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-144",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/03_找词与机会验证.md",
      "title": "03 找词与机会验证：先证明值得做，再让 AI 扩大生产",
      "source_sha256": "11fc0ee626f544c870aa96753c5ee1c41423c70a01efb62d0e27c1a5d0d42381",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "机会研究与有限生产",
        "reason": "候选评分只是教学设计；交互批量生成会偏离先验证需求的主线。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-145",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/04_从资料到有用页面.md",
      "title": "04 从资料到有用页面：先建立事实，再组织表达",
      "source_sha256": "0d1a573c3f3ff33af321d5a05b3117b77f5f168bea87dba6ee89a14e6e6d34ed",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "来源版本、断言与页面证据",
        "reason": "事实溯源是一张关系网，静态示例能强调未经核实的素材不能直接发布。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-146",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/05_自动建站与收录.md",
      "title": "05 自动建站与收录：把审核过的内容变成可检查、可撤回的页面",
      "source_sha256": "bd0e239c6e2dc9ba885e85d9c0c28f0d63c94849540065c4285be19d2f865f24",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "审核、静态构建、预览与索引门",
        "reason": "已有离线小站可验证，新增拟真发布操作不会带来更多教学价值。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-147",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/06_AI编排与接口接入.md",
      "title": "06 AI 编排与接口接入：让建议可以检查，让执行有明确边界",
      "source_sha256": "35572a1edc6a49ba081e719a8a855e3a7a52bb4e7898c6767ff3c7c4219ed340",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "模型建议与执行合同分离",
        "reason": "参数、预算与版本绑定适合一张拒绝路径图，不把 JSON schema 当授权器。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-148",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/07_观测数据与反馈决策.md",
      "title": "07 观测数据与反馈决策：知道该改什么，也知道什么时候先别动",
      "source_sha256": "d2c3c26795d224e120006161ba10e6f91cc7b0c30980db904b8b3791ec3b0c7e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "数据成熟度、页面版本与行动门",
        "reason": "在数据未成熟或页面版本不匹配时暂停结论，可说明每天观察不等于每天改版。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-149",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/08_收益预算与规模化.md",
      "title": "08　先算清一批页面，再决定要不要扩大",
      "source_sha256": "5b5df73bfead3efcace79fc93875dabbf8f23feaeafbf1cf19db256e5fca2d90",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "Page RPM、维护成本与盈亏",
        "reason": "章节已有明确人民币情景算例，改参数即可暴露分母及维护成本；不预测收入。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-150",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/09_原型运行与故障演练.md",
      "title": "09｜先跑通两个实验，再接真实世界",
      "source_sha256": "60b0830d9ddc8f8a0af8c9f82dea86b46da1c1c099e57ede9b7aed245fea5cd1",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "离线闭环与故障拒绝路径",
        "reason": "原型已能展示保留和回滚，优先让读者真实运行；不再用浏览器动画冒充第二次验证。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-151",
      "book": "seo/ai-workflow",
      "path": "books/seo/ai-workflow/docs/10_部署验收与运营路线.md",
      "title": "10　从本地演示走到可维护的真实站点",
      "source_sha256": "8382bc23fc831d7ad09215f1b9a45a6474c45edf2ef3f8fd83dc20f8b395b563",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "从本地演示到生产的验收门",
        "reason": "需要真实服务与授权才能验证，交互勾选不能代表已经部署。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-152",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/01_derivatives_graphs.md",
      "title": "第 1 章　导数与计算图：程序怎样知道往哪儿改",
      "source_sha256": "f0d8fc96f114268d47c15bba2e02f6b360d0e720b25928e565dab964e7b24b46",
      "review_status": "selected_concepts_reviewed",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "局部导数、链式法则与步长",
        "reason": "改变一个输入时同时显示局部导数与输出变化，帮助区分局部斜率和大步更新结果。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "GradientDescentDemo",
          "placement": "## 1.4 梯度描述局部方向，不保证任意步长有效",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-153",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/02_autodiff_engine.md",
      "title": "第 2 章　写出反向传播引擎",
      "source_sha256": "6d27981d13ffcf5c3344d9fd652e2b8ff1bab532e012eb3fc9d61b9b8de0eb13",
      "review_status": "selected_concepts_reviewed",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "反传拓扑顺序与梯度累加",
        "reason": "共享节点收到多条贡献时累加，能直接发现把 += 写成 = 的错误。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "BackpropDemo",
          "placement": "## 2.3 拓扑排序保证先收齐，再往回传",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-154",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/03_train_scalar_network.md",
      "title": "第 3 章　让小网络学会预测",
      "source_sha256": "5501da0b1138c22a77fa60162b4e686352793a63d1d1c02cf5f6052577b389c3",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "损失、梯度与参数更新闭环",
        "reason": "一步步更新参数观察真实公式计算，训练范围很小且不宣称泛化能力。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-155",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/04_character_data.md",
      "title": "第 4 章　把名字变成字符数据",
      "source_sha256": "57e46580fd08cb2d27d121df869329684207724df1b54b6fe56019a3fe7c2b27",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "边界字符、ID 与 bigram 计数",
        "reason": "短语料的对应关系可静态看清，互动放到下一章概率与采样避免重复。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-156",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/05_probability_sampling_loss.md",
      "title": "第 5 章　从计数得到概率、采样和损失",
      "source_sha256": "ebe6a0bf2f3c7a195ea10e2fcc09be9d31566742ada8b4cd29ebd2fb7a86149e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "归一化、采样、平滑与 NLL",
        "reason": "调整一格计数或平滑系数后重算整行，能看见零概率及采样频数的影响。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-157",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/06_neural_bigram.md",
      "title": "第 6 章　用神经网络重写 bigram",
      "source_sha256": "3fd11d9fc76d164078213e2d775fb48276f5b20501eec07c6dcb64c19c4dcdd4",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "神经 bigram 与计数模型的对应",
        "reason": "重点是同一任务的两种写法，复用概率和小训练示例即可。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-158",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/07_context_mlp.md",
      "title": "第 7 章　让模型看见上下文：嵌入与 MLP",
      "source_sha256": "4b956c7120638913e877c1b4498162b14b2c2418498d6e521b4d616a06bfcd12",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "上下文窗口、embedding 查表与拼接",
        "reason": "改变窗口长度后逐项展示查表和拼接维度，避免把 ID 当数值特征。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-159",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/08_training_and_evaluation.md",
      "title": "第 8 章　让训练过程可比较",
      "source_sha256": "0fdcc7ef87bf369ef750e1295fa548f1e8e2afe5c8f141326d248c3df500b570",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "数据切分与可比较训练流程",
        "reason": "关键是避免泄漏及固定条件，交互曲线不能替代真实实验记录。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-160",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/09_capacity_experiments.md",
      "title": "第 9 章　容量、泛化与一套完整实验",
      "source_sha256": "6f4a2c203e12d09b67573859f4076788f89acf068abe853b49c78ba7633093f7",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "容量、训练损失与验证表现",
        "reason": "只能画书中记录，不用实时滑块编造参数量与泛化误差的必然关系。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-161",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/10_signal_scale_initialization.md",
      "title": "第 10 章　让信号穿过网络：从初始损失到权重尺度",
      "source_sha256": "2ed733bdfa7ff442e8ef8d4d57916a2daf9cca479a3bf8afc234ce12bb1d6785",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "权重尺度与 tanh 饱和",
        "reason": "调节尺度后显示激活和导数分布，说明尺度为何影响信号传播；不推断大模型成绩。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-162",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/11_batchnorm_training_inference.md",
      "title": "第 11 章　BatchNorm：训练时看一批，推理时用固定统计量",
      "source_sha256": "fdca97c5e1bb522cbfabc0f432b1cae693a2745dcf0533abe3c34ef69c61e33e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "BatchNorm 的统计轴与推理统计",
        "reason": "改变同批另一条样本并对比 train/eval 输出，可直观看到样本耦合。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-163",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/12_training_diagnostics.md",
      "title": "第 12 章　训练诊断：不要只盯着一个 loss",
      "source_sha256": "5bfb610de632fc86eb9cfc3ad4aa43af95831d42f682ab2a5c68a4d0aea9af10",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "激活、梯度和更新比率诊断",
        "reason": "诊断要基于真实采样，保留原始分布与配置，不生成装饰性训练曲线。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-164",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/13_tensor_backprop_cross_entropy.md",
      "title": "第 13 章　把反向传播写成张量运算",
      "source_sha256": "cc3b20d1a333e0f8f4a5ae24251b85d19e6b823db8ce634131b939fb3a6ea413",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "广播、归约与张量反传形状",
        "reason": "按元素高亮梯度从哪条轴求和，支持手算核验，比只列最终矩阵式更清楚。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-165",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/14_batchnorm_embedding_gradients.md",
      "title": "第 14 章　亲手走完 BatchNorm 与 embedding 的反向传播",
      "source_sha256": "c024f19f53d44d1437e7b75124348c1c5d0b73bbbe703864a76d77c62487da87",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "BatchNorm 多路径与重复 embedding 索引",
        "reason": "只选重复索引的 scatter-add 演示，复用反传引擎图，不把整章化成难维护的第二套框架。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-166",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/15_layer_interfaces_context_tree.md",
      "title": "第 15 章　把八个字符逐层合并：层接口与树形上下文",
      "source_sha256": "78e11b9f3806a32110fc885541eaeb736bd191adaa83bbf0a25e23734f0503e2",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "层级合并与感受野",
        "reason": "单击层数高亮当前位置依赖的原字符，解释拼接与平均池化不同。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-167",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/16_causal_convolutions_experiments.md",
      "title": "第 16 章　从树到卷积：感受野、因果性与可靠迭代",
      "source_sha256": "1defa6267152db6bb52fb35103e9bb392a86f35c33918488151a07c4ef562063",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "因果卷积与扩张感受野",
        "reason": "改变核宽或扩张率后显示可见过去，验证未来输入不会影响当前输出。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-168",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/17_字符级语言模型与训练任务.md",
      "title": "第 17 章　先把 GPT 的训练题出对",
      "source_sha256": "d1d637ed891b31f5b80d8f803528558069b4760cff5d5c2c4e47cb52959f4e85",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "输入与右移目标的对齐",
        "reason": "逐步滑动窗口并连起每个输入位置和目标，能看出一段 T token 含 T 个预测任务。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-169",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/18_从平均到因果自注意力.md",
      "title": "第 18 章　让当前位置挑选有用的过去",
      "source_sha256": "e86ce791c5e418862711637482eb3db5299083afb158dbb49bf7fe46c685fca0",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "QK 打分、因果 mask 与加权和",
        "reason": "选择一个 query 行观察遮罩前后权重与输出，未来位置必须保持不可见。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-170",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/19_多头残差与Transformer块.md",
      "title": "第 19 章　把注意力装成能反复堆叠的块",
      "source_sha256": "66756be6a023c238cb57c8d60f66797f9877b8e3b56ea6c269b2dc83cbb76036",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "多头布局、残差与 LayerNorm",
        "reason": "结构关系需要并排看清，复用注意力与归一化示例，不再加另一套训练界面。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-171",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/20_把小GPT训练并采样出来.md",
      "title": "第 20 章　用一条可检查的训练链路跑通小 GPT",
      "source_sha256": "ee227c4e25ad1ff89a8e580eacba4f608d2046e36629fbe60b1deb0369197286",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "训练、评估和生成完整闭环",
        "reason": "本章的价值在真实代码链和边界，不用浏览器生成样本冒充训练质量。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-172",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/21_文本字节与token边界.md",
      "title": "第 21 章　模型看到的不是屏幕上的文字",
      "source_sha256": "8ad3c2961c9ea2b21c98326a2be2b4aeb08cf0a2b3c8d32e08e4299bd3a47002",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "字形、码点、UTF-8 字节与 token",
        "reason": "中文和组合重音可显示字符数/字节数不同；无真实 tokenizer 时明确 token 分组为教学规则。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-173",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/22_从零训练BPE并保存词表.md",
      "title": "第 22 章　BPE 学的是一张有先后顺序的合并表",
      "source_sha256": "9b6aa45bed2646ee8bb7970483c0c1fe964909cbac38f455efb9d601ca5dd5c4",
      "review_status": "selected_concepts_reviewed",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "BPE 合并顺序及训练/编码区别",
        "reason": "可见相邻对和先后顺序能澄清最长匹配误解；首版字符级规则必须与正文真实字节训练明确区分。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "BpeDemo",
          "placement": "chapter_end",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-174",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/23_预切分特殊token与GPT兼容.md",
      "title": "第 23 章　相同的 BPE 算法，为什么还编码不出相同的 ID",
      "source_sha256": "1ef710017bc3ebf3977aae673e860ddf8d766558869cce8c313091f6c9957394",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "预切分、特殊 token 与精确 ID 兼容",
        "reason": "兼容性需要真实 tokenizer 的逐 ID 测试，固定教学 BPE 不能充当 GPT 分词器。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-175",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/24_分词选择如何影响模型.md",
      "title": "第 24 章　tokenizer 的选择，会一直留在模型里",
      "source_sha256": "d4c997549c825c3ea38f7850684447bed8a959a46ae0412ec428a9e85ac1ba12",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "词表规模、序列长度与模型成本",
        "reason": "切分影响需在固定文本测量，不能用通用滑块声称所有语言长度必然如何变化。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-176",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/25-gpt2-architecture.md",
      "title": "第 25 章　从小 GPT 到 GPT-2：先把模型对上，再谈训练",
      "source_sha256": "57e301fc216610daf7c0bf3c5c41468623e39ff2dee9531c199099da296e628c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "GPT-2 权重映射与参数共享",
        "reason": "加载等价需要实际数值检查，图用来导航，不用动画代替验证。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-177",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/26-efficient-training.md",
      "title": "第 26 章　让同一份计算跑得更快：精度、编译和注意力",
      "source_sha256": "9343be61db28345965c39a5241c7c5d93bc4eddfa8aa7e8cc0f3a2d7e4af1f90",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "精度、编译与注意力内存访问",
        "reason": "速度依赖硬件与内核，静态机制图更能避免误称实际性能收益。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-178",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/27-optimization-and-ddp.md",
      "title": "第 27 章　一次更新到底看了多少数据：AdamW、累积与多卡",
      "source_sha256": "3131af372611219aa2e31b92c6a71df78ca3f045af0d71038cafcfdeac37352b",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "微批次、累积、DDP 与全局平均",
        "reason": "改变进程数和累积次数后同步显示 token/update 与平均系数，能防止悄悄改变训练目标。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-179",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/28-data-evaluation-reproduction.md",
      "title": "第 28 章　数据、评估和恢复：什么才算复现了一次训练",
      "source_sha256": "8bbd68b5f65651e7a00dfca423e21ac846d82b4e403ffebae300fca08376e0a6",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "分片、验证、评估与 checkpoint",
        "reason": "多阶段验收以真实文件和日志为依据，静态路径足以梳理责任。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-180",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/29-state-of-gpt-training.md",
      "title": "第 29 章　一个会续写的模型，怎样变成助手",
      "source_sha256": "9d7f0ba4d6764705dd4efe65b52cd73cf398219ccbbbca9960cdef9106c2b39c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "预训练、SFT 与偏好反馈",
        "reason": "阶段关系适合图解，不把微型互动损失等同于助手能力提升。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-181",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/30-prompts-tools-evaluation.md",
      "title": "第 30 章　把模型接进工作流程：提示、检索、微调和工具",
      "source_sha256": "4edb5b1022e6406f3be3ad2b5971dda471a3a1b5e20b68299023327ea421bc76",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "提示、检索、工具与权限选择",
        "reason": "任务需按缺失信息和权限判断，不应在教材内默认接入真实工具执行。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-182",
      "book": "llm/zero-to-hero",
      "path": "books/llm/zero-to-hero/chapters/31-practice-and-next-experiments.md",
      "title": "第 31 章　把全书收成一次你能解释的实验",
      "source_sha256": "39ac44382f9e09aecbba1f6ad2425f8c7ea3a81fb2e714068b0d4ed08cccbb65",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "可解释实验与下一步验证",
        "reason": "全书收束应保留完整实践，不用新的控件分散读者对证据的注意力。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-183",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/01_repository.md",
      "title": "第 1 章　沿一次训练看完整仓库",
      "source_sha256": "b45ffde827d09a9e32b9ba087daf92210449ae2fb709de2be8013e9faf447961",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "nanoGPT 文件与训练责任",
        "reason": "本章作用是导航，静态文件图能帮助追踪一次训练。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-184",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/02_data.md",
      "title": "第 2 章　字符与 BPE：三条数据准备流水线",
      "source_sha256": "75a52d9830d7305ca444f8d84474bc6aa0a5abc0054dec35d9f20b8075fd6c7a",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "字符/BPE 流水线与 uint16 协议",
        "reason": "真实 BPE ID 必须来自固定词表；复用教育 BPE 时应只讲机制，不伪造兼容结果。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-185",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/03_configuration.md",
      "title": "第 3 章　配置覆盖、类型检查与执行边界",
      "source_sha256": "e53677ddfe3413b8530659702fec64e284620c4aae5e71fb52a6a690808a0ee6",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "默认值、文件和 CLI 覆盖",
        "reason": "选择有限的安全参数并显示覆盖顺序，能区分最终值和记录值；不执行任意 Python 配置。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-186",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/04_parameters.md",
      "title": "第 4 章　GPTConfig、参数规模与初始化",
      "source_sha256": "b30e62e24079a19fa03f34180caec876f9d7e5981ed3230a11031009234c7ea1",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "GPTConfig 与参数规模",
        "reason": "调整层宽、层数、词表后显示逐矩阵参数量，区分有效 token 与为计算对齐的多余行。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-187",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/05_attention.md",
      "title": "第 5 章　逐层推导因果注意力、MLP 和残差",
      "source_sha256": "0ed1b4679ea98e9e29fc604576e7f4c3a50bf358314844ed6961c0e73d9aa3db",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "因果注意力与多头张量形状",
        "reason": "用 nanoGPT 对应布局解释遮罩必须在 softmax 前，避免新增重复组件。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-188",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/06_forward_weights.md",
      "title": "第 6 章　权重共享、损失、预训练映射与上下文裁剪",
      "source_sha256": "3b8b5cf06de1ddbff63ddc56de66d226e30f6fd63dc794381b7a892345de4ffc",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "共享参数的梯度与加载方向",
        "reason": "关键是同一 Parameter 与两条梯度来源，静态图配断言比训练动画清楚。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-189",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/07_batches.md",
      "title": "第 7 章　memmap 批次与下一 token 对齐",
      "source_sha256": "b0aa7f7270a1515f29163167469238b9c606ae6b336b54445a63beadfd962e32",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "memmap 窗口与下一 token 对齐",
        "reason": "高亮 B×T 输入和右移目标及最后合法起点；数据必须为内置合成 ID。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-190",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/08_training.md",
      "title": "第 8 章　训练主循环、梯度累积、混合精度与裁剪",
      "source_sha256": "083861f2411c6bc1e128afa7f235ba59950937d70082d70c25b0ea0b3f19d4f9",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "累积、缩放、裁剪和更新顺序",
        "reason": "复用累积组件，明确先 unscale 再 clip 的顺序，不模拟 GPU AMP 性能。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "WeightedAccumulationDemo",
          "placement": "## 8.1 一步到底包含几次前向",
          "implementation": "implemented",
          "model_tests": "passed_local_node_jsdom",
          "browser_tests": "pending",
          "official_contract_tests": "pending_ci",
          "remaining_concepts": "recorded_in_concept_review"
        }
      ],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-191",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/09_resume.md",
      "title": "第 9 章　学习率、验证、checkpoint 与恢复",
      "source_sha256": "7af594e42d19bf9ba2189eeb39f32c58029e862d47a27daaba6830884ab91eca",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "warmup 和余弦日程的边界",
        "reason": "移动 step 指针核对端点和 i+1 约定，checkpoint 语义继续保留正文。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-192",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/10_ddp.md",
      "title": "第 10 章　单机多卡与跨节点 DDP 的状态约束",
      "source_sha256": "e0f95fe74db7cae080553ee3659d675ce1dc5aad94661025b98899afdca16411",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "DDP world size 与累积次数",
        "reason": "显示配置累积除以进程数后的本地微步，帮助防止重复数据和错误分母。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-193",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/11_generation.md",
      "title": "第 11 章　生成接口：温度、top-k、提示和随机性",
      "source_sha256": "8cba7877092972b977262897f3fad21780e6c8f61ae2dfe9aa5eba91fed4ed3d",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "温度、top-k 与采样随机性",
        "reason": "调温度和 k 观察概率比与支持集，固定种子可复现采样，不宣称改善事实准确性。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-194",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/12_finetuning.md",
      "title": "第 12 章　微调与 GPT-2 基线：域差异如何影响比较",
      "source_sha256": "b8683e4a1de8a5da328c6adda6b3bb49ab98ea6e176326b4bbe5017fa11ab55c",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "微调的域差异与比较条件",
        "reason": "结果依赖数据与实验，额外曲线不能凭空说明微调收益。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-195",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/13_performance.md",
      "title": "第 13 章　benchmark、MFU 与吞吐口径",
      "source_sha256": "46a2da226dc23366e5204bde085e37d379185fd7c4c3b7c3ccd5f245c9c0cc86",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "吞吐、MFU 与计时边界",
        "reason": "性能数字需要真实设备；静态算式可以展示口径，不给出伪测速结果。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-196",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/14_notebooks.md",
      "title": "第 14 章　参数估算与 scaling laws：逐单元核对",
      "source_sha256": "879a0994c43938e0562c9f04c223e359c22955fbc83126e401a84f5d1545f8bd",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "参数、FLOPs 与固定预算假设",
        "reason": "复算 notebook 的尺寸和预算关系，并把历史测量与输入假设分别标注。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-197",
      "book": "llm/nanogpt",
      "path": "books/llm/nanogpt/chapters/15_reproduce.md",
      "title": "第 15 章　小规模复现、故障定位与仓库的历史边界",
      "source_sha256": "896380629829eb13aaebd1d4f72025441642ab09971256bc7f0511e42b8d7fe8",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "小规模复现与历史边界",
        "reason": "本章应带读者运行仓库，交互玩具不能替代恢复和生成验证。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-198",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/01-task-boundaries.md",
      "title": "第 01 章　先画清语言模型的任务与边界",
      "source_sha256": "f94c2d08532c31a9f345024ffa71a16f0f49320aa8c1deb1ca9a35b6dbd0611f",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "语言模型输入输出和阶段边界",
        "reason": "开篇需要统一任务定义，静态图能把续写模型与应用界面分开。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-199",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/02-pytorch-training-loop.md",
      "title": "第 02 章　张量、自动微分与最小训练闭环",
      "source_sha256": "91c3becfaf2eea3d7419d3f402e5adfca1041184d0dec34db5bc7afbebc3e802",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "自动微分与梯度清空顺序",
        "reason": "复用计算图组件显示连续 backward 的累加与 zero_grad，防止把图和参数混为一谈。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-200",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/03-tokenization-bpe.md",
      "title": "第 03 章　文本怎样变成 token：词表、BPE 与特殊符号",
      "source_sha256": "d45d576765547b5c7f9f35cdb2cd40c2d0817fa017209279805a2e2991bf12f6",
      "review_status": "selected_concepts_reviewed",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "BPE 训练与固定合并 rank",
        "reason": "本章有相邻对与 rank 推导，适合链接/复用首批演示；字符示意不能替代字节编码和真实 ID 对照。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "BpeDemo",
          "placement": "chapter_end",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-201",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/04-attention-causality.md",
      "title": "第 04 章　从加权平均推导自注意力与因果掩码",
      "source_sha256": "350a8a008defe13decabe00d65d52ea4c8bef6c93742b4d9e13c2f239ed7b96b",
      "review_status": "full_chapter_read_concepts_recorded",
      "concept_review": {
        "path": "books/llm/llms-from-scratch/chapters/04-attention-causality.md",
        "review_depth": "full_chapter_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "weighted-average",
            "sections": [
              "4.1",
              "4.2"
            ],
            "status": "implemented_reuse",
            "component": "AttentionDemo",
            "reason": "可修改 Q/K/V，跟踪点积、归一化权重及加权输出；值维度可不同。"
          },
          {
            "id": "attention-scaling",
            "sections": [
              "4.3"
            ],
            "status": "implemented_reuse",
            "component": "AttentionDemo",
            "reason": "缩放开关可比较权重；点积方差推导继续保留正文，不把独立性假设伪装成训练事实。"
          },
          {
            "id": "causal-mask",
            "sections": [
              "4.4",
              "4.5"
            ],
            "status": "implemented_reuse",
            "component": "AttentionDemo",
            "reason": "五阶段展示掩码在 softmax 前，并允许扰动未来 K/V 验证早期结果不变。"
          },
          {
            "id": "dropout-expectation",
            "sections": [
              "4.6"
            ],
            "status": "implemented_reuse",
            "reason": "可调权重、概率、掩码和训练/评估模式；按每个掩码自己的概率加权验证期望，单次结果不强行归一化。",
            "component": "DropoutDemo"
          },
          {
            "id": "multihead-shapes",
            "sections": [
              "4.7",
              "4.8"
            ],
            "status": "implemented_reuse",
            "reason": "可调B/T/D/H并追踪唯一元素身份；展示reshape、transpose、还原和错误直接合并，不把形状相同当数值正确。",
            "component": "MultiHeadShapeDemo"
          },
          {
            "id": "weight-layout",
            "sections": [
              "4.2",
              "4.9"
            ],
            "status": "candidate",
            "reason": "展示 Linear 权重转置前后对应输出，区别布局匹配与随机初始化相等。"
          },
          {
            "id": "upstream-and-exercises",
            "sections": [
              "4.8",
              "4.9",
              "参考与覆盖"
            ],
            "status": "prose_or_existing_code",
            "reason": "上游文件对应和真实数值对照继续靠可复跑代码；练习中适合交互的部分已拆成上述概念，不另造装饰动画。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "interactive",
        "concept": "自注意力、因果 mask 与未来扰动",
        "reason": "改变未来 token 时，先前位置输出必须不变；这是比遮罩颜色更强的机制展示。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "AttentionDemo",
          "placement": "## 4.4 因果掩码为什么应放在 softmax 前",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        },
        {
          "component": "DropoutDemo",
          "placement": "## 4.6 dropout 并不保持每行权重和恰好为 1",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        },
        {
          "component": "MultiHeadShapeDemo",
          "placement": "## 4.7 加上批次和多个头",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-202",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/05-efficient-attention-buffers.md",
      "title": "第 05 章　多头注意力的实现选择与 buffer 生命周期",
      "source_sha256": "25a82b1a5b12dee19e897da3798db89950437337c64f1dc64d6b95592caffd2b",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "不同注意力实现与 buffer 状态",
        "reason": "实现比较与测量条件复杂，静态对照可避免把 API 名称当内核或性能保证。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-203",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/06-build-gpt.md",
      "title": "第 06 章　把注意力组装成 GPT：归一化、残差与输出头",
      "source_sha256": "6950da2abe01915e09813bdf3287c81a0541a923c32fd5588fc909137a62e671",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "GPT block 的先后顺序与维度",
        "reason": "保留逐层接口与数值检查，互动集中到注意力和归一化，避免重复搭整模型。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-204",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/07-costs-flops-memory.md",
      "title": "第 07 章　参数、FLOPs、显存与吞吐怎样估算",
      "source_sha256": "4bd50255f8116dedf3dcadfebf2a2fc8ba5a4d61576524504d29f33cc9690872",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "参数、计算、权重和运行内存",
        "reason": "改变长度与批量后分开显示线性/二次项及未计开销，不能把估算等同峰值显存。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-205",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/08-kv-cache.md",
      "title": "第 08 章　KV cache：先证明等价，再讨论加速",
      "source_sha256": "4822edc1e3006958f63bcedfcd60a56808ad5c1fb08f576385afaf38d87dbaa1",
      "review_status": "selected_concepts_reviewed",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "KV cache 的增量计算与存储代价",
        "reason": "并排显示重算前缀与仅新增查询，读者能看到复用内容和仍增长的历史读取。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "KvCacheDemo",
          "placement": "chapter_end",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-206",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/09_gqa_mla_kv_sharing.md",
      "title": "第 09 章　GQA、MLA 与跨层 KV 共享",
      "source_sha256": "811666f49caa8c2517ee0a0d5451542f335e4433d2ead3746e6221349150312b",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "GQA、MLA、跨层共享的压缩方向",
        "reason": "分别改变 KV 头数、潜在维度、独立生产层数，明确它们改变架构而非任意 MHA 的等价开关。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-207",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/10_swa_dsa.md",
      "title": "第 10 章　局部与稀疏注意力：SWA 和 DSA",
      "source_sha256": "c2a07b4ea253946a109ebcb359928983b33af256ccc37f88f7c625ef39cefcdb",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "SWA 窗口与稀疏选择",
        "reason": "拖动当前位置和窗口高亮可见键，区分 mask 稀疏与内核少算；DSA 分数仅用教学固定值。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-208",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/11_gated_deltanet.md",
      "title": "第 11 章　Gated DeltaNet：从矩阵状态理解递推",
      "source_sha256": "637673dd030323d5e784e2ea301a823a9a0461143b0e78be976ecd781ed78d43",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "Delta rule 的矩阵记忆更新",
        "reason": "用小矩阵逐次写入和读取，展示误差修正；不标成 softmax attention 的等价版本。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-209",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/12_moe.md",
      "title": "第 12 章　MoE：路由、专家与负载",
      "source_sha256": "d368bffab7bdc4b2b6ef98e958fb21becc7e3a5df49a1251d1cf2b21ee50ec0b",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "MoE 路由与专家负载",
        "reason": "改变 top-k 和偏斜分数后看各专家收到多少 token，分开总参数、激活参数和常驻内存。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-210",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/13-pretraining-loss.md",
      "title": "第 13 章　预训练目标、交叉熵与验证集",
      "source_sha256": "bcfad0d21261dcb24dffd4bb82356851c2e24e051051645171a76fb0beea7ed8",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "交叉熵、标签配对与分母",
        "reason": "复用概率和目标对齐组件，展示每个有效位置贡献而非只看一个平均 loss。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-211",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/14-sampling-generation.md",
      "title": "第 14 章　采样、温度、top-k 与生成边界",
      "source_sha256": "e09ba5a4c62a6cba46428af94e6dd7a7f2dbe8bbf6d6d2a74145b2567651a8d3",
      "review_status": "reviewed_sections_concepts_recorded",
      "concept_review": {
        "path": "books/llm/llms-from-scratch/chapters/14-sampling-generation.md",
        "review_depth": "relevant_sections_read_14_5_14_6_14_7",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "batch-row-stopping",
            "sections": [
              "14.5"
            ],
            "status": "implemented_reuse",
            "reason": "预先给定候选token，逐行维护finished并补PAD，区分EOS与长度终止；独立教学扩展不改上游单行脚本。",
            "component": "BatchStoppingDemo"
          },
          {
            "id": "cache-context-window",
            "sections": [
              "14.6"
            ],
            "status": "candidate",
            "reason": "输入裁剪与cache位置必须同步，现有KV实验尚不覆盖滑窗裁剪或重算。"
          },
          {
            "id": "generation-reproducibility",
            "sections": [
              "14.7"
            ],
            "status": "prose_or_existing_code",
            "reason": "依赖版本、随机调用顺序与设备差异应记录，不以浏览器固定序列冒充真实模型重现。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "interactive",
        "concept": "温度、top-k 和生成停止",
        "reason": "以自造 logits 重算分布，展示停止规则与上下文限制，避免把随机文字当质量证据。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "SamplingDemo",
          "placement": "## 14.3 top-k 删除支持集之外的候选",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        },
        {
          "component": "BatchStoppingDemo",
          "placement": "## 14.5 一个生成循环应有明确的停止协议",
          "implementation": "implemented",
          "model_tests": "passed_local_node_jsdom_2026_10_14",
          "browser_tests": "passed_at_recorded_commit",
          "remaining_concepts": "recorded_in_concept_review",
          "official_contract_tests": "passed_eb69b9f2",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          }
        }
      ],
      "next_action": "本批新增模型与浏览器验证单独记录；继续审视该章其余候选，不因已有实验而结束复核。"
    },
    {
      "id": "ch-212",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/15-weight-loading.md",
      "title": "第 15 章　权重格式、参数映射与低内存加载",
      "source_sha256": "fa4d37076aa7df95bb16275d399a46524672fb51e02395e6ea519d8245a2d9d8",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "权重映射、共享关系与加载峰值",
        "reason": "真实加载正确性需数值校验，静态图可解释为什么一度有两份权重。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-213",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/16-corpus-gutenberg.md",
      "title": "第 16 章　语料整理与 Gutenberg 训练工程",
      "source_sha256": "76a042e06ec373012884a41884130f8d33e4f0bb1d93fb49e254303190aa59e7",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "语料清理、切分与恢复工程",
        "reason": "现有可运行流程比新增交互更能证明文件边界和去重正确。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-214",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/17-schedules-clipping-muon.md",
      "title": "第 17 章　学习率、梯度裁剪、超参数与 Muon",
      "source_sha256": "3413a36a578fc5c6445560ef4a6a143a3527f5e9936b4ed4542d438e6c85df3f",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "学习率与梯度裁剪边界",
        "reason": "选定一个小向量显示整组等比缩放，再核对日程端点；Muon 比较留给真实实验。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-215",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/18-performance-devices.md",
      "title": "第 18 章　训练性能及 CPU、MPS 数值差异",
      "source_sha256": "9aff9cf84395bac4817b05eb2e1c9f822924ee4c91fab2314a8754722b64fe78",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "设备、精度和计时条件",
        "reason": "没有对应 GPU/MPS 结果就不画加速滑块，保留复测步骤和数值边界。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-216",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/19_gpt_to_llama.md",
      "title": "第 19 章　从 GPT 到 Llama：RoPE、RMSNorm 与门控前馈",
      "source_sha256": "1291f80e5240ed1c0b3b75973df28b2513252c9c8df13cdb9e35f4a15696f0fd",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "RoPE 二维旋转与相对位移",
        "reason": "固定向量改变两个位置，观察点积依赖相对位移；明确代数性质不保证长上下文能力。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-217",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/20_qwen3_qwen35.md",
      "title": "第 20 章　Qwen3 与 Qwen3.5：同一个名字下，两种记忆接口",
      "source_sha256": "4e27ed954a04d7953d8c78cfaa20fc23bc730d695f65a8931f6625a4d7f3c90b",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "全局注意力与递归混合缓存",
        "reason": "模型版本接口复杂，静态状态表更可靠；分别链接 KV 与递归记忆演示。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-218",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/21_gemma3_gemma4.md",
      "title": "第 21 章　Gemma 3、Gemma 4：局部层、共享层与数值约定",
      "source_sha256": "d65dbe7a2e27f06771dba0ef8987eb0e224b5c5eecd8a9c23d44b8e593cac034",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "局部/全局层与 KV 共享生产者",
        "reason": "共享路径和截断时机需要精确核对，静态图有助于发现取错层或丢失 prompt。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-219",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/22_olmo_tiny_aya_interfaces.md",
      "title": "第 22 章　OLMo 3、Tiny Aya 与可替换模型接口",
      "source_sha256": "42d18fdbeb483efaed6ae558e3c53b9a6d706c9d8701af3f393924cdd7ac5e61",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "模型接口与位置、状态语义",
        "reason": "可替换不等于权重兼容，图表保留具体差异，比统一交互外壳更诚实。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-220",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/23_extend_tokenizer.md",
      "title": "第 23 章　扩展分词器：新 ID 还需要新的模型行",
      "source_sha256": "b77ca6575a957b81a6bb3a57be50cb1739ab89058b5445ef71cc19b9cfaae556",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "新增 token 与 embedding/输出头扩展",
        "reason": "加一行后显示旧 logits 即使不变概率也会变，能说明扩词表不只是新增一个 ID。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-221",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/24_classification.md",
      "title": "第24章　文本分类：一个输出位置，决定模型看见多少内容",
      "source_sha256": "bf80afdc30cb1995131ffc39469b15c7854f1ea114632c516faadf573ba5cf7f",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "分类位置、padding 与可见上下文",
        "reason": "选择第一个、最后有效和最后补齐位置，显示分类头实际读到了哪些 token。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-222",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/25_instruction_tuning.md",
      "title": "第25章　指令微调：先把“该预测什么”排对",
      "source_sha256": "dd16014a3082241b48cfb71b72c1eeeb149523abf8b48bbf180fc49038c0dd4b",
      "review_status": "reviewed_sections_concepts_recorded",
      "concept_review": {
        "path": "books/llm/llms-from-scratch/chapters/25_instruction_tuning.md",
        "review_depth": "full_chapter_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "sft-target-alignment",
            "sections": [
              "25.1",
              "25.2",
              "25.3"
            ],
            "status": "implemented_reuse",
            "reason": "复用同一监督实验，明确回答开始下标P对应移位标签P−1。",
            "component": "TokenSupervisionDemo"
          },
          {
            "id": "empty-supervision",
            "sections": [
              "25.4"
            ],
            "status": "implemented_reuse",
            "reason": "截断至只剩提示时有效集合为空，显式显示不能平均而非虚构零损失。",
            "component": "TokenSupervisionDemo"
          },
          {
            "id": "attention-loss-mask-distinction",
            "sections": [
              "25.3"
            ],
            "status": "prose_or_existing_code",
            "reason": "本批就近解释两种mask职责；不另画attention矩阵重复现有AttentionDemo。"
          },
          {
            "id": "token-weighted-batches",
            "sections": [
              "25.4"
            ],
            "status": "candidate",
            "reason": "不同有效token数下均值的均值与整体均值不同；本批只计算单个有效目标集合。"
          },
          {
            "id": "sft-training-generation-contract",
            "sections": [
              "25.5"
            ],
            "status": "prose_or_existing_code",
            "reason": "模板、数据切分、生成提取和真实评估依赖一致协议，不把合成损失当指令能力。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "interactive",
        "concept": "指令模板、shift 与两种 mask",
        "reason": "逐格标明 prompt、回答、padding、attention mask 与 loss mask，能抓出一格偏移和全被截断。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "TokenSupervisionDemo",
          "placement": "## 25.3 两种掩码不能互相代替",
          "implementation": "implemented",
          "model_tests": "passed_local_node_jsdom_2026_10_14",
          "browser_tests": "passed_at_recorded_commit",
          "remaining_concepts": "recorded_in_concept_review",
          "official_contract_tests": "passed_eb69b9f2",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          }
        }
      ],
      "next_action": "本批新增模型与浏览器验证单独记录；继续审视该章其余候选，不因已有实验而结束复核。"
    },
    {
      "id": "ch-223",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/26_instruction_data.md",
      "title": "第26章　指令数据：先防止自己给自己打高分",
      "source_sha256": "8711621dac4c87ce96a83ff22f77d1427a2d3cc4aed83be04728fedf9ec0b5d1",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "相似样本分组与评估泄漏",
        "reason": "近似重复仍需人工判断，静态关系图更能保留“不确定候选”这一性质。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-224",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/27_dpo.md",
      "title": "第27章　DPO：比较两个回答，也要说明比较的基准",
      "source_sha256": "ed953437dd9fc2b8031866c713d76e4dfee97a7e99f6e385838536fb6f982dbc",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "DPO 四组对数概率与参考差",
        "reason": "逐项改变策略/参考模型分数和 beta，显示相对差；默认数据均为教学标量，不声称训练效果。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-225",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/28_lora.md",
      "title": "第28章　LoRA：冻结大矩阵，学习一个可合并的增量",
      "source_sha256": "bb9799f52807c8900d6f407ee5bc33d4d6ae30876ec09b1736318a82d86368e3",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "LoRA 矩阵朝向、低秩增量与合并",
        "reason": "改 rank 并展示 BA 与 W 的形状及参数量，可验收合并前后输出一致，不宣称内存只剩低秩参数。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-226",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/29_interfaces.md",
      "title": "第29章　三种界面，同一条推理链路",
      "source_sha256": "0c73ebf29662acaf14c24db5ee518413dcc9ead91f74055ba27ffe6d31164b52",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "加载、编码、推理和显示接口",
        "reason": "界面本身已有示例，重点应保留权重和输入契约，避免再搭一个无模型聊天框。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-227",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/30_package_reproducibility.md",
      "title": "第30章　包接口与测试：怎样知道自己运行的是同一份模型",
      "source_sha256": "62b168081870f5304e8730d04daeb5844bbd3427276a1e936e6777c7d38a35fe",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "包身份、测试契约与可复现环境",
        "reason": "同名代码的差异需实际导入和断言，互动不能替代来源核对。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-228",
      "book": "llm/llms-from-scratch",
      "path": "books/llm/llms-from-scratch/chapters/31_exercises_and_boundaries.md",
      "title": "第31章　习题闭环与延伸：知道哪里已经验证，哪里还没有",
      "source_sha256": "5a464195a07020677886b52fcc31c24c5222436a7599b9ef850d51f7bb56f7c5",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "习题、验证范围和延伸边界",
        "reason": "作为收束章节，重点是检验前面机制，不再增加新的交互负担。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-229",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/01_nlp_representations.md",
      "title": "第 01 章　先把语言任务写成可检查的输入和输出",
      "source_sha256": "fef655792d16bd4de30cd4855199a76b5e39077b5ad29933453d725fdf437286",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "语言任务与表示中丢失的信息",
        "reason": "多个任务先建立清楚的输入输出，静态例子即可区分词袋、顺序和 embedding。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-230",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/02_attention_encoder_decoder.md",
      "title": "第 02 章　注意力怎样把信息搬到需要它的位置",
      "source_sha256": "4cd3bbbe18348b2d2959e4e470d2853c47ccce94c1a86afaf10c1547f3a87884",
      "review_status": "selected_concepts_reviewed",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "注意力的信息流与因果性",
        "reason": "用同一输入切换 encoder/decoder 可见关系，依然保留具体模型训练边界。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "AttentionDemo",
          "placement": "## 02.2 自注意力、掩码和多头是三件不同的事",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-231",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/03_pretraining_objectives.md",
      "title": "第 03 章　预训练目标决定模型能看见什么",
      "source_sha256": "db97c5d43abd7e4988bc8dca9331b7caca9cc7233e2d5427b2ce1be7a92db083",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "掩码预测、跨度去噪与因果目标",
        "reason": "切换目标后显示哪些位置有监督、能看哪里，帮助理解自监督标签来自原文。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-232",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/04_training_capabilities_evidence.md",
      "title": "第 04 章　训练规模很大，结论仍要落到证据上",
      "source_sha256": "1d7251a718ecaf4d465dd6fe8de2cc6c1dc7ba8a427977c84ec4049465de8ead",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "能力结论、训练阶段与证据条件",
        "reason": "能力不能由参数滑块或演示题外推，保留证据边界比交互更重要。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-233",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/05_rmsnorm_rope_gqa_swiglu.md",
      "title": "第 05 章　把一个小型 LLaMA 风格解码器拆开",
      "source_sha256": "5893f414431ec880ecac92da31cb1ab937b152a1017c137b0b1035da70cdf150",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "RoPE、GQA 与模型尺寸约束",
        "reason": "只复用 RoPE/GQA 局部解释，其他模块保留正文；不能把拼装成功当权重兼容。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-234",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/06_tokenizer_data_labels.md",
      "title": "第 06 章　Tokenizer 和标签决定模型实际学到什么",
      "source_sha256": "13b06a33868d2fe7dcc31216241f6370c03b75f654ef6b692c8c83172b3515fd",
      "review_status": "reviewed_sections_concepts_recorded",
      "concept_review": {
        "path": "books/llm/happy-llm/chapters/06_tokenizer_data_labels.md",
        "review_depth": "relevant_sections_read_06_2_06_4_06_5",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "token-target-shift",
            "sections": [
              "06.4",
              "06.5"
            ],
            "status": "implemented_reuse",
            "reason": "对照原角色与X/Y偏移一位，解释提示末格预测回答首格。",
            "component": "TokenSupervisionDemo"
          },
          {
            "id": "pad-eos-position-mask",
            "sections": [
              "06.2",
              "06.4",
              "06.5"
            ],
            "status": "implemented_reuse",
            "reason": "同ID不同来源按位置区分真实EOS和PAD，计算有效目标分母；无监督拒绝平均。",
            "component": "TokenSupervisionDemo"
          },
          {
            "id": "tokenizer-bundle-normalization",
            "sections": [
              "06.1",
              "06.2"
            ],
            "status": "candidate",
            "reason": "词表、规范化、预切分与解码契约仍需另行审视，不把BPE编码演示当覆盖全部tokenizer。"
          },
          {
            "id": "data-conversion-protocol",
            "sections": [
              "06.3"
            ],
            "status": "prose_or_existing_code",
            "reason": "角色schema、字节偏移和转换幂等性需要实际数据与代码检查；本批未模拟完整数据管线。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "interactive",
        "concept": "tokenizer、右移标签与 SFT mask",
        "reason": "选择一个短对话显示角色边界及有效目标，字符 BPE 仅作为机制补充。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "TokenSupervisionDemo",
          "placement": "## 06.5 SFT mask 必须跟着消息边界走",
          "implementation": "implemented",
          "model_tests": "passed_local_node_jsdom_2026_10_14",
          "browser_tests": "passed_at_recorded_commit",
          "remaining_concepts": "recorded_in_concept_review",
          "official_contract_tests": "passed_eb69b9f2",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          }
        }
      ],
      "next_action": "本批新增模型与浏览器验证单独记录；继续审视该章其余候选，不因已有实验而结束复核。"
    },
    {
      "id": "ch-235",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/07_training_export_sampling.md",
      "title": "第 07 章　训练闭环：从损失到可重载的模型",
      "source_sha256": "d6f102aba9c0af651a71db4568f705da4a19ee590616f78a065abea3c9ba4d98",
      "review_status": "full_chapter_read_concepts_recorded",
      "concept_review": {
        "path": "books/llm/happy-llm/chapters/07_training_export_sampling.md",
        "review_depth": "full_chapter_read",
        "review_date": "2026-10-14",
        "concepts": [
          {
            "id": "weighted-gradient-accumulation",
            "sections": [
              "07.1"
            ],
            "status": "candidate",
            "reason": "让 micro-batch token 数不等，比较均值的均值与 token 加权均值，并处理尾批；这是本章容易误读的数值机制。"
          },
          {
            "id": "training-step-order",
            "sections": [
              "07.1"
            ],
            "status": "candidate",
            "reason": "逐步对比梯度缩放、反向、裁剪、更新、清零的有效顺序，避免将参数名当成行为保证。"
          },
          {
            "id": "pad-eos-loss-mask",
            "sections": [
              "07.1",
              "07.8"
            ],
            "status": "candidate",
            "reason": "编辑 PAD/EOS 与 ignore_index，显示每个目标是否贡献损失；不能将已被置零的 EOS 损失再靠外部 mask 恢复。"
          },
          {
            "id": "warmup-cosine",
            "sections": [
              "07.2"
            ],
            "status": "candidate",
            "reason": "调 warmup、总步数、累积步，画当前学习率并区分 micro-batch 与 optimizer-step 时钟。"
          },
          {
            "id": "checkpoint-state",
            "sections": [
              "07.3"
            ],
            "status": "static_or_existing_code",
            "reason": "权重/优化器/随机状态的生命周期表与真实重载校验更直接；暂不模拟假检查点。"
          },
          {
            "id": "temperature-topk",
            "sections": [
              "07.4"
            ],
            "status": "implemented_reuse",
            "component": "SamplingDemo",
            "reason": "可调温度/k/u，明确阈值过滤的并列差异与温度0分支。"
          },
          {
            "id": "left-padding-index",
            "sections": [
              "07.4",
              "07.8"
            ],
            "status": "candidate",
            "reason": "编辑 attention mask，比较有效长度减一与最右有效位置，展示左padding下取错logit列。"
          },
          {
            "id": "batched-stopping",
            "sections": [
              "07.4",
              "07.5"
            ],
            "status": "candidate",
            "reason": "分步显示各行 EOS/finished/pad，避免把一行结束误当成整个batch结束。"
          },
          {
            "id": "beam-search",
            "sections": [
              "07.4"
            ],
            "status": "candidate",
            "reason": "小词表枚举路径并累计对数概率，区分候选结束、保留完成集合与当前束截断。"
          },
          {
            "id": "flags-vs-execution",
            "sections": [
              "07.2",
              "07.4",
              "07.8"
            ],
            "status": "prose_or_existing_code",
            "reason": "源代码分支缺陷需要真实测试与源码对应；当前不制作与真实实现脱节的开关模拟。"
          },
          {
            "id": "cpu-experiment-and-attribution",
            "sections": [
              "07.6",
              "07.7",
              "07.8"
            ],
            "status": "prose_or_existing_code",
            "reason": "保留真实运行日志、局限和许可；不把三个快照补成虚构的连续训练曲线。"
          }
        ]
      },
      "previous_screening": {
        "treatment": "static",
        "concept": "训练顺序、导出和采样责任",
        "reason": "现有真实 CPU 闭环是主证据；把先 unscale 后 clip 等顺序清楚画出即可。"
      },
      "coverage_status": "partially_implemented",
      "concepts": [
        {
          "component": "SamplingDemo",
          "placement": "## 07.4 生成规则决定下一步怎样选 token",
          "implementation": "implemented",
          "model_tests": "passed",
          "browser_tests": "passed_at_recorded_commit",
          "browser_evidence": {
            "commit": "eb69b9f2ed6f3654b9480e8f2058e5b30bb10c63",
            "workflow": "https://github.com/realOzine/book-library/actions/runs/38585985532"
          },
          "remaining_concepts": "not_yet_exhaustively_reviewed"
        },
        {
          "component": "WeightedAccumulationDemo",
          "placement": "## 07.1 一步训练有明确的先后顺序",
          "implementation": "implemented",
          "model_tests": "passed_local_node_jsdom",
          "browser_tests": "pending",
          "official_contract_tests": "pending_ci",
          "remaining_concepts": "recorded_in_concept_review"
        },
        {
          "component": "PaddingColumnDemo",
          "placement": "## 07.4 生成规则决定下一步怎样选 token",
          "implementation": "implemented",
          "model_tests": "passed_local_node_jsdom",
          "browser_tests": "pending",
          "official_contract_tests": "pending_ci",
          "remaining_concepts": "recorded_in_concept_review"
        }
      ],
      "next_action": "检查本章其余知识点；已放入一个实验不等于整章完成。"
    },
    {
      "id": "ch-236",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/08_transformers_training.md",
      "title": "第 08 章　使用 Transformers，仍然要核对模型和数据的约定",
      "source_sha256": "92fc4436ed649c670c4f87b118ad7582d6c14678c33fe12e0ad3ebe5e60896d6",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "配置构建、权重加载与标签契约",
        "reason": "API 名称易混淆，静态对照能说明哪些路径继承参数，保留实际脚本检查。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-237",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/09_lora_qlora_preference.md",
      "title": "第 09 章　少训练一些参数，究竟省了什么",
      "source_sha256": "80c47d6df158fdbf6ee0cc1887bb33a83d817069244acacfa0a96a95b730d401",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "LoRA 的可训练参数与 QLoRA 内存边界",
        "reason": "复用 LoRA 组件演算 rank；4-bit 存储与实际计算精度分开说明，不生成整体节省百分比。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-238",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/10_evaluation.md",
      "title": "第 10 章　评测要回答一个明确的问题",
      "source_sha256": "8da9572f0c2fb18609146794686667b19c606314ad2eae16ae7ac8b2ed48bcc6",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "评测问题、样本和提取规则",
        "reason": "平均分需回到数据和规则，互动排行榜会淡化比较条件。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-239",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/11_rag.md",
      "title": "第 11 章　RAG 先找证据，再检查回答有没有用对证据",
      "source_sha256": "9795b0636cb4dd4bf4d7134fb9def68f94f8f9c05f6160514e89aec0362747a4",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "检索、证据选择与回答支持",
        "reason": "用固定可查看的向量/词项与片段展示召回和漏条件，明确是离线教学数据而非语义模型实测。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-240",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/12_agent_tools_state.md",
      "title": "第 12 章　Agent 是一个受约束的执行循环",
      "source_sha256": "5192afd995bd589c86f4eff32da5d7439d620f23e7056552de92515950001775",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "工具提议、校验、执行和反馈",
        "reason": "只提供加法等内置无副作用动作，展示拒绝参数与预算耗尽；绝不执行自由代码或真实账号动作。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-241",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/13_grpo.md",
      "title": "第13章 GRPO：从一组答案中产生学习信号",
      "source_sha256": "6a69cefa177cedf41d0d98bd386e95b76ff2439b2b219c35b82e3ba5f9a4a8fd",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "组内奖励、优势与策略比率",
        "reason": "调整四个奖励后看均值和相对优势，演示全相同奖励的边界；不声称 RL 收益。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-242",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/14_opd.md",
      "title": "第14章 OPD：让教师评价学生走过的路径",
      "source_sha256": "855efb3174e90dc78a5701ce5065dc0eb7841034b01bb30db11cb71507994a5e",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "学生轨迹与教师逐 token 评分",
        "reason": "重点是轨迹来自谁以及 token 对齐，静态图足够；单 token 估计不应被标成总 KL。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-243",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/15_search_r1.md",
      "title": "第15章 Search-R1：把搜索结果放回可训练的轨迹",
      "source_sha256": "1d3b43eb9bc0140da96f3a150bc1fe107f068f840634476c5e742b88bd6da83a",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "搜索动作、外部观察与训练 mask",
        "reason": "固定轨迹能说明观察不属于策略输出，不在教材中调用真实搜索接口。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-244",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/16_retool.md",
      "title": "第16章 ReTool：工具执行反馈、奖励与隔离边界",
      "source_sha256": "a16f28174e05edac817ea445f32607b45706d3645fd70be9f36244ecf16e8174",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "工具反馈与沙箱隔离边界",
        "reason": "安全边界比互动运行重要；不能把普通子进程当安全沙箱，也不提供任意代码输入。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-245",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/17_small_model_finetuning.md",
      "title": "第 17 章　小模型微调：先把一项任务做可靠",
      "source_sha256": "384e856806e3eff3ebba068ede00e85b65b852065aa2a0f00fe88886b89f3837",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "小模型任务、数据协议与抽取验收",
        "reason": "可靠抽取依赖真实数据验证；不要收集个人投诉信息来驱动演示。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-246",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/18_architecture_text_contracts.md",
      "title": "第 18 章　Transformer 设计复盘：从文本到注意力，哪里最容易接错",
      "source_sha256": "52028862db656a1337816ac8baa67b48d81f6356d9ba785c0bc4ef3a23ff75e8",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "static",
        "concept": "文本到注意力的整链契约",
        "reason": "作为设计复盘可链接已有 BPE、mask 和窗口演示，不再创建第四套分词器。"
      },
      "coverage_status": "static_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-247",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/19_visual_language_concatenation.md",
      "title": "第 19 章　拼接式视觉语言模型：图像真的进入语言模型了吗",
      "source_sha256": "0318abba9f3f905f68e4262eea674c8cf8ed99265f398ced4af7e0d7b0b365ad",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "视觉表示接入与梯度通路",
        "reason": "切断/接通图像分支并标出依赖和梯度路径，说明 loss 下降不证明看图；不伪造图像理解结果。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-248",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/20_thinking_budget.md",
      "title": "第20章 思考预算与生成：更多 token 应该花在哪里",
      "source_sha256": "4becf66bbe7e1bbd14ff54e396d4e6815c96e6f9100ef4b64cd862ab71fa2989",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "interactive",
        "concept": "思考、工具、答案 token 预算",
        "reason": "调整各段配额显示总开销与停止位置，明确更多 token 是否有效仍需评测。"
      },
      "coverage_status": "candidate",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-249",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/21_cddrs.md",
      "title": "第21章 CDDRS：把“找相似内容”变成可审计的知识检索",
      "source_sha256": "ff1fbe713bef29f3bf4569276929ddb8d704c16cbb82af54d63a60fd513da4da",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "知识检索、适用条件与审查责任",
        "reason": "真实工程合规需专业判断，交互评分会让启发式被误当可信度或合规结论。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    },
    {
      "id": "ch-250",
      "book": "llm/happy-llm",
      "path": "books/llm/happy-llm/chapters/22_reproduction.md",
      "title": "第22章 分章环境与复现：把“能读懂”变成“知道验证了什么”",
      "source_sha256": "62e2001e538cc9cfe1a76a1b174aa64c2709dad2b5ab7d43f8a67acf09ea9662",
      "review_status": "pending_full_concept_review",
      "concept_review": null,
      "previous_screening": {
        "treatment": "retain_prose",
        "concept": "分章环境、静态/离线/远端验证",
        "reason": "清楚区分验证层次是收束目标，不能用统一绿色状态替代未执行的实验。"
      },
      "coverage_status": "prose_preferred_provisional",
      "concepts": [],
      "next_action": "逐节重审：找出可调输入、可观察状态和可验证结果；静态/正文初筛不得自动排除交互。"
    }
  ]
}
