You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Screenplay's own workflow statement is author the document first, then Stage performs it. That only works if the language can describe everything before any code exists. A file <path> reference is realization metadata — a pointer attached once a slice has been implemented — and must never be the only way to give a construct meaning. Today the language mostly honors this, but not everywhere, and the exceptions break the authoring-first story.
— the constructs proposed in #39 must follow this principle too: file optional, not required
The reactor row is the defect. A greenfield author cannot write:
reactor AcceptedInvitationProvisioner
on InvitationToJoinAdaAccepted
— "when an invitation is accepted, provision the account" — without first creating a code file to point at. The construct's meaning is locked inside the escape hatch.
Evidence from a generated document
A document generated from a real Arc application (Ada, via Cratis.Arc.Screenplay 20.65.0) contains 24 reactors, every one of the shape:
reactor AcceptedInvitationProvisioner
on InvitationToJoinAdaAccepted
file Admin/Invitations/Provision/Provision.cs
The file reference satisfies the parser and tells a reader nothing. This is not the generator's fault — the language offers no other way to state what a reactor does. (#34 proposes declaring reactor outputs — produces <Event> / executes <Command> — which is the missing declarative body.)
Treat file uniformly as attachable realization metadata on any construct that supports it, and state in the grammar documentation that a document must be expressible — and meaningful — with zero file references. Hand-authored documents precede code and gainfile lines as slices are implemented; generated documents arrive with them pre-attached. Same language, two directions.
Found while validating a generated 5,348-line document from a production Arc application: the constructs that lean on file are exactly the ones a reader cannot understand from the document alone. Related: #32, #34, #39.
Principle
Screenplay's own workflow statement is author the document first, then Stage performs it. That only works if the language can describe everything before any code exists. A
file <path>reference is realization metadata — a pointer attached once a slice has been implemented — and must never be the only way to give a construct meaning. Today the language mostly honors this, but not everywhere, and the exceptions break the authoring-first story.Audit of where the language stands
file/code required?commandproduces(+ mappings, conditions)handleris an optional escape hatch. OKpolicyrequireconditionsscreendata,action,navigate, layoutfileis an alternative. OKconstraintunique …formsfile— acceptable as an escape hatch, but see #32 for declarative predicatesreactorontrigger must carry afileor an inline code block; the parser rejects a trigger with no body.fileoptional, not requiredThe reactor row is the defect. A greenfield author cannot write:
— "when an invitation is accepted, provision the account" — without first creating a code file to point at. The construct's meaning is locked inside the escape hatch.
Evidence from a generated document
A document generated from a real Arc application (Ada, via
Cratis.Arc.Screenplay20.65.0) contains 24 reactors, every one of the shape:The file reference satisfies the parser and tells a reader nothing. This is not the generator's fault — the language offers no other way to state what a reactor does. (#34 proposes declaring reactor outputs —
produces <Event>/executes <Command>— which is the missing declarative body.)Suggested changes
file/code remains the realization escape hatch. At minimum allowdescriptionas a body while reactor: declare produced side effects (events and executed commands) #34 lands.fileuniformly as attachable realization metadata on any construct that supports it, and state in the grammar documentation that a document must be expressible — and meaningful — with zerofilereferences. Hand-authored documents precede code and gainfilelines as slices are implemented; generated documents arrive with them pre-attached. Same language, two directions.Context
Found while validating a generated 5,348-line document from a production Arc application: the constructs that lean on
fileare exactly the ones a reader cannot understand from the document alone. Related: #32, #34, #39.