前言
本书定义 asciidoc-abundant-tree 中 RDF 1.2 标题投影图的实现计划。
06-rdf12-line-projection 定义标题投影图的对象规约。本书定义从当前 src/rdf12-projection/ 实现迁移到该规约的工程批次、文件边界、测试要求、审核门槛和打回条件。
当前源码已经具备 RDF term、graph、路径坐标、PROV、Turtle 输出、JSON-LD 输出、CLI 和 public API 基础。当前源码的投影对象仍然包含 paragraph、listing、table、anchor、label resource、SurfaceAttribute resource 和 PayloadBlock resource。本书把这些源码事实作为实现基线,而不是把它们作为目标对象。
本书的核心断言是:实现批次必须让公共 rdf12 输出收敛到 06 号书定义的标题投影图。每个批次必须产生可验证的源码变化、测试变化和审核证据。没有验收证据的批次不得解锁下一批。
本书使用中文叙事。RDF、Turtle、IRI、literal、triple term、reifier、selector、headline、payload、provenance、graph、batch、review package 等术语在正文中保留英文形式或中英并列形式,以保持与 06 号书、源码和测试之间的术语连续性。
第一部:执行契约
这一部定义实现计划书的对象边界、源码基线、批次门槛、提交规则和全局验收。
1. 执行契约
本章定义本计划书的执行契约。所有批次章节均受本章约束。
1.1. 对象边界
本计划书的对象是 RDF 1.2 标题投影图的实现序列。
标题投影图对象由 AsciiDoc 标题切片到 RDF 1.2 投影规约 定义。本计划书不重新定义标题投影图。本计划书只定义如何从当前源码状态到达该对象:哪些文件承担哪些职责,哪些测试证明行为成立,哪些旧对象必须退出公共图表面。
1.2. 公共入口
公共入口保持 rdf12。
CLI 公共表面:
asciidoc-abundant-tree <file.adoc> --format rdf12
TypeScript public API 公共表面:
const projection = rdf12(document, {
documentRoot: process.cwd(),
});
const graph = projection.graph;
const ttl = projection.ttl;
const jsonLd = projection.jsonLd;
rdf12 输出必须描述标题投影图。Turtle 文本是图的序列化表面;测试不得只比较 Turtle 排版。涉及 RDF 1.2 reifier 的验收必须检查 rdf:reifies 的 object 是 triple term。
1.3. 批次状态
批次状态使用受控集合:
未开始
|
批次没有实现提交。 |
执行中
|
批次存在实现活动,尚未提交审核包。 |
待审核
|
批次提交 hash 和审核包已经产生。 |
打回
|
审核者拒绝通过该批次。 |
通过
|
审核者确认该批次满足本书验收条件。 |
批次状态记录在 批次状态台账。状态台账只记录事实,不记录愿望、估计或口头进度。
1.4. 批次门槛
每个批次开始前必须满足以下门槛:
-
前一批次状态为
通过。 -
前一批次提交 hash 已写入状态台账。
-
当前工作树中不存在与本批无关的未提交修改。
-
执行者已经阅读本批列出的 06 号书章节、源码入口和测试入口。
Batch 00 没有前置批次。Batch 00 开始前必须确认 src/rdf12-projection/ 是正式实现目录,docs/bookshelf/books/06-rdf12-line-projection/ 是目标规约来源。
1.5. 语言规则
批次章节使用规约语言。任务授权不得使用以下表达:
-
建议。
-
可以考虑。
-
最好。
-
尽量。
-
后续再说。
-
视情况。
-
基本完成。
-
差不多。
未确定对象不得进入实施任务。未确定对象必须登记为风险、相邻人工制品或打回项。
1.6. 文件提交规则
提交在内部 Git 仓库 micheng-ts/projects/asciidoc-abundant-tree 中执行。
新文件必须先进入 Git index:
git add <new-files>
每批提交使用 git commit --only 限定路径:
git commit --only -m "<message>" -- <paths>
每批提交只包含本批文件。跨批文件、其它项目文件、构建产物和无关格式化不得进入本批提交。
1.7. 审核包
每批完成后必须提交审核包。审核包格式见 阶段审核包模板。
审核包必须包含:
-
批次编号。
-
提交 hash。
-
修改文件列表。
-
本批完成范围。
-
本批未处理对象。
-
已运行命令。
-
命令结果。
-
规约检查清单。
-
审核结论。
没有提交 hash 的批次不得进入审核。没有审核通过结论的批次不得解锁下一批。
1.8. 全局打回条件
出现以下任一情况,当前批次必须打回:
-
投影层重新解析 AsciiDoc 源结构,而不是消费
AbundantDocument。 -
投影层打开跨文件 xref 指向的外部
.adoc文件。 -
作者显式 ID、headline、generated ID、xref display label 或 payload selector 进入 resource IRI。
-
可回源 resource 或复杂属性缺少
aat:relativePath、aat:startLine或aat:endLine。 -
标题节点自身
aat:raw吞并子标题切片。 -
aat:containsDirectly连接标题节点到 paragraph、listing、table、payload、label 或普通属性。 -
aat:childOrder缺失于存在 parent heading 的 heading。 -
同一 parent 的 direct children 的
aat:childOrder不连续、不唯一或不从1开始。 -
aat:documentOrder缺失、不连续、不唯一或不从1开始。 -
aat:previousSibling出现在当前核心 heading projection 中。 -
heading order 从 source line、relative path、IRI lexical order 或 Turtle textual order 推导。
-
未绑定 selector 生成虚构 target heading。
-
多义 selector 生成单一 target heading。
-
xref
payloadselector 字符串占用aat:payload。 -
payload raw 被展开为业务 RDF graph。
-
named attribute 生成
aat:SurfaceAttribute或rdf:value属性资源。 -
公共图中保留
aat:Paragraph、aat:ListingBlock、aat:TableBlock、aat:AnchorTarget、aat:PayloadBlock作为标题投影图节点。 -
验收只比较 Turtle 字符串排版,不比较 graph 语义。
1.9. 覆盖矩阵
| 06 号书承诺 | 实现批次 | 验收批次 |
|---|---|---|
当前旧 RDF12 输出被锁定为迁移基线 |
Batch 00 |
Batch 00、Batch 07 |
|
Batch 01 |
Batch 01、Batch 07 |
标题自身 raw、metadata span、content span、line span |
Batch 01 |
Batch 01、Batch 07 |
|
Batch 02 |
Batch 02、Batch 07 |
|
Batch 02 |
Batch 02、Batch 07 |
|
Batch 02 |
Batch 02、Batch 07 |
标题 label 空间与 selector binding |
Batch 03 |
Batch 03、Batch 04、Batch 06、Batch 07 |
xref relation triple 与 RDF 1.2 reifier |
Batch 04 |
Batch 04、Batch 07 |
|
Batch 04 |
Batch 04、Batch 07 |
直接字段谓词 |
Batch 05 |
Batch 05、Batch 07 |
节点 payload 与边 payload |
Batch 06 |
Batch 06、Batch 07 |
Turtle、JSON-LD、CLI、public API |
Batch 07 |
Batch 07 |
2. 当前源码状态
本章记录实现计划的源码基线。该基线描述当前事实,不定义目标对象。
2.1. 可复用基础设施
src/rdf12-projection/terms.ts 定义 RDF 1.2 term、literal、triple term 和 triple。src/rdf12-projection/graph.ts 提供 graph 去重和稳定输出基础。src/rdf12-projection/n3-adapter.ts、turtle-serializer.ts 和 json-ld-serializer.ts 提供序列化出口。
src/rdf12-projection/path-coordinate.ts、source-digest.ts、options.ts 和 provenance.ts 提供 document root、relative path、document key、source digest 和 PROV-O 来源事实。标题投影图继续需要这些事实。
src/index.ts 已暴露 rdf12(document, options)。src/cli.ts 已暴露 --format rdf12 和 --format rdf12-json-ld。公共入口可以保留;入口背后的图对象必须迁移。
2.2. 当前投影对象
src/rdf12-projection/structure-projector.ts 当前投影多类结构 resource:
-
aat:Section -
aat:Paragraph -
aat:ListingBlock -
aat:TableBlock -
aat:AnchorTarget
该文件还把 document resource 到普通 block 的 aat:containsDirectly 作为结构树边输出。06 号书要求 aat:containsDirectly 只连接标题节点。
src/rdf12-projection/labels.ts 当前创建 label resource,并把 label resource 通过 aat:hasLabel 挂到 owner。label catalog 的 owner 包含 section、listing、table、anchor、payload 和 document。06 号书要求 label 是标题节点上的查询字段或边证据上的 display label,不作为核心结构资源。
src/rdf12-projection/attributes.ts 当前创建 aat:SurfaceAttribute resource,并使用 aat:name、rdf:value 和 aat:hasAttribute 表达字段。06 号书要求 named attribute 直接投影为 owner 上的 aat:<name> literal 谓词。
src/rdf12-projection/payload-projector.ts 当前创建 aat:PayloadBlock resource,并使用 aat:hasPayload、aat:payloadOf、aat:sourceText 和 aat:dataFormat。06 号书要求 payload 是标题节点或 xref edge evidence 上的复杂属性对象,字段名为 aat:payload、aat:raw、aat:format、aat:payloadKind 等。
src/rdf12-projection/xref-projector.ts 当前创建 aat:XrefOccurrence resource,并使用 aat:sourceNode、aat:targetNode、aat:rawRel 和 aat:payloadSelector。06 号书要求 xref 形成关系边和 aat:XrefEdge 边证据,边证据使用 aat:sourceHeading、aat:targetHeading、aat:rel、aat:targetSelector、aat:displayLabel 和 aat:payloadSelector。
2.3. 当前测试状态
test/rdf12-projection/ 中的测试覆盖当前旧投影对象。以下断言属于迁移对象,而不是目标验收:
-
structure-projector.test.ts断言Section、Paragraph、ListingBlock、TableBlock和AnchorTarget。 -
labels.test.ts断言 label resource、rdf:value和aat:hasLabel。 -
attributes.test.ts断言SurfaceAttribute、aat:name、rdf:value和aat:hasAttribute。 -
payload-projector.test.ts和payload.acceptance.test.ts断言PayloadBlock、hasPayload和payloadOf。 -
xref-projector.test.ts断言XrefOccurrence、sourceNode、targetNode和rawRel。
这些测试不能直接删除。实现批次必须先写出 06 号书目标测试,再把旧测试迁移、替换或删除。测试删除必须由同批目标测试覆盖,不得留下未验收行为。
2.4. 迁移原则
实现层继续消费 AbundantDocument。解析器、metadata parser、inline occurrence scanner 和 source interval resolver 不是本计划的目标对象。只有当标题自身 raw 无法由现有字段稳定恢复时,才允许在专门批次中补充源区间辅助函数。
投影层可以保留 RDF term、graph、路径、PROV、序列化和 public entry。投影层必须重写资源集合、label catalog、selector binding、attribute projection、payload projection 和 xref edge projection。
2.5. 文件职责目标
projector.ts
|
编排标题投影图生成顺序,不承载具体规则。 |
structure-projector.ts
|
生成 heading node、heading slice raw、heading containment、 |
node-index.ts
|
只索引 heading node,并支持 xref source heading 和 target heading 绑定。 |
label-catalog.ts
|
只维护标题节点 label 空间。 |
labels.ts
|
写入 |
xref-projector.ts
|
生成 relation triple、 |
attributes.ts
|
将 named attributes 写为 owner 上的直接 |
payload-projector.ts
|
生成节点 payload 和边 payload 的复杂属性对象。 |
resource-identity.ts
|
移除或隔离 paragraph、listing、table、anchor、attribute、label 等旧 public resource kind。 |
2.6. 目标样例
samples/structural-payload.adoc 是本计划的核心验收样例。实现完成后,该样例的 RDF12 图必须满足 06 号书完整样例中的正向事实和负向事实。负向事实与正向事实同等重要,因为它们定义标题投影图的对象边界。
第二部:标题结构批次
这一部把当前结构资源投影迁移为标题节点、标题切片、直接父子关系、同父局部顺序和全局 preorder。
3. Batch 00:基线与迁移护栏
3.1. 批次目标
本批建立迁移基线和目标护栏。本批不改变 RDF12 运行时输出。
本批输出三类证据:当前旧输出快照、06 号书目标验收清单、迁移期间允许失败的目标测试集合。
3.2. 上游门槛
Batch 00 没有上游批次。开始前必须确认 06 号书位于 docs/bookshelf/books/06-rdf12-line-projection/,当前实现位于 src/rdf12-projection/。
3.3. 本批上下文包
执行者必须阅读:
-
docs/bookshelf/books/06-rdf12-line-projection/book.adoc -
docs/bookshelf/books/06-rdf12-line-projection/chapters/08-worked-example.adoc -
src/rdf12-projection/projector.ts -
src/rdf12-projection/structure-projector.ts -
src/rdf12-projection/xref-projector.ts -
src/rdf12-projection/attributes.ts -
src/rdf12-projection/payload-projector.ts -
test/rdf12-projection/*.test.ts
3.4. 输入事实
当前 RDF12 输出包含旧结构资源。目标 RDF12 输出只包含标题投影图资源。迁移必须以测试表达目标对象,不能只删除旧断言。
3.5. 文件边界
创建:
-
test/rdf12-projection/heading-projection.acceptance.test.ts -
test/rdf12-projection/helpers/graph-matchers.ts -
docs/bookshelf/books/07-rdf12-heading-projection-implementation-plan/backmatter/batch-00-review-package.adoc
修改:
-
test/rdf12-projection/query-contracts.test.ts -
docs/bookshelf/books/07-rdf12-heading-projection-implementation-plan/backmatter/batch-status-ledger.adoc
不得修改:
-
src/rdf12-projection/** -
src/model.ts -
src/parser.ts
3.6. 实施任务
-
建立 graph matcher 辅助函数,用于按 RDF term 检查 triple 存在、triple 不存在、resource type 数量和 literal 值。
-
为
samples/structural-payload.adoc写目标验收测试。 -
将目标验收测试标记为迁移期间允许失败的显式集合,标记必须集中在测试文件顶部,不得散落在断言旁。
-
写出当前旧输出快照命令和目标差距说明。
-
创建 Batch 00 审核包。
3.7. 目标验收断言
heading-projection.acceptance.test.ts 必须覆盖:
-
标题节点数量为四个。
-
= root产生aat:Heading。 -
配送策略节点具有aat:addressLabel "delivery-policy"。 -
配送策略节点具有aat:kind "policy"、aat:status "active"和aat:owner "ops"。 -
运力规则节点自身aat:raw不包含=== 我是3级标题。 -
root直接包含配送策略和运力规则。 -
运力规则直接包含我是3级标题。 -
root的 direct children 中,配送策略的aat:childOrder为1,运力规则的aat:childOrder为2。 -
四个标题节点的
aat:documentOrder按root、配送策略、运力规则、我是3级标题连续递增。 -
当前核心 projection 不输出
aat:previousSibling。 -
配送策略到运力规则生成rel:depends-on。 -
xref 边证据类型为
aat:XrefEdge。 -
xref
weight=0.8投影为aat:weight "0.8"。 -
xref
payload=rel-delivery-capacity投影为aat:payloadSelector "rel-delivery-capacity"。 -
delivery-policy-payload绑定为配送策略节点 payload。 -
rel-delivery-capacity绑定为 xref edge payload。 -
payload raw 不展开为业务 RDF graph。
-
Paragraph、ListingBlock、TableBlock、AnchorTarget、SurfaceAttribute、PayloadBlock不作为目标图类型出现。
3.8. 验证命令
pnpm test -- test/rdf12-projection/heading-projection.acceptance.test.ts
pnpm test -- test/rdf12-projection/query-contracts.test.ts
pnpm typecheck
目标验收测试在 Batch 00 可以失败。失败必须与旧实现差距一致。pnpm typecheck 必须通过。
3.9. 提交规则
git add test/rdf12-projection docs/bookshelf/books/07-rdf12-heading-projection-implementation-plan/backmatter
git commit --only -m "test: add rdf12 heading projection migration guardrails" -- test/rdf12-projection docs/bookshelf/books/07-rdf12-heading-projection-implementation-plan/backmatter
3.10. 审核规则
审核者必须确认目标测试直接来自 06 号书完整样例,而不是来自当前旧输出。审核者必须确认允许失败的测试集合有明确移除批次。
3.11. 打回条件
出现以下任一情况,本批不通过:
-
目标测试只比较 Turtle 字符串。
-
目标测试缺少负验收事实。
-
目标测试把旧资源类型当作目标。
-
本批修改
src/rdf12-projection/**。
4. Batch 01:标题节点与标题切片
4.1. 批次目标
本批把结构 resource 投影收敛为标题节点投影。本批生成 aat:Heading、headline、heading level、address label、generated address label、标题自身 raw 和回源坐标。
本批不生成 xref edge。本批不生成 payload。本批不处理直接字段谓词。
4.2. 上游门槛
-
Batch 00 状态为
通过。 -
Batch 00 提交 hash 已写入 批次状态台账。
4.3. 本批上下文包
执行者必须阅读:
-
docs/bookshelf/books/06-rdf12-line-projection/chapters/02-heading-node.adoc -
docs/bookshelf/books/06-rdf12-line-projection/chapters/03-heading-slice.adoc -
src/model.ts -
src/source-lines.ts -
src/source-surfaces.ts -
src/source-interval-resolver.ts -
src/rdf12-projection/structure-projector.ts -
src/rdf12-projection/node-index.ts -
test/rdf12-projection/structure-projector.test.ts
4.4. 输入事实
标题节点由 SectionNode 和 document title 对应的等号标题产生。标题节点不是 paragraph、listing、table 或 inline anchor 的父类。
标题切片是连续源文本区域。切片起点是标题头部 metadata 第一行;没有 metadata 时起点是标题行。切片终点是下一个标题切片起点之前。父标题自身 raw 不包含子标题切片。
4.5. 文件边界
修改:
-
src/rdf12-projection/structure-projector.ts -
src/rdf12-projection/node-index.ts -
src/rdf12-projection/resource-identity.ts -
test/rdf12-projection/structure-projector.test.ts -
test/rdf12-projection/heading-projection.acceptance.test.ts
允许创建:
-
src/rdf12-projection/heading-slice.ts -
test/rdf12-projection/heading-slice.test.ts
不得修改:
-
src/parser.ts -
src/asciidoctor-adapter.ts -
src/metadata-parser.ts
4.6. 实施任务
-
将
structure-projector.ts的 public 行为改为只投影 heading node。 -
将 section resource type 从
aat:Section改为aat:Heading。 -
将
aat:sectionLevel改为aat:headingLevel。 -
将 section title 写为
aat:headline。 -
将手动 ID 写为
aat:addressLabel。 -
将 Asciidoctor generated ID 写为
aat:generatedAddressLabel。 -
实现 heading local id:
heading-l<startLine>-o<ordinal>。 -
实现标题自身 raw 计算。
-
写入
aat:relativePath、aat:startLine、aat:endLine、aat:headingLine。 -
有 metadata 时写入
aat:metadataStartLine和aat:metadataEndLine。 -
有标题正文内容时写入
aat:contentStartLine和aat:contentEndLine。 -
删除 paragraph、listing、table、anchor resource 创建路径,或把它们隔离到不被
rdf12调用的旧实现分支。 -
更新
node-index.ts,使 index entry 的公共语义为 heading index entry。
4.7. 测试任务
-
structure-projector.test.ts断言samples/structural-payload.adoc产生四个aat:Heading。 -
structure-projector.test.ts断言没有aat:Paragraph、aat:ListingBlock、aat:TableBlock和aat:AnchorTarget。 -
heading-slice.test.ts断言配送策略raw 是 line 5 到 line 40。 -
heading-slice.test.ts断言运力规则raw 是 line 41 到 line 45,不包含 line 46 到 line 48。 -
heading-slice.test.ts断言我是3级标题headingLevel 是2。 -
heading-projection.acceptance.test.ts中标题节点与 raw 相关断言解除允许失败标记。
4.8. 验收标准
-
aat:Heading是标题节点唯一结构类型。 -
标题节点 IRI 不包含 headline、address label 或 generated address label。
-
aat:raw是标题自身切片,不是递归子树文本。 -
所有 heading node 都有 relative path 和 closed line span。
-
本批后不再有旧 block 类型从
structure-projector.ts输出。
4.9. 验证命令
pnpm test -- test/rdf12-projection/structure-projector.test.ts test/rdf12-projection/heading-slice.test.ts test/rdf12-projection/heading-projection.acceptance.test.ts
pnpm typecheck
4.10. 提交规则
git add src/rdf12-projection test/rdf12-projection
git commit --only -m "feat: project rdf12 heading nodes and slices" -- src/rdf12-projection test/rdf12-projection
4.11. 审核规则
审核者必须检查标题 raw 的行范围。审核者必须检查旧 block resource 没有以新名称保留下来。
4.12. 打回条件
出现以下任一情况,本批不通过:
-
paragraph、listing、table 或 anchor 仍作为 RDF12 结构 resource 输出。
-
aat:raw包含子标题切片。 -
generated ID 被当作 resource identity。
-
缺少 heading line 或 line span。
5. Batch 02:标题结构边
5.1. 批次目标
本批实现 ordered heading tree graph。本批生成 aat:containsDirectly、aat:childOrder 和 aat:documentOrder。
本批不生成 xref relation。本批不改变 payload。本批不改变 public API。
5.2. 上游门槛
-
Batch 01 状态为
通过。 -
Batch 01 提交 hash 已写入 批次状态台账。
5.3. 本批上下文包
执行者必须阅读:
-
docs/bookshelf/books/06-rdf12-line-projection/chapters/04-structure-edges.adoc -
docs/bookshelf/books/06-rdf12-line-projection/chapters/08-worked-example.adoc -
src/rdf12-projection/structure-projector.ts -
src/rdf12-projection/node-index.ts -
test/rdf12-projection/containment.test.ts -
test/rdf12-projection/query-contracts.test.ts
5.4. 输入事实
aat:containsDirectly 表达父标题到直接子标题的关系。它不表达传递闭包。
aat:childOrder 表达 heading 在同一 parent 的 direct children 中的 1-based 局部顺序。它不跨 parent 解释。
aat:documentOrder 表达 logical heading tree preorder traversal 中的 1-based 全局顺序。
source coordinate fields 表达 origin source location。relativePath、startLine、endLine、headingLine 和 raw 不参与 heading tree order 计算。
5.5. 文件边界
修改:
-
src/rdf12-projection/structure-projector.ts -
test/rdf12-projection/containment.test.ts -
test/rdf12-projection/query-contracts.test.ts -
test/rdf12-projection/heading-projection.acceptance.test.ts
不得修改:
-
src/rdf12-projection/xref-projector.ts -
src/rdf12-projection/payload-projector.ts -
src/parser.ts
5.6. 实施任务
-
在标题节点创建后记录父标题关系。
-
仅在父子标题之间写入
aat:containsDirectly。 -
移除 document resource 到 paragraph、listing、table、anchor 的 contains 输出。
-
为所有 heading 写入连续、唯一、1-based
aat:documentOrder。 -
为存在 parent heading 的 heading 写入同父连续、1-based
aat:childOrder。 -
保证 document title heading 存在时拥有
aat:documentOrder 1且没有aat:childOrder。 -
保证无 document title heading 时不创建虚构 parent heading,顶层 sections 没有
aat:childOrder。 -
停止输出
aat:previousSibling。 -
保证
root到我是3级标题不生成直接 contains。
5.7. 测试任务
-
containment.test.ts断言root containsDirectly 配送策略。 -
containment.test.ts断言root containsDirectly 运力规则。 -
containment.test.ts断言运力规则 containsDirectly 我是3级标题。 -
containment.test.ts断言root不直接 contains我是3级标题。 -
containment.test.ts断言配送策略不 contains paragraph 或 listing。 -
containment.test.ts断言root的 direct children 按childOrder为配送策略、运力规则。 -
containment.test.ts断言所有 heading 按documentOrder形成 preorder。 -
containment.test.ts断言 graph 不输出aat:previousSibling。 -
query-contracts.test.ts覆盖直接子标题和递归子树查询。 -
heading-projection.acceptance.test.ts中结构边断言解除允许失败标记。
5.8. 验收标准
-
aat:containsDirectly的 subject 和 object 均为aat:Heading。 -
有 parent heading 的 direct children 均有
aat:childOrder。 -
同一 parent 的 direct children 的
aat:childOrder唯一、连续、从1开始。 -
所有 heading 均有
aat:documentOrder。 -
aat:documentOrder在 projection 内唯一、连续、从1开始。 -
传递包含由查询层使用 property path 表达,不由投影器物化。
-
line span 仍然负责回源;
childOrder和documentOrder负责结构顺序。 -
aat:previousSibling不作为当前核心契约输出。
5.9. 验证命令
pnpm test -- test/rdf12-projection/containment.test.ts test/rdf12-projection/query-contracts.test.ts test/rdf12-projection/heading-projection.acceptance.test.ts
pnpm typecheck
5.10. 提交规则
git add src/rdf12-projection/structure-projector.ts test/rdf12-projection
git commit --only -m "feat: project rdf12 heading structure edges" -- src/rdf12-projection/structure-projector.ts test/rdf12-projection
5.11. 审核规则
审核者必须检查 containsDirectly 没有连接非标题资源。审核者必须检查 childOrder 只在同一 parent 的 direct children 内解释。审核者必须检查 documentOrder 是 logical heading tree preorder。审核者必须检查 graph 不输出 aat:previousSibling。
5.12. 打回条件
出现以下任一情况,本批不通过:
-
root containsDirectly 我是3级标题被物化。 -
非标题资源出现在 structure edge 两端。
-
aat:previousSibling被生成。 -
childOrder或documentOrder从 source line、relative path、IRI 或 Turtle textual order 推导。
第三部:关系、属性与载荷批次
这一部实现标题 label 空间、selector binding、xref 边证据、直接字段谓词和 payload 复杂属性。
6. Batch 03:标题 Label 空间与 Selector Binding
6.1. 批次目标
本批把 selector binding 收敛到标题节点 label 空间。本批不创建 label resource。本批输出标题节点上的 label 字段,并让 selector 只绑定 aat:addressLabel、aat:generatedAddressLabel 和 aat:headline。
本批不生成 xref relation triple。本批不生成 payload binding。
6.2. 上游门槛
-
Batch 02 状态为
通过。 -
Batch 02 提交 hash 已写入 批次状态台账。
6.3. 本批上下文包
执行者必须阅读:
-
docs/bookshelf/books/06-rdf12-line-projection/chapters/02-heading-node.adoc -
docs/bookshelf/books/06-rdf12-line-projection/chapters/05-xref-edge.adoc -
docs/bookshelf/books/06-rdf12-line-projection/chapters/06-payload-and-attribute.adoc -
src/rdf12-projection/labels.ts -
src/rdf12-projection/label-catalog.ts -
src/rdf12-projection/selector-binding.ts -
test/rdf12-projection/labels.test.ts -
test/rdf12-projection/selector-binding.test.ts
6.4. 输入事实
标题节点 label 空间由三类字段构成:
-
aat:addressLabel -
aat:generatedAddressLabel -
aat:headline
Selector binding 只查询这三类字段。selector 不绑定到标题节点 IRI、payload id、role、普通字段谓词、raw 文本、listing ID、table ID 或 inline anchor ID。
6.5. 文件边界
修改:
-
src/rdf12-projection/labels.ts -
src/rdf12-projection/label-catalog.ts -
src/rdf12-projection/selector-binding.ts -
src/rdf12-projection/projector.ts -
test/rdf12-projection/labels.test.ts -
test/rdf12-projection/selector-binding.test.ts -
test/rdf12-projection/interdocument.acceptance.test.ts -
test/rdf12-projection/heading-projection.acceptance.test.ts
不得修改:
-
src/metadata-parser.ts -
src/binding-merge.ts -
src/parser.ts
6.6. 实施任务
-
删除或隔离 label resource 写入路径。
-
将
TitleLabel、AddressLabel和GeneratedAddressLabel的运行时语义迁移为 heading node 字段与 catalog entry。 -
删除
BlockTitleLabel、AnchorLabel、ReftextLabel、RoleLabel对 selector binding 的影响。 -
让 label catalog entry 只记录 heading owner、label kind 和 label value。
-
让
bindSelector返回标题节点 IRI。 -
多义 selector 返回所有候选 heading。
-
未绑定 selector 保留 selector literal,不生成 target heading。
-
删除
rdf:valuelabel resource 相关输出。
6.7. 测试任务
-
labels.test.ts断言 heading node 直接具有aat:headline。 -
labels.test.ts断言手动 ID 直接成为aat:addressLabel。 -
labels.test.ts断言 generated ID 直接成为aat:generatedAddressLabel。 -
labels.test.ts断言没有aat:TitleLabel、aat:AddressLabel、aat:GeneratedAddressLabelresource。 -
selector-binding.test.ts断言 xref target selector 只绑定标题 label。 -
selector-binding.test.ts断言 listing ID、table ID、inline anchor ID 不成为 xref target heading。 -
selector-binding.test.ts断言重复 headline 返回多义候选。 -
interdocument.acceptance.test.ts断言外部 xref 不打开外部文件。 -
heading-projection.acceptance.test.ts中 label 与 selector 相关断言解除允许失败标记。
6.8. 验收标准
-
公共图中不出现 label resource type。
-
rdf:value不再用于 label 表达。 -
selector binding 不读取外部文件。
-
selector 多义时不生成单一 target heading。
-
selector 未绑定时不生成虚构 target heading。
6.9. 验证命令
pnpm test -- test/rdf12-projection/labels.test.ts test/rdf12-projection/selector-binding.test.ts test/rdf12-projection/interdocument.acceptance.test.ts test/rdf12-projection/heading-projection.acceptance.test.ts
pnpm typecheck
6.10. 提交规则
git add src/rdf12-projection test/rdf12-projection
git commit --only -m "feat: bind rdf12 selectors to heading labels" -- src/rdf12-projection test/rdf12-projection
6.11. 审核规则
审核者必须检查 catalog 的 owner 集合只包含 heading。审核者必须检查 label value 没有进入 resource IRI。
6.12. 打回条件
出现以下任一情况,本批不通过:
-
label resource 仍出现在公共 RDF12 图中。
-
listing、table、anchor 或 payload label 参与 xref target binding。
-
多义 selector 选择第一个候选。
-
未绑定 selector 生成虚构 heading。
7. Batch 04:Xref 边与 Reifier
7.1. 批次目标
本批把 xref occurrence 投影迁移为标题之间的关系边和边证据。本批输出主 relation triple、aat:XrefEdge、rdf:reifies、source heading、target heading、target selector、display label、rel、raw 和回源坐标。
本批不处理 xref 普通字段谓词。本批不绑定 payload。
7.2. 上游门槛
-
Batch 03 状态为
通过。 -
Batch 03 提交 hash 已写入 批次状态台账。
7.3. 本批上下文包
执行者必须阅读:
-
docs/bookshelf/books/06-rdf12-line-projection/chapters/05-xref-edge.adoc -
docs/bookshelf/books/06-rdf12-line-projection/chapters/07-query-contract.adoc -
src/rdf12-projection/xref-projector.ts -
src/rdf12-projection/reifier.ts -
src/rdf12-projection/relation-predicate.ts -
src/rdf12-projection/selector-binding.ts -
test/rdf12-projection/xref-projector.test.ts -
test/rdf12-projection/reifier.test.ts -
test/rdf12-projection/relation-predicate.test.ts
7.4. 输入事实
xref 所在标题切片决定 source heading。xref target selector 绑定到唯一标题节点时决定 target heading。rel 决定关系谓词;没有 rel 时谓词是 aat:references。
边证据是关系边的属性承载面和回源证据。边证据不是标题节点。
7.5. 文件边界
修改:
-
src/rdf12-projection/xref-projector.ts -
src/rdf12-projection/relation-predicate.ts -
src/rdf12-projection/resource-identity.ts -
src/rdf12-projection/terms.ts -
test/rdf12-projection/xref-projector.test.ts -
test/rdf12-projection/reifier.test.ts -
test/rdf12-projection/relation-predicate.test.ts -
test/rdf12-projection/query-contracts.test.ts -
test/rdf12-projection/heading-projection.acceptance.test.ts
不得修改:
-
src/inline-occurrence-scanner.ts -
src/macro-argument-parser.ts -
src/parser.ts
7.6. 实施任务
-
将 xref resource type 从
aat:XrefOccurrence改为aat:XrefEdge。 -
将 local id 从
xref-l<line>-c<column>-o<ordinal>保持或迁移为xref-edge-l<line>-c<column>-o<ordinal>;若迁移,测试必须锁定新 local id。 -
将
aat:sourceNode改为aat:sourceHeading。 -
将
aat:targetNode改为aat:targetHeading。 -
将
aat:rawRel改为aat:rel。 -
保留
aat:targetSelector。 -
将 xref display text 写为
aat:displayLabelliteral。 -
在 source、target、predicate 均确定时生成主 relation triple。
-
用
rdf:reifies连接边证据到主 relation triple 的 triple term。 -
未绑定 target selector 时只保留边证据和 selector,不生成主 relation triple。
-
多义 target selector 时输出候选 heading,不生成主 relation triple。
-
rel无法映射合法 IRI 时保留aat:rel,不生成主 relation triple。
7.7. 测试任务
-
xref-projector.test.ts断言运力规则生成rel:depends-ontriple。 -
xref-projector.test.ts断言无rel时生成aat:referencestriple。 -
xref-projector.test.ts断言边证据类型为aat:XrefEdge。 -
xref-projector.test.ts断言边证据有aat:sourceHeading和aat:targetHeading。 -
xref-projector.test.ts断言边证据有aat:targetSelector、aat:displayLabel、aat:rel和aat:raw。 -
reifier.test.ts断言rdf:reifiesobject 是 triple term。 -
xref-projector.test.ts断言未绑定 selector 不生成主 relation triple。 -
xref-projector.test.ts断言多义 selector 不生成主 relation triple。 -
query-contracts.test.ts覆盖“查标题发出的边”查询。 -
heading-projection.acceptance.test.ts中 xref 边断言解除允许失败标记。
7.8. 验收标准
-
公共图中不出现
aat:XrefOccurrence。 -
relation triple 的 subject 和 object 均为 heading node。
-
rdf:reifies指向主 relation triple。 -
rel字段只选择谓词,不触发业务解释。 -
display label 不是 target heading identity。
7.9. 验证命令
pnpm test -- test/rdf12-projection/xref-projector.test.ts test/rdf12-projection/reifier.test.ts test/rdf12-projection/relation-predicate.test.ts test/rdf12-projection/query-contracts.test.ts test/rdf12-projection/heading-projection.acceptance.test.ts
pnpm typecheck
7.10. 提交规则
git add src/rdf12-projection test/rdf12-projection
git commit --only -m "feat: project rdf12 xref edges" -- src/rdf12-projection test/rdf12-projection
7.11. 审核规则
审核者必须检查边证据与标题节点集合分离。审核者必须检查未绑定和多义 selector 路径没有主 relation triple。
7.12. 打回条件
出现以下任一情况,本批不通过:
-
aat:XrefOccurrence仍作为公共类型输出。 -
relation triple 的端点不是 heading node。
-
rdf:reifiesobject 是 string literal。 -
display label 参与 selector binding 或 resource identity。
8. Batch 05:直接字段谓词
8.1. 批次目标
本批把 SurfaceAttribute resource 投影迁移为直接字段谓词。标题 attrlist named attributes 写为标题节点上的 aat:<name> literal。xref 普通 named attributes 写为 xref edge evidence 上的 aat:<name> literal。
本批不改变 payload raw。本批不解释字段名或字段值的业务语义。
8.2. 上游门槛
-
Batch 04 状态为
通过。 -
Batch 04 提交 hash 已写入 批次状态台账。
8.3. 本批上下文包
执行者必须阅读:
-
docs/bookshelf/books/06-rdf12-line-projection/chapters/02-heading-node.adoc -
docs/bookshelf/books/06-rdf12-line-projection/chapters/06-payload-and-attribute.adoc -
src/rdf12-projection/attributes.ts -
src/rdf12-projection/namespaces.ts -
src/rdf12-projection/literals.ts -
test/rdf12-projection/attributes.test.ts -
test/rdf12-projection/reference-links.acceptance.test.ts
8.4. 输入事实
标题 #id 是 address label。点号 role token 是 role。named attributes 才进入 aat:<fieldName> 谓词。
xref rel 和 payload 是控制字段。rel 可作为 aat:rel 保留。payload 必须保存为 aat:payloadSelector,不得占用 aat:payload。
8.5. 文件边界
修改:
-
src/rdf12-projection/attributes.ts -
src/rdf12-projection/resource-identity.ts -
src/rdf12-projection/xref-projector.ts -
test/rdf12-projection/attributes.test.ts -
test/rdf12-projection/reference-links.acceptance.test.ts -
test/rdf12-projection/heading-projection.acceptance.test.ts
允许创建:
-
src/rdf12-projection/field-predicate.ts -
test/rdf12-projection/field-predicate.test.ts
不得修改:
-
src/metadata-parser.ts -
src/macro-argument-parser.ts
8.6. 实施任务
-
删除
aat:SurfaceAttributeresource 创建路径。 -
删除
aat:hasAttribute输出。 -
删除属性表达中的
rdf:value。 -
将标题 attrlist named attributes 写到 heading node。
-
将 xref 普通 named attributes 写到 xref edge evidence。
-
保证字段值统一写为 string literal。
-
保证
rel不作为普通 xref attribute 重复处理。 -
保证
payload不作为普通 xref attribute 重复处理。 -
实现字段名到
aat:IRI 的稳定映射。 -
对不能直接作为 Turtle prefixed local name 的字段名使用 IRI-safe 编码。
-
在测试中覆盖简单字段名和需要编码的字段名。
8.7. 测试任务
-
attributes.test.ts断言kind=policy生成aat:kind "policy"。 -
attributes.test.ts断言status=active生成aat:status "active"。 -
attributes.test.ts断言owner=ops生成aat:owner "ops"。 -
attributes.test.ts断言 xrefweight=0.8生成aat:weight "0.8"。 -
attributes.test.ts断言rel=depends-on不生成第二个普通属性资源。 -
attributes.test.ts断言payload=rel-delivery-capacity只生成aat:payloadSelector。 -
attributes.test.ts断言公共图中没有aat:SurfaceAttribute。 -
field-predicate.test.ts断言字段名映射稳定。 -
heading-projection.acceptance.test.ts中直接字段谓词断言解除允许失败标记。
8.8. 验收标准
-
aat:<name>是源字段谓词,不是业务谓词。 -
字段值是源文档表面字符串 literal。
-
字段名映射确定且可重复。
-
属性不生成属性资源。
-
aat:payload不保存 selector 字符串。
8.9. 验证命令
pnpm test -- test/rdf12-projection/attributes.test.ts test/rdf12-projection/field-predicate.test.ts test/rdf12-projection/reference-links.acceptance.test.ts test/rdf12-projection/heading-projection.acceptance.test.ts
pnpm typecheck
8.10. 提交规则
git add src/rdf12-projection test/rdf12-projection
git commit --only -m "feat: project rdf12 direct field predicates" -- src/rdf12-projection test/rdf12-projection
8.11. 审核规则
审核者必须检查字段谓词没有被写成业务 class、业务 relation 或校验结论。审核者必须检查 payloadSelector 和 payload 谓词未混用。
8.12. 打回条件
出现以下任一情况,本批不通过:
-
公共图中出现
aat:SurfaceAttribute。 -
公共图中出现
aat:hasAttribute。 -
named attribute 仍通过
rdf:value表达。 -
xref
payloadselector 被写入aat:payload。
9. Batch 06:Payload 复杂属性
9.1. 批次目标
本批把 PayloadBlock resource 投影迁移为 payload 复杂属性对象。节点 payload 归属于标题节点。边 payload 归属于 xref edge evidence。
本批不展开 payload raw 内部结构。本批不把 payload block 作为标题节点、结构边端点或 xref target heading。
9.2. 上游门槛
-
Batch 05 状态为
通过。 -
Batch 05 提交 hash 已写入 批次状态台账。
9.3. 本批上下文包
执行者必须阅读:
-
docs/bookshelf/books/06-rdf12-line-projection/chapters/06-payload-and-attribute.adoc -
docs/bookshelf/books/06-rdf12-line-projection/chapters/08-worked-example.adoc -
src/rdf12-projection/payload-projector.ts -
src/rdf12-projection/xref-projector.ts -
src/rdf12-projection/selector-binding.ts -
test/rdf12-projection/payload-projector.test.ts -
test/rdf12-projection/payload.acceptance.test.ts
9.4. 输入事实
.payload block 通过 for 字段绑定标题节点。for 只在标题节点 label 空间中绑定。绑定失败或多义绑定时,payload 对象保留 selector 和回源坐标,不连接到标题节点。
.xref-payload block 通过 xref 的 payload 字段绑定边证据。xref edge evidence 使用 aat:payloadSelector 保存 selector 字符串,使用 aat:payload 连接复杂 payload 对象。
9.5. 文件边界
修改:
-
src/rdf12-projection/payload-projector.ts -
src/rdf12-projection/labels.ts -
src/rdf12-projection/label-catalog.ts -
src/rdf12-projection/resource-identity.ts -
test/rdf12-projection/payload-projector.test.ts -
test/rdf12-projection/payload.acceptance.test.ts -
test/rdf12-projection/query-contracts.test.ts -
test/rdf12-projection/heading-projection.acceptance.test.ts
不得修改:
-
src/metadata-parser.ts -
src/parser.ts
9.6. 实施任务
-
删除
aat:PayloadBlock公共类型输出。 -
删除
aat:hasPayload和aat:payloadOf作为公共 payload 关系。 -
使用
aat:payload从 heading node 连接节点 payload 对象。 -
使用
aat:payload从 xref edge evidence 连接边 payload 对象。 -
payload 对象写入
aat:payloadId。 -
payload 对象写入
aat:payloadKind,节点 payload 使用"node",边 payload 使用"edge"。 -
payload 对象写入
aat:format。 -
payload 对象写入
aat:raw。 -
payload 对象写入
aat:relativePath、aat:startLine、aat:endLine。 -
payload 对象写入
aat:contentStartLine和aat:contentEndLine。 -
节点 payload 保留
aat:forSelector。 -
边 payload 不挂到 source heading 或 target heading。
-
payload id 不进入 payload object identity。
-
payload raw 内部 JSON、YAML、TOML、XML 字段不生成 RDF triple。
9.7. 测试任务
-
payload-projector.test.ts断言.payloadblock 绑定到 heading node 的aat:payload。 -
payload-projector.test.ts断言.xref-payloadblock 绑定到 xref edge evidence 的aat:payload。 -
payload-projector.test.ts断言 payload 对象包含 payloadId、payloadKind、format、raw、relativePath、line span 和 content line span。 -
payload-projector.test.ts断言 unboundfor不连接 heading node。 -
payload-projector.test.ts断言 ambiguousfor不连接 heading node。 -
payload-projector.test.ts断言 missing xref payload selector 不连接 payload 对象。 -
payload.acceptance.test.ts断言delivery-policy-payload是节点 payload。 -
payload.acceptance.test.ts断言rel-delivery-capacity是边 payload。 -
payload.acceptance.test.ts断言 payload raw 中的 JSON key 不成为 RDF predicate。 -
heading-projection.acceptance.test.ts中 payload 断言解除允许失败标记。
9.8. 验收标准
-
payload 是复杂属性对象,不是标题节点。
-
payload 不参与
aat:containsDirectly。 -
payload 不参与
aat:childOrder或aat:documentOrder。 -
payload 不作为 xref target heading。
-
xref
payloadselector 和aat:payload对象谓词不混用。
9.9. 验证命令
pnpm test -- test/rdf12-projection/payload-projector.test.ts test/rdf12-projection/payload.acceptance.test.ts test/rdf12-projection/query-contracts.test.ts test/rdf12-projection/heading-projection.acceptance.test.ts
pnpm typecheck
9.10. 提交规则
git add src/rdf12-projection test/rdf12-projection
git commit --only -m "feat: project rdf12 payload complex properties" -- src/rdf12-projection test/rdf12-projection
9.11. 审核规则
审核者必须检查 payload raw 没有被解析为业务图。审核者必须检查边 payload 没有挂到 source heading 或 target heading。
9.12. 打回条件
出现以下任一情况,本批不通过:
-
公共图中出现
aat:PayloadBlock。 -
payload 使用
aat:hasPayload或aat:payloadOf作为公共契约。 -
payload JSON 字段进入 RDF graph。
-
xref payload 连接到 relation endpoint。
-
payload id 进入 payload resource IRI。
第四部:公共出口与最终门禁
这一部锁定 rdf12 公共出口、查询契约、书稿一致性和最终验收。
10. Batch 07:公共契约与最终门禁
10.1. 批次目标
本批锁定 rdf12 公共出口、查询契约、序列化行为和最终验收。本批删除迁移期间允许失败标记,并确认旧 RDF12 对象不再出现在公共图中。
10.2. 上游门槛
-
Batch 06 状态为
通过。 -
Batch 06 提交 hash 已写入 批次状态台账。
10.3. 本批上下文包
执行者必须阅读:
-
docs/bookshelf/books/06-rdf12-line-projection/chapters/07-query-contract.adoc -
docs/bookshelf/books/06-rdf12-line-projection/chapters/08-worked-example.adoc -
src/index.ts -
src/cli.ts -
src/rdf12-projection/turtle-serializer.ts -
src/rdf12-projection/json-ld-serializer.ts -
test/rdf12-projection/public-api.test.ts -
test/rdf12-projection/roundtrip.test.ts -
test/rdf12-projection/query-contracts.test.ts
10.4. 输入事实
公共入口已经存在。最终批次的对象不是增加入口,而是证明现有入口输出 06 号书定义的标题投影图。
10.5. 文件边界
修改:
-
src/index.ts -
src/cli.ts -
src/rdf12-projection/turtle-serializer.ts -
src/rdf12-projection/json-ld-serializer.ts -
test/rdf12-projection/public-api.test.ts -
test/rdf12-projection/roundtrip.test.ts -
test/rdf12-projection/query-contracts.test.ts -
test/rdf12-projection/heading-projection.acceptance.test.ts -
test/cli.test.ts
允许修改:
-
README.md -
CHANGELOG.md
不得修改:
-
src/parser.ts -
src/asciidoctor-adapter.ts
10.6. 实施任务
-
删除 Batch 00 中设置的允许失败标记。
-
确认
rdf12(document, options)返回 graph、prefixes、relativePath、document/source/projection/projectionActivity IRI、ttl 和 jsonLd。 -
确认 CLI
--format rdf12输出 Turtle。 -
确认 CLI
--format rdf12-json-ld输出 JSON-LD。 -
确认 CLI 不新增
rdf、ttl或turtle公共 format。 -
确认 Turtle serialization 能表达 RDF 1.2 triple term reifier。
-
确认 JSON-LD serialization 保留 triple term 结构。
-
更新 query contract tests,使它们覆盖 06 号书查询表面。
-
更新 README 中 RDF12 描述,使它不承诺旧结构资源。
-
更新 CHANGELOG,记录 RDF12 public graph 对象收敛为标题投影图。
10.7. 查询契约验收
query-contracts.test.ts 必须覆盖:
-
按
aat:addressLabel查标题。 -
按
aat:headline查标题。 -
读取标题自身
aat:raw。 -
查询直接子标题,并按
aat:childOrder排序。 -
使用 property path 查询标题子树。
-
查询全局 heading preorder,并按
aat:documentOrder排序。 -
查询标题发出的 xref edge。
-
查询边 payload。
-
查询节点 payload。
-
按直接字段谓词查询标题。
10.8. 负验收
最终图不得包含以下类型:
-
aat:Paragraph -
aat:ListingBlock -
aat:TableBlock -
aat:AnchorTarget -
aat:PayloadBlock -
aat:SurfaceAttribute -
label resource 类型
-
aat:XrefOccurrence
最终图不得包含以下旧谓词作为公共契约:
-
aat:hasAttribute -
aat:hasLabel -
aat:hasPayload -
aat:payloadOf -
aat:sourceNode -
aat:targetNode -
aat:rawRel -
aat:previousSibling
10.9. 验证命令
pnpm test -- test/rdf12-projection
pnpm test -- test/cli.test.ts
pnpm typecheck
pnpm lint
pnpm build
pnpm pack:check
pnpm smoke:cli
pnpm --dir docs/bookshelf test
pnpm --dir docs/bookshelf run build
pnpm check 可以作为最终聚合命令执行。审核包必须列出实际运行的完整命令和结果。
10.10. 提交规则
git add src test README.md CHANGELOG.md docs/bookshelf/books/07-rdf12-heading-projection-implementation-plan
git commit --only -m "feat: finalize rdf12 heading projection contract" -- src test README.md CHANGELOG.md docs/bookshelf/books/07-rdf12-heading-projection-implementation-plan
10.11. 审核规则
审核者必须从 public API、CLI、Turtle、JSON-LD 和 graph tests 五个表面检查同一对象。任一表面仍暴露旧结构资源时,本批不得通过。
10.12. 打回条件
出现以下任一情况,本批不通过:
-
任一允许失败标记仍存在。
-
旧 RDF12 类型或旧谓词出现在公共契约测试中。
-
CLI 输出与 public API 输出不是同一 projection。
-
Turtle roundtrip 丢失 reifier triple term。
-
README 或 CHANGELOG 描述旧结构图为当前 RDF12 对象。
Appendix A: 阶段审核包模板
每个批次完成后必须提交审核包。审核包是批次事实记录,不是进度汇报。
A.1. 批次信息
| 批次编号 |
|
| 批次名称 |
|
| 提交 hash |
|
| 执行者 |
|
| 审核者 |
|
| 审核状态 |
|
A.2. 修改文件
src/rdf12-projection/...
test/rdf12-projection/...
docs/bookshelf/books/07-rdf12-heading-projection-implementation-plan/...
文件列表必须只包含本批提交中的路径。
A.3. 完成范围
本节列出本批已经实现并由测试覆盖的对象事实。
- <对象事实 1>
- <对象事实 2>
- <对象事实 3>
完成范围不得写入“基本完成”“大概完成”“后续完善”等状态词。
A.4. 未处理对象
本节列出本批边界外的对象。边界外对象必须指向后续批次或明确说明不属于本计划。
- <对象>:归属 Batch NN。
A.5. 已运行命令
pnpm test -- ...
pnpm typecheck
命令必须是实际运行过的命令。不得把计划运行的命令写成本节内容。
A.6. 命令结果
<命令 1>: PASS
<命令 2>: PASS
失败命令必须保留失败输出摘要,并说明失败是否属于本批允许失败集合。
A.7. 规约检查清单
-
本批没有修改批次边界外文件。
-
本批没有引入全局打回条件。
-
本批测试覆盖了正向事实。
-
本批测试覆盖了必要负向事实。
-
本批 public graph 与 06 号书对象语言一致。
A.8. 审核结论
| 结论 |
|
| 理由 |
|
| 后续动作 |
|
Appendix B: 批次状态台账
本台账记录批次事实。状态字段只使用 未开始、执行中、待审核、打回 和 通过。
| 批次 | 名称 | 状态 | 提交 hash | 审核记录 |
|---|---|---|---|---|
Batch 00 |
基线与迁移护栏 |
通过 |
8458ebeb81666b82a2b48c481fabc9426fd3c3d0 |
|
Batch 01 |
标题节点与标题切片 |
通过 |
2645741c6f3422cb271b150739f73ad2f8739a5b |
|
Batch 02 |
标题结构边 |
通过 |
d10a0a712fd023a0bf6b9a44d4e00fb1fa97c989 |
|
Batch 03 |
标题 Label 空间与 Selector Binding |
通过 |
69ed418645dda07d00c6286601f506dcdf613c12 |
|
Batch 04 |
Xref 边与 Reifier |
通过 |
0deadc878cd20f3c1ff08cb548a3e04172f9d63f |
|
Batch 05 |
直接字段谓词 |
通过 |
fb712b3992e4316bded427ed0f97558ded43b996 |
|
Batch 06 |
Payload 复杂属性 |
通过 |
c1b3ecac0b1d40238439af5dada49517ce312e72 |
|
Batch 07 |
公共契约与最终门禁 |
通过 |
49a7c602997f35aabcad493ecb792064ef599edd |
B.1. 台账规则
-
批次提交产生后,提交 hash 必须写入本表。
-
审核包路径必须写入审核记录。
-
批次被打回时,审核记录必须写明打回对象和返工批次。
-
下一批次开始前,上一批次状态必须为
通过。