{
  "app": "Fotlas",
  "version": "0.4.4",
  "build": 30,
  "date": "2026-10-31",
  "platform": "Android",
  "minimumAndroid": "10",
  "architecture": "arm64-v8a",
  "type": "release-preview",
  "sizeBytes": 61347464,
  "sha256": "bc58681d0fc247b6fc54c11bad024cb03bb39fe8ade49df8a5cef8d638790542",
  "download": "downloads/Fotlas-0.4.4-android-arm64.apk",
  "validation": {
    "flutterAnalyze": "passed",
    "testsPassed": 156,
    "device": "Android API 36 ARM64 emulator",
    "physicalDevice": "not yet verified",
    "largeLibrary": "Fresh Android emulator scan: 10174 synthetic records, 23378 ms, zero errors. This is a scanner check; no claim for whole-year AI speed or Samsung S24 Ultra.",
    "photoMap": "General atlas/manual zoom and visit mode have no photo lines. Only an explicitly selected single day renders approximate routes/arrows. Native Android test verifies day arrows, visit with six scoped photos and sharing selection, free camera pan/zoom without routes, preserved thumbnails and north-up/3D gestures.",
    "photoViewer": "Scoped All photos grid; direct selection; private images stay in owner album and are excluded from sharing",
    "placeAlbums": "Country boundaries with manual overrides; years, months, unknown dates, scoped map and inferred route breaks",
    "photoPrivacy": "Persistent independent private/hidden states; Android consent for original deletion; cancellation and hide Undo",
    "cloudAccounts": "Real email-code sign-in from Android, registration and returning-user login on web",
    "cloudPreviews": "Fotlas storage gateway with private EU R2 previews and legacy Supabase reads. 28 server/web tests, 26 PostgreSQL policy checks and Android native JPEG/privacy checks passed. Real R2 synthetic upload/read/retry, owner isolation, shared delivery and revocation verified.",
    "statistics": "Observed and inferred days are separate. Same single-country evidence up to 7 calendar days apart fills intermediate dates; other/unknown/mixed-country days and longer gaps break inference. No extrapolation beyond evidence. Private included locally; hidden/demo excluded.",
    "calendar": "Year/month calendar; exact-day photo browsing; individual dates or ranges up to 366 days; chronological local stories contain only actual selected-date photos. Unknown dates remain outside calendar.",
    "identity": "Approved serif F with coral continental globe; shared vector paths for Android adaptive launcher, Flutter marks and website SVGs. Native screenshots inspected.",
    "collection": "Dark Collection/Refine with consistent navigation; native search, selected-photo opening and retained filter on return passed. City caption falls back to locally identified country; unresolved GPS uses Location on map. No new network geocoding.",
    "tripSharing": "Native review and preview generation tested on Android; real owner-authenticated cloud uploads/publication verified with disposable demo accounts. Anonymous HTTPS timeline/map/OG/images, selected snapshot, RLS isolation, Private changes, no-store delivery and link revocation tested. 13 website/server tests and 22 database policy tests pass. Shared web maps also require one selected day for routes.",
    "placeVisits": "Country-boundary index and at most seven-day photo gaps infer a visit; other/unknown-country evidence and longer gaps split it. Year boundary alone does not split a stay. Unknown-country fallback uses 80 km around anchor. Share action opens existing consent review; it never publishes automatically.",
    "storyEditor": "Editable title/subtitle, selected/other photo grids, chosen cover, local account-scoped drafts, explicit review/publish. Native Android synthetic-photo UI and privacy tests passed.",
    "aiTitles": "Real OpenRouter Gemini 3.1 Flash-Lite via Supabase; English text facts only, explicit consent, ZDR/no-training routing, cached result, bounded retry, conservative $5 reservation cap. Exact France album dates/counts tested; no personal album published.",
    "storyPublication": "33 web/server tests and 29 database checks. Real synthetic HTTPS/R2 publication verified selected cover, chronological ordering, title/subtitle, OG, Private invalidation and revocation.",
    "localTrips": "Missing GPS between matching anchors no longer splits visits; nearby unclassified island coordinates cluster approximately without inventing a country. Entirely unlocated days remain in Collection. Manual edits and day-only routes preserved.",
    "aiPhotoSelection": "E01 revision 2 full-album curation: individual content checks, independent clutter audits, two-image series comparisons, reversed confirmation on label disagreement, direct representative proofs and composition ranking. Authenticated Gemini 3 Flash Preview with ZDR/no-training, <=640 px plus label, <=120 KB each, at most two previews per request. Editable manual overrides, Private native checks and unchanged $5 app cap. 304-photo offline replay matches frozen France/UK decisions; 42 server/web tests and 32 database checks pass. Real synthetic endpoint/cache/auth smoke passed.",
    "yearAiFilter": "Selected year or single trip; all accessible non-private photos, account/scope/version checkpoints after every completed request, pause/resume, existing selections retained until completion. Native Android 8-fixture year workflow and 640 px/EXIF/Private tests passed. Larger years can hit budget/daily limits. Physical-device quality and duration remain unverified."
  },
  "signing": "Existing preview certificate; compatible with prior test APKs"
}
