Skip to content

Releases: Cratis/Screenplay

Release v4.6.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 09:32
f9afbdc

Summary

Add the normative framework-neutral execution plan and deterministic reference evaluator for the source-bound RegisterProject semantic vertical.

Added

  • Add capability-admitted semantic execution plans with typed pre-execution unsupported issues. (#136)
  • Add immutable world state and normalized Accepted, Rejected, Conflict, and Unsupported outcomes. (#136)
  • Execute exact command contracts, command/concept not empty validation, unconditional facts, one-instance projections, and optional snapshot queries atomically. (#136)
  • Add deterministic specification execution/comparison and the source → ESM → plan → success/rejection RegisterProject vector. (#136)
  • Document reference execution and its currently admitted capability subset. (#136)

Changed

  • Make unsupported validation, conditional production, affected cardinality, and query delivery block plan creation rather than execute partially. (#136)

Release v4.5.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 08:55
4792708

Summary

Add the fail-closed source-to-ESM compiler phase and make every current syntax family explicitly bound, preserved, reported, blocked, migrated, or deferred.

Added

  • Add ISemanticModelBinder and ISemanticModelCompiler with identity-catalog, source-map, and file/folder semantic equivalence. (#135)
  • Bind concepts/composite types, modules/features/state slices, command/event behavior, not empty validation, read models, simple projections, optional keyed queries, and success/rejection/query specifications. (#135)
  • Add the complete Program v1 syntax disposition matrix and PLAY0268–PLAY0274 binding diagnostics. (#135)
  • Add the end-to-end RegisterProject source → ESM vector and explicit report-only/deferred/blocking coverage. (#135)

Changed

  • Make the delivery program, handover, diagnostics, and continuation prompt point at the durable syntax disposition matrix. (#135)

Release v4.4.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 08:23
aa1ee5c

Summary

Let a Screenplay specification prove not only projected state, but that callers can retrieve that state through an explicit query contract.

Added

  • Add then query, arguments, and repeatable ordered result blocks to specifications. (#87)
  • Add query reference resolution, stable diagnostics, walker support, and binary-compatible syntax nodes. (#87)
  • Add Monaco completions, hover vocabulary, VS Code highlighting, grammar, and reference documentation. (#87)

Changed

  • Define Program v1 query assertions as exact results in authored order; explicit subset and unordered qualifiers remain additive future work. (#87)

Release v4.3.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 20:57
e8b52c2

Summary

Introduce the versioned, fail-closed semantic foundation that subsequent Screenplay binding and execution work will build on.

Added

  • Add an immutable executable semantic model with stable semantic, document, query-argument, and event-contract identities. (#135)
  • Add canonical ESM and identity-catalog serialization with deterministic revisions and explicit migration contracts. (#135)
  • Add recursive collection and composite values with strict type, optionality, cardinality, and enumeration validation. (#135)
  • Add net8, net9, and net10 canonical-byte conformance vectors in CI. (#135)

Release v4.2.2

Choose a tag to compare

@github-actions github-actions released this 23 Aug 13:56
739da35

Fixed

  • A validation rule's file reference and inline code block are no longer written for rule kinds the compiler cannot read them back on. A syntax tree carrying one on, say, a not empty rule used to print a document that failed to compile with PLAY0141; the omission is now stated in a // TODO: comment on the line it would have occupied, and the printed document compiles. (#123)
  • A handler, a performer and a rule <Name> predicate that carry both a file reference and an inline code block now print only the file reference - the one the compiler reads back - and name the omitted block in a comment, instead of writing both and failing to compile with PLAY0034, PLAY0048 or PLAY0141. (#123)

Release v4.2.1

Choose a tag to compare

@github-actions github-actions released this 19 Aug 04:12
e44f608

Two places where the editor and the compiler described different languages, both silent and both user visible (#86).

Fixed

  • The editor reports the compiler's PLAY code for every condition it checks, so the same problem carries the same code whether it was found by the CLI or by a squiggle - lookup, suppression and log matching all work from one catalogue. A Monaco marker gets it as code, a VS Code diagnostic as Diagnostic.code, and diagnosticCodes names them for a consumer. (#86)
  • A query whose return type is dotted is scanned as a query again. The editor matched [\w[\]?]+ where the compiler takes [\w.]+(?:\[\])?\??, so such a query registered no symbol at all - its by and filter parameters went un-type-checked and it was missing from data … via query completions, with nothing reported. (#86)

Changed

  • ValidationIssue carries an optional code. The structural checks the capture and projection validators make have no compiler counterpart and deliberately carry none - documented in diagnostics.md, under In the editor.

Release v4.2.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 21:43
7709d43

Added

  • A file reference in a .play document is now a link — cmd-click opens the file it names (#120)
  • screenplay.sourceRoot setting, to say what a repo-relative path in a document is resolved against (#120)
  • A file reference that could mean more than one file is left unlinked, with a tooltip naming every candidate — and is never resolved from a search that may have been cut short (#120)
  • A file reference whose name contains *, ?, [, ], { or } resolves to the file literally named that, so route files such as [id].tsx are linked (#120)
  • Links are re-resolved when a file appears or disappears outside the editor, such as from a git checkout or a run of the generator (#120)

Release v4.1.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 20:37
b39d0f2

Summary

Every declaration can now name the file it is realized by, so a document can be navigated back to the code. #120

Added

  • file <path> on concept, type, event, readmodel, projection, slice, specification and the top-level trigger, naming the repository relative file the declaration is realized by. #120
  • PLAY0264 warns when a file path is absolute rather than repository relative.
  • file offered as a completion in the declaration bodies that accept it.
  • A file references page covering what the keyword means on each construct and the rules a path follows.

Changed

  • ScreenplaySyntaxWalker.VisitFileReference reaches every file a document names, whichever construct named it.
  • Syntax nodes grow by init-only property rather than by a trailing optional record parameter, which is a binary break. Set File with an object initializer or a with expression.

Fixed

  • The syntax tree compatibility page said appending an optional record parameter keeps consumers working. It is source compatible and binary breaking, so the page now states the hazard and prescribes the init property.

Release v4.0.1

Choose a tag to compare

@github-actions github-actions released this 16 Aug 10:32
c8157cb

Changed

  • Package validation is enabled again, with the baseline moved to 4.0.0. It was switched off for the 4.0.0 major itself, where every API break was deliberate and validating against the 3.x line it was leaving had no answer to give. With 4.0.0 published, the baseline moves to it and the protection resumes — leaving it off past a major is what previously let releases ship without the break being caught.

🤖 Generated with Claude Code

Release v4.0.0

Choose a tag to compare

@github-actions github-actions released this 16 Aug 09:53
dead2db

Summary

Four words in the language now mean exactly one thing each: a layout is the application's base navigational shell, a screen template is a reusable shape inside it, a dialog template is a shape that opens over it, and a screen is an instance that fills one of them.

Added

  • layout <Name> — a new top level construct declaring the application's base navigational look: named slots, arranged the same way a template's are. Its slots keep contributes <ContributionPoint>, which makes the shell the natural home of an application-wide Navigation point.
  • layout <Name> on a ui profile, exactly parallel to the existing theme <Name> line — at most one per profile. This is where an application states which shell it uses. Naming a layout the document does not declare is reported as a warning, the way an unknown theme already is.
  • dialog template <Name> at module scope — a reusable shape for content that opens over the application. It declares no fits slot, because it occupies no slot.
  • fits slot <name> on a screen template — names the slot of its parent the template fills. One rule for every level: a module's template fits a slot on the application layout, a feature's fits a slot the module's template declares, a slice's fits one the feature's declares.
  • A Layouts and templates documentation page covering the four constructs and how they nest.

Changed

  • The module-scoped layout <Name> is now screen template <Name>. It was never a layout — it is a reusable shape that goes inside one.

  • A screen names the structure it fills with template <Name> instead of layout <Name>.

  • The arrangement tree hangs directly off arrangement; the separate template block inside it is gone. arrangement freeform likewise holds its variant blocks directly. This frees the word template to mean a screen or dialog template and nothing else.

  • Slots are declared by name in the body, and the arrangement positions them:

    layout AppShell
      navigation contributes Navigation
      content
    
      arrangement flow
        row
          navigation width 240
          content grow
    

    A body of plain slot names, with no arrangement, is a complete declaration on its own. contributes belongs on the declaration; sizing (width, height, grow, span) belongs in the arrangement, so a slot never says two different things about itself in two places.

  • Syntax types renamed to match: LayoutSyntax is now the application layout, ScreenTemplateSyntax / DialogTemplateSyntax are the module-scoped ones, ModuleSyntax.Layouts is ModuleSyntax.ScreenTemplates (plus DialogTemplates), TemplateSyntax and its tree are ArrangementSyntax / ArrangementNodeSyntax / ArrangementContainerSyntax / ArrangementSlotSyntax / ArrangementOverrideSyntax / ArrangementContainerKind, LayoutArrangement is ArrangementMode, and ScreenLayoutSyntax is ScreenTemplateReferenceSyntax. The matching walker methods follow the same names.