Summary
The Document Sync Agent (SyncAgent/) is built and tested — 53 passing tests including a read-only live check. The packaging pipeline embeds it at InterlinedList.app/Contents/Library/LoginItems/InterlinedListSync.app and registers it as an SMAppService.agent via Settings ▸ Document Sync.
What remains cannot be run headless: it needs a real Aqua session and a Developer ID signature. That makes it part of the release gate, not the feature backlog.
What the agent is
A bundled LSUIElement menu-bar utility that mirrors documents to a local Markdown folder (the Obsidian use case). It reads the bearer token from the shared Keychain group $(AppIdentifierPrefix)com.interlinedlist.shared, so it syncs with no separate sign-in. Correlation uses xattr plus path.
Validation checklist
Two things worth deciding while validating
- Per-machine settings belong on the server now.
/help/app-settings describes per-machine settings as exactly this case — a sync folder path is meaningful on one machine only. The agent's configuration is a natural first tenant for the Applications settings work. Not a blocker for validation, but decide whether it lands before or after the release cut.
- Account switching. If multi-account switching is ever built, a running agent mirroring one account's documents to a local folder needs an explicit answer for what a switch means. Flagged in that spike; noted here so the agent's owner sees it.
Acceptance criteria
- Every box above ticked on a real machine with a notarized build.
- Any defect found is filed separately rather than fixed silently inside the validation pass.
Notes
work-consolidation.md §3b. Blocked on the release issue producing a signed .pkg — sequence them together.
Summary
The Document Sync Agent (
SyncAgent/) is built and tested — 53 passing tests including a read-only live check. The packaging pipeline embeds it atInterlinedList.app/Contents/Library/LoginItems/InterlinedListSync.appand registers it as anSMAppService.agentvia Settings ▸ Document Sync.What remains cannot be run headless: it needs a real Aqua session and a Developer ID signature. That makes it part of the release gate, not the feature backlog.
What the agent is
A bundled
LSUIElementmenu-bar utility that mirrors documents to a local Markdown folder (the Obsidian use case). It reads the bearer token from the shared Keychain group$(AppIdentifierPrefix)com.interlinedlist.shared, so it syncs with no separate sign-in. Correlation usesxattrplus path.Validation checklist
.pkginstall path, end to end:.pkgon a clean machineSMAppService.agentregistration succeeds and is visible in System Settings ▸ Login ItemsTwo things worth deciding while validating
/help/app-settingsdescribes per-machine settings as exactly this case — a sync folder path is meaningful on one machine only. The agent's configuration is a natural first tenant for the Applications settings work. Not a blocker for validation, but decide whether it lands before or after the release cut.Acceptance criteria
Notes
work-consolidation.md§3b. Blocked on the release issue producing a signed.pkg— sequence them together.