Skip to content

Refresh the client mirror with the recomposed dashboard - #50

Merged
w4ffl35 merged 4 commits into
mainfrom
feat/new-dashboard
Sep 19, 2026
Merged

w4ffl35 merged 4 commits into
mainfrom
feat/new-dashboard

Conversation

@w4ffl35

@w4ffl35 w4ffl35 commented Sep 19, 2026

Copy link
Copy Markdown
Member

dash.spikeforge.net is served by this repository: the Dockerfile builds client/ and deploy-hetzner.yml deploys on a push to main under client/**. That mirror was a pre-recompose snapshot, so the site still showed the old card layout.

This replaces client/ source with the current dashboard (docked panes, rail, form system, help popups, donations link), regenerates client/src/protocol/generated.ts from this repository's schemas so the codegen guard still passes, and keeps client/src/serve/serveClient.ts, which exists only here. The in-src test file is dropped from the mirror because it needs @types/node, which this client does not carry.

Verified: cd client && npm run gen:protocol && npm run build succeeds.

A GitHub Actions workflow, triggered by repository_dispatch from
spikeforge-hub-api, that fetches one community-uploaded artifact from a
signed URL and runs it through the existing verification pipeline on a
GitHub-hosted (never self-hosted) runner: bundle checksum/manifest
verification and the weights_only=True load already used by bundle.py,
spikeforge_hub.inspect and .compat, the NIR export and reference-
interpreter drift check spikeforge_hub.import_model already runs for the
curated catalog, and a spikeforge_targets.energy report. It posts a
signed pass/fail report to the hub API's (not yet built)
POST /internal/v1/verifications/{version_id}, naming which step failed
and why on rejection rather than a generic failure message.

Also adds a decompressed-size cap to bundle.py's archive reader, which
had none: a zip bomb was previously an unbounded read into memory rather
than a clean, named rejection.

The self-hosted spikeforge-ci runner (deploy-hetzner.yml) is deliberately
never used here, since it holds the Hetzner deploy key and running
torch.load on a stranger's bytes there is the plan's own worst-case
scenario (plans/hub_accounts_plan.md §7.2).
client/ is the mirror the Docker image builds and dash.spikeforge.net
serves. It was a pre-recompose snapshot: the old card layout, no rail, no
docked panes. This replaces it with the dashboard's current source, and
regenerates the protocol types from this repository's schemas so the
codegen guard still passes. The in-src test file is dropped from the
mirror; it needs @types/node, which this client does not carry.
client/src/serve/serveClient.ts is this repository's typed client for the
spikeforge-serve API; it has no counterpart in the dashboard. Put it back
after the mirror refresh.
@w4ffl35
w4ffl35 enabled auto-merge September 19, 2026 06:41
actions/setup-python and actions/setup-node resolve their cache globs against
the checkout, and the runners' _work is a symlink onto another drive. The
action cannot follow the dependency files there, so every job failed before
its first step: 'No file ... matched to [**/pyproject.toml]' on the Python
jobs and 'Some specified paths were not resolved, unable to cache
dependencies' on the client. CI has been red since 2026-09-16 for that, not
for any change. The desktop workflow already documents the same problem.
@w4ffl35
w4ffl35 merged commit d4ac454 into main Sep 19, 2026
19 checks passed
@w4ffl35
w4ffl35 deleted the feat/new-dashboard branch September 19, 2026 08:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant