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
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Packages without a separate changelog are covered by the cross-package notes below.

## [Unreleased]
## [Unreleased - Patch]

### Changed

- The self-host container now installs `@relaycast/engine` 8.0.0, matching the hosted deployment, and its runbook documents agent-card discovery as working on the standard well-known path rather than as a known defect.

## [8.0.0] - 2026-08-10

Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1.7

ARG RELAYCAST_ENGINE_VERSION=7.0.0
ARG RELAYCAST_ENGINE_VERSION=8.0.0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Record the self-host engine upgrade

This changes every newly built self-host image from engine 7.0.0 to 8.0.0, but the root changelog remains at an empty [Unreleased]. Because this is the first pending user-visible change after the 8.0.0 release, add a concise entry and set the appropriate release-level heading so the upgrade is not omitted from the next release notes.

AGENTS.md reference: AGENTS.md:L38-L40

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in 9a4fd683, which landed after this thread was written (it is pinned to 9a443afc).

CHANGELOG.md at the current head now carries, under ## [Unreleased - Patch]### Changed:

The self-host container now installs @relaycast/engine 8.0.0, matching the hosted deployment, and its runbook documents agent-card discovery as working on the standard well-known path rather than as a known defect.

That is the release-level heading and concise entry AGENTS.md:L38-L40 asks for, so the upgrade will not be omitted from the next release notes.

Worth noting the same commit fixed something more serious that this review round surfaced: the version bump had been done with sed s/7.0.0/8.0.0/g, and 127.0.0.1 contains 7.0.0 as a substring — so the Compose port binding, the in-container healthcheck, the nginx and tunnel examples and four runbook commands had all been rewritten to 128.0.0.1, which is not loopback. Caught independently here and by CodeRabbit. Verified fixed at head.


# Node 22.23.2, pinned to the multi-platform bookworm-slim index so the same
# Dockerfile resolves native linux/amd64 and linux/arm64 images.
Expand All @@ -16,7 +16,7 @@ RUN apt-get update \
WORKDIR /opt/relaycast
COPY docker/package.json docker/package-lock.json ./

# The lockfile pins @relaycast/engine to 7.0.0 and the source-build setting
# The lockfile pins @relaycast/engine to 8.0.0 and the source-build setting
# exercises the C/C++ toolchain for better-sqlite3 on every target architecture.
ENV npm_config_build_from_source=true
RUN test "$(node -p "require('./package.json').dependencies['@relaycast/engine']")" = "$RELAYCAST_ENGINE_VERSION" \
Expand Down
41 changes: 26 additions & 15 deletions RUNBOOK.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ access and does not operate this deployment.

## Operating boundary

The image contains `@relaycast/engine` **7.0.0** on Node 22.23.2 and stores all
The image contains `@relaycast/engine` **8.0.0** on Node 22.23.2 and stores all
state locally in SQLite plus a files directory. It requires an explicit HTTPS
public origin and exits before starting the engine if `--base-url` is missing,
plaintext, single-label, an IP literal, loopback, or in the special-use `.local`
Expand Down Expand Up @@ -59,7 +59,7 @@ docker compose ps
curl --fail --silent --show-error http://127.0.0.1:8787/health
```

The version command must print `7.0.0`, and Compose should eventually report
The version command must print `8.0.0`, and Compose should eventually report
`healthy`. The health response must contain `"ok":true`; its `version` field is
the gateway/application version, not reliable evidence of the installed engine
package version.
Expand All @@ -81,25 +81,36 @@ Move it into Ratify's secret manager, then securely remove the bootstrap file.
Do not repeat this command: workspace names are not unique, so a repeat creates
another workspace and key.

Engine 7.0.0 has a known agent-card discovery defect: the bare standard path
`GET /.well-known/agent-card.json` interprets the leftmost hostname label as the
workspace name. At `relay.ratifyprotocol.com` it therefore looks for `relay`,
not the meaningful workspace name `ratify-protocol`. Host inference also
shadows the documented `/:workspace/.well-known/agent-card.json` route on this
three-label hostname. The only working unauthenticated interim form is:
Agent-card discovery works on the standard path from engine 8.0.0. A
single-tenant deployment — one workspace, which is what this runbook sets up —
answers the bare well-known URL directly, so a counterparty needs no
Relaycast-specific query parameter:

```text
https://relay.ratifyprotocol.com/.well-known/agent-card.json
```

The explicit forms also resolve, and an explicit selector now takes precedence
over host-label inference:

```text
https://relay.ratifyprotocol.com/ratify-protocol/.well-known/agent-card.json
https://relay.ratifyprotocol.com/.well-known/agent-card.json?workspace=ratify-protocol
```

A mismatch returns `workspace_not_found` even while authenticated
`POST /a2a/rpc` works. The query form is documented only as an interim operator
check. A standards-following counterparty will try the bare well-known path, so
do not treat this deployment as federation-ready until the single-tenant
sole-workspace resolver fix is released, this image is pinned to that exact
engine version, and `cast.agentrelay.com` is confirmed on the same version.
Two behaviours worth knowing, because both are deliberate. A deployment holding
more than one workspace does **not** fall back to guessing: it returns
`workspace_not_found` unless a selector identifies one. And a selector that
names a workspace which does not exist also returns `workspace_not_found`
rather than resolving to some other workspace — a typo fails loudly instead of
crossing a tenant boundary.

Earlier engines interpreted the leftmost hostname label as the workspace name,
so `relay.ratifyprotocol.com` looked for a workspace called `relay` and the bare
path returned `workspace_not_found`. If you see that on the bare path, check the
image is on 8.0.0 or later before looking anywhere else.

In engine 7.0.0, `POST /v1/workspaces` is intentionally unauthenticated for
In engine 8.0.0, `POST /v1/workspaces` is intentionally unauthenticated for
initial bootstrap. The tunnel rule below blocks that exact path before the
service becomes public; omitting the rule would allow arbitrary public workspace
creation and unbounded local state growth.
Expand Down
28 changes: 14 additions & 14 deletions docker/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions docker/package.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "relaycast-self-host-image",
"private": true,
"version": "7.0.0",
"version": "8.0.0",
"dependencies": {
"@relaycast/engine": "7.0.0"
"@relaycast/engine": "8.0.0"
}
}
Loading