docs(db): três comentários deixam de dizer que o test:db é cego para tabelas

Com o prelude do test:db reproduzindo o privilégio padrão de tabelas do
Supabase, três comentários passaram a afirmar um estado que não vale mais:
que o prelude cobre só funções e que por isso o caso de api_audit_log em
retencao-poda-e-expurgo fica verde com ou sem o revoke da migration 0258.

O texto novo diz a que ponto isso valia e o que foi medido: tirando
`update, delete` do bloco da 0258, o caso reprova com o prelude novo e
passa com o antigo. Só linhas de comentário mudam. O comentário no
baseline.sql fica dentro do bloco da 0258 e não altera o SQL aplicado.

DESKCOMM_GOV_INVARIANTS_EDIT: os dois arquivos de tests/invariants mudam
só em comentário, que a issue #887 torna falso. Nenhuma asserção muda.

Refs #887

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Pessoa
2026-09-17 08:54:37 -03:00
co-authored by Claude Opus 5
parent 4b0194db48
commit 83c3c0e5bf
3 changed files with 19 additions and 17 deletions
+4 -4
View File
@@ -24740,10 +24740,10 @@ comment on function public.fn_nascer_lead_da_conversa(uuid, uuid, uuid, uuid, te
-- três papéis podiam esvaziá-la com TRUNCATE. `anon`/`authenticated` só não
-- apagavam porque a RLS não tem policy de UPDATE/DELETE.
--
-- O prelude do `test:db` reproduz o default ACL do Supabase para funções, não
-- para tabelas; por isso o gate de grants ficava verde. O invariante
-- `audit-log-sob-o-default-acl-do-supabase` reproduz o de tabela e reaplica
-- ESTE bloco, extraído daqui pelo rótulo.
-- Até a issue #887 o prelude do `test:db` reproduzia o default ACL do Supabase
-- só para funções, e por isso o gate de grants ficou verde enquanto isto
-- estava aberto. O invariante `audit-log-sob-o-default-acl-do-supabase`
-- reproduz o de tabela e reaplica ESTE bloco, extraído daqui pelo rótulo.
--
-- O expurgo legítimo não depende destes grants: `fn_expurgar_auditoria_vencida`
-- (0167) é `security definer` de dono `postgres`. As FKs `on delete set null`
@@ -21,13 +21,14 @@ import { motivoDoErro, sql } from "./psql-transporte";
*
* ─── Por que um arquivo próprio ─────────────────────────────────────────────
*
* O prelude de `scripts/test-db.sh` reproduz o default ACL do Supabase para
* FUNÇÕES, não para TABELAS. No Postgres do gate a tabela nasce só com o que o
* dump concede, e a sonda de `retencao-poda-e-expurgo.test.ts` fica verde com
* ou sem o revoke de UPDATE/DELETE — ela mede um universo onde o defeito não
* pode existir. Mudar o prelude muda a régua de todos os arquivos da suíte; este
* arquivo reproduz o Supabase só para esta tabela, dentro de uma transação
* desfeita, e deixa o molde intacto.
* Ele nasceu porque o prelude de `scripts/test-db.sh` reproduzia o default ACL
* do Supabase só para FUNÇÕES: no gate a tabela nascia só com o que o dump
* concede, e a sonda de `retencao-poda-e-expurgo.test.ts` ficava verde com ou
* sem o revoke de UPDATE/DELETE. Desde a issue #887 o prelude reproduz também o
* de TABELAS, e aquela sonda passou a medir o Supabase. Este arquivo continua
* pelo que só ele tem: o CONTROLE (sem o bloco da 0258, a simulação reproduz o
* defeito e apaga a linha). É ele que prova que o universo medido é um em que o
* defeito existe.
*
* ─── Como ───────────────────────────────────────────────────────────────────
*
@@ -217,12 +217,13 @@ describe("append-only: por onde o expurgo pode passar, e por onde não pode", ()
// outras tabelas: `grep -nE '^GRANT [A-Z,]+ ON TABLE' supabase/baseline.sql
// | grep -v 'GRANT ALL'`).
//
// ⚠️ E ESTE CASO NÃO MEDE O SUPABASE REAL. O prelude do `test-db.sh`
// reproduz o default ACL do Supabase para funções, não para tabelas: aqui
// `api_audit_log` nasce só com o que o dump concede, e o caso fica verde
// com ou sem o revoke de UPDATE/DELETE da migration 0258. No Supabase o
// default ACL de tabelas dá UPDATE e DELETE aos três papéis; quem mede esse
// mundo é `audit-log-sob-o-default-acl-do-supabase.test.ts`.
// ⚠️ ESTE CASO SÓ MEDE O SUPABASE REAL DESDE A ISSUE #887. Até ela, o
// prelude do `test-db.sh` reproduzia o default ACL do Supabase só para
// funções: `api_audit_log` nascia só com o que o dump concede, e o caso
// ficava verde com ou sem o revoke de UPDATE/DELETE da migration 0258.
// Agora a tabela nasce com o que o Supabase dá, e o caso reprova sem esse
// revoke. Medido tirando `update, delete` do bloco da 0258: vermelho com o
// prelude novo, verde com o antigo.
const linhas = sql(`
select coalesce(string_agg(grantee || ':' || privilege_type, ',' order by grantee), '')
from information_schema.role_table_grants