# Cadence app audit — executive summary for Serge

## What was audited and how

The audit examined the Flutter source, timer engine, persistence, alarms and audio, tablet interface, Android and iOS packaging, privacy and permissions, tests, store requirements, competitors, naming, pricing and launch plan. It used read-only source inspection, clean builds, analyzer and test runs, coverage and mutation checks, focused failure probes, rendered store searches, official policy pages and independent challenge passes; the audited app remained unchanged at commit `03a176e72ef0075eec86b8915cbe6e93042a3b9d`, version `0.4.12+18` (`REPORT.md`, `proof/00_baseline/SUMMARY.md`).

## Verdict

**The app is a credible professional kitchen-timer product, but this build is not safe to submit or rely on during service yet.** The core does not need a rewrite: fix the five shipping failures below, finish the store setup, and verify the result on real Android and Apple tablets (`REPORT.md` sections `1`, `3` and `6`).

## Findings by severity

| Severity | Count |
|---|---:|
| Blocker | **8** |
| High | **49** |
| Medium | **117** |
| Low | **48** |
| Information only | **4** |

These are the recounted final severities, including challenged or refuted rows retained to prevent the same false leads from returning; the older summary inside `findings/REGISTER.md` is stale (`REPORT.md` section `1`, audited 2026-08-04).

## The five things that block shipping

1. The Android release is signed with Flutter's debug certificate, so release signing must be fixed in `android/app/build.gradle.kts` (`REPORT.md` B1).

2. The iOS alarm safety net never initialises, so timers cannot dependably alert outside the open app until `lib/alarm_backstop.dart` and its iOS resources are fixed (`REPORT.md` B2).

3. Every one of the **15** App Store icon files is still a stock Flutter logo because iOS icon generation is disabled in `pubspec.yaml` (`REPORT.md` B3, evidence dated 2026-08-04).

4. The zone-to-sound migration can replace a kitchen's chosen alarm tones when it runs again, so the migration in `lib/engine/store.dart` must become atomic and repeat-safe (`REPORT.md` B4).

5. Moving the device clock backward can keep active timers silent for the size of that clock change, so duration tracking in `lib/engine/engine.dart` must use a suspend-aware monotonic clock (`REPORT.md` B5).

## Decisions waiting on a human

- **Name — REQUIRES SERGE / HUMAN REVIEW:** do not adopt **ChronoCook**; reopen naming for a new distinctive root paired with **Kitchen Timer**. `chronocook.com` already runs an exact-name cooking-software product, and `PassPilot Kitchen Timer` was rejected by the owner on 2026-08-04 (`research/05_name_chronocook.md` and `research/03_business_decisions.md`, evidence retrieved 2026-08-04).
- **Final name clearance:** the UK trademark search was blocked, public searches cannot see unpublished App Store reservations, and the final choice must be typed into App Store Connect's **New App** field before branding work starts (`research/03_business_decisions.md` Decision 1).
- **Account holder:** the free launch should use individual store accounts, but the project owner and Serge must choose whose verified legal identity owns each account and record their ownership arrangement (`research/03_business_decisions.md` Decision 2).
- **EU trader status:** the account holder must resolve trader or non-trader treatment for the EU listings; free price alone does not answer that question, and trader status can make contact details public on either store (`research/03_business_decisions.md` Decision 2).
- **Permanent bundle identifier:** choose it only after the name and domain are approved, and before uploading any build (`research/03_business_decisions.md`, Bundle identifier dependency).

the project owner has already settled two other decisions: launch free with no advertising or paywall, and launch the French and English listings together in France, the United Kingdom, the United States, India, Canada, Australia and Ireland (`research/03_business_decisions.md` Decisions 3–4, revised 2026-08-04).

## What is already good

The timer engine is not a prototype held together by the interface: `lib/engine/engine.dart` has **94.47%** line coverage and the persistence engine has **94.40%** (`proof/00_baseline/coverage.txt`, produced 2026-08-04). The analyzer is clean, and the baseline test suite completed without a failure (`proof/00_baseline/SUMMARY.md`, produced 2026-08-04).

The requested permissions all have direct product reasons: alarms, notifications, audio, vibration and keeping the kitchen display awake (`store_readiness/01_google_play.md`; `store_readiness/02_apple_app_store.md`). Most importantly, the app requests no internet permission and contains no network layer, so restaurant data does not leave the tablet through the app; that is a real privacy and reliability selling point, not marketing language (`proof/01_findings/S13/network_grep_lib.txt`; `REPORT.md` S10-F14).

The product idea is also differentiated. It puts several cooking timers on one board, uses colour and spoken announcements, and supports repeated batches without accounts, servers, advertising or checkout code (`findings/S10_product.md`; `aso/01_competitors.md`).

## Where to go next

Start with `ACTION_LIST.md`, which turns the audit into an ordered repair sequence. Use `REPORT.md` for the exact fix and red/green test behind each finding, `store_readiness/01_google_play.md` and `store_readiness/02_apple_app_store.md` for submission work, `research/03_business_decisions.md` for the decisions above, and `aso/` for the French and English listings after the final name is chosen.
