ops(OPS52-media-guard): reconcile do media:recover exige MEDIA_RECOVER_CONFIRM=1 (guard de intenção explícita) #50

Merged
fsolla merged 1 commit from OPS52-media-guard-ops52-media-guard-de-intencao-explicita-pa into main 2026-08-18 16:28:28 +00:00
Owner

Closes #37

OPS52-media-guard — Guard de intenção explícita para escrita em bucket de produção

O modo reconcile (padrão, escrita) do pnpm media:recover agora exige MEDIA_RECOVER_CONFIRM=1 para armar a escrita no bucket — antes bastava o conjunto completo de S3_* (um worktree com credenciais de prod + rows locais via db:pull escreveria covers no bucket de prod; o echo do alvo mostrava, não impedia).

  • scripts/lib/cli.mjs: isTruthyEnv novo (semântica exata true|1, sem trim/case — TRUE/yes continuam recusados); isRemoteDbOverrideSet passou a delegar (sem twin).
  • scripts/recover-media.mjs: gate fail-closed antes de DB/S3/rede — sem a flag, exit 1 com o comando correto; --dry-run/--verify seguem sem flag (não escrevem).
  • tests/unit/cliEnvFlags.unit.spec.ts: pin das semânticas + preservação do ALLOW_REMOTE_DB.
  • Docs: runbook do homeserver atualizado (passo 3 com a flag), nota no AGENTS.md, changelog, impl plan docs/plans/ops52-media-guard-impl.md.
  • Débito registrado no /simplify: OPS60 (#49) — db:seed:posts escreve no bucket via adapter S3 sem flag de intenção (mesma classe de risco; depends: [37], plano docs/plans/ops60-seed-posts-guard-escrita-s3.md).

Gates verdes: lint, typecheck, 2322 unit, 791 int, format:check, knip (erro P3 pré-existente), check:cycles, build local.

Closes #37 ## OPS52-media-guard — Guard de intenção explícita para escrita em bucket de produção O modo reconcile (padrão, escrita) do `pnpm media:recover` agora exige `MEDIA_RECOVER_CONFIRM=1` para armar a escrita no bucket — antes bastava o conjunto completo de `S3_*` (um worktree com credenciais de prod + rows locais via db:pull escreveria covers no bucket de prod; o echo do alvo mostrava, não impedia). - **`scripts/lib/cli.mjs`**: `isTruthyEnv` novo (semântica exata `true|1`, sem trim/case — `TRUE`/`yes` continuam recusados); `isRemoteDbOverrideSet` passou a delegar (sem twin). - **`scripts/recover-media.mjs`**: gate fail-closed antes de DB/S3/rede — sem a flag, exit 1 com o comando correto; `--dry-run`/`--verify` seguem sem flag (não escrevem). - **`tests/unit/cliEnvFlags.unit.spec.ts`**: pin das semânticas + preservação do `ALLOW_REMOTE_DB`. - **Docs**: runbook do homeserver atualizado (passo 3 com a flag), nota no AGENTS.md, changelog, impl plan `docs/plans/ops52-media-guard-impl.md`. - **Débito registrado no /simplify**: OPS60 (#49) — `db:seed:posts` escreve no bucket via adapter S3 sem flag de intenção (mesma classe de risco; `depends: [37]`, plano `docs/plans/ops60-seed-posts-guard-escrita-s3.md`). Gates verdes: lint, typecheck, 2322 unit, 791 int, format:check, knip (erro P3 pré-existente), check:cycles, build local.
fsolla added 1 commit 2026-08-18 15:10:06 +00:00
ops(OPS52-media-guard): reconcile do media:recover exige MEDIA_RECOVER_CONFIRM=1 (guard de intenção explícita)
All checks were successful
Agent PR Ready + auto-merge / ready-automerge (pull_request) Has been skipped
CI (PR) / docs-guards (pull_request) Successful in 10s
CI (PR) / scope (pull_request) Successful in 46s
CI (PR) / plans-only-closes (pull_request) Successful in 9s
CI (PR) / lint (pull_request) Successful in 1m4s
CI (PR) / format (pull_request) Successful in 1m20s
CI (PR) / typecheck (pull_request) Successful in 48s
CI (PR) / knip (pull_request) Successful in 45s
CI (PR) / cycles (pull_request) Successful in 52s
CI (PR) / unit (pull_request) Successful in 1m14s
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) / int (pull_request) Successful in 2m38s
CI (PR) / checks (pull_request) Successful in 1s
d7bc6631d7
fsolla force-pushed OPS52-media-guard-ops52-media-guard-de-intencao-explicita-pa from d7bc6631d7 to 8231a31e95 2026-08-18 15:22:59 +00:00 Compare
fsolla force-pushed OPS52-media-guard-ops52-media-guard-de-intencao-explicita-pa from 8231a31e95 to d62e65ce6a 2026-08-18 15:44:58 +00:00 Compare
fsolla force-pushed OPS52-media-guard-ops52-media-guard-de-intencao-explicita-pa from d62e65ce6a to 228d5da9c8 2026-08-18 15:48:56 +00:00 Compare
fsolla merged commit 228d5da9c8 into main 2026-08-18 16:28:28 +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#50
No description provided.