12 Commits

Author SHA1 Message Date
0xJacky
9fa6be8195 fix(app): harden nginx host setup control mode and wizard steps
- Render the control-mode radio group only while editing, so the read-only
  view can no longer mutate the store without passing the 2FA-gated Edit flow
- Show a dedicated message when no private key exists at the given path
  instead of the raw transport error
- Share parseHostAddress between the SSH target and host key steps so
  bracketed IPv6 loopback targets no longer trigger the remote-address warning
- Keep a stale host key scan or connection test from clearing the loading
  state of a newer in-flight run
- Align the E2E spec with the read-only control mode view

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 18:25:29 +08:00
0xJacky
69cfff126b test(e2e): cover the nginx host setup entry points in demo mode
Assert the control-mode editor exposes Host via SSH and the wizard route
stops at the two-factor guard without calling the host setup API.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 18:20:19 +08:00
0xJacky
3203f1c9ea fix(site): allow included TLS certificates 2026-08-21 09:23:14 +08:00
0xJacky
ffc29affca feat(node): show authentication upgrade progress 2026-08-17 19:11:00 +08:00
0xJacky
efd6b715df test(e2e): allow normalized route query state 2026-08-16 22:57:49 +08:00
0xJacky
7e05310281 fix: validate quick config inputs and stabilize e2e 2026-08-16 22:39:24 +08:00
Ugur SEN
2311d1006c test(e2e): cover quick setup from the site editor 2026-08-16 00:48:48 +03:00
0xJacky
acd32b85ee feat(cluster): explain why a node is unreachable 2026-08-13 10:19:04 +08:00
0xJacky
3a52910949 test(demo): cover the site navigation socket and health reasons 2026-08-12 15:06:54 +08:00
0xJacky
324beaab19 test(demo): route the e2e suite through the hash router 2026-08-12 15:06:54 +08:00
0xJacky
030dace064 test(demo): cover the notifier guardrail end to end 2026-08-12 13:37:35 +08:00
0xJacky
c00aa9513a test(demo): add an end-to-end suite for the public demo
The demo now fabricates most of what it shows — geo lookups, upstream and site
probes, connection counters, DNS records, a synthetic access log — and refuses
a set of routes outright. Nothing verified that any of it actually reaches the
screen, so a provider could silently stop being installed and every page would
still look plausible.

Eleven Playwright specs, split into per-module data assertions and the
cross-cutting guardrails: /api/pty returns the typed demo refusal rather than a
404 or a successful upgrade, the simulated shell answers `help` and `nginx -t`
without opening a WebSocket, and the destructive routes return code 40300.

Kept as its own top-level package rather than joining the app/ Bun workspace,
so the frontend build is untouched. Not wired into CI yet: it needs a running
container, and the job shape is worth deciding separately.

Also hides the Preference > Terminal tab in demo mode, which the terminal work
had specified but never implemented — the tab was still reachable and led to a
panel with nothing behind it. The tab renders only once the demo flag has
resolved, so a normal installation is unaffected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 11:18:25 +08:00