The extraction review against vendor.md's cut table, ADR-011
§Amendment, and AGENTS.md conventions. All five file diffs vs the
fast-socks5 v1.0.0 reference checkout read hunk-by-hunk and
categorized (cut / carried changes / adjustments / provenance /
tests); wasm, clippy, fmt, doc all green; RFC 1928 spot-checks
(reply form, method order, UDP zero fallback, domain cap, FRAG
split) independently verified against the RFC text.
F-1 (critical, resolved here): ReplyError::from_u8 kept upstream's
unreachable!("ReplyError code unsupported.") arm while being
wire-reachable — Socks5Stream::read_request_reply feeds the raw
reply byte from the wire into it, and RFC 1928 §6 marks 0x09-0xFF
unassigned, so a misbehaving peer would panic the consumer task.
Unassigned codes now map to GeneralFailure (the RFC's catch-all),
pinned by a new test, and the panic-translation adjustment is
recorded in vendor.md's adjustment list (with the Config-Default
and write_all notes) in the same change.
Findings F-2..F-4 (dead commented code dropped with its region;
Cargo.toml feature-layout comments; the preserved resolve_dns error
string) reviewed and accepted. Review task file carries the full
record; the gate to the downstream task groups is open.
Verified: cargo test (38 + 32), cargo test --all-features, clippy
--all-targets and --target wasm32-unknown-unknown (-D warnings),
cargo check --target wasm32-unknown-unknown, cargo fmt --check,
cargo doc --no-deps.
9.9 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | |
|---|---|---|---|---|---|---|---|---|
| review-vendor-extraction | Review — the vendor extraction before dependent layers | completed |
|
narrow | low | project | review |
Description
Review checkpoint before any layer builds on the vendor. Everything else in the crate (params, wire, producer, consumer, doors, backends) consumes the vendored typestate/codecs, so extraction errors — a behavior drift vs upstream, a missed cut, a wasm regression — would propagate into every downstream task. This review is the gate between the vendor group and the rest of the decomposition.
Review against the architecture, in this order:
- Extraction completeness vs the cut table (vendor.md): every
"What is Extracted" row is present; every "What is NOT Extracted"
row is absent. Diff
src/vendor/against/workspace/fast-socks5/src/file-by-file — the diff must contain exactly: the extraction cut (deletions per the cut table), the two carried changes (new_replypublication; the BIND surface being present-and-public), the extraction-time adjustments (anyhow/log removal, error-variant pruning, macro de-exporting, the no-unwrap translations), and the provenance/license notes. Any diff hunk outside those categories is a finding. - Wasm-clean invariant (ADR-009 §Amendment, ADR-011 §Amendment):
cargo check --target wasm32-unknown-unknownand native--no-default-features-equivalent cleanliness; nonet-shaped feature exists;tokiostays on the wasm-clean subset in[dependencies]. - Convention compliance (AGENTS.md): no
unwrap/expect/panics outside tests;thiserrorerror surface; no comments in code except doc comments and the pinned non-obvious-correctness notes; naming; module structure (one module per file,lib.rsre-exports). - RFC fidelity spot-check: run the differential test suite; for two or three of the trickiest pinned expectations (e.g. the reply-form byte counts, the method-negotiation preference order), independently verify the pinned bytes against the reference checkout and RFC 1928.
- License/provenance (ADR-011): the vendor point (v1.0.0) noted in-tree; the MIT notice present and referenced.
- Docs sync:
vendor.md's extraction table and cut table match what landed (if the implementer discovered a boundary correction — e.g. a transitive dependency the cut table missed — the doc was updated in the same change, not silently diverged).
Notes
To be filled by implementation agent
Summary
Review performed 2026-09-22 against the six-criteria order; the gate
opens. One critical finding (F-1) was corrected in the review change
itself (vendor mod.rs + vendor.md, same commit); no other
divergence, cut, or drift was found in the full file-by-file diff vs
/workspace/fast-socks5 v1.0.0.
1. Extraction completeness vs the cut table — every "What is
Extracted" row is present; every "What is NOT Extracted" row is
absent (swept by name for Socks5Datagram/connect*/run_*/
udp_bind_random_port/handle_udp*/transfer_udp/Socks5Server/
Socks5Socket/Incoming/DnsResolveHelper/Config<A>/
Authentication/authenticate_callback/auth example impls/socks4/
resolve_dns/tcp_connect* — the only hit is the preserved verbatim
error string in target_addr.rs referencing resolve_dns, a
documented fidelity keep). Every hunk of all five file diffs
(lib.rs→mod.rs, server.rs, client.rs, util/stream.rs,
util/target_addr.rs) was read and categorized: extraction cut,
carried changes (new_reply pub; the BIND surface present), the
adjustments (anyhow/log removal, error pruning incl. MissingTargetAddr,
macro de-exporting, unwrap/unreachable translations, write→
write_all), provenance headers, and first-party tests. The
commented-out upstream dead code (OtherReply etc.) dropping with its
region is mechanical. No unexplained divergence.
2. Wasm-clean invariant: cargo check --target wasm32-unknown-unknown and cargo clippy --target wasm32-unknown-unknown -- -D warnings both clean; no net-shaped
feature; tokio on the wasm-clean subset (rt, sync, io-util,
macros, time — no full) with default-features = false; deps
are exactly tokio/tracing/thiserror (dev: full tokio only).
3. Convention compliance: no unwrap/expect/unreachable!/
panic! outside #[cfg(test)] modules after the F-1 correction
(see below); thiserror surface intact; naming and module structure
(one module per file, upstream names preserved, lib.rs re-exports
vendor); #![forbid(unsafe_code)] present. Cargo.toml's two
inline comments are the sole code-adjacent comment in non-doc
position — carried from the scaffolding task's declared posture
(ADR-009 feature-layout note); no fix demanded.
4. RFC fidelity spot-check (independent): fetched RFC 1928 and
verified against the pinned tests — the reply form (§6: VER/REP/RSV/
ATYP/BND.ADDR/BND.PORT → 10 bytes v4, 22 bytes v6, RSV=X'00', codes
0x00–0x08, 0x09–0xFF unassigned), the method-selection
preference order (§3 + upstream's outer-loop contract), the UDP
ASSOCIATE zero fallback (§7: "MUST use a port number and address of
all zeros"), the 255-byte domain cap (§5: 1-byte length, no NUL), and
the FRAG parser/caller split (§7: MUST drop FRAG≠0 — refusal is the
caller's, passthrough the parser's). All pinned bytes correct. The
differential suite's 32 tests pass; its upstream file+line citations
were spot-checked against the reference checkout and are accurate.
5. License/provenance: src/vendor/LICENSE present with the
upstream MIT text (Copyright (c) 2025 Jonathan Dizdarevic) + v1.0.0
attribution + ADR-011/vendor.md pointers; referenced from the vendor
mod.rs doc. Vendor point noted in-tree (module docs + LICENSE).
6. Docs sync: vendor.md's tables match the tree. The boundary
corrections discovered by implementers were documented in-task (the
mod.rs-not-lib.rs vocabulary placement; the SocksServerError
early landing). The F-1 correction updated vendor.md's adjustment
list in the same change (panic-translation paragraph + the
Config-Default/write_all notes; last_updated bumped).
Acceptance Criteria
- The file-by-file diff vs upstream contains only cut-table/carried-change/adjustment/provenance changes — no unexplained divergence
- Both wasm checks pass (
cargo checkandcargo clippy --target wasm32-unknown-unknown -- -D warnings) - Full verification suite green:
cargo test,cargo clippy --all-targets -- -D warnings,cargo fmt --check - No convention violations (unwrap/panics/error surface/naming)
- License + provenance notes verified present
vendor.mdmatches the implemented tree (or the mismatch is filed as a blocker before proceeding)- Findings recorded; critical findings block the downstream task groups until resolved
Findings
- F-1 (critical → resolved in the review change):
ReplyError::from_u8kept upstream'sunreachable!("ReplyError code unsupported.")arm (src/vendor/mod.rs:240pre-fix) — wire-reachable:Socks5Stream::read_request_replyfeeds the raw reply byte from the wire into it (src/vendor/client.rs:340), and RFC 1928 §6 marks0x09–0xFFunassigned, so a misbehaving peer panics the consumer task. It escaped the client task's file-scoped no-panic criterion (the panic lives inmod.rs, the vocabulary task's file, whose criterion enumerated variants but not panic arms). Fix: unassigned codes map toGeneralFailure(the RFC's catch-all) —src/vendor/mod.rsfrom_u8+ a pinning test (reply_error_unassigned_codes_map_to_general_failure); recorded invendor.md's adjustment list (same change, check-6 discipline). Post-fix suite: 38 + 32 tests, clippy/fmt/wasm/doc green. - F-2 (minor, accepted): upstream's commented-out dead code
(
// OtherReply(u8)and friends) was dropped rather than copied. Classification: falls under "the extraction cut" + mechanical adjustment (dead text has no behavior; re-vendor diffs are line-based against live code). Noted so a future re-vendor doesn't re-derive the decision. - F-3 (minor, accepted):
Cargo.toml's[features]section carries inline comments (AGENTS.md convention 1 says no comments in code;Cargo.tomlpolicy comments mirroring a pinned ADR boundary are the established sibling posture — alktunnels/alktty carry none, but the note is ADR-009's empty-features contract, load-bearing until the features populate). Accepted; no fix demanded. - F-4 (minor, accepted):
ToSocketAddrs' error text still names the cutresolve_dns()— verbatim upstream string, documented in the wire-vocabulary task's Notes and the module doc. Fidelity keep.
References
- docs/architecture/vendor.md (the spec under review)
- docs/architecture/decisions/011-inline-vendor.md
- docs/architecture/decisions/009-feature-gates.md
- AGENTS.md (conventions 1–17; the verification commands)
- /workspace/fast-socks5 (the reference checkout for the diff)
Notes
- The five implementation tasks' Notes/Summary sections were read and
cross-checked: their self-reported verification claims reproduce
(
cargo test37+32 pre-review → 38+32 post-F-1; wasm/clippy/fmt green), and their boundary corrections were honest and documented (mod.rsvocabulary placement;SocksServerErrorearly landing). One inaccuracy found: the wire-vocabulary task's acceptance list claimed "No unwrap outside tests" scope as file-local — the F-1 panic arm lived inmod.rsand was missed by the per-task framing (each task verified its own files); the review's whole-vendor sweep is what caught it. Task summaries left as-is (historical record); the correction is recorded here and in vendor.md. - Differential-suite doc-comment citations spot-checked
(
server.rs:903-918,client.rs:277-285,server.rs:1380,server.rs:1000-1003,server.rs:455-469): all accurate.