DreamLake

AI read activity and recent additions

2026-09-25 — Design and cases

Two independent signals answer where an agent explicitly read and what it just added. No model attention is inferred from a command, browser selection, or ordinary human/Python client. Agents opt in with a task-specific session ID.

SituationBehavior
Full source/HTML readWhole-note read observation
Section/ranged readExact returned source passage
Incremental diff readRead-changes label; no invented full-source range
Successful insertion/replacementGreen insertion ranges only after native acknowledgement
Deletion-only editUpdated-note label; no nonexistent text highlight
Concurrent merge differs from isolated targetUpdate label, no guessed insertion positions
Human or agent changes sourceExisting source marks disappear synchronously
Multiple agentsSeparate session/owner identities and labels
Repeated operationsLatest read and update per session, independently
Failed access, stale baseline, invalid patchNo observation for failed operation
Public anonymous/nonmember readNo access to collaborator activity
Disconnect, background tab, storage outageExpiry; no polling while hidden; no write failure caused by activity
Reduced motionStatic color with explicit labels until expiry
Unicode/CRLF/rich textCode-point to UTF-16 conversion; no canonical content mutation; labels survive source-hiding widgets
Read-only rendered viewActivity labels; source marks are editor-only in this version

The server records bounded Redis observations with 30-second read and 15-second edit TTLs. Polling is authorized without opening RTC rooms or fetching source. Activity storage has a 250ms operation budget and is best effort. Every precise range requires an exact current source hash. This favors correct omission over false precision while leaving CRDT-relative activity anchors for a later change. The existing canonical read, patch, revision, and collaboration paths remain responsible for source correctness.

The CLI and Python SDK instrument only direct Notes body/section/diff requests when explicitly configured. Labels are self-reported; authenticated ownership is assigned by the API. Up to 64 live activity slots and 128 ranges per slot are retained. No source text enters the activity store.

Validation and release state

Synthetic service, API-route, client-header, Unicode/decorations, and editor regressions cover the failure boundaries. The interactive fixture uses the real decoration and badge components and synthetic text; it is distinct from production integration acceptance. No pitch note is modified.

Local validation: server 3,108 tests passed (one skipped), UI 2,387 passed (five skipped), Python SDK 1,037 passed (61 skipped). Server and UI TypeScript checks, the isolated UI production build, Python package/docs builds and native CLI packaging gates passed. The CLI full-suite release gate is checked in its PR.

UI PR #449 includes the synthetic remote preview. Browser verification covered independent readers, green insertion and immediate invalidation on a human edit. These are fixture results, not a production claim. Server, clients and generated public instructions are reviewed together; publication and installed-client availability remain separate from source.

2026-09-25 — Release verification

Server PR #750 merged as a97ba3dca1b7ff76c600bdbccdd2e09d9f357b82. Server CI passed 5,100 tests (four skipped), 68 migration tests and TypeScript. Staging deployment completed from that commit. Read-only checks using the published CLI against a retained acceptance fixture verified full-read and incremental-read activity, anonymous denial, 30-second expiry, and unchanged canonical hash and RTC revision. No test or pitch note content was mutated.

CLI 0.27.0 (PR #136, publication) and Python SDK 0.21.0 (PR #82, publication) are published. A fresh npm installation exercised real native Notes commands against a loopback fixture: opt-in headers, unchanged revision headers and exact Unicode/CRLF source passed. A fresh PyPI installation passed all three attribution transport tests; its module was verified in the new environment's site-packages. Existing user installations are not silently upgraded.

UI PR #449 merged as 725e441442daf82ba21b84ea105162ffae5cff78. All CI checks, including both browser test shards, passed. The combined time-travel/activity tree passed 2,402 local tests (five skipped), TypeScript and a production build. Its isolated hosted staging build served the homepage, Notes and artifacts with HTTP 200; the browser rendered the Notes shell. The private fixture's UI was not authenticated on that preview hostname. Source marks were visually checked using the synthetic preview above. The hosted SSR function is 12,142,852 bytes. Shared staging's unrelated breadcrumb work was preserved.

The owning Notes guide and CLI guide are deployed. Live Markdown and fresh hosted skill archives matched their generated references byte-for-byte. Public skills PR #37 published the instructions; final minimum-client and release-evidence source synchronization follows this docs change. git pull updates a public-skills checkout; re-download/reinstall a hosted skill bundle to update that installation.

The combined app (including history PR #448 and SSR packaging PR #450) is live at b3211944676d6859dd22e234e19f88e94442a942, Netlify production deploy 6ab6d54a2ecf420008bff7a0. Homepage, Notes, artifacts and search routes returned HTTP 200. The final hosted SSR function is 11,828,565 bytes. Production API deployment completed from the same a97ba3dc commit. The published CLI and direct read-only checks verified full-read activity, incremental-read activity, anonymous denial, 30-second expiry, and unchanged fixture source hash and RTC revision. /health returned ok. The production browser reached the normal sign-in page; it had no authenticated session, so private-note visual acceptance is not claimed.