Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
False
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
d925707e-cef1-4c34-97cb-83fc0ceeb395
1 change: 1 addition & 0 deletions .dotnet_home/.dotnet/MachineId.v1.dotnetUserLevelCache
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
61e865d1-0113-41a6-8217-422fb0204ee1

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The .dotnet_home/ directory containing .NET telemetry data, machine IDs, and sentinel files has been committed to the repository. These files contain local build environment artifacts (telemetry payloads, machine identifiers) that should not be tracked in version control. They should be removed from the PR and added to .gitignore.

Suggested change
61e865d1-0113-41a6-8217-422fb0204ee1
# MachineId cache intentionally cleared; do not commit user-level cache data.

Copilot uses AI. Check for mistakes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjz+0O3IG5RIwhixEZa5EaRo5iIltxS1LqGsf+9oHaLxL3lJgw0M+88fGdeUXIHQCN6dzz+doJUV9SjGvcQI0xhwjGlj5SMXI9MDMQaLjX/inoUP8ALGpEW3lNvAXNQgEUgEk989jgEsJTQQJgUrab7tqLxFbk4BDhFD0Nev0BZY05oRH/GFPJz6+3i4Je8haHkBe7SWl3yTczfz1Dqy+WHFdaWN8SARkS0DXyiCvtgKBbaWWyJ4JgqycLMJXGBXtJiqlCSW4Y1fP/ROuSaoPqRDYwPBDOLzj0KrrqmdnIrPL4cm4Cdzm2L93t4/xxf0QkKGln/H8dLuRu/xJt1mxY4wXJ0ZYVy4/Ph4FJAPTqWfIRSI+xETlCmvMbaYHqvnTGUBuO0kDoYLhnXgRMIhmgZbLBOCTUzL+UcJmO1mEVgVAQFQkwa9Whntiyuxpy6q/b3S4RUUY8+PXT3i6tzLoc31B8uRO9+AWiTjUbEieRKaxCcc2fVxAgErbxSbPKO6HliQD0QaYW2VBPKLSOWS6WNDo5Yj3r00fmnmKC7u0UjUhSMkoFiQinHgjqFDaMaC8bmiTAiAFr39znVmLa8rd1dqvCt7POiEf3ulhUuk74r/ilW8HUrDcJfqvnwvuSw+dr9MAAlAxko4S1pq8etdp8hxAK+QsPxWLZrvf+lMMUIaVK2UiDV7t7Vp+4Ptz61pQiaEz1D0D4wZoJxAJRrOUvJQTrg3goJzCllp0kYw8gkqBCzUF4xTZtQaH7rdotbZ7xVc8CGccDCcoYNmR0mMjDHnQYNbzl2n5aWFyyTmmjAHmaKhecCW+0nbPjsiQeYuJU/Ibmahe5TfYCSYPlp5o/Rl7zmuXZX23RvKHzeUjsb3W6h55jwPzvu2+y/Q+nac7mY2qpcX+jcowO4dStw2K/O+Iru2550j/vxYXQgmpgePVRX6na8hjkfhKD0fD6f/wUAAP//AwBzv4k7ugQAAA==
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACpSU227cNhCGX0XgtSjzfNBdELeoEQQxYqMtesfDyCaipbYUta5h7LsX1G7rpHe9E0acmX8+/sM3lN0B0Ig+HI8/nSDXFfWopj3ECFOYcEzpIyUj1yMTAyXEKC7+QD1Kn+AVjUiLEGiwgDkowCISiT2fAo4RLCU0EiZFq+meVjS+IZeGCKcUYFjWX6GsacloRL+lHJeX1tulIczLFoeyzHCX1+pyaGL+fIFSXy8HVlhb3pAiGhHRNnJPFQ7RUCy0s9gSwTFVksWJS+IivaSlXKFkNw9r/PbeOi41Qw0jGxgfCGYWnXsUXXVNrXcrPL4em4Cdzm2L93t4/xzf0AkKGln/D8dLuZswp5t18zOcYD66skK5Ccvh4HJEPTqW5QilJtiJ7EPOs6tpyd212cc5Qa6oR2HJU3rayv4XjShEb4wHK40yLhoqbSCBGqMMGHDUToJrJYiZvPXOgOZMRhot4w64IcqiHn156O5nV6elHH4g/3Chevc/oJ6geDQiTiRXWoPgnDurPCMQtQpKMR8c0ZNnQAMQaYW2VBPKLSOWS6WNjo7YgHr02YXnlKG7u0UjUhSMkpFiQinHgjqFDaMaC8YmTxgRAK37xyXXlLdlW7u7XOHpX0g/u3mFy6QfSnhOFULdSuP6u2pevC9L3ELt3k1AyUAGSnhL2upxq91XiKlAqNBwPJbtWu8/KUwxQpqUrRTItbt39bn7xa3PbTGi5kRPEHWIjJloHADlWk5ScpAOeLBCAnNKWe+FMYx4QYWYhAqKadqEQvNct9tcGsGU8xrHSUxYSKex4wKwo9PEFScUTJP4zrH7Mre8aJnURAMOMFEsAhfY6uCx4VMgAcBzK79DcvUf3af6BCXD/N3Mn1Moy7pMtbvapvuBwtctt6ej2y30kjL+a8d9u4RvULp2XS7lti7XGzr36ABu3Qoc9pdnfEP3bVe6x/0BYnQgmpgePVRX6na8hjkfhKD0fD6f/wYAAP//AwDOsutcvgQAAA==
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACoyUTW/cNhCG/4rAsyjzSxQloAfDdlAjTW3Ym6bojSJHXsJacktRdgzD/z2gVs6u00tvwmg+33mGr8jrHaAOne/3V0/g04RKlNxiYoRJTDimdENJx5uOiUpQSQil/6ASuc/wgjrUCGOoaQFzkICFJTXu+WCwtdBSQi1htcg59cOEulekXWXhyRmowvQXxMkFjzr0zXkbnnNt7SozhtlWMYxw7aekvcnN/PsMMb0cHCaYclzlLOoQaVrLeyqxsYpi0egWt0RwTGXN7MBroi09hDmfIHo9VpN9PJa2IXlIpmMV4xXBrEVvJbI66dxtryfYvOxzA4s6l9leLubls3tFTxBRx8p3HQ/pzszoznZTP7vRniUdHyANUe/gOcRHeNIjKtE+hj3E5GCR5ea+OLZESUUqJhkhqERftNk6D8X1ZXEz5oFty+qGNIANDBQLwwVuG9NjxQdDDEDP2xqV6DNED+NJ1i/OxDCFIRWr2sWHOhfBJ+fnME/FtU/wEHU6xH3S4wTZYY4RfCpuddoWv+tpm5dvG06aAWxjLGPKKg1AeVMPdc2h1sBNK2pgWsq274VSjPSCCjEIaSRraAbjdu5HN23vQNuXTbibc0k/j1mimznt57Tq/835q+9wDNhEt9uBPXpvFplvR52GEHfXFnxyg8vbOcFrIWocl9mKNfPF6MCnD1KjDkkKStaWYkIpx4JqiRWjDRaMDT1hRABkri6CH9zD/FMtY3ulemhrJZW2itatIYYqJRUo0LQdBG+kIGro214raDirLbUt4xq4IrLNA8ZgZ5N+BYISjkp0N/t8nsV1nvzZefxdnqh4G0MKJoxHVf4j70XY7cPkUp58WFf7dYIvwee/6+l/DD4P6WiDfAfFcnqW9VJTLrBRmUSgFvdEctzXQyNqydkgGCrRZTCPEIsMmHZ+Wcg7Uzf3xXk0W5fApDnmyn8v4xx2+en9ZI5KVH9ebS5ChPP9vlytvz2pKgN8c1+8L//Dyr9O2XsbpjxEivMJQ/cwDu9tnZB04K64A+simLT82hwCV4k+0LVGncfkBm3SlA/kj2AWIlbEVpdf653o/zP6UPxkBysNaya6HOv94QVcIPhfD+Db29vbDwAAAP//AwAJFcqc7AUAAA==
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACpSUy07cMBSGXyXyOg6+5bqj0KqopUVAadWdY58MFh57ajtQhObdK2eGMrTqorvIOf+5fOe3n5CTa0ADOt5s3t6DSxGVKJnliBHWYMIxpdeUDLwdmKgo7QSp6++oROYDPKIBtUIpqnrAHBrAQpMaj3xSWGvoKaGasFrknHIV0fCEpKk03BsFlY83EKLxDg3oq3HaP+Ta0lTK+llXwVs4czFJp3IzPx4gpMddQISYdZXRaECk7TUfaYOV7igWrexxTwTHtKmZnnhNpKY7mXEJgpO2ivrupbT2yUFSA6sYrwhmPdqWSMskc7ejjHD9uMkNLHRO83m5HC+fwxO6h4AGVj5z3KU7UtYcreM4G6uPrF+tjFudeDeZ1RxkyoVLtAl+AyEZWLi8MU6Gx49+tcr50DtpI6ASXUNYGyft7scpTHK26crPYYES9d2/YtCA5Jw8KtEC0dqlbLEf5sQacOkv7UHhz1fFhZVp8mH9aj9XO/Zn/4H+XKpb46A4O0UDaih0Ta0pJpRyLKhscMdoiwVj00gYEQBZc+JdMm72cyzOXILVntqr/o6DujUJVJpDnulbk312EbyeVSpeFkxJRSpKeBbNaTOn4hK0CaAS5CGuw7zP94eENYwQVKJ3xsJfeE7mEMCl4kKm2+K9jLf5JuiWk3YC3SrNWKc7CUB5W091zaGWwFUvamCyafpxFF3HyCioEJNoVMNamruHbLJi8fWkOt2OSmBFaopFrzWWDEZcy0l0fSsBpu4V3OKzzTrds7olLWAFE8VCcYH7Vo2445MiCmDkfX3AaW8Iuox6aMIvEfTeS5921v49u3fRPzO5gTD6aFJ+Cs6NM2tp/wx5gfwBggN7APrcqOCjn1Kxd1jxCv3l7PJbVCxuezAO/1x2fOrVHYQie0Qad7CX7Xa7/QUAAP//AwDsUw+m0gQAAA==
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACoyUTW/bOBCG/4rAs6nwSxIlYA+Gk2KNbjZB4m6LvVHkKCYik16KShoE/u8FZaW228vehNF8vvMM35FTO0ANWu73Ny/g4oAWKNrJxAgrMeGY0g0lDa8aJvKyrimR4l+0QPYzvKEGVUJrqmvAHErAwpACt7zT2BioKaGGsEKknOppQM07UjY38GI15H74B8JgvUMN+mqd8a+ptrK57v1o8uB7WLshKqdTM/+9QohvR4cBhhSXW4MaRKra8JaWWBtJsahUjWsiOKZlwUzHC6IMPYZZFyE41eeDeT6VNj46iLphOeM5waxGhwUyKqrUbasG2LztUwOTOtfJvpjM02fzjl4goIYtPnQ8prvSvb3aDe1oe3MVVXiC2AW1g1cfnuFF9WiB9sHvIUQLkyx3j9mpJUpykrOSEYIW6FbprXWQra+zuz4NbGpWVKQCrKGjWGgucF3pFkveaaIBWl4XaIE+Q3DQn2W9tTr4wXcxm9XOLuqsvIvWjX4csrWL8BRUPMZ9Uv0AyWEMAVzM7lXcZn+qYZuWbypOqg5MpQ1j0kgFQHlVdEXBoVDAdS0KYKos67YVUjLSCipEJ0pdsoomMO7HtrfD9gGUedv4hzGVdGOfJLob436Ms/5frbv5DqeATbC7HZiT92aS+b5XsfNhtzbgou1s2s4ZXhNRfT/Nls2ZV70FFy+kRg0qKciyMBQTSjkWVJVYMlphwVjXEkYEQOJq5V1nn8afamnTStlCXchSKiNpUWuiqZSlBAmK1p3gVSmI7Nq6VRIqzgpDTc24Ai5JWacBgzejjr8CQQlHC/QwunSe2TpN/mod/l6eqXgffPTa9ydVfpN35Xd7P9iYJu/m1X4Z4Na79Hc+/cvgpY8nG6Q7yKbTY0Zp0iqDZadbLDSVuGW0wEVVtLViDESbSLz2+hlClgBT1k0L+WDq7jFbBr21EXQcQ6r8bRrnuMtPHydzUiL/+2az8gGW+/1itv7xIvME8N1j9rH8i5V/GZL31g9piBjGM4Yeoe8+2joj6chd9gDGBtBx+rU5Bs4SXdA1Ry1DtJ3ScUgH8pfXExEzYrPLr/XO9P8ZfSx+toOZhjkTnY718fgCThD8rwfwcDgcfgAAAP//AwDdWEGd7AUAAA==
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACpSUyW7kNhCGX0XgWZS5iYtug3GCOIPBGGMjCXLjUrKJUZMdimrHMPrdA6o78ExuuQkF/bV8/KveULIHQBP6cDz+dIJUV9SjGvcQI0xiwjGlj5RMXE1MDERqIxX9E/UofoJXNCElvKfeAOYgAYtARuz47HEIYCihgbBRtJz2aUXTG7JxCHCKHoa8/gZljTmhCf0eU8gvrbaNg1/yFoaSF7hLa7XJt2b+eoFSXy8/rLA23RADmhBRJnBHJfZBUyyUNdgQwTGVIwszH4kN9CKLqUJJdhnW8O29dMg1QfUTGxgfCGYGnXsUbLWtW2dXeHw9tgZ2Orct3u/h/XN6QycoaGL9vxwv6W78Em9qPi5wguVoywrlxufDwaaAenQs+QilRtiJ7EMui60xp+5a7OMSIVXUoy8P3f1i65zL4QdMDxcEd/+DwAmKQxPiZORSKRCcc2ukYwSCkl5K5rwlanYMqAcyGqEMVYRyw4jho1RaBUuMRz16WrKzy6/rzs8w4nQgikkGAgwTUhpPgGuYRwUkWCmd1N4ErhUTOmhujbXUOFDeSN+88dn655igu7tFE5IUtBwDxYRSjgW1EmtGFRaMzY4wIgDaNB9zqjFteVu7u1Thqez80IR+tssKF3Ifin+OFXzdSoP6h2zF7ksOm6/duwMoGchACW+irR632n2FEAv4Cg3vY9mu+f4jYZIR0lrZSoFUu3tbn7tf7PrctiIoTtQMQfnAmA7aAlCuxnkcOYwWuDdiBGalNM4JrRlxggoxC+klU7Q1Cs1w3e7xwGfOlVbYcOewmBVgI8aAAwgXGDjpXWPyzrH7suw6w0ZFFGAPM8XCc4GN8g5rPnviARw343dIruaj+1SfoCRYvpv5c/Qlr3mu3dWG3Q8Uvm6p3Y1ut+RLTPjvHfdt9t+gdO25bExtV64vdO7RAey6FTjsZ2d6Q/dtUbrH/fowOhBFdI8eqi11O17DnA9CUHo+n8//AAAA//8DABTrlD+7BAAA
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACpSUS2sbMRSF/8qgtTXRc167kAc1ISQkJi3daaQ7sfBYciVNEhP834vGDmm6Kd0IodG5Ovc7l3lHTm0Bdeh8t7t6AZciWqBk5yNGWIUJx5SuKOl43bGmbBiTlWx/ogWyN7BHHaqF1lS3gDlUgIUhEvd80NgYaCmhhjApck31HFH3jpQtDbxYDaWPTxCi9Q516Lt1xr/mt5Ut9egnUwY/wtLFpJzOZn69Qkj744UIMetKa1CHSN0a3tMKa9NQLGrV4pYIjmklmRm4JMrQo8y6BMGpsYxm8/m08clB0h0rGS8JZi06LJBRSWW3vYqw2u+ygZnOZT5fzMfztntHLxBQxxYfHI/lzvRoz7axn+xozo5rUnET53VQOvmQe9kFv4OQLMxozmOEbT/uVypuro938jZevYGeEpgLP7mEOkRFBjqzGUeVrHfFyePFaMGl+WMK1kWr/1VLogW6eyzuR5UGH7Zfong8Yl7+B+VbpdfWQbG8RB2qKDSVNBQTSjkWVFW4YbTGgrGhJ4wIgKy58C5ZN/kpFkuX4DnMLaEOXasxwtHfedBrm0CnKeQ+f1SZwH3wZtKp+MySkpKUlPAsmtJuSsUDGBtAJ8hNrMJ0qveXhFWMkGxlCgFcKu5VWhffVFzn+TY1J/UAptaGscY0CoDyWg5ScpAKuG6FBKaqqu170TSM9IIKMYhKV6ym2Sjk0SnmaR1oC0wYiQXpByzamSNoLJlpoJa8YnX7hWNxN2adaZmsSQ1Yw0Cx0FzgttY9bvigiQboeZuj/EBymgc6d3UDwcH4R8+3Vgcf/ZCKU9jFFwoPk8t/gGIO/tU6/DbjvvR6A6HIcSnr8tSfEjocDoffAAAA//8DAMWO0eVIBAAA
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACpSTW0/cMBCF/0rk53XwLU6cNwRUXSEEghWt+ubYE9Yi2Fvb4SK0/71ydiugb32JolFm5pxvTt6R10+AenS62108g88JrVB2S4kRJjHhmNINJT1ve9bVHWukaNgvtELuEt5Qj1phDDUKMAcJWFjS4IGPBlsLihJqCWtEmakfEurfkXa1hWdnoA7pHmJywaMe/XDehpeyW7vaTGG2dQwTrH3K2psi5vcLxPx2+CBBKn21s6hHpFWWD1RiYzuKRasVVkRwTGXD7Mgboi09tDmfIXo91ck+fqy2IXvIpmc14zXBTKH9ClmddVE76ASbt10RsNA5L/XVUl5e+3f0DBH1bPWX42HciZncyVMaZjfZk8Mz6/RYDO5i2EHMDhYci8Np0tkFXx03nU0OfEYrdH1X3Uw6jyE+fWF0d/C//g/7m7L94hXMnMGehdln1CMqFFqhK222zkO1Pkc9khQ62ViKCaUcC6ol7hhtsWBsHAgjAqCMOws+Oz+HOVVrn+EhLgZQj77pKcFB+mk0W5fB5DkWVz9licFNDHY2ufrgT0lNakp4aZrzbs7VLVgXwWQo/jZxPs77p4VJRkiRMscIPlc3Om+r7zptSyZty0k7gm2NZayznQagvG3GpuHQaOBGiQaYllINg+g6RgZBhRiFNJK1tAiFcu5qSZjh0qhOEKwkt1hoSbBWpsCGRoKGjsj2C8fqeip9VrGmJS1gAyPFwnCBVWsG3PHREAMwcNV8QnK8Pl1cXUL0MH3yfOVMDCmMuTrmoPpC4Xb25a+tlky8OI9fF9znwTxCrMq5tPMlqccL7ff7/R8AAAD//wMAESZbC/wDAAA=
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACpRTXU/bMBT9K5Gf49RfsZO8obJpFUIgQNu0N8e+oRap3TlOAaH+98lpJ2Bve4uucs49H9dvyOsdoA5d7PdfDuDThEqU3DJihElMOKb0gZKOq441VcNqLqj8hUrkruAVdUgJY6hpAXOQgIUlNe75YLC10FJCLWG1yJz6cULdG9KusnBwBqowfYc4ueBRh344b8Nz3q1dZcYw2yqGETZ+StqbLOb3M8T0evphginjKmdRh4hqLe+pxMY2FAulW9wSwTGVNbMDr4m29ARzPkH0eqwm+/S+2obkIZmOVYxXBLMWHUtkddJZba8neHjdZwFLOpd5Xi7j5bN7QweIqGPl3xxPdCszupUJu532djU476YtKtE+hj3E5GBJYjE3jjq54IvzkvXowCdUopv74nbUaQhx9yme+5P1zX84v9Zm6zwUm0vUIUmhkbWlmFDKsaBa4oZRhQVjQ08YEQAZsw4+OT+HeSo2PsFjXFSiDn3V4wQnfRfRbF0Ck+aYpf+UuWZ4cWkdbB4QVKLbGOxsUvEeNyUVqSjhmWNO+zkVd2BdBJMge3qI85n+HwiTjGTG9Rwj+FTc6rQtvulpm0/QKk7UAFYZy1hjGw1AuaqHuuZQa+CmFTUwLWXb96JpGOkFFWIQ0kim6KI7t1ssB8VkI8FQjc2gORa9ANxAqzGpTSulEECV+hRrcTNmnG1ZrYgCbGCgWBgucKtMjxs+GGIAet7WHyI5N04XV1cQPYwfPF87E8MUhlScuy8+pXA3+/xIi+UOnp3HL0v6l8E8QSxye9r5fJjnwo7H4/EPAAAA//8DAKNC7pHrAwAA
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACoxUTW/jNhD9KwKvNRV+U9QtTbJYY5FNsDa2RW8UOYrZyJRLUUmDwP+9oJzsJg0K9CII5HDemzdv5hlFuwfUovPD4eoBYp7QCuWwHDHCFCYcU7qlpKVNS1TNpSFCmj/QCoUv8IRapIVz1BnAHBRg4YnEHe8d9h4MJdQTJkXJae8m1D4jG2oPD8FBPU7fIU1hjKhFv4Xox8eCbUPthnH2dRoHWMcp2+gKmb8eIeWnU8AEU3lXB49aRLkhklPAspEWCw0CWyUEtp73wjVc2k6dnoWYIUU71JO//wntxxwhu5bVjNcEM4OOK+RttoVtZyfYPh0KgUWdy3K+Wo6X3/YZPUBCLVu96nhKd+aGcLafujkM/mz5ohU6pPEAKQdYhLjZVD9JUFKTmilGCFqha+t2IUK1vqxuhlKiN0xqogE76CkWjgtstOtww3tHHEDHjUQr9AVShOFN1uvg0jiNfa5e9K3e4WzOL66i7QYoGJ/sMAFaoYsx5hDncZ6qdcxwl2w+JfsRMKcEMVe3Nu+qz3baFQ94zYnuwWvnGWt8YwEo17KXkoO0wJ0REphVynSdaBpGOkGF6IVyimla/PFrEWkzOwfThFq0TXMBWwwwDAuH6qURF0OAmN/phFqkKDRKeooJpRwLahVuGNVYMNZ3hBEBQF9htjbdQUYtAt4RJwQzTe+oo8LYviumMUb1nWGCaQuCglDCdIYLZ4WRxtBON5J1jSyi36bRzy7/u5eU8NPln+BykQq1SHrnvNOCaW164xVwxTW4xvimo7Jz0BDd+L53ThNJldeiIUQTCp5S2zP3Sv8q3oUIl2E6DPbpDW5TcOkvjgkuHQfyPv5Tsnt4HNP915NR669XW7RC3+ZYxr1aFxM8hoj/VqUd1/OQw3aXwHrw16OHj06BMhDVaQb7XlglHaZNY7CwnuOuVx53sped1Q4YFK0uR3cPqSoWsyGWufmR7GZTnSe3CxlcnlPh9/vC42ZT3Q4292Pav1sTbwr7oECt1aL+zZwPc66+gQ8JXF7Iv/hqeX6xA3f/sa43qT+PU7HJ983F6MvVa7NfnEhPY3TaRouA/2sZHVdoD3aaE+yXhds+o3WMkBbgy/k0cet4HYYhTODG6CfUSqlMbZR+4fefYYo1tdZcHo/H4z8AAAD//wMAeZBWO90FAAA=
10 changes: 6 additions & 4 deletions .github/workflows/dotnet-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,13 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0

