Skip to content

issues: two duplicate pairs merged, and two records renamed for the test each still owes - #1221

Merged
Japabu merged 1 commit into
mainfrom
hygiene-merges-renames
Nov 11, 2026
Merged

Japabu merged 1 commit into
mainfrom
hygiene-merges-renames

Conversation

@Japabu

@Japabu Japabu commented Nov 11, 2026 •

Copy link
Copy Markdown
Collaborator

Two pairs of records described one defect each, and two records sat under headings or paths their bodies no longer supported while a test they ask for is still owed. Records only; no code changes.

record action evidence
the-cxx-runtime-is-rebuilt-for-every-sysroot-key merged into the-cxx-runtime-is-rebuilt-with-every-sysroot, which takes its measurement and its build-output check Same defect: build/sysroot.rs calls libcxx::build for both targets in every sysroot build. The survivor has the constraint (configure probes link libtoyos_c.a) and the design exit. Neither slug is cited elsewhere
a-guest-with-no-virtio-keeps-no-serial-when-its-run-reds merged into a-red-run-keeps-no-serial-for-a-boot-whose-uart-is-qemus-stdio, which takes its one further fact: a console-port boot's console is not kept either Same defect: keep_serial (tests/common/lane.rs) keeps only uart-*.log, which a boot without the console port never writes. The older record's tests (syscall_fault_halts, panic_reboots) and panicked() are gone; the survivor matches tests/common/qemu.rs as it is (console_port) and its exit covers every boot. The further fact holds: a console-port boot's console is the virtio-serial port on QEMU's stdio, held only in memory (read_consoles in tests/common/qemu.rs); its uart-<seq>.log has only the 16550
a-refused-delete-has-already-thrown-the-file-away renamed no-test-stages-a-delete-the-device-refuses (its own heading), body retargeted from userland/fsd to system/fileserver The order is unchanged in system/fileserver/src/data.rs and fat.rs (volume asked first), and no host test stages a refused delete: an_unlink_stopped_anywhere_is_recovered judges crash states at a later mount. The test is still owed
a-full-data-volume-frees-space-only-at-a-commit renamed no-test-holds-what-a-full-data-volume-takes-with-no-commit-between, defect to tooling, body rewritten, both exit clauses kept The defect was the shadow-paging crate's (BitmapAllocator, NODE_RESERVE, gone since #1152). On the bcachefs engine a scratch test at 422915e2c refused a 1 MiB write on a full volume, then took it after an unlink and release with no commit: evidence. The engine's committed full-volume tests commit between the two, so the exit's test is still owed. Its second clause, deleting every file with no commit between, is owed too: a_full_volume_refuses_changes_by_name_and_still_removes_names_and_unmounts_clean removes 21 names, not every file, and a removal's grant (Draw::Freeing) can still answer NoSpace

Records: 752 on main at 34cb4c918, 750 on this branch.

Decisions a reviewer may want to question

  • The full-volume record is kept as a test owed rather than deleted. The scratch test shows the old defect is not reachable, on one volume size and one file. It is not committed because this work was limited to records and comments; the patch is in the evidence and could close the record as it stands. opened is today's date, since the heading is new.

Checks

No code or instruction file changes, so no host check applies. git grep on the branch finds none of the four removed slugs. The scratch test: cargo test -p bcachefs --lib scratch_full_volume -- --nocapture, exit 0, on the development host at 422915e2c with the patch in the evidence applied.

🤖 Generated with Claude Code

@Japabu

Japabu commented Nov 11, 2026

Copy link
Copy Markdown
Collaborator Author

Review of #1221 at 3498d4c84 (base 34cb4c918)

Assessment. Records only: +53/−97. Two duplicate pairs are merged and two records renamed. None of the four old slugs is cited anywhere on main or on the branch. The cxx merge and the refused-delete retarget are correct. The serial merge drops a fact that is still true, and the full-volume rename drops half of the test it still owes.

Findings

BLOCKER: a-red-run-keeps-no-serial-for-a-boot-whose-uart-is-qemus-stdio.md, the serial merge.

  • The PR says the merge adds nothing because the survivor's exit covers the older record's extra claim. That claim is "the console stream of a virtio guest is not kept either; only its UART is". It is true, and it is broader than the survivor's diagnosis.
  • On a console-port profile the console itself is the virtio-serial port on QEMU's stdio. read_consoles holds it in memory (tests/common/qemu.rs:2669-2680, 2799). uart-<seq>.log holds only the 16550: what the loader said, plus lines the port cannot carry (qemu.rs:1357, 1777-1781).
  • So a red console-port boot also leaves target/red-run-serial/ without its console.
  • The survivor's body says the console "exists only in the harness's memory" only "where the 16550 is QEMU's stdio". That implies console-port boots are kept, which is false. Someone who fixes only what the body describes would leave most profiles uncovered.
  • Fix: carry the dropped sentence into the survivor's body.

