chore(OPS60): guard SEED_MEDIA_CONFIRM para escrita no bucket via db:seed:posts #66

Merged
fsolla merged 1 commit from OPS60-ops60-guard-de-intencao-explicita-para-escrita-no-buck into main 2026-08-18 20:11:55 +00:00
Owner

Closes #49

OPS60 — Guard de intenção explícita para escrita no bucket via db:seed:posts

Achado do /simplify da #37 (OPS52-media-guard): o sync do pnpm db:seed:posts escreve covers no bucket S3 das envs S3_* (Garage) sem flag de intenção — um worktree com a cópia all-or-nothing de credenciais de prod (worktree-env.mjs) rodando o seed contra DB local sobrescreve o key determinístico no bucket de prod silenciosamente.

Mudança

  • scripts/seed-posts.mjs: com as S3_* ativas (resolveS3StorageEnv(process.env).enabled), o modo sync exige SEED_MEDIA_CONFIRM=1 (semântica exata true|1 via isTruthyEnv, paridade #37) e recusa com exit 1 antes de assertLocalDatabase/getPayload (zero DB, zero rede). --dry-run segue sem flag (não escreve). Echo do alvo ganhou Bucket/Endpoint quando S3 ativo (paridade media:recover).
  • Docs: runbook OPS58 (passo 3 com a flag + nota dry-run no passo 2), AGENTS.md, skill local-database (nota do guard + correção do drift Vercel Blob), changelog 2026-08-18-ops60.md.
  • Guard no dono: isTruthyEnv (já existente da #37) + resolveS3StorageEnv — sem twin.

Validação (fase 1 do impl plan, DB local do worktree)

  • Sync com S3_* fake → exit 1 com a mensagem, zero posts/tags/media criados (contagem antes/depois).
  • --dry-run com S3_* fake → segue plan-only com exit 0 (echo com Bucket/Endpoint).
  • Sem S3_* → comportamento dev atual inalterado.

Impl plan: docs/plans/ops60-seed-posts-guard-escrita-s3-impl.md (Status: aprovado, gate humano).

Closes #49 ## OPS60 — Guard de intenção explícita para escrita no bucket via `db:seed:posts` Achado do /simplify da #37 (OPS52-media-guard): o sync do `pnpm db:seed:posts` escreve covers no bucket S3 das envs `S3_*` (Garage) sem flag de intenção — um worktree com a cópia all-or-nothing de credenciais de prod (`worktree-env.mjs`) rodando o seed contra DB local sobrescreve o key determinístico no bucket de **prod** silenciosamente. ### Mudança - **`scripts/seed-posts.mjs`**: com as `S3_*` ativas (`resolveS3StorageEnv(process.env).enabled`), o modo sync exige `SEED_MEDIA_CONFIRM=1` (semântica exata `true|1` via `isTruthyEnv`, paridade #37) e recusa com exit 1 **antes** de `assertLocalDatabase`/`getPayload` (zero DB, zero rede). `--dry-run` segue sem flag (não escreve). Echo do alvo ganhou `Bucket`/`Endpoint` quando S3 ativo (paridade `media:recover`). - **Docs**: runbook OPS58 (passo 3 com a flag + nota dry-run no passo 2), AGENTS.md, skill `local-database` (nota do guard + correção do drift Vercel Blob), changelog `2026-08-18-ops60.md`. - **Guard no dono**: `isTruthyEnv` (já existente da #37) + `resolveS3StorageEnv` — sem twin. ### Validação (fase 1 do impl plan, DB local do worktree) - Sync com `S3_*` fake → exit 1 com a mensagem, **zero** posts/tags/media criados (contagem antes/depois). - `--dry-run` com `S3_*` fake → segue plan-only com exit 0 (echo com Bucket/Endpoint). - Sem `S3_*` → comportamento dev atual inalterado. Impl plan: `docs/plans/ops60-seed-posts-guard-escrita-s3-impl.md` (Status: aprovado, gate humano).
fsolla added 1 commit 2026-08-18 19:29:34 +00:00
chore(OPS60): guard SEED_MEDIA_CONFIRM para escrita no bucket via db:seed:posts
All checks were successful
CI (PR) / plans-only-closes (pull_request) Successful in 7s
CI (PR) / knip (pull_request) Has been skipped
CI (PR) / unit (pull_request) Has been skipped
CI (PR) / scope (pull_request) Successful in 38s
CI (PR) / lint (pull_request) Successful in 1m1s
CI (PR) / format (pull_request) Successful in 54s
CI (PR) / docs-guards (pull_request) Successful in 7s
CI (PR) / typecheck (pull_request) Has been skipped
CI (PR) / cycles (pull_request) Has been skipped
CI (PR) / int (pull_request) Has been skipped
CI (PR) / build (pull_request) Has been skipped
CI (PR) / e2e (1) (pull_request) Has been skipped
CI (PR) / e2e (2) (pull_request) Has been skipped
CI (PR) / checks (pull_request) Successful in 2s
PR Ready + auto-merge / ready-automerge (pull_request) Successful in 29m11s
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 15s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
Agent pool supervisor / tick (pull_request) Successful in 41s
f5d8d1e2f8
fsolla closed this pull request 2026-08-18 19:42:45 +00:00
fsolla reopened this pull request 2026-08-18 19:42:50 +00:00
fsolla merged commit 2d402c81a2 into main 2026-08-18 20:11:55 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: fsolla/teqo#66
No description provided.