8.2 KiB
| id | ticket | title | status | created | accepted | agenda | plans | tags | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| DEC-0009 | studio-editor-document-vfs-boundary | Estabelecer `prometeu-vfs` como boundary documental de projeto para o Studio | in_progress | 2026-03-31 | 2026-03-31 | AGD-0012 |
|
|
Context
O Code Editor do Studio ja fechou sua primeira wave como shell editorial read-only, mas a implementacao concreta ainda instancia diretamente servicos filesystem-backed para:
- montar a arvore estrutural do projeto;
- abrir arquivos;
- carregar conteudo de documentos;
- e aplicar regras de suporte ou nao suporte a arquivos.
Isso mantem concerns de I/O e sincronizacao acoplados ao EditorWorkspace, quando o owner correto desses concerns deve ser um boundary documental de projeto.
Tambem ficou fechado na agenda que:
- esta etapa nao introduz novas capacidades editoriais alem das que o
EditorWorkspaceja possui hoje; - o estado documental precisa continuar vivo mesmo quando o
Code Editornao esta em foco; - o
Project Navigatornao deve ver filesystem diretamente; prometeu-lspdeve continuar reservado para a futura camada de protocolo/handlers;- e packer/assets permanecem fora deste boundary.
Decision
- O repositório SHALL introduzir um novo modulo-base chamado
prometeu-vfs. prometeu-vfsSHALL ser o boundary documental de projeto consumido pelo Studio paratree,open filesedocument content.- O Studio MUST passar a tocar o disco atraves de
prometeu-vfspara o escopo coberto por este boundary. - O escopo desta primeira wave MUST transportar apenas as capacidades hoje existentes no
EditorWorkspace; nenhuma nova feature editorial SHALL ser adicionada nesta etapa. prometeu-vfsSHALL viver no lifecycle de sessao de projeto do Studio, nao no lifecycle de foco doEditorWorkspace.- O snapshot de
prometeu-vfsMUST cobrir apenas conteudo do projeto. - A
treeexposta porprometeu-vfsMUST ser estrutural e de dados apenas; ela MUST NOT carregar concerns visuais ou view-model concerns de UI. - O
Project Navigatordo Studio SHALL consumir uma entidade que representa a arvore inteira do projeto e MAY solicitar atualizacoes mais pontuais do que um reload completo. - A abertura de arquivos no Studio MUST passar por
prometeu-vfs, inclusive quando o backend concreto continuar sendo filesystem. - Regras de arquivos, plugins e suporte ou nao suporte MUST morar em
prometeu-vfs; o Studio SHALL apenas apresentar o erro ou estado resultante. - A API oficial inicial de
prometeu-vfsSHALL ficar concentrada em RPC/comandos/queries. prometeu-vfsMAY manter eventos internos como parte de seu runtime, mas esses eventos MUST NOT ser publicados como API oficial nesta primeira wave.refreshSHALL permanecer somente manual nesta primeira wave.watchersMUST permanecer fora de escopo desta decisao e MUST NOT ser introduzidos por inferencia durante planning ou implementation.prometeu-vfsSHALL nascer como primitive util do dominiostudio: hoje para o editor, e futuramente podendo servirprometeu-lsp.prometeu-lspMUST permanecer como namespace/modulo separado, reservado para a futura camada de protocolo/handlers acima deprometeu-vfs.- Packer, assets e demais dominios MUST manter ownership proprio e MUST NOT ser absorvidos por
prometeu-vfssem decisao posterior explicita.
Rationale
Esta decisao fecha a fronteira correta entre shell editorial e runtime documental.
O Studio precisa continuar owner de:
- layout;
- controls;
- navigator visual;
- estado de apresentacao;
- e UX de erro.
prometeu-vfs precisa passar a ser owner de:
- leitura estrutural do projeto;
- resolucao de documentos;
- abertura de arquivos;
- regras de suporte;
- refresh manual;
- e sincronizacao documental de sessao.
Isso remove do EditorWorkspace um conjunto de concerns que nao pertencem ao shell.
Criar prometeu-vfs como modulo novo e superior a renomear prometeu-lsp porque:
- preserva a hierarquia conceitual correta;
- evita ruido editorial nos roadmaps ja existentes;
- e mantem
lspcomo consumidor futuro do substrate documental, nao como nome prematuro do substrate em si.
Manter eventos publicos fora da primeira wave tambem e deliberado:
- o modulo continua livre para estabilizar sua maquina interna;
- o contrato externo inicial permanece menor e mais controlado;
- e nenhum consumidor passa a depender de detalhes de runtime antes da hora.
Technical Specification
1. Module Boundary
- O workspace Gradle MUST incluir um novo modulo
prometeu-vfs. - Esse modulo SHALL ser a superficie de integracao documental do Studio para o escopo coberto por esta decisao.
prometeu-lspSHALL permanecer separado e sem reaproveitamento nominal do namespace.
2. Project Session Ownership
- A instancia principal de
prometeu-vfsMUST pertencer a uma sessao de projeto do Studio. - O
EditorWorkspaceMUST consumir essa instancia, e MUST NOT ser o owner do lifecycle documental. - Troca de foco entre workspaces MUST NOT destruir o estado documental da sessao.
3. Filesystem Access
- Para o escopo coberto por esta decisao, o Studio MUST acessar o disco atraves de
prometeu-vfs. - O backend inicial de
prometeu-vfsSHALL ser filesystem-backed. - Essa decisao MUST NOT ser interpretada como criacao de um filesystem universal para todos os dominios do produto.
4. Structural Tree Contract
prometeu-vfsMUST expor uma representacao estrutural do projeto inteiro.- Essa representacao MUST incluir apenas dados e metadados estruturais/documentais necessarios ao consumo.
- Essa representacao MUST NOT conter:
- estado de expansao visual;
- selecao;
- foco;
- scroll;
- reveal;
- icones;
- ou qualquer chrome de navigator.
- O Studio MAY derivar view models visuais a partir dessa estrutura.
- O
Project NavigatorMAY solicitar atualizacoes pontuais, sem obrigar reload completo da arvore a cada interacao.
5. Document and Open-File Contract
- Abrir um arquivo no Studio MUST significar resolver esse arquivo atraves de
prometeu-vfs. - O conteudo de documento devolvido por
prometeu-vfsSHALL representar apenas o estado documental do projeto dentro da sessao atual. - Esta decisao MUST NOT ser interpretada como permissao para introduzir novas features de edicao, save, dirty tracking, merge ou write semantics.
6. Support Rules and Errors
- A determinacao de suporte ou nao suporte de um arquivo MUST ocorrer em
prometeu-vfs. - Regras relacionadas a plugins e resolucao de handlers de arquivo MUST morar em
prometeu-vfs. - O Studio SHALL apenas reagir ao resultado, exibindo erro ou estado apropriado com os mecanismos de UI existentes ou futuros.
7. Communication Model
- A API oficial inicial de
prometeu-vfsMUST ser RPC-oriented. - O modulo MAY manter eventos internos para coordenacao de runtime.
- Esses eventos internos MUST NOT ser expostos como API publica nesta primeira wave.
- Nenhum plano ou implementacao posterior MAY promover eventos internos a API publica por inferencia; isso exigira decisao posterior explicita.
8. Refresh and Watchers
refreshSHALL permanecer manual.watchersMUST permanecer fora de escopo.- Nenhum plano posterior MAY introduzir watching automatico por aproximacao arquitetural.
9. Domain Boundaries
- O escopo de
prometeu-vfsSHALL permanecer restrito ao boundary documental de projeto do dominiostudio. prometeu-vfsMUST NOT absorver responsabilidades do packer.prometeu-vfsMUST NOT redefinir ownership de assets.- Um futuro
prometeu-lspMAY consumirprometeu-vfs, masprometeu-vfsMUST NOT depender de uma camada LSP para justificar seu contrato.
Constraints
- Esta decisao e normativamente travada ao escopo hoje existente no
EditorWorkspace. - Nenhuma feature nova de editor pode ser adicionada por conveniencia durante a migracao para
prometeu-vfs. - O contrato inicial deve permanecer pequeno o suficiente para planejamento e implementacao direta.
- Qualquer tentativa de:
- expor eventos publicos;
- introduzir watchers;
- ampliar o snapshot para fora do conteudo do projeto;
- ou absorver outros dominios; exigira nova decisao explicita.
Revision Log
- 2026-03-31: Initial draft from AGD-0012.