ELNOR REPO READER TEXT MIRROR Original path: Current Specs/DOC21/DOC21 (UI) Q_DASHBOARD_MASTER_UI_SPECIFICATION_R7.md Source repo: /Users/OpenClaw1/Elnor/Elnor Specs Git branch: main Git commit: dbaa25962edc11ab30e8d4ca1715f9ae5bf77331 Generated: 2026-06-09T01:23:58.539Z --- # Q Dashboard — Master UI Specification R7 **Version:** R7 Consolidated **Date:** 2026-03-19 **Status:** Consolidated operative — R7 supersedes all prior versions. Complete standalone document. **Scope:** All UI surfaces from DOC10, DOC11 R14, DOC12, DOC14, DOC15, DOC16, DOC17, DOC20 R2, DOC3. ### What R7 adds R7 aligns DOC11 surfaces to DOC11 R14 (the inline-compiled full-closure revision). Major DOC11 R14 additions: - **Fast Mode control:** `fast_mode_desired` on every surface where thinking/reasoning/verbose appear (chat header, participant drawer, Settings, agent editor, Truth Resolver). New `ServiceTier` type. - **Plugin ownership badges:** `ownership_kind` and `plugin_state` on catalog entries. Plugin-backed entries remain visible but non-selectable when unavailable. - **Credential source badges:** Per-profile `credential_source_kind` badge (Env Variable, CLI Managed, Secret Vault, Plugin Managed, Gateway Store). - **Auth profile removal modal:** `active_binding_strategy` enum (block/switch_to_profile/force_remove) with replacement profile picker. - **Channel pairing challenge transport:** `ChannelPairingChallenge` schema for QR/OAuth/code flows. Refresh/cancel/ack-expiry routes. - **Discord/WhatsApp control separation:** Discord uses Clear Token + Disconnect. WhatsApp uses Login/Cancel/Relink/Logout. No shared logout concept. - **ACP session lifecycle expansion:** 13 states with transition table. Resume two-threshold model. Durable bindings. Project-root apply semantics. - **Context-engine diagnostics:** Compaction delegation mode, root memory bootstrap truth, health events. - **Mismatch/fallback log filters:** Query parameters for time range, scope, runtime mode, provider. - **Appendix U control matrix:** 26 mutable controls with canonical route/read-model/event mapping. - **45+ new routes, 30+ new SSE events, 8 new badge types, 4 new destructive modals.** R7 also retains all R6 content (DOC20 R2 alignment) unchanged. ### What R6 added R6 aligned the DOC20 surfaces to DOC20 R2 (2026-03-19). Major changes: - **Notes page rewrite:** NoteListPane removed — note navigation moves to Browser's Notes scope. Notes page is now editor-only with block-based content (TaskList, ActivityFeed, InlineThread, ConfigurableBar blocks), +Module toolbar, @mention agent invocation, /slash commands. - **Today Note / Workspace Home:** Auto-generated daily note opened on launch. Block-based modular document with rollover behavior. - **Module Preset Picker:** 3-step dropdown from +Module button. System/Agent/Custom presets with full CRUD. - **Browser column expansion:** 7 scope families (add Notes). 16 type chips (add Prompt, add internal-only Automation). Notes scope shows dedicated folder tree. Empty states. Recently Deleted system view. Degraded-source warning badge. `⌘+B` toggle shortcut. - **Document Viewer expansion:** RendererCapabilities interface with `docx` entry. Iframe sandbox for HTML/JSX. DocumentSelectionAICommand for bubble menu. ArtifactVersionSchema with root_id/version_id model. Version overflow rule (50+). - **Project page expansion:** `background_instructions` editable field. `current_spend_usd` display. Duplicate button. - **Settings > Workspace:** Today note auto-generate, rollover time, template link. - **New commands and read contracts:** 20+ new EC commands, feed refresh, module preset CRUD, today note resolution, artifact version history, browser catalog rebuild, document selection AI, comment reanchor, overlap resolve, AI preview accept/reject, recently deleted restore/delete. - **Shared patterns:** Block spacing, feed dormancy, module toolbar, today rollover toast, anchor status badges, export format matrix. All Section A (DOC11/DOC12) content is unchanged from R5. --- ## CHANGELOG | Date | Inputs | Areas Updated | Summary | |---|---|---|---| | 2026-03-12 | DOC12 R7.1 + DOC14 + DOC10 ledger R10 + DOC11 R12.2 + DOC15 + DOC16 + DOC17 | Room View, Room Browser, prompt truth, review target, findings, child-room, endpoints, SSE, tracker, constants | R4.1: Room/red-team consolidation | | 2026-03-13 | OpenClaw 2026.3.8 stable + DOC11 R12.3 | Status/Runtime, Settings (Providers, Local, Web Search, Context), room provenance, destructive modals, constants | R4.2: DOC11/OpenClaw alignment | | 2026-03-15 | DOC20 R1.3 | New pages, nav items, Settings, component inventory | R4.3: Notes page, Browser column, Artifact Viewer, Folders, Places | | 2026-03-16 | DOC20 R1.5, mockup iteration | Renamed surfaces, new components, shared patterns | R4.4: Artifact Viewer → Document Viewer, tabbed right panel, folder overlay, note list search/sort/archive, per-comment send, Send to Agent two-tier, browser footer, 14 type chips, comment wiring, content map | | 2026-03-16 | R4.1 + R4.2 + R4.3 + R4.4 merge | All | R5: Full consolidation into single standalone document. No content changes — merge only. | | 2026-03-19 | DOC20 R2 | Notes (rewritten), Document Viewer (updated), Browser (updated), Projects (updated), Settings (Workspace added), 20+ new commands, block editor, Today note, +Module, ModulePreset, feed dormancy, Notes scope, RendererCapabilities, Recently Deleted | R6: Full DOC20 R2 alignment | | 2026-03-19 | DOC11 R14 | Section A rewritten: Fast Mode, plugin ownership, credential source, auth profile removal, channel pairing challenges, Discord/WhatsApp separation, ACP lifecycle/resume/roots, context-engine diagnostics, mismatch log filters, Appendix U controls, 45+ new routes, 30+ new events, 8 badge types, 4 modals | R7: Full DOC11 R14 alignment | --- # ════════════════════════════════════════════════════ # SECTION A — DOC11 / DOC12 / OPENCLAW SURFACES (R4.1-R4.2, updated R7 for DOC11 R14) # ════════════════════════════════════════════════════ ## A.1 DOC11 / OpenClaw 2026.3.8 UI alignment rules ### A.1.1 Release-alignment design rule Where OpenClaw 2026.3.8 makes runtime behavior more explicit, Q MUST prefer: runtime-read truth over client inference, neutral ordering over suggestive ordering, preserved secret/source truth over fake-empty field rendering, visible backup guidance over silent destructive mutation, explicit compatibility-path truth over generic provider badges, explicit provenance/receipt disclosure over flattened context summaries. ### A.1.2 Post-save runtime snapshot refresh rule After any successful save/probe/sync/delete/relogin/set-default/fallback update on DOC11-controlled settings surfaces, the UI MUST: (1) show Saved/Submitted state only for the mutation itself, (2) immediately refetch the authoritative runtime snapshot/read-models, (3) update cards/badges/field rows/chips from refreshed runtime truth, (4) preserve masked secret/source truth for non-round-trippable values, (5) avoid local optimistic rendering of Verified/Connected/Reachable/Effective/Executing unless the refreshed runtime snapshot proves it. ### A.1.3 Cross-settings truth rule All DOC11 settings pages: Submit state is local and temporary. Verified/effective/reachable/active states come only from refreshed runtime truth. Secret-backed values that cannot be returned in plaintext render as `Preserved secret`. Non-plaintext values the client cannot directly use show a warning; field is not cleared. ### A.1.4 Shared visual language — DOC11 badges | Badge / pill | Meaning | Surfaces | |---|---|---| | `Compatibility path active` | Provider using compatibility transport with narrower feature support | Settings > Web Search, Status search card, execution details | | `Preserved secret` | Runtime has non-plaintext value, intentionally preserved, not round-tripped | Providers & Models, Local Providers, Web Search, Runtime & Connectivity | | `Unsupported token shape` | Remote gateway token exists but cannot be used directly by current client | Runtime & Connectivity, remote gateway dialog | | `ACP provenance` | Context or transcript carries ACP ingress metadata from runtime | Room Context tab, Review Target tab, Prompt Plan drawer, diagnostics | | `Receipt injected` | Runtime injected visible ACP receipt text into context/transcript | Room Context tab, Review Target viewer, diagnostics | | `Fast Mode` (R7) | Fast mode on/off/unsupported for active provider/model | Chat header, participant drawer, Settings > Providers & Models, agent editor, Truth Resolver debug | | `Plugin: core/bundled/third-party/manual` (R7) | Provider/model/search plugin ownership kind | Provider catalog, search catalog, local provider catalog views | | `Plugin state` (R7) | Plugin availability: available/missing/incompatible/disabled/unknown | Provider/search/local catalog rows when plugin-backed | | `Credential source` (R7) | Auth credential provenance: Env Variable, CLI Managed, Secret Vault, Plugin Managed, Gateway Store | Settings > Providers & Models auth profile rows | | `Auto-detect / Configured` (R7) | Search provider selection source | Settings > Web Search summary row | | `config_write_mode` (R7) | How config writes reach runtime: direct_runtime/runtime_snapshot/pending_restart | Search/channel runtime cards | | `Context-engine health` (R7) | Context engine operational status: healthy/degraded/unavailable/unknown | Runtime & Connectivity, Context Inspector | | `ACP degraded/error` (R7) | ACP session health with visual treatment derived from session state | Chat headers, task headers, room participant chips/drawers, agent cards | ## A.2 PAGE 11 — STATUS / RUNTIME & CONNECTIVITY ### Layout ```text ┌────────────────────────────────────────────────────────────────────────────┐ │ SUMMARY STRIP: Gateway | Runtime Aggregate | Search | Streams | Issues │ ├────────────────────────────────┬───────────────────────────────────────────┤ │ LEFT COLUMN │ RIGHT COLUMN │ │ - GatewayConnectionCard │ - AuthIssueLogCard │ │ - RemoteGatewayConnectionCard? │ - MismatchFallbackSummaryCard │ │ - ActiveScopesTable │ - SearchRuntimeCard │ │ - LocalProviderRuntimeGrid │ - StreamHealthCard │ │ - CurrentExecutionSummaryCard │ - RecentAbortsCard │ │ - DualConnectionDiagCard │ - RuntimeSnapshotRefreshNotice? │ ├────────────────────────────────┴───────────────────────────────────────────┤ │ DIAGNOSTICS TABS: [Truth Resolver] [Capability] [Context] [Events] │ └────────────────────────────────────────────────────────────────────────────┘ ``` ### Elements | Element | Type | Source | Status | |---|---|---|---| | RemoteGatewayConnectionCard | Card | DOC11 R12.3 §4A.21A, §10.8 | Wired | | RuntimeSnapshotRefreshNotice | Notice row | DOC11 R12.3 §4A.17A | Wired | | SearchCompatibilityBadge | Inline badge | DOC11 R12.3 §4B.6–§4B.7 | Wired | | SearchProviderModeChip | Chip | DOC11 R12.3 §4B.6–§4B.7 | Wired | | AcpProvenancePanel | Diagnostics subsection | DOC11 R12.3 §6.12, §6.18, §10.9 | Wired | SearchRuntimeCard: search_enabled, configured/effective provider_id, provider_mode, compatibility_path, latest_executed_provider, fallback_state, last probe. Alphabetical display order unless runtime override. Never imply fallback priority. RemoteGatewayConnectionCard: show when remote mode truth available. Remote mode state, URL, token source kind, token direct-use state, last validated, last error. Never display raw token. Preserved non-plaintext renders as preserved, not empty. CurrentExecutionSummaryCard additions: executed search provider/mode, compatibility-path flag, ACP provenance badge. ContextDiagnosticsPanel — ACP subsection: provenance mode (off/meta/meta+receipt), trace id, parent session ref, receipt excerpt. ### R7 additions (DOC11 R14) | Element | Type | Source | Status | |---|---|---|---| | ContextEngineHealthCard | Card | DOC11 R14 §6.16A, RL-054 | Wired | | ReconnectButton | Action | DOC11 R14 §10.8A → `POST /api/openclaw/runtime/reconnect` | Wired | | ConnectionLogButton | Action | DOC11 R14 §10.8A → `GET /api/openclaw/runtime/connection-log` | Wired | | TruthResolverButton | Action | DOC11 R14 → `GET /api/openclaw/runtime/truth-resolver` | Wired | | MismatchLogFilterBar | Controls | DOC11 R14 → `GET /api/openclaw/runtime/mismatch-fallback-log` with query params (time_range, scope_kind, runtime_mode_filter, provider_id_filter, search_provider_id_filter) | Wired | | FastModeBadge | Badge | DOC11 R14 §4.5/§4.6 RL-049 — on/off/unsupported | Wired | | IndicatorAggregateStrip | Summary | DOC11 R14 RL-003 — active_scope_count, verified_count, degraded_count, auth_issue_count, orphaned_count | Wired | Runtime & Connectivity action semantics (R7): - `Reconnect` → `POST /api/openclaw/runtime/reconnect` with `scope_kind: "gateway" | "channels" | "providers" | "all"`. On success, refresh all runtime cards. - `View Connection Log` → `GET /api/openclaw/runtime/connection-log`. Returns metadata/messages only, latest 500 entries or 7 days. - `View Protected Files` → `GET /api/openclaw/context/protected-files`. Metadata-only. Context-engine diagnostics (R7): - `GET /api/openclaw/context/diagnostics` → `ContextEngineDiagnostics` with `compaction_delegation_mode`, `root_memory_bootstrap_source`, `root_memory_bootstrap_conflict_detected`, `health_state`. - Context-engine health card visible in Runtime & Connectivity and Context Inspector. - Event: `gateway.context_engine.health.changed`. ## A.3 PAGE 13 SETTINGS — DOC11 subpages ### Providers & Models BackupRecommendationBlock in Delete Model / Remove Profile modals. RuntimeSnapshotRefreshHint after save. PreservedSecretBadge. After any mutation, refetch runtime snapshot before green verification badge. R7 additions: - **Fast Mode control** on every surface where thinking/reasoning/verbose appear. `fast_mode_desired: "inherit" | "on" | "off"`. Show `Unsupported` badge when `fast_mode_support_state = "unsupported"`. Only `inherit` selectable when `unknown`. Event: `gateway.control.fast_mode.changed`. - **Service tier display** (read-only): `service_tier_effective: "auto" | "standard" | "priority" | "unknown"` in current execution cards. - **Plugin ownership badges** on catalog entries: `ownership_kind` badge. Plugin-backed entries non-selectable when `plugin_state = "missing" | "incompatible" | "disabled"`. - **Credential source badge** on every verified auth profile: non-editable, derived from runtime, labels: `Env Variable`, `CLI Managed`, `Secret Vault`, `Plugin Managed`, `Gateway Store`. - **Auth profile removal modal**: `active_binding_strategy: "block" | "switch_to_profile" | "force_remove"`. When `switch_to_profile`, show replacement profile picker. `confirmation_phrase: "REMOVE_PROFILE"` required. Route: `DELETE /api/openclaw/providers/:provider_id/auth-profiles/:profile_id`. - **Set Default Profile**: `POST /api/openclaw/providers/auth/set-default`. Event: `gateway.auth.default_changed`. - **Fix Scope**: `POST /api/openclaw/providers/auth/fix-scope`. Initiates re-auth challenge with expanded scope. ### Local / Self-Hosted Providers Provider rows show: Preserved secret, Last snapshot refresh, Runtime source updated. Delete modal: impacted sessions, revert-to-discovery, BackupRecommendationBlock, probe-is-authoritative warning. R7 additions: - **Local model metadata override CRUD**: `PUT/DELETE .../local-runtime-configs/:provider_id/models/:model_ref/metadata`. Override fields: context_window_tokens, max_output_tokens, reasoning_support, tool_support, input_modalities, cost_policy. Badge: `Operator asserted`. - **Local runtime probe**: `POST .../local-runtime-configs/:provider_id/probe` → `LocalRuntimeProbeResult` with vram_available_mb, loaded_models[]. - **Plugin ownership badges** on provider rows. ### Web Search SearchProviderOrderingNote, SearchCompatibilityBanner, CompatibilityRestrictedFieldHint, DeleteSearchProviderBackupCallout. Provider list: neutral alphabetical order. When compatibility_path_active: show banner, disable unsupported filters. Default order: Brave, Gemini, Grok, Kimi, Perplexity. R7 additions: - **Search test route**: `POST /api/openclaw/tools/web-search/test` → `SearchProviderTestResult`. Graceful empty terminal: verified empty result shows success with system note, not error. - **Search fallback visibility**: every triggered fallback visible in Settings summary, Runtime & Connectivity search card, execution watermark, mismatch/fallback log. UI MUST distinguish `No results found` from `Search provider failed`. - **Search runtime snapshot refresh**: `gateway.search.runtime_snapshot.refreshed` fires after config save/delete/default-change/probe/reconnect. Event: `gateway.search.fallback.recorded` with `stage: "triggered" | "completed" | "failed"`. - **Plugin ownership and capability flags** on search catalog entries. - **Auto-detect vs Configured badge** on effective provider row. ### Channels (R7 — DOC11 R14 §4D) R7 adds channel-specific controls previously underspecified: **Discord:** - `Clear Token` → `POST /api/openclaw/channels/discord/clear-token` (destructive modal) - `Disconnect Bot` → `POST /api/openclaw/channels/discord/disconnect` (NOT "Logout") - `Add/Edit Rule` → `PUT /api/openclaw/channels/:provider_id/rules/:rule_scope_ref` - `Delete Rule` → `DELETE .../rules/:rule_scope_ref` (destructive modal) - `Probe` → `POST /api/openclaw/channels/discord/probe` **WhatsApp:** - `Start Login` → `POST /api/openclaw/channels/whatsapp/login/start` - `Cancel Login` → `POST /api/openclaw/channels/whatsapp/login/cancel` - `Refresh QR` → pairing challenge refresh route - `Relink` → `POST /api/openclaw/channels/whatsapp/relink` - `Logout` → `POST /api/openclaw/channels/whatsapp/logout` (destructive modal) - `Refresh State` → `POST /api/openclaw/channels/whatsapp/probe` **Channel pairing challenge transport:** - `ChannelPairingChallenge` with `challenge_type: "qr_data" | "qr_image_base64" | "pair_code" | "oauth_url" | "link_url" | "none"` - Routes: `GET .../pairing-challenge`, `POST .../pairing-challenge/refresh`, `POST .../pairing-challenge/cancel`, `POST .../pairing-challenge/ack-expiry` - All return `ChannelPairingChallengeMutationResult` with `pairing_state` and `login_state` **ChannelRuntimeState** (canonical merged shape): - `connection_state`, `health_state`, `account_count`, `default_account_id`, `pairing_queue_count`, `config_write_mode` - Discord nested: `token_present`, `intents_state`, `bot_user_id` - WhatsApp nested: `login_state`, `active_qr_challenge_id` ### ACP / External Harnesses (R7 — DOC11 R14 §4C) R7 expands ACP from basic profile management to full lifecycle: - **ACP session states** (13): not_started, starting, active, idle, streaming, resuming, resumed, degraded, cancelling, closing, closed, expired, failed - **Resume two-threshold model**: `AcpResumeThresholdConfig` with `soft_threshold_seconds` (default 30), `hard_timeout_seconds` (default 90). Before soft: "Resuming…". At soft: "Still resuming…" + `degraded`. After hard: `failed`. Route: `POST .../sessions/:session_key/resume`. Events: `gateway.acp.session.resuming/resumed/resume_failed`. - **Project roots**: `AcpProjectRootEntry` with `apply_mode: "live_applied" | "restart_required" | "advisory_only" | "rejected"`. Each row shows apply result badge. OS-native directory picker. Routes: `PUT .../profiles/:id/project-roots`, `DELETE .../project-roots/:root_id`, `POST .../project-roots/validate`. - **ACP session detail**: `GET .../sessions/:session_key` → `AcpSessionRuntimeState`. `GET .../sessions/:key/history`. - **ACP durable bindings**: `binding_scope_kind: "room_participant" | "channel_account" | "channel_thread" | "channel_topic" | "session"`. Events: `gateway.acp.binding.changed/broken`. - **ACP cancel session modal**: "Cancel ACP session? In-flight work may be lost." Buttons: [Cancel Session] [Keep Running]. - **Fast Mode for ACP**: `fast_mode_desired/effective` when harness supports it. ### Context & Budget ACP provenance availability in diagnostics links when runtime exposes it. R7 additions: - **Budget settings mutation**: `PUT /api/openclaw/context/budget-settings` with `SpilloverAllowanceConfig` (mode: fixed/percentage, fixed_tokens, percentage_of_budget). - **Protected files view**: `GET /api/openclaw/context/protected-files` → metadata-only list. - **Context-engine diagnostics**: `GET /api/openclaw/context/diagnostics` → compaction delegation mode, root memory bootstrap truth. - **ContextInjectionManifest expanded**: `transport_mode`, structured drop/stale/duplicate/overlap/truncated/degraded arrays with reason codes. ## A.4 ROOM VIEW / CONTEXT / PROVENANCE Accessed via `/rooms/:id`. R4.1 room/red-team surfaces remain operative. R4.2 adds ACP provenance layer. Review Target Tab: optional ACP provenance area (mode, trace id, parent session ref, receipt excerpt). Only when runtime supplies metadata. Context Tab: ACP Provenance subsection when manifest includes acp_ingress_provenance. Mode badge, trace id copy, parent session link, receipt card. Prompt Plan Drawer: small provenance badge in identity snapshot when ACP present. Link to Context tab. Finding Detail Modal: ACP provenance badge, trace id, lineage link when finding includes ACP metadata. Additive to DOC14/DOC12 lineage. ## A.5 Global — DOC11 ### BackupRecommendationBlock Shared for: DeleteModelModal, RemoveAuthProfileModal, DeleteLocalProviderConfigModal, DeleteSearchProviderConfigModal, future high-risk modals. Copy: "Recommended before destructive changes: openclaw backup create --verify". Informational only. ### Global runtime-update rule Any settings mutation changing auth/search/local-provider/model execution: submit → pending → refetch authoritative state → reconcile → clear pending. No `Verified` from mutation response alone. ### Constants ```ts export const SEARCH_PROVIDER_DISPLAY_ORDER = "alphabetical_by_display_name_unless_runtime_override"; export const SEARCH_COMPATIBILITY_PATH_SUPPORTED_FILTERS = ["query", "freshness"]; export const BACKUP_RECOMMENDATION_DEFAULT_CMD = "openclaw backup create --verify"; export const BACKUP_RECOMMENDATION_CONFIG_ONLY_CMD = "openclaw backup create --only-config --verify"; export const REMOTE_GATEWAY_TOKEN_STATES = ["usable_directly", "preserved_placeholder", "unsupported_shape_for_client", "unknown"] as const; export const ACP_PROVENANCE_MODES = ["off", "meta", "meta+receipt"] as const; // R7 additions (DOC11 R14) export const FAST_MODE_VALUES = ["inherit", "on", "off"] as const; export const FAST_MODE_SUPPORT_STATES = ["supported", "unsupported", "unknown"] as const; export const SERVICE_TIERS = ["auto", "standard", "priority", "unknown"] as const; export const PLUGIN_OWNERSHIP_KINDS = ["core", "bundled_plugin", "third_party_plugin", "manual", "unknown"] as const; export const PLUGIN_STATES = ["available", "missing", "incompatible", "disabled", "unknown"] as const; export const CREDENTIAL_SOURCE_KINDS = ["env_variable", "cli_managed", "secret_vault", "plugin_managed", "gateway_store"] as const; export const AUTH_BINDING_STRATEGIES = ["block", "switch_to_profile", "force_remove"] as const; export const ACP_SESSION_STATES = ["not_started", "starting", "active", "idle", "streaming", "resuming", "resumed", "degraded", "cancelling", "closing", "closed", "expired", "failed"] as const; export const ACP_ROOT_APPLY_MODES = ["live_applied", "restart_required", "advisory_only", "rejected"] as const; export const CHANNEL_CONNECTION_STATES = ["disabled", "connecting", "connected", "degraded", "disconnected", "login_pending"] as const; export const CONTEXT_ENGINE_HEALTH_STATES = ["healthy", "degraded", "unavailable", "unknown"] as const; ``` ### DOC11 UI truth rules Never reorder search providers to imply fallback priority. Never treat secret-backed field as empty. Never hide compatibility-path downgrade. Never omit backup guidance from destructive modal. Never show ACP provenance unless runtime reported it. Never claim remote gateway token usability without runtime truth. --- # ════════════════════════════════════════════════════ # SECTION B — DOC20 SURFACES (from R4.3-R4.4, updated R6) # ════════════════════════════════════════════════════ ## B.1 Nav items Notes page: `notes`, FileText icon, position after Memory before Agents. Notes page opens the Today note by default via `/notes/today` deep-link resolution (DOC20 §6.2B.4A). Full nav order: Home, Chats, Activity, Projects, Tasks, Memory, **Notes**, Agents, Forum/Panels, Status, Cost, Settings. ## B.2 Surfaces ### Today Note / Workspace Home (R6 — DOC20 §6.1, §6.2B) Auto-generated daily note opened on launch and when clicking Notes nav item. Block-based modular document with TaskList, ActivityFeed, InlineThread, ConfigurableBar blocks. Rollover behavior: at configurable time (default midnight/00:00 per DOC20 R2 §6.2B.2), unchecked tasks carry forward, yesterday's note renamed/moved to Daily Notes folder/unpinned, new Today note created from TodayNoteTemplate. Sun icon badge on Today note in browser results. ### Notes page (R6 rewrite — DOC20 §6.1, §6.4 R2) Editor-only layout — note list pane removed (note navigation handled by Browser Notes scope §3.5.8). Block-based Tiptap editor with custom block nodes: TaskList, ActivityFeed, InlineThread, ConfigurableBar. +Module toolbar button for block insertion. @mention agent invocation on any line. /slash commands for block insertion (/todo, /feed, /ask, /bar, /table). Tabbed right panel (Comments + Send to Agent), tracked changes, AI integration. Q sends `NoteMetadataUpdateCommand` with `last_opened_at: now` on every note open (required for feed dormancy sweep — DOC20 §6.2A.3 R2). ### Browser column (R6 update — DOC20 §3) Persistent second-column. Toggle: sidebar header Columns icon, shortcut `⌘+B` / `Ctrl+B`. Width: 260px default, 200-450px. Scope families: 7 (Collection, Project, Bucket, Places, Folders, **Notes**, Saved Views — deselectable). Notes scope shows dedicated folder tree with All Notes, user folders, Daily Notes special folder, Templates special folder. Filtered results show task/comment/change badges. Type chips: 16 enum values — 15 visible (Document, Chat, Preset, Skill, Task, Agent, Panel, Forum, Overlay, Note, Bucket, Project, Artifact, Place, Prompt) plus internal-only `automation` (excluded from type chips, appears in results only when explicitly filtered). Sort: 5 options (Modified, Alphabetical, Type, Created, Last Used). Footer: active state summary. Empty states: no results (filtered), no results (search), no results (empty scope), loading skeleton. Recently Deleted system saved view with per-item Restore / Delete Permanently. Degraded-source warning badge in footer when `BrowserCatalogEnvelope.degraded_sources` is non-empty. ### Module Preset Picker (R6 — DOC20 §6.2C, §6.2A.6) Dropdown from +Module toolbar button. 3-step flow: 1. **Block type:** Task List, Activity Feed, @Elnor Thread, Notice Bar 2. **Feed presets** (ActivityFeed only): System tab / Agent tab / My Presets tab. Each shows ModulePresetCard with icon + name + description. 3. **Custom config** (ActivityFeed only): source type, agent picker, instruction field, refresh interval, max items, dormancy days. ModulePreset CRUD: `ModulePresetCreateCommand`, `ModulePresetUpdateCommand`, `ModulePresetDeleteCommand` (custom only), `ModulePresetHideCommand` (any preset). Gear menu on each block: Edit, Save as Preset, Delete Block. ### Project page (R6 update — DOC20 §4) Tab set: Home, Documents, Activity, Project Context, Configure. Connected box style. Home tab = notes workspace scoped to project. R6 additions: `background_instructions` editable textarea in Project Context tab (DOC20 §4.6.3 R2). `current_spend_usd` read-only display in header/Configure (DOC20 §4.7.7 R2). Duplicate button in Configure > Project Management (DOC20 R2 `ProjectDuplicateCommand`). Project Home empty state (DOC20 §5.9 R2): project details summary (title, description, color badge, budget if enabled), prominent [Create Project Note] button, quick links ("Drop files into Documents", "Start a Chat"), conditional text about existing documents. ### Document Viewer (R6 update — DOC20 §6.16) Renamed from Artifact Viewer. Route: `/viewer/:id`. Any viewable file type. Format-specific renderers with RendererCapabilities interface (DOC20 §6.16.5A R2): per-format capability map (text_selectable, supports_tracked_changes, supports_inline_comments, supports_page_anchors, supports_line_anchors, supports_find, supports_copy, supports_print, editable). Includes `docx` renderer entry (mammoth.js → HTML preview). Iframe sandbox for HTML/JSX/unknown previews: `sandbox="allow-scripts"`, no `allow-same-origin`, no `allow-forms`. DocumentSelectionAICommand for bubble menu Rewrite/Expand/Shorten (R2). ArtifactVersionSchema with stable `artifact_root_id` + child `version_id` values. Version history dropdown: major/minor differentiation. Version overflow: if >50 versions, show 10 most recent + "View all versions" link opening scrollable ArtifactVersionDrawer. "Accept All"/"Reject All" produce exactly ONE new version. ### Folders scope Unlimited depth. Delete via hover trash. Subfolder via hover +. R6: `FolderSchema.item_count` displayed in folder tree (DOC20 §7.14 R2). ### Places browsing Remove via hover X with confirmation. Subdirectory navigation. ## B.3 Settings — DOC20 additions (R6 update) Settings > Notes & Workspace (renamed from "Notes" in R6): - Default Note Advisor (agent selector, default Elnor) - Today note auto-generate toggle (DOC20 R2, `DOC20SettingsUpdateCommand`) - Rollover time picker (HH:MM, default midnight/00:00 per DOC20 R2 §6.2B.2) (DOC20 R2) - Today Template link (opens template note in editor) (DOC20 §6.2B.4) Settings > Document Viewer: Default Review Agent (agent selector, default Elnor). ## B.4 Component inventory (R6 rewrite) ### Browser components | Component | Page | Source | |---|---|---| | BrowserColumn | Global | DOC20 §3 | | BrowserScopeDetail | BrowserColumn | DOC20 §3.5 | | BrowserScopeChips | BrowserColumn | DOC20 §3.4 — 7 families (R6: add Notes), deselectable, folder overlay toggle | | BrowserNotesScopeTree | BrowserColumn | DOC20 §3.5.8 (R1.7) — note folder tree in scope detail | | BrowserTypeChips | BrowserColumn | DOC20 §3.6 — 15 visible types (R6: add Prompt, rename Bucket/Artifact) | | BrowserSortControl | BrowserColumn | DOC20 §3.7 — 5 options (R6: "Running" → "Last Used"), save view | | BrowserPlacesBrowser | BrowserColumn | DOC20 §3.5.3A | | BrowserFolderTree | BrowserColumn | DOC20 §3.15 | | BrowserResultRow | BrowserColumn | DOC20 §3.9.1 — draggable. R6: Today badge (sun icon), task count badge (☐ N) | | BrowserContextMenu | BrowserColumn | DOC20 §3.10, §8.8 R2 — exact command names per routing table. R6: `move_to_folder` removed from non-note types, "Save as Template" added for notes | | BrowserBulkActionBar | BrowserColumn | DOC20 §3.9.4 | | BrowserFooter | BrowserColumn | DOC20 R1.5. R6: degraded-source warning badge | | BrowserEmptyStates | BrowserColumn | DOC20 §3.9.8 (R1.6) — no results filtered/search/empty scope/loading skeleton | | BrowserCatalogRebuildButton | BrowserColumn | DOC20 R2 — manual rebuild via BrowserCatalogRebuildCommand | | FolderOverlay | BrowserColumn | DOC20 R1.5. DnD state machine: idle/dragging/drop-pending/committed/reverted | | SaveViewInlineInput | BrowserColumn | DOC20 R1.5 | | RecentlyDeletedView | BrowserColumn | DOC20 §6.18.7 R2 — system saved view, per-item Restore/Delete Permanently | ### Project components | Component | Page | Source | |---|---|---| | ProjectHomeTab | Projects | DOC20 §4.3.2. R6: empty state "No project notes yet" | | ProjectDocumentsTab | Projects | DOC20 §4.4 | | ProjectActivityTab | Projects | DOC20 §4.5 | | ProjectContextTab | Projects | DOC20 §4.6. R6: `background_instructions` editable textarea (§4.6.3), "Apply Project Context to Open Now" button | | ProjectConfigureTab | Projects | DOC20 §4.7. R6: `current_spend_usd` read-only display, Duplicate button (ProjectDuplicateCommand) | | ManageMembersDrawer | Projects | DOC20 §4.7.3A | | AddToProjectModal | Projects | DOC20 §4.7.3 | ### Notes components (R6 rewrite) Components **removed** (replaced by Browser Notes scope per DOC20 R2): - ~~NoteListPane~~ → Browser Notes scope - ~~NoteListSearch~~ → Browser search - ~~NoteListSort~~ → Browser sort - ~~NoteContextMenu~~ → Browser context menu - ~~NoteArchivedSection~~ → Recently Deleted saved view - ~~NoteListFooter~~ → Browser footer Components **retained and updated:** | Component | Page | Source | |---|---|---| | NotesPage | Notes | DOC20 §6.4 R2 — editor-only layout, no left sidebar | | NoteEditor | Notes | DOC20 §6.5, R2 — block nodes (custom Tiptap extensions) alongside text | | NoteEditorToolbar | Notes | DOC20 §6.5.3, R2 — add +Module button (grid icon + label, between Ref and Find). Remove any + inserter between-block references. 8px block spacing. | | ReviewDropdown | Notes | DOC20 §6.10.4 — "Accept All / Reject All produce exactly ONE version" (R6) | | VersionHistoryDrawer | Notes | DOC20 §6.3.6 | Components **added in R6:** | Component | Page | Source | |---|---|---| | NoteBlockEditor | Notes | DOC20 §6.2A (R1.7) — block-based Tiptap editor with module blocks | | ModuleToolbarButton | Notes | DOC20 §6.2A.6 (R1.8/R2) — "+Module" button in toolbar | | ModulePresetPicker | Notes | DOC20 §6.2C (R1.8) — 3-step dropdown picker | | TaskListBlock | Notes | DOC20 §6.2A.2 (R1.7) — checkbox tasks with subtask checkboxes, due date picker, Link Note button, @Elnor button, add-task input, add-subtask input, Done section | | ActivityFeedBlock | Notes | DOC20 §6.2A.3 (R1.8/R2) — preset-configured, lazy refresh, dormancy. Gear menu: Edit (opens picker in edit mode), Save as Preset, Delete Block | | InlineThreadBlock | Notes | DOC20 §6.2A.4 (R1.7/R2) — durable @Elnor conversations. Per-message Edit/Delete. Cancel button (NoteAICancelCommand). Collapsed view: "[E] Elnor · N · time" | | ConfigurableBarBlock | Notes | DOC20 §6.2A.5 (R1.7) — single-line notice/alert with Elnor button | | BlockDragHandle | Notes | DOC20 §6.2A.6 — grip icon on every non-text block | | TodayNoteBadge | Notes | DOC20 §6.2B.5 — sun icon badge on Today note | | FeedDormancyPrompt | Notes | DOC20 §6.2A.3 (R1.8) — "Feed dormant — [Refresh now]" | | NoteDeleteConfirmModal | Notes | DOC20 §6.15.14 (R2) — modal for notes with children/comments | | AtMentionAutocomplete | Notes | DOC20 §6.2D (R1.7/R2) — @agent autocomplete dropdown. 5 invocation contexts: new line→InlineThread, TaskList→indented thread, comment→Send, InlineThread→same thread, bubble menu→Ask inline/chat | | NoteAIPreviewPanel | Notes | DOC20 §6.15.3 + R2 — preview with Accept/Reject (NoteAIPreviewAccept/RejectCommand) | | BacklinksSection | Notes | DOC20 §6.13.4 — collapsed by default at bottom of note, shows incoming `[[` references | | CrossNoteLinkAutocomplete | Notes | DOC20 §6.13 — `[[` triggers note title autocomplete popup | ### Shared components (Notes + Document Viewer) | Component | Pages | Source | |---|---|---| | TabbedRightPanel | Viewer, Notes | DOC20 R1.5 | | CommentRail | Viewer, Notes | DOC20 §6.6 | | CommentCard | Viewer, Notes | DOC20 §6.6.4 — ✨ Send, inline delete | | BubbleMenu | Viewer, Notes | DOC20 §6.6.6 — X dismiss, dynamic agent | | TrackedChangeInline | Notes | DOC20 §6.10.2 — user-colored | | TrackedChangeContextMenu | Notes | DOC20 §6.10.8 | | AgentSelector | Viewer, Notes | DOC20 §6.15.8 | | SendToAgentDrawer | Viewer, Notes | DOC20 R1.5 — two-tier, chat selector | | ChatSelector | Viewer, Notes | DOC20 R1.5 — origin badge | | SelectCommentsScope | Viewer, Notes | DOC20 R1.5 | | PerCommentSendIcon | Viewer, Notes | DOC20 R1.5 | | ShowMarkupToggle | Viewer, Notes | DOC20 R1.5 | | AnchorStatusBadge | Viewer, Notes | DOC20 §6.6.8A (R2) — visual treatment for 5 anchor states: active, shifted, approximate, orphaned, unanchored | | OrphanedCommentCard | Viewer, Notes | DOC20 §6.6.9 (R1.6) — amber badge, strikethrough quote, Re-anchor/Resolve/Delete | | ReanchorFlow | Notes | DOC20 R2 — user selects text, NoteCommentReanchorCommand sent | | TrackedChangeOverlapDialog | Notes | DOC20 §6.10.9 (R1.6) + R2 — 3 options (Keep mine/Keep theirs/Keep both), TrackedChangeOverlapResolveCommand | ### Document Viewer components (R6 update) | Component | Page | Source | |---|---|---| | DocumentViewer | Viewer | DOC20 §6.16/R2 | | DocumentTitleBar | Viewer | DOC20 R1.5 | | DocumentToolbar | Viewer | DOC20 R1.5 — responsive collapse | | RendererRegistry | Viewer | DOC20 §6.16.5 | | RendererCapabilities | Viewer | DOC20 §6.16.5A (R1.6/R2) — per-format capability map, includes `docx` entry | | IframeSandbox | Viewer | DOC20 §6.16.5B (R2) — sandbox attrs for HTML/JSX preview | | DocumentSelectionAICommand | Viewer | DOC20 R2 — bubble menu Rewrite/Expand/Shorten backed by command | | ArtifactVersionDrawer | Viewer | DOC20 R2 — scrollable version history, ArtifactVersionHistoryRequest | ### Module Preset components (R6 new) | Component | Page | Source | |---|---|---| | ModulePresetCard | Notes | DOC20 §6.2C.4 — icon + name + description in picker | | CustomFeedBuilder | Notes | DOC20 §6.2C.4 — source type, agent picker, instruction, schedule, max items, dormancy | | SaveAsPresetAction | Notes | DOC20 §6.2C.4 — gear menu item, triggers ModulePresetCreateCommand | ### Recently Deleted components (R6 new) | Component | Page | Source | |---|---|---| | RecentlyDeletedView | Browser | DOC20 §6.18.7 R2 — system saved view, per-item restore/permanent-delete | | RestoreButton | Browser | DOC20 R2 — NoteRestoreCommand / ProjectRestoreCommand / ArtifactRestoreCommand | | PermanentDeleteButton | Browser | DOC20 R2 — with destructive confirmation | | EmptyRecentlyDeletedModal | Browser | DOC20 R2 — bulk purge with confirmation modal | --- # ════════════════════════════════════════════════════ # SECTION C — SHARED VISUAL LANGUAGE (all sources) # ════════════════════════════════════════════════════ ## C.1 Connected box tab style Active: bgPanel, accentBtn text, 2px bottom border. Inactive: #E8EAEE, #2A2D35 text, 1.5px #CDD1D8 border. ## C.2 Auto-hide scrollbar 4px, fades on hover. Browser, Notes, Comment rail, Document Viewer. ## C.3 Copy Reference `@[{title}]({type}:{id})`. Chip in chat, [[link]] in notes. ## C.4 Author-colored tracked changes You: #31588c blue. Elnor: #B04040/#2E8B57. Scout: #8B5E00/#2563EB. Reviewer: #7C3AED. ## C.5 DItem pattern Flush-left, 6px 10px padding, accentBtn+"08" active. ## C.6 Radio pattern 12px circle, flush-left, accentBtn fill selected. ## C.7 Per-comment send icon ✨ + "Send", right-aligned, textSec → accentBtn hover. ## C.8 Inline delete confirmation "Delete? **Yes** No" inline, no browser dialogs. ## C.9 Folder overlay Dashed icon (no label), 90px strip, dashed accentBtn drop target. ## C.10 Toast notifications Bottom-center, #1A1D21, white, 8px 18px, radius 10px, 2.2s dismiss. ## C.11 DOC11 badges Compatibility path active, Preserved secret, Unsupported token shape, ACP provenance, Receipt injected. See §A.1.4. ## C.12 BackupRecommendationBlock Shared destructive modal component. See §A.5. ## C.13 Block spacing (R6) 8px margin above/below module blocks. No auto-inserted text spacers between adjacent modules. Source: DOC20 §6.2A.6 (R1.8). ## C.14 Feed dormancy prompt (R6) "Feed dormant — last updated {date}. [Refresh now]" — shown in-block, not as toast. Source: DOC20 §6.2A.3. ## C.15 Module toolbar button (R6) Grid icon + "+Module" label in editor toolbar. Opens ModulePresetPicker dropdown. Source: DOC20 §6.2A.6. ## C.16 Today rollover toast (R6) "Today note has rolled over. [Open new Today note]" — shown when TodayNoteRolloverCommand completes while old note is open. Non-blocking. Source: DOC20 §6.2B.5A R2. ## C.17 Anchor status badges (R6) 5 anchor states with visual treatments: - **Active:** Normal highlight at anchor position - **Shifted:** Yellow highlight at remapped position with ⚠ warning icon — anchor moved during edit but match score 0.7-0.99 - **Approximate:** Dashed highlight — best-effort match after edit, score < 0.7 - **Orphaned:** Amber badge, strikethrough quote text — anchored content deleted entirely - **Unanchored:** No highlight, comment in general section Source: DOC20 §6.6.8A (R2). ## C.18 InlineThread async states (R6) "Agent thinking..." loading indicator. Cannot submit another @mention until current completes or is cancelled via `NoteAICancelCommand`. Error display with [Retry] and [Dismiss]. Source: DOC20 §6.2A.4 R2. --- # ════════════════════════════════════════════════════ # SECTION D — DOC TRACKER (all sources, R6 update) # ════════════════════════════════════════════════════ | Owner Doc | UI Obligation | Status | |---|---|---| | DOC10 | Route trace, operation correlation, room capability reporting, anti-ghost | integrated | | DOC11 | Runtime truth, selector truth, auth/search/local-provider settings, execution watermark, snapshot refresh, backup recommendations, ACP provenance, remote gateway token truth. R6: gateway `source_context` (DOC20 R2 §12). **R7: DOC11 R14 — Fast Mode, plugin ownership, credential source, auth removal modal, channel pairing challenges, Discord/WhatsApp control split, ACP lifecycle/resume/roots/bindings, context-engine diagnostics, mismatch log filters, Appendix U control matrix, 45+ routes, 30+ events, 8 badge types, 4 modals** | **integrated — updated to R14** | | DOC12 | Room command/read-model/event families, close lifecycle, approval checkpoints, child import-back | integrated | | DOC14 | Findings/judgments/adjudication/lineage/review-target/child-room closure | integrated | | DOC15 | Prompt recommendation retrieval, active-target pinning, close-outcome/prompt observation, ACP context, note_reference + artifact_reference + inline_thread_interaction signals | integrated / needed | | DOC16 | Approval checkpoints, child-room scope, linked-room indicators | minimal | | DOC17 | Overlay/recipe/advisor artifact truth, proposal-only gating, multiple overlay per project | integrated / needed | | DOC13 | Reserve and cost-preview surfaces | partial | | DOC20 | Browser (7 scopes, 16 types, Notes scope, empty states, Recently Deleted, degraded badge), Notes (block editor, Today note, +Module, ModulePreset, feed dormancy, @mention, /slash), Document Viewer (RendererCapabilities, iframe sandbox, DocumentSelectionAI, version root_id/version_id, overflow rule), Projects (background_instructions, current_spend, Duplicate), Settings (Workspace), comments (anchor status, reanchor, overlap resolve), tracked changes (flush-first, preview accept/reject), AI wiring, Copy Reference, folder overlay, archive/delete, Send to Agent, content map | **integrated — updated to R2** | | DOC3 | NoteRead/WriteSkill (R6: block-aware ops — BlockInsert, BlockDelete, BlockReorder, BlockUpdate, InlineThreadCreate, InlineThreadReply), BrowserQuerySkill, ArtifactRead/Write/CommentSkill, DocumentViewerSkill, AttachmentSkill | needed | --- # ════════════════════════════════════════════════════ # SECTION E — ENDPOINTS / READ-MODELS (R6 update) # ════════════════════════════════════════════════════ DOC11 endpoints (R4.2, updated R7 for R14): R4.2 baseline: search runtime state exposes provider mode/compatibility-path truth, context manifest/diagnostics may expose ACP ingress provenance, runtime snapshot reads preserve secret/source truth, remote gateway read-models distinguish preserved non-plaintext tokens. R7 additions (DOC11 R14): - Auth: `DELETE .../auth-profiles/:profile_id` (remove profile), `POST .../auth/set-default`, `POST .../auth/fix-scope`, `GET .../auth/callback` (OAuth relay) - Search: `GET .../web-search/catalog`, `GET .../web-search/configs`, `GET .../web-search/state`, `POST .../web-search/test` - Local providers: `PUT/DELETE .../models/:model_ref/metadata` (override CRUD), `POST .../probe` - Channels: `POST .../discord/clear-token`, `POST .../discord/disconnect`, `PUT/DELETE .../rules/:rule_scope_ref`, `POST .../whatsapp/login/start|cancel`, `POST .../whatsapp/qr/refresh`, `POST .../whatsapp/relink`, `POST .../whatsapp/logout`, `POST .../probe`, `GET .../pairing-challenge`, `POST .../pairing-challenge/refresh|cancel|ack-expiry` - ACP: `POST .../profiles/save`, `PUT .../profiles/:id/project-roots`, `DELETE .../project-roots/:root_id`, `POST .../project-roots/validate`, `GET .../sessions/:id`, `GET .../sessions/:id/history`, `POST .../sessions/:id/resume` - Context: `GET .../context/diagnostics`, `GET .../context/protected-files`, `PUT .../context/budget-settings` - Runtime: `GET .../runtime/truth`, `GET .../runtime/truth/debug`, `GET .../runtime/indicators`, `GET .../runtime/truth-resolver`, `GET .../runtime/connection-log`, `GET .../runtime/mismatch-fallback-log`, `POST .../runtime/reconnect` - Session: `POST .../sessions/create|verify|reconnect|close|archive` - Events (30+): `gateway.control.fast_mode.changed`, `gateway.catalog.entry.discovered|removed|plugin_state_changed`, `gateway.auth.challenge_failed|profile_removed|default_changed|challenge_required|challenge_completed`, `gateway.search.fallback.recorded`, `gateway.search.runtime_snapshot.refreshed`, `gateway.acp.session.resuming|resumed|resume_failed`, `gateway.acp.binding.changed|broken`, `gateway.channel.config_changed|health.changed|rules_changed|pairing_challenge.*`, `gateway.context_engine.health.changed`, `gateway.health.changed` (aggregate) DOC20 endpoints (R2): - BrowserQueryRequest/Response (§3.9.8) - BrowserCatalogEnvelope (§3.9.9 R2) — materialized_at, source_count, item_count, degraded_sources - BrowserCatalogRebuildCommand (R2) - DocumentReviewRequest/Response (§6.16.8) - DocumentSelectionAICommand (R2) — bubble menu Rewrite/Expand/Shorten - NoteAIRequest (§6.15) - NoteAIPreviewAcceptCommand / NoteAIPreviewRejectCommand (R2) - NoteAICancelCommand (R2) — cancels in-flight AI request (InlineThread, preview, bubble menu) - NoteReviewCommand (R1.6) — Send to Agent drawer for Notes (distinct from NoteAIRequestCommand) - NoteDuplicateCommand (R1.6) — duplicate note via context menu - FeedRefreshCommand / FeedRefreshResult (R2) - ModulePresetCreateCommand / UpdateCommand / DeleteCommand / HideCommand (R2) - ModulePresetListReadCall / ModulePresetListResponse (R2) - TodayNoteResolveReadCall / TodayNoteResolveResponse (R2) - TodayNoteRolloverCommand (R2) - ArtifactVersionHistoryRequest / ArtifactVersionHistoryResponse (R2) - NoteCommentReanchorCommand (R2) - TrackedChangeOverlapResolveCommand (R2) - NoteTemplateSaveCommand (R2) - ProjectDuplicateCommand (R2) - PlaceRenameCommand (R2) - DOC20SettingsUpdateCommand (R2) - ArtifactDiffAcceptCommand / ArtifactDiffRejectCommand / ArtifactDiffAcceptAllCommand / ArtifactDiffRejectAllCommand (R1.6) — Document Viewer tracked change accept/reject - NoteUnarchiveCommand (R1.6) - NoteRestoreCommand / ProjectRestoreCommand / ArtifactRestoreCommand (R2 — Recently Deleted) - NotePermanentDeleteCommand / ProjectPermanentDeleteCommand / ArtifactPermanentDeleteCommand (R2) - NoteVersionHistoryRequest / NoteVersionHistoryResponse (§8.10.1) — note version list read contract - CommentsIndexEntry / global comments index (§8.10.2) — cross-entity comment query read model (`system/comments_index.json`) - All existing EC command envelopes (§8)