Skip to content

release: 0.7.0, the 0.4 line (the toolbox 0.7.0, the tracker 0.2.0 and bsv-rs 0.4.1 together; a stranger's BEEF read by the streaming reader; the served doors take a body of any size) - #12

Merged
Calgooon merged 4 commits into
mainfrom
align/0.4-line
Oct 9, 2026

Conversation

@Calgooon

@Calgooon Calgooon commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

The version table of 2026-10-10 (bsv-stack-lean docs/p0/versions-2026-10-10.md): the 0.4 line everywhere, and the owner's posture. The three pins move together so one bsv-rs sits in the graph; a stranger's BEEF at the CLI's funnel is read by the streaming reader and refused for invalid bytes only; the two served BEEF doors take a body of any size, authenticate before the body is read, and INVALID_BEEF names the byte. 330 tests (7 new, each red before its fix), fmt, clippy, the dry run; verified by the captain here (docs/p0/align-cli.md). One risk, told to the fleets: a served daemon with no bearer token can be made to hold any body a client sends (before, 50 MiB), so a daemon bound beyond 127.0.0.1 should carry a token; a refusal to bind beyond loopback without one follows as 0.7.1.

🤖 Generated with Claude Code

Calgooon and others added 4 commits October 9, 2026 17:57
…(one bsv-rs in the graph)

The three pins move in one commit. The tracker 0.2.0 alone (bsv-rs left at
0.3.35) is red: E0308 at src/tracker_host.rs:279:67 and :411:64, two copies
of bsv_rs in the graph. With the three together the graph holds one bsv-rs
(0.4.1) and both sites compile unchanged; no match in the CLI names a
toolbox Error arm, so the toolbox's new Error::InvalidBeef needs no arm.
cargo test --workspace --locked: 323 passed, 0 failed, as at the base.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…aming reader and refused for invalid bytes only

atomic_beef::ensure_atomic is the one door a stranger's BEEF takes into the
wallet from the commands (fund's hex, receive's courier, gift-claim's
deposit). It now runs the toolbox's refuse_invalid_beef_bytes (bsv-rs's
BeefStream, one element at a time) before the in-memory parse, so a refusal
names the byte in the caller's own bytes and the reader's kind; receive's
vout_paying reads the courier's bytes the same way before it matches an
output. No size or count is judged anywhere on this path.

Witnesses, red at be4f50a: a transaction with no input under a BUMP was made
atomic (and its output matched, vout 0); a cut BEEF gave the parser's text,
"reader underflow: need 25 bytes, only 23 available", with no offset.
Green: "Invalid BEEF at byte <the transaction's leading byte>: NoInputs" and
"Invalid BEEF at byte <n>: Truncated"; the one-input control is taken.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the body is read, INVALID_BEEF names the byte

/internalizeAction (`tx`) and /createAction (`inputBEEF`) carry a caller's
BEEF as a JSON array; through 0.6.0 every body over 50 MiB was 413
TOO_LARGE, so a valid BEEF of about 13 MB and more was refused for its size.
The two routes now read the body with no cap (BEEF_DOORS; the route-level
DefaultBodyLimit disabled); every other route keeps 50 MiB (BODY_CAP). The
body is held whole (the JSON wire holds the BEEF as one array: memory linear
in the BEEF, never a refusal) and the toolbox 0.7.0's streaming reader
judges the bytes. Auth now runs before lenient_json_body reads any body, so
the uncapped doors are open only to the wallet's own caller (with a bearer
token set). The toolbox's "Invalid BEEF at byte N: Kind" maps to 400
INVALID_BEEF.

Witnesses (tests/served_beef_doors.rs), red at e030df9, all four 413
TOO_LARGE: a valid Atomic BEEF of 14,000,000-odd bytes (body over 50 MiB)
internalized; the same with one trailing byte refused at that byte,
TrailingBytes; createAction's inputBEEF over the cap answered by the empty
wallet's funding (402); an unauthenticated body refused 401 before it is
read. Green: 4 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sv-rs 0.4.1; a valid BEEF is never refused for its size, a refusal names the byte)

Cargo.toml and Cargo.lock at 0.7.0. CHANGELOG.md is new: it names the line,
the posture, the commands' funnel and the served doors moved, the bounds
that stay (the JSON body and a command's BEEF held whole, the 1,000,000-byte
caps on /arc-callback and the relay, which carry no BEEF), and the upgrade.
Breaking: the library's public API names the toolbox's and bsv-rs's types.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Calgooon
Calgooon merged commit 6fd9d0d into main Oct 9, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant