[v0.1/Tracker] Close release blockers before v0.1.0 #12
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#12
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?
v0.1.0 release-readiness tracker
Review snapshot:
2645b986plus the review working treeFocused protobuf/IPC review:
5077d74b, tracked by #52Compatibility assumption: pre-
v0.1.0; public surfaces may still break without migrationThis issue tracks the first public contract. Close it only after every P0 and P1 child below is closed, accepted decisions are recorded in their owning reference/explanation twins, and the exact tagged revision passes the release gates.
Decisions that are not being reopened
x86_64-linuxas supported for v0.1.0. Other targets remain buildable but ungated.P0 — release blockers
P1 — freeze before the first public contract
Opsand make create+attach atomic--config PATHsurfacefont.sizetofont.size_pxRelease completion
v0.1.0, and publish immutable artifactsEach implementation issue owns its reference/explanation/manual/schema/help/completions/man/
skills/felis/CHANGELOG.mdcascade where applicable. #31 performs the final cross-repository consistency sweep rather than postponing those cascades until release day.Recommended dependency order
Explicitly deferred past v0.1.0
These are not closure dependencies for this tracker:
Until #32 lands, the product claim remains: sessions survive client/window loss, not daemon loss.
Contract freeze boundary
The first tag freezes:
It does not freeze human output layout, log wording, unpublished Rust APIs, private module structure, or every crate's current
pubvisibility.felis-protocolremains free to evolve as a Rust API until it is separately published.Earlier review issues
#3–#11 were question-oriented review notes for an assumed “1.0” freeze. This review checked those proposals against implementation, selected concrete v0.1.0 changes, and split them into the implementation-sized issues above. The older issues are closed as superseded; their discussion remains available as review history.
Pre-release: close release blockers before v0.1.0to [v0.1/Tracker] Close release blockers before v0.1.0CLI argument grammar の focused review を #55 に整理した。新規 P1 は #53 (
sessions spawnの command separator 統一) と #54 (ignored root--trace-perfの除去/scope 制限)。既存 #17/#23/#27/#37–#39/#42 に統合すべき acceptance gap も #55 と各 comment に記録した。CLI command/option meanings がこの tracker の freeze boundary に含まれるため、#53/#54 を P1 closure dependency として扱いたい。
Issue triage adds #42 as a P1 closure dependency: shell completion must not start an unbounded or interactive SSH connection on
<TAB>, and the implementation must match the explanation document’s local-only contract. The broader SSH review (#44) is closed after folding carrier grammar into #23, deferring the macOS endpoint bug (#41) to P2, retaining the already-recorded--ssh-arg/ControlMaster and stable-agent decisions, and closing the incorrect cross-host env-leak report. Together with the earlier #53/#54 comment, the release tracker now has three post-snapshot CLI blockers: #42, #53, and #54.Triage plan update (2026-09-03)
Every open child (#13–#51, 31 issues) now carries a source-grounded plan comment and the
status/plannedlabel. The plan passed an independent reviewer (pisol) after seven rounds; 19 blockers were resolved along the way and are recorded in each issue's "Review amendments" sections. No priority or release label changed: every P0/P1 stays a v0.1.0 blocker, every P2 stays deferred.Dependency order (supersedes the orders in #12 and #52 where they conflict)
MAX_PASTE_BYTESpinned); #26 after #14.ArmMeta,oneof id,CorrelationClass) → #46 (driver phases on that metadata) → #21 (after #16 and #20).operation_id,queued) first, as its own commit.accepted→queued,short_idremoval, exit-code table); (b) the clap/usage/log/ValueEnum/--to-hostwork. #27 after #23. #22 (client-only) any time after #24(8).The conflict between #12 (step 10: #50 then #29) and #52 (#50 before #30) resolves as
#30 → #50 → #29: #50 needs the final arm set and 2.0's clean ledger, and #29's golden
conversations must be recorded against the frozen wire. The #23/#24 cycle is broken by
splitting #23: its rename/cleanup half follows #24's shape, and #24 never waits on #23.
Freeze-boundary additions
The Linux default daemon endpoint rule (
$XDG_RUNTIME_DIR/felis, else${TMPDIR:-/tmp}/felis.<uid>) is observable behavior and is frozen at v0.1.0; #41 must not alter it.Triage update (2026-09-05)
Corrections to the body
f56f5529(the #138 decision) keeps protocol 1.9 as the first public baseline and folds the pre-releasebase:lines intofirst-release. #147, which asked the same question, is closed onto that commit. Order steps 11-13 read as: #50 and then #29 on the 1.9 tree.New P1 children from the 2026-09-05 review (labeled
priority/P1+release/v0.1.0; each carries a verdict comment)--configonfrontend: reject), #141 (remote auto-spawn contract: fix the reference, add the policy matrix test), #145 (Point-diagnostic row, one wire→ErrorKindmap).clienttype matches runtime), #143 (accept TOML int forsize_px, freezeindexedkeys as strings).Where they slot in the order: all before #29, since #29 records the schemas and goldens they change; none touches the wire, so #50 is unaffected. #139's diagnostic and #137's path change are the only behavior changes.
Post-release follow-up: #115 (baseline commit after v0.1.0 publishes) is P2 but due immediately after #31.
Deferred (P2): #110-#114, #116-#123 (migrated from the deleted
docs/backlog.md; #119/#121/#122/#123 are blocked on upstream winit/wgpu/rustc), #78 (CI flake under runner load).Triage update (2026-09-05, evening)
The nine P1 children from the second review pass now carry a "Triage plan (2026-09-05)" comment and
status/planned. Three premises did not survive source grounding: #136 (--configonfrontendis already refused sincef2083767), #139 (the relay degrades on an over-cap carrier block; nothing reportsdaemon_unreachable), #143 item 1 (toml 1.1.5acceptssize_px = 14). Each plan says what remains.Order correction. #144 (
sequence→optional NonZeroU64,attached_at→google.protobuf.Timestamp,idle_secondsabsent = attached) and #146 (SpawnArgs.dims→optional GridDims, create sentinel dropped) do break the wire, each with abase:line inBREAKING.md, so they land before #50 as well as before #29. Remaining order: #22, #25 → #136 #137 #139 #140 #141 #143 #145 (any order, small PRs) → #144, #146 → #50 → #29 → close #52/#55 → #31.Skew posture for both wire changes: pre-release semantic break on the 1.9 tree; daemon and client are rebuilt together; no skew code (no released peer exists, per the #138 decision).
Freeze-list addition from #275 (plan v3, comment #275 (comment)): the default daemon endpoint derivation joins the first tag's frozen contract, stated once before the tag rather than inferred later. The rule as of that change: Linux
$XDG_RUNTIME_DIR/feliswhen set →/run/user/<uid>/feliswhen that directory exists, is owned by the uid, and is mode0700→${TMPDIR:-/tmp}/felis.<uid>; macOS$TMPDIR/felis.<uid>when set →confstr(_CS_DARWIN_USER_TEMP_DIR)/felis.<uid>→/tmp/felis.<uid>; Windows unchanged. Empty variables read as unset; a relativeXDG_RUNTIME_DIRreads as unset (today's behavior). The earlier "frozen at v0.1.0" wording in #41's triage referred to the pre-#275 rule and was a triage decision, not a shipped promise; no tag exists yet.