Skip to content

0.6.3's plural pass missed three code sites, reworded a fourth into nonsense, and never touched the docs #94

Description

@vyncint

Today — three code sites never got the helper the other thirty-six got:

$ mossaic-art --version
mossaic-art 0.6.3
$ mossaic-art '.' --year 2027 --no-colour --plan /dev/null | head -1
.  ·  2027  ·  5 of 53 columns  ·  1 days  ·  4 commits
$ mossaic-art '.' --year 2027 --commits 1 --no-colour --plan /dev/null | head -1
.  ·  2027  ·  5 of 53 columns  ·  1 days  ·  1 commits

and, in the --draw panel at every level, level 4 0 days 1 commits each.

One site that did get the helper lost its grammar — src/plan.rs:948-952, the markdown holed branch:

$ git diff v0.6.0..v0.6.3 -- src/plan.rs | sed -n '/Cannot be drawn cleanly/,+8p'
-                "**Cannot be drawn cleanly** — {} day(s) inside the letters are already \
+                "**Cannot be drawn cleanly** — {} {} inside the letters already \
                  lit, and nothing takes those away.\n\n",
-                self.holes
+                self.holes,
+                plural(self.holes, "day is", "days are")

$ … --track --format markdown … | sed -n 3p
**Cannot be drawn cleanly** — 14 days are inside the letters already lit, and nothing takes those away.

The verb moved in front of "inside the letters", so "already lit" became a reduced relative clause on the letters: the sentence now says the letters are lit rather than the days. The text renderer's equivalent (src/bin/mossaic-art.rs:798, "14 days are brighter than the picture wants") still reads correctly, so only the markdown path regressed — and markdown is what the Action publishes.

The docs were never regenerated. docs/ART.md:319 and :450 label their blocks "to reproduce this exactly":

$ sed -n '367,370p' docs/ART.md
  letters     ██████░░░░░░░░░░░░░░░░░░░░░░  18 of 75 bright
  owing       57 day(s) short, 5,994 contributions between them
  holes       61 day(s) inside the letters are lit and cannot be unlit
  around      23 day(s) outside the text have contributions

$ mossaic-art VYNCINT --year 2026 --track --merge art/vyncint-2026.json --today 2026-08-19 --no-colour --plan /dev/null | sed -n '8,11p'
  letters     ██████░░░░░░░░░░░░░░░░░░░░░░  18 of 75 bright
  owing       57 days short, 5,994 contributions between them
  holes       61 days are lit inside the letters and cannot be unlit
  around      23 days outside the text with contributions

$ grep -rn 'day(s)\|pixel(s)\|commit(s)' README.md docs/*.md | wc -l
      16

Every figure matches and every line is worded differently. The same holds for the overhang note (ART.md:74), the --background report (:106), the picture-tracking table (:326), the backfill report (:456-463) and two README blocks — all six checked. The backfill warning separately lost a verb: ART.md:457 says "61 day(s) inside the letters are already lit"; the binary now prints "61 days inside the letters already lit".

Why it is worth fixing — the first line of every drawing preview reads "1 days · 1 commits" for a one-day picture, after a release whose changelog says that exact class of slip was swept up ("Counts read as English… twenty-nine of them, on the first lines a new user reads"). grep -c '(s)' src/*.rs src/bin/*.rs returns 0, which is why the pass looked finished — the three surviving sites never had a (s) to find.

The markdown sentence is the first line of the body the Action hands to every channel action/README.md documents, and it appears only when the news is bad, so it is the one sentence a reader stops on. contribution-art posts it to a public issue on every short day; the comments already on its issue #1 carry the older, correct wording, so the next report will visibly read worse than the ones above it. tests/art_cli.rs:717 asserts only md.contains("Cannot be drawn cleanly"), so nothing pins it.

The docs are the larger cost. These blocks are not illustrations, they are the project's fixtures: --today exists so "a documented sample stops being true overnight" cannot happen, and the pages hand a reader a command and the exact output it produces. A reader who diffs their output against the page cannot tell wording drift from a real regression, and a contributor who copies the documented wording into a new message reintroduces the plural 0.6.3 removed. AGENTS.md:104 states the standard: "Documentation is checked, not maintained. Where a README states a fact the code owns, there is usually a test asserting the two agree." This is the same failure as closed #33 and #32, one release later, in the document that says it is exactly reproducible.

Fix — route the three sites through plural(): src/bin/mossaic-art.rs:262 and :655 hardcode {} days · {} commits, and src/draw.rs:529 pluralises nothing in {} commits each. Restore the word order in src/plan.rs:948-952 and pluralise the noun rather than the verb — "… — {} {} inside the letters are already lit, and nothing takes {} away." with plural(holes, "day", "days") and plural(holes, "it", "those"); the trailing "those" read oddly at holes = 1 before 0.6.3 as well, so it is not a regression, but it is worth fixing in the same breath. Put the dropped "are" back in the backfill warning — note there is no plural(n, "day is", "days are") call site anywhere in src to route it through, contrary to what the wording suggests.

Then regenerate the sixteen quoted blocks: every one is a single command with --merge art/vyncint-{2026,2027}.json --today 2026-08-19 --plan /dev/null, so they can be pasted rather than retyped.

The part that matters most is the check AGENTS.md already claims exists. tests/art_cli.rs:1715 already reaches into the docs, so the cheapest version is a test that runs the documented invocations and asserts each quoted block is a substring of the output — the fixtures are pinned by --today precisely so that is possible. A regenerating script is the alternative, but a test that fails is worth more than a script nobody runs.

Done whenmossaic-art '.' --year 2027 prints "1 day · 4 commits" and --commits 1 prints "1 commit"; the --draw panel prints "1 commit each"; the markdown holed line reads as a sentence at holes = 1 and holes > 1, with a test asserting the whole sentence rather than its first four words; the backfill warning reads "…are already lit"; grep -rn 'day(s)\|commit(s)\|pixel(s)\|cell(s)\|template(s)' README.md docs/ action/ returns nothing; every command docs/ART.md labels "to reproduce this exactly" produces output containing its block verbatim; and a test fails if any of them drifts again.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingdocumentationImprovements or additions to documentationgood first issueGood for newcomers

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions