| 09-botfights-platform-upgrade |
07 |
infra |
| podman |
| app-catalog |
| rpc |
| botfights |
| jwt |
| arena-federation |
| demo |
|
|
|
| phase |
provides |
| 09-botfights-platform-upgrade (plan 06) |
apps/botfights/manifest.yml at 1.2.1 (generated_secrets JWT_SECRET, default-on ARENA_UPSTREAM_URL), signed catalog published |
|
|
| archi-dev-box running BotFights 1.2.1, installed through package.check-updates + package.update RPC (the real signed-catalog path), verified end-to-end |
| .planning/phases/09-botfights-platform-upgrade/09-DEMO-CHECKLIST.md — the demo-day run sheet |
|
|
| added |
patterns |
|
|
| package.check-updates RPC (no params) refreshes the catalog and reloads manifests when it changed — the automatable equivalent of the UI's 'check for updates' |
| package.update RPC ({id: app_id}) is async; poll `podman inspect <name> --format '{{.Config.Image}}::{{.State.Status}}::{{.State.Health.Status}}'` until image tag + healthy |
|
|
| created |
modified |
| .planning/phases/09-botfights-platform-upgrade/09-DEMO-CHECKLIST.md |
|
|
|
| Used the real RPC path (package.check-updates then package.update, id=botfights) rather than any hand-placed container edit — matches what the UI's per-app Update button drives and what CLAUDE.md/D-04 requires (T-09-34 mitigation). |
| Local RPC auth: ARCHY_HOST=127.0.0.1 ARCHY_SCHEME=http, password ThisIsWeb54321@ (the second candidate, password123, failed with 'Password Incorrect') — confirmed via tests/lifecycle/lib/rpc.bash's rpc_login. |
| x250-dev (100.72.136.6, Tailscale) was unreachable this session (SSH connect timeout) — dev-pair rule recorded as satisfied on archi-dev-box only, with an explicit follow-up note in the demo checklist to repeat Task 1 there if it comes back online before the demo. |
| Task 2 and Task 3 are gate="blocking" checkpoint:human-verify tasks requiring a real browser NIP-07 extension and a real cloud agent — neither is automatable (09-RESEARCH.md Pitfall 5: no window.nostr mock exists anywhere in the test suite). Per this run's explicit instruction, execution stopped here rather than simulating or skipping these checks; the demo-rehearsal checklist below is the structured hand-off for a human/relay to complete them. |
|
|
| id |
description |
requirement |
verification |
human_judgment |
| D1 |
archi-dev-box's botfights container updated to 1.2.1 through package.check-updates + package.update RPC (the normal orchestrator app-update path), not hand-placed |
BOT-04 |
| kind |
ref |
status |
| other |
rpc_call package.check-updates -> {catalog_apps:66, catalog_changed:true, manifests_reloaded:55, refreshed:true}; journalctl: 'app-catalog: release-root signature verified'; rpc_call package.update {id:botfights} -> {status:updating}; podman inspect botfights --format image::status::health -> 146.59.87.168:3000/lfg2025/botfights:1.2.1::running::healthy |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D2 |
JWT_SECRET delivered as a podman secret (per-install, 0600, 64 hex chars), not a plaintext container env value |
BOT-04 |
| kind |
ref |
status |
| other |
podman inspect botfights --format Config.Env -> archy-env-botfights-jwt_secret=******* (masked, secret-type env, no plaintext JWT_SECRET=); podman inspect --format Config.Cmd/Args shows --secret archy-env-botfights-jwt-secret,type=env,target=JWT_SECRET; sudo stat -c '%a %s' /var/lib/archipelago/secrets/botfights-jwt-secret -> 600 64 |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D3 |
Node is a live thin client of the shared arena: local /api/bots matches the arena's fighter set exactly, in both the default and ?type=classic views |
BOT-03 |
|
false |
|
| id |
description |
verification |
human_judgment |
| D4 |
Local database (115 bots / 102,440 fights) preserved untouched by the update — proxy mode never writes to it |
| kind |
ref |
status |
| other |
sudo stat -c '%s %Y' /var/lib/archipelago/botfights/botfights.db -> 367144960 1782916151, byte-identical before and after the update and after a podman restart |
pass |
|
|
false |
|
| id |
description |
verification |
human_judgment |
| D5 |
App survives a podman restart of the container (gate-relevant) and the arena itself is unaffected by all of the above |
|
false |
|
| id |
description |
verification |
human_judgment |
| D6 |
09-DEMO-CHECKLIST.md exists with the arena URL, node UI URL, prompt URL, click paths, and the standalone-fallback command |
| kind |
ref |
status |
| other |
test -f .planning/phases/09-botfights-platform-upgrade/09-DEMO-CHECKLIST.md; grep -c botfights.archipelago-foundation.org -> multiple matches (arena URL, prompt URL, fallback section) |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
rationale |
| D7 |
Real NIP-07 signer login on archi-dev-box: extension approval, no bare-pubkey request, session survives reload (D-01/BOT-01) |
BOT-01 |
|
true |
No window.nostr mock exists in the Playwright suite (09-RESEARCH.md Pitfall 5) — requires a real browser extension (nos2x/Alby) and a human to click through. Not automatable. |
|
| id |
description |
requirement |
verification |
human_judgment |
rationale |
| D8 |
Cross-node fighter visibility confirmed visually: node UI and arena UI show the same fighters/live fight rounds (D-03/BOT-03) |
BOT-03 |
|
true |
Data-parity was proven via curl (D3 above); the remaining check is a human visually confirming the same in a real browser session and watching a live fight's rounds stream incrementally — not automatable from this session. |
|
| id |
description |
requirement |
verification |
human_judgment |
rationale |
| D9 |
A cloud-hosted AI agent builds a working bot from the unified prompt URL alone, registers, and fights, visible in the archi-dev-box UI (D-02/BOT-02) |
BOT-02 |
|
true |
Requires standing up a real cloud agent session outside this execution context and observing whether it can complete the flow from the prompt alone, or reporting the exact point it got stuck. Explicitly a checkpoint:human-verify task in the plan (gate="blocking"). |
|
|
~35min |
2026-07-31 |
awaiting-human-verification |