BLOCKER: no-test-holds-that-a-full-data-volume-takes-a-write-after-an-unlink-with-no-commit.md, Exit (line 22).

  • The old exit had two clauses: an unlink followed by a write is accepted with no sync, "and so is a delete of every file on it".
  • The new exit keeps only the first clause, and the PR body does not mention the drop.
  • The engine evidence the commit cites, a_full_volume_refuses_changes_by_name_and_still_removes_names_and_unmounts_clean (engine/tests/buckets.rs:178), removes 20 names and an orphan on a full volume between two commits. That is more than the 13 the old crate allowed, but it is not every file.
  • A Draw::Freeing grant can still answer NoSpace("no room left for the btree nodes a removal may write") (engine/mount/mod.rs:1132).
  • Fix: keep the clause in the exit, or cite what establishes that every file of a full volume can be removed with no commit between. A record whose owed test is still owed moves with the test, not without it.

SUGGESTION: the same record, line 18. Write lib/bcachefs/src/engine/tests/buckets.rs rather than tests/buckets.rs, which reads as a crate-level tests/ directory.

Checked and accepted:

SEND BACK

…est each still owes

Merged:

- the-cxx-runtime-is-rebuilt-for-every-sysroot-key into
  the-cxx-runtime-is-rebuilt-with-every-sysroot. Both describe
  `sysroot::build` running `libcxx::build` for every sysroot key. The
  survivor carried the constraint (configure probes link libc's archive)
  and the design exit; it takes the other's measurement and its check
  that a build after an ABI edit prints no `Building the C++ runtime`.
- a-guest-with-no-virtio-keeps-no-serial-when-its-run-reds into
  a-red-run-keeps-no-serial-for-a-boot-whose-uart-is-qemus-stdio. The
  older record's evidence was a red `syscall_fault_halts` at 8e525da
  whose kept lane directory was empty; that test, `panic_reboots` and
  `panicked()` no longer exist. The survivor names the profile shape as
  the harness has it now (`console_port`) and its exit covers every boot.
  It takes the older record's one further fact, still true: a
  console-port boot's console, the virtio-serial port on QEMU's stdio,
  is held only in memory too (`read_consoles`); its uart log has only
  the 16550.

Renamed, with the body rewritten against the code that replaced what it
described:

- a-refused-delete-has-already-thrown-the-file-away becomes
  no-test-stages-a-delete-the-device-refuses, its own heading. It cited
  `userland/fsd`; the order it describes is the same in
  system/fileserver's DATA and FAT volumes and no host test stages the
  refusal, so the test is still owed.
- a-full-data-volume-frees-space-only-at-a-commit becomes
  no-test-holds-what-a-full-data-volume-takes-with-no-commit-between, a
  tooling record. The defect was the shadow-paging
  crate's: a write after an unlink on a full volume was refused until
  the next sync, and `NODE_RESERVE` bounded how many deletes a full
  volume took. The bcachefs engine reserves for removals
  (`a_full_volume_refuses_changes_by_name_and_still_removes_names_and_
  unmounts_clean`) and a scratch test at 422915e took the write with
  no commit between, after refusing it before the unlink. The engine
  test removes 21 names between two commits, not every file, and a
  removal's grant (`Draw::Freeing`) can still answer `NoSpace`. What is
  left of the record's exit is both its clauses, held by no committed
  test: the write after an unlink, and the delete of every file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Japabu
Japabu force-pushed the hygiene-merges-renames branch from 3498d4c to 49e4738 Compare November 11, 2026 13:55
@Japabu

Japabu commented Nov 11, 2026

Copy link
Copy Markdown
Collaborator Author

Orchestrator verification at 49e4738, after review r1 SEND BACK (text-only blockers).

This PR changes only files under issues/ (checked with git diff --name-only against main). I read the fixes for each blocker the review named on this PR and they are resolved as the review asked; the review found no deletion that hides a live defect. Records only, so no build or test is owed beyond the tracker gates in the merge queue. Queueing.

@Japabu
Japabu marked this pull request as ready for review November 11, 2026 14:20
@Japabu
Japabu added this pull request to the merge queue Nov 11, 2026
Merged via the queue into main with commit a5af6ac Nov 11, 2026
10 checks passed
@Japabu
Japabu deleted the hygiene-merges-renames branch November 11, 2026 14:25
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