Review: Build and upload first TestFlight beta (re-review)

review-1809-2026-07-05-r2 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Re-review of board item #1809. Previous review (review-1809-2026-07-05) returned NEEDS_REFINEMENT with three findings. Two of three are now resolved; one new issue found.

Previous Findings Resolution

  • [x] [SCOPE] arch-palinks note -- RESOLVED. arch-palinks note now exists in pal-e-docs (note_type: architecture, project: palinks). Includes Mermaid diagram, component table, key decisions, and iOS component entry.
  • [x] [BODY] Repo placement -- RESOLVED. Issue body now reads: ldraney/palinks-ios (issue filed on palinks for centralized sprint tracking). Convention is documented.
  • [x] [BODY] ./build-testflight.sh reference -- RESOLVED. AC item 4 now reads: ./build-testflight.sh uploads build to TestFlight (wraps keychain fix + fastlane beta).

Template Completeness

  • [x] Type -- Feature
  • [x] Lineage -- Standalone, next step after #56
  • [x] Repo -- ldraney/palinks-ios (centralized tracking documented)
  • [x] User Story -- present
  • [x] Context -- present
  • [x] File Targets -- 2 files in palinks-ios + source file noted
  • [x] Feature Flag -- none (appropriate for manual iOS build task)
  • [x] Acceptance Criteria -- 6 items
  • [x] Test Expectations -- manual (honest about non-automatable workflow)
  • [x] Constraints -- present (MacBook, Apple team, icon source, build-testflight.sh)
  • [x] Checklist -- present
  • [x] Related -- project-palinks

Traceability

  • [x] story:ios-distribution label -- Turbo Native iOS shell + TestFlight + App Store
  • [x] story note verified -- found in project-palinks user-stories section (status: in progress)
  • [x] arch:palinks label -- palinks component
  • [x] arch note verified -- arch-palinks note exists in pal-e-docs (slug: arch-palinks, note_type: architecture, updated 2026-07-06). Includes iOS component in diagram and component table.
  • [x] Forgejo issue -- ldraney/palinks#59, open

File Targets

  • [ ] palinks-ios/PalinksApp/Assets.xcassets/AppIcon.appiconset/AppIcon.png -- ISSUE: Directory PalinksApp does not exist. The actual directory is Palinks (confirmed via project.yml target sources and Forgejo API tree listing). Correct path: Palinks/Assets.xcassets/AppIcon.appiconset/AppIcon.png (file to be created).
  • [ ] palinks-ios/PalinksApp/Assets.xcassets/AppIcon.appiconset/Contents.json -- ISSUE: Same directory name error. Correct path: Palinks/Assets.xcassets/AppIcon.appiconset/Contents.json (file exists in repo).
  • [x] app-icon.png (palinks repo root, source) -- verified: 46KB file exists.

Repo Placement

OK. Issue is filed on ldraney/palinks for centralized sprint tracking; ### Repo section explicitly documents that work is in ldraney/palinks-ios. The palinks-ios repo exists on Forgejo (not empty, has PR #1 merged). Convention is consistent with sibling ios-distribution issues (#56, #57, #60, #61).

Dependencies

  • #56 (iOS distribution: Create Turbo Native shell + Fastlane pipeline) -- closed on Forgejo, in validation column on board. Direct predecessor per Lineage section. Should complete validation before #59 moves to in_progress.
  • #57 (Update stale docs, add CLAUDE.md, iOS docs, and app icon) -- sibling in backlog, not a blocker.
  • #60 (Mobile CSS polish for iOS WKWebView) -- sibling in backlog, can proceed in parallel.
  • #61 (App Store metadata and privacy policy page) -- downstream, depends on this ticket completing.

Acceptance Criteria

6 criteria, all manual MacBook + device work. Sequentially ordered and clear. Agent cannot verify remotely (ticket honestly acknowledges with "Run command: n/a"). ./build-testflight.sh wrapper now correctly referenced in AC item 4, matching the script that exists in the palinks-ios repo root (224 bytes).

Blast Radius

Limited. Work is confined to palinks-ios (icon copy + build). No changes to the palinks Rails app. Same Apple Developer team (HAY64YD5PX) shared with landscaping-assistant-ios -- no conflict expected (different bundle IDs: com.palinks.app vs landscaping-assistant's). No downstream consumers affected by initial TestFlight upload.

Decomposition Assessment

2 file targets in 1 repo. 6 acceptance criteria (tightly coupled as a single build-upload workflow). Estimated time: 15-30 minutes of manual MacBook work. No decomposition needed.

Recommendations

  • [BODY] Fix file target paths: PalinksApp/ does not exist in the palinks-ios repo. The correct directory is Palinks/ (per project.yml target sources). Update both paths: