Prompt file imported from maingocanh1702/bestmintonclub-payment-check-bot (
.claude/commands/ap-44-gendered-fees-a2.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.
Tiền đề #2 (worktree + DB + env): PREREQ A1 (gendered-session-fees) PHẢI đã trên main (gendered-fee-core.ts + getMemberGender) — manifest có dep_checks tự verify, thiếu → HALT DEP_MISSING. worktree riêng — git worktree add .autopilot/worktrees/gendered-fees-a2 -b feat/gendered-fees-a2 main → cd → source .env → export BOT_TOKEN=test-token OWNER_CHAT_ID=1. Test DB_PATH=/tmp/ap-gendered-fees-a2.db (data/bot.db LIVE — LIVE_DB_WRITE breaker). Pre-flight gọi scripts/autopilot-scope-gate register --manifest docs/autopilot-manifests/gendered-fees-a2.json.
Tiền đề #3 (dep/scope): scope src/db.ts + src/payments-logic.ts + src/payments.ts + src/pay-core.ts + src/gendered-fees-a2.test.ts (mới) + package.json. Invariants money-model+settlement-engine+pay-core. DEP-grep lại trên main: OpenDebt/getMemberOpenDebts (db.ts:2979/3002), markPaid, classifyAmount (payments-logic.ts:93), name-matcher amount block (payments.ts:85-104), settleMemberDebts/settleMultiCodeCombined (payments.ts:124/376), computeSelfPay/computeComboPay (pay-core.ts:78/149), A1 helpers sessionUsesGenderedFee/playerSessionFee/playerRemainingFee. Re-verify mọi anchor trên base_ref (interface drift).
Mở docs/autopilot/prompts/gendered-fees-a2.md, đọc TOÀN BỘ block text … và THỰC THI nguyên văn. ĐỌC TRƯỚC docs/planning/money/gendered-session-fees-plan.md (§Resolved-fee decision table, §Payment Rules) + docs/architecture/money-paid-amount-invariant.md. Pre-flight → Step 0 design-probe (chứng minh OpenDebt.fee resolved lan tới classifyAmount/effectiveFee/pay-core mà không sửa chúng; gendered male→fee_male không suppress QR; gender null→fail-closed; bank 80k/150k settle; markPaid fallback) → Step 1 (regions.log + fix-round-count.txt) → Step 2 FAILING tests → Step 3-N → Step R codex 2× FULL clean liên tiếp → STOP_AT_READY.
P1 money-path — rewire settle engine. manual_only, KHÔNG auto-merge/push. Tuân thủ:
- Điểm chốt:
OpenDebt.fee= resolved fee tronggetMemberOpenDebts=sessionUsesGenderedFee(s) ? playerSessionFee(s, getMemberGender(id)) : session.fee. 11 callers + classifyAmount/effectiveFee/pay-core đọcd.fee→ tự lan. Legacy single-fee = giá trị y hệt. - Auto-settle gendered: bỏ
amount % fee/amount / feecho gendered (đã bị skip vìsession.fee == null); THÊM nhánh: chỉ settle khi MỌI player matched có resolved fee non-null VÀ amount == SUM resolved fees. 1 gender unknown → manual. - markPaid fallback không-amount → resolved fee; gender unknown → KHÔNG mark. pay-core: "unpriceable" = resolved
d.feenull (gendered+unknown), KHÔNG phải raws.feenull (gendered luôn null) → đừng false-suppress QR khi gender known. - Money đọc
paid_amount, KHÔNGamount. KHÔNG đoán fee khi gender null (MONEY_GUESS). KHÔNG đổi hành vi single-fee (LEGACY_DRIFT). - NEGATIVE (SCOPE_DRIFT): KHÔNG sửa
gendered-fee-core.ts(A1 frozen); KHÔNG schema/migration; KHÔNGtg/player-tg.ts/zalo/player.ts/payment-instructions(A3); KHÔNG reminder/format/notify/announce (A4); KHÔNG bot.ts/zbot.ts/createSession/weekly-core/setSessionFee* (A5); KHÔNG matching.ts. Cần module tiền thứ 5 → STOP re-slice. - Counter cứng: MAX_ROUNDS >5 → HALT; REGION_THRASH cùng file ≥3 vòng liên tiếp → HALT + escalate (money design smell — converge).
KHÔNG git add -A (add per-file; thêm src/gendered-fees-a2.test.ts vào package.json "test"). KHÔNG merge/push. Final report Variant A (READY) + design-probe.md + in-repo smoke (gendered: bank 80k→male / 70k→female / 150k→cả hai; unknown gender→không settle; single-fee→y hệt legacy) → scripts/autopilot-scope-gate ready --manifest docs/autopilot-manifests/gendered-fees-a2.json. Sau khi founder merge: author A3 (pay/QR surface) re-derive resolved-fee usage từ A2 đã merge.
