Release notes
The current release is v1.9.2.
Every heading below is a version of the root module
(github.com/jcsvwinston/orbit) — the one an application mounts for the
in-process panel.
The fleet modules (agent, server, proto) release independently with their
own tags, so each entry also lists the fleet tags cut alongside it. The
complete tag history lives on the
GitHub releases page.
v1.9.2 — 2026-09-05
An alignment release with no product change: every module now requires
Nucleus v1.24.0 and Quark v1.11.0, the versions Quantum 1.28.0 certifies,
and quarkdatasource pins the root at v1.9.1. Nothing in the binaries or
the panel behaves differently from v1.9.1.
Fleet tags cut alongside: agent/v0.6.16, server/v0.11.2,
quarkbridge/v1.8.20, quarkdatasource/v1.8.21.
v1.9.1 — 2026-09-05
The patch that pays Orbit's share of the maturity audit of 2026-09-03 (arc A1), in two halves: the fleet and the in-process panel.
Fleet. A server operator now holds at most MaxStreamsPerOperator
(8) live streams; the ninth answers ResourceExhausted instead of adding a
goroutine per browser tab. include_recent replays at most
MaxReplayEvents (500) events, and the aggregate push to agents is
coalesced within 100 ms, so a burst of subscriptions costs one push, not
one per subscription. The live bus and the replay buffer share one node
matcher, trimmed and case-insensitive: they used to differ (exact versus
folded), so a filter could match live events and miss the replay of the
same node. quarkdatasource treats the search text as data, not as a
pattern: % and _ are escaped with the engine's default escape on
PostgreSQL, MySQL, MariaDB and SQL Server (SQLite and Oracle have none, so
there a % still widens the match). On the agent, reconnects_total
counts accepted streams after the first (it used to count every attempt,
the first connection included), cpu_percent is divided by NumCPU so it
reads 0–100 on every host, RSS outside Linux is documented as not reported
rather than reported as zero, and commands run under a 16-slot semaphore
instead of one goroutine per request.
Panel. Record ids are strings end to end, as the datasource contract
always said: bulk
operations, the CSV export, fixtures and the SPA carry the id the backend
handed out, so a UUID key works in Get, Update and Delete and an id the
backend cannot narrow is a per-id failure, not a 500. The tenant is
enforced on every Data Studio operation, not only on the list view: the
panel resolves it from the request (PanelConfig.TenantResolver, wired to
Nucleus) and Get, Update, Delete, bulk, fixtures, imports and export jobs
are confined to it; a payload may name the tenant column only as its own
tenant, under any spelling the backends accept (column, Go field name or
the JSON key of a Nucleus model), and a request that resolves no tenant
is refused with 403. ?tenant=<id> and ?tenant=all are accepted only
from a superuser or a subject granted tenant_switch, and audited. A search against a model that
declares no searchable field answers 400 naming the model and how to
enable search, instead of 200 with every row (Quark models search every
string column; a Nucleus model needs the admin:"search" tag). Every
mutating route writes its own audit entry with the values before and after
where there is a record — Data Studio, RBAC policies and roles, flags,
job queues, migrations, cache flush, exports and imports, live excludes,
audit.clear and login (success, failure, lockout) — replacing the path
heuristic that only saw writes with a model name in the URL. The admin
lookup on every authenticated request is one query bounded by the user's
name or e-mail on every engine, not a scan of the whole table. The SPA
loads its seven feature pages on demand
(React.lazy behind one Suspense boundary that keeps the sidebar while
a chunk loads) and strips the AG Grid theme variant nobody imports at
build time, so the first load of the panel drops from about 1.7 MB of
JavaScript and 252 kB of CSS to about 310 kB and 29 kB (100 kB and 6 kB
gzipped);
the grid stylesheet travels with the Data Studio chunk. Moving to AG
Grid's Theming API, which would remove the grid CSS altogether, waits for
the major bump reserved for arc A6.
Everywhere. The Content-Security-Policy names the request host in
connect-src for ws:/wss: instead of allowing any origin. Commit
messages and pull-request titles are in English, and CI rejects a title
that is not.
Fleet tags cut alongside: agent/v0.6.15, server/v0.11.1,
quarkdatasource/v1.8.20.
v1.9.0 — 2026-09-05
A minor because the shape of the server module changes for whoever
installs it: server no longer requires agent. The only code that
imported it were four integration tests that start a real agent against the
server; they now live in internal/fleettest, a test-only module that Go's
internal rule keeps unimportable outside this repository and that is never
published. Nothing in the admin-server binary changes.
Why it matters: the fleet modules are tagged from one commit, so each was cut
still requiring the previous tag of its sibling, and converging the pins
cost two extra releases per train (five of the eight orbit releases of
2026-09-04/05 published no product change). With this release a change in
agent or server costs one release; a change in proto, the protocol
contract every fleet module pins, costs two and the release train converges
the second on its own.
Also in this release: proto's Go dependencies move by hand together with
the regenerated stubs (Dependabot leaves them alone), and Dependabot bumps
in the published modules are released with their module's tag in the same
train, so the certified set never carries module code without a tag.
Fleet tags cut alongside: server/v0.11.0.
v1.8.25 — 2026-09-05
Releases quarkdatasource with the root pin Dependabot moved on
2026-09-04 (its tag did not cover the bump) and brings that pin to the
current root. Nothing else changes.
Fleet tags cut alongside: quarkdatasource/v1.8.19.
v1.8.24 — 2026-09-05
Convergence cut for the internal module pins after v1.8.22: the modules are tagged from the same commit as the ones they depend on, so each is cut still requiring the previous tag of its sibling. This release moves those pins forward. Nothing else changes.
Fleet tags cut alongside: server/v0.10.17.
v1.8.23 — 2026-09-05
Convergence cut for the internal module pins after v1.8.22: the modules are tagged from the same commit as the ones they depend on, so each is cut still requiring the previous tag of its sibling. This release moves those pins forward. Nothing else changes.
Fleet tags cut alongside: agent/v0.6.14, server/v0.10.16.
v1.8.22 — 2026-09-05
Releases the dependency bumps that Dependabot merged into proto, agent
and server on 2026-09-04 (connect-go 1.20, modernc SQLite 1.58 and
friends) — the suite's manifest guard refuses to certify a root whose
module directories carry code their tags do not — and moves every module to
Nucleus v1.23.2.
One behaviour fix rode along: with only database handles configured (no
database metadata), the panel derived the app's default alias from Go's map
iteration order, so it could change on every process start; it is now
default when present, otherwise the smallest alias.
Fleet tags cut alongside: proto/v0.4.4, agent/v0.6.13,
server/v0.10.15, quarkbridge/v1.8.19.
v1.8.21 — 2026-09-04
Data Studio's model listing no longer fails when the app serves more than one database alias and a data source is bound to just one of them. The listing probes every alias to say where each model lives; since v1.8.18 the Quark adapter refuses aliases it does not serve instead of answering from the wrong database, and the panel turned that refusal into a 500. It is now what it means — the model is absent on that alias — while an error on the model's own alias still surfaces. Caught by the reference consumer (quantum-app) the day v1.8.18 shipped.
v1.8.20 — 2026-09-04
The second and last convergence cut after v1.8.18: server now requires
agent/v0.6.12, the tag cut alongside v1.8.19. With this the internal pins
of every module point at the latest published sibling and the set can be
certified. Nothing else changes.
Fleet tags cut alongside: server/v0.10.14.
v1.8.19 — 2026-09-04
A pin fix, the structural kind: agent and server are cut from the same
commit as proto, so at the moment they are tagged they still require the
previous proto; likewise server for agent. This release moves
agent to proto/v0.4.3 and server to proto/v0.4.3 and agent/v0.6.11,
so go install .../admin-server builds with the fleet code released in
v1.8.18 (TLS on the listeners, https-capable agent). Nothing else changes.
Fleet tags cut alongside: agent/v0.6.12, server/v0.10.13.
v1.8.18 — 2026-09-04
The maturity audit of 2026-09-03, applied. Every module moves to Nucleus v1.23.1 and Quark v1.10.1, so the tags cut here certify against the same set as the umbrella.
Fleet tags cut alongside: proto/v0.4.3, agent/v0.6.11, server/v0.10.12,
quarkbridge/v1.8.18, quarkdatasource/v1.8.18.
Fleet: TLS is real now. --agent-cert/--agent-key and --ui-cert/--ui-key
used to be accepted and then ignored — the listeners always served plain
h2c, and configuring a certificate even counted as authentication. The
listeners now wrap TLS with ALPN, --agent-client-ca enables client
certificate verification (identity agent:<CN>), and the agent speaks
https:// endpoints. The docs no longer promise mTLS where none existed.
Panel: no secrets in the system snapshot. Environment values whose name
suggests a URL, DSN, password or credential are masked, and user:pass@ is
redacted inside any URL-shaped value.
Data Studio validates. Writes run the model's validate tags and answer
422 per field; a value of the wrong type is rejected instead of being
coerced; unknown keys are refused; a non-numeric id answers 400, not 500.
Export paginates until the end and respects tenant and database alias;
export downloads are confined to the export area; imports are size-limited
and file names sanitised.
Admin UI. Import now runs validate and execute instead of showing success
after the upload; "Load more" appends; batch sizes stop at the API's limit;
JSON fields are shown and edited as JSON; deny policies are labelled;
toasts close; audit filters and pagination work; server-side sorting; a
403 shows a permission page. ESLint and Vitest run in CI.
Housekeeping. examples/minimal imports the SQLite driver module and CI
boots it; go mod tidy is a no-op in every module and CI checks it;
reconnecting agents cancel the previous stream; Connect messages are capped
at 4 MiB; /api/health reports the real version and uptime; and the
direction is settled: the fleet plane will consume the same datasource
contract as the in-process panel, so per-model permissions and tenant
filtering apply in both.
v1.8.17 — 2026-09-02
The Quark bridges move to Quark v1.10.0, closing the set. Nothing else changes.
Fleet tags cut alongside: quarkbridge/v1.8.17, quarkdatasource/v1.8.17.
Both bridges jump from the 0.x line to 1.8.17. A Release-As in the
release train applied to every package in the repository, and by the time it
was noticed the tags were published and served by the Go module proxy, which
is immutable — and @latest always resolves to the highest version, so going
back to 0.x would have left a public go get returning something this set
does not certify. The number stands; from here both modules follow the 1.x
line. Nothing about their code or their API changed in this release.
v1.8.16 — 2026-09-02
A pin fix. server was requiring agent v0.6.9 while agent/v0.6.10 was
already published — the alignment script runs before the tags are cut, so it
fixes the sibling at whatever was current then and the cut publishes the next
one immediately after.
It matters here in a way the same lag would not elsewhere: go install github.com/jcsvwinston/orbit/server/cmd/admin-server@server/vX resolves the
agent that server requires, and nothing else in that build raises it, so the
binary would ship the older agent.
Fleet tags cut alongside: server/v0.10.11. Everything else is unchanged from
v1.8.15.
v1.8.15 — 2026-09-02
An alignment release: Orbit moves to Nucleus v1.23.0 and Quark v1.9.0, which take the database drivers, the cloud storage backends and the telemetry exporters out of the framework and into modules of their own.
Nothing in Orbit changes. The panel does not open databases — it uses the
*sql.DB your application hands it — so all six modules build against the new
versions untouched.
What your application needs to know. The host application now links the driver for its own engine, one blank import:
import _ "github.com/jcsvwinston/nucleus/drivers/postgres"
or nucleus add postgres, which writes it for you. Your configuration does
not change. If you mount Orbit in an application that has not added its driver
module, the application stops at startup with an error naming the import —
before Orbit is reached.
Worth knowing if you rely on the admin bootstrap: the driver module registers the driver and how that driver reports a unique-constraint violation. Without the classifier the framework's predicate does not fail, it answers "no", and a duplicate administrator username would surface as an internal error rather than as the duplicate it is. Importing the module — rather than the driver package on its own — gets both halves.
Fleet tags cut alongside: agent/v0.6.10, server/v0.10.10,
quarkbridge/v0.4.10, quarkdatasource/v0.2.19. proto stays at v0.4.2.
v1.8.14 — 2026-08-31
The release that carries an end-to-end audit of the panel. Most of it is about the panel telling you the truth: about your data, about itself, and about what the fleet plane does and does not enforce.
The panel is Orbit. It signed itself "Nucleus Admin" everywhere and ignored
the Title you configured; both are fixed, and the docs now show what the
panel actually looks like — the first screenshots this documentation has ever
had, of Data Studio, the live inspector and the metrics view.
Data Studio over Quark shows your data. Every cell rendered as "—" because the schema declared snake_case columns while the records arrived keyed by Go field names; records now expose each field under its schema column. Model counts were also crossed between models — a sort reordered the slice the counters pointed into — and rows deleted with soft-delete no longer inflate them.
The live inspector shows the traffic it promised. It only accepted one event shape, so requests never appeared and the SQL statements Quark publishes were never drawn at all; both are rendered now, correlated by request, with durations in microseconds instead of a rounded zero.
Fixed. A data race in the panel's tenant-field cache, reachable from every
schema fetch. The session viewer served the full session token to any
authenticated operator; it now shows an opaque handle. The audit log's JSON
contract (id, total_pages, record_id) is coherent. Field labels no longer
render as "I D".
Getting in is possible without a bootstrap password. The admin schema is
created whenever the module mounts, so nucleus createuser works instead of
failing on a table that did not exist yet — and the quick start no longer ends
on an empty panel: the minimal example registers a model, and the docs explain
how a model reaches Data Studio.
Said plainly, not fixed. The fleet plane's Data Studio does not apply per-model RBAC or tenant filtering; its package documentation claimed it did. The claim is gone, a deny-by-default gate for mutations is in place, and the direction that closes it properly is written down as a decision record.
v1.8.13 — 2026-08-30
Changed
- The root module aligned on Nucleus v1.21.0. The in-process panel now builds against the certified framework release, completing the set alignment the module releases began.
v1.8.12 — 2026-08-30
Changed
- Fleet and datasource modules aligned on the current set.
agent,server,quarkbridgeandquarkdatasourcenow require Nucleus v1.21.0 and Quark v1.7.1, up from the previous set. The root module carries no code change; this release exists to seal the aligned module tags as ancestors of a certifiable root, which is what lets the suite certify with no declared cross-repo lag.
v1.8.11 — 2026-08-30
Fixed
- The storage browser confines the caller's path to the upload root. With
a storage backend configured — the production path — the panel's file
browser passed the requested path straight to the store, so a session with
storage_viewcould list any prefix of the bucket, traversal (../) and sibling prefixes included. The path is now confined the same way the filesystem branch already was; a path outside the root is refused. The guard function that promised this had existed all along but nothing called it.
Changed
quarkdatasourcepins the current root minor (v1.8.10, not v1.8.0). The edge fromquarkdatasourceto the root is topologically forced to lag, and the pin guard tolerates one minor of it — but the pin had drifted ten patches back within the same minor, one root minor bump away from failing a certification mid-flight. Raised to the current minor to keep the edge current.
Documentation
- Two archived documentation snapshots (v1.7.0 and v1.8.0) announced an earlier version than their own, and still did so on the published site. Both were corrected, and a guard — ported from the framework, which Orbit lacked — now asserts every snapshot announces its own version.
v1.8.10 — 2026-08-30
Changed
-
Every module aligned on Nucleus v1.20.1. Nothing in Orbit changes. Until this release the root module tracked the framework while
agent,serverandquarkbridgewere still pinned three releases back, at v1.17.1. That is invisible to an application — Go's minimal version selection raises the requirement to whatever the application itself asks for — but it is exactly what the suite manifest refuses to certify, and for a reason: a module pinned to a framework release nobody tests it against is a compatibility claim nobody has checked.Cut alongside it:
agentv0.6.7,serverv0.10.7 andquarkbridgev0.4.7, in that order, so each module tag is an ancestor of this one.
v1.8.9 — 2026-08-30
Changed
-
Aligned with Nucleus v1.20.0. Nothing in Orbit changes; these are fixes in the framework it requires, and three of them are behaviour changes worth knowing about before you upgrade.
A third-party request interceptor now sees who is calling. The chain was mounted outside the bearer decode, so an interceptor got nothing from the request's claims while the handler behind it saw the same request authenticated. It now runs after the decode and still before the default-deny layer, so it also observes requests that are about to be denied. Nothing moved relative to the request ID, the real-IP resolution, the rate limiter or CSRF.
X-Real-IPis now filtered the wayX-Forwarded-Foralready was: an address that is itself a trusted proxy is not a client. Under a catch-alltrusted_proxiesthe unfiltered fallback was a spoofing vector — a forged client IP, rate-limit evasion and an audit trail recording the attacker's choice. A correctly configured deployment sees no change.nucleus doctor --jsonnow exits non-zero when the report saysunhealthy. The verdict came from the text renderer only, so the same report exited 1 as text and 0 as JSON — and the mode that never failed was the one CI consumes.
v1.8.8 — 2026-08-30
Fixed
-
Every
modules.orbit.*key except three now reaches the panel. Orbit'sConfigdeclared onlyyamlstruct tags, and Nucleus binds a module's configuration subtree with thekoanftag. Sixteen of its nineteen keys were dropped in silence — includingbootstrap_username,bootstrap_password,auth_databaseand the whole multi-tenant block. Exactly the single-word keys survived (prefix,title,environment), because the binder falls back to matching the field name when it finds no tag, and nothing insnake_casecan map that way.Nothing warned about this. The panel started, mounted where it was told, and used the values the host application had passed in code, so an operator configuring the panel from
nucleus.ymlsaw a working admin that was quietly ignoring most of the file. -
A duplicate bootstrap admin no longer aborts startup on a database that does not speak English. Orbit decides whether the first admin already exists by classifying the error the driver returns, and it was matching English fragments of the message. PostgreSQL, MySQL, Oracle and SQL Server all translate those messages when the server runs in another language, so the duplicate went unrecognised and the module failed to start — taking the whole application with it.
To be precise about when this bites: a normal restart never reached it, because the row count short-circuits before the insert. It fires on a first boot with several replicas starting at once against an empty admin table. One wins; the others used to crash-loop.
Changed
-
Aligned with Nucleus v1.19.0. Three of its fixes land directly in what the panel does.
The active-sessions view works again on a configured session store. Nucleus wrapped every store installed from configuration in an adapter that carried only three methods, and enumeration is discovered by type assertion — so with
session_store: redisorsqlthe view answered 200 with "not supported" and zero rows while sessions were sitting in the store.A backend that rejects now ends the login attempt instead of falling through to the next one. This is what Orbit's own README has always promised when it says a local admin row is not a bypass: a revoked directory account can no longer get in through a stale local row. Note the consequence, because it is not optional — a chain is a fallback for an unreachable backend, not a way to serve two separate user populations.
And
storage.cleanup.enabled: falsenow actually disables the cleaner, which until this release deleted aged objects under the cleanup prefix on every boot.
v1.8.7 — 2026-08-29
Changed
-
Aligned with Nucleus v1.17.1 and Quark v1.7.0. Nothing in Orbit changes; both are fixes in the products it requires.
Quark now recognises PostgreSQL errors reported by
lib/pq, not only bypgx. It classifies those errors to decide three things on its own — whether to retry a transaction the engine chose as a deadlock victim, whether a duplicate link row can be ignored, and whether a read should fail over off an unreachable replica — and underlib/pqnone of the three recognised anything, silently. Quark also exports that classification now, so an application can tell a duplicate key from any other failure without importing a database driver, and it no longer reports a scan error in place of the engine's own error when SQL Server rejects an insert.Nucleus v1.17.1 corrects its published documentation: archived versions announced the wrong release number, and the version marker was leaking into the page description shown in search results and link previews.
The
agent(v0.6.6),server(v0.10.6),quarkbridge(v0.4.6) andquarkdatasource(v0.2.15) modules move with it, andserverpins the freshly cutagent.
v1.8.6 — 2026-08-29
Changed
- Aligned with Nucleus v1.17.0, which adds two extension seams —
federated sign-in for identity providers, and request interceptors that
register by name — and fixes a defect where installing a process-wide
SQL observer replaced any other. That last one matters here: Orbit's
live SQL view is fed by the framework's own observer, so an application
that watched SQL used to turn the panel's feed off by doing it. Nothing
in Orbit changes; the fix is in the framework it now requires. The
agent(v0.6.5),server(v0.10.5) andquarkbridge(v0.4.5) modules move with it, andserverpins the freshly cutagent.
v1.8.5 — 2026-08-29
Changed
- Aligned with Nucleus v1.16.1, a packaging release of the framework: it
is the first one that cuts the LDAP provider module and the framework
release that contains it from the same commit, so installing either one
resolves to the same tree. Nothing about Orbit's behaviour changes with it.
The
agent(v0.6.4),server(v0.10.4) andquarkbridge(v0.4.4) modules move with it, andserverpins the freshly cutagent.
v1.8.4 — 2026-08-29
Changed
- Aligned with Nucleus v1.16.0, which moves the contracts a third-party
backend or storage provider implements into leaf packages and adds a
conformance suite for authentication backends. Nothing about Orbit's
behaviour changes with it: the names Orbit uses are aliases of the same
types. The
agent(v0.6.3),server(v0.10.3) andquarkbridge(v0.4.3) modules move with it, andserverpins the freshly cutagent.
v1.8.3 — 2026-08-28
Changed
- Aligned with Nucleus v1.15.1. A packaging release of the framework —
it unblocked the LDAP provider's own release machinery — so nothing about
Orbit's behaviour changes with it. The
agent(v0.6.2),server(v0.10.2) andquarkbridge(v0.4.2) modules move with it, andserverpins the freshly cutagent.
v1.8.2 — 2026-08-28
Changed
- Aligned with Nucleus v1.15.0. The root module and the
agent,serverandquarkbridgemodules now require the framework release that introduces per-backend authentication configuration and the LDAP provider. No behaviour of Orbit changes with it: the panel already delegates authentication to the framework's chain, and the boundary that matters is unchanged — a directory user who is not an administrator here is still refused, so connecting a corporate directory does not silently turn the whole company into panel administrators. - The
agent(v0.6.1),server(v0.10.1) andquarkbridge(v0.4.1) modules move with it.serveralso pins the freshly cutagent, so installing either one standalone resolves to the same set.
v1.8.1 — 2026-08-27
Fixed
-
orbit/quarkdatasourcenow installs against the current root module. The optional Quark datasource module still required the root atv1.6.0, two minor lines behind. Inside the repository nothing noticed — the workspace resolves the root from the checkout — but anyone addinggithub.com/jcsvwinston/orbit/quarkdatasourceto a project pulled a root two minors old alongside it. It now requiresv1.8.0. The datasource contract itself did not move (it has been frozen since v1.0), so nothing you wrote against it changes.Fleet tags cut alongside:
quarkdatasource/v0.2.14.
v1.8.0 — 2026-08-26
Added
-
Sign in against your directory. If the host application declares an authentication chain, the admin panel uses it:
auth_backends: [ldap, local]Orbit ships no LDAP client. It asks the framework's chain, so whatever the operator configured for the application applies to the panel too.
Authentication is delegated; authorization is not. The chain answers who the credentials belong to; this panel's own admin table still decides whether that person may enter. A directory account that is not an administrator here is refused — otherwise connecting a corporate directory would quietly make every employee in the company an administrator of your admin panel.
It works in the other direction too: a local admin row is not a bypass. With a chain configured the chain still has to accept the password, so a revoked directory account cannot get in through a row nobody cleaned up.
Without
auth_backends, nothing changes: the panel validates against its own table exactly as before.
v1.7.4 — 2026-08-26
Changed
- Aligned to nucleus v1.13.0, which makes the parts of the framework you are most likely to need to replace — storage backends, session stores, authentication backends — pluggable by name. No orbit behaviour changes.
v1.7.3 — 2026-08-25
Changed
- Fleet modules aligned to the patched suite.
agent,server,quarkbridgeandquarkdatasourceare republished against nucleus v1.12.1 and quark v1.6.1, andservermoves toagentv0.5.16. No orbit behaviour changes; this release exists so the published module tags carry the same dependency floor as the root.
v1.7.2 — 2026-08-25
Changed
- Dependency alignment. Every module moves to nucleus v1.12.1 and quark v1.6.1, both of which carry fixes from an external audit of the published suite: a row-level-security preflight that certified a real cross-tenant leak as correct, a module unable to declare its own mount root, and a storage delete that reported success without removing anything. No orbit behaviour changes.
v1.7.1 — 2026-08-25
Fixed
-
Configuring the panel from
nucleus.ymlnow works. The README has documented amodules.orbit.*subtree — prefix, title, environment and the bootstrap user's credentials — and the framework did its part: it extracted that subtree and handed the bound configuration to the module. Orbit discarded it and used the values passed in Go instead, so anyone configuring the panel through YAML got the defaults with nothing to indicate it. Because the module is mounted, the framework's warning about configuration aimed at an unmounted module stayed quiet too.It was ignored in complete silence, and that includes
bootstrap_password: someone who believed they had set the admin password had not set it.The YAML subtree is now overlaid on whatever you passed in Go, key by key — Go supplies the base, YAML wins for what it sets.
One exception, and it fails loudly rather than surprising you:
prefix. The framework mounts the module before it reads the subtree, so that key cannot move the panel. Setting it to something other than the mount point stops startup and names both values, instead of serving a panel whose own links point where it is not.
v1.7.0 — 2026-08-25
Added
-
Versioned documentation. The suite site now serves this documentation under a version path as well as at
/orbit/. Until now Orbit only ever served its current docs, so anyone running an older release read the notes for whatever version shipped last — with nothing on the page saying so. Nucleus and Quark have worked this way for a while; Orbit was the odd one out.Nothing moved:
/orbit/…still serves the current documentation, and the snapshots appear alongside it. The version picker in the top bar switches between them.The archive starts at 1.6.7, the release that was current when versioning was installed. Earlier minors have no snapshot and none will be fabricated: a back-dated snapshot would claim that today's documentation was the documentation of the time.
Fixed
- The module compatibility matrix no longer goes stale after a tag. It was generated from git tags alone, and a tag does not exist until the release merges — so the committed copy went stale the moment a root tag was cut, and the freshness check (which only runs on pull requests) slept until an unrelated change tripped over it. It now also reads the release manifest, so the release itself carries its own row.
v1.6.7 — 2026-08-25
Changed
- Dependency alignment. The root panel,
server,agentandquarkbridgemove to nucleus v1.12.0. That release freezes the framework's default security posture against a measured baseline, addsnucleus doctor --check securityfor the settings that load fine and expose you anyway, and judges cookie-name prefixes when the configuration file is read instead of at boot.quarkdatasourceandprotodo not depend on the framework and are unchanged. No orbit behaviour changes.
Documentation
- Each module's README now states that it builds against Nucleus and points
at its own
go.modfor the exact floor, rather than repeating a version number that would go stale.
Fleet tags cut alongside this release line: agent, server and
quarkbridge (proto and quarkdatasource unchanged).
v1.6.6 — 2026-08-24
Changed
- Dependency alignment. Every module — the root panel,
server,agent,quarkbridgeandquarkdatasource— moves to nucleus v1.11.0 and quark v1.6.0. Those releases bring configuration that is validated the same way wherever it is loaded, a test kit that reaches the database, a graceful outbox shutdown, and a preflight for native row-level security. No orbit behaviour changes.
Fleet tags cut alongside this release line: agent, server,
quarkbridge and quarkdatasource (proto unchanged).
v1.6.5 — 2026-08-23
Changed
servernow pinsagent/v0.5.13. v1.6.4 published that agent tag, butserverwas left requiring v0.5.12. Installing the server from a cold cache now resolves the current agent code. No behaviour changes.
Fleet tag cut alongside this release: server/v0.9.9 (the rest of the
fleet is unchanged from v1.6.4).
v1.6.4 — 2026-08-21
Changed
agentcompletes the dependency alignment to nucleus v1.10.0. v1.6.3 moved the root panel,server,quarkbridgeandquarkdatasource, but shipped withagentstill requiring nucleus v1.9.1 — and said nothing about it. Every module now builds against the same framework version. No behaviour changes.
Fleet tag cut alongside this release: agent/v0.5.13 (the rest of the
fleet is unchanged from v1.6.3).
v1.6.3 — 2026-08-21
Changed
- Dependency alignment. The root panel and
servermove to nucleus v1.10.0 (the vertical-slice module release: module-declared policy rows and CSRF exemptions, applicable embedded migrations, embedded templates);quarkbridgemoves to nucleus v1.10.0 and quark v1.5.2;quarkdatasourcemoves to quark v1.5.2 (themigrate upCLI fix). No orbit behaviour changes. Known miss, fixed in v1.6.4:agentwas left on nucleus v1.9.1.
Fleet tags cut alongside this release: server/v0.9.8,
quarkbridge/v0.3.12, quarkdatasource/v0.2.11 (proto/v0.4.2
unchanged).
v1.6.2 — 2026-08-18
Changed
- Dependency alignment. The root panel and the fleet modules that build
on the framework (
agent,server,quarkbridge) move to nucleus v1.9.1 — the server-side render layer fixes (recursive template loading, prefix modules receiving the engine and session manager, template function registration from the builder) and the outbox dispatcher starting after extensions attach. No orbit behaviour changes.
Fleet tags cut alongside this release: agent/v0.5.12, server/v0.9.7,
quarkbridge/v0.3.11 (proto/v0.4.2 and quarkdatasource/v0.2.10
unchanged).
v1.6.1 — 2026-08-16
Fixed
- These notes. v1.6.0 shipped without its section on this page, and
quarkdatasourcestill required root v1.4.3 — two minors behind. Both are corrected: the section below documents v1.6.0, andquarkdatasourcebuilds against root v1.6.0.
Fleet tags cut alongside this release: quarkdatasource/v0.2.10 (all
other modules unchanged).
v1.6.0 — 2026-08-16
The developer-experience minor: it closes the gaps a new user hit in Orbit's onboarding surface.
Added
- Compatibility matrix, generated.
website/docs/reference/module-matrix.mdlists the six Go modules with their published versions and cross-module pins, produced by a generator with a CI freshness check — the table can no longer drift from the released tags.
Fixed
- The quick start compiles. The first snippet a new user copies used
app.Start()— a method that does not exist on the built application. It now shows the real entry point (nucleus.Run(app)), matching the README and the minimal example. make testcovers the six modules. The Makefile stopped at four;quarkbridgeandquarkdatasource— exactly the two modules that materialize the Quark↔Orbit integration — are now in every target.
Changed
- Dependency alignment. Root and fleet modules build against nucleus v1.8.0 and quark v1.5.0.
Fleet tags cut alongside this release: agent/v0.5.11, server/v0.9.6,
quarkbridge/v0.3.10, quarkdatasource/v0.2.9 (proto/v0.4.2
unchanged).
v1.5.4 — 2026-08-16
Changed
- Dependency alignment. The root panel and all fleet modules build
against nucleus v1.7.0 (global authorization sees JWT claims, S3 bucket
bootstrap, service health in
/healthz); no orbit behaviour changes.
Fleet tags cut alongside this release: agent/v0.5.10, server/v0.9.5,
quarkbridge/v0.3.9 (quarkdatasource/v0.2.8 and proto/v0.4.2
unchanged).
v1.5.3 — 2026-08-16
Changed
proto/v0.4.2joins the set. The security toolchain bump (Go 1.26.6) had touchedproto/go.modwithout a release, leaving unreleased module code in the certified tree;proto/v0.4.2publishes it (no functional changes). Its ripple re-pins the module graph:agent/v0.5.9andserver/v0.9.4(proto and agent pins current, nothing else changes). This root cut contains all of them;quarkbridge/v0.3.8andquarkdatasource/v0.2.8continue from v1.5.2.
v1.5.2 — 2026-08-16
Changed
- Dependency alignment. The root panel and all fleet modules build against quark v1.4.1 (its CLI repair release) and nucleus v1.6.2 (its scaffold-dialect and fixture-ordering repairs); no orbit behaviour changes.
- Security. Go toolchain floor moves to 1.26.6 (standard-library
advisories),
google.golang.org/grpcto v1.82.1 andgo.opentelemetry.io/otelto v1.44.0 — all flagged as reachable by the vulnerability scanner.
Fleet tags cut alongside this release: agent/v0.5.8, server/v0.9.3,
quarkbridge/v0.3.8, quarkdatasource/v0.2.8 (proto/v0.4.1 unchanged).
v1.5.1 — 2026-07-22
Changed
- Dependency alignment. The root panel and all fleet modules build
against nucleus v1.6.0 (its webhook-registration hardening); no orbit
behaviour changes.
golang.org/x/textstays at v0.39.0.
Fleet tags cut alongside this release: agent/v0.5.6, server/v0.9.1,
quarkbridge/v0.3.6 (quarkdatasource/v0.2.7 and proto/v0.4.1 unchanged).
Not user-facing, but worth recording: the repository's own version checks
became stricter. The one allowance for a module lagging behind the root is now
confined to the single edge that structurally requires it
(root↔quarkdatasource), and that edge is only accepted after the frozen
datasource contract is verified identical across the lagging tag.
v1.5.0 — 2026-07-22
Fixed
-
The in-process live feed now shows HTTP traffic. The panel consumed only the SQL lane of the event bus, so
/api/live/snapshotreportedrequests: 0however much HTTP traffic the host app served. The feed now consumes the bus's HTTP events too, and requests appear alongside queries.The traffic middleware remains the sole source of the session lane, which needs the
*http.Requestthat the bus event does not carry, and it de-duplicates the admin prefix so events are not counted twice.Correction to the v1.4.4 note: that release described the in-process live feed as working end to end. It did not — the HTTP lane was dead until this version.
-
Dependency alignment to the 1.9.0 set. The root panel and all fleet modules build against nucleus v1.5.0, the Quark integrations (
quarkbridge,quarkdatasource) require Quark v1.4.0, andgolang.org/x/textis raised to v0.39.0 (GO-2026-5970) across every module.
Added
- UI backlog closed. The last three outstanding interface items land: centralized i18n strings, table accessibility roles across the fleet pages, and the in-process panel's two parallel tables consolidated to one.
Fleet tags cut alongside this release: agent/v0.5.5, server/v0.9.0,
quarkbridge/v0.3.5, quarkdatasource/v0.2.7.
v1.4.4 — 2026-07-20
Fixed
- The agent's auth-suspicion warning is now per endpoint. A frame accepted on one endpoint proves that endpoint's auth path and nothing else, so it no longer clears the frameless-cycle evidence of a sibling endpoint that keeps rejecting every frame. In a failover pair, one healthy endpoint used to be able to silence — or worse, mislabel — the warning that belonged to the broken one. The warning now fires against the endpoint that earned it, with its own evidence.
- Dependency alignment across every module. The root panel and all
fleet modules build against nucleus v1.4.0, the Quark integrations
(
quarkbridge,quarkdatasource) require Quark v1.3.3, andquarkdatasourcepins the current root. A cold-cachego installof any module resolves to the same set the release was tested with — no stale sibling versions.
Fleet tags cut alongside this release: agent/v0.5.4, server/v0.8.4,
quarkbridge/v0.3.4, quarkdatasource/v0.2.6.
v1.4.3 — 2026-07-19
New
- The agent raises an auth-suspicion warning when consecutive stream cycles end without the server accepting a single frame. Some transport failures swallow the explicit rejection, so "connects, then dies frameless" is treated as evidence of a bad token even when no authentication error is visible. The warning is rate-limited and is never triggered by an unreachable endpoint — see the FAQ.
Fixed
- The
RequireConnectionboot gate now waits for real acceptance, not reachability:Connected()only fires on the first frame the admin server accepts under authentication. The dial probe hits the auth-exempt/healthzendpoint, so a reachable server proves nothing about the token — previously a wrong token could pass the gate and the application booted "green" without ever being connected. - Module pins: the opt-in Quark integrations (
quarkbridge,quarkdatasource) now require Quark v1.3.1, and the server module pins the agent at its latest tag — so cold-cachego installresolves to current code.
Upgrade notes
- A boot that passed with a rejected token will now fail. If your
application sets
RequireConnection: trueand its agent token is wrong, boots up to v1.4.2 could pass on mere reachability; from this release the boot fails atRequireConnectionTimeout, with the token-rejected warnings explaining why. That green was false — the agent was never connected. Fix the token (see Security) rather than widening the timeout or disabling the gate.
Fleet tags: agent/v0.5.3, server/v0.8.3. Opt-in module tags:
quarkbridge/v0.3.3, quarkdatasource/v0.2.5.
v1.4.2 — 2026-07-19
Fixed
- Internal version pins across the repo's modules now always reference the
latest sibling tags, and a continuous check keeps them that way — so
go install github.com/jcsvwinston/orbit/server/cmd/admin-server@<tag>resolves cleanly from a cold cache.
Security
- A rejected agent token is now loud on both sides. The agent logs a
warning (
admin agent token rejected by admin server), only announcesconnectedonce the server has actually accepted the stream, and backs off at growing intervals instead of retrying every second. The server logs a rate-limited warning naming the remote IP. Previously a bad token could fail almost silently while the health probe kept "succeeding".
Fleet tags: agent/v0.5.2, server/v0.8.2.
v1.4.1 — 2026-07-15
Fixed
- The agent now attaches its bearer token to the telemetry stream itself, not just to unary calls — agents can authenticate against a token-protected server's stream endpoint.
- The server module builds standalone again outside the repository workspace, and continuous builds now verify that.
- Dependency update: Nucleus v1.3.1, which carries a Postgres primary-key fix relevant to Data Studio.
Security
- Built with Go 1.26.5, picking up the fix for a TLS vulnerability in the Go standard library (GO-2026-5856).
Fleet tags: agent/v0.5.1, server/v0.8.1.
v1.4.0 — 2026-07-14
New
- The fleet UI shows the admin server's version and the signed-in operator's identity.
- Filter bars on the live stream pages, plus a sampling control.
- Data Studio in the fleet UI exposes operations the backend already supported, including bulk actions.
- Node detail gained a recent-activity view; model lists are searchable; the slow-query highlight threshold is configurable.
- Review tools for the fleet Audit log screen.
Fleet tags: server/v0.8.0.
v1.3.0 — 2026-07-13
New
- Fleet UI usability round: action feedback (toasts), Data Studio result feedback, pause-with-buffer on live streams, a clear signed-out screen on session expiry, and accessibility and contrast improvements.
- Fleet plane reliability: telemetry resumes after reconnects, events carry a node identity that correlates with the fleet registry, real server-driven sampling, node snapshots, and support for read-only operators.
Fixed / Security (in-process panel)
- Admin actions are recorded under the authenticated user; sensitive values are redacted; sign-in attempts are rate-limited with a lockout; CSRF protection and browser security headers were added; and two controls that looked functional but were not (session terminate, export) now do what they say.
Fleet tags: agent/v0.5.0, server/v0.7.0.
v1.2.1 — 2026-07-12
Security
- The statement that creates the bootstrap admin user is now fully parameterized.
- Hardened admin-server defaults (in
server/v0.6.0, cut alongside): the server refuses to start an unauthenticated agent listener on a non-loopback interface unless explicitly overridden, and the trusted-proxy mode gained the shared-secret check (X-Auth-Proxy-Secret) so proxy-forwarded identities cannot be forged from inside a trusted network range.
Upgrade notes
- Existing fleet deployments may need
--agent-token(or TLS on the agent listener), and proxies must echo the secret once--ui-proxy-secretis set. See Security.
Fleet tags: server/v0.6.0.
v1.2.0 — 2026-07-11
New
- Access control and the Audit log are wired end-to-end on the fleet plane: the fleet UI reads each node's policy snapshot, and operator mutations performed through the server are recorded and attributed.
- The live SQL stream shows the driver-reported row count per statement.
Fleet tags: proto/v0.2.0–proto/v0.3.0, agent/v0.3.0–agent/v0.4.0,
server/v0.4.0–server/v0.5.0.
v1.1.0 — 2026-07-11
New
- Opt-in Prometheus metrics listener on the admin server
(
--metrics-addr), and--versionnow reports the real installed version from build information.
Security
- Go toolchain pinned to 1.26.5 across all modules (TLS advisory GO-2026-5856).
Fleet tags: server/v0.3.0 (plus the toolchain patches agent/v0.2.1,
server/v0.3.1).
v1.0.0 — 2026-07-10
The first stable release.
- The public API — the root module and the
datasourcecontract — is frozen for the life of v1.x. - The fleet modules (
proto,agent,server) became independently released modules with their own tags, and every module now resolves and builds standalone with plaingo get/go install— no repository checkout required.
Fleet tags: proto/v0.1.0, agent/v0.1.0–agent/v0.2.0,
server/v0.1.0–server/v0.2.0.
Before v1.0
The 0.x line built the product's foundations: Data Studio was decoupled
behind a neutral datasource contract, the opt-in Quark integrations
arrived (quarkbridge for the live SQL feed, quarkdatasource for Data
Studio over Quark models), and the admin UI was redesigned. Details are on
the GitHub releases page.