Commit Graph

44 Commits

Author SHA1 Message Date
creatixchu
e596d300d7 fix(directory-picker-browse): resolve quiet-navigation review 2026-07-30 15:22:28 +08:00
creatixchu
3ba25e25c0 fix(directory-picker-browse): bot round 1 — pill cascade+corner, slow-scan close reset, asymmetry+calibration recorded
- .loadingFloat moved after the .status/.error block (its padding was
  losing the same-specificity race) and re-anchored bottom-right: the
  truncated/error rows own the bottom left and keep rendering through a
  scan, so the pill can never cover them; confirmCreate's relist now
  clears the stale failure text like every other scan launch.
- The close edge resets loading, so the slow-scan effect disarms while
  hidden and a reopened dialog waits out a fresh silence window
  (regression test added).
- The truncated note's survival through a scan is now asserted in the
  slow-scan test; the wait-bound test moved to fake timers with the
  200ms bound explicit.
- select()'s exemption from the one-frame rule and the constants' local
  calibration premise are recorded in JSDoc and the capability-seam
  Agent Note; the themed-scrollbars note's rebinding enumeration is
  replaced by a pointer to the mechanical gate (it had drifted twice).
  Both pairs re-recorded.
2026-07-30 12:53:07 +08:00
creatixchu
7b22a3b454 feat(directory-picker-browse): quiet navigation — one-frame landings and a slow-scan loading pill
Navigations keep the previous view rendering while scanning: target and
parent legs land as one two-pane frame when the parent leg settles within
a 200ms wait bound (past it the target lands alone and the late leg
upgrades in place; Escape inside the landing window withdraws the
navigation). The loading indicator floats over the content on the card
background and appears only once a scan outlives a 300ms silence window,
so navigation never shifts the columns or flashes an intermediate frame.
The truncated note now describes the on-screen panes instead of hiding
during scans.
2026-07-30 11:50:16 +08:00
creatixchu
b46dcb16cb revert: restore the reviewer-approved tree (97a192d7b)
ZiyaZhang approved 97a192d7b; the subsequent bot-review rounds (7-24)
landed after that approval and were not requested by a human reviewer.
This commit restores the approved tree verbatim as a forward commit
(pushed history stays intact). git diff 97a192d7b is empty.
2026-07-30 09:22:16 +08:00
creatixchu
cc92b6b578 fix(host,client): review round 19 — home ships resolved on the wire; client mirror shrinks to the draft side; scoped focus guarantee 2026-07-30 01:50:45 +08:00
creatixchu
9545914c10 fix(host): review round 18 — draft dirs fully normalized; JSDoc reattached; third parking target documented 2026-07-30 01:28:55 +08:00
creatixchu
12d302ea59 fix(host): review round 17 — separator-fold drafts; UNC noise scrub; honest empty-chain fallback; toggle focus keep 2026-07-30 01:10:37 +08:00
creatixchu
4921b63fe3 fix(host): review round 16 — UNC/forward-slash home forms; root-crumb separator; scrollbar symmetry; test dedup 2026-07-30 00:49:18 +08:00
creatixchu
abb3b62564 fix(host): review round 15 — lexical home normalization; webkit scrollbar hide; flex-none check; inert enumeration 2026-07-30 00:31:11 +08:00
creatixchu
9a96aa2755 fix(host): review round 14 — shared hanging-lister fake; create-supersession and closing-commit contracts documented 2026-07-30 00:13:09 +08:00
creatixchu
413321e261 fix(host): review round 13 — probe never gates a landing; relist supersession covered, false ignores removed 2026-07-29 23:56:21 +08:00
creatixchu
4171f8eaa9 fix(host): review round 11 — every displacing exit re-parks focus; full trailing-separator trim 2026-07-29 23:21:35 +08:00
creatixchu
a22d9aea0b fix(host): review round 10 — trailing-separator home root; dead dep; lazy controller; focus-invariant doc home 2026-07-29 23:00:49 +08:00
creatixchu
df9c03fbc2 fix(host): review round 9 — universal pick refocus; always-armed scan controller; graceful close-race guards 2026-07-29 22:42:11 +08:00
creatixchu
8b1a8d383a fix(host): review round 8 — platform-folded draft matching; honest slash-platform boundary; coverage-visible guards 2026-07-29 22:20:48 +08:00
creatixchu
3224ad92af fix(host): review round 7 — upgrade re-parks displaced row focus; case-folded display root; boundary notes 2026-07-29 21:57:06 +08:00
creatixchu
eac3b378fa fix(host): review round 6 — progressive selection-anchored landing; anchor on actual parent entries; focus-flag hygiene 2026-07-29 21:34:30 +08:00
creatixchu
a1d752f799 feat(host): navigations land selection-anchored — crumb jumps step back a pane instead of collapsing 2026-07-29 21:12:04 +08:00
creatixchu
23b74c5d7d fix(host): review round 5 nits — refocus covers Enter/Escape exits; trailing pressed check; narrowed v8 ignores 2026-07-29 15:38:52 +08:00
creatixchu
9c9c32ed59 fix(host): review round 4 — post-commit refocus covers right-pane picks; combobox semantics recorded as deferred 2026-07-29 15:26:00 +08:00
creatixchu
355d505b89 fix(host): review round 3 — card-scope escape/focus-leave cancel, pick refocus; record display-policy trade-offs 2026-07-29 15:10:35 +08:00
creatixchu
27053efffc fix(host): review round 2 — dialog-scoped blur cancel, editing-only focus hold, selection exempt from filters 2026-07-29 14:47:40 +08:00
creatixchu
998a5f3381 fix(host): review round — host-derived separator, click-safe blur cancel, dead wide prop 2026-07-29 14:27:01 +08:00
creatixchu
e561c28232 feat(host): seed path editor with a trailing separator; prefix-filter levels from the draft tail 2026-07-29 13:47:56 +08:00
creatixchu
60383efef9 feat(host): blur cancels path editing; scrollbar clearance in the miller columns 2026-07-29 13:42:11 +08:00
creatixchu
c747f721ba feat(host): fixed-label show-hidden toggle; even divider clearance; 680x500 card 2026-07-29 13:29:17 +08:00
creatixchu
cdcdd2221e feat(host): show-hidden toggle in the directory browser footer 2026-07-29 12:52:59 +08:00
creatixchu
53240f4664 fix(host,client): abort superseded listings on the wire; keep the native swap resolvable
Supersession (newer navigation, path editing, closing, unmount) now
aborts the in-flight listing's request instead of only discarding its
result: the browser mints an AbortController per listing, the signal
rides the workspace face (IWorkspaces.listDirectory gains an optional
signal) onto the fetch carrier, and the Host scan stops with it (817's
cancellation chain). apps/cli keeps both picker packages as dependencies
so the documented one-row cordis.yml swap to the native backend resolves
at boot.
2026-07-29 06:19:18 +08:00
creatixchu
463893947b fix(host): create folders with the entered name untrimmed
Same contract as the path editor: trim only rejects an all-whitespace
draft, and the Host receives the original spelling — the backend accepts
any non-blank single segment verbatim, so trimming here would create and
select a different sibling.
2026-07-29 05:59:51 +08:00
creatixchu
723bb9057c fix(host): pass the entered path to the Host untrimmed
Trim now only detects a blank draft; the original text navigates — a
real directory name may end in whitespace, and trimming would list its
sibling or adopt the wrong workspace.
2026-07-29 05:49:18 +08:00
creatixchu
1a9b84b19e fix(host): restart home on early-edit cancel; clamp the dialog to short viewports
Escape canceling a path edit opened before any level listed relaunches
the home listing instead of stranding a blank picker (the editor had
superseded the initial request while parent was still null). The card's
height clamps to the viewport (min(420px, 100dvh - 32px)); header and
footer are flex-none and the columns scroll, so Open/Cancel stay
reachable on landscape phones and short embedded windows.
2026-07-29 04:46:49 +08:00
creatixchu
7b80b8ce60 fix(host): keep the child pane reachable on narrow viewports; surface truncated levels
The Miller row now scrolls horizontally with the child pane pinned into
view when its preview lands, so descent stays reachable when the dialog
is narrower than two fixed panes. The dialog also says when a visible
level was cut at the backend's complete-result bound (817's maxEntries)
instead of letting the tail of a huge directory go silently missing.
2026-07-29 03:53:48 +08:00
creatixchu
905b4555a3 fix(host): escape cancels a launched navigation; browse joins deferGroupRegistration
- Escape in the path editor now supersedes a navigation the editor already
  launched (request-sequence bump + loading reset), so a late success cannot
  jump to the cancelled path; the single-pane fallback keeps covering a
  superseded selection preview (ds-review-bot).
