Skip to content

instructions: every guest test, aarch64 included, runs on the guest runner - #1179

Merged
Japabu merged 2 commits into
mainfrom
docs/guest-verdicts-on-runner
Nov 4, 2026
Merged

Japabu merged 2 commits into
mainfrom
docs/guest-verdicts-on-runner

Conversation

@Japabu

@Japabu Japabu commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

#1173 let aarch64 guests run "on a quiet Mac on demand". The owner ruled that the development machine is the owner's working machine and never quiet, so it gives no guest verdict.

Change

Root CLAUDE.md's guest paragraph now reads:

An agent's guest evidence, aarch64 included, comes only from the guest runner through .github/workflows/guest-rows.yml's dispatch (tests/CLAUDE.md), and agents may dispatch their own selected rows. aarch64 guests run there emulated and show neither timing nor aarch64's weak ordering, which kernel/loom/ checks.

  • Scope. The rule covers agents' evidence, which is what holds today. The nightly is frozen. issues/the-nightly-is-frozen-so-nothing-runs-the-guest-matrix.md now has this exit: the nightly resumes with its guest lanes on the guest runner rather than on GitHub's machines. Because only a workflow_dispatch-only workflow may name that runner, a design for a scheduled job is owed at resumption. Lines 52 and 53 keep their nightly mentions.
  • Ordering. The runner emulates aarch64 under TCG on an x86-64 host, so it cannot expose aarch64's weak ordering. The "AArch64 waits for a metal bench" bullet therefore drops "shared atomics or DMA ordering that only aarch64 exposes" as a reason to run aarch64 guests. The paragraph above points at kernel/loom/ instead.
  • No other copies. tests/CLAUDE.md, implementer.md and reviewer.md had no copy of the "quiet Mac" line.

Checks

  • grep -rn -i "quiet mac\|on a quiet\|quiet host\|\bMac\b" CLAUDE.md */CLAUDE.md .claude/agents/ finds nothing (exit 1).
  • This PR changes only instructions and one issue record, so it needs no build or guest run.

Remaining

The harness's HOST NOT QUIET message in tests/toyos.rs says "re-run on a quiet host". That describes re-running on the runner and is left alone.

🤖 Generated with Claude Code

…unner

The owner ruled that the development machine is the owner's working
machine and never quiet, so it gives no guest verdict. #1173's
allowance for aarch64 guests on a quiet development machine goes; every
guest row, aarch64 included, runs through guest-rows.yml's dispatch,
where aarch64 is emulated and settles order, completion and
correctness, not timing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Japabu

Japabu commented Nov 4, 2026

Copy link
Copy Markdown
Collaborator Author

Review of #1179 at a605d51 (r1)

Architectural assessment. This is one changed line in root CLAUDE.md, an instruction-only change, so no build or guest run is needed. The first clause carries out the 2026-11-05 ruling directly. It removes the development-machine allowance from #1173, names no machine and keeps tests/CLAUDE.md as the operational home. The PR's grep claim holds: at head no CLAUDE.md file, subtree CLAUDE.md or .claude/agents/ file sends guest verdicts to a Mac, a quiet host or a local run. implementer.md:27 and tests/CLAUDE.md:7 already point only at guest-rows.yml. Two problems remain. The new sentence's universal scope collides with the nightly guest lanes that the same file relies on. Its emulation clause also overclaims.

Findings

