Cópia estática
Copiado de docs/adp/ADP-004-unicode-identifier-policy.md em https://github.com/poppy-team/aipo-lang (MIT). Fixado na revisão ce47c4e070404fc41722ccd8e2b7b808b99062a8, blob afc69d639b4eb574321f2033ff27bc238a892b10. O repositório de origem permanece canônico; esta cópia é atualizada por um pull request de sincronização, não em tempo real.
Status: rascunho (questões em aberto — apenas caracterização, nenhuma restrição adicionada) Relacionado: crates/aipo-cli/tests/unicode_security.rs (fixa o comportamento atual), docs/evidence/P01-G02-*.md, UAX #31, UTS #39 (consultados, não adotados) Autoridade: subordinada à Language Reference e à política de não invenção
char::is_alphabetic (primeiro) e is_alphanumeric (demais) do Rust, mais _. Consequência: letras não ASCII pré-compostas funcionam (é, 中, α, cirílico); marcas combinantes, caracteres de largura zero e controles bidi são rejeitados com AIPO_LEX_UNEXPECTED_TOKEN.e + U+0301 é rejeitado em vez de se compor em é. (Os literais de string são normalizados pelo lexer conforme ADP-001 Q5; os identificadores não.)сount cirílico e o count latino coexistem como bindings distintos, sem nenhum aviso.len conta code points.AIPO_LEX_UNEXPECTED_TOKEN é o sinal correto (ainda que genérico)?