## Visão de arquitetura alvo ### Camadas 1. **FileDB**: texto, URI/path, line-index, snapshots. 2. **Lexer/Parser**: produz **AstArena** (NodeId + spans por nó). 3. **Binder/Resolver**: produz **SymbolArena** + índices (def/ref). 4. **Typecheck**: produz **TypeArena** + facts (node→type, symbol→type). 5. **Analysis Export**: `analysis.json` (full) + `symbols.json` (leve e estável). 6. **LSP Server**: consome `AnalysisDb` e responde requests. ### IDs padronizados (newtypes) * `FileId(u32)` * `NodeId(u32)` * `NameId(u32)` (interner) * `SymbolId(u32)` * `TypeId(u32)` * `ProjectId(u32)` * `ModuleId(u32)` ### Invariantes * AST é **imutável** após construção (normativo na spec PBS). * Nenhuma fase expõe referências diretas entre nós; apenas **IDs**. * IDs externos são aceitos, mas sempre passam por **validate/resolve** (API checked). --- ## Regras para Junie (para reduzir vai-e-volta) 1. Não “inventar design”. Se algo não estiver especificado, **criar TODO** e parar. 2. Não mudar formatação/estilo fora do escopo. 3. Todo novo tipo público precisa de doc-comment curta e exemplo. 4. Toda mudança de JSON precisa: * `schema_version` bump (se não for backward) * teste de snapshot 5. Cada PR deve deixar `cargo test` verde.