wiki/’s four kind-folders were originally named to match the kind value exactly (wiki/concept/, wiki/entity/, wiki/source/, wiki/synthesis/) — a folder held pages of that kind, so the folder name was the value with no transform. That symmetry reads wrong on disk: a folder is a collection, and English collections of countable nouns pluralize (concepts/, entities/, sources/), matching every other plural-noun folder convention in the ecosystem this vault sits in. #97 raised this as a naming defect, not a functional one.
The fix decouples the two: kind-folders pluralize (wiki/concept/ → wiki/concepts/, wiki/entity/ → wiki/entities/, wiki/source/ → wiki/sources/), while kind values stay singular (concept, entity, source, synthesis — unchanged in frontmatter, in place.KINDS, in every place a kind is compared or validated as a value). synthesis has no distinct plural form, so its folder is unchanged either way. This means the folder name no longer matches its kind value 1:1 — place.py’s KIND_FOLDERS mapping becomes the single source of truth for the transform, in both directions (kind → folder for path-building, folder → kind for page_record.py deriving a page’s kind from where it lives).
The cutover is hard: no dual-accept fallback that reads both wiki/concept/ and wiki/concepts/ as valid. A vault is fully migrated or it isn’t; a one-off migration script (deleted after use, not a permanent vault.py subcommand) moves every page via Vault.move_page — which already fixes inbound links as a side effect — and aborts loudly on any same-slug collision between the old singular folder and an existing plural one, rather than silently overwriting or merging. Migration scope is plugin-managed vaults only: a vault this plugin created and has always owned the folder structure of. Onboarding an arbitrary external vault with unknown or mixed folder naming is a separate, larger problem, out of scope here.
place.py’s KIND_FOLDERS (kind → folder) and its inverse FOLDER_KINDS (folder → kind) are the only place this mapping is allowed to be spelled out. Any other module that today hardcodes a folder string (chain_of_evidence.py’s wiki/source check, for one) must import the mapping instead of duplicating it, so the plural/singular split can never drift out of sync between path-building and path-reading.wiki/concept/..., concept/...) needed updating to the plural form as part of this change — not because the tests were wrong, but because the hard-cutover policy means there is no transition period during which both forms are simultaneously valid, including in tests.$WIKI_ROOT) is a plugin-managed vault and therefore in scope for the migration script, run once as part of landing this change — it does not get to lag behind its own governing convention doc.