Btrfs has a current page and LittleFs has a current page failed every CI run on this branch and passed every local run.
docs/filesystems/Btrfs.md no longer matches the implementation.
Expected string length 3604 but was 4198. Strings differ at index 2074.
Expected: "...ompressed extents.\n\n### BtrfsExtentMap\n\nWalks a Btrfs imag..."
But was: "...ompressed extents.\n\n### BtrfsWriter\n\nWrites spec-compliant..."
The generated page was missing a whole section on the build machine.
Root cause
FilesystemDocGenerator.LayoutTypes picked the type to describe like this:
var type = assembly.GetTypes()
.FirstOrDefault(t => t.IsClass && t.Name.EndsWith(suffix, StringComparison.Ordinal));
Assembly.GetTypes() promises no order at all, and more than one type ends in the same word:
FileSystem.Btrfs
Writer 2 matches: BtrfsWriter, BtrfsReader+BoundedWriter
FileSystem.LittleFs
Layout 3 matches: LittleFsLayout, LittleFsInPlaceModifier+TreeLayout, LittleFsLayout+Layout
BoundedWriter and TreeLayout are private helpers with no doc comment, and a type with no prose is skipped — so whichever machine picked the helper produced a page with the section missing. The page was not wrong on either machine. It was written on one and checked on another that made a different arbitrary choice.
Fix
Nested types are excluded, and the rest are put in a fixed order: the type actually named after this filesystem first (Btrfs + Writer), then one merely starting with the family name, then the nearest-named relative for a filesystem that shares an assembly and has no type of its own (DriveSpace lives with DoubleSpace), then shortest name, then full name — so every tie breaks the same way everywhere.
One page changed as a result: Adfs.md now describes AdfsWriter rather than AdfsNewMapWriter, which is the type the page is about.
Worth noting
This is the third defect this week whose whole nature was "two things agreed with each other and with nothing else". Here the two things were the same code on two machines.
Btrfs has a current pageandLittleFs has a current pagefailed every CI run on this branch and passed every local run.The generated page was missing a whole section on the build machine.
Root cause
FilesystemDocGenerator.LayoutTypespicked the type to describe like this:Assembly.GetTypes()promises no order at all, and more than one type ends in the same word:BoundedWriterandTreeLayoutare private helpers with no doc comment, and a type with no prose is skipped — so whichever machine picked the helper produced a page with the section missing. The page was not wrong on either machine. It was written on one and checked on another that made a different arbitrary choice.Fix
Nested types are excluded, and the rest are put in a fixed order: the type actually named after this filesystem first (
Btrfs+Writer), then one merely starting with the family name, then the nearest-named relative for a filesystem that shares an assembly and has no type of its own (DriveSpace lives with DoubleSpace), then shortest name, then full name — so every tie breaks the same way everywhere.One page changed as a result:
Adfs.mdnow describesAdfsWriterrather thanAdfsNewMapWriter, which is the type the page is about.Worth noting
This is the third defect this week whose whole nature was "two things agreed with each other and with nothing else". Here the two things were the same code on two machines.