From e5916efcf23891398323e64e5bdc9e096365798b Mon Sep 17 00:00:00 2001 From: Ramiro Rivera Date: Tue, 28 Jul 2026 05:17:49 +0200 Subject: [PATCH] chore: release 0.9.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ships the achievement-banner expiry fix from #170. The trophy banner rendered from the shared status.json with no TTL while reactions expire on a sweep, so a single unlock pinned every session's bubble until some path happened to call writeStatusState with no achievement — observed as a "Diplomat" banner stuck for ~5h after conflict_resolver unlocked. writeStatusState now stamps achievementAt and the statusline expires the banner on the same reactionTTL clock as a reaction. Validity and age are separate gates: a zeroed or malformed stamp never renders regardless of TTL, and reactionTTL=0 disables expiry only. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01H2GXsqpMvUhxBSNabSqZdk --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eb7e81e..4818a78 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ramarivera/coding-buddy", - "version": "0.9.2", + "version": "0.9.3", "description": "Persistent coding companion for Claude Code, Pi, and Oh My Pi", "type": "module", "omp": {