Skip to content

Home 0.7.1: first-run seed, chrome fixes, lock face, Documents, Library menu, dock motion, capsule-owned service icons - #54

Merged
irzhywau merged 13 commits into
upstream/0.7.1-devfrom
feat/home-first-run-seed-0.7.1
Sep 8, 2026
Merged

irzhywau merged 13 commits into
upstream/0.7.1-devfrom
feat/home-first-run-seed-0.7.1

Conversation

@SashaMIT

@SashaMIT SashaMIT commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Rebuilt on top of upstream/0.7.1-dev (c511b1339) as Irzhy asked — nothing here is a merge from the URUX branches. Each change was re-implemented against the 0.7.1 tree and checked against scripts/home-entropy-check.mjs before it was written. Anything the gate bans is not in this PR (see bottom).

What's in it (13 commits, oldest first)

First run

  • 5675b8837 Home seeds an empty desktop and pins Marketplace on first run (only when no saved layout exists; existing Homes untouched).
  • 568bb04f5 regression smoke expects the empty first-run desktop.

Unified-sidebar chrome defects

  • d8c37cb1d Documents, Inbox and Chat Room clear the 52px traffic-light overlay. Inbox/Chat use capsule-local padding as the gate requires; Documents uses --window-chrome-safe-top.
  • 90d7f08f5 Inbox request rows hug their content instead of stretching to column height.

