Skip to content

Four more example decks, and move piper setup out of the README - #23

Merged
Aduneer merged 1 commit into
mainfrom
examples-and-docs
Aug 19, 2026
Merged

Four more example decks, and move piper setup out of the README#23
Aduneer merged 1 commit into
mainfrom
examples-and-docs

Conversation

@Aduneer

@Aduneer Aduneer commented Aug 19, 2026

Copy link
Copy Markdown
Owner

Groundwork before v0.3.0, in three parts.

Example decks

Deck
http-status.csv 18 codes, tagged by class
elements.csv 19 symbols, weighted towards the ones from Latin names — the only ones worth a flashcard
nato-phonetic.csv All 26
general-knowledge.csv Grew from 5 cards to 12 real ones

What's 2 + 2 - 1? was filler next to every other deck here and is gone.

nato-phonetic.csv turns out to be the first shipped deck that exercises the single-key guard. Reviewed reversed its answers are single letters, so a card answered Q collides with quit and one answered A with audio. Checked against the real binary rather than assumed:

reversed, answer is "Q":   [Enter] submit   [a] play audio   [?] hint
reversed, answer is "A":   [Enter] submit   [?] hint   [q] end session
normal,   answer "Quebec": [Enter] submit   [a] play audio   [?] hint   [q] end session

Both withheld exactly when the card could accept them, and both answer correctly.

Two things I deliberately did not do

No pictures on the existing language decks. spanish.csv and japanese.csv run foreign → English, so a picture shows the meaning, which on those cards is the answer. That is the rule colores.csv exists to demonstrate, and following it here means not doing the obvious thing.

No shipped audio, for the reason --generate-audio exists: recordings are rendered locally, not committed. What was actually missing was the command, so the README now carries it — with voice names taken from voices that exist rather than guessed. ja_JA-hi_fi_captain-medium is not the ja_JP the naming convention suggests.

README

The piper install-and-troubleshoot material moves to docs/audio.md. It was the one section that was reference rather than tour: how to install a TTS engine, where its voices live, the extra package Japanese needs.

Being straight about the result: the README did not get shorter — 653 lines to 657. The setup appendix left; a deck table and the audio recipe arrived. That is a better balance rather than a smaller file. The bigger split (Syncing and Development out too, roughly halving it) is still available if it is ever wanted.

A test for content

The example decks were entirely uncovered. They are data, so a missing comma does not fail to build — it quietly drops a card, or ships one whose answer is empty and can therefore never be got right.

Every examples/*.csv is now loaded and checked: every non-blank line became a card, no question or answer is blank or normalises to nothing, and every picture a deck names is actually present.

Verified the check can fail rather than trusting that it passes:

$ printf 'git stash pop\n' >> examples/git.csv        # a card with no answer
FAIL (line 1901): deck.size()

$ sed -i '1s|images/red.png|images/missing.png|' examples/colores.csv
FAIL (line 1912): picture.good() was false

Testing

1184 unit checks (up from 680 — the deck validation checks every card) and 47 golden cases, green on gcc and clang, optimised and sanitised, clean in an env -i clean room, and verified from a fresh clone.

Groundwork before v0.3.0, in three parts.

EXAMPLE DECKS

http-status.csv (18 codes, tagged by class), elements.csv (19 symbols, weighted
towards the ones from Latin names, which are the only ones worth a flashcard),
and nato-phonetic.csv (all 26). general-knowledge.csv grew from 5 cards to 12
real ones; "What's 2 + 2 - 1?" was filler next to every other deck here and is
gone.

nato-phonetic.csv turns out to be the first shipped deck that exercises the
single-key guard. Reviewed reversed its answers are single letters, so a card
answered "Q" would collide with quit and one answered "A" with audio. Checked
against the real binary rather than assumed: reversed, the Q card's legend
withholds "[q] end session" and the A card's withholds "[a] play audio", and
both answer correctly.

NO PICTURES ON THE EXISTING LANGUAGE DECKS, deliberately. spanish.csv and
japanese.csv run foreign to English, so a picture would show the meaning, which
on those cards is the answer. That is the rule colores.csv exists to
demonstrate, and following it here means not doing the obvious thing.

NO SHIPPED AUDIO either, for the reason --generate-audio exists: recordings are
rendered locally, not committed. What was missing was the command, so the
README now carries it, with voice names taken from voices that actually exist
rather than guessed -- ja_JA-hi_fi_captain-medium is not the ja_JP the naming
convention suggests.

README

The piper install-and-troubleshoot material moves to docs/audio.md. It was the
one section that was reference rather than tour: how to install a text-to-speech
engine, where its voices live, and the extra package Japanese needs.

The README did not get shorter -- 653 lines to 657. The setup appendix left and
a deck table and the audio recipe arrived. That is a better balance rather than
a smaller file, and the bigger split (Syncing and Development out too, roughly
halving it) is still available if it is ever wanted.

A TEST FOR CONTENT

The example decks were entirely uncovered: they are data, so a missing comma
does not fail to build, it quietly drops a card -- or ships one whose answer is
empty and can therefore never be got right. Every examples/*.csv is now loaded
and checked: every non-blank line became a card, no question or answer is blank
or normalises to nothing, and every picture a deck names is actually present.

Verified the check can fail, rather than trusting that it passes: a card with
no answer trips the line count, and a repointed image path trips the picture
check.

1184 unit checks and 47 golden cases, green on gcc and clang, optimised and
sanitised, and clean in an env -i clean room.
@Aduneer
Aduneer merged commit e78b8e6 into main Aug 19, 2026
4 checks passed
@Aduneer
Aduneer deleted the examples-and-docs branch August 19, 2026 19:06
Aduneer added a commit that referenced this pull request Aug 19, 2026
Pictures on cards, sync that puts two machines' reviews back together, and a CI
matrix that checks what used to be checked by hand. PRs #20-#23.

The CHANGELOG entries gained their PR numbers, which the file's own preamble
promises and these four had been written without.

No transcript changed for the version bump, which is what the <VERSION>
placeholder in normalise.awk exists for: releasing does not touch 47 expected
files. The demo GIF is already current -- it was re-rendered in #22, and doing
so is what caught the two terminal-detection bugs that release fixes.
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