feat: Telegram fleet alerts, forge sigil scramble, UI polish, agent ops
- Calibrate: per-event Telegram/SMTP toggles, test notification, chat ID help - Notify on agent connect/reconnect, offline/hashrate/rejection, forge complete - Sigil scramble post-forge uniquification and Dispense Reveal ceremony - Full system check, desktop push, BITS/host-binary persistence, Path Tracer - Dashboard/Crucible visual polish, haptics, sacred geometry, mobile nav - README documents alerts, sigil scramble, and pack-usb workflow - USB bundle repacked via pack-usb.bat (AetherForge.exe + synced agent source)
This commit is contained in:
@@ -123,6 +123,14 @@ describe('DashboardPage', () => {
|
||||
expect(await screen.findByText('No miners on the wire')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('shows projection charts and wealth strip with no agents', async () => {
|
||||
renderDashboard();
|
||||
expect(await screen.findByText(/Projection mode/i)).toBeInTheDocument();
|
||||
expect(await screen.findByText('Fleet Hashrate Wave')).toBeInTheDocument();
|
||||
expect(await screen.findByText('Accept Rate Pulse')).toBeInTheDocument();
|
||||
expect(await screen.findByText('Target Fleet Earnings')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('renders stat labels and top agent card', async () => {
|
||||
const agent = mockAgent({ name: 'Alpha Node', hashrate_15m: 1200 });
|
||||
useWebSocketMock.mockReturnValue(wsValue({ agents: [agent] }));
|
||||
|
||||
Reference in New Issue
Block a user