# Semantic Versioning
- name: Bump version and push tag
if: github.event_name == 'push'
id: tag_version
uses: mathieudutour/github-tag-action@v5.6
with:
Expand All @@ -75,9 +76,9 @@ jobs:

# Install the .NET Core workload
- name: Install .NET Core
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v4
with:
dotnet-version: 7.0.x
dotnet-version: 8.0.x

# Restore the application to populate the obj folder with RuntimeIdentifiers
- name: Restore the solution
Expand All @@ -92,13 +93,14 @@ jobs:

# Upload the MSIX package: https://github.com/marketplace/actions/upload-a-build-artifact
- name: Upload build artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: StageManager
path: ./Artifacts/StageManager.exe

# Create the release: https://github.com/actions/create-release
- name: Create release
if: github.event_name == 'push'
id: create_release
uses: softprops/action-gh-release@v1
with:
Expand Down
9 changes: 8 additions & 1 deletion ReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ This prototype groups applications by their process. By switching between so cal

Windows can be moved from one scene to another by dragging them onto scenes on the left.

## Recent Updates

* **Split-Screen Layout Support**: Use `Ctrl+Click` on a scene to seamlessly open it in a full-screen split-screen layout alongside your active window. Features an atomic layout system for tear-free window positioning.
* **Enhanced UI/UX**: Implemented modern aesthetic enhancements including support for the Mica backdrop and fixed DWM thumbnail clipping bugs for a cohesive feel.
* **Performance Optimizations**: Overhauled the internal tracking systems to prevent UI thread Dispatcher flooding, resolving lag/stutters and CPU spikes.
* **Targeted Stability Fixes**: Eliminated severe GDI memory leaks from cached icons, race condition crashes in scene toggling, and background tracking issues.

