{
  "teaching_build": {
    "modules": 52,
    "frames": 263,
    "reading_pages_enhanced": 143,
    "lecture_entries_linked": 206,
    "original_pages_reviewed": 181,
    "search_pages": 1146
  },
  "new_tests": {
    "run": 97,
    "failures": 0,
    "errors": 0,
    "skipped": 0,
    "scope": "数值与反例检查，以及52个图解内容结构检查；不属于商业模型benchmark"
  },
  "legacy_tests": [
    {
      "name": "基础程序",
      "command": "/opt/pyvenv/bin/python -m unittest -v test_foundations",
      "returncode": 0,
      "unittest_counts": [
        39
      ],
      "seconds": 0.85,
      "scope": "原有数值/状态教学程序"
    },
    {
      "name": "概念与投影",
      "command": "/opt/pyvenv/bin/python verify_concepts.py --test",
      "returncode": 0,
      "unittest_counts": [
        30
      ],
      "seconds": 0.8,
      "scope": "原有数值/状态教学程序"
    },
    {
      "name": "专题实验",
      "command": "/opt/pyvenv/bin/python test_suite.py",
      "returncode": 0,
      "unittest_counts": [
        49
      ],
      "seconds": 3.34,
      "scope": "原有数值/状态教学程序"
    },
    {
      "name": "示例见证",
      "command": "/opt/pyvenv/bin/python run_all.py",
      "returncode": 0,
      "unittest_counts": [
        34,
        60,
        14
      ],
      "seconds": 5.58,
      "scope": "原有数值/状态教学程序"
    },
    {
      "name": "拓展实验",
      "command": "/opt/pyvenv/bin/python run_all.py",
      "returncode": 0,
      "unittest_counts": [],
      "seconds": 0.67,
      "scope": "拓展脚本自检"
    }
  ],
  "svg_layout": {
    "out_of_bounds": [],
    "text_collisions": []
  },
  "browser": {
    "execution": "Chromium renders local HTML bytes with all local resources inlined using set_content. Navigation to file/localhost is restricted by environment; no server or network is needed by the textbook.",
    "pages": [
      {
        "module": "F01",
        "frames": 6,
        "paused": true,
        "title": "一句话经过了哪些不同的对象"
      },
      {
        "module": "F02",
        "frames": 4,
        "paused": true,
        "title": "新增一个轴，究竟多了什么"
      },
      {
        "module": "F03",
        "frames": 6,
        "paused": true,
        "title": "文字、字节、Token、编号是四件事"
      },
      {
        "module": "F04",
        "frames": 4,
        "paused": true,
        "title": "组批没有把两句话混成一句"
      },
      {
        "module": "F05",
        "frames": 5,
        "paused": true,
        "title": "Embedding是查一行，不是把编号转二进制"
      },
      {
        "module": "F06",
        "frames": 4,
        "paused": true,
        "title": "数据搬到GPU，改变的是位置而不是含义"
      },
      {
        "module": "F07",
        "frames": 4,
        "paused": true,
        "title": "矩阵乘法像逐格填写配方结果"
      },
      {
        "module": "F08",
        "frames": 4,
        "paused": true,
        "title": "改摆法与改数值，分开看"
      },
      {
        "module": "F09",
        "frames": 5,
        "paused": true,
        "title": "Softmax不是直接把分数除以它们的和"
      },
      {
        "module": "F10",
        "frames": 6,
        "paused": true,
        "title": "网络层是在重组数值，不是在生成隐藏句子"
      },
      {
        "module": "F11",
        "frames": 5,
        "paused": true,
        "title": "Q/K/V：先算从哪读，再算读进多少"
      },
      {
        "module": "F12",
        "frames": 5,
        "paused": true,
        "title": "Mask是可见性表，不是额外语义"
      },
      {
        "module": "F13",
        "frames": 5,
        "paused": true,
        "title": "位置怎样进入数值计算"
      },
      {
        "module": "F14",
        "frames": 6,
        "paused": true,
        "title": "一层Transformer不是只有Attention"
      },
      {
        "module": "F15",
        "frames": 10,
        "paused": true,
        "title": "一次输入如何连着预测，直到结束"
      },
      {
        "module": "F16",
        "frames": 5,
        "paused": true,
        "title": "KV Cache：留下算过的，不省掉该读的"
      },
      {
        "module": "F17",
        "frames": 4,
        "paused": true,
        "title": "梯度像坡度，学习率像迈步大小"
      },
      {
        "module": "F18",
        "frames": 5,
        "paused": true,
        "title": "训练：给每个位置一道“下一项”题"
      },
      {
        "module": "F19",
        "frames": 6,
        "paused": true,
        "title": "后训练改变行为，奖励不是事实裁判"
      },
      {
        "module": "F20",
        "frames": 6,
        "paused": true,
        "title": "省参数、省位数、少激活不是同一种优化"
      },
      {
        "module": "F21",
        "frames": 4,
        "paused": true,
        "title": "算得慢，可能是东西搬得慢"
      },
      {
        "module": "F22",
        "frames": 8,
        "paused": true,
        "title": "把一个Agent任务拆成真正发生的几轮"
      },
      {
        "module": "F23",
        "frames": 4,
        "paused": true,
        "title": "字符完整、事件完整、工具参数完整是三道关"
      },
      {
        "module": "F24",
        "frames": 6,
        "paused": true,
        "title": "任务状态不是聊天里的一句总结"
      },
      {
        "module": "F25",
        "frames": 7,
        "paused": true,
        "title": "MCP连起接口，不自动交出权限"
      },
      {
        "module": "F26",
        "frames": 5,
        "paused": true,
        "title": "每轮上下文像一份有边界的工作资料"
      },
      {
        "module": "F27",
        "frames": 5,
        "paused": true,
        "title": "压缩要保留行动所依赖的事实"
      },
      {
        "module": "F28",
        "frames": 4,
        "paused": true,
        "title": "检索先找候选，再判断能否回答"
      },
      {
        "module": "F29",
        "frames": 5,
        "paused": true,
        "title": "从两个候选列表，走到可用证据"
      },
      {
        "module": "F30",
        "frames": 6,
        "paused": true,
        "title": "代码检索不能只靠“语义相近”"
      },
      {
        "module": "F31",
        "frames": 5,
        "paused": true,
        "title": "长期记忆不是永远正确的小纸条"
      },
      {
        "module": "F32",
        "frames": 6,
        "paused": true,
        "title": "Skill存在，为什么仍可能完全没用？"
      },
      {
        "module": "F33",
        "frames": 6,
        "paused": true,
        "title": "超时告诉你没收到，不告诉你没发生"
      },
      {
        "module": "F34",
        "frames": 6,
        "paused": true,
        "title": "测试是找反例，不是给代码盖绿章"
      },
      {
        "module": "F35",
        "frames": 4,
        "paused": true,
        "title": "读指标，先问它的分母是谁"
      },
      {
        "module": "F36",
        "frames": 5,
        "paused": true,
        "title": "涨了10个百分点，为什么还不能急着下结论？"
      },
      {
        "module": "F37",
        "frames": 6,
        "paused": true,
        "title": "资料能影响模型，不代表获得了权限"
      },
      {
        "module": "F38",
        "frames": 5,
        "paused": true,
        "title": "Trace要告诉你因果，不只是时间戳"
      },
      {
        "module": "F39",
        "frames": 4,
        "paused": true,
        "title": "图像表示与界面行动，是两层不同问题"
      },
      {
        "module": "F40",
        "frames": 6,
        "paused": true,
        "title": "先找错误发生在哪层，再谈换模型"
      },
      {
        "module": "O01",
        "frames": 4,
        "paused": true,
        "title": "GQA/MQA：减少的是K/V组数"
      },
      {
        "module": "O02",
        "frames": 4,
        "paused": true,
        "title": "量化：省存储，也引入近似"
      },
      {
        "module": "O03",
        "frames": 4,
        "paused": true,
        "title": "LoRA：冻结大表，学习小增量"
      },
      {
        "module": "O04",
        "frames": 5,
        "paused": true,
        "title": "FlashAttention：一边读一边累计，不攒整张表"
      },
      {
        "module": "O05",
        "frames": 4,
        "paused": true,
        "title": "PagedAttention：逻辑连续，物理可以分块"
      },
      {
        "module": "O06",
        "frames": 4,
        "paused": true,
        "title": "连续组批：有座位空出来，就接下一位"
      },
      {
        "module": "O07",
        "frames": 5,
        "paused": true,
        "title": "推测解码：草稿可以快，但必须正确校验"
      },
      {
        "module": "O08",
        "frames": 4,
        "paused": true,
        "title": "MoE：每个Token选部分计算路径"
      },
      {
        "module": "O09",
        "frames": 5,
        "paused": true,
        "title": "Activation Checkpointing：少存一点，反向时重算"
      },
      {
        "module": "O10",
        "frames": 4,
        "paused": true,
        "title": "压缩、检索与Prompt Cache：三种不同的“省”"
      },
      {
        "module": "O11",
        "frames": 4,
        "paused": true,
        "title": "多Agent：可并行的工作，比Agent数量重要"
      },
      {
        "module": "O12",
        "frames": 4,
        "paused": true,
        "title": "模型路由：便宜一次，不一定便宜一项成功任务"
      }
    ],
    "errors": [],
    "external_requests": [],
    "controls": [
      "next",
      "previous",
      "scrub",
      "reset",
      "keyboard",
      "play",
      "pause",
      "auto_stop_at_end",
      "zoom",
      "escape"
    ],
    "legacy_qkv_labs": 1,
    "search_results": 25,
    "mobile": [
      {
        "page": "index.html",
        "client": 390,
        "scroll": 390
      },
      {
        "page": "visual-guides.html",
        "client": 390,
        "scroll": 390
      },
      {
        "page": "visual/F11.html",
        "client": 390,
        "scroll": 390
      },
      {
        "page": "visual/F15.html",
        "client": 390,
        "scroll": 390
      },
      {
        "page": "visual/F31.html",
        "client": 390,
        "scroll": 390
      },
      {
        "page": "visual/O04.html",
        "client": 390,
        "scroll": 390
      },
      {
        "page": "foundations/11.html",
        "client": 390,
        "scroll": 390
      },
      {
        "page": "chapters/18.html",
        "client": 390,
        "scroll": 390
      }
    ],
    "standalone_players": 195,
    "standalone_qkv": 1,
    "standalone_search": true,
    "independent_players": true,
    "no_js_transcript_steps": 10
  },
  "limits": [
    "数值与状态例是可复算教学对象，不是商业模型性能实测。",
    "浏览器检查将本地HTML与资源直接装入Chromium；运行环境阻止file/localhost导航，因此未把直接file导航计作实测。教材代码不依赖网络服务。",
    "逐章检查的是理解链、对象/条件、图解对应和本地结构；不声称复现全部原始论文。"
  ],
  "structure": {
    "html_pages": 239,
    "local_references_checked": 34018,
    "broken": [],
    "duplicate_ids": [],
    "external_assets": [],
    "default_open_exercise_answers": [],
    "original_files_missing": [],
    "original_worked_examples": 413,
    "retained_worked_examples": 413,
    "changed_examples": [],
    "original_answer_blocks": 90,
    "retained_answer_blocks": 90,
    "changed_answers": [],
    "home_removed_module_absent": true
  },
  "all_pages_mobile": {
    "pages": 238,
    "viewport": 390,
    "overflow_pages": []
  }
}