Turn completion no longer force-scrolls the conversation: only a
session switch snaps to the bottom, so finishing a turn does not yank
the view while the user reads. ACP streams richer tool titles (for
example a workflow run's description) than the persisted tool/call
name; remember them per call id and keep rendering them in chat and
trajectory after the persisted trace replaces the live turn.
Develop stays read-first: each artifact whose source is a repository
path gains an Open in editor action routed through a path-validated
main-process handler (shell.openPath), instead of an in-app write path.
Persona and prompt-assembly sources open the governing cordis.yml or
source file directly.
Per team-lead 加令: DOM-query smoke is insufficient; replace with real
element.click() / KeyboardEvent dispatches via CDP + one real DeepSeek
API call to prove chat wire end-to-end.
Additions:
- 14-page real-click sweep with per-tab bodyLen/interactive counts.
- Chat List↔Graph tab click, Details drawer open/close both directions.
- Context #context-page-load-sample real click populates 2-turn history,
window occupancy card, 5 legend items, 2 L1 <details>.
- Rubrics tile click opens rubric-detail-drawer with full metadata;
create-form open/close; runtime cell-jump to tracing.
- Artifact panel view switching: List 6 / Board 17-col × 6 / Timeline 16
version cards with artifact-timeline-version class.
- Settings Optional-pages checkboxes drive nav filter both directions.
- Real DeepSeek API round-trip: 'ok-dsh-smoke' returned, 101 in + 28 out
tokens on stdio-deepseek profile.
- QA-harness auto-run confirmed 0 global errors across 83 controls.
- Cold-clone 1796/1796 + stdio-echo [smoke] OK.
- Zero console errors, zero exceptions during all interactions.
Isolation: port 9446 with fresh /tmp/dsh-strict-userdata + DSH_DESKTOP_HOME.
User's daily Electrons untouched.
Every sidebar section now shares the same horizontal inset, so the
primary action, module nav, search field, and session rows start and
end on identical lines with one control height and one radius. Topbar
controls share one row height, and the round send-button style no
longer leaks onto the cancel button.
hiddenPages three-state config (undefined default / [] show-all / [list] custom) with
Playground and Missions default-hidden. Nav is now opt-in via Settings > Optional pages
section with immediate toggle rendering (no restart).
Change surface: nav-config-model.js (new, 64 lines), main.js (+24), preload.js (+9),
renderer.js (+41), index.html (+27/-1), settings-page.js (+87), style.css (+49), and
test/nav-config-model.test.js (new 22 tests, +291). docs/qa-nav-optional/*.png × 3
capture the three states.
12 files, +846/-1.
Test count on mainline: 1806 total / 1806 pass / 0 fail.
Batch fix for review-visual-flow's two P0 + five P1 findings across the
Chat / Rubrics / Growth surfaces. Everything routes through tokens — no
new hex family, no gradient hero, no violet competing with --accent.
P0-1 blue collision — plan-signal chip shared the exact --accent hue
with --turn-action-edge, so a .sig-plan chip inside an action turn fused
visually with the turn's left rail. Introduces --signal-plan-fg / -bg /
-border (+ restart variants) on a teal axis (light #0f766e, dark
#5eead4), rewires .turn-signal-chip.sig-plan, .sig-plan-restart, their
dark override, and the .trace-timeline-signal-badge / .trace-graph-
signal-ring SVG variants to the tokens. Now the four signal families
(error red / loop red / redundant amber / plan teal) all sit off the
blue axis so the turn-edge blue keeps its exclusive whole-turn-action
semantic.
P0-2 rubric-hint-card hero — was a full-width purple gradient banner
(12px radius, 20px icon, primary CTA) violating spec §2 'L1 material
styled as L0 hero'. Repainted as a 28px compact row: single hairline on
--surface, 4px radius, downgraded icon to '·', inlined title+subtitle,
CTA to ghost small. Reads as a Fields-tree-grade nudge, not page chrome.
P1 batch (5 CSS token conversions):
1. .rubric-tile-stats-rate/-dot .pass/.fail: raw #79d17b/#f96e6e →
--status-ok-fg / --status-err-fg.
2. .rubrics-empty-illust svg [fill]: raw #a89a83 → --icon-mute.
3. .growth-filter-chip.active: raw --accent-* → --nav-item-active-*.
4. .kb-tabs .active hue: raw --accent-fg → --text.
5. .rubric-grid-name size: 15px → 14px (three-size rule).
7 renderer test file (visual-consistency-polish.test.js) locks all the
above via style.css AST assertions. 3 shots + 3 before shots under
docs/qa-visual-fix/ document the delta on chat / rubrics / growth.
10 files, +400/-49. Visual-only, no behavioral changes.
The cancel-tool-calls scenario cancels a live bash call, which relies on
POSIX detached-process-group termination; bash has no Windows process-tree
kill yet (deferred with the Bash execution domain), so the hung call times
the scenario out on the native Windows snapshot lane.
Add a posixOnly scenario declaration that skips the run test on win32
while the fixture guards keep covering committed files on every platform,
and mark cancel-tool-calls with it.
The two transcript tests that assert footer token counters inherited
process.cwd() as the session cwd. In a checkout deep enough that the
footer label exceeds the 88-column fake terminal, the counters never
render and the assertions fail. Pin those tests to a short fixed cwd;
cwd rendering keeps its dedicated variants test.