Repository navigation
Rust #325: published Compose runs the native server - #920
Conversation
Operator decision (November 1): the published Compose file follows native in 3.0.0. docker-compose.published.yml now runs the native server with MySQL only. Native creates its schema and runs its own maintenance, so there is no bootstrap job, queue worker, scheduler or Redis. Until 3.0.0 is published its default image is the current native release candidate by digest. The PHP 2.x stack moves to docker-compose.php.yml. PHP releases still synchronize it, the PHP release's Compose smoke uses it, and the PHP published-artifact runners and their contract tests now point at it. Native refuses DW_AUTH_BACKWARD_COMPATIBLE=false and an empty DW_AUTH_TOKEN, so the native file omits the former and documents that production needs a strong shared token. The Compose smoke now runs on pull requests that change the file, and its production profile checks that dev-token is refused. NativePublishedComposeContractTest and #907's PublishedServerAutoSelectionTest join the Repository contracts PHPUnit list; the latter had not been run by CI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Security correction required — published Compose starts with a known full-access token on every host interfaceReviewed exact head Rendered with no operator environment,
That combination makes a direct This matters at merge, not only at 3.0.0: the file is downloaded directly from Smallest fail-closed correction:
Evidence from a clean rendered config at this head: {"known_default_token":true,"server_port_has_explicit_host_ip":false,"mysql_host_published":false,"privileged_services":0}
|
Security correction on #920: with no environment the native published file started with the public dev-token on every host interface. It now has no default shared token (Compose refuses to render until DW_AUTH_TOKEN is set) and publishes the API on 127.0.0.1 unless SERVER_BIND_ADDRESS selects an interface. The smoke checks that an unset token refuses to render and that the default binding is loopback, for the native file only. The contract test pins both, and that MySQL publishes no host port. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Security correction applied at
Local checks run: unset-token render refused; contract tests 10/10 in PHPUnit 11; the native stack on rc.2 is healthy under the production profile (admin and worker tokens 200, a wrong token and |
|
|
Security accepts the corrected public-Compose boundary at exact head The file now refuses interpolation without an explicit Independent source/render controls here: The prior Security hold is cleared for these boundaries. No container, listener, database, registry, credential, or production surface was changed by this rereview. |



Operator decision (November 1, #325): the published Docker Compose file and Helm chart follow the native server in 3.0.0. This PR switches Compose. The Helm chart follows in a separate PR.
Native published Compose
docker-compose.published.yml(the file the README tells users to download from main) now runs the native server plus MySQL.ghcr.io/durable-workflow/server-native@sha256:f54e89d7…) until 3.0.0. The release replaces that one line withdurableworkflow/server:3.0.0.DW_SERVER_IMAGEoverrides it.DW_RUST_EXPERIMENTAL=1is set with a comment, because release candidates require it./api/readywith bash's/dev/tcp, because the native image has no curl.server_storagepersists/app/storage(native local payload storage).PHP 2.x stays available
docker-compose.php.yml. It is the same stack, with a header explaining the split.sync-source-release.mjs), and the PHP release's source-free Compose smoke uses it (DW_PUBLISHED_COMPOSE_FILE).Native auth differences (recorded)
DW_AUTH_BACKWARD_COMPATIBLE=falseand an emptyDW_AUTH_TOKEN. Role-only authentication is therefore unavailable on native: the shared token is required and accepted for every role.DW_AUTH_TOKEN.dev-tokengets 401.CI
Published Compose Smokenow also runs on pull requests that change the native file, the smoke script or the workflow.NativePublishedComposeContractTestand Rust #325: keep automatic published-server selection on PHP 2.x #907'sPublishedServerAutoSelectionTestjoin the Repository contracts PHPUnit list, with the matchingcomposer-sinks.jsonline. Mosttests/Unit/*.phpfiles only run in CI when they are listed, and Rust #325: keep automatic published-server selection on PHP 2.x #907's test had not been run by CI until now.Docs: README quickstart, the server reference's Compose sections and the port doc inventory row describe native. The PHP-only procedures that run
artisan(backup and restore, terminal summary recovery) now namedocker-compose.php.yml.Checks run locally
docker compose configpasses, andup --waitreaches healthy (healthcheck works);/api/health,/api/ready, authenticated/api/cluster/info(version3.0.0-rc.2), worker registration, and a clean SIGTERM stop (exit 0);dev-tokenget 401.sync-source-release.mjs --checkpasses.test-source-release.mjspasses 2/3; the third needsphp, which this host lacks.composer_trust_test.pypasses.🤖 Generated with Claude Code