diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-12-31 19:51:21 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-12-31 19:51:21 +0900 |
| commit | c915c21d47a2b417979b20e9e9d9b6ff30a03c0d (patch) | |
| tree | 643ba4e499bae8a541d77f299837361a75890b10 /docs | |
| parent | 73ee02825f57d971f6f660fc5277d4aa268702ff (diff) | |
| download | kioku-c915c21d47a2b417979b20e9e9d9b6ff30a03c0d.tar.gz kioku-c915c21d47a2b417979b20e9e9d9b6ff30a03c0d.tar.zst kioku-c915c21d47a2b417979b20e9e9d9b6ff30a03c0d.zip | |
refactor(client): use Hono InferResponseType for API response types
Replace manually defined AuthResponse and User types with Hono's
InferResponseType to automatically derive types from server definitions.
This ensures client types stay in sync with server responses.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/dev/roadmap.md | 65 |
1 files changed, 28 insertions, 37 deletions
diff --git a/docs/dev/roadmap.md b/docs/dev/roadmap.md index 022e09e..b6cc6f9 100644 --- a/docs/dev/roadmap.md +++ b/docs/dev/roadmap.md @@ -1,48 +1,39 @@ # Kioku Development Roadmap -## Issue #3: Introduce CRDT Library for Conflict Resolution +## Use Hono RPC Type Inference for API Response Types -Replace the current Last-Write-Wins (LWW) conflict resolution with Automerge CRDT for better offline sync. +Replace manually defined API response types with Hono's `InferResponseType` for automatic type derivation from server. -**Decisions:** -- Library: Automerge -- Text conflicts: LWW Register (simple, predictable) -- Migration: Clean migration (no backward compatibility) +**Background:** +- Hono's `hc` client can automatically infer response types from server definitions +- Manual type definitions (`AuthResponse`, `User`) duplicate server types and can become out of sync -### Phase 1: Add Automerge and Core Types +**Scope:** +- `AuthResponse` → Use `InferResponseType` +- `User` → Derive from `AuthResponse["user"]` +- `ApiError` → Keep (error responses are separate from success types) +- `Tokens` → Keep (client-internal type) -- [x] Install dependencies: `@automerge/automerge`, `@automerge/automerge-repo`, `@automerge/automerge-repo-storage-indexeddb` -- [x] Create `src/client/sync/crdt/types.ts` - Automerge document type definitions -- [x] Create `src/client/sync/crdt/document-manager.ts` - Automerge document lifecycle management -- [x] Create `src/client/sync/crdt/index.ts` - Module exports +### Phase 1: Update API Client Types -### Phase 2: Create CRDT Repository Layer +- [x] Modify `src/client/api/client.ts`: + - Import `InferResponseType` from `hono/client` + - Define `LoginResponse` type using `InferResponseType<typeof rpc.api.auth.login.$post>` + - Update `login` method to use inferred type +- [x] Modify `src/client/api/types.ts`: + - Remove `AuthResponse` and `User` interfaces + - Keep `ApiError` and `Tokens` +- [x] Modify `src/client/api/index.ts`: + - Export inferred types from `client.ts` instead of `types.ts` -- [x] Create `src/client/sync/crdt/repositories.ts` - CRDT-aware repository wrappers -- [x] Create `src/client/sync/crdt/sync-state.ts` - Sync state serialization +### Phase 2: Update Consumers -### Phase 3: Modify Sync Protocol +- [x] Modify `src/client/stores/auth.tsx`: + - Import `User` type from new location (derived from login response) + - Update `AuthState` interface -- [x] Modify `src/client/sync/push.ts` - Add crdtChanges to push payload -- [x] Modify `src/client/sync/pull.ts` - Handle crdtChanges in pull response -- [x] Modify `src/client/sync/conflict.ts` - Replace LWW with Automerge merge -- [x] Modify `src/client/sync/manager.ts` - Integrate CRDT sync flow +### Phase 3: Update Tests -### Phase 4: Server-Side CRDT Support - -- [x] Install server dependency: `@automerge/automerge` -- [x] Create `src/server/db/schema-crdt.ts` - CRDT document storage schema -- [x] Create database migration for crdt_documents table -- [x] Modify `src/server/routes/sync.ts` - Handle CRDT changes in API -- [x] Modify `src/server/repositories/sync.ts` - Store/merge CRDT documents - -### Phase 5: Migration - -- [x] Create `src/client/sync/crdt/migration.ts` - One-time migration script -- [x] Server data migration - Not needed (no existing production data) - -### Phase 6: Testing and Cleanup - -- [x] Add unit tests for CRDT operations -- [x] Add integration tests for concurrent edit scenarios -- [x] Remove legacy LWW code after validation +- [x] Update `src/client/api/client.test.ts` if needed +- [x] Update `src/client/stores/auth.test.tsx` if needed +- [x] Verify all tests pass |
