Repository navigation
Home 0.7.1: first-run seed, chrome fixes, lock face, Documents, Library menu, dock motion, capsule-owned service icons - #54
Merged
Conversation
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>
This was referenced Sep 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 againstscripts/home-entropy-check.mjsbefore it was written. Anything the gate bans is not in this PR (see bottom).What's in it (13 commits, oldest first)
First run
5675b8837Home seeds an empty desktop and pins Marketplace on first run (only when no saved layout exists; existing Homes untouched).568bb04f5regression smoke expects the empty first-run desktop.Unified-sidebar chrome defects
d8c37cb1dDocuments, 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.90d7f08f5Inbox request rows hug their content instead of stretching to column height.Design ports (behaviour is 0.7.1's; only the visual layer changed)
b26f5ee44Lock face: wordmark, full-bleed ground + vignette, large clock. Fixes two latent bugs on the way — a.home-unlock prule that shrank the clock, and the face animation creating a containing block that clipped the fixed wallpaper. Sign-in flow and element ids unchanged.ecb6ecda3Documents: flat unified-sidebar layout on 0.7.1's classes and canonical tokens; save-or-discard and markdown preview preserved.ba95c9487Library: New folder / Upload move into the toolbar "…" menu.Dock motion (one Shelf-face state, no morph API)
f175b7077eased pill width, height-led Apps reveal, live reorder while dragging.8c39c89daApps face opens at the dock's own width; motion tokens as CSS vars.05ff77be7Apps face content stays planted; items already on the dock are not repeated in the grid.37bd4115adock row never moves during open/close.c9a4a6612dock renders at final width on load; existing icons glide with the pill, new ones settle into their slot.Service icons — the capsule-owned way
2a49ea57bThe 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 besidecapsule.json. Marketplace source untouched — it already renderediconVariants. 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_BINARYenv (fail identically on a clean0.7.1-devcheckout).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 asbin/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.