Arquitectura del Sistema
La aplicación impone estrictamente un modelo de cuatro capas inspirado en Clean Architecture.
Arquitectura en Capas
- Capa UI (
src/routes/,src/lib/components/)
Presentación pura. Renderiza datos de la capa de Estado y dispara métodos del Estado en las interacciones. No realiza I/O. - Capa de Estado (
src/lib/state/)
Svelte 5 runes (.svelte.ts). Actúa como la única fuente de verdad para la UI (issuesStore,modeStore). Orquesta llamadas a la capa de Servicios y mantiene la cola de commits. - Capa de Servicios (
src/lib/services/)
Lógica de dominio pura. Parsea YAML, valida issues, maneja relaciones y calcula hashes de integridad. Nunca toca el DOM, la red o el sistema de archivos. - Capa de Adaptadores (
src/lib/adapters/)
La única capa que realiza I/O. Expone una interfaz unificadaWritableDirectoryAdapterimplementada por estrategias Locales y Remotas.
Contexto del Sistema
A continuación se presenta una representación en Mermaid del Contexto del Sistema. El Usuario puede conectarse directamente a su sistema de archivos local, o enrutarse a través del navegador a un Proveedor Git mediante REST.
flowchart TD
User([Usuario]) -->|"Edición Local"| Browser("SPA quill.md")
User -->|"Edición Remota"| Browser
subgraph BrowserEnv ["Entorno del Navegador"]
Browser --> LocalAdapter["LocalFsAdapter"]
Browser --> RemoteAdapter["RemoteWritableAdapter"]
end
LocalAdapter -->|"File System Access API"| LocalDisk[("Disco Local .quill.md/")]
RemoteAdapter -->|"API REST"| GitHub[("API GitHub/GitLab")]
Servicios de Dominio
Los servicios de dominio están aislados del framework (SvelteKit) y del I/O. Toman entradas de strings en crudo y retornan objetos Issue fuertemente tipados.
Límite Estricto
Un Servicio nunca debe importar desde
src/lib/adapters/. La capa de Estado es responsable de obtener los datos mediante los Adaptadores y pasarlos a los Servicios.