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: 14 additions & 0 deletions COMPATIBILITY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Compatibility Contract

## Server v1.6.560 source candidate

Not yet published. Install examples remain on verified published 559.
The candidate consumes published Web Console 1.6.201 / optional bridge 0.2.3
and Engine 0.183.360 original CI artifacts. It adds External Service, DNS Alias
and metadata-only audit flows, corrects the Catalog-validator collection
admission and retains audit events across a rejected typed-write transaction.
Native SQL/Key/role checks and unknown-filter denials are preserved.
Catalog 0.20.17 / Compose 0.14.40 and official Brotli package proof are unchanged.
Combined runtime, role, cross-ID, layout, weak-model and durable-DENY acceptance
remain pending. This does not complete the 243-group frontend inventory.
See the [candidate note](docs/releases/server-1.6.560.md) for identities and scope.


<a id="server-v16559-publication"></a>

## Server v1.6.559 published
Expand Down
69 changes: 69 additions & 0 deletions docs/releases/server-1.6.560.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Server v1.6.560 candidate

Not published or runtime accepted. Install examples stay on published 559.
Both components passed required CI, same-tree merge and immutable publication.
All original public asset bytes were read back anonymously. Server assembly
and designated live acceptance remain separate pending gates.

## Behavior and owner boundaries

The matching Web Console 1.6.201 / bridge 0.2.3 and Engine 0.183.360 add bounded
External Service, DNS Alias and audit metadata workflows. External Service
creation is stopped; hostname and IP modes are mutually exclusive. DNS Alias
creation, local target binding and activation are separate reviewed changes.
Advanced links and incoming-consumer cleanup remain unavailable.

Fix project-scoped native and typed collection admission through the final
Catalog response validator. The actual SQL authorization guard attests only
this known query-preserving validator; unknown/synthetic filters and altered
query/pagination implementations still fail closed. RBAC and Key policy are
unchanged, including explicit denials and cross-project/parent isolation.

Audit queries use the installed broker's existing authorized sources via a
fixed bounded CLI and private stdin. Public tools receive safe metadata, never
cookies, Key secrets, arbitrary URLs/SQL or raw audit payloads. Engine records
the owner's actual query result; payload inspection/export remain human-only.
Catalog/Archive behavior and four independent default-off opt-ins are retained.

Audit events created in a Core write transaction retain their forced durable
spool until the existing independent replayer can commit delivery. A rejected
typed read must remain auditable after its outer write rolls back. The fix
keeps current metadata, capacity and failure behavior without nested account
locks. Source/transaction tests passed; designated live durability is pending.

## Required acceptance: pending

The previous 558 Service-stop failure, 559 post-create collection failure and
their original reports remain recorded. No partial result is promoted to a
whole workflow PASS. The designated 8080 complete Core lifecycle, Catalog
launch/Archive, new domains, affected Key/role/cross-ID, layouts and weak-model
cases remain pending. Retain only unaffected immutable evidence.

The baseline remains 243 business groups and 3,089 frontend inventory rows;
this candidate does not complete that inventory. Browser SBOM coverage retains
its recorded limits. KVM HOLD and explicit human ceremonies are not API grants.

## Upgrade and rollback

Deploy only the new immutable published image after necessary checks. Preserve
existing persistent volumes, origin/session/MFA controls, operator/JVM settings,
restart policy and AppArmor. Take normal database/volume backups and retain the
previous container/image. Never replay uncertain writes on upgrade/rollback;
settle or cancel plans and revoke temporary Keys. A matching database backup
may be required for rollback. Do not delete volumes or plan receipts.

Production, HAProxy, firewall and production data are outside this QA change.
Official Brotli package proof and all other package gates remain exact. No VEX
scope expansion or weakened security threshold is introduced.

## Qualified component coordinates

