The atom format

Everything in strands/ is plain markdown. Git is the source of truth; the CLI is one consumer of it. If the tool ever dies, the material is still readable and greppable.

A file

---
strand: countries
group: Europe / Nordic
tags: europe, nordic
---

Free prose before the first `###` is commentary and is ignored by the parser.
Use it to explain why a file is grouped the way it is.

### dk.capital
kind: capital
subject: Denmark
answer: Copenhagen
peg: A COPPER HEN roosting on a Danish pastry — copper-hen, Copenhagen.
peg_source: suggested

Keys

keymeaning
kindone of capital, flag, location, fact, contrast, causal
subjectwhat the atom is about — supplies {subject} to templates, and is the default answer for reverse cards
answerrequired
askoverrides the kind's question template; required for fact, contrast and causal
reverseoverrides the reverse template; reverse: none suppresses the reverse card
reverse_answeroverrides subject as the reverse card's answer
pegthe mnemonic image
peg_sourcesuggested (written for you), own (yours), none (no image)
tagscomma-separated
noteshown during review, never tested
sourceprovenance, if worth recording

Atoms versus cards

An atom is a fact. A card is a directional recall test, and scheduling state is keyed per card, because knowing "capital of Denmark → Copenhagen" does not mean you know "Copenhagen → which country". Those decay separately and so they are scheduled separately.

cards_for() expands one atom into up to two cards: dk.capital (forward) and dk.capital~r (reverse).

Question templates

The files hold facts; the wording of questions lives in one place, TEMPLATES in akasha/parse.py:

kindforwardreverse
capitalWhat is the capital of {subject}?{answer} is the capital of which country?
flagDescribe the flag of {subject}.Which country flies this flag: {answer}
locationWhere is {subject}? Region, neighbours, coastline.
fact / contrast / causalexplicit ask: required

Rewording every capital question is therefore a one-line change, not a 147-file sweep.

Adding a kind

Add an entry to TEMPLATES. Use (None, None) if the kind always needs an explicit ask:. lint will then accept it.

Ids

Convention, not enforcement:

Ids are the scheduling key. Renaming an id orphans its review historyakasha prune will show you the orphan; there is deliberately no rename command, because silently moving a decade of review history is worse than making you think about it.