Skip to content

Commit de3a6d8

Browse files
authored
Merge pull request #52 from time-attack/release/gstack2-public-beta
release: GStack 2 public beta — v2.0.0.0
2 parents fea4356 + b85497d commit de3a6d8

369 files changed

Lines changed: 19037 additions & 92157 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/evals.yml

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,9 @@ jobs:
179179
# a fresh CI checkout has NO registry — claude prints "Unknown command:
180180
# /plan-ceo-review". Mirror setup's --no-prefix registry minimally: a gstack
181181
# root symlink (resolves the preamble's absolute ~/.claude/skills/gstack/bin/*
182-
# and ~/.claude/skills/gstack/<skill>/sections/* paths) plus a per-skill
183-
# top-level dir holding SKILL.md (+ sections) symlinks for the two skills
184-
# these tests invoke. No ./setup (it builds binaries, launches Chromium,
182+
# paths and the dispatchers' skills/*/references/* reads) plus a per-skill
183+
# top-level dir holding the compat alias SKILL.md for the two commands these
184+
# tests invoke. No ./setup (it builds binaries, launches Chromium,
185185
# installs fonts, reads a /dev/tty prompt) and no binary build (SKILL.md +
186186
# bin/ + sections/ are committed). $HOME is /github/home here; the spawned
187187
# claude inherits it (this runner adds no HOME/CLAUDE_CONFIG_DIR override,
@@ -205,11 +205,15 @@ jobs:
205205
# registry recognized it, isolating the failure to the container's
206206
# cross-mount symlink). Copy SKILL.md + sections as real files so the TUI
207207
# reads them directly.
208+
# Source is skills/.compat/<s>/SKILL.md: the GStack 2 alias that routes
209+
# /office-hours and /plan-ceo-review to a $plan invocation. The retired
210+
# 1.x root dirs are gone, and their frontmatter was `gstack-1-<name>`
211+
# anyway, so the TUI never matched the bare slash command from them.
212+
# Aliases carry no sections/ — the judgment lives in the dispatcher.
208213
for s in office-hours plan-ceo-review; do
209214
rm -rf "${SKILLS_DIR:?}/$s"
210215
mkdir -p "$SKILLS_DIR/$s"
211-
cp "$REPO/$s/SKILL.md" "$SKILLS_DIR/$s/SKILL.md"
212-
cp -R "$REPO/$s/sections" "$SKILLS_DIR/$s/sections"
216+
cp "$REPO/skills/.compat/$s/SKILL.md" "$SKILLS_DIR/$s/SKILL.md"
213217
done
214218
# Also register PROJECT-scoped (cwd) skills. claude's interactive TUI
215219
# surfaces /slash commands from <cwd>/.claude/skills, and the smokes run
@@ -223,8 +227,7 @@ jobs:
223227
for s in office-hours plan-ceo-review; do
224228
rm -rf "${PROJ_SKILLS:?}/$s"
225229
mkdir -p "$PROJ_SKILLS/$s"
226-
cp "$REPO/$s/SKILL.md" "$PROJ_SKILLS/$s/SKILL.md"
227-
cp -R "$REPO/$s/sections" "$PROJ_SKILLS/$s/sections"
230+
cp "$REPO/skills/.compat/$s/SKILL.md" "$PROJ_SKILLS/$s/SKILL.md"
228231
done
229232
echo "--- registry under $SKILLS_DIR ---"
230233
ls -la "$SKILLS_DIR/gstack" "$SKILLS_DIR/office-hours" "$SKILLS_DIR/plan-ceo-review"
@@ -234,8 +237,9 @@ jobs:
234237
"$SKILLS_DIR/office-hours/SKILL.md" \
235238
"$SKILLS_DIR/plan-ceo-review/SKILL.md" \
236239
"$SKILLS_DIR/gstack/bin/gstack-update-check" \
237-
"$SKILLS_DIR/gstack/office-hours/sections/doc-and-handoff.md" \
238-
"$SKILLS_DIR/gstack/plan-ceo-review/sections/review-sections.md"; do
240+
"$SKILLS_DIR/gstack/skills/plan/SKILL.md" \
241+
"$SKILLS_DIR/gstack/skills/plan/references/legacy/office-hours.md" \
242+
"$SKILLS_DIR/gstack/skills/plan/references/legacy/plan-ceo-review.md"; do
239243
if [ ! -e "$f" ]; then
240244
echo "ERROR: skill-registry target missing (symlink dangles): $f" >&2
241245
exit 1

.github/workflows/gstack2-gate.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,9 @@ jobs:
5555
- run: bun install --frozen-lockfile
5656
- name: Install Playwright Chromium (locked version, browse integration tests)
5757
run: ./node_modules/.bin/playwright-core install --with-deps chromium
58+
- name: Build compiled binaries (the diagram gate hard-requires make-pdf/dist/pdf in CI)
59+
run: bun run build
60+
- name: Install poppler-utils (the emoji render gate hard-requires pdffonts in CI)
61+
run: sudo apt-get update -qq && sudo apt-get install -y -qq poppler-utils
5862
- name: Run the free suite
5963
run: bun run test

