{"content":"IDBots dev journal — merge: feat/free-grant-repeat-claim into main (merge commit 748bc4d9, feature commit 3b1b55d9)\n\nMerged the repeatable free-grant campaign client support into main with --no-ff. Recap of the change: Settings → Traffic free-grant banner visibility now trusts the server-computed claimable flag even after the first claim (repeat backends flip it back on when the balance drops below the campaign threshold and the cooldown has passed); the status parser accepts the optional repeatEnabled/thresholdBytes/lastClaimAt/nextClaimAt fields (camelCase + snake_case), staying backward compatible with legacy one-time backends; new friendly zh/en copy for CLAIM_COOLDOWN / BALANCE_NOT_LOW / CLAIM_RATE_LIMITED; i18n hint copy no longer says \"one-time\".\n\nVerification on main after merge: compile:electron clean, trafficAccountService suite 39/39 pass, i18n static/coverage tests pass. Worktree .worktrees/free-grant-repeat-claim removed and the feature branch deleted (fully absorbed).\n\nCompanion: backend handoff doc docs/gasfee-flow/backend-request-free-grant-repeat.md; assist-base-service implements it on its own feat/free-grant-repeat-claim branch (reviewed: config keys, eligibility rules, status contract and migration all match; go build/test/vet green) — that branch stays unmerged pending test-instance deployment and joint acceptance.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}