spike libcosmic shell lifecycle
This commit is contained in:
1 parent
36d52373a1
commit
a836b55eb9
7 files changed
+5309
-85
No files matched your search
@@ -0,0 +1,68 @@
|
||||
# ADR 0001: libcosmic for the Ferese shell
|
||||
|
||||
Status: provisional, pending the M8 lifecycle spike
|
||||
Date: 2026-09-25
|
||||
|
||||
## Decision
|
||||
|
||||
Use libcosmic for the Ferese shell UI if the M8 lifecycle spike passes. Pin the
|
||||
dependency to commit `03d7dcb832bc6d15bc1bb07327a1aa426b2d5bc0` until a suitable
|
||||
stable release exists.
|
||||
|
||||
Keep the spike in `tools/ferese-shell-spike`; it is not the production shell.
|
||||
The production shell will continue to use public layer-shell for surface roles
|
||||
and Ferese-private protocols only for control and semantic effects.
|
||||
|
||||
## Why
|
||||
|
||||
libcosmic is a Rust-native toolkit designed for Wayland desktop components. Its
|
||||
current API can create layer-shell surfaces without an ordinary xdg-toplevel,
|
||||
select an active or explicit output, request keyboard interactivity, observe
|
||||
configure/focus/output events, and destroy surfaces through the runtime.
|
||||
|
||||
The previous GPUI direction depended on an older release and did not provide a
|
||||
convincing first-class path for Ferese shell surfaces.
|
||||
|
||||
## Constraints found during source review
|
||||
|
||||
- The selected revision declares Rust 1.93, so the isolated spike overrides the
|
||||
workspace's Rust 1.87 minimum. Ferese core crates keep their existing MSRV.
|
||||
- libcosmic exposes the created `WlSurface` in public Wayland layer events. This
|
||||
is necessary but may not be sufficient to bind `ferese-effects-v1` on the
|
||||
toolkit's event queue.
|
||||
- The spike must therefore prove private semantic-effects attachment before the
|
||||
production shell adopts libcosmic. If that cannot be done through supported
|
||||
APIs, Ferese will place a thin native Wayland surface adapter beneath the UI
|
||||
or revisit this decision; it will not replace public layer-shell with a
|
||||
private surface role.
|
||||
|
||||
## Validation gate
|
||||
|
||||
The provisional decision becomes accepted only after the spike demonstrates:
|
||||
|
||||
1. public layer-surface creation on the intended output;
|
||||
2. output discovery and updates;
|
||||
3. configure and resize delivery;
|
||||
4. on-demand keyboard focus and focus release;
|
||||
5. clean compositor-driven and application-driven shutdown; and
|
||||
6. `ferese-effects-v1` attachment to the toolkit-owned surface without an
|
||||
unsupported libcosmic or Iced fork.
|
||||
|
||||
## Spike result
|
||||
|
||||
Items 1 through 5 pass against nested Ferese. Item 6 passes after libcosmic
|
||||
publishes the surface in a focus event: the spike reconstructs a supported
|
||||
`wayland-client` connection handle, binds the capability-filtered effects
|
||||
global, and assigns `panel` to the same `wl_surface`.
|
||||
|
||||
The decision remains provisional because libcosmic does not currently publish
|
||||
its layer-surface creation event to the application. A normal non-focusable top
|
||||
bar therefore has no deterministic pre-map surface handle. Production work may
|
||||
proceed with libcosmic widgets and application state, but the top-bar surface
|
||||
path must first gain either:
|
||||
|
||||
1. a supported upstream surface-created callback; or
|
||||
2. the thin native Wayland surface adapter already allowed by the M8 plan.
|
||||
|
||||
Ferese will not make the persistent top bar steal keyboard focus merely to
|
||||
obtain its surface handle.
|
||||
@@ -1591,9 +1591,11 @@ budget on the reference integrated GPU.
|
||||
|
||||
### M8: Overview and shell
|
||||
|
||||
First spike GPUI layer-surface creation, output discovery, focus, configure, and
|
||||
shutdown behavior. If the spike fails its lifecycle tests, use a thin native
|
||||
Wayland shell adapter or record a toolkit decision before proceeding. Implement
|
||||
First spike the selected shell toolkit's layer-surface creation, output discovery,
|
||||
focus, configure, and shutdown behavior. The initial selection is libcosmic,
|
||||
pinned to a reviewed Git revision because it has not published a current crates.io
|
||||
release. If the spike fails its lifecycle tests, use a thin native Wayland shell
|
||||
adapter or record a new toolkit decision before proceeding. Implement
|
||||
the compositor overview scene, minimal `ferese-shell-v1` control/metadata
|
||||
protocol, top bar, apps-only launcher UI, workspace UI, OSD, and the standard
|
||||
notifications D-Bus service.
|
||||
|
||||
Reference in new issue
Block a user