feat(core): the pages of routers and home routers after Java, measured against Java

Routers and home routers start a web server on port 80 with Java's index,
log and routes pages in the project's language (routerPages.ts); the
firewall keeps a log per node that outlives a new start; RIP routes carry
the telling router's public address. TCP counts sequence numbers and
segments in Java's characters, not bytes. RouterWebRun records six stories,
with firewalls now built by ScenarioNetwork. Not taken from Java: its router
server sometimes never listening (a race in setAktiv), and </titel>.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 17:41:52 +00:00
co-authored by Claude Opus 5.5
parent 4cd5749350
commit 7dac57cbbe
29 changed files with 20398 additions and 39 deletions
+6 -3
View File
@@ -12,9 +12,11 @@
// follows those threads, so it is not compared. Free ports — a client's, and the WAN port
// the router draws for an entry — are Java's random and the engine's seed:
// both are compared as "port". Java numbers the TCP sockets' initial
// sequence numbers over all sockets, and its home router's web server (not
// in the engine yet) takes the first: each is compared by the order it first
// shows in. Frames that show within TIE_MILLISECONDS of each other Java's
// sequence numbers over all sockets; its home router's web server takes the
// first when it listens — in these runs it did not (setAktiv wakes its thread
// only when it already waits), in the engine it always does: each initial
// number is compared by the order it first shows in, and in the tables only
// below the millions. Frames that show within TIE_MILLISECONDS of each other Java's
// packet log writes in any order; they are compared sorted by their text.
import { readFileSync } from 'node:fs';
@@ -265,6 +267,7 @@ describe('NAT as Java FILIUS runs it', () => {
expectSameCaptures(engine, scenario, java.frames, {
normalized: withPlaceholders,
tables: measured,
cell: (text) => text.replace(/\b\d+\.(\d{3}\.\d{3})\b/g, 'n.$1'),
tolerance: TCP_STORIES.has(name) ? TCP_TOLERANCE_MILLISECONDS : GAP_TOLERANCE_MILLISECONDS,
});