Skip to content

Screenplay generation: multi-project applications are only partially described #2399

Description

@woksin

Summary

ScreenplayGenerator.Generate takes a single Compilation, and ArtifactCatalog.From walks only compilation.Assembly.GlobalNamespace. A multi-project Arc application (Domain/Application/Api layering, or a main app plus sibling contexts) is therefore only partially described: artifacts in referenced projects are invisible, and cross-project event references degrade to SP0021 warnings.

Evidence (real application)

Ada's solution has several projects containing Arc artifacts (Core, Lobby, Lobby.Contracts, Integrations, …). Generating from Core.csproj yields a document that:

  • describes only Core's artifacts,
  • refers to InvitationToJoinAdaAccepted (declared in a referenced project) that it never introduces (SP0021; the official Screenplay compiler then warns on the generated file).

The CLI integration (branch feature/arc-screenplay on Cratis/cli) narrows a solution to exactly one project and errors when two candidates remain — so pointing the tool at a layered solution either fails or silently describes a fraction of the application.

Suggested fix

Add an overload accepting multiple compilations and merge the catalogs:

ScreenplayGenerationResult Generate(IReadOnlyList<Compilation> compilations, ScreenplayOptions options);
  • Walk each compilation's own assembly; union the artifact catalogs (ordered by assembly name, then the existing deterministic ordering, so output stays reproducible).
  • Slice/namespace attribution already works per-symbol, so features from different projects land in the right modules; SegmentsToSkip/module inference may need a per-assembly default.
  • The CLI can then hand over every project of the solution (minus specs/tests) instead of erroring on ambiguity.

This is the difference between "describes the project you pointed at" and "describes the application" — the stated goal of the tool.

Environment

  • Cratis.Arc.Screenplay 20.65.0 (Analysis/ArtifactCatalog.cs, IScreenplayGenerator.cs)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions