Review: App Store metadata and privacy policy page
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- present
- [x] Repo -- present (ldraney/palinks and ldraney/palinks-ios)
- [x] User Story -- present
- [x] Context -- present
- [x] File Targets -- present (but has accuracy issues, see below)
- [x] Feature Flag -- "none" (appropriate for a static page)
- [x] Acceptance Criteria -- present (4 items)
- [x] Test Expectations -- present
- [x] Constraints -- present
- [x] Checklist -- present
- [x] Related -- present
Traceability
- [x] story:ios-distribution label -- "Turbo Native iOS shell + TestFlight + App Store (in progress)"
- [x] story note verified -- found in project-palinks user-stories section
- [x] arch:palinks label -- present on board item
- [ ] arch note MISSING -- [SCOPE] Create architecture note arch-palinks. Search returned no results.
- [x] Forgejo issue -- ldraney/palinks#61, open
File Targets
palinks (Rails) -- needs work:
- [x]
app/views/pages/privacy.html.erb-- valid: file does not exist yet, needs creation - [x]
config/routes.rb-- valid: file exists, needs /privacy route added - [ ]
app/controllers/pages_controller.rb-- MISSING FROM TARGETS: Rails requires a controller to serve views. No PagesController exists. The ticket must add this file target.
palinks-ios -- mostly already done:
- [x]
fastlane/metadata/en-US/description.txt-- valid: file does not exist (404), needs creation - [ ]
fastlane/metadata/en-US/privacy_url.txt-- STALE: already exists with "https://palinks.app/privacy" - [ ]
fastlane/metadata/en-US/support_url.txt-- STALE: already exists with "https://palinks.app" - [ ]
fastlane/metadata/en-US/release_notes.txt-- STALE: already exists with release notes - [ ]
fastlane/metadata/copyright.txt-- STALE: already exists with "2026 PAL Enterprises" - [ ]
fastlane/Deliverfile-- STALE: already exists with age rating and content rights configured
5 of 6 palinks-ios file targets already exist with the expected content, created during issue #56 (Turbo Native shell + Fastlane pipeline, now in validation/closed).
Repo Placement
Issue filed on ldraney/palinks but scopes work across both palinks and palinks-ios. Since most palinks-ios work is already complete from issue #56, the remaining cross-repo work is trivial (one file: description.txt). Consider narrowing scope to palinks-only and handling description.txt as part of issue #59 (TestFlight beta upload), or keeping it here but correcting the file targets.
Dependencies
- #56 (Turbo Native shell + Fastlane pipeline) -- validation/closed. Created the existing fastlane metadata files. Not a blocker.
- #59 (Build and upload first TestFlight beta) -- backlog. Likely depends on #61 having the /privacy page deployed so Apple review can access it.
- #60 (Mobile CSS polish for iOS WKWebView) -- backlog. Independent.
- #57 (Update stale docs, add CLAUDE.md, iOS docs, and app icon) -- backlog. Independent.
- No blockers for #61 itself. No dependencies documented in the issue.
Acceptance Criteria
- 4 criteria, reasonable scope
- AC 1 ("/privacy route returns a basic privacy policy page") -- agent-verifiable via curl or test
- AC 2 ("fastlane metadata files populated for App Store") -- agent-verifiable by checking file existence, but 5 of 6 already done
- AC 3 ("fastlane prepare_metadata uploads successfully") -- NOT agent-verifiable, requires MacBook with Apple credentials
- AC 4 ("Privacy policy states: no personal data collected") -- agent-verifiable by checking page content
- Missing: no AC for the PagesController existing or for proper HTML structure/layout of the privacy page
Blast Radius
Low. No existing privacy, policy, or pages patterns in the codebase. The new route, controller, and view are fully isolated. No downstream consumers affected. No similar patterns to check in sibling services.
Decomposition Assessment
Actual remaining work: 3 files in palinks (controller + view + routes modification), 1 file in palinks-ios (description.txt). 4 acceptance criteria. Estimated agent work: under 5 minutes. No decomposition needed. The issue overstates scope due to stale file targets.
Recommendation
[BODY]Add missing file target:app/controllers/pages_controller.rb-- Rails requires a controller to serve the privacy view[BODY]Remove or mark as "already exists" the 5 stale palinks-ios file targets (privacy_url.txt, support_url.txt, release_notes.txt, copyright.txt, Deliverfile) -- these were created by issue #56[BODY]Update AC 2 to reflect that only description.txt needs creation in palinks-ios[SCOPE]Create architecture notearch-palinksfor the palinks component -- the label references a note that does not exist in pal-e-docs