diff --git a/CHANGELOG.md b/CHANGELOG.md index d4b8bca..e15fbda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,18 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`). asserts `yq --version` reports `mikefarah` **and** major **v4**, so both a regression to the Python package and a surprise future yq v5 fail CI. +### Changed + +- **Baked `mempalace` skill now teaches temporal grounding.** Added a + *Temporal grounding* rule to the image-baked + `skills/mempalace/SKILL.md` (Phase 1 wake-up + a matching anti-pattern): + before using relative time terms ("yesterday", "last week"), establish the + current date/time and compute the delta against the actual diary/drawer + timestamp. Explicitly calls out that a **container recreate or fresh session + is not a day boundary** — pi-devbox restarts several times a day, so two + entries minutes apart can straddle a recreate. Fixes agents mislabelling + same-day sessions as "yesterday". + --- ## v1.2.2 — 2026-06-24 diff --git a/rootfs/usr/local/share/pi-devbox/skills/mempalace/SKILL.md b/rootfs/usr/local/share/pi-devbox/skills/mempalace/SKILL.md index 9055af6..51111cc 100644 --- a/rootfs/usr/local/share/pi-devbox/skills/mempalace/SKILL.md +++ b/rootfs/usr/local/share/pi-devbox/skills/mempalace/SKILL.md @@ -43,6 +43,29 @@ Run these immediately when a session begins, before responding to the user: Do NOT announce this to the user. Just do it silently to orient yourself. +### Temporal grounding — compute time deltas, don't guess + +Diary entries and drawers carry real timestamps (`timestamp`, `created_at`). +Before describing *when* something happened — "yesterday", "earlier today", +"last week", "a while back" — **establish the current date/time first and +compute the delta against the actual timestamp.** Get "now" from the injected +session date or by running `date` in a shell; never infer it. + +**A container recreate or a fresh session is NOT a day boundary.** A pi-devbox +container is frequently restarted — often several times within the *same* day — +and each restart begins a new session with a fresh wake-up. Do not reason "new +session ⇒ last session was yesterday": two diary entries 90 minutes apart can +straddle a container recreate. The only authoritative clock is the timestamp on +the memory, not the session/container boundary. + +**Practical rule:** prefer explicit, checkable phrasing — e.g. "earlier today, +~8h ago (both 2026-06-25)" — over a vague relative term. If you catch yourself +about to write "yesterday" / "last week", subtract `now − entry.timestamp` and +state the computed result. (Remember timestamps may be UTC while the wall clock +is local — reconcile the offset before computing the delta.) Note too that +session feeders can lag up to a week (see *Multi-harness palace*), so a recent +absence in `wing_conversations` is not proof nothing happened. + ### Phase 2: Active Session (during work) #### Search Before You Speak @@ -294,6 +317,7 @@ Entity-relationship triples with temporal validity. Query with `mempalace_kg_que ## Anti-Patterns - **Don't guess when you can search.** If a question touches past work, search first. +- **Don't infer elapsed time from session or container boundaries.** A restart isn't a new day. Compare the actual timestamp (`timestamp` / `created_at`) against the current date/time before saying "yesterday", "last week", etc. - **Don't skip the diary.** A session without a diary entry is a session forgotten. - **Don't summarize drawer content.** File verbatim — the embedding model needs the original words. - **Don't mine .git directories or node_modules.** The CLI miner respects .gitignore by default.