## Summary - Adds shared `waitForTestId` and `clickTestId` E2E helpers for stable DOM hooks. - Adds missing `cron-jobs-panel` and `cron-refresh` hooks to the Cron Jobs settings panel. - Migrates the reference cron E2E flow away from Tailwind class/DOM walking to cron row/action test IDs. - Documents the E2E `data-testid` naming taxonomy in the E2E guide. ## Problem - #1861 calls out `cron-jobs-flow.spec.ts` as the concrete example of brittle selectors: it found `morning_briefing` via Tailwind class strings and `closest('div.p-4')`. - That breaks on harmless class/layout refactors and makes the reference spec a weak template for future E2E work. ## Solution - Use existing `CoreJobList` cron row/action hooks directly from the spec. - Add the missing panel/refresh hooks so the whole cron flow can avoid text/button discovery for row actions. - Centralize test ID waiting/clicking in `element-helpers.ts` instead of keeping local DOM snippets in specs. ## 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) - updated the reference cron E2E spec and helper path. - [x] **Diff coverage >= 80%** - N/A locally: E2E helper/spec/doc change; CI diff coverage is authoritative. - [x] Coverage matrix updated - N/A: E2E selector-hardening 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 - N/A: this is a scoped slice that references #1861 without closing the broader audit issue. ## Impact - Runtime impact: none outside stable `data-testid` attributes on the Cron Jobs panel. - Test impact: cron E2E is less coupled to Tailwind classes and container structure. - Compatibility: `waitForTestId` is documented as tauri-driver/DOM-backed; Mac2 specs should keep accessibility/text helpers unless IDs are mirrored into accessible labels. ## Related - Refs #1861 - Follow-up PR(s)/TODOs: add stable hooks/migrations for the remaining settings, skills, conversation, onboarding, and notification E2E surfaces tracked by #1861. --- ## AI Authored PR Metadata (required for Codex/Linear PRs) ### Linear Issue - Key: N/A - URL: N/A ### Commit & Branch - Branch: `codex/1861-cron-e2e-testids` - Commit SHA: `28eca40a3d2e3a75b61105887e4faf58d4c0866e` ### Validation Run - [x] `pnpm --filter openhuman-app exec prettier --check src/components/settings/panels/CronJobsPanel.tsx test/e2e/helpers/element-helpers.ts test/e2e/specs/cron-jobs-flow.spec.ts` - passed - [x] `pnpm typecheck` - passed - [x] Focused tests: N/A, E2E spec migration 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:` `pnpm --filter openhuman-app exec tsc -p test/tsconfig.e2e.json --noEmit` - `error:` local command could not find `tsc` / `@wdio/globals/types` via that invocation - `impact:` app-wide `pnpm typecheck` passes; remote E2E/TS jobs remain authoritative for the E2E tsconfig ### Behavior Changes - Intended behavior change: none for users; E2E selectors now target stable hooks. - User-visible effect: none. ### Parity Contract - Legacy behavior preserved: cron load, refresh, pause/resume, run-history, and remove behavior unchanged. - Guard/fallback/dispatch parity checks: spec still asserts the same UI and sidecar persistence behavior. ### 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** * Added E2E helpers and updated cron-jobs flow to use stable test identifiers for more reliable UI interactions and polling. * **Documentation** * Added guidance on stable test ID naming and how to use the new E2E helpers in the testing guide. * **Maintenance** * Cron Jobs panel and controls now expose stable identifiers for testing (no user-facing behavior changes). <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/tinyhumansai/openhuman/pull/2301?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.