Improve portable launch, forge persistence, and operator auth UX.

Persist build extra_files for Build Manager history, print dashboard login on every start, add libp2p for Mesh P2P forge, defer WebSocket until login, and split devrun.bat from LAUNCH.bat with USB deck auto-detection.
This commit is contained in:
AetherForge
2026-05-31 18:56:43 -07:00
parent 2f528229f2
commit feba06e008
80 changed files with 2897 additions and 675 deletions

View File

@@ -6,6 +6,7 @@ import { cleanup, render, screen, waitFor, fireEvent } from '@testing-library/re
import userEvent from '@testing-library/user-event';
import { MemoryRouter } from 'react-router-dom';
import { type ReactNode } from 'react';
import { routerFuture } from '../routerFuture';
import { mockAgent, mockServerInfo } from '../test/fixtures';
import { api } from '../api/client';
import { downloadApiFile, downloadAuthedFile } from '../api/download';
@@ -169,7 +170,9 @@ describe('DownloadButton', () => {
);
const btn = screen.getByRole('button', { name: 'Save' });
await userEvent.setup().click(btn);
expect(screen.getByRole('button', { name: 'Downloading…' })).toBeDisabled();
await waitFor(() => {
expect(screen.getByRole('button', { name: 'Downloading…' })).toBeDisabled();
});
await waitFor(() => expect(downloadApiFileMock).toHaveBeenCalledWith('/api/x', 'a.bin'));
});
@@ -645,7 +648,7 @@ describe('VisualComponents', () => {
it('ForgeCalibrateCompare links to routes', () => {
render(
<MemoryRouter>
<MemoryRouter future={routerFuture}>
<ForgeCalibrateCompare />
</MemoryRouter>
);
@@ -697,7 +700,7 @@ describe('SystemStatusBar', () => {
it('shows server and fleet pills after poll', async () => {
render(
<MemoryRouter>
<MemoryRouter future={routerFuture}>
<SystemStatusBar />
</MemoryRouter>
);
@@ -780,7 +783,7 @@ describe('Layout', () => {
it('renders nav links and children', async () => {
render(
<MemoryRouter initialEntries={['/dashboard']}>
<MemoryRouter initialEntries={['/dashboard']} future={routerFuture}>
<Layout>
<div>page body</div>
</Layout>