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.
| Situation | Behavior |
|---|---|
| Full source/HTML read | Whole-note read observation |
| Section/ranged read | Exact returned source passage |
| Incremental diff read | Read-changes label; no invented full-source range |
| Successful insertion/replacement | Green insertion ranges only after native acknowledgement |
| Deletion-only edit | Updated-note label; no nonexistent text highlight |
| Concurrent merge differs from isolated target | Update label, no guessed insertion positions |
| Human or agent changes source | Existing source marks disappear synchronously |
| Multiple agents | Separate session/owner identities and labels |
| Repeated operations | Latest read and update per session, independently |
| Failed access, stale baseline, invalid patch | No observation for failed operation |
| Public anonymous/nonmember read | No access to collaborator activity |
| Disconnect, background tab, storage outage | Expiry; no polling while hidden; no write failure caused by activity |
| Reduced motion | Static color with explicit labels until expiry |
| Unicode/CRLF/rich text | Code-point to UTF-16 conversion; no canonical content mutation; labels survive source-hiding widgets |
| Read-only rendered view | Activity 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.