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
{{ message }}
Repository navigation
Slice: conditional persona refresh at compaction boundary #327
As a Human who revised PERSONA.md on a long-lived bot, I want the next compaction to pick up the new voice, so that I never need a restart to be heard. As a Human who changed nothing, I want compaction to leave the voice byte-identical.
Acceptance criteria
Changed PERSONA.md plus one compaction -> new turns use the new version and the snapshot record advances.
Unchanged PERSONA.md plus one compaction -> the snapshot record is untouched.
Rest-of-prefix bytes are unchanged across the refresh.
The refresh observes existing session compaction events; no new seams.
Blocked by
None (can start immediately; shares no code path with the turn-annotation track).
State: completed (implementation done, uncommitted, no PR - merge decision left to Human)
Delivered: ownership.refreshPersonaSnapshot (explicit conditional-rewrite exception to first-write-wins) + MemoryService.refreshPersonaAfterCompaction (compare-then-write, no-op on identical/missing/unowned) + session/event compaction/end trigger in plugin.ts with guarded warn. Verified at runtime that dsh-compaction-basic 0.1.7-rc.2 appends compaction/start|summary|end (absent from its ctx.on typing - widened with comment).
Verification: new refresh test green (changed->refreshed, identical->no-op, unowned/wrong-bot->no-op); typecheck/lint clean; full core suite shows only the 23 pre-existing environment failures.
Remaining: review, PR; the trigger wiring itself is covered by construction (service tests), consider a plugin-harness test later.
Live verification (isolated 0.1.7-rc.2 Host, deepseek-flash, low pressure threshold)
Snapshot row flipped v1 to v2 with a fresh timestamp exactly at the compaction boundary; the only writer of that row is the compaction/end handler, so the event demonstrably arrived with that exact type string (also confirmed in the dsh-compaction-basic bundle binary; absent from its typings).
Post-compaction question answered CERULEAN-7 from the refreshed snapshot. Identical-content, unowned, and wrong-bot cases assert no-op in unit tests.
Verdict: PASS. Note: DSH writes no compaction markers to Host stdout; DB row + behavior are the observable proxies.
Activity
DoodleBears commentedon Sep 26, 2026
Agent work claim
DoodleBears commentedon Sep 26, 2026
Agent work outcome
test evidence: live-verification PNGs for #327/#328/#329
DoodleBears commentedon Sep 26, 2026
Live verification (isolated 0.1.7-rc.2 Host, deepseek-flash, low pressure threshold)
Snapshot row flipped v1 to v2 with a fresh timestamp exactly at the compaction boundary; the only writer of that row is the compaction/end handler, so the event demonstrably arrived with that exact type string (also confirmed in the dsh-compaction-basic bundle binary; absent from its typings).
Post-compaction question answered CERULEAN-7 from the refreshed snapshot. Identical-content, unowned, and wrong-bot cases assert no-op in unit tests.
Verdict: PASS. Note: DSH writes no compaction markers to Host stdout; DB row + behavior are the observable proxies.
feat(memory): out-of-band turn-annotation, persona-freeze note, compa…
test evidence: live-verification PNGs for #327/#328/#329