Skip to content

Activity revamp follow-ups (post PR #1001) #1002

Description

@arul28

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions