github gastownhall/gascity v1.1.0

13 days ago

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-dispatcher sessions 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 install after 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-config doctor warning until the
    managed server regenerates dolt-config.yaml; gc dolt restart is the
    explicit refresh path.
  • Custom bead-backed pool scale_check hooks should return only new unassigned
    session demand. Assigned work is resumed separately.
  • The Claude provider's model = "opus" alias now targets claude-opus-4-7.
  • Existing gastownhall/gascity Homebrew 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
    formula extends, and replacement of deprecated gc 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 synthesizing bead.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/, added gc handoff --auto for PreCompact hooks, and kept shipped pack routes binding-qualified.
  • Added shell completion support for sessions, rigs, and orders, plus the gc shell command 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 check
    • make check-docs
    • make build
    • ./bin/gc version --long
    • GORELEASER_CURRENT_TAG=v1.1.0 goreleaser release --snapshot --clean --skip=publish
  • Remote Mac Regression passed:
  • Remote RC Gate completed with one approved v1.1.0 exception:
    • 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.0 because 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

Homebrew

  • The gastownhall/gascity tap 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

Full Changelog: v1.0.0...v1.1.0

Don't miss a new gascity release

NewReleases is sending notifications on new releases.