- Web 1.6.201 / bridge 0.2.3 producer: `24715414f143e2c58cf53084bd84cbea0922798f`; tag source `18acf40d85061533762e8d0d1b9c1f7be69afe9c`.
- Web archive SHA256: `5bc8142d9322657c5cbae782756c3aa5a45b6537074de8749066492fa8947eb8`.
- Runtime SBOM SHA256: `8b837eb330b9815df48b4256d3bf0c4e215864b996e2be40dd707ec532872503`; lock `d255b74a835ab7c0224d12613baacdf021d8b30d46204a71c22d57f35725666f`.
- Bridge archive SHA256: `aad5cadfd3806b0f2c7339a1585a6bd19f3e61585af91dd4da119514775e7e93`; 13 published assets verified.
- Engine v0.183.360 producer: `72230c8b471312377bae968c0c17d63e8ad97ffb`; tag source `d6845eedd1df5ae8e69cc075d80b166bc8d26731`.
- Engine JAR SHA256: `0ebbd517ee43e113f29cbc14fe542aa7c7900ae28d65d63a12c348b7f0ac9a21`; runtime SBOM `088ce2b94ea1c30a6d1e52e600d2ef45258aeb26cdded784407a91020a19f474`.
- Original Engine CI: 408 suites / 3822 tests / zero failure or error / one existing skip; 12 published assets verified.
- Engine provenance is original GitHub artifact/source/tree evidence; its workflow supplies no native SLSA attestation.
- Catalog 0.20.17 and Compose 0.14.40 retain the qualified original pins from Server559; other component/package inputs are unchanged.
56 changes: 28 additions & 28 deletions scripts/check-server-api-explorer-patch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -533,7 +533,7 @@ require_marker "$release_dockerfile" \
SERVER_INCREMENTAL_RELEASE_BASE_MISSING
for web_sbom_release_marker in \
'COPY --chmod=0755 artifacts/verify-web-console-sbom.py /usr/local/bin/verify-web-console-sbom' \
'ARG WEB_CONSOLE_RUNTIME_SBOM_ARTIFACT=web-console-1.6.200-runtime.cdx.json' \
'ARG WEB_CONSOLE_RUNTIME_SBOM_ARTIFACT=web-console-1.6.201-runtime.cdx.json' \
'"${WEB_CONSOLE_RUNTIME_SBOM_ARTIFACT}" "${WEB_CONSOLE_RUNTIME_SBOM_SHA256}" "${web_sbom}";' \
'--lock-sha256 "${WEB_CONSOLE_LOCK_SHA256}" --archive "${web_archive}"' \
'--webmcp-ceiling enabled;' \
Expand Down Expand Up @@ -571,7 +571,7 @@ python3 scripts/test-web-console-sbom.py
python3 server/security/test_web_console_sbom_scan.py

