Repository navigation
Conversation
Review of #1254 at fbe8369 (on b566931)Architecture. This is a simplification. A bench is declared once, as data on the row. The plan is derived from those declarations. The bench of a boot is read from a fact every x86-64 boot already logs. Judges match Bench from the CPU signature. It does not identify a machine:
Plan. I compared Staging contract. It is intact: T14 staging with no new flag, Records. All five closures meet their exits. The dispatch-arm record goes further than its exit, by type. The rewrites carry the remainders. Blockers
Suggestions
Metal (LAND-pending-metal once the blockers are fixed)Judge each bench's
SEND BACK |
…ends one bench's boots to the other's A run's bench came from its readbacks, but its machine from `--metal-host` alone, with the T14 behind no flag. Two refusals guarded that only where no readback was there, so a directory one boot of two had answered, which is staged again, was staged for its readback's bench with invocations that named no host and so booted the T14; and the T14's readbacks with `--metal-host` naming the AMD bench's machine staged the T14's rows for that machine. `Bench::host` now names each bench's machine, and `target_of` resolves a run's bench and machine together: the machine is the bench's own unless `--metal-host` names another, and one that is another bench's is refused by name, whether the run stages, drives or judges. Every invocation names its `--host`, the T14's too, and `toyos-metal`'s own default is the T14's `Bench::host`. The two refusals go: `--metal-bench amd` alone stages the AMD bench. The harness test covers both cases above, and the README and records say how a run reaches its bench. The judge that binds a bench's ACPI tables calls them `tables`, and the Wi-Fi record says a radio row adds its own `Device`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Follow-up review of #1254 at 3074570 (d9495c1 rebased onto b053390, plus a review commit)Scope. This round checks the round-1 blockers and the review commit d9495c1..3074570: +132/−101 over 11 files.
Round-1 blockers
Suggestions taken:
The lib red is Blocker
Metal (LAND-pending-metal once rebased)Judge each bench's
SEND BACK. The rebase alone remains. The next round needs to check only the four moved bodies and the compile. |
…ends one bench's boots to the other's A run's bench came from its readbacks, but its machine from `--metal-host` alone, with the T14 behind no flag. Two refusals guarded that only where no readback was there, so a directory one boot of two had answered, which is staged again, was staged for its readback's bench with invocations that named no host and so booted the T14; and the T14's readbacks with `--metal-host` naming the AMD bench's machine staged the T14's rows for that machine. `Bench::host` now names each bench's machine, and `target_of` resolves a run's bench and machine together: the machine is the bench's own unless `--metal-host` names another, and one that is another bench's is refused by name, whether the run stages, drives or judges. Every invocation names its `--host`, the T14's too, and `toyos-metal`'s own default is the T14's `Bench::host`. The two refusals go: `--metal-bench amd` alone stages the AMD bench. The harness test covers both cases above, and the README and records say how a run reaches its bench. The judge that binds a bench's ACPI tables calls them `tables`, and the Wi-Fi record says a radio row adds its own `Device`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round-3 review of #1254 at 4e529a0 (rebased onto be76e6f)Scope. This round checks only round 2's blocker: carrying #1247's screen polls into the four moved functions. Everything else was settled at 3074570. Architecture. Nothing changed. The head differs from 3074570 only by #1247 and #1249, which came in from main. Round-2 blocker: resolvedThe four bodies equal main's arms. I compared them independently of
Each one carries #1247's polls:
None of them wraps a single needle like The diff against main shows only the move. The range-diff contains nothing else.
It compiles. Base be76e6f rather than dda500c: acceptable
FindingsNone. The PR body now names #1247 among the rebased-in changes and describes the base choice accurately. MetalThe criteria in round 2 stand unchanged for the queued run at 3074570. LAND (pending metal). |
…on metal Both benches are down. The AMD bench booted both `boot:testcases` images before they went, but no judge read the readbacks and the T14 booted neither, so the judged runs are owed: the record of rows that declare their benches names the runs, the benches and what main must show. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ends one bench's boots to the other's A run's bench came from its readbacks, but its machine from `--metal-host` alone, with the T14 behind no flag. Two refusals guarded that only where no readback was there, so a directory one boot of two had answered, which is staged again, was staged for its readback's bench with invocations that named no host and so booted the T14; and the T14's readbacks with `--metal-host` naming the AMD bench's machine staged the T14's rows for that machine. `Bench::host` now names each bench's machine, and `target_of` resolves a run's bench and machine together: the machine is the bench's own unless `--metal-host` names another, and one that is another bench's is refused by name, whether the run stages, drives or judges. Every invocation names its `--host`, the T14's too, and `toyos-metal`'s own default is the T14's `Bench::host`. The two refusals go: `--metal-bench amd` alone stages the AMD bench. The harness test covers both cases above, and the README and records say how a run reaches its bench. The judge that binds a bench's ACPI tables calls them `tables`, and the Wi-Fi record says a radio row adds its own `Device`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…on metal Both benches are down. The AMD bench booted both `boot:testcases` images before they went, but no judge read the readbacks and the T14 booted neither, so the judged runs are owed: the record of rows that declare their benches names the runs, the benches and what main must show. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cks' spawn records in main's form Main moved under the branch in three places this branch also changes: #1241 renamed `machine_shutdown_short_stop` to `machine_shutdown_with_a_thread_spinning`, which is now that name's `MACHINE_TESTS` entry; #1238 changed `virt_user_mode`'s arm, which this branch moved into a function and which now carries the change; and #1238 changed the kernel's spawn record to `spawn: pid=N (total=Xms) <path>` and the supervisor's to `started logkeeper pid=N`, which the one-clock check's planted log now writes beside the T14's first record. #1238's readers no longer read the older form, so the two bench readbacks this branch carries as fixtures, written before it, read as a boot with no record of logkeeper's spawn and a job with no spawn record. Their three lines each are rewritten in the form the kernel and the supervisor now write, with the same pids and times. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r4 of #1254: the rebase onto main
|
|
Orchestrator: review r4 LAND at b7a90ef (mechanical rebase onto e10b6fd verified by range-diff; fixture lines rewritten to the writers' current spawn format, held to source by |
…name the one they judged A METAL row said its boots and its judge and nothing of the machine it was written for, so a boot of one bench carried every row riding its label: the T14's `testcases` boot ran the AMD-Vi rows' deliberate DMA fault and was red on `amdvi_*` and `idle_entered`, the AMD bench's ran the T14's I219 claim (`test_rs_pci_reclaim` exited 1 there), a judge of `boot:benchcase` on the AMD bench was red on the two I219 rows, and every failed job read "on the T14". A row's registration now carries `on`: every bench, each bench having the devices it names (`toyos_metal::bench::Device`), or one bench alone. `select` takes a row only for a bench that runs it and leaves the rest by name with why, so a left row's jobs are in no image; a run whose every row is left is refused. A row no bench runs fails the registration check. A boot already says which machine it is: the kernel's first record carries the processor's signature. `Bench::of_log` reads the bench from that, a `Readback` carries it, and the judges that told the benches apart by three means of their own (the signature, the ACPI row, a search of both benches' tables) match on it instead. A failed job names its readback's bench; a run names its bench in its opening line, each boot's line and the timings line, which no longer prints the machine's vendor, product and BIOS strings. A run's bench is its readbacks' where its directory holds any, so judging needs neither `--metal-bench` nor `--metal-host`; a readback written before this change judges as before, since every boot has had that record. Staging takes `--metal-bench <t14|amd>`, the T14 without it, and `--metal-host` with no `--metal-bench` and no readback is refused, since the host names a machine and not which rows ride its boot; so is `--metal-bench amd` with no `--metal-host`, since `toyos-metal` boots the T14 unless told otherwise. A boot that ran on another bench than the run's is red with every row on it. The osbench README stages the AMD bench's run with both. The T14's plan is main's less the AMD bench's three jobs, in main's order (`--metal --list` before and after): `test_rs_pci_reclaim` leaves the shared `TESTCASES` arm for the one row that judges it, and that row and the Type-C row move so the order stands. `MACHINE_TESTS` and `SCREEN_TESTS` carry each test's function, so a registration with no dispatch arm does not compile; `run_machine_test` and `run_screen_test` go, and the eight screen tests whose bodies were arms are functions. Closes five records: the three that reported "on the T14" on every bench, the row that names no machine, and the registration with no dispatch arm. Two are rewritten to what is left: no unfiltered AMD-bench run has been judged since, and the timing record still names its machine by what Ubuntu reads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ends one bench's boots to the other's A run's bench came from its readbacks, but its machine from `--metal-host` alone, with the T14 behind no flag. Two refusals guarded that only where no readback was there, so a directory one boot of two had answered, which is staged again, was staged for its readback's bench with invocations that named no host and so booted the T14; and the T14's readbacks with `--metal-host` naming the AMD bench's machine staged the T14's rows for that machine. `Bench::host` now names each bench's machine, and `target_of` resolves a run's bench and machine together: the machine is the bench's own unless `--metal-host` names another, and one that is another bench's is refused by name, whether the run stages, drives or judges. Every invocation names its `--host`, the T14's too, and `toyos-metal`'s own default is the T14's `Bench::host`. The two refusals go: `--metal-bench amd` alone stages the AMD bench. The harness test covers both cases above, and the README and records say how a run reaches its bench. The judge that binds a bench's ACPI tables calls them `tables`, and the Wi-Fi record says a radio row adds its own `Device`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…on metal Both benches are down. The AMD bench booted both `boot:testcases` images before they went, but no judge read the readbacks and the T14 booted neither, so the judged runs are owed: the record of rows that declare their benches names the runs, the benches and what main must show. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cks' spawn records in main's form Main moved under the branch in three places this branch also changes: #1241 renamed `machine_shutdown_short_stop` to `machine_shutdown_with_a_thread_spinning`, which is now that name's `MACHINE_TESTS` entry; #1238 changed `virt_user_mode`'s arm, which this branch moved into a function and which now carries the change; and #1238 changed the kernel's spawn record to `spawn: pid=N (total=Xms) <path>` and the supervisor's to `started logkeeper pid=N`, which the one-clock check's planted log now writes beside the T14's first record. #1238's readers no longer read the older form, so the two bench readbacks this branch carries as fixtures, written before it, read as a boot with no record of logkeeper's spawn and a job with no spawn record. Their three lines each are rewritten in the form the kernel and the supervisor now write, with the same pids and times. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Orchestrator verification of the rebase onto d17f22c (cba026b): |
#1254 made every metal row say which benches it runs on. The `mitigations` row's judge holds a boot to its own bench's pinned words, and it ran on both benches, so it is `On::Every`, as the `microcode` row it rides with is. The comment stops listing the benches the field now names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Problem
A
METALrow named its boots and its judge and nothing of the machine it was written for, so a boot of one bench carried every row riding its label:testcasesboot ran the AMD-Vi rows' deliberate DMA fault (test_rs_usbd_spare_fault) and was red onamdvi_*,idle_enteredand every judge that requires a clean kernel log;testcasesboot ran the T14's I219 claim (test_rs_pci_reclaimexited 1 there), and itsboot:benchcasejudge was red on the two I219 rows;MACHINE_TESTS/SCREEN_TESTSname with no dispatch arm compiled and was found only by a boot.Resulting behavior
on:):On::Every,On::Having(&[Device::…])(each bench that has those parts: I219, embedded controller, HWP, Tiger Lake GPU, VT-d, AMD-Vi), orOn::Only(Bench)where the judge is written against one bench's own tables.selecttakes a row only for the run's bench and prints each left row with why ([metal] not run on the AMD bench: claim_reuses_its_remapping_entry needs an I219, which the AMD bench has not); a left row's jobs are in no image; a run whose every row is left is refused; a row no bench runs fails the registration check.CPUID.01H:EAX(microcode: cpu0 Intel signature 0x806c1 …).Bench::of_logmaps it tot14/amd, everyReadbackcarries it, and the judges that told the benches apart three different ways (signature, ACPI row, a search of both benches' tables) match onReadback::benchexhaustively. A failed job sayson the AMD bench; a run names its bench in its opening line, each boot's line and the timings line, which no longer prints SMBIOS vendor, product and BIOS strings.--metal-benchdisagreeing with its readbacks, is refused by name; a boot that ran on another bench than the run's is red with every row. Readbacks written before this change judge unchanged (every boot has written that record).Bench::hostnames each bench's machine (toyos@bench-t14,toyos@bench-amd), andtarget_ofresolves a run's bench and machine together. The machine is the bench's own unless--metal-hostnames another, and a--metal-hostthat is the other bench's machine is refused by name, whether the run stages, drives or judges. Every invocation names its--host, the T14's too, andtoyos-metal's own default is the T14'sBench::host. Staging the AMD bench is--metal-bench amdalone; the T14 needs no flag. A directory only one of whose boots answered, which is staged again, is staged for its readback's bench and that bench's machine.--metal --list --metal-bench amdprints the AMD plan.MACHINE_TESTSandSCREEN_TESTScarry each test's function, so a registration with no dispatch arm does not compile.run_machine_test/run_screen_testand their catch-all arms are deleted; the eight screen tests whose bodies were arms are functions.The T14's plan is main's less exactly the AMD bench's three jobs (
test_rs_idle_entered,test_rs_usbd_spare_fault,test_rs_usbd_spare_vector), in main's order:test_rs_pci_reclaimleaves the sharedTESTCASESarm for the one row that judges it.Consequential decisions
bench.rssays so and a host test holds the signatures distinct.boot.txt'smachine_*). Moving it to the bench needs a firmware identity the boot itself reports and keeps the pre-flash gate; that remainder isissues/a-metal-timing-record-names-its-machine-by-what-ubuntu-reads.md(rewritten from the record this closes).On::Everyare those whose code names no bench-specific part; that is not a claim that each has passed on the AMD bench:issues/no-unfiltered-amd-bench-run-has-been-judged-since-rows-declare-their-benches.md.--metal-bench amdwithout--metal-hostand--metal-hostwithout--metal-benchinstead, which missed a partly answered directory. The default removes both rules, and the one remaining check (no bench's boots on the other bench's machine) sits where bench and machine are resolved for every mode.cargo test --test toyos-build -- --metal --metal-readback <dir> <row>stages the T14 with no new flag, the request's lines arecargo run -p toyos-metal -- --image … --readback … --fat32-check --host …, and judging an existing readback directory touches no machine.toyos-metal's command line andboot.txt/verdict.txtare untouched.Records closed:
a-metal-job-that-fails-on-the-amd-bench-is-reported-as-failing-on-the-t14,a-metal-jobs-failure-names-the-t14-on-every-bench,a-metal-judge-says-on-the-t14-for-every-bench(the three duplicates),a-metal-row-names-no-machine-so-another-benchs-boot-carries-it,a-machine-tests-row-with-no-dispatch-arm-is-found-only-by-booting-it. Rewritten to what is left:a-metal-row-names-no-hardware-and-a-bench-without-it-reds→no-unfiltered-amd-bench-run-has-been-judged-since-rows-declare-their-benches;a-metal-run-asks-ubuntu-which-machine-it-is-and-the-boot-says-nothing→a-metal-timing-record-names-its-machine-by-what-ubuntu-reads.Checks and evidence
Evidence: ToyOSOrg/evidence@c0f6aba8e890 (paths masked; readbacks' SMBIOS strings never published). The second round's logs live under
r2/, at307457007on mainb0533900e. Every log opens with its revision and diff hash; all aree3b0c44298fc1c14, the clean tree. The first round's logs atfbe836956stay at the branch's root and are cited below where the rebase cannot have changed them.The change is the harness (
tests/toyos.rs,tests/common/metal.rs,tests/checks) andtoyos-metal's library, so the checks are the harness's own and that crate's:d17f22cc3(headcba026be9), a mechanical rebase; the evidence is underr5/.a_user_copy_highest_first_faults_or_ends_as_bad_address, and the kernel parameters it gavea_user_copy_faults_in_mid_copy_or_ends_as_bad_address. Both areMACHINE_TESTSentries now, calling exactly main's arms (moves.txt, with main before x86-64 user copies go by memcpy's rule, and a failed copy is a failure #1244 as the control).cba026be9:cargo test --test toyos-checks: 50 passed;cargo test -p toyos-metal: 77 passed;--test toyos-buildcompiles;e10b6fd49(headb7a90efc1) because main conflicted. The evidence is underr4/, all on the clean tree.machine_shutdown_short_stoptomachine_shutdown_with_a_thread_spinning. TheMACHINE_TESTSentry now carries main's name and comment.virt_user_mode's arm, which this branch moves into a function. The function now carries main'suntil_a_program_spawnsand comment.spawn: pid=N (total=Xms) <path>. The one-clock check's planted log keeps main's two spawn lines beside the T14's first record.MACHINE_TESTSentry equals main'srun_machine_testarm, and the eight moved screen tests equal main's arms (moves.txt; each comparison has a control against main before the change). The review commits are unchanged in range-diff.txt.149aaf72e,metal_each_benchs_own_readback_is_judged_as_that_benchfailed (log): no record of logkeeper's spawn, and no spawn record fortest_rs_pci_reclaim's pid. Commitb7a90efc1rewrites each fixture's three lines in the form the kernel and supervisor now write, with the same pids and times.b7a90efc1:cargo test --test toyos-checkspassed 50 (log), and--test toyos-buildcompiles. At149aaf72e(the same code apart from those fixtures and a comment):cargo test -p toyos-metalpassed 77, and clippy on both packages exited 0.be76e6f85(head4e529a08c) for A screen row waits for every line it reads off the panel #1247, which changedscreendump_untilto take every line a caller reads and edited fourrun_screen_testarms this branch moves into functions. The evidence is underr3/, all on the clean tree.screen_panic_muted,virt_early_panic,virt_early_fault,screen_fatal_behind_a_painter) carry A screen row waits for every line it reads off the panel #1247'swanted/on_the_panelarrays andPLAINconstants. Each equals main's arm atbe76e6f85(armcmp.txt: leading whitespace stripped,nameread as the literal; the branch before this rebase, the control, differs in all four).git range-diffof the branch before and after (range-diff.txt): the review commit is unchanged, and the first commit differs only in those four bodies, on both sides of the move. The wholetests/toyos.rschange against main is in toyos-rs-against-main.diff.cargo test --test toyos-build --no-runcompiles (exit 0), andcargo test --test toyos-checkspassed 49 (log).307457007:cargo test -p toyos-metal: 77 passed (log).cargo test --test toyos-checks: 49 passed (log). Among them are the metal ones over masked fixture readbacks of each bench:metal_each_benchs_own_readback_is_judged_as_that_bench,metal_judge_names_the_bench_it_judged,metal_profile_gives_each_bench_its_own_jobs,metal_bench_takes_its_own_rows_and_names_the_rest, andmetal_runs_bench_is_its_readbacks_and_else_the_lines. That last one now covers both cases review found: the AMD bench'stestcasesreadback without its watchdog companion stages the AMD bench ontoyos@bench-amd, and the T14's readback with--metal-host toyos@bench-amdis refused.toyos-buildandtoyos-metal, all targets, the workspace's adopted lints,-D warnings: exit 0 (log).cargo test --lib): 384 passed, 1 failed (log). The failure isllvm::tests::the_caller_s_environment_reaches_neither_the_build_nor_the_key, the macOSgit/SDKROOTdefect recorded inissues/the-llvm-environment-test-breaks-git-on-macos.md, inbuild/llvm.rs, which this PR does not touch.target_ofallowing the other bench's machine (host-unchecked);target_ofdefaulting every bench to the T14's machine (t14-by-default, the defect review found).307457007are identical to the first round's (dir). compare.txt: the T14's plan is main's less exactlytest_rs_idle_entered,test_rs_usbd_spare_faultandtest_rs_usbd_spare_vector, in main's order, every other boot identical. The AMD bench's drops the I219, EC, HWP, Tiger Lake and VT-d jobs and the T14-onlyacpicaseboot. Main'sMETALrows did not move with the rebase.claim_reuses_its_remapping_entryleft out by name.On::Every. With it, the AMD readback's judge reds the row with "test_rs_pci_reclaim exited 1 on the AMD bench", the original defect, and two host tests fail. Reverted, the 25 metal host tests pass.307457007(dir):boot:testcasesfor each bench, exit 2, the harness's "staged, not judged". Each prints the rows it leaves out and why. Every invocation names its--host.Metal. Both benches went down on 2026-11-11, so metal is no longer this PR's landing condition.
boot:testcasesimages staged at307457007before the benches went down, and its loop passed both. Those readbacks were deleted before a judge read them, and the T14 booted neither.issues/no-unfiltered-amd-bench-run-has-been-judged-since-rows-declare-their-benches.md. The rows areboot:testcases(testcasesandtestcases-watchdog), staged with--metal-bench t14and with--metal-bench amd, on both benches. They are judged with neither--metal-benchnor--metal-host. Main must show:request.txt's invocations carry that bench's--host;testcaseslog has none oftest_rs_usbd_spare_fault,test_rs_usbd_spare_vectorortest_rs_idle_entered, and noiommu: DMA FAULT owner=process;test_rs_pci_reclaim,test_rs_i219_msi,test_rs_counters_metalortest_rs_acpi_counted;loader_watchdog_armsis judged across both boots on each bench.Not run: the full
--ci host(the merge queue runs it), guest rows (no guest behavior changed).Risks
On::Everyname no bench-specific part in their code; that is not a claim that each passes on the AMD bench.issues/no-unfiltered-amd-bench-run-has-been-judged-since-rows-declare-their-benches.mdholds it, and the AMDtestcasesjudge requested here is a first slice of it.--metal-hostnaming a machine that is neither bench's is taken as the run's bench's machine. The readback's own bench check reds a boot that ran elsewhere.toyos-metalreads over ssh before the flash. Moving them to the bench label is outside this PR (orchestrator's ruling);issues/a-metal-timing-record-names-its-machine-by-what-ubuntu-reads.mdrecords it.d17f22cc3. Main moved under it by:MACHINE_TESTSentries;a_kernel_stack_overflow_names_its_stack, now a(name, fn)machine-test entry;virt_user_mode's arm and the spawn record form, which the fixtures now carry;307457007predate the last rebase's kernel changes. Nothing is staged now: the judged runs are owed on main.🤖 Generated with Claude Code