mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user