fix(observer_recall): don't bluff on clock-time asks it can't answer (beat 20)#260
Merged
Merged
Conversation
…(beat 20)
"recap what I was doing today between 11am and 1pm" parsed as no-window
(_window_seconds only handles relative spans like "20 minutes"), fell through to
"summarise the whole buffer", and returned the last few minutes as if it had
answered — a confident, off-topic reply.
The observer is a RAM ring of the last N snapshots (~10-30 min depending on
cadence), not a day log — it structurally cannot answer clock-time/calendar
windows. Now it detects those asks (11am, 14:30, today, this morning, last
night, …) and says so plainly, reports the span it actually covers, and still
shows what it does hold. Relative asks ("20 minutes ago", "just now") are
unchanged. Manifest regenerated; 52 observer tests pass, ruff clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
AVADSA25
added a commit
that referenced
this pull request
Jul 16, 2026
) DEMO_SCRIPT.md had been rewritten locally (the 15→22→25-beat seal, performance reorder, name-drop moats table) but was never actually committed — it sat as an uncommitted edit in the shared working tree since 2026-07-14. Committing the full sealed version now, plus today's status refresh: - #21 self-improve: now fully conversational (#257), no longer "fix in progress" - #20 observer recall: fully fixed — routing (#256), real NSWorkspace capture (#258), honest on out-of-range clock-time asks (#260) - #14 Pilot: navigation confirmed live; live-view click-through flagged as a rebuild in progress (was mis-marked READY) - #19 Connector: OAuth sign-in itself confirmed working; connected/disconnect state + persistent tokens flagged as a rebuild in progress - #18: note to set the CODEC connector to Always Allow in Claude's settings Co-authored-by: Mickael Farina <farina.mickael@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bug
"give me a recap of what I was doing today between 11am and 1pm" returned a confident summary of the last few minutes (20:43) — off-topic and misleading.
Why:
_window_secondsonly parses relative spans ("20 minutes", "1 hour"). A clock-time ask matches nothing → returnsNone→run()falls through to "summarise the whole buffer" → prints the last ~10 min as if it answered.The deeper truth: the observer is a RAM ring of the last N snapshots (~10–30 min depending on poll cadence), wiped on restart — it structurally cannot recall 11am–1pm. It should say that, not bluff.
Fix
Detect absolute/calendar asks (
11am,14:30,today,this morning,last night, …) and answer honestly, reporting the span actually covered, while still showing what's held.Before: "You were in: Claude. Timeline: 20:43 Claude"
After: "I can't recall that window. The observer is a rolling in-memory buffer of the last 10 snapshots — right now it only covers 09:09–09:34, about 25 min — not a full-day log… Here's everything it currently holds: …"
Relative asks ("20 minutes ago", "just now") unchanged. Manifest regenerated (88). 52 observer tests pass, ruff clean.
🤖 Generated with Claude Code