[v0.1/CLI Args Review] Require -- before detached command argv #53
Labels
No labels
priority/P0
priority/P1
priority/P2
release/v0.1.0
status/blocked
status/planned
type/bug
type/design
type/test-gap
type/tracker
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
natsukium/felis#53
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
現状
felis sessions spawnだけが command argv の境界を--で固定していない。#[arg(trailing_var_arg = true, allow_hyphen_values = true)]なので、felis sessions spawn htopとfelis sessions spawn -- htopの両方を受理する。Usage: felis sessions spawn [OPTIONS] [CMD]...と表示する一方、docs/reference/cli.mdと tutorials はspawn [-- cmd…]/spawn -- <cmd>を正規形として説明している。felis sessions spawn htop --format jsonの--format jsonは machine output 指定ではなく htop の引数になる。felis sessions spawn --jsonは unknown option にならず、--jsonという program を spawn しようとして daemon へ接続する。crates/felis-cli/src/tests.rs::the_retired_json_flag_is_an_unknown_argumentも、この危険な例外を明示的に固定している。felis -- <cmd>) と retarget (felis ssh host -- <cmd>,felis window retarget -- <cmd>) はすでにlast = trueで--を要求している。これは互換性より安全性を優先できる初回リリース前に直すべき文法差である。option typo が usage error ではなく「その名前の program を実行する要求」に変わる境界は、CLI の explicitness と fail-closed 性を損なう。
提案
sessions spawnの command を bare launch / retarget と同じ-- <CMD>...grammar に統一する。trailing_var_argをやめ、last = trueを使う。felis sessions spawn htopは usage error (exit 2) にする。felis sessions spawn -- htop --format jsonは--format jsonを child argv として保つ。felis sessions spawn --format json -- htopは felis の machine format として保つ。frontend <name> [ARGS]...は明示的な opaque pass-through namespace なので例外のままにする。Principle check
Acceptance criteria
spawnの usage が[OPTIONS] [-- <CMD>...]になる。spawn htop/spawn --json/spawn htop --format jsonが clap usage error になる。spawn --format json -- htop --format jsonでは前者だけを felis が消費し、後者は child argv にそのまま残る。docs/reference/cli.md、tutorials、skills/felis/SKILL.md、CHANGELOG.mdを同時に更新する。対象
crates/felis-cli/src/cli_sessions.rscrates/felis-cli/src/tests.rsdocs/reference/cli.mddocs/tutorials/drive-without-a-window.mdskills/felis/SKILL.mdParent review: #55
Parent review: #55