Skip to content

Keryx go-to-market roadmap

Last audited: 29 August 2026

This document is the source of truth for taking Keryx from a working SafeCall companion application to a publicly distributed, supportable first-party notification client for SafeCall administrators on iPhone/iPad and Android. Execution status belongs in GitLab; this roadmap owns the rationale, dependencies, launch gates, and accepted risks.

The roadmap is planning only. It does not claim that a store record, production signing setup, privacy page, push service, or listed remediation already exists.

Scope

  • Public Apple App Store distribution for iPhone and iPad.
  • Public Google Play distribution for Android phones and tablets.
  • Initial public availability in the Czech Republic only, with complete English and Czech app, administrator, listing, asset, and support parity.
  • Keryx as an included, administrator-only companion to a separately contracted SafeCall deployment, not an independently marketed product.
  • A SafeCall administrator/operator selects friendly alert categories, scans a SafeCall-generated QR code on their own device, and receives notifications without manually configuring a server, subscription, or topic.
  • Keryx as the SafeCall-branded replacement for asking administrators to install and configure the generic ntfy app. ntfy remains an implementation detail in normal SafeCall and Keryx flows.
  • The SafeCall administrator QR flow, customer notification infrastructure, support process, and public web surfaces required for a client to install and operate the app.
  • Public store listings as a SafeCall client installation channel, not a standalone demand-generation or self-service acquisition channel.
  • First release, routine updates, urgent fixes, deprecation, and end of life.

Out of scope:

  • Shipping Keryx for macOS, Windows, Linux, or web. Those Flutter scaffold directories do not make them supported products.
  • Implementing the gaps listed here.
  • Submitting a binary or changing a production ntfy, Apple, or Google account.
  • Creating a standalone Keryx market, SKU, lead-generation campaign, or consumer acquisition motion.
  • Requiring ordinary administrators to understand or manually enter ntfy server URLs, topic names, subscriptions, or other transport configuration.
  • Treating Keryx as a certified emergency service or regulated medical device without an explicit legal and regulatory decision.
