Skip to content

Add multi-device recording controls - #160

Open
kyleve wants to merge 12 commits into
mainfrom
codex/multi-device-recording
Open

Add multi-device recording controls#160
kyleve wants to merge 12 commits into
mainfrom
codex/multi-device-recording

Conversation

@kyleve

@kyleve kyleve commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Posted by an AI agent on kyleve's behalf.

Summary

  • add stable per-installation device identities plus CloudKit-synced device profiles and append-only recording policy changes
  • replace Location settings with a Devices screen for per-device automatic-recording toggles, nicknames, status/last-active state, remote acknowledgement, and archival
  • stamp automatic samples with their source device and exclude samples from disabled policy intervals across reports, widgets, recent activity, and issue detection while preserving raw history
  • migrate existing installs from the local tracking preference and extend backup format v3 with device provenance, profiles, and policies
  • enable the app's CloudKit and remote-notification capabilities and document production schema deployment plus two-device release validation
  • keep device status rows compact across form layouts while preserving VoiceOver's combined status value
  • require agents to commit verified completed work and push each commit unless explicitly asked to keep it local

Why

A device left at home can continue recording its stationary location while the user is traveling with another device. Those samples contradict the user's actual location and can corrupt downstream reports. This makes recording intent device-specific and synchronizes a strong timestamped cutoff to every installation.

Behavior and compatibility

  • current-device changes apply immediately; remote changes display as pending until the target device acknowledges them
  • legacy samples without device provenance remain visible
  • disabling a device hides only its automatic samples during disabled intervals; raw samples remain stored and included in backups
  • archiving a remote device writes an off cutoff atomically and hides it without deleting history
  • reset quiesces policy reconciliation and ingestion so erased device rows cannot be recreated by an in-flight observer

Validation

  • ./test: all 1,509 unit and integration tests passed
  • Devices, Settings, and SwiftData Inspector snapshot references pass in focused verification
  • the 10-variant Devices snapshot matrix matches byte-for-byte after the status-row correction, including Dynamic Type and VoiceOver audits
  • the optimized Debug app builds, signs, installs, and launches on Kyle's iPhone 17
  • swift run bumper config .
  • swift run bumper test .
  • swift run bumper lint . --timings
  • ./swiftformat --lint
  • ./xcstrings --lint
  • ruby -c Where/Tools/upgrade-backup.rb
  • ./ide --no-open

The broad affected snapshot run also reports two stale Resolution accessibility references. Both failures reproduce from committed main in an isolated checkout on a fresh simulator, so those unrelated references are intentionally not changed here.

Rollout

Before shipping, deploy the new CloudKit schema to Production and complete the two-device validation checklist documented in Where/Where/README.md.

@kyleve
kyleve force-pushed the codex/multi-device-recording branch from 1bcb8d1 to 01a9311 Compare July 30, 2026 23:08
@kyleve
kyleve marked this pull request as ready for review July 30, 2026 23:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant