2026-07-19 第七阶段外部来源工件与路线可移植性记录
本阶段落实第六阶段队列中的 provenance external artifact v2,同时处理课程路线依赖语义和项目命令的机器可移植性。主 Agent 统一 wire contract、信任边界、术语、课程位置与最终验证;专项 Agent 分别执行 v1/v2 合同审计、课程依赖审计、绝对路径审计、provider 合同缺口审计与只读红队。红队发现的高风险问题均由主线复现、修复并增加回归,最终复核未留下 P0/P1。
本阶段结论边界
external-provenance-bundle-v2证明的是:在带外批准的 canonical JSON value、版本化算法和 consumer-owned live state 下,受保护 artifact 能跨 JSON boundary 保持可重建关系并 fail closed。它不是来源真实性、签名、AuthN、SLSA/in-toto conformance、分布式发布一致性或物理删除证明;第 9 课 reference engine 也尚未自动导入第 10 课 artifact。
1. 从 producer 摘要到可独立验证的外部 artifact
新增External Provenance Artifact v2,并扩展第 10 课 CrossLayerEngine.export_external_provenance_bundle()。完整 protected bundle 携带:
- parser、normalizer、mapping、knowledge-state、chunk、index、ID 与坐标版本合同;
- source event、inline raw/canonical、ACL snapshot、完整 parser record、KB revision、adapter elements 与 crosswalk;
- 完整 chunk、index entry、显式 tenant/document/source/revision route;
- generation、capture/tombstone/auth/pipeline、document/entry closure;
- payload 自哈希,以及
attestation.mode: none、trust_scope: self-consistency-only的诚实声明。
consumer 只接受 bounded strict UTF-8 JSON text/bytes,不接受 producer 的内存对象。TrustedImportPolicy 独立固定 canonical bundle-value digest、generation、pipeline 与 authorization revision;pretty/compact JSON 若解析成同一值,会得到同一 digest,因此这不是 exact wire-byte pin。完整 wire-byte 身份、签名者身份和跨组织信任仍需 transport digest、签名 envelope、可信控制面或透明日志。
可重建语义
consumer 使用当前受信任的 Parser 与 Chunking 实现 fresh rebuild,并逐项验证:
- raw/canonical/parser record、parser config 与完整元素顺序;
knowledge-store/source-build-state/v1下的 source/build state、KB revision identity 与 producer document snapshot;- crosswalk、adapter element、chunk、entry、ACL/access snapshot、route、coverage 与 generation closure;
- native line locator、element lexical span、
exact/prefix/suffix; canonical_mapping.status: unavailable与document-revision-bridge,不因成功传输而升级证据能力。
缺少完整原 producer release manifest 时,其 hash 改为带 opaque-producer-reference-only 标签的诊断引用;consumer 不把无法重建的摘要冒充已验证 closure。capture_artifact_sha256 等 producer identity 输入仍依赖带外 policy 与 generation pin,不等于 consumer 亲自重建了 producer 数据库。
2. 红队闭环:从结构合法到边界可用
独立红队先复现,再由主线逐项关闭下列问题:
| 问题 | 修复与回归 |
|---|---|
1200 层 JSON 逸出裸 RecursionError | decoder 前扫描 container depth,并将防御性递归错误统一为结构化 failure |
StagedExternalBundle/PublishedExternalBundle 可手工构造 | 公开构造器拒绝,import/publish 使用私有 provenance marker;伪造 object 无法发布 |
| query body 可自报 tenant/oncall group | tenant/groups/auth 从 host-owned ConsumerLiveState 的 principal grant 签发;query body 只接受 query_id/query/top_k |
| context 可跨 live-state snapshot 复用 | TrustedRequestContext 绑定签发它的精确 live-state marker |
| 相同公共结果的两个主体争用同一 trace | 每次 host 签发 128-bit 随机 request nonce;trace 绑定 nonce、bundle、generation 与 public trace,audit 分别归属 |
| public 与 protected audit 同时返回 | public query 只返回公共 schema;audit 写入 host-owned sink,写入失败则整次查询 fail closed |
public citation 原样输出敏感 source_uri | 公共投影只保留类型化 logical source/KB identity;URI/version 只进入 protected audit sink |
| Schema URI 上限 300、实现上限 1000 | 独立 sourceUri 合同统一为 1000;普通和长 URI 的真实 exporter bundle 均通过 Draft 2020-12 validator |
D:/... 可逃逸临时 parser root | portable path grammar 拒绝 drive/stream、反斜杠、traversal、设备名、危险结尾与超长 segment;resolve 后做 descendant check,exclusive create |
materialization 抛裸 OSError | 路径物化与 parser rebuild 分别转成稳定结构化错误 |
| 只比较 element/crosswalk 集合,可重排语义 | parser → crosswalk → adapter element 顺序逐项绑定;即使重建下游 chunk/entry/hash 也拒绝 |
| KB source/build 与 producer snapshot 被当作 opaque hash | 绑定单一版本化 knowledge-state 算法并完整复算 producer document snapshot |
专项文件包括:
docs/RAG/examples/provenance/external_provenance_v2.py;docs/RAG/examples/provenance/external-provenance-bundle-v2.schema.json;docs/RAG/examples/provenance/test_external_provenance_v2.py;- 第 9/10/11 课及 Parser、Knowledge Store、Chunking 目录的能力边界和交叉链接。
42 项专项测试覆盖 strict JSON、trusted policy、identity/route/path/order/coordinate/coverage、live authorization、trace、发布状态机、protected audit delivery 与非泄露。最终只读红队确认没有剩余 P0/P1。
3. 学习路线:展示顺序不再冒充依赖拓扑
课程审计发现两个学习体验问题:总路线曾写一个并不存在的“安全与评测基础”课程,且课程侧栏的 legacy order 容易被理解为严格前置顺序。现已:
- 在早期安全与评测 milestone中链接现有威胁建模、提示注入、工具越权、身份最小权限、评测目标、用例分层与确定性断言章节,并给出最小完成证据;
- 将 Tool Calling 明确为 Agent 核心的普遍硬前置;
- 将 MCP 定位为按需互操作分支,而非所有 Agent runtime 的硬前置;
- 将框架实践定位为按状态、恢复、协作和控制需求选用的分支;
- 将 Course Navigator 的
LEARNING ROADMAP改为COURSE CATALOG,明确 legacy order 只是展示顺序; - 为上述导航语义增加网站回归测试。
这次只迁移了已经逐页核验的第一批关系。缺少 v2 prerequisite metadata 表示“尚未迁移”,不表示“已确认无依赖”。
4. 项目命令与发布路径可移植性
路径专项审计在 22 个主线项目页发现 23 处当前机器绝对项目根。逐页改为从同时包含 docs/ 与 .website/ 的项目根目录运行,并使用项目相对路径;没有机械替换冻结第三方正文。覆盖 Agent Skills/Core、Benchmark、CrewAI、JSON、LangChain、LLM API、MLOps、OCR、上下文/提示词、图像/视频/语音、工作流、数据合成、正则、评测与监控项目。
smoke 进一步发现并修复 3 个原本不可运行的 unittest 命令:
- LLM API 集成:20 tests;
- 上下文工程:15 tests;
- 提示词工程:15 tests。
.website/scripts/prepare-content.mjs 新增发布前门禁:完整发布的课程 Markdown 若仍含指向 AI Agent Engineer 项目目录的 Windows 绝对路径,构建会在脱敏前失败;维护记录可保留历史证据。网站测试同时覆盖失败样例与合法项目相对路径。
5. Provider 合同只读审计
本阶段没有扩张到真实 provider 集成,但完成了下一阶段缺口审计。当前 LLM API 示例仍以可靠 client 骨架为主,尚未形成 OpenAI Responses、Anthropic Messages 与 Gemini Interactions 的完整 wire/SDK 合同,也没有覆盖 provider-specific continuation、streaming tool-argument event state machine、strict tool schema 与 structured final output 的组合边界。
2026-07-19 核验的官方 Python SDK release snapshot 为:
- openai-python v2.46.0,2026-07-17;
- anthropic-sdk-python v0.117.0,2026-07-16;
- python-genai v2.12.1,2026-07-16。
这些版本只用于记录审计时点,不应写成长期安装建议;进入实现时要重新锁版并以官方 API/SDK 文档和实际事件流为准。
6. 实际验证
- External v2 专项:42/42,在 normal、
-O、warnings-as-errors、-O + warnings-as-errors四模式全部通过。 - RAG provenance 目录:109/109,四模式全部通过;其中第 9 课 67 项、external v2 42 项。
- RAG integration 目录:36/36,四模式全部通过。
- Python 全库:发现 67 个
test_*.py;62 个基础环境可运行文件在四模式分别为 2387/2387,四轮全部通过。 - 可选依赖边界:5 个文件未纳入基础回归,因为当前环境未安装课程明确声明的 CrewAI、LangGraph、Matplotlib 或 scikit-learn;没有把未执行写成通过。
- 路径项目 smoke:20 个唯一工作目录共 902 项单元测试,加 LangChain 5 项自检,全部通过;其中三处错误命令已由全库四模式再次覆盖。
- JSON/Schema:RAG examples 下 6 个 JSON/schema 文件通过 strict UTF-8、重复键与非有限数检查;标准 URI 与长 URI 的真实 exporter bundle 均为 Draft 2020-12
0 errors。 - 路径与差异:当前机器绝对项目根精确命中 0;
git diff --check通过;验证产生的 4 个.pyc和 2 个__pycache__已清理,生成目录没有进入 Git status。 - 站点测试:
.website npm test为 35/35。 - 站点构建:发布 891 个 Markdown 页面、220 个资源与 2665 个 public files;broken local links、forbidden files、progress metadata leaks、sensitive leaks、self redirects、table wikilink leaks、checkbox leaks 与 KaTeX errors 全部为 0。
7. 核心来源
- in-toto Attestation Framework: Statement v1:subject digest、predicate type 与声明边界。
- SLSA v1.2 Provenance、Build Provenance 与 Verifying artifacts:producer 声明、builder/input identity 与 verifier policy 的分层;本项目只借鉴,不声明 SLSA level。
- DSSE protocol:签名 envelope 的 payload type 与编码边界;本项目未实现 DSSE。
- W3C Web Annotation Data Model: Selectors:quote/position selector 的建模来源;本项目不输出 JSON-LD。
- RFC 8785: JSON Canonicalization Scheme:稳定签名输入的动机;本项目受限 canonical JSON 不是完整 JCS。
- JSON Schema Draft 2020-12:跨语言结构合同;排序、hash preimage、route closure、path containment、live state 与 publication 仍由语义 verifier 处理。
8. 后续队列
- Provider contract project:新增三家 provider 合同测试,覆盖真实 request/response、streaming tool arguments、continuation、并行调用、错误 taxonomy、strict tools 与 structured final output;避免仅比较 SDK 对象表面形状。
- Schema CI 与跨语言向量:让 exporter artifact 自动经过 JSON Schema,并为 canonicalization、duplicate key、Unicode、path 与 ID preimage 建立跨实现测试向量。
- 正式 attestation:定义 predicate type,接入 DSSE 或等价签名 envelope、PKI/KMS、key rotation、透明日志和可信 policy 分发。
- 可信运行控制面:接入真实 AuthN/IdP/PDP、live-state freshness、durable protected audit、immutable store、事务/CAS cutover、并发 reader 与灾难恢复。
- RAG 第 9 课迁移:定义 v1/v2 old-ID crosswalk 和 downgrade reader;只有证明 canonical slice 才能迁为
canonical-span-verified。 - 外部索引删除证明:覆盖 sparse/dense/vector/graph/cache 的撤权、删除传播、备份擦除与 purge audit。
- 环境卫生:统一课程项目虚拟环境放置策略,避免在内容目录生成
.venv;为 5 个可选依赖项目配置独立 CI/环境矩阵。 - 人工渲染验收:在 Obsidian 与 Quartz 中抽查 RAG11 Mermaid、宽表、callout、课程导航和移动端布局。
前序记录见第六阶段跨模块、传输与持久化证据链记录;内容来源与许可继续遵循内容质量与来源标记规范。