Route `get <uuid>` agent mode through download_and_apply_patches_into instead of a second copy of the engine

Offen
#1,835 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
45/100
Issue-Typ
Refactoring
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
rust
Bereich
cli

Rechercherichtung

Start in crates/socket-patch-cli/src/commands/get.rs at the UUID agent-mode path and compare it with download_and_apply_patches_into in crates/socket-patch-cli/src/commands/agent_download.rs. Read the existing UUID tests in get.rs and tests/get/, then route the fetched patch through the shared engine and remove the duplicate helpers. Done when the listed output, save-only, dry-run, and nested-apply behaviors meet the acceptance criteria and the UUID tests pass.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

agent:triaged arch-audit priority:p3 refactor

[agent] Filed by the scheduled architecture audit (audit-cli-tests). Register: register comment.

Kind: refactor. Register ID: T01.

Problem

get <uuid> in agent mode does not use the shared download engine. Instead, save_patch_record plus save_and_apply_patch (get.rs L1931-L2172, about 240 lines) repeat, for a single patch, every step of download_and_apply_patches_into (agent_download.rs L1700-L1886):``

  • the lock acquire;
  • the fail-closed manifest read-modify-write;
  • the files_for_manifest guard;
  • decide_patch_action;
  • write_all_patch_blobs and the unwind on failure;
  • the uuid-drift and gitignore warnings;
  • the lock hand-off and the nested apply;
  • record_apply_outcome.

The copies have already drifted:

  • No-files message: "Patch X has no applicable files; nothing to apply" in get.rs L1951, against "patch has no applicable files" in the engine.```
  • Blob failure: get prints its own "Error: Blob decode or write failed for patch" line and builds a different envelope (L1976-L1995).
  • Unchanged record: the uuid path re-applies a record that hasn't changed (L2064-L2068). The engine applies only added or updated records.
  • persist_blobs: the uuid path ignores DownloadParams.persist_blobs.

The engine already supports a pre-fetched patch: fetch_selected_patches takes a prefetched map, and the vendored arm of the uuid path already goes through download_patch_records_preflighted with it.

Proposed change

  • Build the one-element prefetched map from the PatchResponse that get <uuid> fetched, and call download_and_apply_patches_into, as the vendored arm does.
  • Delete save_patch_record and save_and_apply_patch.
  • If the re-apply of an unchanged record (#454) is still wanted, make it an engine rule for every caller, not a get-only branch.

Size

get.rs and possibly agent_download.rs. About −230 / +30 lines.

Acceptance criteria

  • get <uuid> human and --json output stay the same, except the no-files and blob-failure wording, which takes the engine's form.
  • The existing get uuid tests in get.rs mod tests and tests/get/ stay green, and they are updated only where they pinned the drifted wording.
  • --save-only, --dry-run and the nested-apply exit codes are unchanged.
Vorherrschende Sprache
Rust
Sterne
8
Forks
2
Ø Merge
19 Std. 24 Min.
Gemergte PRs (30 T.)
669

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus SocketDev/socket-patch

Alle Issues in SocketDev/socket-patch

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.