From fc953375a8d35905ee5eb850de868b8b5055a45f Mon Sep 17 00:00:00 2001 From: 0xDevNinja Date: Wed, 27 May 2026 13:29:35 +0530 Subject: [PATCH] fix(preamble): echo SESSIONS count so CLAUDE.md rules can read it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - _SESSIONS=$(find ~/.gstack/sessions -mmin -120) was computed but never echoed; CLAUDE.md rules pointing at "the preamble's session count" had no value to read - Add `echo "SESSIONS: $_SESSIONS"` next to BRANCH/PROACTIVE/etc. - Add invariant test that every SKILL.md including the preamble echoes the value (locks Defect A from #1651) Closes #1651 Defect A. Defect B (marker mtime refresh via PreToolUse hook) needs hook-infra work — leaving for a follow-up. --- SKILL.md | 1 + autoplan/SKILL.md | 1 + benchmark-models/SKILL.md | 1 + benchmark/SKILL.md | 1 + browse/SKILL.md | 1 + canary/SKILL.md | 1 + codex/SKILL.md | 1 + context-restore/SKILL.md | 1 + context-save/SKILL.md | 1 + cso/SKILL.md | 1 + design-consultation/SKILL.md | 1 + design-html/SKILL.md | 1 + design-review/SKILL.md | 1 + design-shotgun/SKILL.md | 1 + devex-review/SKILL.md | 1 + document-generate/SKILL.md | 1 + document-release/SKILL.md | 1 + health/SKILL.md | 1 + investigate/SKILL.md | 1 + ios-clean/SKILL.md | 1 + ios-design-review/SKILL.md | 1 + ios-fix/SKILL.md | 1 + ios-qa/SKILL.md | 1 + ios-sync/SKILL.md | 1 + land-and-deploy/SKILL.md | 1 + landing-report/SKILL.md | 1 + learn/SKILL.md | 1 + make-pdf/SKILL.md | 1 + office-hours/SKILL.md | 1 + open-gstack-browser/SKILL.md | 1 + pair-agent/SKILL.md | 1 + plan-ceo-review/SKILL.md | 1 + plan-design-review/SKILL.md | 1 + plan-devex-review/SKILL.md | 1 + plan-eng-review/SKILL.md | 1 + plan-tune/SKILL.md | 1 + qa-only/SKILL.md | 1 + qa/SKILL.md | 1 + retro/SKILL.md | 1 + review/SKILL.md | 1 + scrape/SKILL.md | 1 + .../preamble/generate-preamble-bash.ts | 1 + setup-browser-cookies/SKILL.md | 1 + setup-deploy/SKILL.md | 1 + setup-gbrain/SKILL.md | 1 + ship/SKILL.md | 1 + skillify/SKILL.md | 1 + sync-gbrain/SKILL.md | 1 + test/gen-skill-docs.test.ts | 30 +++++++++++++++++++ 49 files changed, 78 insertions(+) diff --git a/SKILL.md b/SKILL.md index c6441014c..4b7dad9fe 100644 --- a/SKILL.md +++ b/SKILL.md @@ -38,6 +38,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/autoplan/SKILL.md b/autoplan/SKILL.md index a39b60bbd..7b876096e 100644 --- a/autoplan/SKILL.md +++ b/autoplan/SKILL.md @@ -47,6 +47,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/benchmark-models/SKILL.md b/benchmark-models/SKILL.md index 47050855b..917621a7e 100644 --- a/benchmark-models/SKILL.md +++ b/benchmark-models/SKILL.md @@ -40,6 +40,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/benchmark/SKILL.md b/benchmark/SKILL.md index b6dc81373..0db5b4fab 100644 --- a/benchmark/SKILL.md +++ b/benchmark/SKILL.md @@ -40,6 +40,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/browse/SKILL.md b/browse/SKILL.md index 6a4f5c269..4ae6ffd88 100644 --- a/browse/SKILL.md +++ b/browse/SKILL.md @@ -39,6 +39,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/canary/SKILL.md b/canary/SKILL.md index 1ba6ecec7..411a212dc 100644 --- a/canary/SKILL.md +++ b/canary/SKILL.md @@ -39,6 +39,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/codex/SKILL.md b/codex/SKILL.md index dbc6bbcb6..8cef52e63 100644 --- a/codex/SKILL.md +++ b/codex/SKILL.md @@ -41,6 +41,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/context-restore/SKILL.md b/context-restore/SKILL.md index 92eb1cdd1..a72392873 100644 --- a/context-restore/SKILL.md +++ b/context-restore/SKILL.md @@ -43,6 +43,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/context-save/SKILL.md b/context-save/SKILL.md index 5a7b0d60e..b5091d4a8 100644 --- a/context-save/SKILL.md +++ b/context-save/SKILL.md @@ -43,6 +43,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/cso/SKILL.md b/cso/SKILL.md index 64cb75306..0ac2a8bda 100644 --- a/cso/SKILL.md +++ b/cso/SKILL.md @@ -44,6 +44,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/design-consultation/SKILL.md b/design-consultation/SKILL.md index bc52edc10..10e96aeb5 100644 --- a/design-consultation/SKILL.md +++ b/design-consultation/SKILL.md @@ -67,6 +67,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/design-html/SKILL.md b/design-html/SKILL.md index 5c92f7703..13d1bdd63 100644 --- a/design-html/SKILL.md +++ b/design-html/SKILL.md @@ -46,6 +46,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/design-review/SKILL.md b/design-review/SKILL.md index b584ada8f..92ff65609 100644 --- a/design-review/SKILL.md +++ b/design-review/SKILL.md @@ -44,6 +44,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/design-shotgun/SKILL.md b/design-shotgun/SKILL.md index 178416ba2..b004ed04d 100644 --- a/design-shotgun/SKILL.md +++ b/design-shotgun/SKILL.md @@ -61,6 +61,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/devex-review/SKILL.md b/devex-review/SKILL.md index 49d5ae212..af7daf0d5 100644 --- a/devex-review/SKILL.md +++ b/devex-review/SKILL.md @@ -44,6 +44,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/document-generate/SKILL.md b/document-generate/SKILL.md index e6cf9965d..9e46e4679 100644 --- a/document-generate/SKILL.md +++ b/document-generate/SKILL.md @@ -46,6 +46,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/document-release/SKILL.md b/document-release/SKILL.md index b49f4e89b..1ee9d324f 100644 --- a/document-release/SKILL.md +++ b/document-release/SKILL.md @@ -43,6 +43,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/health/SKILL.md b/health/SKILL.md index 396c980b2..ec27b1c53 100644 --- a/health/SKILL.md +++ b/health/SKILL.md @@ -41,6 +41,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/investigate/SKILL.md b/investigate/SKILL.md index b7780c1c4..0cb217e42 100644 --- a/investigate/SKILL.md +++ b/investigate/SKILL.md @@ -80,6 +80,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/ios-clean/SKILL.md b/ios-clean/SKILL.md index f1a458e1e..ac9a7aacb 100644 --- a/ios-clean/SKILL.md +++ b/ios-clean/SKILL.md @@ -43,6 +43,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/ios-design-review/SKILL.md b/ios-design-review/SKILL.md index f03806f54..5eb06dcf4 100644 --- a/ios-design-review/SKILL.md +++ b/ios-design-review/SKILL.md @@ -44,6 +44,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/ios-fix/SKILL.md b/ios-fix/SKILL.md index cc7a172b1..c32cb63de 100644 --- a/ios-fix/SKILL.md +++ b/ios-fix/SKILL.md @@ -45,6 +45,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/ios-qa/SKILL.md b/ios-qa/SKILL.md index 4d03a041b..b771232b0 100644 --- a/ios-qa/SKILL.md +++ b/ios-qa/SKILL.md @@ -48,6 +48,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/ios-sync/SKILL.md b/ios-sync/SKILL.md index c3449af7b..4b09aa71f 100644 --- a/ios-sync/SKILL.md +++ b/ios-sync/SKILL.md @@ -43,6 +43,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/land-and-deploy/SKILL.md b/land-and-deploy/SKILL.md index ef7497cd4..f1ccc7b52 100644 --- a/land-and-deploy/SKILL.md +++ b/land-and-deploy/SKILL.md @@ -38,6 +38,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/landing-report/SKILL.md b/landing-report/SKILL.md index be8aed5e1..acb2f834b 100644 --- a/landing-report/SKILL.md +++ b/landing-report/SKILL.md @@ -39,6 +39,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/learn/SKILL.md b/learn/SKILL.md index 3599115b8..951d663f1 100644 --- a/learn/SKILL.md +++ b/learn/SKILL.md @@ -41,6 +41,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/make-pdf/SKILL.md b/make-pdf/SKILL.md index 045e31516..ad5c0fd5e 100644 --- a/make-pdf/SKILL.md +++ b/make-pdf/SKILL.md @@ -39,6 +39,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/office-hours/SKILL.md b/office-hours/SKILL.md index b8b6fe1f9..d30360834 100644 --- a/office-hours/SKILL.md +++ b/office-hours/SKILL.md @@ -76,6 +76,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/open-gstack-browser/SKILL.md b/open-gstack-browser/SKILL.md index 8b4b0c493..f4b5012d5 100644 --- a/open-gstack-browser/SKILL.md +++ b/open-gstack-browser/SKILL.md @@ -38,6 +38,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/pair-agent/SKILL.md b/pair-agent/SKILL.md index dd7a51ecd..a94e8d8f3 100644 --- a/pair-agent/SKILL.md +++ b/pair-agent/SKILL.md @@ -39,6 +39,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/plan-ceo-review/SKILL.md b/plan-ceo-review/SKILL.md index a0b24ef99..7641d2682 100644 --- a/plan-ceo-review/SKILL.md +++ b/plan-ceo-review/SKILL.md @@ -70,6 +70,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/plan-design-review/SKILL.md b/plan-design-review/SKILL.md index 45b56bf4d..73f6cc2b2 100644 --- a/plan-design-review/SKILL.md +++ b/plan-design-review/SKILL.md @@ -43,6 +43,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/plan-devex-review/SKILL.md b/plan-devex-review/SKILL.md index 371d07a75..14c807996 100644 --- a/plan-devex-review/SKILL.md +++ b/plan-devex-review/SKILL.md @@ -47,6 +47,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/plan-eng-review/SKILL.md b/plan-eng-review/SKILL.md index a3a064a32..fdb0d8752 100644 --- a/plan-eng-review/SKILL.md +++ b/plan-eng-review/SKILL.md @@ -45,6 +45,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/plan-tune/SKILL.md b/plan-tune/SKILL.md index c575ef4f4..dd9eded1e 100644 --- a/plan-tune/SKILL.md +++ b/plan-tune/SKILL.md @@ -52,6 +52,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/qa-only/SKILL.md b/qa-only/SKILL.md index 3e95cb032..0161f9d99 100644 --- a/qa-only/SKILL.md +++ b/qa-only/SKILL.md @@ -40,6 +40,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/qa/SKILL.md b/qa/SKILL.md index aec716f95..b4dee46fa 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -46,6 +46,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/retro/SKILL.md b/retro/SKILL.md index f75097669..11e778591 100644 --- a/retro/SKILL.md +++ b/retro/SKILL.md @@ -58,6 +58,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/review/SKILL.md b/review/SKILL.md index ef9e439c5..f8deb6484 100644 --- a/review/SKILL.md +++ b/review/SKILL.md @@ -43,6 +43,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/scrape/SKILL.md b/scrape/SKILL.md index 7fb04d3f6..a6b2f3a8c 100644 --- a/scrape/SKILL.md +++ b/scrape/SKILL.md @@ -39,6 +39,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/scripts/resolvers/preamble/generate-preamble-bash.ts b/scripts/resolvers/preamble/generate-preamble-bash.ts index 18b6cca5d..825bd90d9 100644 --- a/scripts/resolvers/preamble/generate-preamble-bash.ts +++ b/scripts/resolvers/preamble/generate-preamble-bash.ts @@ -30,6 +30,7 @@ _SKILL_PREFIX=$(${ctx.paths.binDir}/gstack-config get skill_prefix 2>/dev/null | echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(${ctx.paths.binDir}/gstack-repo-mode 2>/dev/null) || true REPO_MODE=\${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/setup-browser-cookies/SKILL.md b/setup-browser-cookies/SKILL.md index 8b80fd58b..5a3585f52 100644 --- a/setup-browser-cookies/SKILL.md +++ b/setup-browser-cookies/SKILL.md @@ -36,6 +36,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/setup-deploy/SKILL.md b/setup-deploy/SKILL.md index 0e09cc491..8b3c9ead2 100644 --- a/setup-deploy/SKILL.md +++ b/setup-deploy/SKILL.md @@ -42,6 +42,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/setup-gbrain/SKILL.md b/setup-gbrain/SKILL.md index 6a3536d3b..1be8cf5d0 100644 --- a/setup-gbrain/SKILL.md +++ b/setup-gbrain/SKILL.md @@ -43,6 +43,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/ship/SKILL.md b/ship/SKILL.md index 38da52874..cab33436e 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -44,6 +44,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/skillify/SKILL.md b/skillify/SKILL.md index afef0e3a1..36d05451a 100644 --- a/skillify/SKILL.md +++ b/skillify/SKILL.md @@ -40,6 +40,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/sync-gbrain/SKILL.md b/sync-gbrain/SKILL.md index 7b7610ea6..b00ca11d0 100644 --- a/sync-gbrain/SKILL.md +++ b/sync-gbrain/SKILL.md @@ -43,6 +43,7 @@ _SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/de echo "PROACTIVE: $_PROACTIVE" echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED" echo "SKILL_PREFIX: $_SKILL_PREFIX" +echo "SESSIONS: $_SESSIONS" source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true REPO_MODE=${REPO_MODE:-unknown} echo "REPO_MODE: $REPO_MODE" diff --git a/test/gen-skill-docs.test.ts b/test/gen-skill-docs.test.ts index 0a0c9741b..458ae2888 100644 --- a/test/gen-skill-docs.test.ts +++ b/test/gen-skill-docs.test.ts @@ -272,6 +272,36 @@ describe('gen-skill-docs', () => { expect(content).toContain('RECOMMENDATION'); }); + // Issue #1651 Defect A: the preamble computed `_SESSIONS` but never echoed + // it, so CLAUDE.md rules that key on the session count had no value to + // read. Pin the echo across every generated SKILL.md so the fix can't + // regress under future resolver edits. + test('every generated SKILL.md echoes SESSIONS to stdout (issue #1651)', () => { + const offenders: string[] = []; + const rootSkill = path.join(ROOT, 'SKILL.md'); + const candidates: string[] = []; + if (fs.existsSync(rootSkill)) candidates.push(rootSkill); + for (const entry of fs.readdirSync(ROOT, { withFileTypes: true })) { + if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === 'node_modules') continue; + const candidate = path.join(ROOT, entry.name, 'SKILL.md'); + if (fs.existsSync(candidate)) candidates.push(candidate); + } + for (const file of candidates) { + const content = fs.readFileSync(file, 'utf-8'); + // Only check skills that include the preamble (have `_SESSIONS=$(find`). + if (!content.includes('_SESSIONS=$(find')) continue; + if (!content.includes('echo "SESSIONS: $_SESSIONS"')) { + offenders.push(path.relative(ROOT, file)); + } + } + if (offenders.length > 0) { + throw new Error( + `Found ${offenders.length} SKILL.md file(s) that compute _SESSIONS but never echo it (issue #1651 Defect A):\n ${offenders.slice(0, 8).join('\n ')}`, + ); + } + expect(offenders.length).toBe(0); + }); + test('generated SKILL.md contains branch detection', () => { const content = fs.readFileSync(path.join(ROOT, 'SKILL.md'), 'utf-8'); expect(content).toContain('_BRANCH');