Acerto com a CLI wslc 2.9.9: o que ela mudou, e o que ela ganhou - #9
Merged
Conversation
O Windows Update subiu a wslc de 2.9.4 para 2.9.9 e quebrou o app. O `--format json` virou NDJSON — um objeto por linha, sem array em volta — e `network list` renomeou `Id` para `ID`, então a view Redes morria em "Unexpected non-whitespace character after JSON". Todas as listagens passam agora por parseJsonLines, que aceita as duas formas: a CLI é instalada pelo Windows Update, não por nós, e o app não escolhe qual versão vai encontrar. Duas falhas silenciosas vieram junto, e nenhuma dava erro na tela. O `stats` chegava sempre vazio no motor CLI, porque o fallback era `--no-stream`, que deixou de existir. E três das quatro limpezas nem rodavam: nenhum `prune` da 2.9.9 aceita `--force`, e `image`/`volume prune` precisam de `--all`, senão limpam só as pendentes e os anônimos — bem menos do que o rótulo promete. A auditoria seguinte foi feita contra a árvore de `--help` da CLI, recursiva, não contra uma lista nossa. Foi assim que apareceu o `container cp` inteiro, que duas auditorias anteriores tinham deixado passar por enumerarem o que já conhecíamos. Ele chega como diálogo próprio, nos dois sentidos, e não é igual ao docker: entrando, o destino precisa ser uma pasta que já existe — a wslc não renomeia —, enquanto saindo ela cria o arquivo. Medido nos dois casos. Os logs abriam despejando o arquivo inteiro desde o primeiro byte, porque só mandávamos `--follow`. O botão da lista agora pede uma cauda e o título do painel diz qual recorte está em tela; "Logs com opções…" escolhe linhas, hora e intervalo. No motor nativo o log vem por callback, sem recorte, e lá o título não promete o que não pode entregar. A remoção forçada não virou item de menu. A ação normal continua onde estava e, quando a CLI recusa por "em execução" ou "em uso", o botão aparece no próprio aviso da falha — quem clica já leu o motivo. O dublê passou a seguir as mesmas duas regras, senão esse caminho só existiria contra a máquina de verdade. O resto da 2.9.8/2.9.9 entrou onde já havia lugar: as cinco opções do `network connect`, `--ip-range` no create, as nove do `image build`, `container create` como "criar sem iniciar", `--ip`/`--mount`/`--pull` no run, as cinco do `exec`, sinal e espera no stop (que o SDK também aceita, então valem nos dois motores) e labels de volume. O `-f` de `volume rm` e `network rm` NÃO é força: a ajuda diz "não gere erro se não existir", e ele só é usado na remoção em massa, onde a lista pode ter envelhecido entre ler e remover. Cada flag foi sondada contra a CLI instalada antes de entrar, e o que é exclusivo dela some da tela no motor nativo em vez de falhar depois de clicado. Um teste do terminal também era uma corrida latente: "conectado" casava tanto o chip de status quanto a primeira linha que o shell imprime.
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que aconteceu
O Windows Update subiu a wslc de 2.9.4 para 2.9.9 e quebrou o app. O
--format jsonvirou NDJSON — um objeto por linha, sem array em volta — enetwork listrenomeouIdparaID. A view Redes morria emUnexpected non-whitespace character after JSON.Junto vieram duas falhas silenciosas, que não davam erro nenhum na tela:
statsfalhava no JSON e caía em--no-stream, que deixou de existirpruneda 2.9.9 aceita--force— eimage/volume pruneprecisam de--all, senão limpam só as pendentes e os anônimosAgora toda listagem passa por
parseJsonLines, que aceita as duas formas: a CLI é instalada pelo Windows Update, não por nós, e o app não escolhe qual versão vai encontrar.O comando que faltava inteiro
A auditoria desta vez foi feita contra a árvore de
--helpda CLI, recursivamente, e não contra uma lista nossa. Foi assim que apareceu ocontainer cp— que duas auditorias anteriores deixaram passar justamente por enumerarem o que já conhecíamos.Ele entra como diálogo próprio, nos dois sentidos, e não é igual ao docker (medido contra o
loja-web):ERROR_PATH_NOT_FOUNDse não existir, eextraction point is not a directoryse existir. A wslc não renomeia.O rótulo diz "Pasta de destino" só do lado que morde. Some no motor nativo: não há nenhuma API de cópia entre as 62 do header.
Duas decisões de interação
Os logs abriam despejando o arquivo inteiro desde o primeiro byte, porque só mandávamos
--follow. O botão da lista agora pede uma cauda de 500 linhas, e o título do painel diz qual recorte está em tela — a diferença entre "o log todo" e "as últimas 500" não aparece em lugar nenhum, e quem procura uma linha que não está ali precisa saber por quê. "Logs com opções…" escolhe linhas, hora e intervalo. No motor nativo o log vem por callback, sem recorte, e lá o título não promete o que não pode entregar.A remoção forçada não virou item de menu. A ação normal continua onde estava e, quando a CLI recusa por "em execução" ou "em uso", o botão Remover mesmo assim aparece no próprio aviso da falha — quem clica já leu o motivo. O dublê de
mock.tspassou a seguir as mesmas duas regras da CLI, senão esse caminho só existiria contra a máquina de verdade.O resto da 2.9.8/2.9.9
network connectcom as cinco opções novas (alias, IP, link, link-local, driver-opt) ·--ip-rangeno create · as nove opções doimage buildnuma aba Avançado ·container createcomo "criar sem iniciar" ·--ip/--mount/--pullno run · as cinco doexec· sinal e espera no stop · labels de volume.Atenção a um nome: o
-fdevolume rmenetwork rmnão é força — a ajuda da CLI diz "não gere erro se não existir". É idempotência, e por isso só é usado na remoção em massa, onde a lista pode ter envelhecido entre ler e remover. Força de verdade só existe emcontainer rmeimage rm.Outros nomes curtos em que a wslc não copiou o docker, todos lidos no
--helpdo próprio comando:-nnologs(não--tail),-t/--timenostop(não--timeout),-ocomo--outputno build enquanto emvolume/network createé--opt.Verificado nesta máquina
npm run check— 383 testes de unidade (eram 352), typecheck, lint e formataçãonpx playwright test— 178 E2E (eram 165)loja-*ficou intactoUm teste do terminal era uma corrida latente e foi corrigido junto:
getByText('conectado')casava tanto o chip de status quanto o "Conectado a…" que o shell imprime, e quebrava por strict mode dependendo de quem chegasse primeiro.