Skip to content

fix: cast record ID to string to prevent JS precision loss with snowflake IDs#92

Merged
ManukMinasyan merged 1 commit into4.xfrom
fix/snowflake-id-precision-loss-4x
Mar 6, 2026
Merged

fix: cast record ID to string to prevent JS precision loss with snowflake IDs#92
ManukMinasyan merged 1 commit into4.xfrom
fix/snowflake-id-precision-loss-4x

Conversation

@ManukMinasyan
Copy link
Contributor

Summary

  • Cast $record->getKey() to string in formatBoardRecord() so @js() emits a JSON string instead of a number
  • Prevents JavaScript precision loss for large integer IDs (snowflakes) that exceed Number.MAX_SAFE_INTEGER (2^53 - 1)
  • Includes regression test

Fixes the root cause at the data layer rather than patching individual Blade template usages.

Closes #88

Test plan

  • New regression test SnowflakeIdPrecisionTest verifies formatBoardRecord returns ID as string
  • Full test suite passes (106 tests, 0 failures)

…ision loss

Large integer IDs (e.g. snowflakes like 420533451316027392) exceed
JavaScript's Number.MAX_SAFE_INTEGER (2^53 - 1). When passed through
@js() in Blade, they were encoded as JSON numbers, causing silent
precision loss in the browser.

Casting to string at the data layer ensures @js() emits a quoted
string, which JavaScript preserves exactly.

Closes #88
Copilot AI review requested due to automatic review settings March 6, 2026 11:12
@ManukMinasyan ManukMinasyan merged commit 3175be7 into 4.x Mar 6, 2026
6 checks passed
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR ensures board record IDs are serialized as strings so Blade @js() emits JSON strings (not numbers), preventing JavaScript precision loss for large integer (snowflake/bigint) primary keys.

Changes:

  • Cast $record->getKey() to string in formatBoardRecord() to avoid JS Number precision truncation.
  • Add a regression test covering the string ID formatting behavior.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/Concerns/HasBoardRecords.php Forces formatted board record IDs to be strings at the data layer.
tests/Feature/SnowflakeIdPrecisionTest.php Adds regression coverage asserting formatted IDs are strings and demonstrating JSON encoding differences.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: cardAction does evaluate record on action

2 participants