Skip to content

Release v4.147.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 00:31
876dbac

Summary

Concepts can now declare how their values are generated. Time-ordered UUIDs, ULIDs, TypeIDs, NanoIDs and random byte tokens reach the executable model as ESM v15, with exact fixture checks and protection against reusing a generated identifier.

Added

  • A concept can declare generate uuid, uuidv7, ulid, typeid "<prefix>", nanoid [size] or bytes <count> base64url|hex|base32, with the prefix, case and alphabet modifiers; generated properties now accept any generatable concept, not only Uuid concepts (part of #616)
  • Concepts with a declared strategy bind into the executable model as ESM v15, as an optional generation member on the concept; models without one, including an unmodified generate uuid on a Uuid concept, keep their exact executable-model bytes and revision (part of #616)
  • From ESM v15 the reference evaluator checks every generated fixture against its strategy's exact shape, and rejects a command that appends to a generated identifier whose event source already has events, with the new Concurrency rejection (part of #616)
  • Entropy diagnostics: a generated value below 64 random bits warns with the number of values at a 1% collision probability, unless a unique constraint covers it, and a generated identifier below 64 bits is refused (part of #616)
  • generate pattern, random and rule parse and print in both compilers but are not yet executable, and generate sequence is reserved (part of #616)
  • New diagnostics PLAY0672 to PLAY0684 for malformed strategies, modifiers, prefixes, alphabets and sizes, in both compilers (part of #616)
  • Editor completion, hover with entropy and strategy notes, and syntax highlighting for generate (part of #616)
  • Documentation: generated values, choosing a strategy and a strategy reference, plus ESM v15 in the interoperability table, golden vector and canonical corpus (part of #616)

Changed

  • Generated values in specifications can be text, not only UUIDs (part of #616)
  • Decision 0054 records the delivery phases of #616 and the encoding details fixed at admission (part of #616)