15 KiB
| id | ticket | title | status | created | resolved | decision | tags | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| AGD-0013 | studio-editor-write-wave-supported-non-frontend-files | Definir a wave inicial de edicao no Code Editor apenas para arquivos aceitos e nao relacionados ao FE | accepted | 2026-03-31 | 2026-03-31 | DEC-0010 |
|
Pain
O Code Editor do Studio ja saiu da fase de abertura somente leitura e agora existe pressao para iniciar a wave de edicao de arquivos.
Mas o recorte pedido nao e "liberar escrita para tudo". O recorte correto e mais estreito:
- editar apenas arquivos aceitos pelo sistema;
- manter todos os arquivos relacionados ao frontend (
FE) emread-onlynesta etapa; - e evitar que o editor misture, por inferencia, tres conceitos diferentes:
- arquivo suportado para abrir,
- arquivo elegivel para highlight/presentacao,
- arquivo elegivel para mutacao e persistencia.
Se isso nao for fechado agora, a wave de escrita corre risco de nascer com uma regra pobre:
- ou o editor libera escrita para qualquer texto suportado;
- ou empilha
ifslocais noEditorWorkspace; - ou trata "arquivo do FE" apenas como detalhe visual, sem uma politica operacional clara de mutabilidade.
Context
Domain owner: studio
Owner surface: docs/specs/studio
Superficies e referencias relevantes:
docs/specs/studio/5. Code Editor Workspace Specification.mdainda trava a wave atual comoread-only;docs/specs/studio/6. Project Document VFS Specification.mdja moveu classificacao de suporte e abertura de documento paraprometeu-vfs;discussion/lessons/DSC-0010-studio-code-editor-workspace-foundations/LSN-0026-read-only-editor-foundations-and-semantic-deferral.mdconsolida que a primeira wave do editor foi propositalmente somente leitura;discussion/lessons/DSC-0012-studio-editor-document-vfs-boundary/LSN-0027-project-document-vfs-and-session-owned-editor-boundary.mdconsolida que o editor deve consumir um boundary documental, nao virar owner de runtime de filesystem;FilesystemProjectDocumentVfshoje diferencia:- arquivos
json/ndjson, - arquivos
bash, - arquivos do frontend pela linguagem registrada,
- e
textgenerico;
- arquivos
EditorWorkspaceainda marca oCodeAreacomosetEditable(false), ou seja, a wave de escrita exigira revisao normativa e nao apenas um ajuste tecnico.
Clarificacao importante para esta discussion:
- "arquivo aceito" nesta agenda significa arquivo que o sistema aceita abrir como documento textual no boundary atual;
- isso nao implica automaticamente que o arquivo e editavel;
- "arquivo relacionado ao FE" tambem nao pode ficar como intuicao editorial solta;
- a fronteira precisa virar regra operacional explicita, provavelmente no boundary documental ou em politica derivada dele;
- a verificacao deve ficar no
prometeu-vfs, usando o enquadramento dotypeIdcontraallowedExtensionsdoFrontendSpec.
Open Questions
- O criterio canonico de "arquivo aceito para edicao" deve ser o mesmo universo de documentos suportados para abrir; a politica de acesso do
prometeu-vfsdecide se cada documento suportado ficaread-onlyoueditablenesta wave. - "Relacionado ao FE" deve ser definido no
prometeu-vfspelo enquadramento dotypeIdcontraallowedExtensionsdoFrontendSpec. - Fora do escopo classificado como
FE, a wave editavel inicial fica limitada aos tipos textuais ja suportados hoje:text,json,ndjsonebash. - O bloqueio de escrita para FE deve usar o item
read-onlyna status bar, com espaco para evoluir para icone de cadeado aberto/fechado e futuro toggle de edicao; arquivosFEread-onlytambem devem mostrar alerta no topo informando que nao podem ser salvos e que qualquer alteracao sera perdida. - A politica de acesso documental deve morar sempre no
prometeu-vfs, inclusive paraloadesave. - A primeira wave de edicao inclui snapshot em memoria para documentos editaveis e persistencia em disco no
savea partir desse snapshot. - O menu global
Savenao deve ser usado para este fluxo;savee acao local do editor e deve viver numa barra de comandos no topo do editor, inicialmente comSaveeSave All. - Tabs com arquivos FE
read-onlypodem coexistir com tabs editaveis nao-FE no mesmo workspace, com estados visuais diferentes. - Os arquivos editaveis desta wave nao fazem parte da build em si.
- O snapshot editavel em memoria desta wave deve permanecer contido e separado do snapshot documental usado pelos fluxos que participam da build.
Options
Option A - Liberar escrita para todo arquivo textual suportado
- Approach: Tratar todo
VfsTextDocumentcomo potencialmente editavel, exceto binarios ou sem handler. - Pro: Menor custo inicial e quase nenhum metadado novo.
- Con: Viola diretamente o recorte pedido, porque arquivos de FE tambem passariam a ser editaveis ou exigiriam excecoes tardias e espalhadas.
- Maintainability: Baixa. A regra nasce ampla demais e depois precisa ser recortada por remendos.
Option B - Manter suporte no VFS e derivar editabilidade so no EditorWorkspace
- Approach: O
prometeu-vfscontinua apenas dizendo se o arquivo abre, e o editor decide localmente se aquele documento ficaread-onlyou editavel. - Pro: Mudanca pequena no boundary atual.
- Con: Regride a disciplina arquitetural recente; o editor volta a carregar regra de produto que deveria ser compartilhavel e auditavel.
- Maintainability: Media para baixa. Funciona rapido, mas enfraquece o boundary documental.
Option C - Introduzir uma politica explicita de acesso documental acima do VFS
- Approach: Manter o
prometeu-vfscomo owner de suporte/abertura e adicionar uma classificacao explicita dedocument access mode, distinguindo ao menosunsupported,read-onlyeeditable. - Pro: Separa corretamente:
- abrir o documento,
- classificar o documento,
- e decidir se esta wave permite mutacao.
- Con: Exige desenhar melhor onde essa politica mora e como ela chega ao editor sem inflar o contrato cedo demais.
- Maintainability: Forte. O sistema ganha uma regra clara e evolutiva para waves futuras.
Option D - Colocar a politica de editabilidade dentro do contrato documental do prometeu-vfs
- Approach: O proprio boundary documental passa a devolver metadados normativos de acesso, incluindo se o documento e
editableouread-onlynesta wave. - Pro: Mantem suporte, tipo documental e politica de acesso no mesmo owner, reduzindo ambiguidade nos consumidores.
- Con: Exige desenhar com cuidado o snapshot editavel em memoria, o ciclo de
savee a fronteira do que continua fora da build. - Maintainability: Forte, desde que o contrato permaneça estreito e centrado em acesso documental, nao em UX.
Discussion
As discussoes anteriores fecharam duas coisas importantes:
- o editor nao deve fingir semantica de IDE cedo demais;
- o editor nao deve voltar a ser owner de concerns documentais que ja foram movidos para
prometeu-vfs.
Isso significa que a wave de escrita precisa evitar dois erros simetricos:
- liberar mutacao ampla demais e quebrar o recorte de produto;
- ou resolver a restricao de FE com condicionais locais no
EditorWorkspace, quebrando a separacao arquitetural que acabou de ser criada.
O ponto mais delicado aqui e que "arquivo textual aceito" e "arquivo editavel nesta etapa" ja nao sao a mesma coisa. Hoje o sistema ja consegue abrir um conjunto de documentos textuais, inclusive documentos associados ao frontend. Mas o pedido atual cria uma nova regra de produto:
- alguns arquivos suportados continuarao
read-only; - e isso nao acontece por incapacidade tecnica de abrir o arquivo, mas por decisao deliberada de wave.
Portanto, o modelo tende a precisar de uma superficie nova de classificacao. Se ela nao existir, o editor fica tentado a usar heuristicas locais:
typeId == languageId- path em source roots
- extensao
- ou combinacoes desses sinais
Esse caminho e rapido, mas ruim. Ele espalha a politica de mutabilidade pelo consumidor errado.
Tambem houve um fechamento importante para a decisao:
- o recorte canonico de
FEdeve ser verificado noprometeu-vfs; - essa verificacao deve usar o enquadramento do
typeIdcontraallowedExtensionsdoFrontendSpec; - e o editor deve apenas consumir essa classificacao pronta, sem rederivar a regra localmente.
Se isso nao for fechado, o time pode permitir escrita em arquivos do frontend por acidente apenas porque eles aparecem como text, json ou outro tipo textual generico.
Outro fechamento importante desta agenda e que a primeira whitelist editavel nao cresce alem do que o produto ja suporta hoje como texto:
textjsonndjsonbash
Ou seja, a wave inicial de edicao nao abre novo suporte documental.
Ela apenas permite mutacao em um subconjunto dos documentos textuais que ja existem hoje, excluindo o escopo classificado como FE.
Tambem ja existe um fechamento arquitetural relevante sobre ownership:
- a politica de acesso nao deve viver em policy layer solta no
studio; prometeu-vfsdeve ser o owner deload,savee da classificacaoread-onlyversuseditable;- para documentos editaveis desta wave, o VFS deve manter um snapshot em memoria durante a sessao;
- quando houver
save, o VFS persiste em disco o conteudo desse snapshot; - o editor consome esse estado e dispara a intencao de salvar, mas nao reimplementa a politica nem o fluxo de persistencia.
Tambem ficou fechado que o universo canonico de documentos continua sendo o conjunto suportado pelo VFS. O que muda nao e o universo de abertura, mas a politica de acesso aplicada a cada documento suportado:
- alguns suportados permanecem
read-only, como o escopo deFE; - outros suportados podem entrar como
editablenesta wave; - e essa decisao continua centralizada no
prometeu-vfs.
Isso empurra a agenda com mais forca para a direcao de Option D.
Outro limite importante tambem ficou explicitado:
- os arquivos editaveis desta wave nao participam da build em si;
- portanto, a wave de escrita nao pode inferir integracao com pipeline, recompilacao, invalidacao de artefatos ou qualquer contrato de build;
- o escopo aqui e documental/editorial, nao de toolchain.
- isso tambem significa que o snapshot editavel em memoria nao deve se misturar com snapshots documentais ou entradas que alimentem a build;
- deve existir contencao clara entre:
- o estado editorial temporario usado pela sessao de edicao;
- e o estado documental/build-facing que outros fluxos do sistema possam consumir.
Essa contencao importa porque "ter snapshot em memoria" nao pode virar permissao implicita para o restante do produto observar rascunhos editoriais como se fossem input canonico de build.
A direcao mais coerente hoje parece ser preservar o boundary documental e introduzir um conceito explicito de politica de acesso. Essa politica pode morar:
- dentro do
prometeu-vfs, se quisermos que o owner documental responda tambem pela mutabilidade da wave; - ou numa camada de policy ainda no dominio
studio, mas acima do VFS, desde que oEditorWorkspacecontinue apenas consumindo a decisao pronta.
Com o fechamento atual, a agenda ja converge para descartar a segunda alternativa.
O que parece fraco e empurrar isso para o EditorWorkspace, e o usuario tambem ja fechou que a politica de acesso deve passar sempre por prometeu-vfs.
No plano de UX, a direcao tambem ficou suficiente para a proxima etapa:
- o estado
read-onlydeFEdeve aparecer na status bar; - essa superficie pode evoluir mais tarde para um toggle explicito de habilitar/desabilitar edicao por arquivo;
- o
prometeu-vfsdeve, portanto, ja nascer pensando em contexto persistente de acesso por documento; SaveeSave Allnao pertencem ao menu global do shell e sim ao editor, em uma barra de comandos propria no topo;- arquivos
FEread-onlynao podem ser salvos; - ao abrir esse tipo de arquivo, o editor deve mostrar um alerta no topo informando que ele e
read-onlye que qualquer alteracao sera perdida.
Tambem vale registrar desde ja a implicacao para um futuro prometeu-lsp integrado ao Studio:
- o objetivo nao e portar o suporte das linguagens Prometeu para VSCode ou para um editor externo;
- portanto, a agenda de escrita nao deve introduzir dependencia de protocolo externo como fundamento da edicao;
- um futuro
prometeu-lspintegrado deve ser tratado como consumidor semantico in-process ou Studio-owned acima do mesmo substrate de sessao, e nao como dono da politica de acesso documental; - esse consumidor futuro deve observar o estado documental/snapshots editoriais necessarios para analise, sem colapsar a contencao entre estado editorial temporario e inputs canonicos de build;
read-onlyparaFEnesta wave significa apenas bloqueio de mutacao editorial, nao proibicao de leitura ou analise semantica futura;- a integracao semantica continua sendo tema de decisao propria e nao deve ser inferida automaticamente a partir desta wave de escrita.
Observacao cravada para o proximo ciclo:
- quando o escopo de
FEfor liberado para edicao, oprometeu-lspintegrado ao Studio deve entrar em questao como consumidor do conteudo disponibilizado peloprometeu-vfs; - para documentos abertos, a analise deve enxergar o snapshot em memoria da sessao;
- para documentos nao abertos, a analise pode ler o estado em filesystem exposto pelo mesmo boundary;
- isso reforca que
prometeu-vfsprecisa permanecer como substrate documental canonico do editor e da futura analise semantica integrada.
Resolution
Esta agenda convergiu para uma direcao suficiente para decision.
Recomendacao final: evoluir para uma decisao que introduza uma classificacao explicita de acesso documental para o Code Editor, separando:
- arquivo nao suportado;
- arquivo suportado porem
read-only; - arquivo suportado e editavel.
Fechamentos aceitos:
- manter todo arquivo relacionado ao
FEemread-onlynesta wave; - deixar o
prometeu-vfsverificar se otypeIddo documento cai no conjunto deallowedExtensionsdoFrontendSpec; - manter como universo canonico os mesmos documentos suportados para abrir, sem criar registro paralelo de elegibilidade fora do
prometeu-vfs; - limitar a wave editavel inicial, fora do escopo de
FE, aos tipos ja suportados hoje:text,json,ndjsonebash; - fazer
prometeu-vfsser o owner deload, snapshot editavel em memoria esaveem disco para esses documentos; - tratar essa wave como escopo documental que nao participa da build em si;
- manter contencao explicita entre snapshot editorial em memoria e qualquer snapshot/build-input de carater canonico;
- expor o estado
read-onlydeFEna status bar, com espaco para futura evolucao a toggle por arquivo; - adicionar uma barra de comandos no topo do editor com
SaveeSave All, em vez de usar o menu global do shell; - permitir coexistencia de tabs
read-onlydeFEcom tabs editaveis nao-FE; - e mostrar alerta no topo para arquivos
FEinformando que saoread-only, nao podem ser salvos e que qualquer alteracao sera perdida. - registrar que um futuro
prometeu-lspintegrado ao Studio deve consumir o mesmo substrate de sessao/documentos sem virar owner da politica de acesso ou forcar compatibilidade com editor externo.
Next step suggestion: converter esta agenda em decision normativa para propagar a wave de escrita controlada do editor para specs, plano e implementacao.