Watch
1
0
Fork
You've already forked SouveraineOS
0

TASK-60: compositor half done, shell half specified

This commit is contained in:
Fimeg 2026-08-07 09:50:03 -04:00
commit f71f0d722a

View file

@ -80,6 +80,49 @@ for the same shape and is worth reading before the shell half.
composition, so `focus_border` suppresses itself while a window is owned by
the transition and the card carries the chrome.
### Compositor half: DONE 2026-08-07 (`souveraine-viewtop` `3c85397`)
Gates green on archdev — 239 tests, `cargo fmt`, workspace clippy and
`--features kms` clippy, all `-D warnings`. Not yet on the phone: needs a CI
package and a session restart.
- `crates/compositor/src/transition.rs` — the state. `begin(&[TransitionTarget])`
/ `shift_to(0..=1)` / `commit(EndTarget)` / `cancel()` / `forget(id)`, seven
unit tests. Empty `begin` refused; `forget` on the last leg ends the flight;
`forget` is wired to surface destruction beside `navigation.forget`.
- Wire: `OverviewBegin { to } / OverviewProgress { progress } / OverviewCommit
{ target } / OverviewCancel`, plus `TransitionTarget` and `EndTarget`
(`home | overview | last_zone | zone{zone}`), all four in the verb table.
- Geometry: `Viewtop::carried(window)` returns the lerped origin and scale, and
**`window_origin` and `window_extent` both consult it**, so the render and the
hit test inherit the carry with no call-site changes. Anchor is `(0,0)` on
purpose so `pose_origin`'s pivot term vanishes.
- `focus_border` returns empty while a window is carried — the card owns the
frame.
### Shell half: the next session, and it is well defined
Rewrite the pill and `ZoneOverview` to drive the four verbs instead of posing
windows and scaling cards independently.
1. `ZoneOverview` computes each zone card's rect in panel coordinates. That rect
— not `0.6`, not an inset — is the `TransitionTarget` for the windows on that
zone.
2. `SystemGestureRail.onPressed``overview_begin` with those rects.
`onPositionChanged``overview_progress`. Release → `overview_commit` with
the end target chosen from projected travel and dwell, or `overview_cancel`.
3. **Delete** `ViewtopControl.poseActiveZone` / `clearPose` / `_posed` and
`GlobalStates.zonePullProgress`'s pose duties, and drop `zoneCard.scale`
entirely — the compositor is now carrying the real window onto that rect, so
a card that also scales is the second writer all over again. The card becomes
chrome: label, close control, and the neighbours either side.
4. Tapping a card is `overview_commit { target: zone }` — which is what makes the
strand repro pass, because that path now releases like every other.
Today's four shell commits (`57208c8`, `f699f57`, `452acea`, `72171ac`) are the
two-writer design and step 3 deletes most of them. Kept on the phone meanwhile
because the sizes at least agree.
### It has to be a verb, because she gives the tour
Casey, 2026-08-07: there is a point where an agent is asked for a tour or a demo