CHANGELOG.md

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,73 @@
11
# Changelog
22

3-
> **GStack 2 draft in progress.** `main` carries the working draft of GStack 2
4-
> — not a released version. Current status is **BLOCKED** pending the remaining
5-
> release gates. See
6-
> [`docs/gstack-2/STATUS.md`](docs/gstack-2/STATUS.md) for the authoritative
7-
> completion state and remaining P0 gates. No GStack 2 release claim is made
8-
> here while that status holds.
3+
## [2.0.0.0] - 2026-08-09
4+
5+
**GStack 2, public beta. Six skills. Everything else had to earn its way in.**
6+
7+
GStack 1 was forty-four skills and a pile of scaffolding that billed your
8+
context window whether you needed it or not. GStack 2 is six things you can
9+
actually name: `/plan`, `/qa`, `/debug`, `/review`, `/ship`, and `/make-pdf`.
10+
Each one is a lazy dispatcher — the catalog your agent reads at discovery is
11+
pinned at least 70% below the 1.x baseline, and the specialist judgment loads
12+
only when a workflow actually reaches it. Install is the standard one-liner:
13+
`npx skills add time-attack/gstack/skills`. No runtime required, nothing
14+
phones home, and your 39 old slash commands still route to their new homes.
15+
16+
### The numbers that matter
17+
18+
Source: the committed install artifact
19+
([install-verify-2026-08-09.json](evals/installation/install-verify-2026-08-09.json)),
20+
the first completed paid gate runs
21+
([TEST-EVIDENCE.md](docs/gstack-2/TEST-EVIDENCE.md)), and the egress re-audit
22+
([EGRESS-AUDIT.md](docs/gstack-2/EGRESS-AUDIT.md)).
23+
24+
| Metric | GStack 1 | GStack 2 beta |
25+
|---|---|---|
26+
| Discoverable skills | 44 | 6 |
27+
| Discovery catalog cost | ~1,100 token-equivalents | pinned ≥70% below that, every suite run |
28+
| Judgment loaded for a trivial ask | the monolith | the dispatcher's fast path only |
29+
| Hosts verified byte-identical | — | 7 (claude-code, codex, cursor, pi, openclaw, github-copilot, kimi) |
30+
| Open egress-audit findings | 8 | 0 — each fix ships with a test that fails without it |
31+
| Paid gate tier terminal summaries, ever | 0 | 3 completed runs, every failure attributed |
32+
33+
### What you can do now
34+
35+
- **Ask for judgment, not a catalog.** Name the task and the right skill
36+
self-routes; the keyword router is gone because the six descriptions do its
37+
job. Old muscle memory (`/office-hours`, `/qa-only`, `/retro`, …) still
38+
resolves through opt-in compatibility aliases that carry zero copied prose.
39+
- **Trust what leaves your machine.** Session tokens never appear raw on any
40+
local endpoint, boot tokens log private, previews fire no image beacons,
41+
memory ingest secret-scans by default at the exact bytes it stages, cloud
42+
eval uploads require explicit opt-in instead of an ambient API key, and an
43+
unattested runtime download refuses instead of silently downgrading.
44+
- **Come back to a project and get context.** Session start recovers your
45+
recent artifacts, last session, and active decisions again — the
46+
welcome-back summary that quietly vanished during the 1.x migration is
47+
restored and gate-tested.
48+
- **Ship the optional runtime later, or never.** The managed
49+
browser/iOS/PDF runtime stays opt-in, fails closed until its signed release
50+
exists, and now discloses its attestation state before asking for consent.
51+
52+
### For contributors
53+
54+
- The paid gate tier is sharded (one file per shard, external group-kill
55+
timeouts) and produced its first terminal summaries in project history;
56+
judge-threshold quality benchmarks moved to the periodic tier where the
57+
tiering policy always said they belonged.
58+
- A per-module ablation instrument ships (`scripts/ablate.ts`): deterministic
59+
scoring against planted ground truth, ablate/solo/set arms, resume, and a
60+
verdict layer that cannot be talked into false deletions. Cuts now cite
61+
measurements, not vibes — three modules and ~43KB of duplicated prose left
62+
the tree this way, each with a named loss-check.
63+
- Hermetic PTY children can opt into registered skills
64+
(`hermeticSkillsConfigDir()`), which un-silenced seven slash-command gates
65+
that had been measuring nothing.
66+
67+
> The optional managed runtime's signed `v2.0.0-rc.6` component release
68+
> publishes with the release tag; until then `setup` fails closed and the
69+
> Markdown-only install above is the supported path. Authoritative status:
70+
> [`docs/gstack-2/STATUS.md`](docs/gstack-2/STATUS.md).
971

1072
## [1.66.0.0] - 2026-08-01
1173

0 commit comments

Comments
 (0)