Agent skill
happier-testing
Repo-specific TDD and test-validation workflow for Happier changes, with lane selection, fixture policy, and anti-flake guardrails.
Install this agent skill to your Project
npx add-skill https://github.com/happier-dev/happier/tree/dev/skills/happier-testing
Metadata
Additional technical details for this skill
- openclaw
-
{ "homepage": "https://github.com/happier-dev/happier" }
SKILL.md
Happier Testing And TDD
Use this skill for behavior-changing work in this repository, especially when changes touch shared runtime contracts, CLI/server/UI flows, or any lane that historically accumulates stale fixtures.
Goal
Apply strict RED-GREEN-REFACTOR while following Happier-specific lane, fixture, and rerun rules so changes do not silently drift until a late pipeline sweep.
Workflow
- Inventory first
- Search for existing tests by symbol, route, command, feature id, config key, component name, or error code.
- Map the affected lane(s) and any shared/package-local harnesses the change can invalidate before editing code.
- Update the most relevant existing test first when possible.
- Consolidate overlapping tests instead of stacking new ones on top.
- Classify failures correctly
production bug: runtime behavior is wrongtest drift: assertions/fixtures assume an obsolete contractharness drift: helpers/mocks/testkit no longer match real runtime wiringinfra/resource issue: disk, Docker, stale child processes, or similar environment failures
- RED
- Write or update the smallest relevant test first.
- Run only the smallest relevant slice and confirm it fails for the expected reason.
- GREEN
- Implement the smallest fix that satisfies the failing behavior.
- Keep internal behavior real; mock only system boundaries.
- REFACTOR
- Extract shared helpers only when there is repeated real duplication or repeated stale drift.
- Keep file responsibilities focused.
- Broaden validation
- After a targeted green run in a shared area, rerun one broader related lane.
- Before handoff, rerun the touched package typecheck/build-enforcing lane and the relevant repo lanes.
Happier Lane Map
Canonical top-level lanes:
yarn testyarn test:integrationyarn test:e2e:core:fastyarn test:e2e:core:slowyarn test:e2e:uiyarn test:providersyarn test:db-contract:docker
CLI lane rule:
apps/cliunit tests must not force a full CLIdistbuild.- Use the lane-specific global setup files:
src/test-setup.unit.tssrc/test-setup.integration.tssrc/test-setup.slow.ts
Fixture And Mock Policy
- Do not partially mock central shared modules such as
@/sync/domains/state/storage. - Prefer package-local shared factories/testkits for repeated boundary mocks.
- Keep cross-repo primitives in
packages/tests/src/testkit. - Before adding a new helper or mock family, inspect the codebase for the existing canonical testkit/helper for that boundary.
- Prefer reusing, extending, generalizing, or extracting from canonical helpers over introducing similar-but-different variants.
- When a new canonical helper replaces older local variants, migrate or remove the overlapping variants instead of leaving parallel helper families behind.
- Be careful with repeat-offender boundaries: prefer canonical helpers over fresh inline mocks for UI boundaries such as
expo-router,@/text,@/modal,react-native, andreact-native-unistyles; prefer existing server route/DB harnesses over direct storage mocks when available. - For
apps/uitests, treatapps/ui/sources/dev/testkit/**as the default surface. Readapps/ui/sources/dev/testkit/README.mdfirst and prefer imports from@/dev/testkitfor mocks, fixtures, render helpers, hook helpers, and harnesses. - Do not add new inline
vi.mock(...)families forexpo-router,@/text,@/modal,react-native,react-native-unistyles, or@/sync/domains/state/storagewhen the UI testkit already owns that boundary. If a needed case is missing, extend the canonical UI testkit helper in the same change instead of inventing a file-local mock family. - If a one-off local UI override is truly unavoidable, keep it minimal, base it on the canonical factory where possible, and leave a short justification comment rather than turning it into a new reusable pattern.
- Prefer typed fixtures/builders from the owning testkit over repeated inline object literals whenever the same state/session/theme/config shape is reused across tests.
- Keep package-specific fixtures near the owning package:
- UI helpers in
apps/ui - CLI helpers in
apps/cli - server helpers in
apps/server
- UI helpers in
UI E2E Rules
- Use stable
testIDselectors, not visible copy, as the primary selector contract. - Click the real submit/confirm button after waiting for it to be enabled.
- Do not rely on Enter-to-send or similar settings-sensitive shortcuts unless the test explicitly configures the setting first.
- When a UI flow changes, update the corresponding Playwright spec in the same change.
Anti-Flake Process Rules
- Keep only one active rerun per spec/lane.
- If a runner hangs or is killed, inspect whether the failure is repo-owned, harness-owned, or environmental before retrying blindly.
- When shared process helpers change, rerun a broader lane that can reveal leaked handles or child-process cleanup regressions.
Output Expectations
When reporting testing work, summarize:
- failing area and classification
- root cause
- targeted RED/GREEN evidence
- broader lane rerun performed
- residual risk, if any
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
happier-session-control
Manage Happier sessions (list/status/send/wait/history/stop + execution runs) via the happier CLI JSON contract.
happier-session-control
Manage Happier sessions (list/status/send/wait/history/stop + execution runs) via the happier CLI JSON contract.
happier-github-ops
Run GitHub CLI commands as the Happier bot account via `yarn ghops` (forced PAT auth + non-interactive).
verl-rl-training
Provides guidance for training LLMs with reinforcement learning using verl (Volcano Engine RL). Use when implementing RLHF, GRPO, PPO, or other RL algorithms for LLM post-training at scale with flexible infrastructure backends.
openrlhf-training
High-performance RLHF framework with Ray+vLLM acceleration. Use for PPO, GRPO, RLOO, DPO training of large models (7B-70B+). Built on Ray, vLLM, ZeRO-3. 2× faster than DeepSpeedChat with distributed architecture and GPU resource sharing.
gguf-quantization
GGUF format and llama.cpp quantization for efficient CPU/GPU inference. Use when deploying models on consumer hardware, Apple Silicon, or when needing flexible quantization from 2-8 bit without GPU requirements.
Didn't find tool you were looking for?