소스 정보
- 저장소
- AzureFoxStudios/wabi
- 최근 소스 활동
- 2026년 8월 28일 15:43
- 감지된 SKILL.md 언어
- 영어
- 스타
- 4
- 포크
- 2
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/AzureFoxStudios/wabi --skill wabi-deploy-gates명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
| name | wabi-deploy-gates |
| description | Verify a Wabi binary before swap: addons, probes, locks. |
| version | 1.1.0 |
| author | Hermes Agent |
| license | MIT |
| metadata | {"hermes":{"tags":["wabi","deploy","verification","addons","wabidb"],"status":"active-2026-08-26"}} |
Companion to devops/wabi-deploy (user-owned; not editable by the agent). This skill captures the deploy-verification lessons that that skill's text does not yet carry. If wabi-deploy is ever adopted by the curator (hermes curator adopt wabi-deploy), merge this content into it and delete this skill.
A plain cargo build --release -p wabi-server silently drops the addons
feature (addons = ["wabi-webhooks", "wabi-lore"], default = [] in
core/crates/wabi-server/Cargo.toml). The build succeeds, SHA changes, all your
other string checks pass — and lore/webhooks routes are just gone from the
binary. Verified incident 2026-08-22: shipped a no-addons binary to Tim; every
pre-swap check was green because they tested wave-specific strings, not addon
strings.
Before ANY scp/swap:
strings target/release/wabi-server | grep -cF "Lore addon initialized"
# >= 1 required (fresh addon build shows ~3). 0 = plain build, STOP.
Never trust: the build command you ran, git history, or "it worked last time". Check the marker on the artifact bytes you are about to ship.
Compile-time vs runtime proof (verified 2026-08-26). The strings gate proves
COMPILE-TIME inclusion only. After the swap,
docker logs wabi-server | grep -cF "Lore addon initialized" can legitimately
return 0 — the init banner is not emitted at the default log level (shipped
artifact had strings=3, post-swap logs=0, addon fully live). A zero log count is
NOT evidence of a failed addon build. Prove RUNTIME presence with the API:
curl -fsS http://127.0.0.1:8088/api/addons
# expect a lore entry: "cargoFeature":"wabi-lore", "enabled":true
On the Tim HOST, container port 3001 is NOT reachable from the shell (only the caddy tunnel port is routed); probe through 8088. From off-host (LAN IP / Tailscale / public), :3001 works. Verified 2026-08-26: full suite green via 8088 during swap verification.
BASE=http://127.0.0.1:8088 # on Tim host; use :3001 (or public URL) from elsewhere
curl $BASE/health # {"status":"ok",...}
curl $BASE/livez # liveness (process up)
curl $BASE/readyz # engine canary — proves WabiDB readable (503 if degraded)
curl $BASE/metrics # Prometheus text; public unless gated
# admin gate check — MUST be 401 unauthenticated:
curl -o /dev/null -w "%{http_code}" $BASE/api/admin/jobs/dead-lettered
A 200 on an admin endpoint without a token means the auth gate broke.
.lock restart deadlock (kanban t_22c8e654)WabiDB open() (core/crates/wabidb/src/engine/mod.rs) writes
data/wabi-server/wabidb/.lock PID-stamped, then refuses boot if it exists.
Nothing ever removes it — not graceful shutdown, not crash paths. Any
container restart policy self-deadlocks: dying run leaves pid-1 lock → next
boot exits Error: engine already running in a loop forever.
Recovery sequence (verified live 2026-08-22):
docker compose stop wabi-server # FULL stop first, not just rm
rm -f data/wabi-server/wabidb/.lock data/wabi-server/.lock
docker compose up -d wabi-server
Removing the lock while the container is still restart-looping does NOT work — each crashed boot rewrites it. Stop → clear → start.
Proper fix (open card): remove own lock on shutdown + treat stale-PID locks as takeable instead of fatal. Existence alone is not liveness.
Checking only the strings for THIS wave's changes ("token reuse detected", "/livez") proves those features shipped — nothing else. A binary swap can gain your feature and silently LOSE another (see Gate 1). Keep a short standing marker list covering every capability the host is supposed to have, and grep all of them against the artifact before swap:
for m in "Lore addon initialized" "/livez" "token reuse detected"; do
printf '%s: %s\n' "$m" "$(strings target/release/wabi-server | grep -cF "$m")"
done
strings/sha256sum on the ~50MB release binary, and multi-part scp+ssh
chains over it, get rejected as "oversized/unparseable inline command payload"
— blocked even under YOLO. Do NOT retry inline and do not hand-type alternatives;
write the operation to a small script and execute it (verified end-to-end
2026-08-26: entire gates→ship→swap→verify chain ran as /tmp/wabi-*.sh
scripts, zero blocks). Keep each script single-purpose (gates / ship / swap /
verify) so a failure pinpoints its stage.
Tailscale SSH checkpoints expire periodically (seen again 2026-08-22, ~daily).
The ssh command hangs until timeout printing
https://login.tailscale.com/a/<hash>. Hand the raw URL to Ronin immediately,
then poll with ssh -o ConnectTimeout=10 tim@100.96.11.45 'echo ok' between
other work. Do not burn retries on long commands while blocked — do local-side
work (builds, kanban cards) during the wait.