Gas City v1.4.0
Highlights
- A run-centered dashboard and API. Run detail now unifies the formula
stage ladder, structured transcripts, live token rate, and estimated burn
rate. Session and run reads move to typed, paginated API surfaces backed by
warm projections instead of ad hoc wire shapes. - Session lifecycle converges through the worker boundary. Pool demand,
wake, resume, drain, close, and orphan recovery all reason from persisted
session/work identity rather than provider-specific shortcuts. - Formulas v2 production controls. Stronger retry, fan-out, drain, scope,
artifact, and finalization behavior, with better live status and event
evidence for operators. - More resilient storage, same beads boundary. Native and CLI-backed
stores share transactional lifecycle semantics, bounded cached reads,
store-aware routing, and explicit degraded results across city and rig scopes. - Broader runtime composition. Provider routing, ACP/automatic runtime
selection, Herdr-backed sessions, and Kubernetes/subprocess/tmux execution
share one session lifecycle and worker boundary.
Upgrading Notes
- Configure one store-scoped
control-dispatcherfor every graph-owning
scope. Formula control beads now route to the dispatcher whoseDir
matches the city or rig store that owns the graph. A rig-owned graph with no
matching dispatcher fails before instantiation instead of falling back to a
dispatcher that cannot read its work. - Run
gc doctor --fixafter upgrading an existing city. The current
doctor converges pack imports, provider catalogs, project identity, retired
hold labels, and managed beads/Dolt metadata before the orchestrator starts. - Upgrading over an older install at a different path may need a manual
reseed. If a machine already ran an oldergc(for example a Homebrew
binary now replaced by a source build at a new path),gc startcan keep the
stale supervisor running and can fail closed on a present-but-invalid
bundled-pack cache — only an absent cache self-heals. Rungc import installto repopulate the cache, then letgc startauto-restart the
supervisor (or on Linuxsystemctl --user restart gascity-supervisor). - An unrelated stale registered city can block
gc start; fix or unregister
that city — not the one you are starting. A pre-1.3 city still registered
with un-migrated provider config (for exampleworkspace.provider = "claude"
with no[providers.claude]block) can fail the registry scan and abort
startup, with a misleading hint togc initthe healthy city you were
actually starting. Rungc doctor --fixinside the offending stale city, or
gc unregister <stale-city>to drop it. - macOS: a supervisor left running from a prior version may need a manual
restart. macOS cannot resolve a direct (non-launchd) supervisor's
executable for binary-drift detection, so the automatic post-upgrade restart
may not complete. Rungc supervisor stop --wait, thengc start.
Added
- A run-centered dashboard and API. Run detail now combines the formula
stage ladder, structured transcripts, token rate, and estimated burn rate.
Session and run reads use typed, paginated API surfaces backed by warm
projections instead of ad hoc wire shapes. - Durable usage and lifecycle observability. Model, compute, and lifecycle
facts feed local usage history and OpenTelemetry metrics. End-of-interval
transcript sweeps keep live pool sessions' token and cost rates current even
when agents self-drive after their initial claim. - Privacy-scoped command-usage metrics in release artifacts. Before the
first eligible interactive command is recorded,gcshows the complete
disclosure. Events contain only a canonical command ID, thegcrelease,
operating system, and an anonymous installation ID—never arguments, paths,
file contents, or environment values.gc metrics status,example,on,
andoffexpose the local controls;DO_NOT_TRACK=1and
GC_DISABLE_USAGE_METRICS=1provide environment-level opt-outs. - Broader runtime composition. Provider routing, ACP/automatic runtime
selection, Herdr-backed sessions, and Kubernetes/subprocess/tmux execution
share the same session lifecycle and worker boundary. - Production workflow controls. Formulas v2 gained stronger retry,
fan-out, drain, scope, artifact, and finalization behavior, plus better live
status and event evidence for operators. - An experimental OpenClaw bridge proof of concept. The private package
undercontrib/openclaw-bridgeexplores iMessage and Telegram connectors; it
is not a supported provider pack or a shipped connector artifact.
Changed
- Session lifecycle operations converge through the worker boundary. Pool
demand, wake, resume, drain, close, and orphan recovery now reason from
persisted session/work identity rather than provider-specific shortcuts. - Beads remains the persistence boundary while storage becomes more
resilient. Native and CLI-backed stores share transactional lifecycle
semantics, bounded cached reads, store-aware routing, and explicit degraded
results across city and rig scopes. - CI and local verification are sharded and event-driven. The release gate
includes fast units, process tests, integration packages, tutorials, real
inference acceptance, and macOS regressions without one monolithic test
process.
Fixed
- Pool sessions no longer lose or strand work while draining, restarting, or
reusing capacity. Claim ownership, wake budgets, slot selection, and
confirmed-dead cleanup are now fenced against stale or partial observations. - Formula control routing retries transient configuration reads. Attempt
spawn and fan-out no longer quarantine an in-flight run because of a
momentary config/include read failure; a successfully loaded configuration
that lacks the required scoped dispatcher still fails closed. - Managed beads and Dolt paths fail more honestly. Provider health,
endpoint ownership, lock release, compaction, reindexing, stale data-dir
cleanup, and partial-store reads now preserve errors instead of silently
reporting complete state. - Events, nudges, waits, and session output remain bounded under load. The
CLI drains paginated event windows, request paths avoid unbounded scans, tmux
sessions keep their shared server, and structured transcripts preserve tool
and error frames. - Live run cost fields populate for long-lived pool sessions.
End-of-interval model-usage sweeps account for each transcript window once,
restoringtokens/minandburn/hrin run detail (PR #4436). - Dashboard and claim regressions are closed. Cross-city
attention reads now cancel stale requests and recover after startup; Health
reports per-metric availability with cross-platform sampling instead of
false zero/NaN values; and hook claims no longer fuzzy-update a vanished
session record (#4354, #4356, #4361). - Release-candidate gates are portable and reproducible. Bash 3 scripts,
deep metrics fixtures, reusable pool slots, Tier C pack compatibility, and
container-tool vulnerability checks now exercise the same bounded behavior
expected from the shipped artifacts.
Troubleshooting (upgrading an existing city)
Most 1.3→1.4 upgrades are clean. The known papercuts all come from existing
machine state left by an older install, and each has a one-command workaround.
Run this first, once per existing city:
gc doctor --fix
It converges pack imports, provider catalogs, project identity, retired hold
labels, and managed beads/Dolt metadata before the orchestrator starts.
| Symptom | Cause | Fix |
|---|---|---|
gc start keeps running an old binary, or fails with synthetic cache is invalid … missing bundled pack cache marker |
Older gc/supervisor at a different path; a present-but-invalid bundled-pack cache does not self-heal |
gc import install to reseed, then let gc start auto-restart the supervisor (Linux: systemctl --user restart gascity-supervisor) |
gc start <city> aborts over an unrelated city, hinting you to gc init the healthy one |
A stale pre-1.3 registered city has un-migrated provider config | gc doctor --fix in the offending stale city, or gc unregister <stale-city> |
| macOS: supervisor binary-drift auto-restart never completes | macOS can't resolve a direct (non-launchd) supervisor's executable | gc supervisor stop --wait, then gc start |
Validation
- The release was cut from
release/v1.4.0at the exact commit that passed the
full RC gate green (fast units, process tests, integration packages,
tutorials, real-inference acceptance A/B/C, and macOS regressions). - Downloadable
v1.4.0-rc1prerelease artifacts were built and verified
(checksums, per-platform binaries, injected version) before promotion. - The tracked issue set was reviewed for blocking regressions before
promotion; no 1.3→1.4 regressions were found, and the upgrade path is clean
with the caveats documented above.
Homebrew
- The
gastownhall/gascitytap remains asset-based for existing users. - Homebrew/core submission uses a separate source-built formula.
- Install from the tap with
brew install gastownhall/gascity/gascity.
Contributors
Thanks to everyone who contributed to v1.4.0 (between v1.3.5 and v1.4.0):
@A3Ackerman, @AJBcoding, @atbrace, @azanar, @boshu2, @bourgois, @brandonmartin,
@csauer02-personal-user, @csells, @cstar, @donbox, @duncan4123, @elmpp,
@esciara, @FCFColin, @iwata-1116, @jacobhausler, @JarrodJ83, @jeffora,
@johnzook, @jonathanpberger, @julianknutsen, @keithballinger, @luis-mendes-dev,
@lvanderbijl-kry, @McKean, @n43-scott, @nonathaj, @outdoorsea, @quad341,
@realies, @reggieperry, @remuscazacu, @rjgeng, @Rome-1, @sarendipitee,
@sjarmak, @smurfix, @superlzyguy, @swedeinasia-flow, @ThePlenkov, @Thirsty2,
@tudorsaitoc, @vbtcl, @wbern, @Wldc4rd
New Contributors
- @remuscazacu made their first contribution in #3503
- @ThePlenkov made their first contribution in #3573
- @superlzyguy made their first contribution in #3655
- @FCFColin made their first contribution in #3672
- @n43-scott made their first contribution in #3709
- @AJBcoding made their first contribution in #3685
- @luis-mendes-dev made their first contribution in #3738
- @keithballinger made their first contribution in #4094
- @smurfix made their first contribution in #4076
- @nonathaj made their first contribution in #4134
- @Thirsty2 made their first contribution in #4174
- @atbrace made their first contribution in #4321
- @JarrodJ83 made their first contribution in #4315
Recommended Reading
- Installation guide
- Troubleshooting guide
- How Gas City works
- Understanding packs
- CLI reference
- Config reference
Full Changelog: v1.3.5...v1.4.0