Repository navigation
Wi-Fi is a track: the accepted AX2xx design's stages with owners and exits, and the issues it owes - #876
Conversation
|
Owner's rulings on this design's four questions, recorded by the orchestrator.
These join his earlier rulings: clean room with nothing in NOTICE for the references, full speed from the start, and several interfaces. A design review is running; the design is accepted once it passes. |
|
Design review of #876 at Net lines: BLOCKER
NOTE
DESIGN NEEDS CHANGES: measure compatibility-format blocking (and the AMD-Vi analogue) before P1 and drop roast 3's MSI path; keep everything |
|
The design review of BLOCKER
NOTE
|
|
Owner's rulings on Q1–Q4, recorded by the orchestrator.
|
|
Design review, round 2, of #876 at Net lines: Round 1's BLOCKERs
Round 1's NOTEs are each answered where the author's mapping says, except BLOCKER
The owner's rulings, applied (named changes, not blockers)
NOTE
DESIGN NEEDS CHANGES: make the room's roots unwritable from outside it or re-checked before every session, with |
|
Owner's ruling on the clean room's strictness, recorded by the orchestrator. He was told that round 2's named changes to the clean room amount to a tooling project of their own before any Wi-Fi code. Those are the pinned harness and managed settings, the two-arm probes of every way in, real-session audits, re-scans of shared roots before each session, |
|
Round 2's design review (issuecomment-6122030223), finding by finding. The head is unchanged, BLOCKER
The owner's rulings, applied as named
NOTE
Round 1's open itemsRound 1's BLOCKERs 3, 4 and 6 are answered by round 2's BLOCKERs 1–3, 4–5 and 7 above, and its NOTE on |
|
Design review, round 3, of #876 at Net lines: Round 2's BLOCKERs
The Q1–Q4 rulings are applied as round 2 named them. Round 2's NOTEs 1–5 are each answered: §2 Binding and the W5 row, §4's limits, the W2 row's RSNXE, BLOCKERA.
B.
C.
D.
NOTE
DESIGN NEEDS CHANGES: give every red a consequence (a red |
|
Owner's ruling on the clean room, recorded by the orchestrator; it replaces "full rigor as reviewed". He was shown that round 3 found more ways in again: a writer asking macOS itself (Finder, launchd,
So the clean room is the two roles and nothing else:
What goes:
The similarity check is machinery too, and goes with the rest. The driver track's other rulings (Q2–Q4, WPA3/PMF and the rest) stand. |
|
Round 4: the clean room is the owner's two roles (issuecomment-6125437246). The head is unchanged, Deleted, because the owner ruled the clean room is a reader writing the specification from the references and a writer working from it and the public standards, and nothing else:
As a result, round 3's BLOCKERs A, C and D and NOTEs 1 to 7 have nothing left to review. E2 and E5 to E7 stay on What replaces it (§7): the writer's sentence goes in every writer's brief and, through the first W stage's pull request, into Round 3's other findings, applied:
Q2 to Q4, WPA3 and PMF in the first version, and the plain-text saved networks are unchanged. |
|
Design review, round 4, of #876 at Net lines: Round 3's BLOCKERs
Round 3's NOTEs:
The author's flagged decisions
BLOCKER
NOTE
DESIGN NEEDS CHANGES: give P4's guest test the reason that holds once the outbound rows exist; process WPA3's Transition Disable in W2, W4, |
|
Design acceptance, by the orchestrator, with round 4's named changes (#876 (comment)). The design is accepted as the body states it, once these are applied:
The author applies these to the body, and no further design review follows. The track's stages start in order, S1 first: the T14's compatibility-format A/B. |
|
Acceptance's seven changes applied to the body (issuecomment-6125972534; head unchanged, |
…s are filed issues/there-is-no-wifi.md becomes the track of the design #876 carries, accepted by the orchestrator in issuecomment-6125972534 with seven named changes. It lists stages S1, S2, the specification, P1 to P6 and P8, and W1 to W11, each with its owner, what it depends on and an exit something can read. It quotes the owner's rulings as the orchestrator recorded them, and records the two weaknesses those rulings leave: saved networks in plain text from W11, and a network's Transition Disable mark lost at reboot from W4 until W11. P7, the key store, went with Q4. The old body's estimates and licensing facts were about porting another driver's source, which the clean room ruling replaced. Filed, as #876 §8 lists them: - pcidev-moves-a-bar-behind-a-bridge-out-of-the-range-the-bridge-forwards: placement treats every bridge's forwarded range as taken, so a function on a secondary bus is offered only addresses its bridge does not forward. The demo's AX200 on the AMD bench was refused that way. P1 owns it. - netstack-drives-one-card: P5's. - no-access-point-answers-to-the-harness: the orchestrator's instrument. - acpiserver-serves-no-client: P8's. - a-platform-with-no-transmit-power-table-joins-no-wifi-network: W6's. - the-wifi-demos-branches-are-on-origin: 11 branches on origin hold the demo's first commit and touch a Wi-Fi-named path, measured over origin at c0cdddf (E10 and E11 on ToyOSOrg/evidence pr-876). The specification stays on ToyOSOrg/evidence pr-876, outside the tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
…627f0: cargo run -- --ci host, EXIT=0 The worktree's home is masked as <home>.
|
Review of #876 at Net lines: Evidence: Machine identity: I scanned the diff, the commit message, the body, E10, E11 and the host log. Each has 0 MACs, public addresses, serials, personal hostnames or home paths, and 0 occurrences of the word E10 and E11 mask. What the masks leave open is NOTE 4. Round 4's design BLOCKERs, both by reading the body and the track at this head:
The author's three unsure items:
BLOCKER
NOTE
SEND BACK |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
|
S1 on the T14 ( Compatibility format is blocked.
So the owner's Q2 condition is met: P1 may hand over the MSI-X table's page where remapping verifies the source. One caveat stands, as the scout recorded: the T14 runs with The read-out:
One part failed: the ACPI names under the radio and its root port read empty ("host bridge(s) []"), so the judge exited 1 on the read-out row. That is a defect in the scout's ACPI read-out, not a reading. It is fixed and re-run in one more boot. |
- P4's owner is the orchestrator: P4 is the LAN track's stage 3, whole, and that track names no holder. - The specification's sources are #876 §7's again: a fact Intel's headers state is not reopened by another reference disagreeing, a fact they leave unsaid is taken from the other references, and only one those disagree on or all leave unsaid stays open. - The link hop's cost cites the standing ruling's merits clause; "never block" stays with throughput. - P5's T14 row moves into W6's exit, which it needs a radio for; W7 runs W6's rows but the I219's. - The access points the W stages need are named: W5's and W6's test networks as an instrument the orchestrator owns, and W8's silenced and paired access points in issues/no-access-point-answers-to-the-harness.md. - The pcidev issue names the two placement issues P1 takes up with it, and rests its readings on main's kernel on the AMD bench (E13 §1, from #884's metal run), S1's T14 read-out and the demo's commit messages, masked (E13 §2), all on ToyOSOrg/evidence. - netstack-drives-one-card names the rejected first-match entry it reverses, and P5 takes the NIC out of its virtio bullet. - The demo's issue is renamed to what still holds. Its branches went from origin before this round: E12 at origin/main ab655a1 finds no ref there carrying the AMD bench's model name, and none holding the demo's first commit that touches a Wi-Fi-named path, where E10 at c0cdddf counted 11. The 12 tips E10 prints still resolve through GitHub's commit API for origin, each answer carrying the model name, so the exit is that no ref carries the name and none of those tips resolves. The citation of #876 §8 is replaced by the demo's own commit message (E12 §3). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
…0168041: cargo run -- --ci host, EXIT=0 The worktree's home is masked as <home>. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
|
Review of #876, round 2, at Round 1's BLOCKERs
Round 1's NOTEs 1 to 8 are applied:
Net lines: Evidence: The masked word: a case-insensitive search finds it 0 times in each of these:
BLOCKERNone open. NOTE
LAND AFTER NAMED CHANGES |
|
S1 read-out, completed (boot B re-run at The read-out found the radio's ACPI device under its root port, with its names below it. The paths themselves are this machine's own and are not quoted in any record ( |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
…is the exit's Review round 2 of #876's track (issuecomment-6130506978) named four changes; this commit makes the three in the tree. The track records S1 done with both exits met. Its A/B, on the T14 at wt/toyos-wifi-s1 bd135c4, read compatibility format blocked: fault 0x25 and no delivery in boot A, delivery in boot B (pr-876 s1/judge.log). Its read-out, completed by a re-run of boot B at a6934ff, passed (pr-876 s1-r2/judge.log). So P1's Q2 condition and W5's S1 dependency are met. The record carries two consequences: - S1 does not separate CFIS=0. The T14 runs with EIME set on every unit, and VT-d 4.0 section 5.1.4 blocks compatibility format where either holds, so exit 1 of issues/qemu-passes-compatibility-format-interrupts.md still asks for a reading under CFIS=0 alone. - The T14's NVMe keeps its MSI-X table at BAR 0 + 0x2000, so P1's T14 exit now drives that NVMe through it, the row #876 section 8 made due if S1 found one. The record cites the read-out on pr-876 and quotes none of the machine's ACPI paths. The demo-commits issue's exit now reads every commit git rev-list <E10's 12 tips> --not --remotes=origin prints, not the tips alone. E15 (pr-876 6196aad98) counts 52 such commits at origin/main 97f07c3: no ref on origin holds any, pull requests' refs included, origin has no fork, and GitHub's commit API answers all 52. The issue names E13 beside E10 and E11 as a log printing a hash that resolves: its line 80 quotes a build nine of the tips hold. The owner ruled to leave the commits on GitHub ("leave it"), so the exit waits for GitHub's garbage collection. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
…b08264c: cargo run -- --ci host, EXIT=0
|
Owner's ruling, recorded by the orchestrator. He was asked whether to ask GitHub support to purge the deleted demo branches' commits, which still resolve by hash and mention the AMD bench's model. He chose "Leave it": the branches are gone, the commits are reachable only by exact hash, and GitHub's garbage collection will remove them. |
…os-microcode Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
None of the three touches a file this branch changes. #890 changes .claude/agents/reviewer.md's Tests and Guest tests, #876 and #883 file Wi-Fi and DNS issues and change netstack, supervisor and build/build.rs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
Landing this records the accepted Wi-Fi design as
main's track. It builds nothing, and it changes onlyissues/. The branch isc7505cf55onorigin/main36aff86fc; a merge oforigin/mainab655a115(#861 included);24b0fbc63, which answers the track's first review (comment 6129602265); a merge oforigin/main97f07c381(#888 included); andf0c1e1c2b, which answers its second (comment 6130506978). The design round's empty commit is dropped.issues/there-is-no-wifi.md, the issue this pull request takes up, becomes the track:CFIS=0alone) is recorded;issues/pcidev-moves-a-bar-behind-a-bridge-out-of-the-range-the-bridge-forwards.md, P1's;issues/netstack-drives-one-card.md, P5's;issues/no-access-point-answers-to-the-harness.md, the orchestrator's, which also names W8's access points;issues/acpiserver-serves-no-client.md, P8's;issues/a-platform-with-no-transmit-power-table-joins-no-wifi-network.md, W6's;issues/the-wifi-demos-commits-still-resolve-on-origin.md, the orchestrator's.ToyOSOrg/evidencepr-876, as accepted.git diff --shortstat origin/main...f0c1e1c2breads 7 files, +601 and −37, all underissues/; 0 production, 0 test. No production code changes, so no negative control or oracle is owed, and no guest test is reached.issues/README.mdwrites a track to a defect's length. That is because every stage carries its owner, what it depends on and its exit.origin: E12 §1 atorigin/mainab655a115finds no ref there carrying the AMD bench's model name. What still holds is that its commits resolve through GitHub's commit API fororigin. Over the 12 tips E10 prints,git rev-list <tips> --not --remotes=originprints 52 commits; no ref onoriginholds any of them, pull requests' refs included,originhas no fork, and all 52 resolve (E15). E10, E11 and E13 print hashes among them. The owner ruled to leave the commits on GitHub ("leave it"), so the exit, none of the 52 resolving, waits for GitHub's garbage collection. No branch onoriginwas touched by this pull request.The design below was accepted by the orchestrator (comment 6125972534) with its seven named changes applied. Every path it cites exists at
24b0fbc63, the six issue files this branch adds included (E14). It is the design and its roast for ToyOS's Wi-Fi:It takes up
issues/there-is-no-wifi.md.0. Rulings
The owner's, as the orchestrator recorded them. Everything else is this design's.
NOTICEfor them; full speed is HT, VHT and HE rates and block-ack in the first version.lib/crypto, still being written outside the tree) gains SAE over P-256 and AES-CMAC first." Its record adds: "That work goes to the crypto agent now."Applied here: VT-d and the PCI bridge windows decide P1, the AMD IOMMU specification P2 and P3, Intel's firmware interface the driver (§3, §7), IEEE 802.11 and the WPA3 specification §4, W1 and W2, ACPI P8. The program split,
link,radio,wifiand the saved-network file are this design's, for review on their merits. Throughput is reported and never blocks; the link hop's cost is the merits clause's: measured and reported, and deciding nothing by itself.lib/crypto's route (§6 P6) is the orchestrator's: this pull request holds no record of the owner's on it. This body's authors are readers in §7's sense (round 1's read the demo's driver and log), and none writes a line of the driver.1. Where the tree and the demo stand
On
main:CARDSthe supervisor endowed (system/netstack/src/main.rs), behindCard, an enum of in-process drivers (card.rs); the node is one interface and its DHCP client (system/netstack/node/src/lib.rs), andShard::newadds one (system/netstack/shard/src/lib.rs). [ip] already routes over several: only up interfaces count, the default route takes the first up one with an active gateway, and "the lower index wins a routing tie" (system/netstack/ip/src/{lib,route}.rs).kernel/src/pcidev/mod.rs, module doc) hands a BAR over as a 2 MiB window re-placed from the root-bridge windows, never maps the BAR holding the MSI-X table or PBA, arms MSI only without MSI-X, and refuses a function whose only BAR holds its table (NoMappableBar). No claim is handed over without interrupt remapping, which verifies the requester: VT-d withSVT=01b(kernel/src/arch/x86_64/vtd/interrupt.rs), the ITS by device id (kernel/src/arch/aarch64/irqchip.rs). VT-d leaves compatibility format blocked (CFISclear), and S1 read it blocked on the T14, which runs withEIMEset as well, soCFIS=0alone is still unmeasured on silicon (§6;issues/qemu-passes-compatibility-format-interrupts.md, item 1). AMD-Vi isolates no device: every claim is refusedNotRemapped(issues/an-amd-vi-machine-isolates-no-device.md, stages 5 and 6).toyos-transport(lib/blockring/transport), "the transport every client/server session runs over": entry queues, an arena of runs, a tag table, and byte streams with their wants, between ends that trust each other for nothing ("no reference to the peer's bytes is formed"). Blockring runs on it; netring: a session region replaces the pipes between netstack and its clients (design, and the track that stages it) #863, still open, would put netstack's clients on it.issues/the-lan-is-not-yet-production-grade.md): a driver process per network function, netstack the stack alone, drivers bound "from a declared match table by vendor, device and class"; it "lands before a second real NIC family is added", and "a stage lands whole". Wi-Fi is that family.refused,system/supervisor/src/main.rs).CLAUDE.md, Capabilities); stage 2 ofissues/every-program-sees-only-the-files-it-was-given.mdhas every row declare its files, with the exit that "nothing still sees the global tree".The demo on the AMD bench (never landing; its log is evidence only) ran the AX200's firmware, found the test network by passive scan, completed a WPA2 association with keys installed, and got a lease, a DNS answer and a TCP connect. It was a non-HT, non-QoS station at the lowest basic rate, without block-ack or A-MSDU, every wait a spin, its commands able to block netstack's loop for up to 2 s. The platform it needed, read from configuration space: BAR 0, the only BAR, 16 KiB, with the MSI-X table at +0x2000, behind a bridge forwarding 1 MiB; pcidev moved the BAR onto eight 2 MiB windows outside it, the function answered at none and the claim was refused, so the demo kept the BAR in place, untranslated and unremapped, on MSI. What its runs fixed about access points, which W2 tests: an AP echoes the station's own group frames back. Two more rules W2 tests were measured by no run: that a unicast frame's key ID selects nothing (the runs sent unicast frames under key ID 0 alone), and that a message 1 resent under a higher replay counter keeps its ANonce. These, and what the runs fixed about the device, enter the specification as measured facts, each with its run (§7).
2. Programs and authority
ax2xx(new), one per radio functionradiolinkwlan(new)wifiradioradiomessagenetstacknetstack,linkwifi(new): the network settings program; the desktop's later (W10)wifiwifianswer[programs.wifi],receives = ["wifi"]), started by the login launchers'starts: a toybox row's endowments reach every applet (images/system.toml), so as an appletcatandlswould holdwifi. Its job exists only on ToyOS:exempt(build/userlandhost.rs).ax2xxparses whatever any transmitter in range sends, so apart it falls alone while netstack, its connections and other links stay and the supervisor restarts it (restart = true). Not for failover: an in-process driver's lost link fails over too.ax2xxholds only temporal keys, which it hands the firmware anyway.lib/crate:link, served by netstack to each NIC driver so only a driver presents an interface, a protocol ontoyos-transportas blockring is (P4), using its queues, arena, tag table and wants and adding no transport primitive;radio, served byax2xxtowlan(commands, events, EAPOL and SAE frames), shared aslib/acpiserver-apiis;wifi, served bywlanto network settings programs alone, so nothing holdingnetstackcan scan, join or see a credential.pci:8086:2723andpci:8086:2725are rows of P4's match table: oneax2xxper present matching function, none elsewhere.ax2xxships only once that table has landed (W5 depends on P4): without it the supervisor starts the row where the claim is refused "no … on this machine" (§1), and every QEMU image would runax2xxunderrestart = true. That list is the feature set: the parts the benches test.3. The driver,
ax2xxWhat every ToyOS program owes, applied to this one; how the driver divides its work is its writer's design round.
ax2xx's own grants and is decoded throughtoyos_untrustedin its own memory; nothing of netstack's is lent to the device (nopcidev::dma_mapon a link region). A received data frame becomes an Ethernet frame inax2xx's memory and is copied once into the link arena; EAPOL and the management frameswlanacts on go to it overradio, and no management, control or EAPOL frame reaches netstack. On send the Ethernet header is copied out of the arena before anything is decided, and the 802.11 header and payload are built inax2xx's own grant, all the device reads; netstack copies each received frame out before parsing it, as the transport asks. Untilwlaninstalls keys the link is down and netstack's frames are refused; an EAPOL-ethertype frame from netstack is always refused and counted. Cost: two copies received, one sent, which S2 reports.NOTICEandCOMMITTED_FILESrows, insystem/ax2xx/firmware/, loaded only into grants only the radio's domain maps, never run on the CPU. Embedded so the binary and the bytes W3's host test decodes cannot drift (not for secrecy: both are readable). The rule admits firmware "a device … verifies by its maker's signature": the specification establishes from a vendor statement that each part verifies each file, and one nothing shows verified waits for the owner; none is ever tested modified, the licence permitting use only "without modification". The licence also says "No reverse engineering, decompilation, or disassembly of this software is permitted", so anyone reads of a file only the container a loader parses (record kinds and lengths, section headers, declared versions and capabilities), never a section's contents.linkandradiodoorbells and its next deadline; a command's answer arrives as an event; a step with no notification is a bounded poll failing by name, its source cited; no pass is due while the link idles.ax2xxsends at an untyped version is refused by name; the demo's two byte-offset layouts were the wrong size and the firmware asserted on each. Every device word decodes throughtoyos_untrusted: a malformed frame is counted and dropped; a device writing what none of the specification writes endsax2xxby name. Every notification is counted by kind.kernel/src/arch/x86_64/idt/user_dev.rs).ax2xxlogs the device's error records decoded, resets, reloads, and reports the link down to netstack and the loss towlan, which rejoins; restarts are bounded in a window, past which it ends by name, and one inside keeps its claim. RF-kill is a link-down with its reason; its return starts a scan.4. The first version (W6): full rate, WPA2 and WPA3
From IEEE Std 802.11-2020 and 802.11ax-2021:
wlanmarks the network when the KDE's WPA3-Personal bit (bit 0, Table 6) is set, and keeps the mark: for the boot until W11, and in the saved file from W11 (§5).ax2xxjoins no network there and says so ("no transmit limits for this platform"); W5's passive scan still runs. What such a platform could transmit at is open (§11), and it stays refused until the specification or a measurement answers that and the owner rules on it.Not in the first version: 6 GHz (W9, directly after W6, once a 6 GHz access point is at the T14's bench: Q3); power save (W8: until then the radio stays awake and a laptop's battery pays); background scan, roaming and beacon-loss recovery beyond a rejoin (W8); saved networks (W11, after the per-program views: §5).
Speed is measured against Linux on the same machine, AP and position, and reported: evidence, never a row. The ceiling, HE-MCS 11, two streams, 160 MHz, 0.8 µs GI, is 2,401.96 Mb/s from the standard's rate tables, 200,163 packets of 1,500 bytes a second (E4): a standard's bound, not a measurement.
5. Saved networks (ruling 1, as Q4 overrides it)
wlanalone opens it: a file inwlan's own state that no other row names.issues/every-program-sees-only-the-files-it-was-given.md, withwlan's row the only one whose view holds the file.6. Measurements and platform prerequisites
S1, the T14 read-out and compatibility format: done, both exits met. A measurement-only scout, never landing, run by the orchestrator (Evidence, S1).
IREset andCFISclear: fault 0x25 (compatibility-format-interrupt-blocked,vtd/fault.rs) and no delivery. Boot B left it remapped: delivered, no fault. So Q2's condition is met, and P1 may hand the table's page over where remapping verifies the source.EIMEset on every unit, and VT-d §5.1.4 blocks compatibility format whereEIMEis set orCFISis clear; A read the block with both. So S1 does not showCFIS=0alone blocking it, which exit 1 ofissues/qemu-passes-compatibility-format-interrupts.mdstill asks, and on which a VT-d machine the kernel leaves withoutEIMErests.S2, the link hop's cost on the T14, reported. A scout likewise: two processes over
toyos-transport, one entry per 1,514-byte frame, batches of 1, 8 and 32, both directions, each side copying each frame once asax2xxdoes; cycles per frame and frames a second on one CPU, beside the 200,163 each way that full rate needs (§4). By itself it decides nothing (§0, the merits clause): P4's design round reports it, and P4's build reruns it as evidence.P1. A BAR stays where firmware put it, in 4 KiB pages, its table's page included. No issue exists yet. The relocation exists only because a window is 2 MiB, and on the AMD bench it moved the BAR out of the range its bridge forwards. At 4 KiB a BAR inside every window on its path to the root is mapped in place; one sharing a 4 KiB page with another function's moves within those windows, never out, or is refused by name. The table's page is mapped with the rest: remapping verifies each message's requester (§1), so a holder rewriting its table reaches only its own entries; compatibility format is blocked, as S1 read on the T14 (on AMD, once P2 and P3 read their analogue); and DMA aimed at the interrupt range already sends any message. This reverses a security boundary, and the owner accepted it (Q2): only where remapping verifies the source, and only once S1 reads compatibility format blocked, which it has. P1 rewrites the exit of
issues/a-controller-whose-msix-table-is-in-bar-0-cannot-be-driven-from-userland.mdfrom a refused write to the table's page to the NVMe driven through a table in BAR 0. It needs 4 KiB user leaves for device windows: stage 3 ofissues/process-memory-is-2-mib-pages-and-that-caps-the-process-count.md, or the slice its holder accepts.P2 and P3, AMD-Vi translation and interrupt remapping: the orchestrator's AMD track (
issues/an-amd-vi-machine-isolates-no-device.md), whose exit is a QEMU boot. The AX200 needs three readings on the AMD bench: the stick's xHCI and the NVMe working in their domains under translation; the radio's claim handed over with its own remapping table; and, before the table's page is mapped there, a message naming no valid entry of the radio's own table refused into the event log. Without them the AMD bench has no Wi-Fi; the T14 does not wait.P4. The LAN track's stage 3, whole. The
linkprotocol ontoyos-transport, in one region netstack makes: a hello with the link's kind (wired or wireless), MAC and MTU; RX and TX entry queues and an arena of frame runs; the link state in the region's header; doorbells on the connection, whose hang-up ends the link. Its round names the published design its queues follow. The I219/82574 and virtio drivers move out onto it andCardgoes. The supervisor binds drivers from a declared match table by vendor, device and class, which gives oneax2xxper radio function and none elsewhere: W5 waits for it. Its exit is the track's: a driver killed and restarted with the stack's connections intact, and an unlisted but matching NIC up with no configuration change. It lands on a bench reading that it works and regresses nothing on the path it moves: the network suite under QEMU, and the I219 on the T14. No T14 row reads the wired card yet, since no image gives netstack the I219 until the outbound rows ofissues/toyos-has-its-own-network-stack.md, so P4 waits for those rows. Whether a wired driver lends the arena to its device is P4's round;ax2xxlends nothing.P5. netstack over several links (R4, ruling 3). No issue exists yet. One interface per link, each with its DHCP client, lease and mDNS responder, under one host name; [ip] ranks wired before wireless, then arrival, so a restarted driver changes nothing. New flows take the best-ranked up interface with a usable address, so they leave on Wi-Fi when wired goes and return with it; a flow bound to a downed interface's address stays bound (strong host model) and resumes if the link returns before TCP gives up; no connection moves between addresses. Resolvers are the best-ranked lease's. Its T14 row, both links leasing with the wired one the default route, is W6's, since it needs a radio; it also needs the image giving netstack the I219, the same outbound rows P4 waits for. P5 takes the NIC out of the virtio bullet of
issues/first-match-selection-that-remains.md(kind: rejected), which ruling 3 reverses.P6.
lib/crypto. The route is the orchestrator's (§0): his pull request brings the crate in unchanged at the commit the crypto agent names as qualified. Its holder works outside the tree, in a clone with no remote; round 2 read it at82ae7f9oncodex/crypto-quality(unopenable on GitHub until it lands), withderive_pmk,hmac_sha1, the 802.11 PRF and RFC 3394 unwrap underwpa2, and HMAC and HKDF underkdf. First, as ruling 2 says: (1) AES-CMAC-128 (RFC 4493); (2) SAE over P-256 by hash-to-element, against Annex J and RFC 9380. The public constant-time comparison and owned secret that wipes on drop, whichwlanneeds too, come with them (this design's). TLS and the rest of the crate's queue follow.wlanbuilds the 802.11 KDF and key hierarchy on those, with nonces and SAE scalars fromSYS_RANDOM. No RustCrypto crate enters for Wi-Fi, and the qualified commit carries none of the crate'stools/*.py(reviewer.md, Arrivals).P8. acpiserver serves a driver its own device's tables: it evaluates the methods under one PCI function's ACPI device for that function's driver alone, over a connection the supervisor opens for that binding; nothing names another device's scope. Before W6. Today acpiserver serves no client.
7. The clean room: two roles
.claude/agents/implementer.md, the role a writer runs under.The references: OpenBSD's iwx and 802.11 stack; Linux's iwlwifi firmware-API headers (the dual-licensed ones), mac80211 and cfg80211; hostapd and wpa_supplicant; the demo's branches and logs. The public standards: IEEE Std 802.11-2020 and 802.11ax-2021, the Wi-Fi Alliance's WPA3 specification, and the RFCs the stages cite.
The specification is a document of the device's own interface: its registers and their fields, the structures it reads and writes, its commands and notifications and their fields, its firmware containers' elements, and the steps it needs in order with their conditions and bounds. It also carries measured facts about the device's peers, each with its run, such as the three about access points that W2 tests (§1). Each fact has one sentence of meaning and its source: a reference by name, a firmware container, a measurement with its run, or a standard's clause. It holds no code or pseudo-code of a reference.
originand never landed, run by the orchestrator, its result entering as a measured fact.ToyOSOrg/evidenceonpr-876. A writer's brief names the revision by commit, and its pull request links it there; itsNOTICEnames no reference, only the firmware.8. Stages
Order:
Every metal row first needs
issues/a-metal-row-names-no-hardware-and-a-bench-without-it-reds.md. Each stage is its own design round; a W stage's is its writer's.claim_reuses_its_remapping_entryandclaim_refused_without_remappingunchanged; the AX210 claimed with its BAR in place; the NVMe through its table at BAR 0 + 0x2000, where S1 found itProfile::MetalAmdVilink: everyViolationa hostile peer can cause; the match table's bindingissues/toyos-has-its-own-network-stack.md)lib/cratebuild/ssh/tests/fuzz.rs; a third-party capture corpus from outside the references beside its crate, with provenance, terms andNOTICErows, pinned by hashwlanwlan,radio,wifi, the settings programradioanswerswifi, so no shipping path reads the ESPax2xxkilled and rejoining; both links leasing, the default route wired (P5's); throughput against Linux, reportedissues/no-access-point-answers-to-the-harness.md)issues/every-program-sees-only-the-files-it-was-given.mdWhy each guest test is in QEMU:
msix-exclusive-bar=onfromtests/common/qemu.rsandbuild/qemu.rs, which accommodated the refusal it removes, so the NVMe guests drive QEMU's default controller, table in BAR 0, and hold what the AX210 row cannot until W5: a device driven through a table in a mapped BAR.issues/toyos-has-its-own-network-stack.md), and a test reaches no internet (.claude/agents/reviewer.md, Tests). Connections kept across a driver restart are held only in a guest.No other Wi-Fi stage has a guest test: QEMU has no radio.
Issues owed, filed by this pull request, each with an owner, evidence and an exit:
issues/pcidev-moves-a-bar-behind-a-bridge-out-of-the-range-the-bridge-forwards.md, P1's. Placement counts every bridge's forwarded range as taken (kernel/src/pcidev/mod.rs, theforwarded()loop feedingplacement::free_runs), so a function on a secondary bus is offered only addresses its bridge does not forward. Both benches put their radio behind a bridge:main's kernel on the AMD bench (E13 §1) and S1 on the T14. It namesissues/nothing-reds-when-the-bar-survey-drops-an-assigned-bar.mdandissues/no-boot-reaches-the-retry-that-undoes-a-placement-nothing-answered.md, which rest on placement as it is, and P1 closes each or rewrites its exit.issues/netstack-drives-one-card.md, P5's. It names the rejected entry it reverses,issues/first-match-selection-that-remains.md.issues/no-access-point-answers-to-the-harness.md, the orchestrator's instrument: deauthentication and a group rekey on demand, and W8's access point the harness silences and two of one network.issues/acpiserver-serves-no-client.md, P8's.issues/a-platform-with-no-transmit-power-table-joins-no-wifi-network.md, W6's.origin:issues/the-wifi-demos-commits-still-resolve-on-origin.md, the orchestrator's. E10 counted 11 demo branches onoriginatc0cdddf4e; E12 atab655a115counts none, and no ref carrying the AMD bench's model name. But the 52 commitsgit rev-list <E10's 12 tips> --not --remotes=originprints still resolve through GitHub's commit API fororigin, and no ref there holds any of them (E15); E10, E11 and E13 print hashes among them. Its exit is no ref carrying the name and none of those 52 resolving. The owner ruled to leave them on GitHub ("leave it"), so the exit waits for GitHub's garbage collection. The local branches are kept for readers' scouts, which stay offorigin(§7).The two weaknesses, saved networks in plain text (owner the orchestrator, exit a ToyOS key store) and a network's Transition Disable mark lasting only the boot (owner the orchestrator, exit W11 keeping it in the saved file), are recorded in the track. They are not true of the tree until W11 and W4 land, and the pull requests landing W11 and W4 file each as its own issue.
9. Roast
wifi.EIMEset;CFIS=0alone, what a VT-d machine withoutEIMErests on, is still unmeasured.ax2xxcosts a new claim, spending device addresses its slot never gets back (issues/a-claim-spends-device-addresses-its-slot-never-gets-back.md); a firmware error is handled inside and costs none.10. Questions for the owner, and 11. what this design is unsure of
No question is open.
Unsure: what the AX210 keeps in its MSI-X table's page, which S1 read at BAR 0 + 0x2000; whether the reorder window is the driver's or the firmware's; whether each part verifies each firmware file, and by which vendor statement; whether A-MSDU subframes arrive split or whole; what the firmware enforces where a platform has no table; whether it offers a failure trigger; whether one CPU carries HE160 2×2 through the hop (S2).
Evidence
Each measurement, with its command and exit, is on
ToyOSOrg/evidencebranchpr-876.The host suite at
f0c1e1c2b:cargo run -- --ci host, exit 0 (76 steps, all green),ci-host-f0c1e1c2b.log. The change isissues/alone, so no guest test is reached, and no image or metal row is affected.E10
e10-demo-branches-on-origin.log: E3's count overoriginas it stood atc0cdddf4e. 13 branches held the demo's first commit and 11 touched a Wi-Fi-named path; none added aNOTICEline naming a reference.E11
e11-demo-notice-entries.log: each of the 11 adds oneNOTICEentry, the AX200 firmware's, with the bench's model name masked.E12
e12-demo-on-origin.log, exit 0, atorigin/mainab655a115: §1, no ref of 1,119 onorigincarries the AMD bench's model name, and the two holding the demo's first commit (wt/toyos-surveyand Survey image for an unknown laptop (measurement only, never lands) #834's head) touch no Wi-Fi-named path and carry no line with the name; §2, each of the 12 tips E10 prints pastwt/toyos-surveyresolves throughgh api repos/ToyOSOrg/ToyOS/commits/<tip>(exit 0) and its answer carries the name; §3, the message of E10 line 52's tip says itsnetstack/src/wifi.rswas "written against OpenBSD's ISC-licensed if_iwx (22000 family)". Masked; no tip printed.E13
e13-amd-ax200-bar.log, exit 0: §1,main's kernel on the AMD bench (amdvi: the firmware-left actuator invalidates with one INVALIDATE_IOMMU_ALL, and its metal row judges AMD-Vi units #884's metal run atf2c537a51): the AX200 at 01:00.0 with BAR 0 at 0xd0600000, bridge 00:02.2 forwarding 0xd0600000..0xd0700000, and the free runs, none reaching into that range; §2, the demo's two commit messages recording its eight candidates from 0x450200000, every one outside that range, every moved BAR reading 0xffffffff. Masked.S1, the orchestrator's T14 run of
wt/toyos-wifi-s1:bd135c4db,s1/judge.log: "compatibility format blocked: fault 0x25 and no delivery in A, delivery in B" andPASS wifi_s1_compat_formatat lines 44 and 45, every uniteime=yandcfis=nat lines 19 to 22, the NVMe's table at line 52 and the AX210's at line 59. Its read-out row failed only on the ACPI names, the scout's own defect;a6934ff22,s1-r2/judge.log:PASS wifi_s1_readout, and the run's verdict "1 passed, 0 failed";s1/wifi-s1-a-kernel.log, lines 111 to 116: the AX210 at 09:00.0, BAR 0 at 0xbc300000 and 16 KiB, behind root port 00:1c.4 forwarding 0xbc300000..0xbc400000. The pcidev issue cites it.E15
e15-demo-commits-on-origin.log, exit 0, atorigin/main97f07c381: §1,git rev-list <E10's 12 tips> --not --remotes=originprints 52 commits; §2, of 1,132 refs onorigin, 916 of them pull requests', none holds any of them; §3,originhas 0 forks; §4, all 52 resolve throughgh api repos/ToyOSOrg/ToyOS/commits/<commit>(exit 0). No commit printed.E14
e14-cited-paths.log, exit 0: every path the body, the track and the six issues this branch adds cite exists at24b0fbc63. The one pathf0c1e1c2badds, the track'skernel/src/arch/x86_64/vtd/mod.rs, exists there:git cat-file -e f0c1e1c2b:kernel/src/arch/x86_64/vtd/mod.rs, exit 0.No access point in the tree:
git grep -i 'access point' ab655a115 -- tests build system lib kernelprinted nothing and exited 1.E3
e3-demo-footprint.log: the demo's branches onorigin, masked.E4
e4-ceiling.log: the HE ceiling, 1,960 subcarriers × 10 bits × 5/6 over 13.6 µs, 1,200.98 Mb/s a stream.E9
e9-cited-paths.log: every path design round 4's body cited exists at867ec23ed, and of them onlylib/blockringmoved since528b9a6c2(toyos-transport: a byte stream between two ends that do not trust each other, and its wake handshake (netring stage 2) #878); netring: a session region replaces the pipes between netstack and its clients (design, and the track that stages it) #863 is open.E1, E2 and E5 to E8 stay on the branch; nothing here rests on them. Every other fact is read from the tree at
867ec23ed, the demo's log and commit messages, and round 2's reading of the crypto agent's clone, each citing its site; Transition Disable from the WPA3 Specification v3.5 (Wi-Fi Alliance, 2025), and the downgrade from Vanhoef and Ronen, "Dragonblood: Analyzing the Dragonfly Handshake of WPA3 and EAP-pwd" (IEEE S&P 2020; IACR ePrint 2019/383), each at its section. Inferences are marked [I].🤖 Generated with Claude Code
https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy