Skip to content

fix(plan): make ownership explicit and supersede atomic - #34

Closed
NomosLudens wants to merge 2 commits into
mainfrom
codex/integrate-kuan-strategic-plan-functionality-it8k6q
Closed

NomosLudens wants to merge 2 commits into
mainfrom
codex/integrate-kuan-strategic-plan-functionality-it8k6q

Conversation

@NomosLudens

Copy link
Copy Markdown
Owner

Motivation

  • Corrigir a ambiguidade da policy de propriedade de kuanyin_business_plans para evitar resolução incorreta de colunas dentro da subquery da policy.
  • Garantir que a operação de substituir uma decisão (supersede) seja atômica e não possa deixar decisões órfãs nem depender de rollback manual no código de aplicação.

Description

  • Adiciona a função auxiliar SQL public.kuanyin_can_own_plan(p_guardian_id, p_business_context_id) e substitui a policy kuanyin_business_plans_owner_all para usar essa função, removendo referências ambíguas a guardian_id/business_context_id na policy (arquivo: supabase/migrations/20260712002000_create_kuanyin_strategic_plan.sql).
  • Implementa public.kuanyin_supersede_plan_decision(...) como PL/pgSQL SECURITY INVOKER que faz FOR UPDATE na decisão antiga, insere a nova decisão e marca a antiga como superseded dentro da mesma transação, e só concede EXECUTE deste RPC para authenticated (arquivo: supabase/migrations/20260712002000_create_kuanyin_strategic_plan.sql).
  • Atualiza a server function supersedeKuanPlanDecision para chamar apenas o RPC via supabase.rpc(...), lançar erro honesto quando a RPC falhar e registrar writeKuanIntegrityLog somente após sucesso, removendo insert/update/delete manuais e rollback parcial no TypeScript (arquivo: src/lib/kuan-plan.functions.ts).
  • Adiciona testes focados e uma checagem de contrato textual para cobrir transições e o contrato SQL/server (arquivos: src/lib/kuan-plan.transitions.test.ts, src/lib/kuan-plan.sql-contract.test.ts e ajustes em src/lib/kuan-plan.transitions.ts).

Testing

  • Executados os lint/typecheck/tests/build com sucesso: bun run lint (OK), bun run typecheck (OK), bun run test (OK) e bun run build (OK).
  • Validação de runtime local: bun run start e curl -I http://127.0.0.1:3000/kuan/plano retornaram HTTP 200 (OK).
  • Inspeção contratual/textual confirmou que não há GRANT DELETE em kuanyin_plan_decisions, que o migration define kuanyin_can_own_plan e que a server fn usa .rpc("kuanyin_supersede_plan_decision") sem insert/update/delete manuais (teste criado: src/lib/kuan-plan.sql-contract.test.ts) (OK).

Nota final: este commit foi intencionalmente focado nos dois bloqueadores restantes; o merge depende de QA manual com Supabase real para validar RLS e persistência no fluxo de substituição de decisão antes de aprovar a entrega em produção.


Codex Task

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 12, 2026 •

Copy link
Copy Markdown
Contributor

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
kuan 588fef0 Jul 12 2026, 04:56 AM

@NomosLudens
NomosLudens deleted the codex/integrate-kuan-strategic-plan-functionality-it8k6q branch September 4, 2026 00:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant