Why: accounts are admin-issued (user decision 2026-09-30, no self
registration); initial and admin-reset passwords must force a change on
first login.
Evidence:
- LoginPage: password (primary) + API key tabs; ChangePasswordGate
blocks the app until the forced change completes (mismatch/length
validation inline); App auth state machine checking -> login ->
mustchange -> ok, session cookie flows through fetch automatically.
- Account menu gains change-password and admin-only user management;
AdminUsersModal: create account (random initial password generator,
admin checkbox), reset password, status table (ADMIN/USER, pending
change chips).
- Fixed a real bug found in the headless walk: menu toggles passed
e.currentTarget into the setState updater where React nulls it by
render time, so anchor was null and the menu never rendered; capture
the element before the updater.
- Headless journey on the real binary with --auth on: admin bootstrap
via CLI -> first-login forced change -> app; admin creates bob (bob
sees no user management); alice reset via CLI -> forced change on
next login; API-key tab login; logout; zero console errors. npm run
build + vitest green; make test full suite exit 0.
Impact: replaces the old API-key-only LoginGate; embedded no-auth mode
unchanged (no login page shown).
Refs: proposal 2026-09-30-ui-redesign-and-auth.md section 5 (R2,
admin-issued variant)
Why: creation entries were split (project + at sidebar top-left, new
session at bottom-left) and the project tree forced per-project
navigation; the approved option A design makes one primary New Task
entry, organization a view mode, and identity always present.
Evidence:
- New TaskSidebar: single New Task split button (current-project context,
Cmd-N, secondary menu for new project / new task in project), project
<-> timeline organization with persisted collapse, pinned section,
archive view toggle, hover row actions, account footer fed by
/api/me (embedded mode shows local tenant; logout clears the key),
workspace icon strip retained (D25 shared list with Cmd-1..9).
- store: tasks = cross-project list via GET /api/conversations; openTask
switches project context; pin/archive optimistic + refresh; last
project context persisted; stale conversations field removed.
- tasklist.ts pure helpers + 6 vitest cases; npm run build passes;
headless walk on the real binary: cross-project open, pinned-first,
archive hide/show/restore, new-task flow, zero console errors.
Impact: ProjectNav removed; contracts.ts regenerated from core
(pinned/archived); no composer/right-pane changes (D25/D26/D31 intact).
Refs: Agent-System-Documents docs/proposals/2026-09-30-ui-redesign-and-auth.md
Why: the backend prompt library ships new contract shapes and an
endpoint; the frontend mirror and api binding keep the TS side in sync
for upcoming management UI.
Evidence: tsc + vite build green as part of composite make test.
Impact: contracts.ts gains PromptModule/Trigger and
AgentProfile.promptModules; api gains listPromptModules. No UI change
yet.
Refs: feature/prompt-library task card.
Why: during a run nothing was rendered (the assistant message only lands
at completion, so the LiveState projection never hit the screen), and
white-space:pre-wrap on .part-text turned marked's inter-block newlines
into blank lines, giving ordered lists a huge per-item gap. A latent
race also wiped thinking/tool/phase state that arrived before the send
POST resolved, and thinking text ran inline with the answer.
Evidence: headless playwright against the mock backend shows the live
bar, an expanded thinking panel, tool chips and incremental text with a
blinking cursor mid-run; list item gaps measure 2.1px with
white-space:normal; make test (frontend 9 tests) green.
Impact: users watch thinking, tool calls and the answer stream in real
time; markdown typography (lists, tables, quotes, headings) is compact;
terminal runs fold the process trail behind a summary.
Refs: feature/chat-live-quality task card.
Why: .chat is a column-flex item of .main without min-height:0, so its
content-based automatic minimum height grew past the viewport; .chat-body
never overflowed (never scrolled) and the input bar was pushed off-screen.
Evidence: headless Chromium on mock serve, 1024x620: before .chat=2130px
and input-bar bottom=717 (>viewport), chat-body scrollable=false; after
.chat=620, chat-body clientH 501 / scrollH 2011 with wheel scroll moving
600px up and back to bottom, input-bar bottom=620. Variants (empty
conversation, single short message, 1024x400, 720x600) keep the input
visible. Full combo make test green.
Impact: chat page was unusable beyond one screen of content; single CSS
rule chain, no behavior change elsewhere.
Refs: Agent-System-Dev task card feature/chat-scroll-fix.
Why: the chat column must host the danger-command confirm interaction inline (anchored, blocking hint, collapsed once resolved), cardlinks must locate their inbox card (D32), files dropped on the conversation must attach, and the slash menu must reflect the command registry (same source as buttons/cards/chat, D27).
Evidence: vitest 9/9; tsc clean; delegation-only logic (rendering covered by ui InlineConfirmCard suite, dispatch by backend e2e).
Impact: Conversation renders anchored confirm cards via @ui InlineConfirmCard with openInbox locate (store helper), PartCard cardlink click locates the inbox card, chat-body accepts file drops through the existing upload path, composer hints while a confirm is open, CommandMenu tolerates commands without a slash alias and marks danger=high.
Refs: docs/proposals/2026-09-30-ui-inbox-command-workspace.md T3; task card feature/command-bus-r1
Why: T2 frontend of the inbox (D25): the inbox is the first tab with a live
pending count; card events (created/updated/status/resolved) upsert the
projection in real time; confirm-projection cards route clicks back to HITL
resolution (run resumes, server syncs both sides); other actions call the
cards API and append the server-persisted receipt into the timeline.
Evidence: tsc + build green; vitest 9/9; card state resets/refreshes on
conversation open and reconcile.
Impact: default right tab becomes 收件箱 (localStorage-persisted preference
still honored for existing users).
Refs: modules/documents docs/proposals/2026-09-30-ui-inbox-command-workspace.md
Why: Core T1 added ActivityCard, card.* events, HITL anchoring fields and seven
UI vocabularies; this repo's contracts.ts is the generated mirror.
Evidence: make contracts from Core main; frontend vitest 9/9 still green
(additive types, shape tests unaffected).
Impact: Types available for T2 inbox implementation; no behavior change.
Refs: Agent-System-Documents proposal 2026-09-30-ui-inbox-command-workspace
Why: The schema renderer and design tokens moved to the new Agent-System-UI
repo (D29); Frontend becomes the first host consuming it through the @ui
source alias so future inbox/card/workspace components land in the shared
library instead of this repo.
Evidence: tsc+build clean with modules/ui materialized; vitest 9/9 pass;
combined CSS (tokens.css + ui.css + styles.css) verified rule-identical to
the pre-migration styles.css except comments and a collision-free block
relocation; doc-ref store access replaced by injected DocBridge at the two
call sites (plugin panels, card parts, HITL forms).
Impact: Requires sibling modules/ui checkout (Dev worktree provides it); vite
dedupe keeps single react/marked copies in the bundle.
Refs: Agent-System-Documents proposal 2026-09-30-ui-inbox-command-workspace (D29)
Why: the composition adopted the delivery gate (Dev repo ef89fc8); resident
entry rules must carry the gate so agents load them without reading the
guidelines submodule first.
Evidence: text-only entry change; gate mechanics validated in the Dev repo
scratch-repo suite (19/19) and merged as PR weichen/Agent-System-Dev#1.
Impact: entry doc only; no code, contract, or build change in this repo.
Refs: Development-Guidelines 0.1.0-draft.7; Agent-System-Dev ef89fc8
Details (original message):
Implement the three-column workbench frontend: resizable/collapsible nav with overshorthand collapse, streaming chat with part renderers and process collapse, HITL choice cards with impact display and free-input pivot, plan/todos/artifacts/agents tabs, subagent tracker modal, schema-driven settings center with effect badges and masked secrets, profile management with import/export, plugin panel rendering, doc viewer with edit-save; contract shape tests.