Status: Proposed. Date: 2026-09-28. Split out of ADR 0080, which attaches chapters by name and so cannot attach two chapters that share one. Nothing below is built yet.
Two chapters are named Translation, and they are two halves of one concept:
lib/hecks/grammar/translation.bluebook is the register of rule kinds. A Rule moves from proposed to admitted to retired and must execute in at least two targets before it is admitted. Its Map aggregate is an edge between two eras.lib/hecks/language/translation/ is the meta-model of one translations/*.bluebook edge file: the Translation aggregate (domain, from era, to era) and TranslationAggregate with its typed rule lists. MetaValidator loads it into the shared grammar registry, and TranslationJudge dispatches to it.They overlap. Rule.Kind repeats the language chapter’s rule words, held equal only by spec/translation_vocabulary_conformance_spec.rb, and Map duplicates the Translation aggregate. They have never shared a registry: Hecks::Grammar.grammar_chapters loads the grammar chapter alone. That separation is the only reason the shared name works today.
They become one chapter, spread over files the way lib/hecks/language/bluebook/ is:
grammar/translation.bluebook moves to lib/hecks/language/translation/rule.bluebook and keeps opening Hecks.bluebook "Translation".Map folds into Translation and TranslationAggregate, so an edge has one aggregate.Rule is where rule kinds are declared. The language chapter’s rule words read from it, so the conformance spec that holds two lists equal is no longer needed.Translation block in lib/hecks/grammar/grammar.hecksagon goes; the merged chapter is wired where the language chapter already is.Hecks::Grammar.grammar_chapters, and the globs in lib/hecks/codemod.rb and lib/hecks/corpus.rb, point at the new file.spec/parser_parity_spec.rb parses Translation as a chapter of several files.spec/corpus/translation.json loses its Translation::Map.* verbs in favour of the edge aggregate’s.Translation::Map is removed, which is a breaking change; it ships in a major version.TranslationGrammar. A few lines of change. Rejected: it keeps two lists of rule kinds and two edge aggregates, held together by a spec instead of by the model.