Repository navigation
docs: clarify W2 acceptance evidence and ProgramData derivation - #88
Merged
Merged
Conversation
Four documentation-precision corrections from the independent review of PR #87 and the Devnet runbook. No code, verifier, or evidence change. docs/w2-ns3-acceptance/W2_ACCEPTANCE_REPORT.md: - 4: the upgrade-authority row no longer implies an authority value was observed — it now reads "FAIL — required ProgramData account is absent; upgrade authority cannot be observed"; the deployer vs governance authority distinction is preserved; result stays REJECTED. - 9: separate the three facts — existing verifier result (3 PASS / 26 FAIL / 0 UNVERIFIED / 4 INFO, counts unchanged, no check reclassified), supplemental deployed-ELF digest check (UNVERIFIABLE — program/ProgramData accounts absent, no bytes to hash; no longer described as the only unobservable item), and the overall REJECTED classification (required deployment accounts absent). - 2/5/11: disclose the supplemental ELF-digest collector's provenance — separate one-off script outside the repo, verifier unmodified, read-only getAccountInfo retrieval only, no SHA-256 match claimed, output preserved as elf_digest_check.json, script not committed so the exact execution is not independently reproducible from this PR alone. docs/DEVNET.md: - Correct the stale opening NS-3 preparation statement ("ProgramData addresses ... are NOT derivable offline"): the expected ProgramData PDA IS derivable offline via the upgradeable BPF loader convention (programDataPda() in ns3_identities.mjs; printed by ns3_derive_pdas.mjs; independently re-derived by the acceptance verifier), but derivation does not establish existence — the on-chain readback, pointer match, loader-owned structure, expected upgrade authority, and approved-ELF SHA-256 checks still gate acceptance, and an absent account or unavailable RPC evidence fails or stays INCOMPLETE under the existing verifier/runbook rules.
Review follow-up on PR #88: the opening NS-3 note said an absent ProgramData account makes the corresponding check "FAILs — or stays INCOMPLETE on a transport failure", which conflates two distinct verifier outcomes. State the actual semantics, matching verify_ns3_deployment.mjs (overall = FAIL if any FAIL, else INCOMPLETE if any UNVERIFIED, else PASS): "If a ProgramData account is absent, the dependent acceptance checks FAIL. If RPC retrieval fails, the dependent checks are recorded as UNVERIFIED; the overall verifier result is INCOMPLETE only when no other FAIL exists." Documentation-only; no verifier, evidence, or code change.
sethoshi18
changed the base branch from
test/w2-ns3-deployment-acceptance
to
main
November 6, 2026 12:03
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Documentation-only precision corrections from the independent review of PR #87 (W2 NS-3 deployment acceptance evidence) and the Devnet runbook. No code, verifier, or evidence changes.
Base (why this PR is stacked on PR #87)
docs/w2-ns3-acceptance/W2_ACCEPTANCE_REPORT.mdexists only on thetest/w2-ns3-deployment-acceptancebranch — PR #87 is open, not merged, andmain(eaaf935683a3a602bf34bfc0f52e199c571d1ad9) does not contain it. To correct PR #87's report without pushing anything into PR #87's branch and without duplicating its evidence into a new PR cut frommain, this branch is cut from the exact PR #87 head commitc0eec861e094c4e43bf7ef48ea2158550ec419e1, and this PR usestest/w2-ns3-deployment-acceptanceas its base — so the reviewable diff below is exactly the four documentation corrections and nothing else. This PR should merge after (and depends on) PR #87; once PR #87 merges it can be retargeted tomainand will merge cleanly.1–3. The three W2 report corrections (
docs/w2-ns3-acceptance/W2_ACCEPTANCE_REPORT.md, +36/−13)not observable (ProgramData account absent)and the authority comparison now reads "FAIL — required ProgramData account is absent; upgrade authority cannot be observed". The distinction between the expected initial deployer/upgrade authority (cfJKAzSpYhoKheLWzx7miTHp6HCt46E3oeU3CBo4831) and the expected governance/ProtocolConfig authority (BMnrpx9mSZDzCmM8aJipnzgfLzfxa5tfFgWi3ZvBUwf5) is preserved unchanged. The overall acceptance result remains REJECTED.getAccountInfo); no deployed ELF bytes were available; no SHA-256 match is claimed; the collector's output is preserved in the evidence directory (elf_digest_check.json); and the collector script itself was not committed, so the exact collector execution is not independently reproducible from this PR alone. The original raw terminal output, JSON verifier output, and ELF-digest JSON were not touched.4. Runbook ProgramData clarification (
docs/DEVNET.md, +18/−4)The opening NS-3 preparation note previously said ProgramData addresses "are NOT derivable offline" — stale and inconsistent with
scripts/devnet/ns3_identities.mjs(programDataPda(), the upgradeable BPF loader /get_program_data_addressconvention), withscripts/devnet/ns3_derive_pdas.mjs(prints the ProgramData addresses as derived expectations), withscripts/devnet/verify_ns3_deployment.mjs(independently derives the expected ProgramData address and checks the program account's embedded pointer against it), and with the Mode 3 acceptance section of the same document. The corrected note states: the expected ProgramData PDA is derivable offline from the program ID via the upgradeable BPF loader convention; deriving it does not establish that the account exists; the actual program account must still be read from the approved cluster; its ProgramData pointer must match the independently derived address; the ProgramData account must exist with the expected loader ownership, valid structure, and the expected upgrade authority; the deployed ELF must be retrieved (read-only) and checked against the approved SHA-256 digest pinned inscripts/devnet/provenance.manifest.json; and if the account is absent or RPC evidence is unavailable, the corresponding acceptance check FAILs (or stays INCOMPLETE on transport failure) under the existing verifier/runbook rules. No acceptance requirement is weakened; the verifier implementation is not changed.Files changed
docs/w2-ns3-acceptance/W2_ACCEPTANCE_REPORT.mddocs/DEVNET.mdValidation commands and actual results
git diff --numstat/ fullgit diffreview → only the two files above changed; every hunk reviewed.sha256sumon the three raw evidence artifacts before and after the edits → identical:elf_digest_check.jsoneb4bd1a5e0191c3251796183ccfe90eeef6476b46ce214f85259a9efe1e833a4,verify_ns3_deployment.output.json005f9c4055c50f71855b72146543b4a037f8d2f4db82af440e65ab298e1b3d35,verify_ns3_deployment.output.txt19486704045b69d5e24bd97522fccb6e45b439337a744993c7286583857aefa7.bash scripts/doc-links-lint.sh→checked 143 relative link target(s)/ok: all relative markdown links resolve— PASS (same script CI runs).bash scripts/terminology-lint.sh→ok: no forbidden vocabulary detected— PASS (same script CI runs)..prettierignoreexcludes*.md("Prose is out of scope for the code formatter");pnpm fmt:ts:check/ eslint apply to the TS workspaces and no TS file changed — no further formatting check applies to a docs-only diff.【,XXX,TODO,FIXME,undefined,NaN) over both changed files → zero matches.Untouched by design
scripts/devnet/verify_ns3_deployment.mjsand every other file underscripts/— unmodified (git status --porcelain scripts/empty).docs/w1-review-precision-fixes@1a20bfe) — not touched.