Skip to content

0.31.2–0.31.4: bug-hunt batches B (recall), D (dashboard) and E (housekeeping) - #82

Merged
Interstellar-code merged 28 commits into
mainfrom
claude/wonderful-bell-5nyrqz
Nov 8, 2026
Merged

Interstellar-code merged 28 commits into
mainfrom
claude/wonderful-bell-5nyrqz

Conversation

@Interstellar-code

Copy link
Copy Markdown
Owner

Brings in PRs 78, 79 and 80 with their own commits, so GitHub shows them as merged, plus the release bookkeeping and one harness test fix. Each batch is its own release in the CHANGELOG.

Fixes #19
Fixes #7
Fixes #12
Fixes #17
Fixes #26
Fixes #9
Fixes #23
Fixes #20
Fixes #22
Fixes #29
Fixes #30
Fixes #31
Fixes #32
Fixes #33
Fixes #36
Fixes #37
Fixes #38
Fixes #39

Releases

Harness test fix (05b10ee)

#38 releases a marker whose model call failed with release <root> <id> --failed. tests/session.test.ts's releasesOf read the last argument as the id, so it got --failed (SESSION.1.a4). It now takes the last non-flag argument, and the spec checks that only the lost call is released as failed. The batch session could not run the claude plugin test harness.

Decisions accepted (details in each PR)

These are conservative choices: #19 does a linear cosine scan over embedded rows, #17 no longer fires on recently, and #38 backs off 1h, doubling to a 24h cap, giving up after 5 failed model calls with an activity line.

Tests

  • claude plugin test .: 544 pass, 0 fail.
  • Full bun test ./tests/bun ./engine/test: 1778 pass, 2 skip, 9 fail. Those are the same 9 as on main in this container.
  • engine-diff ok (build .18).

Generated by Claude Code

claude added 28 commits November 8, 2026 14:47
…leting it (#37)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSnY9UQPcd6a4DCMpXD
…ing (#38)

A failed or unanswered summary model call now releases the marker with
attempts+1 and notBefore = now + 1h doubling per attempt (cap 24h);
session-pending list skips markers still waiting, and the fifth failed
attempt drops the marker with one activity line. Old markers parse as
attempts 0; session-pending write starts again at 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSnY9UQPcd6a4DCMpXD
…en first by design (#39)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSnY9UQPcd6a4DCMpXD
The yesterday check ran first and matched the phrase; check the two-day form first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSpuvDs1ukDqG5dKSZu
…ry facade (#7)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSpuvDs1ukDqG5dKSZu
… the 500 newest (#19)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSpuvDs1ukDqG5dKSZu
getSynonyms now returns the canonicals and synonyms of every group a word
belongs to, deduped in group order; normalizeQuery keeps a single canonical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSpuvDs1ukDqG5dKSZu
… recall token cap (#12)

A word in several synonym groups (push: deploy + git) now expands to 12+
tokens, so a flat expansion let it crowd later query words and its own
second meaning out of the 12-term FTS cap and the 6-term fact fallback.
expandedTokens now lists the literal query words first and then takes one
variant from each synonym group of each word in turn (new getSynonymGroups
in synonyms.ts). The token set is unchanged; only the order differs. The
FTS cap stays 12, as decided for #26.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSpuvDs1ukDqG5dKSZu
…; comments name the back-off (#38)

Follow-up to the review of the #38 fix: a marker whose notBefore is more
than 24 hours ahead (a clock that jumped back after a failed attempt, or a
hand edit) was hidden from listSessionPending for as long as it said, so it
was never retried or dropped. Such a wait is now treated as due. The
finishSessionSummaries comment and the bin/memories.ts usage line describe
the back-off and release --failed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSnY9UQPcd6a4DCMpXD
A filter change that overlapped an earlier /api/memories request could
let the older reply land last and overwrite the table with the older
filter's rows; pickTagFromSheet always raced (untagged first-open load,
then the tagged one). loadMemories now numbers each request and drops
stale replies and stale errors silently.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSrn4zdhsS2cocxtA3V
renderKnowledgeControls rebuilt the note on every render, replacing the
Clear button and dropping keyboard focus on each live event. Rebuild only
when the note's text or Clear presence changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSrn4zdhsS2cocxtA3V
…ckfilling to 10 (#31)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSrn4zdhsS2cocxtA3V
recallMemory now sets star.lastRecalled to the live event's timestamp
(carried on the spark) or to now, beside the recall count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSrn4zdhsS2cocxtA3V
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSobwTXWVRg7fVZcKYo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSobwTXWVRg7fVZcKYo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSobwTXWVRg7fVZcKYo
…ed flag (#38)

tests/session.test.ts releasesOf took the last argument as the session id;
a failed model call now releases with 'release <root> <id> --failed', so it
read '--failed'. It now takes the last non-flag argument, and SESSION.1.a4
checks that only the lost model call is released as failed. claude plugin
test: 544 pass, 0 fail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M2ePSobwTXWVRg7fVZcKYo
@Interstellar-code
Interstellar-code merged commit fe1f2c6 into main Nov 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment