Implement or materially change a LinePaycheck native iOS feature. Use for SwiftUI screens, app state, navigation, adapters, StoreKit, persistence, OCR, export, or other iOS product work.
Install
npx skillscat add runlumi/linepay/ios-feature Install via the SkillsCat registry.
LinePaycheck iOS feature workflow
Use this workflow for a real product slice, not for a trivial typo.
1. Load focused context
Read:
AGENTS.mdapps/ios/AGENTS.mddocs/engineering/ios-best-practices.mddocs/plan/ios-1.0.mdwhen scope/sequence mattersDESIGN.mdwhen the change is user-facing
Do not preload unrelated research/docs.
Run bash scripts/agent-context.sh when you have a local checkout. If the generated apps/ios/LinePay.xcodeproj is absent and you want to use Xcode or XcodeBuildMCP directly, run:
bash scripts/bootstrap-ios.shThe project is generated output and is intentionally not committed. Repository verification scripts generate it themselves when needed.
2. Inspect before designing
Find the nearest existing feature pattern and its tests. Identify:
- source of truth for state;
- domain behavior already available;
- adapter boundary if platform APIs are involved;
- existing accessibility/test selector pattern;
- the product invariant most likely to be violated.
Prefer extending a clear existing seam over introducing a new layer.
3. Define the smallest coherent behavior
Write a short internal acceptance statement such as:
Given X state, when the worker performs Y, LinePaycheck produces Z visible/auditable result.
Implement that vertical slice completely. Avoid scattering placeholders across future features.
4. Preserve architecture
- SwiftUI renders observable state and sends intent.
AppModelmay coordinate small app behavior while it remains cohesive.- Payroll calculations belong in
LinePayDomain. - Platform adapters own SwiftData/Vision/StoreKit/Files details.
- Do not add a protocol, repository, manager, coordinator, or dependency merely for symmetry.
- Keep public brand
LinePaycheck; keep technical bundle/scheme/module identifiers unchanged.
5. Test at the cheapest useful layer
- Domain semantics: pure Swift Testing tests.
- App orchestration: app test target.
- Persistence migrations / OCR / StoreKit adapters: focused integration tests.
- Critical journey: Maestro only when black-box UI behavior is what needs proof.
Do not make E2E tests carry arithmetic correctness.
6. Inspect user-facing work
When simulator tooling is available:
- build and launch the real app;
- navigate through changed states;
- inspect light/dark mode when relevant;
- inspect Dynamic Type/long content risk;
- inspect accessibility hierarchy/identifiers;
- capture a screenshot when visual review materially helps;
- fix obvious hierarchy, spacing, clipping, keyboard, sheet, or state-transition problems before handoff.
Prefer XcodeBuildMCP for iterative agent interaction if available. Use checked-in Maestro flows for durable regression coverage.
7. Verify once at the right breadth
During iteration, run focused tests. Before handoff:
bash scripts/agent-verify.sh iosFor a critical UI journey or Maestro change:
bash scripts/agent-verify.sh uiDo not repeat the full gate after it passes unless subsequent edits could invalidate it.
8. Handoff
Report:
- user-visible behavior changed;
- important design/architecture choice;
- tests/builds actually run;
- simulator/visual verification performed;
- any real unresolved limitation.