Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions docs/RELEASE_v0.18.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Lisa v0.18.1

A hardening patch on the **desire-evolution** arc that v0.18.0 shipped — two
review follow-ups so a *closed* desire truly stays closed, and so intra-session
focus can't latch onto a stale conversation after a restart.

Typecheck green · full test suite green (**1014 tests**, 1013 pass) · no breaking
changes.

## 🔧 Fixes

### A closed desire actually stays closed (#251)

v0.18.0's `desire_close` was a *soft* close — it only flipped `actionable` off,
which is indistinguishable from a merely dormant wish. So closed desires kept
coming back into reflection's "revise or close these" block and could be
re-closed on every pass (duplicate `[DESIRE_CLOSED]` journal noise), and the
list she was asked to tend never actually shrank.

- **Persisted `closed` marker.** `desire_close` now records a distinct `closed`
state (kept on disk for the record + git history) and is **idempotent** — an
already-closed desire is a no-op, so no duplicate journal / progress entries.
- **Clean re-open.** Closing now **preserves** `heartbeatPrompt` / `pursuit`, so
a later `desire_revise` that makes it actionable again restores her
auto-pursuit intact (previously the prompt was silently dropped).
- Closed desires are filtered out of the reflector's block (the list finally
shrinks) and are never surfaced as her current / focused desire — in the
room, the island ping, or `lisa status`.

### Intra-session focus survives a restart (#251)

The "what the conversation is about" focus was gated on the process idle clock,
which reads *fresh* immediately after a launchd restart — so a stale resumed
chat could pin a focus onto an old topic for up to 15 minutes. It's now gated on
the **last real user message** (reset across restarts), so focus only applies
while the conversation is genuinely live.

## 📝 Notes

- Soul / mood / heartbeat / Reve are untouched; existing desire files round-trip
byte-stable (the `closed:` line only appears once a desire is actually closed).
- New store tests cover the closed-marker round-trip, `heartbeatPrompt`
retention, idempotent re-close, and re-open clearing `closed`.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oratis/lisa",
"version": "0.18.0",
"version": "0.18.1",
"description": "An AI agent with a real self — runs locally, has desires, keeps a journal, evolves over time.",
"keywords": [
"ai",
Expand Down