[1.0 Review] session id / env var / lifecycle 用語の凍結 #6
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#6
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?
背景
session は daemon が所有し、client は attach/detach で借りる。
explanation/architecture/session-lifecycle.mdに attach additive(same-user mirroring)、post-exit grace(5s)、FELIS_SESSION_ID/FELIS_SOCKETの stamping、cross-carrier re-dial が仕様化されている。id は 32 hex 桁(u128)でshort_idは表示用の最短一意 prefix(floor 8桁)。現状の問題 / 凍結前に決めるべき点
1. session id 表現
short_idの動的 prefix で緩和しているが、prefix は roster 依存で保存不可(docs/reference/cli.mdで警告)。tmux の%3のような短い stable handle を持たないのは、handle 再利用の危険を避ける意図。bytes(16)→ string 変換、log の既存 hex 記法、$FELIS_SESSION_IDの互換を全て壊す。今しか変えられない。問い: 1.0 で
u128hex を凍結するか、ULID 等への移行を今検討するか? 現行の「hex は wire / log / env / docs で一つの綴り」という一貫性は強い。2. prefix resolution の所在
現行は daemon-side で
id_prefix→ResolvedId::{Ok, NoMatch, Ambiguous{count}}に解決。client-side でlist取得→ローカル match する案は「2 round-trip + race」で却下されている。1.0 でこの daemon-side 解決を凍結として明記すべき。Ambiguousが count のみで候補 id を返さないのも、情報漏洩を避ける設計だが、UX として候補提示が欲しくなる余地はあるか。3.
killvsdestroyvsevictvsdetachの用語OpsMsg::Destroy/Detached/PushMsg::Evicted/SessionMsg::Detachsessions kill/evictkill_session/detachkillは Unix プロセス由来、destroyはオブジェクトライフサイクル由来。control-surfaces.mdに命名規則の記録はあるが、1.0 で CLI をdestroyに改名する破壊的統一の是非は今しか議論できない(現状killはtmux kill-sessionとの類推で選ばれている)。4.
switch/retargetの scopeDefault(last window input owner or sole window)/Attachment(id)/Allの3 scope と、--from <prefix>の from-session 指定。acceptedは outbox 受理数で landing 保証しない(acceptance, not landing)。deniedは resolve-time のみ。1.0 で
acceptedを「window が land した」まで拡張するoperation_id+landed/failedの追跡を導入するか、現行の acceptance 止まりで凍結するか。explanation/architecture/ipc.mdの「Acceptance, not landing」は defer 決定だが、1.0 で defer を維持するか再評価。5. 環境変数の surface
FELIS_SESSION_ID(32 hex, 全 spawn で強制)FELIS_SOCKET(daemon endpoint,--socket優先,FELIS_SESSION_IDと同様に scrub/deny 対象, REQ-912)FELIS_HOST/FELIS_ORIGIN_SESSION_ID/FELIS_CWD(pipe/runtransient の origin context)FELIS_TERM/FELIS_TERM_PROGRAM(terminal identity hatch, daemon 環境からの読み出し)FELIS_SOCKETはwindow retargetが global--host/--socketを拒否する代わりにFELIS_SOCKETを読むことで「non-default socket の window からでも retarget 可能」にしている。FELIS_HOSTは transient が remote かどうかを判定するために使う。問い: 1.0 で env var の命名を
FELIS_*で凍結するか?FELIX的な typo 耐性、XDGとの衝突は無いか。FELIS_TERMがTERMを override する hatch であることをreference/terminal-identity.mdでより強調すべき。6. 暗黙の auto-spawn ポリシー
connect_or_spawn_daemonがfelis-client-coreにあり、sessions spawnと window launch は auto-spawn、sessions list等は--no-spawn(relay ではrelay --no-spawn)で cold socket をexit 2にする。control-surfaces.mdの「A session verb never spawns...」は意図的。1.0 でこの「spawn する verb だけが daemon を起こす」線引きを変える余地は無いか。提案
short_idfloor 8 / never-reuse / daemon-side prefix 解決をreference/cli.mdとreference/ipc.mdで「1.0 凍結」として明記し、将来の ULID 移行はexplanation/architecture/session-lifecycle.mdに Revisit trigger として記録。kill/destroy用語を 1.0 で統一しないなら、control-surfaces.mdの命名規則表に「なぜ CLI はkillで wire はDestroyか」を残し、CLI をdestroyに alias 追加する案は却下として記録(alias は永続の互換負債になるため)。reference/terminal-identity.mdに normative table として凍結し、各 var の生成元(daemon stamp vs relay carrier block vs clientSpawnArgs.env)を明記。判定基準
accepted報告の既存パターンに一意に収まること。FELIS_*を知らない shell script が、誤ってFELIS_SESSION_IDを上書きしてしまう事故をSpawnArgs.envの deny で防げること(REQ-912)。cc @natsukium
Superseded by #20, #22, and #24. The later review retained the session-id/environment model and split the remaining spawn, lifecycle, and retarget-completion changes under #12.