You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Church/Basketball business milestone is complete. Native release remains an optional platform track and is not required for the current web/API release work.
Execution lane:phase: platform-later. Status: deferred for native release.
Current Evidence
Deterministic client generation and maintained Flutter tests are documented. An iOS simulator flow and Android debug APK build have passed previously. Current host discovery shows an available iOS simulator, no Android emulator/system image and no physical device. This is not signed-device or store-release evidence.
Remaining
When the owner prioritizes native release and names the target platforms, refresh generation against the selected API revision, run maintained/generated tests, validate offline/retry/restart and core flows on the required simulators and physical devices, then prepare signing/store artifacts only with explicit authorization. Do not install global Android system images, use signing identities, submit to stores or claim physical-device acceptance without authorization and evidence.
All tests and code review remain local. GitHub Actions does not run tests, and Ollama is not a code-review provider.
Current Implementation Handoff
Prepared 2026-09-13 for a lower-cost builder at source 21a4a804aa57580451edded04736b1f51aef7e48. No CI checks. All implementation validation and code review run locally.
Use the shared builder contract and this issue's work packages; no xhigh model or automatic model upgrade is required. This is a detailed recommendation, not a claim that a smaller model cannot make mistakes or that tests have passed.
Risk/review focus: Medium/high: generated client contracts and native release. Start condition: DEFERRED FOR NATIVE RELEASE. Continue only when the owner prioritizes the native track and names targets; do not install global images or use signing/store accounts without authorization.
make mobile-codegen pins the npm wrapper but still uses --skip-validate-spec and a hardcoded developer Flutter path. Validate actual generator/JDK/Flutter versions; do not repeat the historical claim that Java is unavailable on today's machine.
This handoff supersedes stale implementation statements in the background below. Preserve existing successful behavior and tests. Recheck the current branch before editing; the baseline is a source pointer, not permission to discard newer changes.
Shared source/ORM/migration changes are serialized per the master roadmap. Do not start concurrent edits to the same ownership area.
Recommended Decisions
Generate from a locally validated current OpenAPI snapshot. Pin both wrapper and actual generator version; remove hardcoded developer paths and resolve supported FLUTTER/DART/JAVA overrides.
Regenerate the complete client/docs/tests deterministically; never manually patch generated outputs to manufacture compatibility. Run generation twice and require the second run to produce no unexpected changes.
Keep widget/unit, emulator integration, native build, signing/upload and physical-device acceptance distinct. No visible device is not a passing test.
Preserve secure storage, refresh/revocation and deep-link recovery; validate backend auth/schema-only changes against native callers, not only files under mobile/.
Small Work Packages
Each item is one reviewable slice, not permission for one giant PR. Add the failing regression first; finish code, tests and affected docs for that slice together. Leave this issue open until all packages and original acceptance criteria are satisfied or explicitly revised by the owner.
191.1: Repair/preflight the generator toolchain in one narrow PR and validate the schema before generation.
191.2: Regenerate, review endpoint/model diffs including string SMS IDs and corrected auth contracts, then adapt maintained app code.
191.3: Run analysis/unit/widget/integration/native builds on explicitly named local targets; verify login/invite/reset/offline/retry and six-week member flows.
191.4: Update all native release/support docs and generated-doc link results; record artifact/device/server identities and request separate store authorization.
Required Regression Cases
These are specifications for tests to add/retain, not claimed execution results. Each new negative case must assert unchanged unauthorized state and zero forbidden side effects.
T191-01: Second identical generation -> no drift; invalid schema or missing tool -> clear failure.
T191-02: Expired/revoked session -> refresh/sign-in as designed, with no token logged or preserved after logout.
T191-03: Invitation/reset deep link with valid/expired/malformed token -> usable correct screen or safe fallback; wrong tenant cannot be accessed.
T191-04: Offline/retry and app restart preserve intended state without duplicate claims; simulator pass is not labeled physical-device pass.
Local Commands and Evidence
Existing targeted commands (paths checked against the audit source; run only after the stated safe preflight):
poetry run pytest tests/contract -q
make mobile-codegen
make test-mobile
./mobile/scripts/run_integration_tests.sh
Also run the shared formatting/lint/touched-type/unit/full-suite and local review protocol from #252 for the final pushed revision. Add new targeted tests to these commands when implemented. Run API and browser tiers in separate processes. Native, PostgreSQL, image, provider and operator drills require their explicit environment; an unavailable tool/target is blocked/not run, never a pass.
Schema and Compatibility
Generated API changes follow the canonical snapshot and reviewed server migrations. Native build numbers/store metadata are separate release changes, not automatic codegen churn.
Stop Conditions
Missing JDK/Flutter/device/signing credentials blocks only the affected slice. Do not auto-install global tools, use signing secrets or submit a store release without approval.
After two failed focused repair attempts without new diagnostic evidence, stop the affected package and post the exact failure, commands, suspected boundary and needed decision. Do not silently broaden scope, weaken tests or upgrade models. A fresh local reviewer checks: Inspect schema diff and generated determinism, maintained caller adaptations, secure storage/deep links and actual native artifact/device outcomes.
Completion Receipt
Work-package and regression IDs above map to changed files and actual results.
Commands, versions, dates, pass/fail/skip/not-run counts, logs/screenshots and tested head/base SHAs are linked.
A separate local review records findings and resolution; self-review is labeled if used and is not misrepresented as independent review.
Affected docs/README/playbooks/screenshots and dependency/roadmap status are reconciled, not left as unnamed follow-ups.
If implementation is authorized through PR/merge, GitHub reports mergeable and the shared local-evidence requirements are met; reviewer agents never merge.
No hosted CI check, status attestation, Ollama reviewer, live provider action, deployment, real-data purge or store submission was introduced by implication.
Copyable Builder Prompt
First read this issue's Current Priority Decision and #289. Run only its NOW slice.
If this issue is deferred, report that state instead of starting the older package list.
Implement the next ready work package in tomqwu/SignUpFlow issue #191.
Read its Current Implementation Handoff and #252 Builder Handoff Contract first.
Inspect current source and preserve newer/unrelated changes. Start with the
package's failing regression, then complete code, local tests, local review and
affected docs/assets together. Do not skip acceptance or invent passing evidence.
No CI checks or Ollama code review. Do not deploy, activate providers, purge real
data or submit to stores. Stop and report unmet prerequisites or policy decisions.
Record the package/test IDs and exact reviewed/tested source SHAs before claiming done.
Earlier Audit and Acceptance Context
Current policy (2026-09-13)
No CI checks. Everything is validated locally. This includes code review,
formatting, lint, type checks, migrations, all test tiers, security scans,
artifact checks and mobile validation. Do not add hosted jobs, required CI
statuses, synthetic success checks or an Ollama reviewer. GitHub is for source,
PRs, issues and publication, not validation.
Record commands, environment, results, limitations and reviewed head/base SHAs.
Builders merge only with completed local evidence and GitHub mergeability;
reviewer agents never merge. Real staging/provider/device acceptance remains
required where applicable, driven by authorized local operator tools.
Historical evidence and older comments do not override this policy.
Production readiness update (2026-09-09)
Parent roadmap: #252. Priority: P2, optional native-release track (Phase E); does not block the web/API pilot. Suggested owner: Mobile engineer. Original estimate (superseded; re-estimate remaining work): 3-5 engineering days plus device/signing access.
The May 19 comment already corrected the original Java-only blocker: that environment had Java but lacked Flutter/Dart. Tool availability must be rechecked on the implementation machine; neither absence is assumed for today's environment. The generated client remains documented as stale in mobile/README.md. Preserve generated output integrity and do not hand-edit client files to simulate codegen.
Run the existing contract snapshot checks first; regenerate from the canonical schema and review only intentional output changes. Add a reproducibility/drift check so future API changes cannot silently strand the client.
Pin a compatible local Flutter version, use the lockfile, and require local drift validation for backend/schema changes as well as mobile changes. Record results in the PR (P1: Make local validation and review evidence reproducible #259); do not add a CI job.
Run flutter analyze --no-fatal-infos, flutter test, and native builds. Exercise real iOS/Android login, secure token storage, expired-token refresh, invitation/reset deep links, permission denial, logout, offline/retry and current volunteer/admin core journeys against the staging release (P2: Build and validate the production artifact after business acceptance #265).
Follow the existing mobile smoke/TestFlight documents after verifying they match the current API. Record device/OS/build/server SHA, artifacts and actual outcomes. Signing, store submission and live release are separate owner decisions.
Acceptance criteria
Client code is reproducibly generated from the current schema; no hand-edited or unverified stubs.
An API/schema-only change includes recorded local mobile compatibility verification.
Analyze, unit/widget tests, Android/iOS builds and critical integration flows pass on documented supported toolchains.
Secure storage/refresh/revocation and invitation/reset fallback links work on real device/emulator runs.
The mobile support/release matrix names known limitations and links evidence; missing local/device evidence is not treated as a verified release.
README and this issue reflect the actual remaining blocker, not the historical Java-only assumption.
Original issue context
Status: blocked, not faked (per the GUI-e2e honesty rule).
The marathon added new API endpoints in P2 — POST /api/v1/auth/change-password (P1.2), the billing router (P2.14), and the sms router /api/sms/* (P2.16). The generated Flutter API client at mobile/api_client/ predates these and is therefore stale.
Regenerating it is make mobile-codegen, which runs @openapitools/openapi-generator-cli — a Java tool. This environment has no Java runtime (java -version → "Unable to locate a Java Runtime"), so the client cannot be regenerated or verified here.
Decision: do not commit a hand-edited / partial / unverified client (that's exactly the "faked mobile work" failure mode). This is filed as the known gap.
To resolve (env with JDK 17):
make mobile-codegen # regenerates mobile/api_client from tests/contract/openapi.snapshot.json
cd mobile && flutter analyze && flutter test
The OpenAPI snapshot is already current (refreshed in P2.14/P2.16), so codegen is a clean mechanical step once a JDK is available.
Tracked under the marathon (#145). P4.24 (Flutter CI lane) and P4.25 (honest unpark banner) proceed independently.
Whole-repository audit scope (2026-09-13)
Baseline: 21a4a804aa57580451edded04736b1f51aef7e48. This addendum assigns full-scope follow-through; it is not a new test pass or production sign-off. No CI checks; all review and validation runs locally.
Account for all 643 tracked mobile files, including 120 generated Markdown documents, generated Dart sources/tests, platform metadata/assets, two integration_test flows, fastlane, signing examples, prototypes and release docs. The link scan found 66 distinct generated-doc relative-target candidates; repair through generation/templates, never hand-edit generated output as proof. #277 owns documentation dispositions, #278 truthful README/site claims, #281 explicit local unit/widget versus integration/build command coverage. Run codegen and native artifact validation against the reviewed current schema after API contracts stabilize; review auth/deep links/storage/offline/UI behavior on named devices. Store submission, credentials and physical-device acceptance remain separate approvals; no native build or device run occurred in this planning audit.
Keep evidence and disposition synchronized with master roadmap #252 and documentation ledger #277. Close only after the remaining acceptance criteria have linked local results; a planning/audit note is not completion.
Current Priority Decision
The Church/Basketball business milestone is complete. Native release remains an optional platform track and is not required for the current web/API release work.
Execution lane:
phase: platform-later. Status: deferred for native release.Current Evidence
Deterministic client generation and maintained Flutter tests are documented. An iOS simulator flow and Android debug APK build have passed previously. Current host discovery shows an available iOS simulator, no Android emulator/system image and no physical device. This is not signed-device or store-release evidence.
Remaining
When the owner prioritizes native release and names the target platforms, refresh generation against the selected API revision, run maintained/generated tests, validate offline/retry/restart and core flows on the required simulators and physical devices, then prepare signing/store artifacts only with explicit authorization. Do not install global Android system images, use signing identities, submit to stores or claim physical-device acceptance without authorization and evidence.
All tests and code review remain local. GitHub Actions does not run tests, and Ollama is not a code-review provider.
Current Implementation Handoff
Prepared 2026-09-13 for a lower-cost builder at source
21a4a804aa57580451edded04736b1f51aef7e48.No CI checks. All implementation validation and code review run locally.
Use the shared builder contract and this issue's work packages; no
xhighmodel or automatic model upgrade is required. This is a detailed recommendation, not a claim that a smaller model cannot make mistakes or that tests have passed.Risk/review focus: Medium/high: generated client contracts and native release.
Start condition: DEFERRED FOR NATIVE RELEASE. Continue only when the owner prioritizes the native track and names targets; do not install global images or use signing/store accounts without authorization.
Source of Truth and Current State
Makefiletests/contract/openapi.snapshot.jsonmobile/pubspec.yamlmobile/pubspec.lockmobile/api_client/mobile/lib/mobile/integration_test/mobile/scripts/run_integration_tests.shmobile/SMOKE.mdmobile/TESTFLIGHT.mdmobile/ANDROID_RELEASE.mdmobile/fastlane/Fastfilemake mobile-codegen pins the npm wrapper but still uses --skip-validate-spec and a hardcoded developer Flutter path. Validate actual generator/JDK/Flutter versions; do not repeat the historical claim that Java is unavailable on today's machine.
This handoff supersedes stale implementation statements in the background below. Preserve existing successful behavior and tests. Recheck the current branch before editing; the baseline is a source pointer, not permission to discard newer changes.
Dependencies and Ownership
Recommended Decisions
Small Work Packages
Each item is one reviewable slice, not permission for one giant PR. Add the failing regression first; finish code, tests and affected docs for that slice together. Leave this issue open until all packages and original acceptance criteria are satisfied or explicitly revised by the owner.
Required Regression Cases
These are specifications for tests to add/retain, not claimed execution results. Each new negative case must assert unchanged unauthorized state and zero forbidden side effects.
Local Commands and Evidence
Existing targeted commands (paths checked against the audit source; run only after the stated safe preflight):
Also run the shared formatting/lint/touched-type/unit/full-suite and local review protocol from #252 for the final pushed revision. Add new targeted tests to these commands when implemented. Run API and browser tiers in separate processes. Native, PostgreSQL, image, provider and operator drills require their explicit environment; an unavailable tool/target is blocked/not run, never a pass.
Schema and Compatibility
Generated API changes follow the canonical snapshot and reviewed server migrations. Native build numbers/store metadata are separate release changes, not automatic codegen churn.
Stop Conditions
Missing JDK/Flutter/device/signing credentials blocks only the affected slice. Do not auto-install global tools, use signing secrets or submit a store release without approval.
After two failed focused repair attempts without new diagnostic evidence, stop the affected package and post the exact failure, commands, suspected boundary and needed decision. Do not silently broaden scope, weaken tests or upgrade models. A fresh local reviewer checks: Inspect schema diff and generated determinism, maintained caller adaptations, secure storage/deep links and actual native artifact/device outcomes.
Completion Receipt
Copyable Builder Prompt
Earlier Audit and Acceptance Context
Current policy (2026-09-13)
No CI checks. Everything is validated locally. This includes code review,
formatting, lint, type checks, migrations, all test tiers, security scans,
artifact checks and mobile validation. Do not add hosted jobs, required CI
statuses, synthetic success checks or an Ollama reviewer. GitHub is for source,
PRs, issues and publication, not validation.
Record commands, environment, results, limitations and reviewed head/base SHAs.
Builders merge only with completed local evidence and GitHub mergeability;
reviewer agents never merge. Real staging/provider/device acceptance remains
required where applicable, driven by authorized local operator tools.
Historical evidence and older comments do not override this policy.
Production readiness update (2026-09-09)
Parent roadmap: #252. Priority: P2, optional native-release track (Phase E); does not block the web/API pilot. Suggested owner: Mobile engineer. Original estimate (superseded; re-estimate remaining work): 3-5 engineering days plus device/signing access.
The May 19 comment already corrected the original Java-only blocker: that environment had Java but lacked Flutter/Dart. Tool availability must be rechecked on the implementation machine; neither absence is assumed for today's environment. The generated client remains documented as stale in mobile/README.md. Preserve generated output integrity and do not hand-edit client files to simulate codegen.
Plan and dependencies
make mobile-codegen. If optional provider endpoints are included, coordinate with P3: Defer paid billing and SMS product acceptance #270.flutter analyze --no-fatal-infos,flutter test, and native builds. Exercise real iOS/Android login, secure token storage, expired-token refresh, invitation/reset deep links, permission denial, logout, offline/retry and current volunteer/admin core journeys against the staging release (P2: Build and validate the production artifact after business acceptance #265).Acceptance criteria
Original issue context
Status: blocked, not faked (per the GUI-e2e honesty rule).
The marathon added new API endpoints in P2 —
POST /api/v1/auth/change-password(P1.2), the billing router (P2.14), and the sms router/api/sms/*(P2.16). The generated Flutter API client atmobile/api_client/predates these and is therefore stale.Regenerating it is
make mobile-codegen, which runs@openapitools/openapi-generator-cli— a Java tool. This environment has no Java runtime (java -version→ "Unable to locate a Java Runtime"), so the client cannot be regenerated or verified here.Decision: do not commit a hand-edited / partial / unverified client (that's exactly the "faked mobile work" failure mode). This is filed as the known gap.
To resolve (env with JDK 17):
The OpenAPI snapshot is already current (refreshed in P2.14/P2.16), so codegen is a clean mechanical step once a JDK is available.
Tracked under the marathon (#145). P4.24 (Flutter CI lane) and P4.25 (honest unpark banner) proceed independently.
Whole-repository audit scope (2026-09-13)
Baseline:
21a4a804aa57580451edded04736b1f51aef7e48. This addendum assigns full-scope follow-through; it is not a new test pass or production sign-off. No CI checks; all review and validation runs locally.Account for all 643 tracked mobile files, including 120 generated Markdown documents, generated Dart sources/tests, platform metadata/assets, two integration_test flows, fastlane, signing examples, prototypes and release docs. The link scan found 66 distinct generated-doc relative-target candidates; repair through generation/templates, never hand-edit generated output as proof. #277 owns documentation dispositions, #278 truthful README/site claims, #281 explicit local unit/widget versus integration/build command coverage. Run codegen and native artifact validation against the reviewed current schema after API contracts stabilize; review auth/deep links/storage/offline/UI behavior on named devices. Store submission, credentials and physical-device acceptance remain separate approvals; no native build or device run occurred in this planning audit.
Keep evidence and disposition synchronized with master roadmap #252 and documentation ledger #277. Close only after the remaining acceptance criteria have linked local results; a planning/audit note is not completion.