Correct actual BAO exporter pair width

Status: source-only plan awaiting fresh different-vendor approval; no code/tests edited or builds run. Base origin/main 764d732ac38fb9116c4cf525a6d1bb463d409a06. Owned branch/worktree: fix/kadek-export-pairs / /Users/master/cyber/radio-kadek-export-pairs. Serves: kadek foundation row 4 · radio proof provider · current 32-byte Hash wire. Research pins sources, feasible fixtures, rules and baseline reds. Root owns vendor calls, commits/PR/merge; this task does not close row 4.

Result and exact scope

All three actual ExportBaoProgress serializers emit left32 || right32 for a Parent; completed parent writes credit exactly 64 overhead bytes. Size remains LE64, leaves preserve data/order, existing error/progress sequencing remains. No public API, hash domain, root, storage format, version or dependency change.

  • iroh-blobs/src/api/blobs.rs: add private fn encode_parent_pair(pair: &(hemera::Hash, hemera::Hash)) -> [u8; 2 * hemera::OUTPUT_BYTES]. Fill halves split at OUTPUT_BYTES. Reuse in write, write_with_progress and into_byte_stream; use Bytes::copy_from_slice for the latter. Credit data.len() after successful send. Add only the private cfg(test) child-module declaration.
  • New iroh-blobs/src/api/blobs/export_pairs.rs: private regression tests. If helpers exceed the file budget, place only independent fixture generation, scripted stream, sink and progress recorder in its private child iroh-blobs/src/api/blobs/export_pairs/support.rs. Both files ≤500 lines; retain every case, no artificial monolith or additional Rust dependency.
  • Task research/plan and later compact audit receipt/reproduction script (Nu), exact source/lock/patch/fixture digests and gate outcomes; root owns final audit.

No provider/store/BAO/Hemera production edits, neighboring refactors, broad formatting, manifests/locks, warning suppression, transport policy or CI repairs. Keep prior traversal receipt unchanged. Any newly blocking compiler issue is reported before expanding source scope.

Steps → verification

  1. After approval, archive the exact full dependency closure described below. → verify origin blobs, archive/lock hashes and isolated metadata paths; retain setup errors, no original dirty siblings or tracked build-cache inputs.
  2. Add tests first; overlay just the new test module(s) and cfg(test) declaration onto untouched production in a separate baseline archive. → verify actual Parent copy panics in each of the three exporter methods, debug/release, with ordinary test failures (no should_panic masking). Execute parent-free controls too. Compilation failure is not a reproduced panic.
  3. Implement one fixed-array serializer and three integrations. → verify literal/scripted wire, independent real Store proof and exact progress/error behavior below; no hash/traversal implementation changes.
  4. Run the focused and owning gate sets against frozen candidate bytes. → verify commands/exits/source and dependency hashes retained; classify pre-existing failures against baseline, report unavailable tools/platforms. Broad reds do not stop independent meaningful scoped checks.
  5. Freeze source diff plus per-file hashes for fresh different-vendor code review and root's ring/merge adjudication. → verify scope, new-file size, unchanged old receipt and explicit remaining compatibility/storage gaps.

Independent regression cases

Use export_pairs as the focused module filter. Tests call actual methods; helper-only or exporter-to-exporter equality is insufficient.