Design ports (behaviour is 0.7.1's; only the visual layer changed)

  • b26f5ee44 Lock face: wordmark, full-bleed ground + vignette, large clock. Fixes two latent bugs on the way — a .home-unlock p rule that shrank the clock, and the face animation creating a containing block that clipped the fixed wallpaper. Sign-in flow and element ids unchanged.
  • ecb6ecda3 Documents: flat unified-sidebar layout on 0.7.1's classes and canonical tokens; save-or-discard and markdown preview preserved.
  • ba95c9487 Library: New folder / Upload move into the toolbar "…" menu.

Dock motion (one Shelf-face state, no morph API)

  • f175b7077 eased pill width, height-led Apps reveal, live reorder while dragging.
  • 8c39c89da Apps face opens at the dock's own width; motion tokens as CSS vars.
  • 05ff77be7 Apps face content stays planted; items already on the dock are not repeated in the grid.
  • 37bd4115a dock row never moves during open/close.
  • c9a4a6612 dock renders at final width on load; existing icons glide with the pill, new ones settle into their slot.

Service icons — the capsule-owned way

  • 2a49ea57b The 11 provider capsules declare "icon": "icons" and ship their own 32/64/128/256 set. Gateway serves declared provider icons under the same declared-only allowlist as content capsules (manifest/rootfs/document stay 404); source-home install copies the set beside capsule.json. Marketplace source untouched — it already rendered iconVariants. No name→icon map anywhere.

Verification

  • home-entropy-check, browser-entropy-check, check-wci-alignment, source-home-capsule-inventory-smoke, home-shell-regression-smoke: pass.
  • cargo fmt --check, cargo clippy -p elastos-server --all-targets -D warnings: clean.
  • cargo test -p elastos-server --lib: 1,662 pass; the 7 failures are the protected-content tests that need CI's *_TEST_BINARY env (fail identically on a clean 0.7.1-dev checkout).
  • Live on a source-home built from this branch, signed in with a passkey: first-run seed, all three chrome fixes, lock face, Documents, Library menu, dock motion M1–M8, Store → Services 11/11 icons at natural 128px.

Deliberately not in this PR

Fly-to-dock, pending-run dot, Agent Space / shelf morph into the composer, and the five-phase staged launcher are banned by home-entropy-check.mjs (25 Aug). They stay parked locally (local/urux-dock-choreography-port) pending a design conversation with Anders — raising separately, not sneaking in here.

Note

Packaged (release) installs never lay down capsules/<provider>/capsule.json — providers ship as bin/ binaries — so the Store's Services section is empty there today regardless of this PR. Source-home installs are where the catalog sees providers, and that path now carries the icons. Pre-existing packaging gap, flagged so nobody reads it as a regression later.

SashaMIT and others added 13 commits September 2, 2026 22:16
New Homes start with nothing on the desktop: apps are in the dock and the
Apps face, content is reached through Library. Marketplace joins the default
dock pins after Library so the way to get more is one click away.

Only affects the first-run layout seed; saved layouts are untouched.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…ox and Chat Room

The Home unified-sidebar chrome paints the traffic lights over the first
52px of the capsule frame. Library, Marketplace, System, People and
Services already reserve that band; Documents, Inbox and Chat Room did
not, so the lights sat on top of the first sidebar control (Documents'
New button overlapped outright).

Documents follows the Library convention (--window-chrome-safe-top, minus
its own 0.75rem page inset). Inbox and Chat Room use a capsule-local 52px,
matching System and the entropy gate's rule that those two keep
capsule-local top padding only.

Co-authored-by: Cursor <cursoragent@cursor.com>
…he column height

Co-authored-by: Cursor <cursoragent@cursor.com>
…ge clock

Brings the URUX lock face visual onto the Home host: ELASTOS wordmark,
wallpaper as a full-bleed ground with a vignette, date and clock at
their intended size, compact avatar with the name beneath.

Two defects in the existing face go away with it: the generic
`.home-unlock p` rule outranked `.home-unlock-date/-time` so the clock
rendered at 13px grey, and the picker-flow entrance animation left a
transform on the face, making it the containing block for the fixed
ground and clipping the wallpaper to a centred column. Date/time rules
are now scoped under .home-unlock and the entrance animates the
brand/clock/account instead of the face.

No behaviour change: shell-auth.js, the explicit-click passkey flow, and
the person/person-name ordering are as before; no account directory.

Co-authored-by: Cursor <cursoragent@cursor.com>
Brings the URUX Documents look onto the 0.7.1 Documents: flat 220px
sidebar that owns the traffic-light safe-top, compact round New button
with a pill search beside it, flat main pane, segmented Write/Split/Read
control, uniform toolbar sizing. No cards inside a padded page.

Only the <style> block changes. Markup and script are the 0.7.1 ones
(26 Aug refine, 30 Aug save-or-discard and preview fixes), so behaviour
is unchanged; the five newer classes (toolbar-group, workspace-toggle,
workspace-tab, find-actions, find-highlight) are styled to match.

Tokens keep the canonical shared-sheet mappings the entropy gate
requires; the URUX literal palette values are not carried over.

Co-authored-by: Cursor <cursoragent@cursor.com>
The toolbar "…" menu already carries New ▸ Folder / Text Document,
Upload Here, Paste, Sort By, View, Refresh, Show Hidden and Properties,
and the toolbar already hides the Sort select and Refresh button in its
favour. The New folder and Upload buttons now follow the same rule, so
the toolbar is navigation, breadcrumbs, search, view toggle and the menu.

One line in syncToolbarChrome; the buttons and their handlers remain for
the picker/attach flows and the existing tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ive reorder

The idle pill is width:max-content, which no browser can interpolate, so the
declared width transition never ran: the dock jumped on every pin, unpin,
launch and Apps open. Width changes are now a pixel FLIP (lock, reflow, ease,
unlock), with transitions suppressed on the lock flush so the base transition
cannot start and be reversed at 0% into an instant jump.

The Apps face reveal is height-led (420ms ease-out, opacity only guards the
first frames) and the pill's width eases in step, so the one Shelf-face state
reads as the pill growing up rather than a fade over a snapped box.

Dragging over the dock reorders live: a dock-sized spacer holds the slot, the
other pins FLIP around it, a dragged pin parks, and the pill eases as the slot
opens and closes. Nothing commits until drop; the never-silent-unpin rule and
the drop rules are unchanged. The smoke's fake style gains the two CSSOM
methods (setProperty/removeProperty) the shell uses for inline custom props.

Co-authored-by: Cursor <cursoragent@cursor.com>
The face no longer widens to a 720px popup: it locks to the dock's own width
(min 320, set in px at open because the idle width is max-content) and uses
denser 72px tiles, so it grows up out of the dock with nothing either side of
the dock row. Motion timing moves to tokens — --shelf-face-ms 950ms,
--shelf-face-ease ease-in-out, --dock-width-ms 780ms — the pill glides rather
than pops. Gate bounds for the phone face are unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
…k row

The launcher content rode up with the pill's top edge during the reveal
(block launcher, popover shrinking to the growing max-height), so icons
appeared to leave the dock and slide upward. The launcher is now a bottom-
justified column, the popover keeps its full height, and the grid sinks to the
dock row with an auto margin — the rising edge uncovers stationary icons first
and the header last, and scrolling stays reachable when the grid overflows.

Shelf pins live in the dock row directly under the face, so they are no longer
duplicated in the grid; the open grid refreshes when pins change.

Co-authored-by: Cursor <cursoragent@cursor.com>
… close

Closing the face snapped the pill back to --taskbar-h while the launcher was
still collapsing, so the dock row was pushed below the pill and rode back up —
the "icons leave the dock and slide up" defect. The pill now sizes to content
in both faces (min-height 72, symmetric padding), so it shrinks with the
launcher and the row never moves.

The reveal follows the Shelf cadence: the pill grows up as empty glass (height
only, width locked) and the content fades in where it lives at 82% of the
stretch (header, then grid); closing lets the content leave first (140ms), then
collapses. Grid returns to the top; the grid/row gap and tile density live in
rules that do not flip with the face class, so nothing reflows on the first
close frame.

Co-authored-by: Cursor <cursoragent@cursor.com>
… pill

The first taskbar render on load eased the pill width from the empty pill,
so every icon slid in from outside it. Width easing now only runs between two
populated docks.

For pin and running-set changes, icons already on the dock start where they
were and glide to their new slot in step with the pill's edges (per-slot FLIP,
same duration and ease), so none is ever outside the pill; an icon new to the
dock settles into its slot once the pill has made room.

Co-authored-by: Cursor <cursoragent@cursor.com>
Every first-party provider capsule now declares `"icon": "icons"` and ships
its own icon-32/64/128/256 set, exactly like app, viewer and content
capsules do. The catalog read model already published declared icon routes
for any role; two things kept them from reaching the Store:

- the gateway only served declared icon variants for content/data
  capsules. Providers never serve a browser document, so extend the same
  declared-only allowlist to the provider role. Manifest, rootfs and the
  capsule root stay 404.
- source-home install materialized only `capsule.json` for provider
  contracts. Copy the declared icon set beside it (all four sizes required,
  no traversal).

Marketplace and Services render the icons through the existing
`iconVariants` read model; no name→icon map, no provider names in app
source.

Tests: declared provider icons servable and nothing else; all eleven
service manifests validate, declare `icons`, and ship the four rasters.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants