Prompt file imported from maingocanh1702/bestmintonclub-payment-check-bot (
.claude/commands/ap-56-backup-restore-drill.md). Copyright stays with the author.
Bạn đang chạy AUTOPILOT cho repo này.
Tiền đề #1 (codex): export AUTOPILOT_CODEX_BIN="/Users/maingocanh/Projects/Bestminton Club Payment check bot/scripts/codex-review-pin.sh" — chưa set → Pre-flight HALT CODEX_UNAVAILABLE. Pre-flight smoke VERDICT-FIRST: auth-string chỉ fatal khi KHÔNG có verdict; connector noise rmcp::transport::worker (invalid_grant/Invalid refresh token/TokenRefreshFailed) KHÔNG phải model-auth death → strip trước khi xét, đừng HALT giả (L18b). Auth chết thật giữa chừng (token_invalidated/codex_models_manager … 401) không verdict → "$AUTOPILOT_CODEX_BIN" logout && login rồi resume; KHÔNG đổi setup (L18).
Tiền đề #2 (worktree + DB + env): KHÔNG dep code (depends_on rỗng) → git worktree add .autopilot/worktrees/backup-restore-drill -b feat/backup-restore-drill main → cd → source .env → export BOT_TOKEN=test-token OWNER_CHAT_ID=1. Test (NẾU Step 0 chọn có test) DB_PATH=/tmp/ap-backup-restore-drill.db + temp file copy — KHÔNG BAO GIỜ data/bot.db. Pre-flight gọi scripts/autopilot-scope-gate register --manifest docs/autopilot-manifests/backup-restore-drill.json.
Tiền đề #3 (dep/scope): scope docs/ops/runbook-backup-restore.md (mới) + — CHỈ KHI Step 0 chọn (a) — src/backup-restore-drill.test.ts (mới) + package.json (test-chain). Invariant test-chain. DEP-grep lại trên main: sendBackup (bot.ts:~3840), /backup (~3851), restore message:document handler (~3863), magic-header guard "SQLite format 3" (~3893), <dbPath>.restore write (~3899), process.exit(config.restoreExitCode) (~3908). Runbook style ref docs/ops/add-receiving-bank-runbook.md. Re-verify trên base_ref.
Mở docs/ops/autopilot-backup-restore-drill.md, đọc TOÀN BỘ block text … và THỰC THI nguyên văn. Pre-flight → Step 0 design-probe (QUYẾT ĐỊNH test in-scope hay docs-only) → Step 1 (regions.log + fix-round-count.txt) → Step 2 FAILING test (chỉ khi có test) → Step 3-N → Step R codex 1× FULL clean (verdict-first mỗi round) → STOP_AT_READY.
P2 OPS/docs READ-ONLY — KHÔNG đụng code-path, KHÔNG đụng live /backup hoặc /restore handler, KHÔNG db write ngoài /tmp. manual_only, KHÔNG auto-merge/push. Tuân thủ:
- docs/ops/runbook-backup-restore.md (mới) — drill STAGING tiếng Việt, mirror
add-receiving-bank-runbook.md: principle block trước (backup tạo gì, restore swap gì, swap ở boot-time cần exit ≠0 =config.restoreExitCode); pre-req CHẠY TRÊN STAGING không phải bot live; round-trip /backup → note data BEFORE → gửi .db lại → confirmrestore:yes→ restart → /status data còn nguyên; negative: non-.db bị bỏ qua, non-SQLite *.db bị magic-header guard từ chối, tap Cancel; rollback / restoreExitCode override note. - Step 0 design-probe QUYẾT ĐỊNH test: (a) có seam pure test được (magic-header guard + byte round-trip, ZERO edit bot.ts/db.ts/config.ts) → +
src/backup-restore-drill.test.ts+ package.json; test seed SQLite tạm dưới DB_PATH=/tmp, copy bytes sang path /tmp thứ 2, re-open, assert row sống + buffer không-SQLite bị từ chối; (b) không seam → BỎ test, scope = chỉ docs, package.json KHÔNG đụng. Default (a) chỉ khi seam pure tồn tại không edit code; phân vân → chọn (b). - Test (nếu có) KHÔNG mở/ghi data/bot.db, KHÔNG gọi process.exit, pure file round-trip; thêm vào package.json "test" (mirror gendered-fees-a5b.test.ts). TDD: fail trước, green sau.
- NEGATIVE (SCOPE_DRIFT): KHÔNG sửa bot.ts / db.ts / config.ts / live backup-restore handler / boot swap script; KHÔNG đổi
config.restoreExitCode; KHÔNG db write ngoài /tmp. Chạm ngoài scope hoặc đổi runtime behaviour → HALT. - Counter cứng: MAX_ROUNDS >5 → HALT; REGION_THRASH cùng file ≥3 vòng liên tiếp → HALT + escalate.
KHÔNG git add -A (add per-file; nếu có test, thêm src/backup-restore-drill.test.ts vào package.json "test"). KHÔNG merge/push. Final report Variant A (READY) + design-probe.md (ghi rõ quyết định test-scope) + — nếu có test — run in-repo. → scripts/autopilot-scope-gate ready --manifest docs/autopilot-manifests/backup-restore-drill.json. Gần như DISJOINT mọi feature → có thể chạy song song với batch khác.
