First child of T-89. Codifies "don't make coverage worse" as a durable pre-push contract before any test-writing children land. - pubspec.yaml: new `coverage_floor: 34` key. Single source of truth for the floor; ratchets up only. - ci/coverage_gate.sh: parses coverage/lcov.info (LH/LF), reads the floor from pubspec.yaml, exits non-zero if integer-truncated measured % drops below it. Self-contained awk parser — no `lcov` CLI dependency. - ci/test.sh: flutter test now runs with --coverage, so the gate reads fresh data without an extra test invocation. Wall time delta is small and stays inside the < 90 s pre-push budget (D-29). - Makefile: new `coverage-gate` target wires the script in; `push-check` adds it as a dependency. The .githooks/pre-push hook (already wired) picks this up automatically. - .gitignore: ignore /coverage/ wholesale; the floor lives in pubspec.yaml, nothing under coverage/ is committed. Decision recorded as D-66 (decisions/testing.md). End target is 95%; reaching it is tracked as the rest of T-89's children. Co-Authored-By: Claude <noreply@anthropic.com>
19 lines
576 B
Bash
Executable File
19 lines
576 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Fast test layer — analyze + format + unit + widget + golden.
|
|
# Runs in <60s on a warm cache. Called from `make test` and the
|
|
# pre-push hook.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
echo "==> flutter analyze"
|
|
flutter analyze --no-fatal-infos
|
|
|
|
echo "==> dart format (whole tree)"
|
|
dart format --set-exit-if-changed .
|
|
|
|
echo "==> dart test (forkpty — incompatible with flutter test runner)"
|
|
dart test --tags forkpty test/pty/session_test.dart
|
|
|
|
echo "==> flutter test --coverage (unit + widget + golden)"
|
|
flutter test --coverage --exclude-tags forkpty
|