From 92a107db13fec7dd015f438df3e041fef3c2982a Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Thu, 13 Aug 2026 10:34:01 -0700 Subject: [PATCH] chore: re-slot release as v1.62.1.0 (PATCH per user) Main claimed 1.62.0.0 while the wave was in flight; the user chose the PATCH slot over queue-advancing MINOR. Renumbers the identity-pin migration notice (now version-free flag name so a re-slot never orphans an already-set flag), the CLAUDE.md /health note, the CHANGELOG heading, and the TODOS section titles. Co-Authored-By: Claude Fable 5 --- CHANGELOG.md | 2 +- CLAUDE.md | 2 +- TODOS.md | 6 +++--- VERSION | 2 +- extension/background.js | 17 +++++++++-------- package.json | 2 +- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f9df3449..81aac979d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## [1.63.0.0] - 2026-08-12 +## [1.62.1.0] - 2026-08-12 **Everything gstack sends off your machine now leaves a receipt you can read.** **And the eval harness stopped grading itself a passing grade.** diff --git a/CLAUDE.md b/CLAUDE.md index f6339fd66..9b36e8926 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -282,7 +282,7 @@ PTY via `window.gstackInjectToTerminal(text)`, exposed by `sidepanel-terminal.js`. No `/sidebar-command` POST — the live REPL is the only execution surface in the sidebar now. -**`/health` MUST NOT surface any token — and it no longer does** (v1.63+). +**`/health` MUST NOT surface any token — and it no longer does** (v1.62.1+). The historical headed-mode leak of `AUTH_TOKEN` is fixed: `GET /health` is liveness/status only in every mode. Token bootstrap is `POST /extension-token`, which validates the caller's Origin against the pinned extension identity diff --git a/TODOS.md b/TODOS.md index 704714d5f..a0f6f8c80 100644 --- a/TODOS.md +++ b/TODOS.md @@ -2723,9 +2723,9 @@ log already streams per-shard results). **Effort:** S (human ~2h, CC ~15min). **Depends on:** v1.62 port wave landed. -## v1.63 port-wave review follow-ups (deferred from /ship review army — non-blocking polish) +## v1.62.1 port-wave review follow-ups (deferred from /ship review army — non-blocking polish) -Genuine review findings deferred from the v1.63 ship because they are +Genuine review findings deferred from the v1.62.1 ship because they are informational/polish, not correctness-blocking, and several want their own tests. Filed so they are tracked, not dropped. @@ -2756,7 +2756,7 @@ tests. Filed so they are tracked, not dropped. ## P2: harden or re-tier skill-e2e-plan-design-with-ui PTY detection **What:** The gate-tier `test/skill-e2e-plan-design-with-ui.test.ts` began executing -for the first time once v1.63's `seedSkills` registered skills in hermetic PTY +for the first time once v1.62.1's `seedSkills` registered skills in hermetic PTY children (the fork had deleted this file; it measured nothing before). It now reliably TIMES OUT even though the skill runs correctly: the transcript shows `/plan-design-review` reaching its scope-gate AskUserQuestion (5 options, the diff --git a/VERSION b/VERSION index 232d60188..a9d7dad22 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.63.0.0 +1.62.1.0 diff --git a/extension/background.js b/extension/background.js index a1e4cfa29..6b3e95eb4 100644 --- a/extension/background.js +++ b/extension/background.js @@ -588,24 +588,25 @@ chrome.tabs.onUpdated.addListener((_id, changeInfo) => { } }); -// ─── v1.63 identity-pin migration notice ──────────────────────── +// ─── identity-pin migration notice (v1.62.1) ──────────────────── // -// The manifest "key" added in v1.63 pins the extension ID, which changes +// The manifest "key" added in v1.62.1 pins the extension ID, which changes // the ID for existing installs — chrome.storage.local is keyed by // extension ID, so panel-local state (saved port, snoozes) resets once. -// Explain that in-product, one time. +// Explain that in-product, one time. The flag name is version-free so a +// release re-slot never orphans an already-set flag. async function announceIdentityPinOnce() { try { - const data = await chrome.storage.local.get('gstack_id_migrated_v163'); - if (data.gstack_id_migrated_v163) return; - console.log('[gstack] gstack sidebar: extension identity pinned in v1.63 — panel state reset once.'); + const data = await chrome.storage.local.get('gstack_id_pin_migrated'); + if (data.gstack_id_pin_migrated) return; + console.log('[gstack] gstack sidebar: extension identity pinned in v1.62.1 — panel state reset once.'); chrome.runtime.sendMessage({ type: 'gstack-migration-notice', - message: 'gstack sidebar: extension identity pinned in v1.63 — panel state reset once.', + message: 'gstack sidebar: extension identity pinned in v1.62.1 — panel state reset once.', }).catch(() => { // Expected: panel not open. The console line above still lands. }); - await chrome.storage.local.set({ gstack_id_migrated_v163: true }); + await chrome.storage.local.set({ gstack_id_pin_migrated: true }); } catch (err) { console.debug('[gstack] identity-pin notice failed (non-fatal):', err.message); } diff --git a/package.json b/package.json index bbffcc3b1..86c9a0ac8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gstack", - "version": "1.63.0.0", + "version": "1.62.1.0", "description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.", "license": "MIT", "type": "module",