2026-07-20 第九阶段动态资料、发布门禁与运行时审计记录
本阶段继续处理第八阶段留下的动态 SDK/协议页面、可选依赖示例、第三方参考层发布边界和 Mermaid 运行时风险。主 Agent 负责范围、术语、来源、冲突复核与最终门禁;三个专项 Agent 分别在 vault 外安装并验证 LangGraph、CrewAI、Matplotlib 与 scikit-learn 环境,另有专项审阅检查 Mermaid 本地化与可访问性。所有专项 Agent 都未修改项目文件,改动由主线统一落地。
证据边界
本阶段能证明固定版本、固定日期和当前测试/构建路径下的行为,不证明所有动态 API 长期不变,也不把离线 fixture、无密钥 runtime 或浏览器渲染冒充 live provider、生产并发、抓包级零连接、完整许可证清单或 Obsidian 桌面端验收。第三方参考页缺少逐页来源/许可元数据时继续 fail closed;没有为了提高公开页数量而批量推定许可。
1. 动态资料与事实边界
- Google Gemini 入门页把 2026 年 6 月已 GA 的 Interactions API 调整为新项目主线,
generateContent/ Chats 明确标为仍受支持的 legacy 兼容层。两套 API 的状态、steps、流式事件、续接和工具结果不再混写;Gemini 3.5 示例改用thinking_level,不再给 3.x 复制显式temperature、top_p或top_k。 - LangChain 参考层把 Python
from语句中非法的连字符模块名langchain-voyageai修为可导入模块langchain_voyageai;安装分发名仍是langchain-voyageai。同时删除虚构模型名,并把“所有 Provider 高级能力等价”的绝对表述收窄为统一调用入口加能力门禁。 - 旧 Bedrock Claude 3.5 标识更新为当前 AWS model card 可核对的 Sonnet 4.6 示例,同时明确模型 ID、区域可用性和
bedrock_converse支持仍要在目标账户复核。 - MCP 稳定基线继续固定为 2025-11-25 规范;没有把候选扩展或实现特有能力写成稳定协议事实。
- API、SDK、模型目录和传递依赖版本均保留核验日期;版本快照用于复现和漂移检测,不写成永久安装建议。
2. 可选依赖示例与课程合同
专项 Agent 都使用 Python 3.11.9、vault 外临时 venv、-B/PYTHONDONTWRITEBYTECODE,完成后核验并删除临时目录:
| 项目 | 固定直接依赖 | 单轮测试 | 四模式结果 | 本轮收紧的边界 |
|---|---|---|---|---|
| LangGraph 可恢复审批流 | langgraph==1.2.9、langgraph-checkpoint-sqlite==3.1.0 | 8 | 32/32 | thread_id 统一规范化;跨进程 start/inspect/resume 共享 SQLite 后恢复 |
| CrewAI 持久化 Flow | crewai==1.15.4 | 9 | 36/36 | flow_id 规范化;同 operation ID 异 payload 冲突不得产生第二次效果 |
| Agent 评测看板 | matplotlib==3.11.0 | 12 | 48/48 | 至少一条完成运行后 p50/p95 才有定义;试运行不覆盖课程工件 |
| 工单意图路由 | scikit-learn==1.9.0 | 9 | 36/36 | random_state 限于非负 32 位范围;虚拟环境移到 vault 外 |
这里的四模式是 normal、-O、-W error 和 -O -W error。CrewAI 的两个已知传递依赖 warning 仍按完整消息窄范围放行,其他 warning 会失败。
CrewAI 安装不是轻量合同
新 Python 3.11 venv 自带 pip 24.0 时,jsonschema → rpds-py 解析为 ResolutionImpossible;只在该临时 venv 把 pip 升到 26.1.2 后安装成功,pip check 无断裂依赖。当前一个直接依赖解析出 138 个 distribution、约 800 MB 环境,并传递引入 ChromaDB、LanceDB、MCP、OpenAI SDK 与 OpenTelemetry。课程命令已补上升级 pip 的可复现前置条件,同时明确:
- 单行 requirements 不是完整 lockfile;
- 测试关闭 CrewAI telemetry、AMP tracing 和隔离进程的 OpenTelemetry,但没有做抓包;
- 无 API/LLM/HTTP 日志只证明当前路径,不证明任意部署组合零外发;
- 生产项目应裁剪能力、锁定完整依赖、生成 SBOM,并做许可证、漏洞和出口审计。
基础 Python 与诊断质量
Python基础/Day31-35/code/example01.py把 Matplotlib/NumPy 导入移入绘图入口,算法模块和 2 项测试可以在标准库基础环境执行;运行绘图仍需显式安装课程依赖。- Embedding 与 Reranking 的 CLI 等价测试曾各出现一次无法稳定复现的内部子进程
returncode=1;相同脚本压力运行和完整模式重跑均通过。原测试的check=True只显示CalledProcessError,现改为显式断言返回码并在失败消息中保留解码后的 stderr,后续再现时不再丢失关键诊断。 - 这两次退出没有足够证据归因于代码、并发安装、杀毒软件或 Windows 进程噪声;维护记录保留不确定性,而不是把成功重跑改写成“从未失败”。
3. 第三方参考层发布门禁
.website/scripts/prepare-content.mjs 为已知上游参考树增加显式 fail-closed 前缀:深度学习完整复刻、LangChain 固定日期参考层、MCP 旧译文和 Agent Skills 旧参考层。页面若已有 source/source_url,却没有逐页 content_origin,公开层只生成来源跳转页;相邻 LangChain 旧附件也不会因 Markdown 变成 stub 而继续公开。
当前门禁把 186 个已知上游 Markdown 安全降为 third-party-metadata-missing stub,并额外阻止 12 个缺少对应发布证据的 LangChain 图片附件。这个数字是待逐页审阅队列,不是应该机械回填的字段数量。只有核对原始来源、版本、内容来源、再分发许可和本项目修改后,页面才能恢复全文发布。
4. Mermaid 安全、本地化与可访问性
- Quartz 插件原本固定从 cdnjs 加载 Mermaid 11.4.0;运行时补丁现在从项目锁文件的
mermaid==11.16.0复制入口与全部 ESM chunk,由当前站点同源加载,build 与 fresh dev 都走同一路径。 - 恢复原图源码时由
innerHTML改为textContent,MermaidsecurityLevel固定为strict;补丁同时验证源码与编译 bundle,旧/warm runtime 可重复执行而不会重新引入 CDN。 - 构建验证逐文件比较已发布 Mermaid 入口和 103 个 chunk 与已安装包的 SHA-256,并拒绝 cdnjs loader;不是只检查文件名或单个入口。
- Mermaid 放大按钮达到约 44×44 px,键盘 focus 可见,并在触摸/窄屏保持可见。构建预览和 fresh dev 都验证了图形渲染、暗色主题切换与全屏克隆,浏览器控制台无 error/warning。
.website/legal/Mermaid-MIT.txt保存 Mermaid 顶层 MIT 许可,生成的第三方声明记录 11.16.0 与同源来源;这仍不是完整传递依赖 attribution inventory,后续需由 SBOM/许可证报告补齐。- 从 11.4.0 升级后,
npm audit --omit=dev为 0 个已知漏洞;审计结果是当前 registry advisory 快照,不是长期安全保证。
5. 实际验证
- Provider 合同:96 项在 normal、
-O、warnings-as-errors、-O + warnings-as-errors四模式全部通过。 - 基础 Python:64 个无需课程可选依赖的文件、每模式 2,485 项;四模式完整重跑。
- 可选依赖:上表 4 个文件每模式共 38 项;均在各自隔离环境完整重跑。
- Python 聚合:68 个测试文件,每模式 2,523 项,四模式合计 10,092 次测试方法执行。基础环境与四个隔离环境分别统计,没有把“未安装”写成通过。
- Embedding + Reranking 诊断改动:每模式 59 项,四模式定向重跑通过;两个 CLI 各完成 30 次单进程压力,Embedding 的 normal/optimized 双子进程完成 100 轮压力。
- 站点:
npm test为 38/38;npm audit --omit=dev为 0 个已知漏洞。最后一次npm run build统计 891 个源 Markdown,其中 548 个全文、343 个 stub,连同 3 个生成页共 staged 894 个 Markdown;发布 213 个资源、2,386 个 HTML 页面和 2,723 个 public files。brokenLocalLinks、forbiddenFiles、progressMetadataLeaks、sensitiveLeaks、selfRedirects、tableWikilinkLeaks、checkboxProgressRuntimeLeaks、interactiveCheckboxes与katexErrors全部为 0;导航统计为 8 个阶段、56 个课程和 73 个文件夹。
6. 核心来源
- Gemini API Getting started、Interactions API overview 与 Gemini 3.5 GenerateContent migration notes。
- LangChain VoyageAI embeddings、AWS Bedrock model catalog 与 Anthropic Claude Sonnet 4.6 model card。
- MCP Specification 2025-11-25。
- Mermaid npm package 与 Mermaid releases。
- Provider-specific 核心来源继续见第八阶段三家 Provider 合同与流式状态机记录。
7. 后续队列
- 对 186 个 safe stub 逐页核对来源、版本、许可和修改边界;优先处理学习路线实际会引用的页面,不批量添加
content_origin。 - 单独核验 LangChain Academy/raw 资料、Agent Skills 参考层与其他外部完整材料的再分发许可;本地学习可见不等于公开站点可复制。
- 为生产依赖生成 SBOM 与完整许可证/NOTICE 报告;当前 Mermaid 顶层 MIT 文件和 npm lock 不能替代传递依赖 attribution。
- 为 LangGraph、CrewAI、Matplotlib 和 scikit-learn 项目建立独立 CI/锁文件矩阵;重点控制 CrewAI 的依赖体积、解析漂移、可选组件和 telemetry/exporter 边界。
- 建立有凭据门控、低费用、无副作用的三家 Provider live contract suite,验证真实 SDK 对象、SSE framing、重试、429、超时和恢复游标。
- 在 Obsidian 桌面端抽查 Mermaid、宽表、callout、wikilink 与移动端阅读体验;本阶段浏览器验证只覆盖 Quartz build/dev。
- 若内部 CLI 的无 stderr 退出再次出现,利用新增诊断保留命令、返回码、stderr、系统负载和并发环境,再决定是否属于代码、解释器或 Windows 运行噪声。
- 继续审阅尚未进入现代主线的动态 SDK/框架页面、课程元数据 v2 迁移和跨知识库重复内容;本阶段不是整个长期目标的完成声明。
前序记录见第八阶段三家 Provider 合同与流式状态机记录;来源、许可与原创/整理/第三方标记继续遵循内容质量与来源标记规范。