feat(editor): F4.5b the device sheet for routers and home routers

Measured first: SheetRun now types into FILIUS' router and home router
panels, records five forwarding tables (holeTabelle) and steps in the
panel's table. Java turns a card address that passes the pattern but not
IP.ipCheck (".0.0.1") into null and the router panel throws; an empty
gateway is marked red yet taken; a refused table cell is stored as null;
a home router's DHCP client leaves its DHCP server running. None of the
nulls is adopted. The core's routeTableRows matches all five tables.

- doc: card addresses (the first card mirrored in the device's settings),
  router gateway, RIP, manual routes (a new row once all four cells pass,
  a cell, removal); the sheet reads cards with what their cable joins and
  the whole table
- editor: Java's tabs (general, each card titled by its address, the
  forwarding table greyed out under RIP; general, LAN, WAN on a home
  router); the open card's cable drawn active in Java's green

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-03 11:51:03 +00:00
co-authored by Claude Opus 5.5
parent 9b7ec2fc72
commit eff9433673
22 changed files with 2201 additions and 119 deletions
+794 -2
View File
@@ -692,12 +692,804 @@
"marked": false,
"stored": "80",
"shown": "80"
},
{
"device": "router",
"field": "name",
"input": "R1",
"start": "Vermittlungsrechner",
"marked": false,
"stored": "R1",
"shown": "R1"
},
{
"device": "router",
"field": "name",
"input": "",
"start": "Vermittlungsrechner",
"marked": false,
"stored": "",
"shown": ""
},
{
"device": "router",
"field": "ip",
"input": "10.0.0.1",
"start": "192.168.0.10",
"marked": false,
"stored": "10.0.0.1",
"shown": "10.0.0.1"
},
{
"device": "router",
"field": "ip",
"input": "010.000.000.001",
"start": "192.168.0.10",
"marked": false,
"stored": "10.0.0.1",
"shown": "10.0.0.1"
},
{
"device": "router",
"field": "ip",
"input": "10..0.0.1",
"start": "192.168.0.10",
"marked": true,
"stored": "192.168.0.10",
"shown": "192.168.0.10"
},
{
"device": "router",
"field": "ip",
"input": ".0.0.1",
"start": "192.168.0.10",
"marked": false,
"stored": null,
"shown": "",
"error": "NullPointerException"
},
{
"device": "router",
"field": "ip",
"input": "+10.0.0.1",
"start": "192.168.0.10",
"marked": true,
"stored": "192.168.0.10",
"shown": "192.168.0.10"
},
{
"device": "router",
"field": "ip",
"input": "256.0.0.1",
"start": "192.168.0.10",
"marked": true,
"stored": "192.168.0.10",
"shown": "192.168.0.10"
},
{
"device": "router",
"field": "ip",
"input": " 10.0.0.1",
"start": "192.168.0.10",
"marked": true,
"stored": "192.168.0.10",
"shown": "192.168.0.10"
},
{
"device": "router",
"field": "ip",
"input": "10.0.0.1 ",
"start": "192.168.0.10",
"marked": true,
"stored": "192.168.0.10",
"shown": "192.168.0.10"
},
{
"device": "router",
"field": "ip",
"input": "",
"start": "192.168.0.10",
"marked": true,
"stored": "192.168.0.10",
"shown": "192.168.0.10"
},
{
"device": "router",
"field": "ip",
"input": "10.0.0.1.",
"start": "192.168.0.10",
"marked": true,
"stored": "192.168.0.10",
"shown": "192.168.0.10"
},
{
"device": "router",
"field": "mask",
"input": "255.255.0.0",
"start": "255.255.255.0",
"marked": false,
"stored": "255.255.0.0",
"shown": "255.255.0.0"
},
{
"device": "router",
"field": "mask",
"input": "255.0.255.0",
"start": "255.255.255.0",
"marked": false,
"stored": "255.0.255.0",
"shown": "255.0.255.0"
},
{
"device": "router",
"field": "mask",
"input": "256.0.0.0",
"start": "255.255.255.0",
"marked": true,
"stored": "255.255.255.0",
"shown": "255.255.255.0"
},
{
"device": "router",
"field": "mask",
"input": "255..255.0.0",
"start": "255.255.255.0",
"marked": true,
"stored": "255.255.255.0",
"shown": "255.255.255.0"
},
{
"device": "router",
"field": "mask",
"input": "",
"start": "255.255.255.0",
"marked": true,
"stored": "255.255.255.0",
"shown": "255.255.255.0"
},
{
"device": "router",
"field": "gateway",
"input": "",
"start": "192.168.0.254",
"marked": true,
"stored": "",
"shown": ""
},
{
"device": "router",
"field": "gateway",
"input": "10.0.0.254",
"start": "192.168.0.254",
"marked": false,
"stored": "10.0.0.254",
"shown": "10.0.0.254"
},
{
"device": "router",
"field": "gateway",
"input": " ",
"start": "192.168.0.254",
"marked": true,
"stored": "",
"shown": ""
},
{
"device": "router",
"field": "gateway",
"input": "abc",
"start": "192.168.0.254",
"marked": true,
"stored": "192.168.0.254",
"shown": "192.168.0.254"
},
{
"device": "router",
"field": "gateway",
"input": "192.168..0.1",
"start": "192.168.0.254",
"marked": true,
"stored": "192.168.0.1",
"shown": "192.168.0.1"
},
{
"device": "router",
"field": "gateway",
"input": "10.0.0.256",
"start": "192.168.0.254",
"marked": true,
"stored": "192.168.0.254",
"shown": "192.168.0.254"
},
{
"device": "homeRouter",
"field": "name",
"input": "Heim",
"start": "Heimrouter",
"marked": false,
"stored": "Heim",
"shown": "Heim"
},
{
"device": "homeRouter",
"field": "gateway",
"input": "",
"start": "192.168.0.254",
"marked": true,
"stored": "",
"shown": ""
},
{
"device": "homeRouter",
"field": "gateway",
"input": "42.0.0.1",
"start": "192.168.0.254",
"marked": false,
"stored": "42.0.0.1",
"shown": "42.0.0.1"
},
{
"device": "homeRouter",
"field": "gateway",
"input": "42.0.0",
"start": "192.168.0.254",
"marked": true,
"stored": "192.168.0.254",
"shown": "192.168.0.254"
},
{
"device": "homeRouter",
"field": "wanIp",
"input": "42.1.2.3",
"start": "42.0.0.10",
"marked": false,
"stored": "42.1.2.3",
"shown": "42.1.2.3"
},
{
"device": "homeRouter",
"field": "wanIp",
"input": ".1.2.3",
"start": "42.0.0.10",
"marked": false,
"stored": null,
"shown": ""
},
{
"device": "homeRouter",
"field": "wanIp",
"input": "42..1.2",
"start": "42.0.0.10",
"marked": true,
"stored": "42.0.0.10",
"shown": "42.0.0.10"
},
{
"device": "homeRouter",
"field": "wanIp",
"input": "042.1.2.3",
"start": "42.0.0.10",
"marked": false,
"stored": "42.1.2.3",
"shown": "42.1.2.3"
},
{
"device": "homeRouter",
"field": "wanMask",
"input": "255.255.0.0",
"start": "255.0.0.0",
"marked": false,
"stored": "255.255.0.0",
"shown": "255.255.0.0"
},
{
"device": "homeRouter",
"field": "wanMask",
"input": "255.255",
"start": "255.0.0.0",
"marked": true,
"stored": "255.0.0.0",
"shown": "255.0.0.0"
},
{
"device": "homeRouter",
"field": "lanIp",
"input": "192.168.1.1",
"start": "192.168.0.10",
"marked": false,
"stored": "192.168.1.1",
"shown": "192.168.1.1"
},
{
"device": "homeRouter",
"field": "lanIp",
"input": "192.168.1.256",
"start": "192.168.0.10",
"marked": true,
"stored": "192.168.0.10",
"shown": "192.168.0.10"
},
{
"device": "homeRouter",
"field": "lanIp",
"input": " 192.168.1.1",
"start": "192.168.0.10",
"marked": true,
"stored": "192.168.0.10",
"shown": "192.168.0.10"
},
{
"device": "homeRouter",
"field": "lanMask",
"input": "255.255.255.128",
"start": "255.255.255.0",
"marked": false,
"stored": "255.255.255.128",
"shown": "255.255.255.128"
},
{
"device": "homeRouter",
"field": "lanMask",
"input": "abc",
"start": "255.255.255.0",
"marked": true,
"stored": "255.255.255.0",
"shown": "255.255.255.0"
}
],
"flows": {
"useMacAsNameThenOff": "0E:EE:AA:A5:58:21",
"useMacAsNameThenOff": "CE:0D:5A:24:8A:C6",
"useIpAsNameThenOff": "PC-A",
"dhcpClientStopsServer": true,
"dhcpClient": true
"dhcpClient": true,
"homeRouterDhcpClientStopsServer": false,
"homeRouterDhcpClient": true
},
"tables": {
"gatewayInSecondNetwork": [
{
"cells": [
"192.168.1.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"10.0.0.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"192.168.1.0",
"255.255.255.0",
"192.168.1.1",
"192.168.1.1"
],
"manual": false
},
{
"cells": [
"10.0.0.0",
"255.0.0.0",
"10.0.0.1",
"10.0.0.1"
],
"manual": false
},
{
"cells": [
"127.0.0.0",
"255.0.0.0",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"172.16.0.0",
"255.255.0.0",
"192.168.1.2",
"192.168.1.1"
],
"manual": true
},
{
"cells": [
"10.20.0.0",
"255.255.0.0",
"10.0.0.2",
"10.0.0.1"
],
"manual": true
},
{
"cells": [
"0.0.0.0",
"0.0.0.0",
"192.168.1.254",
"192.168.1.1"
],
"manual": false
}
],
"gatewayInNoNetwork": [
{
"cells": [
"192.168.1.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"10.0.0.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"192.168.1.0",
"255.255.255.0",
"192.168.1.1",
"192.168.1.1"
],
"manual": false
},
{
"cells": [
"10.0.0.0",
"255.0.0.0",
"10.0.0.1",
"10.0.0.1"
],
"manual": false
},
{
"cells": [
"127.0.0.0",
"255.0.0.0",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"172.16.0.0",
"255.255.0.0",
"192.168.1.2",
"192.168.1.1"
],
"manual": true
},
{
"cells": [
"10.20.0.0",
"255.255.0.0",
"10.0.0.2",
"10.0.0.1"
],
"manual": true
},
{
"cells": [
"0.0.0.0",
"0.0.0.0",
"172.30.0.1",
"10.0.0.1"
],
"manual": false
}
],
"gatewayInBothNetworks": [
{
"cells": [
"10.1.0.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"10.0.0.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"10.1.0.0",
"255.255.0.0",
"10.1.0.1",
"10.1.0.1"
],
"manual": false
},
{
"cells": [
"10.0.0.0",
"255.0.0.0",
"10.0.0.1",
"10.0.0.1"
],
"manual": false
},
{
"cells": [
"127.0.0.0",
"255.0.0.0",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"0.0.0.0",
"0.0.0.0",
"10.1.0.254",
"10.1.0.1"
],
"manual": false
}
],
"noGateway": [
{
"cells": [
"192.168.1.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"10.0.0.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"192.168.1.0",
"255.255.255.0",
"192.168.1.1",
"192.168.1.1"
],
"manual": false
},
{
"cells": [
"10.0.0.0",
"255.0.0.0",
"10.0.0.1",
"10.0.0.1"
],
"manual": false
},
{
"cells": [
"127.0.0.0",
"255.0.0.0",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"172.16.0.0",
"255.255.0.0",
"192.168.1.2",
"192.168.1.1"
],
"manual": true
},
{
"cells": [
"10.20.0.0",
"255.255.0.0",
"10.0.0.2",
"10.0.0.1"
],
"manual": true
}
],
"threeInterfaces": [
{
"cells": [
"172.16.5.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"192.168.1.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"10.0.0.1",
"255.255.255.255",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"172.16.0.0",
"255.255.0.0",
"172.16.5.1",
"172.16.5.1"
],
"manual": false
},
{
"cells": [
"192.168.1.0",
"255.255.255.0",
"192.168.1.1",
"192.168.1.1"
],
"manual": false
},
{
"cells": [
"10.0.0.0",
"255.0.0.0",
"10.0.0.1",
"10.0.0.1"
],
"manual": false
},
{
"cells": [
"127.0.0.0",
"255.0.0.0",
"127.0.0.1",
"127.0.0.1"
],
"manual": false
},
{
"cells": [
"0.0.0.0",
"0.0.0.0",
"10.0.0.254",
"10.0.0.1"
],
"manual": false
}
]
},
"edits": {
"invalidCell": {
"manual": [
[
null,
"255.255.0.0",
"192.168.0.2",
"192.168.0.10"
]
]
},
"emptyCell": {
"manual": [
[
null,
"255.255.0.0",
"192.168.0.2",
"192.168.0.10"
]
]
},
"leadingZeros": {
"manual": [
[
"10.0.0.0",
"255.255.0.0",
"192.168.0.2",
"192.168.0.10"
]
]
},
"dottedTwice": {
"manual": [
[
null,
"255.255.0.0",
"192.168.0.2",
"192.168.0.10"
]
]
},
"maskCell": {
"manual": [
[
"172.16.0.0",
"255.0.255.0",
"192.168.0.2",
"192.168.0.10"
]
]
},
"newRowThreeCells": {
"manual": [
[
"172.16.0.0",
"255.255.0.0",
"192.168.0.2",
"192.168.0.10"
]
]
},
"newRowFourCells": {
"manual": [
[
"172.16.0.0",
"255.255.0.0",
"192.168.0.2",
"192.168.0.10"
],
[
"10.9.0.0",
"255.255.0.0",
"10.0.0.9",
"10.0.0.1"
]
]
},
"newRowInvalidCell": {
"manual": [
[
"172.16.0.0",
"255.255.0.0",
"192.168.0.2",
"192.168.0.10"
]
]
},
"newRowTwice": {
"manual": [
[
"172.16.0.0",
"255.255.0.0",
"192.168.0.2",
"192.168.0.10"
]
],
"rowsShown": 2
},
"removeRow": {
"manual": []
}
}
}