Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ upstream history, authorship, licenses, and notices.

## Current release

Server `v1.6.519` packages Web Console `1.6.181`
and Orchestration Engine `v0.183.335`. API Keys support full, custom and closed
Server `v1.6.520` packages Web Console `1.6.181`
and Orchestration Engine `v0.183.336`. API Keys support full, custom and closed
policies, optional expiry, and key-scoped durable audit records. Their permissions
remain bounded by the owner's current role and environment access. Delegated
terminal/log access requires the verified Host API audit capability and the
Expand All @@ -35,7 +35,7 @@ Audit export closes its own menu before locking the request, allowing consecutiv
JSON, CSV and XLSX downloads without leaving a disabled menu open.
Key scope choices use the viewer's authorized environment list. Environment,
stack and resource selectors close before dependent loading or verification.
See the [release note](docs/releases/server-1.6.519.md) for exact
See the [release note](docs/releases/server-1.6.520.md) for exact
component identities and verification boundaries. A version or packaged feature
does not establish that every resource/role/hardware combination has been tested.

Expand All @@ -49,7 +49,9 @@ is always the Key owner's current account/environment RBAC; a Key never grants
an additional role. Existing legacy Keys are not automatically narrowed on upgrade.
New Key secrets are shown once at creation and are not returned by later lists or
details. Per-Key audit separates authorization, the HTTP response and any later
job/stream completion. Environment-Key audit rechecks live Engine access in
job/stream completion. A successful WebSocket upgrade is recorded as a successful
HTTP `101` handshake, not as proof of the stream's later completion.
Environment-Key audit rechecks live Engine access in
Engine-verified project contexts; a caller-supplied project header is not a grant.
Open a Key's audit from its action menu; the close control follows the audit
filters, results and details, below the audit block.
Expand All @@ -68,15 +70,15 @@ docker run -d --name pasturestack-server --restart unless-stopped -p 8080:8080 \
-v pasturestack-cattle:/var/lib/cattle \
-v pasturestack-mysql:/var/lib/mysql \
-v pasturestack-mysqllog:/var/log/mysql \
ghcr.io/pasturestack/server:v1.6.519
ghcr.io/pasturestack/server:v1.6.520
```

For HTTPS termination at a reverse proxy, set the exact public origin:

```yaml
services:
pasturestack-server:
image: ghcr.io/pasturestack/server:v1.6.519
image: ghcr.io/pasturestack/server:v1.6.520
restart: unless-stopped
ports:
- "8080:8080"
Expand Down
33 changes: 33 additions & 0 deletions docs/releases/server-1.6.520.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Server v1.6.520

Packages Orchestration Engine `v0.183.336` and the unchanged Web Console
`1.6.181`. This patch fixes audit classification for successful WebSocket
upgrades. An HTTP `101` response now records `SUCCEEDED` for the response phase;
it does not claim that the stream or a later operation completed successfully.
Explicit `DENY`, preview suppression, failed/cancelled operations, and ordinary
HTTP failure classifications remain intact. The change neither grants access
nor weakens revocation, expiry, MFA or the Key owner's live permissions.

## Verification scope

The Engine's focused audit suite covers 30 tests, including HTTP `101`, `100`,
`200`, `202`, denied requests, previews, and explicit operation outcomes.
The defect was reproduced through a real Key-authenticated subscription: the
connection opened and received server pings, then the server closed it after
the Key was revoked, while the successful handshake had been mislabelled as a
failure. Publication and deployment evidence must confirm the corrected audit
classification on the packaged image; source tests alone are not that evidence.

This patch does not change the console, authentication service, proxy, catalog,
node packages, database schema, or deployment settings. Existing pagination and
membership-revocation evidence remains scoped to the resources and roles it
actually covered; it is not a claim of whole-matrix acceptance.

## Upgrade and rollback

