- Add 16-01-SUMMARY.md with schema, middleware, and test changes - Update STATE.md with phase 16 progress and decisions - Update ROADMAP.md with plan progress (1/4 complete) - Mark MULTI-01, MULTI-04, MULTI-06 complete in REQUIREMENTS.md
2.9 KiB
Phase 16: Multi-User Data Model - Discussion Log
Audit trail only. Do not use as input to planning, research, or execution agents. Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
Date: 2026-04-05 Phase: 16-multi-user-data-model Areas discussed: User ID Representation, Existing Data Migration, Category Uniqueness, Settings Scope, API Key Ownership Mode: --auto --batch (all decisions auto-selected)
User ID Representation
| Option | Description | Selected |
|---|---|---|
| Local users table with integer ID | Thin table mapping Logto sub to auto-increment integer, all FKs use integer | ✓ |
| Logto sub string directly | Store Logto sub (string UUID) as FK on every entity table | |
| Mapping table without FK | Store logtoSub on entities, join manually |
User's choice: Local users table with integer ID (auto-selected) Notes: Integer FKs are more efficient for joins. Thin table auto-creates on first OIDC login.
Existing Data Migration
| Option | Description | Selected |
|---|---|---|
| Migration assigns all rows to user ID 1 | Add userId column, set all existing data to first user | ✓ |
| Prompt for Logto sub during migration | Interactive script asks for the Logto user ID | |
| Leave data unassigned until claimed | Nullable userId, user claims data on first login |
User's choice: Migration assigns all rows to user ID 1 (auto-selected) Notes: Single existing user, simplest approach.
Category Uniqueness
| Option | Description | Selected |
|---|---|---|
| Composite unique (userId, name) | Each user has independent category namespace | ✓ |
| Global unique (current) | All users share one category namespace |
User's choice: Composite unique (userId, name) (auto-selected) Notes: Required by MULTI-03.
Settings Scope
| Option | Description | Selected |
|---|---|---|
| Composite PK (userId, key) | Each user has own settings | ✓ |
| Separate user_settings table | New table for per-user settings |
User's choice: Composite PK (userId, key) (auto-selected) Notes: Required by MULTI-06. Minimal schema change.
API Key Ownership
| Option | Description | Selected |
|---|---|---|
| userId column on apiKeys | API keys belong to creating user, middleware resolves user scope | ✓ |
| Shared API keys (no user scope) | API keys grant access to all data |
User's choice: userId column on apiKeys (auto-selected) Notes: Required by MULTI-05 for MCP tool scoping.
Claude's Discretion
- Migration SQL approach
- userId scoping helper vs inline where clauses
- Default category creation strategy
- Thread resolution cross-user checks
- Service change ordering
Deferred Ideas
None — discussion stayed within phase scope