corpus_shapes.jsonl was born from the 13 rows that were already tagged; build_shapes_corpus.py --coverage reports 1/4/1/4/3 names for shapes 1–5, and shape 1's one name (John Smith) instantiates the notation with every optional slot empty. The contract tier as a whole is broader (corpus_rules carries the rules.md examples), but the shapes corpus's promise — coverage answerable by shape — is one name deep.
Per shape: enumerate the notation's variations (each optional slot, plus the pairings that exercise distinct branches — a fork per row, not a combination matrix, per mechanisms.md#VOCABULARY-EXERCISES-FORKS); FIRST tag existing cases.py rows that already instantiate a variation with reviewed expectations; THEN author rows for the gaps; regenerate, and classify any new-name arrivals at the old baselines under the rows' own classifications (the corpus-tier arc's procedure, decisions.md). Shapes 4/5 are the model — their variations exist because the feature work that shipped them authored them.
corpus_shapes.jsonlwas born from the 13 rows that were already tagged;build_shapes_corpus.py --coveragereports 1/4/1/4/3 names for shapes 1–5, and shape 1's one name (John Smith) instantiates the notation with every optional slot empty. The contract tier as a whole is broader (corpus_rules carries the rules.md examples), but the shapes corpus's promise — coverage answerable by shape — is one name deep.Per shape: enumerate the notation's variations (each optional slot, plus the pairings that exercise distinct branches — a fork per row, not a combination matrix, per
mechanisms.md#VOCABULARY-EXERCISES-FORKS); FIRST tag existing cases.py rows that already instantiate a variation with reviewed expectations; THEN author rows for the gaps; regenerate, and classify any new-name arrivals at the old baselines under the rows' own classifications (the corpus-tier arc's procedure,decisions.md). Shapes 4/5 are the model — their variations exist because the feature work that shipped them authored them.