DocumentRole
Keryx adoption strategyInstalled-base adoption, SafeCall-led positioning, enablement, and measures
Keryx QR and ntfy threat modelP1-01 abuse cases, ratings, and treatment handoffs for QR and topic access
Authenticated provisioning protocolP1-02 HTTPS-only, per-QR subscribe tokens, publish token, and v2 QR
Android delivery architectureP1-03 FCM poll_request + authenticated poll; perpetual dataSync FGS deprecated
iOS APNs delivery architectureP1-04 client-ntfy token registration; upstream APNs poll_request for iOS bundle com.sourcectl.keryxapp
Data classification and local storageP1-05 inventory, SharedPreferences + full lock-screen launch policy, retention/offboarding
Legal drafts (privacy, terms, support)P1-06 DRAFT policies and planned {public_base}/keryx/* URL paths; not yet live
Apple privacy complianceP1-07 manifests, purpose strings, nutrition-label draft, HTTPS-only export answer
Play Data SafetyP1-08 Data Safety draft, permissions, FGS posture, app-content checklist, reviewer-access plan
Dependency ownershipP1-09 direct-dep inventory, vendored ntfy ownership, privacy-manifest checklist, advisory cadence
Safety claimsP1-10 supplemental posture, delivery limits, no Critical Alerts at launch, prohibited claims
Visual identityP2-01 mark, wordmark rules, palette, asset inventory, store kit gaps
Store listing copyP2-02 bilingual Apple/Google fields, reviewer notes, release-note templates
Store screenshot kitP2-03 device matrix, shot list, sample data, capture/redaction checklist, captions
Public web pagesP2-04 URL map, landing copy, deployment/monitoring/a11y checklists
Keryx applicationCurrent behavior, QR contract, and delivery model
Operator actionsHuman/portal/secret-store checklist; bulk verification; GitLab close bars
Publishing KeryxRepeatable release, update, and emergency-release runbook
Mobile overviewSafeCall mobile product index
GitLab issue workflowSafeCall issue API and commit conventions
Manual testingExisting SafeCall UI test checklist
Bug collectorExisting field issue intake

GitLab tracking

ResourceLink
Parent work item#81 — Keryx public App Store and Google Play launch
MilestoneKeryx public launch
P0 — Product and governance#82
P1 — Trust, security, privacy, and delivery#83
P2 — Brand, client enablement, and store content#84
P3 — Build, signing, and release engineering#85
P4 — Product and client readiness#86
P5 — Store submission and launch#87
P6 — Updates and post-launch operations#88

All actionable work items use gtm, product::keryx, one phase::pN, one type::*, and exactly one open workflow::* label. The priority::launch-blocker label means that the public launch cannot pass its go/no-go review until the item is closed or its risk is explicitly accepted in this document.

Status vocabulary

  • Ready — implemented and supported by current evidence.
  • Partial — a useful implementation or document exists, but an exit criterion is not met.
  • Missing — no production-ready artifact or process was found.
  • Decision required — implementation should not start until the product owner records a choice.
  • Externally owned — completion depends on an account, counsel, store, client, or service outside this repository.
  • Accepted risk — the product owner has recorded the risk, rationale, owner, and review date.
  • Deferred — intentionally excluded from this launch with a linked work item or written rationale.

Executive audit verdict

Keryx has a credible product core: QR provisioning, local notification history, Active/Archive UX, Android boot recovery, iOS push hooks, and an admin QR flow covered by web E2E tests. It also has a source icon and an initial publishing checklist.

The product model is fixed: Keryx is SafeCall's administrator-only, branded replacement for the generic ntfy client. SafeCall must present friendly alert categories and generate all transport configuration in the QR; the administrator scans it on their own device and should not need to know that ntfy topics or subscriptions exist. The current implementation only partially matches that target: the provisioning card is named Ntfy Notifications, setup is described in terms of topics, and some documentation models a separate administrator-to-end-user handoff.

It is not ready for public stores. The most important unresolved points are:

  1. Android release builds still use the debug signing configuration.
  2. Android no longer uses a perpetual dataSync FGS. Killed-state delivery is FCM wake + authenticated poll. Deployer Firebase / notify-host firebase-key-file (#119), Play form paste, and physical-device evidence (#117) remain open.
  3. iOS hands the APNs token to Firebase Messaging and subscribes to FCM topics (not /v1/account/device). Production entitlement (#110) is proven on store IPAs. Deployer Firebase + APNs .p8 (#119) and physical-device evidence (#117) remain open. Do not use upstream-base-url: https://ntfy.sh for Keryx.
  4. Provisioning currently accepts HTTP and carries no ntfy credential. Topic names derived from a server ID are not an authorization boundary.
  5. Alert bodies, topic names, device names, and MAC addresses can be stored locally and shown on the lock screen. P1-05 classifies those flows and approves SharedPreferences plus full lock-screen preview for launch with mandatory disclosure; privacy pages and store forms (#99–#101) must match. Existing “no personal data” wording still cannot be reused without that disclosure work.
  6. Public privacy, support, terms, listing metadata, review access, screenshots, and SafeCall client install pages are missing or placeholders. P1-06 provides DRAFT English source and planned URL paths in docs/gtm/keryx/legal/; live HTTPS publication and bilingual pages remain #107/#108.
  7. There is no Keryx release pipeline, release evidence record, CI gate, integration suite, client pilot gate, or supported update/hotfix process.
  8. P0-01 approves sourcectl as publisher and Keryx for SafeCall as the public name under the Wantok/SafeCall hierarchy, but the current lowercase launcher labels, SafeCall Flutter title, website, legal, account, and store surfaces have not yet been propagated or verified.
  9. Administrator-facing provisioning terminology and guidance still expose ntfy/topics and a generic end-user model instead of the intended friendly category, scan-on-own-device workflow.

Current baseline

AreaStateEvidence and consequence
Product roleReadyKeryx is fixed as SafeCall's administrator-only, first-party replacement for the generic ntfy client; it is not a standalone offer or acquisition channel
Product identityPartialP0-01 approves sourcectl as publisher, Keryx for SafeCall as the store/in-app name, Keryx as the launcher label, Android com.sourcectl.keryx / iOS com.sourcectl.keryxapp (29 August 2026 amendment), and the wider hierarchy; current platform, website, legal, account, and store surfaces still require propagation and verification
Platform supportPartialP0-04 approves iOS/iPadOS 17+, Android 12/API 31+, phone/tablet orientations, Android OEM tiers, camera requirement, non-target platforms, and exception/stop policy; source still permits iOS 13/Android API 24 and no physical support matrix has passed
VersionPartialkeryx/pubspec.yaml is 1.0.0+3; P3-05 (#113) — versioning.md + keryx/CHANGELOG.md; no store tag history yet
Core UXPartialQR onboarding, Active/Archive, detail, pause/resume, rescan, reset, and badges are implemented, but unconfigured guidance assumes a separate end user and must be aligned to the administrator-only persona
Administrator provisioningPartialSafeCall generates a versioned QR and has E2E coverage, but the Ntfy Notifications card and topic-oriented setup expose implementation concepts; friendly categories, security, lifecycle, guidance, and Czech strings are incomplete
Android deliveryPartialP1-03 FCM wake + authenticated poll is in code; no perpetual FGS (android-delivery-architecture.md). #119 Firebase/firebase-key-file, Play form paste, and #117 evidence remain open
iOS deliveryPartialP1-04 Firebase-for-Keryx topic subscribe is in code (ios-delivery-architecture.md, ntfy-fcm-apns.md). #110 entitlement is proven. #119 Firebase/APNs host config and #117 evidence remain open
Android signingDoneP3-01 (#109) — android-signing.md; Play App Signing enrolled 30 August 2026; MiniVan recovery matched
iOS distributionDoneP3-02 (#110) — ios-signing.md; App ID com.sourcectl.keryxapp; GLaDOS and MiniVan-3 signed IPAs verified; ASC app Keryx for SafeCall CZ-only; .p12 backup on NAS (1 September 2026)
Privacy manifestsPartialP1-07 packet (apple-privacy-compliance.md) approves UserDefaults reason CA92.1, purpose strings, nutrition/encryption answers, and privacy-link plan; P1-09 (dependency-ownership.md) inventories SDK/manifest coverage; source manifests, signed Xcode report, and ASC submission remain open (#110/#125)
Automated testsPartialThree Dart test files and web provisioning E2E exist; no native, integration, upgrade, or delivery-soak automation exists
Release automationMissingRoot scripts analyze/test Keryx and build only an AAB; the existing mobile release pipeline belongs to SafeCall Nav
Store metadataMissingP0-02 approves Czech-only availability and classification; P0-03 approves the free-companion, QR-configuration, payment-free, reviewer, and installation-only MDM facts, but final bilingual copy, screenshots, forms, URLs, and reviewer access are absent
Legal and supportPartialP0-02/P0-05 ownership and support class are set; P1-06 DRAFT privacy/terms/support texts and planned URL paths exist in legal/; live HTTPS pages, counsel review, public contacts verification, and app/store wiring remain open (#107/#100/#101/#125)
LocalizationMissingP0-02 requires complete English/Czech launch parity and makes Czech blocking; Keryx UI is hard-coded English, most SafeCall provisioning copy is hard-coded English, and Keryx-specific Czech catalog entries are incomplete
AccessibilityMissingP0-04 approves a launch-blocking WCAG 2.2 AA, VoiceOver/TalkBack, 200% text, contrast, focus, target-size, reduced-motion, orientation, and permission-recovery baseline, but no implementation audit, automated coverage, or physical-device acceptance evidence exists
Client enablementMissingP0-03 approves reviewer/listing/sales/support facts, but final SafeCall client installation/support material, administrator migration guidance from the generic ntfy app, MDM prerequisites, and required store links are absent; an independent Keryx marketing campaign is intentionally out of scope
Update lifecyclePartialP3-05 (#113) approves version/tag/changelog/QR/downgrade policy (versioning.md); full EOL matrix (#130), release train, and renewal calendar remain open

Current store-policy baseline

Store rules change. Every submission issue must re-check the official source on the day it starts.

  • Apple requires iPhone/iPad submissions from 28 April 2026 to use Xcode 26 and the iOS/iPadOS 26 SDK or later: Apple submission requirements.
  • Apple requires complete privacy details, a working privacy policy link in metadata and in the app, and responsibility for third-party SDK behavior: App Review Guidelines.
  • Apple review must receive full access. For Keryx, that means a durable sample QR, reachable test ntfy service, test messages, and review notes.
  • Apple privacy-impacting SDK and required-reason API requirements include Flutter and several Flutter plugins used by Keryx: third-party SDK requirements.
  • From 31 August 2026, new Google Play apps and updates must target Android 16 / API level 36: target API requirements.
  • Native Android dependencies in the release AAB must support 16 KB page-size devices: 16 KB page-size guidance.
  • Google requires a Data Safety form for testing and production tracks and holds the developer responsible for third-party code: Data Safety.
  • Android 14+ foreground services require an accurate service type and Play declaration. A perpetual network listener does not automatically qualify as dataSync: foreground-service requirements.
  • Android 15+ applies an aggregate six-hour timeout to dataSync foreground services in a 24-hour period and imposes background/boot-start restrictions: foreground-service timeouts.
  • Google review access that uses a QR code must include durable instructions and a static URL for the QR: review access requirements.

Decision gates

Fixed decisions below are constraints, not fields to reopen during implementation. Closing the matching P0 work item must replace each remaining TBD with a dated decision and named owner.

DecisionCurrent valueWhy it blocks work
Product role and app audienceFixed: administrator-only SafeCall companion; not independently marketedAll UX, listing, support, and adoption work must preserve this boundary
Provisioning experienceFixed: friendly SafeCall alert categories plus scan-on-own-device QR; ntfy/topic configuration hiddenAdmin UI, QR tests, screenshots, and guides must not require transport knowledge
Legal publisher and store-account ownerApproved 13 August 2026: sourcectl is the legal publisher, seller/copyright identity, and intended owner of both store accounts; P3 verifies the actual account records, roles, and registered detailsControls contracts, store identity, privacy controller, support, and signing custody
Public product name and casingApproved 13 August 2026: Keryx for SafeCall in stores and in-app, Keryx for iOS/Android launcher labels, Copyright © 2026 sourcectl. Identifiers amended 29 August 2026: Android/Play com.sourcectl.keryx; iOS/App Store com.sourcectl.keryxapp (Apple would not release the original iOS App ID, case 102915938031)Controls bundle metadata, screenshots, web copy, review notes, and support language
Relationship to SafeCall / AlertHub / BleuVistaApproved 13 August 2026: sourcectl publishes; Wantok is the product umbrella; SafeCall is the contracted platform; Keryx for SafeCall is its administrator companion; BleuVista is a separate market-facing portfolio/channel; AlertHub is its SafeCall-powered emergency-alerting solution and does not own Keryx; NavBeacon remains separateFinal brand architecture must explain the wider portfolio without presenting Keryx as standalone
Commercial modelApproved 13 August 2026: free companion for administrators of a separately contracted SafeCall physical/building deployment; no Keryx account, checkout, subscription, paid SKU, in-app purchase, external purchase link, or purchase call to action; QR configures connectivity and selected alert categories rather than purchasing/licensing/unlocking paid digital contentReviewer, listing, sales, support, and onboarding copy must preserve the same facts
Public distribution and MDMApproved 13 August 2026: the public App Store/Google Play binary may be assigned or installed through Apple Business Manager/standard MDM or managed Google Play; interactive permissions and SafeCall-generated QR provisioning remain required; no managed app configuration, injected credentials, deep-link provisioning, zero-touch setup, custom/private binary, or silent configuration is supported at launchPrevents installation support from being mistaken for managed-device configuration or validated restrictive-profile compatibility
Initial countries/regionsApproved 13 August 2026: Czech Republic only on Apple App Store and Google PlayControls legal review, availability, content rating, and localization
Initial app/store languagesApproved 13 August 2026: English primary/default plus complete Czech localization across app, SafeCall provisioning, listings, screenshots, release notes, permission/help copy, and install/support material; missing Czech parity blocks launchControls app localization and listing asset production
Apple category and medical-device answerApproved 13 August 2026: Business, no Health & Fitness or Medical category, adult administrator audience, not in Kids, expected questionnaire result 4+, no health functionality, and not a regulated medical deviceFinal questionnaire answers and P1-10 safety claims must remain consistent with this classification
Android category and target audienceApproved 13 August 2026: Business, target age 18+ only, not designed for children or Families, expected IARC result Everyone, no health functionality, and not a medical deviceFinal Play forms, tested behavior, and public policies must remain consistent with this classification
Minimum iOS/iPadOS and Android versionsApproved 13 August 2026: iOS/iPadOS 17+ and Android 12/API 31+ on Google Play-certified devices; test iOS/iPadOS 17, 18, 26 and Android 12/12L through 16/API 31–36; target/compile API 36; verify 16 KB native-page supportCurrent source floors of iOS 13/API 24 must not be treated as support promises and must be aligned before release
Supported device/OEM matrixApproved 13 August 2026: iPhone/iPad and Android phone/tablet with the approved orientations and functioning camera; Tier 1 Pixel/AOSP and Samsung; Tier 2 model-specific Xiaomi/Redmi/POCO, Motorola/Lenovo, OnePlus/Oppo/Realme after evidence; all others unsupported until qualifiedBackground reliability, managed-device policy, and battery exceptions require physical-device evidence
Accessibility and permission recoveryApproved 13 August 2026: launch-blocking WCAG 2.2 AA critical flows, VoiceOver/TalkBack, English/Czech 200% text, 4.5:1 normal and 3:1 large/UI contrast, 44 pt/48 dp targets, logical visible focus, reduced motion, supported orientations, and camera/notification Settings recovery without dead endsP4-02 must prove the app meets this baseline before any conformance/support claim
Launch owner and go/no-go authorityApproved 25 August 2026: Thomas Minitsios is go/no-go authority and backup; he is Responsible and Accountable across product, app, SafeCall, ntfy/push, security/privacy, legal, stores, content, support, and incidents; single-person concentration is a named risk reviewed at P3-06/#114 and the first P5 go/no-goA release must have one accountable decision maker
Target beta and production datesApproved 25 August 2026: no invented calendar dates; no beta or production date until remaining P1–P4 priority::launch-blocker items are closed or explicitly accepted; the Keryx public launch milestone stays datelessPrevents premature store dates while preserving a measurable target policy
Support mailbox, hours, and response targetApproved 25 August 2026: Keryx uses the existing SafeCall support channel; Czech business hours Mon–Fri CET/CEST; next-business-day first response; same-business-day acknowledgment of supported-tier core-path incidents by the go/no-go owner; no standalone Keryx mailbox, public status page, 24/7 desk, or emergency-dispatch SLA; actual contacts remain in controlled recordsRequired for store metadata and client expectations
Telemetry postureApproved 25 August 2026: no analytics or crash SDK at launch; no administrator identifiers in this repository; field diagnosis is client-reported until P6-05/#132 approves minimum signalsBalances privacy claims with incident diagnosis without inventing collection

Phase status and dependency flow

PhaseNameStatusExit summary
P0Product and governance decisionsReadyFixed companion positioning preserved; publisher, markets, support, ownership, dates, telemetry, and launch bar approved
P1Trust, security, privacy, and deliveryIn progressDelivery architectures and disclosures are lawful, secure, testable, and supportable
P2Brand, client enablement, and store contentNot startedApproved SafeCall relationship, install/support pages, listing copy, and localized asset packet complete
P3Build, signing, and release engineeringNot startedReproducible production-signed AAB/IPA and release evidence process proven
P4Product and client readinessNot startedTest matrix, client prerequisites, guides, pilot, and operational handoff pass
P5Store submission and launchNot startedBoth stores approve; controlled rollout and launch sign-off complete
P6Updates and post-launch operationsNot startedRoutine and emergency lifecycle is owned, exercised, and measured
mermaid
flowchart LR
  P0[P0_Product_Governance]
  P1[P1_Trust_Delivery]
  P2[P2_Brand_Content]
  P3[P3_Build_Release]
  P4[P4_Client_Readiness]
  P5[P5_Store_Launch]
  P6[P6_Post_Launch]

  P0 --> P1
  P0 --> P2
  P0 --> P3
  P1 --> P4
  P2 --> P5
  P3 --> P4
  P4 --> P5
  P5 --> P6

P1 architecture research and P2 creative discovery may run in parallel after P0 decisions. Production store submission cannot begin until P1 through P4 have passed their exit gates.

P0 — Product and governance decisions

Goal: establish who is publishing what, for whom, where, under which promises, and who can authorize release.

IDStateWork itemExit criterion
P0-01Ready#89 — Confirm publisher, brand hierarchy, and product nameDated decision names legal publisher, store-account owner, public app name/casing, and corporate hierarchy while preserving Keryx as a subordinate SafeCall companion
P0-02Ready#90 — Define launch markets, languages, and store categoriesCountries, app/store locales, category, age rating, target audience, and medical-device answer are approved
P0-03Ready#91 — Define public distribution and commercial review narrativeStore-review explanation confirms an included administrator-only SafeCall companion, contracted deployment, QR-hidden transport configuration, no independent sale, and no in-app digital purchase
P0-04Ready#92 — Set supported OS, device, OEM, and accessibility baselineMinimum OS versions, phone/tablet support, Android OEM tiers, assistive technologies, and exception policy are written
P0-05Ready#93 — Assign launch owners, target, support model, and go/no-go authorityRACI, support mailbox/hours/response target, beta and production targets, escalation contacts, and one go/no-go owner are recorded

P0-01 identity decision — 13 August 2026

  • Status: approved.
  • Owner and approver: Thomas Minitsios.
  • Publisher and accounts: sourcectl is the legal publisher, seller/copyright identity, and intended owner of both the Apple and Google store accounts. Use Copyright © 2026 sourcectl where a full copyright line is required. P3 must still verify the real account records, registered details, roles, custody, and recovery; the bundle namespace is not evidence that those external controls already exist.
  • Names and metadata: use Keryx for SafeCall in store listings and in-app product naming, and Keryx for iOS and Android launcher labels.
  • Platform identifiers (amended 29 August 2026): Android / Google Play / Firebase remain com.sourcectl.keryx. iOS / App Store Connect is com.sourcectl.keryxapp because Apple Developer Support (case 102915938031) will not release com.sourcectl.keryx for team 8P59575P2K. The macOS Flutter scaffold keeps com.sourcectl.keryx and is not a launched product. Name, publisher, and hierarchy are otherwise unchanged.
  • Hierarchy: sourcectl publishes; Wantok is the product umbrella; SafeCall is the separately contracted platform; Keryx for SafeCall is SafeCall's administrator-only mobile notification companion. BleuVista is a separate market-facing portfolio/channel. AlertHub is BleuVista's emergency-alerting solution powered by SafeCall capabilities and does not own Keryx. NavBeacon remains a separate navigation product.
  • Rationale: this preserves the fixed SafeCall companion model, resolves the current sourcectl/Wantok/BleuVista signals without renaming the Android identifier, gives stores and client material one public name, and keeps Keryx out of standalone product or acquisition positioning. The iOS bundle ID split is an Apple-forced exception, not a brand rename.

The decision is authoritative; implementation remains with the affected workstreams:

SurfaceCurrent evidenceHandoff
SafeCall brand configuration and footerconfig/brands/safecall.ts and the SafeCall footer identify Wantok; there is no Keryx brand profileP2-01 #104 brief: visual-identity.md; #89 does not change build-time branding
Keryx Flutter, Android, and iOS metadataLauncher/bundle names are lowercase keryx, Flutter titles say SafeCall; Android is com.sourcectl.keryx and iOS is com.sourcectl.keryxappP2-01 #104 / visual-identity.md rules; P2-02 #105, P2-05 #108, and P3-02 #110 propagate and verify affected metadata
BleuVista/AlertHub websitePublic pages present AlertHub as a BleuVista solution and do not explain its SafeCall relationshipP2-04 #107 applies the approved relationship without creating a standalone Keryx funnel
Store copy, assets, and recordsNo approved listing packet or final store records existP2-01 #104 / visual-identity.md; P2-02 #105; P3-06 #114 verify external ownership
Privacy, terms, install, and support surfacesPermanent Keryx URLs and final legal/support text are missingP1-06 #99 and P2-04 #107 use the approved publisher and hierarchy

P0-02 launch classification decision — 13 August 2026

  • Status: approved.
  • Owner and regulatory/DSA reviewer: Thomas Minitsios. External counsel is mandatory if product scope, health functionality, medical claims, or the regulatory assumptions below change.
  • Availability: publish in the Czech Republic only on Apple App Store and Google Play.
  • Locales: use English as the primary/default store locale and provide a complete Czech localization. English and Czech are required across Keryx, SafeCall administrator provisioning, listings, screenshots, release notes, relevant permission/help copy, and install/support material. Missing Czech parity blocks launch rather than becoming an accepted mixed-language risk.
  • Audience: SafeCall administrators aged 18 or older. Keryx is not designed for children, does not enter Apple's Kids category or Google Play Families, and does not broaden the fixed administrator-only persona.
  • Apple classification: primary category Business, no secondary Health & Fitness or Medical category, and an expected 4+ questionnaire result. The content rating describes content suitability, not the adult target audience.
  • Google Play classification: app category Business, target age 18+ only, and an expected IARC result of Everyone.
  • Medical and health position: Keryx provides no health functionality and is not a regulated medical device. It does not diagnose, treat, cure, prevent, or clinically monitor a condition. P1-10 (safety-claims.md) locks supplemental-notification, delivery-limitation, and safety claims.
  • Rating rule: Apple and Google assign ratings from the final honest questionnaires. If the tested binary, payload model, copy, or questionnaire produces a higher rating, reopen this decision; do not tailor answers to force the expected value.
  • EU trader decision: sourcectl acts as an EU trader for Czech distribution. Apple requires a verified public business address, phone number, and email on the EU product page. The Google organization account requires verified legal identity/address details and public developer phone/email, plus app support contacts. Actual values remain in controlled account records rather than Git.
  • Rationale: Czech-only availability matches the current SafeCall/Wantok operating signal and limits initial legal, support, localization, and rollout scope. Business classification reflects a contracted administrator tool. Requiring bilingual parity avoids offering Czech administrators an English-only or topic-oriented setup while preserving conservative, non-medical store claims.

The decision sets launch requirements; it does not claim they are implemented:

SurfaceCurrent evidenceHandoff
Keryx app and platform copyFlutter UI and permission/help strings are hard-coded English with no localization infrastructureP2-05 #108 implements and tests English/Czech parity
SafeCall administrator provisioningOnly a few English Keryx keys exist; most provisioning copy is hard-coded English/topic-oriented and reviewed Czech values are incompleteP2-05 #108 owns canonical English/Czech catalogs and UI wiring
Listings, screenshots, release notes, and public pagesNo approved bilingual packet, localized assets, or Keryx install/legal/support pages existP2-02 #105, P2-03 #106, and P2-04 #107 implement the approved scope
Privacy, medical, audience, rating, and safety formsFinal answers must be generated from the release candidate and approved claimsP1-06 through P1-08 #99, #100, #101, and P1-10 #103 provide evidence
EU trader, organization, and public contact recordssourcectl trader status and required contact classes are decided; verified values are not stored in this repositoryP3-06 #114 verifies controlled account evidence and P5-03 #125 verifies final console disclosure

P0-03 commercial review decision — 13 August 2026

  • Status: approved.
  • Owner and approver: Thomas Minitsios.
  • Canonical fact pattern: Keryx for SafeCall is a free mobile companion for administrators of a separately contracted SafeCall physical/building deployment. Downloading Keryx does not buy or provide SafeCall.
  • QR meaning: the SafeCall-generated QR carries connectivity settings and the administrator's selected alert categories for that deployment. It does not purchase, subscribe to, license, or unlock paid digital content.
  • No app commerce: Keryx has no user account, checkout, subscription, paid Keryx SKU, in-app purchase, external purchase link, or in-app purchase call to action. Without compatible SafeCall configuration, it remains unconfigured.
  • Reviewer/listing rule: explain the SafeCall dependency before describing features. Reviewer instructions use an isolated SafeCall-style environment, durable sample QR, and safe test notifications; they do not use client data or ask reviewers to configure ntfy/topics.
  • Sales rule: present Keryx only inside SafeCall/AlertHub opportunities and quote the wider deployment, implementation, infrastructure, and support, never a Keryx SKU. Do not direct an unqualified prospect to download it.
  • Support rule: explain that a free download alone cannot receive alerts. Route contracted clients to SafeCall provisioning/support and non-clients to the wider SafeCall commercial path, without an in-app purchase link.
  • MDM installation: clients may assign or install the same public store apps (com.sourcectl.keryxapp on Apple Business Manager; com.sourcectl.keryx on managed Google Play) through Apple Business Manager/standard MDM or managed Google Play.
  • MDM limits: MDM is an installation channel only. Launch does not support managed app configuration, MDM-injected credentials, deep-link provisioning, zero-touch setup, custom/private binaries, or silent configuration. An administrator must grant permissions and scan their SafeCall-generated QR on the device.
  • Managed-device qualification: restrictive device policies require client IT review for camera, notifications, network access, Android background/power behavior, and other platform controls. No blanket managed-device compatibility claim is made before P0-04 and P4 evidence pass.
  • Rationale: the facts distinguish enterprise connectivity setup from a QR that unlocks externally purchased digital content, give reviewers a complete test path, prevent misleading consumer installs, and allow standard public app assignment without promising unimplemented managed configuration.

The decision approves facts and message boundaries, not final public artifacts:

SurfaceCurrent evidenceHandoff
Keryx onboarding and app copyThe app has no account, checkout, billing, or IAP, but first launch does not yet explain the SafeCall commercial dependency and still refers to a separate administratorP2-01 #104 and P2-05 #108 propagate approved identity and bilingual in-app wording
SafeCall QR generationQR data configures ntfy connectivity/topics, but the current administrator UI exposes transport language and manual fallbackP1-01/P1-02 #94, #95 secure the contract; P2-05 #108 replaces public transport wording
Listings, sales, support, and client onboardingNo approved final English/Czech listing, public Keryx pages, or client handbooks existP2-02 #105, P2-04 #107, P4-06 #120, and P4-07 #121 implement the approved facts
MDM and managed devicesPublic apps can be assigned through standard enterprise stores, but Keryx has no managed-configuration/deep-link reader and restrictive profiles are untestedP0-04 #92 defines the device baseline; P4 readiness and client IT guidance validate supported policy conditions
Reviewer environment and final console copyDurable QR/test services and final review notes are missingP5-01 #123 provides isolated access and P5-03 #125 verifies the final bilingual narrative

P0-04 support baseline decision — 13 August 2026

  • Status: approved.
  • Owner and approver: Thomas Minitsios.
  • OS support: iOS/iPadOS 17 or later and Android 12/API 31 or later on Google Play-certified devices. Test iOS/iPadOS 17, 18, and 26 and Android 12/12L, 13, 14, 15, and 16/API 31–36. Keep Android target/compile API 36 and verify 16 KB native-page support from the release candidate.
  • Source-floor gap: current source permits iOS 13 and Android API 24. Those are implementation defaults, not support promises. P3/P4 must set and verify explicit iOS 17/API 31 floors before release.
  • Form factors: support iPhone, iPad, Android phones, and Android tablets with a functioning camera for QR provisioning.
  • Orientations: iPhone supports portrait and landscape left/right, not upside-down; iPad supports all four orientations; Android phones/tablets support portrait and landscape.
  • Not separately certified: foldables and Chromebooks may install but have no launch support commitment until qualified.
  • Unsupported launch platforms: macOS, Windows, Linux, web, visionOS, wearables, Android Auto, CarPlay, Fire OS, devices without supported Google Play distribution, and devices without a functioning camera.
  • Tier 1 Android: Google Pixel/AOSP baseline and Samsung Galaxy. Full delivery, foreground/background/terminated, reboot, Doze, upgrade, soak, orientation, tablet, and accessibility matrices must pass.
  • Tier 2 Android: Xiaomi/Redmi/POCO, Motorola/Lenovo, and OnePlus/Oppo/Realme are supported only for the tested model/OS combination after documented battery/background exceptions pass. A family name alone is not evidence.
  • Tier 3 Android: no-GMS Huawei, Fire OS, uncertified/unknown OEMs, rooted/custom ROMs, end-of-life OS/devices, and restrictive profiles that block required capabilities remain unsupported until separately qualified.
  • Battery exception policy: exceptions are evidence-driven, least-privilege, device-specific, documented in English/Czech, and approved by client IT. Tier 1 must not silently depend on undocumented exceptions. Tier 2 is removed from support when approved settings cannot pass.
  • Platform limitations: force-stop/force-quit prevents background delivery until platform recovery or reopen and must be documented. It is not evidence for a guaranteed-delivery claim.
  • Stop and waiver policy: any supported-tier core alert-path failure, unresolved Android FGS/iOS APNs blocker, inaccessible critical flow, or failed permission recovery is a no-go, not “best effort.” A waiver requires the P0-05 go/no-go authority, named owner, rationale, expiry, and review date.
  • Accessibility scope: all criteria apply on physical supported devices in English and Czech to onboarding, QR scan, permission recovery, Active/Archive, notification detail, pause/resume, rescan, and reset.
  • Assistive technology: complete the critical flows with VoiceOver and TalkBack. Actionable controls, status/error feedback, emoji/timestamps, and scanner controls need meaningful spoken names.
  • Visual/layout: meet WCAG 2.2 AA on critical flows; at least 4.5:1 contrast for normal text and 3:1 for large text/UI components; remain complete and reachable at 200% text scale across supported form factors/orientations; provide at least 44×44 pt iOS and 48×48 dp Android action targets.
  • Interaction: provide logical visible focus, keyboard/switch access where platform-supported, no critical task dependent on animation, and honored reduced-motion settings.
  • Permission recovery: camera and notification denial or later revocation must produce a clear explanation, route to system Settings, and successful return/recovery without a dead end.
  • Evidence boundary: this is a requirement, not a current-conformance claim. P4-02/P4-03 own the pass/fail evidence.

The decision narrows support; it does not claim the current product passes:

SurfaceCurrent evidenceHandoff
Platform projects and release artifactsXcode sets iOS 13; Android inherits Flutter API 24–36; iPhone/iPad and all selected orientations are declared; 16 KB compatibility is unprovenP3 release work aligns explicit floors and proves artifact compatibility; P1-03 #96 and P1-04 #97 close delivery blockers
Flutter accessibility and permissionsNo explicit semantics program or accessibility tests exist; camera and notification outcomes lack complete denial/revocation recoveryP4-02 #116 implements/audits the full baseline; P2-05 #108 supplies English/Czech UI
Device, OEM, orientation, and soak evidencePhone/tablet support is declared but layouts, OEM behavior, battery exceptions, restrictive profiles, and long-running delivery are unprovenP4-03 #117 executes the physical matrix and P4-04 #118 verifies reboot/upgrade/network recovery
Administrator/client guidanceCurrent docs mention OEM battery behavior but do not provide approved device-specific English/Czech exception and permission-recovery proceduresP4-06 #120 and P4-07 #121 publish the support boundaries and recovery steps

P0-05 launch ownership decision — 25 August 2026

  • Status: approved.
  • Owner and approver: Thomas Minitsios.
  • Go/no-go authority and backup: Thomas Minitsios is both the go/no-go authority and the named backup. Waivers under P0-04 still require this authority, rationale, expiry, and review trigger.
  • Single-person risk: authority and backup are the same person. This is a named concentration risk, not a silent acceptance. Review when P3-06/#114 verifies account recovery and at the first P5 go/no-go; reopen if a second named person becomes available.
  • RACI: Thomas Minitsios is Responsible and Accountable for product, Keryx app, SafeCall platform, ntfy/push, security/privacy, legal, stores, content, support, and incidents. Consulted: external counsel if product scope, health functionality, medical claims, or P0-02 regulatory assumptions change; client IT for device-policy and battery exceptions. Informed: SafeCall account owners and affected administrators via the SafeCall path. Later issues have this accountable owner even while GitLab assignees remain unset.
  • Date policy: do not invent beta or production calendar dates, and do not set the GitLab milestone due date. No beta or production date until remaining P1–P4 priority::launch-blocker items are closed or explicitly accepted in this roadmap. The Keryx public launch milestone stays dateless; P5-05/#127 executes go/no-go only after that gate.
  • Support model: Keryx uses the existing SafeCall support channel. There is no standalone Keryx mailbox, public status page, 24/7 desk, or emergency-dispatch SLA. Hours and response class: Czech business hours (Monday–Friday, CET/CEST); first response next business day; supported-tier core-path incidents acknowledged the same business day by the go/no-go owner. Actual mailbox, phone, and store support URLs stay in controlled records.
  • Status and incident channel: internal GitLab plus the SafeCall account/support path. No public status page at launch. P5-05/#127 and P6-05/#132 operationalize coverage, severity, and client communications.
  • Telemetry: no analytics or crash SDK at launch; no administrator identifiers in this repository. Field diagnosis is client-reported until P6-05/#132 approves minimum signals. P1 privacy work must not add collection before purpose, minimization, retention, and disclosure are approved.
  • Rationale: naming one accountable person closes the P0 exit gate without inventing dates or a separate support organization, keeps Keryx inside the SafeCall operating model, and records the single-person and no-telemetry trade-offs for later review.

The decision assigns accountability; it does not claim operating artifacts already exist:

SurfaceCurrent evidenceHandoff
Public privacy, terms, and support URLsP1-06 DRAFT source and path plan exist in legal/; live pages and verified contacts are missingP2-04 #107 publishes HTTPS pages; P3-06/#114 and P5-03/#125 verify contacts and console URLs
Controlled organization and support contactssourcectl trader status is decided; verified mailbox, phone, and store contacts are not in this repositoryP3-06 #114 verifies controlled evidence and P5-03 #125 verifies console disclosure
Administrator and client support handbooksStrategy requires SafeCall-channel support, but final guides and escalation material are incompleteP4-06 #120 and P4-07 #121 publish them
Go/no-go execution and client communicationsNo release candidate or staged rollout has runP5-05 #127 executes after P1–P4 launch blockers close
Monitoring, intake, and incident communicationsNo privacy-safe monitoring or dedicated intake process existsP6-05 #132 owns operational signals and communications
Account recovery and second-person reviewGo/no-go authority and backup are the same personP3-06 #114 verifies recovery and triggers named-backup review

Exit gate P0: every open decision table field is approved or explicitly deferred; the fixed product model has not been reopened; all later issues have an accountable owner even if dates remain unset. P0 exit gate passed 25 August 2026 under the P0-05 ownership, date, support, and telemetry decisions above.

P1 — Trust, security, privacy, and delivery architecture

Goal: make alert delivery and data handling defensible before creating public claims or production release artifacts.

IDStateWork itemExit criterion
P1-01Ready#94 — Threat-model QR provisioning and ntfy topic accessReviewed data-flow and abuse-case model covers QR disclosure, topic guessing, unauthorized subscribe/publish, replay, device loss, debug access, and client offboarding
P1-02Ready#95 — Design TLS-only authenticated ntfy provisioningApproved protocol defines HTTPS enforcement, least-privilege subscription credentials, publishing credentials, rotation/revocation, QR version migration, and legacy handling
P1-03Ready#96 — Resolve Android background delivery and Play foreground-service complianceThe perpetual dataSync/boot design is replaced or proven valid against API 35/36 timeout/start rules and Play policy; declaration, demo, OEM limits, fallback, and physical-device evidence are approved
P1-04Ready#97 — Productize iOS APNs and ntfy killed-state deliveryAPNs token registration/rotation reaches an authenticated provider; production delivery is documented, monitored, and proven on physical devices in foreground/background/terminated states
P1-05Ready#98 — Define alert data classification, retention, and secure local storageAlert fields are classified; retention/deletion, backup behavior, screen/lock exposure, storage protection, device loss, and offboarding controls are approved
P1-06Ready#99 — Publish Keryx privacy, terms, and support commitmentsCounsel-reviewed or explicitly draft-marked policies exist at permanent URLs, match actual data flows, and are reachable in app and store metadata
P1-07Ready#100 — Complete Apple privacy, encryption, and SDK complianceXcode privacy report, app/SDK manifests, required-reason APIs, nutrition label, encryption answer, permission strings, and in-app privacy link are verified
P1-08Ready#101 — Complete Play Data Safety, permissions, and foreground-service declarationsData Safety, app access, ads, audience, content rating, permissions, and FGS declarations match the tested AAB and public policies
P1-09Ready#102 — Audit dependencies, licenses, privacy manifests, and vendored ntfy ownershipDependency inventory, licenses/notices, update ownership, vulnerability response, SDK privacy evidence, and vendored plugin maintenance plan are approved
P1-10Ready#103 — Define safety claims, delivery limitations, and regulatory positionStore/client/support copy states whether Keryx is supplemental, documents Do Not Disturb/OEM/network failure limits, defines escalation, and records legal/regulatory review

P1-01 threat model — 25 August 2026

  • Status: approved as analysis; treatments remain open.
  • Owner and reviewer: Thomas Minitsios (product, mobile, server, ops, and privacy roles under P0-05 RACI).
  • Artifact: Keryx QR and ntfy threat model.
  • Findings: current safecall.keryx.ntfy.v1 QR and SafeCall publish path carry no ntfy credential; Keryx accepts HTTP and HTTPS; topics are predictable {server_id}-{topic_id}; local SharedPreferences retain config and alert bodies; debug QR access can expose transport metadata; offboarding has no remote revocation handle.
  • Launch posture: abuse cases A1–A7 and A10 are launch blockers. Closing #94 does not accept anonymous or cleartext production designs and does not implement TLS or credentials.
  • Handoff: #95 owns HTTPS, subscribe/publish credentials, QR versioning, rotation, revocation, and v1 migration; #98 owns local data controls; #99– #101 own disclosures; #103 owns safety claims; #119 owns deployer ntfy prerequisites; #120/#121 own admin offboarding guidance.

P1-02 provisioning protocol — 25 August 2026

  • Status: approved as protocol design; implementation remains open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Authenticated provisioning protocol.
  • TLS: HTTPS only for production, test, and reviewer ntfy. No private-network or loopback HTTP exception.
  • Credentials: per-QR read-only ntfy access tokens scoped to selected topics; separate SafeCall-side publish token and token-manager credential; publish token never enters a QR.
  • Lifecycle: mint on QR generate; revoke/rotate by token id; local reset is not sufficient offboarding; no default wall-clock expiry.
  • QR contract: safecall.keryx.ntfy.v2 with subscribe_auth and optional token_id; fail-closed rejection of v1 and stored HTTP/v1 config; no production dual-run of anonymous plus authenticated topics.
  • Launch posture: closing #95 does not claim ntfy ACL, tokens, or v2 QR exist in code. Residual A1–A7/A10 remain launch blockers until implementation and related treatments land.
  • Handoff: later implementation for config/publisher/QR/Keryx auth wiring; #98 local secret storage; #99–#101 disclosures; #103 claims; #119 deployer prerequisites; #120/#121 revoke/offboarding guidance.

P1-03 Android delivery architecture — 25 August 2026

  • Status: approved as architecture design; implementation and device proof remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Android delivery architecture.
  • Primary path: ntfy upstream FCM poll_request wakes Keryx; bounded authenticated HTTPS poll recovers cached alerts (same semantic as iOS APNs poll_request).
  • Foreground path: in-app stream or short poll while UI is open; no perpetual background FGS and no indefinite wake lock for launch.
  • Deprecated: perpetual dataSync FGS with START_STICKY, indefinite wake lock, and automatic boot/locked-boot/package-replaced FGS restart.
  • Fallbacks: Tier 2 poll-on-resume without FCM/upstream; Tier 3 documented OEM battery exceptions per P0-04 only.
  • Launch posture: closing #96 does not claim FCM wiring, FGS removal, Play forms, or the P4-03 physical matrix exist. Residual delivery risk remains until implementation, #119 upstream config, #101 declarations, and #117 evidence land.
  • Handoff: later plugin/Keryx FCM and FGS removal; #119 FCM/upstream prerequisites; #101 Play declarations; #103 claims; #117 device matrix; #120/#121 troubleshooting.

P1-04 iOS APNs delivery architecture — 25 August 2026

  • Status: approved as architecture design; implementation, signing, and device proof remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: iOS APNs delivery architecture.
  • Token provider: provisioned client ntfy HTTPS host with per-QR subscribe_auth; not a SafeCall token API.
  • Wake path: client ntfy cache + upstream poll_request + APNs for iOS bundle com.sourcectl.keryxapp; sourcectl owns APNs credentials; client ntfy uses upstream-base-url (or equivalent) to an APNs-capable upstream.
  • Token contract: forward on register/refresh; delete on reset/invalidation; no raw tokens in ordinary UI.
  • Fallbacks: Tier 2 foreground/resume without upstream; honest Focus, force-quit, cache-expiry, and network limits.
  • Launch posture: closing #97 does not claim token POST, upstream, or production entitlement exist in code. Residual risk remains until implementation, #110 signing, #119 upstream checklist, and #117 evidence land.
  • Handoff: later iOS plugin token wiring; #110 entitlements; #119 deployer prerequisites; #103 claims; #117 device matrix; #120/#121 troubleshooting.

P1-05 data classification and local storage — 25 August 2026

  • Status: approved as policy design; privacy pages and store forms remain open; optional secure-storage hardening is deferred.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Data classification and local storage.
  • Lock-screen: full title + body OS preview for launch; must be disclosed.
  • Storage: SharedPreferences approved for config (including future subscribe_auth) and alert history; treat subscribe auth as a secret in docs/support; Keychain/EncryptedSharedPreferences not a launch blocker.
  • Retention: 200 visible messages; 500 deleted tombstones for cache-poll suppression only.
  • Offboarding: local reset is not enough; require ntfy token revoke (P1-02) plus wipe/reset guidance (#120/#121).
  • Backups: default OS prefs backup accepted; disclose alert/config secret exposure.
  • Launch posture: closing #98 does not implement encrypted storage, redacted lock-screen, privacy URLs, or store forms. Residual A7/A10 remains until revoke UX and related treatments land.
  • Handoff: #99–#101 disclosures; #103 claims; #120/#121 offboarding; #132 support redaction.

P1-06 privacy, terms, and support drafts — 25 August 2026

  • Status: approved as DRAFT source package; not counsel-reviewed; not live on a public host.
  • Owner: Thomas Minitsios.
  • Artifact: Legal drafts (privacy, terms, support + index).
  • URL plan: {public_base}/keryx/privacy, /keryx/terms, /keryx/support where {public_base} comes from controlled records; #107 publishes.
  • Content: matches P1-05 inventory, P0 publisher/support class, delivery architectures; non-medical / supplemental wording approved in safety-claims.md (P1-10).
  • Launch posture: closing #99 does not claim URLs are live, contacts are in git, app About links exist, or counsel has signed off.
  • Handoff: #107 live pages; #108 Czech; #100/#101/#125 forms and metadata; #103 claims packet (approved); later app Settings/About wiring.

P1-07 Apple privacy compliance packet — 25 August 2026

  • Status: approved as compliance packet; manifests/purpose-string implementation and signed privacy report remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Apple privacy compliance.
  • Manifests: app-level privacy manifest required; vendored ntfy must declare UserDefaults reason CA92.1; Flutter/plugin coverage completed via #102.
  • Purpose strings: approved English camera/notification copy (administrator QR / SafeCall alerts); Czech via #108.
  • Nutrition label: draft answers from P1-05/#99; no tracking; no analytics SDK; disclose on-device history.
  • Encryption: HTTPS-only / standard export exemption.
  • Privacy link: in-app About/Settings → {public_base}/keryx/privacy after #107.
  • Launch posture: closing #100 does not claim source fixes, signed report, ASC submission, or production aps-environment.
  • Handoff: implementation of manifests/strings; #102 inventory; #110 report; #107 URL; #125 ASC; #108 Czech.

P1-08 Play Data Safety compliance packet — 25 August 2026

  • Status: approved as compliance packet; signed-AAB inspection, Play Console submission, FGS removal in source, and live reviewer QR remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Play Data Safety.
  • Data Safety: disclose on-device config/history and client-deployer ntfy/FCM roles; no ads/analytics SDK; HTTPS in transit; full lock-screen disclosure; do not answer “no collection.”
  • FGS: launch target has no perpetual dataSync / boot FGS (P1-03); demo only if residual declared FGS remains in the submitted AAB.
  • App content: no ads; 18+; expected IARC Everyone; QR companion access narrative; privacy URL after #107; reviewer QR via #123.
  • Launch posture: closing #101 does not claim signed AAB inspection, Play submission, FGS already removed, live reviewer QR, or IARC certificate.
  • Handoff: FGS/FCM implementation; #102 inventory; #109 signing; #107 URL; #123 reviewer env; #125 Play Console; #103 claims.

P1-09 dependency and vendored-ntfy ownership — 25 August 2026

  • Status: approved as ownership packet; machine SBOM, CI gates, signed privacy verification, and NOTICE packaging remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Dependency ownership.
  • Inventory: direct Dart deps from pubspec.lock plus path ntfy1.0.2-keryx.1 (MIT); privacy-impacting plugins listed; transitive Gradle/Pods deferred to #112.
  • Privacy manifests: checklist aligned to P1-07 (ntfy CA92.1 required); not claimed fixed or signed-verified.
  • Cadence: quarterly + pre-submission advisory review; critical/high unmitigated blocks go/no-go.
  • Launch posture: closing #102 does not claim SBOM, CI gates, full transitive license dump, or pub.dev publication of the fork.
  • Handoff: #112 CI/SBOM; P1-07 source manifests; #109/#110 signing; #125 archive; #133 quarterly; #103 claims.

P1-10 safety claims and regulatory position — 25 August 2026

  • Status: approved as claims packet; listings, live legal pages, support runbooks, and device matrix remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Safety claims.
  • Role: supplemental administrator companion; clients retain non-Keryx operational paths; not sole alarm channel.
  • Critical Alerts: not sought at launch; ordinary notifications only.
  • Medical / category: reaffirm P0-02 Business / non-medical; prohibited diagnose/treat/cure/emergency-dispatch claims.
  • Limits: Focus/DND, permissions, force-stop, OEM battery, network/ntfy, push latency, pause — catalog in packet.
  • Escalation: SafeCall support class (P0-05); in-app ack is local only.
  • Launch posture: closing #103 does not claim Critical Alerts, counsel sign-off, listings updated, or #117 complete.
  • Handoff: #105 listings; #107 counsel/live pages; #120/#121 support; #117 matrix; #125 console; #108 Czech.
  • P1 exit: with #103 closed, all P1 design/compliance packets (#94–#103) are approved; implementation residuals remain on later phases.

Exit gate P1: no anonymous or unencrypted production design is accepted by default; Apple and Play disclosure packets match the actual tested binary; Android and iOS killed-state delivery have evidence and honest limitations; safety claims are approved and supplemental.

P2 — Brand, client enablement, and store content

Goal: present Keryx consistently as part of SafeCall and provide every client, administrator, and reviewer-facing artifact needed for installation and both stores, without creating an independent acquisition campaign.

IDStateWork itemExit criterion
P2-01Ready#104 — Create approved visual identity and store asset kitApproved SafeCall-related wordmark, app icon QA, Android adaptive/monochrome assets, Apple icon, palette/type guidance, ownership/source files, and usage rules exist without implying a standalone product
P2-02Ready#105 — Produce canonical App Store and Google Play listing copyApproved copy, categories, release-note templates, contact data, and review narrative state the SafeCall dependency, administrator audience, QR setup, and absence of manual ntfy/topic configuration in every locale
P2-03Ready#106 — Produce privacy-safe store screenshots and preview assetsRequired screenshots show friendly SafeCall alert categories, administrator QR provisioning, and first-party Active/Archive UX with redacted test data; sources and repeatable capture steps pass brand/privacy review
P2-04Ready#107 — Publish Keryx product, install, privacy, and support web pagesPermanent HTTPS install, privacy, terms, and support pages serve SafeCall clients and store metadata, state that Keryx requires SafeCall, and do not act as an independent lead-generation campaign
P2-05Ready#108 — Localize Keryx, admin provisioning, and store contentApproved locale list is implemented across app UI, permission/help copy, friendly-category SafeCall provisioning UI, listings, screenshots, release notes, and support docs without ordinary-administrator ntfy/topic terminology

Exit gate P2: a reviewer, client, and SafeCall administrator see the same publisher, SafeCall relationship, audience, QR workflow, capabilities, limitations, support channel, and privacy story everywhere; no artifact presents Keryx as independently usable or marketed.

P2-01 visual identity and store asset kit — 26 August 2026

  • Status: approved as identity brief. Mark revised 7 September 2026 (white megaphone on #003087). Android adaptive / round / monochrome and launch images are in source. Wordmark artwork files and leftover launcher metadata casing remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Visual identity.
  • Hierarchy: sourcectl / Wantok / SafeCall / Keryx for SafeCall / launcher Keryx; mark-only icon; no standalone positioning.
  • Mark: keryx/assets/icon/keryx_icon.svg + opaque 1024 PNG (#003087 / #FFFFFF); previous shield archived as keryx_icon_v1_shield.png.
  • Gaps: wordmark artwork; launcher casing fixes.
  • Launch posture: closing #104 does not claim store graphics final or wordmark shipped.
  • Handoff: wordmark files; #108.

P2-02 canonical store listing copy — 26 August 2026

  • Status: approved as listing-copy packet; live URLs, verified contacts, and console paste remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Store listing copy.
  • Locales: English + Czech field parity for Apple and Google listing fields, reviewer notes, and release-note templates.
  • Narrative: SafeCall dependency first; free companion; QR configures connectivity not purchase; supplemental limitations per P1-10; Business / administrator 18+.
  • Gaps: {public_base} and contact placeholders; Czech app/provisioning UI implementation; screenshot PNG exports.
  • Launch posture: closing #105 does not claim listings are live, URLs resolve, counsel sign-off, or store consoles filled.
  • Handoff: screenshot kit #106; public web packet #107; #108 app Czech; #114 contacts; #125 console paste.

P2-03 privacy-safe store screenshot kit — 26 August 2026

  • Status: approved as screenshot-kit specification; PNG exports, design sources, and console upload remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Store screenshot kit; planned exports under keryx/store-assets/.
  • Coverage: iPhone 6.9", iPad 13", Android phone (+ optional tablet), Play feature graphic; EN + CS captions; seven-frame narrative including optional SafeCall provisioning.
  • Privacy: fictional sample data catalog; pre-export redaction checklist; no production client QR or credentials.
  • Launch posture: closing #106 does not claim PNGs committed, #123 live, Czech UI captured, or store graphics uploaded.
  • Handoff: #123 capture env; #108 Czech UI; PNG export; #125 console paste; #114 release evidence.

P2-04 public web pages publication packet — 26 August 2026

  • Status: approved as publication packet; HTTPS deploy, counsel sign-off, and store URL verification remain open.
  • Owner and approver: Thomas Minitsios.
  • Artifacts: Public web pages; install draft; legal privacy/terms/support unchanged (P1-06 DRAFT).
  • URL map: {public_base}/keryx, /keryx/privacy, /keryx/terms, /keryx/support.
  • Narrative: SafeCall companion landing; no BleuVista/AlertHub ownership; no standalone consumer funnel; EN + CS landing copy approved.
  • BleuVista site: relationship rules documented; website/ not updated in this close.
  • Launch posture: closing #107 does not claim URLs resolve, DNS/TLS live, Czech HTML published, or in-app/store links wired.
  • Handoff: HTTPS deploy; #108 Czech HTML; #114 {public_base} and contacts; #123 reviewer path; #125 console verify; in-app About link.

P2-05 localization policy and EN/CS implementation — 26 August 2026

  • Status: approved as localization policy; Flutter ARB, web catalogs, platform strings, and legal CS DRAFT bodies implemented in source.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Localization; keryx/l10n/ ARB files; lib/src/ui_translation_*_catalog.ts provisioning keys.
  • Locales: English primary/default + Czech parity across Keryx app, SafeCall admin provisioning, iOS/Android permissions, and legal DRAFT public texts.
  • Narrative: friendly alert categories; no ordinary-admin ntfy/topic jargon; QR labels follow admin UI locale.
  • Gaps: Czech screenshot PNGs; live Czech HTTPS pages; store console paste; counsel review of legal CS.
  • Launch posture: closing #108 does not claim Czech HTML is live, screenshots exported, listings pasted, or counsel sign-off.
  • Handoff: #106/#123 Czech capture; #107 deploy; #125 console; #114 contacts; counsel review.

P3-01 Android production signing — 26 August 2026

  • Status: closed. Signing packet, fail-closed Gradle, and verify:keryx-aab landed 26 August 2026. Operator complete 30 August 2026: Play app Keryx for SafeCall, Czech Republic only, internal-testing AAB draft, upload SHA-256 0D:AC:61:B1:5F:85:91:3F:2B:21:20:5E:46:14:81:90:20:13:85:8B:76:D2:00:91:36:FD:30:9D:18:D8:0D:AA (supersedes the 26 August cert; do not register the old fingerprint). MiniVan-3 recovery matched the same upload cert.
  • Owner and approver: Thomas Minitsios.
  • Artifact: Android signing; keryx/android/key.properties.example; keryx/android/app/build.gradle.kts; scripts/release/keryx-verify-aab.ts.
  • Model: Google Play App Signing (app key) + operator-held upload key; release never uses debug signing.
  • Gaps: CI secret injection (#112); store paste (#125).
  • Launch posture: closing #109 does not claim Internal/Production track promotion, CI gates, or iOS signing.
  • Handoff: #112 CI; #114 org roles / EU trader; #125 console.

P3-02 iOS distribution signing — 26 August 2026

  • Status: signing packet and repo wiring approved; App ID unblocked 29 August 2026 as com.sourcectl.keryxapp (Apple case 102915938031 will not release com.sourcectl.keryx). Primary signed IPA verified with aps-environment = production. MiniVan-3 recovery IPA verified 30 August 2026. ASC app Keryx for SafeCall exists (Czech Republic only). Distribution .p12 backup of both Macs is on the NAS share (OA-110-cert-backup, 1 September 2026).
  • Owner and approver: Thomas Minitsios.
  • Artifact: iOS signing; keryx/ios/ExportOptions.plist; scripts/release/keryx-verify-ipa.ts.
  • Model: distribution cert + App Store profile; signed IPA proves aps-environment = production; source entitlements may stay development.
  • App ID: com.sourcectl.keryxapp on team 8P59575P2K. Android remains com.sourcectl.keryx.
  • Gaps: CI (#112); store paste (#125); APNs .p8 on the NAS share (OA-110-apns-p8 / #119).
  • Launch posture: P3-02 / #110 signing packet is complete (IPA proof, MiniVan recovery, .p12 backup). TestFlight soak is #124.
  • Handoff: operator checklist in ios-signing.md and operator-actions.md; #112 CI; #114 org roles / EU trader; #125 ASC.

P3-03 Keryx AAB and IPA release pipeline — 1 September 2026

  • Status: recorded full bun run release:keryx -- --contracts on GLaDOS (version 1.0.0+1, commit 6665a480). CI secret injection remains #112.
  • Owner and approver: Thomas Minitsios.
  • Artifact: bun run release:keryx (scripts/release/keryx.ts); operator-actions.md OA-111-pipeline.
  • Model: analyze/test, optional contracts, signed AAB+IPA, verify scripts, local checksum file under gitignored keryx/build/release-evidence/. No store upload, no git push. --bump / --tag follow versioning.md.
  • Gaps: CI (#112); symbols/SBOM archive (#112); #114 org roles / EU trader; store paste (#125). --bump/--tag unused on this first recorded run.
  • Launch posture: P3-03 / #111 is complete for the local pipeline.
  • Handoff: #112 CI; #114 org roles / EU trader; #125 console paste.

P3-05 Versioning and QR compatibility — 26 August 2026

  • Status: approved versioning, changelog, tag, QR compatibility, migration, downgrade, and launch support-window policy.
  • Owner and approver: Thomas Minitsios.
  • Artifact: versioning.md; keryx/CHANGELOG.md skeleton.
  • Model: semver + monotonic shared build number; annotated keryx-v* tags; EN changelog → store templates; v2 QR cutover is coordinated gate (code still v1).
  • Gaps: first recorded pipeline did not use --bump/--tag; {min_safeCall} numeric value at G2 (#114); QR v2 implementation; full EOL matrix (#130).
  • Launch posture: closing #113 does not claim automated versioning, QR v2 code, store release notes pasted, or production promotion.
  • Handoff: #112 CI; #114 org roles / EU trader; #125 console paste; #130 EOL lifecycle.

P3 — Build, signing, and release engineering

Goal: produce repeatable, attributable, recoverable store artifacts without depending on one workstation or an undocumented key.

IDStateWork itemExit criterion
P3-01Done#109 — Configure Android production signing and key recoveryPlay App Signing enrolled; upload SHA-256 0D:AC:61:B1:…:0D:AA; fail-closed Gradle; MiniVan recovery matched; Czech Republic only; internal-testing draft (no production rollout)
P3-02Done#110 — Configure iOS distribution signing and production entitlementsDistribution team, App ID com.sourcectl.keryxapp, profiles/certificates, production APNs entitlement, export options, capabilities, access, backup, and renewal are proven — GLaDOS + MiniVan-3 IPAs, ASC CZ-only record, NAS .p12 backup (1 September 2026)
P3-03Done#111 — Create a reproducible Keryx AAB and IPA release pipelinebun run release:keryx -- --contracts recorded 1 September 2026 on GLaDOS (1.0.0+1); CI/SBOM is #112
P3-04Missing#112 — Add Keryx CI quality, dependency, and supply-chain gatesProtected CI runs static tests, app tests, provisioning contracts, native compile checks, dependency/license checks, and artifact integrity checks
P3-05Ready#113 — Define versioning, changelog, tagging, and QR compatibility policyVersion/build/tag rules, changelog ownership, release-note derivation, QR schema compatibility, migrations, minimum compatible SafeCall version, and downgrade behavior are documented — versioning.md
P3-06Partial#114 — Establish store records, account roles, and release evidence archiveApp Store Connect/Play records exist (CZ-only). NAS evidence archive and MiniVan access proven (OA-114-archive). Still owed: least-privilege org roles, 2FA/recovery verification, EU trader.

Exit gate P3: a second authorized operator can build, verify, upload, and recover both artifacts using documented access without exposing secrets.

P4 — Product and client readiness verification

Goal: prove that the whole SafeCall-to-device service works for real clients, not just that Flutter can compile.

IDStateWork itemExit criterion
P4-01Partial#115 — Build requirements-to-test coverage for app and provisioning flowsTraceability covers the administrator-only persona, friendly-category selection, QR-hidden transport configuration, absence of normal ntfy/topic terminology, persistence, notification lifecycle, debug gating, permissions, platform services, API contract, and regression ownership
P4-02Missing#116 — Complete accessibility and permission-denial readiness reviewVoiceOver/TalkBack, text scaling, contrast, focus/order, motion/orientation, camera denial, notification denial, and recovery paths pass the P0 baseline
P4-03Missing#117 — Execute real-device, OEM, and long-running delivery matrixApproved iOS/Android versions and OEM tiers pass foreground/background/terminated/reboot/battery/Doze and sustained-delivery tests with recorded results
P4-04Missing#118 — Verify upgrade, reboot, network, cache, and reprovisioning behaviorStore-like upgrade preserves config/history; package replacement, reboot, offline/cache expiry, network changes, clock skew, pause/reset, rescan, and server migration have expected outcomes
P4-05Partial#119 — Publish client ntfy and push infrastructure prerequisitesRestricted deployer/support checklist covers TLS, auth, APNs/FCM, caching, retention, firewall/DNS, monitoring, test messages, ownership, backup, rotation, and acceptance evidence without making transport setup part of the ordinary administrator workflow
P4-06Partial#120 — Publish administrator provisioning and support handbookAdmin guide covers friendly alert-category selection, scan-on-own-device QR setup, test alert, secure replacement/revocation, troubleshooting, escalation, and translations without requiring ntfy/topic knowledge
P4-07Missing#121 — Publish administrator app onboarding, troubleshooting, and offboarding guidePublic SafeCall client guide covers store install, permissions, QR scan, expected persistent indicators, battery settings, pause, replacement device, reset, support, privacy, uninstall/offboarding, and migration from a manually configured ntfy client
P4-08Missing#122 — Complete a client pilot and operational handoffNamed pilot administrators provision from friendly SafeCall categories without transport assistance, pass agreed scenarios and soak period, report defects, and hand support/go-no-go evidence to the named owners

Exit gate P4: the pilot environment passes its full matrix with production architecture, signed release candidates, final docs, and staffed support.

P5 — Store submission and launch

Goal: give reviewers durable access, complete both review loops, and release gradually with an explicit stop decision.

IDStateWork itemExit criterion
P5-01Missing#123 — Build permanent reviewer QR and isolated test notification environmentNon-expiring SafeCall-style QR page with friendly categories, isolated HTTPS/authenticated test notification service, safe sample alerts, administrator instructions, monitoring, and owner survive the review window without requiring reviewers to configure ntfy
P5-02Missing#124 — Complete TestFlight and Play internal/closed betaRepresentative testers install from store channels, execute the release matrix, report no unresolved blockers, and approve candidate build numbers
P5-03Missing#125 — Complete store metadata, policy forms, and review instructionsFinal artifacts, URLs, privacy/data answers, FGS evidence, access instructions, contacts, availability, pricing, and release notes are peer-reviewed in both consoles and consistently describe an included SafeCall administrator companion
P5-04Missing#126 — Submit to Apple and Google and resolve review findingsCandidate is submitted to both stores; questions/rejections are logged and resolved without unreviewed scope changes; both builds are approved
P5-05Missing#127 — Execute go/no-go, phased production rollout, and launch communicationsGate sign-off, support coverage, status/incident channel, staged percentages, observation windows, stop thresholds, SafeCall client communications, and install/support links are executed without a standalone Keryx campaign

Exit gate P5: approved versions are publicly available in selected regions, the rollout completed without crossing a stop threshold, and clients have a supported installation path.

P6 — Updates and post-launch operations

Goal: keep Keryx installable, compatible, secure, and supportable after the launch project ends.

IDStateWork itemExit criterion
P6-01Missing#128 — Establish normal release train and staged update processCadence, intake/freeze, release branch/tag, test channels, approvals, notes, staged rollout, monitoring window, docs, and closure evidence are exercised
P6-02Missing#129 — Establish hotfix, security release, stop-rollout, and rejection responseSeverity/authority, patch path, expedited tests, disclosure, rollout halt, unavailable rollback behavior, superseding release, rejection response, and client communications are rehearsed
P6-03Missing#130 — Define compatibility, minimum-version, deprecation, and end-of-life policyKeryx/SafeCall/QR/ntfy compatibility matrix, support window, old-version behavior, minimum-version mechanism decision, notices, store removal, and data/offboarding steps are approved
P6-04Missing#131 — Schedule signing, credential, SDK, and store-policy renewalsNamed owners and reminders cover Apple membership/certs/APNs keys, Google accounts/upload key, ntfy credentials, SDK/target API deadlines, policies, domains, and support URLs; recovery drill passes
P6-05Missing#132 — Establish privacy-safe monitoring, support intake, and incident communicationsDelivery/support signals, crash strategy, consent/data minimization, alerting, dashboards, triage severity, escalation, status updates, postmortems, and retention are operational
P6-06Missing#133 — Review KPIs, store feedback, dependencies, and roadmap quarterlyQuarterly owner reviews reliability, adoption, support, ratings, policy changes, dependencies, security advisories, accepted risks, and backlog priorities with recorded decisions

Exit gate P6: normal and emergency release drills have been completed, all renewal dates have owners, and the quarterly product review is scheduled.

Go/no-go gates

GateRequired evidence
G0 — Strategy approvedP0 decisions signed; every artifact preserves the administrator-only SafeCall companion, QR-hidden configuration, and non-standalone commercial story
G1 — Trust architecture approvedThreat model closed; transport/auth, Android delivery, iOS delivery, data handling, legal disclosures, and platform forms approved
G2 — Release candidate reproducibleProduction-signed AAB/IPA, CI evidence, checksums, symbols, changelog, and recovery procedures archived
G3 — Client readiness passedAdministrators provision friendly categories by QR without ntfy/topic knowledge; device matrix, upgrades, delivery soak, accessibility, docs, infrastructure checklist, and client pilot are accepted
G4 — Submission readyPermanent reviewer environment, final metadata/assets/forms, store-channel beta, and support coverage are verified without implying standalone use
G5 — Production release authorizedBoth stores approved; change record, phased rollout, observation windows, stop thresholds, and communications signed
G6 — Handoff completeRoutine/hotfix runbooks exercised; monitoring, renewals, support, KPI review, compatibility, and EOL ownership transferred

No single green build can substitute for these gates.

Risk register

RiskImpactTreatment and decision owner
Android stops or rejects the perpetual dataSync foreground serviceAndroid 15+ can time out the service after aggregate use and restrict boot starts; Play can reject the declared usePerpetual FGS removed. Residual risk is missing Firebase/firebase-key-file (#119), Play form paste, and #117 evidence
iOS APNs token is not registered with a providerNo provider can address the device for terminated-state wake deliveryClient subscribes via Keryx Firebase. Residual risk is placeholder client files, missing APNs .p8 in Firebase (#119), and #117 evidence
Predictable unauthenticated topics permit unauthorized subscribe/publishConfidentiality, integrity, nuisance alerts, and trust riskP1-01 threat model (threat-model.md) rates A1–A7/A10 as launch blockers; P1-02 protocol (provisioning-protocol.md) approves HTTPS-only per-QR subscribe tokens and a server-side publish token; residual risk remains until implementation, ntfy ACL (#119), and revoke UX land
Alert content can contain device/person/location-like identifiersStore privacy answers and local-device risk may be understatedP1-05 policy (data-classification.md) inventories payloads, approves SharedPreferences + full lock-screen for launch with disclosure; #99–#101 must match; residual device-loss risk until revoke UX (#120/#121)
Approved Keryx identity is not propagated consistentlyReview delay, client confusion, or incorrect external account/legal metadataP0-01 fixes the publisher, name, casing, and hierarchy; P1/P2/P3 must propagate them and verify external account and legal details while preserving Keryx as a subordinate SafeCall companion
Czech launch is approved before bilingual parity existsCzech administrators, reviewers, and support can encounter English-only or topic-oriented flowsP2-02 through P2-05 must deliver and review English/Czech copy, assets, pages, and application/admin localization before launch
EU trader and public contact evidence is incompleteStore setup or Czech availability can be blocked, or incorrect contact data can be publishedP3-06 verifies controlled organization/account evidence and P5-03 verifies the final Apple and Google disclosures
QR setup is mistaken for an external digital purchase or unlockStore rejection or a demand for in-app purchase can result despite Keryx having no paid digital contentP0-03 fixes the factual explanation; P2-02, P5-01, and P5-03 must present and prove it consistently without external purchase calls to action
MDM installation support is overstated as managed configurationClient IT expects zero-touch setup, injected credentials, or compatibility with restrictive profiles that Keryx does not implement or proveP0-03 limits MDM to public-app assignment/install; P0-04 and P4 define and verify managed-device policy support
Source minimums are mistaken for supported OS versionsLegacy iOS 13/API 24 installs create an unbounded, untested support promiseP0-04 fixes iOS/iPadOS 17+ and Android API 31+; P3/P4 must align artifacts, listings, and evidence before release
Android OEM or battery exceptions are generalized without evidenceMissed alerts, excessive power use, or client-policy conflicts can occur on an untested model/profileP0-04 uses Tier 1 required and Tier 2 model-specific evidence; P4-03 and client IT own qualification, and failed models are removed from support
Accessibility baseline is claimed before implementation passesAdministrators can be blocked from provisioning, permission recovery, or notification handling and public claims can be misleadingP0-04 defines measurable launch criteria; P4-02 must provide English/Czech physical-device evidence before a support/conformance claim
Administrator flow exposes ntfy/topics or assumes a separate generic end userRecreates the third-party setup burden Keryx exists to remove and increases onboarding/support failuresP2 and P4 must use friendly categories, scan-on-own-device provisioning, guarded diagnostics, and administrator usability evidence
No durable reviewer environmentApple/Google cannot exercise the configured experienceP5-01 creates a monitored, non-production test path
Signing or account access is held by one person/deviceUpdates can become impossibleP3-01/P3-02/P3-06 and P6-04 require custody and recovery drills; P0-05 also names the single-person go/no-go concentration for review at #114 and the first P5 go/no-go
No telemetry reduces privacy risk but limits field diagnosisDelivery incidents may be invisible or slow to resolveP0-05 records no analytics/crash SDK at launch; P6-05 chooses minimum necessary signals after client-reported diagnosis
Store or OS policy changes after launchUpdates can be blocked and listing visibility reducedP6-04/P6-06 schedule policy and target-SDK review
Administrators treat Keryx as a guaranteed emergency channelHarm can result from network, OS, focus mode, power, or service failuresP1-10 (safety-claims.md) locks supplemental claims, fallback, training, and escalation; listings/support copy via #105/#120/#121

Launch and operating measures

Targets are set in P0/P4; no numeric SLO is invented here. At minimum, the launch review must define and collect:

  • eligible SafeCall installations and administrator adoption by client;
  • successful onboarding rate from friendly category selection through QR scan to first verified test notification, including failures requiring transport knowledge or support intervention;
  • foreground, background, terminated, reboot, and upgrade delivery results by supported platform/OEM tier;
  • notification delivery latency and missed/duplicate rate in the controlled pilot;
  • crash-free sessions or an explicitly approved privacy-preserving alternative;
  • support contacts by severity, first-response time, and time to resolution;
  • beta and production adoption by supported version;
  • store review/rating themes and policy warnings;
  • release lead time, rejection rate, and emergency-fix drill time;
  • credential/certificate renewal status and dependency/security advisory age.

Metrics must not introduce analytics or identifiers. P0-05 prohibits an analytics or crash SDK at launch; P1 privacy work must approve purpose, collection, retention, and disclosure before any later signal is added.

Accepted and deferred risks

No launch risk is accepted yet. An accepted entry must include:

  • risk ID and linked GitLab work item;
  • decision date and decision maker;
  • affected clients/platforms and administrator impact;
  • compensating controls and support wording;
  • expiry/review date;
  • trigger that reopens the work.

Desktop/web distribution, optional promotional video, automated store upload, critical-alert entitlement, and in-app update enforcement may be deferred only after their owning issue records why they are unnecessary for the selected launch.

Audit evidence

Primary repository evidence:

  • keryx/pubspec.yaml
  • keryx/lib/
  • keryx/test/
  • keryx/android/app/build.gradle.kts
  • keryx/android/app/src/main/AndroidManifest.xml
  • keryx/vendor/ntfy/android/src/main/AndroidManifest.xml
  • keryx/ios/Runner/Info.plist
  • keryx/ios/Runner/Runner.entitlements
  • keryx/ios/Runner/AppDelegate.swift
  • keryx/vendor/ntfy/
  • web/src/admin/tools/mobile-access/mobile-access.ts
  • web/tests/e2e/mobile-access.spec.ts
  • server/src/ntfy.ts
  • server/src/ntfy_topics.ts
  • server/src/events.ts
  • docs/mobile/keryx.md
  • docs/mobile/keryx-publishing.md
  • package.json
  • scripts/release/mobile.ts
  • website/

GitLab was checked across all current issue states before bootstrap. No existing issue, label, or milestone matched Keryx GTM, app-store, Google Play, release, branding, privacy, or update-process work.