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.
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.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
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
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
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
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
Screen Recording Permission
MS
release-manual-smoke
🚫
TCC OS-level prompt
2.1.4
Microphone Permission
MS
release-manual-smoke
🚫
TCC OS-level prompt
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)
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)
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)
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
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
🟡
UI streaming assertion thin
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
5. Built-in Intelligence Skills
ID
Feature
Layer
Test path(s)
Status
Notes
5.1.1
Screen Capture
RI
tests/screen_intelligence_vision_e2e.rs
✅
5.1.2
Context Extraction
RI
tests/screen_intelligence_vision_e2e.rs
✅
5.1.3
Memory Injection
RI
tests/memory_graph_sync_e2e.rs
✅
ID
Feature
Layer
Test path(s)
Status
Notes
5.2.1
Inline Suggestion Generation
MS+WD
app/test/e2e/specs/autocomplete-flow.spec.ts (settings surface only); release-manual-smoke for real inline-gen
🟡
Settings panel mounts (this PR); inline-gen requires macOS TCC grants — manual only
5.2.2
Debounce Handling
VU
app/src/features/autocomplete/__tests__/useAutocompleteSkillStatus.test.tsx (this PR — status surface); core debounce timing is Rust-side
✅
Was ❌ — status branches now covered
5.2.3
Acceptance Trigger
MS
release-manual-smoke (#971)
🟡
Real keypress acceptance into a third-party text field — not driver-automatable
ID
Feature
Layer
Test path(s)
Status
Notes
5.3.1
Voice Input Capture
WD
voice-mode.spec.ts
✅
5.3.2
Speech-to-Text Processing
WD
voice-mode.spec.ts
✅
5.3.3
Voice Command Execution
WD
voice-mode.spec.ts
✅
5.3.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 (this PR)
✅
Slice validation + persist REHYDRATE, Settings picker UI (#1762), synthesizeSpeech voiceId override propagation
6. System Tools & Agent Capabilities
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 (this PR)
✅
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 (this PR)
✅
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 (this PR)
✅
Was 🟡 — WDIO asserts traversal + absolute-path denial envelope
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 (this PR)
✅
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 (this PR)
✅
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 (this PR)
✅
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 (this PR)
✅
Was 🟡 — WDIO commits into the same fixture and asserts log advances
7. Web & Network Capabilities
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 (this PR)
✅
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 (this PR)
✅
Was ❌ — WDIO locks tools_agent wildcard scope (exposes the 22-action automation schema to the LLM)
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)
ID
Feature
Layer
Test path(s)
Status
Notes
8.1.1
Store Memory
RI+WD
tests/memory_roundtrip_e2e.rs (this PR), app/test/e2e/specs/memory-roundtrip.spec.ts (this PR)
✅
Was ❌
8.1.2
Recall Memory
RI+WD
same
✅
Was ❌
8.1.3
Forget Memory
RI+WD
same
✅
Was ❌
ID
Feature
Layer
Test path(s)
Status
Notes
8.2.1
Context Injection
RI
tests/autocomplete_memory_e2e.rs
✅
8.2.2
Memory Consistency
RI
tests/memory_graph_sync_e2e.rs
✅
8.2.3
Memory Scaling
RU
src/openhuman/memory/ingestion_tests.rs
🟡
Soak/scale benchmark not asserted
8.3 Memory Retrieval Benchmarks
ID
Feature
Layer
Test path(s)
Status
Notes
8.3.1
Cross-Chat Recall
RU
src/openhuman/memory/tree/retrieval/benchmarks.rs::bench_cross_chat_recall
✅
Synthetic fixture; verifies relevant source retrieval across chat scopes
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.5
Stale Preference Newer Supersedes
RU
src/openhuman/memory/tree/retrieval/benchmarks.rs::bench_stale_preference_newer_supersedes
✅
Verifies newer explicit correction appears alongside older preference
8.3.6
Contradiction Surfaces Both with Provenance
RU
src/openhuman/memory/tree/retrieval/benchmarks.rs::bench_contradiction_surfaces_both_with_provenance
✅
Verifies disagreeing sources surface with provenance labels
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.8
Drill-Down Isolates Children
RU
src/openhuman/memory/tree/retrieval/benchmarks.rs::bench_drill_down_isolates_children
✅
Verifies query_topic does not cross scope boundaries
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
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
✅
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
✅
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
10. Unified Messaging Hub
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 (this PR)
✅
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 (this PR)
✅
Was ❌
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/tools/impl/whatsapp_data/ (this PR), tests/json_rpc_e2e.rs::whatsapp_data_agent_tools_e2e_1341 (this PR)
✅
Three read-only agent tools wrap the local SQLite store; ingest stays internal-only. See docs/whatsapp-data-flow.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
channels-smoke.spec.ts
🟡
UI assertion shallow
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
gmail-flow.spec.ts
✅
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
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 (this PR)
✅
Was ❌
11.1.3
Analyze Trigger
WD
app/test/e2e/specs/insights-dashboard.spec.ts mounts the route (this PR); explicit analyze-handler invocation TBD
🟡
Route mounts and search/filter UI assert — full analyze trigger flow tracked as follow-up
11.1.4
MCP stdio server
RU
src/openhuman/mcp_server/
✅
Read-only initialize/tools/list/tools/call plus stdio framing; binary smoke in PR validation
11.1.5
Global tool registry
RI
src/openhuman/tool_registry/, tests/json_rpc_e2e.rs
✅
Read-only MCP/controller discovery with routes, schemas, version, allowed agents, and health
ID
Feature
Layer
Test path(s)
Status
Notes
11.2.1
Memory View
WD
insights-dashboard.spec.ts (this PR)
✅
Was ❌
11.2.2
Source Filtering
WD
insights-dashboard.spec.ts (this PR)
✅
Was ❌
11.2.3
Search & Retrieval
WD
insights-dashboard.spec.ts (this PR)
✅
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).
ID
Feature
Layer
Test path(s)
Status
Notes
12.1.1
Activity-Based Unlock
VU+WD
app/src/store/__tests__/rewardsSlice.test.ts (this PR), app/test/e2e/specs/rewards-unlock-flow.spec.ts (this PR)
✅
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
ID
Feature
Layer
Test path(s)
Status
Notes
12.2.1
Message Count Tracking
VU+WD
rewardsSlice.test.ts (this PR), rewards-progression-persistence.spec.ts (this PR)
✅
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
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 (this PR)
✅
Was ❌ — guard blocks handoff on hostile transcripts and wraps non-blocked transcripts in <meeting_transcript source="untrusted_external_audio"> delimiters (#1920)
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
✅
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
✅
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
✅
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 (this PR), 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 (#1440)
Status
Count
✅ Covered
66
🟡 Partial
27
❌ Missing
26
🚫 Manual smoke
11
Total leaves
131 explicit + nested = 202 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).