Files

3.8 KiB
Raw Permalink Blame History

Integration runbook

The integrating engineer owns main, dependency direction, shared types, build settings, app composition and evidence quality. Feature agents own implementations within their briefs. Never delegate integration by asking every agent to edit project.pbxproj.

Before parallel dispatch

  1. Agree on the provisional brand/repository slug with the owner. Confirm TV identifier and exact software builds when hardware work starts.
  2. Tag a known baseline locally after checks; record SHA in the task roster. Prepare one worktree/branch per workstream. Shared worktree agents must be restricted to separate paths.
  3. Freeze v1 command types and add typed session handshake, TV connection state and injected storage/motion protocols. Provide fake implementations and representative fixtures first. Review error semantics, cancellation and ownership with A/B/C/E before coding production adapters.
  4. Wire adapter test targets and validate their platform availability. Keep platform-specific frameworks out of pure Swift algorithm modules.

Per PR

Read the actual diff and test output, not just the agent summary. Confirm module ownership, no copied dependencies, no private APIs, no trust bypass, no replay and no unsupported background modes. Review concurrency around actor reentrancy and TV/session generation changes. Merge into an integration branch, resolve conflicts at the shared contract (never add a second near-identical type), then run bash Scripts/check.sh --apps against the combined commit.

Compile success validates type/build integration only. Run actual phone-watch activation and TV pairing checks for adapters, with hardware evidence linked to that SHA. Keep failed checks and environmental limitations visible. Revert the smallest faulty PR or keep the feature explicitly in demo/disabled state until fixed. Do not broaden a tested-TV claim to other years/models.

Vertical slices

Milestone Demonstration required Exit condition
M0 foundation Demo apps + domain tests Both targets compile, documentation consistent
M1 named phone remote TV prompts for Wristivo; phone right button moves selection TLS policy, pairing/revocation and tokens verified
M2 watch relay Watch button moves selection through phone Deadline/dedup, phone lock/wake and failure states measured
M3 wrist input Real right/left/up/down movements control menu Gesture targets and lifecycle stop pass
M4 product prototype Setup, forget, recovery, accessible controls Reproducible owner acceptance on named hardware
M5 distribution Signed beta and review package Paid membership, rights/privacy/assets and all release gates

Each milestone is an evidence gate, not a deadline estimate. Do not promise release dates until M1–M3 retire the hardware risks. If phone-background reliability requires keeping the phone app open, make that constraint explicit and reassess product value before release.

Project and release management

Scripts/generate-project.rb uses development-only xcodeproj 1.27.0; the generated project is committed. Keep changes deterministic, review diffs and build both schemes after regeneration. Signing overrides stay in ignored Config/Local.xcconfig. Never commit a developer team, certificate or token. Set owned bundle identifiers before provisioning; the com.example prefix is for scaffold builds only.

Before a release tag, read RELEASE-CHECKLIST, compare privacy policy to code, run physical regressions, capture accurate screenshots and review video, then archive with the supported stable Xcode/SDK required at submission time. The currently installed toolchain is not proof of App Store SDK eligibility. Separate unsigned CI checks from signing/distribution jobs with minimal credentials. Gitea source hosting is independent of Apple membership.