Skip to content

Assistant dock mark: click-only contact, then the face; quiet focus return - #68

Draft
SashaMIT wants to merge 5 commits into
developfrom
feat/assistant-dock-mark-0.7.1
Draft

SashaMIT wants to merge 5 commits into
developfrom
feat/assistant-dock-mark-0.7.1

Conversation

@SashaMIT

@SashaMIT SashaMIT commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

Small, independent of #67. Two commits on feat/0.7.1-models (501b411c1), no Rust, no capsule contract change.

What a person sees

  • The Assistant toggle wears the Elastos two-layer mark: frosted-glass upper chevron composited live over the orange lower chevron (real alpha, not baked in). Drawn at 90.9% of the slot so its top and bottom sit on the launcher glyph's.
  • Still at rest: no load, hover or idle motion.
  • Click: the chevrons close toward each other (240 ms), return to rest (170 ms), and only then does the face open. Equal and opposite 10.35% travel keeps them aligned at contact.
  • Coming back from the Assistant no longer floats the "Assistant" label over the mark. Hover (after the usual beat) and keyboard focus still show it.

How it is built

  • shell-assistant-mark.js (new): the whole sequence is Web Animations on the two layers, transform-only; the return ends on the resting transform, so releasing the filled animations changes nothing on screen. Repeat clicks are ignored until the sequence settles. Reduced motion opens immediately. A non-opening activation (closing an open face) skips the motion. Presentation only, no authority.
  • shell-assistant-face.js binds the mark and no longer mounts the capsule glyph on the toggle; the mark is part of the face cadence Home owns, like the launcher's dock art. The Assistant capsule's icons/icon-*.png are the static mark so Launcher and dock agree.
  • Focus return: the dock's label showed on every focusin, including the focus Home hands back to the toggle when the face closes. The face now restores focus through the dock (restoreDockFocus), which keeps that one focus quiet. The label answers only the person's own hover or keyboard arrival.

Gates

  • scripts/home-assistant-mark.test.mjs (5 cases: full sequence and ordering, repeat-click guard, reduced motion, non-opening activation, unbind/null) wired into just verify.

  • home-entropy-check guards the contract: layer order, raster tone, the two durations and travel, no idle/hover/rAF motion, reduced motion honored, no ghost residue, focus handed back through the dock and never by focusing the toggle directly.

  • home-agent-shell-smoke, home-shell-regression-smoke, check-capsule-templates, product-ui-source, home-clipboard-source-gate, browser-entropy-check, diff --check all green on this branch.

  • Headless on a throwaway Home with a virtual passkey (Chromium): static under hover; contact at ~250 ms with glass +10.35% / orange −10.35% exactly; back at rest ~435 ms; morph starts only after; four rapid clicks → one opening; reduced motion → zero chevron animations; after closing the face the layers are at identity with no live animations and no label.

  • Rebased onto feat/0.7.1-models: source gate 14/14.

Made with Cursor

Part of #84.

@irzhywau irzhywau added this to the 0.7.1 milestone Sep 29, 2026
SashaMIT and others added 2 commits September 29, 2026 21:14
…ick-only contact

Two layers in one square — frosted-glass upper chevron over the complete
orange lower chevron — composited live. Still at rest: no load, hover or idle
motion. A real activation plays the whole contact before anything else moves:
the chevrons close (240 ms) and return to rest (170 ms), and only then does
the face open. Equal and opposite 10.35% travel keeps them aligned; the return
ends on the resting transform, so releasing the filled animations changes
nothing on screen. Repeat clicks
wait for the sequence; reduced motion opens immediately; closing an open face
skips the contact. Drawn at 90.9% of the slot so its top and bottom sit on
the launcher glyph's. Presentation only.

The toggle no longer wears the capsule glyph: the mark is part of the face
cadence Home owns, like the launcher's dock art. Unit test wired into verify;
the entropy check guards the contract.

Co-authored-by: Cursor <cursoragent@cursor.com>
…es no dock label

Closing the face returns focus to the toggle, and the dock showed the item's
label on every focusin — so "Assistant" floated over the mark each time the
person came back from the Assistant, though they had neither hovered nor
tabbed to it. The dock label answers the person's own arrival: hover after a
beat, keyboard focus at once. Focus Home hands back itself is neither, so the
face now restores it through the dock (restoreDockFocus), which keeps that one
focus quiet. Hover and keyboard labels are unchanged; the entropy check
guards the contract.

Co-authored-by: Cursor <cursoragent@cursor.com>
SashaMIT and others added 3 commits October 2, 2026 19:20
home-entropy-check.mjs tests source text and is being retired (#194).
home-assistant-mark.test.mjs covers the mark's behavior.

Co-authored-by: Cursor <cursoragent@cursor.com>
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