BLOCKER 1. CLAUDE.md:60: "a guest run anywhere else is no verdict" contradicts the nightly lanes in the same file and their issue.

  • The nightly lanes run somewhere else. nightly.yml's kvm and tcg jobs call guest.yml, and guest.yml runs on GitHub-hosted ubuntu-24.04. Under the new sentence, none of their results counts as a verdict.
  • The same file still relies on them. CLAUDE.md:52 says "The broad integration matrix runs nightly". CLAUDE.md:53 says "nightly covers the rest" of the aarch64 rows.
  • The open issue relies on them too. The exit of issues/the-nightly-is-frozen-so-nothing-runs-the-guest-matrix.md is "the nightly resumes, its guest container on 11.1.3", which means GitHub-hosted runs again.
  • The nightly cannot simply move to the guest runner. The CI security rule allows only a workflow_dispatch-only workflow to name the guest runner (reviewer.md:46, build/ci.rs's only_a_dispatch_reaches_a_self_hosted_runner), and nightly.yml is scheduled.

Read literally, the new rule leaves the nightly with no possible verdict. Either the ruling also covers the nightly or it does not; the orchestrator should settle which.

  • If the ruling is about where agents get guest evidence, which is the problem stated in the PR, narrow the sentence to that, for example "an agent's guest verdict comes only from there". Lines 52 and 53 can then stay.
  • If the ruling also covers the nightly, the nightly design needs the owner's decision, and lines 52 and 53 and that issue's exit must change in this PR.

The current wording does neither.

BLOCKER 2. CLAUDE.md:60: "aarch64 runs there emulated, which settles order, completion and correctness, not timing" is false, and it repeats line 55.

  • The emulation part is accurate. guest-rows.yml declares an x86-64 Linux host with /dev/kvm, and build/arch.rs Arch::accel returns TCG for a non-host architecture.
  • "Correctness" is not.
    • Weak memory ordering is not exercised. TCG maps the guest's loads and stores onto the host's x86 TSO accesses. Reorderings that AArch64 allows and TSO forbids never happen there; tests/CLAUDE.md:25 makes the same point: "x86 TSO hides a missing acquire edge from every guest test".
    • CPU-feature paths are not exercised either. tests/CLAUDE.md:17 already says a green TCG run leaves CPU-feature-gated paths unverified.
    • The contradiction is new with this ruling. Line 53 tells a PR to run aarch64 guests for "shared atomics or DMA ordering that only aarch64 exposes". Before the ruling, the development-machine run used hardware acceleration and could expose such ordering. On the guest runner, the only remaining aarch64 lane cannot. This clause currently tells agents the opposite.
  • The rest repeats an existing rule. Line 55 already gives QEMU's scope ("order, completion, contents and counts; its clock is only a hang ceiling"), and tests/CLAUDE.md:17 gives the TCG facts.

Fix: Delete the clause, or replace it with the one fact that is new, for example "There aarch64 is emulated on an x86-64 host, which shows neither timing nor the weak ordering only aarch64 hardware exposes (kernel/loom/ checks ordering)." Then adjust line 53's "ordering that only aarch64 exposes" so it no longer suggests that the guest run catches ordering bugs.

Checked and fine

  • Faithfulness: the first clause matches the ruling: every guest test, aarch64 included, on the guest runner, and no development-machine verdicts. No machine is named.
  • References: no instruction file references the removed "quiet Mac" allowance. tests/CLAUDE.md's HOST NOT QUIET text describes the runner and is consistent.
  • PR description: it is accurate about what changed and what it searched.

SEND BACK

… ordering

The rule now scopes to what holds today: an agent's guest evidence comes
only from the guest runner's dispatch. The nightly is frozen; its issue's
exit now says its guest lanes resume on the guest runner, which owes a
design for a scheduled job under the dispatch-only runner guard.

aarch64 on the runner is TCG on an x86-64 host, so it shows neither
timing nor aarch64's weak ordering; kernel/loom/ checks ordering. Shared
atomics and DMA ordering therefore no longer justify an aarch64 guest run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Japabu

Japabu commented Nov 4, 2026

Copy link
Copy Markdown
Collaborator Author

Orchestrator verification of a605d5173..2e2b1f4c1: instructions and one issue record only, with no code. Both r0 blockers are resolved as ruled. The guest sentence is scoped to an agent's guest evidence, and the nightly's future is recorded in the freeze issue's exit. The emulation clause now says that only timing and weak ordering are not shown, pointing at kernel/loom/, and the ordering item is dropped from line 53.

@Japabu
Japabu marked this pull request as ready for review November 4, 2026 23:08
@Japabu
Japabu added this pull request to the merge queue Nov 4, 2026
Merged via the queue into main with commit 116dde5 Nov 4, 2026
10 checks passed
@Japabu
Japabu deleted the docs/guest-verdicts-on-runner branch November 4, 2026 23:12
Japabu added a commit that referenced this pull request Nov 5, 2026
Brings #1179 (every guest test runs on the guest runner). No conflict.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant