Static copy
Copied from docs/en/adp/ADP-004-unicode-identifier-policy.md in https://github.com/poppy-team/aipo-lang (MIT). Pinned to revision ce47c4e070404fc41722ccd8e2b7b808b99062a8, blob cf59b1e3d61f173d4d68e453f7dd4e6f81eedeb2. The source repository remains canonical; this copy is refreshed through a sync pull request, not live.
Status: draft (open questions — characterization only, no restrictions added) Related: crates/aipo-cli/tests/unicode_security.rs (pins current behavior), docs/evidence/P01-G02-*.md, UAX #31, UTS #39 (consulted, not adopted) Authority: subordinate to the Language Reference and the no-invention policy
char::is_alphabetic (first) and is_alphanumeric (rest), plus _. Consequence: precomposed non-ASCII letters work (é, 中, α, Cyrillic); combining marks, zero-width characters and bidi controls are rejected with AIPO_LEX_UNEXPECTED_TOKEN.e + U+0301 identifier is rejected instead of composing to é. (String literals are normalized by the lexer per ADP-001 Q5; identifiers are not.)сount and Latin count coexist as distinct bindings with no warning.len counts code points.AIPO_LEX_UNEXPECTED_TOKEN the right (if generic) signal?