Governance Platform v1.2.1 Release Notes
Customer-facing release status for the Governance Platform v1.2.1 patch release.
Governance Platform v1.2.1 is a stable patch release for the v1.2 customer release line. It publishes refreshed runtime images, Helm charts, release manifest metadata, and customer package artifacts from validated release source refs. It restores declarations for indicator evaluations, tightens project and organization access checks, and adds bulk indicator application and a rebuilt plugin configurations view to Governance Studio.
This release includes breaking API changes and a database migration that cannot be reversed. Read Breaking Changes and Before Installing before upgrading.
Included Runtime Components
- Governance Studio
- Governance Service
- Auth Service
- Integrity Service
- EQTY PDFGen
- Gateway stack: LLM Gateway, Control Plane, and Console (opt-in)
- Governance Platform deployment charts
Breaking Changes
These changes affect clients that call the platform APIs directly and operators who consume Auth Service tokens or service logs. Governance Studio is already updated for all of them.
Governance Service API
-
Indicators are applied through one batch endpoint. The previous route is removed, with no alias:
Before After POST /api/v2/projects/{projectId}/indicators/{indicatorId}/applicationsPOST /api/v2/projects/{projectId}/indicator-applicationsBody {"appliedPolicyControlId" | "appliedPolicyControlIds", "status"}Body {"applications": [{"indicatorId", "appliedPolicyControlId"}], "status"}applicationsis required and accepts 1 to 500 pairs.indicatorIdaccepts a UUID,urn:uuid:, orslug:value, andstatusdefaults toactive. The batch is atomic: if any pair is already applied, the request returns409, naming the indicator and control, and nothing is applied. Theapply_indicatorspermission and the201response are unchanged. -
The organization project list is filtered per caller.
GET /api/v1/organizations/{orgId}/projectsreturns every project only to an owner of that organization. Other members receive only the projects they are assigned to, and a member with no assignments receives200with an empty list. -
Organization activity logs are scoped to the caller’s projects.
GET /api/v1/organizations/{orgId}/activity-logsnow admits members whoseview_project_datacomes from a project assignment, and limits them to their projects. Only an owner of that organization sees every entry; an owner of a different organization no longer does. -
Names are compared with whitespace collapsed. Creating a project, creating a policy, or applying a policy treats names that differ only in spacing, including tabs, line breaks, and non-breaking spaces, as the same name.
Auth Service API and Tokens
-
Organization owners cannot hold project roles. Owners already have every project permission in their organization.
Request New behavior POSTorPUT /api/v1/organizations/{organizationId}/projects/{projectId}/members/{userId}for an organization owner409 Organization owners cannot hold project rolesPOST /api/v1/organizations/{organizationId}/membersorPATCH .../members/{userId}combiningorganization_ownerwith a project role400Granting organization_ownerthrough either member endpointRemoves the member’s project assignments in that organization Creating a project no longer makes its creator a
project_owner. Existing owner project roles are removed during the upgrade (see Database Migrations). -
Permission checks use current memberships. For signed-in users, the
/api/v1/rbac/check/permission/...and/api/v1/rbac/permission/{permission}/projectsroutes read roles from the user’s current organization and project memberships instead of the roles in their token. A role that exists only in the identity provider token, and was never recorded as a membership, no longer grants access. API keys are unchanged. -
Project permissions no longer apply to an organization with the same id.
GET /api/v1/rbac/user/permissionsaddsorganizationPermissionsandprojectPermissionsmaps alongside the existingpermissionsfield. Requests that succeeded only because a project role was matched against the organization with the same numeric id are now denied. -
GET /api/v1/rbac/user/permissionsreturns500when a lookup fails instead of200with the missing permissions omitted. -
Permission metadata keys are lowercase.
GET /api/v1/rbac/metadata/permissionsreturnsname,description, andcategoryinstead ofName,Description, andCategory. -
The
platform_accesstoken claim is removed. Tokens no longer carryhttps://governance.eqtylab.io/platform_access. Service account tokens carryis_service_accountandservice_nameinstead. -
Service accounts cannot be imported as members.
POST /api/v1/external-users/importreturns400for a service account. -
Path identifiers resolve by membership. Auth Service routes accept the same identifiers as Governance Service (see Access and API Keys). A project UUID or
slug:in an organization where the caller has no role returns404rather than403, as does an unknown or another user’sdid:key. -
User signing keys cannot use the platform key name. Creating a user key whose normalized name matches the platform signing key returns
403.
Governance Service Writes
- Writes check permissions live. Create, update, and delete requests to
Governance Service bypass the Auth Service permission cache, so a revoked role
blocks writes immediately rather than after
AUTH_CACHE_TTL. A refusal from Integrity Service now returns403 Insufficient permissionsinstead of500.
Operations
- Auth Service no longer falls back to another key provider. An unknown key management provider, or one that fails to initialize, stops Auth Service at startup instead of falling back to Azure Key Vault or to mock keys. The selected provider’s required settings are checked at startup. Confirm your key management configuration before upgrading.
- Integrity Service writes structured logs to stdout. Logs are JSON lines on
stdout when stdout is not a terminal, instead of text on stderr.
RUST_LOGreplaces the configured log levels when set. Update log collection that reads Integrity Service stderr or parses its text format.
Changes Since v1.2.0
These changes are grouped by area.
Governance Studio
- Apply several indicators to a control, or one indicator to controls across several policies, in one step, with a confirmation screen that reports any pairs that could not be applied.
- The gateway plugin configurations tab is rebuilt: a summary of the active configuration, hooks listed in execution order, a details panel for each plugin that can be linked to directly, idle and disabled entries, rollback candidates in the history table, and the reason an agent’s membership was denied.
- User names across Studio link to the member’s page, including invitations, agent registration and authorization, credential issuers, and configuration history.
- Activity logs filter by user rather than display name, so members who share a
name can be told apart, and filtered views can be linked with
?user=and?project=. Member activity logs show project names. - Agent badges are searchable by label and plugin, with a more compact badge and a wider badge dialog.
- Breadcrumbs for an archived applied policy lead to the archived policies view, and evaluation logs for an archived policy show the archived banner.
- Service accounts are no longer offered in the add member dialog.
- Agent project associations can be created without an expiration date.
- After you change your own roles, Studio refreshes your permissions and project list without a page reload.
- Long policy names no longer break page layout, and policies whose names contain tabs, line breaks, or repeated spaces can be archived or deleted by typing the name.
Access and API Keys
GET /api/v1/api-keys/{keyId}/usagereturns the requests recorded for an API key, newest first, withlimit(default 50, maximum 200),offset, andsinceparameters. It is available to the key’s owner through a signed-in session.- Auth Service routes accept integer ids or UUIDs for organizations, integer ids,
UUIDs, or
slug:values for projects, UUIDs ordid:keyvalues for users, and key names ordid:keyvalues for keys. - Adds the
revoke_agentsandrestore_agentspermissions, granted to organization owners. API keys cannot carry these scopes. - Organization owners’ API keys that are scoped to permissions but not bound to a project reach every project in the organization.
GET /api/v1/organizations/{orgId}/members/{userId}/activity-logslists a member’s activity, addressed by user UUID ordid:key. A UUID also returns the history of a former member.
Signing
- Version-bound signing. Clients can fetch the current signing key reference
from
GET /api/v1/protected/signing-keyorGET /api/v1/protected/platform/signing-keyand pass it assigningKeyReferencewhen signing; the request returns409if the key has rotated in between. - Version-bound PDF signing. Set
eqty-pdfgen.config.signingBound: trueto have EQTY PDFGen fetch its certificate from Auth Service and bind each PDF signature to that key version. EQTY PDFGen now verifies every signature against its certificate before embedding it, and fails the render on a mismatch. - Setting
eqty-pdfgen.config.timestampUrlto an empty value signs PDFs without an RFC 3161 timestamp, for environments without outbound access.
Gateway Stack
- Project membership credentials without an expiration date are accepted, and LLM Gateway prefers a non-expiring credential when choosing the one that authorizes a request. Previously such credentials were treated as invalid.
- Credentials issued with the EQTY identity, component, and state attestation contexts verify offline.
- The gateway stack was not enabled in the staging validation for this release, so these changes are not covered by its validation evidence.
Integrity Service
- Project membership credentials can be issued without an expiration date by
omitting
expiryDate. - Logs can be exported over OTLP by setting
OTEL_EXPORTER_OTLP_ENDPOINTorOTEL_EXPORTER_OTLP_LOGS_ENDPOINT.
Fixes
- Indicator evaluations create their declarations and evidence attachments again. In v1.2.0, the governance worker was denied permission to create declarations, so evaluations were recorded without declarations on the control timeline. Declarations missing from evaluations run on v1.2.0 are not backfilled; rerun the affected evaluations to produce them.
- With a preconfigured Keycloak governance worker client secret, the governance worker is now linked to its identity and receives its DID key.
- Microsoft Entra ID worker requests no longer create duplicate users.
- Project agent pages in Governance Studio no longer fail for agents without badges.
- Credentials issued by Integrity Service with sub-second timestamps verify in the gateway stack.
- Plugin versions no longer display with a doubled
vprefix. - A failed permission lookup is no longer cached as lost access.
- Governance Service logs client errors and Integrity Service refusals as warnings rather than errors.
Security
- Updates
anyioin the EQTY PDFGen image to 4.14.2 for CVE-2026-63374. - Governance Studio opens only
httpandhttpscitation links. - EQTY PDFGen restricts its signing digest to SHA-256.
Charts and Release Manifest
- Bumps runtime and umbrella Helm charts to
1.2.1and pins component source refs, image tags, and image digests in the release manifest. - Runtime charts accept
image.digestto pin an image by digest, including the gateway stack images. global.utilityImages.busyboxsets the image used by the Auth Service, Governance Service, and Integrity Service dependency wait containers.governance-service.localStorageCAadds a private CA for local object storage to Governance Service’s trusted certificates.- Integrity Service supports filesystem blob storage with
integrity-service.config.integrityAppBlobStoreType: local_fsandintegrityAppBlobStoreLocalPath, backed byintegrity-service.persistence.integrity.existingClaim. - All new values are off by default. With unchanged values, v1.2.1 renders the same resources as v1.2.0.
Installation Tooling
- Deployment guides, examples, and
govctlare updated for Cloudsmith distribution.govctl initdefaults to--artifact-source cloudsmith, which keeps the chart’s image tags and digests withIfNotPresentpulls. Pass--artifact-source githubto install from GitHub Container Registry as before.
Customer Artifacts
- Release manifest
- Packaged Helm charts and chart digests
- Connected installation package with its checksum
- Optional air-gap package when enabled for the release
- Generated OpenAPI reference
- Generated Helm values reference
Before Installing
Confirm that the release manifest has validation.evidence.status set to
approved, and use only the chart versions and runtime image tags recorded in
that manifest. Do not mix v1.2.1 images or charts with earlier v1.2 artifacts.
Update any direct API integration, token consumer, or log pipeline for the breaking changes above before upgrading.
If you set global.imageRepositoryPrefixOverride and enable the gateway stack,
the Control Plane registry wait container now pulls
docker.io/library/postgres:17.6 rather than a prefixed copy. In an air-gapped
environment, set gateway-stack.controlPlane.waitForRegistryViews.image.repository
or global.imageRegistryOverride to your mirrored image.
Database Migrations
This release migrates the Auth Service, Governance Service, and Integrity Service databases.
- Auth Service removes project roles held by organization owners. Project assignments held by an owner of the same organization are deleted, and project roles are removed from owners’ organization memberships. The down migration does not restore them. Record any owner project assignments you need before upgrading.
- Governance Service indexes the activity log. The index is built without
CONCURRENTLYand blocks writes to the activity log until it completes, which depends on the size of the table. - Auth Service adds two tables that this release does not use, and replaces an index on API key usage.
- Integrity Service allows project membership credentials without an expiration date. Its down migration refuses to run once such a credential exists.
Plan the upgrade as follows:
- Back up all platform databases. Rolling back to v1.2.0 requires restoring this backup.
- Schedule a maintenance window sized to the Governance Service activity log table, during which platform writes are blocked.
- Confirm your key management configuration, because Auth Service no longer starts with a missing or invalid provider.
- Upgrade the
governance-platformchart to1.2.1as described in Upgrade, using the chart versions and image tags recorded in the release manifest.
Release Readiness
This release is customer-facing. The deployment repository published the
platform/v1.2.1 GitHub Release, and the release manifest records approved
manual validation evidence.
That validation covered a staging upgrade from v1.2.0 with Keycloak and external
PostgreSQL. The gateway stack was not enabled in staging and is not covered by it.
Related
- Governance Platform v1.2 — the current release line and its documentation areas
- Release Manifest — the chart versions, image tags, and digests a release pins
- Upgrade — moving an environment to this release
- Rollback — returning to the previous release if the upgrade is not accepted
- Known Issues — release advisories to review before installing
- Governance Platform v1.2.0 Release Notes — the release before this one