27bf74389d
Take 6 measured render 35-41ms — WORSE than take 5's 25.5 — and the run could not be attributed to a binary: exe mtime != build contents (incremental builds serve stale exes; a source edit without rebuild is a silent old binary). Three takes of a perf saga had been judged against builds nobody could prove. - ytLive.csproj GenerateBuildStamp target: fresh GUID per compile (writes obj/BuildStamp.g.cs -> Helpers/BuildStamp.Id/BuiltLocal). Deliberately defeats incremental lies: every 'dotnet build' recompiles the app project. - Wordmark shows the id as a superscript (TopBar.xaml, x:Static, 9px grey BaselineAlignment=Superscript); startup.log records 'Build <id> (compiled <time>)' so every take is cross-readable with the visible UI. - FramePump stats split the tick: 'avg render Xms (resolve Y), avg submit Z' — the resolver is timed separately (wrapper resolver on per-tick paths; bake keeps the raw one) so take 7 names the hot half of 'render' with data. - Fixed a latent transition-clock bug found on the way: lastTick now restarts every frame (the branch rework had restarted it only during transitions, letting a transition begun after idle complete instantly on its first Tick). ONE integration test family: BuildStampTests (unit: shape) + BuildStampDisplayTests (RealApp, namescoped FindName on TopBar proves the wordmark SHOWS the id). 47/47 per-class green, clean build 0 warnings. Docs same commit. User's top-bar/session spec (re-sent twice) + settled Q&A decisions folded into HANDOFF Unit B — next work unit after take 7 verdict.
78 lines
3.6 KiB
XML
78 lines
3.6 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
||
|
||
<PropertyGroup>
|
||
<OutputType>WinExe</OutputType>
|
||
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
|
||
<Nullable>enable</Nullable>
|
||
<ImplicitUsings>enable</ImplicitUsings>
|
||
<UseWPF>true</UseWPF>
|
||
<EnableWindowsTargeting>true</EnableWindowsTargeting>
|
||
<ApplicationIcon>Assets\llamacasty-icon.ico</ApplicationIcon>
|
||
<AssemblyName>ytLive</AssemblyName>
|
||
<RootNamespace>ytLive</RootNamespace>
|
||
</PropertyGroup>
|
||
|
||
<ItemGroup>
|
||
<Compile Remove="ytLive.Tests\**" />
|
||
<EmbeddedResource Remove="ytLive.Tests\**" />
|
||
<None Remove="ytLive.Tests\**" />
|
||
<Page Remove="ytLive.Tests\**" />
|
||
</ItemGroup>
|
||
|
||
<!-- Per-build identity stamp (2026-09-04): takes 1–6 could not be attributed to an
|
||
exact binary — render perf "fixes" were being judged against builds we could not
|
||
prove were running. A fresh GUID per build makes an incremental compile impossible
|
||
(that is the point: every exe you launch was compiled NOW), the wordmark shows the
|
||
id, and startup.log records id + build time. -->
|
||
<Target Name="GenerateBuildStamp" BeforeTargets="CoreCompile">
|
||
<PropertyGroup>
|
||
<BuildStampFile>$(IntermediateOutputPath)BuildStamp.g.cs</BuildStampFile>
|
||
<BuildStampId>$([System.Guid]::NewGuid().ToString('N').Substring(0,8))</BuildStampId>
|
||
<BuildStampTime>$([System.DateTime]::Now.ToString('yyyy-MM-dd HH:mm:ss'))</BuildStampTime>
|
||
</PropertyGroup>
|
||
<ItemGroup>
|
||
<BuildStampLines Include="// <auto-generated> Per-build identity (ytLive.csproj GenerateBuildStamp)."/>
|
||
<BuildStampLines Include="// Shown as the wordmark superscript and logged at startup: proof of which"/>
|
||
<BuildStampLines Include="// binary produced a test recording (2026-09-04). Never edit by hand."/>
|
||
<BuildStampLines Include="namespace ytLive.Helpers%3B"/>
|
||
<BuildStampLines Include="public static class BuildStamp { public const string Id = "$(BuildStampId)"%3B public const string BuiltLocal = "$(BuildStampTime)"%3B }"/>
|
||
</ItemGroup>
|
||
<WriteLinesToFile File="$(BuildStampFile)" Lines="@(BuildStampLines)" Overwrite="true" WriteOnlyWhenDifferent="false" />
|
||
<ItemGroup>
|
||
<Compile Include="$(BuildStampFile)" />
|
||
</ItemGroup>
|
||
</Target>
|
||
|
||
<ItemGroup>
|
||
<Resource Include="Assets\llamacasty-icon.png" />
|
||
<Resource Include="Assets\llamacasty-logo.jpg" />
|
||
<Resource Include="Assets\starting-background.jpg" />
|
||
<Resource Include="Assets\brb-background.jpg" />
|
||
<Resource Include="Assets\live-background.jpg" />
|
||
<Resource Include="Assets\ending-background.jpg" />
|
||
<Resource Include="Assets\chat-background.jpg" />
|
||
</ItemGroup>
|
||
|
||
<ItemGroup>
|
||
<None Include="THIRD-PARTY-NOTICES.txt" CopyToOutputDirectory="PreserveNewest" />
|
||
</ItemGroup>
|
||
|
||
<ItemGroup>
|
||
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
|
||
<_Parameter1>ytLive.Tests</_Parameter1>
|
||
</AssemblyAttribute>
|
||
</ItemGroup>
|
||
|
||
<ItemGroup>
|
||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.10" />
|
||
<PackageReference Include="NAudio.Wasapi" Version="2.2.1" />
|
||
<PackageReference Include="NAudio.WinMM" Version="2.2.1" />
|
||
<PackageReference Include="Notification.Wpf" Version="11.0.0" />
|
||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.12" />
|
||
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="8.0.0" />
|
||
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2903.40" />
|
||
<PackageReference Include="Velopack" Version="1.2.0" />
|
||
</ItemGroup>
|
||
|
||
</Project>
|