require_marker "$release_dockerfile" \
'ARG SERVER_RELEASE_TAG=v1.6.559' \
'ARG SERVER_RELEASE_TAG=v1.6.560' \
SERVER_INCREMENTAL_RELEASE_DEFAULT_MISSING
require_marker "$release_dockerfile" \
'org.opencontainers.image.version="${SERVER_RELEASE_TAG}"' \
Expand Down Expand Up @@ -629,22 +629,22 @@ require_marker "$publish_workflow" \
'bash source/server/artifacts/verify-host-api-package.sh' \
SERVER_HOST_API_PRODUCER_RELEASE_CHECK_MISSING
require_marker "$release_dockerfile" \
'ARG WEB_CONSOLE_RELEASE_TAG=1.6.200' \
'ARG WEB_CONSOLE_RELEASE_TAG=1.6.201' \
SERVER_INCREMENTAL_WEB_CONSOLE_VERSION_MISSING
require_marker "$release_dockerfile" \
'ARG WEB_CONSOLE_ARTIFACT=web-console-1.6.200.tar.gz' \
'ARG WEB_CONSOLE_ARTIFACT=web-console-1.6.201.tar.gz' \
SERVER_INCREMENTAL_WEB_CONSOLE_ARTIFACT_MISSING
require_marker "$release_dockerfile" \
'ARG WEB_CONSOLE_ARTIFACT_SHA256=97fe46c426cb83263fcfc7f5884c15ca90f7ec3ebec71d9ca023d8b7ad2665c0' \
'ARG WEB_CONSOLE_ARTIFACT_SHA256=5bc8142d9322657c5cbae782756c3aa5a45b6537074de8749066492fa8947eb8' \
SERVER_INCREMENTAL_WEB_CONSOLE_HASH_MISSING
require_marker "$release_dockerfile" \
'ARG WEB_CONSOLE_COMMIT=03e0d7b25b8dfcbc45baecf6d448834016aac649' \
'ARG WEB_CONSOLE_COMMIT=24715414f143e2c58cf53084bd84cbea0922798f' \
SERVER_INCREMENTAL_WEB_CONSOLE_COMMIT_MISSING
require_marker "$release_dockerfile" \
'ARG WEB_CONSOLE_LOCK_SHA256=1797dd27bb7b1c6b86b8689435e916b03523a9fdf45c5178ec7c2ea05706d4bd' \
'ARG WEB_CONSOLE_LOCK_SHA256=d255b74a835ab7c0224d12613baacdf021d8b30d46204a71c22d57f35725666f' \
SERVER_INCREMENTAL_WEB_CONSOLE_LOCK_HASH_MISSING
require_marker "$release_dockerfile" \
'ARG WEB_CONSOLE_RUNTIME_SBOM_SHA256=0ce1f6b99e1e449c545d3d7df65302fdb58d1974fecea6477b20262c2148921c' \
'ARG WEB_CONSOLE_RUNTIME_SBOM_SHA256=8b837eb330b9815df48b4256d3bf0c4e215864b996e2be40dd707ec532872503' \
SERVER_INCREMENTAL_WEB_CONSOLE_SBOM_HASH_MISSING
require_marker "$release_dockerfile" \
"grep -aF 'hostsPage.permissionDenied'" \
Expand All @@ -653,22 +653,22 @@ require_marker "$release_dockerfile" \
'"hostsPage.permissionDenied":"您沒有權限在此環境中新增主機。"' \
SERVER_INCREMENTAL_WEB_CONSOLE_ZH_TW_PERMISSION_MESSAGE_MISSING
require_marker "$build_script" \
'web_console_commit=${WEB_CONSOLE_COMMIT:-03e0d7b25b8dfcbc45baecf6d448834016aac649}' \
'web_console_commit=${WEB_CONSOLE_COMMIT:-24715414f143e2c58cf53084bd84cbea0922798f}' \
SERVER_INCREMENTAL_WEB_CONSOLE_BUILD_COMMIT_MISSING
require_marker "$build_script" \
'web_console_release_tag=${WEB_CONSOLE_RELEASE_TAG:-1.6.200}' \
'web_console_release_tag=${WEB_CONSOLE_RELEASE_TAG:-1.6.201}' \
SERVER_INCREMENTAL_WEB_CONSOLE_BUILD_VERSION_MISSING
require_marker "$build_script" \
'web_console_artifact=${WEB_CONSOLE_ARTIFACT:-web-console-1.6.200.tar.gz}' \
'web_console_artifact=${WEB_CONSOLE_ARTIFACT:-web-console-1.6.201.tar.gz}' \
SERVER_INCREMENTAL_WEB_CONSOLE_BUILD_ARTIFACT_MISSING
require_marker "$build_script" \
'web_console_artifact_sha256=${WEB_CONSOLE_ARTIFACT_SHA256:-97fe46c426cb83263fcfc7f5884c15ca90f7ec3ebec71d9ca023d8b7ad2665c0}' \
'web_console_artifact_sha256=${WEB_CONSOLE_ARTIFACT_SHA256:-5bc8142d9322657c5cbae782756c3aa5a45b6537074de8749066492fa8947eb8}' \
SERVER_INCREMENTAL_WEB_CONSOLE_BUILD_HASH_MISSING
require_marker "$build_script" \
'web_console_lock_sha256=${WEB_CONSOLE_LOCK_SHA256:-1797dd27bb7b1c6b86b8689435e916b03523a9fdf45c5178ec7c2ea05706d4bd}' \
'web_console_lock_sha256=${WEB_CONSOLE_LOCK_SHA256:-d255b74a835ab7c0224d12613baacdf021d8b30d46204a71c22d57f35725666f}' \
SERVER_INCREMENTAL_WEB_CONSOLE_BUILD_LOCK_HASH_MISSING
require_marker "$build_script" \
'web_console_runtime_sbom_sha256=${WEB_CONSOLE_RUNTIME_SBOM_SHA256:-0ce1f6b99e1e449c545d3d7df65302fdb58d1974fecea6477b20262c2148921c}' \
'web_console_runtime_sbom_sha256=${WEB_CONSOLE_RUNTIME_SBOM_SHA256:-8b837eb330b9815df48b4256d3bf0c4e215864b996e2be40dd707ec532872503}' \
SERVER_INCREMENTAL_WEB_CONSOLE_BUILD_SBOM_HASH_MISSING
require_marker "$release_dockerfile" \
'ARG CATALOG_SERVICE_VERSION=0.20.17' \
Expand Down Expand Up @@ -1139,21 +1139,21 @@ require_marker "$build_script" \
'--file server/Dockerfile.web-compose-release' \
SERVER_INCREMENTAL_RELEASE_BUILD_PATH_MISSING
require_marker "$build_script" \
'image=${IMAGE:-pasturestack-validation/server:v1.6.559}' \
'image=${IMAGE:-pasturestack-validation/server:v1.6.560}' \
SERVER_INCREMENTAL_RELEASE_BUILD_VERSION_MISSING
require_marker "$build_script" \
'server_release_tag=${SERVER_RELEASE_TAG:-v1.6.559}' \
'server_release_tag=${SERVER_RELEASE_TAG:-v1.6.560}' \
SERVER_INCREMENTAL_RELEASE_BUILD_DEFAULT_MISSING
require_marker "$build_script" \
'CATTLE_RANCHER_SERVER_VERSION="${server_release_tag}"' \
SERVER_INCREMENTAL_RELEASE_BUILD_RUNTIME_VERSION_MISSING
for release_engine_marker in \
'ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.359' \
'ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.360' \
'ARG ORCHESTRATION_ENGINE_ARTIFACT=cattle.jar' \
'ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=07e7de2548bd98d5209bf3594d69fe5b9a5d7ddba36eed4b6b6e4406022c3f90' \
'ARG ORCHESTRATION_ENGINE_COMMIT=eac3fde5fc7779b6107e2702785120a9c591927b' \
'ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=0ebbd517ee43e113f29cbc14fe542aa7c7900ae28d65d63a12c348b7f0ac9a21' \
'ARG ORCHESTRATION_ENGINE_COMMIT=72230c8b471312377bae968c0c17d63e8ad97ffb' \
'COPY --from=release_artifacts /out/orchestration-engine.jar /tmp/orchestration-engine.jar' \
'ARG ORCHESTRATION_ENGINE_VERSION=0.183.359' \
'ARG ORCHESTRATION_ENGINE_VERSION=0.183.360' \
'sh /usr/share/cattle/verify-engine-archive.sh "${archive}" "${ORCHESTRATION_ENGINE_VERSION}" "${ORCHESTRATION_ENGINE_ARTIFACT_SHA256}"' \
'cattle-resources-${ORCHESTRATION_ENGINE_VERSION}.jar' \
'cattle-app-config-${ORCHESTRATION_ENGINE_VERSION}.jar' \
Expand All @@ -1172,10 +1172,10 @@ for release_engine_marker in \
SERVER_INCREMENTAL_ENGINE_REPLACEMENT_MISSING
done
for release_engine_build_marker in \
'orchestration_engine_release_tag=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.359}' \
'orchestration_engine_release_tag=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.360}' \
'orchestration_engine_artifact=${ORCHESTRATION_ENGINE_ARTIFACT:-cattle.jar}' \
'orchestration_engine_artifact_sha256=${ORCHESTRATION_ENGINE_ARTIFACT_SHA256:-07e7de2548bd98d5209bf3594d69fe5b9a5d7ddba36eed4b6b6e4406022c3f90}' \
'orchestration_engine_commit=${ORCHESTRATION_ENGINE_COMMIT:-eac3fde5fc7779b6107e2702785120a9c591927b}' \
'orchestration_engine_artifact_sha256=${ORCHESTRATION_ENGINE_ARTIFACT_SHA256:-0ebbd517ee43e113f29cbc14fe542aa7c7900ae28d65d63a12c348b7f0ac9a21}' \
'orchestration_engine_commit=${ORCHESTRATION_ENGINE_COMMIT:-72230c8b471312377bae968c0c17d63e8ad97ffb}' \
'CATTLE_CATTLE_VERSION="${orchestration_engine_release_tag}"' \
'cattle-resources-${ORCHESTRATION_ENGINE_VERSION}.jar' \
'< "${server_dir}/artifacts/verify-engine-archive.sh"'; do
Expand Down Expand Up @@ -1694,10 +1694,10 @@ fi
if grep -Fxq '## Current source candidate' README.md; then
for candidate_readme_marker in \
'<a id="current-release"></a>' \
'Server `v1.6.559` is a prepared source candidate, not a published image.' \
'Server `v1.6.560` is a prepared source candidate, not a published image.' \
'run them only after its official release' \
'This candidate is not yet available' \
'ghcr.io/pasturestack/server:v1.6.559'; do
'ghcr.io/pasturestack/server:v1.6.560'; do
require_marker README.md "$candidate_readme_marker" \
SERVER_CURRENT_CANDIDATE_README_MISSING
done
Expand Down Expand Up @@ -2303,7 +2303,7 @@ done
jq -e '
["CVE-2026-107928","CVE-2026-107929","CVE-2026-86409","CVE-2026-86410","CVE-2026-86412","CVE-2026-86414","CVE-2026-87862","CVE-2026-87863","CVE-2026-87864","CVE-2026-87865","CVE-2026-92386","CVE-2026-92387","CVE-2026-92388","CVE-2026-92389","CVE-2026-92390","CVE-2026-92391","CVE-2026-92392","CVE-2026-94266"] as $curl_fixed_cves
| .["@context"] == "https://openvex.dev/ns/v0.2.0"
and .["@id"] == "https://github.com/PastureStack/server/security/openvex/v1.6.559"
and .["@id"] == "https://github.com/PastureStack/server/security/openvex/v1.6.560"
and (.statements | length) == 56
and ([.statements[].vulnerability.name] | length == (unique | length))
and ([.statements[] | select(.status == "fixed") | .vulnerability.name] | sort)
Expand Down Expand Up @@ -2341,7 +2341,7 @@ jq -r '
| @tsv
' "$runtime_vendor_pending" | LC_ALL=C sort -u >"$vendor_pending_fixture"
bash "$vendor_pending_validator" "$runtime_vendor_pending" \
"$vendor_pending_fixture" v1.6.559 >/dev/null
"$vendor_pending_fixture" v1.6.560 >/dev/null
bash scripts/test-vendor-pending-findings.sh >/dev/null
rm -f "$vendor_pending_fixture"
trap - EXIT
Expand Down Expand Up @@ -2430,4 +2430,4 @@ for release_readback_contract in \
fi
done

printf 'SERVER_API_EXPLORER_PATCH_OK release=v1.6.559 base=v1.6.460 engine=0.183.359 web_console=1.6.200 catalog_service=0.20.17 webhook_automation_service=0.10.5 authentication_service=0.4.46 curl=8.18.0-1ubuntu2.8 freemarker=2.3.35 artifact_scan=required vendor_pending=exact-set role_matrix=qa-required locale_layout=qa-required\n'
printf 'SERVER_API_EXPLORER_PATCH_OK release=v1.6.560 base=v1.6.460 engine=0.183.360 web_console=1.6.201 catalog_service=0.20.17 webhook_automation_service=0.10.5 authentication_service=0.4.46 curl=8.18.0-1ubuntu2.8 freemarker=2.3.35 artifact_scan=required vendor_pending=exact-set role_matrix=qa-required locale_layout=qa-required\n'
Loading