From 7eac9345335f2ecb743ef1b70c3b6e4f4da0049a Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 10:11:20 +0300 Subject: [PATCH 1/4] Mark phase 47 romance pack as in progress. Co-authored-by: Cursor --- docs/phases/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/phases/README.md b/docs/phases/README.md index 284e542..75f6bbe 100644 --- a/docs/phases/README.md +++ b/docs/phases/README.md @@ -221,7 +221,7 @@ | Фаза | Статус | Зачем | | --- | --- | --- | | [46. Политика речи и дом](46-speech-home.md) | ⬜ | Комбобоксы речи с завтра; утреннее семейное событие | -| [47. Пак romance](47-romance-pack.md) | ⬜ | Ориентация, симпатия, пара 18+, патч тем | +| [47. Пак romance](47-romance-pack.md) | 🔄 | Ориентация, симпатия, пара 18+, патч тем | 46 стоит на 37 и 42; 47 — на 42 и 23. `example` не трогать. From 3bb5d45f10b28eb5bcdbe9c7cd939b90c0edfc2b Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 10:13:19 +0300 Subject: [PATCH 2/4] Mark phase 45 presence talk as in progress. Co-authored-by: Cursor --- docs/phases/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/phases/README.md b/docs/phases/README.md index 75f6bbe..16c2885 100644 --- a/docs/phases/README.md +++ b/docs/phases/README.md @@ -212,7 +212,7 @@ | Фаза | Статус | Зачем | | --- | --- | --- | | [44. Ссора и драка](44-quarrel-fight.md) | ⬜ | Жертва задиры, заступник, извинение, двор/физкультура | -| [45. Кружок в присутствии](45-presence-talk.md) | ⬜ | Id участников и темы в кадре, протокол +1 | +| [45. Кружок в присутствии](45-presence-talk.md) | 🔄 | Id участников и темы в кадре, протокол +1 | 44 и 45 стоят на 42, можно параллельно. From 7851bed14f9073b17bc0dae325eef9dff8b5d30d Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 10:14:26 +0300 Subject: [PATCH 3/4] Pin Vite to 5173 without an Aspire proxy so AppHost can start. Co-authored-by: Cursor --- docs/bugs/02-client-endpoint-proxy.md | 40 +++++++++++++++++++ docs/bugs/README.md | 1 + src/HSchool.AppHost/AppHost.cs | 4 +- .../ClientEndpointTests.cs | 22 ++++++++++ 4 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 docs/bugs/02-client-endpoint-proxy.md create mode 100644 tests/HSchool.AppHost.Tests/ClientEndpointTests.cs diff --git a/docs/bugs/02-client-endpoint-proxy.md b/docs/bugs/02-client-endpoint-proxy.md new file mode 100644 index 0000000..6039ccc --- /dev/null +++ b/docs/bugs/02-client-endpoint-proxy.md @@ -0,0 +1,40 @@ +# Баг 2. AppHost падает на пине Vite 5173 + +## Симптом + +`run-aspire.cmd` поднимает Tailscale Serve, затем AppHost сразу выходит с кодом `-532462766`. Aspire dashboard и Vite не стартуют. В логе: + +``` +The endpoint 'http' for resource 'client' requested a proxy (IsProxied is true). +Non-container resources cannot be proxied when both TargetPort and Port are specified +with the same value. +``` + +Ожидали клиент на `http://localhost:5173` (и тот же порт за Serve), как после пина для Tailscale. + +## Причина + +`AddViteApp` зовёт `WithHttpEndpoint(port: 5173, targetPort: 5173)`. У executable `IsProxied` по умолчанию `true`. DCP не может повесить прокси на тот же порт, на котором слушает Vite. Aspire 13.4 это ловит при старте. Headless-тесты клиент не поднимают, поэтому сюита хоста этого не видит. + +## Путь + +`isProxied: false` на том же пине: Vite сам слушает 5173, прокси Aspire нет, `tailscale serve --bg 5173` по-прежнему бьёт в клиент. + +Не снимать пин — Serve тогда не знает порт. Не оставлять прокси и задавать только `port` — у Vite `strictPort: true` на 5173, конфликт с прокси. + +## Задачи + +- [x] Эндпоинт `http` у `client`: порт 5173, без прокси Aspire +- [x] Тест модели AppHost без `AppHostFixture` и без Node + +## Тест, без которого не закрыт + +`HSchool.AppHost.Tests`, без фикстуры хоста: ресурс `client` имеет HTTP-эндпоинт на 5173 с `IsProxied == false`. + +```bash +dotnet test tests/HSchool.AppHost.Tests --filter FullyQualifiedName~ClientEndpoint +``` + +## Стоп + +Протокол, сейв, Vite `allowedHosts` / HMR, `run-aspire.cmd` не трогать. diff --git a/docs/bugs/README.md b/docs/bugs/README.md index 38a552c..1ee13f0 100644 --- a/docs/bugs/README.md +++ b/docs/bugs/README.md @@ -10,3 +10,4 @@ | Баг | Статус | Симптом | | --- | --- | --- | | [1. Окно входа](01-login-layout.md) | ✅ | Форма входа прижата к углу, поле пароля на всю ширину | +| [2. Запуск AppHost](02-client-endpoint-proxy.md) | 🔄 | `run-aspire` падает: proxy + Port=TargetPort=5173 у client | diff --git a/src/HSchool.AppHost/AppHost.cs b/src/HSchool.AppHost/AppHost.cs index 1d3d424..aaeff8b 100644 --- a/src/HSchool.AppHost/AppHost.cs +++ b/src/HSchool.AppHost/AppHost.cs @@ -23,9 +23,9 @@ if (headless) if (!headless) { - // Pin the Vite port so `tailscale serve --bg 5173` always targets the client. + // Pin Vite itself to 5173 (no Aspire proxy): Tailscale Serve targets that port. var client = builder.AddViteApp("client", "../HSchool.Client") - .WithHttpEndpoint(port: 5173, targetPort: 5173) + .WithHttpEndpoint(port: 5173, targetPort: 5173, isProxied: false) .WithReference(server) .WaitFor(server); diff --git a/tests/HSchool.AppHost.Tests/ClientEndpointTests.cs b/tests/HSchool.AppHost.Tests/ClientEndpointTests.cs new file mode 100644 index 0000000..986cf60 --- /dev/null +++ b/tests/HSchool.AppHost.Tests/ClientEndpointTests.cs @@ -0,0 +1,22 @@ +using Aspire.Hosting.ApplicationModel; + +namespace HSchool.AppHost.Tests; + +public class ClientEndpointTests +{ + [Fact] + public async Task ViteHttpEndpoint_IsProxylessOnPinnedPort() + { + await using var appHost = await DistributedApplicationTestingBuilder + .CreateAsync(TestContext.Current.CancellationToken); + + var client = Assert.Single(appHost.Resources, resource => resource.Name == "client"); + var http = Assert.Single( + client.Annotations.OfType(), + endpoint => endpoint.UriScheme == "http"); + + Assert.False(http.IsProxied); + Assert.Equal(5173, http.Port); + Assert.Equal(5173, http.TargetPort); + } +} From 491ed39184addd920c1d4828527cadeca21fbe64 Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 10:14:58 +0300 Subject: [PATCH 4/4] bug 2: mark complete Co-authored-by: Cursor --- docs/bugs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bugs/README.md b/docs/bugs/README.md index 1ee13f0..a723b64 100644 --- a/docs/bugs/README.md +++ b/docs/bugs/README.md @@ -10,4 +10,4 @@ | Баг | Статус | Симптом | | --- | --- | --- | | [1. Окно входа](01-login-layout.md) | ✅ | Форма входа прижата к углу, поле пароля на всю ширину | -| [2. Запуск AppHost](02-client-endpoint-proxy.md) | 🔄 | `run-aspire` падает: proxy + Port=TargetPort=5173 у client | +| [2. Запуск AppHost](02-client-endpoint-proxy.md) | ✅ | `run-aspire` падает: proxy + Port=TargetPort=5173 у client |