feat: scoped-Editor migration safety net + docs (#990 slice 4) - #1049
Merged
Conversation
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.
Fatia 4 de 5, a última da #990. Implementada por agente
codex exec(gpt-5.6-sol, high); revisada por mim afirmação por afirmação — sem correções necessárias desta vez.O item que mais importa: o warning de boot
Antes das fatias 1–3, todo Editor operava o catálogo inteiro. Depois delas, um Editor sem grupo alcança apenas apps abertos — perda de acesso silenciosa num upgrade. O startup agora emite um WARN no
STARTUP_LOG_TARGET(o mesmo alvo do banner, que aparece na aba Logs mesmo no nívelwarndefault) nomeando as contas, não só contando.Verificado no código, não no relatório:
lower(role) = 'editor'— a lição da fatia 2 aplicada sem eu pedir — comORDER BY usernamepara saída determinística.tracing, captura a saída e verifica nívelWARN, targetruscker_startup, contagem, nomes ordenados, e o silêncio quando todos têm grupo. Cobre o caso" , "(grupos só com espaço).tracing-subscriberentra como dev-dependency, já pinada no workspace — nada de terceiro entra na árvore de produção.Documentação: conferida contra o código
A matriz de papéis do
admin.mdafirmava que Editor não alcança Usuários nem Grupos, o que ficou falso. Reescrita com o escopo real de cada seção, incluindo a nuance de que app restrito só poraccess-usersnão tem fronteira de grupo e segue Admin-only.Fui atrás de exagero, que é o risco de uma fatia de doc: ela afirma que a importação de YAML também é escopada. É — via
prepare_scoped_import, com fail-closed se o catálogo não carregar. Afirmação sustentada.O
SECURITY.mdganhou o que mais serve a uma auditoria futura: o 404 documentado como não-divulgação deliberada (alvo inexistente e alvo fora do escopo são indistinguíveis, para identificador chutado não revelar que o app de outro time existe), e a nota de que o escopo é lido a cada request em vez de copiado para a sessão — então remover alguém de um grupo vale no próximo clique.O
ROADMAP.mdnão ganhou checkbox aspiracional: o item de RBAC que já era[x]foi apenas detalhado, e OIDC/SAML/LDAP seguem desmarcados. Este repositório já se queimou com checkbox não verificado.Antes de subir no box e no hugo
A caixa de aviso na doc pede o passo concreto: dar pelo menos um grupo a cada conta Editor na release atual, antes de iniciar a versão nova. O warning de boot é a rede de segurança se alguém esquecer, não substituto dela.
Gate reexecutado por mim:
cargo testlimpo,clippy --all-targets -- -D warningssem warning,i18n-checkOK (nenhuma string nova de UI foi necessária).🤖 Generated with Claude Code