feat(core): FILIUS' web server and web browser after Java, measured against Java

The servers share ServerAnwendung's frame (server.ts); the web server serves
/webserver with virtual hosts, the browser loads a page and its images over
one connection to port 80 (web.ts); HTTP in Java's text form (http.ts).
WebRun records eleven stories on the new web-lan network, with the server's
files; webJava.test.ts plays them card by card. A program's close is a
request, as Java's schliessen. Not taken from Java: /../ serving any file of
the host; an unreadable request closing the connection without a word.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 16:53:00 +00:00
co-authored by Claude Opus 5.5
parent de3a1d4dfe
commit 4cd5749350
33 changed files with 53601 additions and 216 deletions
+4 -4
View File
@@ -197,7 +197,7 @@ export function expectSameCaptures(
java: Record<string, JavaFrame[]>,
options: {
text?: (text: string) => string;
normalized?: (frames: SeenFrame[]) => SeenFrame[];
normalized?: (frames: SeenFrame[], card: string) => SeenFrame[];
from?: number | undefined;
until?: number | undefined;
tolerance?: number;
@@ -223,7 +223,7 @@ export function expectSameCaptures(
const javaStart = options.starts?.java ?? first(javaByCard);
const from = (options.from ?? Number.NEGATIVE_INFINITY) - javaStart;
const until = (options.until ?? Number.POSITIVE_INFINITY) - javaStart;
const normalized = options.normalized ?? ((frames: SeenFrame[]) => frames);
const normalized = options.normalized ?? ((frames: SeenFrame[], _card: string) => frames);
const window = (frames: SeenFrame[], start: number) =>
frames.filter((frame) => frame.time - start >= from && frame.time - start < until).map((frame) => ({ time: frame.time - start, text: frame.text }));
const inWindow = (time: number, start: number) => time - start >= from && time - start < until;
@@ -249,8 +249,8 @@ export function expectSameCaptures(
}
}
}
const expected = normalized(window(javaList, javaStart));
const actual = normalized(window(engineByCard.get(card)!, engineStart));
const expected = normalized(window(javaList, javaStart), card);
const actual = normalized(window(engineByCard.get(card)!, engineStart), card);
for (let index = 0; index < Math.max(expected.length, actual.length); index += 1) {
expect(actual[index]?.text, `${card} frame #${index + 1}`).toBe(expected[index]?.text);
expect(Math.abs(actual[index]!.time - expected[index]!.time), `${card} time of frame #${index + 1}`).toBeLessThanOrEqual(