TestFlight iteration — validate full flow on iPhone #80
Labels
No labels
domain:backend
domain:devops
domain:frontend
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
forgejo_admin/westside-landing#80
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Feature
Lineage
project-capacitor-mobile→ Board item (westside first consumer)Repo
forgejo_admin/westside-appUser Story
As Lucas
I want to test the westside app on my iPhone via TestFlight
So that I can validate the full user flow before App Store submission
Context
First TestFlight build installed on physical device. Iterate on iOS-specific issues: status bar, safe area insets, keyboard handling, native auth flow. Full flow validation: landing → registration → payment → login → dashboard → jersey ordering.
Blocked by: iOS build pipeline (westside-app #79).
File Targets
Files likely to modify (discovered during iteration):
src/app.css— safe area insets, status bar paddingsrc/routes/+layout.svelte— viewport meta, iOS-specific adjustmentscapacitor.config.ts— server config, plugin settingsFiles NOT to touch:
Acceptance Criteria
Test Expectations
Constraints
Checklist
Related
project-capacitor-mobile— TestFlight iteration storysop-capacitor-mobile-lifecycle— Gate 4Ticket Scope Review -- Issue #80
TEMPLATE COMPLIANCE
Checked against
template-issuerequired sections:### Lineageproject-capacitor-mobilewith board item context### Repoforgejo_admin/westside-app### User Story### Context### File Targets### Acceptance Criteria### Test Expectations### Constraints### Checklist### RelatedExtra section:
### Type(Feature) -- not in the template but harmless.Result: PASS -- all required template sections present.
TRACEABILITY
Labels:
story:iterate, arch:testflight, type:feature, consumer:westsideproject-capacitor-mobile?story:iteratearch:testflightBoard item: Present on
board-capacitor-mobile(item #372), currently in backlog column.Result: PASS -- both story and arch labels trace to documented entries.
ACCEPTANCE CRITERIA TESTABILITY
Result: NEEDS WORK -- criterion 3 ("all 14 routes") references an unspecified route list. Either enumerate the routes inline or reference a document that lists them.
SCOPE ASSESSMENT
This ticket is correctly scoped as iterative, human-in-the-loop work. The Constraints section explicitly states "Lucas must be in the loop for this -- it's iterative and taste-driven." This is not agent-automatable work -- it requires physical device testing and taste-driven UI judgment. Well-scoped.
DEPENDENCY CHECK
The issue states: "Blocked by: iOS build pipeline (westside-app #79)."
board-capacitor-mobileitem #371) with labelsstory:cap-build,arch:ios-pipeline,type:infra,consumer:westside.Concern: This issue (#80) cannot move to
next_upwhile its blocker (#79) is still in backlog. The dependency is correctly identified but the board state means this ticket is not yet actionable. Recommend moving totodo(reviewed and scoped, but blocked) rather thannext_upuntil #79 progresses.RELATED SECTION
project-capacitor-mobile-- correct, exists, this issue traces to it.sop-capacitor-mobile-lifecycle-- Gate 4 reference is incorrect. The SOP defines Stages 1-4 (Playground, Promotion, Local Validation, Production Deploy) and Gates 1-2 (Phone Approval, Output Contract). There is no "Gate 4." TestFlight iteration falls AFTER Stage 4 (Production Deploy) in the pipeline -- it is a post-production activity not explicitly gated in the current SOP. Fix: either remove the Gate 4 reference or update the SOP to define Gates 3-4 for TestFlight and App Store.ITEMS TO FIX
sop-capacitor-mobile-lifecyclehas no "Gate 4." Either reference "Stage 4" or note that TestFlight iteration is post-pipeline.todo(scoped and reviewed, awaiting blocker resolution), notnext_up, until #79 is at leastin_progress.VERDICT: NEEDS WORK
Three items to fix before this ticket moves to
next_up:Ticket Fix (QA review remediation)
Route List (enumerated)
The 14 routes to validate on iOS:
/— landing/home/signin— Keycloak login redirect/register— player registration/forgot-password— password reset/reset-password— set new password/admin— admin dashboard/coach— coach dashboard/coaches— coach directory/teams— team listings/players— player directory/my-players— parent's player view/checkout— Stripe payment/jersey— jersey selection/tryouts— tryout informationGate Reference (corrected)
Removed reference to "Gate 4" —
sop-capacitor-mobile-lifecycleonly defines Gates 1-2. TestFlight validation is a pipeline stage gate that will be defined when the SOP is expanded (discovered scope for pal-e-platform). For now, the acceptance criteria on this ticket ARE the gate.Column
Backlog is correct — blocker #79 (iOS build pipeline) is also in backlog.
Issue #80 Re-Review
Re-review of "TestFlight iteration -- validate full flow on iPhone" following fix comment posted 2026-03-26.
ORIGINAL FINDINGS STATUS
Finding 1: Routes not enumerated -- PARTIALLY FIXED
The fix comment enumerates 14 routes. However, cross-referencing against the actual codebase (
westside-app/src/routes/) reveals 21+page.sveltefiles, not 14. The enumeration has two categories of errors:Misnamed routes (3):
/coacheslisted but actual route is/coaches/[id]/+page.svelte/teamslisted but actual route is/teams/[id]/+page.svelte/playerslisted but actual route is/players/[id]/+page.svelteMissing routes (7):
/admin/teams-- admin sub-route/admin/players-- admin sub-route/players/[id]/billing-- player billing sub-route/checkout/success-- Stripe redirect/checkout/cancel-- Stripe redirect/jersey/success-- Stripe redirect/jersey/cancel-- Stripe redirectIt is reasonable to argue that success/cancel pages are trivial redirect destinations and that dynamic routes like
/players/[id]subsume their parent listing. If that is the intentional scoping, the acceptance criteria should say so explicitly (e.g., "All 14 primary routes render correctly; success/cancel redirect pages and dynamic sub-routes excluded from manual validation"). As written, "All 14 routes" is undercounting what exists in the codebase and will leave 7 pages untested.Finding 2: Gate 4 reference -- FIXED
The fix comment correctly acknowledges that
sop-capacitor-mobile-lifecycledefines Gates 1-2 only and removes the Gate 4 claim. Acceptance criteria serve as the interim gate. This is clean.Finding 3: Column -- FIXED
The fix comment correctly argues backlog is appropriate since blocker #79 (iOS build pipeline) is also in backlog. Board data confirms: item #372 (this issue) and item #371 (#79) are both in backlog. No premature promotion.
TRACEABILITY VERIFICATION
Checked
story:iterateandarch:testflightagainstproject-capacitor-mobile:story:iterate,arch:testflight,type:feature,consumer:westside. All labels resolve. Traceability triangle is intact.PROCESS OBSERVATION
The fix was posted as a comment but the original issue body was not updated. The acceptance criteria in the body still reads "All 14 routes" without enumeration. For ticket clarity, the enumerated route list should be in the issue body itself, not buried in a comment thread.
ITEMS REMAINING
+page.sveltefiles, or explicitly scope which routes are excluded from TestFlight validation and why. The codebase is the source of truth, not the count in the comment.VERDICT: NOT APPROVED
Finding 1 is not fully resolved. The route enumeration undercounts the actual codebase by 7 pages and misnames 3 routes. This is an acceptance criteria accuracy issue -- if TestFlight validation is scoped to a subset, say so; if it covers all routes, list all routes. Fix the enumeration and update the issue body.
Ticket Fix v2 (corrected route enumeration)
Previous fix listed 14 routes. Actual codebase has 21
+page.sveltefiles. Corrected list:All 21 Routes to Validate on iOS
Public:
/— landing/home/signin— Keycloak login redirect/register— player registration/forgot-password— password reset request/reset-password— set new password/tryouts— tryout informationAuthenticated (player/parent):
7.
/my-players— parent's player view8.
/checkout— Stripe payment9.
/checkout/success— Stripe success redirect10.
/checkout/cancel— Stripe cancel redirect11.
/jersey— jersey selection12.
/jersey/success— jersey order success13.
/jersey/cancel— jersey order cancel14.
/players/[id]— player profile detail15.
/players/[id]/billing— player billing historyAuthenticated (coach):
16.
/coach— coach dashboard17.
/coaches/[id]— coach profile detailAuthenticated (admin):
18.
/admin— admin dashboard19.
/admin/teams— team management20.
/admin/players— player management21.
/teams/[id]— team detailAll 21 must render without layout breaks on iOS. Dynamic
[id]routes need test data (at least one real player, coach, and team in the system).