Integrating Synopsis
August 14, 2026 ยท View on GitHub
CI artifact
Run Synopsis after the specs. --fail-on-empty catches a misplaced source root, while --format both leaves
HTML for people and JSON for tools:
- run: dotnet test --configuration Release
- run: dotnet tool restore
- run: dotnet tool run synopsis . --format both --output Artifacts/synopsis.html --fail-on-empty
- uses: actions/upload-artifact@v7
with:
name: system-synopsis
path: Artifacts/synopsis.*
Use a local tool manifest for repeatable builds:
dotnet new tool-manifest
dotnet tool install Cratis.Synopsis.Tool
GitHub Pages
Generate site/index.html, upload it with actions/upload-pages-artifact, and deploy with
actions/deploy-pages. The output has no runtime or asset-path assumptions.
Local development
Add a convenience target only if the team wants documentation on demand:
<Target Name="Synopsis" AfterTargets="Test" Condition="'$(GenerateSynopsis)' == 'true'">
<Exec Command="dotnet tool run synopsis "$(MSBuildProjectDirectory)" --output "$(MSBuildProjectDirectory)/Artifacts/synopsis.html"" />
</Target>
This is opt-in because documentation generation should not tax or mutate every normal build.
Cratis product path
The recommended evolution is:
- Ship and harden the standalone tool and
Cratis.Synopsislibrary. - Let
cratis synopsisprovide discoverability by hosting the library. - Replace the tolerant
.playreader with a Screenplay syntax-tree adapter. - Let Studio visualize
synopsis.jsonbeside an event model. - Overlay Stage specification run results without making execution mandatory.