Add a "Definition of done" section to CLAUDE.md: a change is not complete until it ships with passing unit tests and E2E/instrumented tests that exercise the new or changed behaviour.
The E2E test must actually run and pass, not merely compile: preflight now runs the latest-API-level emulator E2E locally — api36DebugAndroidTest, the highest API level in the E2E matrix and its Gradle Managed Device task — and it must be green before the change is done. The full multi-API matrix (and the API 37 preview job) stays CI's job.
Update the /preflight skill (.claude/skills/preflight/SKILL.md) to match: add api36DebugAndroidTest as the final gate step, note the emulator/managed-device precondition, and replace the old "don't run E2E locally" guidance so CLAUDE.md and the skill stay consistent.
Test plan
Docs/skill-only change; no Gradle build needed.
Verified CLAUDE.md and the preflight skill agree (same api36DebugAndroidTest task, same "latest-API local / full matrix on CI" split) with no contradiction.
Confirmed api36 is the highest API level in both the Gradle Managed Device list (app/build.gradle.kts) and the CI E2E matrix (.github/workflows/ci.yml); API 37 is the CI-only preview job.
## Summary
- Add a "Definition of done" section to `CLAUDE.md`: a change is not complete until it ships with passing **unit tests** and **E2E/instrumented tests** that exercise the new or changed behaviour.
- The E2E test must actually **run and pass**, not merely compile: preflight now runs the latest-API-level emulator E2E locally — `api36DebugAndroidTest`, the highest API level in the E2E matrix and its Gradle Managed Device task — and it must be green before the change is done. The full multi-API matrix (and the API 37 preview job) stays CI's job.
- Update the `/preflight` skill (`.claude/skills/preflight/SKILL.md`) to match: add `api36DebugAndroidTest` as the final gate step, note the emulator/managed-device precondition, and replace the old "don't run E2E locally" guidance so `CLAUDE.md` and the skill stay consistent.
## Test plan
- [x] Docs/skill-only change; no Gradle build needed.
- [x] Verified `CLAUDE.md` and the preflight skill agree (same `api36DebugAndroidTest` task, same "latest-API local / full matrix on CI" split) with no contradiction.
- [x] Confirmed `api36` is the highest API level in both the Gradle Managed Device list (`app/build.gradle.kts`) and the CI E2E matrix (`.github/workflows/ci.yml`); API 37 is the CI-only preview job.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
CLAUDE.md: a change is not complete until it ships with passing unit tests and E2E/instrumented tests that exercise the new or changed behaviour.api36DebugAndroidTest, the highest API level in the E2E matrix and its Gradle Managed Device task — and it must be green before the change is done. The full multi-API matrix (and the API 37 preview job) stays CI's job./preflightskill (.claude/skills/preflight/SKILL.md) to match: addapi36DebugAndroidTestas the final gate step, note the emulator/managed-device precondition, and replace the old "don't run E2E locally" guidance soCLAUDE.mdand the skill stay consistent.Test plan
CLAUDE.mdand the preflight skill agree (sameapi36DebugAndroidTesttask, same "latest-API local / full matrix on CI" split) with no contradiction.api36is the highest API level in both the Gradle Managed Device list (app/build.gradle.kts) and the CI E2E matrix (.github/workflows/ci.yml); API 37 is the CI-only preview job.🤖 Generated with Claude Code