diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f3efb048..69f4417eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,194 @@ # Changelog +## [1.65.0.0] - 2026-08-14 + +**/autoplan, /codex on macOS, and memory ingest work again.** +**And every consent gate now means what it says.** + +This is the second and final wave of the GStack 2 fork port. Wave one (v1.63.0.0) +took the audit infrastructure; this wave takes the fixes and the features. Three +skills that failed silently on every run now work: /autoplan's task aggregation +emits real tasks instead of zero, /codex creates its temp files on macOS instead +of dying on BSD mktemp, and memory ingest actually imports pages on current +gbrain builds, and prints the count so you can see it. On top of that: your +browser auth can now survive a daemon restart, /ship can take an iOS app from +working tree to Submit for Review, and four supply-chain gates now run on every +PR. Nearly all of it traces back to Sina Matian's time-attack/gstack fork, ported +with tests and attribution. + +### The numbers that matter + +Source: this branch (`git log 1.63.0.0..HEAD`, `git diff main...HEAD --stat`, +`bun test`), plus the GitHub issues the release closes. + +| What | Before | After | +|------|--------|-------| +| /autoplan Phase 4 task output (#2018) | 0 tasks, every run | every task | +| /codex on macOS (#2091) | broken on every install | works | +| Memory ingest on gbrain 0.42+ (#2144) | 0 pages, reported success | full corpus, count printed | +| Headed browse on macOS 26 (#2242) | GPU crash, poisoned cache | launches, heals old caches | +| Auth after a browse daemon restart (#778) | logged out | restored (opt-in) | +| CI secret scanning on PR diffs | none | every PR, fail-closed | +| GitHub issues closed | | 24 | +| Community PRs landed with authorship | | 4 | + +The stark one is the first three rows: those aren't degraded features, they were +features returning empty results with a green checkmark. If you ran /autoplan in +the last two months, the task list it handed off was empty and nothing told you. + +### What this means for gstack users + +Run /autoplan and the pipeline hands real tasks to the executor. Run /codex on a +Mac and it just works. Set `BROWSE_PERSIST_STATE=1` and a daemon restart no +longer logs you out of every site. If you ship an iOS app, `/ship` now knows the +whole App Store journey, session-minted upload keys, the price-schedule API that +replaced the broken fastlane path, error -22938 triage, one authorization moment +instead of five. Upgrade with `/gstack-upgrade`; the migration cleans any +Chromium bundle an older gstack broke and verifies the replacement download +before it claims success. + +### Itemized changes + +#### Added + +- **Opt-in browser session persistence** (#778, #2193): `BROWSE_PERSIST_STATE=1` + snapshots cookies and tabs (atomic writes, 0600, never page HTML or + ownership), restores them off the boot path on the next start, and quarantines + a corrupt snapshot instead of crashing. Portions from time-attack/gstack. +- **Apple App Store release journey for /ship**: `ship/sections/apple-release.md` + loads before the repo-landing gates when the target is an Apple app. Encodes + session-minted App Store Connect keys, `appPriceSchedules` over the broken + fastlane `price_tier`, expanded age-rating attributes, -22938 classification, + and a one-authorization-moment flow. Refined across 21 live releases on the + fork. Portions copyright Sina Matian, MIT. +- **Code-intelligence provider contract, Phase 1**: `gstack-code-intelligence` + wraps GBrain, Sourcebot, and Graphify behind one interface with an ask-once + indexing offer for large repos (1,000+ tracked files, decline persisted). + Consent is explicit per repo (`consent yes|no`), the per-repo trust + policy's deny and read-only tiers veto write-class operations no matter what + consent was recorded, and every off-machine send writes an egress receipt that + records the consent state actually checked. Portions from time-attack/gstack. +- **Supply-chain CI**: a quality gate that runs `bin/gstack-redact` over every + PR diff (HIGH findings fail, MEDIUM annotates), dependency review on + lockfile changes, weekly OSV scans, grouped dependabot updates, and an + evidence-bar PR template. All third-party actions pinned to commit SHAs. +- **Third-party web-actions contract** in tier-2+ skills: when a workflow needs + a vendor-site step (API key signup, OAuth app), gstack offers to drive the + browser itself, hands credentials and CAPTCHAs to you, stores secrets + owner-only, and verifies with a read-only call before claiming success. +- **Design docs land in your repo** (#703, #2000): office-hours writes + `docs/designs/.md` as a concise decision record (one bullet per + decision with its why), redaction-scanned before anything touches your git + history. Plan reviews prefer the repo-local doc when both exist. +- **`gstack-verify-gate`** (opt-in Stop hook): blocks turn-end until the + CLAUDE.md-declared verify command passes. A command runs only after you trust + it once per repo (`--trust`), re-trust is required when it changes, every + grant is audit-logged, and re-entries re-run the check instead of waving it + through. +- **"Never show me these again"** for the founder-resources pitch (#538): the + opt-out verifies its own config write before promising anything. Re-enable + with `gstack-config set founder_resources true`. +- **Claimed limitations need evidence**: every tier-2+ skill now treats "the + API can't do this" as a material claim requiring the verbatim error, the + documented statement, or a live probe, and runs the ten-second check before + declaring anything blocked. + +#### Fixed + +- **/autoplan Phase 4 emitted zero tasks on every run** (#2018): a jq context + rebind dropped every aggregated task; the error was hidden by stderr + suppression. Six-fixture regression suite pins it. +- **/codex was broken on every macOS install** (#2091): BSD mktemp rejects + suffixed templates; all temp files now use portable templates and a static + test bans the pattern repo-wide. +- **Memory ingest imported nothing on gbrain 0.42+** (#2144): the staging dir + sits under a gitignored tree, so git-aware collectors saw zero files. Fixed + with `--include-gitignored` (community PR #2560) plus a `GIT_CEILING_DIRECTORIES` + second layer, Windows-safe, and a loud ingested-page count. +- **Headed mode on macOS 26** (#2242, #2138, #2139): gstack no longer rewrites + the signed Chrome-for-Testing bundle (the rebrand broke its code signature; + GPU processes refused to start). Launch self-heals poisoned caches, on both + headed entry points, by removing the whole revision directory so the re-fetch + actually re-downloads, and the upgrade migration does the same for existing + installs, verifying a working Chromium exists before recording success. + Branding stays on the GStack Browser wrapper app. +- **`browse stop` restarted the daemon it was told to stop**: the CLI now gets + an acknowledgment before shutdown, and the shutdown snapshot has a hard + deadline so a wedged page can never hold the port. +- **Session cookies from internal networks stay out of snapshots**: the hygiene + filter drops loopback and link-local IP literals (127.0.0.1, ::1, 169.254.*) + alongside localhost and *.internal, shared by both the persistence path and + `state load`. +- **ios-qa stopped handing out raw bearer tokens**: `/auth/sessions` returns + salted-hash token ids with revoke-by-id support, the boot token left os_log + entirely, and the IPv4 listener pins to loopback at the socket. +- **make-pdf's no-network promise holds against obfuscation**: `