From 569f52c2c4d6477fb79c5a689eaa8eebff99e94f Mon Sep 17 00:00:00 2001 From: Will Gordon Date: Sat, 1 Aug 2026 22:34:05 -0400 Subject: [PATCH] fix(db): removes stale raw-SQL allowlist entry for cursor route MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The cursor auto-import route no longer contains raw SQL — that query now lives in src/lib/cursor/tokenExtractor.ts, outside the route/handler scope check-db-rules scans. The allowlist entry was stale, tripping the stale-enforcement gate. --- scripts/check/check-db-rules.mjs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/scripts/check/check-db-rules.mjs b/scripts/check/check-db-rules.mjs index cc348d69f5..667a0c3e01 100644 --- a/scripts/check/check-db-rules.mjs +++ b/scripts/check/check-db-rules.mjs @@ -82,16 +82,19 @@ export const INTENTIONALLY_INTERNAL = new Set([ export const KNOWN_UNEXPORTED = INTENTIONALLY_INTERNAL; // (c) Leituras de SQL contra bancos EXTERNOS, permitidas por design (#3500). -// Estas rotas NÃO consultam o DB do OmniRoute (getDbInstance) — elas abrem o -// SQLite de OUTRO aplicativo (Cursor / Kiro) para auto-importar credenciais. -// Por isso NÃO podem viver em src/lib/db/ (que é o domínio do DB do OmniRoute): -// são leituras read-only de um arquivo externo, com caminho/escopo próprios. -// Continuam no allowlist como exceção DOCUMENTADA — o gate ainda bloqueia +// Esta rota NÃO consulta o DB do OmniRoute (getDbInstance) — ela abre o +// SQLite de OUTRO aplicativo (Kiro) para auto-importar credenciais. +// Por isso NÃO pode viver em src/lib/db/ (que é o domínio do DB do OmniRoute): +// é uma leitura read-only de um arquivo externo, com caminho/escopo próprio. +// Continua no allowlist como exceção DOCUMENTADA — o gate ainda bloqueia // QUALQUER novo SQL cru contra o DB do OmniRoute em rotas/handlers. // Toda a dívida real da Hard Rule #5 (15 rotas internas) foi migrada para // módulos src/lib/db/ nas slices do #3500; este set ficou só com as exceções. +// O análogo do Cursor (src/app/api/oauth/cursor/auto-import/route.ts) NÃO +// precisa de entrada aqui: o SQL contra o state.vscdb externo do Cursor vive +// em src/lib/cursor/tokenExtractor.ts, fora do escopo desta checagem (que só +// varre src/app/api/**/route.ts e open-sse/handlers/*.ts). const EXTERNAL_DB_ALLOWED = new Set([ - "src/app/api/oauth/cursor/auto-import/route.ts", // read-only no itemTable do SQLite do Cursor (DB externo) "src/app/api/oauth/kiro/auto-import/route.ts", // read-only no SQLite do Kiro (DB externo) ]);