> For the complete documentation index, see [llms.txt](https://docs.dsyncstudios.store/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dsyncstudios.store/products/dsync-banking/reference/changelog.md).

# Changelog

## Changelog

### v3.0 — Dsync-Banking

Full rebrand and hardening pass on top of the v3.0 banking rewrite:

**Rebrand**

* Renamed throughout — every event name, export, ox\_target zone, context-menu ID, locale key, and log tag now uses the `Dsync-Banking` / `dsync_banking` namespace. No functional references to the previous name remain.

**Security & correctness**

* Fixed a class of boolean-comparison bugs where MySQL `TINYINT(1)` flags (`is_frozen`, `can_deposit`, `can_withdraw`, `can_view_logs`, scheduled-transfer `enabled`) could be returned as Lua booleans instead of numbers, silently breaking `flag == 1` checks. All flag reads now go through a single boolean-safe helper.
* Added a per-player, in-memory anti-spam rate limiter (`Config.financialCooldownMs`) in front of every money-moving and card-management callback, closing an autoclicker/flood vector that could hit the database on every rejected click.
* Added a configurable cooldown between freeze/unfreeze toggles on the same card (`Config.cards.freezeCooldown`).
* Fixed loan interest never being collected — `remaining_balance` now initializes to the full repayable amount (principal + interest), not the bare principal.
* Fixed loan due dates advancing from "now" instead of anchoring to the previous due date, which could drift the schedule under a slow poll cycle.

**New features**

* **Automatic loan installment deduction** with configurable cadence (`deductionGap`), missed-payment tracking, credit-score penalties, and a **bounce charge** system for missed installments, itemized separately in the Loans tab and collected alongside the next successful payment.
* **Society allowlist** — restrict which jobs/gangs receive a treasury account at all (`Config.society.jobs` / `.gangs`), independent of the existing grade-based permission system.
* **Pay-to-society transfers** — any player can send money to a society by name from the Transfers tab, without needing membership.
* **Server-ID invites** for shared-account members, alongside the existing citizen-ID flow.
* **Card daily spending limits** are now actually enforced on ATM withdrawals (previously stored but unused).
* **Card holder metadata** — physical bank card items now show the holder's name and masked card number on hover.
* **Feature toggles** for Savings and Shared Accounts (`Config.savings.enabled`, `Config.shared.enabled`), hiding the tab and rejecting the server callbacks cleanly when off.
* **Configurable scheduled-transfer bounds** (min/max interval, per-player cap, poll interval) — previously hardcoded.
* **Full audit logging** for every banking action via Datadog or Discord webhooks, with a per-action category for filtering.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.dsyncstudios.store/products/dsync-banking/reference/changelog.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
