Repository navigation
@onlyworlds/sdk 4.2.0
Ids, honest filter docs, and the schema repin. Nothing is removed; no call needs to change.
Changed
create()now mints an RFC 9562 UUIDv7 when the element has no id (was v4). The first
48 bits are the creation millisecond, so ids this client mints a millisecond or more apart
sort by creation (while the clock does not step backwards), which gives databases better
index locality. This holds within one client only: worlds also hold v4 ids and legacy
v1-server ids (06x…, which also carry version nibble 7 but put seconds first), so never
order elements by id. For creation order usecreated_at;change_seqis last-write
order. This is a default, not a
requirement: a v4 or v7 id a caller supplies is still accepted as-is, and
every id already stored stays valid. Keel mints v7 server-side too (ruling,
2026-09-28). Pinned by six tests: version and variant, the big-endian timestamp above
bit 32, fractional and pre-1970 clocks floored consistently, creation order across 50
consecutive milliseconds, 1,000 distinct ids inside one millisecond, and the no-crypto
fallback (assertingMath.randomis actually used). Five injected defects (v4 nibble,
32-bit truncation, a dropped random fill, a dropped variant mask, an unfloored clock)
each fail the suite on every run, on Node 20 and 22. An independent reviewer's decoder agreed on 20,000 random timestamps and the 48-bit
edges, and keel'suuid7()agrees on timestamp, version and variant for a pinned clock.elementColor()on an unknown type now throws aTypeErrorthat names the type. It
used to crash withCannot read properties of undefined (reading 'dark'). Found while
building a colour gate: atlas's own copy falls back to theworldfamily for an
unknown type, so swapping it for this export is not a pure re-export for that input, and the
docstring now says so. Whether the package should fall back is left to its consumers.- The generated field-schema comment no longer calls
maximum:an open question or counts
its occurrences (the count was 41; since 00.30.01 it is 15). The question was ruled on
2026-07-29. ListParams.filterJSDoc names what the server actually accepts:name__icontains,
supertype,subtype. It used to list__in,__gte,__lteand__isnull, copied
from keel's spec, which described them but never built them. Probed live 2026-09-28: the
three accepted keys answer 200; every other one, and?ordering=, answers 422.- Schema repinned
v0.30.1-dist.13→v0.30.1-dist.15(canonical unchanged, 00.30.01).
Two generated values move:ELEMENT_ICONS.institutionbusiness→account_balance,
ELEMENT_ICONS.markerplace→location_on(both Material Symbols names). dist.15
also addsminimum: 0toability.potency; the walk does not surface bounds, so nothing
generated changes for it. 31/31 file hashes recomputed from a fresh download. AGENTS.mdre-read against the new pin (its gate fired on the repin, as designed).
It still called the v1 client "frozen legacy" in this package; v1 was removed at 4.0.0.
It now also names the wire behaviours keel deployed on 2026-09-28 (keel D70): the 64 KB
extension cap, the three built filters and the?ordering=422, 409id_conflictfor a
PUT or bulk id that belongs to another world, and the 422 for unpaired surrogates. None of
them needs client code.
Also in this release (staged earlier)
SCHEMA.mdnow opens with its own provenance (dist tag, canonical version, publish
date — rendered fromschema-pin.json, never the wall clock). It ships in the tarball
and is read cold by agents outside this repo, where the pin file is not present; a
generated reference that cannot name its source was the one remaining self-dating gap.AGENTS.mdcarries a "Current as of" line, asserted bycodegen:check— the tag it
names must match the pin or CI fails. A hand-maintained agent doc with an ungated date
is how this repo's previous agent doc went a major version stale. Gate watched firing
(tampered tag → exit 1, restored → 0).