happier-testing
Repo-specific TDD and test-validation workflow for Happier changes, with lane selection, fixture policy, and anti-flake guardrails.
Best use case
happier-testing is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Repo-specific TDD and test-validation workflow for Happier changes, with lane selection, fixture policy, and anti-flake guardrails.
Teams using happier-testing should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/happier-testing/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How happier-testing Compares
| Feature / Agent | happier-testing | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Repo-specific TDD and test-validation workflow for Happier changes, with lane selection, fixture policy, and anti-flake guardrails.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# 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 1. **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. 2. **Classify failures correctly** - `production bug`: runtime behavior is wrong - `test drift`: assertions/fixtures assume an obsolete contract - `harness drift`: helpers/mocks/testkit no longer match real runtime wiring - `infra/resource issue`: disk, Docker, stale child processes, or similar environment failures 3. **RED** - Write or update the smallest relevant test first. - Run only the smallest relevant slice and confirm it fails for the expected reason. 4. **GREEN** - Implement the smallest fix that satisfies the failing behavior. - Keep internal behavior real; mock only system boundaries. 5. **REFACTOR** - Extract shared helpers only when there is repeated real duplication or repeated stale drift. - Keep file responsibilities focused. 6. **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 test` - `yarn test:integration` - `yarn test:e2e:core:fast` - `yarn test:e2e:core:slow` - `yarn test:e2e:ui` - `yarn test:providers` - `yarn test:db-contract:docker` CLI lane rule: - `apps/cli` unit tests must not force a full CLI `dist` build. - Use the lane-specific global setup files: - `src/test-setup.unit.ts` - `src/test-setup.integration.ts` - `src/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`, and `react-native-unistyles`; prefer existing server route/DB harnesses over direct storage mocks when available. - For `apps/ui` tests, treat `apps/ui/sources/dev/testkit/**` as the default surface. Read `apps/ui/sources/dev/testkit/README.md` first and prefer imports from `@/dev/testkit` for mocks, fixtures, render helpers, hook helpers, and harnesses. - Do not add new inline `vi.mock(...)` families for `expo-router`, `@/text`, `@/modal`, `react-native`, `react-native-unistyles`, or `@/sync/domains/state/storage` when 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 E2E Rules - Use stable `testID` selectors, 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
Related Skills
happier-github-ops
Run GitHub CLI commands as the Happier bot account via `yarn ghops` (forced PAT auth + non-interactive).
happier-session-control
Manage Happier sessions (list/status/send/wait/history/stop + execution runs) via the happier CLI JSON contract.
swift-protocol-di-testing
基于协议的依赖注入,用于可测试的Swift代码——使用聚焦协议和Swift Testing模拟文件系统、网络和外部API。
perl-testing
使用Test2::V0、Test::More、prove runner、模拟、Devel::Cover覆盖率和TDD方法的Perl测试模式。
ai-regression-testing
AI辅助开发的回归测试策略。沙盒模式API测试,无需依赖数据库,自动化的缺陷检查工作流程,以及捕捉AI盲点的模式,其中同一模型编写和审查代码。
rust-testing
Rust testing patterns including unit tests, integration tests, async testing, property-based testing, mocking, and coverage. Follows TDD methodology.
kotlin-testing
Kotest, MockK, coroutine testi, property-based testing ve Kover coverage ile Kotlin test kalıpları. İdiomatic Kotlin uygulamalarıyla TDD metodolojisini takip eder.
cpp-testing
C++ テストの作成/更新/修正、GoogleTest/CTest の設定、失敗またはフレーキーなテストの診断、カバレッジ/サニタイザーの追加時にのみ使用します。
python-testing
Python testing best practices using pytest including fixtures, parametrization, mocking, coverage analysis, async testing, and test organization. Use when writing or improving Python tests.
golang-testing
Go testing best practices including table-driven tests, test helpers, benchmarking, race detection, coverage analysis, and integration testing patterns. Use when writing or improving Go tests.
e2e-testing
Playwright E2E testing patterns, Page Object Model, configuration, CI/CD integration, artifact management, and flaky test strategies.
k6-load-testing
Comprehensive k6 load testing skill for API, browser, and scalability testing. Write realistic load scenarios, analyze results, and integrate with CI/CD.