Use `ghcr.io/pasturestack/server:v1.6.520` after its immutable release is
published. Preserve the existing environment variables, volumes, network,
restart policy and security options. No database migration is introduced.
The compatible prior release `v1.6.519` is the rollback target; rolling back
restores the known HTTP `101` audit-classification defect. Do not roll back to
a policy-unaware release: follow the [API Key recovery guidance](../upgrades/api-key-policy-rollback.md).
14 changes: 7 additions & 7 deletions server/Dockerfile.web-compose-release
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,9 @@ ARG WEBHOOK_AUTOMATION_SERVICE_VERSION=0.10.4
ARG WEBHOOK_AUTOMATION_SERVICE_ARCHIVE_SHA256=49c4579829a04e758045fae02a5a9fca12bb0ba3af0d5e979cf9eb97f23a88a9
ARG WEBHOOK_AUTOMATION_SERVICE_BINARY_SHA256=98c7faea665b7eb95206b8c73a6f47d644c5d2d0eae53f274f6a15faf5205744
ARG ORCHESTRATION_ENGINE_RELEASE_BASE_URL=https://github.com/PastureStack/orchestration-engine/releases/download
ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.335
ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.336
ARG ORCHESTRATION_ENGINE_ARTIFACT=cattle.jar
ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=98a665f59bced8f7c084e786280100e0571390b04eeffad140e633b463d8a204
ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=bd0dabf0bd87a859b97941657ae18e8dd551e390697494348c101782a508f136
ARG COMPOSE_EXECUTOR_RELEASE_BASE_URL=https://github.com/PastureStack/compose-cli/releases/download
ARG COMPOSE_EXECUTOR_VERSION=0.14.37
ARG COMPOSE_EXECUTOR_ARCHIVE_SHA256=5ff465601930218f531885a384f231d969033e4cef794ce33d16bfe24e5c1c81
Expand Down Expand Up @@ -565,9 +565,9 @@ FROM ${BASE_IMAGE}

ARG SOURCE_DATE_EPOCH
ARG PASTURESTACK_SERVER_REVISION
ARG SERVER_RELEASE_TAG=v1.6.519
ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.335
ARG ORCHESTRATION_ENGINE_VERSION=0.183.335
ARG SERVER_RELEASE_TAG=v1.6.520
ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.336
ARG ORCHESTRATION_ENGINE_VERSION=0.183.336
ARG ENGINE_READONLY_SCHEMA_SHA256=7f274219e8dd9c6d750a408a6edec1448b564f4b16ba2204c425c5b45cec2233
ARG ENGINE_RESTRICTED_SCHEMA_SHA256=f854ba99260f29e324ab7446a8592996946038920ac9bcf17689d98d1ebc5e51
ARG HOST_API_VERSION=0.38.5
Expand Down Expand Up @@ -606,8 +606,8 @@ ARG WEBHOOK_AUTOMATION_SERVICE_VERSION=0.10.4
ARG WEBHOOK_AUTOMATION_SERVICE_COMMIT=400118b893843d2a7d7c65cc70c3449d76c4a8d8
ARG WEBHOOK_AUTOMATION_SERVICE_ARCHIVE_SHA256=49c4579829a04e758045fae02a5a9fca12bb0ba3af0d5e979cf9eb97f23a88a9
ARG WEBHOOK_AUTOMATION_SERVICE_BINARY_SHA256=98c7faea665b7eb95206b8c73a6f47d644c5d2d0eae53f274f6a15faf5205744
ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=98a665f59bced8f7c084e786280100e0571390b04eeffad140e633b463d8a204
ARG ORCHESTRATION_ENGINE_COMMIT=8fd5e7d3021507647064da1ae9c9c3a6eeb4c725
ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=bd0dabf0bd87a859b97941657ae18e8dd551e390697494348c101782a508f136
ARG ORCHESTRATION_ENGINE_COMMIT=1c7d4537becfd578d568582564b72e7c4d0b1e93
ARG HOST_PROVISIONER_VERSION=0.39.8
ARG HOST_PROVISIONER_COMMIT=385e5b536c108f17fdfcdec84c01750a5be5ab1c
ARG HOST_PROVISIONER_ARCHIVE_SHA256=d775f36a613b1a486a5e60d6ad61fdbd1ebb4bd22422cbb6dcb70fdd7c4abf0c
Expand Down
10 changes: 5 additions & 5 deletions server/build-api-explorer-patch-image.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ if [[ -n "$(git status --porcelain --untracked-files=normal)" ]]; then
fi

