[1.0 Review] config.toml の単一文書オーバレイと探索パス・キー名の凍結 #4
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#4
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?
背景
config.tomlは client-only(daemon は読まない)で、1ファイルに[client.<name>]オーバレイを深マージする設計。reference/config.mdとexplanation/architecture/control-surfaces.mdに「一つの文書を全クライアントで共有する」決定として記録されている。1.0 でファイル形式と探索パスを凍結する前に見直す。現状の問題 / 凍結前に決めるべき点
1. 単一文書 + オーバレイ vs 複数ファイル
現行:
~/.config/felis/config.toml(Linux: XDG, macOS: Application Support, Windows:%APPDATA%\felis\config\config.toml)1ファイルに base +client.felis/client.<other>を同居。ConfigDocument→EffectiveConfigの二段階解決、unknown key は warn、他 client セクションは inert。長所: 1箇所で全体を見渡せる、共有できない値が drift しない。
短所:
additionalProperties: falseにできない理由)。felis config check --client <id>が「一つの overlay だけ」を見る仕様は直感的でない。config.tomlが/nix/storeへの symlink)では mtime ではなく resolved path の変化で reload する特殊分岐が必要。代替案(今なら破壊的変更可能):
config.toml+config.d/<client>.tomlの drop-in ディレクトリ。felis/config.tomlとfelis/clients/felis.tomlに分離。いずれも
additionalProperties: falseを有効にでき、JSON Schema を strict にできる。2. 探索パスと platform 差
~/Library/Application Support/felis/config.tomlで~/.config/felisを無視する点はProjectDirs由来だが、ユーザの混乱が継続(docs/how-to/fix-terminfo-problems.mdにも言及)。1.0 でXDG_CONFIG_HOMEを全 platform で優先するか、両方を読むフォールバックにするか。config\セグメント(%APPDATA%\felis\config\config.toml)も同様。felis configの E2E テストが Windows でcfg(unix)に限定されているのは、Known Folder API が env var を読まないため。--config <path>/FELIS_CONFIGのような override surface が無いのが直接原因(backlog.mdにも記載)。問い: 1.0 で config path の override(
--configflag /FELIS_CONFIGenv)を追加するか? 追加しないなら Windows でのテスト不能を 1.0 の既知制限として凍結する。3. キー名とデフォルト値の凍結
window.opacity(0.0–1.0) とwindow.backdrop(none/blur/acrylic/mica/tabbed) の結合:blurはopacity < 1.0でないと無効、Windows material は常に title bar のみに効く。1キーに OS 依存の値集合を持たせるのは例外として文書化されているが、将来backdropに Linux 値が追加されると OS ごとの値集合がさらに分岐する。clipboard.osc_52 = "mirror" | "system"は security-conscious デフォルトだが、将来的に"reject"を追加する余地があるか。font.fallbackが[{family, features}]の配列で、省略時 auto-discover(CJK+emoji+nerd)。空配列で auto-discover を無効化する暗黙の切り替えは、explicitness 原則と緊張する。shader.post = {builtin="trail"} | {file="..."}の2形態は、将来shader.post = ["trail", {file=...}]のような多段 post-process を許すかどうかに影響。4. 生存期間と reload
font.size等は live reload、window.opacityの opaque↔translucent 跨ぎは要 relaunch という例外がreference/config.mdに表で列挙されている。1.0 で「どれが live でどれが要 relaunch か」をユーザが推測できる命名(例:window.opacityをwindow.startup_opacityに)にする必要はないか。提案
reference/config.mdの「Not configurable today」(scrollback depth)と併せて「1.0 で凍結したキー集合」として明記。追加キーも additive(#[serde(default)])で読める契約は維持するが、キー名自体は今しか変えられない。--config/FELIS_CONFIGの要否をbacklog.mdの「config path control surface」項目と紐づけて判断。追加するならfelis config {path,check,show-effective}がそれを尊重する仕様にし、Windows の E2E をcfg(unix)から外す。client.<name>オーバレイを残すなら、JSON Schema のadditionalPropertiesを non-strict にする理由をfelis-config.schema.jsonのコメントとconfig.mdに残し、将来の strict 化トリガ(例: 全 client が schema を共有できた時)をexplanation/architecture/control-surfaces.mdに記録。判定基準
felis config pathの出力を見て、どこに何を書けばいいか迷わないこと。cc @natsukium
Superseded by #27 (
--config PATH) and #28 (font.size_px). The later review retained the single-document overlay and default discovery model; #12 now tracks the accepted v0.1.0 changes.