Test / case Required evidence
geometry_pins Separate named assertions: CHUNK_SIZE=4096, IROH_BLOCK_SIZE.bytes()=65536. Fixture construction checks the same pins before deriving geometry; do not take the stale store/mod.rs 1024-byte comment as authority.
literal_parent_write, literal_parent_progress, literal_parent_byte_stream Fresh scripted Size, Parent(left 0..31/right 32..63), nonempty Leaf, Done. Assert exact LE64 + literal 64 bytes + leaf, independent of the helper; byte-stream chunk lengths 8/64/leaf. Progress records original index/root/size and leaf offset/length, overhead 72. These are primary red-first cases.
readonly_store_right_block Derive B=IROH_BLOCK_SIZE.bytes(), C=B/CHUNK_SIZE; body length2B, query C..2C. Independent root/proof below; all three methods equal manual wire of length8+2*OUTPUT_BYTES+B (65608), overhead72, payload offset/lengthB (65536). Decode returns that exact right block.
readonly_store_parent_free Exactly one chunk (CHUNK_SIZE bytes), root chunk_cv(data,0,true), query0..1. All three outputs exactly LE64(CHUNK_SIZE)+data; overhead8, payload CHUNK_SIZE, no Parent.
encoded_error_propagates Script valid header/pair then EncodedItem::Error(Io with sentinel kind/detail), close sender. Writers return ExportBaoInner; byte stream yields prefix then Error::Io. No later payload/write credit.
readonly_store_missing Unknown root via real store: write/write_with_progress return ExportBaoError::ExportBaoInner containing EncodeError::Io(UnexpectedEof); into_byte_stream yields api::Error::Io(UnexpectedEof). All preserve "export task ended unexpectedly"; no bytes/progress.
writer_failure_accounting Inject sentinel BrokenPipe before accepting header, parent, or leaf. Actual write and progress writer return ExportBaoIo. Progress header failure has start notification but overhead0; parent failure overhead8; leaf failure overhead72 and no payload callback. No later item written.
partial_parent_failure Sink accepts an explicit prefix of Parent then errors. Prefix remains in target, error propagates, completed-write overhead remains8; no rollback/retry claim.
payload_progress_failure Actual writer sends leaf successfully, then callback returns ProgressError::from(AbortReason::Permission) per provider/events.rs. Assert ExportBaoError::ClientError containing ProgressError::Permission; wire contains leaf, overhead72, one callback attempt and no subsequent scripted leaf.

Scripted fixtures use bounded irpc channel capacity sufficient for their finite sequence, close the sender, and preserve method-specific existing termination. The sink implements actual AsyncStreamWriter and SendStream; every unused method is inert or explicitly fails the test if unexpectedly called. No network fixture. Use Tokio runtime for real Store actor, retain Store, await shutdown afterward. Free helpers without awaits stay synchronous; trait-impl async methods implement the actual traits. Preserve partial-write behavior without rollback/retry claims.

Geometry comes from cyber-bao/src/tree.rs:13,240–255 and the IROH constant; first assert CHUNK_SIZE=4096 and B=65536 with distinct failure messages. Then derive C=B/CHUNK_SIZE=16, body length2B=131072, query C..2C=16..32. The oracle uses body[i] = (i*31+i/CHUNK_SIZE)%256; calculate 2*C leaf CVs using absolute counters and root=false, reduce each C-leaf half through four explicit pairwise levels (C is pinned16), all root=false. Set root=parent_cv(L,R,true). Assemble LE64(2*B)||L.as_bytes()||R.as_bytes()||body[B..] directly. Neither root nor expected bytes come from radio's outboard, extractor or helper. During red-first preparation record root hex and independently generated proof SHA256 in the receipt (external shasum, no Rust hashing dependency); do not label them measured before execution. Hemera itself is the pinned cryptographic oracle. This case avoids grouped-single-root nonconformance and makes no plain-Particle binding claim. That separate root/profile decision remains open.

Isolation and exact commands

Create fresh /tmp/<run>/{baseline,candidate,tag}/ roots. Each has radio and hemera siblings exported with git archive: radio base above, source Hemera 23f3bbcff910ea6d504ceb505680a539260869da; tag radio is v0.1.0 commit f2b1298daa9f635c821d53996c4d1dc4f1042b3d. Exclude only tracked nettools/target using the existing traversal receipt's archive selection. Export all other internal/vendored packages, preserve manifests/lints/locks. Candidate differs from base only by the reviewed task source patch; hash that patch and files. No registry-Hemera substitution, pruned toy crate or serializer-copy harness.

Before any compile: cargo metadata --format-version 1 --all-features --offline --locked, verify every source=null manifest path resides inside its isolated root. Record rustc/cargo versions, source archive hashes, package identities and Cargo.lock hashes before/after. If caches are incomplete, cargo fetch --locked may fetch committed identities; never regenerate the lock or escape isolation. Use a private target under each isolated root, not archived target directories.

