Skip to content

v4 Update: Clanker Edition

Latest

Choose a tag to compare

@folkengine folkengine released this 26 Jul 18:35
  • Added an OKF
    knowledge bundle in .okf/ — 14 concept files across 6 areas covering the
    Ruby API, the syllable file format, the language catalog, the CLI, the
    development playbooks, and three recorded decisions.
  • Expanded CLAUDE.md with the project's architecture, conventions, and the
    rules for consulting and maintaining the knowledge bundle.
  • Documented the bundle in README.md.
  • Added the Welsh language (WELSH), seeded from real Welsh name roots.
    Note: no CLI flag was wired up for it — reachable from the library only.
  • Added the Belter language (BELTER), the creole from The Expanse, with a
    -b/--belter CLI flag.
  • Both files were generated with the lang-gen skill.
  • Added a -d/--demonic CLI flag for the experimental DEMONIC language,
    which had shipped without a way to select it from the command line.
  • Added a -k/--klingon CLI flag for KLINGON, likewise unreachable before.
  • Added the lang-gen skill, which generates a fully integrated language from
    a plain-English theme.
  • Added the experimental German Curse language (GERMAN_CURSE) via lang-gen,
    with a /--german-curse CLI flag.
  • Added a portable, LLM-agnostic version of the lang-gen prompt in docs/.
  • Raised minimum required Ruby version to 3.4.0 (dropping 3.0–3.3 support).
  • Set .tool-versions to Ruby 3.4.10.
  • Bumped dependencies: rake (~> 13.4), rexml, concurrent-ruby.
  • Updated CI workflow and Rubocop settings.

Fixes from the first full-codebase audit (see docs/AUDIT_Fable_5.md).

  • slop is now a runtime dependency in the gemspec rather than a Gemfile
    entry, so the installed CLI actually starts.
  • Fixed compose(1) crashing: compose_array returns [@pre] for counts
    below 2 instead of a String, making the return type honest.
  • Fixed blank lines in language files: refresh now strips before the
    empty check.
  • Fixed a potential infinite loop: determine_next_syllable pre-filters
    compatible candidates instead of rejection-sampling, and raises
    ArgumentError naming the file and syllable when no candidate exists.
  • Cyrillic and German letters are now classified: added Cyrillic vowels and
    consonants plus ö, ü, ß, so the +v/+c/-v/-c flags in the four
    *-ru.txt files and in german-curse.txt are actually enforced. They were
    silent no-ops before.
  • Fixed the broken Syllable clone constructor and a malformed
    raise ArgumentError.
  • Documented the intentional dual classification of y as both vowel and
    consonant.
  • Added spec/languages/test-blank.txt and test-incompatible.txt fixtures,
    plus an adjacency spec that walks composed names pairwise.
  • Corrected the README syllable range to "between 2 and 5" and fixed four
    "eyllable" typos.