Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: uuidjs/uuid
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v14.0.1
Choose a base ref
...
head repository: uuidjs/uuid
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v14.0.2
Choose a head ref
  • 7 commits
  • 11 files changed
  • 9 contributors

Commits on Jul 2, 2026

  1. fix(v7): align default seq formula in v7Bytes with updateV7State (#965)

    ---------
    
    Co-authored-by: JSap0914 <JSap0914@users.noreply.github.com>
    Co-authored-by: Robert Kieffer <robert@broofa.com>
    3 people authored Jul 2, 2026
    Configuration menu
    Copy the full SHA
    a67db57 View commit details
    Browse the repository at this point in the history

Commits on Jul 7, 2026

  1. chore: pin publint version in CI (#966)

    ---------
    
    Co-authored-by: Robert Kieffer <robert@broofa.com>
    haines and broofa authored Jul 7, 2026
    Configuration menu
    Copy the full SHA
    ac36860 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    ea83515 View commit details
    Browse the repository at this point in the history

Commits on Aug 6, 2026

  1. fix(v1): carry nsecs overflow into the timestamp's high bits (#972)

    The v1/v6 timestamp is `msecs * 10000 + nsecs` in 100-nanosecond intervals
    since the Gregorian epoch. It needs 57+ bits, so `v1Bytes()` computes it as a
    32-bit `time_low` and a 28-bit `time_mid`/`time_high` half. `nsecs` was added
    to the low half only, and the low half was reduced mod 2^32, so a `nsecs` value
    that pushed it past 2^32 wrapped without incrementing the high half.
    
    The high half was also derived from `msecs` alone via a floating-point divide,
    which cannot see that carry at all.
    
    The result is a timestamp 2^32 * 100ns = 429.4967296 seconds in the past. It
    happens whenever `msecs * 10000` lands within 10000 of a 2^32 boundary, i.e.
    for one millisecond about every 430 seconds, and then only for the `nsecs`
    values above the boundary. `v1()`'s internal state walks `nsecs` from 0 to 9999
    within a millisecond, so it is reachable with no options at all: generating
    enough ids inside that millisecond makes the timestamp jump backwards, breaking
    the monotonicity that v1 ordering and v6 sorting depend on. Because the wrap
    maps two distinct instants onto one encoded timestamp, a generator with a
    stable `clockseq` and `node` can also emit the same id twice, 429.496s apart.
    
    Compute the low half's own carry and fold it into the high half. `msecs` is
    split at bit 28 rather than 32 because `0x10000000 * 10000` is exactly
    `625 * 0x100000000`, so the split is exact and the high half needs no
    floating-point division.
    Jaybhade authored Aug 6, 2026
    Configuration menu
    Copy the full SHA
    6adcc1d View commit details
    Browse the repository at this point in the history

Commits on Aug 8, 2026

  1. fix(v1): set the multicast bit on v1Bytes's own randomly-generated no…

    …de (#973)
    
    updateV1State() already sets the RFC 9562 section 6.10 multicast bit
    on the node it randomizes and caches, but that's only reached by
    plain v1() calls with no options. Every other path -- v1(options)
    whenever options omits node, and v6() unconditionally, since v6
    always defers its random node to v1Bytes() rather than
    updateV1State() -- computes its own fresh random node inline via
    node ??= rnds.slice(10, 16) without the same bit set.
    
    v6() is the RFC-recommended, time-ordered generator, and it fails
    this MUST-level requirement on its default random node roughly half
    the time, not as a rare edge case (empirically ~50% across repeated
    trials before this fix, 100% after).
    rajanpanth authored Aug 8, 2026
    Configuration menu
    Copy the full SHA
    b1da338 View commit details
    Browse the repository at this point in the history

Commits on Aug 18, 2026

  1. docs: point the Node support permalink at the CI version matrix (#974)

    Co-authored-by: MoonsvnLyn <287222957+FirmaSpring@users.noreply.github.com>
    MoonsvnLyn and JiuYue0820 authored Aug 18, 2026
    Configuration menu
    Copy the full SHA
    f3c564e View commit details
    Browse the repository at this point in the history
  2. chore(main): release 14.0.2 (#967)

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored Aug 18, 2026
    Configuration menu
    Copy the full SHA
    fd59f02 View commit details
    Browse the repository at this point in the history
Loading