Compatibility¶
Hubuum Frontend and Hubuum Server are versioned independently. Deployments should pin both components to explicit versions.
| Frontend | Supported Hubuum Server | CI contract target |
|---|---|---|
main (unreleased) |
v0.0.16 |
ghcr.io/hubuum/hubuum-server:v0.0.16 |
v0.0.18 |
v0.0.16 |
ghcr.io/hubuum/hubuum-server:v0.0.16 |
v0.0.17 |
v0.0.16 |
ghcr.io/hubuum/hubuum-server:v0.0.16 |
v0.0.16 |
v0.0.15 |
ghcr.io/hubuum/hubuum-server:v0.0.15 |
v0.0.15 |
v0.0.14 |
ghcr.io/hubuum/hubuum-server:v0.0.14 |
v0.0.14 |
v0.0.13 |
ghcr.io/hubuum/hubuum-server:v0.0.13 |
v0.0.13 |
v0.0.9 |
ghcr.io/hubuum/hubuum-server:v0.0.9 |
v0.0.12 |
v0.0.9 |
ghcr.io/hubuum/hubuum-server:v0.0.9 |
v0.0.11 |
v0.0.9 |
ghcr.io/hubuum/hubuum-server:v0.0.9 |
v0.0.10 |
v0.0.5 |
ghcr.io/hubuum/hubuum-server:v0.0.5 |
v0.0.9 |
v0.0.5 |
ghcr.io/hubuum/hubuum-server:v0.0.5 |
v0.0.8 |
v0.0.5 |
ghcr.io/hubuum/hubuum-server:v0.0.5 |
v0.0.7 |
v0.0.5 |
ghcr.io/hubuum/hubuum-server:v0.0.5 |
v0.0.6 |
v0.0.5 |
ghcr.io/hubuum/hubuum-server:v0.0.5 |
v0.0.5 |
v0.0.4 |
ghcr.io/hubuum/hubuum-server:v0.0.4 |
v0.0.4 |
v0.0.3 |
ghcr.io/hubuum/hubuum-server:v0.0.3 |
v0.0.3 |
v0.0.2 |
ghcr.io/hubuum/hubuum-server:v0.0.2 |
v0.0.2 |
v0.0.2 |
ghcr.io/hubuum/hubuum-server:v0.0.2 |
v0.0.1 |
v0.0.1 |
ghcr.io/hubuum/hubuum-server:v0.0.1 |
Required pull-request and release checks use the immutable digest behind the
listed server tag. Frontend v0.0.17, v0.0.18, and unreleased main target
Server v0.0.16 at
sha256:37b3299edd845a0c2aa7772d7d68565233ac8c1802bc44be3fb4bbc6dfa8778e.
Frontend v0.0.16 retains its Server v0.0.15 target at
sha256:36af667dbc9e221a40448496d4a87e168c999d0834df4b69177345ff3d36e821.
Frontend v0.0.15 retains its Server v0.0.14 target at
sha256:6c1c8d7316a1f60a02e4505611a44e21030ba678b5b451f5b293a12f2bd87594.
A separate scheduled workflow follows the moving backend :main image.
Server v0.0.16¶
The OpenAPI snapshot is taken directly from the server's v0.0.16 tag
(commit 8f4194ffe25d172d579b676f109efbdc71d9aab7). Both Linux AMD64 and ARM64
image labels identify that commit. Its API shapes match the preview tested for
Frontend v0.0.16; only the OpenAPI version changed between that preview and
the release. The generated client now includes credential approvals, retained
task details, and resource-aware task search parameters. Existing task controls
keep their current behavior.
Frontend v0.0.16 previously verified the approval protocol against Server
commit 61f1bfd3455af26254e1dc73e697a80b0536813a, with image
ghcr.io/hubuum/hubuum-server@sha256:e40fc33e2cbd6d73ce1bb281d3836468feb28493ff4343c1099211083cf83181.
Frontend v0.0.17 replaces that preview check with the final released contract
and image in required CI and release verification.
Frontend v0.0.18 adds task discovery filters, bookmarkable searches, cursor
pagination, and retained task details using the same released-server contract.
Credential approvals¶
Server v0.0.16 requires fresh password approval for credential management.
The frontend selects this flow per operation from the server's 403 /
reauthentication_required response, preserving compatibility with older
servers without version checks or capability probes.
Token creation/renewal, local user creation, password changes, credential imports (including dry runs), and restore confirmation use a password dialog when required. The dedicated BFF obtains and consumes an approval in request memory, using the same bearer for both requests. Token expiry is copied verbatim from the approval response, including microsecond precision. Revision preconditions, import idempotency keys, and restore confirmation capabilities are preserved. The generic proxy blocks direct approval creation to keep approval secrets out of the browser; safe approval metadata reads remain available for recovery.
Older servers receive the original mutation with no approval discovery or password prompt. A required approval that fails never falls back to a bearer-only mutation. Incorrect passwords preserve valid sessions; throttling, provider failures, permission errors, and expired sessions retain their distinct failure behavior. A lost mutation response requires checking account/task/restore state before retrying; the BFF reports the approval record ID when available.
Upgrade requirements¶
Deploy an approval-capable frontend and update CLI/SDK credential flows before
upgrading the server. Keep a verified v0.0.15 backup, quiesce protected mutations,
drain workers, and run hubuum-admin --migrate separately. This release requires
2026-09-18-000001_task_discovery and
2026-09-19-000001_credential_approvals. Upgrade every API replica and worker
before resuming protected mutations; use matching v0.0.16 server,
administrator, template worker, and separately supervised restore executor.
Backup format remains 6, and older format-6 backups without discovery metadata remain accepted. External storage adapters and exhaustive task/event decoders must adopt the new task details and credential-approval contracts. Application rollback also restores the older credential policy and needs a coordinated event/data compatibility review. See the Server v0.0.16 release notes and credential rollout guide.
Server v0.0.15¶
Frontend v0.0.16 adopted the OpenAPI snapshot from the server's v0.0.15 tag
(commit 4bb889c6). Normal contract checks require versioned schemas,
saved diagnostics, HTML repair reports, and task cancellation. The earlier
separate schema-preview CI job is superseded by the release contract check.
Task cancellation and deadlines¶
Task detail pages submit cancellation through the authenticated BFF. Queued
withdrawal sends expected_status: queued; a conflict refreshes the task and
requires another explicit request. Active cancellation returns 202 and keeps
polling until the server acknowledges cleanup. A completed task keeps its factual
result. Optional reasons are single-line text limited to 512 UTF-8 bytes.
The page displays cancellation actor, reason and time, execution deadline, terminal reason, authoritative terminal unattempted counts, aggregate import receipts, and remote dispatch evidence. Strict imports roll back uncommitted work; best-effort imports and reindex/schema batches retain committed work. Cancelled exports and backups publish no partial output. Remote requests may already have caused effects and are never automatically retried by the console. Configuration shows all six per-kind execution limits. Queue wait does not consume those limits; deadlines are pinned at first claim.
The backend enforces cancellation authority independently of task visibility.
Owners, unscoped administrators, and eligible service-account owner-group members
may cancel authorized work. Scoped tokens are limited to their own submissions;
internal reindex and schema work require an unscoped administrator. Treetop
installations must deploy the CancelTask action and policies. Request
cancellation before restore maintenance draining begins; the API returns 503
once that gate closes. Restore confirmation is outside task cancellation.
Schemas and repair reports¶
The Schema workspace stages immutable revisions, compares changes, runs impact analysis, and activates with explicit strict or administrator pending policy. The review step's Analyze impact action starts the check directly. Normal progression to Activate stays disabled until a current compatible analysis is available (an authoritatively empty class needs no scan). Failed, incomplete, or outdated results keep the user at analysis with options to revise the proposal or analyze again. Administrators can separately expand Override compatibility checks and confirm activation with pending validation; this may leave existing objects invalid and does not repair their data. Impact reports can be downloaded as JSON, including every field returned by the server and all retained object IDs, regardless of the displayed page. Downloads are generated on demand; the screen pages failure groups and IDs to keep large reports manageable. Unfinished or interrupted work is labeled as a partial report. Display pagination does not reduce the server response size: polling still reads all committed findings, so payload size grows with the number of mismatches.
With server PR #412, impact.failures
groups every committed mismatch by its first failure. Each group's samples
field contains all of its object IDs; the separate invalid_samples summary
remains capped at 20. Passing objects remain aggregate counts, and stale or
uninspectable objects have no proven mismatch diagnosis. Running or interrupted
analyses include only findings committed so far.
The server changes for #415 add
impact.findings, with saved object revisions, inspection times, and up to 32
diagnostic issues per object. What needs fixing shows the server's explanations,
JSON Pointer locations, expected constraints, actual types/sizes, and explicit
omissions. Root pointers, omitted locations, and expected JSON null remain distinct.
Alternative-branch explanations are not presented as independently required repairs.
Diagnostics describe inspected data; the frontend does not reconstruct them from
current objects. A null snapshot is explained as a legacy first-failure finding.
What needs fixing defaults to By error, consolidating identical retained
issue descriptions and listing every affected object with its inspected revision,
time, and truncation notice. An object may appear under multiple errors; repeated
identical occurrences within an object are counted without duplicating its link.
Different locations, constraints, actual type/size details, alternative flags, or
omissions stay separate. By object retains the original detailed view. The
JSON download preserves the server response without consolidating its records.
Server v0.0.15 does not consolidate errors in HTML repair reports. The console's
By error view is local presentation of the retained per-object diagnostics;
it does not change the server response or HTML. Refresh HTML report renders
saved findings again using the released server renderer and its resource limits.
When the response includes findings, View HTML report and Download HTML
report generate a server report if none is retained, then reuse its saved output.
Refresh HTML report explicitly replaces that rendering using the latest saved
findings and selected layout. It never starts a new analysis or activates a schema.
A failed generation preserves the prior report. The frontend supplies absolute
links to its actual /objects/{class_id}/{object_id} routes so downloaded links
work. HTML is opened through the authenticated BFF, with scripts and same-origin
access disabled; only these repair reports may open object pages in new tabs that
do not inherit the report sandbox. Access is checked by the backend for generation,
viewing, and downloads, including already retained output.
Report layout optionally selects a saved HTML template; the server's default
needs no template. A custom layout must be a body fragment containing
{{ report_content }} exactly once, including when using shared includes. In the
template editor, choose HTML output, reusable fragment, and Full document mode
to avoid the frontend's standard document wrapper, then supply just the layout
fragment. The server supplies the outer document and complete canonical findings.
Its output limit fails generation explicitly rather than saving truncated HTML.
The server's HUBUUM_EXPORT_MAX_OUTPUT_BYTES defaults to 256 KiB and can be raised
up to 16 MiB for HTML repair reports. Finding assembly uses the smaller of this
setting and 4 MiB; the expanded template context has a separate 4 MiB ceiling.
An assembly-budget error during HTML generation does not mean the analysis
failed or enforcement changed. Saved findings and the JSON download remain
available when they fit the JSON report's separate 16 MiB assembly budget.
Increasing the output setting requires a backend restart, but no new analysis.
Rendering also uses HUBUUM_EXPORT_TEMPLATE_FUEL, which defaults to 50,000
MiniJinja execution units. An "engine ran out of fuel" error means this separate
execution limit was reached; increasing the byte limit alone does not fix it.
The local sandbox sets 1,000,000 execution units for the corpus's repair reports.
Older reports may retain at most 20 groups and five IDs per group, including
checkpoints resumed after an upgrade. The frontend identifies omissions from
ungrouped_failures and groups whose objects count exceeds samples.length,
and advises a new analysis on an updated server. It preserves those reports as
returned when downloading; it cannot recover missing IDs. A short list alone
does not imply sampling. Older servers without findings retain the grouped
failure display and JSON download.
Before upgrading, drain old task and schema workers and run hubuum-admin --migrate
as a separate workload. This includes task cancellation migration 20260914000001,
saved diagnostics migration 20260914000003, schema evolution/findings, and the
byte-ordered cursor indexes. Schedule a quiet period for constraint validation and
index builds. Start matching v0.0.15 API, worker, administrator, template worker,
and restore-executor binaries with consistent limits. Rerun older analyses to
obtain richer diagnostics; upgrades cannot recover details that were never saved. Retained HTML belongs to its source
task and is not included in logical schema-work backups or restores.
The workspace also exposes retained revision history, object compliance, and background
revalidation. Ordinary metadata saves omit schema fields. Older servers retain
the inline editor when revision discovery returns 404; authorization or transient
errors do not enable that fallback. Audit filters include class_schema and
object_validation, tasks recognize schema_validation, and administrator
configuration includes the effective schema validation limits.
Administrator Configuration also shows the effective backup capture-row limit
introduced by server PR #408, or
n/a when an older server omits it. Server v0.0.15 enforces byte and row-work
budgets during backup capture, including offline administrator operations.
HUBUUM_BACKUP_MAX_CAPTURE_ROWS defaults to 1,000,000; configure matching limits
for the server, workers, and administrator tools when larger workloads need them.
Imports preserve explicit schema_activation and its proof during dry runs and
submission. Such imports must use their original file destinations: overriding
the destination could attach class-local revision numbers to another class.
To change a populated class policy through import, stage the exact policy in
its Schema workspace and include that revision in the file. Legacy policy
overwrites now conflict. Activation requires administrator authority; strict
imports roll back failed work together, while best-effort imports can retain
successful class activation despite separate object failures.
Server v0.0.15 uses backup format 6. Restore format 5 and older artifacts with
their matching server release, then migrate the database and create a new format
6 backup. The frontend does not convert backup documents. Drain old workers,
run migrations before startup, and use matching server, administrator, worker,
and restore-executor binaries. Existing enforced objects begin pending after
migration; administrators can revalidate from the Schema workspace. Review the
server schema and upgrade guide
before testing an upgrade with real data.
Frontend v0.0.14 uses Server v0.0.13 API types, including structured search,
storage backend configuration, and backup format version 5. Existing unified
search and class-selection flows keep their current behavior. Runtime
configuration uses the storage query budget while retaining the older database
timeout field as a fallback. To recover from a version 4 backup, restore it using
the older server before upgrading and creating a version 5 backup; the frontend submits
backup documents to the server for validation without converting them.
Compatibility means that authentication, session handling, and the frontend's
core backend contract suite pass. Frontend v0.0.2 relies on Server v0.0.2
for admin backup/restore, the read-only runtime configuration projection, and
shared and personal computed fields. Frontend v0.0.4 relies on Server
v0.0.3 for object aggregates, computed filtering and sorting, public
pagination discovery, atomic JSON Patch, and explicit by-name API routes.
Frontend v0.0.5 additionally adopts Server v0.0.4's unified token scope
payloads, numeric aggregate measures, durable task provenance, initiator
filters, bounded idempotency keys, and remote-header restrictions. The token
payload change is breaking, so Frontend v0.0.5 should not be used to mint
tokens against Server v0.0.3.
Frontend v0.0.6 adopts Server v0.0.5's public default-token lifetime,
authoritative token expiry responses, token-retention configuration, and
restored permission-aware import and export submission.
Frontend v0.0.7 retains the Server v0.0.5 contract while adding
frontend-managed bookmarkable template reports and raw stored-output routes.
Frontend v0.0.8 retains the Server v0.0.5 contract while adding task
elapsed-time display and faster, instrumented bookmarkable-report refreshes.
Frontend v0.0.9 retains the Server v0.0.5 contract while introducing the
Stillwater design system, runtime-mounted login backgrounds, and streamlined
navigation and resource workflows.
Frontend v0.0.10 retains the Server v0.0.5 contract while adding streaming
BFF transport, retry-safe task submissions, structured operational events,
refined object workflows, and stronger authenticated-browser quality gates.
Frontend v0.0.11 adopts Server v0.0.9's canonical point responses,
revisioned resources and permission sets, token lifecycle endpoints, nested
group-member principals, and backup format version 4.
Frontend v0.0.12 retains the Server v0.0.9 contract while adding richer
audit filtering, permission-aware resource search, stricter BFF origin and
administrator checks, and direct recovery from expired sessions.
Frontend v0.0.13 retains the Server v0.0.9 contract while adding scalable
on-demand target-object search to relation creation and refreshing the complete
application, development, generation, container, and CI dependency baseline.
Frontend v0.0.14 adopts Server v0.0.13, including asynchronous web restore
confirmation. Confirmation returns 202 Accepted; the console retains the
restore capability in memory and polls until a terminal result, including after
old bearer sessions become invalid. Keep the restore page open until it finishes.
The exact restore-status BFF route accepts only capability-authenticated reads;
all other backend proxy routes continue to require a frontend session.
Frontend v0.0.15 adopts Server v0.0.14 with no API shape changes. The server
fixes backup validation, external membership provenance, retained history, and
resource revisions after history-free restores. Backup format 5 is unchanged,
and this release adds no database migration. The certified application upgrade
and rollback path is Server v0.0.13 to v0.0.14; application rollback retains
the migrated database. Existing history-free backup artifacts can be restored
directly with the fixed restore executor.
Before deploying Server v0.0.14, run hubuum-admin --migrate as a separate
one-shot workload and deploy hubuum-admin --restore-executor before enabling
web restore confirmations. Both requirements apply to the default single-role
mode. Use matching v0.0.14 binaries for the server, administrator, template worker,
and separately deployed restore executor to apply the recovery fixes. The
disposable contract suite exercises confirmation,
capability-only completion polling, and token invalidation with background
workers running.
See the Server v0.0.14 release notes
for these fixes and matching-binary requirements.
See the Server v0.0.12 upgrade notes
for the certified upgrade path, version 5 backups, resource limits, and optional
split-role deployment. Older frontend releases assume synchronous restoration
and should not confirm web restores against this server release.