- The browse flow's pair registration rides ui-slots' new
  deferGroupRegistration (one occupant, both holes, as a unit — construction
  or late rival conflicts roll back wholesale and fail loud), mirroring
  -native and deleting the would-be clone.
2026-07-29 03:20:24 +08:00
creatixchu
b5a809d38e fix(host): opening the path editor supersedes a pending listing
A navigation settling between the Edit-Path click and the first keystroke
executed navigate's draft reset and closed the editor underneath the user;
the click now bumps the request sequence like draft edits do
(ds-review-bot).
2026-07-29 02:08:33 +08:00
creatixchu
cbf54196fa fix(host): review round 8 — unmount invalidation, unreadable selections clear
- HMR/unmount bumps both request generations, so a listing or creation
  settling after disposal neither updates dead state nor issues the
  post-create relist.
- A selection whose preview listing fails clears back to the single pane:
  the breadcrumb names the level, so the level must be the committing
  target (reverses the earlier keep-marked behavior with its test).
2026-07-29 00:50:49 +08:00
creatixchu
8ba0647c2c test(host): cover the cancel path that keeps an intact preview 2026-07-29 00:39:07 +08:00
creatixchu
b0d120efa8 fix(host): cancelling a superseded path edit falls back to the single-pane level
A draft edit can invalidate the selection's preview request; Escape then
left selected set with no child and nothing loading — a half-empty
two-pane view. Cancel now clears the selection when no preview exists
(ds-review-bot round 7).
2026-07-29 00:38:37 +08:00
creatixchu
36be9f26db fix(host): a newer path edit supersedes a pending navigation
Editing the draft bumps the request sequence, so a slow lookup that settles
afterwards can neither clear the newer text nor repopulate the view with
the older path (ds-review-bot round 6).
2026-07-29 00:29:17 +08:00
creatixchu
f8cd2bf749 fix(host): review round 5 — draft-pending action gating, in-flow errors, IME guards
- Open and New folder disable while a path draft is uncommitted: targetPath
  still names the previous selection/listing, and committing against it
  while a different path shows in the header adopts the wrong directory.