From isolated radio, with RUSTFLAGS=-Dwarnings (docs also RUSTDOCFLAGS=-Dwarnings):

cargo test --manifest-path iroh-blobs/Cargo.toml --lib export_pairs --offline --locked
cargo test --manifest-path iroh-blobs/Cargo.toml --lib export_pairs --release --offline --locked
cargo test --manifest-path iroh-blobs/Cargo.toml --lib export_pairs --no-default-features --offline --locked
cargo test --manifest-path iroh-blobs/Cargo.toml --lib export_pairs --all-features --offline --locked
cargo test --manifest-path iroh-blobs/Cargo.toml --all-features --offline --locked
cargo test --manifest-path iroh-blobs/Cargo.toml --no-default-features --offline --locked
cargo test --manifest-path iroh-blobs/Cargo.toml --offline --locked
cargo clippy --manifest-path iroh-blobs/Cargo.toml --all-features --all-targets --offline --locked -- -D warnings
cargo doc --manifest-path iroh-blobs/Cargo.toml --all-features --no-deps --offline --locked
rustup run 1.89.0 cargo check --manifest-path iroh-blobs/Cargo.toml --all-features --all-targets --offline --locked
cargo semver-checks check-release --manifest-path iroh-blobs/Cargo.toml --baseline-root <tag>/radio/iroh-blobs --verbose
cargo test -p radio-cli -p radio-integration-tests --all-features --offline --locked

Use manifest-path because local and registry iroh-blobs share name/version. The baseline's three literal tests must report the actual copy panic; preserve full failure output. If an unchanged compile warning prevents reaching tests, record it and return the blocker rather than waive warnings or repair neighbors. Semver tool 0.51.0 was identified by version/help only; baseline-root points to the tag's package directory. Before claiming the gate, retain verbose output and metadata confirming both compared local iroh-blobs 0.98.0 paths and tag tree, never the registry package. Tool/setup failure is not an API-compatibility pass.

Also attempt owning native repository gates exactly from .github/workflows/ ci.yml, tests.yaml, Makefile.toml: cargo make format-check; nextest workspace lib/bin/tests for default/no-default/all features; all-feature workspace doctests; workspace Clippy with all targets for each feature mode; docs/private items on nightly-2025-10-09; MSRV1.89 workspace/all-target check; cargo deny. Preserve first errors and continue scoped checks; record tool/platform-unavailable jobs rather than infer results. Cross/Android/wasm/netsim and remote CI remain named separate results. Prior receipt's red Clippy, workspace APIs, formatting, missing tools and remote missing-Hemera failure remain visible; no broad CI repair in this unit.

Ring, risks and rollback

Ring0 plus soft3 layer7 ring1: registry pin and local reverse dependencies are in research. Root owns actual rung/spec/drift assessment; no all-green rung claim. Soft3's old radio release pin already drifts; only the owner's bump flow can change it. No release/tag/publish action is part of this source repair.

Five likely failures and checks:

  1. Half width/order still wrong → independent literal 0..63 pair in all methods.
  2. A parent-free fixture hides the bug → real two-block log4 proof requires Parent.
  3. Progress credits failed/partial writes → injected header/pair/leaf failures.
  4. Test shares the producer's mistake → manual Hemera decomposition plus exact wire.
  5. Build silently selects registry/dirty inputs → manifest-path, immutable archives, locked identities and source=null path audit before compile.

Rollback is an ordinary revert of the narrow source/test commit; this unit writes no stored data and performs no migration. Any independently discovered root, mutable-store width or receive-channel policy defect becomes a separate task.

Homonyms

