# UCA 1.0 conformance corpus — every example the specification uses, plus the cases # the prose forbids. Run: python uca.py --check corpus.txt # Lines below "# --- invalid" are expected to FAIL. # --- valid: bases MA20 ID01 SY50 BR85 MA35 # --- valid: reserved prefix AI (OS range only; the reader's instructions) AI00 AI03 AI00_01 AI03_A01 # --- valid: structural parts SY50_10 SY50_10_01 IN50_01 IN50_02 IN50_03 MA35_01 # --- valid: EATS MA20_E01 IN50_2026_06_A01 BR20_T02 IN50_S04 # --- valid: temporal IN50_2026 IN50_2026_Q2 IN50_2026_06 IN50_2026_09 IN50_2026_W27 IN50_2026_06_15 IN50_2026_S04 # --- valid: trackers SY50_INC SY50_INC_2026 SY50_REL_2026 SY50_INC_2027 # --- valid: hosted MA50_01_SY20 MA50_01_SY20_A01 # --- valid: the foundation slot — 00 governs the series beneath it MA50_00 BR61_00 MA50_10_01_00 MA50_10_01_00_01 IN50_2026_S04_A00 SY50_20_03_A00 # --- valid: a dated stream files by E/A/T SY50_TRA_2026_09_22_E01 SY50_TRA_2026_09_22_A01 SY50_TRA_2026_09_22_T01 SY50_TRA_2026_09_22_E02 # --- invalid (each line names a rule the parser must enforce) ZZ99 # not one of the eleven cognates LP20 # illustrative prefix, off by default MA20_Q3 # quarter without a year MA50_W12 # week without a year ID20_INC_2026 # tracker in canon MA50_2026_INC # tracker beneath a date SY50_INC_01 # part beneath a tracker ID35_01_SY20 # hosting beneath canon BR85_01_SY20 # hosting beneath patterns MA50_2026_SY20 # hosting beneath a date MA20_01 # part beneath a canon leaf MA50_01_SY20_01 # guest address invalid in its own library SY50_2026_2027 # year beneath a year IN50_2026_13 # month out of range IN50_2026_06_32 # day out of range SY50_TRA_2026_09_22_01 # nothing numeric beneath a day; file by E/A/T IN50_2026_00 # 00 is a foundation slot, never a month IN50_2026_06_00 # never a day MA20__01 # empty segment ma20 # lowercase AI20 # reserved prefix AI holds 00-19 only AI00_SSL # no tracker beneath AI AI00_SSL_2026 # no tracker beneath AI