{"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toCompactDebugString > renders a top-level value the same as it renders that value in an array"},"to":{"k":"unit","s":"data-model","n":"impl > toCompactDebugString > renders a top-level value the same as it renders that value in an array"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toCompactDebugString > with `maxLength` > renders the full text given a `maxLength` of `Infinity`"},"to":{"k":"unit","s":"data-model","n":"impl > toCompactDebugString > with `maxLength` > renders the full text given a `maxLength` of `Infinity`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toCompactDebugString > with `maxLength` > renders the full text when `maxLength` fits the whole thing"},"to":{"k":"unit","s":"data-model","n":"impl > toCompactDebugString > with `maxLength` > renders the full text when `maxLength` fits the whole thing"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toCompactDebugString > with `maxLength` > truncates to `maxLength` when it is smaller than the whole rendered length"},"to":{"k":"unit","s":"data-model","n":"impl > toCompactDebugString > with `maxLength` > truncates to `maxLength` when it is smaller than the whole rendered length"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toCompactDebugString > with `backtickQuote` > renders the truncated result as the code span, when both are asked for"},"to":{"k":"unit","s":"data-model","n":"impl > toCompactDebugString > with `backtickQuote` > renders the truncated result as the code span, when both are asked for"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toCompactDebugString > with `backtickQuote` > renders the result bare when the option is `false` or absent"},"to":{"k":"unit","s":"data-model","n":"impl > toCompactDebugString > with `backtickQuote` > renders the result bare when the option is `false` or absent"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toCompactDebugString > throws given a limit that is not a positive integer"},"to":{"k":"unit","s":"data-model","n":"impl > toCompactDebugString > throws given a limit that is not a positive integer"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toCompactDebugString > throws given `options` that are not a plain object"},"to":{"k":"unit","s":"data-model","n":"impl > toCompactDebugString > throws given `options` that are not a plain object"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toIndentedDebugString > renders a top-level scalar the same as the compact form does"},"to":{"k":"unit","s":"data-model","n":"impl > toIndentedDebugString > renders a top-level scalar the same as the compact form does"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toIndentedDebugString > with a string holding a line break > renders each line quoted on a line of its own, joined by ` +`"},"to":{"k":"unit","s":"data-model","n":"impl > toIndentedDebugString > with a string holding a line break > renders each line quoted on a line of its own, joined by ` +`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toIndentedDebugString > with a string holding a line break > renders the lines after the first one level further in than the value"},"to":{"k":"unit","s":"data-model","n":"impl > toIndentedDebugString > with a string holding a line break > renders the lines after the first one level further in than the value"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toIndentedDebugString > with a string holding a line break > renders a carriage return, with or without a newline, as a line break"},"to":{"k":"unit","s":"data-model","n":"impl > toIndentedDebugString > with a string holding a line break > renders a carriage return, with or without a newline, as a line break"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toIndentedDebugString > with a string holding a line break > renders a string ending in a line break with no empty line after it"},"to":{"k":"unit","s":"data-model","n":"impl > toIndentedDebugString > with a string holding a line break > renders a string ending in a line break with no empty line after it"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toIndentedDebugString > with a string holding a line break > renders a class instance's `toString()` form the same way"},"to":{"k":"unit","s":"data-model","n":"impl > toIndentedDebugString > with a string holding a line break > renders a class instance's `toString()` form the same way"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toIndentedDebugString > throws given `options` that are not a plain object"},"to":{"k":"unit","s":"data-model","n":"impl > toIndentedDebugString > throws given `options` that are not a plain object"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toShortQuotedDebugString > returns the compact rendering as a backtick-quoted code span"},"to":{"k":"unit","s":"data-model","n":"impl > toShortQuotedDebugString > returns the compact rendering as a backtick-quoted code span"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toShortQuotedDebugString > returns a rendering cut to fifty characters, ellipsis included"},"to":{"k":"unit","s":"data-model","n":"impl > toShortQuotedDebugString > returns a rendering cut to fifty characters, ellipsis included"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toShortQuotedDebugString > returns a quoted rendering for a value the renderer cannot read"},"to":{"k":"unit","s":"data-model","n":"impl > toShortQuotedDebugString > returns a quoted rendering for a value the renderer cannot read"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toLongQuotedDebugString > returns the compact rendering as a backtick-quoted code span"},"to":{"k":"unit","s":"data-model","n":"impl > toLongQuotedDebugString > returns the compact rendering as a backtick-quoted code span"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toLongQuotedDebugString > returns a rendering the short form would cut, whole"},"to":{"k":"unit","s":"data-model","n":"impl > toLongQuotedDebugString > returns a rendering the short form would cut, whole"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > toLongQuotedDebugString > returns a rendering cut to five hundred characters, ellipsis included"},"to":{"k":"unit","s":"data-model","n":"impl > toLongQuotedDebugString > returns a rendering cut to five hundred characters, ellipsis included"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > custom inspector > renders a FabricPrimitive as its debug string, not `{}`"},"to":{"k":"unit","s":"data-model","n":"impl > custom inspector > renders a FabricPrimitive as its debug string, not `{}`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > custom inspector > renders a FabricInstance as its debug string, not `{}`"},"to":{"k":"unit","s":"data-model","n":"impl > custom inspector > renders a FabricInstance as its debug string, not `{}`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"value-debug > custom inspector > renders when nested in containers"},"to":{"k":"unit","s":"data-model","n":"impl > custom inspector > renders when nested in containers"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > codecClasses() > lists classes which each report a distinct `.schemaType`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > codecClasses() > lists classes which each report a distinct `.schemaType`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > codecClasses() > lists classes whose reported `.schemaType`s are exactly `FABRIC_PRIMITIVE_SCHEMA_TYPES`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > codecClasses() > lists classes whose reported `.schemaType`s are exactly `FABRIC_PRIMITIVE_SCHEMA_TYPES`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > codecClasses() > lists classes whose JSON codecs' type tags are exactly `FABRIC_PRIMITIVE_CODEC_TYPE_TAGS`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > codecClasses() > lists classes whose JSON codecs' type tags are exactly `FABRIC_PRIMITIVE_CODEC_TYPE_TAGS`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > codecClasses() > lists the class of every `FabricPrimitive` in the corpus"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > codecClasses() > lists the class of every `FabricPrimitive` in the corpus"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > fabricPrimitiveClassOfSchemaType() > returns each listed class given the `.schemaType` it reports"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > fabricPrimitiveClassOfSchemaType() > returns each listed class given the `.schemaType` it reports"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricBytes` given its `.schemaType`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricBytes` given its `.schemaType`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricEpochNsec` given its `.schemaType`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricEpochNsec` given its `.schemaType`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricEpochDay` given its `.schemaType`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricEpochDay` given its `.schemaType`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricRegExp` given its `.schemaType`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricRegExp` given its `.schemaType`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricHash` given its `.schemaType`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricHash` given its `.schemaType`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricKeyPair` given its `.schemaType`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricKeyPair` given its `.schemaType`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricUnavailable` given its `.schemaType`"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > fabricPrimitiveClassOfSchemaType() > returns the class of a `FabricUnavailable` given its `.schemaType`"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > fabricPrimitiveClassOfSchemaType() > throws given a name no class reports"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > fabricPrimitiveClassOfSchemaType() > throws given a name no class reports"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > isFabricPrimitiveSchemaType() > returns `true` for the `.schemaType` of every listed class"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > isFabricPrimitiveSchemaType() > returns `true` for the `.schemaType` of every listed class"}} {"date":"2026-09-18","from":{"k":"unit","s":"data-model","n":"fabric-primitives/index > isFabricPrimitiveSchemaType() > returns `false` for a type name outside the vocabulary"},"to":{"k":"unit","s":"data-model","n":"fabric-primitives/impl > isFabricPrimitiveSchemaType() > returns `false` for a type name outside the vocabulary"}} {"date":"2026-09-22","from":{"k":"unit","s":"data-model","n":"value-visit/impl > visitValue() > returns a `mainResult` typed by the visitor's `ResultType`"},"to":{"k":"unit","s":"data-model","n":"value-visit/impl > visitValue() > returns a value of the visitor's `ResultType`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > IncrementalHasher digest base64url > matches manual base64url encoding of the raw digest"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > IncrementalHasher digest base64url > matches manual base64url encoding of the raw digest"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > IncrementalHasher digest base64url > produces different base64url digests for different inputs"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > IncrementalHasher digest base64url > produces different base64url digests for different inputs"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > IncrementalHasher digest base64url > returns a string"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > IncrementalHasher digest base64url > returns a string"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > IncrementalHasher digest base64url > returns a valid unpadded base64url result"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > IncrementalHasher digest base64url > returns a valid unpadded base64url result"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Date > hashes a JS `Date` without throwing"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Date > hashes a JS `Date` without throwing"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Date > produces different hashes for different Dates"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Date > produces different hashes for different Dates"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Date > produces the same hash for a JS `Date` as for an equivalent `FabricEpochNsec`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Date > produces the same hash for a JS `Date` as for an equivalent `FabricEpochNsec`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Deferred types (not yet handled — these document known gaps) > throws for `Error` (deferred — needs recursive translation)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Deferred types (not yet handled — these document known gaps) > throws for `Error` (deferred — needs recursive translation)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Deferred types (not yet handled — these document known gaps) > throws for `Map` (deferred — needs recursive translation)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Deferred types (not yet handled — these document known gaps) > throws for `Map` (deferred — needs recursive translation)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Deferred types (not yet handled — these document known gaps) > throws for `Set` (deferred — needs recursive translation)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Deferred types (not yet handled — these document known gaps) > throws for `Set` (deferred — needs recursive translation)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Deferred types (not yet handled — these document known gaps) > throws for a member that is a function"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Deferred types (not yet handled — these document known gaps) > throws for a member that is a function"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > RegExp > hashes a JS `RegExp` without throwing"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > RegExp > hashes a JS `RegExp` without throwing"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > RegExp > produces different hashes for different RegExps"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > RegExp > produces different hashes for different RegExps"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > RegExp > produces the same hash for a JS `RegExp` as for an equivalent `FabricRegExp`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > RegExp > produces the same hash for a JS `RegExp` as for an equivalent `FabricRegExp`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Uint8Array > hashes a JS `Uint8Array` without throwing"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Uint8Array > hashes a JS `Uint8Array` without throwing"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Uint8Array > produces different hashes for different Uint8Arrays"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Uint8Array > produces different hashes for different Uint8Arrays"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` JS instances > Uint8Array > produces the same hash for a JS `Uint8Array` as for a `FabricBytes` with the same bytes"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` JS instances > Uint8Array > produces the same hash for a JS `Uint8Array` as for a `FabricBytes` with the same bytes"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > also throws for a unique symbol nested in an object"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > also throws for a unique symbol nested in an object"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > does not collide a same-key string with an interned symbol"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > does not collide a same-key string with an interned symbol"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > empty-key `Symbol.for(\"\")` has length zero, not absent"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > empty-key `Symbol.for(\"\")` has length zero, not absent"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > hashes deterministically for an interned symbol nested in an array"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > hashes deterministically for an interned symbol nested in an array"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > hashes deterministically for an interned symbol nested in an object"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > hashes deterministically for an interned symbol nested in an object"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > hashes differently-keyed interned symbols differently"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > hashes differently-keyed interned symbols differently"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > hashes equal-keyed interned symbols identically"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > hashes equal-keyed interned symbols identically"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > is deterministic and key-distinct on the long-key path"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > is deterministic and key-distinct on the long-key path"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > takes the TAG_STRING_HASH path for a long key"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > takes the TAG_STRING_HASH path for a long key"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > takes the inline TAG_STRING path for a short key"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > takes the inline TAG_STRING path for a short key"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > `hashOf()` interned symbols > throws for `Symbol(desc)` (unique / uninterned)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > throws for `Symbol(desc)` (unique / uninterned)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Arrays > coalesces multiple consecutive holes into one run"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Arrays > coalesces multiple consecutive holes into one run"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Arrays > produces TAG_ARRAY + TAG_END for an empty array"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Arrays > produces TAG_ARRAY + TAG_END for an empty array"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Arrays > produces distinct hashes for `[1, undefined, 3]` vs. `[1, , 3]` vs. `[1, null, 3]`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Arrays > produces distinct hashes for `[1, undefined, 3]` vs. `[1, , 3]` vs. `[1, null, 3]`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Arrays > recursively hashes nested arrays"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Arrays > recursively hashes nested arrays"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Arrays > uses hole run-length encoding for the sparse array [1, , 3]"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Arrays > uses hole run-length encoding for the sparse array [1, , 3]"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Consistency and distinctness > produces a 32-byte hash (SHA-256)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Consistency and distinctness > produces a 32-byte hash (SHA-256)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Consistency and distinctness > produces different hashes for different values of different types"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Consistency and distinctness > produces different hashes for different values of different types"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Consistency and distinctness > produces the same hash for the same value every time"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Consistency and distinctness > produces the same hash for the same value every time"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Cycles > caches the hash of a deep-frozen cyclic value"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Cycles > caches the hash of a deep-frozen cyclic value"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Cycles > encodes a cycle through a `FabricInstance`, counting the instance and its state"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Cycles > encodes a cycle through a `FabricInstance`, counting the instance and its state"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Cycles > encodes a cyclic value the same way wherever it sits"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Cycles > encodes a cyclic value the same way wherever it sits"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Cycles > encodes a distance past the height at which the path is indexed"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Cycles > encodes a distance past the height at which the path is indexed"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Cycles > encodes an array that holds itself as `TAG_CYCLE` + distance 1"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Cycles > encodes an array that holds itself as `TAG_CYCLE` + distance 1"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Cycles > encodes an object that holds itself as `TAG_CYCLE` + distance 1"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Cycles > encodes an object that holds itself as `TAG_CYCLE` + distance 1"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Cycles > encodes the distance up the path to the container the cycle returns to"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Cycles > encodes the distance up the path to the container the cycle returns to"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Cycles > expands a shared container that is not on the path, as it does in an acyclic value"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Cycles > expands a shared container that is not on the path, as it does in an acyclic value"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Cycles > hashes differently where a cycle closes at a different container"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Cycles > hashes differently where a cycle closes at a different container"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Edge cases > hashes a deeply nested structure"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Edge cases > hashes a deeply nested structure"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Edge cases > hashes an array with all holes"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Edge cases > hashes an array with all holes"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Edge cases > is deterministic and key-distinct for long object keys"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Edge cases > is deterministic and key-distinct for long object keys"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Edge cases > sorts non-ASCII object keys by UTF-8 bytes"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Edge cases > sorts non-ASCII object keys by UTF-8 bytes"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Edge cases > sorts object keys by UTF-8, not UTF-16 (supplementary vs. BMP)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Edge cases > sorts object keys by UTF-8, not UTF-16 (supplementary vs. BMP)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Edge cases > takes the TAG_STRING_HASH path for a long object key"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Edge cases > takes the TAG_STRING_HASH path for a long object key"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricBytes > produces `TAG_BYTES` + LEB128 length + raw bytes for a `FabricBytes`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricBytes > produces `TAG_BYTES` + LEB128 length + raw bytes for a `FabricBytes`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricBytes > produces `TAG_BYTES` + zero length for an empty `FabricBytes`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricBytes > produces `TAG_BYTES` + zero length for an empty `FabricBytes`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricEpochDay (dedicated TAG_EPOCH_DAY primitive tag) > hashes a FabricEpochDay with negative value (pre-epoch)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricEpochDay (dedicated TAG_EPOCH_DAY primitive tag) > hashes a FabricEpochDay with negative value (pre-epoch)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricEpochDay (dedicated TAG_EPOCH_DAY primitive tag) > matches a hand-computed byte stream for `FabricEpochDay(0n)`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricEpochDay (dedicated TAG_EPOCH_DAY primitive tag) > matches a hand-computed byte stream for `FabricEpochDay(0n)`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricEpochDay (dedicated TAG_EPOCH_DAY primitive tag) > produces different hashes for FabricEpochDay values"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricEpochDay (dedicated TAG_EPOCH_DAY primitive tag) > produces different hashes for FabricEpochDay values"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricEpochDay (dedicated TAG_EPOCH_DAY primitive tag) > produces different hashes for `FabricEpochNsec` and `FabricEpochDay` with the same `bigint`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricEpochDay (dedicated TAG_EPOCH_DAY primitive tag) > produces different hashes for `FabricEpochNsec` and `FabricEpochDay` with the same `bigint`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricEpochNsec (dedicated TAG_EPOCH_NSEC primitive tag) > hashes a FabricEpochNsec with negative value (pre-epoch)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricEpochNsec (dedicated TAG_EPOCH_NSEC primitive tag) > hashes a FabricEpochNsec with negative value (pre-epoch)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricEpochNsec (dedicated TAG_EPOCH_NSEC primitive tag) > matches a hand-computed byte stream for `FabricEpochNsec(0n)`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricEpochNsec (dedicated TAG_EPOCH_NSEC primitive tag) > matches a hand-computed byte stream for `FabricEpochNsec(0n)`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricEpochNsec (dedicated TAG_EPOCH_NSEC primitive tag) > produces different hashes for FabricEpochNsec values"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricEpochNsec (dedicated TAG_EPOCH_NSEC primitive tag) > produces different hashes for FabricEpochNsec values"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricError (FabricInstance via [CODEC]) > matches a byte stream built from `[CODEC]` `encode()` output for `FabricError`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricError (FabricInstance via [CODEC]) > matches a byte stream built from `[CODEC]` `encode()` output for `FabricError`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricError (FabricInstance via [CODEC]) > produces different hashes for `TypeError` vs. `Error`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricError (FabricInstance via [CODEC]) > produces different hashes for `TypeError` vs. `Error`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricError (FabricInstance via [CODEC]) > produces different hashes for different errors"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricError (FabricInstance via [CODEC]) > produces different hashes for different errors"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricHash hashing (TAG_HASH = 0x29) > hashes a `FabricHash` inside a plain object without throwing"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricHash hashing (TAG_HASH = 0x29) > hashes a `FabricHash` inside a plain object without throwing"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricHash hashing (TAG_HASH = 0x29) > matches a hand-computed byte stream for `FabricHash`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricHash hashing (TAG_HASH = 0x29) > matches a hand-computed byte stream for `FabricHash`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricHash hashing (TAG_HASH = 0x29) > produces different hashes for `FabricHash` with different algorithm tags"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricHash hashing (TAG_HASH = 0x29) > produces different hashes for `FabricHash` with different algorithm tags"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricHash hashing (TAG_HASH = 0x29) > produces different hashes for `FabricHash` with different hash bytes"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricHash hashing (TAG_HASH = 0x29) > produces different hashes for `FabricHash` with different hash bytes"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricKeyPair hashing (TAG_KEY_PAIR = 0x2C) > hashes the two keys in a fixed order"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricKeyPair hashing (TAG_KEY_PAIR = 0x2C) > hashes the two keys in a fixed order"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricKeyPair hashing (TAG_KEY_PAIR = 0x2C) > matches a hand-computed byte stream for `FabricKeyPair`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricKeyPair hashing (TAG_KEY_PAIR = 0x2C) > matches a hand-computed byte stream for `FabricKeyPair`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > feeds `TAG_NULL` for the message of an error given none"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > feeds `TAG_NULL` for the message of an error given none"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > matches a hand-computed byte stream for `FabricUnavailable(\"error\", \"network\", \"boom\")`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > matches a hand-computed byte stream for `FabricUnavailable(\"error\", \"network\", \"boom\")`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > matches a hand-computed byte stream for `FabricUnavailable(\"pending\")`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > matches a hand-computed byte stream for `FabricUnavailable(\"pending\")`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces different hashes for different kinds"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces different hashes for different kinds"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces different hashes for different messages"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces different hashes for different messages"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces different hashes for different reasons"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces different hashes for different reasons"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces the same hash for a prefab and a fresh instance with its reason"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces the same hash for a prefab and a fresh instance with its reason"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces the same hash for an error given its kind's default message and one given none"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > FabricUnavailable (dedicated TAG_UNAVAILABLE primitive tag) > produces the same hash for an error given its kind's default message and one given none"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Objects > hashes a null-prototype object as an ordinary plain object"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Objects > hashes a null-prototype object as an ordinary plain object"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Objects > hashes an object with mixed value types"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Objects > hashes an object with mixed value types"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Objects > is deterministic in object key order (sorted by UTF-8)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Objects > is deterministic in object key order (sorted by UTF-8)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Objects > matches a hand-computed byte stream for {a: 1, b: 2}"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Objects > matches a hand-computed byte stream for {a: 1, b: 2}"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Objects > produces TAG_OBJECT + TAG_END for an empty object"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Objects > produces TAG_OBJECT + TAG_END for an empty object"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > Objects > recursively hashes nested objects"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > Objects > recursively hashes nested objects"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > `FabricHash` result > produces `fid1:` via `FabricHash.toString()`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > `FabricHash` result > produces `fid1:` via `FabricHash.toString()`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > `FabricHash` result > produces a frozen `FabricHash` (`FabricPrimitive`)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > `FabricHash` result > produces a frozen `FabricHash` (`FabricPrimitive`)"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > `FabricHash` result > returns a `FabricHash` with the `fid1` tag"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > `FabricHash` result > returns a `FabricHash` with the `fid1` tag"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > encodes `-128n` as 1 byte: `0x80`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > encodes `-128n` as 1 byte: `0x80`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > encodes `-129n` as 2 bytes: `0xFF`, `0x7F`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > encodes `-129n` as 2 bytes: `0xFF`, `0x7F`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > encodes `-1n` as 1 byte: `0xFF`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > encodes `-1n` as 1 byte: `0xFF`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > encodes `0n` as `TAG_BIGINT` + LEB128 length 1 + `[0x00]`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > encodes `0n` as `TAG_BIGINT` + LEB128 length 1 + `[0x00]`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > encodes `127n` as 1 byte: `0x7F`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > encodes `127n` as 1 byte: `0x7F`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > encodes `128n` as 2 bytes: `0x00`, `0x80`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > encodes `128n` as 2 bytes: `0x00`, `0x80`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > encodes a large `bigint` correctly"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > encodes a large `bigint` correctly"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > matches a hand-computed byte stream for `-0x112233445566778899abcdefn`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > matches a hand-computed byte stream for `-0x112233445566778899abcdefn`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > matches a hand-computed byte stream for `0x112233445566778899abcdefn`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > matches a hand-computed byte stream for `0x112233445566778899abcdefn`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > bigint > produces `TAG_UNDEFINED` for `undefined`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > bigint > produces `TAG_UNDEFINED` for `undefined`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > boolean > produces `TAG_BOOLEAN` + `0x00` for `false`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > boolean > produces `TAG_BOOLEAN` + `0x00` for `false`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > boolean > produces `TAG_BOOLEAN` + `0x01` for `true`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > boolean > produces `TAG_BOOLEAN` + `0x01` for `true`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > boolean > produces different hashes for `true` and `false`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > boolean > produces different hashes for `true` and `false`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > cross-type distinctness > number `0` vs `bigint` value `0n` vs string `\"0\"` are distinct"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > cross-type distinctness > number `0` vs `bigint` value `0n` vs string `\"0\"` are distinct"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > cross-type distinctness > produces different hashes for `null`, `undefined`, and `false`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > cross-type distinctness > produces different hashes for `null`, `undefined`, and `false`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces `TAG_NUMBER` + IEEE 754 `+Infinity` bit pattern for `Infinity`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces `TAG_NUMBER` + IEEE 754 `+Infinity` bit pattern for `Infinity`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces `TAG_NUMBER` + IEEE 754 `-Infinity` bit pattern for `-Infinity`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces `TAG_NUMBER` + IEEE 754 `-Infinity` bit pattern for `-Infinity`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces `TAG_NUMBER` + IEEE 754 float64 BE for `42`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces `TAG_NUMBER` + IEEE 754 float64 BE for `42`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces `TAG_NUMBER` + IEEE 754 negative-zero bit pattern for `-0`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces `TAG_NUMBER` + IEEE 754 negative-zero bit pattern for `-0`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces `TAG_NUMBER` + all zeros for `0`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces `TAG_NUMBER` + all zeros for `0`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces `TAG_NUMBER` + all-nonzero IEEE 754 bytes for `Number.MAX_VALUE`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces `TAG_NUMBER` + all-nonzero IEEE 754 bytes for `Number.MAX_VALUE`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces canonical `TAG_NUMBER` quiet-NaN bytes for `NaN`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces canonical `TAG_NUMBER` quiet-NaN bytes for `NaN`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces different hashes for `-0` and `+0`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces different hashes for `-0` and `+0`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces different hashes for different numbers"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces different hashes for different numbers"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > number > produces distinct hashes for `NaN`, `+Infinity`, and `-Infinity`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > number > produces distinct hashes for `NaN`, `+Infinity`, and `-Infinity`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > produces `TAG_NULL` byte stream for `null`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > produces `TAG_NULL` byte stream for `null`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > encodes a lone surrogate as its three WTF-8 bytes"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > encodes a lone surrogate as its three WTF-8 bytes"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > encodes multi-byte UTF-8 characters correctly"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > encodes multi-byte UTF-8 characters correctly"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > encodes surrogate pairs (emoji) correctly"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > encodes surrogate pairs (emoji) correctly"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > is deterministic and value-distinct on the long-string path"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > is deterministic and value-distinct on the long-string path"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > produces `TAG_STRING` + LEB128 byte length + UTF-8 for `hello`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > produces `TAG_STRING` + LEB128 byte length + UTF-8 for `hello`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > produces `TAG_STRING` + zero length for the empty string"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > produces `TAG_STRING` + zero length for the empty string"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > produces different hashes for different strings"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > produces different hashes for different strings"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > sorts object keys by the byte order of their WTF-8 encodings"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > sorts object keys by the byte order of their WTF-8 encodings"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > takes the TAG_STRING_HASH path for a long string"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > takes the TAG_STRING_HASH path for a long string"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashOf() > string > takes the TAG_STRING_HASH path over the WTF-8 bytes of a long string"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > string > takes the TAG_STRING_HASH path over the WTF-8 bytes of a long string"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashStringOf > matches `FabricHash.hashString` for frozen objects"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashStringOf > matches `FabricHash.hashString` for frozen objects"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashStringOf > matches `FabricHash.hashString` for mutable objects"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashStringOf > matches `FabricHash.hashString` for mutable objects"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashStringOf > matches `FabricHash.hashString` for primitives"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashStringOf > matches `FabricHash.hashString` for primitives"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashStringOf > produces different strings for different values"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashStringOf > produces different strings for different values"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashStringOf > returns a result that does not contain the algorithm tag or colon"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashStringOf > returns a result that does not contain the algorithm tag or colon"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashStringOf > returns a string"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashStringOf > returns a string"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashStringOf > returns a valid unpadded base64url result"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashStringOf > returns a valid unpadded base64url result"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > hashStringOf > returns consistent results"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashStringOf > returns consistent results"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > taggedHashStringOf > returns a hash portion that matches that of `hashStringOf()`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > taggedHashStringOf > returns a hash portion that matches that of `hashStringOf()`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > taggedHashStringOf > returns a string"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > taggedHashStringOf > returns a string"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash > taggedHashStringOf > returns a string that starts with a `tag:`"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > taggedHashStringOf > returns a string that starts with a `tag:`"}} {"date":"2026-09-23","from":{"k":"unit","s":"data-model","n":"value-hash/impl > `hashOf()` interned symbols > throws for `Symbol(desc)` (unique / uninterned)"},"to":{"k":"unit","s":"data-model","n":"value-hash/impl > hashOf() > throws for `Symbol(desc)` (unique / uninterned)"}} {"date":"2026-09-26","from":{"k":"unit","s":"data-model","n":"value-visit/impl > mapValue() > returns the value itself when the visitor changes nothing"},"to":{"k":"unit","s":"data-model","n":"value-visit/impl > mapValue() > returns the value itself when the visitor changes nothing and the value is deeply frozen"}}