Problem / use case
The auto-scorer (camera assist, beta) ships its detection model bundled as an
app asset (assets/models/dart_auto_scorer.tflite, pinned via
kAutoScorerModelVersion). Today, improving only the model — no code change —
still requires a full app release and Google Play review. The review cycle is
slow and disproportionate for a payload that is data, not behaviour.
We want a way to ship an improved detection model to users out-of-band,
without going through a new Play release and its review, the way games stream
updated assets at launch.
Proposed solution
Scope a mechanism that lets the app fetch a newer auto-scorer model at runtime
and use it in place of the bundled one, while remaining safe and Play-compliant.
Goals / constraints to design around:
- A model swap must only take effect when it is compatible with the code the
installed app already runs (input size, class map, preprocessing, threshold
semantics). The currently-bundled model stays the fallback.
- Must degrade gracefully: offline, failed download, or any integrity failure →
keep using the bundled model, never break scoring.
- No change to what user data leaves the device (the download is an outbound
fetch of a data file; frame capture stays local and gated).
Alternatives considered
- Google "Play for On-device AI" (AI packs) — Google-hosted, free, with
differential patching, BUT AI packs are still versioned together with the app
binary, so they do not avoid a release/review for a model-only change.
Reduces download size, not the review cycle. Rejected for the stated goal.
- Status quo (bundle + full release per model) — what we do now; the cost
this ticket exists to remove.
Scope notes
- No persistence / game-events / statistics impact.
- Touches the auto-scorer detector loading path and app startup; needs network
(INTERNET) — verify it's already in the merged manifest.
- Compliance angle is already researched (see context): a
.tflite is data,
not executable code, so a runtime model download is permitted under Google
Play's Device and Network Abuse policy; no Data safety / privacy-policy change
as long as no user data is uploaded.
Before implementation
Do not treat any architecture as decided. Re-derive the design from current
code via /plan first, answering at least:
- Where/how the model is loaded today and where a remote source would slot in.
- How to express and enforce the compatibility contract between a remote model
and the installed app version (so an incompatible model is ignored, not run).
- Integrity / authenticity of the downloaded file, and the fallback chain.
- Hosting choice and its operational cost (versioning, bandwidth, availability).
- When this canal is not enough and a real release is still required (contract
changes: classes, input resolution, preprocessing).
Additional context
Compliance research (2026-06-27):
Feature is and stays beta (model still experimental).
Problem / use case
The auto-scorer (camera assist, beta) ships its detection model bundled as an
app asset (
assets/models/dart_auto_scorer.tflite, pinned viakAutoScorerModelVersion). Today, improving only the model — no code change —still requires a full app release and Google Play review. The review cycle is
slow and disproportionate for a payload that is data, not behaviour.
We want a way to ship an improved detection model to users out-of-band,
without going through a new Play release and its review, the way games stream
updated assets at launch.
Proposed solution
Scope a mechanism that lets the app fetch a newer auto-scorer model at runtime
and use it in place of the bundled one, while remaining safe and Play-compliant.
Goals / constraints to design around:
installed app already runs (input size, class map, preprocessing, threshold
semantics). The currently-bundled model stays the fallback.
keep using the bundled model, never break scoring.
fetch of a data file; frame capture stays local and gated).
Alternatives considered
differential patching, BUT AI packs are still versioned together with the app
binary, so they do not avoid a release/review for a model-only change.
Reduces download size, not the review cycle. Rejected for the stated goal.
this ticket exists to remove.
Scope notes
(
INTERNET) — verify it's already in the merged manifest..tfliteis data,not executable code, so a runtime model download is permitted under Google
Play's Device and Network Abuse policy; no Data safety / privacy-policy change
as long as no user data is uploaded.
Before implementation
Do not treat any architecture as decided. Re-derive the design from current
code via
/planfirst, answering at least:and the installed app version (so an incompatible model is ignored, not run).
changes: classes, input resolution, preprocessing).
Additional context
Compliance research (2026-06-27):
Feature is and stays beta (model still experimental).