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

<a id="server-v16554-webmcp"></a>

## Server v1.6.554 prepared, not published

The candidate integrates Web Console `1.6.196` and Engine `v0.183.355`.
The build verifies the browser's enabled capability ceiling and off initial
mode against the exact archive. Backend activation remains explicit.
Seven typed tools share current RBAC and per-Key policy checks; service-upgrade
plans require separate authenticated human approval. No general action proxy
or approval tool is exposed. See the [candidate note](docs/releases/server-1.6.554.md)
and [AI collaboration guide](docs/ai-collaboration.md).
Final publication identities and 8080 acceptance will be recorded after release.

<a id="server-v16553-brotli"></a>

## Server v1.6.553 published
Expand Down
40 changes: 24 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,18 @@ upstream history, authorship, licenses, and notices.

<a id="current-release"></a>

## Current release
## Current source candidate

[Server v1.6.553](https://github.com/PastureStack/server/releases/tag/v1.6.553)
is published. It applies the accepted Google Brotli fix for CVE-2026-111497 through the qualified
Ubuntu backport bundle. Only already-installed packages are updated; package sets,
providers, library interfaces and configuration are preserved.
Server `v1.6.554` is a prepared source candidate, not a published image.
It integrates Web Console `1.6.196` and Engine `v0.183.355` for optional,
scoped AI collaboration. New pages start with tools off. Upgrade execution
requires an authenticated owner's separate confirmation; ordinary API Keys
retain their existing permissions. See the [candidate note](docs/releases/server-1.6.554.md).

Web Console `1.6.195` and its original runtime SBOM, Engine `v0.183.354`,
Host API `0.38.8` and Temurin `25.0.5+8` retain their verified inputs.
Node Agent `v1.2.34` uses compatibility base `v0.3.8`. Published Catalog
`v0.3.18` records the qualified component images and their publication evidence.

See its [release note](docs/releases/server-1.6.553.md) and the
[compatibility contract](COMPATIBILITY.md#server-v16553-brotli)
for producer identities, immutable image digests, SBOMs and remaining findings.
The previous published release is
[Server v1.6.553](https://github.com/PastureStack/server/releases/tag/v1.6.553),
with its [release note](docs/releases/server-1.6.553.md) and
[immutable identities](COMPATIBILITY.md#server-v16553-brotli).

Personal API Keys remain available without an accessible environment. See the [Host guide](docs/hosts/README.md) before enrolling a host.

Expand All @@ -49,24 +46,35 @@ and a compatible Linux Node Agent lifecycle. Open a Key's audit from its action
menu. See the [API Key guide](docs/api-keys.md) for policy and audit contracts.
Maintained CLI `0.6.20` propagates rejected requests as nonzero errors. Legacy `0.6.14` can silently exit zero; see [client compatibility](COMPATIBILITY.md#maintained-cli-error-reporting) and check HTTP status explicitly for automation.

## Optional AI collaboration

The Web Console provides seven bounded service tools, an explicit per-page
on/off control and human review of upgrade plans. An optional stdio bridge lets
compatible clients use a dedicated scoped API Key. Both reuse current account
permissions; a Key cannot approve its own upgrade. See the
[AI collaboration guide](docs/ai-collaboration.md) for activation, supported
operations, audit records and rollback.

## Quick start

Public GHCR downloads do not require a registry login. Keep all three named volumes.
These examples target the candidate; run them only after its official release.
This candidate is not yet available from GHCR. Public downloads do not require
a registry login. Keep all three named volumes.

```sh
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.553
ghcr.io/pasturestack/server:v1.6.554
```

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

```yaml
services:
pasturestack-server:
image: ghcr.io/pasturestack/server:v1.6.553
image: ghcr.io/pasturestack/server:v1.6.554
restart: unless-stopped
ports:
- "8080:8080"
Expand Down
3 changes: 3 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ runtime gates have passed.

## Release notes

- [Server v1.6.554 candidate](releases/server-1.6.554.md) — optional seven-tool
AI collaboration with scoped Keys, human approval and current authority checks.

- [Server v1.6.553](releases/server-1.6.553.md) — published qualified Brotli
security backports, with exact artifact identities and scoped QA evidence
recorded separately from component publication.
Expand Down
74 changes: 74 additions & 0 deletions docs/ai-collaboration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Optional AI collaboration

Server v1.6.554 combines Web Console 1.6.196 and Engine 0.183.355. The supported
tools are `find_stacks`, `find_services`, `get_service`,
`update_service_description`, `preview_service_upgrade`,
`apply_service_upgrade` and `get_operation`. Other platform operations remain
available through the normal UI/API, not through a generic AI proxy.

## Activation

Append the following properties to the deployment's existing `JAVA_OPTS`,
preserving its other arguments, and recreate only the Server container with
the same volumes, network, restart policy and security settings:

```text
-Dapi.ai.service.upgrade.enabled=true -Dapi.ai.bridge.enabled=true
```

The first property enables the upgrade-plan API. The second permits dedicated
AI bridge Keys. Both default to false. Disabling the bridge does not remove
ordinary account/API Key permissions or alter an ordinary service API.

The supplied Web Console supports the enabled build profile but starts each
new page with native browser tools off. Use the header's AI collaboration panel
to select read-only or enabled mode. Native browser support requires a secure
context and feature detection; unsupported browsers can still review plans and
use the optional stdio client. Do not disable browser security or install a
polyfill to force native support.

For custom Web Console builds, `WEBMCP_MODE` is the build capability ceiling,
not the initial user setting. An off build does not register browser tools.
The release archive records the ceiling and initial mode in `webmcp-build.json`.

## Scoped clients and approval

Create an **AI collaboration bridge** Key in the existing Key editor. Start
from full access or deny-by-default and choose permitted resources and
operations by name. Its maximum authority is always the owner's current role
and membership. To bootstrap a scoped client, grant read on the selected
environment resource as well as the intended stack/service operations; an
environment-resource rule does not grant all its child stacks.

Install the standalone bridge source archive and configure the client as
described in the [bridge guide](https://github.com/PastureStack/web-console/blob/main/bridge/README.md).
Keep the credential file local to that client. The bridge accepts HTTPS, with
an HTTP exception only for loopback development connections. It does not take
browser cookies, general-purpose Keys, arbitrary URLs or an approval command.

The client finds a named service and previews the target image. The Key owner
reviews the target and changes in the normal authenticated UI, then explicitly
approves. The client applies that plan and reads the same operation until
`verifiedResult=true`. Approval expires; changed targets, policy revisions,
revocation or lost permissions require a new valid decision. An uncertain
response is not permission to submit another upgrade.

Description updates use the captured expected description and preserve the
other service settings. A conflict requires reading the current value again.
Do not automatically retry an uncertain write.

## Audit and disabling

Per-Key audit distinguishes the server's authorization decision, the HTTP
result and the later operation result. Client-reported tool events are labelled
separately; an ALLOW decision or accepted request is not proof of completion.
Credentials, OTPs and description contents are not tool audit payloads.

To stop native tools, select off in the panel. Before disabling the backend or
downgrading, let accepted operations reach a terminal state, cancel unused
plans, and revoke the dedicated bridge Keys. Stop local bridge processes and
remove their private credential files when no longer needed. Retain the normal
database/volume backup and previous Server image. Follow the
[API Key rollback guide](upgrades/api-key-policy-rollback.md); do not assume an
older Engine understands a newer Key policy or restore an older database while
clients continue sending requests.
7 changes: 4 additions & 3 deletions docs/performance/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ The following example is appropriate as a starting point for a dedicated
16-vCPU host with about 32 GiB of RAM. It is not a universal performance
profile; measure the real workload before increasing it further.

The example uses the published numeric Server `v1.6.553` image.
See the [release note](../releases/server-1.6.553.md) and the
The example targets the Server `v1.6.554` candidate; run it only after its official release and image have been published and read back.
The candidate is not yet available from GHCR.
See the [release note](../releases/server-1.6.554.md) and the
[current release](../../README.md#current-release) for component versions and
release details. Preserve the existing runtime overrides and all three named
volumes during an upgrade or restart.
Expand All @@ -20,7 +21,7 @@ evidence is not a performance benchmark; measure the actual workload.
```yaml
services:
pasturestack-server:
image: ghcr.io/pasturestack/server:v1.6.553
image: ghcr.io/pasturestack/server:v1.6.554
restart: unless-stopped
ports:
- "8080:8080"
Expand Down
61 changes: 61 additions & 0 deletions docs/releases/server-1.6.554.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Server v1.6.554 candidate

Prepared source only; no Server image or release has been published.
The release workflow records the final image digest and source
revision only after its required checks pass.

## Verified component inputs

- Web Console `1.6.196`: producer `4e3e4d51db003ef7b456166084d425bfb06e1518`,
archive SHA256 `4f0a550c2754e244cbf77f380c5c138150687988791e063bbf39ce0150d880fa`.
- Engine `v0.183.355`: producer `9ea138d1db1718cf65157c9564c379e62bafe9a0`,
`cattle.jar` SHA256 `a7f651f84a9fe6deef2c9f66f50c13c70e450e25f9dfa6fb59129b2681f9f54f`.

This release integrates Web Console `1.6.196` and Engine `v0.183.355` for optional
AI collaboration. Engine uses official Guava `33.7.2-jre` for
`CVE-2026-102554`; assembly verifies the exact nested artifact and rejects older
or additional Guava jars. Other component versions and the existing security backport
baseline are retained. The build recipe pins component commits, archive hashes
and the Web Console runtime SBOM; the bridge has a separate source archive and
SBOM because its Node.js process is not part of the browser bundle.

Seven typed tools provide stack/service discovery, a bounded service read,
conditional description updates, and service-upgrade preview, apply and status.
New browser pages start with tools off. The owner enables them explicitly;
upgrade plans require a separate authenticated human confirmation. The stdio
bridge uses a dedicated scoped Key, pins its policy revision, and cannot approve
its own plans. Current role, scope, expiry and revocation checks remain active.

Upgrade completion includes replacement-instance readiness and removal of the
old instance's ports, network attachments and mounts. Named/shared volume data
is preserved. Normal live storage transitions use their existing authorization;
the stricter retired-instance path does not add a general delete grant.

## Bounded pre-release acceptance

The isolated candidate completed two consecutive scoped-Key image upgrades and
return to its original image, a weak-model upgrade through human confirmation,
and an ordinary GENERAL/FULL Key upgrade as a control. Launch settings and
mounted data were retained; retired instances and their live ports were gone.
Server restart and browser refresh retained service state and data. Native
tool registration, explicit off/read-only/enabled modes, role/scope rejection,
conditional-description conflicts and per-Key audit were checked separately.

The new collaboration panel passed 78 locale/theme/width cases, including the
automatic theme's day/night timer transitions. This is scoped acceptance of the
new tools and affected UI, not completion of every existing frontend feature or
the entire planned permission matrix. Rejected pre-confirmation requests are
expected negative tests, not successful upgrades.

## Activation, upgrade and rollback

Follow the [AI collaboration guide](../ai-collaboration.md) for the opt-in backend
properties, dedicated Key and client setup. Keep the existing Compose
environment, HTTPS origin, ports, AppArmor, restart policy and all three named
volumes. Do not use a runtime bundle override or `docker compose down -v`.

Before disabling the backend or downgrading, let accepted operations reach a
terminal state, cancel unused plans and revoke the dedicated bridge Keys. Keep
the preceding image and matching database/volume backup. The existing
[API Key rollback requirements](../upgrades/api-key-policy-rollback.md) still
apply; an old Engine must not receive newer policy-bearing Keys unnoticed.
Loading