Follow-ups from the Attention Center → Activity revamp, shipped in PR #1001 (merged 2026-08-01). The revamp itself is complete and live — relay deployed (worker 49c95c03, D1 migration 0005). These are the items deliberately deferred at ship time.
1. Run the real iOS build + tests ⚠️ (do first)
xcodebuild + ADETests never ran locally — the machine had 26 GB free, under the 30 GB floor for Xcode builds, and CI has no iOS job. Every Swift file was swiftc -parsed and the widget target's full source set was swiftc -typechecked against iOS 17 (app subsets against iOS 26), so confidence is high but not build-proven. Free ~5 GB, then build the ADE + ADEWidgets targets and run ADETests (-parallel-testing-enabled NO, task-specific derivedDataPath).
2. Structural extractions (quality Track B, all behavior-preserving)
Deliberately not applied hours before ship. Files that crossed the 1k-line rule or absorbed a subsystem:
apps/ade-cli/src/services/push/pushPublisherService.ts (~2.8k lines) → extract an ActivityPublisher module (roster/ack/protocol-2 state)
apps/push-relay/src/attention.ts (~3.9k lines) → extract typed activityMachinePublish handler/repository
apps/ios/ADE/Services/AccountService.swift (~2k lines) → extract AccountActivityService
apps/desktop/src/renderer/components/activity/useActivitySync.ts (745 lines) → extract notch bridge + presence module
ActivitySettingsControls.tsx → canonical setting descriptors mapped through page/popover chrome (popover + page branches currently duplicate field definitions)
NotchSurfaceView.swift (1.3k) / AttentionModels.swift (1.1k) / ADESharedModels.swift (1k) → file splits per the review
- iOS: move the WorkspaceSnapshot→AccountAttentionItem projection out of ActivityDrawerModel into
WorkspaceActivityProjection.swift; shared visibility predicate + priority comparator for drawer/widget
3. Settings error-rollback UX (quality gate M11)
ActivitySettingsControls.tsx persist path: failed or signed-out preference writes leave the UI showing applied-but-unsaved state (only machine mute rolls back). Also ActivitySection promises notch settings "still apply to this Mac" while signed out, but the write early-returns. Needs a product decision: rollback vs retry vs a local-write split.
4. iOS App-Intent buttons don't mark-seen for assistive tech
ActivityDrawerSheet.swift (~:395-422): inline approve/deny intent buttons mark the row seen via .simultaneousGesture(TapGesture()), which VoiceOver/Switch Control activation does not fire — the intent runs but the row stays unread. Mitigated by the context menu's "Mark seen"; real fix is moving markSeen() off the tap gesture (restructures the intent buttons).
5. Small residue
- TUI
/attention alias is applied before the userCommands lookup — a runtime shipping its own /attention command would be silently rerouted (none does today).
- Notch helper crash-loop backoff resets after 30s uptime — a slow crash loop restarts forever (degrades cleanly, low priority).
- Post-rollout cost check: verify D1 rows-written/day per account matches the ~$0.30–0.80/mo estimate; alarm if the presence heartbeat ever writes more than one row.
Context for any implementer: project_activity_revamp_shipped.md in the ADE agent memory has the durable invariants (frozen attention wire naming, phase-anchored roster statusSince, tier semantics, notch byte budgets).
Follow-ups from the Attention Center → Activity revamp, shipped in PR #1001 (merged 2026-08-01). The revamp itself is complete and live — relay deployed (worker
49c95c03, D1 migration 0005). These are the items deliberately deferred at ship time.1. Run the real iOS build + tests⚠️ (do first)
xcodebuild+ ADETests never ran locally — the machine had 26 GB free, under the 30 GB floor for Xcode builds, and CI has no iOS job. Every Swift file wasswiftc -parsed and the widget target's full source set wasswiftc -typechecked against iOS 17 (app subsets against iOS 26), so confidence is high but not build-proven. Free ~5 GB, then build the ADE + ADEWidgets targets and run ADETests (-parallel-testing-enabled NO, task-specific derivedDataPath).2. Structural extractions (quality Track B, all behavior-preserving)
Deliberately not applied hours before ship. Files that crossed the 1k-line rule or absorbed a subsystem:
apps/ade-cli/src/services/push/pushPublisherService.ts(~2.8k lines) → extract an ActivityPublisher module (roster/ack/protocol-2 state)apps/push-relay/src/attention.ts(~3.9k lines) → extract typed activityMachinePublish handler/repositoryapps/ios/ADE/Services/AccountService.swift(~2k lines) → extract AccountActivityServiceapps/desktop/src/renderer/components/activity/useActivitySync.ts(745 lines) → extract notch bridge + presence moduleActivitySettingsControls.tsx→ canonical setting descriptors mapped through page/popover chrome (popover + page branches currently duplicate field definitions)NotchSurfaceView.swift(1.3k) /AttentionModels.swift(1.1k) /ADESharedModels.swift(1k) → file splits per the reviewWorkspaceActivityProjection.swift; shared visibility predicate + priority comparator for drawer/widget3. Settings error-rollback UX (quality gate M11)
ActivitySettingsControls.tsxpersist path: failed or signed-out preference writes leave the UI showing applied-but-unsaved state (only machine mute rolls back). AlsoActivitySectionpromises notch settings "still apply to this Mac" while signed out, but the write early-returns. Needs a product decision: rollback vs retry vs a local-write split.4. iOS App-Intent buttons don't mark-seen for assistive tech
ActivityDrawerSheet.swift(~:395-422): inline approve/deny intent buttons mark the row seen via.simultaneousGesture(TapGesture()), which VoiceOver/Switch Control activation does not fire — the intent runs but the row stays unread. Mitigated by the context menu's "Mark seen"; real fix is movingmarkSeen()off the tap gesture (restructures the intent buttons).5. Small residue
/attentionalias is applied before theuserCommandslookup — a runtime shipping its own/attentioncommand would be silently rerouted (none does today).Context for any implementer:
project_activity_revamp_shipped.mdin the ADE agent memory has the durable invariants (frozenattentionwire naming, phase-anchored roster statusSince, tier semantics, notch byte budgets).