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/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:f1467e50-8df0-b361-0db4-0a02e2297250
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idB788:5CEA4:1EEAE70:2AD9F08:6A4ECE3F
html-safe-noncebebf61e67b44e762ccd1235a88f016877fce246cee2387553908ca52849b4988
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNzg4OjVDRUE0OjFFRUFFNzA6MkFEOUYwODo2QTRFQ0UzRiIsInZpc2l0b3JfaWQiOiIxOTg1OTYyNDUzOTA1NjI0NjM5IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmacb32fd485f9a892552d97bb870c45ae226768d1e873e9b5f6b7008cf6128453e1
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/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/SocketDev/socket-patch/pull/80/files
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
None41b6ab3ba6d20a71766ac245b5a4a94c6fc672a9cd4da7d44c1b33ab8bf6a21c
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-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
releasee6a744804e8e70f97b4d5a18a94dcc63db22f97a
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/SocketDev/socket-patch/pull/80/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FSocketDev%2Fsocket-patch%2Fpull%2F80%2Ffiles
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
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%2Ffiles
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%2Ffiles&source=header-repo&source_repo=SocketDev%2Fsocket-patch
Reloadhttps://github.com/SocketDev/socket-patch/pull/80/files
Reloadhttps://github.com/SocketDev/socket-patch/pull/80/files
Reloadhttps://github.com/SocketDev/socket-patch/pull/80/files
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/files
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 3 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 1 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/files
feat(apply): safety hardening — atomicity, locking, pnpm CoW, sidecars, Maven gate https://github.com/SocketDev/socket-patch/pull/80/files#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/files
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/files
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/files
ci.yml https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
Cargo.lock https://github.com/SocketDev/socket-patch/pull/80/files#diff-13ee4b2252c9e516a0547f2891aa2105c3ca71c6d7a1e682c69be97998dfc87e
Cargo.toml https://github.com/SocketDev/socket-patch/pull/80/files#diff-2e9d962a08321605940b5a657135052fbcef87b5e360662bb527c96d9a615542
Cargo.toml https://github.com/SocketDev/socket-patch/pull/80/files#diff-d975fab3956058ba8cc187ef25733f371f85ac13917e77e0bfa4c40c73ba5f7b
args.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-08d6a874e759ddf99e7b180428e440a94146a1e79933ef5024c867ef0551ba08
apply.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
lock_cli.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-dd2638eae86291eacfd6f9af8bed482af1a37873d41257c49b0c94b39ebc98d1
mod.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-35d5c2a11f6fdef124a1cf920a1c89a3b3ce18c628c26d6cb9c9b985fe4081b3
remove.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-37716ed3bf0ced8c6011d60b918d7bf9ab7b8a118ce8245507dfe9332e54b27c
repair.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-cc48894cd3c0ab1d1fbdaae98591be3e7ab527d344e47eeafb2f7c0783391c35
rollback.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-49bed4b7989d1153ce40e98f6686a0343d4aef1e9a8f241abfb0d6e006cda233
unlock.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-ecef10cf60e54d7e6301dd8700ecfe3c8b92021d053b7e8f67fcdd3f1c0182ab
ecosystem_dispatch.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-b4621fd545be96d70879527496ba97342c59039dfb7683fbf42fdd3396dce794
json_envelope.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-68353e126471798e14b168b1dfeb941398f9b2e6988b0ddda75b61c0e43e3dd4
lib.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-d4989724ce35f9d98a4444f57ad1c5aa8e4d19c2e55380b6cb39cf1e3139ffc8
main.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-df6d5aa728e15b07a84996ad4e4dc5ddc46be7d2a186da53c67257c729fe33e7
apply_invariants.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-f277b2c9711c6706df21580ee1f0cb8951a30c6dfdeee1478d13a76b4f3d0264
apply_network.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-39cb4c38bebd32d51c05889dcc8568bd155315c2ed445b6ffe978fc524e95659
cli_dry_run_paths_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-9d08542bc9e9c4f4324b66b6c6c8310f80dac8f3891e85926460032ad707d717
mod.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-3a90de02d89152359cd54669c84c0b46c72a1239871af2dc6390ee4fc065d463
docker_e2e_deno.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-4118d6b9b480226a0cfc0a9a56a69fcc9fb34dd75edefb77d4d24b492942e5e9
docker_e2e_maven.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-222c533dc1de15e24e309758340525ac167dd51eb9d5fb8c624556a3815c5a75
docker_e2e_npm.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-a109145dab9df91dc28651a17ace4cf99f19777b7c1d3c22b6cf35f0e459b023
docker_e2e_nuget.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-a72ac7673b7047f9d148229c5616810a093471ba45d588461a4c88795dde0c89
docker_e2e_pypi.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-818804a86a7f3afa0f30450b516a0ceb4c9f1b623ad1c5dc8f044c61933ad2f0
e2e_safety_advisories.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-45b9055e8701d49d7f925e38386a2d84f1caa165fce1df2d489f6109e04a52ea
e2e_safety_cargo_build.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-32c25508204983dfc696059e353955f1277b0f34b866a16274bfc2eb943f309f
e2e_safety_cow.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-e7de362ae2e1319bf7667fda6081dc23d929e66943c29606a2337dba02fd15be
e2e_safety_internals.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-fdd3136605d8fb3836f18f87d66bfb5da72c0a4532039d2d1e09574a4b05d495
e2e_safety_lock.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-83249431ee87500dfc3069486c2790312c27c7f1672ab65cf6da70a04cf6ab84
e2e_safety_pnpm.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-c8553c96e4998f7978999ae80b59c00814aafdeb64a05659ebe35dce81affb0a
e2e_safety_unlock.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-3daf69330024a86185de2d675e8aa3f7cf26bfde6e5f306d39fbf55f2ab28b18
e2e_safety_yarn_pnp.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-f07d47d47e3eebfc1a0d2989e45dc2b11eedc1e63c575263b937d560abadbd97
get_batch_paths_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-ca38e915ad644ea453bad8c9e54dc5c1cd9fcef6e7fd5a76edd34edb0f2f6a47
get_invariants.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-041a96e4c50df7791cada0a01fd6d27894a20446978bced9b98bdb24cea9ed14
in_process_edge_cases.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-8effe9dc4cc40704712d62e17aa67e79e809a1d9926b607f676f72e437e29d30
in_process_python_envs.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-8ee100e1c3a933480dcbb7e4041300936b2543a30343dc05abcb5f6774683204
in_process_remote_ecosystems_apply.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-4c5bba315d1a797e14ba7ca3eb51e1e1648b67464dd0afce3a84f67d964b35e4
in_process_remove_repair_lifecycle.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-b0b6649d535956fd73980e26db76e2581b70a1cd1a2ca40f28631b1ac6efad03
in_process_rollback_all_ecosystems.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-78ed2f874b73cdf659a422dab05273140225bce7d3a62f64efa42857398fdb6c
interactive_prompts_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-65d5b3447fff957592a1df7d77d879c844a948c574c6fb24b9123d076caa094c
output_helpers_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-ff5cf49c48f7a49ba4cf8c488fb25cf8fdd65d5fc4f5c3d8f9a0afa7b6640e5a
repair_invariants.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-b158c4b27a860f7cc6022200818c5c5bbb610f4efee2193ed684a8b32ac88f39
Cargo.toml https://github.com/SocketDev/socket-patch/pull/80/files#diff-a81507369039f3a413794988076d51498643b101e44f83ae022d7a92eef32e70
constants.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-2aae0100504ba46de40cd316d42c258e25d0e5a530da6d224c28b860f887b6f9
cargo_crawler.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-1a317504c32fe95cea02290af89169a34e9a79c664ce03b0a5d81aaf2fd4fe01
composer_crawler.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-d7f703023d5e51cb886f35e4dab6ad0ec64873ff176adaf04a0e88cd28f7f360
deno_crawler.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-b4685b84a828536009179b5f1ae43047e478c53419c7c20238d0c96e32a873ce
go_crawler.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-1a58273da7581c22961a473cab41daf27b97d824b64ace3330c9ffd1d76a4b08
maven_crawler.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-6f8bf895d8a7baeaf1913ea7fdb408274063fb7427a9d448cf5aa16a4993f706
mod.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-071b88c00b64309954affdcc1b58fd7f276e52649fe4c4a36683c5fb34e2c3e5
npm_crawler.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-8957f190b6cf737d6d893158711b8df1d2f75c27530dfb60ef1ce6c4aa30cef6
nuget_crawler.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-be30ff5ed3df7f9707a0a9bd220d794b1c4d09eb26b46e4c34f82d85f22969f4
pkg_managers.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-c578ff0ace64f94d099cb519f51a1f4d7abb7a6abc8e1a9cbfb001d82263b320
python_crawler.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-6c0fb8e446c6867e45cdef6f09ee0183bb32c472ba7e12f259a6bb99b30477a5
ruby_crawler.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-7bc7bac102e76bb7bfa54763158bc5a9e0e4e6ea96de36656a39d499a724cbf3
types.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-4c066db7874eab1bc3409140d19b2abdb8569c936d6819a6bc1a1b21c009b4fe
mod.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-0f470b2318c6020009eca045ee95accc8aa5c2241dbddd91b258aa93391d5a71
operations.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-412872bbcaf0808c9201a327034774848091983c7a6995ca91dbff80b89d2917
recovery.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-ec4c722c7a254fcab9a20129adcb5542a13eb305d110dfbd2a6c841eeba12997
update.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-dd35e6ae0265856ef73f5c8424db68eb9e75b8c704a0089b26e10ee9f6c89ed2
apply.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-fb7cb956a53ea36114f8f20652934dd030bd001b5df3f530da11b60dd09062ac
apply_lock.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-866deddf33cd7bc5ad0e6be3b8c4cb2d9501a91b8fb8a1706fde8ad418964f3d
cow.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-20f01829dba6883ebc1b7237316b4ee2fe736711c8cd25dc0ddcd5ff83bdac38
mod.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-388b2a26fe592d7b6a3866f403c6b6bf9f3604eb9803e8b9cabdf92984de82d0
cargo.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-57f19c19dd6eeec5e1cd144b28bd6245b8b4a5b741a39834854fdd8897e0c626
mod.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-ba23c1ef5eaa7ab91ff5b67ac2fa050d4be913aea7ad1006233dc14451759f5d
nuget.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-5008e8311593b538c0508755baf7d2e339146d76f4881f1a2ca65b61d21a1f6a
types.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-ce6933d32cbfc8a01a50dcb51cd19a5d12dcd38aaf2a90cfb947576cc519ad85
env_compat.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-e366efa33f3748ea3fca1beb7cacbd9c30a2980d8cec040326f2d966d68f0e1a
fs.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-57860e37dbbcf431cf45bb6bec3399208a0adcbebad17bd6248a49de9f12daeb
fuzzy_match.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-60ebcc6bf5f3cd044cbe3336bf4f05db520591a49708b9e4bb4d878254b6da98
mod.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-adc0fa42bf59c145678dc70e62a62a3d0b7c12dba9e5cc5ce224b56c1126a121
process.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-b86977473edd29cfd94da7d69760e774511351e5d8a19c14a4f6031e355b08bb
purl.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-5651fb9d401076a7024852d17da62e877b12d3db0a6fd2d31ca920a6eb3ad702
telemetry.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-ae93ad10cb6df2b6812e021c9170bf85fea1cad3e0940d1b47caccbe9508b22b
blob_fetcher_edges_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-993176979a5c4780849017c165403e3feb5678e4fa7655287d6c62a0752fffa1
mod.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-3751b07dd989810b657db9f4dd0453ee552f02fce89094e66493a367fee3eea6
crawler_cargo_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-05b473142f4ad0d819893f0066402137cb84a32a923340b498539b752f84adab
crawler_composer_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-f8807f72eb98768e55346ada845ca5421b3f16ef86b11f6b6a7363f60d7bf833
crawler_deno_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-cff85424f59c309cc049bb7b1813f2e8c2ddc74be35fc0e1252e09e5e036f2ff
crawler_go_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-2a618379726a0c87151166c667bb15d31c52e47dc99cd8a61155534f420dd6a6
crawler_maven_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-414b00e255149b29adb36e114a74ae35e01b93f94017a9f4d55cf57e3a49f4d4
crawler_npm_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-e5a5f8653ed5ea18f021e45124f55b27e41c08bd7f20483af7ab673a550442cf
crawler_nuget_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-5aed5977de4b813d10d8428c42f1df3a0e04059415dc012294820188b5e6d35d
crawler_python_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-e7ccb1c4c73edd333db60c82d909e6b37d6a1c32a8d726a1836b4c7eec77770e
crawler_ruby_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-9f38871923b2d512681f369e060f38929ed54b51d790211670a52892c753fea6
crawlers_empty_paths_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-61d58f31eb42a60c1cd38d4c498d9f9f035b52ba1c2a6c9967b4be3f27957df9
diff_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-bead2f193244406fd93108c86d23fb292e4bdde6bbcc74765fb74edf33ecfc6b
fuzzy_match_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-8e6b7875a83879738a1222409cdbac6abca76866256b744c5a26831f390d8b0d
package_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-0b897e126347177cb4ba618529e9869652caab4e4d4efe3b52a82c72fe75fbd3
rollback_new_file_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-0ed790fcfb22deb4a43a364d5ccb5a408df4843cca0a2032627e0dc49b9d6b43
telemetry_helpers_e2e.rs https://github.com/SocketDev/socket-patch/pull/80/files#diff-28c36a65d5cf708680295ce7fa68c2779685f5d8cfd170759525e9b0afd2086f
Dockerfile.deno https://github.com/SocketDev/socket-patch/pull/80/files#diff-8f44b21248e91cd61b64eb66c7266cb4e7704bd3ca1d492afaa959b8048ed462
Dockerfile.npm https://github.com/SocketDev/socket-patch/pull/80/files#diff-3d3bd7199ae5b0d2111530154c8a83c94e457bb6c6c7bf5c14bb87c888b6b012
Dockerfile.pypi https://github.com/SocketDev/socket-patch/pull/80/files#diff-28bb919948e94f6f96509415c50fa4e271063cc5109c45a188526336dc790d6e
.github/workflows/ci.ymlhttps://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
View file https://github.com/SocketDev/socket-patch/blob/1e181d0d15b1799901cb8e3f0e531c8844646aab/.github/workflows/ci.yml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
https://github.com/SocketDev/socket-patch/pull/80/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03f
Cargo.lockhttps://github.com/SocketDev/socket-patch/pull/80/files#diff-13ee4b2252c9e516a0547f2891aa2105c3ca71c6d7a1e682c69be97998dfc87e
View file https://github.com/SocketDev/socket-patch/blob/1e181d0d15b1799901cb8e3f0e531c8844646aab/Cargo.lock
Open in desktop https://desktop.github.com
how customized files appear on GitHubhttps://docs.github.com/github/administering-a-repository/customizing-how-changed-files-appear-on-github
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/files
Cargo.tomlhttps://github.com/SocketDev/socket-patch/pull/80/files#diff-2e9d962a08321605940b5a657135052fbcef87b5e360662bb527c96d9a615542
View file https://github.com/SocketDev/socket-patch/blob/1e181d0d15b1799901cb8e3f0e531c8844646aab/Cargo.toml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/files#diff-2e9d962a08321605940b5a657135052fbcef87b5e360662bb527c96d9a615542
https://github.com/SocketDev/socket-patch/pull/80/files#diff-2e9d962a08321605940b5a657135052fbcef87b5e360662bb527c96d9a615542
crates/socket-patch-cli/Cargo.tomlhttps://github.com/SocketDev/socket-patch/pull/80/files#diff-d975fab3956058ba8cc187ef25733f371f85ac13917e77e0bfa4c40c73ba5f7b
View file https://github.com/SocketDev/socket-patch/blob/1e181d0d15b1799901cb8e3f0e531c8844646aab/crates/socket-patch-cli/Cargo.toml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/files#diff-d975fab3956058ba8cc187ef25733f371f85ac13917e77e0bfa4c40c73ba5f7b
https://github.com/SocketDev/socket-patch/pull/80/files#diff-d975fab3956058ba8cc187ef25733f371f85ac13917e77e0bfa4c40c73ba5f7b
crates/socket-patch-cli/src/args.rshttps://github.com/SocketDev/socket-patch/pull/80/files#diff-08d6a874e759ddf99e7b180428e440a94146a1e79933ef5024c867ef0551ba08
View file https://github.com/SocketDev/socket-patch/blob/1e181d0d15b1799901cb8e3f0e531c8844646aab/crates/socket-patch-cli/src/args.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/files#diff-08d6a874e759ddf99e7b180428e440a94146a1e79933ef5024c867ef0551ba08
https://github.com/SocketDev/socket-patch/pull/80/files#diff-08d6a874e759ddf99e7b180428e440a94146a1e79933ef5024c867ef0551ba08
https://github.com/SocketDev/socket-patch/pull/80/files#diff-08d6a874e759ddf99e7b180428e440a94146a1e79933ef5024c867ef0551ba08
https://github.com/SocketDev/socket-patch/pull/80/files#diff-08d6a874e759ddf99e7b180428e440a94146a1e79933ef5024c867ef0551ba08
crates/socket-patch-cli/src/commands/apply.rshttps://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
View file https://github.com/SocketDev/socket-patch/blob/1e181d0d15b1799901cb8e3f0e531c8844646aab/crates/socket-patch-cli/src/commands/apply.rs
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SocketDev/socket-patch/pull/80/{{ revealButtonHref }}
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
https://github.com/SocketDev/socket-patch/pull/80/files#diff-613e6131c3d7005ade62351d4f879e7c817bafdc2f6d6fdd87e2b259bebfb9bf
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/files
Please reload this pagehttps://github.com/SocketDev/socket-patch/pull/80/files
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.