Succeeded deploy d16d786 view on GitHub ↗

Add a real web dashboard

Replaces the SHA-server stub with a FastAPI + Jinja2 + Tailwind
dashboard at three pages: projects → deploys → deploy detail with
captured logs.

State persistence: SQLite at $SHIP_STATE_DIR (default ~/.ship/state/),
with per-deploy log files alongside. workflow.py and bootstrap.py
now return their captured stdout/stderr; loop.py records every
working tick (in_progress → succeeded|failed) and appends the log.

Project config gains an optional `github` field used by the UI to
deep-link SHA cells to the corresponding GitHub commit.

The deployed container now runs `python -m ship.web` instead of
`ship.server`. Healthcheck `curl /` still returns 200 OK (now an
HTML page); a dedicated `/health` returns JSON.

Important: state lives where the daemon runs. The dashboard on the
remote will look empty until the daemon is moved into the container.
For real data, run the daemon and dashboard locally on the same host
as the state DB.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deploy of ship-self
Started
3 hr ago 2026-05-09 16:20:44
Finished
3 hr ago 2026-05-09 16:23:32
Duration
2m 47s
claude rc
0

Summary

--- status: succeeded sha: d16d786d642e22c03128b8f9b0ddde828b1222e5 --- Tests passed (38 passed in 2.77s) on first run — no fixes needed. Deploy succeeded: built image, uploaded to test.k3rnel-pan1c.com, services started, server responding on http://test.k3rnel-pan1c.com:31040/ (sha=d16d786). Smoke repo kicked. Promotion: fast-forwarded `release` from a3f4118 to d16d786 and pushed to origin. No history rewrites; release branch now matches main.

Log

raw ↗
No log captured for this run.