docs(33-01): complete persistent-memory memory-service plan
- SUMMARY.md with 17 passing tests, 2 deviations documented - STATE.md advanced to plan 2, progress 80% - ROADMAP.md updated: Phase 33 1/3 plans complete - REQUIREMENTS.md: ASST-01 and ASST-02 marked complete
This commit is contained in:
parent
664392e9eb
commit
1d222e3e8a
4 changed files with 102 additions and 17 deletions
|
|
@ -31,8 +31,8 @@
|
||||||
|
|
||||||
### Personal AI Assistant
|
### Personal AI Assistant
|
||||||
|
|
||||||
- [ ] **ASST-01**: User has persistent memory across chat sessions (summary-based, injected into system prompts)
|
- [x] **ASST-01**: User has persistent memory across chat sessions (summary-based, injected into system prompts)
|
||||||
- [ ] **ASST-02**: Memory content sanitized at write time to prevent prompt injection
|
- [x] **ASST-02**: Memory content sanitized at write time to prevent prompt injection
|
||||||
- [ ] **ASST-03**: User can hand off an assistant conversation to a PM agent with one click, transferring context
|
- [ ] **ASST-03**: User can hand off an assistant conversation to a PM agent with one click, transferring context
|
||||||
- [ ] **ASST-04**: Assistant and Project Builder modes work standalone or together
|
- [ ] **ASST-04**: Assistant and Project Builder modes work standalone or together
|
||||||
|
|
||||||
|
|
@ -81,8 +81,8 @@
|
||||||
| ONBD-04 | Phase 32 | Complete |
|
| ONBD-04 | Phase 32 | Complete |
|
||||||
| ONBD-05 | Phase 32 | Complete |
|
| ONBD-05 | Phase 32 | Complete |
|
||||||
| ONBD-06 | Phase 32 | Complete |
|
| ONBD-06 | Phase 32 | Complete |
|
||||||
| ASST-01 | Phase 33 | Pending |
|
| ASST-01 | Phase 33 | Complete |
|
||||||
| ASST-02 | Phase 33 | Pending |
|
| ASST-02 | Phase 33 | Complete |
|
||||||
| ASST-03 | Phase 33 | Pending |
|
| ASST-03 | Phase 33 | Pending |
|
||||||
| ASST-04 | Phase 33 | Pending |
|
| ASST-04 | Phase 33 | Pending |
|
||||||
| VOICE-01 | Phase 34 | Pending |
|
| VOICE-01 | Phase 34 | Pending |
|
||||||
|
|
|
||||||
|
|
@ -159,7 +159,7 @@ Plans:
|
||||||
**Plans**: 3 plans
|
**Plans**: 3 plans
|
||||||
|
|
||||||
Plans:
|
Plans:
|
||||||
- [ ] 33-01-PLAN.md — Memory sanitizer, assistant memory service, REST routes, and unit tests
|
- [x] 33-01-PLAN.md — Memory sanitizer, assistant memory service, REST routes, and unit tests
|
||||||
- [ ] 33-02-PLAN.md — PersonalAssistantPage, useNexusMode hook, sidebar navigation, route wiring
|
- [ ] 33-02-PLAN.md — PersonalAssistantPage, useNexusMode hook, sidebar navigation, route wiring
|
||||||
- [ ] 33-03-PLAN.md — Real AI streaming with memory injection, assistant-to-PM handoff route and UI
|
- [ ] 33-03-PLAN.md — Real AI streaming with memory injection, assistant-to-PM handoff route and UI
|
||||||
**UI hint**: yes
|
**UI hint**: yes
|
||||||
|
|
@ -232,6 +232,6 @@ All 21 v1.5 requirements are mapped to exactly one phase. No orphans.
|
||||||
| 30. Hardware Detection + Mode Selection | v1.5 | 2/2 | Complete | 2026-04-03 |
|
| 30. Hardware Detection + Mode Selection | v1.5 | 2/2 | Complete | 2026-04-03 |
|
||||||
| 31. Puter.js Zero-Config Cloud | v1.5 | 4/4 | Complete | 2026-04-03 |
|
| 31. Puter.js Zero-Config Cloud | v1.5 | 4/4 | Complete | 2026-04-03 |
|
||||||
| 32. Multi-Step Onboarding Wizard | v1.5 | 1/1 | Complete | 2026-04-03 |
|
| 32. Multi-Step Onboarding Wizard | v1.5 | 1/1 | Complete | 2026-04-03 |
|
||||||
| 33. Persistent Memory + Personal Assistant Mode | v1.5 | 0/3 | Planning complete | - |
|
| 33. Persistent Memory + Personal Assistant Mode | v1.5 | 1/3 | In Progress| |
|
||||||
| 34. Voice | v1.5 | 0/TBD | Not started | - |
|
| 34. Voice | v1.5 | 0/TBD | Not started | - |
|
||||||
| 35. npx buildthis CLI | v1.5 | 0/TBD | Not started | - |
|
| 35. npx buildthis CLI | v1.5 | 0/TBD | Not started | - |
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,15 @@
|
||||||
gsd_state_version: 1.0
|
gsd_state_version: 1.0
|
||||||
milestone: v1.5
|
milestone: v1.5
|
||||||
milestone_name: Smart Onboarding + Personal AI Assistant
|
milestone_name: Smart Onboarding + Personal AI Assistant
|
||||||
status: verifying
|
status: executing
|
||||||
stopped_at: Completed 32-multi-step-onboarding-wizard/32-01
|
stopped_at: Completed 33-persistent-memory/33-01
|
||||||
last_updated: "2026-04-03T21:38:15.887Z"
|
last_updated: "2026-04-03T21:57:17.177Z"
|
||||||
last_activity: 2026-04-03
|
last_activity: 2026-04-03
|
||||||
progress:
|
progress:
|
||||||
total_phases: 6
|
total_phases: 6
|
||||||
completed_phases: 3
|
completed_phases: 3
|
||||||
total_plans: 7
|
total_plans: 10
|
||||||
completed_plans: 7
|
completed_plans: 8
|
||||||
percent: 0
|
percent: 0
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -21,13 +21,13 @@ progress:
|
||||||
See: .planning/PROJECT.md (updated 2026-04-02)
|
See: .planning/PROJECT.md (updated 2026-04-02)
|
||||||
|
|
||||||
**Core value:** A fresh onboard asks for ONE thing (root directory), auto-creates PM + Engineer agents, and drops you in the dashboard.
|
**Core value:** A fresh onboard asks for ONE thing (root directory), auto-creates PM + Engineer agents, and drops you in the dashboard.
|
||||||
**Current focus:** Phase 32 — multi-step-onboarding-wizard
|
**Current focus:** Phase 33 — persistent-memory
|
||||||
|
|
||||||
## Current Position
|
## Current Position
|
||||||
|
|
||||||
Phase: 33
|
Phase: 33 (persistent-memory) — EXECUTING
|
||||||
Plan: Not started
|
Plan: 2 of 3
|
||||||
Status: Phase complete — ready for verification
|
Status: Ready to execute
|
||||||
Last activity: 2026-04-03
|
Last activity: 2026-04-03
|
||||||
|
|
||||||
Progress: [__________] 0%
|
Progress: [__________] 0%
|
||||||
|
|
@ -59,6 +59,7 @@ Progress: [__________] 0%
|
||||||
| Phase 31-puter.js-zero-config-cloud P03 | 5 | 2 tasks | 6 files |
|
| Phase 31-puter.js-zero-config-cloud P03 | 5 | 2 tasks | 6 files |
|
||||||
| Phase 31-puter.js-zero-config-cloud P04 | 1 | 1 tasks | 0 files |
|
| Phase 31-puter.js-zero-config-cloud P04 | 1 | 1 tasks | 0 files |
|
||||||
| Phase 32-multi-step-onboarding-wizard P01 | 4 | 2 tasks | 3 files |
|
| Phase 32-multi-step-onboarding-wizard P01 | 4 | 2 tasks | 3 files |
|
||||||
|
| Phase 33 P01 | 4 | 2 tasks | 6 files |
|
||||||
|
|
||||||
## Accumulated Context
|
## Accumulated Context
|
||||||
|
|
||||||
|
|
@ -85,6 +86,8 @@ Key constraints for v1.5 (established at roadmap):
|
||||||
- [Phase 31-puter.js-zero-config-cloud]: Plan 04 is verification-only — auto-approved under workflow.auto_advance=true; full UAT deferred to manual QA session
|
- [Phase 31-puter.js-zero-config-cloud]: Plan 04 is verification-only — auto-approved under workflow.auto_advance=true; full UAT deferred to manual QA session
|
||||||
- [Phase 32-multi-step-onboarding-wizard]: createWorkspace() helper extracted so both handleSubmit and handleStartChat share workspace creation without duplication
|
- [Phase 32-multi-step-onboarding-wizard]: createWorkspace() helper extracted so both handleSubmit and handleStartChat share workspace creation without duplication
|
||||||
- [Phase 32-multi-step-onboarding-wizard]: Step 4 form submit removed — replaced with button advancing to step 5; actual workspace creation deferred to summary CTA
|
- [Phase 32-multi-step-onboarding-wizard]: Step 4 form submit removed — replaced with button advancing to step 5; actual workspace creation deferred to summary CTA
|
||||||
|
- [Phase 33]: Removed zod dependency from assistant-memory.ts — replaced with manual type guard due to worktree node_modules not having zod symlink
|
||||||
|
- [Phase 33]: GitHub PAT regex changed from {36} to {36,} to handle tokens longer than the minimum expected length
|
||||||
|
|
||||||
### Pending Todos
|
### Pending Todos
|
||||||
|
|
||||||
|
|
@ -99,6 +102,6 @@ None yet.
|
||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-04-03T21:37:28.248Z
|
Last session: 2026-04-03T21:57:17.174Z
|
||||||
Stopped at: Completed 32-multi-step-onboarding-wizard/32-01
|
Stopped at: Completed 33-persistent-memory/33-01
|
||||||
Resume file: None
|
Resume file: None
|
||||||
|
|
|
||||||
82
.planning/phases/33-persistent-memory/33-01-SUMMARY.md
Normal file
82
.planning/phases/33-persistent-memory/33-01-SUMMARY.md
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
---
|
||||||
|
phase: 33-persistent-memory
|
||||||
|
plan: 01
|
||||||
|
subsystem: server/services
|
||||||
|
tags: [memory, sanitization, file-backed, rest-api, credentials]
|
||||||
|
provides:
|
||||||
|
- File-backed assistant memory service (get/append/clear per companyId)
|
||||||
|
- Credential sanitizer scrubbing sk-/ghp_/AIza/JWT/key=value patterns
|
||||||
|
- REST endpoints GET/PATCH/DELETE at /api/assistant-memory/:companyId
|
||||||
|
affects: [33-persistent-memory, chat-routes, assistant]
|
||||||
|
tech-stack:
|
||||||
|
added: []
|
||||||
|
patterns: [file-backed JSON service, FIFO eviction, write-time sanitization]
|
||||||
|
key-files:
|
||||||
|
created:
|
||||||
|
- server/src/services/memory-sanitizer.ts
|
||||||
|
- server/src/services/assistant-memory.ts
|
||||||
|
- server/src/routes/assistant-memory.ts
|
||||||
|
- server/src/__tests__/33-memory-sanitization.test.ts
|
||||||
|
- server/src/__tests__/33-assistant-memory.test.ts
|
||||||
|
modified:
|
||||||
|
- server/src/app.ts
|
||||||
|
key-decisions:
|
||||||
|
- "Removed zod dependency from assistant-memory.ts — zod is not installed in the worktree node_modules, replaced with manual type guard parsing"
|
||||||
|
- "GitHub PAT regex changed from {36} to {36,} to handle tokens longer than expected minimum length"
|
||||||
|
duration: 4min
|
||||||
|
completed: 2026-04-01
|
||||||
|
---
|
||||||
|
|
||||||
|
# Phase 33 Plan 01: Persistent Memory Foundation Summary
|
||||||
|
|
||||||
|
**File-backed assistant memory service with write-time credential sanitization and REST endpoints mounted in app.ts.**
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
- **Duration:** 4 minutes
|
||||||
|
- **Tasks:** 2 completed
|
||||||
|
- **Files modified:** 6
|
||||||
|
|
||||||
|
## Accomplishments
|
||||||
|
- `sanitizeMemoryFact` scrubs OpenAI (sk-), GitHub PAT (ghp_), Google API (AIza), JWT-shaped tokens, and key=value credential patterns at write time
|
||||||
|
- `assistantMemoryService` provides file-backed get/append/clear scoped per companyId at `data/assistant-memory/<companyId>.json`
|
||||||
|
- 50-fact FIFO cap enforced in append()
|
||||||
|
- REST routes at `/api/assistant-memory/:companyId` with assertBoard + assertCompanyAccess auth on all three verbs
|
||||||
|
- 17 unit tests pass (10 sanitizer, 7 service)
|
||||||
|
|
||||||
|
## Task Commits
|
||||||
|
1. **Task 1 (RED): Failing tests** - `378d1c11`
|
||||||
|
2. **Task 1 (GREEN): Memory sanitizer + service** - `fb3c1578`
|
||||||
|
3. **Task 2: Routes + app.ts wiring** - `eba57c5c`
|
||||||
|
|
||||||
|
## Files Created/Modified
|
||||||
|
- `server/src/services/memory-sanitizer.ts` - `sanitizeMemoryFact` with CREDENTIAL_INLINE_RE and SENSITIVE_KEY_VALUE_RE
|
||||||
|
- `server/src/services/assistant-memory.ts` - `assistantMemoryService()` with get/append/clear, resolveMemoryPath, 50-fact cap
|
||||||
|
- `server/src/routes/assistant-memory.ts` - `assistantMemoryRoutes()` GET/PATCH/DELETE with auth guards
|
||||||
|
- `server/src/app.ts` - Added import + `api.use(assistantMemoryRoutes())` mount
|
||||||
|
- `server/src/__tests__/33-memory-sanitization.test.ts` - 10 sanitizer tests
|
||||||
|
- `server/src/__tests__/33-assistant-memory.test.ts` - 7 service tests with os.tmpdir() isolation
|
||||||
|
|
||||||
|
## Deviations from Plan
|
||||||
|
|
||||||
|
### Auto-fixed Issues
|
||||||
|
|
||||||
|
**1. [Rule 1 - Bug] GitHub PAT regex too strict**
|
||||||
|
- **Found during:** Task 1 (TDD GREEN)
|
||||||
|
- **Issue:** `ghp_[A-Za-z0-9]{36}` matched exactly 36 chars, leaving trailing chars unredacted (`[REDACTED]k`)
|
||||||
|
- **Fix:** Changed to `{36,}` to match minimum 36 chars
|
||||||
|
- **Files modified:** `server/src/services/memory-sanitizer.ts`
|
||||||
|
- **Commit:** fb3c1578
|
||||||
|
|
||||||
|
**2. [Rule 3 - Blocking] Zod not resolvable in worktree vitest context**
|
||||||
|
- **Found during:** Task 1 (TDD GREEN)
|
||||||
|
- **Issue:** Worktree's server `node_modules` has no zod symlink; vitest cannot resolve `zod` during test collection
|
||||||
|
- **Fix:** Removed zod import from `assistant-memory.ts`, replaced schema validation with manual type guard
|
||||||
|
- **Files modified:** `server/src/services/assistant-memory.ts`
|
||||||
|
- **Commit:** fb3c1578
|
||||||
|
|
||||||
|
## Known Stubs
|
||||||
|
None — all data paths are fully wired.
|
||||||
|
|
||||||
|
## Next Phase Readiness
|
||||||
|
- `assistantMemoryService` ready for injection into chat route (`server/src/services/chat.ts`) in Plan 02
|
||||||
|
- Routes already mounted; API is live on server start
|
||||||
Loading…
Add table
Reference in a new issue