Use the maintained docs before making repo-specific assumptions:
- Project shape and architecture:
docs/project-overview.md - Local development, tests, CI, and troubleshooting:
docs/development.md - TestFlight and App Store release process:
docs/release-process.md
Keep this file focused on agent operating rules. Prefer updating the canonical docs over duplicating long architecture or release details here.
- iOS 26+ target, Swift 6.4, SwiftUI, Swift Package modules.
- Packages:
Domain,Data,Networking,Shared,DesignSystem, and feature modules underFeatures. - Current feature modules:
Authentication,Feed,Comments,Settings, andWhatsNew. - UI state generally uses Swift Observation (
@Observable,@Environment,@State) with Combine still present where existing code requires it. - ViewModels and services should receive dependencies through protocols, initializers, or composition factories.
- Keep
DependencyContainer.sharedusage near app and feature composition boundaries.
Always run xcodebuild commands from the project directory.
Reuse stable DerivedData and build incrementally by default. Clean only when diagnosing build-cache problems; use fresh DerivedData only if cleaning fails or a clean release/CI build is required.
xcodebuild -project Hackers.xcodeproj -scheme Hackers -destination 'platform=iOS Simulator,name=iPhone 17 Pro' buildUse the project test runner:
./run_tests.sh
./run_tests.sh Domain
./run_tests.sh Feed Comments SettingsDo not use swift test for project validation. Packages target iOS APIs and must run through Xcode with an iOS Simulator destination.
For UI smoke coverage, use:
./run_ui_tests.sh smokeFor user-reported visual bugs, screenshots are the source of truth.
- Reproduce the same screen, state, device class, and presentation path before changing code when feasible.
- For a visual fix, verify with a post-fix screenshot of the same flow. UI tests and accessibility frame checks are supplemental; they do not prove a visual bug is fixed by themselves.
- Match verification scope to the claim: one matching viewport is enough for a narrow visual fix; check orientations, iPad, or multiple sizes only when requested or when the change touches adaptive layout.
- If the visual state cannot be reproduced, say so clearly and do not claim the issue is fixed.
- If new visual evidence contradicts the working hypothesis, stop changing code and reassess before stacking more commits.
Follow docs/release-process.md as the source of truth.
Key release invariants: use the documented TestFlight tag/version relationship, update both app targets and user-facing release content, and keep App Store copy separate from GitHub/TestFlight material. Preserve failure artifacts before changing secrets or signing assets; treat a successful release tag as immutable.
- Keep changes task-scoped; prefer existing files and create only necessary task-owned files.
- Stage only relevant files or hunks, leave unrelated worktree changes intact, and use concise descriptive commits rather than amending existing ones.