- The Miller columns keep their own row so a status/error line renders below
  them inside the card instead of competing as a third flex item the dialog
  clips off-screen.
- Both text inputs (path editor, folder name) carry the IME composition
  guard the workspace-name inputs already had: a composing Enter confirms
  the candidate, never submits.
2026-07-29 00:15:30 +08:00
creatixchu
d2b16380d1 fix(host): keep path entry available when the home listing fails
With no listed level (an unreadable or missing home directory), the
path-edit zone previously disabled forever, stranding the operator on the
alert with only Cancel; it now opens with an empty draft so an absolute
path remains the way forward. Covered by a recovery test.
2026-07-29 00:04:38 +08:00
creatixchu
af049cceaf fix(host): native button semantics for rows; path editor inert under the create dialog
Rows keep their NATIVE button role inside a listitem seat (role overrides
exposed selectable folders as passive list items to assistive technology),
the crumb trail becomes a navigation landmark, and the path-edit input joins
the parentInert derivation so the nested create dialog cannot be undercut
through it.
2026-07-28 23:50:05 +08:00
creatixchu
6add9a8eef fix(host): harden the browser dialog against review round-2 races
- Dismissal (Escape/mask) is ignored while adoption is busy: the owner's
  in-flight createWorkspace must not land behind an apparent cancel.
- Every parent control goes inert while the nested create dialog is open
  (Modal traps no focus, so Shift-Tab/AT could close, adopt, or retarget
  underneath the child).
- Creation settlements are gated on an open-generation ref: a create that
  resolves or rejects after the flow closed (and possibly reopened) can no
  longer relist the stale target or surface its alert in the fresh dialog.
- The keyless snapshot waits for the Open button's enabled state before
  clicking — on slow runners the selection's child listing was still in
  flight and the click landed on a disabled button.
2026-07-28 23:37:07 +08:00
creatixchu
6cd63f741c fix(host): address review — Escape scoping, relist gating, crumb overflow, aria golden
- Escape (and the mask) now reaches only the topmost dialog: while the
  nested New-folder dialog is up the browser ignores its own Modal close,
  and the nested dialog's in-flight fence keeps both open during creation.
- New folder disables while any listing loads, so a slow post-create
  relist/select sequence cannot host a second create against a target the
  pending listing is about to change.
- Deep ancestry scrolls inside a dedicated crumb trail whose tail is pinned
  into view; the path-edit zone keeps its reserved width instead of being
  clipped by the card, preserving cross-drive path entry.
- The workspace-management e2e records a directory-browser aria golden at a
  staged tree (host HOME pointed at the scaffold cwd collapses ancestry into
  the Home crumb, keeping the artifact machine-independent), and the keyless
  snapshot's row targeting goes through visible label text — listitem
  accessible-name computation differs across dom-accessibility-api
  environments (the CI-only miss).
2026-07-28 23:21:27 +08:00
creatixchu
4822622cb7 feat(host,client): ship the in-app directory browser as the browse package's client half
directory-picker-browse becomes dual-face: its browser half fills
ui-workspace's two directory-flow holes with the Select Workspace Directory
dialog (figma Harness 813-23126 family — Miller two-column view, breadcrumb
with click-to-edit path zone, nested New-folder dialog), driving the node
half's host.listDirectory/host.createDirectory and owning its locale
namespace (directory-browser, zh default / en). The dialog moves here from
ui-workspace wholesale — the trigger surfaces keep only the flow-hole owner
conversation.

apps/cli flips its one directory-picker row -native -> -browse, swapping the
host backend and the client interaction together; picking now works for
remote deployments out of the box. The keyless workspace-flow snapshot boots
the browse bundle and drives menu -> dialog -> Documents -> project -> Open
against the fixture tree.
2026-07-28 22:22:14 +08:00