Repository navigation
Open
Labels
agent:claimedagent:triagedarch-auditFiled by a scheduled architecture audit routine (see the architecture review discussion)Filed by a scheduled architecture audit routine (see the architecture review discussion)priority:p3refactorStructural change: duplicated code or logic, missing abstraction, layering, dead codeStructural change: duplicated code or logic, missing abstraction, layering, dead code
Description
[agent] Filed by the scheduled architecture audit (audit-cli-tests). Register: register.
Kind: refactor. Register ID: T64.
Problem
crates/socket-patch-cli/tests has 38 recursive directory copiers: 26 copy_dir_recursive, 12 copy_tree and a few copy_dir. tests/common has none, although 129 suites include it.
- Identical copies. 20 bodies are identical after whitespace normalization, for example e2e_redirect_cargo_build.rs L139,`` e2e_vendor_golang_build.rs L220 and mode_migration_npm.rs L120.```` The full list:
e2e_redirect_{bun,cargo,pnpm,yarn_berry,yarn_classic}_builde2e_vendor_{bun,cargo,gem,golang,pnpm,pypi,yarn_berry,yarn_classic}_builde2e_vendor_yarn_classic_dev_flowe2e_vendored_productione2e_yarn4_{pnpm_linker,workspaces}_buildmode_migration_{bun,cargo,npm}
- Already "shared" copies. Three crate-local modules export the same body as
pub: composer_e2e_common L323,`````maven_build_commonL509 and `npm_e2e_common/manifestless.rs` L30. `prebuilt_common` keeps a private copy at L722,`````` and `e2e_nuget_dotnet_build.rs` L320 re-copies it. - Drifted copies. The other 15 have drifted:
- e2e_redirect_gem_build.rs L253 silently accepts a missing source.
- Some copies take a skip list:
copy_tree(from, to, skip)×2. e2e_gradle_agent_build.rsL1077 walks withwalkdir.e2e_embedded_vex.rsL279 copies one level only.
Same family, also to collapse once the helper exists:
- Scan proxy.
start_proxyandassert_proxy_served_scansare byte-identical ine2e_cargo.rsL33/L112,e2e_composer.rsL31/L79,e2e_maven.rsL33/L91 ande2e_nuget.rsL33/L162.e2e_gem.rsL292 is a deliberate by-package variant, but the composer doc still says that suite has the same shape. - Hosted pins.
hosted_pin_countis written ×8 (e.g.e2e_hosted_production.rsL421,e2e_bun_lockb.rsL125,in_process_vendor.rsL290) andhosted_pinned×14, besidecommon::envelope::hosted_pins.
Proposed change
- Add
pub fn copy_tree(from: &Path, to: &Path)totests/common/mod.rs, using the identical body above. - Delete the 20 identical copies, the 4
*_commoncopies and the nuget copy. Import fromcommoninstead. - For the drifted callers:
- Keep a skip-list or missing-source variant only where a caller needs it, as
copy_tree_except(from, to, skip)in the same module. - Make the gem caller check existence itself.
- Keep a skip-list or missing-source variant only where a caller needs it, as
- Optional follow-up in the same PR or the next one:
- Move the 4 identical
start_proxy/assert_proxy_served_scansinto atests/common/scan_proxy.rs. - Replace
hosted_pin_countwithenvelope::hosted_pins(..).len().
- Move the 4 identical
Size
About 40 test files. Roughly −450 lines.
Acceptance criteria
- No test changes its assertions. The touched suites build and pass:
cargo test -p socket-patch-cli --tests --no-run, plus the host-runnable ones that use the copies (mode_migration_*,e2e_redirect_cargo_build). grep -rnE "fn (copy_tree|copy_dir_recursive)\(" crates/socket-patch-cli/testsshows onlycommon/.
Metadata
Metadata
Assignees
Labels
agent:claimedagent:triagedarch-auditFiled by a scheduled architecture audit routine (see the architecture review discussion)Filed by a scheduled architecture audit routine (see the architecture review discussion)priority:p3refactorStructural change: duplicated code or logic, missing abstraction, layering, dead codeStructural change: duplicated code or logic, missing abstraction, layering, dead code
Activity
audit-cli-tests: e2e_embedded_vex..e2e_nuget_dotnet_build; T64-T68 fi…
mikolalysenko commentedon Nov 2, 2026
[agent] Triaged: priority:p3 (test-only refactor). Confirmed on main: 38
fn copy_tree/fn copy_dir_recursivedefinitions under crates/socket-patch-cli/tests and none in tests/common. No open or merged PR addresses it. Overlaps #1983 onhosted_pin_count(optional step 4 here); whichever lands second should rebase onto the other.Generated by Claude Code
mikolalysenko commentedon Nov 2, 2026
[agent] Claiming this for the architecture refactor routine (test-only, highest free structural score; slice 1 is the
copy_treehelper and the copies in suites no open PR holds). Branch: arch-refactor/1979-common-copy-tree. Claim-ID: 2026-11-02T13:04:26Z-7c19e4Generated by Claude Code