This document tracks the evolution of Trellis’s architecture, preserving the context, pivots, and trade-offs made during development. Ideally, this serves as a primary source for academic analysis of the project’s history.
TypedRepository para mapear frontmatter automaticamente, tratando o Loam como fonte da verdade para formatos.NodeMetadata e LoaderTransition mantidos como DTOs públicos em loam_loader por conveniência experimental. (Resolvido em 2025-12-16 movendo para internal/dto).NodeMetadata e LoaderTransition para internal/dto para limpar a API do adapter e centralizar definições.Interpolator para permitir plugabilidade de estratégias de template (o usuário pode escolher entre Go Template, Legacy ou outros), mantendo o Core agnóstico.tools. Aceita tanto definições inline (Maps) quanto referências (Strings). Decidido aceitar o trade-off de tipagem em []any em troca de DX superior, mitigando riscos com validação manual e detecção de ciclos no Loader.sys.* no Engine. Escrita via save_to é bloqueada para prevenir injeção de estado. Leitura via templates é permitida para introspecção e error handling.Engine.Navigate para seguir estritamente applyInput (Update) -> resolveTransition (Resolve) -> Transition. Adicionado Deep Interpolation para argumentos de ferramenta em Engine.Render.examples/structured-logging servindo como referência canônica.SignalManager para isolar complexidade de concorrência. Adotado log/slog padronizado em todo o CLI.Runner para usar Functional Options Pattern. Motivo: A injeção de Store e SessionID via argumentos/propriedades tornou a API frágil e inconsistente (“bêbada”). A configuração deve ser imutável no momento da construção.Runner deve sempre delegar ao Engine.Navigate para garantir que eventos de ciclo de vida (OnNodeLeave) sejam disparados consistentemente, mesmo na saída.manual-saga, manual-security) para exemplos que demonstram wiring explícito de features que futuramente serão nativas/automáticas. Isso preserva o espaço semântico e educa o usuário sobre a diferença entre “Padrão Nativo” e “Implementação via Código”.file, redis, loam) e DTOs para pkg a fim de permitir o uso do Trellis como biblioteca. internal/dto foi consolidado em pkg/adapters/loam para aumentar a coesão, revertendo a extração de 2025-12-16.LoaderToolCall) para suportar YAML rico (x-exec aninhado) enquanto mantém o Core Domain estrito (map[string]string). Isso resolve a discrepância de UX vs Arquitetura mantendo o core puro.pkg/schema é standalone e trivial extrair como lib v0.8+ se tiver tração. Naming Strategy: v1 usa nomeação flexível interna (pkg/schema), decisão de export name quando houver evidência de escopo crescente (JSON Schema, coerção, code gen). Decidido esperar tração no próprio Trellis antes de investir em lib separada. See schema-validation-architecture.md.