Skip to content

# two documentation pages passed locally and failed on the build machine for weeks #79

Description

@Hawkynt

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions