CLI and sync walkthrough (2026-09-24)
This is a record of one end-to-end run of the calternal CLI and the
calternald sync daemon, done as a user does it. All output is real. The
run used a debug build on a Linux VM (Debian 13, kernel 6.12, zone
Europe/Berlin) and a local server on http://localhost:18431 with an empty
data directory. A Playwright browser with a CDP virtual authenticator acted
as the user’s browser: it registered the owner passkey, signed in, and
clicked Approve on the CLI approval page. A second user, sam, was
registered through an invite so that share has a recipient.
Redactions: one-time approval codes are shown as <code>. No bearer token
or cookie appears in this document. Long JSON lists are cut where marked
with ….
Bugs found in this run were fixed on the branch; see Fixed during the walkthrough. The output below is from the run after the fixes. Problems that were not fixed are in Papercuts.
1. Login
Section titled “1. Login”Before a login, a command tells the user what to do:
$ calternal whoamicalternal: not logged in: run `calternal login <server-url>` or pass --server[exit 1]Loopback flow
Section titled “Loopback flow”calternal login opens the approval page in the default browser
(xdg-open). The browser posts the approval, the server redirects it to
the CLI’s loopback port, and the CLI exchanges its PKCE verifier for an
installation token.
$ calternal login http://localhost:18431Approve the installation at http://localhost:18431/api/v1/auth/cli/approve?user_code=<code>Confirm code: <code>{ "logged_in": true, "server": "http://localhost:18431"}[exit 0]What the browser showed:
Approve calternal CLISigned in as OwnerConfirm that your terminal shows this code: <code>[Approve this installation]
-> http://127.0.0.1:<port>/callback?approved=1calternal login approved. You can close this page.$ calternal whoami{ "disabled": false, "display_name": "Owner", "id": "01a0d45a-fa73-75f6-a170-0d08d793443a", "role": "owner", "username": "owner"}[exit 0]
$ calternal --json whoami{"disabled":false,"display_name":"Owner","id":"01a0d45a-fa73-75f6-a170-0d08d793443a","role":"owner","username":"owner"}[exit 0]Device-code flow
Section titled “Device-code flow”--device does not open a browser and does not listen on a port. The user
opens the URL on any signed-in device.
$ calternal login --device --name devbox http://localhost:18431Approve the installation at http://localhost:18431/api/v1/auth/cli/approve?user_code=<code>Confirm code: <code>The URL in a browser that is not signed in (before the fix this was the raw
JSON {"code":"unauthenticated","message":"Authentication required"}):
Sign in to approve calternal CLIThis browser is not signed in to calternal.1. Sign in to calternal (opens in a new tab).2. Come back to this tab and reload it.Or open the approval link on a device that is already signed in.The same URL in a signed-in browser, then the CLI result:
Approve calternal CLISigned in as OwnerConfirm that your terminal shows this code: <code>[Approve this installation]-> CLI installation approved. Return to your terminal.[exit 0]{ "logged_in": true, "server": "http://localhost:18431"}2. Files
Section titled “2. Files”$ calternal put hello.txt Files/hello.txt{ "hash": "284e86c2a221a62b272319f5bedd048a9405a3906c388ec58b2b57e89efc312c", "path": "Files/hello.txt", "size": 16}[exit 0]
$ calternal put hello.txt Files/Docs/deep/hello.txt{ "hash": "284e86c2a221a62b272319f5bedd048a9405a3906c388ec58b2b57e89efc312c", "path": "Files/Docs/deep/hello.txt", "size": 16}[exit 0]
$ calternal --json ls Files{"breadcrumbs":["Files"],"entries":[{"content_hash":null,"has_thumbnail":false,"item_id":"667d2eee-6478-4b10-ac6f-27cc380669c8","kind":"directory","mime":null,"modified":"2026-09-24T16:59:06+00:00","name":"Docs","share_badges":[],"size":60},{"content_hash":"284e86c2a221a62b272319f5bedd048a9405a3906c388ec58b2b57e89efc312c","has_thumbnail":false,"item_id":"db457927-2366-476a-be02-874e744507d5","kind":"file","mime":"text/plain","modified":"2026-09-24T16:59:06+00:00","name":"hello.txt","share_badges":[],"size":16}],"next_cursor":null}[exit 0]
$ calternal cat Files/hello.txthello calternal[exit 0]
$ calternal --json cat Files/hello.txt{"base64":"aGVsbG8gY2FsdGVybmFsCg==","path":"Files/hello.txt"}[exit 0]Files visibility is per User and follows the User across Installations. The listing flags show either kind for one command; preferences set the default used by the web app:
$ calternal ls Files --show-hidden --show-sidecars$ calternal files preferences$ calternal files preferences set-preferences --show-dot-files true --show-sidecar-files falseOverwrite, then download. get into a folder uses the remote name, like
cp, and never replaces a local file:
$ calternal put hello.txt Files/hello.txt{ "hash": "b6e1100c53b9c5f288785e81547e3bdaa60e6c2d25f2b854ad4c65bc6a31afb3", "path": "Files/hello.txt", "size": 12}[exit 0]
$ calternal get Files/hello.txt downloads{ "hash": "b6e1100c53b9c5f288785e81547e3bdaa60e6c2d25f2b854ad4c65bc6a31afb3", "local": "downloads/hello.txt", "path": "Files/hello.txt"}[exit 0]
$ calternal get Files/hello.txt downloadscalternal: downloads/hello.txt already exists; calternal get never replaces a local file[exit 1]
$ calternal versions Files/hello.txt[ { "content_hash": null, "has_thumbnail": false, "item_id": null, "kind": "file", "mime": "application/octet-stream", "modified": "2026-09-24T16:59:06+00:00", "name": "20260924T165907.025816848Z", "share_badges": [], "size": 16 }][exit 0]Move, rename and trash work for files and folders (folders failed before the fix):
$ calternal mv Files/hello.txt Files/greeting.txt{ "from": "Files/hello.txt", "to": "Files/greeting.txt"}[exit 0]
$ calternal mv Files/Docs/deep Files/Archive/deep{ "from": "Files/Docs/deep", "to": "Files/Archive/deep"}[exit 0]
$ calternal rm Files/greeting.txt{ "trashed": "Files/greeting.txt"}[exit 0]
$ calternal rm Files/Docs{ "trashed": "Files/Docs"}[exit 0]
$ calternal --json trash[{"content_hash":null,"has_thumbnail":false,"item_id":null,"kind":"directory","mime":null,"modified":"2026-09-24T16:59:07+00:00","name":"Docs","share_badges":[],"size":40},{"content_hash":null,"has_thumbnail":false,"item_id":null,"kind":"file","mime":"text/plain","modified":"2026-09-24T16:59:07+00:00","name":"greeting.txt","share_badges":[],"size":12}][exit 0]
$ calternal restore Docs{ "path": "Files/Docs"}[exit 0]
$ calternal ls Files/missingcalternal: server returned HTTP 404 Not Found: file not found[exit 1]Search. The full-text hits now link to the user’s own paths (before the fix
the href was /files?path=users%2F<user-id>%2FFiles%2F…):
$ calternal search hello{ "results": [ { "href": "/files?path=Files/Archive/deep/hello.txt", "id": "Files/Archive/deep/hello.txt", "plugin_id": "files", "score": null, "snippet": null, "title": "hello.txt" }, { "href": "/files?path=Files%2Fhello%2Etxt", "id": "users/01a0d45a-fa73-75f6-a170-0d08d793443a/Files/hello.txt", "plugin_id": "search", "score": 25.521196, "snippet": "<b>hello</b> again", "title": "hello.txt" }, { "href": "/files?path=Files%2FDocs%2Fdeep%2Fhello%2Etxt", "id": "users/01a0d45a-fa73-75f6-a170-0d08d793443a/Files/Docs/deep/hello.txt", "plugin_id": "search", "score": 25.416721, "snippet": "<b>hello</b> calternal", "title": "hello.txt" } ], "timed_out": false}[exit 0]Share with sam (the recipient is a user ID; see Papercuts):
$ calternal share Files/Archive 01a0d45b-1738-7530-a54c-995d13a63504 viewer{ "access": "viewer", "direction": "outgoing", "id": "b963f3a9-b1dd-40d4-96f6-5dc7ecf85d42", "owner_id": "01a0d45a-fa73-75f6-a170-0d08d793443a", "path": "Files/Archive", "recipient_id": "01a0d45b-1738-7530-a54c-995d13a63504"}[exit 0]
$ calternal share Files/Archive 01a0d45b-1738-7530-a54c-995d13a63504 ownercalternal: server returned HTTP 400 Bad Request: invalid path or request[exit 1]3. Notes and the log
Section titled “3. Notes and the log”today and new notes use the local zone now (18:59 CEST; before the fix
the CLI got UTC and the wrong Daily note between local midnight and 02:00):
$ calternal today{ "body": "\n# 2026-09-24 Daily Note\n\n## 📝 Log\n\n", "etag": "\"9faf5bee010f711190dc116b71c27dbcd0e64a5c2b391c01bdf3200b17bda366\"", "id": "path:Notes/Journal/20260924-dailynote.md", "path": "Notes/Journal/20260924-dailynote.md", "properties": { "date": "2026-09-24 18:59:08", "last edited": "2026-09-24 18:59:08", "next": "'[2026-09-25-daily-note](<Notes/Journal/20260925-dailynote.md>)'", "previous": "'[2026-09-23-daily-note](<Notes/Journal/20260923-dailynote.md>)'", "tags": [ "journal/daily-note" ], "title": "2026-09-24 Daily Note" }, "title": "2026-09-24 Daily Note"}[exit 0]
$ calternal note new "Sync design review" --body "First paragraph."{ "body": "\n# Sync design review\n\nFirst paragraph.\n", "etag": "\"ea53667d1d1826940290697f5d3d1faa6da99493f0c0e12fce28578bb33dfc45\"", "id": "064c45e2-2a6e-46b5-b78b-2948de9bc8f5", "path": "Notes/20260924-sync-design-review-064c45e2.md", "properties": { "calternal-id": "064c45e2-2a6e-46b5-b78b-2948de9bc8f5", "date": "2026-09-24 18:59:08", "last edited": "2026-09-24 18:59:08", "slug": "sync-design-review", "tags": [], "title": "Sync design review" }, "title": "Sync design review"}[exit 0]note append adds a new paragraph (before the fix it glued the text onto
the last line):
$ calternal note append f8c3ab9b-67cc-4e84-88e6-e6c34c99151e "Appended from the CLI."{ "body": "\n# Scratch\n\nAppended from the CLI.\n", …}[exit 0]
$ calternal --json note open f8c3ab9b-67cc-4e84-88e6-e6c34c99151e{"body":"\n# Scratch\n\nAppended from the CLI.\n","etag":"\"46eec2921b58ed0915c7852fd3dd699df7af85c7523df8ee8df9443e7a669789\"","id":"f8c3ab9b-67cc-4e84-88e6-e6c34c99151e","path":"Notes/20260924-scratch-f8c3ab9b.md",…}[exit 0]log uses the composer parser. The owner’s regression line keeps its
connecting words and its time range. gym 7-8pm logged 07:00 - 20:00
before the fix:
$ calternal log 'on and off working on calternal.js 22:00 - 23:00 #dev'{ "end": "23:00", "path": "Notes/Journal/20260924-dailynote.md", "start": "22:00", "tags": [ "area/dev" ], "title": "on and off working on calternal.js"}[exit 0]
$ calternal --json log 'Coffee with Sam #social'{"end":null,"path":"Notes/Journal/20260924-dailynote.md","start":"18:59","tags":["area/social"],"title":"Coffee with Sam"}[exit 0]
$ calternal log 'gym 7-8pm'{ "end": "20:00", "path": "Notes/Journal/20260924-dailynote.md", "start": "19:00", "tags": [], "title": "gym"}[exit 0]
$ calternal log 'Review from 09:30 to 10:00 #work'{ "end": "10:00", "path": "Notes/Journal/20260924-dailynote.md", "start": "09:30", "tags": [ "area/work" ], "title": "Review"}[exit 0]
$ calternal log ''calternal: server returned HTTP 400 Bad Request: log text must be one nonempty line[exit 1]The Daily note body after these commands:
# 2026-09-24 Daily Note
## 📝 Log
- 22:00 - 23:00 on and off working on calternal.js #area/dev- 18:59 Coffee with Sam #area/social- 19:00 - 20:00 gym- 09:30 - 10:00 Review #area/work4. Sync
Section titled “4. Sync”Two pairs: ~/calternal-e2e/Full syncs all of Files;
~/calternal-e2e/Selective syncs only Projects/alpha (the server also has
Projects/beta).
$ calternal sync add http://localhost:18431 ~/calternal-e2e/Full Files{ "pair_id": "285973bd-6d77-4888-9121-33932f50a64e"}[exit 0]
$ calternal sync add http://localhost:18431 ~/calternal-e2e/Selective Projects --include alpha{ "pair_id": "e0aea9f1-19f9-4d25-9a73-53ff36dcf08c"}[exit 0]
$ calternal sync status{ "pairs": [ { "guarded": false, "id": "285973bd-6d77-4888-9121-33932f50a64e", "include": [], "local_folder": "/home/kayg/calternal-e2e/Full", "paused": false, "remote_folder": "Files", "server_url": "http://localhost:18431" }, { "guarded": false, "id": "e0aea9f1-19f9-4d25-9a73-53ff36dcf08c", "include": [ "alpha" ], "local_folder": "/home/kayg/calternal-e2e/Selective", "paused": false, "remote_folder": "Projects", "server_url": "http://localhost:18431" } ], "service_active": false}[exit 0]calternald in the foreground
Section titled “calternald in the foreground”calternald started with no arguments. The first pass downloaded both
trees (only alpha for the selective pair):
$ find ~/calternal-e2e -type fcalternal-e2e/Full/Archive/deep/hello.txtcalternal-e2e/Selective/alpha/plan.mdThen a script made real edits: local edits with ordinary file writes and renames, web edits with the Files API calls the web app makes (tus upload, rename, move, trash) under the browser session. Each line shows the time from the edit until the other side showed it.
# local edit -> server ok: server has the local edit (0.50 s)# web edit -> local ok: local file has the web edit (0.37 s)# local rename -> server ok: server shows the rename (0.43 s)# web rename -> local ok: local shows the rename (0.30 s)# local move into a new folder -> server ok: server shows the move (0.25 s)# web move -> local ok: local shows the move (0.10 s) server: ['Files/Archive/deep/hello.txt', 'Files/Archive/renamed-on-web.txt', 'Files/Moved/renamed-locally.txt'] local: ['Archive/deep/hello.txt', 'Archive/renamed-on-web.txt', 'Moved/renamed-locally.txt']
# local delete -> server trash ok: server file is gone (0.31 s) server trash has renamed-locally.txt: True
# web delete -> local freedesktop Trash ok: local file is gone (0.26 s) new in ~/.local/share/Trash/files: ['renamed-on-web.txt (calternal 0064425e-7f9e-4596-8d2e-a2c126112e30)'] [Trash Info] Path=%2Fhome%2Fkayg%2Fcalternal%2De2e%2FFull%2FArchive%2Frenamed%2Don%2Dweb%2Etxt DeletionDate=2026-09-24T18:59:19Before the fix, the local delete above did not reach the server: deleting
one of three files tripped the mass deletion guard (more than 30 %), which
paused the pair and printed only sync pair stopped: mass deletion guard paused this sync pair to the daemon’s stderr.
Conflicting edits: the pair was paused, shared.txt was edited on both
sides, and the pair was resumed. The local side became the conflict copy,
named per DESIGN §24 with the device’s host name and local time:
# conflicting edits on both sides while paused ok: base uploaded (0.57 s) $ calternal sync pause 285973bd-6d77-4888-9121-33932f50a64e {"paused": "285973bd-6d77-4888-9121-33932f50a64e"} $ calternal sync resume 285973bd-6d77-4888-9121-33932f50a64e {"resumed": "285973bd-6d77-4888-9121-33932f50a64e"} ok: conflict copy appears locally (0.27 s) ok: local shared.txt holds the web side (0.48 s) ok: conflict copy uploaded (0.06 s) local 'shared (conflict, calternal-dev, 2026-09-24 18.59).txt': 'local side\n' local 'shared.txt': 'web side\n' server: ['Files/shared (conflict, calternal-dev, 2026-09-24 18.59).txt', 'Files/shared.txt']Before the fixes, the same copy was named
shared (conflict, installation, 2026-09-24 16.33).txt: $HOSTNAME is not
exported, and the time was UTC.
$ calternal sync conflicts{ "conflicts": [ { "created_at": 1790269162, "original_path": "shared.txt", "pair_id": "285973bd-6d77-4888-9121-33932f50a64e", "path": "shared (conflict, calternal-dev, 2026-09-24 18.59).txt" } ]}[exit 0]Selective pair:
# selective pair: only Projects/alpha is synced ok: alpha/new.md arrives (0.00 s) local: ['alpha/new.md', 'alpha/plan.md'] ok: alpha/local.md uploaded (0.48 s) server has Projects/gamma/outside.md: False(Projects/beta/new.md was uploaded on the web at the same time and did not
arrive. A local file in gamma/, outside the include list, stays local.)
Other checks in the exploratory run (same build):
- An editor-style atomic save (write
.doc.txt.swp, rename overdoc.txt) reached the server as one edit ofdoc.txt. - Downloaded files get mode
0664(umask 002). Before the fix they were0600, and a remote edit removed a local executable bit. - A symlink in the pair (
hostname-link -> /etc/hostname) is now skipped and the rest syncs. Before the fix every pass failed withlocal path cannot be represented in the remote APIand the pair stopped syncing. - An idle daemon used about 5 % CPU before the fix (its own file reads woke the watcher, so it rescanned in a loop). After the fix: 0.9 ms CPU in 10 s idle.
calternald as a systemd user unit
Section titled “calternald as a systemd user unit”$ calternal sync installCreated symlink '/home/kayg/.config/systemd/user/default.target.wants/calternald.service' → '/home/kayg/.config/systemd/user/calternald.service'.{ "installed": "/home/kayg/.config/systemd/user/calternald.service"}[exit 0]
$ systemctl --user --no-pager status calternald.service● calternald.service - calternal file synchronization Loaded: loaded (/home/kayg/.config/systemd/user/calternald.service; enabled; preset: enabled) Active: active (running) since Thu 2026-09-24 18:59:29 CEST; 47ms ago Main PID: 539706 ((lternald))…[exit 0]
$ calternal sync status{ "pairs": [ … both pairs as above … ], "service_active": true}[exit 0]A new local file reached the server 0.57 s after the unit started. With the
unit running, sync pause, resume, add and remove restart it, so the
change takes effect at once.
A symlink next to a file, then a logout and a new login while the unit runs:
beside-link.txt on the server: True (0.40 s)hostname-link on the server: False$ calternal logout{ "logged_out": "http://localhost:18431"}[exit 0]
$ calternal login http://localhost:18431Approve the installation at http://localhost:18431/api/v1/auth/cli/approve?user_code=<code>Confirm code: <code>{ "logged_in": true, "server": "http://localhost:18431"}[exit 0]while-logged-out.txt on the server after login: True (3.9 s)Before the fix the unit kept the revoked token and logged HTTP 401 every two seconds until someone restarted it. Now the journal shows:
sync pair restarting in 10 s: server returned HTTP 401$ calternal sync remove e0aea9f1-19f9-4d25-9a73-53ff36dcf08c{ "removed": "e0aea9f1-19f9-4d25-9a73-53ff36dcf08c"}[exit 0]
$ calternal logout{ "logged_out": "http://localhost:18431"}[exit 0]
$ calternal whoamicalternal: installation credential unavailable[exit 3]5. Latency
Section titled “5. Latency”Small file (about 30 bytes), 20 samples per direction, systemd unit, debug build, server and client on one VM over loopback.
- local → server: the clock starts when the local
write()returns and stops when a download from the server returns the new bytes. - server → local: the clock starts when the web upload (tus
PATCH) returns and stops when the local file holds the new bytes.
| Direction | p50 | p95 | min | max |
|---|---|---|---|---|
| local → server | 435 ms | 562 ms | 300 ms | 911 ms |
| server → local | 242 ms | 403 ms | 122 ms | 436 ms |
Both directions meet the DESIGN §24 target (small files p95 < 1 s). Before the rescan-loop fix, server → local was p50 275 ms and p95 963 ms (max 1297 ms). Notes on the remaining time:
- Local → server includes a 150 ms debounce, a full local scan (hash every file), a full remote tree listing, the tus create and patch, and two stats.
- The tail follows
fsyncon this VM: p50 9 ms, max 257 ms. One download does about eightfsynccalls (temp file, Trash info, directories). - These numbers are from a debug build. A release build will be faster.
Fixed during the walkthrough
Section titled “Fixed during the walkthrough”Each fix has a regression test.
| Commit | Fix |
|---|---|
cli: remember the logged-in server … |
After login, every other command failed with --server is required without a sync pair. |
cli: mv and rm work on folders |
mv and rm of a folder failed with invalid server URL or response. |
cli: send the local time zone … |
today used UTC: wrong Daily note from local midnight to the UTC date change; note times in UTC. |
cli: note append adds a new paragraph … |
note append glued text onto the last line. |
notes-core: a bare range start takes the end's pm |
log 'gym 7-8pm' logged 07:00 - 20:00. |
cli: show the server's reason …, cli: read the reason from the server's nested error envelope |
Errors said only HTTP 400 Bad Request. |
cli: get into a folder saves under the remote name |
get <file> <folder> failed; get onto an existing file gave a misleading error. |
sync: name the device from the kernel host name |
Every device was installation in conflict names; every login was calternal-cli. |
sync: downloaded files get the normal file mode, not 0600 |
Synced files were 0600; remote edits dropped the executable bit. |
sync: one ordinary delete no longer trips the mass deletion guard |
Deleting 1 of 3 files paused the pair. |
sync: stamp conflict copies with local time |
Conflict copies carried the UTC time. |
sync: skip symlinks instead of stopping the whole pair |
One symlink stopped all sync of the pair. |
auth: CLI approval page tells a signed-out browser how to continue |
A signed-out browser got raw JSON 401 on the approval page. |
search: full-text hits link to home-relative paths |
Full-text hits linked to users/<id>/…, which does not exist in the client. |
sync: file reads no longer wake the daemon into a rescan loop |
Idle daemon rescanned forever (about 5 % CPU); slower sync under load. |
sync: a new login resumes sync without restarting calternald |
After logout and login the daemon kept the revoked token; any pair error stopped that pair until restart. |
Papercuts
Section titled “Papercuts”These were seen in the run and are not fixed. None of them loses data.
CLI output and help:
- Output without
--jsonis pretty-printed JSON for every command. There is no human form (a table forls,trash,versions,search,sync status). calternal --helphas no text for any command or argument.sharedoes not say that access isvieweroreditor; a wrong value givesinvalid path or request.lsshows.calternal.trashdoes not show the original path or the deletion time.versionsshows timestamps withcontent_hash: null, and the CLI cannot download or restore a version.whoamiafterlogoutsaysinstallation credential unavailable, not “not logged in”.rmof a missing path saysserver returned HTTP 404without the path.mount <dir>(DESIGN §18) does not exist yet.
Accounts and shares:
shareneeds the recipient’s user ID. No API or command lists users or resolves a username. The server also accepts a well-formed ID of a user that does not exist and creates a share for nobody.- A second
loginto the same server replaces the local token but does not revoke the old installation session on the server. - The CLI approval page is plain, unstyled HTML (not the calternal design system).
Notes and log:
properties.previousandproperties.nextof a Daily note keep their YAML quotes:"'[2026-09-23-daily-note](<…>)'".logwrites#devas#area/dev(the calternal.js event-tag rule; it is intended, but the user typed#dev). Log entries are appended in the order they were logged, not sorted by time.note openandnote appendneed the note ID; there is no lookup by title or path.
Search:
- The same file is listed twice: once by the Files name match and once
by the full-text index. The full-text hit
idis still the data-directory path.
Sync:
sync statusshows no last sync time, pending work or error. A foregroundcalternaldprints nothing while it works. A guarded pair shows only"guarded": true.sync addneeds the server URL although the CLI is logged in.pause,resumeandremoveneed the full pair UUID.- With a foreground
calternald,sync resumedoes not reach the running process (only the systemd unit is restarted).pauseworks, because the loop reads the config each pass. - Every remote edit moves the previous local copy to the desktop Trash. The latency run (20 remote edits of one file) left 20 Trash items, while the server already keeps versions.
- Empty folders are not synced. After a local
rm -r Folder, the files go to the server trash butFiles/Folder/sub/stays on the server. - Editor temporary files (
.swp,~,.#…) are synced; there is no ignore list. - A file created in a selective pair outside the include list stays local with no message.
- During a conflict, the original local file is missing for a moment: the engine renames it to the conflict copy, uploads that copy, and only then downloads the winner.
- Each pass lists the whole remote tree and hashes every local file; the change feed only supplies the cursor. The change wake-up stream wakes on any user’s change, so each daemon on the instance runs a full pass for every change by anyone. This does not scale to large trees or many users.
- After each download, the daemon’s own writes wake the watcher and cause one more (empty) pass.
sync conflictsshowscreated_atas Unix seconds.