perf(deployment): staleness/comparison paths no longer Roslyn-compile every script — deploy gate remains the authoritative compile

Claude-Session: https://claude.ai/code/session_01MtdgwpEeCUn6cUA5f1LMPj
This commit is contained in:
Joseph Doherty
2026-07-09 15:48:45 -04:00
parent 730bf19162
commit 854a6a8c0b
9 changed files with 226 additions and 15 deletions
@@ -142,6 +142,20 @@ The system maintains two views per instance:
These are compared to determine staleness and generate diffs.
The comparison path is **hash-only by design**. When the Template-Derived
Configuration is re-flattened for a comparison (the Deployments comparison page)
or for the Transport stale-instance probe
(`IStaleInstanceProbe.GetCurrentRevisionHashAsync`, used per-instance across a
bundle import), the pipeline is invoked with `validateScripts: false`, which
skips **only** the expensive Roslyn script-compilation stage
(`ValidationService.ValidateScriptCompilation` — a non-collectible assembly load
per script). Structural and semantic validation still run. These read-only paths
need only the flattened config and its revision hash, not a compile, so a script
that does not currently compile still yields a comparison. The **deploy gate
remains the authoritative compile**: instance deployment re-flattens with
`validateScripts: true` (the default), and a script that fails to compile blocks
the deployment (see Site-Side Apply Atomicity).
## Deployable Artifacts
A deployment to a site includes the flattened instance configuration plus any system-wide artifacts that have changed: