You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+16-1Lines changed: 16 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,13 +5,27 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [1.5.1] - 2026-04-30
9
+
10
+
### Added
11
+
12
+
- Per-workspace evidence log for extraction, promotion, reinforcement, render, storage, and hook lifecycle events.
13
+
-`memory-diag health --json` for machine-readable diagnostics.
14
+
-`memory-diag explain` for per-memory render status, strength, reasons, and evidence event IDs.
15
+
-`memory-diag trace --memory <id>` for memory lifecycle history.
16
+
- UTC calendar-day reinforcement gate so repeated matches cannot inflate a memory multiple times in the same day.
17
+
18
+
### Changed
19
+
20
+
- Retention constants and calculations moved to `src/retention.ts`.
21
+
-`safetyCritical` is now fully inert: no retention multiplier and no type-cap bypass, while remaining JSON-compatible.
22
+
8
23
## [1.5.0] - 2026-04-29
9
24
10
25
### Added
11
26
12
27
- Strength-based workspace memory retention using exponential decay instead of additive priority scoring.
13
28
- Per-type rendered caps for workspace memory candidates: feedback 10, decision 10, project 8, and reference 6.
14
-
- Safety-critical memory weighting and type-cap exemption so important entries survive type floods while still competing under the global rendered cap.
15
29
- Dormant-workspace effective age: after 14 days without activity, additional dormant time counts at 0.25x for retention decay.
16
30
- Reinforcement tracking for repeated memories, with same-session and one-hour guards to prevent accidental reinforcement spam.
17
31
- Memory health diagnostics for stored vs rendered counts, type caps, global cap overflow, dormancy, retention monitoring, and strength-ranked top/weakest entries.
@@ -21,6 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
21
35
22
36
- Workspace memory rendering now ranks entries by retention strength, not the previous priority/penalty model.
23
37
- Confidence is retained for compatibility but no longer affects retention scoring.
38
+
- Deprecated `safetyCritical` is retained for JSON compatibility but no longer affects retention strength or type-cap behavior.
24
39
- Old or stale-marked memories are no longer hard-pruned; they remain stored and only fall out of rendered context through strength and cap competition.
25
40
- Existing duplicate promotion and dedupe paths now reinforce the surviving memory instead of only absorbing the duplicate.
26
41
- Health output now separates stored active memories from rendered candidates to make cap behavior easier to understand.
Copy file name to clipboardExpand all lines: RELEASE_NOTES.md
+38-3Lines changed: 38 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,47 @@
1
1
# Release Notes
2
2
3
+
## 1.5.1 (2026-04-30)
4
+
5
+
### Evidence Loop and Explainability
6
+
7
+
This release adds an evidence-based audit trail for memory lifecycle events and user-facing diagnostics for understanding why memories are rendered, promoted, or rejected.
8
+
9
+
> **Evidence before sublimation.** Every memory decision can be traced.
10
+
11
+
### What Changed
12
+
13
+
-**Evidence log**: extraction, promotion, reinforcement, render, and storage events are now recorded in a per-workspace `events.jsonl` with 90-day retention and 5000-event cap.
14
+
-**User explainability**: `memory-diag explain` shows per-memory render status with strength, reasons, and evidence. `memory-diag trace --memory <id>` shows the full lifecycle history.
15
+
-**Machine-readable diagnostics**: `memory-diag health --json` outputs structured `MemoryDiagJSON` for scripting.
16
+
-**Calendar-day reinforcement gate**: reinforcement now requires distinct UTC calendar days, preventing repetitive-task gaming that could inflate a memory's strength within a single day.
17
+
-**SafetyCritical deprecation complete**: the `safetyCritical` field no longer affects retention strength or type-cap bypass. All memories fade by the same rules.
18
+
-**Retention module extraction**: retention constants and calculations moved to `src/retention.ts` for cleaner separation.
19
+
20
+
### Privacy
21
+
22
+
- Evidence text previews are credential-redacted. Memory content is stored as truncated hashes, never in full.
23
+
- Diagnostics default to redacted output. `--raw` is available for maintainers.
- Evidence logs are created automatically; no migration needed.
30
+
31
+
### Validation
32
+
33
+
-`npm run typecheck`
34
+
-`npm test` — 271 tests passing
35
+
36
+
---
37
+
3
38
## 1.5.0 (2026-04-29)
4
39
5
40
### Retention Decay Model
6
41
7
42
This release changes workspace memory retention from hard stale pruning and additive priority scoring to a strength-based decay model.
8
43
9
-
Think of it like a forgetting curve: memories fade over time, but important, reinforced, and safety-critical memories decay slower. Weak entries fall out of rendered prompt context by cap competition, not hard deletion.
44
+
Think of it like a forgetting curve: memories fade over time, but importantand reinforced memories decay slower. Weak entries fall out of rendered prompt context by cap competition, not hard deletion.
10
45
11
46
> **Memory should fade, so the agent can keep learning.**
12
47
> Important memories decay slower, but every memory must leave room for newer project reality and avoid long-term memory pollution.
@@ -27,10 +62,10 @@ Think of it like a forgetting curve: memories fade over time, but important, rei
27
62
### What Changed
28
63
29
64
-**Strength-based retention**: workspace memory now uses exponential decay: initial strength × age decay.
30
-
-**Better initial strength**: type, source, user importance, and safety-critical status now determine how strong a memory starts.
65
+
-**Better initial strength**: type, source, and user importance now determine how strong a memory starts.
31
66
-**No confidence scoring**: confidence remains in stored data for compatibility, but it no longer affects retention ranking.
32
67
-**Type caps**: rendered workspace memory now caps feedback, decisions, project facts, and references separately so one type cannot monopolize all 28 slots.
33
-
-**Safety-critical protection**: safety-critical entries get stronger retention and are exempt from per-type caps, while still competing under the global rendered cap.
68
+
-**Deprecation:**`safetyCritical` field no longer affects retention strength or type-cap bypass. All system memories now fade according to the same rules. Safety rules belong in user-controlled `agent.md` files, not in system memory.
34
69
-**Dormant-aware age**: after 14 inactive days, additional dormant workspace time counts at 0.25x so paused projects do not forget too aggressively.
35
70
-**Reinforcement**: repeated matching memories reinforce the survivor and slow future decay, with same-session and one-hour guards to avoid accidental spam.
36
71
-**No hard stale pruning**: old or stale-marked memories are no longer automatically dropped by age; they lose rendered space only through cap competition.
Initial strength is based on memory type, source, optional user importance, and safety-critical status. Confidence remains stored for compatibility but is not part of retention scoring.
112
+
Initial strength is based on memory type, source, and optional user importance. Confidence remains stored for compatibility but is not part of retention scoring.
113
113
114
114
Rendered candidates are selected in this order:
115
115
116
116
1. Exclude `status: "superseded"` entries.
117
117
2. Compute current retention strength.
118
118
3. Sort by strength descending.
119
-
4. Apply per-type caps, with safety-critical entries exempt from type caps.
119
+
4. Apply per-type caps.
120
120
5. Keep the top 28 rendered entries under the workspace memory character budget.
121
121
122
122
Default type caps:
@@ -132,6 +132,10 @@ The type-cap total is 34, intentionally above the global 28-entry cap. These are
132
132
133
133
Dormant workspaces age more slowly: after 14 inactive days, additional dormant time counts at 0.25x for retention decay. Repeated duplicate memories reinforce the surviving entry and slow future decay, but same-session and under-one-hour repeats do not stack reinforcement.
134
134
135
+
### Safety-Critical Deprecation
136
+
137
+
The `safetyCritical` field on `LongTermMemoryEntry` is deprecated as of the retention v1.5.1 model update. It no longer affects retention strength or type-cap bypass. The field is preserved in the type definition for backward compatibility with existing workspace memory JSON files, but has no active behavior. Safety rules should be maintained in user-controlled files such as `agent.md` rather than in system memory.
138
+
135
139
### System Prompt Injection
136
140
137
141
Workspace memory is injected at the top of every message:
Initial strength uses type, source, user importance, and safety-critical factors. Confidence is stored for compatibility but is not used for retention scoring.
37
+
Initial strength uses type, source, and user importance factors. Confidence is stored for compatibility but is not used for retention scoring.
38
38
39
39
Rendered type caps prevent one type from filling all workspace memory slots:
40
40
@@ -45,7 +45,7 @@ Rendered type caps prevent one type from filling all workspace memory slots:
45
45
|`project`| 8 |
46
46
|`reference`| 6 |
47
47
48
-
Safety-critical memories are exempt from type caps but still compete under the global `maxEntries` limit. Old or stale-marked memories are not hard-pruned by age; they lose rendered space through strength and cap competition.
48
+
Old or stale-marked memories are not hard-pruned by age; they lose rendered space through strength and cap competition. The deprecated `safetyCritical` field is preserved for compatibility but no longer affects strength or type caps.
0 commit comments