Morphee — Test Results & Status
Version: V1.5.0-dev Last Updated: February 22, 2026 Total Tests: 5,388 (2,014 backend + 165 Rust + 3,016 frontend unit + 63 E2E + 5 SDK unit + 95 skipped + 30 Phase 6) Coverage: 84% (backend)
Automated Test Suite
Backend (pytest)
docker compose -f docker-compose.dev.yml exec -T backend pytest -q --cov=. --cov-report=term-missing
Result: 2,014 passed, 11 skipped (84% coverage) — 0 failures. All tests green as of Feb 22, 2026.
New test files since last snapshot:
test_identity_service.py(8 tests) — Child identity CRUD, PIN auth, parent-assisted authtest_session_service.py(7 tests) — Morphee JWT issuance/verification, session lifecycletest_verify_token_dual.py(4 tests) — Dual-path token routing (GoTrue vs Morphee)integration/test_identity_api.py(6 tests) — Identity API endpoint integration teststest_extension_models.py(16 tests) — Extension Pydantic models, permissions, resource limitstest_extension_manager.py(15 tests) — ExtensionManager + WasmExtensionInterface lifecycletest_host_functions.py(17 tests) — WASM host functions with permission enforcementtest_wasm_runtime.py(12 tests, 11 skip if wasmtime unavailable) — WasmRuntime load/execute/unloadtest_permissions.py(23 tests) — PermissionEnforcer, SSRF blocking, domain allowliststest_resource_limiter.py(18 tests) — ResourceLimiter, fuel/memory/HTTP rate/timeout trackingtest_extension_signing.py(15 tests) — RSA-PSS signing, verify roundtrip, tamper detectiontest_extension_audit.py(8 tests) — ExtensionAuditService, buffered writes, statstest_registry.py(15 tests) — OCI RegistryClient search, pull, manifest, versionstest_api_extensions.py(16 tests) — Extension REST API endpoints (catalog, install, execute, audit)test_dev_server.py(16 tests) — Dev server mock host functions, WasmDevRunner, file watchertest_cli_init.py(5 tests) — CLI init command (project structure, Cargo.toml, manifest)test_security_low.py(25 tests) — Low-severity security audit itemstest_cache.py(10 tests) — in-memory cache fallback (utils/cache.py)test_git_special_files.py(56 tests) — git special files parsing, 99% coveragetest_i18n.py(47 tests) — i18n module: t() lookup, interpolation, catalog completeness, 91% coveragetest_gdpr_integration.py(35 tests) — GDPR endpoints: consent CRUD, data export, account deletiontest_rate_limit.py(+4 tests) — Redis rate limiter: allow, block, fail-open, TTLtest_api_members.py(18 tests) — Members API: invites, member managementtest_api_acl.py(17 tests) — ACL API: permissions, preferences, monitoring (all passing)test_api_interfaces.py(33 tests) — Interfaces API: list, execute, config (all passing)test_acl_service.py(35 tests) — ACL service unit tests (updated to match fixed implementation)test_extension_oauth.py(14 tests) — Extension OAuth: authorize URL, callback, state validation, statustest_extension_updater.py(8 tests) — ExtensionUpdater: check_updates, apply_update, version comparisontest_editable_components.py(21 tests) — Editable UI: enable_editing, lock_editing, apply_edits actions, EditPermission model, ComponentSpec editable fieldstest_biometric_service.py(12 tests) — Biometric enrollment: register face/voice, authenticate, delete, re-enrollment, error cases
Frontend Unit Tests (Vitest)
cd frontend && npm run test
Result: 3016 passed (0 failures). All tests green as of Feb 22, 2026.
New extension test files:
extensionStore.test.ts(8 tests) — Zustand extension store: catalog, install, enable/disable, executeExtensionCard.test.tsx(9 tests) — Card component: rendering, install/toggle, permissions displayInstallDialog.test.tsx(5 tests) — Install flow: confirm, error handling, success state
Coverage (Vitest v8):
| Metric | Coverage |
|---|---|
| Statements | 75.29% |
| Branches | 68.18% |
| Functions | 76.74% |
| Lines | 76.76% |
| Test Suite | Tests | Status |
|---|---|---|
| store/authStore.test.ts | 5 | Pass |
| store/taskStore.test.ts | 11 | Pass |
| store/spaceStore.test.ts | 11 | Pass |
| store/chatStore.test.ts | 29 | Pass |
| store/notificationStore.test.ts | 9 | Pass |
| store/componentStore.test.ts | 26 | Pass |
| hooks/useAuth.test.ts | 13 | Pass |
| hooks/useTasks.test.ts | 19 | Pass |
| hooks/useSpaces.test.ts | 5 | Pass |
| hooks/useChat.test.ts | 38 | Pass |
| hooks/useOnboarding.test.ts | 16 | Pass |
| hooks/useNotifications.test.ts | 8 | Pass |
| hooks/use-toast.test.ts | 12 | Pass |
| lib/auth.test.ts | 12 | Pass |
| lib/api.test.ts | 86 | Pass |
| lib/runtime.test.ts | 21 | Pass |
| lib/memory-client.test.ts | 10 | Pass |
| lib/fs-client.test.ts | 12 | Pass |
| lib/component-events.test.ts | 21 | Pass |
| lib/sse.test.ts | 16 | Pass |
| lib/websocket.test.ts | 25 | Pass |
| lib/utils.test.ts | 49 | Pass |
| lib/haptics.test.ts | 13 | Pass |
| lib/tauri.test.ts | 28 | Pass |
| lib/llm-routing.test.ts | 5 | Pass |
| store/llmStore.test.ts | 5 | Pass |
| auth/AuthForm.test.tsx | 13 | Pass |
| chat/ToolCallCard.test.tsx | 20 | Pass |
| chat/ApprovalCard.test.tsx | 9 | Pass |
| chat/ComponentRegistry.test.tsx | 9 | Pass |
| chat/InfoCard.test.tsx | 6 | Pass |
| chat/TaskListRenderer.test.tsx | 5 | Pass |
| chat/ChatBubble.test.tsx | 30 | Pass |
| chat/ConversationList.test.tsx | 9 | Pass |
| chat/PinnedMessages.test.tsx | 10 | Pass |
| chat/ConversationSettingsDialog.test.tsx | 8 | Pass |
| chat/renderers.test.tsx | 70 | Pass |
| layout/Sidebar.test.tsx | 3 | Pass |
| layout/MobileSidebar.test.tsx | 3 | Pass |
| layout/Header.test.tsx | 7 | Pass |
| layout/NotificationBell.test.tsx | 22 | Pass |
| layout/FeatureTour.test.tsx | 11 | Pass |
| layout/BottomNav.test.tsx | 4 | Pass |
| settings/GoogleConnect.test.tsx | 13 | Pass |
| settings/InterfaceConfigCard.test.tsx | 9 | Pass |
| tasks/TaskList.test.tsx | 9 | Pass |
| tasks/TaskDetail.test.tsx | 31 | Pass |
| tasks/CreateTaskDialog.test.tsx | 12 | Pass |
| tasks/ConnectionStatus.test.tsx | 9 | Pass |
| spaces/SpaceList.test.tsx | 7 | Pass |
| spaces/SpaceDetail.test.tsx | 21 | Pass |
| spaces/SpaceCard.test.tsx | 3 | Pass |
| spaces/CreateSpaceDialog.test.tsx | 5 | Pass |
| ui/empty-state.test.tsx | 5 | Pass |
| layout/Breadcrumbs.test.tsx | 6 | Pass |
| pages/Dashboard.test.tsx | 15 | Pass |
| pages/Login.test.tsx | 3 | Pass |
| pages/Settings.test.tsx | 109 | Pass |
| pages/AuthCallback.test.tsx | 8 | Pass |
| pages/Chat.test.tsx | 109 | Pass |
| pages/Tasks.test.tsx | 19 | Pass |
| pages/Spaces.test.tsx | 15 | Pass |
| pages/Onboarding.test.tsx | 32 | Pass |
| search/SearchDialog.test.tsx | 10 | Pass |
| lib/utils.test.ts | 89 | Pass |
| lib/download.test.ts | 8 | Pass |
| pages/AcceptInvite.test.tsx | 8 | Pass |
| pages/ParentConsentPending.test.tsx | 7 | Pass |
| pages/ParentConsentVerify.test.tsx | 11 | Pass |
| auth/AuthForm.test.tsx (age/consent) | +8 | Pass |
| hooks/usePullToRefresh.test.ts | 19 | Pass |
| auth/SSOIcons.test.tsx | 7 | Pass |
| lib/push-notifications.test.ts | 7 | Pass |
| lib/debug.test.ts | 6 | Pass |
| pages/Calendar.test.tsx | 10 | Pass |
| pages/Inbox.test.tsx | 10 | Pass |
| App.test.tsx | 36 | Pass |
| i18n/completeness.test.ts | 5 | Pass |
| layout/KeyboardShortcuts.test.tsx | 8 | Pass |
| chat/renderers.test.tsx (expanded) | 135 | Pass |
| chat/ComponentRegistry.test.tsx (expanded) | 42 | Pass |
| chat/ConversationList.test.tsx (expanded) | 52 | Pass |
| lib/WebSocketProvider.test.tsx | 5 | Pass |
| pages/settings/NotificationsTab.test.tsx | 65 | Pass |
| pages/settings/ProfileTab.test.tsx | 72 | Pass |
| pages/settings/ParentalControlsTab.test.tsx | 39 | Pass |
| pages/settings/MembersTab.test.tsx | 50 | Pass |
| pages/settings/IntegrationsTab.test.tsx | 15 | Pass |
| pages/Chat.test.tsx (expanded) | 147 | Pass |
| tasks/TaskList.test.tsx (expanded) | 20 | Pass |
| hooks/useSpaces.test.ts (expanded) | 11 | Pass |
| hooks/use-toast.test.ts (expanded) | 17 | Pass |
| settings/InterfaceConfigCard.test.tsx (expanded) | 15 | Pass |
| lib/sse.test.ts (expanded) | 21 | Pass |
| tasks/TaskDetail.test.tsx (expanded) | 41 | Pass |
| pages/Tasks.test.tsx (expanded) | 36 | Pass |
| pages/Chat.test.tsx (expanded) | 154 | Pass |
| New (Feb 19, 2026): | ||
| New (Feb 21, 2026 — coverage sprint): | ||
| store/networkStore.test.ts | 6 | Pass |
| store/timelineStore.test.ts | 10 | Pass |
| types/timeline.test.ts | 12 | Pass |
| lib/llm-client.test.ts | 15 | Pass |
| hooks/useTimeline.test.ts | 9 | Pass |
| hooks/useNetworkStatus.test.ts | 6 | Pass |
| hooks/useConversationUndoRedo.test.ts | 8 | Pass |
| pages/NotFound.test.tsx | 6 | Pass |
| pages/Notifications.test.tsx | 14 | Pass |
| pages/settings/LocalAITab.test.tsx | 14 | Pass |
| pages/settings/SkillsTab.test.tsx | 14 | Pass |
| pages/settings/SchedulesTab.test.tsx | 14 | Pass |
| pages/settings/PermissionsTab.test.tsx | 13 | Pass |
| timeline/ConflictDialog.test.tsx | 6 | Pass |
| timeline/CommitDetail.test.tsx | 9 | Pass |
| timeline/BranchSelector.test.tsx | 7 | Pass |
| spaces/MorphSyncBadge.test.tsx | 5 | Pass |
| layout/OfflineBadge.test.tsx | 6 | Pass |
| New (Feb 21, 2026 — V1.3 Sprint 1 editable components): | ||
| chat/EditableCardRenderer.test.tsx | 18 | Pass |
| chat/EditableListRenderer.test.tsx | 16 | Pass |
| chat/EditableTableRenderer.test.tsx | 14 | Pass |
| chat/EditPermissions.test.tsx | 7 | Pass |
| New (Feb 21, 2026 — V1.3 Sprint 2 camera & image upload): | ||
| chat/ImageRenderer (in renderers.test.tsx) | 8 | Pass |
Backend — New Tests (V1.3 Sprint 2)
| File | Tests | Status |
|---|---|---|
| tests/test_chat_image.py | 25 | Pass |
Frontend E2E Tests (Playwright)
cd frontend && npm run test:e2e
Result: 60 Playwright tests in 8 files + 3 E2E scenario YAMLs (V1.3 multimodal)
| Test Suite | Tests | Status |
|---|---|---|
| auth.spec.ts | 8 | Pass - signup, login, logout, onboarding flow |
| tasks.spec.ts | 7 | Pass - create, detail, filter, dashboard stats |
| chat.spec.ts | 7 | Pass - empty state, send, streaming, error (mocked SSE) |
| mobile.spec.ts | 6 | Pass - responsive layout, bottom nav, mobile drawer |
| conversations.spec.ts | 10 | Pass - list, pin, select, options menu, empty state |
| search.spec.ts | 8 | Pass - Cmd+K, input, Escape, results, grouping |
| settings.spec.ts | 8 | Pass - tabs, profile, members, notifications, privacy |
| spaces.spec.ts | 6 | Pass - list, create dialog, empty state |
E2E Scenario YAMLs (V1.3 multimodal):
| Scenario | File | Status |
|---|---|---|
| Inline edit card | e2e/scenarios/v1.3-multimodal/inline-edit-card.scenario.yml | Ready |
| Drag list items reorder | e2e/scenarios/v1.3-multimodal/drag-list-items.scenario.yml | Ready |
| Drag kanban cards | e2e/scenarios/v1.3-multimodal/drag-kanban-cards.scenario.yml | Ready |
Tauri Rust Tests (cargo test)
cd frontend/src-tauri && cargo test
Result: 165 passed (desktop) + 9 passed (mobile-ml feature)
| Module | Tests | Status |
|---|---|---|
| embeddings | 6 | Pass |
| vector_store | 15 | Pass |
| git_store | 27 | Pass |
| vault | 5 | Pass |
| file_store | 8 | Pass |
| action_queue | 7 | Pass |
| llm | 6 | Pass |
| model_manager | 5 | Pass |
| extensions | 15 | Pass |
| vector_router | 4 | Pass |
| tts | 2 | Pass |
| whisper | 3 | Pass |
| screenshot_commands | 4 | Pass |
| face_encoder | 8 | Pass |
| voice_encoder | 6 | Pass |
| biometric_commands | 7 | Pass |
| liveness | 11 | Pass |
| error_codes | 2 | Pass |
| tokenizer (mobile-ml) | 9 | Pass |
Frontend Build
cd frontend && npm run build
Result: Build clean — 435 KB JS, 67 KB CSS (code-split via Vite, reduced from 981 KB monolith)
System Status Summary
| Component | Status | Port | Notes |
|---|---|---|---|
| Backend API | Running | 8000 | Auth, Tasks, Spaces, Groups, WebSocket |
| Frontend (Vite) | Running | 5173 | React 19 + TypeScript + Tailwind |
| PostgreSQL | Running | 54322 | Migrations applied |
| Redis | Running | 6379 | Event bus connected |
| Interface System | Working | - | 15 integrations (echo, webhook, llm, tasks, spaces, frontend, onboarding, memory, cron, notifications, calendar, gmail, files, skills, slack) |
| Event Bus | Working | - | Redis-backed |
Known Issues
None — PostgREST has been removed and replaced with direct asyncpg connections.
Architecture Highlights
- Event-Driven: All actions publish events (action.started, action.completed, action.failed)
- MCP-Style Integration System: Self-describing integrations with action definitions, parameter validation, approval mechanism
- 100% Async/Await: Non-blocking I/O throughout the stack
- Type Safety: Pydantic models + Python 3.12 typing
Test Date: February 22, 2026 Environment: Docker (backend) + Vite dev server (frontend) Total Tests: 5,388 (2,014 backend + 165 Rust + 3,016 frontend unit + 63 E2E + 5 SDK unit + 95 skipped + 30 Phase 6) Pass Rate: 99.9% (1 pre-existing CSP test skip in backend)