Repository navigation
Scribe v2.5.0 - The Refinement Update
Safer purchases and gifts, fewer leaderboard requests, client purchase prompts and countdowns, roblox-ts support, and an optional leaderstats add-on.
Behavior changes
- New receipt reservations and client timer fields change the schema hash. Deploy your server and client together, and upgrade every server sharing the same profiles.
- Unresolved gifts now block another paid gift or ordinary purchase prompt for the same product, including after rejoining or passing the old two-minute window. Paid gift receipts save their exact destination before delivery.
- Completed receipt and gift IDs are retained for 30 days, with a configurable
MaxReceiptHistoryBytescap of 1 MiB by default. Recent IDs are no longer evicted to make room: new grants defer withRECEIPT_HISTORY_FULL. An unresolved receipt retried after its completed record expires can grant again. - Big numeric strings now reject inputs over 256 bytes, including whitespace, before parsing. Number inputs and stored Big values are unchanged.
Added
- roblox-ts support, with inferred templates, typed server/client APIs, and npm packaging for Scribe and its optional React, Vide, Fusion, telemetry, and leaderstats add-ons.
- Client
Data.PromptPurchase(name)for declared products and passes. The server checks eligibility and opens the prompt; receipts and grants remain server-side. A request timeout can occur after the prompt opens, so requests are not retried automatically. - Client timer reads: timed fields expose their active state and remaining seconds through
Active().ExtendTimedreplicates deadline changes by default. Value observers do not tick with the clock; cooldowns and server-only timers remain private. ScribeLeaderstats, an optional add-on that maps player-list display names to data paths and manages updates and cleanup.RetiredProductskeeps historical receipt and gift handlers available without offering new sales. Existing paid gift credits remain redeemable.node.Child(key)accesses exact child keys, including names that collide with accessor methods. Big values also gain named arithmetic and comparison methods.- Leaderboard health reporting through server
Data.GetLeaderboardStatus(name)and the cachedScribe.GetLeaderboardSnapshot(). Telemetry gains aLeaderboardsroute, degradation/recovery alerts, and richer summaries covering board backlogs, receipt-history refusals, log-sink failures, and join/leave timings.
Fixed
- Exchange verdict IDs could exceed Roblox’s 50-character key limit, leaving trades stuck. New IDs are bounded, and intact legacy escrows can recover through compatible verdict keys. Preserve stuck escrow when upgrading.
- Invalid recipient IDs in stored gift records now hold the receipt for repair with
GIFT_INVALID_RECIPIENTbefore attempting delivery. Includes validation contributed in #16. ServerStorewas ignored by the public constructor and reported as an unknown option. Store templates now work and infer their field/accessor types, including typed template modules.- Receipts arriving while a buyer loads now wait for Ready within the loading timeout. External purchase channels no longer consume unrelated product-keyed gift intents.
- Transient leaderboard write failures retain the pending score and retry with capped backoff instead of abandoning it after three failures.
Client.Stop()now discards queued product-info work, prevents further retries, and releases waiting info/price reads withnil. Late Marketplace responses are ignored.
Changed
- Global leaderboards keep the latest pending score and skip unchanged encoded scores. Per-board
WriteIntervaldefaults to 30 seconds; pending changed scores can still write on departure. - Background leaderboard reads and writes share budget pacing across bundles on the same server, leaving request headroom.
- Log sinks filter before dispatch and use one worker with a bounded queue per registration.
LogRingLeveldefaults to Warn in production and Debug in Studio. - Slow joins and leaving callbacks report while still waiting, with loading phases and duration measurements.
- RBXM, Wally, and npm builds omit long API documentation blocks while retaining concise comments, types, and directives. Source-line maps support debugging.
- Updated Luau LSP to 1.70.0, with matching Roblox definitions and compatible type helpers.
Documentation
- Added roblox-ts and leaderstats guides for installation, typed templates, and add-on setup.
- Updated purchase and gifting guidance for receipt retention, retired products, external sales, recovery, and remaining purchase-correlation limitations.
- Documented release packaging and how to map packaged error lines back to repository sources.
New Contributors
Full Changelog: v2.4.0...v2.5.0