Commit Graph
5127 Commits
Author SHA1 Message Date
Tianyi Cui 0490c30f30 Merge pull request #5271 from deepseek-harness/fix/web-lane-flakes-20260927
test(web): name the input state each browser-lane capture asserts
2026-09-27 20:44:21 +08:00
Tianyi Cui 62ac57218d test(web): correct the states the new comments and note name
Review found two factual errors in the prose this change adds.

plugin-install-cancel: the scenario pauses the page clock before the
enable click, so the highlight's `setTimeout(clearHighlight, 2400)`
cannot fire while the status poll runs. The comment claimed a reload
could outlive that expiry, and the note explained the two CI timeouts
at the untouched highlight locator the same way. The cause of those
timeouts is not diagnosed, so both now say so instead of offering a
mechanism the paused clock rules out. The pre-change file reproduces the
same hang under the same lane command, which the note records.

workspace-new-session-folding: `nth(7)` is the first row the batch
reveals, not the last established one, and the reflowing `showMore.click()`
is above the comment, not below. Both are corrected, and the workspace-row
comment names what `:hover` reveals instead of restating a cell swap the
project row does not have.

turn-tail-actions: clear the pointer modality flag with `Shift`, which
moves no focus, matching focus-rings.e2e.ts.
2026-09-27 20:13:00 +08:00
Tianyi Cui 5e09b8231d Merge pull request #5239 from deepseek-harness/worktree/web-clock-flake-20260926
test(web): pin conversation clocks to the fixture day and await saved settings
2026-09-27 19:15:50 +08:00
Tianyi Cui 751724c88e test(web): drop the obsolete settled-title wait from the steering scenario
Master's 07dcdb46e5 moved the question step's settled title into the
`Ask question waiting` row of mid-steer.expected.md, so the button this
scenario waited for no longer renders. The wait therefore never resolved and
parked the scenario on the question page, producing the lane's cascade: `no
turn/end within 30000ms`, no live root session matching session.v4.jsonl, and
`llm-replay: fixture not fully consumed`. `captureStableAria` already polls
until two consecutive normalized captures agree, so the settled state is
captured without the extra wait.

DSH_SNAPSHOT=replay pnpm exec vitest run --config vitest.web.config.ts
apps/web/tests/steering.e2e.ts -> 7 passed (reproduced twice); with the wait
present the same command fails at its 10 s bound and again widened to 30 s.
2026-09-27 19:06:39 +08:00
Tianyi Cui 378853c096 test(web): name the input state each browser-lane capture asserts
Three scenarios captured an aria region while the state their golden
records was implied by the pointer, the keyboard, or an in-flight Host
read, so the capture could land on the other state.

workspace-new-session-folding captures two goldens of one sidebar, each
recording a hovered row that Rows.module.css renders with the row
actions in place of the relative time. Both hovered rows are now
established before their capture instead of inherited from wherever the
Show-more click left a stationary pointer. The serial self-hosted master
lane failed this scenario in every failing run observed between
2026-09-24 and 2026-09-27.

turn-tail-actions records a tooltip beside the focused Copy footer in
running.expected.md. Tooltip ignores focus while the last input came
from a pointer and only a keydown clears that flag, so the scenario now
establishes keyboard-owned focus and waits for the bubble.

plugin-install-cancel polls the enabled card's status instead of
sampling it once. The store marks the card and starts the directory
reload the Host answers, and the status flipped disabled -> running 61 ms
after the highlight in three local runs, which the single read sampled
inside.

Goldens, product code, and assertion strength are unchanged.
2026-09-27 18:57:12 +08:00
imccyu 78a21f29a9 Merge pull request #5226 from deepseek-harness/worktree-newwhale
feat(ui-chat): animate a whale tail below the transcript while the Session runs
2026-09-27 17:19:32 +08:00
Tianyi Cui 55bcb56684 Merge branch 'master' into worktree/web-clock-flake-20260926 2026-09-27 16:19:16 +08:00
Tianyi Cui 3117268c04 Merge pull request #5243 from deepseek-harness/fix/document-preview-selection-poll
test(web): poll the spreadsheet selection after each sidebar resize
2026-09-27 16:18:23 +08:00
Tianyi Cui ef2c281e6e Merge branch 'master' into worktree/web-clock-flake-20260926 2026-09-27 15:37:37 +08:00
imccyu e9e03abf95 fix(ui-chat): refine running status motion and shimmer 2026-09-27 15:16:20 +08:00
imccyu e44917fc52 test(web): refresh remaining running status snapshots 2026-09-27 15:10:08 +08:00
imccyu 03531c5836 test(web): align running status snapshots 2026-09-27 15:10:08 +08:00
imccyu fa3d555cd8 feat(ui-chat): animate a whale tail below the transcript while the Session runs 2026-09-27 15:08:24 +08:00
Yifffan a8fc0b3f16 Merge pull request #5233 from deepseek-harness/ui/plugin-example-visual-polish
fix(plugins):  change plugin placeholder npm, visual refine and UX bug ifx
2026-09-27 15:02:43 +08:00
Yif 142b655241 fix(plugins): use shared focus color for invalid inputs 2026-09-27 14:48:49 +08:00
Yif 69b55fb53b fix(plugins): preserve registry keyboard selection and focus feedback 2026-09-27 14:25:27 +08:00
Yif db5ed22884 test(plugins): make the refresh spinner hold deterministic
Extract settleRefresh() so the spinner-minimum hold has one settle point,
advance the e2e fake clock past the 400ms hold before asserting the button
restores, and drive the disposal-during-hold store test on fake timers for
both success and failure reads.
2026-09-27 12:42:30 +08:00
imccyu 79fce08d25 test(web): align browser scenarios with detailed work defaults 2026-09-27 11:51:50 +08:00
imccyu b066690f70 fix(web): default fresh work details to detailed 2026-09-27 11:43:09 +08:00
Yif eb9efc6265 fix(plugins): restore registry group, own opaque material, hold refresh spinner
The install registry picker used MenuSurface and overrode the theme-owned
menu material tokens, which the shared-menu-material gate rejects. Return
the picker to a fieldset (its native group role) and paint an opaque
bg-layer-2 surface so the form controls stay readable without touching
menu tokens. This also restores the group's radios to the accessible tree.

Align plugin-install-registry.e2e and its snapshots with the PR's visible
text: registry option names drop the parentheses around the host, the
custom address field is no longer disabled, and the custom hint spells out
http(s) and ~/.npmrc.

Hold the manual-refresh spinner to a 400ms minimum so a fast read does not
flash it, clearing to idle (or the failure toast) only after the minimum,
and dropping a refresh that settles after disposal.

Prune the retired no-unknown-casts baseline entry for browser-plugin.client.spec.
2026-09-27 09:46:15 +08:00
Yif 9fabb67bca test(plugins): trim redundant refresh/tooltip coverage
Drop the plugin-manager refresh e2e to a single failure round: the store's
success and retry outcomes are covered deterministically by
manager-store.client.spec.ts, while the e2e keeps its unique value — real
500ms tooltip timing, a running spinner animation, aria-busy, and the
portaled failure toast over kept cards. Regenerate refresh.expected.md.

Remove the components spec tooltip-delay case; ui-primitives'
tooltip.client.spec.tsx already covers 499/500ms hover/focus delay, early
cancellation, and portaling. PluginManagerPage.tsx stays at 100% coverage.
2026-09-27 02:28:09 +08:00
Yif 9c6bdd020c Merge master into ui/plugin-example-visual-polish 2026-09-27 02:03:39 +08:00
Yif f057cc37c4 fix(plugins): guard IME submission and refine automation icon 2026-09-27 01:44:00 +08:00
Yif 5d72bfbe49 fix(plugins): refine refresh feedback and plugin artwork 2026-09-27 01:00:50 +08:00
zhc b43d52ef45 merge: reconcile desktop analytics with latest master 2026-09-26 22:56:57 +08:00
Yif d27663918d Merge master scheduling updates and preserve approved icon 2026-09-26 22:11:11 +08:00
Yif 8ad3a2ca0d Merge master to refresh plugin polish base 2026-09-26 21:57:59 +08:00
Ziya 88967ce80a Merge pull request #5207 from deepseek-harness/ux/automation-tasks-plugin-row
fix(schedule-bundle): name the Plugins row Automation tasks with an alarm clock icon
2026-09-26 06:57:49 -07:00
Ziya d70db1ccfd Merge pull request #5210 from deepseek-harness/fix/plugin-inventory-card-align
fix(ui-settings-plugin-inventory): align and simplify plugin cards
2026-09-26 06:44:15 -07:00
ZiyaZhang 9626323fc4 Merge remote-tracking branch 'upstream/master' into ux/automation-tasks-plugin-row 2026-09-26 06:10:21 -07:00
Tianyi Cui 98f367c84c Merge remote-tracking branch 'origin/master' into worktree/web-clock-flake-20260926 2026-09-26 20:19:45 +08:00
imccyu cf7c3d9ea5 Merge pull request #5206 from deepseek-harness/worktree-fixbuild
fix(build): 将 Desktop 键盘测试并入 Client typecheck
2026-09-26 15:36:46 +08:00
ZiyaZhang b90695ee7a Merge remote-tracking branch 'upstream/master' into ux/automation-tasks-plugin-row 2026-09-25 22:31:25 -07:00
Chinesezjc 5815da5a53 test(web): poll the spreadsheet selection after each sidebar resize 2026-09-26 11:33:16 +08:00
Tianyi Cui eff2c6463f test(web): await the saved provider settings before reopening
Closing the provider editor confirms its write, but the browser directory
refresh lands after it, and the reopened editor copies the previous input
selection into a new draft — checkbox polling cannot correct a draft that
was already built. Run 36159502081 (job 108152262196) read a stale `true`
from that draft at models-settings.e2e.ts:395.

Wait for the saved-provider notice, which the refresh publishes, before the
third reopen. The adjacent reopen in the same test file waits on the same
notice.
2026-09-26 04:17:02 +08:00
Tianyi Cui dc8508dc3b test(web): pin conversation clocks to the fixture day
The browser lane pins the browser to Asia/Shanghai, and formatMessageClock
prefixes clock.md / clock.ymd to the clock once a message's local calendar
day differs from the renderer's. Four scenarios left both clocks on the
wall clock while their message times are stamped during the run — a live
composer send by the Host, a `createdAt: 0` seed anchored from Date.now()
— so the job that began six minutes before local midnight rendered
`9/25 23:58` where their goldens record `{{clock}}` (run 36157253018, job
108144715986: steering, markdown-images, message-actions, and
reference-composer failed together, then passed in the next run).

Read WEB_FIXTURE_TIME on both clocks instead. Live-stamped steering suites
install pinHostClock(), a Date.now spy that advances from the anchor with
real elapsed time; pinBrowserClock() re-applies one frozen instant from the
anchor on an interval, because holding a single instant removes elapsed
time from the 150 ms process-title hold and the composer's 10 ms
composition guard, which then never elapse. Seeded scenarios anchor their
seed beside the pinned browser clock, which keeps the relative-age buckets
their goldens assert.

The steering mid capture waits for the settled question title its golden
records, and the whole-queue scenario waits for the running turn before its
queue gestures, whose decision resolves against an agent that reports busy.

Goldens, the Asia/Shanghai browser timezone, and product rendering are
unchanged.
2026-09-26 04:17:01 +08:00
Yif 9a144e3a01 Merge remote-tracking branch 'origin/master' into ui/plugin-example-visual-polish 2026-09-26 00:50:51 +08:00
Yif 16c30ed6ba fix(plugins): polish installation interactions and loading visuals 2026-09-26 00:50:42 +08:00
zhc 6c3df458c5 test: fix desktop version fixture and canonicalize installer lock paths 2026-09-25 23:44:43 +08:00
zhc 92b21d22c6 Merge remote-tracking branch 'origin/master' into feat/desktop-product-analytics 2026-09-25 23:42:19 +08:00
zhc 5d1beb324e refactor(analytics): limit auth events and reuse client version 2026-09-25 23:27:08 +08:00
ZiyaZhang 912e5bafa1 refactor(schedule-bundle): give the Schedule rows the usual per-row switches
The bundle no longer declares `dsh.bundle.rowSwitches`, so its page offers a
switch per row while it is on, as every other bundle does. The README records
that the three rows work only together, and the Agent Note records the
rejected lock.
2026-09-25 07:50:15 -07:00
07akioni 1104d10ef0 chore: remove repository Figma links 2026-09-25 21:59:34 +08:00
ZiyaZhang 6085a56eb6 Revert "feat(plugin-manager): refuse to switch a row alone when its bundle switches its rows as a whole"
This reverts commit 5bc789e8617bc7b7fe8b56ad3629ed385692c54d.
2026-09-25 06:57:32 -07:00
zhc 97b3e97657 fix(desktop): report install confirmation before locking host requests 2026-09-25 21:53:40 +08:00
Yif 4f6c556e55 Merge remote-tracking branch 'origin/master' into ui/plugin-example-visual-polish 2026-09-25 21:22:59 +08:00
Yif ac20d7f6bc fix(ui): isolate plugin examples and visual polish 2026-09-25 21:22:51 +08:00
zhc 1a797d0d52 merge: reconcile shared OTel service from master 2026-09-25 20:05:36 +08:00
07akioni 779d268199 Merge pull request #5216 from deepseek-harness/07akioni/session-log-otel
feat(telemetry): share Cordis OTel reporting with byte-bounded session logs
2026-09-25 19:50:33 +08:00
07akioni 9d36f9c1fc refactor(telemetry): share reporting through a Cordis OTel service 2026-09-25 19:08:44 +08:00