## Usage

Download and run the executable from the [Releases tab](https://github.com/awaescher/StageManager/releases/) or
Expand Down Expand Up @@ -46,7 +53,7 @@ This is an experimental fun project. I don't have any idea whether or not this i
|start with Windows|✅|
|**Product stage**||
|virtual desktop support (pin window)|⬜|
|multi-monitor support||
|multi-monitor support||

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ReadMe claims "multi-monitor support" is now complete (✅), but the implementation has some single-monitor assumptions. In MainWindow.xaml.cs, _cachedPhysicalScreenHeight is cached from PrimaryScreen at startup and never updated, meaning the flyover trigger zone (lines 349-350) will use the wrong height on non-primary monitors. The WindowLayoutManager.SplitScreen does correctly use MonitorFromWindow per window, but the sidebar activation logic is primary-monitor-only.

Copilot uses AI. Check for mistakes.
|visual feedback when dragging windows from other scenes|⬜|
|feature parity with macOS Stage Manager|⬜|
|**Polishing stage**||
Expand Down
21 changes: 15 additions & 6 deletions StageManager/AutoStart.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Reflection;
using Microsoft.Win32;

Expand All @@ -10,20 +10,29 @@ public static class AutoStart

public static void SetStartup(string appName, bool startup)
{
var key = Registry.CurrentUser.OpenSubKey(REG_KEY, writable: true);
using var key = Registry.CurrentUser.OpenSubKey(REG_KEY, writable: true);
if (key is null)
return;

if (startup)
key.SetValue(appName, GetAppPath());
else
key.DeleteValue(appName, throwOnMissingValue: false);
}

public static bool IsStartup(string appName) => IsStartup(Registry.CurrentUser.OpenSubKey(REG_KEY), appName);
public static bool IsStartup(string appName)
{
using var key = Registry.CurrentUser.OpenSubKey(REG_KEY, writable: false);
return key is not null && IsStartup(key, appName);
}

public static bool IsStartup(RegistryKey key, string appName) => GetValueAsString(key, appName).Equals(GetAppPath(), StringComparison.OrdinalIgnoreCase);
public static bool IsStartup(RegistryKey key, string appName)
=> GetValueAsString(key, appName).Equals(GetAppPath(), StringComparison.OrdinalIgnoreCase);

private static string GetValueAsString(RegistryKey key, string appName) => key.GetValue(appName)?.ToString() ?? "";
private static string GetValueAsString(RegistryKey key, string appName)
=> key.GetValue(appName)?.ToString() ?? string.Empty;

private static string GetAppPath() => $@"""{Environment.ProcessPath}""";
private static string GetAppPath()
=> $@"""{Environment.ProcessPath}""";
}
}
6 changes: 3 additions & 3 deletions StageManager/CurrentSceneSelectionChangedEventArgs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ namespace StageManager
{
public class CurrentSceneSelectionChangedEventArgs : EventArgs
{
public CurrentSceneSelectionChangedEventArgs(Scene prior, Scene current)
public CurrentSceneSelectionChangedEventArgs(Scene? prior, Scene? current)
{
Prior = prior;
Current = current;
}

public Scene Prior { get; }
public Scene? Prior { get; }

public Scene Current { get; }
public Scene? Current { get; }

}
}
Loading
Loading