Test Coverage Matrix

June 4, 2026 Β· View on GitHub

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

SymbolMeaning
βœ…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

CodeLayer
RURust unit (#[cfg(test)] inside src/)
RIRust integration (tests/*.rs)
VUVitest unit (app/src/**/*.test.ts(x))
WDWDIO E2E (app/test/e2e/specs/*.spec.ts) β€” Linux tauri-driver + macOS Appium Mac2
MSManual 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

IDFeatureLayerTest path(s)StatusNotes
0.1.1Direct Download AccessMSrelease-manual-smoke (see #971)🚫DMG hosting + version landing page
0.1.2Version Compatibility CheckMSrelease-manual-smoke🚫Driver cannot assert OS-version gates
0.1.3Corrupted Installer HandlingMSrelease-manual-smoke🚫Mutated DMG validation; manual repro

0.2 Installation & Launch

IDFeatureLayerTest path(s)StatusNotes
0.2.1DMG Installation FlowMSrelease-manual-smoke🚫OS-level Finder drag
0.2.2Gatekeeper ValidationMSrelease-manual-smoke🚫OS-level signature check
0.2.3Code Signing VerificationMSrelease-manual-smoke🚫codesign --verify capture in checklist
0.2.4First Launch Permissions PromptMSrelease-manual-smoke🚫TCC prompts non-driver-automatable

0.3 Updates & Reinstallation

IDFeatureLayerTest path(s)StatusNotes
0.3.1Auto Update CheckRU+RI+MSsrc/openhuman/update/ (Rust unit), tests/json_rpc_e2e.rs, release smoke🟑Core check/update policy covered; desktop prompt + release upgrade still manual
0.3.2Forced Update HandlingMSrelease-manual-smoke🚫End-to-end gating verified at release
0.3.3Reinstall with Existing StateMSrelease-manual-smoke🚫Workspace persistence on reinstall
0.3.4Clean UninstallMSrelease-manual-smoke🚫OS removal paths

1. Authentication & Identity

1.1 Multi-Provider Authentication

IDFeatureLayerTest path(s)StatusNotes
1.1.1Google LoginWDapp/test/e2e/specs/login-flow.spec.tsβœ…Deep-link branch covered
1.1.2GitHub LoginWDlogin-flow.spec.tsβœ…Deep-link branch covered
1.1.3Twitter (X) LoginWDlogin-flow.spec.ts🟑Generic OAuth path; assert provider tag in #968
1.1.4Discord LoginWDlogin-flow.spec.ts🟑Same β€” discord branch unasserted

1.2 Account Management

IDFeatureLayerTest path(s)StatusNotes
1.2.1Account Creation & MappingWD+RIlogin-flow.spec.ts, tests/json_rpc_e2e.rsβœ…
1.2.2Multi-Provider LinkingWDmissing β€” tracked #968❌Need spec linking 4 providers to one account
1.2.3Duplicate Account HandlingWDmissing β€” tracked #968❌Collision UX path

1.3 Session Management

IDFeatureLayerTest path(s)StatusNotes
1.3.1Token IssuanceWD+RIlogin-flow.spec.ts, json_rpc_e2e.rsβœ…
1.3.2Session PersistenceWDlogout-relogin-onboarding.spec.tsβœ…
1.3.3Refresh Token RotationVUmissing β€” tracked #968❌Slice-level refresh logic

1.4 Logout & Revocation

IDFeatureLayerTest path(s)StatusNotes
1.4.1Session LogoutWDlogout-relogin-onboarding.spec.tsβœ…
1.4.2Global LogoutWDmissing β€” tracked #968❌Multi-session invalidation
1.4.3Token InvalidationWDmissing β€” tracked #968❌Server-side revocation propagation

2. Permissions & System Access

2.1 macOS Permissions

IDFeatureLayerTest path(s)StatusNotes
2.1.1Accessibility PermissionMSrelease-manual-smoke🚫TCC OS-level prompt
2.1.2Input Monitoring PermissionMSrelease-manual-smoke🚫TCC OS-level prompt
2.1.3Screen Recording PermissionMSrelease-manual-smoke🚫TCC OS-level prompt
2.1.4Microphone PermissionMSrelease-manual-smoke🚫TCC OS-level prompt

2.2 Permission Lifecycle

IDFeatureLayerTest path(s)StatusNotes
2.2.1Permission Grant FlowRUsrc/openhuman/accessibility/🟑Core branch covered; UX manual
2.2.2Permission Denial HandlingRUsrc/openhuman/accessibility/🟑Same
2.2.3Permission Re-Sync / RefreshWDmissing β€” tracked #968❌App-restart re-sync
2.2.4Partial Permission State HandlingWDmissing β€” tracked #968❌macOS-only spec

3. Local AI Runtime (Ollama + LM Studio)

3.1 Model Management

IDFeatureLayerTest path(s)StatusNotes
3.1.1Model DetectionRU+WDsrc/openhuman/local_ai/, local-model-runtime.spec.tsβœ…
3.1.2Model Download & InstallationWDlocal-model-runtime.spec.tsβœ…
3.1.3Model Version HandlingRUsrc/openhuman/local_ai/model_ids.rsβœ…
3.1.4LM Studio Model DiscoveryRU+RIsrc/openhuman/local_ai/service/ollama_admin_tests.rs, tests/json_rpc_e2e.rsβœ…Uses LM Studio's OpenAI-compatible /v1/models surface
3.1.5Model Context-Window Requirement GateRU+VUsrc/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

IDFeatureLayerTest path(s)StatusNotes
3.2.1Local Inference ExecutionWDlocal-model-runtime.spec.tsβœ…
3.2.2Resource Handling (CPU/GPU/Memory)RUsrc/openhuman/local_ai/device.rs🟑Detection unit; runtime constraint manual
3.2.3Runtime Failure HandlingRU+WDlocal-model-runtime.spec.tsβœ…
3.2.4LM Studio Chat CompletionsRU+RIsrc/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

IDFeatureLayerTest path(s)StatusNotes
3.3.1.1RAM Limit SelectionVUapp/src/components/settings/ (panel-level)🟑UI present; assertion shallow
3.3.1.2RAM Availability DetectionRUsrc/openhuman/local_ai/device.rsβœ…
3.3.1.3Over-Allocation PreventionRUsrc/openhuman/local_ai/ops.rs🟑Guard exists; explicit test pending
3.3.1.4Under-Allocation HandlingRUsrc/openhuman/local_ai/ops.rs🟑Same

3.3.2 Dynamic Resource Adjustment

IDFeatureLayerTest path(s)StatusNotes
3.3.2.1Runtime Scaling Based on LoadRUmissing❌Track in follow-up
3.3.2.2Model Switching Based on MemoryRUmissing❌Track in follow-up

3.3.3 Configuration Persistence

IDFeatureLayerTest path(s)StatusNotes
3.3.3.1Save RAM SettingsVUmissing❌Settings slice
3.3.3.2Apply on RestartWDlocal-model-runtime.spec.ts🟑Restart not exercised
3.3.3.3Reset to DefaultVUmissing❌
3.3.3.4Provider Selection PersistenceRU+RI+VUsrc/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

IDFeatureLayerTest path(s)StatusNotes
4.1.1Session CreationWDconversations-web-channel-flow.spec.tsβœ…
4.1.2Session PersistenceWDconversations-web-channel-flow.spec.tsβœ…
4.1.3Multi-Session HandlingWDagent-review.spec.ts, conversations-web-channel-flow.spec.ts🟑No dedicated multi-thread switch test

4.2 Messaging

IDFeatureLayerTest path(s)StatusNotes
4.2.1User Message HandlingWD+RIconversations-web-channel-flow.spec.ts, tests/json_rpc_e2e.rsβœ…
4.2.2AI Response GenerationWDagent-review.spec.tsβœ…Mock LLM
4.2.3Streaming ResponsesRItests/json_rpc_e2e.rs🟑UI streaming assertion thin

4.3 Tool Invocation

IDFeatureLayerTest path(s)StatusNotes
4.3.1Tool Trigger via ChatWDskill-execution-flow.spec.ts, skill-multi-round.spec.tsβœ…
4.3.2Permission-Based ExecutionRU+WDsrc/openhuman/tools/, skill-execution-flow.spec.tsβœ…
4.3.3Tool Failure HandlingWDskill-execution-flow.spec.tsβœ…
4.3.4Subagent Mascot VisualizationVUapp/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.5Image Tool ContractsRUsrc/openhuman/image/βœ…High-level image_generation / view_image schema, gating, serialization, prompt guidance, and contract e2e coverage for #2984
4.3.6Background Monitor ToolsRU+RIsrc/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

5. Built-in Intelligence Skills

5.1 Screen Intelligence

IDFeatureLayerTest path(s)StatusNotes
5.1.1Screen CaptureRItests/screen_intelligence_vision_e2e.rsβœ…
5.1.2Context ExtractionRItests/screen_intelligence_vision_e2e.rsβœ…
5.1.3Memory InjectionRItests/memory_graph_sync_e2e.rsβœ…

5.2 Text Autocomplete

IDFeatureLayerTest path(s)StatusNotes
5.2.1Inline Suggestion GenerationMS+WDapp/test/e2e/specs/autocomplete-flow.spec.ts (settings surface only); release-manual-smoke for real inline-gen🟑Settings panel mounts; inline-gen requires macOS TCC grants β€” manual only
5.2.2Debounce HandlingVUapp/src/features/autocomplete/__tests__/useAutocompleteSkillStatus.test.tsx (status surface); core debounce timing is Rust-sideβœ…Was ❌ β€” status branches now covered
5.2.3Acceptance TriggerMSrelease-manual-smoke (#971)🟑Real keypress acceptance into a third-party text field β€” not driver-automatable

5.3 Voice Intelligence

IDFeatureLayerTest path(s)StatusNotes
5.3.1Voice Input CaptureWDvoice-mode.spec.tsβœ…
5.3.2Speech-to-Text ProcessingWDvoice-mode.spec.tsβœ…
5.3.3Voice Command ExecutionWDvoice-mode.spec.tsβœ…
5.3.4Mascot Voice SelectionVUapp/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.4 Persona

IDFeatureLayerTest path(s)StatusNotes
5.4.1Persona Name & DescriptionVUapp/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.4.2SOUL.md Edit & ResetRU+VUsrc/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.4.3Persona Settings SurfaceVUapp/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

IDFeatureLayerTest path(s)StatusNotes
6.1.1File Read AccessRU+WDsrc/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.2File Write AccessRU+WDsrc/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.3Path Restriction EnforcementRU+WDsrc/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

IDFeatureLayerTest path(s)StatusNotes
6.2.1Shell Command ExecutionRU+WDsrc/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.2Command Restriction HandlingRU+WDsrc/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.3Git Read OperationsRU+WDsrc/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.4Git Write OperationsRU+WDsrc/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

7. Web & Network Capabilities

7.1 Browser

IDFeatureLayerTest path(s)StatusNotes
7.1.1Open URLRU+WDsrc/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.2Browser AutomationRU+WDsrc/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

IDFeatureLayerTest path(s)StatusNotes
7.2.1HTTP / API RequestsRU+WDservice-connectivity-flow.spec.tsβœ…
7.2.2Web Search ExecutionWDskill-execution-flow.spec.ts🟑Generic skill path
7.2.3TinyFish Integration ToolsRUsrc/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

IDFeatureLayerTest path(s)StatusNotes
8.1.1Store MemoryRI+WDtests/memory_roundtrip_e2e.rs, app/test/e2e/specs/memory-roundtrip.spec.tsβœ…Was ❌
8.1.2Recall MemoryRI+WDsameβœ…Was ❌
8.1.3Forget MemoryRI+WDsameβœ…Was ❌

8.2 Memory Handling

IDFeatureLayerTest path(s)StatusNotes
8.2.1Context InjectionRItests/autocomplete_memory_e2e.rsβœ…
8.2.2Memory ConsistencyRItests/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.3Memory ScalingRUsrc/openhuman/memory/ingestion_tests.rs🟑Soak/scale benchmark not asserted

8.3 Memory Retrieval Benchmarks

IDFeatureLayerTest path(s)StatusNotes
8.3.2Cross-Chat Entity DiscoverabilityRUsrc/openhuman/memory/tree/retrieval/benchmarks.rs::bench_cross_chat_entity_discoverableβœ…Verifies entity canonicalisation across multiple chats
8.3.3Citation Bundle ProvenanceRUsrc/openhuman/memory/tree/retrieval/benchmarks.rs::bench_citation_bundle_provenanceβœ…Verifies source_ref and tree_scope are populated in retrieval hits
8.3.4Citation Fetch Leaves HydrationRUsrc/openhuman/memory/tree/retrieval/benchmarks.rs::bench_citation_fetch_leaves_hydratesβœ…Verifies fetch_leaves returns content for exact chunk IDs
8.3.7Long-Source Exact Leaf RetrievalRUsrc/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.9Scale Ingest 20 Sources No Real DataRUsrc/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)

IDFeatureLayerTest path(s)StatusNotes
8.4.1Save Preference (general / situational)RUsrc/openhuman/agent/tools/save_preference_tests.rsβœ…save_preference tool β†’ user_pref_{general,situational}, topic-keyed
8.4.2Lane A β€” Standing Prefs in System PromptRUsrc/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.3Lane B β€” Situational Recall (vector-gated)RUsrc/openhuman/memory/store/unified/query_tests.rs::recall_relevant_by_vector_gates_on_similarityβœ…Per-turn; relevant query injects, unrelated suppresses
8.4.4Same-Topic Contradiction (replace)RUsrc/openhuman/agent/tools/save_preference_tests.rs::recategorising_moves_pref_between_namespacesβœ…ON CONFLICT REPLACE; a topic lives in exactly one scope
8.4.5Cross-Topic Contradiction SurfacingRUsrc/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.6vector_chunks Model-Signature Recall GuardRUsrc/openhuman/memory/store/unified/query_tests.rs::vector_recall_excludes_other_model_signatureβœ…Excludes cross-model vectors; dim-guards legacy rows

9. Automation Engine

9.1 Task Scheduling

IDFeatureLayerTest path(s)StatusNotes
9.1.1Task CreationWDcron-jobs-flow.spec.tsβœ…
9.1.2Task UpdateWDcron-jobs-flow.spec.tsβœ…
9.1.3Task DeletionWDcron-jobs-flow.spec.tsβœ…

9.2 Cron Jobs

IDFeatureLayerTest path(s)StatusNotes
9.2.1Cron Expression ValidationRUsrc/openhuman/cron/βœ…
9.2.2Recurring ExecutionWD+RIcron-jobs-flow.spec.tsβœ…

9.3 Remote Execution

IDFeatureLayerTest path(s)StatusNotes
9.3.1Remote Agent SchedulingRItests/json_rpc_e2e.rs🟑Coverage thin
9.3.2Execution TriggerWDcron-jobs-flow.spec.tsβœ…
9.3.3Retry HandlingRUsrc/openhuman/cron/🟑Backoff branches partial

10. Unified Messaging Hub

10.1 Integration Setup

IDFeatureLayerTest path(s)StatusNotes
10.1.1Telegram ConnectionWDtelegram-flow.spec.tsβœ…
10.1.2WhatsApp ConnectionWDapp/test/e2e/specs/whatsapp-flow.spec.tsβœ…Was ❌
10.1.3Gmail ConnectionWDgmail-flow.spec.tsβœ…
10.1.4Slack ConnectionWDapp/test/e2e/specs/slack-flow.spec.tsβœ…Was ❌
10.1.5Yuanbao ConnectionRUsrc/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.2 Authentication & Authorization

IDFeatureLayerTest path(s)StatusNotes
10.2.1OAuth / API Token HandlingWDskill-oauth.spec.tsβœ…
10.2.2Scope Selection (Read/Write/Initiate)WDgmail-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.3Token Storage & EncryptionRUsrc/openhuman/encryption/, src/openhuman/credentials/βœ…

10.3 Message Sync & Ingestion

IDFeatureLayerTest path(s)StatusNotes
10.3.1Incoming Message SyncRU+WDsrc/openhuman/channels/tests/, gmail-flow.spec.tsβœ…
10.3.2Message DeduplicationRUsrc/openhuman/channels/tests/βœ…
10.3.3WhatsApp Agent RetrievalRUsrc/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 docs/whatsapp-data-flow.md.
10.3.4Real-Time vs Delayed SyncRUsrc/openhuman/channels/tests/runtime_dispatch.rsβœ…

10.4 Messaging Operations

IDFeatureLayerTest path(s)StatusNotes
10.4.1Send MessageWD+RIgmail-flow.spec.ts, telegram-flow.spec.tsβœ…
10.4.2Reply to ThreadWDgmail-flow.spec.tsβœ…
10.4.3Initiate ConversationWDgmail-flow.spec.ts🟑Telegram/WhatsApp/Slack not exercised
10.4.4Attachment HandlingWDgmail-flow.spec.ts🟑Attachment branch shallow

10.5 Cross-Channel Behavior

IDFeatureLayerTest path(s)StatusNotes
10.5.1Channel IsolationRUsrc/openhuman/channels/tests/identity.rsβœ…
10.5.2Unified Inbox HandlingWD+RIchannels-smoke.spec.ts, tests/worker_c_modules_e2e.rs🟑UI assertion shallow; RI covers config-only channel status after connect/disconnect
10.5.3Context PreservationRUsrc/openhuman/channels/tests/context.rsβœ…

10.6 Permission Enforcement

IDFeatureLayerTest path(s)StatusNotes
10.6.1Read Access EnforcementRU+WDauth-access-control.spec.tsβœ…
10.6.2Write Access EnforcementRU+WDauth-access-control.spec.tsβœ…
10.6.3Initiate Action EnforcementRUsrc/openhuman/channels/🟑E2E thin

10.7 Disconnect & Re-Setup

IDFeatureLayerTest path(s)StatusNotes
10.7.1Integration DisconnectWD+RIgmail-flow.spec.ts, tests/worker_c_modules_e2e.rsβœ…RI covers channels_disconnect clearing config-only iMessage state
10.7.2Token RevocationRUsrc/openhuman/credentials/βœ…
10.7.3Re-Authorization FlowWDskill-oauth.spec.ts🟑Re-auth post-revoke not asserted
10.7.4Permission Re-SyncWDmissing β€” tracked #968❌

11. Intelligence & Insights

11.1 Analysis Engine

IDFeatureLayerTest path(s)StatusNotes
11.1.1Multi-Source AnalysisRItests/memory_graph_sync_e2e.rs🟑Frontend trigger untested
11.1.2Actionable Item ExtractionVUapp/src/components/intelligence/__tests__/utils.test.tsβœ…Was ❌
11.1.3Analyze TriggerWDapp/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.4MCP server (stdio + HTTP)RUsrc/openhuman/mcp_server/βœ…Stdio framing plus Streamable HTTP/SSE session lifecycle; McpHttpClient round-trip tests
11.1.5Global tool registryRIsrc/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.6SearXNG MCP searchRUsrc/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.7Bundled prompt resourcesRUsrc/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.8Resource templates listRUsrc/openhuman/mcp_server/resources.rs, src/openhuman/mcp_server/protocol.rsβœ…resources/templates/list returns {resourceTemplates: []} (static catalog), tolerates unknown/cursor params
11.1.10MCP registry installβ†’connectβ†’tool_callRItests/json_rpc_e2e.rs (mcp_clients_install_connect_tool_call_happy_path), tests/mcp_registry_e2e.rs, src/openhuman/mcp_registry/setup_ops.rs (#3039)βœ…HTTP-RPC happy path installβ†’connectβ†’tool_callβ†’update_env against test-mcp-stub; transport-aware install (stdio + http_remote) via build_install_transport
11.1.11MCP env reconfigure + registry credsRI/VUtests/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.12MCP UI surface + setup-agent clientVUapp/src/components/channels/mcp/InstallDialog.test.tsx, app/src/services/api/mcpClientsApi.test.ts, app/src/services/api/mcpSetupApi.test.ts (#3039)βœ…Skills ?tab=mcp renders McpServersTab (not Coming Soon); auto-connect on install (best-effort); typed mcpSetupApi wrapper

11.2 Insights Dashboard

IDFeatureLayerTest path(s)StatusNotes
11.2.1Memory ViewWDinsights-dashboard.spec.tsβœ…Was ❌
11.2.2Source FilteringWDinsights-dashboard.spec.tsβœ…Was ❌
11.2.3Search & RetrievalWDinsights-dashboard.spec.tsβœ…Was ❌

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

IDFeatureLayerTest path(s)StatusNotes
12.1.1Activity-Based UnlockVU+WDapp/src/store/__tests__/rewardsSlice.test.ts, app/test/e2e/specs/rewards-unlock-flow.spec.tsβœ…Was ❌ β€” streak/feature-driven unlock branch
12.1.2Integration-Based UnlockVU+WDsameβœ…Was ❌ β€” Discord membership β†’ role assignment branch
12.1.3Plan-Based UnlockVU+WDsameβœ…Was ❌ β€” plan tier + active subscription branch

12.2 Progress Tracking

IDFeatureLayerTest path(s)StatusNotes
12.2.1Message Count TrackingVU+WDrewardsSlice.test.ts, rewards-progression-persistence.spec.tsβœ…Was ❌ β€” message-driven progress proxied by metrics.featuresUsedCount (no literal field)
12.2.2Usage MetricsVU+WDsameβœ…Was ❌ β€” current streak + cumulative tokens
12.2.3State PersistenceVU+WDsameβœ…Was ❌ β€” restart-equivalent (page unmount + remount + re-fetch); admin request log asserts re-fetch

13. Settings & Developer Tools

13.1 Account & Security

IDFeatureLayerTest path(s)StatusNotes
13.1.1Profile ManagementVUapp/src/components/settings/panels/__tests__/PrivacyPanel.test.tsx🟑
13.1.2Linked AccountsWDauth-access-control.spec.ts🟑UI surface unasserted
13.1.3Meet Handoff Prompt-Injection GuardVUapp/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.4Wallet Balances PanelVUapp/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.5Approval HistoryVUapp/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.6Action TimeoutVU, RU, RIapp/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

IDFeatureLayerTest path(s)StatusNotes
13.2.1Channel ConfigurationWDapp/test/e2e/specs/settings-channels-permissions.spec.tsβœ…
13.2.2Permission SettingsWDapp/test/e2e/specs/settings-channels-permissions.spec.tsβœ…

13.3 AI & Skills

IDFeatureLayerTest path(s)StatusNotes
13.3.1Model ConfigurationVU+WDapp/src/components/settings/panels/__tests__/AutocompletePanel.test.tsx, app/test/e2e/specs/settings-ai-skills.spec.tsβœ…AI-model-switch covered
13.3.2Skill ToggleWDskill-lifecycle.spec.ts, app/test/e2e/specs/settings-ai-skills.spec.tsβœ…

13.4 Developer Options

IDFeatureLayerTest path(s)StatusNotes
13.4.1Webhook InspectionWDapp/test/e2e/specs/settings-dev-options.spec.tsβœ…
13.4.2Runtime LogsWDapp/test/e2e/specs/settings-dev-options.spec.tsβœ…
13.4.3Memory DebugWDapp/test/e2e/specs/settings-dev-options.spec.tsβœ…

13.5 Data Management

IDFeatureLayerTest path(s)StatusNotes
13.5.1Clear App DataWDapp/test/e2e/specs/settings-data-management.spec.tsβœ…Destructive β€” confirm-then-reset
13.5.2Cache ResetWDapp/test/e2e/specs/settings-data-management.spec.tsβœ…
13.5.3Full State ResetWDapp/test/e2e/specs/settings-data-management.spec.tsβœ…Restart-and-verify fresh-install state
13.5.4Migration from another assistant (OpenClaw)VU+RUapp/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

Summary

StatusCount
βœ… Covered70
🟑 Partial27
❌ Missing26
🚫 Manual smoke11
Total leaves135 explicit + nested = 206 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).