René's URL Explorer Experiment


Title: feat(apply): safety hardening — atomicity, locking, pnpm CoW, sidecars, Maven gate by mikolalysenko · Pull Request #80 · SocketDev/socket-patch · GitHub

Open Graph Title: feat(apply): safety hardening — atomicity, locking, pnpm CoW, sidecars, Maven gate by mikolalysenko · Pull Request #80 · SocketDev/socket-patch

X Title: feat(apply): safety hardening — atomicity, locking, pnpm CoW, sidecars, Maven gate by mikolalysenko · Pull Request #80 · SocketDev/socket-patch

Description: Summary Hardens socket-patch apply against the six failure classes surfaced by a recent audit. Each commit is self-contained, builds clean, and ships with tests. # Commit Defends against 1 feat(apply): advisory file lock across mutating subcommands apply-vs-apply / apply-vs-rollback races; concurrent CI + dev runs against the same .socket/ 2 refactor(cli): plumb --api-url/--api-token without std::env::set_var Rust 1.80+ unsoundness of std::env::set_var under tokio multi-thread runtime 3 feat(maven): gate Maven crawler behind SOCKET_EXPERIMENTAL_MAVEN=1 jar sidecar checksum corruption (.jar.sha1/md5); Maven patches today are experimental 4 feat(apply): copy-on-write defense against pnpm content-store mutation pnpm node_modules/ is a symlink/hardlink into the global store — patching project A used to mutate project B's install 5 feat(apply): detect pnpm + refuse on yarn-berry PnP yarn-berry PnP keeps packages in .yarn/cache/*.zip; apply refuses with a clear pointer to yarn patch 6 feat(apply): atomic write via stage+rename half-written / truncated files on Ctrl-C, OOM, crash, fs error; multi-file patches that fail midway leaving a hybrid state 7 feat(apply): per-ecosystem sidecar fixups (cargo + nuget; advisories for pypi/gem/go) cargo build "checksum changed" failures; NuGet "tampered package" warnings; advisory events for ecosystems we cannot yet fully fix Why this PR exists socket-patch apply is run as the second step of the install → patch apply → build flow. Before this PR it had several silent failure modes that would either break the user's next build (Cargo checksum mismatch, NuGet content hash) or corrupt unrelated projects on the same machine (pnpm store mutation). The audit lays this out in detail; this PR closes the highest-blast-radius items. Confirmed in scope with project lead: pnpm safety via hardlink-aware CoW (not just refuse). yarn-berry PnP: refuse with clear error. Maven: experimental, gated off by default. File modes: not tracked (PatchFileInfo schema change is upstream of socket-patch). What stays out of scope File-mode tracking in PatchFileInfo. Yarn-berry zip patching (would need a zip rewriter or shelling to yarn patch). Honest NuGet contentHash recompute (would need server-side support to ship the original .nupkg). Go module cache native patching (advisory only — go mod verify would fail). Full PyPI RECORD rewriter (path-mapping between site-packages and the package dir has quirks I'd want to verify against real installs first — advisory only here). Maven jar-level patching (compiled out; experimental tier). Tests cargo build --workspace ✓ (default features, what the release binary uses) cargo build --workspace --all-features ✓ cargo build --release --workspace ✓ — no warnings cargo clippy --workspace --all-features -- -D warnings ✓ cargo test --workspace --all-features ✓ — 450 lib tests pass plus every integration suite (cli_parse_*, e2e_*). Notable new tests: patch::cow::hardlink_is_broken_and_sibling_survives_mutation — the core pnpm invariant: patching one link target does not mutate the other. patch::apply::test_apply_file_patch_does_not_propagate_to_hardlinked_sibling — end-to-end variant proving the integration is wired. patch::apply::test_apply_file_patch_hash_mismatch_leaves_original_intact — atomic write contract: a failed apply leaves both the original file and the parent directory exactly as it was (no .socket-stage-* litter). patch::apply_lock::* — five tests covering acquire, contention, drop, missing dir, timeout. patch::sidecars::cargo::rewrites_only_patched_files + sibling tests — .cargo-checksum.json round trip. patch::sidecars::nuget::* — .nupkg.metadata deletion + signed-package advisory. crawlers::pkg_managers::* — 9 tests pinning the detection table. JSON envelope additions (additive) The per-package apply result JSON now carries two new top-level keys: sidecarsUpdated: string[] — paths relative to the package directory that were rewritten or deleted as part of the sidecar fixup. Empty when no sidecar applied. sidecarAdvisory: string | null — one-line operator advisory for ecosystems we cannot fully fix (PyPI RECORD, gem cache, go mod verify). null when there is no advisory. Existing keys are unchanged. The contract test in crates/socket-patch-cli/src/commands/apply.rs was updated to reflect the new top-level key set; downstream wrappers that strict-check the key set need a small update. Relationship to PR #79 This branch is off main at b96a13f and is independent from PR #79 (feat/scan-apply-json, the v3.0 unified-args + scan --sync work). They touch disjoint files and modules, so the merge should be conflict-free, but the depscan submodule bump (PR SocketDev/depscan#20517) will need a follow-up rebase once #79 lands so it picks up both code paths together. Manual smoke checks before merge Lock: ( socket-patch apply --json & ); socket-patch apply --json — second call emits {"errorCode":"lock_held"}. Hardlink: ln a b, run apply against a manifest covering one of them, verify the other is byte-unchanged. Atomic rollback: corrupt a blob (or claim a wrong hash), run apply, verify the target file is byte-unchanged. Cargo sidecar: in a project with a Cargo patch applied, cargo build succeeds (no "checksum changed" error). pnpm: in a pnpm project, apply emits the "pnpm layout detected" note and the global store entry is byte-unchanged. yarn-berry: in a .pnp.cjs project, apply exits 1 with errorCode: yarn_pnp_unsupported. Maven: with the binary built --features maven but SOCKET_EXPERIMENTAL_MAVEN unset, Maven PURLs surface the experimental warning and are skipped. Assisted-by: Claude Code:claude-opus-4-7 Follow-up: dead-code purge + integration coverage expansion (this session) Since the original review request, this branch has accumulated a substantial cleanup + coverage pass that's worth surfacing separately. Net effect: workspace coverage moved from ~70% regions to 90.15% regions / 88.45% lines / 94.57% functions. Dead code removed (~1300 lines across 14 files) crates/socket-patch-core/src/manifest/recovery.rs (543 lines) — entire module removed; the recover_manifest machinery (RecoveryResult, RecoveryEvent, RecoveryOptions, RefetchPatchFn etc.) had zero call sites. utils::purl: 12 unused helpers (is_pypi_purl, is_npm_purl, is_gem_purl, is_maven_purl, is_golang_purl, is_composer_purl, is_nuget_purl, is_cargo_purl, parse_npm_purl, parse_purl, build_pypi_purl, plus a duplicate of build_npm_purl) — all redundant with Ecosystem::from_purl + per-ecosystem parse_*/build_* in the crawlers. json_envelope: PatchEvent::with_old_uuid, ::with_bytes + their underlying old_uuid/bytes fields, Summary::bytes_downloaded/bytes_freed counters, PatchAction::as_tag, Command::as_tag — all unused; the JSON output uses serde's #[serde(rename_all)] directly. utils::telemetry::track_patch_event_fire_and_forget — unused tokio-spawn variant. utils::env_compat::read_env_either — duplicate alias of read_env_with_legacy. utils::fuzzy_match::is_purl / is_scoped_package — duplicates of utils::purl::is_purl and unused scoped-name check. crawlers::nuget_crawler::parse_nuspec_id_version + extract_xml_element — never wired into discovery. crawlers::types::Ecosystem::purl_prefix — production uses Ecosystem::from_purl enum dispatch instead. manifest::operations::get_referenced_blobs, diff_manifests, ManifestDiff — superset/diff helpers that no command consumed. package_json::update::update_multiple_package_jsons — sequential wrapper with no callers. constants: 4 unused .socket/* path constants (DEFAULT_BLOB_FOLDER, DEFAULT_PACKAGES_FOLDER, DEFAULT_DIFFS_FOLDER, DEFAULT_SOCKET_DIR). SidecarFileAction::Created — reserved-but-never-emitted enum variant. Bug fixes surfaced during coverage work Feature-gated tests in in_process_remote_ecosystems_apply.rs + in_process_rollback_all_ecosystems.rs — ecosystem tests assumed --all-features; under narrower builds they false-failed because the crawler dispatch compiled out. Added #[cfg(feature = "")] per test. Stray duplicated #[test] attribute in utils/purl.rs (leftover from earlier removal). Unused imports / variables across several test files. New integration test files Ten new e2e files under crates/socket-patch-{cli,core}/tests/: File Tests Covers e2e_safety_advisories.rs 7 PyPI / gem / Go / NuGet sidecar advisory envelope shapes + non-UTF-8 filename branch e2e_safety_cow.rs 5 hardlink isolation, symlink replacement, multi-file CoW, regular-file no-op, failure-doesn't-CoW e2e_safety_internals.rs 11 direct-dispatch tests for cow/sidecar guards reachable only via pub APIs (incl. macOS chflags uchg + ACL tricks for rename/write failure paths) e2e_safety_cargo_build.rs (extended) +4 malformed checksum, missing files field, read-only checksum (chmod 0444), directory-as-file core/tests/diff_e2e.rs 5 apply_diff round trip + malformed-delta + wrong-source-no-panic core/tests/package_e2e.rs 9 read_archive_to_map / read_archive_filtered happy path + unsafe-path guards (absolute, parent-traversal, backslash) core/tests/fuzzy_match_e2e.rs 8 MatchType ordering: ExactFull > ExactName > PrefixFull > PrefixName > ContainsFull > ContainsName core/tests/rollback_new_file_e2e.rs 5 new-file rollback branches (empty before_hash → delete) and MissingBlob/NotFound arms core/tests/blob_fetcher_edges_e2e.rs 9 early-return branches: empty manifest, empty hash set, skip-existing, no-paths-configured + DownloadMode::parse/as_tag round trip core/tests/crawlers_empty_paths_e2e.rs 12 find_by_purls/crawl_all short-circuits across all 7 ecosystems core/tests/telemetry_helpers_e2e.rs 6 is_telemetry_disabled env-var combos + sanitize_error_message home-dir redaction cli/tests/output_helpers_e2e.rs 10 format_severity ANSI branches per severity + case-insensitivity + color wrapper cli/tests/cli_dry_run_paths_e2e.rs 6 --dry-run envelope shape across apply/repair/rollback/remove/list + apply --silent short-circuit cli/tests/get_batch_paths_e2e.rs 7 get UUID/CVE/GHSA error branches + selection_required + --id filter miss Plus targeted extensions to apply_invariants.rs (no-.socket-dir envelope) and repair_invariants.rs (--offline + --download-only mutual exclusion). Coverage summary (region-level, integration tests via cargo llvm-cov --workspace --all-features) File Before After sidecars/mod.rs 93.6% 100.0% sidecars/cargo.rs 76.7% 100.0% sidecars/nuget.rs 91.4% 100.0% (Linux) / 98.3% (macOS — APFS rejects non-UTF-8 filenames so one branch skips) patch/cow.rs 79.0% 100.0% patch/diff.rs 0% 99.1% patch/package.rs 0% 97.6% utils/fuzzy_match.rs 0% 99.2% manifest/operations.rs 43.4% 97.2% commands/apply.rs (cli) 86.5% 89.0% output.rs 54.4% 91.2% TOTAL workspace regions 70.05% 90.15% The remaining ~10% of uncovered regions lives in CLI command flag-combination paths (commands/get.rs 74.4%, scan.rs 80.4%, ecosystem_dispatch.rs 77.7%) that each need their own wiremock + tempdir + manifest staging — straightforward but voluminous. Worth a follow-up PR focused on commands/* runners alone. Workspace stability All test sweeps green: cargo test --workspace --all-features finishes with 547+ passing tests (118 cli lib + 414 core lib + 60+ new integration tests). No new warnings.

