# Test Coverage Matrix

Canonical mapping of every product feature to its test source(s). Drives gap-fill PRs (#967, #968, #969, #970, #971) under epic #773.

**Status legend**

| Symbol | Meaning                                                                 |
| ------ | ----------------------------------------------------------------------- |
| ✅     | Covered — at least one test asserts the behaviour                       |
| 🟡     | Partial — touched by a broader spec, no dedicated assertion             |
| ❌     | Missing — no test today                                                 |
| 🚫     | Not driver-automatable — manual smoke (release-cut checklist, see #971) |

**Layer abbreviations**

| Code | Layer                                                                                |
| ---- | ------------------------------------------------------------------------------------ |
| `RU` | Rust unit (`#[cfg(test)]` inside `src/`)                                             |
| `RI` | Rust integration (`tests/*.rs`)                                                      |
| `VU` | Vitest unit (`app/src/**/*.test.ts(x)`)                                              |
| `WD` | WDIO E2E (`app/test/e2e/specs/*.spec.ts`) — Linux `tauri-driver` + macOS Appium Mac2 |
| `MS` | Manual smoke (release-cut checklist)                                                 |

**Update contract** — when a PR adds, removes, or changes a feature leaf, the matrix row must be updated in the same PR. Tracking guard: see #965.

---

## 0. Application Lifecycle

### 0.1 Application Download

| ID    | Feature                      | Layer | Test path(s)                    | Status | Notes                                 |
| ----- | ---------------------------- | ----- | ------------------------------- | ------ | ------------------------------------- |
| 0.1.1 | Direct Download Access       | MS    | release-manual-smoke (see #971) | 🚫     | DMG hosting + version landing page    |
| 0.1.2 | Version Compatibility Check  | MS    | release-manual-smoke            | 🚫     | Driver cannot assert OS-version gates |
| 0.1.3 | Corrupted Installer Handling | MS    | release-manual-smoke            | 🚫     | Mutated DMG validation; manual repro  |

### 0.2 Installation & Launch

| ID    | Feature                                    | Layer    | Test path(s)                                                                                                                                                                                                                                     | Status | Notes                                                                                                                                                                |
| ----- | ------------------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0.2.1 | DMG Installation Flow                      | MS       | release-manual-smoke                                                                                                                                                                                                                             | 🚫     | OS-level Finder drag                                                                                                                                                 |
| 0.2.2 | Gatekeeper Validation                      | MS       | release-manual-smoke                                                                                                                                                                                                                             | 🚫     | OS-level signature check                                                                                                                                             |
| 0.2.3 | Code Signing Verification                  | MS       | release-manual-smoke                                                                                                                                                                                                                             | 🚫     | `codesign --verify` capture in checklist                                                                                                                             |
| 0.2.4 | First Launch Permissions Prompt            | MS       | release-manual-smoke                                                                                                                                                                                                                             | 🚫     | TCC prompts non-driver-automatable                                                                                                                                   |
| 0.2.5 | First-Run Harness Init (Python/spaCy/Node) | RU+RI+VU | `src/openhuman/harness_init/*` (`#[cfg(test)]`), `src/openhuman/runtime_python/downloader_tests.rs`, `tests/json_rpc_e2e.rs`, `app/src/services/harnessInitService.test.ts`, `app/src/components/InitProgressScreen/InitProgressScreen.test.tsx` | ✅     | Eager startup provisioning + `harness_init_status`/`_run` RPC + blocking init overlay; managed CPython pinned to 3.13.x. Live download/model fetch is `MS` (network) |

### 0.3 Updates & Reinstallation

| ID    | Feature                       | Layer    | Test path(s)                                                                | Status | Notes                                                                           |
| ----- | ----------------------------- | -------- | --------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------- |
| 0.3.1 | Auto Update Check             | RU+RI+MS | `src/openhuman/update/` (Rust unit), `tests/json_rpc_e2e.rs`, release smoke | 🟡     | Core check/update policy covered; desktop prompt + release upgrade still manual |
| 0.3.2 | Forced Update Handling        | MS       | release-manual-smoke                                                        | 🚫     | End-to-end gating verified at release                                           |
| 0.3.3 | Reinstall with Existing State | MS       | release-manual-smoke                                                        | 🚫     | Workspace persistence on reinstall                                              |
| 0.3.4 | Clean Uninstall               | MS       | release-manual-smoke                                                        | 🚫     | OS removal paths                                                                |

---

## 1. Authentication & Identity

### 1.1 Multi-Provider Authentication

| ID    | Feature           | Layer | Test path(s)                            | Status | Notes                                           |
| ----- | ----------------- | ----- | --------------------------------------- | ------ | ----------------------------------------------- |
| 1.1.1 | Google Login      | WD    | `app/test/e2e/specs/login-flow.spec.ts` | ✅     | Deep-link branch covered                        |
| 1.1.2 | GitHub Login      | WD    | `login-flow.spec.ts`                    | ✅     | Deep-link branch covered                        |
| 1.1.3 | Twitter (X) Login | WD    | `login-flow.spec.ts`                    | 🟡     | Generic OAuth path; assert provider tag in #968 |
| 1.1.4 | Discord Login     | WD    | `login-flow.spec.ts`                    | 🟡     | Same — discord branch unasserted                |

### 1.2 Account Management

| ID    | Feature                    | Layer | Test path(s)                                  | Status | Notes                                        |
| ----- | -------------------------- | ----- | --------------------------------------------- | ------ | -------------------------------------------- |
| 1.2.1 | Account Creation & Mapping | WD+RI | `login-flow.spec.ts`, `tests/json_rpc_e2e.rs` | ✅     |                                              |
| 1.2.2 | Multi-Provider Linking     | WD    | _missing_ — tracked #968                      | ❌     | Need spec linking 4 providers to one account |
| 1.2.3 | Duplicate Account Handling | WD    | _missing_ — tracked #968                      | ❌     | Collision UX path                            |

### 1.3 Session Management

| ID    | Feature                | Layer | Test path(s)                            | Status | Notes                     |
| ----- | ---------------------- | ----- | --------------------------------------- | ------ | ------------------------- |
| 1.3.1 | Token Issuance         | WD+RI | `login-flow.spec.ts`, `json_rpc_e2e.rs` | ✅     |                           |
| 1.3.2 | Session Persistence    | WD    | `logout-relogin-onboarding.spec.ts`     | ✅     |                           |
| 1.3.3 | Refresh Token Rotation | VU    | _missing_ — tracked #968                | ❌     | Slice-level refresh logic |

### 1.4 Logout & Revocation

| ID    | Feature            | Layer | Test path(s)                        | Status | Notes                              |
| ----- | ------------------ | ----- | ----------------------------------- | ------ | ---------------------------------- |
| 1.4.1 | Session Logout     | WD    | `logout-relogin-onboarding.spec.ts` | ✅     |                                    |
| 1.4.2 | Global Logout      | WD    | _missing_ — tracked #968            | ❌     | Multi-session invalidation         |
| 1.4.3 | Token Invalidation | WD    | _missing_ — tracked #968            | ❌     | Server-side revocation propagation |

---

## 2. Permissions & System Access

### 2.1 macOS Permissions

| ID    | Feature                     | Layer | Test path(s)         | Status | Notes               |
| ----- | --------------------------- | ----- | -------------------- | ------ | ------------------- |
| 2.1.1 | Accessibility Permission    | MS    | release-manual-smoke | 🚫     | TCC OS-level prompt |
| 2.1.2 | Input Monitoring Permission | MS    | release-manual-smoke | 🚫     | TCC OS-level prompt |
| 2.1.3 | Microphone Permission       | MS    | release-manual-smoke | 🚫     | TCC OS-level prompt |

### 2.2 Permission Lifecycle

| ID    | Feature                           | Layer | Test path(s)                   | Status | Notes                          |
| ----- | --------------------------------- | ----- | ------------------------------ | ------ | ------------------------------ |
| 2.2.1 | Permission Grant Flow             | RU    | `src/openhuman/accessibility/` | 🟡     | Core branch covered; UX manual |
| 2.2.2 | Permission Denial Handling        | RU    | `src/openhuman/accessibility/` | 🟡     | Same                           |
| 2.2.3 | Permission Re-Sync / Refresh      | WD    | _missing_ — tracked #968       | ❌     | App-restart re-sync            |
| 2.2.4 | Partial Permission State Handling | WD    | _missing_ — tracked #968       | ❌     | macOS-only spec                |

---

## 3. Local AI Runtime (Ollama + LM Studio)

### 3.1 Model Management

| ID    | Feature                               | Layer | Test path(s)                                                                                                                                                                                                                                  | Status | Notes                                                                                                                |
| ----- | ------------------------------------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------- |
| 3.1.1 | Model Detection                       | RU+WD | `src/openhuman/local_ai/`, `local-model-runtime.spec.ts`                                                                                                                                                                                      | ✅     |                                                                                                                      |
| 3.1.2 | Model Download & Installation         | WD    | `local-model-runtime.spec.ts`                                                                                                                                                                                                                 | ✅     |                                                                                                                      |
| 3.1.3 | Model Version Handling                | RU    | `src/openhuman/local_ai/model_ids.rs`                                                                                                                                                                                                         | ✅     |                                                                                                                      |
| 3.1.4 | LM Studio Model Discovery             | RU+RI | `src/openhuman/local_ai/service/ollama_admin_tests.rs`, `tests/json_rpc_e2e.rs`                                                                                                                                                               | ✅     | Uses LM Studio's OpenAI-compatible `/v1/models` surface                                                              |
| 3.1.5 | Model Context-Window Requirement Gate | RU+VU | `src/openhuman/inference/local/model_requirements.rs`, `src/openhuman/inference/local/ollama.rs`, `src/openhuman/inference/local/service/ollama_admin_tests.rs`, `app/src/components/settings/panels/local-model/ModelStatusSection.test.tsx` | ✅     | Rejects Ollama models whose native context window is below the memory-layer minimum (`local_ai.model_context_check`) |

### 3.2 Runtime Execution

| ID    | Feature                            | Layer | Test path(s)                                                                    | Status | Notes                                                    |
| ----- | ---------------------------------- | ----- | ------------------------------------------------------------------------------- | ------ | -------------------------------------------------------- |
| 3.2.1 | Local Inference Execution          | WD    | `local-model-runtime.spec.ts`                                                   | ✅     |                                                          |
| 3.2.2 | Resource Handling (CPU/GPU/Memory) | RU    | `src/openhuman/local_ai/device.rs`                                              | 🟡     | Detection unit; runtime constraint manual                |
| 3.2.3 | Runtime Failure Handling           | RU+WD | `local-model-runtime.spec.ts`                                                   | ✅     |                                                          |
| 3.2.4 | LM Studio Chat Completions         | RU+RI | `src/openhuman/local_ai/service/public_infer_tests.rs`, `tests/json_rpc_e2e.rs` | ✅     | Covers prompt/chat success and non-success status errors |

### 3.3 Runtime Configuration

#### 3.3.1 RAM Allocation Control

| ID      | Feature                    | Layer | Test path(s)                                 | Status | Notes                               |
| ------- | -------------------------- | ----- | -------------------------------------------- | ------ | ----------------------------------- |
| 3.3.1.1 | RAM Limit Selection        | VU    | `app/src/components/settings/` (panel-level) | 🟡     | UI present; assertion shallow       |
| 3.3.1.2 | RAM Availability Detection | RU    | `src/openhuman/local_ai/device.rs`           | ✅     |                                     |
| 3.3.1.3 | Over-Allocation Prevention | RU    | `src/openhuman/local_ai/ops.rs`              | 🟡     | Guard exists; explicit test pending |
| 3.3.1.4 | Under-Allocation Handling  | RU    | `src/openhuman/local_ai/ops.rs`              | 🟡     | Same                                |

#### 3.3.2 Dynamic Resource Adjustment

| ID      | Feature                         | Layer | Test path(s) | Status | Notes              |
| ------- | ------------------------------- | ----- | ------------ | ------ | ------------------ |
| 3.3.2.1 | Runtime Scaling Based on Load   | RU    | _missing_    | ❌     | Track in follow-up |
| 3.3.2.2 | Model Switching Based on Memory | RU    | _missing_    | ❌     | Track in follow-up |

#### 3.3.3 Configuration Persistence

| ID      | Feature                        | Layer    | Test path(s)                                                                                               | Status | Notes                                                  |
| ------- | ------------------------------ | -------- | ---------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------ |
| 3.3.3.1 | Save RAM Settings              | VU       | _missing_                                                                                                  | ❌     | Settings slice                                         |
| 3.3.3.2 | Apply on Restart               | WD       | `local-model-runtime.spec.ts`                                                                              | 🟡     | Restart not exercised                                  |
| 3.3.3.3 | Reset to Default               | VU       | _missing_                                                                                                  | ❌     |                                                        |
| 3.3.3.4 | Provider Selection Persistence | RU+RI+VU | `src/openhuman/config/ops_tests.rs`, `tests/json_rpc_e2e.rs`, `app/src/utils/tauriCommands/config.test.ts` | ✅     | Covers `lm_studio` normalization and config round-trip |

---

## 4. Chat Interface (Core Interaction)

### 4.1 Chat Sessions

| ID    | Feature                | Layer | Test path(s)                                                     | Status | Notes                                 |
| ----- | ---------------------- | ----- | ---------------------------------------------------------------- | ------ | ------------------------------------- |
| 4.1.1 | Session Creation       | WD    | `conversations-web-channel-flow.spec.ts`                         | ✅     |                                       |
| 4.1.2 | Session Persistence    | WD    | `conversations-web-channel-flow.spec.ts`                         | ✅     |                                       |
| 4.1.3 | Multi-Session Handling | WD    | `agent-review.spec.ts`, `conversations-web-channel-flow.spec.ts` | 🟡     | No dedicated multi-thread switch test |

### 4.2 Messaging

| ID    | Feature                                                            | Layer    | Test path(s)                                                                                                                                                                                                                                                         | Status | Notes                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ----- | ------------------------------------------------------------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 4.2.1 | User Message Handling                                              | WD+RI    | `conversations-web-channel-flow.spec.ts`, `tests/json_rpc_e2e.rs`                                                                                                                                                                                                    | ✅     |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| 4.2.2 | AI Response Generation                                             | WD       | `agent-review.spec.ts`                                                                                                                                                                                                                                               | ✅     | Mock LLM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| 4.2.3 | Streaming Responses                                                | RI       | `tests/json_rpc_e2e.rs`, `tests/agent_harness_e2e.rs`                                                                                                                                                                                                                | ✅     | `tests/agent_harness_e2e.rs` adds provider-level SSE tool-arg accumulation (chunked args reassembled + parsed) and engine-level delta forwarding (#3471)                                                                                                                                                                                                                                                                                                                                                                                    |
| 4.2.4 | Parallel inference (cross-thread + within-thread forked turns)     | RU+VU    | `src/openhuman/web_chat/web_tests.rs`, `app/src/store/__tests__/chatRuntimeSlice.test.ts`, `app/src/providers/__tests__/ChatRuntimeProvider.test.tsx`                                                                                                      | 🟡     | Concurrent same-/cross-thread dispatch, cooperative `CancellationToken` teardown, and parallel-lane stream routing covered; dedicated WD E2E is a follow-up                                                                                                                                                                                                                                                                                                                                                                                 |
| 4.2.5 | Per-thread todo list (plan strip above composer)                   | RU+VU+WD | `src/openhuman/agent/tools/todo.rs`, `app/src/pages/conversations/components/ThreadTodoStrip.test.tsx`, `app/test/e2e/specs/chat-thread-todo-strip.spec.ts`                                                                                                          | ✅     | Read-only thread-scoped todo strip fed by `task_board_updated`; agent `todo` tool guidance + thread binding; E2E drives a `todo` tool call and asserts the card renders                                                                                                                                                                                                                                                                                                                                                                     |
| 4.2.6 | Background-activity panel (chat-header Background tasks button)    | VU+WD    | `app/src/pages/conversations/hooks/useBackgroundActivity.test.ts`, `app/src/pages/conversations/components/__tests__/BackgroundActivityRows.test.tsx`, `app/test/e2e/specs/chat-background-activity-panel.spec.ts`                                                   | ✅     | View-only panel surfacing this chat's async sub-agents + global cron jobs, subconscious/heartbeat status, and memory syncing; freshness-only "Syncing now" labeling; E2E opens the panel and asserts its sections render and close                                                                                                                                                                                                                                                                                                          |
| 4.2.7 | Plan-mode review (Approve / Reject / Send-feedback before execute) | RU+RI+VU | `src/openhuman/plan_review/gate.rs`, `src/openhuman/plan_review/tool.rs`, `src/openhuman/plan_review/schemas.rs`, `tests/json_rpc_e2e.rs`, `app/src/pages/conversations/components/PlanReviewCard.test.tsx`, `app/src/pages/__tests__/Conversations.render.test.tsx` | ✅     | Interactive turns call `request_plan_review`, which parks the LIVE turn on the in-memory `PlanReviewGate` (oneshot) until the user decides; `plan_review_request` socket event drives `PlanReviewCard`, which resolves via `openhuman.plan_review_decide` (approve resumes-and-executes / reject resumes-and-stops / revise resumes-with-feedback). RU covers gate park/resolve/timeout + tool auto-approve + parking; RI covers the decide RPC; VU covers the card + provider wiring. WD E2E (agent-driven park flow) tracked as follow-up |

| 4.2.8 | Composer attachments (image / video / document; drag-drop + paste) | VU | `app/src/lib/attachments.test.ts`, `app/src/components/chat/__tests__/ChatComposer.test.tsx`, `app/src/pages/__tests__/Conversations.attachments.test.tsx` | 🟡 | Attach affordance gated on the resolved vision tier (images/video need vision; documents flow on any model); video is sampled into still frames client-side and forwarded through the existing `[IMAGE:]` vision path; drag-drop + clipboard-paste reuse the picker ingest. VU covers MIME/kind/limits/marker building + drag-drop + paste; real video decode and the frames→vision round-trip are manual-smoke only (jsdom has no video codec). WD E2E is a follow-up |

| 4.2.9 | Share cards ("Look what my agent did" post to X / LinkedIn) | VU | `app/src/features/share/shareContent.test.ts`, `app/src/features/share/shareTargets.test.ts`, `app/src/features/share/shareCaption.test.ts`, `app/src/features/share/shareCard.test.ts`, `app/src/features/share/ShareMessageButton.test.tsx`, `app/src/features/share/ShareCardModal.test.tsx` | ✅ | Hover Share button under completed agent messages opens a Canvas 2D branded card; LLM-drafted headline/caption via `inference_agent_chat_simple` with deterministic offline fallback; X/LinkedIn intent URLs + copy/save PNG; secrets/paths/emails redacted before render. MVP wires only the completed-task trigger; workflow-run + Human-tab triggers are follow-ups. WD E2E deferred |

### 4.3 Tool Invocation

| ID    | Feature                       | Layer | Test path(s)                                                                                          | Status | Notes                                                                                                                                                        |
| ----- | ----------------------------- | ----- | ----------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 4.3.1 | Tool Trigger via Chat         | WD    | `skill-execution-flow.spec.ts`, `skill-multi-round.spec.ts`                                           | ✅     |                                                                                                                                                              |
| 4.3.2 | Permission-Based Execution    | RU+WD | `src/openhuman/tools/`, `skill-execution-flow.spec.ts`                                                | ✅     |                                                                                                                                                              |
| 4.3.3 | Tool Failure Handling         | WD    | `skill-execution-flow.spec.ts`                                                                        | ✅     |                                                                                                                                                              |
| 4.3.4 | Subagent Mascot Visualization | VU    | `app/src/features/human/SubMascotLayer.test.tsx`, `app/src/features/human/HumanPage.test.tsx`         | ✅     | Renders spawned/completed/failed subagent timeline rows as colored companion mascots with activity bubbles                                                   |
| 4.3.5 | Image Tool Contracts          | RU    | `src/openhuman/image/`                                                                                | ✅     | High-level `image_generation` / `view_image` schema, gating, serialization, prompt guidance, and contract e2e coverage for #2984                             |
| 4.3.6 | Background Monitor Tools      | RU+RI | `src/openhuman/monitor/`, `src/openhuman/tools/ops_tests.rs`, `tests/json_rpc_e2e.rs`                 | ✅     | First-class monitor domain covers command denial, line streaming, timeout, stop, bounded output, registry exposure, and JSON-RPC list/read surface for #3371 |
| 4.3.7 | Mascot Avatar Animation       | VU    | `app/src/features/human/Mascot/RiveMascot.test.tsx`, `app/src/features/human/Mascot/riveMaps.test.ts` | ✅     | Rive `MascotSM` state machine: face→pose mapping, Oculus→`visme_codes` viseme normalization, and idle random pose rotation for the `tiny_mascot.riv` upgrade |

### 4.4 Agent Harness Behaviors

End-to-end coverage of the agent harness via the web-chat RPC surface against an in-test scripted upstream (`tests/agent_harness_e2e.rs`) plus browser-level Redux/DOM assertions (`app/test/e2e/specs/agent-harness-behaviors.spec.ts`). Added for #3471.

| ID     | Feature                                 | Layer | Test path(s)                                                                                                                 | Status | Notes                                                                                                           |
| ------ | --------------------------------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------- |
| 4.4.1  | Subagent Delegation                     | RI+WD | `tests/agent_harness_e2e.rs`, `app/test/e2e/specs/agent-harness-behaviors.spec.ts`                                           | ✅     | Orchestrator→researcher delegation asserts ≥3 upstream calls, distinct researcher persona, no "Unknown tool:"   |
| 4.4.2  | Subagent Clarification (input-required) | RI+WD | `tests/agent_harness_e2e.rs`, `app/test/e2e/specs/agent-harness-behaviors.spec.ts`, `chat-harness-subagent-continue.spec.ts` | ✅     | Subagent question surfaced + reply completes turn; full `continue_subagent` resume covered by the continue spec |
| 4.4.3  | Approval Gate — Approve                 | RI+WD | `tests/agent_harness_e2e.rs`, `app/test/e2e/specs/agent-harness-behaviors.spec.ts`                                           | ✅     | `approval_request` event → approve → tool executes (timeline `success`, file written)                           |
| 4.4.4  | Approval Gate — Deny                    | RI+WD | `tests/agent_harness_e2e.rs`, `app/test/e2e/specs/agent-harness-behaviors.spec.ts`                                           | ✅     | Deny → tool not executed (timeline `error`, file unchanged), agent explains gracefully                          |
| 4.4.5  | Approval Gate — TTL Timeout             | RI    | `tests/agent_harness_e2e.rs`                                                                                                 | ✅     | `OPENHUMAN_APPROVAL_TTL_SECS` (debug-only) → no decision → auto-deny                                            |
| 4.4.6  | Subagent + Approval Gate                | RI    | `tests/agent_harness_e2e.rs`                                                                                                 | ✅     | Approval fires inside subagent context; decision propagates; artifact content asserted                          |
| 4.4.7  | Multi-turn State Persistence            | RI    | `tests/agent_harness_e2e.rs`                                                                                                 | ✅     | Turn-2 upstream request carries turn-1 user + assistant messages                                                |
| 4.4.8  | Parallel Subagent Fan-out               | RI    | `tests/agent_harness_e2e.rs`                                                                                                 | ✅     | `spawn_parallel_agents` 2-task fan-out; both child results reach synthesis call                                 |
| 4.4.9  | Max Iterations / Empty Response         | RI    | `tests/agent_harness_e2e.rs`                                                                                                 | ✅     | Tool-call limit surface + empty-completion graceful terminal (both skip Sentry)                                 |
| 4.4.10 | Provider Error Retry                    | RI    | `tests/agent_harness_e2e.rs`                                                                                                 | ✅     | First upstream 500 retried by ReliableProvider; second succeeds                                                 |
| 4.4.11 | Inference Phase Transitions             | WD    | `app/test/e2e/specs/agent-harness-behaviors.spec.ts`                                                                         | ✅     | Redux `inferenceStatusByThread` observes `subagent` phase then clears to idle                                   |
| 4.4.12 | Tool Timeline Completeness              | WD    | `app/test/e2e/specs/agent-harness-behaviors.spec.ts`                                                                         | ✅     | Timeline entries carry id/name/status/round; subagent row reaches `success`; rounds non-decreasing              |

---

## 5. Built-in Intelligence Skills

### 5.1 Voice Intelligence

| ID    | Feature                   | Layer | Test path(s)                                                                                                                                                       | Status | Notes                                                                                                             |
| ----- | ------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | ----------------------------------------------------------------------------------------------------------------- |
| 5.1.1 | Voice Input Capture       | WD    | `voice-mode.spec.ts`                                                                                                                                               | ✅     |                                                                                                                   |
| 5.1.2 | Speech-to-Text Processing | WD    | `voice-mode.spec.ts`                                                                                                                                               | ✅     |                                                                                                                   |
| 5.1.3 | Voice Command Execution   | WD    | `voice-mode.spec.ts`                                                                                                                                               | ✅     |                                                                                                                   |
| 5.1.4 | Mascot Voice Selection    | VU    | `app/src/store/__tests__/mascotSlice.test.ts`, `app/src/components/settings/panels/__tests__/VoicePanel.test.tsx`, `app/src/features/human/useHumanMascot.test.ts` | ✅     | Slice validation + persist REHYDRATE, Settings picker UI (#1762), `synthesizeSpeech` voiceId override propagation |

### 5.2 Persona

| ID    | Feature                    | Layer | Test path(s)                                                                                     | Status | Notes                                                                                        |
| ----- | -------------------------- | ----- | ------------------------------------------------------------------------------------------------ | ------ | -------------------------------------------------------------------------------------------- |
| 5.2.1 | Persona Name & Description | VU    | `app/src/store/personaSlice.test.ts`, `app/src/components/settings/panels/PersonaPanel.test.tsx` | ✅     | Slice validation + persist REHYDRATE scrub; Settings identity fields persist on save (#2345) |
| 5.2.2 | SOUL.md Edit & Reset       | RU+VU | `src/openhuman/workspace/rpc.rs`, `app/src/components/settings/panels/PersonaPanel.test.tsx`     | ✅     | Core read/write/reset with allowlist + size cap; panel loads, saves, resets over RPC (#2345) |
| 5.2.3 | Persona Settings Surface   | VU    | `app/src/components/settings/panels/PersonaPanel.test.tsx`                                       | ✅     | Bundles identity + SOUL.md + link to Mascot avatar/voice (#2345)                             |

---

## 6. System Tools & Agent Capabilities

### 6.1 File System

| ID    | Feature                      | Layer | Test path(s)                                                                                           | Status | Notes                                                                |
| ----- | ---------------------------- | ----- | ------------------------------------------------------------------------------------------------------ | ------ | -------------------------------------------------------------------- |
| 6.1.1 | File Read Access             | RU+WD | `src/openhuman/tools/impl/filesystem/file_read.rs`, `app/test/e2e/specs/tool-filesystem-flow.spec.ts`  | ✅     | Was 🟡 — WDIO drives memory_read_file + asserts via Node fs          |
| 6.1.2 | File Write Access            | RU+WD | `src/openhuman/tools/impl/filesystem/file_write.rs`, `app/test/e2e/specs/tool-filesystem-flow.spec.ts` | ✅     | Was 🟡 — WDIO drives memory_write_file + asserts bytes match on disk |
| 6.1.3 | Path Restriction Enforcement | RU+WD | `src/openhuman/tools/impl/filesystem/file_read.rs`, `app/test/e2e/specs/tool-filesystem-flow.spec.ts`  | ✅     | Was 🟡 — WDIO asserts traversal + absolute-path denial envelope      |

### 6.2 Shell & Git

| ID    | Feature                      | Layer | Test path(s)                                                                                                    | Status | Notes                                                                                            |
| ----- | ---------------------------- | ----- | --------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------ |
| 6.2.1 | Shell Command Execution      | RU+WD | `src/openhuman/tools/impl/system/shell.rs`, `app/test/e2e/specs/tool-shell-git-flow.spec.ts`                    | ✅     | Was 🟡 — WDIO asserts agent runtime + `tools_agent` registry contract; full LLM path tracked #68 |
| 6.2.2 | Command Restriction Handling | RU+WD | `src/openhuman/security/policy_tests.rs`, `app/test/e2e/specs/tool-shell-git-flow.spec.ts`                      | ✅     | Was 🟡 — WDIO locks denial envelope shape `{ ok:false, error }` consumed by the React UI         |
| 6.2.3 | Git Read Operations          | RU+WD | `src/openhuman/tools/impl/filesystem/git_operations_tests.rs`, `app/test/e2e/specs/tool-shell-git-flow.spec.ts` | ✅     | Was 🟡 — WDIO seeds a fixture repo in OPENHUMAN_WORKSPACE and asserts read ops succeed           |
| 6.2.4 | Git Write Operations         | RU+WD | `src/openhuman/tools/impl/filesystem/git_operations_tests.rs`, `app/test/e2e/specs/tool-shell-git-flow.spec.ts` | ✅     | Was 🟡 — WDIO commits into the same fixture and asserts log advances                             |

### 6.3 Sub-agent Orchestration

| ID     | Feature                                                                | Layer | Test path(s)                                                                                                                                                                                                                                                                                                                              | Status | Notes                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ------ | ---------------------------------------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 6.3.1  | Steer a running sub-agent                                              | RU    | `src/openhuman/agent_orchestration/running_subagents.rs`, `src/openhuman/agent_orchestration/tools/steer_subagent.rs`                                                                                                                                                                                                                     | ✅     | `steer_subagent` injects a steer/collect message into a running async sub-agent's run-queue; registry enforces parent ownership + terminal guard.                                                                                                                                                                                                                                                                                                     |
| 6.3.2  | Wait for a sub-agent result                                            | RU    | `src/openhuman/agent_orchestration/running_subagents.rs`, `src/openhuman/agent_orchestration/tools/wait_subagent.rs`                                                                                                                                                                                                                      | ✅     | `wait_subagent` blocks on the completion `watch` with a timeout; prunes terminal entries, leaves entries intact on timeout.                                                                                                                                                                                                                                                                                                                           |
| 6.3.3  | Steer lands in child history                                           | RU    | `src/openhuman/agent/harness/subagent_runner/ops_tests.rs::run_queue_steer_lands_in_subagent_history`                                                                                                                                                                                                                                     | ✅     | End-to-end: a queued steer is drained by the child `run_turn_engine` and appears as a `[User steering message]` user turn in the provider request.                                                                                                                                                                                                                                                                                                    |
| 6.3.4  | Subconscious trigger pipeline (normalize → dedupe/rate → gate → queue) | RU+RI | `src/openhuman/subconscious_triggers/`, `tests/subconscious_triggers_e2e.rs`                                                                                                                                                                                                                                                              | ✅     | Event→Trigger normalization for cron/user/composio/sub-agent, dedupe TTL + per-source rate limit, LLM gate over `agent::triage`, priority queue with overflow eviction.                                                                                                                                                                                                                                                                               |
| 6.3.5  | Long-lived subconscious orchestrator session                           | RU    | `src/openhuman/subconscious/session.rs`, `src/openhuman/subconscious/user_thread.rs`                                                                                                                                                                                                                                                      | ✅     | Persistent compressed session backed by a reserved thread; `notify_user` handoff to the user-facing thread; mode→autonomy config parity.                                                                                                                                                                                                                                                                                                              |
| 6.3.6  | Multi-party human↔subconscious↔sub-agent conversation                  | RI    | `tests/subconscious_conversation_e2e.rs`                                                                                                                                                                                                                                                                                                  | ✅     | Scripted Gate/SessionExecutor seam drives delegate→sub-agent→merge, failure/retry, interleaving, dedupe, and rate-limit scenarios through the real orchestrator.                                                                                                                                                                                                                                                                                      |
| 6.3.7  | Full-stack trigger pipeline with mocked LLM                            | RI    | `tests/subconscious_fullstack_e2e.rs` (feature `e2e-test-support`)                                                                                                                                                                                                                                                                        | ✅     | Real `GatePass`+`LongLivedSession`+`Agent`+sub-agent run against a provider-layer mock (no network); promote/drop, persistence, real `spawn_subagent`.                                                                                                                                                                                                                                                                                                |
| 6.3.8  | Subconscious Triggers debug/manage panel (Brain)                       | WD    | `app/test/playwright/specs/subconscious-triggers.spec.ts`                                                                                                                                                                                                                                                                                 | ✅     | Brain→Subconscious panel: renders disabled baseline + hint + reserved thread ids; enable toggle → Pipeline Enabled + event_driven + orchestrator running; disable; refresh re-fetches.                                                                                                                                                                                                                                                                |
| 6.3.9  | Vision sub-agent reads attached images                                 | RU    | `src/openhuman/agent_registry/agents/loader.rs::vision_agent_loads_on_vision_hint`, `src/openhuman/inference/provider/factory_tests.rs::vision_tier_is_vision_capable`, `src/openhuman/agent/harness/engine/core.rs::gate_tests`, `src/openhuman/agent/multimodal_tests.rs::extract_image_placeholders_pulls_att_tokens_in_order`         | ✅     | Orchestrator (non-vision `chat-v1`) keeps the image as a placeholder, delegates to `vision_agent` on the `vision-v1` tier, which rehydrates the on-disk attachment and reads it. Engine gate prefers per-tier `current_model_vision`; turn placeholders forwarded into the sub-agent prompt.                                                                                                                                                          |
| 6.3.10 | Auto-accept contact requests from linked agents                        | RU    | `src/openhuman/agent_orchestration/pairing.rs::{auto_accept_gate_accepts_linked_but_leaves_others_pending,auto_accept_gate_unifies_base58_and_base64_of_same_key,auto_accept_gate_accepts_nothing_with_empty_linked_set,auto_accept_fails_closed_on_unreadable_pairing_store,incoming_pending_requesters_filters_and_resolves_requester}` | ✅     | On an inbound tiny.place `contact_request`, OpenHuman auto-accepts iff the requester is in `linked_agent_ids()` (its own paired agents) and otherwise leaves it pending for the human — the e2e gate that stops the relay dropping a linked agent's `session_info` intro. Fail-closed: a pairing-store read error yields an empty linked set → nothing auto-accepted. base58/base64 encodings of the same key unify via the shared DM-ingest matcher. |

| 6.3.11 | Async-by-default archetype delegation (durable ref)                    | RU    | `src/openhuman/agent_orchestration/tools/tools_e2e_tests.rs::archetype_delegation_defaults_to_async_with_durable_session_e2e`, `src/openhuman/agent_orchestration/tools/archetype_delegation.rs::parameters_schema_advertises_async_default_blocking_opt_in`                                                                              | ✅     | `delegate_*` / `build_workflow` with a parent turn + chat thread return `[async_subagent_ref]` (task_id + subagent_session_id) immediately, persist a durable reusable session, and queue the result for background delivery as a new turn; `blocking: true` opts back into inline dispatch, and no-thread contexts fall back automatically.                                                                                                          |
| 6.3.12 | Cross-turn sub-agent roster (durable store merge)                      | RU    | `src/openhuman/agent_orchestration/running_subagents.rs::snapshot_and_block_scope_to_parent_and_reflect_live_status`                                                                                                                                                                                                                      | ✅     | `[active_subagents]` merges the in-memory registry with the per-workspace `subagent_sessions` store, so a cold-booted parent still sees earlier workers (id, status, task title) and resumes instead of re-delegating; Closed sessions excluded, other parents' sessions never leak.                                                                                                                                                                  |
| 6.3.13 | continue_subagent durable resume (no pause checkpoint)                 | RU    | `src/openhuman/agent_orchestration/tools/tools_e2e_tests.rs::{continue_subagent_resumes_idle_durable_session_e2e,continue_subagent_without_checkpoint_or_durable_session_names_the_roster}`                                                                                                                                               | ✅     | With no `ask_user_clarification` checkpoint, `continue_subagent` resolves the durable session by subagent_session_id / task id, resumes it via the reusable async path seeded with persisted history, and keeps the same durable id; missing sessions error with a pointer at the roster.                                                                                                                                                             |
| 6.3.14 | Workflow proposal durability (async builder → chat card)               | RU+VU | `src/openhuman/agent_orchestration/tools/spawn_async_subagent.rs::{extract_workflow_proposal_finds_last_proposal_tool_result,attach_workflow_proposal_persists_thread_message_and_extends_summary,attach_workflow_proposal_without_proposal_returns_summary_unchanged}`, `app/src/lib/workflows/workflowProposal.test.ts`                 | ✅     | A `workflow_proposal` payload in a finished async child's history is persisted as a parent-thread message (metadata scope `workflow_proposal`) and embedded in the delivery notice; the frontend rehydrates the newest unconsumed proposal into the card on thread load, and Save/Dismiss mark the source message consumed.                                                                                                                            |

### 6.4 Managed Cloud File Storage

| ID    | Feature                                                          | Layer | Test path(s)                                | Status | Notes                                                                                                                                                              |
| ----- | ---------------------------------------------------------------- | ----- | ------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 6.4.1 | `storage_upload_file` (multipart, quota/TTL args, path safety)   | RU    | `src/openhuman/file_storage/tools_tests.rs` | ✅     | wiremock upload against the backend envelope; rejects workspace-escaping/symlinked paths, bad visibility/ttl; surfaces backend errors (e.g. insufficient balance). |
| 6.4.2 | `storage_download_file` (redirect follow + persist to workspace) | RU    | `src/openhuman/file_storage/tools_tests.rs` | ✅     | Follows the 302 to the presigned URL, persists bytes under the action dir, honors explicit filename.                                                               |
| 6.4.3 | `storage_list_files` / `storage_get_link`                        | RU    | `src/openhuman/file_storage/tools_tests.rs` | ✅     | List + usage rendering; presigned link generation with expiry arg validation.                                                                                      |
| 6.4.4 | `storage_set_visibility` / `storage_delete_file`                 | RU    | `src/openhuman/file_storage/tools_tests.rs` | ✅     | Public/private toggle surfaces the stable public URL; delete confirms backend `deleted` flag; both are Write-level tools with external effect.                     |

---

## 7. Web & Network Capabilities

### 7.1 Browser

| ID    | Feature            | Layer | Test path(s)                                                                                             | Status | Notes                                                                                               |
| ----- | ------------------ | ----- | -------------------------------------------------------------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------- |
| 7.1.1 | Open URL           | RU+WD | `src/openhuman/tools/impl/browser/browser_open_tests.rs`, `app/test/e2e/specs/tool-browser-flow.spec.ts` | ✅     | Was ❌ — WDIO asserts agent runtime + browser-bearing registry; mock backend captures HTTP shape    |
| 7.1.2 | Browser Automation | RU+WD | `src/openhuman/tools/impl/browser/browser_tests.rs`, `app/test/e2e/specs/tool-browser-flow.spec.ts`      | ✅     | Was ❌ — WDIO locks tools_agent wildcard scope (exposes the 22-action automation schema to the LLM) |

### 7.2 Network

| ID    | Feature                    | Layer | Test path(s)                                                                                                                                | Status | Notes                                                                        |
| ----- | -------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------------------------------------------------------- |
| 7.2.1 | HTTP / API Requests        | RU+WD | `service-connectivity-flow.spec.ts`                                                                                                         | ✅     |                                                                              |
| 7.2.2 | Web Search Execution       | WD    | `skill-execution-flow.spec.ts`                                                                                                              | 🟡     | Generic skill path                                                           |
| 7.2.3 | TinyFish Integration Tools | RU    | `src/openhuman/integrations/tinyfish_tests.rs`, `src/openhuman/tools/ops_tests.rs::all_tools_executes_tinyfish_family_against_fake_backend` | ✅     | Backend-proxied Search, Fetch, and Agent run tools covered with fake backend |

---

## 8. Memory System (Persistent AI Memory)

### 8.1 Memory Operations

| ID    | Feature       | Layer | Test path(s)                                                                   | Status | Notes  |
| ----- | ------------- | ----- | ------------------------------------------------------------------------------ | ------ | ------ |
| 8.1.1 | Store Memory  | RI+WD | `tests/memory_roundtrip_e2e.rs`, `app/test/e2e/specs/memory-roundtrip.spec.ts` | ✅     | Was ❌ |
| 8.1.2 | Recall Memory | RI+WD | same                                                                           | ✅     | Was ❌ |
| 8.1.3 | Forget Memory | RI+WD | same                                                                           | ✅     | Was ❌ |

### 8.2 Memory Handling

| ID    | Feature                          | Layer       | Test path(s)                                                                                                                                                                                                                                                                                                                                | Status | Notes                                                                                                                                                         |
| ----- | -------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 8.2.2 | Memory Consistency               | RI          | `tests/memory_graph_sync_e2e.rs`, `tests/worker_c_modules_e2e.rs`                                                                                                                                                                                                                                                                           | ✅     | Worker C RPC E2E verifies memory-tree ingest is reflected by `memory_sync_status_list`                                                                        |
| 8.2.3 | Memory Scaling                   | RU          | `src/openhuman/memory/ingestion_tests.rs`                                                                                                                                                                                                                                                                                                   | 🟡     | Soak/scale benchmark not asserted                                                                                                                             |
| 8.2.4 | Raw-archive sync reconcile       | RU+RI       | `src/openhuman/memory_sync/sources/rebuild.rs`, `src/openhuman/memory_sync/workspace/periodic.rs`, `tests/json_rpc_e2e.rs` (`json_rpc_memory_sources_reconcile_reports_pending_raw_files`), `tests/memory_sync_pipeline_e2e.rs`                                                                                                             | ✅     | Coverage gate + incremental rebuild + workspace periodic scheduler + `memory_sources_reconcile` RPC                                                           |
| 8.2.5 | Coding-session persona ingestion | RU+RI+VU+WD | `src/openhuman/tinycortex/persona.rs`, `tests/coding_sessions_feature.rs`, `tests/json_rpc_e2e.rs`, `app/src/components/intelligence/__tests__/CodingSessionsCard.test.tsx`, `app/src/services/memorySourcesService.test.ts`, `app/test/e2e/specs/coding-session-memory.spec.ts`, `app/test/playwright/specs/coding-session-memory.spec.ts` | ✅     | Discovers Codex and Claude Code histories, excludes machine-authored turns, exposes status/ingest RPCs, and surfaces incremental ingestion on Brain > Sources |

### 8.3 Memory Retrieval Benchmarks

| ID    | Feature                              | Layer | Test path(s)                                                                                    | Status | Notes                                                                                         |
| ----- | ------------------------------------ | ----- | ----------------------------------------------------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------- |
| 8.3.2 | Cross-Chat Entity Discoverability    | RU    | `src/openhuman/memory/tree/retrieval/benchmarks.rs::bench_cross_chat_entity_discoverable`       | ✅     | Verifies entity canonicalisation across multiple chats                                        |
| 8.3.3 | Citation Bundle Provenance           | RU    | `src/openhuman/memory/tree/retrieval/benchmarks.rs::bench_citation_bundle_provenance`           | ✅     | Verifies source_ref and tree_scope are populated in retrieval hits                            |
| 8.3.4 | Citation Fetch Leaves Hydration      | RU    | `src/openhuman/memory/tree/retrieval/benchmarks.rs::bench_citation_fetch_leaves_hydrates`       | ✅     | Verifies fetch_leaves returns content for exact chunk IDs                                     |
| 8.3.7 | Long-Source Exact Leaf Retrieval     | RU    | `src/openhuman/memory/tree/retrieval/benchmarks.rs::bench_long_source_retrieves_exact_leaf`     | 🟡     | Embedder required for seal + chunking; test runs in inert mode but assertions are conditional |
| 8.3.9 | Scale Ingest 20 Sources No Real Data | RU    | `src/openhuman/memory/tree/retrieval/benchmarks.rs::bench_scale_ingest_20_sources_no_real_data` | ✅     | Verifies retrieval correctness at scale with synthetic data                                   |

### 8.4 Explicit User Preferences (Two-Lane)

| ID    | Feature                                    | Layer | Test path(s)                                                                                                   | Status | Notes                                                                   |
| ----- | ------------------------------------------ | ----- | -------------------------------------------------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------- |
| 8.4.1 | Save Preference (general / situational)    | RU    | `src/openhuman/agent/tools/save_preference_tests.rs`                                                           | ✅     | `save_preference` tool → `user_pref_{general,situational}`, topic-keyed |
| 8.4.2 | Lane A — Standing Prefs in System Prompt   | RU    | `src/openhuman/learning/prompt_sections.rs`, `src/openhuman/agent/harness/session/turn_tests.rs`               | ✅     | General prefs rendered into the system prompt at thread start           |
| 8.4.3 | Lane B — Situational Recall (vector-gated) | RU    | `src/openhuman/memory_store/namespace_store/query_tests.rs::recall_relevant_by_vector_gates_on_similarity`             | ✅     | Per-turn; relevant query injects, unrelated suppresses                  |
| 8.4.4 | Same-Topic Contradiction (replace)         | RU    | `src/openhuman/agent/tools/save_preference_tests.rs::recategorising_moves_pref_between_namespaces`             | ✅     | `ON CONFLICT REPLACE`; a topic lives in exactly one scope               |
| 8.4.5 | Cross-Topic Contradiction Surfacing        | RU    | `src/openhuman/agent/tools/save_preference_tests.rs::save_surfaces_related_preference_for_contradiction_check` | ✅     | Related prefs surfaced in the tool result for the chat agent to resolve |
| 8.4.6 | vector_chunks Model-Signature Recall Guard | RU    | `src/openhuman/memory_store/namespace_store/query_tests.rs::vector_recall_excludes_other_model_signature`              | ✅     | Excludes cross-model vectors; dim-guards legacy rows                    |

### 8.5 Long-term Goals

| ID    | Feature                           | Test  | Source / Test File                                                                                                                                                                                                | Status | Notes                                                                                             |
| ----- | --------------------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------- |
| 8.5.1 | Goals CRUD (list/add/edit/delete) | RU+VU | `src/openhuman/memory_goals/store.rs`, `src/openhuman/memory_goals/ops.rs`, `src/openhuman/memory_goals/tools.rs`, `app/src/services/api/goalsApi.test.ts`, `app/src/components/intelligence/GoalsPanel.test.tsx` | ✅     | Editable `MEMORY_GOALS.md` list over `memory_goals_*` RPC + Brain > Goals UI                      |
| 8.5.2 | Goals enrichment (reflect)        | RU+VU | `src/openhuman/memory_goals/enrich.rs`, `src/openhuman/memory_goals/schemas.rs`, `app/src/components/intelligence/GoalsPanel.test.tsx`                                                                            | 🟡     | Turn-based `goals_agent` enrichment; prompt/registry/error paths unit-tested, live LLM run manual |

---

## 9. Automation Engine

### 9.1 Task Scheduling

| ID    | Feature       | Layer | Test path(s)             | Status | Notes |
| ----- | ------------- | ----- | ------------------------ | ------ | ----- |
| 9.1.1 | Task Creation | WD    | `cron-jobs-flow.spec.ts` | ✅     |       |
| 9.1.2 | Task Update   | WD    | `cron-jobs-flow.spec.ts` | ✅     |       |
| 9.1.3 | Task Deletion | WD    | `cron-jobs-flow.spec.ts` | ✅     |       |

### 9.2 Cron Jobs

| ID    | Feature                    | Layer | Test path(s)             | Status | Notes |
| ----- | -------------------------- | ----- | ------------------------ | ------ | ----- |
| 9.2.1 | Cron Expression Validation | RU    | `src/openhuman/cron/`    | ✅     |       |
| 9.2.2 | Recurring Execution        | WD+RI | `cron-jobs-flow.spec.ts` | ✅     |       |

### 9.3 Remote Execution

| ID    | Feature                 | Layer | Test path(s)             | Status | Notes                    |
| ----- | ----------------------- | ----- | ------------------------ | ------ | ------------------------ |
| 9.3.1 | Remote Agent Scheduling | RI    | `tests/json_rpc_e2e.rs`  | 🟡     | Coverage thin            |
| 9.3.2 | Execution Trigger       | WD    | `cron-jobs-flow.spec.ts` | ✅     |                          |
| 9.3.3 | Retry Handling          | RU    | `src/openhuman/cron/`    | 🟡     | Backoff branches partial |

### 9.4 Workflow Run History

| ID    | Feature                              | Layer | Test path(s)                                                                                                        | Status | Notes                                                                                                                                                            |
| ----- | ------------------------------------ | ----- | ------------------------------------------------------------------------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 9.4.1 | Aggregate run history (all workflows) | RU+VU | `src/openhuman/flows/ops_tests.rs::flows_list_all_runs_aggregates_across_flows_newest_first`, `app/src/pages/WorkflowRunsPage.test.tsx` | ✅     | New `openhuman.flows_list_all_runs` RPC (`store::list_all_flow_runs`) backs the Workflows page "Workflow Runs" sub-view. RU asserts cross-flow, newest-first aggregation; VU asserts the list/empty/error render. |

---

## 10. Unified Messaging Hub

### 10.1 Integration Setup

| ID     | Feature                      | Layer | Test path(s)                                                                                                                                                                                                                                                                                                                                                                                                                                          | Status | Notes                                                                                                                                                                                                                                                                                                                                                                                    |
| ------ | ---------------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 10.1.1 | Telegram Connection          | WD    | `telegram-flow.spec.ts`                                                                                                                                                                                                                                                                                                                                                                                                                               | ✅     |                                                                                                                                                                                                                                                                                                                                                                                          |
| 10.1.2 | WhatsApp Connection          | WD    | `app/test/e2e/specs/whatsapp-flow.spec.ts`                                                                                                                                                                                                                                                                                                                                                                                                            | ✅     | Was ❌                                                                                                                                                                                                                                                                                                                                                                                   |
| 10.1.3 | Gmail Connection             | WD    | `gmail-flow.spec.ts`                                                                                                                                                                                                                                                                                                                                                                                                                                  | ✅     |                                                                                                                                                                                                                                                                                                                                                                                          |
| 10.1.4 | Slack Connection             | WD    | `app/test/e2e/specs/slack-flow.spec.ts`                                                                                                                                                                                                                                                                                                                                                                                                               | ✅     | Was ❌                                                                                                                                                                                                                                                                                                                                                                                   |
| 10.1.5 | Yuanbao Connection           | RU    | `src/openhuman/channels/providers/yuanbao/`, `src/openhuman/channels/controllers/ops.rs::tests::connect_yuanbao_*`, `src/openhuman/channels/runtime/startup.rs::yuanbao_secret_tests`                                                                                                                                                                                                                                                                 | 🟡     | New API-key channel for Tencent Yuanbao. RU covers sign-token preflight (valid/invalid creds, env-override cluster routing), credentials store hydration (incl. stale app_key guard), and WS reconnect/shutdown. No WDIO spec yet — connect-flow UI is rendered via the generic `ChannelSetupModal` already exercised by other channel flow specs.                                       |
| 10.1.6 | Email (IMAP/SMTP) Connection | RU+VU | `src/openhuman/channels/controllers/definitions_tests.rs::email_*`, `src/openhuman/channels/controllers/ops/connect.rs::email_config_tests`, `src/openhuman/channels/controllers/ops_tests.rs::{persist_email_config_*,disconnect_email_*,connect_email_rejects_invalid_port_*,test_channel_email_rejects_invalid_port_*}`, `app/src/components/channels/CredentialChannelConfig.test.tsx`, `app/src/components/channels/ChannelConfigPanel.test.tsx` | 🟡     | #4280 — native IMAP/SMTP for non-Gmail/Outlook mailboxes surfacing the existing `EmailChannel`. RU covers credentials→`EmailConfig` mapping/defaults, port/sender parsing, definition/validation, config persist + disconnect, and pre-network invalid-port rejection. VU covers the connect form rendering/submit + panel routing. Live IMAP verify + WDIO connect-flow are follow-ups. |

### 10.2 Authentication & Authorization

| ID     | Feature                               | Layer | Test path(s)                                                                  | Status | Notes                                                                     |
| ------ | ------------------------------------- | ----- | ----------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------- |
| 10.2.1 | OAuth / API Token Handling            | WD    | `skill-oauth.spec.ts`                                                         | ✅     |                                                                           |
| 10.2.2 | Scope Selection (Read/Write/Initiate) | WD    | `gmail-flow.spec.ts`, `skill-oauth.spec.ts`, `composio-triggers-flow.spec.ts` | 🟡     | Multi-scope matrix not exhaustive; Gmail trigger OAuth read scope covered |
| 10.2.3 | Token Storage & Encryption            | RU    | `src/openhuman/encryption/`, `src/openhuman/credentials/`                     | ✅     |                                                                           |

### 10.3 Message Sync & Ingestion

| ID     | Feature                   | Layer | Test path(s)                                                                                      | Status | Notes                                                                                                                                                                         |
| ------ | ------------------------- | ----- | ------------------------------------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 10.3.1 | Incoming Message Sync     | RU+WD | `src/openhuman/channels/tests/`, `gmail-flow.spec.ts`                                             | ✅     |                                                                                                                                                                               |
| 10.3.2 | Message Deduplication     | RU    | `src/openhuman/channels/tests/`                                                                   | ✅     |                                                                                                                                                                               |
| 10.3.3 | WhatsApp Agent Retrieval  | RU    | `src/openhuman/whatsapp_data/tools/`, `tests/json_rpc_e2e.rs::whatsapp_data_agent_tools_e2e_1341` | ✅     | Three read-only agent tools wrap the local SQLite store; ingest stays internal-only. See [`src/openhuman/whatsapp_data/README.md`](../src/openhuman/whatsapp_data/README.md). |
| 10.3.4 | Real-Time vs Delayed Sync | RU    | `src/openhuman/channels/tests/runtime_dispatch.rs`                                                | ✅     |                                                                                                                                                                               |

### 10.4 Messaging Operations

| ID     | Feature               | Layer | Test path(s)                                  | Status | Notes                                 |
| ------ | --------------------- | ----- | --------------------------------------------- | ------ | ------------------------------------- |
| 10.4.1 | Send Message          | WD+RI | `gmail-flow.spec.ts`, `telegram-flow.spec.ts` | ✅     |                                       |
| 10.4.2 | Reply to Thread       | WD    | `gmail-flow.spec.ts`                          | ✅     |                                       |
| 10.4.3 | Initiate Conversation | WD    | `gmail-flow.spec.ts`                          | 🟡     | Telegram/WhatsApp/Slack not exercised |
| 10.4.4 | Attachment Handling   | WD    | `gmail-flow.spec.ts`                          | 🟡     | Attachment branch shallow             |

### 10.5 Cross-Channel Behavior

| ID     | Feature                | Layer | Test path(s)                                              | Status | Notes                                                                               |
| ------ | ---------------------- | ----- | --------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------- |
| 10.5.1 | Channel Isolation      | RU    | `src/openhuman/channels/tests/identity.rs`                | ✅     |                                                                                     |
| 10.5.2 | Unified Inbox Handling | WD+RI | `channels-smoke.spec.ts`, `tests/worker_c_modules_e2e.rs` | 🟡     | UI assertion shallow; RI covers config-only channel status after connect/disconnect |
| 10.5.3 | Context Preservation   | RU    | `src/openhuman/channels/tests/context.rs`                 | ✅     |                                                                                     |

### 10.6 Permission Enforcement

| ID     | Feature                     | Layer | Test path(s)                  | Status | Notes    |
| ------ | --------------------------- | ----- | ----------------------------- | ------ | -------- |
| 10.6.1 | Read Access Enforcement     | RU+WD | `auth-access-control.spec.ts` | ✅     |          |
| 10.6.2 | Write Access Enforcement    | RU+WD | `auth-access-control.spec.ts` | ✅     |          |
| 10.6.3 | Initiate Action Enforcement | RU    | `src/openhuman/channels/`     | 🟡     | E2E thin |

### 10.7 Disconnect & Re-Setup

| ID     | Feature                | Layer | Test path(s)                                          | Status | Notes                                                               |
| ------ | ---------------------- | ----- | ----------------------------------------------------- | ------ | ------------------------------------------------------------------- |
| 10.7.1 | Integration Disconnect | WD+RI | `gmail-flow.spec.ts`, `tests/worker_c_modules_e2e.rs` | ✅     | RI covers `channels_disconnect` clearing config-only iMessage state |
| 10.7.2 | Token Revocation       | RU    | `src/openhuman/credentials/`                          | ✅     |                                                                     |
| 10.7.3 | Re-Authorization Flow  | WD    | `skill-oauth.spec.ts`                                 | 🟡     | Re-auth post-revoke not asserted                                    |
| 10.7.4 | Permission Re-Sync     | WD    | _missing_ — tracked #968                              | ❌     |                                                                     |

---

## 11. Intelligence & Insights

### 11.1 Analysis Engine

| ID      | Feature                                                             | Layer | Test path(s)                                                                                                                                                                                                                                                                                                                                                                                                                                                           | Status | Notes                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ------- | ------------------------------------------------------------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 11.1.1  | Multi-Source Analysis                                               | RI    | `tests/memory_graph_sync_e2e.rs`                                                                                                                                                                                                                                                                                                                                                                                                                                       | 🟡     | Frontend trigger untested                                                                                                                                                                                                                                                                                                                                                                                                                      |
| 11.1.2  | Actionable Item Extraction                                          | VU    | `app/src/components/intelligence/__tests__/utils.test.ts`                                                                                                                                                                                                                                                                                                                                                                                                              | ✅     | Was ❌                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 11.1.3  | Analyze Trigger                                                     | WD    | `app/test/e2e/specs/insights-dashboard.spec.ts` mounts the route; explicit analyze-handler invocation TBD                                                                                                                                                                                                                                                                                                                                                              | 🟡     | Route mounts and search/filter UI assert — full analyze trigger flow tracked as follow-up                                                                                                                                                                                                                                                                                                                                                      |
| 11.1.4  | MCP server (stdio + HTTP)                                           | RU    | `src/openhuman/mcp_server/`                                                                                                                                                                                                                                                                                                                                                                                                                                            | ✅     | Stdio framing plus Streamable HTTP/SSE session lifecycle; `McpHttpClient` round-trip tests                                                                                                                                                                                                                                                                                                                                                     |
| 11.1.5  | Global tool registry                                                | RI    | `src/openhuman/tool_registry/`, `tests/json_rpc_e2e.rs`, `tests/domain_modules_e2e.rs`, `tests/worker_b_domain_e2e.rs`                                                                                                                                                                                                                                                                                                                                                 | ✅     | Read-only MCP/controller discovery with routes, schemas, version, allowed agents, and health                                                                                                                                                                                                                                                                                                                                                   |
| 11.1.6  | SearXNG MCP search                                                  | RU    | `src/openhuman/integrations/searxng.rs`, `src/openhuman/mcp_server/tools.rs`, `src/openhuman/tools/schemas.rs`                                                                                                                                                                                                                                                                                                                                                         | ✅     | Self-hosted search config, normalized results, MCP argument validation, and mocked HTTP execution                                                                                                                                                                                                                                                                                                                                              |
| 11.1.7  | Bundled prompt resources                                            | RU    | `src/openhuman/mcp_server/resources.rs`, `src/openhuman/mcp_server/protocol.rs`                                                                                                                                                                                                                                                                                                                                                                                        | ✅     | `resources/list` catalog + `resources/read` happy path, -32002 unknown URI, -32602 missing param, catalog-mirrors-BUILTINS parity test                                                                                                                                                                                                                                                                                                         |
| 11.1.8  | Resource templates list                                             | RU    | `src/openhuman/mcp_server/resources.rs`, `src/openhuman/mcp_server/protocol.rs`                                                                                                                                                                                                                                                                                                                                                                                        | ✅     | `resources/templates/list` returns `{resourceTemplates: []}` (static catalog), tolerates unknown/cursor params                                                                                                                                                                                                                                                                                                                                 |
| 11.1.10 | MCP registry install→connect→tool_call                              | RI    | `tests/json_rpc_e2e.rs` (`mcp_clients_install_connect_tool_call_happy_path`), `tests/mcp_registry_e2e.rs`, `src/openhuman/mcp_registry/setup_ops.rs`, `app/test/playwright/specs/mcp-tab-flow.spec.ts` (#3039, #4272)                                                                                                                                                                                                                                                  | ✅     | HTTP-RPC happy path install→connect→tool_call→update_env against `test-mcp-stub`; transport-aware install (stdio + http_remote) via `build_install_transport`; UI-level Playwright flow drives browse→install→connect→run-tool (#4272)                                                                                                                                                                                                         |
| 11.1.11 | MCP env reconfigure + registry creds                                | RI/VU | `tests/json_rpc_e2e.rs` (`mcp_clients_registry_settings_roundtrip`), `src/openhuman/mcp_registry/registries/mcp_official.rs`, `app/src/components/channels/mcp/InstalledServerDetail.test.tsx` (#3039)                                                                                                                                                                                                                                                                 | ✅     | `update_env` persist+reconnect; `registry_settings` get/set with secrets write-only (config-first, env-fallback); reconfigure form validation                                                                                                                                                                                                                                                                                                  |
| 11.1.12 | MCP UI surface + setup-agent client                                 | VU/RU | `app/src/components/channels/mcp/InstallDialog.test.tsx`, `app/src/components/channels/mcp/McpServersTab.test.tsx`, `app/src/services/api/mcpClientsApi.test.ts`, `app/src/services/api/mcpSetupApi.test.ts`, `src/openhuman/mcp_registry/{curation,registry,registries/mcp_official}.rs` (#3039, #4272)                                                                                                                                                               | ✅     | Skills `?tab=mcp` renders `McpServersTab` (not Coming Soon); auto-connect on install (best-effort); typed `mcpSetupApi` wrapper; curated "perfect server" catalog (declared website + named credential) with official-vendor badge + official-first order; namespace-stripped relevance search + server-side Stdio/Hosted transport filter; clickable Website/Repo links; wired connection health toolbar (Retry all / Disconnect all) (#4272) |
| 11.1.13 | MCP HTTP-remote auth (token / Bearer / OAuth) + redirect resolution | RU/VU | `src/openhuman/mcp_registry/connections.rs` (`build_http_auth*`, `resolve_final_url`), `src/openhuman/mcp_registry/oauth.rs` (PKCE/token/bundle/callback port), `app/src/components/channels/mcp/ConnectAuthModal.test.tsx` (#3495)                                                                                                                                                                                                                                    | ✅     | Bearer/raw scheme + custom headers; redirect-final-URL resolved before auth; OAuth dynamic client registration + PKCE + refresh; tokens MERGED into stored env; credentials stored encrypted locally, never sent to backend                                                                                                                                                                                                                    |
| 11.1.14 | MCP "Help & configure" assistant                                    | VU/RU | `app/src/components/channels/mcp/ConfigAssistantPanel.test.tsx`, `app/src/components/channels/mcp/ConfigHelpModal.test.tsx`, `src/openhuman/mcp_registry/ops.rs` (`invoke_config_assist_agent`) (#3495)                                                                                                                                                                                                                                                                | ✅     | Server-specific prompt offered as a one-click "Get step-by-step setup help" action (on-demand, no longer auto-run on open — #4272), running an agentic turn scoped to web_search_tool/web_fetch/curl only; markdown-rendered reply; per-MCP chat persisted while on the detail page                                                                                                                                                            |
| 11.1.15 | Agent uses connected MCP servers in chat                            | RU    | `src/openhuman/agent_registry/agents/loader.rs` (`orchestrator_subagents_include_mcp_agent`, `mcp_agent_drives_connected_servers_without_install_or_shell`, `planner_has_readonly_mcp_discovery_not_execute`), `src/openhuman/agent_registry/agents/orchestrator/prompt.rs` (`connected_mcp_block_*`), `src/openhuman/agent/harness/session/turn_tests.rs` (`mcp_announcement_fires_once_for_new_server`), `src/openhuman/mcp_registry/{tools,connections}.rs` (#3495) | ✅     | `use_mcp_server` delegate → `mcp_agent` worker (discover→list→call); `mcp_registry_list_tools` read-only discovery; orchestrator `## Connected MCP Servers` prompt block + mid-session connect announcement on the user turn; planner read-only MCP discovery (no `tool_call`)                                                                                                                                                                 |

<!-- 11.1.9 Vault Markdown Writes — removed: Knowledge Vaults dropped (vault domain + VaultPanel deleted). -->

### 11.2 Insights Dashboard

| ID     | Feature               | Layer | Test path(s)                 | Status | Notes                                      |
| ------ | --------------------- | ----- | ---------------------------- | ------ | ------------------------------------------ |
| 11.2.1 | Memory View           | WD    | `insights-dashboard.spec.ts` | ✅     | Was ❌                                     |
| 11.2.2 | Memory Graph Controls | WD    | `insights-dashboard.spec.ts` | ✅     | Brain Graph tab actions toolbar            |
| 11.2.3 | Memory Graph Surface  | WD    | `insights-dashboard.spec.ts` | ✅     | Populated SVG or empty-state graph surface |

### 11.3 Hosted Orchestration

| ID     | Feature                                                         | Layer | Test path(s)                                                                                                                                                                       | Status | Notes                                                                                                                                                                                                                                                                                                                                            |
| ------ | --------------------------------------------------------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 11.3.1 | Hosted-only orchestration (client = trigger + effects + render) | RI+VU | `tests/orchestration_hosted_client.rs`, `app/src/components/intelligence/TinyPlaceOrchestrationTab.test.tsx`, `app/src/components/orchestration/__tests__/AgentChatPanel.test.tsx` | ✅     | Local wake-graph brain retired (frontend_agent/graph/master_agent/reasoning_agent deleted). Client forwards events to the hosted brain (`POST /orchestration/v1/events`), uploads world-diffs, syncs hosted sessions/messages/steering into the render cache, and executes `send_dm`/`evict` socket effects; cloud-unreachable banner on outage. |
| 11.3.2 | Direct paid Medulla orchestration with local OpenHuman tools    | RU    | `src/openhuman/orchestration/medulla.rs`, `src/openhuman/orchestration/schemas.rs`                                                                                                 | ✅     | `openhuman.orchestration_run` checks the active paid plan, starts a hosted Medulla cycle, executes requested contact/session/send tools locally, and continues pending/tool-use events to a final result. Mocked HTTP tests cover direct and tool-loop success plus plan, pending, backend-error, unknown-tool, and tool-failure paths.          |
| 11.3.3 | Local medulla-serve supervision (`medulla_local` RPC, Flavor A draft) | RU+RI | `src/openhuman/medulla_local/server_tests.rs`, `tests/medulla_local_e2e.rs`                                                                                                        | ✅     | Behind the default-ON `medulla-local` feature. Unit tests drive the supervisor's handshake seam against a mock connector: restart-and-retry fires only on mid-request transport death of an idempotent op (exactly one respawn); the non-idempotent `instruct` is never replayed — a transport break surfaces the typed `MaybeApplied` error with no duplicate submission; an overall per-request deadline (`subconscious.medulla_local.request_deadline_secs`, default 300s) bounds a request even while the child keeps streaming frames or while a serve→host port callback (`inference.invoke`/`tools.invoke`) hangs on a stalled provider/tool — tripping as the typed transport error (`MaybeApplied` for `instruct`, restart-and-retry-once for `status`); a retry that also breaks mid-request resets the replacement connection, so the next request re-establishes cleanly instead of reusing a poisoned transport; child liveness is probed before the cached connection is trusted, so a child that dies between requests reports `running=false` and is respawned on the next request instead of misreporting `MaybeApplied`; `ok=false` serve rejections fail fast with the typed `RequestError` without killing the child; and the global cache is keyed on an order-canonical config fingerprint (map-field insertion order cannot invalidate it, a changed config rebuilds and bypasses the start-failure backoff). The transport is unix-only; non-unix targets compile a stub whose entry points report a typed unsupported-platform error (self-tested on those targets). The RI suite boots the real JSON-RPC router and asserts `medulla_local.status` returns a well-formed idle snapshot (running=false, actionable message) and `instruct` fails cleanly when no serve entry is configured — hermetic, no Node child or network.          |

---

## 12. Rewards & Progression

> Frontend-only domain — no Rust core counterpart. Confirmed during #970
> investigation: there is no `src/openhuman/rewards/` module and no Redux
> `rewardsSlice`; snapshot is fetched per-mount via
> `app/src/services/api/rewardsApi.ts` and held in `Rewards.tsx` component
> state. Backend ownership lives in `tinyhumansai/backend` (`/rewards/me`).

### 12.1 Role Unlocking

| ID     | Feature                  | Layer | Test path(s)                                                                                     | Status | Notes                                                |
| ------ | ------------------------ | ----- | ------------------------------------------------------------------------------------------------ | ------ | ---------------------------------------------------- |
| 12.1.1 | Activity-Based Unlock    | VU+WD | `app/src/store/__tests__/rewardsSlice.test.ts`, `app/test/e2e/specs/rewards-unlock-flow.spec.ts` | ✅     | Was ❌ — streak/feature-driven unlock branch         |
| 12.1.2 | Integration-Based Unlock | VU+WD | same                                                                                             | ✅     | Was ❌ — Discord membership → role assignment branch |
| 12.1.3 | Plan-Based Unlock        | VU+WD | same                                                                                             | ✅     | Was ❌ — plan tier + active subscription branch      |

### 12.2 Progress Tracking

| ID     | Feature                | Layer | Test path(s)                                                      | Status | Notes                                                                                               |
| ------ | ---------------------- | ----- | ----------------------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------- |
| 12.2.1 | Message Count Tracking | VU+WD | `rewardsSlice.test.ts`, `rewards-progression-persistence.spec.ts` | ✅     | Was ❌ — message-driven progress proxied by `metrics.featuresUsedCount` (no literal field)          |
| 12.2.2 | Usage Metrics          | VU+WD | same                                                              | ✅     | Was ❌ — current streak + cumulative tokens                                                         |
| 12.2.3 | State Persistence      | VU+WD | same                                                              | ✅     | Was ❌ — restart-equivalent (page unmount + remount + re-fetch); admin request log asserts re-fetch |

---

## 13. Settings & Developer Tools

### 13.1 Account & Security

| ID     | Feature                             | Layer      | Test path(s)                                                                                                                                                                | Status | Notes                                                                                                                                                                                                                                                                            |
| ------ | ----------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 13.1.1 | Profile Management                  | VU         | `app/src/components/settings/panels/__tests__/PrivacyPanel.test.tsx`                                                                                                        | 🟡     |                                                                                                                                                                                                                                                                                  |
| 13.1.2 | Linked Accounts                     | WD         | `auth-access-control.spec.ts`                                                                                                                                               | 🟡     | UI surface unasserted                                                                                                                                                                                                                                                            |
| 13.1.3 | Meet Handoff Prompt-Injection Guard | VU         | `app/src/services/__tests__/webviewAccountService.meetPromptInjection.test.ts`                                                                                              | ✅     | Was ❌ — guard blocks handoff on hostile transcripts and wraps non-blocked transcripts in `<meeting_transcript source="untrusted_external_audio">` delimiters (#1920)                                                                                                            |
| 13.1.4 | Wallet Balances Panel               | VU         | `app/src/components/settings/panels/__tests__/WalletBalancesPanel.test.tsx`, `app/src/services/walletApi.test.ts`                                                           | ✅     | Loading/error/empty/loaded states; Retry + Refresh re-invocation; chain badges; truncated address; providerStatus chip                                                                                                                                                           |
| 13.1.5 | Approval History                    | VU         | `app/src/components/settings/panels/__tests__/ApprovalHistoryPanel.test.tsx`, `app/src/services/api/approvalApi.test.ts`                                                    | ✅     | Was ❌ — read-only audit surface over `approval_list_recent_decisions`; covers loaded/empty/error/refresh states, per-decision badge, and the bare-array vs `{result,logs}` envelope normalization                                                                               |
| 13.1.6 | Action Timeout                      | VU, RU, RI | `app/src/components/settings/panels/__tests__/AgentAccessPanel.test.tsx`, `src/openhuman/tool_timeout/mod.rs`, `src/openhuman/config/ops_tests.rs`, `tests/json_rpc_e2e.rs` | ✅     | New (#3100) — UI control over `config_get/update_agent_settings` for `[agent].agent_timeout_secs`; covers load/persist-on-blur/range-rejection/no-op/env-override-disable, the runtime-mutable `tool_timeout` resolver + env precedence, ops apply/reject, and the RPC roundtrip |

### 13.2 Automation & Channels

| ID     | Feature               | Layer | Test path(s)                                               | Status | Notes |
| ------ | --------------------- | ----- | ---------------------------------------------------------- | ------ | ----- |
| 13.2.1 | Channel Configuration | WD    | `app/test/e2e/specs/settings-channels-permissions.spec.ts` | ✅     |       |
| 13.2.2 | Permission Settings   | WD    | `app/test/e2e/specs/settings-channels-permissions.spec.ts` | ✅     |       |

### 13.3 AI & Skills

| ID     | Feature             | Layer | Test path(s)                                                                                                               | Status | Notes                   |
| ------ | ------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------------- |
| 13.3.1 | Model Configuration | VU+WD | `app/src/components/settings/panels/__tests__/AutocompletePanel.test.tsx`, `app/test/e2e/specs/settings-ai-skills.spec.ts` | ✅     | AI-model-switch covered |
| 13.3.2 | Skill Toggle        | WD    | `skill-lifecycle.spec.ts`, `app/test/e2e/specs/settings-ai-skills.spec.ts`                                                 | ✅     |                         |

### 13.4 Developer Options

| ID     | Feature            | Layer | Test path(s)                                      | Status | Notes |
| ------ | ------------------ | ----- | ------------------------------------------------- | ------ | ----- |
| 13.4.1 | Webhook Inspection | WD    | `app/test/e2e/specs/settings-dev-options.spec.ts` | ✅     |       |
| 13.4.2 | Runtime Logs       | WD    | `app/test/e2e/specs/settings-dev-options.spec.ts` | ✅     |       |
| 13.4.3 | Memory Debug       | WD    | `app/test/e2e/specs/settings-dev-options.spec.ts` | ✅     |       |

### 13.5 Data Management

| ID     | Feature                                     | Layer | Test path(s)                                                                                                        | Status | Notes                                                                                                                                          |
| ------ | ------------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| 13.5.1 | Clear App Data                              | WD    | `app/test/e2e/specs/settings-data-management.spec.ts`                                                               | ✅     | Destructive — confirm-then-reset                                                                                                               |
| 13.5.2 | Cache Reset                                 | WD    | `app/test/e2e/specs/settings-data-management.spec.ts`                                                               | ✅     |                                                                                                                                                |
| 13.5.3 | Full State Reset                            | WD    | `app/test/e2e/specs/settings-data-management.spec.ts`                                                               | ✅     | Restart-and-verify fresh-install state                                                                                                         |
| 13.5.4 | Migration from another assistant (OpenClaw) | VU+RU | `app/src/components/settings/panels/__tests__/MigrationPanel.test.tsx`, `src/openhuman/migration/ops.rs` (existing) | ✅     | Was ❌ — UI now wraps the existing `openhuman.migrate_openclaw` RPC with preview-then-apply + confirm. Hermes tracked as follow-up under #1440 |

### 13.6 Keyboard Shortcuts & Command Surface

| ID     | Feature                                            | Layer | Test path(s)                                                                                                                                                                    | Status | Notes                                                                                                                                                               |
| ------ | -------------------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 13.6.1 | Command Palette (⌘K / ⌘P)                          | VU+WD | `app/src/lib/commands/__tests__/globalActions.test.tsx`, `app/src/components/commands/__tests__/CommandProvider.test.tsx`, `app/test/e2e/specs/command-palette.spec.ts`         | ✅     | Opens via ⌘K, runs an action, lists seed nav actions, Esc closes                                                                                                    |
| 13.6.2 | Keyboard Shortcuts help directory (? / ⌘/)         | VU+WD | `app/src/components/shortcuts/__tests__/shortcutsView.test.tsx`, `app/src/components/commands/__tests__/CommandProvider.test.tsx`, `app/test/e2e/specs/command-palette.spec.ts` | ✅     | Registry-driven grouped list; opens via `?` and ⌘/ (mutually exclusive with palette); also reachable from the sidebar shortcut icon + Settings → Keyboard Shortcuts |
| 13.6.3 | Global shortcut map (nav / chat / view / profiles) | VU    | `app/src/lib/commands/__tests__/globalActions.test.tsx`                                                                                                                         | ✅     | Control-based nav (`ctrl`/`mod` per-OS), New Chat / Toggle Sidebar handlers, alias keys, and wired-but-hidden profile switches                                      |

---

## 14. Tabbed Terminal UI (`openhuman` / `openhuman tui`)

### 14.1 TUI Subcommand (feature-gated `tui`)

| ID     | Feature                                           | Layer | Test path(s)                                                                        | Status | Notes                                                                                                     |
| ------ | ------------------------------------------------- | ----- | ----------------------------------------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------- |
| 14.1.1 | Transcript reducer (deltas, done, error, tools)   | RU    | `src/openhuman/tui/state.rs`                                                        | ✅     | Pure `TranscriptState::apply_event` — client-id filtering, text/thinking split, `chat_done` finalization |
| 14.1.2 | Runner flags + thread resolution + RPC name pins  | RU    | `src/openhuman/tui/runner.rs`, `src/openhuman/tui/app.rs`                           | ✅     | `--thread`/`--new` parsing; canonical `openhuman.*` method names resolve via registry                     |
| 14.1.3 | Tab order + render layout + persistent footer     | RU    | `src/openhuman/tui/ui_state.rs`, `src/openhuman/tui/render.rs`                      | ✅     | Logs-first tab state and ratatui TestBackend                                                              |
| 14.1.4 | Disabled-build stub (`--no-default-features`)     | RU    | `src/core/cli_tests.rs` (`tui`/`chat` `*_reports_disabled_build_when_gate_off`)     | ✅     | Build-fact error, not `unknown namespace`                                                                 |
| 14.1.5 | Bare-command launch policy                        | RU    | `src/core/cli_tests.rs`                                                             | ✅     | TTY + CLI auto-launch; Docker, pipes, feature-off, and explicit commands stay headless                    |
| 14.1.6 | Bounded live core-log buffer                      | RU    | `src/core/logging.rs`                                                               | ✅     | Preserves ordering; bounds both line count and individual line length                                     |
| 14.1.7 | Interactive terminal session (raw mode, streaming) | MS    | manual PTY smoke                                                                    | 🚫     | Requires a real PTY to verify key input and terminal restoration                                          |

## 15. Agent Profile Homes (multi-agent profiles)

### 15.1 Profile Homes & Isolation

| ID     | Feature                                                        | Layer | Test path(s)                                                                                                   | Status | Notes                                                                                                          |
| ------ | -------------------------------------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------- |
| 15.1.1 | Profile home materialization + file-backed SOUL.md             | RU    | `src/openhuman/profiles/home.rs`, `src/openhuman/profiles/paths.rs`                                            | ✅     | Idempotent atomic seeds, id validation matrix, soul resolution order incl. legacy-id skip                       |
| 15.1.2 | Dedicated memory suffix + dedicated workspace descriptor       | RU    | `src/openhuman/profiles/paths.rs`, `src/openhuman/agent/harness/session/builder/factory.rs`                    | ✅     | `effective_memory_suffix` matrix; real `derive_profile_workspace_descriptor` seam, None path unchanged          |
| 15.1.3 | Cross-profile write guard (file tools + shell)                 | RU    | `src/openhuman/profiles/guard.rs`, `src/openhuman/security/policy/policy_tests.rs`                             | ✅     | Block sibling / allow own / disarmed-allows; traversal + symlink cases through real `validate_parent_path`      |
| 15.1.4 | Profile-scoped agent experience (capture stamp + partition)    | RU    | `src/openhuman/agent_experience/` (capture/store/ops tests)                                                    | ✅     | Profiled query sees own + legacy, excludes siblings; profile-less sees all                                      |
| 15.1.5 | Per-profile skills dir (discover/describe/read/run precedence) | RU    | `src/openhuman/skills/registry.rs`, `src/openhuman/skills/ops_discover.rs`                                     | ✅     | Owner-only visibility; profile-local wins collisions; global-only resolves everywhere                           |
| 15.1.6 | Cron profile attribution (schema, patch clearing, fallback)    | RU/RI | `src/openhuman/cron/types.rs`, `src/openhuman/cron/store.rs`, `tests/json_rpc_e2e.rs`                          | ✅     | Double-option wire semantics (absent/null/value); deleted-profile fallback; e2e round-trip incl. null clearing  |
| 15.1.7 | Profiles RPC lifecycle (dedicated memory, enriched paths)      | RI    | `tests/json_rpc_e2e.rs` (`json_rpc_profiles_dedicated_memory_lifecycle`)                                       | ✅     | Upsert → list shows `dedicatedMemory` + enriched `soulMdFile`/`workspaceDir`/`skillsDir`                        |
| 15.1.8 | Profile editor isolation UI (toggles, path rows)               | VU    | `app/src/components/settings/panels/ProfileEditorPage.test.tsx`                                                | ✅     | Default-off render, dispatch payload, hydration, path rows shown/hidden                                         |
| 15.1.9 | Cron profile picker UI (assign, clear, deleted fallback)       | VU    | `app/src/components/settings/panels/cron/` tests, `app/src/services/api/agentProfilesApi.test.ts`              | ✅     | Create with/without id, edit prefill, clear→null, deleted-profile preserved, list label fallback                |

## Summary

| Status           | Count                                            |
| ---------------- | ------------------------------------------------ |
| ✅ Covered       | 79                                               |
| 🟡 Partial       | 27                                               |
| ❌ Missing       | 26                                               |
| 🚫 Manual smoke  | 11                                               |
| **Total leaves** | **143 explicit + nested = 214 product features** |

PR-A delta: 13 leaves moved from ❌ → ✅ via 5 WDIO specs + 2 Vitest + 1 Rust integration test.
Remaining gaps tracked under sub-issues #965 (process), #966 (docs), #967 (tools), #968 (auth/perm), #969 (settings), #970 (rewards), #971 (manual smoke).
