Know Which Model Answered: A First-Hour Provenance Banner for Mobile AI Repos A developer outlined a first-hour onboarding harness for mobile AI repositories that makes model provenance visible: a Gradle verifyModelAssets task that fails the build when a bundled model asset is missing or its SHA-256 digest mismatches, a debug-only recorder that tags each inference response as Bundled, Remote, or Fixture, and a repeatable way to exercise the remote path deliberately. The proposed harness is meant to be run on the reader's own device rather than reporting measured results, and the banner is intended to stay out of release builds. You open the repo on your first morning, the README says "run the app, ask it something," and forty seconds later an answer appears on the phone. Nobody on the team can tell you whether that text came from the bundled on-device model, from a remote endpoint someone configured last quarter, or from a fixture left in a debug build. That uncertainty is not a small onboarding annoyance, because every later measurement you record inherits it. This post is a first-hour exercise for a junior engineer joining a mobile AI repo. The goal is not to ship a feature, and it is not to improve latency or accuracy; the goal is to make provenance visible, so that when you do open your first PR you already know which execution path you exercised. Everything below is a proposed harness that you run on your own device, not a report of numbers I measured on yours. In a normal backend repo you can read the config and know which database answered. In a mobile AI repo the same request can be served by three different things depending on build type, network state, and whether an asset survived the packaging step. If you skip this check, you will eventually write a careful benchmark, show it to your reviewer, and discover the phone was calling a cached response the whole time. The exercise below gives you three things you can rely on for the rest of onboarding: a build that fails loudly when the model asset is missing, a debug banner that names the source of the last response, and a repeatable way to exercise the remote path on purpose. Your banner only needs to name which of these produced the last result. It does not need to be pretty, and it should not ship in release builds. Before you touch any inference code, prove that the file you think is packaged actually is. Add a verification task to the app module and wire it into the check lifecycle. Substitute your own asset name and the checksum your team stores alongside the artifact. // app/build.gradle.kts proposed harness val modelDir = layout.projectDirectory.dir "src/main/assets/models" // Placeholder on purpose: copy the real digest from your artifact record. val expectedDigests = mapOf "classifier-small.tflite" to "