Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

CLI_CONTRACT.md documents status paidRequired for get and scan, but get emits "paid_required" and scan never reports it

Offen Anfängerfreundlich
#982 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
74/100
Issue-Typ
Dokumentation
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
rust
Bereich
cli, documentation

Rechercherichtung

Lies CLI_CONTRACT.md um die Zeilen 1092 und 1163 und vergleiche sie dann mit den zwei handgeschriebenen paid-JSON-Blöcken in crates/socket-patch-cli/src/commands/get.rs (L2894-L2905 und report_paid_required_uuid bei L3179-L3215) sowie mit select_accessible in scan/mod.rs. Schreibe die paid_required-Zeile und das Status-Enum des Contracts so um, dass sie zum ausgelieferten Verhalten passen, extrahiere optional einen gemeinsamen Emitter in get.rs und verifiziere mit cargo test -p socket-patch-cli --test get paid (4 Tests müssen grün bleiben). Fertig, wenn der Contract dem ausgesendeten JSON entspricht und ein neuer contract-parsing-Test, angelehnt an contract_gradle_codes.rs, die Schreibweise des Statuss behauptet.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

agent:triaged arch-audit bug priority:p3

[agent] Filed by the scheduled architecture audit routine (CLI and core). Register: discussion #560 register.

Kind: bug (contract drift). Source: new finding; register C54.

Problem (main @ 9c43dfc)

CLI_CONTRACT.md documents a paid-plan refusal that no command emits, and doesn't document the one that get does emit.

  • What the contract says. The envelope's status enum lists "paidRequired". The errorCode table row paid_required says: action failed, status=paidRequired, emitted by "get/scan".

  • What get emits. Both paid paths hand-write a legacy object with a snake_case status and no events or errorCode:

    Both print {"status":"paid_required","found":N,"downloaded":0,"applied":0,"patches":[…]} and exit 0.

  • What scan emits. Nothing paid-specific. It drops inaccessible patches in select_accessible and reports them only as the paidPatches / canAccessPaidPatches counts.``

  • Status::PaidRequired is never constructed. The variant is referenced only by tests below #[cfg(test)] (L481). Its own doc comment already says "Nothing emits it yet (get reports this via its legacy status: "paid_required" shape; scan never does)". So the code knows; the contract was never updated.

Proof by execution. On 9c43dfc, cargo test -p socket-patch-cli --test get paid ran twice: 4 passed both times. Those tests pin status == "paid_required" and exit 0 for both get paths: get_edge_cases_e2e.rs#L241-L287 and get_invariants.rs#L439-L490.`` A consumer that follows the contract and matches status == "paidRequired" or `errorCode == "paid_required"` never matches.

Symptoms

None filed. PR bots that implement the documented "upgrade your plan" branch silently never take it.

Impact

Small and user-visible: the documented machine contract for the paid tier is wrong in three ways (status spelling, action/errorCode, and the command list). It's another instance of C13/C33: the contract's code tables aren't checked against the code.

Proposed change

Make the contract describe what ships. No behavior change.

  • Rewrite the paid_required row (L1163): get only; legacy top-level status: "paid_required" with found/downloaded/applied/patches[], exit 0, no events/errorCode. Keep the existing get <uuid> proxy sentence, which is accurate.
  • State that scan reports paid patches only through paidPatches and canAccessPaidPatches.
  • In the status enum (L1092), mark paidRequired as reserved, or remove it. Deleting Status::PaidRequired and its two test references is optional and belongs with this change if it is removed.
  • Route the two hand-written get JSON blocks through one helper so the shape is written once.

Moving get onto the unified envelope (where paidRequired would become real) is the owner decision in #704 and is out of scope here.

Size and scope

CLI_CONTRACT.md (two lines), get.rs (one shared ~20-line emitter replacing two blocks), and optionally json_envelope.rs (−6 lines). Under 60 changed lines.

Acceptance criteria

  • The contract's paid_required row and status enum match the emitted JSON.
  • get's two paid JSON blocks share one emitter.
  • The 4 --test get paid tests stay green.
  • Add a test that reads the contract's paid_required row and asserts the status spelling get emits, in the style of contract_gradle_codes.rs.

Dependencies

  • Independent of #704; if #704 later moves get onto the envelope, that PR updates this row again.
  • Feeds #948 (checked contract reference) and #930 (typed error codes).
Vorherrschende Sprache
Rust
Sterne
8
Forks
0
Ø Merge
1 T. 1 Std.
Gemergte PRs (30 T.)
257

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.