revision=${PASTURESTACK_SERVER_REVISION:-$(git rev-parse HEAD)}
server_release_tag=${SERVER_RELEASE_TAG:-v1.6.519}
server_release_tag=${SERVER_RELEASE_TAG:-v1.6.520}
source_date_epoch=${SOURCE_DATE_EPOCH:-$(git show -s --format=%ct HEAD)}
base_image=${BASE_IMAGE:-ghcr.io/pasturestack/server:v1.6.460@sha256:c855af8aea232dacc5bb6df68e2271d482c68b53c43ab0c108ec19118f5ab403}
orchestration_engine_release_base_url=${ORCHESTRATION_ENGINE_RELEASE_BASE_URL:-https://github.com/PastureStack/orchestration-engine/releases/download}
orchestration_engine_release_tag=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.335}
orchestration_engine_release_tag=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.336}
orchestration_engine_artifact=${ORCHESTRATION_ENGINE_ARTIFACT:-cattle.jar}
orchestration_engine_artifact_sha256=${ORCHESTRATION_ENGINE_ARTIFACT_SHA256:-98a665f59bced8f7c084e786280100e0571390b04eeffad140e633b463d8a204}
orchestration_engine_commit=${ORCHESTRATION_ENGINE_COMMIT:-8fd5e7d3021507647064da1ae9c9c3a6eeb4c725}
orchestration_engine_artifact_sha256=${ORCHESTRATION_ENGINE_ARTIFACT_SHA256:-bd0dabf0bd87a859b97941657ae18e8dd551e390697494348c101782a508f136}
orchestration_engine_commit=${ORCHESTRATION_ENGINE_COMMIT:-1c7d4537becfd578d568582564b72e7c4d0b1e93}
orchestration_engine_version=${orchestration_engine_release_tag#v}
engine_readonly_schema_sha256=${ENGINE_READONLY_SCHEMA_SHA256:-7f274219e8dd9c6d750a408a6edec1448b564f4b16ba2204c425c5b45cec2233}
engine_restricted_schema_sha256=${ENGINE_RESTRICTED_SCHEMA_SHA256:-f854ba99260f29e324ab7446a8592996946038920ac9bcf17689d98d1ebc5e51}
Expand Down Expand Up @@ -101,7 +101,7 @@ usage_telemetry_agent_archive_sha256=${USAGE_TELEMETRY_AGENT_ARCHIVE_SHA256:-5ce
usage_telemetry_agent_binary_sha256=${USAGE_TELEMETRY_AGENT_BINARY_SHA256:-e62a21270142181315293d7e11482288ffe8fc4d91cc8fe07dacc90b461f3709}
supported_docker_range='~v1.12.3 || ~v1.13.0 || ~v17.03.0 || ~v17.06.0 || ~v17.09.0 || ~v17.12.0 || ~v18.03.0 || ~v18.06.0 || ~v18.09.0 || ~v19.03.2 || v24.0.9 || >=v29.4.1 <=v29.7.2 || v29.8.0'
newest_docker_version=v29.8.0
image=${IMAGE:-pasturestack-validation/server:v1.6.519}
image=${IMAGE:-pasturestack-validation/server:v1.6.520}
build_options=()

[[ "$revision" =~ ^[0-9a-f]{40}$ ]]
Expand Down
4 changes: 2 additions & 2 deletions server/build-component-candidate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ for name in "${required[@]}"; do
case "$name" in *_COMMIT) [[ ${!name} =~ ^[0-9a-f]{40}$ ]] ;; *) [[ ${!name} =~ ^[0-9a-f]{64}$ ]] ;; esac
export "$name"
done
export SERVER_RELEASE_TAG=${SERVER_RELEASE_TAG:-v1.6.519}
export ORCHESTRATION_ENGINE_RELEASE_TAG=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.335}
export SERVER_RELEASE_TAG=${SERVER_RELEASE_TAG:-v1.6.520}
export ORCHESTRATION_ENGINE_RELEASE_TAG=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.336}
export ORCHESTRATION_ENGINE_ARTIFACT=cattle.jar
export WEB_CONSOLE_RELEASE_TAG=${WEB_CONSOLE_RELEASE_TAG:-1.6.181}
export WEB_CONSOLE_ARTIFACT="web-console-${WEB_CONSOLE_RELEASE_TAG}.tar.gz"
Expand Down
2 changes: 1 addition & 1 deletion server/security/openvex.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@context": "https://openvex.dev/ns/v0.2.0",
"@id": "https://github.com/PastureStack/server/security/openvex/v1.6.519",
"@id": "https://github.com/PastureStack/server/security/openvex/v1.6.520",
"author": "PastureStack Security",
"timestamp": "2026-10-02T22:05:00Z",
"version": 51,
Expand Down
2 changes: 1 addition & 1 deletion server/security/vendor-pending.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"release": "v1.6.519",
"release": "v1.6.520",
"generatedAt": "2026-10-10T00:00:00Z",
"policy": {
"allowedSeverities": [
Expand Down