Repository navigation
fix(queen): deploy through Railway's own hook, not a pipeline that never worked - #732
Merged
Merged
Conversation
…ver worked
queen-deploy.yml ran 35 times between 2026-04-01 and 2026-04-03 and
succeeded zero times: 32 failures, 3 cancellations, every failure on the
same "Build and Push to Railway" step. It could not have worked. It
pushed an image without ever running `docker login`; it carried the
project id 90c3f0c8-…-5e123abc4567, which is a placeholder rather than
the real e6dfacdc-3eed-48ae-929b-02e87f07f0aa; its `test` job read
`steps.deploy.outputs` from a different job; and on every run it posted
"✅ Queen deployed" to issue 476 — a claim that was never once true.
Railway builds from its own GitHub hook here, the way woody-weed-bot
already ships, so the workflow no longer deploys. It proves the artefact
builds and asserts the bundle was actually emitted, because a build that
emits nothing still exits 0.
What is deployed is apps/queen-web, and only that. The Queen's Zig
backend does not exist as a buildable artefact:
- deploy/Dockerfile.queen runs `zig build … queen-backend`. build.zig
declares 67 steps and none is named that. The nearest, `libqueen`,
builds the libtrinity-queen C API library for the SwiftUI dashboard,
not a server — so /usr/local/bin/queen-backend is never produced.
- the same Dockerfile copies /zig-linux-x86_64-0.15.2 out of a stage
that extracted /zig-x86_64-linux-0.15.1 — different name order and
different version. Only the latter name exists on ziglang.org; the
former 404s. That COPY is why the build died every time.
- src/server_main.zig, the nearest thing to a server, answers every
request with one fixed JSON blob, is wired into no build step, binds
127.0.0.1, and says "for fly.io" in its header.
Dockerfile.queen is therefore left untouched and still broken; it is the
backend's problem to fix, not this change's. The brain has no vehicle yet
for the same reason: it is Zig, and it would ship inside that backend.
Two rules were being broken and are now honoured. The runtime entrypoint
is no longer `sh -c` (no-shell-scripts: entrypoints are binaries, and
this path has no custom container at all), and the container carries
SOUL.md as the Queen Trinity Orchestrator Law requires.
That law was impossible to obey. .gitignore:315 ignores *.md and
re-included only templates/SOUL.md, so a container's own soul could never
be committed without -f. A `!**/SOUL.md` negation fixes the cause rather
than forcing this one file past it. Measured before claiming: 1844 .md on
disk against 1803 tracked, so the existing !docs/** and !.github/
negations already cover almost everything — the gap was narrow, not the
whole documentation tree.
Verified rather than assumed: queen-web builds (exit 0, 253 kB JS), and
`PORT=7311 npm start` answers HTTP 200 on the machine's LAN address, not
just localhost — which proves the 0.0.0.0 bind Railway needs, since a
loopback bind is unreachable from outside the container.
---
Королева деплоится через собственный хук Railway, а не через пайплайн,
который не работал ни разу.
Старый queen-deploy.yml запускался 35 раз и не преуспел ни разу: 32
провала и 3 отмены, все на шаге сборки. Он и не мог работать — пуш образа
без docker login, плейсхолдер вместо ID проекта, чтение outputs из чужого
джоба и комментарий «✅ Queen deployed» в issue 476 на каждом провале.
Теперь Railway собирает сам, а workflow только доказывает, что артефакт
собирается. Выкатывается apps/queen-web и только он: Zig-бэкенда королевы
не существует как собираемого артефакта — шага queen-backend нет среди 67
шагов build.zig, а Dockerfile копирует несуществующий каталог Zig.
Проверено замером: сборка exit 0, старт отвечает HTTP 200 на сетевом
адресе машины, что доказывает бинд 0.0.0.0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gHashTag
force-pushed
the
fix/queen-deploy-railway-hook
branch
from
August 13, 2026 11:09
d87c622 to
34a2953
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The pipeline never worked
queen-deploy.ymlran 35 times between 2026-04-01 and 2026-04-03 and succeeded zero times — 32 failures, 3 cancellations, every failure on the sameBuild and Push to Railwaystep.It could not have worked:
grep -c 'docker login'→ 090c3f0c8-…-5e123abc4567· real:e6dfacdc-3eed-48ae-929b-02e87f07f0aatestjob readssteps.deploy.outputsfrom another job✅ Queen deployedto issue 476 every runThere is no Queen backend to deploy
deploy/Dockerfile.queenrunszig build … queen-backend.build.zigdeclares 67 steps and none is named that. The nearest islibqueen, which builds thelibtrinity-queenC API library for the SwiftUI dashboard — not a server. So/usr/local/bin/queen-backendis never produced./zig-linux-x86_64-0.15.2out of a stage that extracted/zig-x86_64-linux-0.15.1— different name order and different version. Only the latter exists on ziglang.org (200); the former 404s. ThatCOPYis why the build died every time.src/server_main.zig, the nearest thing to a server, answers every request with one fixed JSON blob, is wired into no build step, binds127.0.0.1, and says "for fly.io" in its header.Dockerfile.queenis deliberately left untouched and still broken — that is the backend's problem, not this change's. The brain has no vehicle yet for the same reason: it is Zig and would ship inside that backend.What this does
Railway builds from its own GitHub hook here, the way
woody-weed-botalready ships. The workflow no longer deploys — it proves the artefact builds, and asserts the bundle was actually emitted, because a build that emits nothing still exits 0.Deployed surface is
apps/queen-weband only that.Two rules restored
sh -c(no-shell-scripts) — this path has no custom container at all.SOUL.md, as the Queen Trinity Orchestrator Law requires.That law was impossible to obey:
.gitignore:315ignores*.mdand re-included onlytemplates/SOUL.md, so a container's own soul could never be committed without-f. A!**/SOUL.mdnegation fixes the cause rather than forcing one file past it.Measured before claiming: 1844
.mdon disk against 1803 tracked — the existing!docs/**and!.github/negations already cover nearly everything, so the gap was narrow, not the whole documentation tree.Verified, not assumed
The LAN-address check is the point: a loopback bind is unreachable from outside a container, which is how a Railway service ends up serving 502 while looking healthy locally.
Still needed from a human
Railway CLI is unauthenticated on this machine and
railway loginis interactive. To finish: log in, point service0457ebb4-aec3-4aa0-be6e-bcd8ef0d32e7at this repo with root directoryapps/queen-web, and let the hook build.🤖 Generated with Claude Code