@cratis/screenplay-language 4.159.0 → 4.160.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,9 +8,9 @@ import"./_virtual/_virtual/_rolldown/runtime.js";import{identityProperties as e}
8
8
  \${1|eventSource,sourceType,streamType,streamId,events|}`,documentation:`The scope of the concurrency check made when the command appends events.`},{label:`handler`,insertText:`handler
9
9
  `,documentation:`Fully imperative command implementation — file reference or inline C#, instead of produces.`}],h=[{label:`property`,insertText:"${1:property} ${2:Type}",documentation:`A property of the event — a name and a type reference.`},{label:`description`,insertText:'description "${1:what happened}"',documentation:`Authoring metadata, as one line or a text/markdown fence.`},{label:`documentation`,insertText:"documentation\n ```markdown\n ${1:Details}\n ```",documentation:`Authoring-only Markdown documentation.`},{label:`id`,insertText:'id "${1:OldName}"',documentation:`Preserves a previous persisted event name after a rename. Leave absent for new events.`},{label:`tag`,insertText:"tag ${1:audit}",documentation:`An event-type tag stamped on every occurrence.`}],g=[...h,{label:`for`,insertText:"for ${1:identifier}",documentation:`Explicitly names the command identifier used as the event source.`},{label:`property mapping`,insertText:"${1:property} ${2:Type} = ${3:source}",documentation:`Declares and maps an event property on one line.`}],_=[{label:`when`,insertText:"when ${1:condition}",documentation:`Guards the produced event with a condition.`}],v=[{label:`hint`,insertText:'hint "${1:implementation guidance}"',documentation:`Ordered nonblank guidance for a handler implementation. Not an execution guarantee.`},{label:`file`,insertText:"file ${1:Path}",documentation:`Selects one existing model-relative attachment.`},...[`csharp`,`typescript`,`react`,`html`,`sql`].map(e=>({label:e,insertText:fenced(e),documentation:`Selects one inline payload. Handler execution remains unsupported.`}))],y=[{label:`implementation`,insertText:`implementation
10
10
  hint "\${1:implementation guidance}"`,documentation:`Handler-only implementation intent with optional file or tagged fence. With no payload it is pending.`},{label:`file`,insertText:"file ${1:Path}",documentation:`Delegates the command implementation to an external C# file.`},{label:`csharp`,insertText:fenced(`csharp`),documentation:`Inline C# returning the events to append.`}],b=[{label:`description`,insertText:'description "${1:what this query is trying to accomplish}"',documentation:`What the query is for, in prose — what a generator or reviewer works from.`},{label:`by`,insertText:"by ${1:param} ${2:Type}",documentation:`Declares the identifying parameter of the query.`},{label:`by parts`,insertText:"by\n ${1:part} ${2:Type}\n ${3:part} ${4:Type}",documentation:`Declares a composite lookup. Supply every key part for a single instance.`},{label:`filter`,insertText:"filter ${1:param} ${2:Type} optional",documentation:`Declares an optional filter parameter supplied by the caller.`},{label:`filter from context`,insertText:"filter ${1:param} ${2:Type} from $context.${3|tenant,causedBy.subject,occurred|}",documentation:`Declares a parameter filled from the query context instead of the caller.`},{label:`authorize`,insertText:"authorize ${1:PolicyName}",documentation:`References the policies that must pass for the query to execute.`},{label:`performer`,insertText:`performer
11
- `,documentation:`The code that performs the query — a file reference or an inline csharp/sql block.`}],x=[{label:`file`,insertText:"file ${1:Path}",documentation:`Delegates the query implementation to an external file.`},{label:`csharp`,insertText:fenced(`csharp`),documentation:`Inline C# returning the query result, with the QueryContext in scope as context.`},{label:`sql`,insertText:fenced(`sql`),documentation:`Inline SQL returning the query result.`}],S=[{label:`description`,insertText:'description "${1:invariant intent}"',documentation:`Report-only description, distinct from the violation message.`},{label:`unique`,insertText:"unique ${1:property} on ${2:EventType}",documentation:`Enforces a unique property value across an event type.`},{label:`unique event`,insertText:"unique event ${1:EventType}",documentation:`Enforces that the event type occurs at most once per event source.`},{label:`file`,insertText:"file ${1:Path}",documentation:`Delegates the constraint to a custom C# implementation.`}],C=[t,{label:`from`,insertText:"from ${1:Source.Stream}",documentation:`Observe matching routed facts only, without filtering stream ids. ESM v10.`},{label:`runs as system`,insertText:`runs as system`,documentation:`Authenticated system identity with no roles for returned commands. Admitted by released ESM v10; claims are unknown.`},{label:`runs as system role`,insertText:'runs as system role "${1:Role}"',documentation:`Exact system roles for every returned or invoked command, not imperative pipeline calls. Admitted by released ESM v10; claims are unknown.`},{label:`description`,insertText:'description "${1:what this reaction does}"',documentation:`What the reaction does — a complete statement of intent before any code exists.`},{label:`when`,insertText:"when ${1:Trigger}",documentation:`An event, a declared trigger or a host signal that sets the reaction off. A trigger needs no body.`},{label:`every`,insertText:"every ${1:15} ${2|seconds,minutes,hours,days|}",documentation:`Runs the reaction on an interval.`},{label:`at`,insertText:"at ${1:08:00}",documentation:"Runs the reaction at a time of day — every day unless narrowed with `on <Weekday>` or `on day <n>`."},{label:`where`,insertText:"where ${1:condition}",documentation:`Narrows which occurrences actually run the reaction.`}],w=[{label:`reads`,insertText:"reads ${1:View}",documentation:"The view this trigger consults. Optionally use `as <alias> by <trigger value>`; clock triggers take no values and cannot use `by`."},{label:`description`,insertText:'description "${1:what this reaction does}"',documentation:`What this particular reaction does — enough on its own, with no file to point at.`},{label:`produces`,insertText:"produces ${1:EventType}",documentation:`An event the reaction appends.`},{label:`invokes`,insertText:"invokes ${1:Command}",documentation:`A command the reaction hands on. A command is asked for, not produced — it may still be rejected.`},{label:`file`,insertText:"file ${1:Path}",documentation:`Delegates the reaction to an external C# file.`},{label:`csharp`,insertText:fenced(`csharp`),documentation:`Inline C# returning event side effects.`}],T=`Syntax-only; reaction refusal handling is not yet executable (PLAY0268).`,E=[{label:`on refused`,insertText:`on refused
11
+ `,documentation:`The code that performs the query — a file reference or an inline csharp/sql block.`}],x=[{label:`file`,insertText:"file ${1:Path}",documentation:`Delegates the query implementation to an external file.`},{label:`csharp`,insertText:fenced(`csharp`),documentation:`Inline C# returning the query result, with the QueryContext in scope as context.`},{label:`sql`,insertText:fenced(`sql`),documentation:`Inline SQL returning the query result.`}],S=[{label:`description`,insertText:'description "${1:invariant intent}"',documentation:`Report-only description, distinct from the violation message.`},{label:`unique`,insertText:"unique ${1:property} on ${2:EventType}",documentation:`Enforces a unique property value across an event type.`},{label:`unique event`,insertText:"unique event ${1:EventType}",documentation:`Enforces that the event type occurs at most once per event source.`},{label:`file`,insertText:"file ${1:Path}",documentation:`Delegates the constraint to a custom C# implementation.`}],C=[t,{label:`from`,insertText:"from ${1:Source.Stream}",documentation:`Observe matching routed facts only, without filtering stream ids. ESM v10.`},{label:`runs as system`,insertText:`runs as system`,documentation:`Authenticated system identity with no roles for returned commands. Admitted by released ESM v10; claims are unknown.`},{label:`runs as system role`,insertText:'runs as system role "${1:Role}"',documentation:`Exact system roles for every returned or invoked command, not imperative pipeline calls. Admitted by released ESM v10; claims are unknown.`},{label:`description`,insertText:'description "${1:what this reaction does}"',documentation:`What the reaction does — a complete statement of intent before any code exists.`},{label:`when`,insertText:"when ${1:Trigger}",documentation:`An event, a declared trigger or a host signal that sets the reaction off. A trigger needs no body.`},{label:`every`,insertText:"every ${1:15} ${2|seconds,minutes,hours,days|}",documentation:`Runs the reaction on an interval.`},{label:`at`,insertText:"at ${1:08:00}",documentation:"Runs the reaction at a time of day — every day unless narrowed with `on <Weekday>` or `on day <n>`."},{label:`where`,insertText:"where ${1:condition}",documentation:`Narrows which occurrences actually run the reaction.`}],w=[{label:`reads`,insertText:"reads ${1:View}",documentation:"The view this trigger consults. Optionally use `as <alias> by <trigger value>`; clock triggers take no values and cannot use `by`."},{label:`description`,insertText:'description "${1:what this reaction does}"',documentation:`What this particular reaction does — enough on its own, with no file to point at.`},{label:`produces`,insertText:"produces ${1:EventType}",documentation:`An event the reaction appends.`},{label:`invokes`,insertText:"invokes ${1:Command}",documentation:`A command the reaction hands on. A command is asked for, not produced — it may still be rejected.`},{label:`file`,insertText:"file ${1:Path}",documentation:`Delegates the reaction to an external C# file.`},{label:`csharp`,insertText:fenced(`csharp`),documentation:`Inline C# returning event side effects.`}],T=`Executable from ESM v19. The first matching branch handles the refusal and stops remaining invocations of this trigger; other reactions and cascades continue.`,E=[{label:`on refused`,insertText:`on refused
12
12
  acknowledge`,documentation:`Handles validation and constraint refusals, not authorization. ${T}`},{label:`on refused by validation`,insertText:`on refused by validation
13
- acknowledge`,documentation:`Handles validation refusals. ${T}`},{label:`on refused by constraint`,insertText:`on refused by constraint \${1:Name}
13
+ acknowledge`,documentation:`Handles error-severity property, concept and require refusals. ${T}`},{label:`on refused by constraint`,insertText:`on refused by constraint \${1:Name}
14
14
  acknowledge`,documentation:`Handles a named constraint refusal; omit the name for any constraint. ${T}`},{label:`on refused by authorization`,insertText:`on refused by authorization
15
15
  acknowledge`,documentation:`Explicitly handles unauthorized results, never Unsupported. ${T}`}],D=[{label:`acknowledge`,insertText:`acknowledge`,documentation:`Acknowledges alone, without productions. ${T}`},{label:`produces`,insertText:"produces ${1:Event}\n ${2:reason} = \\$refusal.reason",documentation:`Records the refusal with ordinary event productions. ${T}`}],O=[{label:`file`,insertText:"file ${1:Path}",documentation:`Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.`},{label:`description`,insertText:'description "${1:when this occurs}"',documentation:`What makes an occurrence of this trigger happen.`},{label:`value`,insertText:"${1:name} ${2:Type}",documentation:`A value an occurrence hands the reaction. The type is optional.`}],k=[{label:`parameter`,insertText:"parameter ${1:name} ${2:Type}",documentation:`One typed value, supplied exactly once by every case.`},{label:`case`,insertText:"case ${1:Name}\n ${2:parameter} = ${3:value}",documentation:`One named complete set of concrete parameter values.`},{label:`given caller as`,insertText:"given caller as ${1:Persona}",documentation:`An authenticated deterministic witness of a top-level persona; no body. Use explicit callers for negation, ownership claims and implementations.`},{label:`description`,insertText:'description "${1:rule or case witnessed}"',documentation:`Authoring-only description of what this scenario demonstrates.`},{label:`when redelivered`,insertText:"when redelivered ${1:Event} to ${2:Reaction}\n for ${3:value}",documentation:`Selects exactly one given event occurrence and delivers it again to one named event-trigger reaction; the event is not appended again. Executable from ESM v17.`},{label:`given operation fails`,insertText:"given operation ${1:Name} fails",documentation:`Failure fixture leaf; not admitted by any supported executable model (ESM) version yet (PLAY0268).`},{label:`then operation`,insertText:"then operation ${1:Name}\n ${2:input} = ${3:value}",documentation:`Partial requested-operation assertion; not admitted by any supported executable model (ESM) version yet (PLAY0268).`},{label:`then compensated`,insertText:"then compensated ${1:Name}",documentation:`Compensation assertion leaf; not admitted by any supported executable model (ESM) version yet (PLAY0268).`},{label:`file`,insertText:"file ${1:Path}",documentation:`Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.`},{label:`given`,insertText:"given ${1:EventType}\n ${2:property} = ${3:value}",documentation:`Establishes prior state by replaying an event before the command runs.`},{label:`given readmodel`,insertText:"given readmodel ${1:ReadModelType}\n ${2:property} = ${3:value}",documentation:`Establishes prior read model state directly.`},{label:`when`,insertText:"when ${1:CommandType}\n ${2:property} = ${3:value}",documentation:`The command being exercised.`},{label:`then`,insertText:"then ${1:EventType}\n ${2:property} = ${3:value}",documentation:`An event expected to be produced by the command.`},{label:`then readmodel`,insertText:"then readmodel ${1:ReadModelType}\n ${2:property} = ${3:value}",documentation:`The read model state expected after the command.`},{label:`then no readmodel`,insertText:"then no readmodel ${1:ReadModelType} for ${2:key}",documentation:`Asserts that precisely one keyed read-model instance does not exist; another key may still be present.`},{label:`then query`,insertText:"then query ${1:QueryName}\n arguments\n ${2:argument} = ${3:value}\n result\n ${4:property} = ${5:value}",documentation:`The ordered query results expected for explicit arguments. Remove the result block to assert an empty result.`},{label:`then error`,insertText:`then error`,documentation:`A rejection, for a reason this specification does not name.`},{label:`then error "..."`,insertText:'then error "${1:reason}"',documentation:`A rejection, for the named reason.`},{label:`given clock`,insertText:'given clock "${1:2026-10-05T08:00:00Z}"',documentation:`The instant the scenario happens at - the occurrence time of everything it does. At most once.`},{label:`given capture`,insertText:"given capture ${1:Capture}\n ${2:field} = ${3:value}",documentation:`A record the capture's source held before.`},{label:`when clock`,insertText:'when clock "${1:2026-10-05T09:00:00Z}"',documentation:`The clock reaches an instant, as the action.`},{label:`when trigger`,insertText:"when trigger ${1:Trigger}\n ${2:value} = ${3:value}",documentation:`An application trigger fires, as the action.`},{label:`when capture`,insertText:"when capture ${1:Capture}\n ${2:field} = ${3:value}",documentation:`The record a capture's source holds now, as the action.`},{label:`when query`,insertText:"when query ${1:Query}\n ${2:argument} = ${3:value}",documentation:`Performs a query, as the action.`},{label:`then result`,insertText:"then result\n ${1:property} = ${2:value}",documentation:"One result the query performed by `when query` returns, in order."},{label:`then no result`,insertText:`then no result`,documentation:"The query performed by `when query` returns nothing."},{label:`then no events`,insertText:`then no events`,documentation:`Asserts the action appended no events, including after when append, where no reaction appended anything. Executable from ESM v17; cannot accompany event, error or denial expectations.`}],A={given:[{label:`operation`,insertText:"operation ${1:Name} fails",documentation:`Syntax-only failure fixture; no children.`},{label:`clock`,insertText:'clock "${1:2026-10-05T08:00:00Z}"',documentation:`The instant the scenario happens at - the occurrence time of everything it does.`},{label:`capture`,insertText:"capture ${1:Capture}\n ${2:field} = ${3:value}",documentation:`A record the capture's source held before. Repeat it for several records.`},{label:`readmodel`,insertText:"readmodel ${1:ReadModelType}\n ${2:property} = ${3:value}",documentation:`Establishes prior read model state directly.`},{label:`caller`,insertText:`caller
16
16
  \${1:authenticated}`,documentation:`The identity the scenario runs as.`}],when:[{label:`redelivered`,insertText:"redelivered ${1:Event} to ${2:Reaction}\n for ${3:value}",documentation:`Selects exactly one given event occurrence and delivers it again to one named reaction; the event is not appended again. Executable from ESM v17.`},{label:`clock`,insertText:'clock "${1:2026-10-05T09:00:00Z}"',documentation:`The clock reaches an instant - what a scheduled reaction responds to.`},{label:`trigger`,insertText:"trigger ${1:Trigger}\n ${2:value} = ${3:value}",documentation:`An application trigger fires, with the values it carries.`},{label:`capture`,insertText:"capture ${1:Capture}\n ${2:field} = ${3:value}",documentation:`The record a capture's source holds now.`},{label:`query`,insertText:"query ${1:Query}\n ${2:argument} = ${3:value}",documentation:"Performs a query; assert what it returns with `then result` or `then no result`."},{label:`append`,insertText:"append ${1:EventType}\n ${2:property} = ${3:value}",documentation:`An event occurs, instead of a command being executed.`}],then:[{label:`operation`,insertText:"operation ${1:Name}\n ${2:input} = ${3:value}",documentation:`Syntax-only partial operation assertion; not admitted by any supported executable model (ESM) version yet.`},{label:`compensated`,insertText:"compensated ${1:Name}",documentation:`Syntax-only compensation assertion; no children.`},{label:`returns value`,insertText:"returns ${1:value}",documentation:`Scalar response expectation, compared by semantic value equality. Executable as ESM v7.`},{label:`returns block`,insertText:"returns\n ${1:field} = ${2:value}",documentation:`Nonempty subset of response fields asserted by name. Executable as ESM v7.`},{label:`result`,insertText:"result\n ${1:property} = ${2:value}",documentation:"One result the query performed by `when query` returns, in order."},{label:`result exactly`,insertText:"result exactly\n ${1:property} = ${2:value}",documentation:`One result, with every property asserted.`},{label:`no result`,insertText:`no result`,documentation:"The query performed by `when query` returns nothing."},{label:`no events`,insertText:`no events`,documentation:`Asserts the action appended no events, including after when append. Executable from ESM v17.`},{label:`readmodel`,insertText:"readmodel ${1:ReadModelType}\n ${2:property} = ${3:value}",documentation:`The read model state expected afterwards.`},{label:`error`,insertText:'error "${1:reason}"',documentation:`A rejection, for the named reason.`},{label:`denied`,insertText:`denied`,documentation:`The action is denied to the caller.`}]},j=[{label:`hint`,insertText:'hint "${1:predicate guidance}"',documentation:`Ordered nonblank authoring guidance. Does not execute or confirm the predicate.`},{label:`file`,insertText:"file ${1:Path}",documentation:`The sole named-rule predicate attachment.`},{label:`csharp`,insertText:fenced(`csharp`),documentation:`Opaque named-rule predicate returning a bool. Requires an admitting target.`}],M=[{label:`implementation`,insertText:`implementation
@@ -1 +1 @@
1
- {"version":3,"file":"completion-items.js","names":["optionalTypeItems","tag","identityItems","details","symbols","detail","contextVariableItems","identityProperties","topLevelItems","exampleDeclarationItems","operationItems","operationImplementationItems","language","operationPhaseItems","item","conceptItems","typeItems","sliceItems","purposeReferenceItem","documentationItem","commandItems","eventItems","inlineEventItems","producesItems","implementationItems","handlerItems","queryItems","performerItems","constraintItems","reactionItems","reactionTriggerItems","refusalAvailability","invocationItems","refusalItems","triggerItems","specificationItems","specificationStepItems","namedRuleImplementationItems","commandRuleItems","ruleItems","policyItems","validateItems","screenItems","actionItems","guardedActionItems","interactionActionItems","interactionChoiceItems","actionArgumentItems","tableItems","property","eventContextPaths","path","sliceMembers","members","sliceType"],"sources":["../../completion-items.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { DocumentSymbols } from './symbols';\nimport { documentationItem } from './documentation-item';\nimport { purposeReferenceItem } from './purpose-items';\n\nimport { eventContextPaths } from './event-context';\nimport { identityProperties } from './language';\nimport { exampleDeclarationItems } from './example-declaration-items';\n\nexport const optionalTypeItems: CompletionEntry[] = [\n { label: 'optional', insertText: 'optional', documentation: 'Allows the complete value, including a collection, to be absent.' },\n];\n\nexport interface CompletionEntry {\n label: string;\n insertText: string;\n documentation: string;\n sortText?: string;\n detail?: string;\n}\n\nconst fenced = (tag: string) => `\\`\\`\\`${tag}\\n\\${1}\\n\\`\\`\\``;\n\nexport { exampleDeclarationItems } from './example-declaration-items';\n\nexport const identityItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:caller details}\"', documentation: 'Describes the caller metadata.' },\n { label: 'detail from claim', insertText: '${1:detail} ${2:Type} from claim \"${3:claim}\"', documentation: 'One typed detail sourced from a token claim.' },\n { label: 'detail from query', insertText: '${1:detail} ${2:Type} from query ${3:Query} by \\\\$identity.id', documentation: 'A keyed, single-result query authorized without additional caller details.' },\n { label: 'detail from code', insertText: '${1:detail} ${2:Type}\\n ```csharp\\n ${3:return value;}\\n ```', documentation: 'An opaque inline source; authoring metadata, not executable.' },\n { label: 'detail from file', insertText: '${1:detail} ${2:Type}\\n file ${3:Path}', documentation: 'One file source; no refresh or cache directives.' },\n];\n\nexport function contextVariableEntries(symbols: DocumentSymbols): CompletionEntry[] {\n const details = [...new Map((symbols.identityDetails ?? []).map(detail => [detail.name, detail])).values()];\n return [...contextVariableItems, ...details.filter(detail => !identityProperties.includes(detail.name)).map(detail => ({ label: `$identity.${detail.name}`, insertText: `\\\\$identity.${detail.name}`, detail: detail.type, documentation: 'Declared caller detail. Authoring metadata only; executable reads report PLAY0268 until admitted (#600).' }))];\n}\n\nexport const topLevelItems: CompletionEntry[] = [\n { label: 'identity', insertText: 'identity\\n ${1:detail} ${2:Type} from claim \"${3:claim}\"', documentation: 'Typed additional caller details; authoring metadata only, at most one block per application.' },\n { label: 'purpose', insertText: 'purpose ${1:Name}\\n description \"${2:processing intent}\"\\n basis ${3|consent,contract,legalObligation,vitalInterests,publicTask,legitimateInterests|}', documentation: 'Report-only processing metadata. Not legal advice; referenced by module, feature and slice.' },\n ...exampleDeclarationItems,\n { label: 'eventsource', insertText: 'eventsource ${1:Name}\\n identifier ${2:Type}\\n stream ${3:Name}', documentation: 'Application-owned source with nested streams, admitted by ESM v8. Pin the stored name before renaming a source with stored events; Default is reserved.' },\n { label: 'system', insertText: 'system ${1:Name}\\n description \"${2:external system}\"', documentation: 'Application-scoped external system; not admitted by any supported executable model (ESM) version yet.' },\n { label: 'import', insertText: 'import ${1:Module}.${2:Type}', documentation: 'Imports a type from another module by its qualified name.' },\n { label: 'import from', insertText: 'import ${1:Module}.${2:Event} from \"${3:origin}\"', documentation: 'Imports a public event contract with a nonblank opaque origin, not a file path. An import has no local shape, so executable binding still refuses it with PLAY0268.' },\n { label: 'import \"…\"', insertText: 'import \"${1:**/*.play}\"', documentation: 'Imports other `.play` files by path or glob, relative to this file\\'s folder, as whole documents of the application.' },\n { label: 'concept', insertText: 'concept ${1:Name} : ${2|Uuid,String,Int,Decimal,Bool,Date,DateTime|}', documentation: 'Declares a formalized value type wrapping a primitive.' },\n { label: 'concept (enum)', insertText: 'concept ${1:Name} : Enum\\n ${2:value}', documentation: 'Declares a positional enumeration. Reordering or inserting members changes their stored numbers.' },\n { label: 'concept (pii with reason)', insertText: 'concept ${1:Name} : ${2|String,Uuid,Int,Decimal,Bool,Date,DateTime|} pii\\n pii reason \"${3:why this value is personal data}\"', documentation: 'Declares a personal-data concept together with the reason it is personal data.' },\n { label: 'type', insertText: 'type ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares a composite value type — a named shape built from several properties.' },\n { label: 'policy', insertText: 'policy ${1:Name}\\n require ${2:authenticated}', documentation: 'Declares a named authorization rule for commands and queries.' },\n { label: 'module', insertText: 'module ${1:Name}\\n ', documentation: 'Declares the top-level namespace — maps to a bounded context.' },\n { label: 'domain', insertText: 'domain ${1:Name}', documentation: 'The domain the file belongs to — optional, at most one per file, before everything else.' },\n { label: 'persona', insertText: 'persona ${1:Name}\\n description \"${2:who they are}\"', documentation: 'A named role interacting with the application, with the policies it holds.' },\n { label: 'authentication', insertText: 'authentication\\n provider ${1:Name}\\n ${2:setting} ${3:value}', documentation: 'Declares the identity providers of the application — at most one block per file.' },\n { label: 'seed', insertText: 'seed\\n for ${1:EventSourceId}\\n ${2:EventType}', documentation: 'Declares events to seed into the event store per event source id.' },\n { label: 'layout', insertText: 'layout ${1:Name}\\n ${2:slot}', documentation: 'Declares the application shell with named slots.' },\n { label: 'theme', insertText: 'theme ${1:Name}\\n compatible with ${2:Package}', documentation: 'Declares a theme and the component packages it is compatible with.' },\n { label: 'ui profile', insertText: 'ui profile ${1:Name}\\n target platform ${2:web}\\n layout ${3:Layout}\\n theme ${4:Theme}', documentation: 'Binds a target platform and size to a layout, theme and component packages.' },\n { label: 'behavior', insertText: 'behavior ${1:Name}\\n on ${2:click}\\n ${3:execute command}', documentation: 'A named interaction wiring, attached to a screen, form or dialog with `uses`.' },\n { label: 'trigger', insertText: 'trigger ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares an integration signal a reaction can run on.' },\n];\n\nexport const operationItems: CompletionEntry[] = [\n { label: 'uses', insertText: 'uses ${1:System}', documentation: 'Exactly one application-scoped external system.' },\n { label: 'description', insertText: 'description \"${1:intent}\"', documentation: 'Describes operation intent, without requiring code.' },\n { label: 'input', insertText: '${1:input} ${2:Type}', documentation: 'Typed operation input; no identifier or generated modifier.' },\n { label: 'execute', insertText: 'execute\\n description \"${1:effect}\"', documentation: 'Optional execution intent; not admitted by any supported executable model (ESM) version yet.' },\n { label: 'compensate', insertText: 'compensate\\n description \"${1:undo intent}\"', documentation: 'Optional compensation intent; not admitted by any supported executable model (ESM) version yet.' },\n];\n\nexport const operationImplementationItems: CompletionEntry[] = [\n { label: 'hint', insertText: 'hint \"${1:implementation guidance}\"', documentation: 'Ordered authoring guidance; not an executable implementation role.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Selects the phase’s sole source attachment.' },\n ...['csharp', 'typescript', 'react', 'html', 'sql'].map(language => ({ label: language, insertText: fenced(language), documentation: 'Selects the phase’s sole inline source; not admitted by any supported executable model (ESM) version yet.' })),\n];\n\nexport const operationPhaseItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:phase intent}\"', documentation: 'A description-only phase is valid, pending intent.' },\n { label: 'implementation', insertText: 'implementation\\n hint \"${1:guidance}\"', documentation: 'Hints with optional source; phase owns File/Code, wrapper owns hints only.' },\n ...operationImplementationItems.filter(item => item.label !== 'hint'),\n];\n\nexport const conceptItems: CompletionEntry[] = [\n { label: 'generate uuid', insertText: 'generate uuid', documentation: 'Random UUID v4; 122 random bits. Implicit on Uuid concepts; String UUIDs are lowercase by default.' },\n { label: 'generate uuidv7', insertText: 'generate uuidv7', documentation: 'Time-ordered UUID v7; 74 random bits. Exposes time, not monotonic within a millisecond.' },\n { label: 'generate ulid', insertText: 'generate ulid', documentation: '26 uppercase Crockford base32 characters; 80 random bits. String concepts only.' },\n { label: 'generate typeid', insertText: 'generate typeid \"${1:user}\"', documentation: 'TypeID 0.3, lowercase UUIDv7 base32; 74 random bits. Empty prefix has no separator.' },\n { label: 'generate nanoid', insertText: 'generate nanoid ${1:21}', documentation: 'String from a distinct printable ASCII alphabet; size × log2(alphabet size) random bits. Default: 21 × 6 = 126 bits.' },\n { label: 'generate bytes', insertText: 'generate bytes ${1:32} ${2|base64url,hex,base32|}', documentation: 'Cryptographic random bytes, RFC 4648 without padding; 8 × count bits. Case applies only to hex/base32.' },\n { label: 'generate pattern', insertText: 'generate pattern \"${1:ORD-#{7}}\"', documentation: 'Parsed and printed, not yet executable (#616 phase 3).' },\n { label: 'generate random', insertText: 'generate random ${1:1}..${2:9}', documentation: 'Int range; parsed and printed, not yet executable (#616 phase 3).' },\n { label: 'generate rule', insertText: 'generate rule ${1:Name}', documentation: 'Implementation attachment; parsed and printed, not yet executable (#616 phase 3).' },\n { label: 'description', insertText: 'description \"${1:what this value represents}\"', documentation: 'Report-only authoring description; not a validation or compliance note.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'pii reason', insertText: 'pii reason \"${1:why this value is personal data}\"', documentation: 'A free-text concept note, not a lawful basis.' },\n { label: 'secret reason', insertText: 'secret reason \"${1:why this value is an operational secret}\"', documentation: 'Records why the secret marker applies.' },\n { label: 'secret scope', insertText: 'secret scope ${1|subject,namespace,global|}', documentation: 'Explicit encryption scope; omitted scope keeps Chronicle’s Subject default.' },\n { label: 'pii special', insertText: 'pii special ${1|racialOrEthnicOrigin,politicalOpinions,religiousOrPhilosophicalBeliefs,tradeUnionMembership,genetic,biometric,health,sexLifeOrSexualOrientation|}', documentation: 'GDPR Art. 9(1) special category of personal data.' },\n { label: 'pii criminal', insertText: 'pii criminal', documentation: 'Personal data relating to criminal convictions and offenses (GDPR Art. 10).' },\n { label: 'validate', insertText: 'validate\\n ${1:not empty} message \"${2:message}\"', documentation: 'Validation rules that travel with the value everywhere it appears.' },\n];\n\nexport const typeItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'description', insertText: 'description \"${1:what this shape represents}\"', documentation: 'A human-readable description of the type.' },\n { label: 'property', insertText: '${1:property} ${2:Type}', documentation: 'A property of the type — a name and a type reference.' },\n];\n\nexport const sliceItems: CompletionEntry[] = [\n purposeReferenceItem,\n documentationItem,\n ...exampleDeclarationItems,\n { label: 'operation', insertText: 'operation ${1:Name}\\n uses ${2:System}\\n ${3:input} ${4:Type}', documentation: 'Reusable slice-owned operation intent; not admitted by any supported executable model (ESM) version yet.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'public event', insertText: 'public event ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares a public event: a contract this application publishes. Admitted by ESM v9; an outbound Translate slice produces it through a projection that targets it.' },\n { label: 'event from', insertText: 'event ${1:Name} from \"${2:origin}\"\\n ${3:property} ${4:Type}', documentation: 'An event with an opaque origin naming the application that owns it, not a path or declaration reference. It is a public event admitted by ESM v9; consume it with a capture over source events.' },\n { label: 'direction', insertText: 'direction ${1|inbound,outbound|}', documentation: 'Translate direction, inbound or outbound, admitted by ESM v9. No transport or delivery guarantee is implied.' },\n { label: 'event', insertText: 'event ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares an event type — an immutable, past-tense fact.' },\n { label: 'event generation', insertText: 'event ${1:Name} generation ${2:2}\\n ${3:property} ${4:Type}', documentation: 'Declares a complete numbered event generation; start at 1 and do not skip a number.' },\n { label: 'command', insertText: 'command ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares a command — an imperative intent that produces events.' },\n { label: 'query', insertText: 'query ${1:Name} => ${2:ReadModel}', documentation: 'Declares a read-side entry point mapping to a return type.' },\n { label: 'query observable', insertText: 'query ${1:Name} => observable ${2:ReadModel}', documentation: 'Declares a live read — the query keeps pushing as the read model changes, instead of answering once.' },\n { label: 'readmodel', insertText: 'readmodel ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares the shape of a read model — its properties — that a projection, reducer or query fills and returns.' },\n { label: 'reducer', insertText: 'reducer ${1:Name} => ${2:ReadModel}\\n on ${3:EventType}\\n ```csharp\\n ${4}\\n ```', documentation: 'Declares a reducer building a read model from events with imperative code, for what a projection cannot express.' },\n { label: 'specification', insertText: 'specification ${1:Name}\\n given ${2:EventType}\\n when ${3:Command}\\n then ${4:EventType}', documentation: 'Given/when/then acceptance criteria for the slice.' },\n { label: 'projection', insertText: 'projection ${1:Name} => ${2:ReadModel}\\n from ${3:EventType}', documentation: 'Declares how events project into a read model (PDL).' },\n { label: 'capture', insertText: 'capture ${1:Name}\\n source ${2:api}', documentation: 'Declares a change data capture converting external data into events (CDL).' },\n { label: 'reaction', insertText: 'reaction ${1:Name}\\n when ${2:Trigger}', documentation: 'Declares behavior that runs when something happens.' },\n { label: 'screen', insertText: 'screen ${1:Name}\\n data ${2:ReadModel} via query ${3:QueryName}', documentation: 'Declares a UI screen.' },\n { label: 'constraint', insertText: 'constraint ${1:Name}\\n unique ${2:property} on ${3:EventType}', documentation: 'Declares a server-side rule enforced before events are committed.' },\n];\n\nexport const commandItems: CompletionEntry[] = [\n documentationItem,\n { label: 'property', insertText: '${1:property} ${2:Type}', documentation: 'An input of the command — a name and a type reference.' },\n { label: 'produces operation', insertText: 'produces operation ${1:Name}\\n uses ${2:System}\\n ${3:input} ${4:Type} = ${5:source}', documentation: 'Declares ordered operation intent; not admitted by any supported executable model (ESM) version yet (PLAY0268).' },\n { label: 'returns property', insertText: 'returns @${1:property}', documentation: 'Scalar response from a direct command property, only on acceptance. Executable as ESM v7.' },\n { label: 'returns block', insertText: 'returns\\n ${1:field} = ${2:property}', documentation: 'Unnamed record response with inferred or explicit field types, only on acceptance. Executable as ESM v7.' },\n { label: 'produces event', insertText: 'produces event ${1:Name}\\n ${2:property} ${3:Type} = ${4:source}', documentation: 'Declares a slice-owned generation-1 event and maps its properties. An omitted for uses the command identifier.' },\n { label: 'identifier property', insertText: '${1:property} ${2:Type} identifier', documentation: 'Marks the property a runtime resolves the event source id from. At most one per command.' },\n { label: 'authorize', insertText: 'authorize ${1:PolicyName}', documentation: 'References the policies that must pass for the command to execute.' },\n { label: 'reads', insertText: 'reads ${1:View} by ${2:property}', documentation: 'Declares a view the command consults. Executable binding is not yet supported.' },\n { label: 'reads as', insertText: 'reads ${1:View} as ${2:alias} by ${3:property}', documentation: 'Names one instance of a view; every instance needs a unique alias when reading the same view more than once.' },\n { label: 'validate', insertText: 'validate\\n ${1:property} not empty message \"${2:message}\"', documentation: 'Declarative validation rules with messages.' },\n { label: 'validate csharp', insertText: `validate\\n ${fenced('csharp')}`, documentation: 'Imperative validation in C#, yielding the message of every rule the artifact breaks.' },\n { label: 'produces', insertText: 'produces ${1:EventType}\\n ${2:property} = ${3:source}', documentation: 'Declares the event the command emits, with property mappings.' },\n { label: 'produces when', insertText: 'produces when ${1:condition}\\n ${2:EventType}\\n ${3:property} = ${4:source}', documentation: 'Conditionally emits an event when the condition holds.' },\n { label: 'description', insertText: 'description \"${1:what the command asks for}\"', documentation: 'A human-readable description.' },\n { label: 'concurrency', insertText: 'concurrency\\n ${1|eventSource,sourceType,streamType,streamId,events|}', documentation: 'The scope of the concurrency check made when the command appends events.' },\n { label: 'handler', insertText: 'handler\\n ', documentation: 'Fully imperative command implementation — file reference or inline C#, instead of produces.' },\n];\n\nexport const eventItems: CompletionEntry[] = [\n { label: 'property', insertText: '${1:property} ${2:Type}', documentation: 'A property of the event — a name and a type reference.' },\n { label: 'description', insertText: 'description \"${1:what happened}\"', documentation: 'Authoring metadata, as one line or a text/markdown fence.' },\n { label: 'documentation', insertText: 'documentation\\n ```markdown\\n ${1:Details}\\n ```', documentation: 'Authoring-only Markdown documentation.' },\n { label: 'id', insertText: 'id \"${1:OldName}\"', documentation: 'Preserves a previous persisted event name after a rename. Leave absent for new events.' },\n { label: 'tag', insertText: 'tag ${1:audit}', documentation: 'An event-type tag stamped on every occurrence.' },\n];\n\nexport const inlineEventItems: CompletionEntry[] = [\n ...eventItems,\n { label: 'for', insertText: 'for ${1:identifier}', documentation: 'Explicitly names the command identifier used as the event source.' },\n { label: 'property mapping', insertText: '${1:property} ${2:Type} = ${3:source}', documentation: 'Declares and maps an event property on one line.' },\n];\n\nexport const producesItems: CompletionEntry[] = [\n { label: 'when', insertText: 'when ${1:condition}', documentation: 'Guards the produced event with a condition.' },\n];\n\nexport const implementationItems: CompletionEntry[] = [\n { label: 'hint', insertText: 'hint \"${1:implementation guidance}\"', documentation: 'Ordered nonblank guidance for a handler implementation. Not an execution guarantee.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Selects one existing model-relative attachment.' },\n ...['csharp', 'typescript', 'react', 'html', 'sql'].map(language => ({ label: language, insertText: fenced(language), documentation: 'Selects one inline payload. Handler execution remains unsupported.' })),\n];\n\nexport const handlerItems: CompletionEntry[] = [\n { label: 'implementation', insertText: 'implementation\\n hint \"${1:implementation guidance}\"', documentation: 'Handler-only implementation intent with optional file or tagged fence. With no payload it is pending.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Delegates the command implementation to an external C# file.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Inline C# returning the events to append.' },\n];\n\nexport const queryItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:what this query is trying to accomplish}\"', documentation: 'What the query is for, in prose — what a generator or reviewer works from.' },\n { label: 'by', insertText: 'by ${1:param} ${2:Type}', documentation: 'Declares the identifying parameter of the query.' },\n { label: 'by parts', insertText: 'by\\n ${1:part} ${2:Type}\\n ${3:part} ${4:Type}', documentation: 'Declares a composite lookup. Supply every key part for a single instance.' },\n { label: 'filter', insertText: 'filter ${1:param} ${2:Type} optional', documentation: 'Declares an optional filter parameter supplied by the caller.' },\n { label: 'filter from context', insertText: 'filter ${1:param} ${2:Type} from $context.${3|tenant,causedBy.subject,occurred|}', documentation: 'Declares a parameter filled from the query context instead of the caller.' },\n { label: 'authorize', insertText: 'authorize ${1:PolicyName}', documentation: 'References the policies that must pass for the query to execute.' },\n { label: 'performer', insertText: 'performer\\n ', documentation: 'The code that performs the query — a file reference or an inline csharp/sql block.' },\n];\n\nexport const performerItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Delegates the query implementation to an external file.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Inline C# returning the query result, with the QueryContext in scope as context.' },\n { label: 'sql', insertText: fenced('sql'), documentation: 'Inline SQL returning the query result.' },\n];\n\nexport const constraintItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:invariant intent}\"', documentation: 'Report-only description, distinct from the violation message.' },\n { label: 'unique', insertText: 'unique ${1:property} on ${2:EventType}', documentation: 'Enforces a unique property value across an event type.' },\n { label: 'unique event', insertText: 'unique event ${1:EventType}', documentation: 'Enforces that the event type occurs at most once per event source.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Delegates the constraint to a custom C# implementation.' },\n];\n\nexport const reactionItems: CompletionEntry[] = [\n documentationItem,\n { label: 'from', insertText: 'from ${1:Source.Stream}', documentation: 'Observe matching routed facts only, without filtering stream ids. ESM v10.' },\n { label: 'runs as system', insertText: 'runs as system', documentation: 'Authenticated system identity with no roles for returned commands. Admitted by released ESM v10; claims are unknown.' },\n { label: 'runs as system role', insertText: 'runs as system role \"${1:Role}\"', documentation: 'Exact system roles for every returned or invoked command, not imperative pipeline calls. Admitted by released ESM v10; claims are unknown.' },\n { label: 'description', insertText: 'description \"${1:what this reaction does}\"', documentation: 'What the reaction does — a complete statement of intent before any code exists.' },\n { label: 'when', insertText: 'when ${1:Trigger}', documentation: 'An event, a declared trigger or a host signal that sets the reaction off. A trigger needs no body.' },\n { label: 'every', insertText: 'every ${1:15} ${2|seconds,minutes,hours,days|}', documentation: 'Runs the reaction on an interval.' },\n { label: 'at', insertText: 'at ${1:08:00}', documentation: 'Runs the reaction at a time of day — every day unless narrowed with `on <Weekday>` or `on day <n>`.' },\n { label: 'where', insertText: 'where ${1:condition}', documentation: 'Narrows which occurrences actually run the reaction.' },\n];\n\nexport const reactionTriggerItems: CompletionEntry[] = [\n { label: 'reads', insertText: 'reads ${1:View}', documentation: 'The view this trigger consults. Optionally use `as <alias> by <trigger value>`; clock triggers take no values and cannot use `by`.' },\n { label: 'description', insertText: 'description \"${1:what this reaction does}\"', documentation: 'What this particular reaction does — enough on its own, with no file to point at.' },\n { label: 'produces', insertText: 'produces ${1:EventType}', documentation: 'An event the reaction appends.' },\n { label: 'invokes', insertText: 'invokes ${1:Command}', documentation: 'A command the reaction hands on. A command is asked for, not produced — it may still be rejected.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Delegates the reaction to an external C# file.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Inline C# returning event side effects.' },\n];\n\nconst refusalAvailability = 'Syntax-only; reaction refusal handling is not yet executable (PLAY0268).';\n\nexport const invocationItems: CompletionEntry[] = [\n { label: 'on refused', insertText: 'on refused\\n acknowledge', documentation: `Handles validation and constraint refusals, not authorization. ${refusalAvailability}` },\n { label: 'on refused by validation', insertText: 'on refused by validation\\n acknowledge', documentation: `Handles validation refusals. ${refusalAvailability}` },\n { label: 'on refused by constraint', insertText: 'on refused by constraint ${1:Name}\\n acknowledge', documentation: `Handles a named constraint refusal; omit the name for any constraint. ${refusalAvailability}` },\n { label: 'on refused by authorization', insertText: 'on refused by authorization\\n acknowledge', documentation: `Explicitly handles unauthorized results, never Unsupported. ${refusalAvailability}` },\n];\n\nexport const refusalItems: CompletionEntry[] = [\n { label: 'acknowledge', insertText: 'acknowledge', documentation: `Acknowledges alone, without productions. ${refusalAvailability}` },\n { label: 'produces', insertText: 'produces ${1:Event}\\n ${2:reason} = \\\\$refusal.reason', documentation: `Records the refusal with ordinary event productions. ${refusalAvailability}` },\n];\n\nexport const triggerItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'description', insertText: 'description \"${1:when this occurs}\"', documentation: 'What makes an occurrence of this trigger happen.' },\n { label: 'value', insertText: '${1:name} ${2:Type}', documentation: 'A value an occurrence hands the reaction. The type is optional.' },\n];\n\nexport const specificationItems: CompletionEntry[] = [\n { label: 'parameter', insertText: 'parameter ${1:name} ${2:Type}', documentation: 'One typed value, supplied exactly once by every case.' },\n { label: 'case', insertText: 'case ${1:Name}\\n ${2:parameter} = ${3:value}', documentation: 'One named complete set of concrete parameter values.' },\n { label: 'given caller as', insertText: 'given caller as ${1:Persona}', documentation: 'An authenticated deterministic witness of a top-level persona; no body. Use explicit callers for negation, ownership claims and implementations.' },\n { label: 'description', insertText: 'description \"${1:rule or case witnessed}\"', documentation: 'Authoring-only description of what this scenario demonstrates.' },\n { label: 'when redelivered', insertText: 'when redelivered ${1:Event} to ${2:Reaction}\\n for ${3:value}', documentation: 'Selects exactly one given event occurrence and delivers it again to one named event-trigger reaction; the event is not appended again. Executable from ESM v17.' },\n { label: 'given operation fails', insertText: 'given operation ${1:Name} fails', documentation: 'Failure fixture leaf; not admitted by any supported executable model (ESM) version yet (PLAY0268).' },\n { label: 'then operation', insertText: 'then operation ${1:Name}\\n ${2:input} = ${3:value}', documentation: 'Partial requested-operation assertion; not admitted by any supported executable model (ESM) version yet (PLAY0268).' },\n { label: 'then compensated', insertText: 'then compensated ${1:Name}', documentation: 'Compensation assertion leaf; not admitted by any supported executable model (ESM) version yet (PLAY0268).' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'given', insertText: 'given ${1:EventType}\\n ${2:property} = ${3:value}', documentation: 'Establishes prior state by replaying an event before the command runs.' },\n { label: 'given readmodel', insertText: 'given readmodel ${1:ReadModelType}\\n ${2:property} = ${3:value}', documentation: 'Establishes prior read model state directly.' },\n { label: 'when', insertText: 'when ${1:CommandType}\\n ${2:property} = ${3:value}', documentation: 'The command being exercised.' },\n { label: 'then', insertText: 'then ${1:EventType}\\n ${2:property} = ${3:value}', documentation: 'An event expected to be produced by the command.' },\n { label: 'then readmodel', insertText: 'then readmodel ${1:ReadModelType}\\n ${2:property} = ${3:value}', documentation: 'The read model state expected after the command.' },\n { label: 'then no readmodel', insertText: 'then no readmodel ${1:ReadModelType} for ${2:key}', documentation: 'Asserts that precisely one keyed read-model instance does not exist; another key may still be present.' },\n { label: 'then query', insertText: 'then query ${1:QueryName}\\n arguments\\n ${2:argument} = ${3:value}\\n result\\n ${4:property} = ${5:value}', documentation: 'The ordered query results expected for explicit arguments. Remove the result block to assert an empty result.' },\n { label: 'then error', insertText: 'then error', documentation: 'A rejection, for a reason this specification does not name.' },\n { label: 'then error \"...\"', insertText: 'then error \"${1:reason}\"', documentation: 'A rejection, for the named reason.' },\n { label: 'given clock', insertText: 'given clock \"${1:2026-10-05T08:00:00Z}\"', documentation: 'The instant the scenario happens at - the occurrence time of everything it does. At most once.' },\n { label: 'given capture', insertText: 'given capture ${1:Capture}\\n ${2:field} = ${3:value}', documentation: 'A record the capture\\'s source held before.' },\n { label: 'when clock', insertText: 'when clock \"${1:2026-10-05T09:00:00Z}\"', documentation: 'The clock reaches an instant, as the action.' },\n { label: 'when trigger', insertText: 'when trigger ${1:Trigger}\\n ${2:value} = ${3:value}', documentation: 'An application trigger fires, as the action.' },\n { label: 'when capture', insertText: 'when capture ${1:Capture}\\n ${2:field} = ${3:value}', documentation: 'The record a capture\\'s source holds now, as the action.' },\n { label: 'when query', insertText: 'when query ${1:Query}\\n ${2:argument} = ${3:value}', documentation: 'Performs a query, as the action.' },\n { label: 'then result', insertText: 'then result\\n ${1:property} = ${2:value}', documentation: 'One result the query performed by `when query` returns, in order.' },\n { label: 'then no result', insertText: 'then no result', documentation: 'The query performed by `when query` returns nothing.' },\n { label: 'then no events', insertText: 'then no events', documentation: 'Asserts the action appended no events, including after when append, where no reaction appended anything. Executable from ESM v17; cannot accompany event, error or denial expectations.' },\n];\n\n// What follows a 'given', 'when' or 'then' already typed in a specification.\nexport const specificationStepItems: Record<'given' | 'when' | 'then', CompletionEntry[]> = {\n given: [\n { label: 'operation', insertText: 'operation ${1:Name} fails', documentation: 'Syntax-only failure fixture; no children.' },\n { label: 'clock', insertText: 'clock \"${1:2026-10-05T08:00:00Z}\"', documentation: 'The instant the scenario happens at - the occurrence time of everything it does.' },\n { label: 'capture', insertText: 'capture ${1:Capture}\\n ${2:field} = ${3:value}', documentation: 'A record the capture\\'s source held before. Repeat it for several records.' },\n { label: 'readmodel', insertText: 'readmodel ${1:ReadModelType}\\n ${2:property} = ${3:value}', documentation: 'Establishes prior read model state directly.' },\n { label: 'caller', insertText: 'caller\\n ${1:authenticated}', documentation: 'The identity the scenario runs as.' },\n ],\n when: [\n { label: 'redelivered', insertText: 'redelivered ${1:Event} to ${2:Reaction}\\n for ${3:value}', documentation: 'Selects exactly one given event occurrence and delivers it again to one named reaction; the event is not appended again. Executable from ESM v17.' },\n { label: 'clock', insertText: 'clock \"${1:2026-10-05T09:00:00Z}\"', documentation: 'The clock reaches an instant - what a scheduled reaction responds to.' },\n { label: 'trigger', insertText: 'trigger ${1:Trigger}\\n ${2:value} = ${3:value}', documentation: 'An application trigger fires, with the values it carries.' },\n { label: 'capture', insertText: 'capture ${1:Capture}\\n ${2:field} = ${3:value}', documentation: 'The record a capture\\'s source holds now.' },\n { label: 'query', insertText: 'query ${1:Query}\\n ${2:argument} = ${3:value}', documentation: 'Performs a query; assert what it returns with `then result` or `then no result`.' },\n { label: 'append', insertText: 'append ${1:EventType}\\n ${2:property} = ${3:value}', documentation: 'An event occurs, instead of a command being executed.' },\n ],\n then: [\n { label: 'operation', insertText: 'operation ${1:Name}\\n ${2:input} = ${3:value}', documentation: 'Syntax-only partial operation assertion; not admitted by any supported executable model (ESM) version yet.' },\n { label: 'compensated', insertText: 'compensated ${1:Name}', documentation: 'Syntax-only compensation assertion; no children.' },\n { label: 'returns value', insertText: 'returns ${1:value}', documentation: 'Scalar response expectation, compared by semantic value equality. Executable as ESM v7.' },\n { label: 'returns block', insertText: 'returns\\n ${1:field} = ${2:value}', documentation: 'Nonempty subset of response fields asserted by name. Executable as ESM v7.' },\n { label: 'result', insertText: 'result\\n ${1:property} = ${2:value}', documentation: 'One result the query performed by `when query` returns, in order.' },\n { label: 'result exactly', insertText: 'result exactly\\n ${1:property} = ${2:value}', documentation: 'One result, with every property asserted.' },\n { label: 'no result', insertText: 'no result', documentation: 'The query performed by `when query` returns nothing.' },\n { label: 'no events', insertText: 'no events', documentation: 'Asserts the action appended no events, including after when append. Executable from ESM v17.' },\n { label: 'readmodel', insertText: 'readmodel ${1:ReadModelType}\\n ${2:property} = ${3:value}', documentation: 'The read model state expected afterwards.' },\n { label: 'error', insertText: 'error \"${1:reason}\"', documentation: 'A rejection, for the named reason.' },\n { label: 'denied', insertText: 'denied', documentation: 'The action is denied to the caller.' },\n ],\n};\n\nexport const namedRuleImplementationItems: CompletionEntry[] = [\n { label: 'hint', insertText: 'hint \"${1:predicate guidance}\"', documentation: 'Ordered nonblank authoring guidance. Does not execute or confirm the predicate.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'The sole named-rule predicate attachment.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Opaque named-rule predicate returning a bool. Requires an admitting target.' },\n];\n\nexport const commandRuleItems: CompletionEntry[] = [\n { label: 'implementation', insertText: 'implementation\\n hint \"${1:predicate guidance}\"', documentation: 'Command named-rule intent with optional file or tagged fence. Pending intent cannot bind.' },\n ...namedRuleImplementationItems.filter(item => item.label !== 'hint'),\n];\n\nexport const ruleItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Gives the named predicate its implementation in an external C# file.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Gives the named predicate its implementation as inline C# returning a bool.' },\n];\n\nexport const policyItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:authorization intent}\"', documentation: 'Report-only description; does not supply an implementation.' },\n { label: 'require authenticated', insertText: 'require authenticated', documentation: 'Requires an authenticated caller.' },\n { label: 'require role', insertText: 'require role \"${1:role}\"', documentation: 'Requires the caller to have a role.' },\n { label: 'require not role', insertText: 'require not role \"${1:role}\"', documentation: 'Excludes callers with a role. Add authenticated to require a signed-in caller.' },\n { label: 'require not claim', insertText: 'require not claim \"${1:claim}\" matches ${2:subject}', documentation: 'Requires that no claim value matches the subject or a value.' },\n { label: 'require claim', insertText: 'require claim \"${1:claim}\" matches ${2:subject}', documentation: 'Requires a claim to match the subject or a value.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Fully custom policy logic in C#, returning a bool.' },\n];\n\nexport const validateItems: CompletionEntry[] = [\n { label: 'not empty', insertText: '${1:property} not empty message \"${2:message}\"', documentation: 'Text needs a non-whitespace character; null, empty and whitespace-only text fail. Uses Unicode White_Space (.NET char.IsWhiteSpace), including U+0085 but not U+FEFF, not JavaScript trim(). Collections need at least one element. Applies to concept and command rules in every ESM version; no trimming. Identity text is unchanged.' },\n { label: 'max', insertText: '${1:property} max ${2:500} message \"${3:message}\"', documentation: 'Maximum length or value.' },\n { label: 'min', insertText: '${1:property} min ${2:1} message \"${3:message}\"', documentation: 'Minimum length or value.' },\n { label: 'matches', insertText: '${1:property} matches \"${2:pattern}\" message \"${3:message}\"', documentation: 'The property must match a regular expression.' },\n { label: 'rule', insertText: '${1:property} rule ${2:PredicateName} message \"${3:message}\"', documentation: 'Names a predicate — optionally followed by an indented `file` reference or inline `csharp` block giving it a body; bare, it just states that a constraint exists.' },\n { label: '==', insertText: '${1:property} == ${2:value} message \"${3:message}\"', documentation: 'The property must equal the value.' },\n { label: '!=', insertText: '${1:property} != ${2:value} message \"${3:message}\"', documentation: 'The property must not equal the value.' },\n { label: 'length ==', insertText: '${1:property} length == ${2:3} message \"${3:message}\"', documentation: 'The property must have an exact length.' },\n { label: 'all >', insertText: '${1:collection}.${2:property} all > ${3:0} message \"${4:message}\"', documentation: 'Every element of a collection must satisfy the comparison.' },\n];\n\nexport const screenItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:screen intent}\"', documentation: 'Report-only description, not a localizable screen title.' },\n { label: 'data', insertText: 'data ${1:ReadModel} via query ${2:QueryName}', documentation: 'Binds a read model to the screen through a query.' },\n { label: 'action', insertText: 'action ${1:CommandName}', documentation: 'Makes a command available as an action on the screen.' },\n { label: 'action \"…\"', insertText: 'action \"${1:Label}\"\\n when item.${2:status} == \"${3:open}\" execute ${4:CommandName}\\n otherwise hidden', documentation: 'One labeled button selecting the first matching command; hidden without a subject or match.' },\n { label: 'layout', insertText: 'layout ${1:LayoutName}', documentation: 'Uses a layout template and fills its slots.' },\n { label: 'section', insertText: 'section ${1:name}', documentation: 'A named structural section of the screen.' },\n { label: 'table', insertText: 'table ${1:name}\\n column ${2:property} label \"${3:text}\"', documentation: 'A table widget over a read model or collection.' },\n { label: 'summary', insertText: 'summary ${1:ReadModel}\\n field ${2:property} label \"${3:text}\"', documentation: 'A summary widget showing labeled fields.' },\n { label: 'title', insertText: 'title \"${1:text}\"', documentation: 'The title of the screen or section.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Full external implementation — Stage uses the referenced file.' },\n { label: 'react', insertText: fenced('react'), documentation: 'Inline React/TSX component receiving the data contract as Props.' },\n { label: 'typescript', insertText: fenced('typescript'), documentation: 'Inline plain TypeScript.' },\n { label: 'html', insertText: fenced('html'), documentation: 'Inline static HTML.' },\n];\n\nexport const actionItems: CompletionEntry[] = [\n { label: 'navigate to', insertText: 'navigate to ${1:ScreenName}', documentation: 'Navigates to a screen after the action completes.' },\n { label: 'label', insertText: 'label \"${1:text}\"', documentation: 'The display label of the action.' },\n];\n\nexport const guardedActionItems: CompletionEntry[] = [\n { label: 'when … execute', insertText: 'when item.${1:status} == \"${2:open}\" execute ${3:CommandName}', documentation: 'First matching alternative selects the command; authorization never falls through.' },\n { label: 'otherwise hidden', insertText: 'otherwise hidden', documentation: 'Hides the action when no alternative matches; also the default.' },\n { label: 'otherwise execute', insertText: 'otherwise execute ${1:CommandName}', documentation: 'Selects a fallback command when no alternative matches and a subject exists.' },\n ...actionItems.filter(item => item.label !== 'label'),\n];\n\nexport const interactionActionItems: CompletionEntry[] = [\n { label: 'execute', insertText: 'execute ${1:CommandName}', documentation: 'Executes a command; denial never selects another alternative.' },\n { label: 'navigate to', insertText: 'navigate to ${1:ScreenName}', documentation: 'Navigates to the named screen.' },\n { label: 'open dialog', insertText: 'open dialog ${1:DialogTemplate}', documentation: 'Opens a dialog.' },\n { label: 'notify', insertText: 'notify info \"${1:Message}\"', documentation: 'Displays a message.' },\n { label: 'confirm', insertText: 'confirm \"${1:Message}\"\\n on success\\n execute ${2:CommandName}', documentation: 'Asks before continuing.' },\n { label: 'refresh', insertText: 'refresh ${1:QueryName}', documentation: 'Refreshes a query-backed element.' },\n];\n\nexport const interactionChoiceItems: CompletionEntry[] = [\n { label: 'when …', insertText: 'when item.${1:status} == \"${2:open}\"\\n execute ${3:CommandName}', documentation: 'Selects a whole action list once against the rendered subject at gesture time.' },\n { label: 'otherwise', insertText: 'otherwise\\n notify info \"${1:Message}\"', documentation: 'Final fallback list; without a subject nothing runs, including fallback.' },\n ...interactionActionItems,\n];\n\nexport const actionArgumentItems: CompletionEntry[] = [\n { label: 'with … from', insertText: 'with ${1:property} from item.${2:property}', documentation: 'Explicit input binding for this command alternative, before same-name item fields or its form.' },\n];\n\nexport const tableItems: CompletionEntry[] = [\n { label: 'column', insertText: 'column ${1:property} label \"${2:text}\"', documentation: 'A column bound to a property.' },\n { label: 'on row-click', insertText: 'on row-click navigate to ${1:ScreenName} by ${2:param}', documentation: 'Navigates when a row is clicked.' },\n];\n\nexport const contextVariableItems: CompletionEntry[] = [\n ...identityProperties.map(property => ({\n label: `$identity.${property}${property === 'claims' ? '.' : ''}`,\n insertText: `$identity.${property}${property === 'claims' ? '.${1:name}' : ''}`,\n documentation: `The caller's ${property}, equivalent to $context.identity.${property}.`,\n })),\n { label: '$context.occurred', insertText: '$context.occurred', documentation: 'When the command or query was received.' },\n { label: '$context.tenant', insertText: '$context.tenant', documentation: 'The tenant the command or query is executing for.' },\n { label: '$context.command.', insertText: '$context.command.${1:property}', documentation: 'A property of the command being handled.' },\n { label: '$context.arguments.', insertText: '$context.arguments.${1:name}', documentation: 'An argument of the query being performed.' },\n { label: '$context.causedBy.subject', insertText: '$context.causedBy.subject', documentation: 'Subject of the identity that caused the command or query.' },\n { label: '$context.causedBy.name', insertText: '$context.causedBy.name', documentation: 'Display name of the identity that caused the command or query.' },\n { label: '$context.causedBy.userName', insertText: '$context.causedBy.userName', documentation: 'User name of the identity that caused the command or query.' },\n { label: '$context.causation.type', insertText: '$context.causation.type', documentation: 'What caused this — a command, a reactor, a schedule.' },\n { label: '$context.identity.id', insertText: '$context.identity.id', documentation: 'The identifier of the caller from the auth token.' },\n { label: '$context.identity.name', insertText: '$context.identity.name', documentation: 'The display name of the caller.' },\n { label: '$context.identity.userName', insertText: '$context.identity.userName', documentation: 'The user name of the caller.' },\n { label: '$context.identity.isAuthenticated', insertText: '$context.identity.isAuthenticated', documentation: 'Whether the caller is authenticated.' },\n { label: '$context.identity.roles', insertText: '$context.identity.roles', documentation: 'The roles the caller holds.' },\n { label: '$context.identity.claims.', insertText: '$context.identity.claims.${1:name}', documentation: 'The value of a claim the caller carries.' },\n { label: '$env.', insertText: '$env.${1:VAR_NAME}', documentation: 'An environment variable.' },\n // Every $eventContext path the event-context catalog lists, for projections - the underlying value of a concept\n // is left out, it reads the same as the member it belongs to.\n ...eventContextPaths\n .filter((path) => path.name !== 'value')\n .map((path) => ({ label: `$eventContext.${path.path}`, insertText: `$eventContext.${path.path}`, documentation: `${path.description} (PDL)` })),\n];\n\nexport { moduleScopeItems as moduleItems, featureScopeItems as featureItems } from './scope-items';\n\n// What a slice of each type can hold. A slice of an unknown type keeps everything.\nconst sliceMembers: Record<string, readonly string[]> = {\n StateChange: ['operation', 'file', 'description', 'event', 'event generation', 'command', 'constraint', 'screen', 'specification'],\n StateView: ['file', 'description', 'readmodel', 'query', 'query observable', 'projection', 'reducer', 'screen', 'specification', 'event', 'event generation'],\n Automation: ['operation', 'file', 'description', 'reaction', 'reducer', 'command', 'event', 'event generation', 'readmodel', 'specification'],\n Translate: ['file', 'description', 'capture', 'event', 'event generation', 'specification'],\n};\n\nexport function sliceItemsFor(sliceType: string | undefined): CompletionEntry[] {\n const members = sliceType ? sliceMembers[sliceType] : undefined;\n return members ? sliceItems.filter(item => item.label === 'purpose' || item.label === 'example' || item.label === 'documentation' || item.label === 'public event' || item.label === 'event from' || (item.label === 'direction' && sliceType === 'Translate') || members.includes(item.label)) : sliceItems;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"completion-items.js","names":["optionalTypeItems","tag","identityItems","details","symbols","detail","contextVariableItems","identityProperties","topLevelItems","exampleDeclarationItems","operationItems","operationImplementationItems","language","operationPhaseItems","item","conceptItems","typeItems","sliceItems","purposeReferenceItem","documentationItem","commandItems","eventItems","inlineEventItems","producesItems","implementationItems","handlerItems","queryItems","performerItems","constraintItems","reactionItems","reactionTriggerItems","refusalAvailability","invocationItems","refusalItems","triggerItems","specificationItems","specificationStepItems","namedRuleImplementationItems","commandRuleItems","ruleItems","policyItems","validateItems","screenItems","actionItems","guardedActionItems","interactionActionItems","interactionChoiceItems","actionArgumentItems","tableItems","property","eventContextPaths","path","sliceMembers","members","sliceType"],"sources":["../../completion-items.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { DocumentSymbols } from './symbols';\nimport { documentationItem } from './documentation-item';\nimport { purposeReferenceItem } from './purpose-items';\n\nimport { eventContextPaths } from './event-context';\nimport { identityProperties } from './language';\nimport { exampleDeclarationItems } from './example-declaration-items';\n\nexport const optionalTypeItems: CompletionEntry[] = [\n { label: 'optional', insertText: 'optional', documentation: 'Allows the complete value, including a collection, to be absent.' },\n];\n\nexport interface CompletionEntry {\n label: string;\n insertText: string;\n documentation: string;\n sortText?: string;\n detail?: string;\n}\n\nconst fenced = (tag: string) => `\\`\\`\\`${tag}\\n\\${1}\\n\\`\\`\\``;\n\nexport { exampleDeclarationItems } from './example-declaration-items';\n\nexport const identityItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:caller details}\"', documentation: 'Describes the caller metadata.' },\n { label: 'detail from claim', insertText: '${1:detail} ${2:Type} from claim \"${3:claim}\"', documentation: 'One typed detail sourced from a token claim.' },\n { label: 'detail from query', insertText: '${1:detail} ${2:Type} from query ${3:Query} by \\\\$identity.id', documentation: 'A keyed, single-result query authorized without additional caller details.' },\n { label: 'detail from code', insertText: '${1:detail} ${2:Type}\\n ```csharp\\n ${3:return value;}\\n ```', documentation: 'An opaque inline source; authoring metadata, not executable.' },\n { label: 'detail from file', insertText: '${1:detail} ${2:Type}\\n file ${3:Path}', documentation: 'One file source; no refresh or cache directives.' },\n];\n\nexport function contextVariableEntries(symbols: DocumentSymbols): CompletionEntry[] {\n const details = [...new Map((symbols.identityDetails ?? []).map(detail => [detail.name, detail])).values()];\n return [...contextVariableItems, ...details.filter(detail => !identityProperties.includes(detail.name)).map(detail => ({ label: `$identity.${detail.name}`, insertText: `\\\\$identity.${detail.name}`, detail: detail.type, documentation: 'Declared caller detail. Authoring metadata only; executable reads report PLAY0268 until admitted (#600).' }))];\n}\n\nexport const topLevelItems: CompletionEntry[] = [\n { label: 'identity', insertText: 'identity\\n ${1:detail} ${2:Type} from claim \"${3:claim}\"', documentation: 'Typed additional caller details; authoring metadata only, at most one block per application.' },\n { label: 'purpose', insertText: 'purpose ${1:Name}\\n description \"${2:processing intent}\"\\n basis ${3|consent,contract,legalObligation,vitalInterests,publicTask,legitimateInterests|}', documentation: 'Report-only processing metadata. Not legal advice; referenced by module, feature and slice.' },\n ...exampleDeclarationItems,\n { label: 'eventsource', insertText: 'eventsource ${1:Name}\\n identifier ${2:Type}\\n stream ${3:Name}', documentation: 'Application-owned source with nested streams, admitted by ESM v8. Pin the stored name before renaming a source with stored events; Default is reserved.' },\n { label: 'system', insertText: 'system ${1:Name}\\n description \"${2:external system}\"', documentation: 'Application-scoped external system; not admitted by any supported executable model (ESM) version yet.' },\n { label: 'import', insertText: 'import ${1:Module}.${2:Type}', documentation: 'Imports a type from another module by its qualified name.' },\n { label: 'import from', insertText: 'import ${1:Module}.${2:Event} from \"${3:origin}\"', documentation: 'Imports a public event contract with a nonblank opaque origin, not a file path. An import has no local shape, so executable binding still refuses it with PLAY0268.' },\n { label: 'import \"…\"', insertText: 'import \"${1:**/*.play}\"', documentation: 'Imports other `.play` files by path or glob, relative to this file\\'s folder, as whole documents of the application.' },\n { label: 'concept', insertText: 'concept ${1:Name} : ${2|Uuid,String,Int,Decimal,Bool,Date,DateTime|}', documentation: 'Declares a formalized value type wrapping a primitive.' },\n { label: 'concept (enum)', insertText: 'concept ${1:Name} : Enum\\n ${2:value}', documentation: 'Declares a positional enumeration. Reordering or inserting members changes their stored numbers.' },\n { label: 'concept (pii with reason)', insertText: 'concept ${1:Name} : ${2|String,Uuid,Int,Decimal,Bool,Date,DateTime|} pii\\n pii reason \"${3:why this value is personal data}\"', documentation: 'Declares a personal-data concept together with the reason it is personal data.' },\n { label: 'type', insertText: 'type ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares a composite value type — a named shape built from several properties.' },\n { label: 'policy', insertText: 'policy ${1:Name}\\n require ${2:authenticated}', documentation: 'Declares a named authorization rule for commands and queries.' },\n { label: 'module', insertText: 'module ${1:Name}\\n ', documentation: 'Declares the top-level namespace — maps to a bounded context.' },\n { label: 'domain', insertText: 'domain ${1:Name}', documentation: 'The domain the file belongs to — optional, at most one per file, before everything else.' },\n { label: 'persona', insertText: 'persona ${1:Name}\\n description \"${2:who they are}\"', documentation: 'A named role interacting with the application, with the policies it holds.' },\n { label: 'authentication', insertText: 'authentication\\n provider ${1:Name}\\n ${2:setting} ${3:value}', documentation: 'Declares the identity providers of the application — at most one block per file.' },\n { label: 'seed', insertText: 'seed\\n for ${1:EventSourceId}\\n ${2:EventType}', documentation: 'Declares events to seed into the event store per event source id.' },\n { label: 'layout', insertText: 'layout ${1:Name}\\n ${2:slot}', documentation: 'Declares the application shell with named slots.' },\n { label: 'theme', insertText: 'theme ${1:Name}\\n compatible with ${2:Package}', documentation: 'Declares a theme and the component packages it is compatible with.' },\n { label: 'ui profile', insertText: 'ui profile ${1:Name}\\n target platform ${2:web}\\n layout ${3:Layout}\\n theme ${4:Theme}', documentation: 'Binds a target platform and size to a layout, theme and component packages.' },\n { label: 'behavior', insertText: 'behavior ${1:Name}\\n on ${2:click}\\n ${3:execute command}', documentation: 'A named interaction wiring, attached to a screen, form or dialog with `uses`.' },\n { label: 'trigger', insertText: 'trigger ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares an integration signal a reaction can run on.' },\n];\n\nexport const operationItems: CompletionEntry[] = [\n { label: 'uses', insertText: 'uses ${1:System}', documentation: 'Exactly one application-scoped external system.' },\n { label: 'description', insertText: 'description \"${1:intent}\"', documentation: 'Describes operation intent, without requiring code.' },\n { label: 'input', insertText: '${1:input} ${2:Type}', documentation: 'Typed operation input; no identifier or generated modifier.' },\n { label: 'execute', insertText: 'execute\\n description \"${1:effect}\"', documentation: 'Optional execution intent; not admitted by any supported executable model (ESM) version yet.' },\n { label: 'compensate', insertText: 'compensate\\n description \"${1:undo intent}\"', documentation: 'Optional compensation intent; not admitted by any supported executable model (ESM) version yet.' },\n];\n\nexport const operationImplementationItems: CompletionEntry[] = [\n { label: 'hint', insertText: 'hint \"${1:implementation guidance}\"', documentation: 'Ordered authoring guidance; not an executable implementation role.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Selects the phase’s sole source attachment.' },\n ...['csharp', 'typescript', 'react', 'html', 'sql'].map(language => ({ label: language, insertText: fenced(language), documentation: 'Selects the phase’s sole inline source; not admitted by any supported executable model (ESM) version yet.' })),\n];\n\nexport const operationPhaseItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:phase intent}\"', documentation: 'A description-only phase is valid, pending intent.' },\n { label: 'implementation', insertText: 'implementation\\n hint \"${1:guidance}\"', documentation: 'Hints with optional source; phase owns File/Code, wrapper owns hints only.' },\n ...operationImplementationItems.filter(item => item.label !== 'hint'),\n];\n\nexport const conceptItems: CompletionEntry[] = [\n { label: 'generate uuid', insertText: 'generate uuid', documentation: 'Random UUID v4; 122 random bits. Implicit on Uuid concepts; String UUIDs are lowercase by default.' },\n { label: 'generate uuidv7', insertText: 'generate uuidv7', documentation: 'Time-ordered UUID v7; 74 random bits. Exposes time, not monotonic within a millisecond.' },\n { label: 'generate ulid', insertText: 'generate ulid', documentation: '26 uppercase Crockford base32 characters; 80 random bits. String concepts only.' },\n { label: 'generate typeid', insertText: 'generate typeid \"${1:user}\"', documentation: 'TypeID 0.3, lowercase UUIDv7 base32; 74 random bits. Empty prefix has no separator.' },\n { label: 'generate nanoid', insertText: 'generate nanoid ${1:21}', documentation: 'String from a distinct printable ASCII alphabet; size × log2(alphabet size) random bits. Default: 21 × 6 = 126 bits.' },\n { label: 'generate bytes', insertText: 'generate bytes ${1:32} ${2|base64url,hex,base32|}', documentation: 'Cryptographic random bytes, RFC 4648 without padding; 8 × count bits. Case applies only to hex/base32.' },\n { label: 'generate pattern', insertText: 'generate pattern \"${1:ORD-#{7}}\"', documentation: 'Parsed and printed, not yet executable (#616 phase 3).' },\n { label: 'generate random', insertText: 'generate random ${1:1}..${2:9}', documentation: 'Int range; parsed and printed, not yet executable (#616 phase 3).' },\n { label: 'generate rule', insertText: 'generate rule ${1:Name}', documentation: 'Implementation attachment; parsed and printed, not yet executable (#616 phase 3).' },\n { label: 'description', insertText: 'description \"${1:what this value represents}\"', documentation: 'Report-only authoring description; not a validation or compliance note.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'pii reason', insertText: 'pii reason \"${1:why this value is personal data}\"', documentation: 'A free-text concept note, not a lawful basis.' },\n { label: 'secret reason', insertText: 'secret reason \"${1:why this value is an operational secret}\"', documentation: 'Records why the secret marker applies.' },\n { label: 'secret scope', insertText: 'secret scope ${1|subject,namespace,global|}', documentation: 'Explicit encryption scope; omitted scope keeps Chronicle’s Subject default.' },\n { label: 'pii special', insertText: 'pii special ${1|racialOrEthnicOrigin,politicalOpinions,religiousOrPhilosophicalBeliefs,tradeUnionMembership,genetic,biometric,health,sexLifeOrSexualOrientation|}', documentation: 'GDPR Art. 9(1) special category of personal data.' },\n { label: 'pii criminal', insertText: 'pii criminal', documentation: 'Personal data relating to criminal convictions and offenses (GDPR Art. 10).' },\n { label: 'validate', insertText: 'validate\\n ${1:not empty} message \"${2:message}\"', documentation: 'Validation rules that travel with the value everywhere it appears.' },\n];\n\nexport const typeItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'description', insertText: 'description \"${1:what this shape represents}\"', documentation: 'A human-readable description of the type.' },\n { label: 'property', insertText: '${1:property} ${2:Type}', documentation: 'A property of the type — a name and a type reference.' },\n];\n\nexport const sliceItems: CompletionEntry[] = [\n purposeReferenceItem,\n documentationItem,\n ...exampleDeclarationItems,\n { label: 'operation', insertText: 'operation ${1:Name}\\n uses ${2:System}\\n ${3:input} ${4:Type}', documentation: 'Reusable slice-owned operation intent; not admitted by any supported executable model (ESM) version yet.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'public event', insertText: 'public event ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares a public event: a contract this application publishes. Admitted by ESM v9; an outbound Translate slice produces it through a projection that targets it.' },\n { label: 'event from', insertText: 'event ${1:Name} from \"${2:origin}\"\\n ${3:property} ${4:Type}', documentation: 'An event with an opaque origin naming the application that owns it, not a path or declaration reference. It is a public event admitted by ESM v9; consume it with a capture over source events.' },\n { label: 'direction', insertText: 'direction ${1|inbound,outbound|}', documentation: 'Translate direction, inbound or outbound, admitted by ESM v9. No transport or delivery guarantee is implied.' },\n { label: 'event', insertText: 'event ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares an event type — an immutable, past-tense fact.' },\n { label: 'event generation', insertText: 'event ${1:Name} generation ${2:2}\\n ${3:property} ${4:Type}', documentation: 'Declares a complete numbered event generation; start at 1 and do not skip a number.' },\n { label: 'command', insertText: 'command ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares a command — an imperative intent that produces events.' },\n { label: 'query', insertText: 'query ${1:Name} => ${2:ReadModel}', documentation: 'Declares a read-side entry point mapping to a return type.' },\n { label: 'query observable', insertText: 'query ${1:Name} => observable ${2:ReadModel}', documentation: 'Declares a live read — the query keeps pushing as the read model changes, instead of answering once.' },\n { label: 'readmodel', insertText: 'readmodel ${1:Name}\\n ${2:property} ${3:Type}', documentation: 'Declares the shape of a read model — its properties — that a projection, reducer or query fills and returns.' },\n { label: 'reducer', insertText: 'reducer ${1:Name} => ${2:ReadModel}\\n on ${3:EventType}\\n ```csharp\\n ${4}\\n ```', documentation: 'Declares a reducer building a read model from events with imperative code, for what a projection cannot express.' },\n { label: 'specification', insertText: 'specification ${1:Name}\\n given ${2:EventType}\\n when ${3:Command}\\n then ${4:EventType}', documentation: 'Given/when/then acceptance criteria for the slice.' },\n { label: 'projection', insertText: 'projection ${1:Name} => ${2:ReadModel}\\n from ${3:EventType}', documentation: 'Declares how events project into a read model (PDL).' },\n { label: 'capture', insertText: 'capture ${1:Name}\\n source ${2:api}', documentation: 'Declares a change data capture converting external data into events (CDL).' },\n { label: 'reaction', insertText: 'reaction ${1:Name}\\n when ${2:Trigger}', documentation: 'Declares behavior that runs when something happens.' },\n { label: 'screen', insertText: 'screen ${1:Name}\\n data ${2:ReadModel} via query ${3:QueryName}', documentation: 'Declares a UI screen.' },\n { label: 'constraint', insertText: 'constraint ${1:Name}\\n unique ${2:property} on ${3:EventType}', documentation: 'Declares a server-side rule enforced before events are committed.' },\n];\n\nexport const commandItems: CompletionEntry[] = [\n documentationItem,\n { label: 'property', insertText: '${1:property} ${2:Type}', documentation: 'An input of the command — a name and a type reference.' },\n { label: 'produces operation', insertText: 'produces operation ${1:Name}\\n uses ${2:System}\\n ${3:input} ${4:Type} = ${5:source}', documentation: 'Declares ordered operation intent; not admitted by any supported executable model (ESM) version yet (PLAY0268).' },\n { label: 'returns property', insertText: 'returns @${1:property}', documentation: 'Scalar response from a direct command property, only on acceptance. Executable as ESM v7.' },\n { label: 'returns block', insertText: 'returns\\n ${1:field} = ${2:property}', documentation: 'Unnamed record response with inferred or explicit field types, only on acceptance. Executable as ESM v7.' },\n { label: 'produces event', insertText: 'produces event ${1:Name}\\n ${2:property} ${3:Type} = ${4:source}', documentation: 'Declares a slice-owned generation-1 event and maps its properties. An omitted for uses the command identifier.' },\n { label: 'identifier property', insertText: '${1:property} ${2:Type} identifier', documentation: 'Marks the property a runtime resolves the event source id from. At most one per command.' },\n { label: 'authorize', insertText: 'authorize ${1:PolicyName}', documentation: 'References the policies that must pass for the command to execute.' },\n { label: 'reads', insertText: 'reads ${1:View} by ${2:property}', documentation: 'Declares a view the command consults. Executable binding is not yet supported.' },\n { label: 'reads as', insertText: 'reads ${1:View} as ${2:alias} by ${3:property}', documentation: 'Names one instance of a view; every instance needs a unique alias when reading the same view more than once.' },\n { label: 'validate', insertText: 'validate\\n ${1:property} not empty message \"${2:message}\"', documentation: 'Declarative validation rules with messages.' },\n { label: 'validate csharp', insertText: `validate\\n ${fenced('csharp')}`, documentation: 'Imperative validation in C#, yielding the message of every rule the artifact breaks.' },\n { label: 'produces', insertText: 'produces ${1:EventType}\\n ${2:property} = ${3:source}', documentation: 'Declares the event the command emits, with property mappings.' },\n { label: 'produces when', insertText: 'produces when ${1:condition}\\n ${2:EventType}\\n ${3:property} = ${4:source}', documentation: 'Conditionally emits an event when the condition holds.' },\n { label: 'description', insertText: 'description \"${1:what the command asks for}\"', documentation: 'A human-readable description.' },\n { label: 'concurrency', insertText: 'concurrency\\n ${1|eventSource,sourceType,streamType,streamId,events|}', documentation: 'The scope of the concurrency check made when the command appends events.' },\n { label: 'handler', insertText: 'handler\\n ', documentation: 'Fully imperative command implementation — file reference or inline C#, instead of produces.' },\n];\n\nexport const eventItems: CompletionEntry[] = [\n { label: 'property', insertText: '${1:property} ${2:Type}', documentation: 'A property of the event — a name and a type reference.' },\n { label: 'description', insertText: 'description \"${1:what happened}\"', documentation: 'Authoring metadata, as one line or a text/markdown fence.' },\n { label: 'documentation', insertText: 'documentation\\n ```markdown\\n ${1:Details}\\n ```', documentation: 'Authoring-only Markdown documentation.' },\n { label: 'id', insertText: 'id \"${1:OldName}\"', documentation: 'Preserves a previous persisted event name after a rename. Leave absent for new events.' },\n { label: 'tag', insertText: 'tag ${1:audit}', documentation: 'An event-type tag stamped on every occurrence.' },\n];\n\nexport const inlineEventItems: CompletionEntry[] = [\n ...eventItems,\n { label: 'for', insertText: 'for ${1:identifier}', documentation: 'Explicitly names the command identifier used as the event source.' },\n { label: 'property mapping', insertText: '${1:property} ${2:Type} = ${3:source}', documentation: 'Declares and maps an event property on one line.' },\n];\n\nexport const producesItems: CompletionEntry[] = [\n { label: 'when', insertText: 'when ${1:condition}', documentation: 'Guards the produced event with a condition.' },\n];\n\nexport const implementationItems: CompletionEntry[] = [\n { label: 'hint', insertText: 'hint \"${1:implementation guidance}\"', documentation: 'Ordered nonblank guidance for a handler implementation. Not an execution guarantee.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Selects one existing model-relative attachment.' },\n ...['csharp', 'typescript', 'react', 'html', 'sql'].map(language => ({ label: language, insertText: fenced(language), documentation: 'Selects one inline payload. Handler execution remains unsupported.' })),\n];\n\nexport const handlerItems: CompletionEntry[] = [\n { label: 'implementation', insertText: 'implementation\\n hint \"${1:implementation guidance}\"', documentation: 'Handler-only implementation intent with optional file or tagged fence. With no payload it is pending.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Delegates the command implementation to an external C# file.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Inline C# returning the events to append.' },\n];\n\nexport const queryItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:what this query is trying to accomplish}\"', documentation: 'What the query is for, in prose — what a generator or reviewer works from.' },\n { label: 'by', insertText: 'by ${1:param} ${2:Type}', documentation: 'Declares the identifying parameter of the query.' },\n { label: 'by parts', insertText: 'by\\n ${1:part} ${2:Type}\\n ${3:part} ${4:Type}', documentation: 'Declares a composite lookup. Supply every key part for a single instance.' },\n { label: 'filter', insertText: 'filter ${1:param} ${2:Type} optional', documentation: 'Declares an optional filter parameter supplied by the caller.' },\n { label: 'filter from context', insertText: 'filter ${1:param} ${2:Type} from $context.${3|tenant,causedBy.subject,occurred|}', documentation: 'Declares a parameter filled from the query context instead of the caller.' },\n { label: 'authorize', insertText: 'authorize ${1:PolicyName}', documentation: 'References the policies that must pass for the query to execute.' },\n { label: 'performer', insertText: 'performer\\n ', documentation: 'The code that performs the query — a file reference or an inline csharp/sql block.' },\n];\n\nexport const performerItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Delegates the query implementation to an external file.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Inline C# returning the query result, with the QueryContext in scope as context.' },\n { label: 'sql', insertText: fenced('sql'), documentation: 'Inline SQL returning the query result.' },\n];\n\nexport const constraintItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:invariant intent}\"', documentation: 'Report-only description, distinct from the violation message.' },\n { label: 'unique', insertText: 'unique ${1:property} on ${2:EventType}', documentation: 'Enforces a unique property value across an event type.' },\n { label: 'unique event', insertText: 'unique event ${1:EventType}', documentation: 'Enforces that the event type occurs at most once per event source.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Delegates the constraint to a custom C# implementation.' },\n];\n\nexport const reactionItems: CompletionEntry[] = [\n documentationItem,\n { label: 'from', insertText: 'from ${1:Source.Stream}', documentation: 'Observe matching routed facts only, without filtering stream ids. ESM v10.' },\n { label: 'runs as system', insertText: 'runs as system', documentation: 'Authenticated system identity with no roles for returned commands. Admitted by released ESM v10; claims are unknown.' },\n { label: 'runs as system role', insertText: 'runs as system role \"${1:Role}\"', documentation: 'Exact system roles for every returned or invoked command, not imperative pipeline calls. Admitted by released ESM v10; claims are unknown.' },\n { label: 'description', insertText: 'description \"${1:what this reaction does}\"', documentation: 'What the reaction does — a complete statement of intent before any code exists.' },\n { label: 'when', insertText: 'when ${1:Trigger}', documentation: 'An event, a declared trigger or a host signal that sets the reaction off. A trigger needs no body.' },\n { label: 'every', insertText: 'every ${1:15} ${2|seconds,minutes,hours,days|}', documentation: 'Runs the reaction on an interval.' },\n { label: 'at', insertText: 'at ${1:08:00}', documentation: 'Runs the reaction at a time of day — every day unless narrowed with `on <Weekday>` or `on day <n>`.' },\n { label: 'where', insertText: 'where ${1:condition}', documentation: 'Narrows which occurrences actually run the reaction.' },\n];\n\nexport const reactionTriggerItems: CompletionEntry[] = [\n { label: 'reads', insertText: 'reads ${1:View}', documentation: 'The view this trigger consults. Optionally use `as <alias> by <trigger value>`; clock triggers take no values and cannot use `by`.' },\n { label: 'description', insertText: 'description \"${1:what this reaction does}\"', documentation: 'What this particular reaction does — enough on its own, with no file to point at.' },\n { label: 'produces', insertText: 'produces ${1:EventType}', documentation: 'An event the reaction appends.' },\n { label: 'invokes', insertText: 'invokes ${1:Command}', documentation: 'A command the reaction hands on. A command is asked for, not produced — it may still be rejected.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Delegates the reaction to an external C# file.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Inline C# returning event side effects.' },\n];\n\nconst refusalAvailability = 'Executable from ESM v19. The first matching branch handles the refusal and stops remaining invocations of this trigger; other reactions and cascades continue.';\n\nexport const invocationItems: CompletionEntry[] = [\n { label: 'on refused', insertText: 'on refused\\n acknowledge', documentation: `Handles validation and constraint refusals, not authorization. ${refusalAvailability}` },\n { label: 'on refused by validation', insertText: 'on refused by validation\\n acknowledge', documentation: `Handles error-severity property, concept and require refusals. ${refusalAvailability}` },\n { label: 'on refused by constraint', insertText: 'on refused by constraint ${1:Name}\\n acknowledge', documentation: `Handles a named constraint refusal; omit the name for any constraint. ${refusalAvailability}` },\n { label: 'on refused by authorization', insertText: 'on refused by authorization\\n acknowledge', documentation: `Explicitly handles unauthorized results, never Unsupported. ${refusalAvailability}` },\n];\n\nexport const refusalItems: CompletionEntry[] = [\n { label: 'acknowledge', insertText: 'acknowledge', documentation: `Acknowledges alone, without productions. ${refusalAvailability}` },\n { label: 'produces', insertText: 'produces ${1:Event}\\n ${2:reason} = \\\\$refusal.reason', documentation: `Records the refusal with ordinary event productions. ${refusalAvailability}` },\n];\n\nexport const triggerItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'description', insertText: 'description \"${1:when this occurs}\"', documentation: 'What makes an occurrence of this trigger happen.' },\n { label: 'value', insertText: '${1:name} ${2:Type}', documentation: 'A value an occurrence hands the reaction. The type is optional.' },\n];\n\nexport const specificationItems: CompletionEntry[] = [\n { label: 'parameter', insertText: 'parameter ${1:name} ${2:Type}', documentation: 'One typed value, supplied exactly once by every case.' },\n { label: 'case', insertText: 'case ${1:Name}\\n ${2:parameter} = ${3:value}', documentation: 'One named complete set of concrete parameter values.' },\n { label: 'given caller as', insertText: 'given caller as ${1:Persona}', documentation: 'An authenticated deterministic witness of a top-level persona; no body. Use explicit callers for negation, ownership claims and implementations.' },\n { label: 'description', insertText: 'description \"${1:rule or case witnessed}\"', documentation: 'Authoring-only description of what this scenario demonstrates.' },\n { label: 'when redelivered', insertText: 'when redelivered ${1:Event} to ${2:Reaction}\\n for ${3:value}', documentation: 'Selects exactly one given event occurrence and delivers it again to one named event-trigger reaction; the event is not appended again. Executable from ESM v17.' },\n { label: 'given operation fails', insertText: 'given operation ${1:Name} fails', documentation: 'Failure fixture leaf; not admitted by any supported executable model (ESM) version yet (PLAY0268).' },\n { label: 'then operation', insertText: 'then operation ${1:Name}\\n ${2:input} = ${3:value}', documentation: 'Partial requested-operation assertion; not admitted by any supported executable model (ESM) version yet (PLAY0268).' },\n { label: 'then compensated', insertText: 'then compensated ${1:Name}', documentation: 'Compensation assertion leaf; not admitted by any supported executable model (ESM) version yet (PLAY0268).' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the repository relative file this declaration is realized by, so the document can be navigated back to the code.' },\n { label: 'given', insertText: 'given ${1:EventType}\\n ${2:property} = ${3:value}', documentation: 'Establishes prior state by replaying an event before the command runs.' },\n { label: 'given readmodel', insertText: 'given readmodel ${1:ReadModelType}\\n ${2:property} = ${3:value}', documentation: 'Establishes prior read model state directly.' },\n { label: 'when', insertText: 'when ${1:CommandType}\\n ${2:property} = ${3:value}', documentation: 'The command being exercised.' },\n { label: 'then', insertText: 'then ${1:EventType}\\n ${2:property} = ${3:value}', documentation: 'An event expected to be produced by the command.' },\n { label: 'then readmodel', insertText: 'then readmodel ${1:ReadModelType}\\n ${2:property} = ${3:value}', documentation: 'The read model state expected after the command.' },\n { label: 'then no readmodel', insertText: 'then no readmodel ${1:ReadModelType} for ${2:key}', documentation: 'Asserts that precisely one keyed read-model instance does not exist; another key may still be present.' },\n { label: 'then query', insertText: 'then query ${1:QueryName}\\n arguments\\n ${2:argument} = ${3:value}\\n result\\n ${4:property} = ${5:value}', documentation: 'The ordered query results expected for explicit arguments. Remove the result block to assert an empty result.' },\n { label: 'then error', insertText: 'then error', documentation: 'A rejection, for a reason this specification does not name.' },\n { label: 'then error \"...\"', insertText: 'then error \"${1:reason}\"', documentation: 'A rejection, for the named reason.' },\n { label: 'given clock', insertText: 'given clock \"${1:2026-10-05T08:00:00Z}\"', documentation: 'The instant the scenario happens at - the occurrence time of everything it does. At most once.' },\n { label: 'given capture', insertText: 'given capture ${1:Capture}\\n ${2:field} = ${3:value}', documentation: 'A record the capture\\'s source held before.' },\n { label: 'when clock', insertText: 'when clock \"${1:2026-10-05T09:00:00Z}\"', documentation: 'The clock reaches an instant, as the action.' },\n { label: 'when trigger', insertText: 'when trigger ${1:Trigger}\\n ${2:value} = ${3:value}', documentation: 'An application trigger fires, as the action.' },\n { label: 'when capture', insertText: 'when capture ${1:Capture}\\n ${2:field} = ${3:value}', documentation: 'The record a capture\\'s source holds now, as the action.' },\n { label: 'when query', insertText: 'when query ${1:Query}\\n ${2:argument} = ${3:value}', documentation: 'Performs a query, as the action.' },\n { label: 'then result', insertText: 'then result\\n ${1:property} = ${2:value}', documentation: 'One result the query performed by `when query` returns, in order.' },\n { label: 'then no result', insertText: 'then no result', documentation: 'The query performed by `when query` returns nothing.' },\n { label: 'then no events', insertText: 'then no events', documentation: 'Asserts the action appended no events, including after when append, where no reaction appended anything. Executable from ESM v17; cannot accompany event, error or denial expectations.' },\n];\n\n// What follows a 'given', 'when' or 'then' already typed in a specification.\nexport const specificationStepItems: Record<'given' | 'when' | 'then', CompletionEntry[]> = {\n given: [\n { label: 'operation', insertText: 'operation ${1:Name} fails', documentation: 'Syntax-only failure fixture; no children.' },\n { label: 'clock', insertText: 'clock \"${1:2026-10-05T08:00:00Z}\"', documentation: 'The instant the scenario happens at - the occurrence time of everything it does.' },\n { label: 'capture', insertText: 'capture ${1:Capture}\\n ${2:field} = ${3:value}', documentation: 'A record the capture\\'s source held before. Repeat it for several records.' },\n { label: 'readmodel', insertText: 'readmodel ${1:ReadModelType}\\n ${2:property} = ${3:value}', documentation: 'Establishes prior read model state directly.' },\n { label: 'caller', insertText: 'caller\\n ${1:authenticated}', documentation: 'The identity the scenario runs as.' },\n ],\n when: [\n { label: 'redelivered', insertText: 'redelivered ${1:Event} to ${2:Reaction}\\n for ${3:value}', documentation: 'Selects exactly one given event occurrence and delivers it again to one named reaction; the event is not appended again. Executable from ESM v17.' },\n { label: 'clock', insertText: 'clock \"${1:2026-10-05T09:00:00Z}\"', documentation: 'The clock reaches an instant - what a scheduled reaction responds to.' },\n { label: 'trigger', insertText: 'trigger ${1:Trigger}\\n ${2:value} = ${3:value}', documentation: 'An application trigger fires, with the values it carries.' },\n { label: 'capture', insertText: 'capture ${1:Capture}\\n ${2:field} = ${3:value}', documentation: 'The record a capture\\'s source holds now.' },\n { label: 'query', insertText: 'query ${1:Query}\\n ${2:argument} = ${3:value}', documentation: 'Performs a query; assert what it returns with `then result` or `then no result`.' },\n { label: 'append', insertText: 'append ${1:EventType}\\n ${2:property} = ${3:value}', documentation: 'An event occurs, instead of a command being executed.' },\n ],\n then: [\n { label: 'operation', insertText: 'operation ${1:Name}\\n ${2:input} = ${3:value}', documentation: 'Syntax-only partial operation assertion; not admitted by any supported executable model (ESM) version yet.' },\n { label: 'compensated', insertText: 'compensated ${1:Name}', documentation: 'Syntax-only compensation assertion; no children.' },\n { label: 'returns value', insertText: 'returns ${1:value}', documentation: 'Scalar response expectation, compared by semantic value equality. Executable as ESM v7.' },\n { label: 'returns block', insertText: 'returns\\n ${1:field} = ${2:value}', documentation: 'Nonempty subset of response fields asserted by name. Executable as ESM v7.' },\n { label: 'result', insertText: 'result\\n ${1:property} = ${2:value}', documentation: 'One result the query performed by `when query` returns, in order.' },\n { label: 'result exactly', insertText: 'result exactly\\n ${1:property} = ${2:value}', documentation: 'One result, with every property asserted.' },\n { label: 'no result', insertText: 'no result', documentation: 'The query performed by `when query` returns nothing.' },\n { label: 'no events', insertText: 'no events', documentation: 'Asserts the action appended no events, including after when append. Executable from ESM v17.' },\n { label: 'readmodel', insertText: 'readmodel ${1:ReadModelType}\\n ${2:property} = ${3:value}', documentation: 'The read model state expected afterwards.' },\n { label: 'error', insertText: 'error \"${1:reason}\"', documentation: 'A rejection, for the named reason.' },\n { label: 'denied', insertText: 'denied', documentation: 'The action is denied to the caller.' },\n ],\n};\n\nexport const namedRuleImplementationItems: CompletionEntry[] = [\n { label: 'hint', insertText: 'hint \"${1:predicate guidance}\"', documentation: 'Ordered nonblank authoring guidance. Does not execute or confirm the predicate.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'The sole named-rule predicate attachment.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Opaque named-rule predicate returning a bool. Requires an admitting target.' },\n];\n\nexport const commandRuleItems: CompletionEntry[] = [\n { label: 'implementation', insertText: 'implementation\\n hint \"${1:predicate guidance}\"', documentation: 'Command named-rule intent with optional file or tagged fence. Pending intent cannot bind.' },\n ...namedRuleImplementationItems.filter(item => item.label !== 'hint'),\n];\n\nexport const ruleItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Gives the named predicate its implementation in an external C# file.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Gives the named predicate its implementation as inline C# returning a bool.' },\n];\n\nexport const policyItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:authorization intent}\"', documentation: 'Report-only description; does not supply an implementation.' },\n { label: 'require authenticated', insertText: 'require authenticated', documentation: 'Requires an authenticated caller.' },\n { label: 'require role', insertText: 'require role \"${1:role}\"', documentation: 'Requires the caller to have a role.' },\n { label: 'require not role', insertText: 'require not role \"${1:role}\"', documentation: 'Excludes callers with a role. Add authenticated to require a signed-in caller.' },\n { label: 'require not claim', insertText: 'require not claim \"${1:claim}\" matches ${2:subject}', documentation: 'Requires that no claim value matches the subject or a value.' },\n { label: 'require claim', insertText: 'require claim \"${1:claim}\" matches ${2:subject}', documentation: 'Requires a claim to match the subject or a value.' },\n { label: 'csharp', insertText: fenced('csharp'), documentation: 'Fully custom policy logic in C#, returning a bool.' },\n];\n\nexport const validateItems: CompletionEntry[] = [\n { label: 'not empty', insertText: '${1:property} not empty message \"${2:message}\"', documentation: 'Text needs a non-whitespace character; null, empty and whitespace-only text fail. Uses Unicode White_Space (.NET char.IsWhiteSpace), including U+0085 but not U+FEFF, not JavaScript trim(). Collections need at least one element. Applies to concept and command rules in every ESM version; no trimming. Identity text is unchanged.' },\n { label: 'max', insertText: '${1:property} max ${2:500} message \"${3:message}\"', documentation: 'Maximum length or value.' },\n { label: 'min', insertText: '${1:property} min ${2:1} message \"${3:message}\"', documentation: 'Minimum length or value.' },\n { label: 'matches', insertText: '${1:property} matches \"${2:pattern}\" message \"${3:message}\"', documentation: 'The property must match a regular expression.' },\n { label: 'rule', insertText: '${1:property} rule ${2:PredicateName} message \"${3:message}\"', documentation: 'Names a predicate — optionally followed by an indented `file` reference or inline `csharp` block giving it a body; bare, it just states that a constraint exists.' },\n { label: '==', insertText: '${1:property} == ${2:value} message \"${3:message}\"', documentation: 'The property must equal the value.' },\n { label: '!=', insertText: '${1:property} != ${2:value} message \"${3:message}\"', documentation: 'The property must not equal the value.' },\n { label: 'length ==', insertText: '${1:property} length == ${2:3} message \"${3:message}\"', documentation: 'The property must have an exact length.' },\n { label: 'all >', insertText: '${1:collection}.${2:property} all > ${3:0} message \"${4:message}\"', documentation: 'Every element of a collection must satisfy the comparison.' },\n];\n\nexport const screenItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:screen intent}\"', documentation: 'Report-only description, not a localizable screen title.' },\n { label: 'data', insertText: 'data ${1:ReadModel} via query ${2:QueryName}', documentation: 'Binds a read model to the screen through a query.' },\n { label: 'action', insertText: 'action ${1:CommandName}', documentation: 'Makes a command available as an action on the screen.' },\n { label: 'action \"…\"', insertText: 'action \"${1:Label}\"\\n when item.${2:status} == \"${3:open}\" execute ${4:CommandName}\\n otherwise hidden', documentation: 'One labeled button selecting the first matching command; hidden without a subject or match.' },\n { label: 'layout', insertText: 'layout ${1:LayoutName}', documentation: 'Uses a layout template and fills its slots.' },\n { label: 'section', insertText: 'section ${1:name}', documentation: 'A named structural section of the screen.' },\n { label: 'table', insertText: 'table ${1:name}\\n column ${2:property} label \"${3:text}\"', documentation: 'A table widget over a read model or collection.' },\n { label: 'summary', insertText: 'summary ${1:ReadModel}\\n field ${2:property} label \"${3:text}\"', documentation: 'A summary widget showing labeled fields.' },\n { label: 'title', insertText: 'title \"${1:text}\"', documentation: 'The title of the screen or section.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Full external implementation — Stage uses the referenced file.' },\n { label: 'react', insertText: fenced('react'), documentation: 'Inline React/TSX component receiving the data contract as Props.' },\n { label: 'typescript', insertText: fenced('typescript'), documentation: 'Inline plain TypeScript.' },\n { label: 'html', insertText: fenced('html'), documentation: 'Inline static HTML.' },\n];\n\nexport const actionItems: CompletionEntry[] = [\n { label: 'navigate to', insertText: 'navigate to ${1:ScreenName}', documentation: 'Navigates to a screen after the action completes.' },\n { label: 'label', insertText: 'label \"${1:text}\"', documentation: 'The display label of the action.' },\n];\n\nexport const guardedActionItems: CompletionEntry[] = [\n { label: 'when … execute', insertText: 'when item.${1:status} == \"${2:open}\" execute ${3:CommandName}', documentation: 'First matching alternative selects the command; authorization never falls through.' },\n { label: 'otherwise hidden', insertText: 'otherwise hidden', documentation: 'Hides the action when no alternative matches; also the default.' },\n { label: 'otherwise execute', insertText: 'otherwise execute ${1:CommandName}', documentation: 'Selects a fallback command when no alternative matches and a subject exists.' },\n ...actionItems.filter(item => item.label !== 'label'),\n];\n\nexport const interactionActionItems: CompletionEntry[] = [\n { label: 'execute', insertText: 'execute ${1:CommandName}', documentation: 'Executes a command; denial never selects another alternative.' },\n { label: 'navigate to', insertText: 'navigate to ${1:ScreenName}', documentation: 'Navigates to the named screen.' },\n { label: 'open dialog', insertText: 'open dialog ${1:DialogTemplate}', documentation: 'Opens a dialog.' },\n { label: 'notify', insertText: 'notify info \"${1:Message}\"', documentation: 'Displays a message.' },\n { label: 'confirm', insertText: 'confirm \"${1:Message}\"\\n on success\\n execute ${2:CommandName}', documentation: 'Asks before continuing.' },\n { label: 'refresh', insertText: 'refresh ${1:QueryName}', documentation: 'Refreshes a query-backed element.' },\n];\n\nexport const interactionChoiceItems: CompletionEntry[] = [\n { label: 'when …', insertText: 'when item.${1:status} == \"${2:open}\"\\n execute ${3:CommandName}', documentation: 'Selects a whole action list once against the rendered subject at gesture time.' },\n { label: 'otherwise', insertText: 'otherwise\\n notify info \"${1:Message}\"', documentation: 'Final fallback list; without a subject nothing runs, including fallback.' },\n ...interactionActionItems,\n];\n\nexport const actionArgumentItems: CompletionEntry[] = [\n { label: 'with … from', insertText: 'with ${1:property} from item.${2:property}', documentation: 'Explicit input binding for this command alternative, before same-name item fields or its form.' },\n];\n\nexport const tableItems: CompletionEntry[] = [\n { label: 'column', insertText: 'column ${1:property} label \"${2:text}\"', documentation: 'A column bound to a property.' },\n { label: 'on row-click', insertText: 'on row-click navigate to ${1:ScreenName} by ${2:param}', documentation: 'Navigates when a row is clicked.' },\n];\n\nexport const contextVariableItems: CompletionEntry[] = [\n ...identityProperties.map(property => ({\n label: `$identity.${property}${property === 'claims' ? '.' : ''}`,\n insertText: `$identity.${property}${property === 'claims' ? '.${1:name}' : ''}`,\n documentation: `The caller's ${property}, equivalent to $context.identity.${property}.`,\n })),\n { label: '$context.occurred', insertText: '$context.occurred', documentation: 'When the command or query was received.' },\n { label: '$context.tenant', insertText: '$context.tenant', documentation: 'The tenant the command or query is executing for.' },\n { label: '$context.command.', insertText: '$context.command.${1:property}', documentation: 'A property of the command being handled.' },\n { label: '$context.arguments.', insertText: '$context.arguments.${1:name}', documentation: 'An argument of the query being performed.' },\n { label: '$context.causedBy.subject', insertText: '$context.causedBy.subject', documentation: 'Subject of the identity that caused the command or query.' },\n { label: '$context.causedBy.name', insertText: '$context.causedBy.name', documentation: 'Display name of the identity that caused the command or query.' },\n { label: '$context.causedBy.userName', insertText: '$context.causedBy.userName', documentation: 'User name of the identity that caused the command or query.' },\n { label: '$context.causation.type', insertText: '$context.causation.type', documentation: 'What caused this — a command, a reactor, a schedule.' },\n { label: '$context.identity.id', insertText: '$context.identity.id', documentation: 'The identifier of the caller from the auth token.' },\n { label: '$context.identity.name', insertText: '$context.identity.name', documentation: 'The display name of the caller.' },\n { label: '$context.identity.userName', insertText: '$context.identity.userName', documentation: 'The user name of the caller.' },\n { label: '$context.identity.isAuthenticated', insertText: '$context.identity.isAuthenticated', documentation: 'Whether the caller is authenticated.' },\n { label: '$context.identity.roles', insertText: '$context.identity.roles', documentation: 'The roles the caller holds.' },\n { label: '$context.identity.claims.', insertText: '$context.identity.claims.${1:name}', documentation: 'The value of a claim the caller carries.' },\n { label: '$env.', insertText: '$env.${1:VAR_NAME}', documentation: 'An environment variable.' },\n // Every $eventContext path the event-context catalog lists, for projections - the underlying value of a concept\n // is left out, it reads the same as the member it belongs to.\n ...eventContextPaths\n .filter((path) => path.name !== 'value')\n .map((path) => ({ label: `$eventContext.${path.path}`, insertText: `$eventContext.${path.path}`, documentation: `${path.description} (PDL)` })),\n];\n\nexport { moduleScopeItems as moduleItems, featureScopeItems as featureItems } from './scope-items';\n\n// What a slice of each type can hold. A slice of an unknown type keeps everything.\nconst sliceMembers: Record<string, readonly string[]> = {\n StateChange: ['operation', 'file', 'description', 'event', 'event generation', 'command', 'constraint', 'screen', 'specification'],\n StateView: ['file', 'description', 'readmodel', 'query', 'query observable', 'projection', 'reducer', 'screen', 'specification', 'event', 'event generation'],\n Automation: ['operation', 'file', 'description', 'reaction', 'reducer', 'command', 'event', 'event generation', 'readmodel', 'specification'],\n Translate: ['file', 'description', 'capture', 'event', 'event generation', 'specification'],\n};\n\nexport function sliceItemsFor(sliceType: string | undefined): CompletionEntry[] {\n const members = sliceType ? sliceMembers[sliceType] : undefined;\n return members ? sliceItems.filter(item => item.label === 'purpose' || item.label === 'example' || item.label === 'documentation' || item.label === 'public event' || item.label === 'event from' || (item.label === 'direction' && sliceType === 'Translate') || members.includes(item.label)) : sliceItems;\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import"./_virtual/_virtual/_rolldown/runtime.js";import{enclosingChain as e,enclosingHeaders as t,fenceMap as n,indentOf as r,nearestEnclosingLine as i,withoutComment as a}from"./document-context.js";import{purposeItems as o}from"./purpose-items.js";import{authenticationItems as s,behaviorItems as c,contributeItems as l,featureScopeItems as u,formItems as d,layoutItems as f,moduleScopeItems as p,outcomeItems as m,personaItems as h,readModelItems as g,reducerItems as _,seedItems as v,templateItems as y,themeItems as b,uiProfileItems as x}from"./scope-items.js";import{actionArgumentItems as S,actionItems as C,commandItems as w,commandRuleItems as ee,conceptItems as T,constraintItems as E,eventItems as D,guardedActionItems as O,handlerItems as k,identityItems as A,implementationItems as j,inlineEventItems as M,interactionActionItems as N,interactionChoiceItems as te,invocationItems as P,namedRuleImplementationItems as F,operationImplementationItems as I,operationItems as L,operationPhaseItems as R,optionalTypeItems as z,performerItems as B,policyItems as V,producesItems as H,queryItems as U,reactionItems as W,reactionTriggerItems as G,refusalItems as K,ruleItems as q,screenItems as J,sliceItemsFor as Y,specificationItems as X,specificationStepItems as Z,tableItems as ne,topLevelItems as re,triggerItems as ie,typeItems as ae,validateItems as oe}from"./completion-items.js";import{scanDocument as Q}from"./symbols.js";import{responseCompletions as se}from"./response-completions.js";import{exampleCompletions as ce}from"./example-authoring.js";import{refusalContext as le}from"./refusal-context.js";import{generationCompletions as ue}from"./generation-completions.js";import{namedRuleContext as de}from"./named-rule-context.js";import{continuationResponseCompletions as fe}from"./continuation-responses.js";import{dependencyTargetCompletions as pe}from"./dependency-completions.js";import{structureCompletion as me}from"./structure-completions.js";import{getSubLanguage as he}from"./sub-language-registry.js";import{readModelKeyCompletions as ge}from"./read-model-key-completions.js";const $={label:`stream`,insertText:"stream ${1:Source.Stream}",documentation:`Replace the whole command route for this event production. ESM v10.`},_e=/(?:^|\s)rule\s+[A-Za-z_]\w*(?:\s+severity\s+(?:information|warning|error))?(?:\s+message\s+.*)?$/,declaredIn=(e,t)=>e.some(e=>RegExp(`^${t}\\b`).test(e));function topLevelEntries(e){return re.filter(t=>!(t.label===`domain`&&declaredIn(e,`domain`))&&!(t.label===`authentication`&&declaredIn(e,`authentication`))&&!(t.label===`identity`&&declaredIn(e,`identity`)))}const isTemplate=e=>/^(?:screen|dialog)\s+template\b/.test(e??``);function expansionEntry(e,t){let n=e.split(`
2
2
  `).map((e,n)=>n===0?e:e.slice(Math.min(t,r(e)))).join(`
3
3
  `);return{label:e.split(`
4
- `)[0].trim(),insertText:n.replace(/[$}\\]/g,`\\$&`),documentation:`Expands the whole block from what the command and its events declare.`}}function completionEntriesFor(e,t={headers:[],document:[]}){let n=e[0];if(n===void 0||n===`domain`)return topLevelEntries(t.document);let r=he(n);if(r)return r.completions??[];let i=t.headers[0];switch(n){case`purpose`:return o;case`module`:return p;case`feature`:return u;case`slice`:return Y(i?.split(/\s+/)[1]);case`concept`:return/:\s*Enum\b/.test(i??``)?[...T,{label:`enum member (numbered)`,insertText:"${1:value} = ${2:0}",documentation:`Every member must declare a unique int32 number. Keep published numbers unchanged; specifications name members, not numbers.`}]:T;case`type`:return ae;case`command`:return w;case`public`:case`event`:return D;case`readmodel`:return g;case`reducer`:return _;case`form`:return d;case`contribute`:return l;case`behavior`:return c;case`persona`:return h;case`identity`:return A;case`authentication`:return s;case`seed`:return v;case`theme`:return b;case`ui`:return x;case`on`:case`success`:case`failure`:case`confirm`:return m;case`layout`:return f;case`system`:return L.filter(e=>e.label===`description`);case`operation`:return L;case`execute`:case`compensate`:return R;case`produces`:return e.includes(`command`)?[...H,$]:H;case`handler`:return k;case`implementation`:return e[1]===`handler`?j:[`execute`,`compensate`].includes(e[1])?I:[];case`reads`:return[{label:`by parts`,insertText:"by\n ${1:part} = ${2:source}\n ${3:part} = ${4:source}",documentation:`Supply every composite read-model key part by name.`}];case`query`:return U;case`performer`:return B;case`constraint`:return E;case`reaction`:return W;case`invokes`:return e.includes(`reaction`)?P:[];case`trigger`:return ie;case`when`:case`every`:case`at`:return e.includes(`reaction`)?G:[];case`specification`:return X;case`policy`:return V;case`validate`:return oe;case`action`:return C;case`table`:case`summary`:return ne;case`screen`:return isTemplate(i)?y:J;case`dialog`:return y;default:return isTemplate(t.headers.find(e=>isTemplate(e)))?y:e.includes(`screen`)||n===`section`?J:e.includes(`produces`)?e.includes(`command`)?[...H,$]:H:[]}}function planCompletions(o,s,c,l=Q(o)){let u=n(o);if(u[s]||a(c).length<c.length)return{kind:`none`};if(/^\s*concept\s+[\p{L}\p{Mn}\p{Nd}\p{Pc}]+\s*:\s*\w+\s+(?:(?:pii|personal|secret)\s+)*\w*$/u.test(c))return{kind:`entries`,entries:[`pii`,`secret`].filter(e=>!RegExp(`\\b${e}\\b`).test(c)).map(e=>({label:e,insertText:e,documentation:e===`pii`?`personal data (GDPR Art. 4(1)); renders Chronicle [PII]`:`Operational secret; renders [Encrypted] + [NotAudited].`}))};let d=e(o,u,s,r(c))[0]===`concept`,f=d?ue(o,s,c):null;if(f!==null)return{kind:`entries`,entries:f};if(d&&/^\s*(?:secret|sensitive|@sensitive)\s+scope\s+\w*$/.test(c))return{kind:`entries`,entries:[`subject`,`namespace`,`global`].map(e=>({label:e,insertText:e,documentation:`Explicit secret encryption scope.`}))};if(d&&/^\s*(?:pii|personal|@pii)\s+special\s+\w*$/.test(c))return{kind:`entries`,entries:[`racialOrEthnicOrigin`,`politicalOpinions`,`religiousOrPhilosophicalBeliefs`,`tradeUnionMembership`,`genetic`,`biometric`,`health`,`sexLifeOrSexualOrientation`].map(e=>({label:e,insertText:e,documentation:`GDPR Art. 9(1) special category.`}))};let p=fe(o,s,c,l);if(p!==null)return{kind:`entries`,entries:p};let m=ce(o,s,c)??se(o,s,c,Q(o));if(m!==null)return{kind:`entries`,entries:m};let h=ge(o,s,c,l);if(h!==null)return{kind:`entries`,entries:h};let g=pe(o,s,c,l);if(g!==null)return{kind:`entries`,entries:g};let _=c.match(/^\s*import\s+"([^"]*)$/);if(_)return{kind:`playFiles`,replaceLength:_[1].length};if(/["/]$/.test(c))return{kind:`none`};let v=le(o,s,r(o[s]??c));if(/\$refusal\.\w*$/.test(c))return{kind:`entries`,entries:v===void 0?[]:[`reason`,`message`,.../^on\s+refused\s+by\s+constraint(?:\s|$)/.test(v)?[`constraint`]:[]].map(e=>({label:e,insertText:e,documentation:`String refusal value; syntax-only, not yet executable (PLAY0268).`}))};let y=c.match(/\$[\w.]*$/);if(y)return{kind:`contextVariables`,replaceLength:y[0].length};let b=o[s]??``,x=c.trim().length===0?c.length:r(b),C=e(o,u,s,x);if(C.includes(`screen`)){let e=x,t=!1;for(let n=s-1;n>=0;n--){if(u[n])continue;let i=a(o[n]);if(!(i.trim().length===0||r(i)>=e)){if(e=r(i),/^\s*action\s+(?:"|\$strings\.)/.test(i)){t=!0;break}if(/^\s*screen\b/.test(i))break}}if(t){if(/^\s*(?:when\b.*|otherwise)\s+execute\s+[\w.]*$/.test(c))return{kind:`commands`};if(C[0]===`action`)return{kind:`entries`,entries:O};if([`when`,`otherwise`].includes(C[0])){let e=i(o,u,s,x)??``;return{kind:`entries`,entries:/\bexecute\s+[\w.]+$/.test(e)?S:[]}}}}if([`on`,`when`,`otherwise`].includes(C[0])){let e=x;for(let t=s-1;t>=0;t--){if(u[t])continue;let n=a(o[t]);if(!(n.trim().length===0||r(n)>=e)){if(e=r(n),/^\s*on\s+(?:click|double click|select)\s*$/.test(n))return{kind:`entries`,entries:C[0]===`on`?te:N};if(/^\s*(?:screen|behavior|specification|reaction)\b/.test(n))break}}}if(C[0]===`on`&&v!==void 0)return{kind:`entries`,entries:K};let w=de(o,s,x);if(w===`implementation`)return{kind:`entries`,entries:F};if(w===`rule`)return{kind:`entries`,entries:ee};let T=[`public`,`event`,`command`,`type`,`readmodel`,`trigger`,`when`,`every`,`at`].includes(C[0])||C[0]===`produces`&&/^produces\s+event\b/.test(i(o,u,s,x)??``),E=c.trimStart().split(/\s+/)[0],D=C[0]===`command`&&[`reads`,`authorize`,`produces`].includes(E)||C[0]===`event`&&E===`tag`||[`trigger`,`when`,`every`,`at`].includes(C[0])&&[`description`,`file`,`reads`,`produces`,`invokes`].includes(E),optionalPrefix=e=>e!==null&&`optional`.startsWith(e[1]),k=T&&!D&&optionalPrefix(c.match(/^\s*@?[a-z_]\w*\s+[\w.]+(?:\[\])?\s+(\w*)$/)),A=C[0]===`query`&&optionalPrefix(c.match(/^\s*(?:by|filter)\s+[a-z_]\w*\s+[\w.]+(?:\[\])?\s+(\w*)$/))||optionalPrefix(c.match(/^\s*query\s+[A-Za-z_]\w*\s*=>\s*(?:observable\s+)?[\w.]+(?:\[\])?\s+(\w*)$/)),j=(C[0]===`event`||C[0]===`produces`&&/^produces\s+event\b/.test(i(o,u,s,x)??``))&&!D?c.match(/^\s*@?[a-z_]\w*\s+([\w.]+)\s+(\w*)$/):null,P=l.concepts.find(e=>e.name===j?.[1]),I=P?.primitive??j?.[1],R=(I===`String`||I===`Uuid`||I===`Int`&&P!==void 0)&&!P?.attributes.some(e=>[`pii`,`personal`,`secret`,`sensitive`].includes(e.replace(/^@/,``))),B=j!==null&&R&&`subject`.startsWith(j[2]),V=C[0]===`readmodel`?c.match(/^\s*@?[a-z_]\w*\s+[\w.]+\s+(\w*)$/):null,H=[...V&&`key`.startsWith(V[1])?[{label:`key`,insertText:`key`,documentation:`Declares a required read-model key part. Explicit keys replace inference. Composite keys are authoring-only (#599).`}]:[],...(k||A)&&!/=>\s*observable\s+$/.test(c)?z:[],...B?[{label:`subject`,insertText:`subject`,documentation:`One required scalar event data-subject identity; not pii or secret. Report-only lineage metadata (PLAY0270), no ESM or provider output yet.`}]:[]];if(H.length>0)return{kind:`entries`,entries:H};if(/\bauthorize\s+[\w\s]*$/.test(c)||C[0]===`authorize`)return{kind:`policies`};if(/\bwhen\s+\w*$/.test(c)&&C.includes(`reaction`))return{kind:`triggers`};if(/\bon\s+\w*$/.test(c)&&C.includes(`constraint`))return{kind:`events`};if(/\binvokes\s+\w*$/.test(c)&&C.includes(`reaction`))return{kind:`commands`};if(/\b(?:on|unique\s+event)\s+\w*$/.test(c)&&C[0]===`constraint`)return{kind:`events`};if(/\bproduces\s+\w*$/.test(c))return{kind:`producesTargets`};if(/\bnavigate\s+to\s+\w*$/.test(c))return{kind:`screens`};if(C[0]===`specification`){if(/^\s*when\s+query\s+[\w.]*$/.test(c))return{kind:`queries`};let e=c.match(/^\s*(given|when|then)\s+\w*$/);if(e)return{kind:`entries`,entries:Z[e[1]]}}if(/\b(?:via|then)\s+query\s+[\w.]*$/.test(c))return{kind:`queries`};if((C[0]===`event`||C[0]===`command`||C[0]===`type`)&&/^\s+[a-z_]\w*\s+[\w[\]?]*$/.test(c)||C[0]===`query`&&/^\s+(?:by|filter)\s+[a-z_]\w*\s+[\w[\]?]*$/.test(c))return{kind:`types`};let U=i(o,u,s,x);if(U&&/^produces\s+operation\b/.test(U))return{kind:`entries`,entries:L};if(U&&/^produces\s+event\b/.test(U))return/^\s+@?[a-z_]\w*\s+[\w[\]?]*$/.test(c)?{kind:`types`}:{kind:`entries`,entries:C.includes(`command`)?[...M,$]:M};if(U&&_e.test(U))return{kind:`entries`,entries:q};let W=t(o,u,s,x);if(C[0]===`for`&&C.includes(`seed`))return{kind:`events`};let G=completionEntriesFor(C,{headers:W,document:o}),J=C[0]===`command`?me(o,s,` `.repeat(x),``,l):null;return{kind:`entries`,entries:J?[expansionEntry(J.text,x),...G]:G}}export{completionEntriesFor,planCompletions};
4
+ `)[0].trim(),insertText:n.replace(/[$}\\]/g,`\\$&`),documentation:`Expands the whole block from what the command and its events declare.`}}function completionEntriesFor(e,t={headers:[],document:[]}){let n=e[0];if(n===void 0||n===`domain`)return topLevelEntries(t.document);let r=he(n);if(r)return r.completions??[];let i=t.headers[0];switch(n){case`purpose`:return o;case`module`:return p;case`feature`:return u;case`slice`:return Y(i?.split(/\s+/)[1]);case`concept`:return/:\s*Enum\b/.test(i??``)?[...T,{label:`enum member (numbered)`,insertText:"${1:value} = ${2:0}",documentation:`Every member must declare a unique int32 number. Keep published numbers unchanged; specifications name members, not numbers.`}]:T;case`type`:return ae;case`command`:return w;case`public`:case`event`:return D;case`readmodel`:return g;case`reducer`:return _;case`form`:return d;case`contribute`:return l;case`behavior`:return c;case`persona`:return h;case`identity`:return A;case`authentication`:return s;case`seed`:return v;case`theme`:return b;case`ui`:return x;case`on`:case`success`:case`failure`:case`confirm`:return m;case`layout`:return f;case`system`:return L.filter(e=>e.label===`description`);case`operation`:return L;case`execute`:case`compensate`:return R;case`produces`:return e.includes(`command`)?[...H,$]:H;case`handler`:return k;case`implementation`:return e[1]===`handler`?j:[`execute`,`compensate`].includes(e[1])?I:[];case`reads`:return[{label:`by parts`,insertText:"by\n ${1:part} = ${2:source}\n ${3:part} = ${4:source}",documentation:`Supply every composite read-model key part by name.`}];case`query`:return U;case`performer`:return B;case`constraint`:return E;case`reaction`:return W;case`invokes`:return e.includes(`reaction`)?P:[];case`trigger`:return ie;case`when`:case`every`:case`at`:return e.includes(`reaction`)?G:[];case`specification`:return X;case`policy`:return V;case`validate`:return oe;case`action`:return C;case`table`:case`summary`:return ne;case`screen`:return isTemplate(i)?y:J;case`dialog`:return y;default:return isTemplate(t.headers.find(e=>isTemplate(e)))?y:e.includes(`screen`)||n===`section`?J:e.includes(`produces`)?e.includes(`command`)?[...H,$]:H:[]}}function planCompletions(o,s,c,l=Q(o)){let u=n(o);if(u[s]||a(c).length<c.length)return{kind:`none`};if(/^\s*concept\s+[\p{L}\p{Mn}\p{Nd}\p{Pc}]+\s*:\s*\w+\s+(?:(?:pii|personal|secret)\s+)*\w*$/u.test(c))return{kind:`entries`,entries:[`pii`,`secret`].filter(e=>!RegExp(`\\b${e}\\b`).test(c)).map(e=>({label:e,insertText:e,documentation:e===`pii`?`personal data (GDPR Art. 4(1)); renders Chronicle [PII]`:`Operational secret; renders [Encrypted] + [NotAudited].`}))};let d=e(o,u,s,r(c))[0]===`concept`,f=d?ue(o,s,c):null;if(f!==null)return{kind:`entries`,entries:f};if(d&&/^\s*(?:secret|sensitive|@sensitive)\s+scope\s+\w*$/.test(c))return{kind:`entries`,entries:[`subject`,`namespace`,`global`].map(e=>({label:e,insertText:e,documentation:`Explicit secret encryption scope.`}))};if(d&&/^\s*(?:pii|personal|@pii)\s+special\s+\w*$/.test(c))return{kind:`entries`,entries:[`racialOrEthnicOrigin`,`politicalOpinions`,`religiousOrPhilosophicalBeliefs`,`tradeUnionMembership`,`genetic`,`biometric`,`health`,`sexLifeOrSexualOrientation`].map(e=>({label:e,insertText:e,documentation:`GDPR Art. 9(1) special category.`}))};let p=fe(o,s,c,l);if(p!==null)return{kind:`entries`,entries:p};let m=ce(o,s,c)??se(o,s,c,Q(o));if(m!==null)return{kind:`entries`,entries:m};let h=ge(o,s,c,l);if(h!==null)return{kind:`entries`,entries:h};let g=pe(o,s,c,l);if(g!==null)return{kind:`entries`,entries:g};let _=c.match(/^\s*import\s+"([^"]*)$/);if(_)return{kind:`playFiles`,replaceLength:_[1].length};if(/["/]$/.test(c))return{kind:`none`};let v=le(o,s,r(o[s]??c));if(/\$refusal\.\w*$/.test(c))return{kind:`entries`,entries:v===void 0?[]:[`reason`,`message`,.../^on\s+refused\s+by\s+constraint(?:\s|$)/.test(v)?[`constraint`]:[]].map(e=>({label:e,insertText:e,documentation:`String refusal value in branch event mappings; executable from ESM v19. Constraint is available only in a by constraint branch.`}))};let y=c.match(/\$[\w.]*$/);if(y)return{kind:`contextVariables`,replaceLength:y[0].length};let b=o[s]??``,x=c.trim().length===0?c.length:r(b),C=e(o,u,s,x);if(C.includes(`screen`)){let e=x,t=!1;for(let n=s-1;n>=0;n--){if(u[n])continue;let i=a(o[n]);if(!(i.trim().length===0||r(i)>=e)){if(e=r(i),/^\s*action\s+(?:"|\$strings\.)/.test(i)){t=!0;break}if(/^\s*screen\b/.test(i))break}}if(t){if(/^\s*(?:when\b.*|otherwise)\s+execute\s+[\w.]*$/.test(c))return{kind:`commands`};if(C[0]===`action`)return{kind:`entries`,entries:O};if([`when`,`otherwise`].includes(C[0])){let e=i(o,u,s,x)??``;return{kind:`entries`,entries:/\bexecute\s+[\w.]+$/.test(e)?S:[]}}}}if([`on`,`when`,`otherwise`].includes(C[0])){let e=x;for(let t=s-1;t>=0;t--){if(u[t])continue;let n=a(o[t]);if(!(n.trim().length===0||r(n)>=e)){if(e=r(n),/^\s*on\s+(?:click|double click|select)\s*$/.test(n))return{kind:`entries`,entries:C[0]===`on`?te:N};if(/^\s*(?:screen|behavior|specification|reaction)\b/.test(n))break}}}if(C[0]===`on`&&v!==void 0)return{kind:`entries`,entries:K};let w=de(o,s,x);if(w===`implementation`)return{kind:`entries`,entries:F};if(w===`rule`)return{kind:`entries`,entries:ee};let T=[`public`,`event`,`command`,`type`,`readmodel`,`trigger`,`when`,`every`,`at`].includes(C[0])||C[0]===`produces`&&/^produces\s+event\b/.test(i(o,u,s,x)??``),E=c.trimStart().split(/\s+/)[0],D=C[0]===`command`&&[`reads`,`authorize`,`produces`].includes(E)||C[0]===`event`&&E===`tag`||[`trigger`,`when`,`every`,`at`].includes(C[0])&&[`description`,`file`,`reads`,`produces`,`invokes`].includes(E),optionalPrefix=e=>e!==null&&`optional`.startsWith(e[1]),k=T&&!D&&optionalPrefix(c.match(/^\s*@?[a-z_]\w*\s+[\w.]+(?:\[\])?\s+(\w*)$/)),A=C[0]===`query`&&optionalPrefix(c.match(/^\s*(?:by|filter)\s+[a-z_]\w*\s+[\w.]+(?:\[\])?\s+(\w*)$/))||optionalPrefix(c.match(/^\s*query\s+[A-Za-z_]\w*\s*=>\s*(?:observable\s+)?[\w.]+(?:\[\])?\s+(\w*)$/)),j=(C[0]===`event`||C[0]===`produces`&&/^produces\s+event\b/.test(i(o,u,s,x)??``))&&!D?c.match(/^\s*@?[a-z_]\w*\s+([\w.]+)\s+(\w*)$/):null,P=l.concepts.find(e=>e.name===j?.[1]),I=P?.primitive??j?.[1],R=(I===`String`||I===`Uuid`||I===`Int`&&P!==void 0)&&!P?.attributes.some(e=>[`pii`,`personal`,`secret`,`sensitive`].includes(e.replace(/^@/,``))),B=j!==null&&R&&`subject`.startsWith(j[2]),V=C[0]===`readmodel`?c.match(/^\s*@?[a-z_]\w*\s+[\w.]+\s+(\w*)$/):null,H=[...V&&`key`.startsWith(V[1])?[{label:`key`,insertText:`key`,documentation:`Declares a required read-model key part. Explicit keys replace inference. Composite keys are authoring-only (#599).`}]:[],...(k||A)&&!/=>\s*observable\s+$/.test(c)?z:[],...B?[{label:`subject`,insertText:`subject`,documentation:`One required scalar event data-subject identity; not pii or secret. Report-only lineage metadata (PLAY0270), no ESM or provider output yet.`}]:[]];if(H.length>0)return{kind:`entries`,entries:H};if(/\bauthorize\s+[\w\s]*$/.test(c)||C[0]===`authorize`)return{kind:`policies`};if(/\bwhen\s+\w*$/.test(c)&&C.includes(`reaction`))return{kind:`triggers`};if(/\bon\s+\w*$/.test(c)&&C.includes(`constraint`))return{kind:`events`};if(/\binvokes\s+\w*$/.test(c)&&C.includes(`reaction`))return{kind:`commands`};if(/\b(?:on|unique\s+event)\s+\w*$/.test(c)&&C[0]===`constraint`)return{kind:`events`};if(/\bproduces\s+\w*$/.test(c))return{kind:`producesTargets`};if(/\bnavigate\s+to\s+\w*$/.test(c))return{kind:`screens`};if(C[0]===`specification`){if(/^\s*when\s+query\s+[\w.]*$/.test(c))return{kind:`queries`};let e=c.match(/^\s*(given|when|then)\s+\w*$/);if(e)return{kind:`entries`,entries:Z[e[1]]}}if(/\b(?:via|then)\s+query\s+[\w.]*$/.test(c))return{kind:`queries`};if((C[0]===`event`||C[0]===`command`||C[0]===`type`)&&/^\s+[a-z_]\w*\s+[\w[\]?]*$/.test(c)||C[0]===`query`&&/^\s+(?:by|filter)\s+[a-z_]\w*\s+[\w[\]?]*$/.test(c))return{kind:`types`};let U=i(o,u,s,x);if(U&&/^produces\s+operation\b/.test(U))return{kind:`entries`,entries:L};if(U&&/^produces\s+event\b/.test(U))return/^\s+@?[a-z_]\w*\s+[\w[\]?]*$/.test(c)?{kind:`types`}:{kind:`entries`,entries:C.includes(`command`)?[...M,$]:M};if(U&&_e.test(U))return{kind:`entries`,entries:q};let W=t(o,u,s,x);if(C[0]===`for`&&C.includes(`seed`))return{kind:`events`};let G=completionEntriesFor(C,{headers:W,document:o}),J=C[0]===`command`?me(o,s,` `.repeat(x),``,l):null;return{kind:`entries`,entries:J?[expansionEntry(J.text,x),...G]:G}}export{completionEntriesFor,planCompletions};
5
5
  //# sourceMappingURL=completion-planner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"completion-planner.js","names":["items.moduleItems","items.featureItems","items.sliceItemsFor","items.conceptItems","items.typeItems","items.commandItems","items.eventItems","scope.readModelItems","scope.reducerItems","scope.formItems","scope.contributeItems","scope.behaviorItems","scope.personaItems","items.identityItems","scope.authenticationItems","scope.seedItems","scope.themeItems","scope.uiProfileItems","scope.outcomeItems","scope.layoutItems","items.operationItems","items.operationPhaseItems","items.producesItems","items.handlerItems","items.implementationItems","items.operationImplementationItems","items.queryItems","items.performerItems","items.constraintItems","items.reactionItems","items.invocationItems","items.triggerItems","items.reactionTriggerItems","items.specificationItems","items.policyItems","items.validateItems","items.actionItems","items.tableItems","scope.templateItems","items.screenItems","items.guardedActionItems","items.actionArgumentItems","items.interactionChoiceItems","items.interactionActionItems","items.refusalItems","items.namedRuleImplementationItems","items.commandRuleItems","items.optionalTypeItems","items.specificationStepItems","items.inlineEventItems","items.ruleItems","productionRouteItem","RULE_LINE_PATTERN","document","keyword","line","topLevelItems","item","header","relative","text","index","indent","indentOf","construct","chain","where","subLanguage","getSubLanguage","purposeItems","moduleScopeItems","featureScopeItems","sliceItemsFor","conceptItems","typeItems","commandItems","eventItems","readModelItems","reducerItems","formItems","contributeItems","behaviorItems","personaItems","identityItems","authenticationItems","seedItems","themeItems","uiProfileItems","outcomeItems","layoutItems","operationItems","operationPhaseItems","producesItems","handlerItems","implementationItems","operationImplementationItems","queryItems","performerItems","constraintItems","reactionItems","invocationItems","triggerItems","reactionTriggerItems","specificationItems","policyItems","validateItems","actionItems","tableItems","templateItems","screenItems","candidate","scanDocument","lines","fences","fenceMap","lineIndex","withoutComment","textBefore","marker","inConcept","enclosingChain","generationEntries","generationCompletions","scope","category","continuationEntries","continuationResponseCompletions","symbols","responseEntries","exampleCompletions","responseCompletions","keyEntries","readModelKeyCompletions","dependencyEntries","dependencyTargetCompletions","importPath","refusal","refusalContext","member","contextVariableMatch","currentLine","effectiveIndent","parentIndent","guarded","parent","guardedActionItems","nearestEnclosingLine","actionArgumentItems","interactionChoiceItems","interactionActionItems","refusalItems","ruleContext","namedRuleContext","namedRuleImplementationItems","commandRuleItems","propertyOwner","propertyName","reservedProperty","match","afterPropertyType","afterQueryType","subjectModifier","subjectConcept","concept","subjectType","subjectTarget","attribute","afterSubjectType","keyModifier","modifierEntries","optionalTypeItems","step","specificationStepItems","enclosingLine","inlineEventItems","ruleItems","headers","enclosingHeaders","entries","expansion","structureCompletion"],"sources":["../../completion-planner.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { enclosingChain, enclosingHeaders, fenceMap, indentOf, nearestEnclosingLine, withoutComment } from './document-context';\nimport { refusalContext } from './refusal-context';\nimport { generationCompletions } from './generation-completions';\nimport { namedRuleContext } from './named-rule-context';\nimport { continuationResponseCompletions } from './continuation-responses';\nimport { responseCompletions } from './response-completions';\nimport { dependencyTargetCompletions } from './dependency-completions';\nimport { exampleCompletions } from './example-authoring';\nimport { DocumentSymbols, scanDocument } from './symbols';\nimport { structureCompletion } from './structure-completions';\nimport { getSubLanguage } from './sub-language-registry';\nimport * as items from './completion-items';\nimport * as scope from './scope-items';\nimport { CompletionEntry } from './completion-items';\nimport { purposeItems } from './purpose-items';\nimport { readModelKeyCompletions } from './read-model-key-completions';\n\n// Matches a validation rule line ending in \"rule <Name>\" (optionally followed by a\n// message clause) - both the command form (\"<property> rule <Name>\") and the\n// concept implied-subject form (\"rule <Name>\"). Its first word is the property\n// name, not \"rule\", so it can't be recognized through the chain[0] keyword switch\n// the way \"on <EventType>\" or \"handler\" are - hence the dedicated regex check.\nconst productionRouteItem = { label: 'stream', insertText: 'stream ${1:Source.Stream}', documentation: 'Replace the whole command route for this event production. ESM v10.' };\n\nconst RULE_LINE_PATTERN = /(?:^|\\s)rule\\s+[A-Za-z_]\\w*(?:\\s+severity\\s+(?:information|warning|error))?(?:\\s+message\\s+.*)?$/;\n\nexport type CompletionPlan =\n | { kind: 'none' }\n | { kind: 'entries'; entries: CompletionEntry[] }\n | { kind: 'contextVariables'; replaceLength: number }\n | { kind: 'playFiles'; replaceLength: number }\n | { kind: 'policies' }\n | { kind: 'events' }\n | { kind: 'triggers' }\n | { kind: 'commands' }\n | { kind: 'producesTargets' }\n | { kind: 'screens' }\n | { kind: 'queries' }\n | { kind: 'types' };\n\n// What the position sits inside, beyond the keyword chain: the whole header of each enclosing block, so a\n// slice's type and a template's kind are known, and the document's own lines, so a declaration that may\n// appear once is not offered again.\nexport interface CompletionScope {\n headers: readonly string[];\n document: readonly string[];\n}\n\nconst declaredIn = (document: readonly string[], keyword: string) => document.some(line => new RegExp(`^${keyword}\\\\b`).test(line));\n\nfunction topLevelEntries(document: readonly string[]): CompletionEntry[] {\n return items.topLevelItems.filter(item => !(item.label === 'domain' && declaredIn(document, 'domain')) && !(item.label === 'authentication' && declaredIn(document, 'authentication')) && !(item.label === 'identity' && declaredIn(document, 'identity')));\n}\n\nconst isTemplate = (header: string | undefined) => /^(?:screen|dialog)\\s+template\\b/.test(header ?? '');\n\n// A whole block as one completion entry. Continuation lines are indented relative to the line it is inserted on,\n// which is how the editors indent a multi-line snippet.\nfunction expansionEntry(text: string, indent: number): CompletionEntry {\n const relative = text.split('\\n').map((line, index) => (index === 0 ? line : line.slice(Math.min(indent, indentOf(line))))).join('\\n');\n const label = text.split('\\n')[0].trim();\n return { label, insertText: relative.replace(/[$}\\\\]/g, '\\\\$&'), documentation: 'Expands the whole block from what the command and its events declare.' };\n}\n\nexport function completionEntriesFor(chain: string[], where: CompletionScope = { headers: [], document: [] }): CompletionEntry[] {\n const construct = chain[0];\n if (construct === undefined || construct === 'domain') return topLevelEntries(where.document);\n const subLanguage = getSubLanguage(construct);\n if (subLanguage) return subLanguage.completions ?? [];\n const header = where.headers[0];\n switch (construct) {\n case 'purpose':\n return purposeItems;\n case 'module':\n return items.moduleItems;\n case 'feature':\n return items.featureItems;\n case 'slice':\n return items.sliceItemsFor(header?.split(/\\s+/)[1]);\n case 'concept':\n return /:\\s*Enum\\b/.test(header ?? '') ? [...items.conceptItems, { label: 'enum member (numbered)', insertText: '${1:value} = ${2:0}', documentation: 'Every member must declare a unique int32 number. Keep published numbers unchanged; specifications name members, not numbers.' }] : items.conceptItems;\n case 'type':\n return items.typeItems;\n case 'command':\n return items.commandItems;\n case 'public':\n case 'event':\n return items.eventItems;\n case 'readmodel':\n return scope.readModelItems;\n case 'reducer':\n return scope.reducerItems;\n case 'form':\n return scope.formItems;\n case 'contribute':\n return scope.contributeItems;\n case 'behavior':\n return scope.behaviorItems;\n case 'persona':\n return scope.personaItems;\n case 'identity':\n return items.identityItems;\n case 'authentication':\n return scope.authenticationItems;\n case 'seed':\n return scope.seedItems;\n case 'theme':\n return scope.themeItems;\n case 'ui':\n return scope.uiProfileItems;\n case 'on':\n case 'success':\n case 'failure':\n case 'confirm':\n return scope.outcomeItems;\n case 'layout':\n return scope.layoutItems;\n case 'system':\n return items.operationItems.filter(item => item.label === 'description');\n case 'operation':\n return items.operationItems;\n case 'execute':\n case 'compensate':\n return items.operationPhaseItems;\n case 'produces':\n return chain.includes('command') ? [...items.producesItems, productionRouteItem] : items.producesItems;\n case 'handler':\n return items.handlerItems;\n case 'implementation':\n return chain[1] === 'handler' ? items.implementationItems : ['execute', 'compensate'].includes(chain[1]) ? items.operationImplementationItems : [];\n case 'reads':\n return [{ label: 'by parts', insertText: 'by\\n ${1:part} = ${2:source}\\n ${3:part} = ${4:source}', documentation: 'Supply every composite read-model key part by name.' }];\n case 'query':\n return items.queryItems;\n case 'performer':\n return items.performerItems;\n case 'constraint':\n return items.constraintItems;\n case 'reaction':\n return items.reactionItems;\n case 'invokes':\n return chain.includes('reaction') ? items.invocationItems : [];\n case 'trigger':\n return items.triggerItems;\n case 'when':\n case 'every':\n case 'at':\n return chain.includes('reaction') ? items.reactionTriggerItems : [];\n case 'specification':\n return items.specificationItems;\n case 'policy':\n return items.policyItems;\n case 'validate':\n return items.validateItems;\n case 'action':\n return items.actionItems;\n case 'table':\n case 'summary':\n return items.tableItems;\n case 'screen':\n return isTemplate(header) ? scope.templateItems : items.screenItems;\n case 'dialog':\n return scope.templateItems;\n default:\n if (isTemplate(where.headers.find(candidate => isTemplate(candidate)))) return scope.templateItems;\n // Sections inside a screen expose the screen vocabulary.\n if (chain.includes('screen') || construct === 'section') return items.screenItems;\n if (chain.includes('produces')) return chain.includes('command') ? [...items.producesItems, productionRouteItem] : items.producesItems;\n return [];\n }\n}\n\n// Decides what to complete at a position, without any editor dependency — the\n// Monaco service and the VSCode extension both materialize the plan into items.\nexport function planCompletions(\n lines: string[],\n lineIndex: number,\n textBefore: string,\n symbols: DocumentSymbols = scanDocument(lines),\n): CompletionPlan {\n const fences = fenceMap(lines);\n if (fences[lineIndex] || withoutComment(textBefore).length < textBefore.length) return { kind: 'none' };\n if (/^\\s*concept\\s+[\\p{L}\\p{Mn}\\p{Nd}\\p{Pc}]+\\s*:\\s*\\w+\\s+(?:(?:pii|personal|secret)\\s+)*\\w*$/u.test(textBefore)) {\n return { kind: 'entries', entries: ['pii', 'secret'].filter(marker => !new RegExp(`\\\\b${marker}\\\\b`).test(textBefore)).map(marker => ({ label: marker, insertText: marker, documentation: marker === 'pii' ? 'personal data (GDPR Art. 4(1)); renders Chronicle [PII]' : 'Operational secret; renders [Encrypted] + [NotAudited].' })) };\n }\n const inConcept = enclosingChain(lines, fences, lineIndex, indentOf(textBefore))[0] === 'concept';\n const generationEntries = inConcept ? generationCompletions(lines, lineIndex, textBefore) : null;\n if (generationEntries !== null) return { kind: 'entries', entries: generationEntries };\n if (inConcept && /^\\s*(?:secret|sensitive|@sensitive)\\s+scope\\s+\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: ['subject', 'namespace', 'global'].map(scope => ({ label: scope, insertText: scope, documentation: 'Explicit secret encryption scope.' })) };\n }\n if (inConcept && /^\\s*(?:pii|personal|@pii)\\s+special\\s+\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: ['racialOrEthnicOrigin', 'politicalOpinions', 'religiousOrPhilosophicalBeliefs', 'tradeUnionMembership', 'genetic', 'biometric', 'health', 'sexLifeOrSexualOrientation'].map(category => ({ label: category, insertText: category, documentation: 'GDPR Art. 9(1) special category.' })) };\n }\n const continuationEntries = continuationResponseCompletions(lines, lineIndex, textBefore, symbols);\n if (continuationEntries !== null) return { kind: 'entries', entries: continuationEntries };\n const responseEntries = exampleCompletions(lines, lineIndex, textBefore) ?? responseCompletions(lines, lineIndex, textBefore, scanDocument(lines));\n if (responseEntries !== null) return { kind: 'entries', entries: responseEntries };\n const keyEntries = readModelKeyCompletions(lines, lineIndex, textBefore, symbols);\n if (keyEntries !== null) return { kind: 'entries', entries: keyEntries };\n const dependencyEntries = dependencyTargetCompletions(lines, lineIndex, textBefore, symbols);\n if (dependencyEntries !== null) return { kind: 'entries', entries: dependencyEntries };\n\n // Inside the quotes of a file import, what is wanted is a path - replacing what has been typed so far.\n const importPath = textBefore.match(/^\\s*import\\s+\"([^\"]*)$/);\n if (importPath) {\n return { kind: 'playFiles', replaceLength: importPath[1].length };\n }\n\n // A quote or a slash only asks for a completion inside an import path.\n if (/[\"/]$/.test(textBefore)) return { kind: 'none' };\n\n const refusal = refusalContext(lines, lineIndex, indentOf(lines[lineIndex] ?? textBefore));\n if (/\\$refusal\\.\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: refusal === undefined ? [] : ['reason', 'message', ...(/^on\\s+refused\\s+by\\s+constraint(?:\\s|$)/.test(refusal) ? ['constraint'] : [])].map(member => ({ label: member, insertText: member, documentation: 'String refusal value; syntax-only, not yet executable (PLAY0268).' })) };\n }\n const contextVariableMatch = textBefore.match(/\\$[\\w.]*$/);\n if (contextVariableMatch) {\n return { kind: 'contextVariables', replaceLength: contextVariableMatch[0].length };\n }\n\n const currentLine = lines[lineIndex] ?? '';\n const effectiveIndent =\n textBefore.trim().length === 0 ? textBefore.length : indentOf(currentLine);\n const chain = enclosingChain(lines, fences, lineIndex, effectiveIndent);\n if (chain.includes('screen')) {\n let parentIndent = effectiveIndent;\n let guarded = false;\n for (let index = lineIndex - 1; index >= 0; index--) {\n if (fences[index]) continue;\n const parent = withoutComment(lines[index]);\n if (parent.trim().length === 0 || indentOf(parent) >= parentIndent) continue;\n parentIndent = indentOf(parent);\n if (/^\\s*action\\s+(?:\"|\\$strings\\.)/.test(parent)) { guarded = true; break; }\n if (/^\\s*screen\\b/.test(parent)) break;\n }\n if (guarded) {\n if (/^\\s*(?:when\\b.*|otherwise)\\s+execute\\s+[\\w.]*$/.test(textBefore)) return { kind: 'commands' };\n if (chain[0] === 'action') return { kind: 'entries', entries: items.guardedActionItems };\n if (['when', 'otherwise'].includes(chain[0])) {\n const parent = nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? '';\n return { kind: 'entries', entries: /\\bexecute\\s+[\\w.]+$/.test(parent) ? items.actionArgumentItems : [] };\n }\n }\n }\n if (['on', 'when', 'otherwise'].includes(chain[0])) {\n let parentIndent = effectiveIndent;\n for (let index = lineIndex - 1; index >= 0; index--) {\n if (fences[index]) continue;\n const parent = withoutComment(lines[index]);\n if (parent.trim().length === 0 || indentOf(parent) >= parentIndent) continue;\n parentIndent = indentOf(parent);\n if (/^\\s*on\\s+(?:click|double click|select)\\s*$/.test(parent)) {\n return { kind: 'entries', entries: chain[0] === 'on' ? items.interactionChoiceItems : items.interactionActionItems };\n }\n if (/^\\s*(?:screen|behavior|specification|reaction)\\b/.test(parent)) break;\n }\n }\n if (chain[0] === 'on' && refusal !== undefined) return { kind: 'entries', entries: items.refusalItems };\n const ruleContext = namedRuleContext(lines, lineIndex, effectiveIndent);\n if (ruleContext === 'implementation') return { kind: 'entries', entries: items.namedRuleImplementationItems };\n if (ruleContext === 'rule') return { kind: 'entries', entries: items.commandRuleItems };\n\n const propertyOwner = ['public', 'event', 'command', 'type', 'readmodel', 'trigger', 'when', 'every', 'at'].includes(chain[0]) ||\n (chain[0] === 'produces' && /^produces\\s+event\\b/.test(nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? ''));\n const propertyName = textBefore.trimStart().split(/\\s+/)[0];\n const reservedProperty = (chain[0] === 'command' && ['reads', 'authorize', 'produces'].includes(propertyName)) ||\n (chain[0] === 'event' && propertyName === 'tag') ||\n (['trigger', 'when', 'every', 'at'].includes(chain[0]) && ['description', 'file', 'reads', 'produces', 'invokes'].includes(propertyName));\n const optionalPrefix = (match: RegExpMatchArray | null) => match !== null && 'optional'.startsWith(match[1]);\n const afterPropertyType = propertyOwner && !reservedProperty && optionalPrefix(textBefore.match(/^\\s*@?[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+(\\w*)$/));\n const afterQueryType = (chain[0] === 'query' && optionalPrefix(textBefore.match(/^\\s*(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+(\\w*)$/))) ||\n optionalPrefix(textBefore.match(/^\\s*query\\s+[A-Za-z_]\\w*\\s*=>\\s*(?:observable\\s+)?[\\w.]+(?:\\[\\])?\\s+(\\w*)$/));\n const eventPropertyOwner = chain[0] === 'event' || (chain[0] === 'produces' && /^produces\\s+event\\b/.test(nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? ''));\n const subjectModifier = eventPropertyOwner && !reservedProperty ? textBefore.match(/^\\s*@?[a-z_]\\w*\\s+([\\w.]+)\\s+(\\w*)$/) : null;\n const subjectConcept = symbols.concepts.find(concept => concept.name === subjectModifier?.[1]);\n const subjectType = subjectConcept?.primitive ?? subjectModifier?.[1];\n const subjectTarget = (subjectType === 'String' || subjectType === 'Uuid' || (subjectType === 'Int' && subjectConcept !== undefined)) &&\n !subjectConcept?.attributes.some(attribute => ['pii', 'personal', 'secret', 'sensitive'].includes(attribute.replace(/^@/, '')));\n const afterSubjectType = subjectModifier !== null && subjectTarget && 'subject'.startsWith(subjectModifier[2]);\n const keyModifier = chain[0] === 'readmodel' ? textBefore.match(/^\\s*@?[a-z_]\\w*\\s+[\\w.]+\\s+(\\w*)$/) : null;\n const modifierEntries = [\n ...(keyModifier && 'key'.startsWith(keyModifier[1]) ? [{ label: 'key', insertText: 'key', documentation: 'Declares a required read-model key part. Explicit keys replace inference. Composite keys are authoring-only (#599).' }] : []),\n ...((afterPropertyType || afterQueryType) && !/=>\\s*observable\\s+$/.test(textBefore) ? items.optionalTypeItems : []),\n ...(afterSubjectType ? [{ label: 'subject', insertText: 'subject', documentation: 'One required scalar event data-subject identity; not pii or secret. Report-only lineage metadata (PLAY0270), no ESM or provider output yet.' }] : []),\n ];\n if (modifierEntries.length > 0) return { kind: 'entries', entries: modifierEntries };\n\n if (/\\bauthorize\\s+[\\w\\s]*$/.test(textBefore) || chain[0] === 'authorize') {\n return { kind: 'policies' };\n }\n if (/\\bwhen\\s+\\w*$/.test(textBefore) && chain.includes('reaction')) {\n return { kind: 'triggers' };\n }\n if (/\\bon\\s+\\w*$/.test(textBefore) && chain.includes('constraint')) {\n return { kind: 'events' };\n }\n if (/\\binvokes\\s+\\w*$/.test(textBefore) && chain.includes('reaction')) {\n return { kind: 'commands' };\n }\n if (/\\b(?:on|unique\\s+event)\\s+\\w*$/.test(textBefore) && chain[0] === 'constraint') {\n return { kind: 'events' };\n }\n if (/\\bproduces\\s+\\w*$/.test(textBefore)) {\n return { kind: 'producesTargets' };\n }\n if (/\\bnavigate\\s+to\\s+\\w*$/.test(textBefore)) {\n return { kind: 'screens' };\n }\n if (chain[0] === 'specification') {\n if (/^\\s*when\\s+query\\s+[\\w.]*$/.test(textBefore)) return { kind: 'queries' };\n const step = textBefore.match(/^\\s*(given|when|then)\\s+\\w*$/);\n if (step) return { kind: 'entries', entries: items.specificationStepItems[step[1] as 'given' | 'when' | 'then'] };\n }\n if (/\\b(?:via|then)\\s+query\\s+[\\w.]*$/.test(textBefore)) {\n return { kind: 'queries' };\n }\n if (\n (chain[0] === 'event' || chain[0] === 'command' || chain[0] === 'type') &&\n /^\\s+[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)\n ) {\n return { kind: 'types' };\n }\n if (chain[0] === 'query' && /^\\s+(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)) {\n return { kind: 'types' };\n }\n\n const enclosingLine = nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent);\n if (enclosingLine && /^produces\\s+operation\\b/.test(enclosingLine)) return { kind: 'entries', entries: items.operationItems };\n if (enclosingLine && /^produces\\s+event\\b/.test(enclosingLine)) {\n if (/^\\s+@?[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)) return { kind: 'types' };\n return { kind: 'entries', entries: chain.includes('command') ? [...items.inlineEventItems, productionRouteItem] : items.inlineEventItems };\n }\n if (enclosingLine && RULE_LINE_PATTERN.test(enclosingLine)) {\n return { kind: 'entries', entries: items.ruleItems };\n }\n\n const headers = enclosingHeaders(lines, fences, lineIndex, effectiveIndent);\n if (chain[0] === 'for' && chain.includes('seed')) return { kind: 'events' };\n const entries = completionEntriesFor(chain, { headers, document: lines });\n const expansion = chain[0] === 'command' ? structureCompletion(lines, lineIndex, ' '.repeat(effectiveIndent), '', symbols) : null;\n return { kind: 'entries', entries: expansion ? [expansionEntry(expansion.text, effectiveIndent), ...entries] : entries };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"completion-planner.js","names":["items.moduleItems","items.featureItems","items.sliceItemsFor","items.conceptItems","items.typeItems","items.commandItems","items.eventItems","scope.readModelItems","scope.reducerItems","scope.formItems","scope.contributeItems","scope.behaviorItems","scope.personaItems","items.identityItems","scope.authenticationItems","scope.seedItems","scope.themeItems","scope.uiProfileItems","scope.outcomeItems","scope.layoutItems","items.operationItems","items.operationPhaseItems","items.producesItems","items.handlerItems","items.implementationItems","items.operationImplementationItems","items.queryItems","items.performerItems","items.constraintItems","items.reactionItems","items.invocationItems","items.triggerItems","items.reactionTriggerItems","items.specificationItems","items.policyItems","items.validateItems","items.actionItems","items.tableItems","scope.templateItems","items.screenItems","items.guardedActionItems","items.actionArgumentItems","items.interactionChoiceItems","items.interactionActionItems","items.refusalItems","items.namedRuleImplementationItems","items.commandRuleItems","items.optionalTypeItems","items.specificationStepItems","items.inlineEventItems","items.ruleItems","productionRouteItem","RULE_LINE_PATTERN","document","keyword","line","topLevelItems","item","header","relative","text","index","indent","indentOf","construct","chain","where","subLanguage","getSubLanguage","purposeItems","moduleScopeItems","featureScopeItems","sliceItemsFor","conceptItems","typeItems","commandItems","eventItems","readModelItems","reducerItems","formItems","contributeItems","behaviorItems","personaItems","identityItems","authenticationItems","seedItems","themeItems","uiProfileItems","outcomeItems","layoutItems","operationItems","operationPhaseItems","producesItems","handlerItems","implementationItems","operationImplementationItems","queryItems","performerItems","constraintItems","reactionItems","invocationItems","triggerItems","reactionTriggerItems","specificationItems","policyItems","validateItems","actionItems","tableItems","templateItems","screenItems","candidate","scanDocument","lines","fences","fenceMap","lineIndex","withoutComment","textBefore","marker","inConcept","enclosingChain","generationEntries","generationCompletions","scope","category","continuationEntries","continuationResponseCompletions","symbols","responseEntries","exampleCompletions","responseCompletions","keyEntries","readModelKeyCompletions","dependencyEntries","dependencyTargetCompletions","importPath","refusal","refusalContext","member","contextVariableMatch","currentLine","effectiveIndent","parentIndent","guarded","parent","guardedActionItems","nearestEnclosingLine","actionArgumentItems","interactionChoiceItems","interactionActionItems","refusalItems","ruleContext","namedRuleContext","namedRuleImplementationItems","commandRuleItems","propertyOwner","propertyName","reservedProperty","match","afterPropertyType","afterQueryType","subjectModifier","subjectConcept","concept","subjectType","subjectTarget","attribute","afterSubjectType","keyModifier","modifierEntries","optionalTypeItems","step","specificationStepItems","enclosingLine","inlineEventItems","ruleItems","headers","enclosingHeaders","entries","expansion","structureCompletion"],"sources":["../../completion-planner.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { enclosingChain, enclosingHeaders, fenceMap, indentOf, nearestEnclosingLine, withoutComment } from './document-context';\nimport { refusalContext } from './refusal-context';\nimport { generationCompletions } from './generation-completions';\nimport { namedRuleContext } from './named-rule-context';\nimport { continuationResponseCompletions } from './continuation-responses';\nimport { responseCompletions } from './response-completions';\nimport { dependencyTargetCompletions } from './dependency-completions';\nimport { exampleCompletions } from './example-authoring';\nimport { DocumentSymbols, scanDocument } from './symbols';\nimport { structureCompletion } from './structure-completions';\nimport { getSubLanguage } from './sub-language-registry';\nimport * as items from './completion-items';\nimport * as scope from './scope-items';\nimport { CompletionEntry } from './completion-items';\nimport { purposeItems } from './purpose-items';\nimport { readModelKeyCompletions } from './read-model-key-completions';\n\n// Matches a validation rule line ending in \"rule <Name>\" (optionally followed by a\n// message clause) - both the command form (\"<property> rule <Name>\") and the\n// concept implied-subject form (\"rule <Name>\"). Its first word is the property\n// name, not \"rule\", so it can't be recognized through the chain[0] keyword switch\n// the way \"on <EventType>\" or \"handler\" are - hence the dedicated regex check.\nconst productionRouteItem = { label: 'stream', insertText: 'stream ${1:Source.Stream}', documentation: 'Replace the whole command route for this event production. ESM v10.' };\n\nconst RULE_LINE_PATTERN = /(?:^|\\s)rule\\s+[A-Za-z_]\\w*(?:\\s+severity\\s+(?:information|warning|error))?(?:\\s+message\\s+.*)?$/;\n\nexport type CompletionPlan =\n | { kind: 'none' }\n | { kind: 'entries'; entries: CompletionEntry[] }\n | { kind: 'contextVariables'; replaceLength: number }\n | { kind: 'playFiles'; replaceLength: number }\n | { kind: 'policies' }\n | { kind: 'events' }\n | { kind: 'triggers' }\n | { kind: 'commands' }\n | { kind: 'producesTargets' }\n | { kind: 'screens' }\n | { kind: 'queries' }\n | { kind: 'types' };\n\n// What the position sits inside, beyond the keyword chain: the whole header of each enclosing block, so a\n// slice's type and a template's kind are known, and the document's own lines, so a declaration that may\n// appear once is not offered again.\nexport interface CompletionScope {\n headers: readonly string[];\n document: readonly string[];\n}\n\nconst declaredIn = (document: readonly string[], keyword: string) => document.some(line => new RegExp(`^${keyword}\\\\b`).test(line));\n\nfunction topLevelEntries(document: readonly string[]): CompletionEntry[] {\n return items.topLevelItems.filter(item => !(item.label === 'domain' && declaredIn(document, 'domain')) && !(item.label === 'authentication' && declaredIn(document, 'authentication')) && !(item.label === 'identity' && declaredIn(document, 'identity')));\n}\n\nconst isTemplate = (header: string | undefined) => /^(?:screen|dialog)\\s+template\\b/.test(header ?? '');\n\n// A whole block as one completion entry. Continuation lines are indented relative to the line it is inserted on,\n// which is how the editors indent a multi-line snippet.\nfunction expansionEntry(text: string, indent: number): CompletionEntry {\n const relative = text.split('\\n').map((line, index) => (index === 0 ? line : line.slice(Math.min(indent, indentOf(line))))).join('\\n');\n const label = text.split('\\n')[0].trim();\n return { label, insertText: relative.replace(/[$}\\\\]/g, '\\\\$&'), documentation: 'Expands the whole block from what the command and its events declare.' };\n}\n\nexport function completionEntriesFor(chain: string[], where: CompletionScope = { headers: [], document: [] }): CompletionEntry[] {\n const construct = chain[0];\n if (construct === undefined || construct === 'domain') return topLevelEntries(where.document);\n const subLanguage = getSubLanguage(construct);\n if (subLanguage) return subLanguage.completions ?? [];\n const header = where.headers[0];\n switch (construct) {\n case 'purpose':\n return purposeItems;\n case 'module':\n return items.moduleItems;\n case 'feature':\n return items.featureItems;\n case 'slice':\n return items.sliceItemsFor(header?.split(/\\s+/)[1]);\n case 'concept':\n return /:\\s*Enum\\b/.test(header ?? '') ? [...items.conceptItems, { label: 'enum member (numbered)', insertText: '${1:value} = ${2:0}', documentation: 'Every member must declare a unique int32 number. Keep published numbers unchanged; specifications name members, not numbers.' }] : items.conceptItems;\n case 'type':\n return items.typeItems;\n case 'command':\n return items.commandItems;\n case 'public':\n case 'event':\n return items.eventItems;\n case 'readmodel':\n return scope.readModelItems;\n case 'reducer':\n return scope.reducerItems;\n case 'form':\n return scope.formItems;\n case 'contribute':\n return scope.contributeItems;\n case 'behavior':\n return scope.behaviorItems;\n case 'persona':\n return scope.personaItems;\n case 'identity':\n return items.identityItems;\n case 'authentication':\n return scope.authenticationItems;\n case 'seed':\n return scope.seedItems;\n case 'theme':\n return scope.themeItems;\n case 'ui':\n return scope.uiProfileItems;\n case 'on':\n case 'success':\n case 'failure':\n case 'confirm':\n return scope.outcomeItems;\n case 'layout':\n return scope.layoutItems;\n case 'system':\n return items.operationItems.filter(item => item.label === 'description');\n case 'operation':\n return items.operationItems;\n case 'execute':\n case 'compensate':\n return items.operationPhaseItems;\n case 'produces':\n return chain.includes('command') ? [...items.producesItems, productionRouteItem] : items.producesItems;\n case 'handler':\n return items.handlerItems;\n case 'implementation':\n return chain[1] === 'handler' ? items.implementationItems : ['execute', 'compensate'].includes(chain[1]) ? items.operationImplementationItems : [];\n case 'reads':\n return [{ label: 'by parts', insertText: 'by\\n ${1:part} = ${2:source}\\n ${3:part} = ${4:source}', documentation: 'Supply every composite read-model key part by name.' }];\n case 'query':\n return items.queryItems;\n case 'performer':\n return items.performerItems;\n case 'constraint':\n return items.constraintItems;\n case 'reaction':\n return items.reactionItems;\n case 'invokes':\n return chain.includes('reaction') ? items.invocationItems : [];\n case 'trigger':\n return items.triggerItems;\n case 'when':\n case 'every':\n case 'at':\n return chain.includes('reaction') ? items.reactionTriggerItems : [];\n case 'specification':\n return items.specificationItems;\n case 'policy':\n return items.policyItems;\n case 'validate':\n return items.validateItems;\n case 'action':\n return items.actionItems;\n case 'table':\n case 'summary':\n return items.tableItems;\n case 'screen':\n return isTemplate(header) ? scope.templateItems : items.screenItems;\n case 'dialog':\n return scope.templateItems;\n default:\n if (isTemplate(where.headers.find(candidate => isTemplate(candidate)))) return scope.templateItems;\n // Sections inside a screen expose the screen vocabulary.\n if (chain.includes('screen') || construct === 'section') return items.screenItems;\n if (chain.includes('produces')) return chain.includes('command') ? [...items.producesItems, productionRouteItem] : items.producesItems;\n return [];\n }\n}\n\n// Decides what to complete at a position, without any editor dependency — the\n// Monaco service and the VSCode extension both materialize the plan into items.\nexport function planCompletions(\n lines: string[],\n lineIndex: number,\n textBefore: string,\n symbols: DocumentSymbols = scanDocument(lines),\n): CompletionPlan {\n const fences = fenceMap(lines);\n if (fences[lineIndex] || withoutComment(textBefore).length < textBefore.length) return { kind: 'none' };\n if (/^\\s*concept\\s+[\\p{L}\\p{Mn}\\p{Nd}\\p{Pc}]+\\s*:\\s*\\w+\\s+(?:(?:pii|personal|secret)\\s+)*\\w*$/u.test(textBefore)) {\n return { kind: 'entries', entries: ['pii', 'secret'].filter(marker => !new RegExp(`\\\\b${marker}\\\\b`).test(textBefore)).map(marker => ({ label: marker, insertText: marker, documentation: marker === 'pii' ? 'personal data (GDPR Art. 4(1)); renders Chronicle [PII]' : 'Operational secret; renders [Encrypted] + [NotAudited].' })) };\n }\n const inConcept = enclosingChain(lines, fences, lineIndex, indentOf(textBefore))[0] === 'concept';\n const generationEntries = inConcept ? generationCompletions(lines, lineIndex, textBefore) : null;\n if (generationEntries !== null) return { kind: 'entries', entries: generationEntries };\n if (inConcept && /^\\s*(?:secret|sensitive|@sensitive)\\s+scope\\s+\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: ['subject', 'namespace', 'global'].map(scope => ({ label: scope, insertText: scope, documentation: 'Explicit secret encryption scope.' })) };\n }\n if (inConcept && /^\\s*(?:pii|personal|@pii)\\s+special\\s+\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: ['racialOrEthnicOrigin', 'politicalOpinions', 'religiousOrPhilosophicalBeliefs', 'tradeUnionMembership', 'genetic', 'biometric', 'health', 'sexLifeOrSexualOrientation'].map(category => ({ label: category, insertText: category, documentation: 'GDPR Art. 9(1) special category.' })) };\n }\n const continuationEntries = continuationResponseCompletions(lines, lineIndex, textBefore, symbols);\n if (continuationEntries !== null) return { kind: 'entries', entries: continuationEntries };\n const responseEntries = exampleCompletions(lines, lineIndex, textBefore) ?? responseCompletions(lines, lineIndex, textBefore, scanDocument(lines));\n if (responseEntries !== null) return { kind: 'entries', entries: responseEntries };\n const keyEntries = readModelKeyCompletions(lines, lineIndex, textBefore, symbols);\n if (keyEntries !== null) return { kind: 'entries', entries: keyEntries };\n const dependencyEntries = dependencyTargetCompletions(lines, lineIndex, textBefore, symbols);\n if (dependencyEntries !== null) return { kind: 'entries', entries: dependencyEntries };\n\n // Inside the quotes of a file import, what is wanted is a path - replacing what has been typed so far.\n const importPath = textBefore.match(/^\\s*import\\s+\"([^\"]*)$/);\n if (importPath) {\n return { kind: 'playFiles', replaceLength: importPath[1].length };\n }\n\n // A quote or a slash only asks for a completion inside an import path.\n if (/[\"/]$/.test(textBefore)) return { kind: 'none' };\n\n const refusal = refusalContext(lines, lineIndex, indentOf(lines[lineIndex] ?? textBefore));\n if (/\\$refusal\\.\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: refusal === undefined ? [] : ['reason', 'message', ...(/^on\\s+refused\\s+by\\s+constraint(?:\\s|$)/.test(refusal) ? ['constraint'] : [])].map(member => ({ label: member, insertText: member, documentation: 'String refusal value in branch event mappings; executable from ESM v19. Constraint is available only in a by constraint branch.' })) };\n }\n const contextVariableMatch = textBefore.match(/\\$[\\w.]*$/);\n if (contextVariableMatch) {\n return { kind: 'contextVariables', replaceLength: contextVariableMatch[0].length };\n }\n\n const currentLine = lines[lineIndex] ?? '';\n const effectiveIndent =\n textBefore.trim().length === 0 ? textBefore.length : indentOf(currentLine);\n const chain = enclosingChain(lines, fences, lineIndex, effectiveIndent);\n if (chain.includes('screen')) {\n let parentIndent = effectiveIndent;\n let guarded = false;\n for (let index = lineIndex - 1; index >= 0; index--) {\n if (fences[index]) continue;\n const parent = withoutComment(lines[index]);\n if (parent.trim().length === 0 || indentOf(parent) >= parentIndent) continue;\n parentIndent = indentOf(parent);\n if (/^\\s*action\\s+(?:\"|\\$strings\\.)/.test(parent)) { guarded = true; break; }\n if (/^\\s*screen\\b/.test(parent)) break;\n }\n if (guarded) {\n if (/^\\s*(?:when\\b.*|otherwise)\\s+execute\\s+[\\w.]*$/.test(textBefore)) return { kind: 'commands' };\n if (chain[0] === 'action') return { kind: 'entries', entries: items.guardedActionItems };\n if (['when', 'otherwise'].includes(chain[0])) {\n const parent = nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? '';\n return { kind: 'entries', entries: /\\bexecute\\s+[\\w.]+$/.test(parent) ? items.actionArgumentItems : [] };\n }\n }\n }\n if (['on', 'when', 'otherwise'].includes(chain[0])) {\n let parentIndent = effectiveIndent;\n for (let index = lineIndex - 1; index >= 0; index--) {\n if (fences[index]) continue;\n const parent = withoutComment(lines[index]);\n if (parent.trim().length === 0 || indentOf(parent) >= parentIndent) continue;\n parentIndent = indentOf(parent);\n if (/^\\s*on\\s+(?:click|double click|select)\\s*$/.test(parent)) {\n return { kind: 'entries', entries: chain[0] === 'on' ? items.interactionChoiceItems : items.interactionActionItems };\n }\n if (/^\\s*(?:screen|behavior|specification|reaction)\\b/.test(parent)) break;\n }\n }\n if (chain[0] === 'on' && refusal !== undefined) return { kind: 'entries', entries: items.refusalItems };\n const ruleContext = namedRuleContext(lines, lineIndex, effectiveIndent);\n if (ruleContext === 'implementation') return { kind: 'entries', entries: items.namedRuleImplementationItems };\n if (ruleContext === 'rule') return { kind: 'entries', entries: items.commandRuleItems };\n\n const propertyOwner = ['public', 'event', 'command', 'type', 'readmodel', 'trigger', 'when', 'every', 'at'].includes(chain[0]) ||\n (chain[0] === 'produces' && /^produces\\s+event\\b/.test(nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? ''));\n const propertyName = textBefore.trimStart().split(/\\s+/)[0];\n const reservedProperty = (chain[0] === 'command' && ['reads', 'authorize', 'produces'].includes(propertyName)) ||\n (chain[0] === 'event' && propertyName === 'tag') ||\n (['trigger', 'when', 'every', 'at'].includes(chain[0]) && ['description', 'file', 'reads', 'produces', 'invokes'].includes(propertyName));\n const optionalPrefix = (match: RegExpMatchArray | null) => match !== null && 'optional'.startsWith(match[1]);\n const afterPropertyType = propertyOwner && !reservedProperty && optionalPrefix(textBefore.match(/^\\s*@?[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+(\\w*)$/));\n const afterQueryType = (chain[0] === 'query' && optionalPrefix(textBefore.match(/^\\s*(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+(\\w*)$/))) ||\n optionalPrefix(textBefore.match(/^\\s*query\\s+[A-Za-z_]\\w*\\s*=>\\s*(?:observable\\s+)?[\\w.]+(?:\\[\\])?\\s+(\\w*)$/));\n const eventPropertyOwner = chain[0] === 'event' || (chain[0] === 'produces' && /^produces\\s+event\\b/.test(nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? ''));\n const subjectModifier = eventPropertyOwner && !reservedProperty ? textBefore.match(/^\\s*@?[a-z_]\\w*\\s+([\\w.]+)\\s+(\\w*)$/) : null;\n const subjectConcept = symbols.concepts.find(concept => concept.name === subjectModifier?.[1]);\n const subjectType = subjectConcept?.primitive ?? subjectModifier?.[1];\n const subjectTarget = (subjectType === 'String' || subjectType === 'Uuid' || (subjectType === 'Int' && subjectConcept !== undefined)) &&\n !subjectConcept?.attributes.some(attribute => ['pii', 'personal', 'secret', 'sensitive'].includes(attribute.replace(/^@/, '')));\n const afterSubjectType = subjectModifier !== null && subjectTarget && 'subject'.startsWith(subjectModifier[2]);\n const keyModifier = chain[0] === 'readmodel' ? textBefore.match(/^\\s*@?[a-z_]\\w*\\s+[\\w.]+\\s+(\\w*)$/) : null;\n const modifierEntries = [\n ...(keyModifier && 'key'.startsWith(keyModifier[1]) ? [{ label: 'key', insertText: 'key', documentation: 'Declares a required read-model key part. Explicit keys replace inference. Composite keys are authoring-only (#599).' }] : []),\n ...((afterPropertyType || afterQueryType) && !/=>\\s*observable\\s+$/.test(textBefore) ? items.optionalTypeItems : []),\n ...(afterSubjectType ? [{ label: 'subject', insertText: 'subject', documentation: 'One required scalar event data-subject identity; not pii or secret. Report-only lineage metadata (PLAY0270), no ESM or provider output yet.' }] : []),\n ];\n if (modifierEntries.length > 0) return { kind: 'entries', entries: modifierEntries };\n\n if (/\\bauthorize\\s+[\\w\\s]*$/.test(textBefore) || chain[0] === 'authorize') {\n return { kind: 'policies' };\n }\n if (/\\bwhen\\s+\\w*$/.test(textBefore) && chain.includes('reaction')) {\n return { kind: 'triggers' };\n }\n if (/\\bon\\s+\\w*$/.test(textBefore) && chain.includes('constraint')) {\n return { kind: 'events' };\n }\n if (/\\binvokes\\s+\\w*$/.test(textBefore) && chain.includes('reaction')) {\n return { kind: 'commands' };\n }\n if (/\\b(?:on|unique\\s+event)\\s+\\w*$/.test(textBefore) && chain[0] === 'constraint') {\n return { kind: 'events' };\n }\n if (/\\bproduces\\s+\\w*$/.test(textBefore)) {\n return { kind: 'producesTargets' };\n }\n if (/\\bnavigate\\s+to\\s+\\w*$/.test(textBefore)) {\n return { kind: 'screens' };\n }\n if (chain[0] === 'specification') {\n if (/^\\s*when\\s+query\\s+[\\w.]*$/.test(textBefore)) return { kind: 'queries' };\n const step = textBefore.match(/^\\s*(given|when|then)\\s+\\w*$/);\n if (step) return { kind: 'entries', entries: items.specificationStepItems[step[1] as 'given' | 'when' | 'then'] };\n }\n if (/\\b(?:via|then)\\s+query\\s+[\\w.]*$/.test(textBefore)) {\n return { kind: 'queries' };\n }\n if (\n (chain[0] === 'event' || chain[0] === 'command' || chain[0] === 'type') &&\n /^\\s+[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)\n ) {\n return { kind: 'types' };\n }\n if (chain[0] === 'query' && /^\\s+(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)) {\n return { kind: 'types' };\n }\n\n const enclosingLine = nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent);\n if (enclosingLine && /^produces\\s+operation\\b/.test(enclosingLine)) return { kind: 'entries', entries: items.operationItems };\n if (enclosingLine && /^produces\\s+event\\b/.test(enclosingLine)) {\n if (/^\\s+@?[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)) return { kind: 'types' };\n return { kind: 'entries', entries: chain.includes('command') ? [...items.inlineEventItems, productionRouteItem] : items.inlineEventItems };\n }\n if (enclosingLine && RULE_LINE_PATTERN.test(enclosingLine)) {\n return { kind: 'entries', entries: items.ruleItems };\n }\n\n const headers = enclosingHeaders(lines, fences, lineIndex, effectiveIndent);\n if (chain[0] === 'for' && chain.includes('seed')) return { kind: 'events' };\n const entries = completionEntriesFor(chain, { headers, document: lines });\n const expansion = chain[0] === 'command' ? structureCompletion(lines, lineIndex, ' '.repeat(effectiveIndent), '', symbols) : null;\n return { kind: 'entries', entries: expansion ? [expansionEntry(expansion.text, effectiveIndent), ...entries] : entries };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import"./_virtual/_virtual/_rolldown/runtime.js";import{typeReferenceText as e}from"./TypeReferenceSymbol.js";import{enclosingChain as t,enclosingHeaders as n,fenceMap as r,indentOf as i,withoutComment as a}from"./document-context.js";import{eventAnalysisSource as o}from"./event-analysis-source.js";import{responseAnalysis as ee,responseAvailability as s}from"./response-analysis.js";import{directBody as c,propertyTypeReference as l,scanDocument as te,symbolsForBuffer as u}from"./symbols.js";import{exampleHover as d}from"./example-authoring.js";import{operationHover as f}from"./operation-authoring.js";import{eventSourceHover as p}from"./event-source-authoring.js";import{refusalContext as m}from"./refusal-context.js";import{namedRuleContext as h}from"./named-rule-context.js";import{continuationResponseHover as ne}from"./continuation-responses.js";import{getSubLanguage as re}from"./sub-language-registry.js";import{reactionReferenceAt as ie}from"./reaction-authoring.js";import{attributeDocs as ae,contextVariableDocs as g,handlerIntentDocs as _,keywordDocs as v,specialCategoryDocs as y,specificationKeywordDocs as b}from"./keyword-docs.js";function hoverContent(x,S,C,w,T,E){let D=r(x);if(D[S])return null;let O=x[S]??``;if(T-1>a(O).length)return null;let k=!1,A=!1;for(let e=0;e<w-1;e++)O[e]===`\\`&&k?e++:O[e]===`"`&&!A?k=!k:O[e]==="`"&&!k&&(A=!A);if(k||A)return null;let j=ne(x,S,C,w,T,E);if(j)return j;let M=ie(x,S,w,T,E);if(M)return M.content;let N=d(x,S,w,T,E);if(N)return N;let P=p(x,S,w,T,E);if(P)return P;let F=f(x,S,w,T,E);if(F)return F;let tokenAt=(e,t)=>{let n=e+ +(O[e-1]===`@`);return C===t&&w===n&&T===n+t.length&&O.slice(n-1,T-1)===t},I=O.charAt(w-2);if(C===`authorization`&&t(x,D,S,i(O))[0]===`purpose`)return`A quoted authorization in law for criminal-offence data (Art. 10).`;if(t(x,D,S,i(O))[0]===`concept`&&/^\s*generate\b/.test(O)){let e={generate:`The concept declares how; a command property declares generated. ESM v15 checks fixture shape and guards generated event sources against existing facts.`,uuid:`Random UUID v4, 122 random bits; about 3.27 × 10^17 values at 1% collision probability.`,uuidv7:`Time-ordered UUID v7, 74 random bits; about 1.95 × 10^10 values at 1% collision probability. Exposes time; not monotonic within a millisecond.`,ulid:`26 Crockford base32 characters (uppercase by default), 80 random bits; about 1.56 × 10^11 values at 1% collision probability.`,typeid:`TypeID 0.3: lowercase UUIDv7 base32 with a 0..63-character prefix. 74 random bits; empty prefix has no separator.`,nanoid:`Default 21 characters over 64 symbols: 126 random bits. Custom entropy = size × log2(alphabet size).`,bytes:`8 × count random bits; base64url, hex or base32 without padding. RFC 4648 unused trailing bits must be zero.`,prefix:`Printable ASCII prefix, at most 32 characters. UUID prefixes require a String concept; TypeID uses its own argument.`,alphabet:`NanoID only: 2..256 distinct printable ASCII characters.`,case:`lower or upper for String UUIDs, ULID, hex/base32 bytes. Never base64url, NanoID or TypeID.`,pattern:`Parsed, not yet executable (#616 phase 3).`,random:`Parsed, not yet executable (#616 phase 3).`,rule:`Parsed, not yet executable (#616 phase 3).`,sequence:`Reserved; binding refuses it until #619 is admitted.`};if(e[C])return e[C]}let L=/^\s*concept\s+[^\s:]+\s*:\s*\w+\s+/.exec(O),R=t(x,D,S,i(O))[0]===`concept`&&/^\s*(?:@?pii|personal|@?sensitive|secret)\s+(?:reason|scope|special|criminal)\b/.test(O);if(L!==null&&w-1>=L[0].length-1||R){let e=ae[C];if(e)return e;if(Object.hasOwn(y,C)&&/^\s*(?:@?pii|personal)\s+special\s+/.test(O))return`**${C}** — ${y[C]}`;if(C===`special`)return`GDPR Art. 9(1) special category; requires pii. At most one category per concept.`;if(C===`criminal`)return`Personal data relating to criminal convictions and offenses (GDPR Art. 10); requires pii.`;if(/^\s*(?:secret|sensitive|@sensitive)\s+scope\s+/.test(O)&&[`subject`,`namespace`,`global`].includes(C))return`**${C}** — Secret encryption scope${C===`subject`?` per data subject`:C===`namespace`?` per tenant namespace`:` shared globally`}. Not an event-property subject role.`;if(C===`scope`)return`Secret encryption scope: subject, namespace or global. Omitted scope keeps Chronicle’s Subject default; pii secret renders only [PII].`}if(I===`$`||I===`.`){let e=O.substring(0,T-1).match(/\$[\w.]*$/)?.[0];if(e){if(e.startsWith(`$refusal`)){let t=m(x,S,i(O)),n=e.substring(9),r={reason:`Refusal kind as a String: validation, constraint or authorization.`,message:`Rejection details verbatim, including unresolved $strings keys.`,constraint:`Violated constraint name as a String, only in a by constraint branch.`};return t!==void 0&&r[n]!==void 0?`**${e}** — ${r[n]} Syntax-only, not yet executable (PLAY0268).`:null}if(e.startsWith(`$identity.`)){let t=e.substring(10).split(`.`)[0],n=u(x,E).identityDetails?.find(e=>e.name===t);if(n)return`**$identity.${n.name}** — ${n.type}. Declared caller detail; authoring metadata only, not executable until admitted (#600).`}let t=g[e]??(e.startsWith(`$env`)?g.$env:void 0);if(t)return t}}let z=O.slice(0,w-1),B=/^\s*(?:by|filter)\s+/.test(z)?/^\s*(?:by|filter)\s+[a-z_]\w*\s+[\w.]+(?:\[\])?\s+$/.test(z):/^\s*@?[a-z_]\w*\s+[\w.]+(?:\[\])?\s+$/.test(z),V=/^\s*query\s+\w+\s*=>\s*(?:observable\s+)?[\w.]+(?:\[\])?\s+$/.test(z)&&!/^\s*query\s+\w+\s*=>\s*observable\s+$/.test(z);if(C===`subject`){let e=o(x),r=/^\s*@?[a-z_]\w*\s+[\w.]+(?:\[\])?(?:\?|\s+optional)?(?:\s+generated)?(?:\s+identifier)?\s+$/.test(z),a=t(e,D,S,i(O));return r&&(a[0]===`event`||/^produces\s+event\s+/.test(n(e,D,S,i(O))[0]??``))?`**subject** — This event property identifies its one data subject instead of the event source (decision 0008). Required scalar String, Uuid or their concepts, or an Int-backed concept; never pii or secret. Report-only lineage metadata (PLAY0270); no ESM bytes or provider output yet.`:/\bclaim\s+"(?:[^"\\]|\\.)*"\s+matches\s+$/.test(z)&&a.includes(`policy`)?`**subject** — ${v.subject}`:null}if(C===`optional`&&(B||V))return`**optional** — ${v.optional}`;if(C===`implementation`||C===`hint`){let e=t(x,D,S,i(O)),n=h(x,S,i(O));if(C===`implementation`&&n===`rule`&&/^\s*implementation\s*$/.test(a(O))||C===`hint`&&n===`implementation`&&/^\s*hint\s+"/.test(O))return`**${C}** — Command named-rule guidance with at most one file or tagged fence. No payload means pending and fails binding (PLAY0268). Attached predicates keep their existing pure RuleContext contract; reference execution is unsupported, never confirmation.`;if(C===`implementation`&&e[0]===`handler`&&/^\s*implementation\s*$/.test(a(O)))return`**implementation** — ${_.implementation}`;if(C===`hint`&&e[0]===`implementation`&&e[1]===`handler`&&/^\s*hint\s+"/.test(O))return`**hint** — ${_.hint}`}let H=te(x),U=H.commands.filter(e=>e.line<S).at(-1),W=U?.properties.find(e=>e.name===C&&e.line===S);if(W?.isGenerated||C===`generated`&&U?.properties.some(e=>e.isGenerated&&e.line===S)&&B)return`**${W?.name??`generated`}** — ${W?e(l(W))+`. `:``}Generated value, not a request or form input. ${s}`;let G=U?.response;if(G?.location.line===S+1&&(tokenAt(G.location.column,`returns`)||G.kind===`ScalarCommandResponseSyntax`&&tokenAt(G.source.location.column,G.source.property))){let t=G.kind===`ScalarCommandResponseSyntax`?U?.properties.find(e=>e.name===G.source.property):void 0;return`**returns**${t?` — ${e(l(t))}`:` — unnamed record response`}. ${s}`}if(G?.kind===`RecordCommandResponseSyntax`){let t=G.fields.find(e=>e.location.line===S+1&&(tokenAt(e.location.column,e.name)||tokenAt(e.source.location.column,e.source.property)));if(t){let n=U?.properties.find(e=>e.name===t.source.property),r=t.type?e(t.type):n?e(l(n)):`Unresolved type`;return`**${t.name}** — ${r}${t.type?` (explicit)`:` (inferred)`} = ${t.source.property}. ${n?.isGenerated?`Generated source, not request input. `:``}${s}`}}for(let e of ee(x).specifications.values())if(C===`returns`&&e.thenReturns?.location.line===S+1||C===`generated`&&e.when?.generatedValues?.some(e=>e.location.line===S+1))return s;let K=H.concepts.find(e=>e.name===C);if(K){let e=K.attributes.length?` ${K.attributes.join(` `)}`:``,t=K.enumValues.length?`\n\nValues: ${K.enumValues.map((e,t)=>K.enumNumbers===void 0?e:`${e} = ${K.enumNumbers[t]}`).join(`, `)}`:``,n=Object.entries(K.attributeReasons).map(([e,t])=>`\n\n**@${e}** — ${t}`).join(``);return`\`\`\`screenplay\nconcept ${K.name} : ${K.primitive}${e}\n\`\`\`${n}${t}`}let q=H.types.find(e=>e.name===C);if(q){let t=q.properties.map(t=>`${t.name} ${e(l(t))}`).join(`
1
+ import"./_virtual/_virtual/_rolldown/runtime.js";import{typeReferenceText as e}from"./TypeReferenceSymbol.js";import{enclosingChain as t,enclosingHeaders as n,fenceMap as r,indentOf as i,withoutComment as a}from"./document-context.js";import{eventAnalysisSource as o}from"./event-analysis-source.js";import{responseAnalysis as ee,responseAvailability as s}from"./response-analysis.js";import{directBody as c,propertyTypeReference as l,scanDocument as te,symbolsForBuffer as u}from"./symbols.js";import{exampleHover as d}from"./example-authoring.js";import{operationHover as f}from"./operation-authoring.js";import{eventSourceHover as p}from"./event-source-authoring.js";import{refusalContext as m}from"./refusal-context.js";import{namedRuleContext as h}from"./named-rule-context.js";import{continuationResponseHover as ne}from"./continuation-responses.js";import{getSubLanguage as re}from"./sub-language-registry.js";import{reactionReferenceAt as ie}from"./reaction-authoring.js";import{attributeDocs as ae,contextVariableDocs as g,handlerIntentDocs as _,keywordDocs as v,specialCategoryDocs as y,specificationKeywordDocs as b}from"./keyword-docs.js";function hoverContent(x,S,C,w,T,E){let D=r(x);if(D[S])return null;let O=x[S]??``;if(T-1>a(O).length)return null;let k=!1,A=!1;for(let e=0;e<w-1;e++)O[e]===`\\`&&k?e++:O[e]===`"`&&!A?k=!k:O[e]==="`"&&!k&&(A=!A);if(k||A)return null;let j=ne(x,S,C,w,T,E);if(j)return j;let M=ie(x,S,w,T,E);if(M)return M.content;let N=d(x,S,w,T,E);if(N)return N;let P=p(x,S,w,T,E);if(P)return P;let F=f(x,S,w,T,E);if(F)return F;let tokenAt=(e,t)=>{let n=e+ +(O[e-1]===`@`);return C===t&&w===n&&T===n+t.length&&O.slice(n-1,T-1)===t},I=O.charAt(w-2);if(C===`authorization`&&t(x,D,S,i(O))[0]===`purpose`)return`A quoted authorization in law for criminal-offence data (Art. 10).`;if(t(x,D,S,i(O))[0]===`concept`&&/^\s*generate\b/.test(O)){let e={generate:`The concept declares how; a command property declares generated. ESM v15 checks fixture shape and guards generated event sources against existing facts.`,uuid:`Random UUID v4, 122 random bits; about 3.27 × 10^17 values at 1% collision probability.`,uuidv7:`Time-ordered UUID v7, 74 random bits; about 1.95 × 10^10 values at 1% collision probability. Exposes time; not monotonic within a millisecond.`,ulid:`26 Crockford base32 characters (uppercase by default), 80 random bits; about 1.56 × 10^11 values at 1% collision probability.`,typeid:`TypeID 0.3: lowercase UUIDv7 base32 with a 0..63-character prefix. 74 random bits; empty prefix has no separator.`,nanoid:`Default 21 characters over 64 symbols: 126 random bits. Custom entropy = size × log2(alphabet size).`,bytes:`8 × count random bits; base64url, hex or base32 without padding. RFC 4648 unused trailing bits must be zero.`,prefix:`Printable ASCII prefix, at most 32 characters. UUID prefixes require a String concept; TypeID uses its own argument.`,alphabet:`NanoID only: 2..256 distinct printable ASCII characters.`,case:`lower or upper for String UUIDs, ULID, hex/base32 bytes. Never base64url, NanoID or TypeID.`,pattern:`Parsed, not yet executable (#616 phase 3).`,random:`Parsed, not yet executable (#616 phase 3).`,rule:`Parsed, not yet executable (#616 phase 3).`,sequence:`Reserved; binding refuses it until #619 is admitted.`};if(e[C])return e[C]}let L=/^\s*concept\s+[^\s:]+\s*:\s*\w+\s+/.exec(O),R=t(x,D,S,i(O))[0]===`concept`&&/^\s*(?:@?pii|personal|@?sensitive|secret)\s+(?:reason|scope|special|criminal)\b/.test(O);if(L!==null&&w-1>=L[0].length-1||R){let e=ae[C];if(e)return e;if(Object.hasOwn(y,C)&&/^\s*(?:@?pii|personal)\s+special\s+/.test(O))return`**${C}** — ${y[C]}`;if(C===`special`)return`GDPR Art. 9(1) special category; requires pii. At most one category per concept.`;if(C===`criminal`)return`Personal data relating to criminal convictions and offenses (GDPR Art. 10); requires pii.`;if(/^\s*(?:secret|sensitive|@sensitive)\s+scope\s+/.test(O)&&[`subject`,`namespace`,`global`].includes(C))return`**${C}** — Secret encryption scope${C===`subject`?` per data subject`:C===`namespace`?` per tenant namespace`:` shared globally`}. Not an event-property subject role.`;if(C===`scope`)return`Secret encryption scope: subject, namespace or global. Omitted scope keeps Chronicle’s Subject default; pii secret renders only [PII].`}if(I===`$`||I===`.`){let e=O.substring(0,T-1).match(/\$[\w.]*$/)?.[0];if(e){if(e.startsWith(`$refusal`)){let t=m(x,S,i(O)),n=e.substring(9),r={reason:`Refusal kind as a String: validation, constraint or authorization.`,message:`Messages of the classified kind joined with a newline in result order, verbatim including unresolved $strings keys; authorization uses its denial reason.`,constraint:`First violated constraint name in result order as a String, only in a by constraint branch.`};return t!==void 0&&r[n]!==void 0?`**${e}** — ${r[n]} Executable from ESM v19 in branch event mappings.`:null}if(e.startsWith(`$identity.`)){let t=e.substring(10).split(`.`)[0],n=u(x,E).identityDetails?.find(e=>e.name===t);if(n)return`**$identity.${n.name}** — ${n.type}. Declared caller detail; authoring metadata only, not executable until admitted (#600).`}let t=g[e]??(e.startsWith(`$env`)?g.$env:void 0);if(t)return t}}let z=O.slice(0,w-1),B=/^\s*(?:by|filter)\s+/.test(z)?/^\s*(?:by|filter)\s+[a-z_]\w*\s+[\w.]+(?:\[\])?\s+$/.test(z):/^\s*@?[a-z_]\w*\s+[\w.]+(?:\[\])?\s+$/.test(z),V=/^\s*query\s+\w+\s*=>\s*(?:observable\s+)?[\w.]+(?:\[\])?\s+$/.test(z)&&!/^\s*query\s+\w+\s*=>\s*observable\s+$/.test(z);if(C===`subject`){let e=o(x),r=/^\s*@?[a-z_]\w*\s+[\w.]+(?:\[\])?(?:\?|\s+optional)?(?:\s+generated)?(?:\s+identifier)?\s+$/.test(z),a=t(e,D,S,i(O));return r&&(a[0]===`event`||/^produces\s+event\s+/.test(n(e,D,S,i(O))[0]??``))?`**subject** — This event property identifies its one data subject instead of the event source (decision 0008). Required scalar String, Uuid or their concepts, or an Int-backed concept; never pii or secret. Report-only lineage metadata (PLAY0270); no ESM bytes or provider output yet.`:/\bclaim\s+"(?:[^"\\]|\\.)*"\s+matches\s+$/.test(z)&&a.includes(`policy`)?`**subject** — ${v.subject}`:null}if(C===`optional`&&(B||V))return`**optional** — ${v.optional}`;if(C===`implementation`||C===`hint`){let e=t(x,D,S,i(O)),n=h(x,S,i(O));if(C===`implementation`&&n===`rule`&&/^\s*implementation\s*$/.test(a(O))||C===`hint`&&n===`implementation`&&/^\s*hint\s+"/.test(O))return`**${C}** — Command named-rule guidance with at most one file or tagged fence. No payload means pending and fails binding (PLAY0268). Attached predicates keep their existing pure RuleContext contract; reference execution is unsupported, never confirmation.`;if(C===`implementation`&&e[0]===`handler`&&/^\s*implementation\s*$/.test(a(O)))return`**implementation** — ${_.implementation}`;if(C===`hint`&&e[0]===`implementation`&&e[1]===`handler`&&/^\s*hint\s+"/.test(O))return`**hint** — ${_.hint}`}let H=te(x),U=H.commands.filter(e=>e.line<S).at(-1),W=U?.properties.find(e=>e.name===C&&e.line===S);if(W?.isGenerated||C===`generated`&&U?.properties.some(e=>e.isGenerated&&e.line===S)&&B)return`**${W?.name??`generated`}** — ${W?e(l(W))+`. `:``}Generated value, not a request or form input. ${s}`;let G=U?.response;if(G?.location.line===S+1&&(tokenAt(G.location.column,`returns`)||G.kind===`ScalarCommandResponseSyntax`&&tokenAt(G.source.location.column,G.source.property))){let t=G.kind===`ScalarCommandResponseSyntax`?U?.properties.find(e=>e.name===G.source.property):void 0;return`**returns**${t?` — ${e(l(t))}`:` — unnamed record response`}. ${s}`}if(G?.kind===`RecordCommandResponseSyntax`){let t=G.fields.find(e=>e.location.line===S+1&&(tokenAt(e.location.column,e.name)||tokenAt(e.source.location.column,e.source.property)));if(t){let n=U?.properties.find(e=>e.name===t.source.property),r=t.type?e(t.type):n?e(l(n)):`Unresolved type`;return`**${t.name}** — ${r}${t.type?` (explicit)`:` (inferred)`} = ${t.source.property}. ${n?.isGenerated?`Generated source, not request input. `:``}${s}`}}for(let e of ee(x).specifications.values())if(C===`returns`&&e.thenReturns?.location.line===S+1||C===`generated`&&e.when?.generatedValues?.some(e=>e.location.line===S+1))return s;let K=H.concepts.find(e=>e.name===C);if(K){let e=K.attributes.length?` ${K.attributes.join(` `)}`:``,t=K.enumValues.length?`\n\nValues: ${K.enumValues.map((e,t)=>K.enumNumbers===void 0?e:`${e} = ${K.enumNumbers[t]}`).join(`, `)}`:``,n=Object.entries(K.attributeReasons).map(([e,t])=>`\n\n**@${e}** — ${t}`).join(``);return`\`\`\`screenplay\nconcept ${K.name} : ${K.primitive}${e}\n\`\`\`${n}${t}`}let q=H.types.find(e=>e.name===C);if(q){let t=q.properties.map(t=>`${t.name} ${e(l(t))}`).join(`
2
2
  `);return`\`\`\`screenplay\ntype ${q.name}\n${t}\n\`\`\``}let J=H.policies.find(e=>e.name===C);if(J){let e=J.requires.length?J.requires.join(`
3
3
  `):`(custom C#)`;return`\`\`\`screenplay\npolicy ${J.name}\n${e}\n\`\`\``}let Y=H.events.find(e=>e.name===C&&e.line===S)??H.events.filter(e=>e.name===C).sort((e,t)=>(t.generation??1)-(e.generation??1))[0];if(Y){let t=Y.properties.map(t=>`${t.name} ${e(l(t))}${t.isSubject?` subject`:``}`).join(`
4
4
  `);return`\`\`\`screenplay\n${Y.visibility===`Public`?`public `:``}event ${Y.name}${Y.generation===void 0?``:` generation ${Y.generation}`}${Y.origin===void 0?``:` from ${JSON.stringify(Y.origin)}`}\n${t}\n\`\`\``}let X=H.commands.find(e=>e.name===C);if(X&&X.properties.length>0){let t=X.properties.map(t=>`${t.name} ${e(l(t))}${t.isGenerated?` generated`:``}${t.isIdentifier?` identifier`:``}`).join(`
@@ -1 +1 @@
1
- {"version":3,"file":"hover-content.js","names":["fences","fenceMap","lines","lineIndex","line","endColumn","withoutComment","inString","inTemplate","index","startColumn","returned","continuationResponseHover","word","application","reaction","reactionReferenceAt","fixtureHover","exampleHover","sourceHover","eventSourceHover","operation","operationHover","start","column","name","before","enclosingChain","indentOf","generationDocs","complianceHeader","complianceBody","doc","attributeDocs","specialCategoryDocs","variable","branch","refusalContext","member","descriptions","detail","symbolsForBuffer","contextVariableDocs","\"$env\"","prefix","followsPropertyType","followsQueryType","source","eventAnalysisSource","subjectPrefix","ownerChain","enclosingHeaders","keywordDocs","chain","ruleContext","namedRuleContext","handlerIntentDocs","symbols","scanDocument","owner","command","property","typeReferenceText","propertyTypeReference","responseAvailability","response","field","type","specification","responseAnalysis","value","concept","candidate","attributes","values","reasons","attribute","reason","properties","policy","body","event","right","left","construct","getSubLanguage","step","specificationKeywordDocs","inEvent","directBody","directive","keywordDoc"],"sources":["../../hover-content.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { continuationResponseHover } from './continuation-responses';\nimport { reactionReferenceAt } from './reaction-authoring';\nimport { refusalContext } from './refusal-context';\nimport { namedRuleContext } from './named-rule-context';\nimport { eventSourceHover } from './event-source-authoring';\nimport { exampleHover } from './example-authoring';\nimport { operationHover } from './operation-authoring';\nimport { DocumentSymbols, symbolsForBuffer } from './symbols';\nimport { responseAnalysis, responseAvailability } from './response-analysis';\nimport { enclosingChain, enclosingHeaders, fenceMap, indentOf, withoutComment } from './document-context';\nimport { directBody, propertyTypeReference, scanDocument } from './symbols';\nimport { typeReferenceText } from './TypeReferenceSymbol';\nimport { eventAnalysisSource } from './event-analysis-source';\nimport { getSubLanguage } from './sub-language-registry';\nimport { attributeDocs, contextVariableDocs, handlerIntentDocs, keywordDocs, specialCategoryDocs, specificationKeywordDocs } from './keyword-docs';\n\n// Produces the hover markdown for a word at a position, without any editor\n// dependency — the Monaco service and the VSCode extension share this content.\n// Columns are 1-based, matching both editors' word-at-position APIs.\nexport function hoverContent(\n lines: string[],\n lineIndex: number,\n word: string,\n startColumn: number,\n endColumn: number,\n application?: DocumentSymbols,\n): string | null {\n const fences = fenceMap(lines);\n if (fences[lineIndex]) return null;\n\n const line = lines[lineIndex] ?? '';\n if (endColumn - 1 > withoutComment(line).length) return null;\n let inString = false;\n let inTemplate = false;\n for (let index = 0; index < startColumn - 1; index++) {\n if (line[index] === '\\\\' && inString) index++;\n else if (line[index] === '\"' && !inTemplate) inString = !inString;\n else if (line[index] === '`' && !inString) inTemplate = !inTemplate;\n }\n if (inString || inTemplate) return null;\n const returned = continuationResponseHover(lines, lineIndex, word, startColumn, endColumn, application);\n if (returned) return returned;\n const reaction = reactionReferenceAt(lines, lineIndex, startColumn, endColumn, application);\n if (reaction) return reaction.content;\n const fixtureHover = exampleHover(lines, lineIndex, startColumn, endColumn, application);\n if (fixtureHover) return fixtureHover;\n const sourceHover = eventSourceHover(lines, lineIndex, startColumn, endColumn, application);\n if (sourceHover) return sourceHover;\n const operation = operationHover(lines, lineIndex, startColumn, endColumn, application);\n if (operation) return operation;\n const tokenAt = (column: number, name: string): boolean => {\n const start = column + (line[column - 1] === '@' ? 1 : 0);\n return word === name && startColumn === start && endColumn === start + name.length && line.slice(start - 1, endColumn - 1) === name;\n };\n const before = line.charAt(startColumn - 2);\n if (word === 'authorization' && enclosingChain(lines, fences, lineIndex, indentOf(line))[0] === 'purpose') return 'A quoted authorization in law for criminal-offence data (Art. 10).';\n\n if (enclosingChain(lines, fences, lineIndex, indentOf(line))[0] === 'concept' && /^\\s*generate\\b/.test(line)) {\n const generationDocs: Record<string, string> = {\n generate: 'The concept declares how; a command property declares generated. ESM v15 checks fixture shape and guards generated event sources against existing facts.',\n uuid: 'Random UUID v4, 122 random bits; about 3.27 × 10^17 values at 1% collision probability.',\n uuidv7: 'Time-ordered UUID v7, 74 random bits; about 1.95 × 10^10 values at 1% collision probability. Exposes time; not monotonic within a millisecond.',\n ulid: '26 Crockford base32 characters (uppercase by default), 80 random bits; about 1.56 × 10^11 values at 1% collision probability.',\n typeid: 'TypeID 0.3: lowercase UUIDv7 base32 with a 0..63-character prefix. 74 random bits; empty prefix has no separator.',\n nanoid: 'Default 21 characters over 64 symbols: 126 random bits. Custom entropy = size × log2(alphabet size).',\n bytes: '8 × count random bits; base64url, hex or base32 without padding. RFC 4648 unused trailing bits must be zero.',\n prefix: 'Printable ASCII prefix, at most 32 characters. UUID prefixes require a String concept; TypeID uses its own argument.',\n alphabet: 'NanoID only: 2..256 distinct printable ASCII characters.',\n case: 'lower or upper for String UUIDs, ULID, hex/base32 bytes. Never base64url, NanoID or TypeID.',\n pattern: 'Parsed, not yet executable (#616 phase 3).', random: 'Parsed, not yet executable (#616 phase 3).', rule: 'Parsed, not yet executable (#616 phase 3).', sequence: 'Reserved; binding refuses it until #619 is admitted.',\n };\n if (generationDocs[word]) return generationDocs[word];\n }\n\n const complianceHeader = /^\\s*concept\\s+[^\\s:]+\\s*:\\s*\\w+\\s+/.exec(line);\n const complianceBody = enclosingChain(lines, fences, lineIndex, indentOf(line))[0] === 'concept' && /^\\s*(?:@?pii|personal|@?sensitive|secret)\\s+(?:reason|scope|special|criminal)\\b/.test(line);\n if ((complianceHeader !== null && startColumn - 1 >= complianceHeader[0].length - 1) || complianceBody) {\n const doc = attributeDocs[word];\n if (doc) return doc;\n if (Object.hasOwn(specialCategoryDocs, word) && /^\\s*(?:@?pii|personal)\\s+special\\s+/.test(line)) return `**${word}** — ${specialCategoryDocs[word]}`;\n if (word === 'special') return 'GDPR Art. 9(1) special category; requires pii. At most one category per concept.';\n if (word === 'criminal') return 'Personal data relating to criminal convictions and offenses (GDPR Art. 10); requires pii.';\n if (/^\\s*(?:secret|sensitive|@sensitive)\\s+scope\\s+/.test(line) && ['subject', 'namespace', 'global'].includes(word)) return `**${word}** — Secret encryption scope${word === 'subject' ? ' per data subject' : word === 'namespace' ? ' per tenant namespace' : ' shared globally'}. Not an event-property subject role.`;\n if (word === 'scope') return 'Secret encryption scope: subject, namespace or global. Omitted scope keeps Chronicle’s Subject default; pii secret renders only [PII].';\n }\n if (before === '$' || before === '.') {\n const variable = line.substring(0, endColumn - 1).match(/\\$[\\w.]*$/)?.[0];\n if (variable) {\n if (variable.startsWith('$refusal')) {\n const branch = refusalContext(lines, lineIndex, indentOf(line));\n const member = variable.substring('$refusal.'.length);\n const descriptions: Record<string, string> = { reason: 'Refusal kind as a String: validation, constraint or authorization.', message: 'Rejection details verbatim, including unresolved $strings keys.', constraint: 'Violated constraint name as a String, only in a by constraint branch.' };\n return branch !== undefined && descriptions[member] !== undefined ? `**${variable}** — ${descriptions[member]} Syntax-only, not yet executable (PLAY0268).` : null;\n }\n if (variable.startsWith('$identity.')) {\n const name = variable.substring('$identity.'.length).split('.')[0];\n const detail = symbolsForBuffer(lines, application).identityDetails?.find(detail => detail.name === name);\n if (detail) return `**$identity.${detail.name}** — ${detail.type}. Declared caller detail; authoring metadata only, not executable until admitted (#600).`;\n }\n const doc =\n contextVariableDocs[variable] ??\n (variable.startsWith('$env') ? contextVariableDocs['$env'] : undefined);\n if (doc) return doc;\n }\n }\n\n // Do not mistake a property/type named optional for the contextual modifier.\n const prefix = line.slice(0, startColumn - 1);\n // Commit to query-parameter context before matching the name and type.\n const followsPropertyType = /^\\s*(?:by|filter)\\s+/.test(prefix)\n ? /^\\s*(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+$/.test(prefix)\n : /^\\s*@?[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+$/.test(prefix);\n const followsQueryType = /^\\s*query\\s+\\w+\\s*=>\\s*(?:observable\\s+)?[\\w.]+(?:\\[\\])?\\s+$/.test(prefix) &&\n !/^\\s*query\\s+\\w+\\s*=>\\s*observable\\s+$/.test(prefix);\n if (word === 'subject') {\n const source = eventAnalysisSource(lines);\n const subjectPrefix = /^\\s*@?[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?(?:\\?|\\s+optional)?(?:\\s+generated)?(?:\\s+identifier)?\\s+$/.test(prefix);\n const ownerChain = enclosingChain(source, fences, lineIndex, indentOf(line));\n if (subjectPrefix && (ownerChain[0] === 'event' || /^produces\\s+event\\s+/.test(enclosingHeaders(source, fences, lineIndex, indentOf(line))[0] ?? ''))) {\n return '**subject** — This event property identifies its one data subject instead of the event source (decision 0008). Required scalar String, Uuid or their concepts, or an Int-backed concept; never pii or secret. Report-only lineage metadata (PLAY0270); no ESM bytes or provider output yet.';\n }\n if (/\\bclaim\\s+\"(?:[^\"\\\\]|\\\\.)*\"\\s+matches\\s+$/.test(prefix) && ownerChain.includes('policy')) return `**subject** — ${keywordDocs.subject}`;\n return null;\n }\n if (word === 'optional' && (followsPropertyType || followsQueryType)) {\n return `**optional** — ${keywordDocs.optional}`;\n }\n\n if (word === 'implementation' || word === 'hint') {\n const chain = enclosingChain(lines, fences, lineIndex, indentOf(line));\n const ruleContext = namedRuleContext(lines, lineIndex, indentOf(line));\n if ((word === 'implementation' && ruleContext === 'rule' && /^\\s*implementation\\s*$/.test(withoutComment(line))) ||\n (word === 'hint' && ruleContext === 'implementation' && /^\\s*hint\\s+\"/.test(line))) {\n return `**${word}** — Command named-rule guidance with at most one file or tagged fence. No payload means pending and fails binding (PLAY0268). Attached predicates keep their existing pure RuleContext contract; reference execution is unsupported, never confirmation.`;\n }\n if (word === 'implementation' && chain[0] === 'handler' && /^\\s*implementation\\s*$/.test(withoutComment(line))) {\n return `**implementation** — ${handlerIntentDocs.implementation}`;\n }\n if (word === 'hint' && chain[0] === 'implementation' && chain[1] === 'handler' && /^\\s*hint\\s+\"/.test(line)) {\n return `**hint** — ${handlerIntentDocs.hint}`;\n }\n }\n\n const symbols = scanDocument(lines);\n const owner = symbols.commands.filter(command => command.line < lineIndex).at(-1);\n const property = owner?.properties.find(property => property.name === word && property.line === lineIndex);\n if (property?.isGenerated || (word === 'generated' && owner?.properties.some(property => property.isGenerated && property.line === lineIndex) && followsPropertyType)) {\n return `**${property?.name ?? 'generated'}** — ${property ? typeReferenceText(propertyTypeReference(property)) + '. ' : ''}Generated value, not a request or form input. ${responseAvailability}`;\n }\n const response = owner?.response;\n if (response?.location.line === lineIndex + 1 && (tokenAt(response.location.column, 'returns') || (response.kind === 'ScalarCommandResponseSyntax' && tokenAt(response.source.location.column, response.source.property)))) {\n const source = response.kind === 'ScalarCommandResponseSyntax' ? owner?.properties.find(property => property.name === response.source.property) : undefined;\n return `**returns**${source ? ` — ${typeReferenceText(propertyTypeReference(source))}` : ' — unnamed record response'}. ${responseAvailability}`;\n }\n if (response?.kind === 'RecordCommandResponseSyntax') {\n const field = response.fields.find(field => field.location.line === lineIndex + 1 && (tokenAt(field.location.column, field.name) || tokenAt(field.source.location.column, field.source.property)));\n if (field) {\n const source = owner?.properties.find(property => property.name === field.source.property);\n const type = field.type ? typeReferenceText(field.type) : source ? typeReferenceText(propertyTypeReference(source)) : 'Unresolved type';\n return `**${field.name}** — ${type}${field.type ? ' (explicit)' : ' (inferred)'} = ${field.source.property}. ${source?.isGenerated ? 'Generated source, not request input. ' : ''}${responseAvailability}`;\n }\n }\n for (const specification of responseAnalysis(lines).specifications.values()) {\n if ((word === 'returns' && specification.thenReturns?.location.line === lineIndex + 1) || (word === 'generated' && specification.when?.generatedValues?.some(value => value.location.line === lineIndex + 1))) return responseAvailability;\n }\n\n const concept = symbols.concepts.find((candidate) => candidate.name === word);\n if (concept) {\n const attributes = concept.attributes.length ? ` ${concept.attributes.join(' ')}` : '';\n const values = concept.enumValues.length\n ? `\\n\\nValues: ${concept.enumValues.map((value, index) => concept.enumNumbers === undefined ? value : `${value} = ${concept.enumNumbers[index]}`).join(', ')}`\n : '';\n const reasons = Object.entries(concept.attributeReasons)\n .map(([attribute, reason]) => `\\n\\n**@${attribute}** — ${reason}`)\n .join('');\n return `\\`\\`\\`screenplay\\nconcept ${concept.name} : ${concept.primitive}${attributes}\\n\\`\\`\\`${reasons}${values}`;\n }\n\n const type = symbols.types.find((candidate) => candidate.name === word);\n if (type) {\n const properties = type.properties\n .map((property) => `${property.name} ${typeReferenceText(propertyTypeReference(property))}`)\n .join('\\n');\n return `\\`\\`\\`screenplay\\ntype ${type.name}\\n${properties}\\n\\`\\`\\``;\n }\n\n const policy = symbols.policies.find((candidate) => candidate.name === word);\n if (policy) {\n const body = policy.requires.length ? policy.requires.join('\\n') : '(custom C#)';\n return `\\`\\`\\`screenplay\\npolicy ${policy.name}\\n${body}\\n\\`\\`\\``;\n }\n\n const event = symbols.events.find((candidate) => candidate.name === word && candidate.line === lineIndex) ??\n symbols.events.filter((candidate) => candidate.name === word)\n .sort((left, right) => (right.generation ?? 1) - (left.generation ?? 1))[0];\n if (event) {\n const properties = event.properties\n .map((property) => `${property.name} ${typeReferenceText(propertyTypeReference(property))}${property.isSubject ? ' subject' : ''}`)\n .join('\\n');\n return `\\`\\`\\`screenplay\\n${event.visibility === 'Public' ? 'public ' : ''}event ${event.name}${event.generation !== undefined ? ` generation ${event.generation}` : ''}${event.origin !== undefined ? ` from ${JSON.stringify(event.origin)}` : ''}\\n${properties}\\n\\`\\`\\``;\n }\n\n const command = symbols.commands.find((candidate) => candidate.name === word);\n if (command && command.properties.length > 0) {\n const properties = command.properties\n .map(\n (property) =>\n `${property.name} ${typeReferenceText(propertyTypeReference(property))}${property.isGenerated ? ' generated' : ''}${property.isIdentifier ? ' identifier' : ''}`,\n )\n .join('\\n');\n return `\\`\\`\\`screenplay\\ncommand ${command.name}\\n${properties}\\n\\`\\`\\`${command.response || command.properties.some(property => property.isGenerated) ? `\\n\\n${responseAvailability}` : ''}`;\n }\n\n // Sub-language keywords take precedence inside their construct.\n const chain = enclosingChain(lines, fences, lineIndex, indentOf(line));\n for (const construct of [line.trim().split(/\\s+/)[0], ...chain]) {\n const subLanguage = getSubLanguage(construct ?? '');\n const doc = subLanguage?.hovers?.[word];\n if (doc) return doc;\n }\n\n if (word === 'reads' && (chain[0] === 'every' || chain[0] === 'at') && chain.includes('reaction')) {\n return '**reads** — Declares a whole view this clock trigger consults: `reads <View>`. Clock triggers take no values, so `by` is unavailable.';\n }\n\n const step = line.trim().match(/^(given|when|then)\\s+(?:no\\s+)?(\\w+)/);\n if (step && step[2] === word && chain[0] === 'specification' && specificationKeywordDocs[word]) {\n return `**${word}** — ${specificationKeywordDocs[word]}`;\n }\n\n if (word === 'id' || word === 'documentation') {\n const source = eventAnalysisSource(lines);\n const inEvent = symbols.events.some(event => directBody(source, fences, event.line, indentOf(source[event.line])).includes(lineIndex));\n const directive = word === 'id' ? /^\\s*id\\s+\"/.test(source[lineIndex]) : /^\\s*documentation\\s*$/.test(source[lineIndex]);\n const supportedOwner = inEvent || (word === 'documentation' && ['module', 'feature', 'slice', 'command', 'readmodel', 'reaction'].includes(chain[0]));\n if (!supportedOwner || !directive || startColumn !== indentOf(line) + 1) return null;\n }\n\n if (word === 'optional' || word === 'generated' || word === 'returns') return null;\n const keywordDoc = keywordDocs[word];\n if (keywordDoc) return `**${word}** — ${keywordDoc}`;\n\n return null;\n}\n"],"mappings":"+nCAsBA,SAAgB,aACZ,EACA,EACA,EACA,EACA,EACA,EACa,CACb,IAAMA,EAASC,EAASC,CAAK,EAC7B,GAAIF,EAAOG,GAAY,OAAO,KAE9B,IAAMC,EAAOF,EAAMC,IAAc,GACjC,GAAIE,EAAY,EAAIC,EAAeF,CAAI,CAAC,CAAC,OAAQ,OAAO,KACxD,IAAIG,EAAW,GACXC,EAAa,GACjB,IAAK,IAAIC,EAAQ,EAAGA,EAAQC,EAAc,EAAG,IACrCN,EAAKK,KAAW,MAAQF,EAAU,IAC7BH,EAAKK,KAAW,KAAO,CAACD,EAAY,EAAW,CAACD,EAChDH,EAAKK,KAAW,KAAO,CAACF,IAAU,EAAa,CAACC,GAE7D,GAAID,GAAYC,EAAY,OAAO,KACnC,IAAMG,EAAWC,GAA0BV,EAAOC,EAAWU,EAAMH,EAAaL,EAAWS,CAAW,EACtG,GAAIH,EAAU,OAAOA,EACrB,IAAMI,EAAWC,GAAoBd,EAAOC,EAAWO,EAAaL,EAAWS,CAAW,EAC1F,GAAIC,EAAU,OAAOA,EAAS,QAC9B,IAAME,EAAeC,EAAahB,EAAOC,EAAWO,EAAaL,EAAWS,CAAW,EACvF,GAAIG,EAAc,OAAOA,EACzB,IAAME,EAAcC,EAAiBlB,EAAOC,EAAWO,EAAaL,EAAWS,CAAW,EAC1F,GAAIK,EAAa,OAAOA,EACxB,IAAME,EAAYC,EAAepB,EAAOC,EAAWO,EAAaL,EAAWS,CAAW,EACtF,GAAIO,EAAW,OAAOA,EACtB,IAAM,SAAW,EAAgB,IAA0B,CACvD,IAAME,EAAQC,GAAU,IAAKA,EAAS,KAAO,KAC7C,OAAOX,IAASY,GAAQf,IAAgBa,GAASlB,IAAckB,EAAQE,EAAK,QAAUrB,EAAK,MAAMmB,EAAQ,EAAGlB,EAAY,CAAC,IAAMoB,CACnI,EACMC,EAAStB,EAAK,OAAOM,EAAc,CAAC,EAC1C,GAAIG,IAAS,iBAAmBc,EAAezB,EAAOF,EAAQG,EAAWyB,EAASxB,CAAI,CAAC,CAAC,CAAC,KAAO,UAAW,MAAO,qEAElH,GAAIuB,EAAezB,EAAOF,EAAQG,EAAWyB,EAASxB,CAAI,CAAC,CAAC,CAAC,KAAO,WAAa,iBAAiB,KAAKA,CAAI,EAAG,CAC1G,IAAMyB,EAAyC,CAC3C,SAAU,2JACV,KAAM,0FACN,OAAQ,iJACR,KAAM,gIACN,OAAQ,oHACR,OAAQ,uGACR,MAAO,+GACP,OAAQ,uHACR,SAAU,2DACV,KAAM,8FACN,QAAS,6CAA8C,OAAQ,6CAA8C,KAAM,6CAA8C,SAAU,sDAC/K,EACA,GAAIA,EAAehB,GAAO,OAAOgB,EAAehB,EACpD,CAEA,IAAMiB,EAAmB,qCAAqC,KAAK1B,CAAI,EACjE2B,EAAiBJ,EAAezB,EAAOF,EAAQG,EAAWyB,EAASxB,CAAI,CAAC,CAAC,CAAC,KAAO,WAAa,kFAAkF,KAAKA,CAAI,EAC/L,GAAK0B,IAAqB,MAAQpB,EAAc,GAAKoB,EAAiB,EAAE,CAAC,OAAS,GAAMC,EAAgB,CACpG,IAAMC,EAAMC,GAAcpB,GAC1B,GAAImB,EAAK,OAAOA,EAChB,GAAI,OAAO,OAAOE,EAAqBrB,CAAI,GAAK,sCAAsC,KAAKT,CAAI,EAAG,MAAO,KAAKS,EAAK,OAAOqB,EAAoBrB,KAC9I,GAAIA,IAAS,UAAW,MAAO,mFAC/B,GAAIA,IAAS,WAAY,MAAO,4FAChC,GAAI,iDAAiD,KAAKT,CAAI,GAAK,CAAC,UAAW,YAAa,QAAQ,CAAC,CAAC,SAASS,CAAI,EAAG,MAAO,KAAKA,EAAK,8BAA8BA,IAAS,UAAY,oBAAsBA,IAAS,YAAc,wBAA0B,mBAAmB,uCACpR,GAAIA,IAAS,QAAS,MAAO,wIACjC,CACA,GAAIa,IAAW,KAAOA,IAAW,IAAK,CAClC,IAAMS,EAAW/B,EAAK,UAAU,EAAGC,EAAY,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,GAAG,GACvE,GAAI8B,EAAU,CACV,GAAIA,EAAS,WAAW,UAAU,EAAG,CACjC,IAAMC,EAASC,EAAenC,EAAOC,EAAWyB,EAASxB,CAAI,CAAC,EACxDkC,EAASH,EAAS,UAAU,CAAkB,EAC9CI,EAAuC,CAAE,OAAQ,qEAAsE,QAAS,kEAAmE,WAAY,uEAAwE,EAC7R,OAAOH,IAAW,IAAA,IAAaG,EAAaD,KAAY,IAAA,GAAY,KAAKH,EAAS,OAAOI,EAAaD,GAAQ,8CAAgD,IAClK,CACA,GAAIH,EAAS,WAAW,YAAY,EAAG,CACnC,IAAMV,EAAOU,EAAS,UAAU,EAAmB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAC1DK,EAASC,EAAiBvC,EAAOY,CAAW,CAAC,CAAC,iBAAiB,KAAK,GAAU0B,EAAO,OAASf,CAAI,EACxG,GAAIe,EAAQ,MAAO,eAAeA,EAAO,KAAK,OAAOA,EAAO,KAAK,yFACrE,CACA,IAAMR,EACFU,EAAoBP,KACnBA,EAAS,WAAW,MAAM,EAAIO,EAAoBC,KAAU,IAAA,IACjE,GAAIX,EAAK,OAAOA,CACpB,CACJ,CAGA,IAAMY,EAASxC,EAAK,MAAM,EAAGM,EAAc,CAAC,EAEtCmC,EAAsB,uBAAuB,KAAKD,CAAM,EACxD,sDAAsD,KAAKA,CAAM,EACjE,wCAAwC,KAAKA,CAAM,EACnDE,EAAmB,+DAA+D,KAAKF,CAAM,GAC/F,CAAC,wCAAwC,KAAKA,CAAM,EACxD,GAAI/B,IAAS,UAAW,CACpB,IAAMkC,EAASC,EAAoB9C,CAAK,EAClC+C,EAAgB,8FAA8F,KAAKL,CAAM,EACzHM,EAAavB,EAAeoB,EAAQ/C,EAAQG,EAAWyB,EAASxB,CAAI,CAAC,EAK3E,OAJI6C,IAAkBC,EAAW,KAAO,SAAW,uBAAuB,KAAKC,EAAiBJ,EAAQ/C,EAAQG,EAAWyB,EAASxB,CAAI,CAAC,CAAC,CAAC,IAAM,EAAE,GACxI,8RAEP,4CAA4C,KAAKwC,CAAM,GAAKM,EAAW,SAAS,QAAQ,EAAU,iBAAiBE,EAAY,UAC5H,IACX,CACA,GAAIvC,IAAS,aAAegC,GAAuBC,GAC/C,MAAO,kBAAkBM,EAAY,WAGzC,GAAIvC,IAAS,kBAAoBA,IAAS,OAAQ,CAC9C,IAAMwC,EAAQ1B,EAAezB,EAAOF,EAAQG,EAAWyB,EAASxB,CAAI,CAAC,EAC/DkD,EAAcC,EAAiBrD,EAAOC,EAAWyB,EAASxB,CAAI,CAAC,EACrE,GAAKS,IAAS,kBAAoByC,IAAgB,QAAU,yBAAyB,KAAKhD,EAAeF,CAAI,CAAC,GACzGS,IAAS,QAAUyC,IAAgB,kBAAoB,eAAe,KAAKlD,CAAI,EAChF,MAAO,KAAKS,EAAK,2PAErB,GAAIA,IAAS,kBAAoBwC,EAAM,KAAO,WAAa,yBAAyB,KAAK/C,EAAeF,CAAI,CAAC,EACzG,MAAO,wBAAwBoD,EAAkB,iBAErD,GAAI3C,IAAS,QAAUwC,EAAM,KAAO,kBAAoBA,EAAM,KAAO,WAAa,eAAe,KAAKjD,CAAI,EACtG,MAAO,cAAcoD,EAAkB,MAE/C,CAEA,IAAMC,EAAUC,GAAaxD,CAAK,EAC5ByD,EAAQF,EAAQ,SAAS,OAAO,GAAWG,EAAQ,KAAOzD,CAAS,CAAC,CAAC,GAAG,EAAE,EAC1E0D,EAAWF,GAAO,WAAW,KAAK,GAAYE,EAAS,OAAShD,GAAQgD,EAAS,OAAS1D,CAAS,EACzG,GAAI0D,GAAU,aAAgBhD,IAAS,aAAe8C,GAAO,WAAW,KAAK,GAAYE,EAAS,aAAeA,EAAS,OAAS1D,CAAS,GAAK0C,EAC7I,MAAO,KAAKgB,GAAU,MAAQ,YAAY,OAAOA,EAAWC,EAAkBC,EAAsBF,CAAQ,CAAC,EAAI,KAAO,GAAG,gDAAgDG,IAE/K,IAAMC,EAAWN,GAAO,SACxB,GAAIM,GAAU,SAAS,OAAS9D,EAAY,IAAM,QAAQ8D,EAAS,SAAS,OAAQ,SAAS,GAAMA,EAAS,OAAS,+BAAiC,QAAQA,EAAS,OAAO,SAAS,OAAQA,EAAS,OAAO,QAAQ,GAAK,CACxN,IAAMlB,EAASkB,EAAS,OAAS,8BAAgCN,GAAO,WAAW,KAAK,GAAYE,EAAS,OAASI,EAAS,OAAO,QAAQ,EAAI,IAAA,GAClJ,MAAO,cAAclB,EAAS,MAAMe,EAAkBC,EAAsBhB,CAAM,CAAC,IAAM,6BAA6B,IAAIiB,GAC9H,CACA,GAAIC,GAAU,OAAS,8BAA+B,CAClD,IAAMC,EAAQD,EAAS,OAAO,KAAK,GAASC,EAAM,SAAS,OAAS/D,EAAY,IAAM,QAAQ+D,EAAM,SAAS,OAAQA,EAAM,IAAI,GAAK,QAAQA,EAAM,OAAO,SAAS,OAAQA,EAAM,OAAO,QAAQ,EAAE,EACjM,GAAIA,EAAO,CACP,IAAMnB,EAASY,GAAO,WAAW,KAAK,GAAYE,EAAS,OAASK,EAAM,OAAO,QAAQ,EACnFC,EAAOD,EAAM,KAAOJ,EAAkBI,EAAM,IAAI,EAAInB,EAASe,EAAkBC,EAAsBhB,CAAM,CAAC,EAAI,kBACtH,MAAO,KAAKmB,EAAM,KAAK,OAAOC,IAAOD,EAAM,KAAO,cAAgB,cAAc,KAAKA,EAAM,OAAO,SAAS,IAAInB,GAAQ,YAAc,wCAA0C,KAAKiB,GACxL,CACJ,CACA,IAAK,IAAMI,KAAiBC,GAAiBnE,CAAK,CAAC,CAAC,eAAe,OAAO,EACtE,GAAKW,IAAS,WAAauD,EAAc,aAAa,SAAS,OAASjE,EAAY,GAAOU,IAAS,aAAeuD,EAAc,MAAM,iBAAiB,KAAK,GAASE,EAAM,SAAS,OAASnE,EAAY,CAAC,EAAI,OAAO6D,EAG1N,IAAMO,EAAUd,EAAQ,SAAS,KAAM,GAAce,EAAU,OAAS3D,CAAI,EAC5E,GAAI0D,EAAS,CACT,IAAME,EAAaF,EAAQ,WAAW,OAAS,IAAIA,EAAQ,WAAW,KAAK,GAAG,IAAM,GAC9EG,EAASH,EAAQ,WAAW,OAC5B,eAAeA,EAAQ,WAAW,KAAK,EAAO,IAAUA,EAAQ,cAAgB,IAAA,GAAYD,EAAQ,GAAGA,EAAM,KAAKC,EAAQ,YAAY9D,IAAQ,CAAC,CAAC,KAAK,IAAI,IACzJ,GACAkE,EAAU,OAAO,QAAQJ,EAAQ,gBAAgB,CAAC,CACnD,KAAK,CAACK,EAAWC,KAAY,UAAUD,EAAU,OAAOC,GAAQ,CAAC,CACjE,KAAK,EAAE,EACZ,MAAO,6BAA6BN,EAAQ,KAAK,KAAKA,EAAQ,YAAYE,EAAW,UAAUE,IAAUD,GAC7G,CAEA,IAAMP,EAAOV,EAAQ,MAAM,KAAM,GAAce,EAAU,OAAS3D,CAAI,EACtE,GAAIsD,EAAM,CACN,IAAMW,EAAaX,EAAK,WACnB,IAAK,GAAa,GAAGN,EAAS,KAAK,GAAGC,EAAkBC,EAAsBF,CAAQ,CAAC,GAAG,CAAC,CAC3F,KAAK;CAAI,EACd,MAAO,0BAA0BM,EAAK,KAAK,IAAIW,EAAW,SAC9D,CAEA,IAAMC,EAAStB,EAAQ,SAAS,KAAM,GAAce,EAAU,OAAS3D,CAAI,EAC3E,GAAIkE,EAAQ,CACR,IAAMC,EAAOD,EAAO,SAAS,OAASA,EAAO,SAAS,KAAK;CAAI,EAAI,cACnE,MAAO,4BAA4BA,EAAO,KAAK,IAAIC,EAAK,SAC5D,CAEA,IAAMC,EAAQxB,EAAQ,OAAO,KAAM,GAAce,EAAU,OAAS3D,GAAQ2D,EAAU,OAASrE,CAAS,GACpGsD,EAAQ,OAAO,OAAQ,GAAce,EAAU,OAAS3D,CAAI,CAAC,CACxD,MAAM,EAAM,KAAWqE,EAAM,YAAc,IAAMC,EAAK,YAAc,EAAE,CAAC,CAAC,GACjF,GAAIF,EAAO,CACP,IAAMH,EAAaG,EAAM,WACpB,IAAK,GAAa,GAAGpB,EAAS,KAAK,GAAGC,EAAkBC,EAAsBF,CAAQ,CAAC,IAAIA,EAAS,UAAY,WAAa,IAAI,CAAC,CAClI,KAAK;CAAI,EACd,MAAO,qBAAqBoB,EAAM,aAAe,SAAW,UAAY,GAAG,QAAQA,EAAM,OAAOA,EAAM,aAAe,IAAA,GAAgD,GAApC,eAAeA,EAAM,eAAoBA,EAAM,SAAW,IAAA,GAAsD,GAA1C,SAAS,KAAK,UAAUA,EAAM,MAAM,IAAS,IAAIH,EAAW,SACvQ,CAEA,IAAMlB,EAAUH,EAAQ,SAAS,KAAM,GAAce,EAAU,OAAS3D,CAAI,EAC5E,GAAI+C,GAAWA,EAAQ,WAAW,OAAS,EAAG,CAC1C,IAAMkB,EAAalB,EAAQ,WACtB,IACI,GACG,GAAGC,EAAS,KAAK,GAAGC,EAAkBC,EAAsBF,CAAQ,CAAC,IAAIA,EAAS,YAAc,aAAe,KAAKA,EAAS,aAAe,cAAgB,IACpK,CAAC,CACA,KAAK;CAAI,EACd,MAAO,6BAA6BD,EAAQ,KAAK,IAAIkB,EAAW,UAAUlB,EAAQ,UAAYA,EAAQ,WAAW,KAAK,GAAYC,EAAS,WAAW,EAAI,OAAOG,IAAyB,IAC9L,CAGA,IAAMX,EAAQ1B,EAAezB,EAAOF,EAAQG,EAAWyB,EAASxB,CAAI,CAAC,EACrE,IAAK,IAAMgF,IAAa,CAAChF,EAAK,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,GAAI,GAAGiD,CAAK,EAAG,CAE7D,IAAMrB,EADcqD,GAAeD,GAAa,EAC1B,CAAC,EAAE,SAASvE,GAClC,GAAImB,EAAK,OAAOA,CACpB,CAEA,GAAInB,IAAS,UAAYwC,EAAM,KAAO,SAAWA,EAAM,KAAO,OAASA,EAAM,SAAS,UAAU,EAC5F,MAAO,wIAGX,IAAMiC,EAAOlF,EAAK,KAAK,CAAC,CAAC,MAAM,sCAAsC,EACrE,GAAIkF,GAAQA,EAAK,KAAOzE,GAAQwC,EAAM,KAAO,iBAAmBkC,EAAyB1E,GACrF,MAAO,KAAKA,EAAK,OAAO0E,EAAyB1E,KAGrD,GAAIA,IAAS,MAAQA,IAAS,gBAAiB,CAC3C,IAAMkC,EAASC,EAAoB9C,CAAK,EAClCsF,EAAU/B,EAAQ,OAAO,KAAK,GAASgC,EAAW1C,EAAQ/C,EAAQiF,EAAM,KAAMrD,EAASmB,EAAOkC,EAAM,KAAK,CAAC,CAAC,CAAC,SAAS9E,CAAS,CAAC,EAC/HuF,EAAY7E,IAAS,KAAO,aAAa,KAAKkC,EAAO5C,EAAU,EAAI,wBAAwB,KAAK4C,EAAO5C,EAAU,EAEvH,GAAI,EADmBqF,GAAY3E,IAAS,iBAAmB,CAAC,SAAU,UAAW,QAAS,UAAW,YAAa,UAAU,CAAC,CAAC,SAASwC,EAAM,EAAE,IAC5H,CAACqC,GAAahF,IAAgBkB,EAASxB,CAAI,EAAI,EAAG,OAAO,IACpF,CAEA,GAAIS,IAAS,YAAcA,IAAS,aAAeA,IAAS,UAAW,OAAO,KAC9E,IAAM8E,EAAavC,EAAYvC,GAG/B,OAFI8E,EAAmB,KAAK9E,EAAK,OAAO8E,IAEjC,IACX"}
1
+ {"version":3,"file":"hover-content.js","names":["fences","fenceMap","lines","lineIndex","line","endColumn","withoutComment","inString","inTemplate","index","startColumn","returned","continuationResponseHover","word","application","reaction","reactionReferenceAt","fixtureHover","exampleHover","sourceHover","eventSourceHover","operation","operationHover","start","column","name","before","enclosingChain","indentOf","generationDocs","complianceHeader","complianceBody","doc","attributeDocs","specialCategoryDocs","variable","branch","refusalContext","member","descriptions","detail","symbolsForBuffer","contextVariableDocs","\"$env\"","prefix","followsPropertyType","followsQueryType","source","eventAnalysisSource","subjectPrefix","ownerChain","enclosingHeaders","keywordDocs","chain","ruleContext","namedRuleContext","handlerIntentDocs","symbols","scanDocument","owner","command","property","typeReferenceText","propertyTypeReference","responseAvailability","response","field","type","specification","responseAnalysis","value","concept","candidate","attributes","values","reasons","attribute","reason","properties","policy","body","event","right","left","construct","getSubLanguage","step","specificationKeywordDocs","inEvent","directBody","directive","keywordDoc"],"sources":["../../hover-content.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { continuationResponseHover } from './continuation-responses';\nimport { reactionReferenceAt } from './reaction-authoring';\nimport { refusalContext } from './refusal-context';\nimport { namedRuleContext } from './named-rule-context';\nimport { eventSourceHover } from './event-source-authoring';\nimport { exampleHover } from './example-authoring';\nimport { operationHover } from './operation-authoring';\nimport { DocumentSymbols, symbolsForBuffer } from './symbols';\nimport { responseAnalysis, responseAvailability } from './response-analysis';\nimport { enclosingChain, enclosingHeaders, fenceMap, indentOf, withoutComment } from './document-context';\nimport { directBody, propertyTypeReference, scanDocument } from './symbols';\nimport { typeReferenceText } from './TypeReferenceSymbol';\nimport { eventAnalysisSource } from './event-analysis-source';\nimport { getSubLanguage } from './sub-language-registry';\nimport { attributeDocs, contextVariableDocs, handlerIntentDocs, keywordDocs, specialCategoryDocs, specificationKeywordDocs } from './keyword-docs';\n\n// Produces the hover markdown for a word at a position, without any editor\n// dependency — the Monaco service and the VSCode extension share this content.\n// Columns are 1-based, matching both editors' word-at-position APIs.\nexport function hoverContent(\n lines: string[],\n lineIndex: number,\n word: string,\n startColumn: number,\n endColumn: number,\n application?: DocumentSymbols,\n): string | null {\n const fences = fenceMap(lines);\n if (fences[lineIndex]) return null;\n\n const line = lines[lineIndex] ?? '';\n if (endColumn - 1 > withoutComment(line).length) return null;\n let inString = false;\n let inTemplate = false;\n for (let index = 0; index < startColumn - 1; index++) {\n if (line[index] === '\\\\' && inString) index++;\n else if (line[index] === '\"' && !inTemplate) inString = !inString;\n else if (line[index] === '`' && !inString) inTemplate = !inTemplate;\n }\n if (inString || inTemplate) return null;\n const returned = continuationResponseHover(lines, lineIndex, word, startColumn, endColumn, application);\n if (returned) return returned;\n const reaction = reactionReferenceAt(lines, lineIndex, startColumn, endColumn, application);\n if (reaction) return reaction.content;\n const fixtureHover = exampleHover(lines, lineIndex, startColumn, endColumn, application);\n if (fixtureHover) return fixtureHover;\n const sourceHover = eventSourceHover(lines, lineIndex, startColumn, endColumn, application);\n if (sourceHover) return sourceHover;\n const operation = operationHover(lines, lineIndex, startColumn, endColumn, application);\n if (operation) return operation;\n const tokenAt = (column: number, name: string): boolean => {\n const start = column + (line[column - 1] === '@' ? 1 : 0);\n return word === name && startColumn === start && endColumn === start + name.length && line.slice(start - 1, endColumn - 1) === name;\n };\n const before = line.charAt(startColumn - 2);\n if (word === 'authorization' && enclosingChain(lines, fences, lineIndex, indentOf(line))[0] === 'purpose') return 'A quoted authorization in law for criminal-offence data (Art. 10).';\n\n if (enclosingChain(lines, fences, lineIndex, indentOf(line))[0] === 'concept' && /^\\s*generate\\b/.test(line)) {\n const generationDocs: Record<string, string> = {\n generate: 'The concept declares how; a command property declares generated. ESM v15 checks fixture shape and guards generated event sources against existing facts.',\n uuid: 'Random UUID v4, 122 random bits; about 3.27 × 10^17 values at 1% collision probability.',\n uuidv7: 'Time-ordered UUID v7, 74 random bits; about 1.95 × 10^10 values at 1% collision probability. Exposes time; not monotonic within a millisecond.',\n ulid: '26 Crockford base32 characters (uppercase by default), 80 random bits; about 1.56 × 10^11 values at 1% collision probability.',\n typeid: 'TypeID 0.3: lowercase UUIDv7 base32 with a 0..63-character prefix. 74 random bits; empty prefix has no separator.',\n nanoid: 'Default 21 characters over 64 symbols: 126 random bits. Custom entropy = size × log2(alphabet size).',\n bytes: '8 × count random bits; base64url, hex or base32 without padding. RFC 4648 unused trailing bits must be zero.',\n prefix: 'Printable ASCII prefix, at most 32 characters. UUID prefixes require a String concept; TypeID uses its own argument.',\n alphabet: 'NanoID only: 2..256 distinct printable ASCII characters.',\n case: 'lower or upper for String UUIDs, ULID, hex/base32 bytes. Never base64url, NanoID or TypeID.',\n pattern: 'Parsed, not yet executable (#616 phase 3).', random: 'Parsed, not yet executable (#616 phase 3).', rule: 'Parsed, not yet executable (#616 phase 3).', sequence: 'Reserved; binding refuses it until #619 is admitted.',\n };\n if (generationDocs[word]) return generationDocs[word];\n }\n\n const complianceHeader = /^\\s*concept\\s+[^\\s:]+\\s*:\\s*\\w+\\s+/.exec(line);\n const complianceBody = enclosingChain(lines, fences, lineIndex, indentOf(line))[0] === 'concept' && /^\\s*(?:@?pii|personal|@?sensitive|secret)\\s+(?:reason|scope|special|criminal)\\b/.test(line);\n if ((complianceHeader !== null && startColumn - 1 >= complianceHeader[0].length - 1) || complianceBody) {\n const doc = attributeDocs[word];\n if (doc) return doc;\n if (Object.hasOwn(specialCategoryDocs, word) && /^\\s*(?:@?pii|personal)\\s+special\\s+/.test(line)) return `**${word}** — ${specialCategoryDocs[word]}`;\n if (word === 'special') return 'GDPR Art. 9(1) special category; requires pii. At most one category per concept.';\n if (word === 'criminal') return 'Personal data relating to criminal convictions and offenses (GDPR Art. 10); requires pii.';\n if (/^\\s*(?:secret|sensitive|@sensitive)\\s+scope\\s+/.test(line) && ['subject', 'namespace', 'global'].includes(word)) return `**${word}** — Secret encryption scope${word === 'subject' ? ' per data subject' : word === 'namespace' ? ' per tenant namespace' : ' shared globally'}. Not an event-property subject role.`;\n if (word === 'scope') return 'Secret encryption scope: subject, namespace or global. Omitted scope keeps Chronicle’s Subject default; pii secret renders only [PII].';\n }\n if (before === '$' || before === '.') {\n const variable = line.substring(0, endColumn - 1).match(/\\$[\\w.]*$/)?.[0];\n if (variable) {\n if (variable.startsWith('$refusal')) {\n const branch = refusalContext(lines, lineIndex, indentOf(line));\n const member = variable.substring('$refusal.'.length);\n const descriptions: Record<string, string> = { reason: 'Refusal kind as a String: validation, constraint or authorization.', message: 'Messages of the classified kind joined with a newline in result order, verbatim including unresolved $strings keys; authorization uses its denial reason.', constraint: 'First violated constraint name in result order as a String, only in a by constraint branch.' };\n return branch !== undefined && descriptions[member] !== undefined ? `**${variable}** — ${descriptions[member]} Executable from ESM v19 in branch event mappings.` : null;\n }\n if (variable.startsWith('$identity.')) {\n const name = variable.substring('$identity.'.length).split('.')[0];\n const detail = symbolsForBuffer(lines, application).identityDetails?.find(detail => detail.name === name);\n if (detail) return `**$identity.${detail.name}** — ${detail.type}. Declared caller detail; authoring metadata only, not executable until admitted (#600).`;\n }\n const doc =\n contextVariableDocs[variable] ??\n (variable.startsWith('$env') ? contextVariableDocs['$env'] : undefined);\n if (doc) return doc;\n }\n }\n\n // Do not mistake a property/type named optional for the contextual modifier.\n const prefix = line.slice(0, startColumn - 1);\n // Commit to query-parameter context before matching the name and type.\n const followsPropertyType = /^\\s*(?:by|filter)\\s+/.test(prefix)\n ? /^\\s*(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+$/.test(prefix)\n : /^\\s*@?[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+$/.test(prefix);\n const followsQueryType = /^\\s*query\\s+\\w+\\s*=>\\s*(?:observable\\s+)?[\\w.]+(?:\\[\\])?\\s+$/.test(prefix) &&\n !/^\\s*query\\s+\\w+\\s*=>\\s*observable\\s+$/.test(prefix);\n if (word === 'subject') {\n const source = eventAnalysisSource(lines);\n const subjectPrefix = /^\\s*@?[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?(?:\\?|\\s+optional)?(?:\\s+generated)?(?:\\s+identifier)?\\s+$/.test(prefix);\n const ownerChain = enclosingChain(source, fences, lineIndex, indentOf(line));\n if (subjectPrefix && (ownerChain[0] === 'event' || /^produces\\s+event\\s+/.test(enclosingHeaders(source, fences, lineIndex, indentOf(line))[0] ?? ''))) {\n return '**subject** — This event property identifies its one data subject instead of the event source (decision 0008). Required scalar String, Uuid or their concepts, or an Int-backed concept; never pii or secret. Report-only lineage metadata (PLAY0270); no ESM bytes or provider output yet.';\n }\n if (/\\bclaim\\s+\"(?:[^\"\\\\]|\\\\.)*\"\\s+matches\\s+$/.test(prefix) && ownerChain.includes('policy')) return `**subject** — ${keywordDocs.subject}`;\n return null;\n }\n if (word === 'optional' && (followsPropertyType || followsQueryType)) {\n return `**optional** — ${keywordDocs.optional}`;\n }\n\n if (word === 'implementation' || word === 'hint') {\n const chain = enclosingChain(lines, fences, lineIndex, indentOf(line));\n const ruleContext = namedRuleContext(lines, lineIndex, indentOf(line));\n if ((word === 'implementation' && ruleContext === 'rule' && /^\\s*implementation\\s*$/.test(withoutComment(line))) ||\n (word === 'hint' && ruleContext === 'implementation' && /^\\s*hint\\s+\"/.test(line))) {\n return `**${word}** — Command named-rule guidance with at most one file or tagged fence. No payload means pending and fails binding (PLAY0268). Attached predicates keep their existing pure RuleContext contract; reference execution is unsupported, never confirmation.`;\n }\n if (word === 'implementation' && chain[0] === 'handler' && /^\\s*implementation\\s*$/.test(withoutComment(line))) {\n return `**implementation** — ${handlerIntentDocs.implementation}`;\n }\n if (word === 'hint' && chain[0] === 'implementation' && chain[1] === 'handler' && /^\\s*hint\\s+\"/.test(line)) {\n return `**hint** — ${handlerIntentDocs.hint}`;\n }\n }\n\n const symbols = scanDocument(lines);\n const owner = symbols.commands.filter(command => command.line < lineIndex).at(-1);\n const property = owner?.properties.find(property => property.name === word && property.line === lineIndex);\n if (property?.isGenerated || (word === 'generated' && owner?.properties.some(property => property.isGenerated && property.line === lineIndex) && followsPropertyType)) {\n return `**${property?.name ?? 'generated'}** — ${property ? typeReferenceText(propertyTypeReference(property)) + '. ' : ''}Generated value, not a request or form input. ${responseAvailability}`;\n }\n const response = owner?.response;\n if (response?.location.line === lineIndex + 1 && (tokenAt(response.location.column, 'returns') || (response.kind === 'ScalarCommandResponseSyntax' && tokenAt(response.source.location.column, response.source.property)))) {\n const source = response.kind === 'ScalarCommandResponseSyntax' ? owner?.properties.find(property => property.name === response.source.property) : undefined;\n return `**returns**${source ? ` — ${typeReferenceText(propertyTypeReference(source))}` : ' — unnamed record response'}. ${responseAvailability}`;\n }\n if (response?.kind === 'RecordCommandResponseSyntax') {\n const field = response.fields.find(field => field.location.line === lineIndex + 1 && (tokenAt(field.location.column, field.name) || tokenAt(field.source.location.column, field.source.property)));\n if (field) {\n const source = owner?.properties.find(property => property.name === field.source.property);\n const type = field.type ? typeReferenceText(field.type) : source ? typeReferenceText(propertyTypeReference(source)) : 'Unresolved type';\n return `**${field.name}** — ${type}${field.type ? ' (explicit)' : ' (inferred)'} = ${field.source.property}. ${source?.isGenerated ? 'Generated source, not request input. ' : ''}${responseAvailability}`;\n }\n }\n for (const specification of responseAnalysis(lines).specifications.values()) {\n if ((word === 'returns' && specification.thenReturns?.location.line === lineIndex + 1) || (word === 'generated' && specification.when?.generatedValues?.some(value => value.location.line === lineIndex + 1))) return responseAvailability;\n }\n\n const concept = symbols.concepts.find((candidate) => candidate.name === word);\n if (concept) {\n const attributes = concept.attributes.length ? ` ${concept.attributes.join(' ')}` : '';\n const values = concept.enumValues.length\n ? `\\n\\nValues: ${concept.enumValues.map((value, index) => concept.enumNumbers === undefined ? value : `${value} = ${concept.enumNumbers[index]}`).join(', ')}`\n : '';\n const reasons = Object.entries(concept.attributeReasons)\n .map(([attribute, reason]) => `\\n\\n**@${attribute}** — ${reason}`)\n .join('');\n return `\\`\\`\\`screenplay\\nconcept ${concept.name} : ${concept.primitive}${attributes}\\n\\`\\`\\`${reasons}${values}`;\n }\n\n const type = symbols.types.find((candidate) => candidate.name === word);\n if (type) {\n const properties = type.properties\n .map((property) => `${property.name} ${typeReferenceText(propertyTypeReference(property))}`)\n .join('\\n');\n return `\\`\\`\\`screenplay\\ntype ${type.name}\\n${properties}\\n\\`\\`\\``;\n }\n\n const policy = symbols.policies.find((candidate) => candidate.name === word);\n if (policy) {\n const body = policy.requires.length ? policy.requires.join('\\n') : '(custom C#)';\n return `\\`\\`\\`screenplay\\npolicy ${policy.name}\\n${body}\\n\\`\\`\\``;\n }\n\n const event = symbols.events.find((candidate) => candidate.name === word && candidate.line === lineIndex) ??\n symbols.events.filter((candidate) => candidate.name === word)\n .sort((left, right) => (right.generation ?? 1) - (left.generation ?? 1))[0];\n if (event) {\n const properties = event.properties\n .map((property) => `${property.name} ${typeReferenceText(propertyTypeReference(property))}${property.isSubject ? ' subject' : ''}`)\n .join('\\n');\n return `\\`\\`\\`screenplay\\n${event.visibility === 'Public' ? 'public ' : ''}event ${event.name}${event.generation !== undefined ? ` generation ${event.generation}` : ''}${event.origin !== undefined ? ` from ${JSON.stringify(event.origin)}` : ''}\\n${properties}\\n\\`\\`\\``;\n }\n\n const command = symbols.commands.find((candidate) => candidate.name === word);\n if (command && command.properties.length > 0) {\n const properties = command.properties\n .map(\n (property) =>\n `${property.name} ${typeReferenceText(propertyTypeReference(property))}${property.isGenerated ? ' generated' : ''}${property.isIdentifier ? ' identifier' : ''}`,\n )\n .join('\\n');\n return `\\`\\`\\`screenplay\\ncommand ${command.name}\\n${properties}\\n\\`\\`\\`${command.response || command.properties.some(property => property.isGenerated) ? `\\n\\n${responseAvailability}` : ''}`;\n }\n\n // Sub-language keywords take precedence inside their construct.\n const chain = enclosingChain(lines, fences, lineIndex, indentOf(line));\n for (const construct of [line.trim().split(/\\s+/)[0], ...chain]) {\n const subLanguage = getSubLanguage(construct ?? '');\n const doc = subLanguage?.hovers?.[word];\n if (doc) return doc;\n }\n\n if (word === 'reads' && (chain[0] === 'every' || chain[0] === 'at') && chain.includes('reaction')) {\n return '**reads** — Declares a whole view this clock trigger consults: `reads <View>`. Clock triggers take no values, so `by` is unavailable.';\n }\n\n const step = line.trim().match(/^(given|when|then)\\s+(?:no\\s+)?(\\w+)/);\n if (step && step[2] === word && chain[0] === 'specification' && specificationKeywordDocs[word]) {\n return `**${word}** — ${specificationKeywordDocs[word]}`;\n }\n\n if (word === 'id' || word === 'documentation') {\n const source = eventAnalysisSource(lines);\n const inEvent = symbols.events.some(event => directBody(source, fences, event.line, indentOf(source[event.line])).includes(lineIndex));\n const directive = word === 'id' ? /^\\s*id\\s+\"/.test(source[lineIndex]) : /^\\s*documentation\\s*$/.test(source[lineIndex]);\n const supportedOwner = inEvent || (word === 'documentation' && ['module', 'feature', 'slice', 'command', 'readmodel', 'reaction'].includes(chain[0]));\n if (!supportedOwner || !directive || startColumn !== indentOf(line) + 1) return null;\n }\n\n if (word === 'optional' || word === 'generated' || word === 'returns') return null;\n const keywordDoc = keywordDocs[word];\n if (keywordDoc) return `**${word}** — ${keywordDoc}`;\n\n return null;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"./_virtual/_virtual/_rolldown/runtime.js";import{eventContextPaths as e}from"./event-context-catalog.js";import"./event-context.js";const t={implementation:`Handler-only intent with ordered hints and at most one file or tagged fence. No payload means pending. Handler execution is unsupported; this is not confirmation.`,hint:`One nonblank quoted implementation hint. Order and decoded text are retained; hints do not execute or confirm code.`},n={parameter:`A typed value declared by a specification table, or an argument of a named behavior. Table types are required; every case supplies each parameter exactly once.`,case:`One named concrete row of a specification table, expanded as <Specification>_<Case>. Use case.<parameter> for a whole step value.`,example:"One typed, possibly partial fixture: `example <Name> : <EventOrCommandOrReadModel>`. Use its name in a matching specification step; assignments override example values without changing matching or supplying defaults. Event examples may carry stream or no stream; a step replaces that route as a whole.",domain:`The domain the file belongs to — optional, at most one per file, before everything else.`,import:'Imports a type from another module by its qualified name — `import Module.Type` — making it available by its short name; or, quoted, other `.play` files by path or glob — `import "Orders/**/*.play"`, relative to this file\'s folder. Written inside a module or feature, a file import places the imported files there: their top level is that module\'s or feature\'s body. `import Module.Event from "origin"` is instead public contract metadata with an opaque origin; executable binding refuses it with PLAY0268.',concept:`A formalized value type wrapping a primitive. Bare pii and secret markers travel with every usage, with optional concept notes and qualifiers.`,type:`A composite value type — a named shape built from several properties, referenced by events, commands and other types the same way a concept is.`,reason:`A free-text concept note, not a lawful basis. Written as pii reason "..." or secret reason "..."; migration preserves it verbatim.`,optional:"Allows a value to be absent. Write it after the type: `note String optional` or `lines InvoiceLine[] optional`. The collection itself may be absent; its items keep their declared type.",identifier:`Marks the command property a runtime resolves the event source id from. At most one per command; without it a new Uuid is generated.`,policy:`A named authorization rule referenced by commands and queries. Multiple policies AND together.`,purpose:`A report-only processing declaration (GDPR Art. 30), referenced on modules, features and slices. Coverage is their union, not an authorization gate. Generated declarations are not legal advice.`,basis:`One declared Art. 6(1) basis: consent, contract, legalObligation, vitalInterests, publicTask or legitimateInterests; an optional quoted reference may follow.`,interest:`The legitimate-interest statement for basis legitimateInterests (Art. 13(1)(d)).`,condition:`One Art. 9(2) processing condition, optionally followed by a quoted reference.`,subjects:`Comma-separated categories of data subjects, as open identifiers.`,retention:`Declared retention period or criteria, not enforced by the model or Chronicle.`,recipient:`A quoted recipient category; repeatable on a purpose.`,transfer:`A declared destination followed by safeguard and quoted safeguards; repeatable.`,safeguard:`The declared safeguard accompanying a third-country transfer.`,erasure:`An erasure exception under Art. 17(3); Chronicle crypto-shredding remains per subject, not per purpose.`,exception:`One declared Art. 17(3) exception: expression, legalObligation, publicTask, publicHealth, archiving or legalClaims.`,persona:`A named role interacting with the application, with an optional description and its associated policies.`,identity:"Declares typed additional caller details from a claim, a keyed single-result query, inline code or a file. Authoring metadata only; executable use of `$identity.<detail>` reports PLAY0268 until admitted (#600).",authentication:`Declares the identity providers of the application — at most one block per file.`,provider:"A named identity provider within `authentication`, with free-form `name value` settings.",description:"A human-readable description, including the rule or case a specification witnesses, as a quoted single line or a fenced ```text block for multiple lines.",depends:"Declares `depends on <Name>` on a module or feature. This opts only that container into checking counted explicit references against its own declarations; it does not change executable bytes.",module:`The top-level namespace — maps to a bounded context.`,layout:`A reusable screen template with named slots.`,template:`Declares the named slots of a layout.`,feature:`A vertical slice grouping. Features nest arbitrarily deep.`,slice:`The atomic unit of behavior, aligned with Event Modeling. Has a type and a name.`,public:`Marks an event as a public contract. An event with from "origin" is also public. Origin is opaque, not a path or declaration reference. Public events and origins are admitted by executable semantic model (ESM) v9.`,direction:`Declare direction inbound or direction outbound once inside a Translate slice. Admitted by executable semantic model (ESM) v9; a Translate slice that uses public events must declare it (PLAY0614).`,inbound:`Inbound Translate direction metadata. No transport or delivery guarantee is implied.`,outbound:`Outbound Translate direction metadata. No transport or delivery guarantee is implied.`,event:"An immutable, past-tense fact. Declare it in a slice or inline with `produces event <Name>` in a command. Inline properties are typed mappings; inline tags belong to the event type.",documentation:"Authoring-only reasoning on a module, feature, slice, command, event, read model or reaction in one nonempty fenced ```markdown block. It does not change executable model bytes.",id:`Preserves the previous persisted event name after a rename. Leave absent on new events; repeating the current name is redundant.`,command:`An imperative intent. Declares authorization, validation, and what events it produces — declaratively, or via a full handler.`,query:`A read-side entry point mapping to a return type, with an optional description, parameters and performer.`,observable:"Qualifies a query return type as a live read — `query <Name> => observable <ReadModel>` keeps pushing as the read model changes, instead of answering once.",performer:"The code that performs a query — a `file <Path>` reference or an inline `csharp`/`sql` block. The query's counterpart to a command handler.",from:"On a reaction or reducer, `from Source[.Stream]` observes only matching routed facts. It does not filter stream ids. Admitted by ESM v10. On a query parameter, fills it from the query context instead of the caller, as in `filter tenantId TenantId from $context.tenant`.",projection:`Declares how events project into a read model, using the embedded Projection Declaration Language (PDL).`,capture:`Converts external data into events, using the embedded Change Data Capture Language (CDL).`,reaction:"Behavior that runs when something happens. Lives inside Automation slices. A trigger with no body states intent on its own — `file`/code is optional realization metadata.",runs:'`runs as system [role "Role" and role "Role"]` declares the identity for every returned or invoked command of a reaction, not imperative pipeline calls. Admitted by released ESM v10; claims are unknown for this identity. Clock and application triggers have no Stage realization yet.',trigger:`Declares a kind of occurrence a reaction can respond to, and the values it hands the reaction. What makes one occur belongs to whoever provides it, never to the compiler.`,where:`Narrows which occurrences actually run the reaction.`,contains:`Text comparison — true when the left string holds the right one anywhere.`,every:"Runs a reaction on an interval — `every 15 minutes`, `every 1 day`.",refused:"Ordered invocation refusal branch: first match wins. Bare `on refused` covers validation and constraints, not authorization. Syntax-only, not yet executable (PLAY0268).",acknowledge:`A refusal branch acknowledges alone, or produces events instead. Syntax-only, not yet executable (PLAY0268).`,validation:"In `on refused by validation`, selects property, concept and require refusals. Syntax-only, not yet executable (PLAY0268).",authorization:"In `on refused by authorization`, explicitly selects unauthorized results, never Unsupported. Syntax-only, not yet executable (PLAY0268).",redelivered:"`when redelivered <Event> to <Reaction>` selects exactly one effective given occurrence by optional for, stated values and stream or no stream, delivering that event again to one named reaction without appending it again. Executable from ESM v17.",invokes:`A command a reaction hands on. A command is asked for, not produced — it may still be rejected.`,screen:`A UI declaration. Supports intent, structure, and layout-with-code levels, or a full file reference.`,constraint:`A server-side rule enforced in the Chronicle kernel before events are committed.`,authorize:`References the policies that must all pass for the construct to execute.`,validate:"Declarative validation rules, or `validate` followed by ```csharp for imperative rules — on commands and concepts.",produces:"References a declared event with `produces <Name>`, or declares one inline with `produces event <Name>`. An inline omitted `for` uses the command identifier only when all destinations are the same source; legacy plain omission allocates an identity.",reads:"Declares a view consulted by a command or reaction trigger: `reads <View> [as <alias>] [by <value>]`. A reaction `by` names a value taken by its trigger; clock triggers cannot use `by`. A child by block supplies composite key parts by name, using part = source. Repeated views require unique aliases. Runtime binding is not yet supported for command or reaction reads.",as:"Names an instance of a view in a command or reaction trigger reads declaration, for example `reads Account as source by sourceId`.",handler:"A fully imperative command implementation — a `file <Path>` reference or an inline `csharp` block, instead of `produces`.",when:"Guards a produced event or a capture append with a condition. In a labeled screen action, `when item.<field> == <literal> execute <Command>` selects the first matching command. Inside on click, double click or select, block-form `when <condition>` selects one whole action list at gesture time.",rule:"Names a predicate. Bare, it states that a constraint exists without expressing what it computes — nothing resolves the name. Optionally followed by an indented `file <Path>` reference or inline `csharp` block giving it a body.",require:'A policy condition: `authenticated`, `role "..."`, or `claim "..." matches ...`. Unary `not` negates a condition or group; precedence is not, and, or.',authenticated:`Requires an authenticated caller.`,role:`Requires the caller to have the given role.`,claim:`Requires a claim on the caller to match a subject or value.`,subject:"In policy `matches subject`, the identifier of the thing acted on, not the caller. The caller is `$context.causedBy.subject`.",data:`Binds a read model to a screen through a query.`,action:'Makes a command available on a screen. `action "Label"` declares one button with ordered `when … execute` alternatives over the nearest data item or selected row. No subject hides it; commands still enforce authorization and validation.',otherwise:"The final fallback of a guarded action: `otherwise hidden` or `otherwise execute <Command>`. In an item interaction, bare `otherwise` opens a fallback action list. No subject runs nothing, including fallback; authorization never falls through.",hidden:`Hides a guarded action when no condition matches. Without a subject the action is always hidden, even with an execute fallback.`,execute:"Executes a command. A guarded screen action selects it by the first matching condition; explicit `with … from` bindings precede same-name item fields, its declared form and renderer input.",navigate:"Navigates to a screen, optionally passing a parameter with `by`.",section:`A named structural section of a screen.`,table:`A table widget over a read model or child collection.`,summary:`A summary widget showing labeled fields.`,column:`A table column bound to a property.`,field:`A summary field bound to a property.`,title:`The display title of a screen or section.`,label:`The display label of an action, column, or field.`,unique:"A uniqueness constraint — `unique <property> on <EventType>` or `unique event <EventType>`.",concurrency:"The concurrency scope enforced when the command appends events — dimensions: `eventSource`, `sourceType`, `streamType`, `streamId`, `events`.",eventSource:`Concurrency dimension — scope the check to the event source id of the command.`,sourceType:`Concurrency dimension — scope the check to an event source type.`,streamType:`Concurrency dimension — scope the check to an event stream type.`,streamId:`Concurrency dimension — scope the check to an event stream id.`,tag:"Attaches a tag to appended events — a static identifier or string, or a `$context.` expression resolved at append time.",seed:`Declares events to seed into the event store per event source id — multiple blocks accumulate.`,for:"Names the event source of a production or seed group. Inside `produces event`, omission uses the command identifier unless another production targets a different source.",readmodel:"Declares a read model — its name and properties — in a slice, or, in a specification, read model state: `given readmodel` establishes it, `then readmodel` asserts it, `then no readmodel <View> for <key>` asserts keyed absence.",reducer:"Builds a read model from events with imperative code — `reducer <Name> => <ReadModel>` with an `on <EventType>` rule per event. Use it when a projection cannot express the transition.",specification:`Given/when/then acceptance criteria for a slice: prior events and state, the command, query or appended event under test, and the events, state, results, errors or denials that follow.`,dialog:"A dialog opened over the shell, or with `dialog template` a reusable dialog shape.",form:"A form bound to a command — `form <Name> for <Command>` with a `field` per input.",contribute:"Contributes entries to a slot of the shell — `contribute to Navigation` with `navigate to`, `label` and `order`.",theme:`A named theme and the component packages it is compatible with.`,ui:"A UI profile — `ui profile <Name>` binds a target platform and size to a layout, theme and packages.",behavior:"A named interaction wiring of `on <interaction>` handlers, attached to a screen, form or dialog with `uses`.",system:`An application-scoped external system that operations use.`,eventsource:`An application-owned event source with nested streams.`,operation:`A reusable operation intent that uses one external system.`,no:"A keyed absence assertion: `then no readmodel <View> for <key>`.",arguments:"The values supplied to a query asserted by `then query`.",result:"One expected result - `then result [exactly]` after `when query`, or a `result` block inside `then query`. Repeat it to assert several results in authored order.",clock:'The instant a specification happens at - `given clock "2026-10-05T08:00:00Z"` fixes when everything occurs; `when clock "<instant>"` is the clock reaching it, as the action.',exactly:"Requires every property to match, rather than only the ones asserted - on `then readmodel`, `then query` and `then result`.",file:`Delegates the implementation to an external file; the Screenplay contract stays visible.`,key:`Trailing modifier on a required top-level read-model property. Explicit keys replace inference. Composite keys remain authoring-only (PLAY0268, #599).`,stream:`On a command event production, replaces the whole command route for that event. Other productions keep the command route. Admitted by ESM v10.`,by:`Introduces one identifying parameter or a block of at least two named key parts. Reads use part = source; queries use part Type.`,via:`Connects screen data to the query that supplies it.`,filter:`An optional query filter parameter.`,on:"The event a constraint applies to, the day a schedule narrows to, or a widget interaction such as `on row-click`.",message:`The validation message reported when the rule fails.`,matches:"Matches a value against a regular expression or a named pattern such as `email`.",all:`Applies a comparison to every element of a collection.`,max:`Maximum length or value.`,min:`Minimum length or value.`,length:`Constrains the exact length of a value.`,today:`The current date.`,empty:"Used with `not empty` — text needs a non-whitespace character; null, empty and whitespace-only text fail. Unicode White_Space is U+0009–U+000D, U+0020, U+0085, U+00A0, U+1680, U+2000–U+200A, U+2028, U+2029, U+202F, U+205F and U+3000 (not U+FEFF). Collections need at least one element. Applies to concept and command rules in every ESM version; no trimming. Identity text is unchanged: whitespace is a value.",not:"Negates a validation condition, as in `not empty`.",and:`Both conditions must hold.`,or:`Either condition may hold.`,csharp:"An inline C# block whose opening fence is ```csharp.",sql:`An inline SQL block between triple backticks — a query performer written against a relational store.`,typescript:`An inline TypeScript block between triple backticks.`,react:"An inline React/TSX block; receives the surrounding data contract as `Props`.",html:`An inline static HTML block.`,StateChange:`Slice type — a command → events flow; something that changes the system.`,StateView:`Slice type — a query + projection + screen; something that reads the system.`,Automation:`Slice type — a reaction or reducer; something that runs when something happens.`,Translate:`Slice type — a capture; converts external data into events.`,Uuid:`Primitive type — a universally unique identifier.`,String:`Primitive type — a string of characters.`,Int:`Primitive type — an integer number.`,Decimal:`Primitive type — a decimal number.`,Bool:`Primitive type — true or false.`,Date:`Primitive type — a date without time.`,DateTime:`Primitive type — a date and time.`,Enum:`An enumeration concept with named members. Members may all declare unique int32 numbers (draft = 1) or all omit them (zero-based positions). Never renumber or reuse a published number. Non-positional numbers select executable model (ESM) v12; consumers must explicitly admit v12. Specifications still name members.`},r={parameter:"Declares a required typed case value: `parameter <name> <Type>`. Every case assigns it once. `optional` permits literal null but supplies no default.",case:"One named complete row of a specification table. `case.<parameter>` substitutes a whole value after example overrides; each row runs as `<Specification>_<Case>`.",caller:"`given caller` states an explicit identity; `given caller as <Persona>` synthesizes an authenticated deterministic witness of the persona, with no body. Leftmost buildable policy alternatives are significant.",clock:n.clock,redelivered:n.redelivered,trigger:"`when trigger <Trigger>` - an application trigger fires, as the action, with the values on the lines beneath it.",capture:"`given capture <Capture>` - a record the capture's source held before; `when capture <Capture>` - the record it sees now, as the action. The fields go on the lines beneath.",query:"`when query <Query>` - the query is performed, as the action, with its arguments on the lines beneath; assert what it returns with `then result` or `then no result`. `then query` instead asserts a query after another action.",events:"`then no events` - asserts the action appended no events, also after `when append`, where it means no reaction appended anything. Executable from ESM v17. Cannot accompany event, event-order, error or denial expectations.",result:"`then result [exactly]` - one result the query performed by `when query` returns, in order; `then no result` - it returns nothing."},i={pii:`personal data (GDPR Art. 4(1)); renders Chronicle [PII]. Bare suffix marker; @pii is deprecated (PLAY0565). Selects executable model (ESM) v13; consumers must explicitly admit it. Cannot classify identity or enum concepts. An event with personal values and an explicit subject mark refuses binding (PLAY0268) until lineage is admitted.`,personal:`Alias of pii: personal data (GDPR Art. 4(1)); renders Chronicle [PII]. No diagnostic; canonical printing writes pii. Selects executable model (ESM) v13, like pii.`,secret:`Operational secret, not personal data: encrypted at rest without erasure and withheld from causation. Provider mapping: [Encrypted] + [NotAudited], or [PII] only with pii. Selects executable model (ESM) v13; reference outcomes are unchanged. Cannot classify identity (PLAY0515) or enum concepts. Explicit scope is omitted next to pii. An event combining secret scope subject with an explicit subject mark refuses binding (PLAY0268).`,sensitive:`Deprecated spelling of secret (PLAY0565); repair to bare secret. Operational secret, not GDPR Art. 9 special-category data.`},a={"$context.occurred":`When the command or query was received.`,"$context.tenant":`The tenant the command or query is executing for.`,"$context.command":"The command being handled, shaped by its `command` declaration.","$context.arguments":`The arguments of the query being performed.`,"$context.causedBy":"The identity that caused the command or query — `subject`, `name`, `userName`.","$context.causedBy.subject":`The subject of the identity that caused the command or query.`,"$context.causedBy.name":`The display name of the identity that caused the command or query.`,"$context.causedBy.userName":`The user name of the identity that caused the command or query.`,"$context.causation":"What caused the command or query — `type`, `occurred`, `properties`.","$context.causation.type":`What caused the command or query — a command, a reactor, a schedule.`,$identity:"The caller — token built-ins `id`, `name`, `userName`, `isAuthenticated`, `roles`, `claims`, plus declared identity details. Built-ins are equivalent to `$context.identity`; details are authoring-only until admitted (#600).","$identity.id":"The identifier of the caller from the auth token; equivalent to `$context.identity.id`.","$identity.name":"The display name of the caller; equivalent to `$context.identity.name`.","$identity.userName":"The user name of the caller; equivalent to `$context.identity.userName`.","$identity.isAuthenticated":`Whether the caller is authenticated.`,"$identity.roles":`The roles the caller holds.`,"$identity.claims":"The claims the caller carries — `$identity.claims.<name>` reads one.","$context.identity":"The caller a decision is made about — `id`, `name`, `userName`, `isAuthenticated`, `roles`, `claims`.","$context.identity.id":`The identifier of the caller from the auth token.`,"$context.identity.name":`The display name of the caller.`,"$context.identity.userName":`The user name of the caller.`,"$context.identity.isAuthenticated":`Whether the caller is authenticated.`,"$context.identity.roles":`The roles the caller holds.`,"$context.identity.claims":"The claims the caller carries — `$context.identity.claims.<name>` reads one.",$env:"An environment variable, e.g. `$env.SERVICE_NAME`.",$secrets:"An encrypted secret resolved at runtime, e.g. `$secrets.azureAdClientId` — stays symbolic in the compiled tree.",$strings:"A localized string resolved from the `.strings` file of the active locale, e.g. `$strings.invoices.title`.",...Object.fromEntries(e.map(e=>[`$eventContext.${e.path}`,e.description]))},o={racialOrEthnicOrigin:`Data revealing a person's racial or ethnic origin (GDPR Art. 9(1)).`,politicalOpinions:`Data revealing a person's political opinions (GDPR Art. 9(1)).`,religiousOrPhilosophicalBeliefs:`Data revealing a person's religious or philosophical beliefs (GDPR Art. 9(1)).`,tradeUnionMembership:`Data revealing whether a person belongs to a trade union (GDPR Art. 9(1)).`,genetic:`Data about inherited or acquired genetic characteristics that gives unique information about a person's physiology or health (GDPR Art. 9(1), Art. 4(13)).`,biometric:`Data from technical processing of physical, physiological or behavioral characteristics, special only when processed to uniquely identify a person (GDPR Art. 9(1), Art. 4(14)).`,health:`Data about a person's physical or mental health, including health care services, that reveals their health status (GDPR Art. 9(1), Art. 4(15)).`,sexLifeOrSexualOrientation:`Data concerning a person's sex life or sexual orientation (GDPR Art. 9(1)).`};export{i as attributeDocs,a as contextVariableDocs,t as handlerIntentDocs,n as keywordDocs,o as specialCategoryDocs,r as specificationKeywordDocs};
1
+ import"./_virtual/_virtual/_rolldown/runtime.js";import{eventContextPaths as e}from"./event-context-catalog.js";import"./event-context.js";const t={implementation:`Handler-only intent with ordered hints and at most one file or tagged fence. No payload means pending. Handler execution is unsupported; this is not confirmation.`,hint:`One nonblank quoted implementation hint. Order and decoded text are retained; hints do not execute or confirm code.`},n={parameter:`A typed value declared by a specification table, or an argument of a named behavior. Table types are required; every case supplies each parameter exactly once.`,case:`One named concrete row of a specification table, expanded as <Specification>_<Case>. Use case.<parameter> for a whole step value.`,example:"One typed, possibly partial fixture: `example <Name> : <EventOrCommandOrReadModel>`. Use its name in a matching specification step; assignments override example values without changing matching or supplying defaults. Event examples may carry stream or no stream; a step replaces that route as a whole.",domain:`The domain the file belongs to — optional, at most one per file, before everything else.`,import:'Imports a type from another module by its qualified name — `import Module.Type` — making it available by its short name; or, quoted, other `.play` files by path or glob — `import "Orders/**/*.play"`, relative to this file\'s folder. Written inside a module or feature, a file import places the imported files there: their top level is that module\'s or feature\'s body. `import Module.Event from "origin"` is instead public contract metadata with an opaque origin; executable binding refuses it with PLAY0268.',concept:`A formalized value type wrapping a primitive. Bare pii and secret markers travel with every usage, with optional concept notes and qualifiers.`,type:`A composite value type — a named shape built from several properties, referenced by events, commands and other types the same way a concept is.`,reason:`A free-text concept note, not a lawful basis. Written as pii reason "..." or secret reason "..."; migration preserves it verbatim.`,optional:"Allows a value to be absent. Write it after the type: `note String optional` or `lines InvoiceLine[] optional`. The collection itself may be absent; its items keep their declared type.",identifier:`Marks the command property a runtime resolves the event source id from. At most one per command; without it a new Uuid is generated.`,policy:`A named authorization rule referenced by commands and queries. Multiple policies AND together.`,purpose:`A report-only processing declaration (GDPR Art. 30), referenced on modules, features and slices. Coverage is their union, not an authorization gate. Generated declarations are not legal advice.`,basis:`One declared Art. 6(1) basis: consent, contract, legalObligation, vitalInterests, publicTask or legitimateInterests; an optional quoted reference may follow.`,interest:`The legitimate-interest statement for basis legitimateInterests (Art. 13(1)(d)).`,condition:`One Art. 9(2) processing condition, optionally followed by a quoted reference.`,subjects:`Comma-separated categories of data subjects, as open identifiers.`,retention:`Declared retention period or criteria, not enforced by the model or Chronicle.`,recipient:`A quoted recipient category; repeatable on a purpose.`,transfer:`A declared destination followed by safeguard and quoted safeguards; repeatable.`,safeguard:`The declared safeguard accompanying a third-country transfer.`,erasure:`An erasure exception under Art. 17(3); Chronicle crypto-shredding remains per subject, not per purpose.`,exception:`One declared Art. 17(3) exception: expression, legalObligation, publicTask, publicHealth, archiving or legalClaims.`,persona:`A named role interacting with the application, with an optional description and its associated policies.`,identity:"Declares typed additional caller details from a claim, a keyed single-result query, inline code or a file. Authoring metadata only; executable use of `$identity.<detail>` reports PLAY0268 until admitted (#600).",authentication:`Declares the identity providers of the application — at most one block per file.`,provider:"A named identity provider within `authentication`, with free-form `name value` settings.",description:"A human-readable description, including the rule or case a specification witnesses, as a quoted single line or a fenced ```text block for multiple lines.",depends:"Declares `depends on <Name>` on a module or feature. This opts only that container into checking counted explicit references against its own declarations; it does not change executable bytes.",module:`The top-level namespace — maps to a bounded context.`,layout:`A reusable screen template with named slots.`,template:`Declares the named slots of a layout.`,feature:`A vertical slice grouping. Features nest arbitrarily deep.`,slice:`The atomic unit of behavior, aligned with Event Modeling. Has a type and a name.`,public:`Marks an event as a public contract. An event with from "origin" is also public. Origin is opaque, not a path or declaration reference. Public events and origins are admitted by executable semantic model (ESM) v9.`,direction:`Declare direction inbound or direction outbound once inside a Translate slice. Admitted by executable semantic model (ESM) v9; a Translate slice that uses public events must declare it (PLAY0614).`,inbound:`Inbound Translate direction metadata. No transport or delivery guarantee is implied.`,outbound:`Outbound Translate direction metadata. No transport or delivery guarantee is implied.`,event:"An immutable, past-tense fact. Declare it in a slice or inline with `produces event <Name>` in a command. Inline properties are typed mappings; inline tags belong to the event type.",documentation:"Authoring-only reasoning on a module, feature, slice, command, event, read model or reaction in one nonempty fenced ```markdown block. It does not change executable model bytes.",id:`Preserves the previous persisted event name after a rename. Leave absent on new events; repeating the current name is redundant.`,command:`An imperative intent. Declares authorization, validation, and what events it produces — declaratively, or via a full handler.`,query:`A read-side entry point mapping to a return type, with an optional description, parameters and performer.`,observable:"Qualifies a query return type as a live read — `query <Name> => observable <ReadModel>` keeps pushing as the read model changes, instead of answering once.",performer:"The code that performs a query — a `file <Path>` reference or an inline `csharp`/`sql` block. The query's counterpart to a command handler.",from:"On a reaction or reducer, `from Source[.Stream]` observes only matching routed facts. It does not filter stream ids. Admitted by ESM v10. On a query parameter, fills it from the query context instead of the caller, as in `filter tenantId TenantId from $context.tenant`.",projection:`Declares how events project into a read model, using the embedded Projection Declaration Language (PDL).`,capture:`Converts external data into events, using the embedded Change Data Capture Language (CDL).`,reaction:"Behavior that runs when something happens. Lives inside Automation slices. A trigger with no body states intent on its own — `file`/code is optional realization metadata.",runs:'`runs as system [role "Role" and role "Role"]` declares the identity for every returned or invoked command of a reaction, not imperative pipeline calls. Admitted by released ESM v10; claims are unknown for this identity. Clock and application triggers have no Stage realization yet.',trigger:`Declares a kind of occurrence a reaction can respond to, and the values it hands the reaction. What makes one occur belongs to whoever provides it, never to the compiler.`,where:`Narrows which occurrences actually run the reaction.`,contains:`Text comparison — true when the left string holds the right one anywhere.`,every:"Runs a reaction on an interval — `every 15 minutes`, `every 1 day`.",refused:"Ordered invocation refusal branch, executable from ESM v19: first match wins and stops remaining invocations of this trigger. Bare `on refused` covers validation and constraints, not authorization. Other reactions and cascades continue; contract errors, concurrency and Unsupported never match.",acknowledge:`A refusal branch acknowledges alone without facts, or produces events instead. Executable from ESM v19; handling stops remaining invocations of this trigger.`,validation:"In `on refused by validation`, selects error-severity property, concept and require refusals. Executable from ESM v19.",authorization:"In `on refused by authorization`, explicitly selects unauthorized results, never Unsupported. Executable from ESM v19; bare refusal excludes authorization.",redelivered:"`when redelivered <Event> to <Reaction>` selects exactly one effective given occurrence by optional for, stated values and stream or no stream, delivering that event again to one named reaction without appending it again. Executable from ESM v17.",invokes:`A command a reaction hands on. A command is asked for, not produced — it may still be rejected.`,screen:`A UI declaration. Supports intent, structure, and layout-with-code levels, or a full file reference.`,constraint:`A server-side rule enforced in the Chronicle kernel before events are committed.`,authorize:`References the policies that must all pass for the construct to execute.`,validate:"Declarative validation rules, or `validate` followed by ```csharp for imperative rules — on commands and concepts.",produces:"References a declared event with `produces <Name>`, or declares one inline with `produces event <Name>`. An inline omitted `for` uses the command identifier only when all destinations are the same source; legacy plain omission allocates an identity.",reads:"Declares a view consulted by a command or reaction trigger: `reads <View> [as <alias>] [by <value>]`. A reaction `by` names a value taken by its trigger; clock triggers cannot use `by`. A child by block supplies composite key parts by name, using part = source. Repeated views require unique aliases. Runtime binding is not yet supported for command or reaction reads.",as:"Names an instance of a view in a command or reaction trigger reads declaration, for example `reads Account as source by sourceId`.",handler:"A fully imperative command implementation — a `file <Path>` reference or an inline `csharp` block, instead of `produces`.",when:"Guards a produced event or a capture append with a condition. In a labeled screen action, `when item.<field> == <literal> execute <Command>` selects the first matching command. Inside on click, double click or select, block-form `when <condition>` selects one whole action list at gesture time.",rule:"Names a predicate. Bare, it states that a constraint exists without expressing what it computes — nothing resolves the name. Optionally followed by an indented `file <Path>` reference or inline `csharp` block giving it a body.",require:'A policy condition: `authenticated`, `role "..."`, or `claim "..." matches ...`. Unary `not` negates a condition or group; precedence is not, and, or.',authenticated:`Requires an authenticated caller.`,role:`Requires the caller to have the given role.`,claim:`Requires a claim on the caller to match a subject or value.`,subject:"In policy `matches subject`, the identifier of the thing acted on, not the caller. The caller is `$context.causedBy.subject`.",data:`Binds a read model to a screen through a query.`,action:'Makes a command available on a screen. `action "Label"` declares one button with ordered `when … execute` alternatives over the nearest data item or selected row. No subject hides it; commands still enforce authorization and validation.',otherwise:"The final fallback of a guarded action: `otherwise hidden` or `otherwise execute <Command>`. In an item interaction, bare `otherwise` opens a fallback action list. No subject runs nothing, including fallback; authorization never falls through.",hidden:`Hides a guarded action when no condition matches. Without a subject the action is always hidden, even with an execute fallback.`,execute:"Executes a command. A guarded screen action selects it by the first matching condition; explicit `with … from` bindings precede same-name item fields, its declared form and renderer input.",navigate:"Navigates to a screen, optionally passing a parameter with `by`.",section:`A named structural section of a screen.`,table:`A table widget over a read model or child collection.`,summary:`A summary widget showing labeled fields.`,column:`A table column bound to a property.`,field:`A summary field bound to a property.`,title:`The display title of a screen or section.`,label:`The display label of an action, column, or field.`,unique:"A uniqueness constraint — `unique <property> on <EventType>` or `unique event <EventType>`.",concurrency:"The concurrency scope enforced when the command appends events — dimensions: `eventSource`, `sourceType`, `streamType`, `streamId`, `events`.",eventSource:`Concurrency dimension — scope the check to the event source id of the command.`,sourceType:`Concurrency dimension — scope the check to an event source type.`,streamType:`Concurrency dimension — scope the check to an event stream type.`,streamId:`Concurrency dimension — scope the check to an event stream id.`,tag:"Attaches a tag to appended events — a static identifier or string, or a `$context.` expression resolved at append time.",seed:`Declares events to seed into the event store per event source id — multiple blocks accumulate.`,for:"Names the event source of a production or seed group. Inside `produces event`, omission uses the command identifier unless another production targets a different source.",readmodel:"Declares a read model — its name and properties — in a slice, or, in a specification, read model state: `given readmodel` establishes it, `then readmodel` asserts it, `then no readmodel <View> for <key>` asserts keyed absence.",reducer:"Builds a read model from events with imperative code — `reducer <Name> => <ReadModel>` with an `on <EventType>` rule per event. Use it when a projection cannot express the transition.",specification:`Given/when/then acceptance criteria for a slice: prior events and state, the command, query or appended event under test, and the events, state, results, errors or denials that follow.`,dialog:"A dialog opened over the shell, or with `dialog template` a reusable dialog shape.",form:"A form bound to a command — `form <Name> for <Command>` with a `field` per input.",contribute:"Contributes entries to a slot of the shell — `contribute to Navigation` with `navigate to`, `label` and `order`.",theme:`A named theme and the component packages it is compatible with.`,ui:"A UI profile — `ui profile <Name>` binds a target platform and size to a layout, theme and packages.",behavior:"A named interaction wiring of `on <interaction>` handlers, attached to a screen, form or dialog with `uses`.",system:`An application-scoped external system that operations use.`,eventsource:`An application-owned event source with nested streams.`,operation:`A reusable operation intent that uses one external system.`,no:"A keyed absence assertion: `then no readmodel <View> for <key>`.",arguments:"The values supplied to a query asserted by `then query`.",result:"One expected result - `then result [exactly]` after `when query`, or a `result` block inside `then query`. Repeat it to assert several results in authored order.",clock:'The instant a specification happens at - `given clock "2026-10-05T08:00:00Z"` fixes when everything occurs; `when clock "<instant>"` is the clock reaching it, as the action.',exactly:"Requires every property to match, rather than only the ones asserted - on `then readmodel`, `then query` and `then result`.",file:`Delegates the implementation to an external file; the Screenplay contract stays visible.`,key:`Trailing modifier on a required top-level read-model property. Explicit keys replace inference. Composite keys remain authoring-only (PLAY0268, #599).`,stream:`On a command event production, replaces the whole command route for that event. Other productions keep the command route. Admitted by ESM v10.`,by:`Introduces one identifying parameter or a block of at least two named key parts. Reads use part = source; queries use part Type.`,via:`Connects screen data to the query that supplies it.`,filter:`An optional query filter parameter.`,on:"The event a constraint applies to, the day a schedule narrows to, or a widget interaction such as `on row-click`.",message:`The validation message reported when the rule fails.`,matches:"Matches a value against a regular expression or a named pattern such as `email`.",all:`Applies a comparison to every element of a collection.`,max:`Maximum length or value.`,min:`Minimum length or value.`,length:`Constrains the exact length of a value.`,today:`The current date.`,empty:"Used with `not empty` — text needs a non-whitespace character; null, empty and whitespace-only text fail. Unicode White_Space is U+0009–U+000D, U+0020, U+0085, U+00A0, U+1680, U+2000–U+200A, U+2028, U+2029, U+202F, U+205F and U+3000 (not U+FEFF). Collections need at least one element. Applies to concept and command rules in every ESM version; no trimming. Identity text is unchanged: whitespace is a value.",not:"Negates a validation condition, as in `not empty`.",and:`Both conditions must hold.`,or:`Either condition may hold.`,csharp:"An inline C# block whose opening fence is ```csharp.",sql:`An inline SQL block between triple backticks — a query performer written against a relational store.`,typescript:`An inline TypeScript block between triple backticks.`,react:"An inline React/TSX block; receives the surrounding data contract as `Props`.",html:`An inline static HTML block.`,StateChange:`Slice type — a command → events flow; something that changes the system.`,StateView:`Slice type — a query + projection + screen; something that reads the system.`,Automation:`Slice type — a reaction or reducer; something that runs when something happens.`,Translate:`Slice type — a capture; converts external data into events.`,Uuid:`Primitive type — a universally unique identifier.`,String:`Primitive type — a string of characters.`,Int:`Primitive type — an integer number.`,Decimal:`Primitive type — a decimal number.`,Bool:`Primitive type — true or false.`,Date:`Primitive type — a date without time.`,DateTime:`Primitive type — a date and time.`,Enum:`An enumeration concept with named members. Members may all declare unique int32 numbers (draft = 1) or all omit them (zero-based positions). Never renumber or reuse a published number. Non-positional numbers select executable model (ESM) v12; consumers must explicitly admit v12. Specifications still name members.`},r={parameter:"Declares a required typed case value: `parameter <name> <Type>`. Every case assigns it once. `optional` permits literal null but supplies no default.",case:"One named complete row of a specification table. `case.<parameter>` substitutes a whole value after example overrides; each row runs as `<Specification>_<Case>`.",caller:"`given caller` states an explicit identity; `given caller as <Persona>` synthesizes an authenticated deterministic witness of the persona, with no body. Leftmost buildable policy alternatives are significant.",clock:n.clock,redelivered:n.redelivered,trigger:"`when trigger <Trigger>` - an application trigger fires, as the action, with the values on the lines beneath it.",capture:"`given capture <Capture>` - a record the capture's source held before; `when capture <Capture>` - the record it sees now, as the action. The fields go on the lines beneath.",query:"`when query <Query>` - the query is performed, as the action, with its arguments on the lines beneath; assert what it returns with `then result` or `then no result`. `then query` instead asserts a query after another action.",events:"`then no events` - asserts the action appended no events, also after `when append`, where it means no reaction appended anything. Executable from ESM v17. Cannot accompany event, event-order, error or denial expectations.",result:"`then result [exactly]` - one result the query performed by `when query` returns, in order; `then no result` - it returns nothing."},i={pii:`personal data (GDPR Art. 4(1)); renders Chronicle [PII]. Bare suffix marker; @pii is deprecated (PLAY0565). Selects executable model (ESM) v13; consumers must explicitly admit it. Cannot classify identity or enum concepts. An event with personal values and an explicit subject mark refuses binding (PLAY0268) until lineage is admitted.`,personal:`Alias of pii: personal data (GDPR Art. 4(1)); renders Chronicle [PII]. No diagnostic; canonical printing writes pii. Selects executable model (ESM) v13, like pii.`,secret:`Operational secret, not personal data: encrypted at rest without erasure and withheld from causation. Provider mapping: [Encrypted] + [NotAudited], or [PII] only with pii. Selects executable model (ESM) v13; reference outcomes are unchanged. Cannot classify identity (PLAY0515) or enum concepts. Explicit scope is omitted next to pii. An event combining secret scope subject with an explicit subject mark refuses binding (PLAY0268).`,sensitive:`Deprecated spelling of secret (PLAY0565); repair to bare secret. Operational secret, not GDPR Art. 9 special-category data.`},a={"$context.occurred":`When the command or query was received.`,"$context.tenant":`The tenant the command or query is executing for.`,"$context.command":"The command being handled, shaped by its `command` declaration.","$context.arguments":`The arguments of the query being performed.`,"$context.causedBy":"The identity that caused the command or query — `subject`, `name`, `userName`.","$context.causedBy.subject":`The subject of the identity that caused the command or query.`,"$context.causedBy.name":`The display name of the identity that caused the command or query.`,"$context.causedBy.userName":`The user name of the identity that caused the command or query.`,"$context.causation":"What caused the command or query — `type`, `occurred`, `properties`.","$context.causation.type":`What caused the command or query — a command, a reactor, a schedule.`,$identity:"The caller — token built-ins `id`, `name`, `userName`, `isAuthenticated`, `roles`, `claims`, plus declared identity details. Built-ins are equivalent to `$context.identity`; details are authoring-only until admitted (#600).","$identity.id":"The identifier of the caller from the auth token; equivalent to `$context.identity.id`.","$identity.name":"The display name of the caller; equivalent to `$context.identity.name`.","$identity.userName":"The user name of the caller; equivalent to `$context.identity.userName`.","$identity.isAuthenticated":`Whether the caller is authenticated.`,"$identity.roles":`The roles the caller holds.`,"$identity.claims":"The claims the caller carries — `$identity.claims.<name>` reads one.","$context.identity":"The caller a decision is made about — `id`, `name`, `userName`, `isAuthenticated`, `roles`, `claims`.","$context.identity.id":`The identifier of the caller from the auth token.`,"$context.identity.name":`The display name of the caller.`,"$context.identity.userName":`The user name of the caller.`,"$context.identity.isAuthenticated":`Whether the caller is authenticated.`,"$context.identity.roles":`The roles the caller holds.`,"$context.identity.claims":"The claims the caller carries — `$context.identity.claims.<name>` reads one.",$env:"An environment variable, e.g. `$env.SERVICE_NAME`.",$secrets:"An encrypted secret resolved at runtime, e.g. `$secrets.azureAdClientId` — stays symbolic in the compiled tree.",$strings:"A localized string resolved from the `.strings` file of the active locale, e.g. `$strings.invoices.title`.",...Object.fromEntries(e.map(e=>[`$eventContext.${e.path}`,e.description]))},o={racialOrEthnicOrigin:`Data revealing a person's racial or ethnic origin (GDPR Art. 9(1)).`,politicalOpinions:`Data revealing a person's political opinions (GDPR Art. 9(1)).`,religiousOrPhilosophicalBeliefs:`Data revealing a person's religious or philosophical beliefs (GDPR Art. 9(1)).`,tradeUnionMembership:`Data revealing whether a person belongs to a trade union (GDPR Art. 9(1)).`,genetic:`Data about inherited or acquired genetic characteristics that gives unique information about a person's physiology or health (GDPR Art. 9(1), Art. 4(13)).`,biometric:`Data from technical processing of physical, physiological or behavioral characteristics, special only when processed to uniquely identify a person (GDPR Art. 9(1), Art. 4(14)).`,health:`Data about a person's physical or mental health, including health care services, that reveals their health status (GDPR Art. 9(1), Art. 4(15)).`,sexLifeOrSexualOrientation:`Data concerning a person's sex life or sexual orientation (GDPR Art. 9(1)).`};export{i as attributeDocs,a as contextVariableDocs,t as handlerIntentDocs,n as keywordDocs,o as specialCategoryDocs,r as specificationKeywordDocs};
2
2
  //# sourceMappingURL=keyword-docs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyword-docs.js","names":["handlerIntentDocs","keywordDocs","specificationKeywordDocs","attributeDocs","contextVariableDocs","\"$identity\"","\"$env\"","\"$secrets\"","\"$strings\"","eventContextPaths","path","specialCategoryDocs"],"sources":["../../keyword-docs.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { eventContextPaths } from './event-context';\n\n// These words are contextual beneath a handler, never global property keywords.\nexport const handlerIntentDocs = {\n implementation: 'Handler-only intent with ordered hints and at most one file or tagged fence. No payload means pending. Handler execution is unsupported; this is not confirmation.',\n hint: 'One nonblank quoted implementation hint. Order and decoded text are retained; hints do not execute or confirm code.',\n};\n\nexport const keywordDocs: Record<string, string> = {\n parameter: 'A typed value declared by a specification table, or an argument of a named behavior. Table types are required; every case supplies each parameter exactly once.',\n case: 'One named concrete row of a specification table, expanded as <Specification>_<Case>. Use case.<parameter> for a whole step value.',\n example: 'One typed, possibly partial fixture: `example <Name> : <EventOrCommandOrReadModel>`. Use its name in a matching specification step; assignments override example values without changing matching or supplying defaults. Event examples may carry stream or no stream; a step replaces that route as a whole.',\n domain: 'The domain the file belongs to — optional, at most one per file, before everything else.',\n import: 'Imports a type from another module by its qualified name — `import Module.Type` — making it available by its short name; or, quoted, other `.play` files by path or glob — `import \"Orders/**/*.play\"`, relative to this file\\'s folder. Written inside a module or feature, a file import places the imported files there: their top level is that module\\'s or feature\\'s body. `import Module.Event from \"origin\"` is instead public contract metadata with an opaque origin; executable binding refuses it with PLAY0268.',\n concept: 'A formalized value type wrapping a primitive. Bare pii and secret markers travel with every usage, with optional concept notes and qualifiers.',\n type: 'A composite value type — a named shape built from several properties, referenced by events, commands and other types the same way a concept is.',\n reason: 'A free-text concept note, not a lawful basis. Written as pii reason \"...\" or secret reason \"...\"; migration preserves it verbatim.',\n optional: 'Allows a value to be absent. Write it after the type: `note String optional` or `lines InvoiceLine[] optional`. The collection itself may be absent; its items keep their declared type.',\n identifier: 'Marks the command property a runtime resolves the event source id from. At most one per command; without it a new Uuid is generated.',\n policy: 'A named authorization rule referenced by commands and queries. Multiple policies AND together.',\n purpose: 'A report-only processing declaration (GDPR Art. 30), referenced on modules, features and slices. Coverage is their union, not an authorization gate. Generated declarations are not legal advice.',\n basis: 'One declared Art. 6(1) basis: consent, contract, legalObligation, vitalInterests, publicTask or legitimateInterests; an optional quoted reference may follow.',\n interest: 'The legitimate-interest statement for basis legitimateInterests (Art. 13(1)(d)).',\n condition: 'One Art. 9(2) processing condition, optionally followed by a quoted reference.',\n subjects: 'Comma-separated categories of data subjects, as open identifiers.',\n retention: 'Declared retention period or criteria, not enforced by the model or Chronicle.',\n recipient: 'A quoted recipient category; repeatable on a purpose.',\n transfer: 'A declared destination followed by safeguard and quoted safeguards; repeatable.',\n safeguard: 'The declared safeguard accompanying a third-country transfer.',\n erasure: 'An erasure exception under Art. 17(3); Chronicle crypto-shredding remains per subject, not per purpose.',\n exception: 'One declared Art. 17(3) exception: expression, legalObligation, publicTask, publicHealth, archiving or legalClaims.',\n persona: 'A named role interacting with the application, with an optional description and its associated policies.',\n identity: 'Declares typed additional caller details from a claim, a keyed single-result query, inline code or a file. Authoring metadata only; executable use of `$identity.<detail>` reports PLAY0268 until admitted (#600).',\n authentication: 'Declares the identity providers of the application — at most one block per file.',\n provider: 'A named identity provider within `authentication`, with free-form `name value` settings.',\n description: 'A human-readable description, including the rule or case a specification witnesses, as a quoted single line or a fenced ```text block for multiple lines.',\n depends: 'Declares `depends on <Name>` on a module or feature. This opts only that container into checking counted explicit references against its own declarations; it does not change executable bytes.',\n module: 'The top-level namespace — maps to a bounded context.',\n layout: 'A reusable screen template with named slots.',\n template: 'Declares the named slots of a layout.',\n feature: 'A vertical slice grouping. Features nest arbitrarily deep.',\n slice: 'The atomic unit of behavior, aligned with Event Modeling. Has a type and a name.',\n public: 'Marks an event as a public contract. An event with from \"origin\" is also public. Origin is opaque, not a path or declaration reference. Public events and origins are admitted by executable semantic model (ESM) v9.',\n direction: 'Declare direction inbound or direction outbound once inside a Translate slice. Admitted by executable semantic model (ESM) v9; a Translate slice that uses public events must declare it (PLAY0614).',\n inbound: 'Inbound Translate direction metadata. No transport or delivery guarantee is implied.',\n outbound: 'Outbound Translate direction metadata. No transport or delivery guarantee is implied.',\n event: 'An immutable, past-tense fact. Declare it in a slice or inline with `produces event <Name>` in a command. Inline properties are typed mappings; inline tags belong to the event type.',\n documentation: 'Authoring-only reasoning on a module, feature, slice, command, event, read model or reaction in one nonempty fenced ```markdown block. It does not change executable model bytes.',\n id: 'Preserves the previous persisted event name after a rename. Leave absent on new events; repeating the current name is redundant.',\n command: 'An imperative intent. Declares authorization, validation, and what events it produces — declaratively, or via a full handler.',\n query: 'A read-side entry point mapping to a return type, with an optional description, parameters and performer.',\n observable: 'Qualifies a query return type as a live read — `query <Name> => observable <ReadModel>` keeps pushing as the read model changes, instead of answering once.',\n performer: 'The code that performs a query — a `file <Path>` reference or an inline `csharp`/`sql` block. The query\\'s counterpart to a command handler.',\n from: 'On a reaction or reducer, `from Source[.Stream]` observes only matching routed facts. It does not filter stream ids. Admitted by ESM v10. On a query parameter, fills it from the query context instead of the caller, as in `filter tenantId TenantId from $context.tenant`.',\n projection: 'Declares how events project into a read model, using the embedded Projection Declaration Language (PDL).',\n capture: 'Converts external data into events, using the embedded Change Data Capture Language (CDL).',\n reaction: 'Behavior that runs when something happens. Lives inside Automation slices. A trigger with no body states intent on its own — `file`/code is optional realization metadata.',\n runs: '`runs as system [role \"Role\" and role \"Role\"]` declares the identity for every returned or invoked command of a reaction, not imperative pipeline calls. Admitted by released ESM v10; claims are unknown for this identity. Clock and application triggers have no Stage realization yet.',\n trigger: 'Declares a kind of occurrence a reaction can respond to, and the values it hands the reaction. What makes one occur belongs to whoever provides it, never to the compiler.',\n where: 'Narrows which occurrences actually run the reaction.',\n contains: 'Text comparison — true when the left string holds the right one anywhere.',\n every: 'Runs a reaction on an interval — `every 15 minutes`, `every 1 day`.',\n refused: 'Ordered invocation refusal branch: first match wins. Bare `on refused` covers validation and constraints, not authorization. Syntax-only, not yet executable (PLAY0268).',\n acknowledge: 'A refusal branch acknowledges alone, or produces events instead. Syntax-only, not yet executable (PLAY0268).',\n validation: 'In `on refused by validation`, selects property, concept and require refusals. Syntax-only, not yet executable (PLAY0268).',\n authorization: 'In `on refused by authorization`, explicitly selects unauthorized results, never Unsupported. Syntax-only, not yet executable (PLAY0268).',\n redelivered: '`when redelivered <Event> to <Reaction>` selects exactly one effective given occurrence by optional for, stated values and stream or no stream, delivering that event again to one named reaction without appending it again. Executable from ESM v17.',\n invokes: 'A command a reaction hands on. A command is asked for, not produced — it may still be rejected.',\n screen: 'A UI declaration. Supports intent, structure, and layout-with-code levels, or a full file reference.',\n constraint: 'A server-side rule enforced in the Chronicle kernel before events are committed.',\n authorize: 'References the policies that must all pass for the construct to execute.',\n validate: 'Declarative validation rules, or `validate` followed by ```csharp for imperative rules — on commands and concepts.',\n produces: 'References a declared event with `produces <Name>`, or declares one inline with `produces event <Name>`. An inline omitted `for` uses the command identifier only when all destinations are the same source; legacy plain omission allocates an identity.',\n reads: 'Declares a view consulted by a command or reaction trigger: `reads <View> [as <alias>] [by <value>]`. A reaction `by` names a value taken by its trigger; clock triggers cannot use `by`. A child by block supplies composite key parts by name, using part = source. Repeated views require unique aliases. Runtime binding is not yet supported for command or reaction reads.',\n as: 'Names an instance of a view in a command or reaction trigger reads declaration, for example `reads Account as source by sourceId`.',\n handler: 'A fully imperative command implementation — a `file <Path>` reference or an inline `csharp` block, instead of `produces`.',\n when: 'Guards a produced event or a capture append with a condition. In a labeled screen action, `when item.<field> == <literal> execute <Command>` selects the first matching command. Inside on click, double click or select, block-form `when <condition>` selects one whole action list at gesture time.',\n rule: 'Names a predicate. Bare, it states that a constraint exists without expressing what it computes — nothing resolves the name. Optionally followed by an indented `file <Path>` reference or inline `csharp` block giving it a body.',\n require: 'A policy condition: `authenticated`, `role \"...\"`, or `claim \"...\" matches ...`. Unary `not` negates a condition or group; precedence is not, and, or.',\n authenticated: 'Requires an authenticated caller.',\n role: 'Requires the caller to have the given role.',\n claim: 'Requires a claim on the caller to match a subject or value.',\n subject: 'In policy `matches subject`, the identifier of the thing acted on, not the caller. The caller is `$context.causedBy.subject`.',\n data: 'Binds a read model to a screen through a query.',\n action: 'Makes a command available on a screen. `action \"Label\"` declares one button with ordered `when … execute` alternatives over the nearest data item or selected row. No subject hides it; commands still enforce authorization and validation.',\n otherwise: 'The final fallback of a guarded action: `otherwise hidden` or `otherwise execute <Command>`. In an item interaction, bare `otherwise` opens a fallback action list. No subject runs nothing, including fallback; authorization never falls through.',\n hidden: 'Hides a guarded action when no condition matches. Without a subject the action is always hidden, even with an execute fallback.',\n execute: 'Executes a command. A guarded screen action selects it by the first matching condition; explicit `with … from` bindings precede same-name item fields, its declared form and renderer input.',\n navigate: 'Navigates to a screen, optionally passing a parameter with `by`.',\n section: 'A named structural section of a screen.',\n table: 'A table widget over a read model or child collection.',\n summary: 'A summary widget showing labeled fields.',\n column: 'A table column bound to a property.',\n field: 'A summary field bound to a property.',\n title: 'The display title of a screen or section.',\n label: 'The display label of an action, column, or field.',\n unique: 'A uniqueness constraint — `unique <property> on <EventType>` or `unique event <EventType>`.',\n concurrency: 'The concurrency scope enforced when the command appends events — dimensions: `eventSource`, `sourceType`, `streamType`, `streamId`, `events`.',\n eventSource: 'Concurrency dimension — scope the check to the event source id of the command.',\n sourceType: 'Concurrency dimension — scope the check to an event source type.',\n streamType: 'Concurrency dimension — scope the check to an event stream type.',\n streamId: 'Concurrency dimension — scope the check to an event stream id.',\n tag: 'Attaches a tag to appended events — a static identifier or string, or a `$context.` expression resolved at append time.',\n seed: 'Declares events to seed into the event store per event source id — multiple blocks accumulate.',\n for: 'Names the event source of a production or seed group. Inside `produces event`, omission uses the command identifier unless another production targets a different source.',\n readmodel: 'Declares a read model — its name and properties — in a slice, or, in a specification, read model state: `given readmodel` establishes it, `then readmodel` asserts it, `then no readmodel <View> for <key>` asserts keyed absence.',\n reducer: 'Builds a read model from events with imperative code — `reducer <Name> => <ReadModel>` with an `on <EventType>` rule per event. Use it when a projection cannot express the transition.',\n specification: 'Given/when/then acceptance criteria for a slice: prior events and state, the command, query or appended event under test, and the events, state, results, errors or denials that follow.',\n dialog: 'A dialog opened over the shell, or with `dialog template` a reusable dialog shape.',\n form: 'A form bound to a command — `form <Name> for <Command>` with a `field` per input.',\n contribute: 'Contributes entries to a slot of the shell — `contribute to Navigation` with `navigate to`, `label` and `order`.',\n theme: 'A named theme and the component packages it is compatible with.',\n ui: 'A UI profile — `ui profile <Name>` binds a target platform and size to a layout, theme and packages.',\n behavior: 'A named interaction wiring of `on <interaction>` handlers, attached to a screen, form or dialog with `uses`.',\n system: 'An application-scoped external system that operations use.',\n eventsource: 'An application-owned event source with nested streams.',\n operation: 'A reusable operation intent that uses one external system.',\n no: 'A keyed absence assertion: `then no readmodel <View> for <key>`.',\n arguments: 'The values supplied to a query asserted by `then query`.',\n result: 'One expected result - `then result [exactly]` after `when query`, or a `result` block inside `then query`. Repeat it to assert several results in authored order.',\n clock: 'The instant a specification happens at - `given clock \"2026-10-05T08:00:00Z\"` fixes when everything occurs; `when clock \"<instant>\"` is the clock reaching it, as the action.',\n exactly: 'Requires every property to match, rather than only the ones asserted - on `then readmodel`, `then query` and `then result`.',\n file: 'Delegates the implementation to an external file; the Screenplay contract stays visible.',\n key: 'Trailing modifier on a required top-level read-model property. Explicit keys replace inference. Composite keys remain authoring-only (PLAY0268, #599).',\n stream: 'On a command event production, replaces the whole command route for that event. Other productions keep the command route. Admitted by ESM v10.',\n by: 'Introduces one identifying parameter or a block of at least two named key parts. Reads use part = source; queries use part Type.',\n via: 'Connects screen data to the query that supplies it.',\n filter: 'An optional query filter parameter.',\n on: 'The event a constraint applies to, the day a schedule narrows to, or a widget interaction such as `on row-click`.',\n message: 'The validation message reported when the rule fails.',\n matches: 'Matches a value against a regular expression or a named pattern such as `email`.',\n all: 'Applies a comparison to every element of a collection.',\n max: 'Maximum length or value.',\n min: 'Minimum length or value.',\n length: 'Constrains the exact length of a value.',\n today: 'The current date.',\n empty: 'Used with `not empty` — text needs a non-whitespace character; null, empty and whitespace-only text fail. Unicode White_Space is U+0009–U+000D, U+0020, U+0085, U+00A0, U+1680, U+2000–U+200A, U+2028, U+2029, U+202F, U+205F and U+3000 (not U+FEFF). Collections need at least one element. Applies to concept and command rules in every ESM version; no trimming. Identity text is unchanged: whitespace is a value.',\n not: 'Negates a validation condition, as in `not empty`.',\n and: 'Both conditions must hold.',\n or: 'Either condition may hold.',\n csharp: 'An inline C# block whose opening fence is ```csharp.',\n sql: 'An inline SQL block between triple backticks — a query performer written against a relational store.',\n typescript: 'An inline TypeScript block between triple backticks.',\n react: 'An inline React/TSX block; receives the surrounding data contract as `Props`.',\n html: 'An inline static HTML block.',\n StateChange: 'Slice type — a command → events flow; something that changes the system.',\n StateView: 'Slice type — a query + projection + screen; something that reads the system.',\n Automation: 'Slice type — a reaction or reducer; something that runs when something happens.',\n Translate: 'Slice type — a capture; converts external data into events.',\n Uuid: 'Primitive type — a universally unique identifier.',\n String: 'Primitive type — a string of characters.',\n Int: 'Primitive type — an integer number.',\n Decimal: 'Primitive type — a decimal number.',\n Bool: 'Primitive type — true or false.',\n Date: 'Primitive type — a date without time.',\n DateTime: 'Primitive type — a date and time.',\n Enum: 'An enumeration concept with named members. Members may all declare unique int32 numbers (draft = 1) or all omit them (zero-based positions). Never renumber or reuse a published number. Non-positional numbers select executable model (ESM) v12; consumers must explicitly admit v12. Specifications still name members.',\n};\n\n// What the words of a specification's steps mean there - where 'trigger', 'capture' and 'query' name what the\n// scenario exercises rather than declare one.\nexport const specificationKeywordDocs: Record<string, string> = {\n parameter: 'Declares a required typed case value: `parameter <name> <Type>`. Every case assigns it once. `optional` permits literal null but supplies no default.',\n case: 'One named complete row of a specification table. `case.<parameter>` substitutes a whole value after example overrides; each row runs as `<Specification>_<Case>`.',\n caller: '`given caller` states an explicit identity; `given caller as <Persona>` synthesizes an authenticated deterministic witness of the persona, with no body. Leftmost buildable policy alternatives are significant.',\n clock: keywordDocs.clock,\n redelivered: keywordDocs.redelivered,\n trigger: '`when trigger <Trigger>` - an application trigger fires, as the action, with the values on the lines beneath it.',\n capture: '`given capture <Capture>` - a record the capture\\'s source held before; `when capture <Capture>` - the record it sees now, as the action. The fields go on the lines beneath.',\n query: '`when query <Query>` - the query is performed, as the action, with its arguments on the lines beneath; assert what it returns with `then result` or `then no result`. `then query` instead asserts a query after another action.',\n events: '`then no events` - asserts the action appended no events, also after `when append`, where it means no reaction appended anything. Executable from ESM v17. Cannot accompany event, event-order, error or denial expectations.',\n result: '`then result [exactly]` - one result the query performed by `when query` returns, in order; `then no result` - it returns nothing.',\n};\n\nexport const attributeDocs: Record<string, string> = {\n pii: 'personal data (GDPR Art. 4(1)); renders Chronicle [PII]. Bare suffix marker; @pii is deprecated (PLAY0565). Selects executable model (ESM) v13; consumers must explicitly admit it. Cannot classify identity or enum concepts. An event with personal values and an explicit subject mark refuses binding (PLAY0268) until lineage is admitted.',\n personal: 'Alias of pii: personal data (GDPR Art. 4(1)); renders Chronicle [PII]. No diagnostic; canonical printing writes pii. Selects executable model (ESM) v13, like pii.',\n secret: 'Operational secret, not personal data: encrypted at rest without erasure and withheld from causation. Provider mapping: [Encrypted] + [NotAudited], or [PII] only with pii. Selects executable model (ESM) v13; reference outcomes are unchanged. Cannot classify identity (PLAY0515) or enum concepts. Explicit scope is omitted next to pii. An event combining secret scope subject with an explicit subject mark refuses binding (PLAY0268).',\n sensitive: 'Deprecated spelling of secret (PLAY0565); repair to bare secret. Operational secret, not GDPR Art. 9 special-category data.',\n};\n\nexport const contextVariableDocs: Record<string, string> = {\n '$context.occurred': 'When the command or query was received.',\n '$context.tenant': 'The tenant the command or query is executing for.',\n '$context.command': 'The command being handled, shaped by its `command` declaration.',\n '$context.arguments': 'The arguments of the query being performed.',\n '$context.causedBy': 'The identity that caused the command or query — `subject`, `name`, `userName`.',\n '$context.causedBy.subject': 'The subject of the identity that caused the command or query.',\n '$context.causedBy.name': 'The display name of the identity that caused the command or query.',\n '$context.causedBy.userName': 'The user name of the identity that caused the command or query.',\n '$context.causation': 'What caused the command or query — `type`, `occurred`, `properties`.',\n '$context.causation.type': 'What caused the command or query — a command, a reactor, a schedule.',\n '$identity': 'The caller — token built-ins `id`, `name`, `userName`, `isAuthenticated`, `roles`, `claims`, plus declared identity details. Built-ins are equivalent to `$context.identity`; details are authoring-only until admitted (#600).',\n '$identity.id': 'The identifier of the caller from the auth token; equivalent to `$context.identity.id`.',\n '$identity.name': 'The display name of the caller; equivalent to `$context.identity.name`.',\n '$identity.userName': 'The user name of the caller; equivalent to `$context.identity.userName`.',\n '$identity.isAuthenticated': 'Whether the caller is authenticated.',\n '$identity.roles': 'The roles the caller holds.',\n '$identity.claims': 'The claims the caller carries — `$identity.claims.<name>` reads one.',\n '$context.identity': 'The caller a decision is made about — `id`, `name`, `userName`, `isAuthenticated`, `roles`, `claims`.',\n '$context.identity.id': 'The identifier of the caller from the auth token.',\n '$context.identity.name': 'The display name of the caller.',\n '$context.identity.userName': 'The user name of the caller.',\n '$context.identity.isAuthenticated': 'Whether the caller is authenticated.',\n '$context.identity.roles': 'The roles the caller holds.',\n '$context.identity.claims': 'The claims the caller carries — `$context.identity.claims.<name>` reads one.',\n '$env': 'An environment variable, e.g. `$env.SERVICE_NAME`.',\n '$secrets': 'An encrypted secret resolved at runtime, e.g. `$secrets.azureAdClientId` — stays symbolic in the compiled tree.',\n '$strings': 'A localized string resolved from the `.strings` file of the active locale, e.g. `$strings.invoices.title`.',\n // Every $eventContext path the event-context catalog lists, for projections.\n ...Object.fromEntries(eventContextPaths.map((path) => [`$eventContext.${path.path}`, path.description])),\n};\n\n// One-sentence descriptions of the `pii special` categories (GDPR Art. 9(1)) and `pii criminal` (Art. 10).\n// The same sentences appear in Documentation/screenplay/concepts.md.\nexport const specialCategoryDocs: Record<string, string> = {\n racialOrEthnicOrigin: 'Data revealing a person\\'s racial or ethnic origin (GDPR Art. 9(1)).',\n politicalOpinions: 'Data revealing a person\\'s political opinions (GDPR Art. 9(1)).',\n religiousOrPhilosophicalBeliefs: 'Data revealing a person\\'s religious or philosophical beliefs (GDPR Art. 9(1)).',\n tradeUnionMembership: 'Data revealing whether a person belongs to a trade union (GDPR Art. 9(1)).',\n genetic: 'Data about inherited or acquired genetic characteristics that gives unique information about a person\\'s physiology or health (GDPR Art. 9(1), Art. 4(13)).',\n biometric: 'Data from technical processing of physical, physiological or behavioral characteristics, special only when processed to uniquely identify a person (GDPR Art. 9(1), Art. 4(14)).',\n health: 'Data about a person\\'s physical or mental health, including health care services, that reveals their health status (GDPR Art. 9(1), Art. 4(15)).',\n sexLifeOrSexualOrientation: 'Data concerning a person\\'s sex life or sexual orientation (GDPR Art. 9(1)).'\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"keyword-docs.js","names":["handlerIntentDocs","keywordDocs","specificationKeywordDocs","attributeDocs","contextVariableDocs","\"$identity\"","\"$env\"","\"$secrets\"","\"$strings\"","eventContextPaths","path","specialCategoryDocs"],"sources":["../../keyword-docs.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { eventContextPaths } from './event-context';\n\n// These words are contextual beneath a handler, never global property keywords.\nexport const handlerIntentDocs = {\n implementation: 'Handler-only intent with ordered hints and at most one file or tagged fence. No payload means pending. Handler execution is unsupported; this is not confirmation.',\n hint: 'One nonblank quoted implementation hint. Order and decoded text are retained; hints do not execute or confirm code.',\n};\n\nexport const keywordDocs: Record<string, string> = {\n parameter: 'A typed value declared by a specification table, or an argument of a named behavior. Table types are required; every case supplies each parameter exactly once.',\n case: 'One named concrete row of a specification table, expanded as <Specification>_<Case>. Use case.<parameter> for a whole step value.',\n example: 'One typed, possibly partial fixture: `example <Name> : <EventOrCommandOrReadModel>`. Use its name in a matching specification step; assignments override example values without changing matching or supplying defaults. Event examples may carry stream or no stream; a step replaces that route as a whole.',\n domain: 'The domain the file belongs to — optional, at most one per file, before everything else.',\n import: 'Imports a type from another module by its qualified name — `import Module.Type` — making it available by its short name; or, quoted, other `.play` files by path or glob — `import \"Orders/**/*.play\"`, relative to this file\\'s folder. Written inside a module or feature, a file import places the imported files there: their top level is that module\\'s or feature\\'s body. `import Module.Event from \"origin\"` is instead public contract metadata with an opaque origin; executable binding refuses it with PLAY0268.',\n concept: 'A formalized value type wrapping a primitive. Bare pii and secret markers travel with every usage, with optional concept notes and qualifiers.',\n type: 'A composite value type — a named shape built from several properties, referenced by events, commands and other types the same way a concept is.',\n reason: 'A free-text concept note, not a lawful basis. Written as pii reason \"...\" or secret reason \"...\"; migration preserves it verbatim.',\n optional: 'Allows a value to be absent. Write it after the type: `note String optional` or `lines InvoiceLine[] optional`. The collection itself may be absent; its items keep their declared type.',\n identifier: 'Marks the command property a runtime resolves the event source id from. At most one per command; without it a new Uuid is generated.',\n policy: 'A named authorization rule referenced by commands and queries. Multiple policies AND together.',\n purpose: 'A report-only processing declaration (GDPR Art. 30), referenced on modules, features and slices. Coverage is their union, not an authorization gate. Generated declarations are not legal advice.',\n basis: 'One declared Art. 6(1) basis: consent, contract, legalObligation, vitalInterests, publicTask or legitimateInterests; an optional quoted reference may follow.',\n interest: 'The legitimate-interest statement for basis legitimateInterests (Art. 13(1)(d)).',\n condition: 'One Art. 9(2) processing condition, optionally followed by a quoted reference.',\n subjects: 'Comma-separated categories of data subjects, as open identifiers.',\n retention: 'Declared retention period or criteria, not enforced by the model or Chronicle.',\n recipient: 'A quoted recipient category; repeatable on a purpose.',\n transfer: 'A declared destination followed by safeguard and quoted safeguards; repeatable.',\n safeguard: 'The declared safeguard accompanying a third-country transfer.',\n erasure: 'An erasure exception under Art. 17(3); Chronicle crypto-shredding remains per subject, not per purpose.',\n exception: 'One declared Art. 17(3) exception: expression, legalObligation, publicTask, publicHealth, archiving or legalClaims.',\n persona: 'A named role interacting with the application, with an optional description and its associated policies.',\n identity: 'Declares typed additional caller details from a claim, a keyed single-result query, inline code or a file. Authoring metadata only; executable use of `$identity.<detail>` reports PLAY0268 until admitted (#600).',\n authentication: 'Declares the identity providers of the application — at most one block per file.',\n provider: 'A named identity provider within `authentication`, with free-form `name value` settings.',\n description: 'A human-readable description, including the rule or case a specification witnesses, as a quoted single line or a fenced ```text block for multiple lines.',\n depends: 'Declares `depends on <Name>` on a module or feature. This opts only that container into checking counted explicit references against its own declarations; it does not change executable bytes.',\n module: 'The top-level namespace — maps to a bounded context.',\n layout: 'A reusable screen template with named slots.',\n template: 'Declares the named slots of a layout.',\n feature: 'A vertical slice grouping. Features nest arbitrarily deep.',\n slice: 'The atomic unit of behavior, aligned with Event Modeling. Has a type and a name.',\n public: 'Marks an event as a public contract. An event with from \"origin\" is also public. Origin is opaque, not a path or declaration reference. Public events and origins are admitted by executable semantic model (ESM) v9.',\n direction: 'Declare direction inbound or direction outbound once inside a Translate slice. Admitted by executable semantic model (ESM) v9; a Translate slice that uses public events must declare it (PLAY0614).',\n inbound: 'Inbound Translate direction metadata. No transport or delivery guarantee is implied.',\n outbound: 'Outbound Translate direction metadata. No transport or delivery guarantee is implied.',\n event: 'An immutable, past-tense fact. Declare it in a slice or inline with `produces event <Name>` in a command. Inline properties are typed mappings; inline tags belong to the event type.',\n documentation: 'Authoring-only reasoning on a module, feature, slice, command, event, read model or reaction in one nonempty fenced ```markdown block. It does not change executable model bytes.',\n id: 'Preserves the previous persisted event name after a rename. Leave absent on new events; repeating the current name is redundant.',\n command: 'An imperative intent. Declares authorization, validation, and what events it produces — declaratively, or via a full handler.',\n query: 'A read-side entry point mapping to a return type, with an optional description, parameters and performer.',\n observable: 'Qualifies a query return type as a live read — `query <Name> => observable <ReadModel>` keeps pushing as the read model changes, instead of answering once.',\n performer: 'The code that performs a query — a `file <Path>` reference or an inline `csharp`/`sql` block. The query\\'s counterpart to a command handler.',\n from: 'On a reaction or reducer, `from Source[.Stream]` observes only matching routed facts. It does not filter stream ids. Admitted by ESM v10. On a query parameter, fills it from the query context instead of the caller, as in `filter tenantId TenantId from $context.tenant`.',\n projection: 'Declares how events project into a read model, using the embedded Projection Declaration Language (PDL).',\n capture: 'Converts external data into events, using the embedded Change Data Capture Language (CDL).',\n reaction: 'Behavior that runs when something happens. Lives inside Automation slices. A trigger with no body states intent on its own — `file`/code is optional realization metadata.',\n runs: '`runs as system [role \"Role\" and role \"Role\"]` declares the identity for every returned or invoked command of a reaction, not imperative pipeline calls. Admitted by released ESM v10; claims are unknown for this identity. Clock and application triggers have no Stage realization yet.',\n trigger: 'Declares a kind of occurrence a reaction can respond to, and the values it hands the reaction. What makes one occur belongs to whoever provides it, never to the compiler.',\n where: 'Narrows which occurrences actually run the reaction.',\n contains: 'Text comparison — true when the left string holds the right one anywhere.',\n every: 'Runs a reaction on an interval — `every 15 minutes`, `every 1 day`.',\n refused: 'Ordered invocation refusal branch, executable from ESM v19: first match wins and stops remaining invocations of this trigger. Bare `on refused` covers validation and constraints, not authorization. Other reactions and cascades continue; contract errors, concurrency and Unsupported never match.',\n acknowledge: 'A refusal branch acknowledges alone without facts, or produces events instead. Executable from ESM v19; handling stops remaining invocations of this trigger.',\n validation: 'In `on refused by validation`, selects error-severity property, concept and require refusals. Executable from ESM v19.',\n authorization: 'In `on refused by authorization`, explicitly selects unauthorized results, never Unsupported. Executable from ESM v19; bare refusal excludes authorization.',\n redelivered: '`when redelivered <Event> to <Reaction>` selects exactly one effective given occurrence by optional for, stated values and stream or no stream, delivering that event again to one named reaction without appending it again. Executable from ESM v17.',\n invokes: 'A command a reaction hands on. A command is asked for, not produced — it may still be rejected.',\n screen: 'A UI declaration. Supports intent, structure, and layout-with-code levels, or a full file reference.',\n constraint: 'A server-side rule enforced in the Chronicle kernel before events are committed.',\n authorize: 'References the policies that must all pass for the construct to execute.',\n validate: 'Declarative validation rules, or `validate` followed by ```csharp for imperative rules — on commands and concepts.',\n produces: 'References a declared event with `produces <Name>`, or declares one inline with `produces event <Name>`. An inline omitted `for` uses the command identifier only when all destinations are the same source; legacy plain omission allocates an identity.',\n reads: 'Declares a view consulted by a command or reaction trigger: `reads <View> [as <alias>] [by <value>]`. A reaction `by` names a value taken by its trigger; clock triggers cannot use `by`. A child by block supplies composite key parts by name, using part = source. Repeated views require unique aliases. Runtime binding is not yet supported for command or reaction reads.',\n as: 'Names an instance of a view in a command or reaction trigger reads declaration, for example `reads Account as source by sourceId`.',\n handler: 'A fully imperative command implementation — a `file <Path>` reference or an inline `csharp` block, instead of `produces`.',\n when: 'Guards a produced event or a capture append with a condition. In a labeled screen action, `when item.<field> == <literal> execute <Command>` selects the first matching command. Inside on click, double click or select, block-form `when <condition>` selects one whole action list at gesture time.',\n rule: 'Names a predicate. Bare, it states that a constraint exists without expressing what it computes — nothing resolves the name. Optionally followed by an indented `file <Path>` reference or inline `csharp` block giving it a body.',\n require: 'A policy condition: `authenticated`, `role \"...\"`, or `claim \"...\" matches ...`. Unary `not` negates a condition or group; precedence is not, and, or.',\n authenticated: 'Requires an authenticated caller.',\n role: 'Requires the caller to have the given role.',\n claim: 'Requires a claim on the caller to match a subject or value.',\n subject: 'In policy `matches subject`, the identifier of the thing acted on, not the caller. The caller is `$context.causedBy.subject`.',\n data: 'Binds a read model to a screen through a query.',\n action: 'Makes a command available on a screen. `action \"Label\"` declares one button with ordered `when … execute` alternatives over the nearest data item or selected row. No subject hides it; commands still enforce authorization and validation.',\n otherwise: 'The final fallback of a guarded action: `otherwise hidden` or `otherwise execute <Command>`. In an item interaction, bare `otherwise` opens a fallback action list. No subject runs nothing, including fallback; authorization never falls through.',\n hidden: 'Hides a guarded action when no condition matches. Without a subject the action is always hidden, even with an execute fallback.',\n execute: 'Executes a command. A guarded screen action selects it by the first matching condition; explicit `with … from` bindings precede same-name item fields, its declared form and renderer input.',\n navigate: 'Navigates to a screen, optionally passing a parameter with `by`.',\n section: 'A named structural section of a screen.',\n table: 'A table widget over a read model or child collection.',\n summary: 'A summary widget showing labeled fields.',\n column: 'A table column bound to a property.',\n field: 'A summary field bound to a property.',\n title: 'The display title of a screen or section.',\n label: 'The display label of an action, column, or field.',\n unique: 'A uniqueness constraint — `unique <property> on <EventType>` or `unique event <EventType>`.',\n concurrency: 'The concurrency scope enforced when the command appends events — dimensions: `eventSource`, `sourceType`, `streamType`, `streamId`, `events`.',\n eventSource: 'Concurrency dimension — scope the check to the event source id of the command.',\n sourceType: 'Concurrency dimension — scope the check to an event source type.',\n streamType: 'Concurrency dimension — scope the check to an event stream type.',\n streamId: 'Concurrency dimension — scope the check to an event stream id.',\n tag: 'Attaches a tag to appended events — a static identifier or string, or a `$context.` expression resolved at append time.',\n seed: 'Declares events to seed into the event store per event source id — multiple blocks accumulate.',\n for: 'Names the event source of a production or seed group. Inside `produces event`, omission uses the command identifier unless another production targets a different source.',\n readmodel: 'Declares a read model — its name and properties — in a slice, or, in a specification, read model state: `given readmodel` establishes it, `then readmodel` asserts it, `then no readmodel <View> for <key>` asserts keyed absence.',\n reducer: 'Builds a read model from events with imperative code — `reducer <Name> => <ReadModel>` with an `on <EventType>` rule per event. Use it when a projection cannot express the transition.',\n specification: 'Given/when/then acceptance criteria for a slice: prior events and state, the command, query or appended event under test, and the events, state, results, errors or denials that follow.',\n dialog: 'A dialog opened over the shell, or with `dialog template` a reusable dialog shape.',\n form: 'A form bound to a command — `form <Name> for <Command>` with a `field` per input.',\n contribute: 'Contributes entries to a slot of the shell — `contribute to Navigation` with `navigate to`, `label` and `order`.',\n theme: 'A named theme and the component packages it is compatible with.',\n ui: 'A UI profile — `ui profile <Name>` binds a target platform and size to a layout, theme and packages.',\n behavior: 'A named interaction wiring of `on <interaction>` handlers, attached to a screen, form or dialog with `uses`.',\n system: 'An application-scoped external system that operations use.',\n eventsource: 'An application-owned event source with nested streams.',\n operation: 'A reusable operation intent that uses one external system.',\n no: 'A keyed absence assertion: `then no readmodel <View> for <key>`.',\n arguments: 'The values supplied to a query asserted by `then query`.',\n result: 'One expected result - `then result [exactly]` after `when query`, or a `result` block inside `then query`. Repeat it to assert several results in authored order.',\n clock: 'The instant a specification happens at - `given clock \"2026-10-05T08:00:00Z\"` fixes when everything occurs; `when clock \"<instant>\"` is the clock reaching it, as the action.',\n exactly: 'Requires every property to match, rather than only the ones asserted - on `then readmodel`, `then query` and `then result`.',\n file: 'Delegates the implementation to an external file; the Screenplay contract stays visible.',\n key: 'Trailing modifier on a required top-level read-model property. Explicit keys replace inference. Composite keys remain authoring-only (PLAY0268, #599).',\n stream: 'On a command event production, replaces the whole command route for that event. Other productions keep the command route. Admitted by ESM v10.',\n by: 'Introduces one identifying parameter or a block of at least two named key parts. Reads use part = source; queries use part Type.',\n via: 'Connects screen data to the query that supplies it.',\n filter: 'An optional query filter parameter.',\n on: 'The event a constraint applies to, the day a schedule narrows to, or a widget interaction such as `on row-click`.',\n message: 'The validation message reported when the rule fails.',\n matches: 'Matches a value against a regular expression or a named pattern such as `email`.',\n all: 'Applies a comparison to every element of a collection.',\n max: 'Maximum length or value.',\n min: 'Minimum length or value.',\n length: 'Constrains the exact length of a value.',\n today: 'The current date.',\n empty: 'Used with `not empty` — text needs a non-whitespace character; null, empty and whitespace-only text fail. Unicode White_Space is U+0009–U+000D, U+0020, U+0085, U+00A0, U+1680, U+2000–U+200A, U+2028, U+2029, U+202F, U+205F and U+3000 (not U+FEFF). Collections need at least one element. Applies to concept and command rules in every ESM version; no trimming. Identity text is unchanged: whitespace is a value.',\n not: 'Negates a validation condition, as in `not empty`.',\n and: 'Both conditions must hold.',\n or: 'Either condition may hold.',\n csharp: 'An inline C# block whose opening fence is ```csharp.',\n sql: 'An inline SQL block between triple backticks — a query performer written against a relational store.',\n typescript: 'An inline TypeScript block between triple backticks.',\n react: 'An inline React/TSX block; receives the surrounding data contract as `Props`.',\n html: 'An inline static HTML block.',\n StateChange: 'Slice type — a command → events flow; something that changes the system.',\n StateView: 'Slice type — a query + projection + screen; something that reads the system.',\n Automation: 'Slice type — a reaction or reducer; something that runs when something happens.',\n Translate: 'Slice type — a capture; converts external data into events.',\n Uuid: 'Primitive type — a universally unique identifier.',\n String: 'Primitive type — a string of characters.',\n Int: 'Primitive type — an integer number.',\n Decimal: 'Primitive type — a decimal number.',\n Bool: 'Primitive type — true or false.',\n Date: 'Primitive type — a date without time.',\n DateTime: 'Primitive type — a date and time.',\n Enum: 'An enumeration concept with named members. Members may all declare unique int32 numbers (draft = 1) or all omit them (zero-based positions). Never renumber or reuse a published number. Non-positional numbers select executable model (ESM) v12; consumers must explicitly admit v12. Specifications still name members.',\n};\n\n// What the words of a specification's steps mean there - where 'trigger', 'capture' and 'query' name what the\n// scenario exercises rather than declare one.\nexport const specificationKeywordDocs: Record<string, string> = {\n parameter: 'Declares a required typed case value: `parameter <name> <Type>`. Every case assigns it once. `optional` permits literal null but supplies no default.',\n case: 'One named complete row of a specification table. `case.<parameter>` substitutes a whole value after example overrides; each row runs as `<Specification>_<Case>`.',\n caller: '`given caller` states an explicit identity; `given caller as <Persona>` synthesizes an authenticated deterministic witness of the persona, with no body. Leftmost buildable policy alternatives are significant.',\n clock: keywordDocs.clock,\n redelivered: keywordDocs.redelivered,\n trigger: '`when trigger <Trigger>` - an application trigger fires, as the action, with the values on the lines beneath it.',\n capture: '`given capture <Capture>` - a record the capture\\'s source held before; `when capture <Capture>` - the record it sees now, as the action. The fields go on the lines beneath.',\n query: '`when query <Query>` - the query is performed, as the action, with its arguments on the lines beneath; assert what it returns with `then result` or `then no result`. `then query` instead asserts a query after another action.',\n events: '`then no events` - asserts the action appended no events, also after `when append`, where it means no reaction appended anything. Executable from ESM v17. Cannot accompany event, event-order, error or denial expectations.',\n result: '`then result [exactly]` - one result the query performed by `when query` returns, in order; `then no result` - it returns nothing.',\n};\n\nexport const attributeDocs: Record<string, string> = {\n pii: 'personal data (GDPR Art. 4(1)); renders Chronicle [PII]. Bare suffix marker; @pii is deprecated (PLAY0565). Selects executable model (ESM) v13; consumers must explicitly admit it. Cannot classify identity or enum concepts. An event with personal values and an explicit subject mark refuses binding (PLAY0268) until lineage is admitted.',\n personal: 'Alias of pii: personal data (GDPR Art. 4(1)); renders Chronicle [PII]. No diagnostic; canonical printing writes pii. Selects executable model (ESM) v13, like pii.',\n secret: 'Operational secret, not personal data: encrypted at rest without erasure and withheld from causation. Provider mapping: [Encrypted] + [NotAudited], or [PII] only with pii. Selects executable model (ESM) v13; reference outcomes are unchanged. Cannot classify identity (PLAY0515) or enum concepts. Explicit scope is omitted next to pii. An event combining secret scope subject with an explicit subject mark refuses binding (PLAY0268).',\n sensitive: 'Deprecated spelling of secret (PLAY0565); repair to bare secret. Operational secret, not GDPR Art. 9 special-category data.',\n};\n\nexport const contextVariableDocs: Record<string, string> = {\n '$context.occurred': 'When the command or query was received.',\n '$context.tenant': 'The tenant the command or query is executing for.',\n '$context.command': 'The command being handled, shaped by its `command` declaration.',\n '$context.arguments': 'The arguments of the query being performed.',\n '$context.causedBy': 'The identity that caused the command or query — `subject`, `name`, `userName`.',\n '$context.causedBy.subject': 'The subject of the identity that caused the command or query.',\n '$context.causedBy.name': 'The display name of the identity that caused the command or query.',\n '$context.causedBy.userName': 'The user name of the identity that caused the command or query.',\n '$context.causation': 'What caused the command or query — `type`, `occurred`, `properties`.',\n '$context.causation.type': 'What caused the command or query — a command, a reactor, a schedule.',\n '$identity': 'The caller — token built-ins `id`, `name`, `userName`, `isAuthenticated`, `roles`, `claims`, plus declared identity details. Built-ins are equivalent to `$context.identity`; details are authoring-only until admitted (#600).',\n '$identity.id': 'The identifier of the caller from the auth token; equivalent to `$context.identity.id`.',\n '$identity.name': 'The display name of the caller; equivalent to `$context.identity.name`.',\n '$identity.userName': 'The user name of the caller; equivalent to `$context.identity.userName`.',\n '$identity.isAuthenticated': 'Whether the caller is authenticated.',\n '$identity.roles': 'The roles the caller holds.',\n '$identity.claims': 'The claims the caller carries — `$identity.claims.<name>` reads one.',\n '$context.identity': 'The caller a decision is made about — `id`, `name`, `userName`, `isAuthenticated`, `roles`, `claims`.',\n '$context.identity.id': 'The identifier of the caller from the auth token.',\n '$context.identity.name': 'The display name of the caller.',\n '$context.identity.userName': 'The user name of the caller.',\n '$context.identity.isAuthenticated': 'Whether the caller is authenticated.',\n '$context.identity.roles': 'The roles the caller holds.',\n '$context.identity.claims': 'The claims the caller carries — `$context.identity.claims.<name>` reads one.',\n '$env': 'An environment variable, e.g. `$env.SERVICE_NAME`.',\n '$secrets': 'An encrypted secret resolved at runtime, e.g. `$secrets.azureAdClientId` — stays symbolic in the compiled tree.',\n '$strings': 'A localized string resolved from the `.strings` file of the active locale, e.g. `$strings.invoices.title`.',\n // Every $eventContext path the event-context catalog lists, for projections.\n ...Object.fromEntries(eventContextPaths.map((path) => [`$eventContext.${path.path}`, path.description])),\n};\n\n// One-sentence descriptions of the `pii special` categories (GDPR Art. 9(1)) and `pii criminal` (Art. 10).\n// The same sentences appear in Documentation/screenplay/concepts.md.\nexport const specialCategoryDocs: Record<string, string> = {\n racialOrEthnicOrigin: 'Data revealing a person\\'s racial or ethnic origin (GDPR Art. 9(1)).',\n politicalOpinions: 'Data revealing a person\\'s political opinions (GDPR Art. 9(1)).',\n religiousOrPhilosophicalBeliefs: 'Data revealing a person\\'s religious or philosophical beliefs (GDPR Art. 9(1)).',\n tradeUnionMembership: 'Data revealing whether a person belongs to a trade union (GDPR Art. 9(1)).',\n genetic: 'Data about inherited or acquired genetic characteristics that gives unique information about a person\\'s physiology or health (GDPR Art. 9(1), Art. 4(13)).',\n biometric: 'Data from technical processing of physical, physiological or behavioral characteristics, special only when processed to uniquely identify a person (GDPR Art. 9(1), Art. 4(14)).',\n health: 'Data about a person\\'s physical or mental health, including health care services, that reveals their health status (GDPR Art. 9(1), Art. 4(15)).',\n sexLifeOrSexualOrientation: 'Data concerning a person\\'s sex life or sexual orientation (GDPR Art. 9(1)).'\n};\n"],"mappings":"2IAMA,MAAaA,EAAoB,CAC7B,eAAgB,qKAChB,KAAM,qHACV,EAEaC,EAAsC,CAC/C,UAAW,kKACX,KAAM,oIACN,QAAS,gTACT,OAAQ,2FACR,OAAQ,ggBACR,QAAS,iJACT,KAAM,kJACN,OAAQ,qIACR,SAAU,2LACV,WAAY,uIACZ,OAAQ,iGACR,QAAS,oMACT,MAAO,gKACP,SAAU,mFACV,UAAW,iFACX,SAAU,oEACV,UAAW,iFACX,UAAW,wDACX,SAAU,kFACV,UAAW,gEACX,QAAS,0GACT,UAAW,sHACX,QAAS,2GACT,SAAU,qNACV,eAAgB,mFAChB,SAAU,2FACV,YAAa,4JACb,QAAS,kMACT,OAAQ,uDACR,OAAQ,+CACR,SAAU,wCACV,QAAS,6DACT,MAAO,mFACP,OAAQ,wNACR,UAAW,uMACX,QAAS,uFACT,SAAU,wFACV,MAAO,wLACP,cAAe,oLACf,GAAI,mIACJ,QAAS,gIACT,MAAO,4GACP,WAAY,8JACZ,UAAW,8IACX,KAAM,gRACN,WAAY,2GACZ,QAAS,6FACT,SAAU,6KACV,KAAM,6RACN,QAAS,6KACT,MAAO,uDACP,SAAU,4EACV,MAAO,sEACP,QAAS,ySACT,YAAa,gKACb,WAAY,yHACZ,cAAe,8JACf,YAAa,yPACb,QAAS,kGACT,OAAQ,uGACR,WAAY,mFACZ,UAAW,2EACX,SAAU,qHACV,SAAU,4PACV,MAAO,mXACP,GAAI,qIACJ,QAAS,4HACT,KAAM,ySACN,KAAM,qOACN,QAAS,yJACT,cAAe,oCACf,KAAM,8CACN,MAAO,8DACP,QAAS,gIACT,KAAM,kDACN,OAAQ,+OACR,UAAW,sPACX,OAAQ,kIACR,QAAS,+LACT,SAAU,mEACV,QAAS,0CACT,MAAO,wDACP,QAAS,2CACT,OAAQ,sCACR,MAAO,uCACP,MAAO,4CACP,MAAO,oDACP,OAAQ,8FACR,YAAa,gJACb,YAAa,iFACb,WAAY,mEACZ,WAAY,mEACZ,SAAU,iEACV,IAAK,0HACL,KAAM,iGACN,IAAK,4KACL,UAAW,qOACX,QAAS,0LACT,cAAe,2LACf,OAAQ,qFACR,KAAM,oFACN,WAAY,mHACZ,MAAO,kEACP,GAAI,uGACJ,SAAU,+GACV,OAAQ,6DACR,YAAa,yDACb,UAAW,6DACX,GAAI,mEACJ,UAAW,2DACX,OAAQ,oKACR,MAAO,gLACP,QAAS,8HACT,KAAM,2FACN,IAAK,yJACL,OAAQ,iJACR,GAAI,mIACJ,IAAK,sDACL,OAAQ,sCACR,GAAI,oHACJ,QAAS,uDACT,QAAS,mFACT,IAAK,yDACL,IAAK,2BACL,IAAK,2BACL,OAAQ,0CACR,MAAO,oBACP,MAAO,2ZACP,IAAK,qDACL,IAAK,6BACL,GAAI,6BACJ,OAAQ,uDACR,IAAK,uGACL,WAAY,uDACZ,MAAO,gFACP,KAAM,+BACN,YAAa,2EACb,UAAW,+EACX,WAAY,kFACZ,UAAW,8DACX,KAAM,oDACN,OAAQ,2CACR,IAAK,sCACL,QAAS,qCACT,KAAM,kCACN,KAAM,wCACN,SAAU,oCACV,KAAM,4TACV,EAIaC,EAAmD,CAC5D,UAAW,wJACX,KAAM,oKACN,OAAQ,mNACR,MAAOD,EAAY,MACnB,YAAaA,EAAY,YACzB,QAAS,mHACT,QAAS,+KACT,MAAO,mOACP,OAAQ,gOACR,OAAQ,oIACZ,EAEaE,EAAwC,CACjD,IAAK,kVACL,SAAU,qKACV,OAAQ,mbACR,UAAW,6HACf,EAEaC,EAA8C,CACvD,oBAAqB,0CACrB,kBAAmB,oDACnB,mBAAoB,kEACpB,qBAAsB,8CACtB,oBAAqB,iFACrB,4BAA6B,gEAC7B,yBAA0B,qEAC1B,6BAA8B,kEAC9B,qBAAsB,uEACtB,0BAA2B,uEAC3BC,UAAa,kOACb,eAAgB,0FAChB,iBAAkB,0EAClB,qBAAsB,2EACtB,4BAA6B,uCAC7B,kBAAmB,8BACnB,mBAAoB,uEACpB,oBAAqB,wGACrB,uBAAwB,oDACxB,yBAA0B,kCAC1B,6BAA8B,+BAC9B,oCAAqC,uCACrC,0BAA2B,8BAC3B,2BAA4B,+EAC5BC,KAAQ,qDACRC,SAAY,kHACZC,SAAY,6GAEZ,GAAG,OAAO,YAAYC,EAAkB,IAAK,GAAS,CAAC,iBAAiBC,EAAK,OAAQA,EAAK,WAAW,CAAC,CAAC,CAC3G,EAIaC,EAA8C,CACvD,qBAAsB,sEACtB,kBAAmB,iEACnB,gCAAiC,iFACjC,qBAAsB,6EACtB,QAAS,6JACT,UAAW,mLACX,OAAQ,kJACR,2BAA4B,6EAChC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/screenplay-language",
3
- "version": "4.159.0",
3
+ "version": "4.160.0",
4
4
  "description": "Monaco language service for the Cratis Screenplay DSL — syntax highlighting, IntelliSense, hover and diagnostics for .play files",
5
5
  "keywords": [
6
6
  "cratis",