Elnor Repo Reader

DOC21 (UI) Q_DASHBOARD_MASTER_UI_SPECIFICATION_R7.md

Current Specs/DOC21/DOC21 (UI) Q_DASHBOARD_MASTER_UI_SPECIFICATION_R7.md

Short text page 07d61d0c9702. Generated 2026-06-09T01:23:58.539Z from commit dbaa25962edc11ab30e8d4ca1715f9ae5bf77331. Worktree: clean.

Open readable HTML page · Open raw txt · Open path URL

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)