## Summary - Replaces the fixed post-hash `browser.pause(2_000)` with a route readiness wait. - `navigateViaHash()` now waits for the target hash, `document.readyState === "complete"`, and a mounted React root before returning. - `walkOnboarding()` now waits for `#/home` and a Home-page marker after the onboarding next button unmounts. - Documents the navigation-readiness pattern in the E2E guide. ## Problem - #1864 reports a first-navigation race after onboarding: the hash changes, but the target panel can be empty because React has not settled yet. - The old helper returned after a fixed pause, so specs could start looking for panel text before the routed view mounted. ## Solution - Add `waitForHashRouteReady()` to make hash navigation wait on concrete browser/app signals. - Add `waitForPostOnboardingHome()` so the onboarding walker does not hand control back until Home is actually ready. - Throw navigation readiness failures immediately instead of hiding them behind a later text timeout. ## Submission Checklist - [x] Tests added or updated (happy path + at least one failure / edge case) per [Testing Strategy](../gitbooks/developing/testing-strategy.md#failure-path-requirement) - helper behavior tightened; E2E suite is the exercising path. - [x] **Diff coverage >= 80%** - N/A locally: E2E helper/doc change; CI E2E jobs are authoritative. - [x] Coverage matrix updated - N/A: E2E helper behavior change, no feature row added/removed/renamed. - [x] All affected feature IDs from the matrix are listed in the PR description under `## Related` - N/A: no matrix feature ID applies. - [x] No new external network dependencies introduced (mock backend used per [Testing Strategy](../gitbooks/developing/testing-strategy.md#mock-policy)) - [x] Manual smoke checklist updated if this touches release-cut surfaces ([`docs/RELEASE-MANUAL-SMOKE.md`](../docs/RELEASE-MANUAL-SMOKE.md)) - N/A: no release-cut surface. - [x] Linked issue closed via `Closes #NNN` in the `## Related` section ## Impact - Runtime/user impact: none; test helper only. - E2E impact: hash navigation and post-onboarding transitions now wait on real readiness signals instead of fixed sleeps. - Failure mode improves: route readiness failures surface at navigation time with the target hash in the error. ## Related - Closes #1864 - Follow-up PR(s)/TODOs: N/A --- ## AI Authored PR Metadata (required for Codex/Linear PRs) ### Linear Issue - Key: N/A - URL: N/A ### Commit & Branch - Branch: `codex/1864-e2e-navigation-readiness` - Commit SHA: `15f56af3c6c865fbd322010d25b047a998ebd964` ### Validation Run - [x] `pnpm --filter openhuman-app exec prettier --check test/e2e/helpers/shared-flows.ts` - passed - [x] `pnpm typecheck` - passed - [x] Focused tests: N/A, E2E helper change not run locally - [x] Rust fmt/check (if changed): `cargo fmt --all --check` - passed; `git diff --check` - passed - [x] Tauri fmt/check (if changed): N/A ### Validation Blocked - `command:` full E2E rerun - `error:` not run locally; requires built desktop app/Appium harness - `impact:` remote E2E CI remains authoritative for the harness change ### Behavior Changes - Intended behavior change: E2E helpers wait for route/onboarding readiness before specs continue. - User-visible effect: none. ### Parity Contract - Legacy behavior preserved: same routes and onboarding flow; only readiness timing changed. - Guard/fallback/dispatch parity checks: existing text assertions remain in specs after helper navigation. ### Duplicate / Superseded PR Handling - Duplicate PR(s): N/A - Canonical PR: this PR - Resolution (closed/superseded/updated): N/A <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Tests** * Enhanced E2E helpers for more reliable hash-based navigation and for stronger verification that onboarding completes and the Home page is fully settled. * **Documentation** * Updated E2E testing guide with cross-platform navigation guidance recommending the hash navigation helper and noting post-onboarding Home-page readiness checks. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/tinyhumansai/openhuman/pull/2304?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: aqilaziz <gonzes7@gmail.com> Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
description, icon
| description | icon |
|---|---|
| Build, run, test, and ship OpenHuman from source. | code-branch |
Overview
OpenHuman is open source under GPLv3 at github.com/tinyhumansai/openhuman. This section is for contributors and anyone running OpenHuman from source.
If you just want to use the app, head to Getting Started. If you're here to read the architecture, hack on a feature, or land a PR, you're in the right place.
Where things live
| Path | What's there |
|---|---|
app/ |
pnpm workspace openhuman-app. Vite + React frontend (app/src/) and the Tauri desktop host (app/src-tauri/). |
src/ |
Rust crate openhuman_core and the openhuman-core CLI binary. Domains, JSON-RPC, MCP routing. |
gitbooks/ |
This site (the public-facing docs). |
docs/ |
Older deep references not yet migrated to GitBook (memory pipeline diagrams, agent flows, etc.). |
CLAUDE.md at the repo root is the source of truth for AI agents working on the codebase. Same rules apply to humans.
Start here
If it's your first time pulling the repo:
- Getting Set Up. Toolchain, dependencies, the vendored Tauri CLI, sidecar staging - everything
pnpm devneeds to actually start. - Building the Rust Core. Fresh-machine setup for the repo-root Rust crate only: pinned toolchain, OS packages, and exact
cargocommands. - Architecture. How the desktop app, the Rust core sidecar, the JSON-RPC bridge, and the dual sockets fit together. Read this before you make non-trivial changes.
- Frontend and Tauri Shell. The React app and the desktop host that wraps it.
- MCP Server. Opt-in stdio MCP mode for exposing read-only OpenHuman memory tools to local clients.
Testing
OpenHuman ships with three test layers. Know which one your change belongs in:
- Testing Strategy. When to write Vitest vs cargo tests vs WDIO.
- E2E Testing. WDIO/Appium specs, dual-platform setup (Linux tauri-driver, macOS Appium Mac2), and how to run a single spec locally.
- Agent Observability. The artifact-capture layer that makes E2E and agent runs debuggable after the fact.
PRs must clear the ≥ 80% coverage on changed lines gate. Add tests for new behavior, not just the happy path.
Shipping
- Release Policy. Version policy, release cadence, OAuth + installer rules.
- Cloud Deploy. Backend/cloud-side deployment when a change crosses the desktop boundary.
Going deeper
- Agent Harness. The agent's code-focused tool surface and how to extend it.
- Chromium Embedded Framework. How embedded provider webviews work, why they don't run injected JS, and what the per-provider scanners do instead.
For features still being built, the Subconscious Loop page covers the background task evaluation system end-to-end.
Contributing
- Open issues and PRs at tinyhumansai/openhuman.
- PRs target
main. Push to your fork, not upstream. - Follow
CONTRIBUTING.mdand the issue/PR templates. - Keep changes focused. A bug fix doesn't need surrounding cleanup; a one-shot operation doesn't need a helper.
Help building toward AGI doesn't have to mean shipping a kernel - bugfixes, docs, integrations, and tests all move the bar.