Repository navigation
docs: P0a contracts, schema, fixtures, and D023 errata - #391
Conversation
|
@zengchuang-hw @amy-why-3459 请二位对本 P0a 契约/schema/fixtures 与 D023 勘误作正式 review。 合入须等待该正式 review 与常规 repository review。合入本身不等于 #387 验收框可勾选,也不等于 P0b/K01 已接受。本 PR 只入仓文档/schema/fixture/Decision,不搬源码、不改现行硬门禁、不实施 P0b/K01/H01/CLI。 |
There was a problem hiding this comment.
PR review verdict — DO NOT PASS
Reviewed base 4b3afa55f278ca314e07d5f8acbd0a18f3fa72bf and head b48eac04fc533807455b9c7f7b4d2373b014129b (full-diff first review; no prior review). Dong-bot review of the P0a contract set. Two blockers remain. I will re-read after the author pushes.
Blockers
-
D023-2 / T37 has two owners.
docs/contracts/D020-D022.md:157places the pre-start code-digest check in H02.docs/contracts/GATE-STORE-AND-FIRST-PRS.md:102limits H02 to ordinary command mode with evaluation-mode fields null. H02-1–H02-6 do not name T37. H02-3 is candidate-byte identity mismatch, a different case from the entry code digest.docs/contracts/SCHEMA-AND-SEMANTICS.md:106(V32) anddocs/contracts/ACCEPTANCE-T01-T40.md:57(T37): the mismatch outcome (zero start, submitnot_started, orExecutionPersistenceErrorif that submit fails; unresolvable entry →not_performed/unknown with no fabricated mismatch) applies in evaluation mode, whereCommandStep.expected_code_sha256must equalprepared.recipe.code_sha256. Plain command mode requires that field to be null, so an H02 that only nulls evaluation-mode fields never reaches the T37 mismatch path.
Trigger: evaluation-mode spec, declared step digest equals the frozen recipe, actual entry bytes differ.
Expected correction: name one slice in both files and add an acceptance id for T37's two outcomes. If H02 owns the non-null path, the H02 row has to include that case. If a later H slice owns it, remove the assignment atD020-D022.md:157.
-
Schema and fixtures were outside this review's diff, so A00-1 and A00-2 are unverified.
The seededpr/diff.patchends insidedocs/contracts/diagrams/387-7.mmd(a cutMiline, then a truncation marker). I did not readschemas/contract-v1.schema.json,schemas/INDEX.json,fixtures/**, or the rest of387-7.mmd.
Unverified claims this PR treats as acceptance:CommandStep.expected_code_sha256required and null-or-Sha256; definition count 106 in the schema file;AppsExecuteRequest.attemptrequired;StorageConfigunreferenced by anyApps*Request; ExecutionSpec /request_digestgoldens updated for the new field;fixtures/d023-conformance-cases.jsonvectors for T36–T40.
DTO-FIELD-INDEX.mdlists 106 names and includes the new field. That count is the index text only.
The truncation is a review-input limit. I will read the schema and fixtures on the next head before any PASS.
Checked in the prose that was present
- Design baseline SHA matches this PR's base
4b3afa55f278ca314e07d5f8acbd0a18f3fa72bf. - D023-1 / T36 / V31 agree: prepare delivers protocol bytes and a per-role closure entry outside
PreparedEvaluation; projection P strips only a declaredArtifactRef.location; internal field changes recomputeprepared_id; a missing resource or a failed archive yields noPreparedRef. - D023-3 / T38 / V33 agree:
ContextProvider.collectreturns an in-processDeliveredContextDraftwith no uncommittedArtifactRef; the draft is not a$defsentry; H seals and writes; Apps does not write the H RunStore. - D023-4 / T39 / V34 and the
AssessorErrorrow agree: unknown or absent primary key →InvalidRequest/ exit 2 and the assessor is not called; key present but omitted from the B result →AssessorError; archive failure stays exit 6 withassessment_refnull; 0/8/9 only after a complete archived result. - D023-5 / V35 agree with the port figures: the host calls
allocate_attempt, savesAppsExecuteRequest(attempt required), then the CLI runs;executedoes not allocate; replay reuses the saved attempt and returns the originalRecordReforRecoveryRequired. - T01–T40 are labeled specifications. The text states that pytest, execute, and assess have not been run. Status stays Proposed.
Optional
docs/contracts/diagrams/387-6.mmd:73goes from the input-identity break toH->>Twith no pre-start digest branch.FIGURES-ALL.md:237includes that branch.387-1.mmd,387-5.mmd, and371-1.mmdomit theexpected_code_sha256and in-process closure labels that the English figures include. The figure preface says figures are explanatory and that V01–V35 plus the schema stay authoritative, so this leaves T37 unchanged. Syncing the.mmdsources would keep both copies on the same path.docs/contracts/D020-D022.md:6says the D021 error table and re-entry table are unchanged. TheAssessorErrorcell adds the D023-4 missing-key case, and the re-entry section adds a D023-5 replay note. The table text is the rule; the summary line should mention those edits.- V32 sends spec-time violations through the general bad-spec rule (
InvalidExecutionSpec) and sends runtime mismatch to T37. A direct sentence for "plain mode andexpected_code_sha256non-null" and "evaluation mode andexpected_code_sha256≠recipe.code_sha256" would match how V28/T28 nameInvalidExecutionSpec. - T39(b) leaves the exit code to the D022 matrix (
PublicError→ exit 2). Restating exit 2 on that row would keep it distinct from exit 8.
Not verified
- jsonschema, golden-byte recomputation, and CI were not run.
- The schema file,
INDEX.json, and fixtures were outside the seeded diff (blocker 2). - The reviewed portion has no
src/or gate diff. A00-3 (old evaluate / run 0/1/2) was not executed.
This review does not approve and does not change P0a scope.
|
已 review 本 PR 当前 head 本地已核对通过
需要确认或修改
说明:本次只核对了 schema、fixtures、索引之间的机器一致性,以及 D023-2 的字段落点,没有逐条评审 CURRENT-DESIGN、D020–D022、D023 和 T01–T40 的设计取舍是否与 #387、#371 讨论的结论完全一致。这部分仍需按正文所说做正式架构 review。 Reviewed: |
|
已按首轮意见在原 PR 上追加提交 处理如下:
独立核验(仓库外脚本,非 CI、非运行时实现测试):198 项,0 失败,其中包括原 188 项以及本次对 本地或评审方的机器一致性核对,只说明文件可复核,不构成正式批准。P0b 仍须正式架构 review 后才允许 K01;合入本 PR 不等于勾选 #387 验收框。 |
|
增量 review: 已确认修复
还剩一处不一致(请确认)
本轮只做了文件级复核:grep、schema 定义计数、 Reviewed: |
There was a problem hiding this comment.
LGTM
PR review verdict — PASS
Reviewed base 4b3afa55f278ca314e07d5f8acbd0a18f3fa72bf and head 31ae580eb835562dee0cf733d652405218b58dc7.
Incremental range b48eac04fc533807455b9c7f7b4d2373b014129b..31ae580eb835562dee0cf733d652405218b58dc7. Dong-bot re-review after the prior DO NOT PASS.
Earlier finding
D023-2 / T37 two owners is resolved. H02 stays ordinary command mode: evaluation-mode fields, including expected_code_sha256, stay null, and acceptance stays H02-1–H02-6. H02-3 stays the candidate/input identity mismatch (T25/V28) not_started record. T37 is the later H evaluation-mode binding/execute slice, with two outcomes:
- T37-N1: expected already equals the frozen
recipe.code_sha256, actual entry digest differs → zero start, submitnot_startedwith mismatch facts, orExecutionPersistenceErrorif that submit fails. - T37-N2: unresolvable entry →
not_performed/unknown,RuntimeBinding.code_sha256stays null, no fabricated mismatch.
Spec-time violations (ordinary command non-null, or evaluation-mode expected null / not equal to the frozen recipe) are pre-registration InvalidExecutionSpec: no start and no record. The “recipe declares a code digest” branch is gone; OperationRecipe.code_sha256 is treated as a required non-null Sha256.
Same split in:
docs/contracts/ACCEPTANCE-T01-T40.mdT37 (line 57)docs/contracts/D020-D022.mdH02 bullet (line 157)docs/contracts/GATE-STORE-AND-FIRST-PRS.mdH02 row (line 102) and the new “After H02, before evaluation-mode execute” bulletdocs/contracts/SCHEMA-AND-SEMANTICS.mdV32 (line 106)docs/contracts/D023.md,docs/contracts/DTO-FIELD-INDEX.md, and theCommandStep$commentindocs/contracts/schemas/contract-v1.schema.jsondocs/contracts/fixtures/d023-conformance-cases.json: both edited vectors droprecipe_declares_code_sha256; the evaluation-mode null-expected vector now says V32 rejects that null
Also in this range
docs/contracts/fixtures/MANIFEST-d023.jsonis a current-example documentation anchor. It does not replacefixtures/t108-v4/MANIFEST.json. Itsrequest_digestissha256:plus the recorded file sha256 (be0fb47b3b9b8b064a42758ec5b83a20cab92359b2fd50f9ad68305cf7517980), andexpected_code_sha256matches the hash already printed indocs/contracts/fixtures/README.md(ba351e8f96c162ed9c32309f24b1d2d75d11a7369168571ebbb0a79d13315332). Apps copiesprepared.recipe.code_sha256intoexpected_code_sha256; H computesrequest_digestat registration/claim from the final canonical spec bytes, including after V24seal_generationwhen that seal adds anInputSpec.- Historic t108-v4 verification now maps manifest paths
fixtures/<name>tofixtures/t108-v4/<name>and keeps the historic manifest bytes. - The D023 change-surface sentence in
D020-D022.mdnow describes the D021 delta as the D023-4AssessorErroromission row plus the D023-5 disconnect-replay note. docs/contracts/README.mdstates this PR adds notests/or.github/consistency guards and does not take that scope into P0b.
Not verified here
- SHA-256 and byte length of
docs/contracts/fixtures/execution-spec-d023.jsonwere not recomputed. That file is unchanged in this range, so its bytes are not in the incremental patch. The new manifest claims 2069 bytes andbe0fb47b3b9b8b064a42758ec5b83a20cab92359b2fd50f9ad68305cf7517980. - Historic 22-file t108-v4 hashes, the schema definition count, and the D021
AssessorError/ replay table bodies were not re-read; those bodies are outside this incremental diff. - Tests and CI were not run. The diff is docs, schema comment, and fixtures only.
Optional follow-ups
D023.mdnamesInvalidExecutionSpecon the ordinary-mode non-null bullet. The evaluation-mode null / inequality rejection is stated in V32 and T37.- The evaluation-mode null-expected vector still describes a V32 reject and zero starts. It does not name
InvalidExecutionSpecor the no-record outcome.
No outstanding blocker in this range.
把普通命令非 null、评测 expected 为 null、以及缺 key 三类负向向量 移出 coverage.T37 与 T37 验收,分别改为 V32-N1、V32-N2 与 SCHEMA-N1; 并补评测 expected 非 null 却不等于冻结 recipe 的 V32-N3。 V32 规格期违规为 InvalidExecutionSpec,不启动、不造 record。 SCHEMA-N1 为 schema 层缺 key 拒绝,不得把 schema validator 等同运行时 PublicError。T37 仅保留 T37-P1/N1/N2(expected 已等于 recipe 后再核 对实际入口)。不改 schema 约束,不动历史 golden。
|
对 #391 (comment) 的增量修复已推到本 PR。 新 head: 前四点你已确认保留不变。针对本条评论中 T37 向量与正文不一致的点,按既定 Decision 做了最小修复:
仓库外独立校验( 本回复不加审查提醒、不催审。本 PR 未加 tests/源码/门禁,也未合并。 |
amy-why-3459
left a comment
There was a problem hiding this comment.
LGTM
增量 31ae580eb835562dee0cf733d652405218b58dc7 … 3fe74f4a7cd3dacb4072d0aa8d37b0c0c8cecbb5:T37-N3/N4/N5 已改列为 V32-N1/N2 与 SCHEMA-N1,并补了 V32-N3,expected_outcome 写明了 InvalidExecutionSpec、不建 record。coverage.T37 现在只剩 P1/N1/N2。我本地复核过:coverage 与 case 一一对应,没有残留的 T37-N3..N5 引用,新增的示例摘要格式合法,schema 未改,仍是 106 个定义,MANIFEST-d023 的字节和哈希也仍然一致。我之前提的意见都已处理。本 Approve 只针对契约文件的机器一致性;设计层面仍按 PR 正文所说走正式架构 review。
|
@Dong1017 Can you review again |
|
PR review verdict — DO NOT PASS 不能对声称的新 head 仍开放
作者说明(https://github.com/InferMatrixLab/InferRSI/pull/391#issuecomment-6787660189)称 已在
本轮未核对
合入本 PR 仍不等于勾选 #387 验收框,也不等于 P0b/K01 已接受。下一次能读到 Dong-bot |
|
对 #391 (comment) 的澄清。 该意见是 conversation comment,不是 formal review,提交于 Asia/Shanghai 2026-11-11 14:02:20(2026-11-11T06:02:20Z)。它自身写明:不能对声称的新 head
本轮已在当前 head 独立打开上述 6 个文件的完整内容,确认该评论标为「仍开放」的 T37 / 规格期分流已在
该评论将「上一次有文件级结论的独立 review」停在 GitHub checks(head 本轮未改文件、未新开 commit、未合并。合入仍等待第二张合格 Approve;合入不等于勾选 #387 验收框,也不等于 P0b/K01 已接受。 |
Rename ordinary contract documents to lowercase kebab-case, translate human-readable text to English, sync the eight mermaid sources with figures.md, and restate D022 exit 2 on the T39(b) AssessorError row. Schema, fixture data, and historic golden bytes are unchanged. Agent-assisted-by: Grok Bot Signed-off-by: GUOGUO <xwdong1998@163.com>
|
@amy-why-3459 @zengchuang-hw Please re-review this PR on the current head. This update is a readability pass plus the remaining review nits: ordinary contract documents were renamed to lowercase kebab-case and rewritten in English, the eight mermaid sources were synced with New head: Entry: Former → current names:
A new head dismisses previous Approves, including the earlier machine-consistency Approve on |
|
增量 review: 本地已核对通过
需要确认或修改
说明:本轮核对的是机器可查的一致性,包括编号和哈希集合、链接、figure 同步、数据文件字节,以及 T39(b) 与 D022 是否对应。英文改写有没有逐句保持原有语义,我没有逐条对照中英文本,这部分请正式架构 review 一并看。 Reviewed: |
Replace the leftover former filename in the scope string of fixtures/d023-conformance-cases.json. Vectors, coverage, schema, and historic golden bytes are unchanged. Agent-assisted-by: Grok Bot Signed-off-by: GUOGUO <xwdong1998@163.com>
amy-why-3459
left a comment
There was a problem hiding this comment.
LGTM
PR review verdict — PASS
Reviewed base 4b3afa55f278ca314e07d5f8acbd0a18f3fa72bf and head 2640b954d54188b40beb938a67ee57c1165a68db. Incremental range: 892443898ed016c770e60a92ca377c3981e87f96 → 2640b954d54188b40beb938a67ee57c1165a68db (one commit, 2640b954).
- My only open point from the previous comment is fixed. The
scopefield infixtures/d023-conformance-cases.jsonL5 now points toacceptance-criteria.md. This commit changes only that string. The JSON still parses, andcoverageis unchanged (T36/T37/V32/SCHEMA/T38/T39/T40). No manifest anchors this file, so no recorded hash is affected. - Outside the README name-map table,
docs/contractshas no remaining references to old file names. - What I checked at
89244389still holds. The schema and the historical fixture bytes are unchanged. The sets of ID numbers and hashes are complete, all links resolve, and the 8 figures matchfigures.md. - CI at this head:
lint-and-smoke,declarations,pr-referencesandinstalled-package (3.10/3.11)have passed.full-check (3.10/3.11)was still running when I looked. The previous head with the same code passed all checks.
As before, this Approve covers only the machine consistency of the contract files. The design decisions and the semantic accuracy of the English rewrite still go through formal architecture review, as the PR body says.
|
@Dong1017 PTAL |
|
Still open on head
That is the only open item in the file-level pass on This reply uses the PR body and thread. The tree and diff were not opened again here, so the L5 string is still the open item until a later head shows the edit or the README mapping. Sentence-level fidelity of the English rewrite remains with the formal architecture review. A fix is a new head; the machine-consistency Approve on Dong-bot |
zengchuang-hw
left a comment
There was a problem hiding this comment.
PR review verdict — DO NOT PASS
Reviewed base 4b3afa55f278ca314e07d5f8acbd0a18f3fa72bf and current head 2640b954d54188b40beb938a67ee57c1165a68db. This is my first published review on #391, consolidating the full review at b48eac04 and the incremental ranges through 31ae580e, 3fe74f4a, 89244389, and 2640b954. Latest incremental range: 892443898ed016c770e60a92ca377c3981e87f96 → 2640b954d54188b40beb938a67ee57c1165a68db.
Required before approval
P2: T36-N2 must distinguish the full payload byte digest from the projected semantic identity.
fixtures/d023-conformance-cases.json:106–113 correctly says that moving only a schema-declared ArtifactRef.location is stripped by P and preserves prepared_id, but its invariant then states “a distinct canonical byte change yields a distinct identity” without qualifying the identity or the bytes.
I reproduced the distinction with the checked-in fixtures/t108-v4/prepared.json: change only protocol.location to elsewhere/protocol.json. Both objects validate. Their full canonical payload SHA-256 values differ (8450cf59…a3d30ff versus acfe6637…fbcd72d), while the recomputed projected prepared_id stays sha256:7f481e7e61c98343015118d7dcd98806abe863398b2c16dacac125d2d00ed486. This follows the identity table.
Please name the two domains explicitly: a changed full canonical payload requires a new payload/artifact byte digest, while prepared_id is recomputed from its specified P-projected input and is unchanged for a location-only move. Qualify or replace the unbounded invariant so an implementation cannot turn relocation into a semantic identity change. This requires no change to historical golden bytes. The same distinction is now explicit in the #371 T36 clarification: location-only relocation preserves prepared_id, while the new archive digest follows the new prepared bytes; #391's unqualified invariant has not yet been aligned.
Resolved in the reviewed increments
- T37 ownership is consistently the later H evaluation-mode bind/execute slice, not ordinary-command H02.
- Spec-time V32 cases and the schema missing-key case are separated from T37; expected non-null but unequal to the recipe is covered. No-start/no-record and error layers are explicit.
- The current D023 spec has its byte/
request_digestanchor; historical manifest paths are mapped without rewriting their bytes. - All eight diagram sources now match
figures.md; T39(b) restates the existing D022AssessorError→ exit 2. 2640b954fixes the last old filename in the conformance fixture's scope string. I agree that Amy's latest machine-consistency point is closed; the old-name bot comment does not reopen it.
Non-blocking wording fixes
- schema-and-semantics.md:42: the English rewrite says “no … trailing space”; restore “no insignificant spaces.” For example,
{"x": 0}has no trailing space but is still noncanonical. The overview and unchangedspacesnegative vector already preserve the correct rule. - p0a-contract-errata.md:66 and the matching DTO note call all four fields nullable.
AppsResultV1.exit_codeis required and non-null; qualify which fields permit null. - fixtures/README.md:23 says the historic manifest's own
scopelabels it historic, but that field does not. Correct the README rather than rewriting the frozen manifest.
Verification and limits
- Read the repository review/contribution guidance, #387 t115 and #371, actual full changed files, later diffs, and current discussions. Compared the English rewrite against the preceding Chinese contracts.
- Independently checked Draft 2020-12 validity, 106 definitions/544 references, required/closed fixed objects, 13 historical positive documents and seven schema negatives, all 22 historical file hashes, five identity/request goldens, typed projection counterexamples, current D023 canonical bytes (2069) and
request_digestsha256:be0fb47b3b9b8b064a42758ec5b83a20cab92359b2fd50f9ad68305cf7517980, 23 vector IDs/coverage, 17 strict-byte negatives, and four canonical-byte negatives. - On
3fe74f4a, reran 54 CPU regression tests covering smoke, claims, legacy runtime, module boundaries, and import gates. On89244389, reran 16 smoke/claim/boundary/import tests, checked 92 relative Markdown links and all eight diagram-source matches, and verified schema/fixture byte preservation. The source/tests are unchanged in these later documentation-only increments; I am not claiming a fresh 54-test run on this head. - For
89244389→2640b954, verified the complete remote file blob and parsed JSON: only the scope filename changes; all 23 cases, coverage, and digest examples are identical. Current head's seven GitHub checks are successful. - No full local repository suite, local wheel/host/cross-language run, or production D023 runtime acceptance was executed. Documentary vectors are not implemented runtime tests. P0b's separate manifest/gate review is outside this PR's implementation scope.
This COMMENT records the outstanding review finding; it is not an approval or acceptance of #387/P0b/K01.
Qualify T36-N2 so a location-only ArtifactRef move changes the complete payload byte digest but leaves the P-projected prepared_id unchanged. Restore the canonical "no insignificant spaces" rule, state that AppsResultV1.exit_code is required and non-null, and correct the historic manifest scope wording in the fixtures README. Schema, historic golden bytes, and digest anchors are unchanged. Agent-assisted-by: Grok Bot Signed-off-by: GUOGUO <xwdong1998@163.com>
|
Please re-review this PR on the new head This commit addresses the findings in #391 (review) and aligns T36-N2 with the #371 clarification at #371 (comment):
Schema, historic goldens, manifests, and digest anchors are unchanged. Independent checks: 22 historic file hashes, D023 example |
amy-why-3459
left a comment
There was a problem hiding this comment.
LGTM
增量 review:2640b954d54188b40beb938a67ee57c1165a68db … 8885b729621cbd17f8389f213081f051df61c65a,新增 1 个 commit(8885b729),只改了 5 个 docs/contracts/ 文件(+7/−6)。
这次增量逐条处理了 @zengchuang-hw 在 review 5856112965 中的意见,我核对如下:
- T36-N2(P2):
fixtures/d023-conformance-cases.jsonL105–117 现在明确区分了两个摘要域。只移动 schema 声明的ArtifactRef.location时,完整 canonical payload 的字节摘要会变,而经 P 投影计算的prepared_id不变。原来那条没有限定的不变式已经替换为两条有限定的不变式。prohibited_inferences保留不变。JSON 可以正常解析,共 23 个 case,coverage的键(T36/T37/V32/SCHEMA/T38/T39/T40)没有变化。 - canonical 空格规则:
schema-and-semantics.mdL42 已改回“no insignificant spaces”,与current-design.mdL190 一致。docs/contracts下已没有残留的“trailing space”写法。 AppsResultV1.exit_code:p0a-contract-errata.mdL66 和dto-field-index.mdL126 现在写明exit_code必填且非 null,另外三个字段可以为 null。这与 schema 一致:exit_code是非 null 的enum,error、primary_scope、primary_claim_id都是anyOf [..., null],四个字段都在required中。schema 仍是 106 个$defs。- fixtures/README.md L23:已不再声称历史 manifest 的
scope字段自带 historic 标记。我核对过t108-v4/MANIFEST.json的scope原文,确实没有这个标记,manifest 本身也没有改。 - 这个 commit 没有动 schema、历史 golden、
MANIFEST-d023.json或任何 manifest 锚点。 - 我查看时,本 head 的 CI 中
lint-and-smoke、declarations、pr-references、installed-package (3.10/3.11)、full-check (3.11)均已通过,full-check (3.10)仍在运行。
和之前一样,这个 Approve 只覆盖契约文件的机器一致性。设计决策和英文改写的语义准确性,仍按 PR 正文所说走正式架构 review。
zengchuang-hw
left a comment
There was a problem hiding this comment.
LGTM
PR review verdict — PASS
Reviewed base 4b3afa55f278ca314e07d5f8acbd0a18f3fa72bf and head 8885b729621cbd17f8389f213081f051df61c65a. Incremental range: 2640b954d54188b40beb938a67ee57c1165a68db → 8885b729621cbd17f8389f213081f051df61c65a, following my previous review and the re-review request. This is an agent-assisted independent review for zengchuang-hw, under delegated scope to review this P0a PR and approve a verified revision with no outstanding blockers.
Findings closed
- T36-N2: the revised outcome and invariants explicitly distinguish the complete payload/artifact byte digest from the P-projected
prepared_id. I reran the location-only counterexample: the full payload hashes differ (8450cf59…a3d30ff→acfe6637…fbcd72d), whileprepared_idremainssha256:7f481e7e61c98343015118d7dcd98806abe863398b2c16dacac125d2d00ed486. Both payloads validate. This agrees with the identity table and the #371 clarification; it does not permit arbitrary internal relocation. - The canonical rule again says no insignificant spaces.
- Both AppsResult notes now agree with the schema: all four fields must be present;
exit_codeis non-null, whileerror,primary_scope, andprimary_claim_idmay be null. Independent missing/null mutation checks confirm this. - The README correctly locates the historic label outside the frozen manifest's
scope. Historical bytes were not rewritten.
No remaining blocker from my previous review, and no new blocker found in the five-file increment.
Verification on this revision
- Read the complete five changed blobs and verified their Git blob hashes. Parsed vector changes are confined to T36-N2's location-only outcome and invariants; the 23 IDs and coverage remain intact. Source, tests, schema, historical goldens, manifests, and digest anchors are unchanged.
- Reran the independent contract checks: Draft 2020-12 / 106 definitions / 544 references, closed required fields, 13 baseline documents and seven schema negatives, all 22 historical file hashes, five identity/request goldens and typed projection counterexamples, 17 strict-byte rejection vectors and four canonical-byte negatives. Historical pre-D023 specs retain their documented current-schema mismatch.
- Recomputed the current D023 example and checked its manifest: 2069 bytes;
request_digest=sha256:be0fb47b3b9b8b064a42758ec5b83a20cab92359b2fd50f9ad68305cf7517980. All 92 relative Markdown links resolve; all eight diagram sources matchfigures.md. - Reran 54 CPU regression tests, all passed:
test_smoke.py,test_claim.py,test_runtime.py,test_module_boundaries.py, andtest_target_module_import_gate.py. The only warning was an AnyIO pytest-plugin deprecation. - Current-head GitHub checks are all successful, including both full-check and installed-package Python versions;
knowledge-model-policyis successful / not applicable.
The complete earlier review remains the baseline; this is an incremental re-review, not a second full repository audit. Local verification did not run the entire repository suite, wheel/host/cross-language scenarios, or production D023 acceptance. The documentary vectors are still specifications, not implemented runtime tests.
This approval covers #391's P0a documentation/schema/fixture change only. It does not mark #387 or #371 accepted, authorize P0b/K01, clear P0b's separate manifest review, merge this PR, or claim the runtime implementation is complete.
This PR lands only the P0a contracts: documentation, JSON Schema Draft 2020-12, golden fixtures, and Decisions (including D023). It does not move source, change the current hard-gate implementation, implement P0b / K01 / H01 / H02 / CLI / Apps assembly or worker startup, or auto-merge.
Entry:
docs/contracts/README.md— reading order, status, normative priority, and the former-filename map. Head:892443898ed016c770e60a92ca377c3981e87f96.Normative sources (conflict order)
Where they differ,
p0a-contract-errata.md(D023) wins over earlier volumes.Scope
docs/contracts/.CommandStep.expected_code_sha256(required and equal to the frozenOperationRecipe.code_sha256in evaluation mode;nullin ordinary command mode). Historic goldens are kept as-is infixtures/t108-v4/; the current request example isfixtures/execution-spec-d023.json.fixtures/d023-conformance-cases.json). These are specifications, not executed runtime tests.gate-policy-runstore-and-first-prs.mdis updated for D023 / T36–T40. P0b still requires formal architecture review before K01. H01 creates a new local SQLite RunStore and does not migrateMemoryArchive. Completing the whole Apps assembly is not a prerequisite.File navigation and former names
Ordinary human-readable documents use lowercase kebab-case.
README.mdis kept. Schema and fixture data filenames, and historic golden bytes, are unchanged. Decision, validation, and acceptance IDs (D001–D023,V01–V35,T01–T40) stay in the body.CURRENT-DESIGN.mdcurrent-design.mdSCHEMA-AND-SEMANTICS.mdschema-and-semantics.mdDTO-FIELD-INDEX.mddto-field-index.mdD008-FUNCTION-OWNERS.mdfunction-owners.mdD020-D022.mdisolation-errors-and-cli.mdD023.mdp0a-contract-errata.mdGATE-STORE-AND-FIRST-PRS.mdgate-policy-runstore-and-first-prs.mdACCEPTANCE-T01-T40.mdacceptance-criteria.mdFIGURES-ALL.mdfigures.mddiagrams/387-1.mmddiagrams/public-ports-and-primitives.mmddiagrams/387-2.mmddiagrams/execute-to-assess-handoff.mmddiagrams/387-3.mmddiagrams/knowledge-read-and-internal-schema.mmddiagrams/387-4.mmddiagrams/legacy-run-v0-exit-codes.mmddiagrams/387-5.mmddiagrams/target-port-topology.mmddiagrams/387-6.mmddiagrams/end-to-end-handoff-and-replay.mmddiagrams/387-7.mmddiagrams/migration-overview.mmddiagrams/371-1.mmddiagrams/apps-assembly-sequence.mmdUnchanged data names:
schemas/contract-v1.schema.json,schemas/INDEX.json,fixtures/t108-v4/**,fixtures/execution-spec-d023.json,fixtures/MANIFEST-d023.json,fixtures/d023-conformance-cases.json.Acceptance
run0/1/2 are unchanged.Merge still requires two eligible Approves on the current head plus ordinary repository review. A new head dismisses previous Approves. Merging this PR is not a check of the #387 acceptance boxes, and it is not acceptance of P0b or K01. Rollback is to withdraw the corresponding document / test-contract changes, not to skip checks.