Skip to content

fix(cli): argparse errors go to stderr as bare text — agent parsing stdout JSON sees silent-empty (agent trap) #315

Description

@Wolfvin

Mengapa (falsifiable — ditemukan saat DOGFOOD 2026-07-18, north-star agent-ergonomics)

4 umbrella (context/impact/audit/deps) pakai pola <umbrella> <workspace> --check X --name Y (workspace positional). Tapi search positional-nya = pattern, bukan workspace. Agent yang konsisten menulis pola umbrella lain kena jebakan:

$ codelens search . --mode symbol execute
exit=2 ; stdout=0 bytes
stderr: codelens.py: error: unrecognized arguments: execute

. jadi pattern, execute jadi extra → argparse error. Error ke stderr, stdout KOSONG. Agent yang mem-parse stdout JSON (cara pakai normal) dapat nol byte = menyimpulkan "tak ada hasil" — padahal itu error argumen. search execute --mode symbol (pattern-only) bekerja (69 hits), tapi kegagalan senyap membuat agent salah simpul tanpa sadar.

Dampak

Agent-ergonomics (north-star #279): CodeLens dibangun agar agent berhenti grep. Kalau CLI error muncul sebagai stdout-kosong, agent tak bisa membedakan "genuinely no results" vs "salah argumen" — silent-wrong, kelas yang sama dgn #293/#300 (tool bohong ke agent).

Tujuan

Error CLI (argparse maupun runtime) muncul dalam envelope JSON di stdout ({"s":"error","error":...}) atau minimal tidak terbaca sebagai hasil-kosong. Agent selalu bisa membedakan error vs empty.

Constraint

  • Jangan pecah pemakaian interaktif (stderr human-readable tetap OK) — tapi --format json/compact harus emit error ke stdout.
  • Pertimbangkan konsistensi positional search dgn umbrella lain (workspace positional) ATAU dokumentasikan tegas + validasi argumen berlebih dgn pesan yang mengarah.

Definition of Done

  • search . --mode symbol execute (atau argumen salah lain) → error terbaca di stdout untuk --format json/compact, bukan nol byte
  • Agent bisa membedakan error vs empty dari stdout saja
  • Test: invalid-arg invocation → stdout berisi status error

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions