@prmichaelsen/remember-mcp 2.8.0 → 3.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT.md +296 -250
- package/CHANGELOG.md +468 -0
- package/README.md +163 -46
- package/agent/commands/acp.clarification-create.md +382 -0
- package/agent/commands/acp.command-create.md +0 -1
- package/agent/commands/acp.design-create.md +0 -1
- package/agent/commands/acp.init.md +0 -1
- package/agent/commands/acp.package-create.md +0 -1
- package/agent/commands/acp.package-info.md +0 -1
- package/agent/commands/acp.package-install.md +0 -1
- package/agent/commands/acp.package-list.md +0 -1
- package/agent/commands/acp.package-publish.md +0 -1
- package/agent/commands/acp.package-remove.md +0 -1
- package/agent/commands/acp.package-search.md +0 -1
- package/agent/commands/acp.package-update.md +0 -1
- package/agent/commands/acp.package-validate.md +0 -1
- package/agent/commands/acp.pattern-create.md +0 -1
- package/agent/commands/acp.plan.md +0 -1
- package/agent/commands/acp.proceed.md +0 -1
- package/agent/commands/acp.project-create.md +0 -1
- package/agent/commands/acp.project-info.md +309 -0
- package/agent/commands/acp.project-list.md +0 -1
- package/agent/commands/acp.project-remove.md +379 -0
- package/agent/commands/acp.project-set.md +0 -1
- package/agent/commands/acp.project-update.md +296 -0
- package/agent/commands/acp.report.md +0 -1
- package/agent/commands/acp.resume.md +0 -1
- package/agent/commands/acp.status.md +0 -1
- package/agent/commands/acp.sync.md +0 -1
- package/agent/commands/acp.task-create.md +17 -10
- package/agent/commands/acp.update.md +0 -1
- package/agent/commands/acp.validate.md +0 -1
- package/agent/commands/acp.version-check-for-updates.md +0 -1
- package/agent/commands/acp.version-check.md +0 -1
- package/agent/commands/acp.version-update.md +0 -1
- package/agent/commands/command.template.md +0 -5
- package/agent/commands/git.commit.md +13 -2
- package/agent/commands/git.init.md +0 -1
- package/agent/design/comment-memory-type.md +2 -2
- package/agent/design/local.collaborative-memory-sync.md +265 -0
- package/agent/design/local.content-flags.md +210 -0
- package/agent/design/local.ghost-persona-system.md +273 -0
- package/agent/design/local.group-acl-integration.md +338 -0
- package/agent/design/local.memory-acl-schema.md +352 -0
- package/agent/design/local.memory-collection-pattern-v2.md +348 -0
- package/agent/design/local.moderation-and-space-config.md +257 -0
- package/agent/design/local.v2-api-reference.md +621 -0
- package/agent/design/local.v2-migration-guide.md +191 -0
- package/agent/design/local.v2-usage-examples.md +265 -0
- package/agent/design/permissions-storage-architecture.md +11 -3
- package/agent/design/soft-delete-system.md +291 -0
- package/agent/design/trust-escalation-prevention.md +9 -2
- package/agent/design/trust-system-implementation.md +12 -3
- package/agent/milestones/milestone-13-soft-delete-system.md +306 -0
- package/agent/milestones/milestone-14-memory-collection-v2.md +182 -0
- package/agent/milestones/milestone-15-moderation-space-config.md +126 -0
- package/agent/package.template.yaml +0 -17
- package/agent/progress.yaml +762 -49
- package/agent/scripts/acp.common.sh +2 -0
- package/agent/scripts/acp.install.sh +15 -85
- package/agent/scripts/acp.package-install-optimized.sh +454 -0
- package/agent/scripts/acp.package-install.sh +248 -380
- package/agent/scripts/acp.package-validate.sh +0 -99
- package/agent/scripts/acp.project-info.sh +218 -0
- package/agent/scripts/acp.project-remove.sh +302 -0
- package/agent/scripts/acp.project-update.sh +296 -0
- package/agent/scripts/acp.yaml-parser.sh +128 -10
- package/agent/tasks/milestone-14-memory-collection-v2/task-165-core-infrastructure-setup.md +171 -0
- package/agent/tasks/milestone-14-memory-collection-v2/task-166-update-remember-publish.md +191 -0
- package/agent/tasks/milestone-14-memory-collection-v2/task-167-update-remember-retract.md +186 -0
- package/agent/tasks/milestone-14-memory-collection-v2/task-168-implement-remember-revise.md +184 -0
- package/agent/tasks/milestone-14-memory-collection-v2/task-169-update-remember-search-space.md +179 -0
- package/agent/tasks/milestone-14-memory-collection-v2/task-170-update-remember-create-update.md +139 -0
- package/agent/tasks/milestone-14-memory-collection-v2/task-172-performance-testing-optimization.md +161 -0
- package/agent/tasks/milestone-14-memory-collection-v2/task-173-documentation-examples.md +258 -0
- package/agent/tasks/milestone-15-moderation-space-config/task-174-add-moderation-schema-fields.md +57 -0
- package/agent/tasks/milestone-15-moderation-space-config/task-175-create-space-config-service.md +64 -0
- package/agent/tasks/milestone-15-moderation-space-config/task-176-wire-moderation-publish-flow.md +45 -0
- package/agent/tasks/milestone-15-moderation-space-config/task-177-add-moderation-search-filters.md +70 -0
- package/agent/tasks/milestone-15-moderation-space-config/task-178-create-remember-moderate-tool.md +69 -0
- package/agent/tasks/milestone-15-moderation-space-config/task-179-documentation-integration-tests.md +58 -0
- package/agent/tasks/milestone-16-ghost-system/task-187-ghost-config-firestore.md +41 -0
- package/agent/tasks/milestone-16-ghost-system/task-188-trust-filter-integration.md +44 -0
- package/agent/tasks/milestone-16-ghost-system/task-189-ghost-memory-filtering.md +43 -0
- package/agent/tasks/milestone-16-ghost-system/task-190-ghost-config-tools.md +45 -0
- package/agent/tasks/milestone-16-ghost-system/task-191-escalation-firestore.md +38 -0
- package/agent/tasks/milestone-16-ghost-system/task-192-documentation-verification.md +39 -0
- package/agent/tasks/milestone-7-trust-permissions/task-180-access-result-permission-types.md +69 -0
- package/agent/tasks/milestone-7-trust-permissions/task-181-firestore-permissions-access-logs.md +56 -0
- package/agent/tasks/milestone-7-trust-permissions/task-182-trust-enforcement-service.md +68 -0
- package/agent/tasks/milestone-7-trust-permissions/task-183-access-control-service.md +70 -0
- package/agent/tasks/milestone-7-trust-permissions/task-184-permission-tools.md +79 -0
- package/agent/tasks/milestone-7-trust-permissions/task-185-wire-trust-into-search-query.md +55 -0
- package/agent/tasks/milestone-7-trust-permissions/task-186-documentation-verification.md +56 -0
- package/agent/tasks/task-70-add-soft-delete-schema-fields.md +165 -0
- package/agent/tasks/task-71-implement-delete-confirmation-flow.md +257 -0
- package/agent/tasks/task-72-add-deleted-filter-to-search-tools.md +18 -0
- package/agent/tasks/task-73-update-relationship-handling.md +18 -0
- package/agent/tasks/task-74-add-unit-tests-soft-delete.md +18 -0
- package/agent/tasks/task-75-update-documentation-changelog.md +26 -0
- package/agent/tasks/task-76-fix-indexnullstate-schema-bug.md +197 -0
- package/dist/collections/composite-ids.d.ts +106 -0
- package/dist/collections/core-infrastructure.spec.d.ts +11 -0
- package/dist/collections/dot-notation.d.ts +106 -0
- package/dist/collections/tracking-arrays.d.ts +176 -0
- package/dist/constants/content-types.d.ts +1 -0
- package/dist/schema/v2-collections-comments.spec.d.ts +8 -0
- package/dist/schema/v2-collections.d.ts +210 -0
- package/dist/server-factory.d.ts +15 -0
- package/dist/server-factory.js +3261 -1316
- package/dist/server.js +2926 -1236
- package/dist/services/access-control.d.ts +103 -0
- package/dist/services/access-control.spec.d.ts +2 -0
- package/dist/services/credentials-provider.d.ts +24 -0
- package/dist/services/credentials-provider.spec.d.ts +2 -0
- package/dist/services/escalation.service.d.ts +22 -0
- package/dist/services/escalation.service.spec.d.ts +2 -0
- package/dist/services/ghost-config.service.d.ts +55 -0
- package/dist/services/ghost-config.service.spec.d.ts +2 -0
- package/dist/services/space-config.service.d.ts +23 -0
- package/dist/services/space-config.service.spec.d.ts +2 -0
- package/dist/services/trust-enforcement.d.ts +83 -0
- package/dist/services/trust-enforcement.spec.d.ts +2 -0
- package/dist/services/trust-validator.d.ts +43 -0
- package/dist/services/trust-validator.spec.d.ts +2 -0
- package/dist/tools/confirm-publish-moderation.spec.d.ts +8 -0
- package/dist/tools/confirm.d.ts +8 -1
- package/dist/tools/create-memory.d.ts +2 -1
- package/dist/tools/create-memory.spec.d.ts +10 -0
- package/dist/tools/create-relationship.d.ts +2 -1
- package/dist/tools/delete-memory.d.ts +7 -31
- package/dist/tools/delete-relationship.d.ts +2 -1
- package/dist/tools/deny.d.ts +2 -1
- package/dist/tools/find-similar.d.ts +10 -2
- package/dist/tools/get-preferences.d.ts +2 -1
- package/dist/tools/ghost-config.d.ts +27 -0
- package/dist/tools/ghost-config.spec.d.ts +2 -0
- package/dist/tools/moderate.d.ts +20 -0
- package/dist/tools/moderate.spec.d.ts +5 -0
- package/dist/tools/publish.d.ts +11 -3
- package/dist/tools/query-memory.d.ts +11 -2
- package/dist/tools/query-space.d.ts +4 -1
- package/dist/tools/retract.d.ts +29 -0
- package/dist/tools/revise.d.ts +45 -0
- package/dist/tools/revise.spec.d.ts +8 -0
- package/dist/tools/search-memory.d.ts +8 -1
- package/dist/tools/search-relationship.d.ts +10 -2
- package/dist/tools/search-space.d.ts +25 -5
- package/dist/tools/search-space.spec.d.ts +9 -0
- package/dist/tools/set-preference.d.ts +2 -1
- package/dist/tools/update-memory.d.ts +2 -1
- package/dist/tools/update-relationship.d.ts +2 -1
- package/dist/types/access-result.d.ts +48 -0
- package/dist/types/access-result.spec.d.ts +2 -0
- package/dist/types/auth.d.ts +46 -0
- package/dist/types/ghost-config.d.ts +36 -0
- package/dist/types/memory.d.ts +11 -1
- package/dist/types/preferences.d.ts +1 -1
- package/dist/types/space-memory.d.ts +3 -0
- package/dist/utils/auth-helpers.d.ts +14 -0
- package/dist/utils/auth-helpers.spec.d.ts +2 -0
- package/dist/utils/test-data-generator.d.ts +124 -0
- package/dist/utils/test-data-generator.spec.d.ts +12 -0
- package/dist/utils/weaviate-filters.d.ts +19 -0
- package/dist/v2-performance.e2e.d.ts +17 -0
- package/dist/v2-smoke.e2e.d.ts +14 -0
- package/dist/weaviate/client.d.ts +5 -8
- package/dist/weaviate/space-schema.d.ts +2 -2
- package/docs/performance/v2-benchmarks.md +80 -0
- package/jest.e2e.config.js +14 -3
- package/package.json +1 -1
- package/scripts/.collection-recreation-state.yaml +16 -0
- package/scripts/.gitkeep +5 -0
- package/scripts/README-collection-recreation.md +224 -0
- package/scripts/README.md +51 -0
- package/scripts/backup-collections.ts +543 -0
- package/scripts/delete-collection.ts +137 -0
- package/scripts/migrate-recreate-collections.ts +578 -0
- package/scripts/migrate-v1-to-v2.ts +1094 -0
- package/scripts/package-lock.json +1113 -0
- package/scripts/package.json +27 -0
- package/src/collections/composite-ids.ts +193 -0
- package/src/collections/core-infrastructure.spec.ts +353 -0
- package/src/collections/dot-notation.ts +212 -0
- package/src/collections/tracking-arrays.ts +298 -0
- package/src/constants/content-types.ts +20 -0
- package/src/schema/v2-collections-comments.spec.ts +141 -0
- package/src/schema/v2-collections.ts +433 -0
- package/src/server-factory.ts +89 -20
- package/src/server.ts +45 -17
- package/src/services/access-control.spec.ts +383 -0
- package/src/services/access-control.ts +291 -0
- package/src/services/credentials-provider.spec.ts +22 -0
- package/src/services/credentials-provider.ts +34 -0
- package/src/services/escalation.service.spec.ts +183 -0
- package/src/services/escalation.service.ts +150 -0
- package/src/services/ghost-config.service.spec.ts +339 -0
- package/src/services/ghost-config.service.ts +219 -0
- package/src/services/space-config.service.spec.ts +102 -0
- package/src/services/space-config.service.ts +79 -0
- package/src/services/trust-enforcement.spec.ts +309 -0
- package/src/services/trust-enforcement.ts +197 -0
- package/src/services/trust-validator.spec.ts +108 -0
- package/src/services/trust-validator.ts +105 -0
- package/src/tools/confirm-publish-moderation.spec.ts +240 -0
- package/src/tools/confirm.ts +914 -116
- package/src/tools/create-memory.spec.ts +126 -0
- package/src/tools/create-memory.ts +20 -27
- package/src/tools/create-relationship.ts +30 -8
- package/src/tools/delete-memory.ts +99 -64
- package/src/tools/delete-relationship.ts +15 -6
- package/src/tools/deny.ts +8 -1
- package/src/tools/find-similar.ts +44 -6
- package/src/tools/get-preferences.ts +10 -1
- package/src/tools/ghost-config.spec.ts +180 -0
- package/src/tools/ghost-config.ts +230 -0
- package/src/tools/moderate.spec.ts +277 -0
- package/src/tools/moderate.ts +219 -0
- package/src/tools/publish.ts +99 -41
- package/src/tools/query-memory.ts +44 -9
- package/src/tools/query-space.ts +39 -4
- package/src/tools/retract.ts +292 -0
- package/src/tools/revise.spec.ts +146 -0
- package/src/tools/revise.ts +283 -0
- package/src/tools/search-memory.ts +46 -10
- package/src/tools/search-relationship.ts +30 -7
- package/src/tools/search-space.spec.ts +341 -0
- package/src/tools/search-space.ts +323 -99
- package/src/tools/set-preference.ts +10 -1
- package/src/tools/update-memory.ts +24 -5
- package/src/tools/update-relationship.ts +10 -1
- package/src/types/access-result.spec.ts +193 -0
- package/src/types/access-result.ts +62 -0
- package/src/types/auth.ts +52 -0
- package/src/types/ghost-config.ts +46 -0
- package/src/types/memory.ts +20 -1
- package/src/types/preferences.ts +2 -2
- package/src/types/space-memory.ts +5 -0
- package/src/utils/auth-helpers.spec.ts +75 -0
- package/src/utils/auth-helpers.ts +25 -0
- package/src/utils/test-data-generator.spec.ts +317 -0
- package/src/utils/test-data-generator.ts +292 -0
- package/src/utils/weaviate-filters.ts +32 -5
- package/src/v2-performance.e2e.ts +173 -0
- package/src/v2-smoke.e2e.ts +401 -0
- package/src/weaviate/client.spec.ts +5 -5
- package/src/weaviate/client.ts +55 -35
- package/src/weaviate/schema.ts +11 -239
- package/src/weaviate/space-schema.spec.ts +28 -25
- package/src/weaviate/space-schema.ts +35 -11
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
# Soft Delete System
|
|
2
|
+
|
|
3
|
+
**Concept**: Implement soft delete with confirmation flow for memory deletion
|
|
4
|
+
**Created**: 2026-02-25
|
|
5
|
+
**Status**: Design Specification
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Implement a soft delete system that prevents accidental data loss by requiring confirmation before deletion and marking memories as deleted rather than permanently removing them. This enables recovery and maintains data integrity while providing a safer deletion workflow.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Problem Statement
|
|
16
|
+
|
|
17
|
+
Current deletion implementation has critical issues:
|
|
18
|
+
- **No confirmation flow**: Memories are instantly deleted without user confirmation
|
|
19
|
+
- **No recovery**: Deleted memories cannot be recovered
|
|
20
|
+
- **No visibility**: Cannot search or view deleted memories
|
|
21
|
+
- **Data loss risk**: Accidental deletions result in permanent data loss
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Solution
|
|
26
|
+
|
|
27
|
+
Implement a comprehensive soft delete system with:
|
|
28
|
+
|
|
29
|
+
1. **Confirmation Flow**: Reuse existing token-based confirmation system
|
|
30
|
+
2. **Soft Delete Schema**: Add `deleted_at`, `deleted_by`, `deletion_reason` fields
|
|
31
|
+
3. **Default Filtering**: Exclude deleted memories from all searches by default
|
|
32
|
+
4. **Explicit Override**: `deleted_filter` parameter to include/only show deleted memories
|
|
33
|
+
5. **Relationship Handling**: Mark relationships as "orphaned" when memories deleted
|
|
34
|
+
6. **Breaking Change**: Immediate migration to new behavior (no feature flags)
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Implementation
|
|
39
|
+
|
|
40
|
+
### Schema Changes
|
|
41
|
+
|
|
42
|
+
Add three new fields to Memory schema (both `Memory_{user_id}` and `Memory_public`):
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
{
|
|
46
|
+
name: 'deleted_at',
|
|
47
|
+
dataType: 'date' as any,
|
|
48
|
+
description: 'Timestamp when memory was soft-deleted (null = not deleted)'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'deleted_by',
|
|
52
|
+
dataType: 'text' as any,
|
|
53
|
+
description: 'User ID who deleted the memory'
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'deletion_reason',
|
|
57
|
+
dataType: 'text' as any,
|
|
58
|
+
description: 'Optional reason for deletion'
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Note**: `deleted_at` is nullable. `null` or missing = not deleted.
|
|
63
|
+
|
|
64
|
+
### Tool Modifications
|
|
65
|
+
|
|
66
|
+
#### `remember_delete_memory` (Modified)
|
|
67
|
+
|
|
68
|
+
**Old Behavior**: Immediately deletes memory from Weaviate
|
|
69
|
+
|
|
70
|
+
**New Behavior**: Creates confirmation token and returns it
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
// Input
|
|
74
|
+
{
|
|
75
|
+
memory_id: string;
|
|
76
|
+
reason?: string; // Optional deletion reason
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Output
|
|
80
|
+
{
|
|
81
|
+
success: true;
|
|
82
|
+
token: string;
|
|
83
|
+
expires_at: string;
|
|
84
|
+
preview: {
|
|
85
|
+
memory_id: string;
|
|
86
|
+
content: string;
|
|
87
|
+
relationships_count: number;
|
|
88
|
+
will_orphan: string[]; // IDs of relationships that will be orphaned
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### `remember_confirm` (Enhanced)
|
|
94
|
+
|
|
95
|
+
Already handles confirmation. Will be enhanced to support `delete_memory` action:
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
// When confirming deletion
|
|
99
|
+
{
|
|
100
|
+
action: 'delete_memory',
|
|
101
|
+
payload: {
|
|
102
|
+
memory_id: string;
|
|
103
|
+
reason?: string;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Execution:
|
|
108
|
+
// 1. Update memory: deleted_at = now(), deleted_by = user_id, deletion_reason = reason
|
|
109
|
+
// 2. Mark relationships as orphaned (implementation TBD)
|
|
110
|
+
// 3. Return success
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
#### `remember_deny` (No Changes)
|
|
114
|
+
|
|
115
|
+
Already handles denial of any pending action.
|
|
116
|
+
|
|
117
|
+
### Search Tool Modifications
|
|
118
|
+
|
|
119
|
+
All search tools get new `deleted_filter` parameter:
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
deleted_filter?: 'exclude' | 'include' | 'only'
|
|
123
|
+
// Default: 'exclude'
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Affected Tools**:
|
|
127
|
+
- `remember_search_memory`
|
|
128
|
+
- `remember_query_memory`
|
|
129
|
+
- `remember_find_similar`
|
|
130
|
+
- `remember_search_relationship`
|
|
131
|
+
|
|
132
|
+
**Filter Implementation** (Weaviate query level):
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
// deleted_filter: 'exclude' (default)
|
|
136
|
+
.where(Filters.or(
|
|
137
|
+
collection.filter.byProperty('deleted_at').isNull(true),
|
|
138
|
+
// ... other filters
|
|
139
|
+
))
|
|
140
|
+
|
|
141
|
+
// deleted_filter: 'include'
|
|
142
|
+
// No filter applied
|
|
143
|
+
|
|
144
|
+
// deleted_filter: 'only'
|
|
145
|
+
.where(
|
|
146
|
+
collection.filter.byProperty('deleted_at').isNull(false)
|
|
147
|
+
)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Relationship Handling
|
|
151
|
+
|
|
152
|
+
**When memory is soft-deleted**:
|
|
153
|
+
- Relationships remain in database
|
|
154
|
+
- Relationships are marked as "orphaned" (implementation TBD - may use a flag or computed property)
|
|
155
|
+
- Searching relationships excludes deleted memories by default
|
|
156
|
+
|
|
157
|
+
**Creating relationships**:
|
|
158
|
+
- Cannot create relationship with deleted memory
|
|
159
|
+
- Error: "Cannot create relationship: memory {id} is deleted"
|
|
160
|
+
|
|
161
|
+
**Updating deleted memories**:
|
|
162
|
+
- Error: "Cannot update deleted memory"
|
|
163
|
+
- User must restore first (future enhancement)
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Benefits
|
|
168
|
+
|
|
169
|
+
1. **Safety**: Confirmation flow prevents accidental deletions
|
|
170
|
+
2. **Recovery**: Soft delete enables future restoration feature
|
|
171
|
+
3. **Audit Trail**: Track who deleted what and when
|
|
172
|
+
4. **Flexibility**: `deleted_filter` parameter allows searching deleted memories when needed
|
|
173
|
+
5. **Data Integrity**: Relationships preserved (orphaned but not lost)
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Trade-offs
|
|
178
|
+
|
|
179
|
+
1. **Storage**: Deleted memories consume storage (acceptable trade-off)
|
|
180
|
+
2. **Complexity**: Additional filtering logic in all search tools
|
|
181
|
+
3. **Breaking Change**: Immediate behavior change (no backward compatibility)
|
|
182
|
+
4. **No Restoration**: Phase 1 doesn't include restoration tool (future enhancement)
|
|
183
|
+
5. **Shared Spaces**: Deleted published memories remain in spaces (future: `remember_retract`)
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Migration Strategy
|
|
188
|
+
|
|
189
|
+
### Existing Data
|
|
190
|
+
|
|
191
|
+
**Approach**: Treat missing `deleted_at` field as "not deleted"
|
|
192
|
+
- No migration script needed
|
|
193
|
+
- Existing memories implicitly have `deleted_at: null`
|
|
194
|
+
- Weaviate `isNull(true)` filter handles this correctly
|
|
195
|
+
|
|
196
|
+
### API Changes
|
|
197
|
+
|
|
198
|
+
**Breaking Change**: Immediate migration
|
|
199
|
+
- `remember_delete_memory` behavior changes immediately
|
|
200
|
+
- All search tools add `deleted_filter` parameter (default: 'exclude')
|
|
201
|
+
- No feature flags or gradual rollout
|
|
202
|
+
- Version bump: v2.8.0 → v3.0.0 (major version)
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Future Enhancements
|
|
207
|
+
|
|
208
|
+
### Phase 2: Recovery (Future)
|
|
209
|
+
- `remember_restore_memory` tool
|
|
210
|
+
- Confirmation flow for restoration
|
|
211
|
+
- Automatic relationship restoration
|
|
212
|
+
|
|
213
|
+
### Phase 3: Permanent Deletion (Not Planned)
|
|
214
|
+
- No permanent deletion feature
|
|
215
|
+
- Soft delete is sufficient
|
|
216
|
+
- Storage cost is acceptable
|
|
217
|
+
|
|
218
|
+
### Phase 4: Shared Space Integration (Future)
|
|
219
|
+
- `remember_retract` tool to unpublish memories
|
|
220
|
+
- Separate from deletion
|
|
221
|
+
- Requires confirmation
|
|
222
|
+
|
|
223
|
+
### Phase 5: Moderation (Future)
|
|
224
|
+
- Space moderators can hide memories
|
|
225
|
+
- Uses `moderation_flags` instead of `deleted_at`
|
|
226
|
+
- Separate from user deletion
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Security Considerations
|
|
231
|
+
|
|
232
|
+
### Access Control
|
|
233
|
+
|
|
234
|
+
**Deleted memories**:
|
|
235
|
+
- Only owner can search their deleted memories (`deleted_filter: 'include'` or `'only'`)
|
|
236
|
+
- Other users cannot see deleted memories (filtered out)
|
|
237
|
+
- Shared space memories remain visible until retracted (future enhancement)
|
|
238
|
+
|
|
239
|
+
**Confirmation tokens**:
|
|
240
|
+
- Reuse existing token service
|
|
241
|
+
- 5-minute expiry
|
|
242
|
+
- One-time use
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Testing Strategy
|
|
247
|
+
|
|
248
|
+
1. **Unit Tests**:
|
|
249
|
+
- Schema field validation
|
|
250
|
+
- Filter logic (exclude/include/only)
|
|
251
|
+
- Confirmation flow
|
|
252
|
+
- Relationship orphaning
|
|
253
|
+
|
|
254
|
+
2. **Integration Tests**:
|
|
255
|
+
- End-to-end deletion workflow
|
|
256
|
+
- Search with deleted_filter variations
|
|
257
|
+
- Relationship creation with deleted memories (should fail)
|
|
258
|
+
- Update deleted memory (should fail)
|
|
259
|
+
|
|
260
|
+
3. **Edge Cases**:
|
|
261
|
+
- Delete already deleted memory
|
|
262
|
+
- Confirm expired token
|
|
263
|
+
- Search with invalid deleted_filter value
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Documentation Updates
|
|
268
|
+
|
|
269
|
+
1. **README.md**: Update deletion workflow examples
|
|
270
|
+
2. **CHANGELOG.md**: Document breaking change (v3.0.0)
|
|
271
|
+
3. **Tool Descriptions**: Update all affected tools
|
|
272
|
+
4. **Migration Guide**: Document behavior changes
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Open Questions
|
|
277
|
+
|
|
278
|
+
**From Clarification Document**:
|
|
279
|
+
|
|
280
|
+
1. **Agent Permission** (Item 3.2, Question 3):
|
|
281
|
+
> "Should agents be able to search deleted memories without explicit user permission, or should this require a special flag?"
|
|
282
|
+
> Response: "Clarification needed"
|
|
283
|
+
|
|
284
|
+
**Recommendation**: Allow agents to search deleted memories if user explicitly requests it in natural language (e.g., "search my deleted memories"). The `deleted_filter` parameter provides the mechanism. No additional permission system needed.
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
**Status**: Design Specification Complete
|
|
289
|
+
**Recommendation**: Proceed with milestone and task creation
|
|
290
|
+
**Priority**: Highest (per user feedback)
|
|
291
|
+
**Estimated Effort**: 2-3 weeks
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
# Trust Escalation Prevention
|
|
2
2
|
|
|
3
|
-
**Concept**: Automatic trust reduction for repeated unauthorized access attempts
|
|
4
|
-
**Created**: 2026-02-11
|
|
3
|
+
**Concept**: Automatic trust reduction for repeated unauthorized access attempts
|
|
4
|
+
**Created**: 2026-02-11
|
|
5
|
+
**Updated**: 2026-02-27
|
|
5
6
|
**Status**: Design Specification
|
|
6
7
|
|
|
8
|
+
> **NOTE (2026-02-27)**: Trust escalation applies to ghost/persona conversations (confirmed in
|
|
9
|
+
> clarification-3). When a user repeatedly asks a ghost about topics above their trust level,
|
|
10
|
+
> the escalation system triggers: -0.1 trust per failed attempt, block after 3 attempts. The
|
|
11
|
+
> ghost's system prompt warns progressively before backend escalation kicks in.
|
|
12
|
+
> See `local.ghost-persona-system.md` for ghost-specific escalation behavior.
|
|
13
|
+
|
|
7
14
|
---
|
|
8
15
|
|
|
9
16
|
## Overview
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
# Trust System Implementation - Prompt-Based Enforcement
|
|
2
2
|
|
|
3
|
-
**Concept**: Trust enforcement through LLM prompting and validation
|
|
4
|
-
**Created**: 2026-02-11
|
|
5
|
-
**
|
|
3
|
+
**Concept**: Trust enforcement through LLM prompting and validation
|
|
4
|
+
**Created**: 2026-02-11
|
|
5
|
+
**Updated**: 2026-02-27
|
|
6
|
+
**Status**: Superseded by Ghost/Persona Design
|
|
7
|
+
|
|
8
|
+
> **NOTE (2026-02-27)**: This document describes **prompt-based enforcement** as the primary
|
|
9
|
+
> trust mechanism. Per the ghost/persona design (`local.ghost-persona-system.md`), the primary
|
|
10
|
+
> enforcement is now **query-level filtering** at the Weaviate layer — memories above the
|
|
11
|
+
> accessor's trust threshold are never returned. Prompt-based enforcement remains as one of
|
|
12
|
+
> three configurable modes (query, prompt, hybrid), but query is the default. The prompt-based
|
|
13
|
+
> approach described here applies only when enforcement_mode is set to 'prompt' or 'hybrid'.
|
|
14
|
+
> See `local.ghost-persona-system.md` for the current architecture.
|
|
6
15
|
|
|
7
16
|
---
|
|
8
17
|
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# Milestone 13: Soft Delete System
|
|
2
|
+
|
|
3
|
+
**Goal**: Implement safe deletion with confirmation flow and recovery capabilities
|
|
4
|
+
**Duration**: 2-3 weeks
|
|
5
|
+
**Dependencies**: M10 (Shared Spaces - for confirmation token service)
|
|
6
|
+
**Status**: Not Started
|
|
7
|
+
**Priority**: Highest
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
Implement a comprehensive soft delete system that prevents accidental data loss by requiring confirmation before deletion and marking memories as deleted rather than permanently removing them. This enables future recovery features and maintains data integrity while providing a safer deletion workflow.
|
|
14
|
+
|
|
15
|
+
**Key Innovation**: Reuse existing confirmation token service from `remember_publish` for a consistent user experience across all destructive operations.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Deliverables
|
|
20
|
+
|
|
21
|
+
### 1. Schema Updates (3 new fields)
|
|
22
|
+
- Add `deleted_at` field (date, nullable) - Timestamp of deletion
|
|
23
|
+
- Add `deleted_by` field (text) - User ID who deleted the memory
|
|
24
|
+
- Add `deletion_reason` field (text) - Optional reason for deletion
|
|
25
|
+
|
|
26
|
+
### 2. Confirmation Flow
|
|
27
|
+
- Modify `remember_delete_memory` to create confirmation token
|
|
28
|
+
- Enhance `remember_confirm` to handle `delete_memory` action
|
|
29
|
+
- Include deletion preview (content, relationship count, orphaned relationships)
|
|
30
|
+
|
|
31
|
+
### 3. Search Tool Updates (4 tools)
|
|
32
|
+
- Add `deleted_filter` parameter to `remember_search_memory`
|
|
33
|
+
- Add `deleted_filter` parameter to `remember_query_memory`
|
|
34
|
+
- Add `deleted_filter` parameter to `remember_find_similar`
|
|
35
|
+
- Add `deleted_filter` parameter to `remember_search_relationship`
|
|
36
|
+
|
|
37
|
+
### 4. Relationship Handling
|
|
38
|
+
- Mark relationships as "orphaned" when memory deleted
|
|
39
|
+
- Prevent creating relationships with deleted memories
|
|
40
|
+
- Exclude deleted memories from relationship searches by default
|
|
41
|
+
|
|
42
|
+
### 5. Error Handling
|
|
43
|
+
- Return error when updating deleted memory
|
|
44
|
+
- Return error when creating relationship with deleted memory
|
|
45
|
+
- Clear error messages with actionable guidance
|
|
46
|
+
|
|
47
|
+
### 6. Documentation Updates
|
|
48
|
+
- Update README with new deletion workflow
|
|
49
|
+
- Document breaking changes in CHANGELOG (v3.0.0)
|
|
50
|
+
- Update tool descriptions
|
|
51
|
+
- Add migration guide
|
|
52
|
+
|
|
53
|
+
### 7. Testing
|
|
54
|
+
- Unit tests for schema fields
|
|
55
|
+
- Unit tests for confirmation flow
|
|
56
|
+
- Unit tests for deleted_filter parameter
|
|
57
|
+
- Unit tests for relationship orphaning
|
|
58
|
+
- Integration tests for full deletion workflow
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Success Criteria
|
|
63
|
+
|
|
64
|
+
- [ ] Schema has 3 new fields: `deleted_at`, `deleted_by`, `deletion_reason`
|
|
65
|
+
- [ ] `remember_delete_memory` creates confirmation token (not immediate delete)
|
|
66
|
+
- [ ] `remember_confirm` handles `delete_memory` action
|
|
67
|
+
- [ ] Deletion preview shows content and relationship impact
|
|
68
|
+
- [ ] All 4 search tools have `deleted_filter` parameter
|
|
69
|
+
- [ ] Default behavior excludes deleted memories from all searches
|
|
70
|
+
- [ ] `deleted_filter: "include"` shows all memories (deleted + active)
|
|
71
|
+
- [ ] `deleted_filter: "only"` shows only deleted memories
|
|
72
|
+
- [ ] Relationships marked as orphaned when memory deleted
|
|
73
|
+
- [ ] Cannot create relationship with deleted memory (returns error)
|
|
74
|
+
- [ ] Cannot update deleted memory (returns error)
|
|
75
|
+
- [ ] All existing tests still passing
|
|
76
|
+
- [ ] New soft delete tests passing
|
|
77
|
+
- [ ] TypeScript compiles without errors
|
|
78
|
+
- [ ] Build successful
|
|
79
|
+
- [ ] Documentation updated with examples
|
|
80
|
+
- [ ] CHANGELOG documents breaking changes
|
|
81
|
+
- [ ] Version bumped to v3.0.0 (major version)
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Key Files to Create/Modify
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
src/
|
|
89
|
+
├── weaviate/
|
|
90
|
+
│ ├── schema.ts # Add 3 new fields to Memory schema
|
|
91
|
+
│ └── space-schema.ts # Add 3 new fields to Memory_public
|
|
92
|
+
├── tools/
|
|
93
|
+
│ ├── delete-memory.ts # Modify to create confirmation token
|
|
94
|
+
│ ├── confirm.ts # Enhance to handle delete_memory action
|
|
95
|
+
│ ├── search-memory.ts # Add deleted_filter parameter
|
|
96
|
+
│ ├── query-memory.ts # Add deleted_filter parameter
|
|
97
|
+
│ ├── find-similar.ts # Add deleted_filter parameter
|
|
98
|
+
│ ├── search-relationship.ts # Add deleted_filter parameter
|
|
99
|
+
│ ├── create-relationship.ts # Prevent relationships with deleted memories
|
|
100
|
+
│ └── update-memory.ts # Prevent updating deleted memories
|
|
101
|
+
├── utils/
|
|
102
|
+
│ └── weaviate-filters.ts # Add deleted_filter helper functions
|
|
103
|
+
└── types/
|
|
104
|
+
└── memory.ts # Add DeletedFilter type
|
|
105
|
+
|
|
106
|
+
tests/
|
|
107
|
+
└── unit/
|
|
108
|
+
├── schema.test.ts # Test new fields
|
|
109
|
+
├── space-schema.test.ts # Test new fields in public collection
|
|
110
|
+
├── delete-memory.test.ts # Test confirmation flow
|
|
111
|
+
├── confirm.test.ts # Test delete_memory action
|
|
112
|
+
├── search-memory.test.ts # Test deleted_filter
|
|
113
|
+
├── query-memory.test.ts # Test deleted_filter
|
|
114
|
+
├── find-similar.test.ts # Test deleted_filter
|
|
115
|
+
└── search-relationship.test.ts # Test deleted_filter
|
|
116
|
+
|
|
117
|
+
agent/
|
|
118
|
+
└── design/
|
|
119
|
+
└── soft-delete-system.md # ✅ Already created
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Implementation Tasks
|
|
125
|
+
|
|
126
|
+
See individual task documents:
|
|
127
|
+
- Task 70: Add Soft Delete Schema Fields
|
|
128
|
+
- Task 71: Implement Delete Confirmation Flow
|
|
129
|
+
- Task 72: Add deleted_filter to Search Tools
|
|
130
|
+
- Task 73: Update Relationship Handling for Deleted Memories
|
|
131
|
+
- Task 74: Add Unit Tests for Soft Delete
|
|
132
|
+
- Task 75: Update Documentation and CHANGELOG
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Architecture Notes
|
|
137
|
+
|
|
138
|
+
### Soft Delete vs Hard Delete
|
|
139
|
+
|
|
140
|
+
**Soft Delete** (Implemented):
|
|
141
|
+
- Memory remains in Weaviate
|
|
142
|
+
- `deleted_at` field set to current timestamp
|
|
143
|
+
- Filtered out by default
|
|
144
|
+
- Can be searched with `deleted_filter: "include"` or `"only"`
|
|
145
|
+
- Enables future restoration feature
|
|
146
|
+
|
|
147
|
+
**Hard Delete** (Not Implemented):
|
|
148
|
+
- Memory permanently removed from Weaviate
|
|
149
|
+
- Cannot be recovered
|
|
150
|
+
- Not planned for this milestone
|
|
151
|
+
|
|
152
|
+
### Confirmation Token Reuse
|
|
153
|
+
|
|
154
|
+
**Existing Service**: `ConfirmationTokenService` (from M10)
|
|
155
|
+
- Already handles token generation, validation, expiry
|
|
156
|
+
- Stores tokens in Firestore: `users/{user_id}/requests/{request_id}`
|
|
157
|
+
- 5-minute expiry
|
|
158
|
+
- One-time use
|
|
159
|
+
|
|
160
|
+
**New Action**: `delete_memory`
|
|
161
|
+
```typescript
|
|
162
|
+
{
|
|
163
|
+
action: 'delete_memory',
|
|
164
|
+
payload: {
|
|
165
|
+
memory_id: string;
|
|
166
|
+
reason?: string;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Filter Implementation
|
|
172
|
+
|
|
173
|
+
**Weaviate Query Level**:
|
|
174
|
+
```typescript
|
|
175
|
+
// deleted_filter: 'exclude' (default)
|
|
176
|
+
collection.query.hybrid(query)
|
|
177
|
+
.where(Filters.or(
|
|
178
|
+
collection.filter.byProperty('deleted_at').isNull(true),
|
|
179
|
+
// ... other filters
|
|
180
|
+
))
|
|
181
|
+
|
|
182
|
+
// deleted_filter: 'include'
|
|
183
|
+
// No deleted_at filter applied
|
|
184
|
+
|
|
185
|
+
// deleted_filter: 'only'
|
|
186
|
+
collection.query.hybrid(query)
|
|
187
|
+
.where(
|
|
188
|
+
collection.filter.byProperty('deleted_at').isNull(false)
|
|
189
|
+
)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Relationship Orphaning
|
|
193
|
+
|
|
194
|
+
**Implementation Options**:
|
|
195
|
+
1. **Computed Property** (Recommended): Check if any memory in relationship is deleted
|
|
196
|
+
2. **Flag Field**: Add `is_orphaned` boolean to relationship
|
|
197
|
+
3. **Status Field**: Add `status: "active" | "orphaned"` to relationship
|
|
198
|
+
|
|
199
|
+
**Recommendation**: Use computed property (Option 1) - no schema changes needed, always accurate.
|
|
200
|
+
|
|
201
|
+
### Breaking Changes
|
|
202
|
+
|
|
203
|
+
**Version**: v2.8.0 → v3.0.0 (major version bump)
|
|
204
|
+
|
|
205
|
+
**Changes**:
|
|
206
|
+
1. `remember_delete_memory` behavior changes (immediate → confirmation)
|
|
207
|
+
2. All search tools add `deleted_filter` parameter
|
|
208
|
+
3. Default search behavior excludes deleted memories
|
|
209
|
+
|
|
210
|
+
**Migration Path**:
|
|
211
|
+
- No code changes required for users
|
|
212
|
+
- Behavior change is immediate
|
|
213
|
+
- Existing memories implicitly have `deleted_at: null`
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Testing Strategy
|
|
218
|
+
|
|
219
|
+
1. **Unit Tests**: Schema fields, filter logic, confirmation flow
|
|
220
|
+
2. **Integration Tests**: End-to-end deletion workflow
|
|
221
|
+
3. **Edge Cases**: Delete deleted memory, expired tokens, invalid filters
|
|
222
|
+
4. **Performance Tests**: Search with large numbers of deleted memories
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Future Phases
|
|
227
|
+
|
|
228
|
+
**Phase 2: Recovery** (Future - Not in M13):
|
|
229
|
+
- `remember_restore_memory` tool
|
|
230
|
+
- Confirmation flow for restoration
|
|
231
|
+
- Automatic relationship restoration
|
|
232
|
+
- Restore to original state
|
|
233
|
+
|
|
234
|
+
**Phase 3: Shared Space Integration** (Future):
|
|
235
|
+
- `remember_retract` tool to unpublish memories
|
|
236
|
+
- Separate from deletion
|
|
237
|
+
- Requires confirmation
|
|
238
|
+
- Removes from shared spaces
|
|
239
|
+
|
|
240
|
+
**Phase 4: Moderation** (Future):
|
|
241
|
+
- Space moderators can hide memories
|
|
242
|
+
- Uses `moderation_flags` instead of `deleted_at`
|
|
243
|
+
- Separate from user deletion
|
|
244
|
+
- Per-space moderation
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Breaking Changes
|
|
249
|
+
|
|
250
|
+
**API Changes**:
|
|
251
|
+
- `remember_delete_memory` now returns confirmation token (not immediate delete)
|
|
252
|
+
- All search tools add `deleted_filter` parameter (default: 'exclude')
|
|
253
|
+
- Default search behavior changes (excludes deleted memories)
|
|
254
|
+
|
|
255
|
+
**Data Changes**:
|
|
256
|
+
- None (existing memories implicitly have `deleted_at: null`)
|
|
257
|
+
|
|
258
|
+
**Behavior Changes**:
|
|
259
|
+
- Deletion requires confirmation (two-step process)
|
|
260
|
+
- Deleted memories remain in database (soft delete)
|
|
261
|
+
- Cannot update or create relationships with deleted memories
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Security Considerations
|
|
266
|
+
|
|
267
|
+
**Access Control**:
|
|
268
|
+
- Only owner can delete their memories
|
|
269
|
+
- Only owner can search their deleted memories
|
|
270
|
+
- Confirmation tokens are user-specific
|
|
271
|
+
- Deleted memories not visible to other users
|
|
272
|
+
|
|
273
|
+
**Data Retention**:
|
|
274
|
+
- Deleted memories remain in database indefinitely
|
|
275
|
+
- No automatic purge policy
|
|
276
|
+
- Storage cost is acceptable trade-off for safety
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Documentation Requirements
|
|
281
|
+
|
|
282
|
+
1. **README.md**:
|
|
283
|
+
- Update deletion workflow section
|
|
284
|
+
- Add examples of `deleted_filter` usage
|
|
285
|
+
- Document confirmation flow
|
|
286
|
+
|
|
287
|
+
2. **CHANGELOG.md**:
|
|
288
|
+
- Document breaking changes (v3.0.0)
|
|
289
|
+
- List all modified tools
|
|
290
|
+
- Provide migration guidance
|
|
291
|
+
|
|
292
|
+
3. **Tool Descriptions**:
|
|
293
|
+
- Update `remember_delete_memory` description
|
|
294
|
+
- Add `deleted_filter` parameter to 4 search tools
|
|
295
|
+
- Update error messages
|
|
296
|
+
|
|
297
|
+
4. **Migration Guide**:
|
|
298
|
+
- Explain behavior changes
|
|
299
|
+
- Provide code examples
|
|
300
|
+
- Document version bump rationale
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
**Next Milestone**: M5 - Template System (deferred until M13 complete)
|
|
305
|
+
**Blockers**: None (builds on M10 confirmation token service)
|
|
306
|
+
**Priority**: Highest (per user feedback)
|