Skip to content

Richer guest experience: per-user reminders + name - #19

Merged
ssethia2 merged 1 commit into
mainfrom
ss/guest-richer
Jun 17, 2026
Merged

Richer guest experience: per-user reminders + name#19
ssethia2 merged 1 commit into
mainfrom
ss/guest-richer

Conversation

@ssethia2

Copy link
Copy Markdown
Owner

Closes gap #4 (the "thin guest experience") so the friend trial actually feels personal.

Per-user reminders/commitments

  • commitments gets a tenant column (owner rows = NULL, migrated in). Every query is tenant-scoped — owner sees its rows, a guest sees only theirs, neither sees the other.
  • add/list/complete/drop_commitment added to the guest toolset (analyze_commitments stays owner-only).
  • Isolation verified through the real agent first (a guest's memory routed to their collection, owner scratchpad untouched) before wiring the shared commitments DB. Then verified directly: owner's 9 open commitments unchanged; guest starts empty → adds → sees only theirs; a guest can't complete an owner row.

Name capture

  • Tenant context carries a display name; friends.json records {id, name}; add_friend.py writes it. The Live front prompt greets the friend by name and the guest agent banner knows it. Backward-compatible with the legacy {token: "id"} string.

4 new tests; 235 pass; owner path unchanged.

🤖 Generated with Claude Code

Makes the friend trial actually feel personal — addresses the "thin guest experience" gap.

- Per-user commitments: commitments table gets a `tenant` column (owner rows = NULL,
  migrated in); EVERY query is tenant-scoped (owner sees its rows, a guest sees only theirs,
  neither sees the other). add/list/complete/drop_commitment added to the guest toolset.
  Verified live: owner 9 open unchanged; guest starts empty, adds, sees only theirs.
- Name capture: tenant context carries a display name; friends.json records {id,name};
  add_friend.py writes it; the Live front prompt greets the friend by name and the guest
  agent banner knows it. Backward-compatible with the legacy {token: "id"} string form.
- Isolation was VERIFIED through the real agent first (a guest's memory routes to their
  collection, owner scratchpad untouched) before wiring the shared commitments DB.

4 new tests (name in context/banner, commitment isolation x2, name routing). 235 pass;
owner path unchanged.

Assisted-by: Claude Code (Opus 4.8)
@ssethia2
ssethia2 merged commit c802950 into main Jun 17, 2026
@ssethia2
ssethia2 deleted the ss/guest-richer branch June 17, 2026 03:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant