diff --git a/.daemon/logs/signet-2026-02-23.log b/.daemon/logs/signet-2026-02-23.log index f9b544ff0..29404d990 100644 --- a/.daemon/logs/signet-2026-02-23.log +++ b/.daemon/logs/signet-2026-02-23.log @@ -1376,3 +1376,22 @@ {"timestamp":"2026-02-23T07:37:40.035Z","level":"info","category":"summary-worker","message":"Enqueued session summary job","data":{"jobId":"e61667c1-bab2-4b93-8e12-a3aa597489e0","harness":"claude-code"}} {"timestamp":"2026-02-23T07:37:40.035Z","level":"info","category":"hooks","message":"Session end queued for summary","data":{"jobId":"e61667c1-bab2-4b93-8e12-a3aa597489e0"}} {"timestamp":"2026-02-23T07:37:40.035Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-23T07:37:45.089Z","level":"info","category":"git","message":"Auto-committed","data":{"message":"2026-02-23T07-37-45_auto_memory/memories.db-wal","filesChanged":1}} +{"timestamp":"2026-02-23T07:37:46.288Z","level":"info","category":"summary-worker","message":"Wrote session summary","data":{"path":"/home/nicholai/.agents/memory/2026-02-23-auto-update-observability-plan.md"}} +{"timestamp":"2026-02-23T07:37:46.292Z","level":"info","category":"summary-worker","message":"Inserted session facts","data":{"total":14,"saved":14,"deduplicated":0}} +{"timestamp":"2026-02-23T07:37:46.293Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-23T07:37:46.293Z","level":"info","category":"watcher","message":"File added","data":{"path":"/home/nicholai/.agents/memory/2026-02-23-auto-update-observability-plan.md"}} +{"timestamp":"2026-02-23T07:37:46.793Z","level":"info","category":"summary-worker","message":"Processing session summary","data":{"jobId":"e61667c1-bab2-4b93-8e12-a3aa597489e0","harness":"claude-code","attempt":1}} +{"timestamp":"2026-02-23T07:37:46.794Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-23T07:37:46.968Z","level":"info","category":"memory","message":"Memory saved","data":{"id":"3426a7c2-c8c1-45f3-9d9d-e9e64b035c93","type":"rule","pinned":false,"embedded":true}} +{"timestamp":"2026-02-23T07:37:46.969Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-23T07:37:46.986Z","level":"info","category":"memory","message":"Memory saved","data":{"id":"920ad8a5-cef5-49df-a695-a6944131e645","type":"fact","pinned":false,"embedded":true}} +{"timestamp":"2026-02-23T07:37:47.001Z","level":"info","category":"memory","message":"Memory saved","data":{"id":"12b75f20-4a0b-4c46-b8c6-c4eb6262b0c0","type":"fact","pinned":false,"embedded":true}} +{"timestamp":"2026-02-23T07:37:47.001Z","level":"info","category":"watcher","message":"Ingested memory file","data":{"path":"/home/nicholai/.agents/memory/2026-02-23-auto-update-observability-plan.md","chunks":3,"sections":3,"filename":"2026-02-23-auto-update-observability-plan"}} +{"timestamp":"2026-02-23T07:37:47.942Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-23T07:37:50.988Z","level":"info","category":"hooks","message":"Session start hook","data":{"harness":"claude-code","project":"/home/nicholai/signet/signetai"}} +{"timestamp":"2026-02-23T07:37:50.989Z","level":"info","category":"hooks","message":"Session start completed","data":{"memoryCount":11,"durationMs":1}} +{"timestamp":"2026-02-23T07:37:50.990Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-23T07:37:51.903Z","level":"info","category":"hooks","message":"Session start hook","data":{"harness":"claude-code","project":"/home/nicholai/signet/signetai"}} +{"timestamp":"2026-02-23T07:37:51.904Z","level":"info","category":"hooks","message":"Session start completed","data":{"memoryCount":11,"durationMs":1}} +{"timestamp":"2026-02-23T07:37:51.905Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} diff --git a/memory/2026-02-23-auto-update-observability-plan.md b/memory/2026-02-23-auto-update-observability-plan.md new file mode 100644 index 000000000..892a70879 --- /dev/null +++ b/memory/2026-02-23-auto-update-observability-plan.md @@ -0,0 +1,26 @@ +# 2026-02-23 Session Notes + +## Auto-Update Observability Plan + +Nicholai provided a comprehensive plan to add observability to Signet's auto-update system. The daemon currently has full update mechanics (GitHub/npm checks, package manager invocation, timer) but zero observability—errors vanish into logs, agents never know when Signet is outdated, and `/api/status` is blind to update state. + +Root causes identified: `autoInstall` defaults to false (users never see updates), all update state is trapped as module-scoped bindings in daemon.ts (inaccessible to other modules), `getDaemonVersion()` silently returns "0.0.0" on failure, package manager fallback order favors npm over bun (misaligned with project standards), and the diagnostics system lacks an update health domain. + +## Implementation Strategy + +The plan calls for extracting the update system to a dedicated `update-system.ts` module (~350 LOC) following the singleton pattern used by `llm.ts` and `db-accessor.ts`. The module will export `getUpdateState()` and `getUpdateSummary()` for read-only access from anywhere in the daemon. + +Update status will be surfaced in the session-start hook via `handleSessionStart` in hooks.ts, making it visible to agents during session initialization. A new `categorizeUpdateError()` helper will translate raw errors (rate limits, network failures, permission denied, etc.) into actionable messages. + +API surface will expand: `/api/status` gains an `update` field with version info and error state, `/health` adds two booleans (`updateAvailable`, `pendingRestart`), and a new `UpdateHealth` domain joins diagnostics scoring. + +## Implementation Order + +1. Extract update-system.ts from daemon.ts +2. Wire initUpdateSystem() in daemon main, update route handlers +3. Add categorizeUpdateError() helper +4. Add getUpdateSummary() and wire into handleSessionStart +5. Expand /api/status and /health endpoints (parallelizable) +6. Add UpdateHealth to diagnostics.ts (parallelizable) + +The plan emphasized that extracting update-system.ts unblocks all downstream work. Verification includes typecheck, runtime endpoint testing, and error categorization scenarios. \ No newline at end of file diff --git a/memory/memories.db-shm b/memory/memories.db-shm index 36f3c85bf..ab285da55 100644 Binary files a/memory/memories.db-shm and b/memory/memories.db-shm differ diff --git a/memory/memories.db-wal b/memory/memories.db-wal index 29c8770f7..eead386ad 100644 Binary files a/memory/memories.db-wal and b/memory/memories.db-wal differ