Open Graph Description: Summary Hardens socket-patch apply against the six failure classes surfaced by a recent audit. Each commit is self-contained, builds clean, and ships with tests. # Commit Defends against 1 f...

X Description: Summary Hardens socket-patch apply against the six failure classes surfaced by a recent audit. Each commit is self-contained, builds clean, and ships with tests. # Commit Defends against 1 f...

Opengraph URL: https://github.com/SocketDev/socket-patch/pull/80

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/commits/:range(.:format)
route-controllerpull_requests
route-actioncommits
fetch-noncev2:584c9ad4-9ef6-9973-1507-9f19de7a55e9
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idDE98:1EB46D:35ED0F1:4783DDB:6A655317
html-safe-nonceb0610b0314e31b3477559ed865d2ba1ed5ee6f6968ea2421f40dec75aa1ea018
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJERTk4OjFFQjQ2RDozNUVEMEYxOjQ3ODNEREI6NkE2NTUzMTciLCJ2aXNpdG9yX2lkIjoiMjE4NTM2MzI1MTI5MTA1MDc3NSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac293ebc46a603b365aecc102c6c5a553353484187c440483271df26fe0da4a214
hovercard-subject-tagpull_request:3729846358
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/commits
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
twitter:imagehttps://avatars.githubusercontent.com/u/231686?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/231686?s=400&v=4
og:image:altSummary Hardens socket-patch apply against the six failure classes surfaced by a recent audit. Each commit is self-contained, builds clean, and ships with tests. # Commit Defends against 1 f...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None52c76df668885aaff23b50bdca1fa1ea44ac9c1553e888ebc70ff1e4daa4625b
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/SocketDev/socket-patch git https://github.com/SocketDev/socket-patch.git
octolytics-dimension-user_id69326764
octolytics-dimension-user_loginSocketDev
octolytics-dimension-repository_id1093661456
octolytics-dimension-repository_nwoSocketDev/socket-patch
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1093661456
octolytics-dimension-repository_network_root_nwoSocketDev/socket-patch
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release309153364422b3c499922d1a2a6404910a58ed8e
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FSocketDev%2Fsocket-patch%2Fpull%2F80%2Fcommits%2Fe8d815cd673c2d22cbb614ed0be5d5b619d39219
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
Code QualityEnforce quality at mergehttps://github.com/features/code-quality
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FSocketDev%2Fsocket-patch%2Fpull%2F80%2Fcommits%2Fe8d815cd673c2d22cbb614ed0be5d5b619d39219
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Fcommits&source=header-repo&source_repo=SocketDev%2Fsocket-patch
Reloadhttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
Reloadhttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
Reloadhttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
SocketDev https://github.com/SocketDev
socket-patchhttps://github.com/SocketDev/socket-patch
Notifications https://github.com/login?return_to=%2FSocketDev%2Fsocket-patch
Fork 0 https://github.com/login?return_to=%2FSocketDev%2Fsocket-patch
Star 4 https://github.com/login?return_to=%2FSocketDev%2Fsocket-patch
Code https://github.com/SocketDev/socket-patch
Issues 1 https://github.com/SocketDev/socket-patch/issues
Pull requests 3 https://github.com/SocketDev/socket-patch/pulls
Actions https://github.com/SocketDev/socket-patch/actions
Models https://github.com/SocketDev/socket-patch/models
Security and quality 0 https://github.com/SocketDev/socket-patch/security
Insights https://github.com/SocketDev/socket-patch/pulse
Code https://github.com/SocketDev/socket-patch
Issues https://github.com/SocketDev/socket-patch/issues
Pull requests https://github.com/SocketDev/socket-patch/pulls
Actions https://github.com/SocketDev/socket-patch/actions
Models https://github.com/SocketDev/socket-patch/models
Security and quality https://github.com/SocketDev/socket-patch/security
Insights https://github.com/SocketDev/socket-patch/pulse
Sign up for GitHub https://github.com/signup?return_to=%2FSocketDev%2Fsocket-patch%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2FSocketDev%2Fsocket-patch%2Fissues%2Fnew%2Fchoose
Mikola Lysenko (mikolalysenko)https://github.com/mikolalysenko
mainhttps://github.com/SocketDev/socket-patch/tree/main
feat/apply-safety-hardeninghttps://github.com/SocketDev/socket-patch/tree/feat/apply-safety-hardening
Conversation 5 https://github.com/SocketDev/socket-patch/pull/80
Commits 72 https://github.com/SocketDev/socket-patch/pull/80/commits
Checks 43 https://github.com/SocketDev/socket-patch/pull/80/checks
Files changed https://github.com/SocketDev/socket-patch/pull/80/files
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
feat(apply): safety hardening — atomicity, locking, pnpm CoW, sidecars, Maven gate https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#top
Show all changes 72 commits https://github.com/SocketDev/socket-patch/pull/80/files
9b898b1 feat(apply): safety primitives — lock, CoW, atomic write, sidecar fixups mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/9b898b1a556f16f29733a1ec9a9920840b2e6c94
39a2321 feat(cli): wire safety primitives + Maven/NuGet experimental gates mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/39a23215cbe9cddc1c6a3185f67c0694a7647138
13cbfa7 test(e2e): safety hardening suite + CI matrix + invariant fixups mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/13cbfa7623dd5ca265e1e12a0dbd6b37b99e4f85
6dc3218 refactor(sidecars): typed envelope contract with structured per-file … mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/6dc3218545ef0046cd5f294f5f14ae8d22241566
2daa5ac test(e2e): expand sidecar coverage + simplify PTY harness mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/2daa5ac3efdc30da21eefb3402cb032748240b05
2b95558 test(e2e): close remaining cargo + nuget sidecar fixup-error arms mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/2b95558d2bc4fd3325167d5a5411a6901f7d3b0a
2d82fac test(e2e): close internals guards + nuget non-UTF8 iteration arm mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/2d82fac0c2875ab7eabdcaf8aa39976965e55f3e
5c9a5fb test(e2e): exercise sidecar/cow defensive arms via direct dispatch mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/5c9a5fbbaa5e390da92c807f50e0481aac3f7e5c
09ecc10 test(e2e): cover cow.rs symlink/hardlink/stage-write error arms mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/09ecc10a657df247d1c428c55570d7f39733d5b5
f7d916d refactor(sidecars,cow): collapse two dead-arm Result paths mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/f7d916dd85524f4dec0f7435b7772fc95a8dfced
fbbc05c refactor(nuget,cow): byte-suffix match + ACL test → 100% region cov mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/fbbc05cc4377b590b2d20f0e01e008a5f548435e
4e2f3a1 chore(cleanup): remove dead manifest::recovery + fuzzy_match exports mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/4e2f3a18fbb87be531b57c0ea6ae9776128629a5
b7c4cca chore(cleanup): purge dead utils::purl exports + duplicated tests mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/b7c4ccad7d7ca9c40d433ba5e130708e87659b84
09c9115 chore(cleanup): purge dead envelope builders + summary byte counters mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/09c9115a077e941151f0519ecd44a299b769f44b
4a6d372 test(core): integration coverage for diff + package + fuzzy_match mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/4a6d372dbaf2784c701e73c9faaf99dd1e26f748
89eb3c1 chore(cleanup): remove dead Ecosystem::purl_prefix + manifest helpers mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/89eb3c1b7e8ebb08ac040c1f29f0520096f49b86
9dabcb9 chore(cleanup): remove test-only pub helpers (nuspec parser, multi-up… mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/9dabcb92c4cf897b7da33861520a8133a23abd0d
90d2b67 chore(cleanup): drop duplicate utils::purl::build_npm_purl mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/90d2b67df86ad155ba98f43817dc4dd32dad5087
8d71ea1 chore(cleanup): drop dead utils::env_compat::read_env_either mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/8d71ea1d9d744a84eebb3422e2b5050f697fcca7
c8b7989 chore(cleanup): remove 4 unused .socket/* constants mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/c8b7989b67c1cee9e037407da4a86e4fe3bad77d
6c5d393 chore(cleanup): drop dead telemetry::track_patch_event_fire_and_forget mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/6c5d39388b11731def9b5d6285d75c65eabedb80
b465992 test(core): integration coverage for rollback new-file + error paths mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/b465992f41630bea904f12100605ce5ad0b5dad0
0c2bcb2 test(core): integration coverage for blob_fetcher early-return paths mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/0c2bcb2f6009dfb19b9d5907de7228ebf5e0d68e
2b2b4bf chore(cleanup): silence test-only warnings (unused fixtures + stray a… mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/2b2b4bfa2dba5e1020c992b02eee387ba9216bd2
6d3dc8e test(repair): cover --offline + --download-only mutual exclusion mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/6d3dc8e52884c17df52a77bd32f964e3aabe6aab
8843e67 test(apply): cover no-.socket-dir status: noManifest envelope mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/8843e673399252d217eda89c718545afb651c420
fba169a test(get): cover UUID-by-UUID paid-required path on public proxy mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/fba169a94b2cd69b07cd0fda48846e6737e1d9ca
e39b95b test(get): batch coverage for get.rs envelope shapes mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/e39b95b4f117063225d4d9c1be83148e09d7447f
edc6803 test(cli): batch --dry-run + empty-manifest path coverage mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/edc680303bceb66ca35c1597946c7f3ecb024fc3
8e3d042 test(output): integration coverage for ANSI color helpers mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/8e3d0428fa3e71022a398fac908db49cd46e919a
a3ebc75 test(blob_fetcher): cover fetch_blobs_by_hash skip-existing branch mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/a3ebc7580dd612d65967ce0b4e84e65a6361484c
8fe8939 test(blob_fetcher): expand to 9 tests covering DownloadMode + sources mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/8fe89399badf889950f93313f69a5605295564cc
abc5b44 test(crawlers): empty/missing path early-returns for NpmCrawler mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/abc5b446e6b8d5caae9617b217f43d70553e55c4
fa3421a test(crawlers): empty-purl/empty-path branches across all 7 ecosystems mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/fa3421a7a7aefe469b69ba1cfffd05be47ad008c
095377c test(telemetry): integration coverage for is_telemetry_disabled + san… mikolalysenko May 22, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/095377c10ed39e12972c3758ec05a5ca18d8ba65
d01478f refactor(crawlers): runtime cfg!() to compile-time #[cfg(...)] gates mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/d01478f4d30373f2a05d11e1d987e0ce2f398238
690e648 test(crawler/python): 14 integration tests for find_python_dirs + ven… mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/690e6483c2eb3849e8a70695fe79e1c3e02af4d0
bd2ca92 test(crawler/nuget): 15 integration tests for find_by_purls + crawl_a… mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/bd2ca92d519bebc7f9338e9d93576bf171d99d1f
d65d2f7 test(crawler/ruby): 13 integration tests for find_by_purls + get_gem_… mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/d65d2f738ad4a681a49fc175f350109fde8c9780
3765c93 test(crawler/maven): 16 integration tests for parse_pom + find_by_pur… mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/3765c93f50a5fc1e4175fb1cb654dced9f1d9089
3bcbf31 test(crawler/composer): 12 integration tests for vendor + installed.j… mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/3bcbf31aad4b1aef943dd604ea2a036bc2f3000c
73b4f40 test(crawler/cargo): 14 integration tests for parse_cargo_toml + find… mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/73b4f409c374c107825488d5060cc85128a4f141
0a186ea test(crawler/go): 14 integration tests for encode/decode/parse + paths mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/0a186ea9d66fc16aa5f4bacce7533512f3895f49
05f226d test(crawler/cargo): +3 tests for parse_dir_name_version fallback mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/05f226dd4176ac08b63db97ffdbe90598cab361f
dc36eab test(crawler/npm): 17 integration tests for npm crawler mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/dc36eab25323329b87e7fc2e75f72b904a1d9536
cb96d0d chore(crawlers): drop dead NpmPkgManager::as_tag + extend coverage mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/cb96d0d9e953ec873b705f6a580437e82826ea7d
9e110de test(crawlers): more npm + composer coverage mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/9e110de1a05b6d019fbde13f18cf2f1209430b38
0f3c39b test(crawlers): maven + nuget + ruby + go coverage mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/0f3c39bf80082fcd88b17de9a9692a30c54af5fc
97513c9 test(crawlers): python + cargo coverage mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/97513c930d747a0ab853f856dd9abd70ea2d629f
83016b8 test(crawlers): deeper npm scope/nested + CrawlerOptions default mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/83016b82346da4d3a09ca9254c6215e169749ce1
f1b0474 test(crawlers): maven + go env-fallback coverage mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/f1b04742023300f4187a4734982331f1f5438410
9568eae test(crawlers): fix python METADATA blank-line break test mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/9568eae2e6d54fa4fc59379b5840e38c90f08669
9e82aa4 test(crawlers): npm shell-out wrappers via PATH stubbing mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/9e82aa419b7609c95703a642d05f084ec912c7bd
0856547 test(crawlers): composer/ruby/nuget shell-out + edge coverage mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/0856547e23e310a368f08954b90bf87b1f42bd4f
c988d98 test(crawlers): maven + cargo final coverage mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/c988d986148e9d26f3c75c9ffa0b324f8c642f08
e8d815c test(crawlers): chmod-based unreadable-dir coverage across crawlers mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
7aa479a test(crawlers): extract parse_composer_home_output for unit testing mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/7aa479a9b0d204925035d696ce9186693c5cb5f0
8084862 refactor(crawlers): centralize read_dir/file_type behind utils::fs mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/8084862f4077032c323bef3deaf4a511119ec897
64b4325 refactor(crawlers): inject CommandRunner for npm/ruby/python shell-outs mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/64b43255299cb8ec3705086e5f2db0e8c2f26501
3f796f2 feat(crawlers/python): extensive uv support mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/3f796f21f8635dcd8aaa75b6914f32fa323ac58e
e485704 feat(crawlers): bun + deno scan/apply support mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/e485704b40ec843f3551538a1e0077b5f750b3d7
166af51 feat(cli/crawlers): wire DenoCrawler into ecosystem dispatch + docker… mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/166af51a9fd722aec7a88e68d6935dcc6d02b85f
68a9753 fix(clippy): inline nested doc list in deno_crawler module docstring mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/68a975373a9ad488fbfbae6c0b7ef241f6dc6969
8b0b9e8 fix(clippy): allow dead_code on find_node_dirs_sync for non-macOS tar… mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/8b0b9e81effc79ab30e9bddcb1c19f56c7510b9b
11576e3 fix(docker-e2e): pass experimental gate env vars for maven and nuget mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/11576e3619e6d0a3fb9f2939646b00f747b8f8f0
4e564f3 fix(types/tests): bump test_all_count expected for deno feature mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/4e564f3a2f0b33098e96297d4614ad0f45208f74
3c4857b fix(tests): cross-platform fixes for windows + linux CI runners mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/3c4857bd6d9082c7b40a23870a30b7e0f5e23797
5f77683 feat(cli): add lock-management surface (unlock subcommand, --lock-tim… mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/5f776831308db77dcb50672c8d57805c3d06dde1
6c53b50 fix(tests): escape paths in nuget assets.json fixture (Windows) mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/6c53b50aa4d8517bfcba77899a914e8bb33e03f9
fbd5f23 fix(tests): platform-aware venv layout in python crawler tests mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/fbd5f235c7398a7fde810db1f4e575b12b3c75f5
8f04d8a ci: drop e2e_scan from PR-blocking matrix (live public-API dependency) mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/8f04d8a8e615af53a4e421dd6f4273ea8e006ec8
1e181d0 ci: drop e2e_npm, e2e_pypi, e2e_gem from PR matrix (live-API deps) mikolalysenko May 23, 2026 https://github.com/SocketDev/socket-patch/pull/80/commits/1e181d0d15b1799901cb8e3f0e531c8844646aab
Clear filters https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
mod.rs https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-3751b07dd989810b657db9f4dd0453ee552f02fce89094e66493a367fee3eea6
crawler_cargo_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-05b473142f4ad0d819893f0066402137cb84a32a923340b498539b752f84adab
crawler_composer_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-f8807f72eb98768e55346ada845ca5421b3f16ef86b11f6b6a7363f60d7bf833
crawler_go_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-2a618379726a0c87151166c667bb15d31c52e47dc99cd8a61155534f420dd6a6
crawler_npm_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-e5a5f8653ed5ea18f021e45124f55b27e41c08bd7f20483af7ab673a550442cf
crawler_nuget_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-5aed5977de4b813d10d8428c42f1df3a0e04059415dc012294820188b5e6d35d
crawler_python_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-e7ccb1c4c73edd333db60c82d909e6b37d6a1c32a8d726a1836b4c7eec77770e
crawler_ruby_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-9f38871923b2d512681f369e060f38929ed54b51d790211670a52892c753fea6
Prev https://github.com/SocketDev/socket-patch/pull/80/commits/c988d986148e9d26f3c75c9ffa0b324f8c642f08
Next https://github.com/SocketDev/socket-patch/pull/80/commits/7aa479a9b0d204925035d696ce9186693c5cb5f0
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
https://github.com/mikolalysenko
mikolalysenkohttps://github.com/SocketDev/socket-patch/commits?author=mikolalysenko
crates/socket-patch-core/tests/common/mod.rshttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-3751b07dd989810b657db9f4dd0453ee552f02fce89094e66493a367fee3eea6
View file https://github.com/SocketDev/socket-patch/blob/e8d815cd673c2d22cbb614ed0be5d5b619d39219/crates/socket-patch-core/tests/common/mod.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/commits/{{ revealButtonHref }}
crates/socket-patch-core/tests/crawler_cargo_e2e.rshttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-05b473142f4ad0d819893f0066402137cb84a32a923340b498539b752f84adab
View file https://github.com/SocketDev/socket-patch/blob/e8d815cd673c2d22cbb614ed0be5d5b619d39219/crates/socket-patch-core/tests/crawler_cargo_e2e.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/commits/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-05b473142f4ad0d819893f0066402137cb84a32a923340b498539b752f84adab
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-05b473142f4ad0d819893f0066402137cb84a32a923340b498539b752f84adab
crates/socket-patch-core/tests/crawler_composer_e2e.rshttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-f8807f72eb98768e55346ada845ca5421b3f16ef86b11f6b6a7363f60d7bf833
View file https://github.com/SocketDev/socket-patch/blob/e8d815cd673c2d22cbb614ed0be5d5b619d39219/crates/socket-patch-core/tests/crawler_composer_e2e.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/commits/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-f8807f72eb98768e55346ada845ca5421b3f16ef86b11f6b6a7363f60d7bf833
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-f8807f72eb98768e55346ada845ca5421b3f16ef86b11f6b6a7363f60d7bf833
crates/socket-patch-core/tests/crawler_go_e2e.rshttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-2a618379726a0c87151166c667bb15d31c52e47dc99cd8a61155534f420dd6a6
View file https://github.com/SocketDev/socket-patch/blob/e8d815cd673c2d22cbb614ed0be5d5b619d39219/crates/socket-patch-core/tests/crawler_go_e2e.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/commits/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-2a618379726a0c87151166c667bb15d31c52e47dc99cd8a61155534f420dd6a6
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-2a618379726a0c87151166c667bb15d31c52e47dc99cd8a61155534f420dd6a6
crates/socket-patch-core/tests/crawler_npm_e2e.rshttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-e5a5f8653ed5ea18f021e45124f55b27e41c08bd7f20483af7ab673a550442cf
View file https://github.com/SocketDev/socket-patch/blob/e8d815cd673c2d22cbb614ed0be5d5b619d39219/crates/socket-patch-core/tests/crawler_npm_e2e.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/commits/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-e5a5f8653ed5ea18f021e45124f55b27e41c08bd7f20483af7ab673a550442cf
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-e5a5f8653ed5ea18f021e45124f55b27e41c08bd7f20483af7ab673a550442cf
crates/socket-patch-core/tests/crawler_nuget_e2e.rshttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-5aed5977de4b813d10d8428c42f1df3a0e04059415dc012294820188b5e6d35d
View file https://github.com/SocketDev/socket-patch/blob/e8d815cd673c2d22cbb614ed0be5d5b619d39219/crates/socket-patch-core/tests/crawler_nuget_e2e.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/commits/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-5aed5977de4b813d10d8428c42f1df3a0e04059415dc012294820188b5e6d35d
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-5aed5977de4b813d10d8428c42f1df3a0e04059415dc012294820188b5e6d35d
crates/socket-patch-core/tests/crawler_python_e2e.rshttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-e7ccb1c4c73edd333db60c82d909e6b37d6a1c32a8d726a1836b4c7eec77770e
View file https://github.com/SocketDev/socket-patch/blob/e8d815cd673c2d22cbb614ed0be5d5b619d39219/crates/socket-patch-core/tests/crawler_python_e2e.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/commits/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-e7ccb1c4c73edd333db60c82d909e6b37d6a1c32a8d726a1836b4c7eec77770e
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-e7ccb1c4c73edd333db60c82d909e6b37d6a1c32a8d726a1836b4c7eec77770e
crates/socket-patch-core/tests/crawler_ruby_e2e.rshttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-9f38871923b2d512681f369e060f38929ed54b51d790211670a52892c753fea6
View file https://github.com/SocketDev/socket-patch/blob/e8d815cd673c2d22cbb614ed0be5d5b619d39219/crates/socket-patch-core/tests/crawler_ruby_e2e.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/commits/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-9f38871923b2d512681f369e060f38929ed54b51d790211670a52892c753fea6
https://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219#diff-9f38871923b2d512681f369e060f38929ed54b51d790211670a52892c753fea6
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/commits/e8d815cd673c2d22cbb614ed0be5d5b619d39219
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.