Highlights
Gas City 1.1 is the first feature release after the 1.0 platform cut.
Compared to v1.0.0, this release carries 455 commits! It is a broad
stability and operator-readiness release: session lifecycle recovery, controller
dispatch performance, managed Dolt hardening, order/formula correctness, worker
provider conformance, release provenance, and Homebrew distribution all received
substantial work.
If v1.0.0 established the Pack V2 city model and runtime architecture,
v1.1.0 is about making that model more resilient under real worker churn,
large city state, cross-store workflows, and release distribution constraints.
Upgrade Notes
- Existing
control-dispatchersessions should be restarted or recycled after
upgrade so they write traces under.gc/runtime/instead of the city root. - Linux operators should rerun
gc supervisor installafter upgrading to pick
up the preserve-on-signal systemd service behavior. If the active supervisor
predates preserve mode, stop or drain intentionally before reinstalling. - Managed Dolt cities may report a
dolt-configdoctor warning until the
managed server regeneratesdolt-config.yaml;gc dolt restartis the
explicit refresh path. - Custom bead-backed pool
scale_checkhooks should return only new unassigned
session demand. Assigned work is resumed separately. - The Claude provider's
model = "opus"alias now targetsclaude-opus-4-7. - Existing
gastownhall/gascityHomebrew tap installs continue to use the
release-asset formula. The Homebrew/core submission uses a separate
source-built formula so core can build from source without breaking existing
tap users.
Session Model and Agent Lifecycle
- Hardened lifecycle reconciliation around stale, partial, and pending session
states: preserved in-progress claims across worker churn, pending pool session
beads, never-started pending creates, pending-create leases, terminal
named-session aliases, and stale async-start results. - Added a named-session respawn circuit breaker and follow-up review fixes so
repeated startup failures stop creating noisy restart loops. - Improved startup ordering, Dolt port retry behavior, session bead adoption,
and runtime artifact cleanup so controller restarts and worker churn converge
more predictably. - Tightened session lookup paths for logs, mail, aliases, and status rendering
with targeted reads and snapshot-backed fast paths. - Added explicit tmux session transport support and continued hardening provider
startup prompts, resume commands, Codex JSON hook context, and Claude/Codex
transcript fallback scoping.
Dispatch, Orders, Formulas, and Workflows
- Reduced controller and dispatcher store scans with cached demand read models,
targeted identifier lookups, read-only control work queries, order-check
caching, and session-snapshot nudges. - Fixed cross-store workflow finalization and source-chain metadata propagation
so successful workflows close the right source beads across reachable stores. - Hardened graph/control routing: graph control beads route by concrete
assignee, workers claim routed graph beads correctly, fanout fragment routes
are validated on resume, and invalid contracts are retried instead of
silently wedging. - Fixed order dispatch correctness around qualified pool names, wildcard
override rig scopes, stale order tracking dispatch recovery, exec-order event
cursors, and startup registration of builtin pack orders. - Improved formula/runtime UX with better runtime variable validation,
root-only formula routing as runnable wisps, phase/pour inheritance across
formulaextends, and replacement of deprecatedgc nudge <target>calls in
shipped packs.
Beads, Mail, and Managed Dolt
- Tightened bead-store behavior with Ready query parameters, stale hook-event
guards, PartialResultError surfacing, stale cache-event filtering, targeted
backing reads before synthesizingbead.closed, and subprocess-tree cleanup
on bd timeouts. - Improved mail routing and archival semantics: session-recipient routing now
uses targeted lookups, identity/recipient enumeration is cached, reply titles
avoid bd validation errors, and batch archive/delete handles already-archived
messages per ID. - Hardened managed Dolt with scheduled GC nudges, doctor checks, health probes
against user databases, stale provider-state recovery, stale database cleanup,
cleanup force blockers, retired database quarantine, and backup sync refusal
for Dolt versions below the managed minimum. - Fixed maintenance scripts to operate on real bd primitives, walk every rig
where required, skip test-pattern databases in reaper/export paths, and avoid
runaway jsonl-export spike detection.
API, Dashboard, Providers, and Operator Surface
- Expanded API support for Maintainer City and hardened agent visibility
recovery, async event result reliability, and workspace-service URL prefix
propagation. - Improved provider defaults and readiness behavior across Claude, Codex,
OpenCode, Gemini, Cursor, and Copilot. OpenCode ACP startup and OpenCode with
Gemini worker conformance both received direct coverage. - Moved control-dispatcher traces under
.gc/runtime/, addedgc handoff --autofor PreCompact hooks, and kept shipped pack routes binding-qualified. - Added shell completion support for sessions, rigs, and orders, plus the
gc shellcommand for tab-completion integration. - Tightened controller shell trust boundaries, spawned-agent PATH handling, and
provider env persistence across supervisor operations.
Quality, Security, CI, and Release Hardening
- Aligned the RC gate with regular CI, added RC-only GoReleaser snapshot
coverage, throttled real inference jobs, and sharded RC tests to keep release
validation operational. - Added Homebrew tap smoke regression coverage and prepared a
Homebrew/core-compatible source-built formula for the 1.1 release. - Hardened release provenance and publishing: reduced workflow token
permissions, pinned build/CI dependencies, added advanced CodeQL, OpenSSF
Scorecard, container image scanning, Dockerfile/config scanning, SBOM upload,
and release artifact attestations. - Reduced local and CI runtime through cmd/gc test runtime improvements,
deterministic generated CLI checks, stale local test coverage, and more
focused managed-Dolt/controller cleanup in tests. - Stabilized macOS and RC-specific flakes, including canonicalized maintenance
script paths on macOS, database filtering, fresh-init worker evidence, and
main CI smoke behavior.
Validation
- Local RC passed on
release/v1.1.0.make checkmake check-docsmake build./bin/gc version --longGORELEASER_CURRENT_TAG=v1.1.0 goreleaser release --snapshot --clean --skip=publish
- Remote Mac Regression passed:
- Remote RC Gate completed with one approved
v1.1.0exception:- https://github.com/gastownhall/gascity/actions/runs/25456433340
- Failed job:
ubuntu / acceptance C / 1 of 5 - Failed test:
TestFreshInit_SlingSpawnsDefaultPoolWorker - Release decision: Acceptance C is a non-blocker for
v1.1.0because the
concurrent request limit issue is already solved, and this release uses a
local Claude OAuth substitution for that shard.
- Local OAuth substitution passed for the exact GitHub-failing Acceptance C
test:- Command:
GO_TEST_TAGS=acceptance_c GO_TEST_TIMEOUT=12m GO_TEST_COUNT=1 ./scripts/test-go-test-shard ./test/acceptance/tier_c 1 999 - Selected test:
TestFreshInit_SlingSpawnsDefaultPoolWorker - Result:
ok github.com/gastownhall/gascity/test/acceptance/tier_c 172.073s - Evidence artifact:
.gc/releases/v1.1.0/oauth-substitution.md
- Command:
Homebrew
- The
gastownhall/gascitytap remains asset-based for existing users and is
updated automatically by the tag-triggered release workflow after GoReleaser
uploads the release archives. - Homebrew/core submission uses a separate source-built formula prepared in
/data/projects/homebrew-core-gascity-v1.1. After the tag exists, the source
tarball checksum is updated and the core PR can be opened.
Contributors
For v1.1.0, we are crediting contributors between v1.0.0 and the release
candidate cut, based on GitHub's generated release notes plus the local release
branch history.
Release contributors:
@A3Ackerman, @boylec, @bromanko, @csells, @cwalv, @danzko, @dstengle,
@eric-jones, @hexsprite, @jbongaarts, @julianknutsen, @kab0rn, @lambdabaa,
@m1ddl3w4r3, @myster-t, @osamu2001, @pae23, @plavering, @quad341, @rakish,
@sjarmak, @tesdal, @thejosephstevens, @vbtcl, @wierdbytes, @wynged
First-time contributors:
@rakish, @m1ddl3w4r3, @tesdal, @dstengle, @bromanko, @pae23, @hexsprite
Recommended Reading
- Installation guide
- Cities and rigs tutorial
- Sessions tutorial
- Communication tutorial
- Formulas tutorial
- CLI reference
- Config reference
- API control-plane architecture
- Reconciler debugging guide
Full Changelog: v1.0.0...v1.1.0