Make the corpus carry the postable marking and re-earn it against a node - #22
Merged
Conversation
…erts The parity-green sentence was scoped to the postable set, and the corpus had no such set. A README describing a marking the artifact does not have is exactly the drift this crate exists to prevent, so the marking now lives in the corpus next to the vector it describes, where the drift check protects it too. Each of the three refused vectors carries its `error_code`, the chain rule that refuses it, and the sibling that gives its tag an acceptance result. Two have one; `ChannelForceProgressTx` has none and is a named exception, pinned in both directions — removing the exception without giving the tag a postable vector fails, and giving it one without removing the exception fails too. A silent pass needs someone to delete a line, which is the point. `channel create, with account delegates` is new: the only sibling the corpus was actually missing. The `ba_` pointer sibling for the version 2 name update was already committed, so nothing was added for it. The scoring moved into `matrix.rs`, beside the definition rather than inside the script that posts. A non-postable vector leaves the builder half too, for the reason it left the acceptance half: the node has already said it will not take that transaction, so asking whether it builds the same bytes scores a disagreement already recorded as the refusal. `node-exercise.mjs` now fails in both directions. A postable vector the decoder refuses fails the clause; a non-postable vector the node accepts fails as a stale marking, because an exclusion nobody has re-earned is a vector quietly removed from the measurement. Two fixes found by using the thing. `regenerate.mjs --write` had never been run: it reused one field for a path and its contents, so it tried to open a whole corpus as a filename — the check path never noticed because it only compares. And both generators' headers documented an invocation that cannot work, since Node resolves a bare specifier from the importing module's directory; they now point at the harness that copies them next to the install.
The exclusion the corpus claims is now re-earned on every on-node run instead of assumed: the non-postable vectors are posted too, and the run fails if the node takes one. Verified against a deliberately false marking rather than by reading the branch — marking a plainly acceptable vector non-postable exits non-zero with the stale-marking message, and the control was reverted afterwards. 38 of 38 postable vectors accepted, no stale markings, controls all rejected. The new sibling is accepted, which is what gives `ChannelCreateTx` an acceptance result again. Clause 6 still scores **not satisfied**, for one row and one reason. Excluding non-postable vectors from the builder half takes the version-2 name update out of it, and what remains is the node HTTP endpoint that emits a pointer list reversed. Our order is the reference sdk's and the node's own decoder accepts it, so it is an endpoint quirk rather than a wire rule — but the clause asks for byte-identity from every tag the node builds, and whether a quirk belongs inside that half is not this harness's call to make.
Contributor
|
Thanks for the pull request — it is in the queue and a maintainer will review it. This repository is maintained on a weekly cadence. Anything opened from outside gets What happens next:
If this is a security fix for an unreported vulnerability, please close it and use |
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.
Makes the corpus carry the
postablemarking the parity-green definition alreadyasserted, and re-earns that marking against a node on every run rather than
declaring it once.
What lands
postable: false, itserror_code,the chain rule that refuses it, and its sibling — in the corpus next to the
vector, so the drift check protects the marking too.
node-exercise.mjspoststhe non-postable vectors as well and fails if the node now takes one. Verified
against a deliberately false marking before it was trusted.
ChannelForceProgressTxis pinned ingate.rstwo-sidedly: removing theexception without a postable vector fails, and adding one without removing the
exception fails too.
was already committed.
regenerate.mjs --writehad never beenrun and reused one field for a path and its contents, and both generator
headers documented an invocation that cannot work.
Recorded run,
ae_uat7.3.0-rc8, height 1283414: 38 of 38 postable vectorsaccepted, no stale markings, controls all rejected, nothing spent.
Review verdict
Merged, with one ruling on top — the row that kept clause 6 red.
The node's HTTP builder emits a name update's pointer list reversed. Scoring
that as a byte disagreement assumes both implementations built the same
transaction, and they did not. Probed directly:
a,o,ccomes backc,o,a,c,o,acomes backa,o,c,o,a,ccomes backc,a,o. An involution, not acanonicalisation — so the endpoint does not preserve pointer order in either
direction and cannot be a reference for that field whichever order is right.
The clause now asks for byte-identity from every tag the node has a builder for
that returns the transaction it was asked for, and that exclusion is earned
mechanically — decode the node's bytes, compare field by field, name the field
that differs. Nothing is excused for being a quirk, and
differsstill meanssame transaction, different bytes.
Also corrects the entry-corpus sentence in the generated matrix: no entry fixture
set is committed, but entry bytes do exist here since the mined corpus landed.
Gate on the merge result
cargo fmt --all -- --checkclean ·cargo clippy --locked --all-targets -- -D warningsclean ·
cargo test --locked197 passed, 0 failed.