ReviewOS

also looking at this

stacks/uplink

docs: the documentation the README points at

#63
Merged glennmichael123 wants to merge docs/the-missing-docs into main
9 files +509 -10
docs/permissions.mdadded+43-0
Changes to docs/permissions.md
@@ -0,0 +1,43 @@
1# Permissions
2
3Uplink asks macOS for two things. Both are granted to a specific app rather than to Uplink in
4general, which is the part that surprises people.
5
6## Full Disk Access, to read Messages
7
8Messages keeps your texts in a SQLite database at `~/Library/Messages/chat.db`, which macOS
9protects. Reading it needs Full Disk Access.
10
11**The grant is keyed to a bundle id and the exact binary inside it.** That has two consequences:
12
13- The downloaded app (`com.stacksjs.uplink`) and the from-source build
14 (`com.stacksjs.uplink.source`) are different subjects. Granting one does not grant the other,
15 which is deliberate: they are separate installs.
16- Rebuilding the from-source bundle replaces the binary, which voids the grant. `uplink:install
17 --rebuild` will tell you to grant it again.
18
19Uplink only ever reads that database. It never writes to it.
20
21## Control of Messages, to reply
22
23Replies are sent through AppleScript, so macOS asks once whether Uplink may control Messages. This
24is the Automation permission, and it is asked the first time a reply is actually sent rather than
25at setup, which is why a first install can look finished and then fail on the first text.
26
27Uplink now asks for it during setup for that reason. If you denied it, it is in System Settings
28under Privacy & Security, Automation, and Uplink needs the Messages row ticked.
29
30## What happens if one is missing
31
32Neither failure is silent any more.
33
34- Without Full Disk Access, the menubar says it is waiting for it and the service keeps running
35 rather than restart-looping.
36- Without Automation, a run completes and the reply cannot be delivered, so the run is recorded as
37 failed and the menubar shows why. It is not recorded as done.
38
39`./buddy uplink:doctor` checks both from a clone. The menubar's setup list checks both in the app.
40
41## What Uplink does not ask for
42
43No Accessibility, no Screen Recording, no Location, no contacts. The two above are the whole list.