plan
plan the schedule: standing orders and deferred intents. the seed exists — the mining standing order in cy/specs/body|body is the first plan entry; it generalizes into the robot acting at 3am so you don't have to. cyb/parts/time|time reads the plan forward as the future half of its screen. part of…
warriors/erga/plan
erga — ERGO (Autolykos v2) miner for Apple Silicon Zero-copy Autolykos v2 miner on Rust using the honeycrisp hardware driver stack. ERGO uses Autolykos v2: a memory-hard k-sum PoW where each nonce attempt requires 32 random reads from a 2+ GB precomputed table R, summed, and Blake2b256-hashed…
cy/specs/plan
neural/rune/PLAN
rune implementation plan rune = open-computation language for the cyber soft3 stack. Full spec: `~/cyber/cyber/root/rune.md`. architecture Two registers, one AST, one Nox target: `rust` — classic, Rust-familiar surface `rune` — pure, Hoon-style sigil surface Three proof tiers: pure: unconditional…
soft3/mir/docs/plan
Graph World — Rendering Implementation Plan Protocol spec: `cybergraph/reference/render.md` (R-1.0) Implementation spec: `cyb/render/specs/render.md` (R-1.0-cyb) Architectural decisions Barnes-Hut vs BVH The deeper question is not "which algorithm for rendering cull" but "does this manifold need…
neural/inf/rs/plan
plan
soft3/radio/audit/2026-10-11-bao-bounded-traversal/plan
Checked traversal PLAN evidence Research and proposed tests only, on actual Radio parent `a96d86e28d384cdf656aadc4282c78c0c170c102` (PR38). Production is unchanged. The [PLAN](/soft3/radio/.claude/tasks/bao-bounded-traversal/plan) specifies one admitted byte range, one emitted geometric item per…
soft3/nox/.claude/tasks/hemera-no-std/plan
Preserve nox's no_std dependency boundary Stage: revised PLAN v2, awaiting fresh different-vendor review. Parent: `0b1407a4b855e4961ede07e1b7ea199cb8018c30`. Lineage and measured failures are in [research.md](/soft3/nox/.claude/tasks/hemera-no-std/research); exact feature/ring analysis is in…
soft3/radio/.claude/tasks/bao-bounded-reducer/plan
Bounded BAO group reducer — proposed PLAN Serves: owner's Kadek phase-1 closure · Radio/soft3 · foundation row 4, bounded authenticated-range prerequisite. Source research is pinned in research-inputs.json at Radio `a11d342594949d4ea542b26366f71d56ef21662d` and Hemera…
soft3/radio/.claude/tasks/bao-bounded-traversal/plan
Bounded BAO range traversal Stage: draft; independent PLAN review pending, no production changed. Serves the owner's Kadek phase-1 closure, Radio/soft3 and foundation row 4 (bounded authenticated source ranges). Discovered from the [measured traversal…
soft3/radio/.claude/tasks/audit-cargo-packaging/plan
Lossless archival Cargo manifests Status: draft; fresh different-vendor PLAN approval required before edits to existing artifacts. Serves Kadek foundation row 4 through Radio; discovered from PR40's committed Git consumer. Parent: `ce0fb312faa8770e80efe9afa864106ae6b51552`. Result Rename exactly…
cyb/honeycrisp/.claude/tasks/unimem-block-creation/plan
Checked Block creation — plan PLAN approved with binding conditions in `/tmp/unimem-block-creation-plan-review.txt`. Implementation follows those conditions; fresh CODE review remains required. Base: `9593c7218e14e2b5b816d9008b45ab60b9580cf3`, branch `fix/unimem-block-creation`. Serves kadek…
warriors/erga/.claude/tasks/blake-batch-owner/plan
Close the Blake benchmark batch owner Stage draft; awaits root and fresh different-vendor PLAN approval. No production changes. Base Erga848e17e2522db2f6225ad72d9b1797f8735d26d0; Honeycrisp9cbd4807, Strata494df7, exact full pins/source evidence in research.md. Serves Kadek native Image ownership…
cyb/honeycrisp/.claude/tasks/unimem-block-access/plan
Raw Block access — PLAN v3 candidate Serves Kadek foundation row6/native ownership prerequisite; upstream unimem CPU access and aruminium import contracts. Base `7b148906263da5ea8aabc5ddb0e2e44ff2288ecc`; [research](/cyb/honeycrisp/.claude/tasks/unimem-block-access/research) records parent and…
soft3/radio/.claude/tasks/bao-hemera-pin/plan
Pin the shared Hemera dependency Serves: owner's Kadek phase-1 closure · Radio/soft3 · consumable dependency prerequisite for bounded BAO verification, foundation row 4. Stage: draft. Source parent Radio a11d342594949d4ea542b26366f71d56ef21662d; Hemera source…
soft3/radio/.claude/tasks/bao-bounded-proof/plan
Bounded complete-buffer BAO proof verification Proposed PLAN; no production implementation or approval. Serves Kadek foundation row 4 through Radio, declared part of soft3; the future Kadek adapter reaches Cyb. Radio implementation parent is b933829cbe273d2f31fe75ca83125f3ddd8917a2 (PR39); research…
warriors/erga/.claude/tasks/mine-owner/plan
Mine owner plan Stage draft; implementation waits for fresh different-vendor PLAN approval. Serves Kadek foundation row6; discovered-from Honeycrisp PR14 and Erga PR2. Base `8dcb33888868d74ddfda3eeeb9bc90e58677b394`, Honeycrisp `9cbd4807`, Strata `494df7a`; full pins/evidence in research. No…
warriors/erga/.claude/tasks/rtable-owner/plan
RTable owner plan Stage draft; implementation waits for fresh different-vendor PLAN approval. Serves Kadek foundation row 6; discovered-from Honeycrisp PR14 and Erga PR1. Base `14b40d667b7fa927f62f46423cd8096f01cf704f`, Honeycrisp `9cbd4807`, Strata `494df7a`; full revisions/evidence are in…
soft3/radio/audit/2026-10-12-bao-proof-research/prerequisite/plan
Bounded BAO range traversal Stage: draft; independent PLAN review pending, no production changed. Serves the owner's Kadek phase-1 closure, Radio/soft3 and foundation row 4 (bounded authenticated source ranges). Discovered from the [measured traversal…
soft3/radio/audit/2026-10-12-bao-proof-research/task/plan
Bounded complete-buffer BAO proof verification Proposed PLAN; no production implementation or approval. Serves Kadek foundation row 4 through Radio, declared part of soft3; the future Kadek adapter reaches Cyb. Radio implementation parent is b933829cbe273d2f31fe75ca83125f3ddd8917a2 (PR39); research…
soft3/radio/.claude/tasks/bao-root-policy/plan
Canonical BAO ROOT finalization Status: draft v3, awaiting correction PLAN review; no implementation. Serves: Kadek phase-1 foundation row 4 and runtime proof-before-admission clause; radio's Hemera BAO dependency, pinned tree ROOT finalization contract. Base: radio…
soft3/radio/.claude/tasks/kadek-slice-traversal/plan
Correct sync slice traversal Status: implementation source frozen for fresh code review. Scoped tests pass; unrelated Clippy/full-workspace/tooling failures remain visible in research. Base: radio `db1d62e2cd1e4b2f309fa19bcc158bd29b44753d`, freshly fetched origin/main. Owned worktree:…
soft3/radio/.claude/tasks/kadek-memstore-pairs/plan
Canonical in-memory BAO parent pairs Status: proposed PLAN v2; fresh different-vendor approval required before source edits. Serves: Kadek phase-1 row4, existing radio verified-range import/storage dependency. Base radio `0d11468503c052aa5dcefb0dabc4602bd8efdc60`, exact Hemera…
cyb/honeycrisp/.claude/tasks/nebu-package-identity/plan
nebu package identity — plan One manifest identity repair restores origin-source Cargo resolution for the unimem gate prerequisite. Root owns implementation/review/commit/PR; this unit does not overlap the Block constructor's source/spec files. 1. Record `rustc -Vv`, `cargo -V`, host and target:…
soft3/radio/.claude/tasks/bao-empty-status/plan
Fs synthetic empty status — PLAN amendment Stage: active. Fresh Grok4.7 PLAN APPROVE preceded production edits; the exact reviewed draft and raw verdict remain frozen in the audit. Fresh CODE APPROVE and root disposition are retained in audit/2026-10-11-empty-status/. Serves Kadek phase 1…

Graph