Files
h-school/docs/phases/off-queue/reviewed.md
T
2026-08-20 17:15:22 +03:00

62 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Проверенные фазы «Вне очереди»
Разделы ниже — отдельные проходы. Чужой раздел не затирать. Уроки 48, 50–53 этот журнал
не закрывает.
## Портреты. Модели, слои промпта, LoRA и embeddings
- **Фазы:** 6061
- **Проверен на:** `5e23d1f`, 2026-08-20
- **Пути:** `src/HSchool.Server/Game/SwarmUiSettingsStore.cs`, `src/HSchool.Server/Game/SwarmUiLoraFormatter.cs`, `src/HSchool.Server/Game/SwarmUiClient.cs`, `src/HSchool.Server/Game/SwarmUiDiscovery.cs`, `src/HSchool.Server/Game/PortraitPromptBuilder.cs`, `src/HSchool.Server/Game/PortraitService.cs`, `src/HSchool.Server/Api/SettingsEndpoints.cs`, `src/HSchool.Server/swarmui.json`, `src/HSchool.Client/src/ui/swarmUiSettingsDialog.ts`, `src/HSchool.Client/src/net/api.ts`, `tests/HSchool.Server.Tests`, `tests/HSchool.AppHost.Tests/PortraitApiTests.cs`, `docs/protocol.md`, `docs/design/off-queue/portrait-models.md`, `docs/design/off-queue/portrait-loras-embeds.md`
- **Итог:** обещания фаз 60–61 совпадают с кодом и тестами; сокет не бампили (`ProtocolConstants.Version` / `PROTOCOL_VERSION` = 9). Дописаны проверки cfg без оверрайда, склейки negative и смены модели в диалоге. Хостовые `PortraitApiTests` в этом проходе не гонялись (общий AppHost / живой сервер). Расхождений с дизайном нет.
### Фаза 60
Лифт `positive``style` и kind `positive``shotType`, пикер Swarm ∩ каталог, слои промпта (модель → стиль → кадр → `promptExtra` → пустая поза → внешность → одежда), HTTP `GET`/`PUT /api/settings/swarmui` с `models` и копией в сейв при create — на месте. Resolve без оверрайда берёт steps/cfg с модели; с оверрайдом — с пресета.
### Фаза 61
Discovery читает `models.Embedding` (офлайн — пустой список). LoRA и embeddings склеиваются модель → пресет → кадр. Промпт содержит `<embed:…>` и не содержит `<lora:`. Generate шлёт `loras` и `loraweights` раздельно. В диалоге поля embeddings есть у модели и у вида кадра.
### Открытое
Ничего, что требовало бы решения. `swarmui.json` на диске не пишет ключи embeddings — после `NormalizeAfterLoad` списки пустые, как в `Catalog()`.
## Портреты. Промпт и Krea-модели
- **Фазы:** 62
- **Проверен на:** `d093ea3`, 2026-08-20
- **Пути:** `src/HSchool.Server/Game/PortraitPromptBuilder.cs`, `src/HSchool.Server/Game/SwarmUiSettingsStore.cs`, `src/HSchool.Server/swarmui.json`, `tests/HSchool.Server.Tests/PortraitPromptBuilderTests.cs`, `tests/HSchool.Server.Tests/SwarmUiSettingsStoreTests.cs`, `tests/HSchool.AppHost.Tests/PortraitApiTests.cs`, `docs/design/off-queue/portrait-prompt-craft.md`
- **Итог:** обещания фазы 62 совпадают с кодом. Сокет не бампили (`ProtocolConstants.Version` / `PROTOCOL_VERSION` = 9). Realism v2.0 в каталог не входит. Живые сейвы при `Clone` не получают Muse/v2.5. Позы в UI нет. Дописаны сверка `swarmui.json` с `Catalog()`, отказ лифтить старую копию и проза `with black hair`. Хостовые `PortraitApiTests` в этом проходе не гонялись (общий AppHost / живой сервер). Расхождений с дизайном нет.
### Фаза 62
Каталог: четыре SDXL плюс Muse GGUF и Realism v2.5 INT8 с knobs 8 / CFG 1 / euler / simple; `swarmui.json` совпадает с `CreateDefault()`. Пресет `default` — v2.5, стиль и shotType прозой, negative без `(word:1.4)`; child — DreamShaper. Внешность и одежда: `N years old`, `with black hair`, `wearing a white shirt`; слои и custom extra прежние.
### Открытое
Хостовый `GetPortraitPrompt_ReturnsBuiltPositiveAndNegative` больше не ищет подстроку `age ` (она есть в `teenage`); проверка `\bage \d+` в этом проходе не гонялась.
## DX. Пропуск сборки, «Что нового», состояние экрана
- **Фазы:** 49, 54, 55
- **Проверен на:** `d8d0423`, 2026-08-20
- **Пути:** `tools/apphost-uptodate.ps1`, `run-aspire.cmd`, `run-aspire.ps1`, `run-aspire.sh`, `tests/HSchool.AppHost.Tests/LaunchBuildStamp.cs`, `tests/HSchool.AppHost.Tests/LaunchBuildStampTests.cs`, `src/HSchool.Server/Changelog/BuildChangelog.cs`, `src/HSchool.Server/Api/ChangelogEndpoints.cs`, `src/HSchool.Server/HSchool.Server.csproj`, `tools/embed-changelog.ps1`, `tools/embed-changelog.sh`, `tests/HSchool.Server.Tests/BuildChangelogTests.cs`, `tests/HSchool.AppHost.Tests/ChangelogApiTests.cs`, `src/HSchool.Client/src/ui/whatsNew.ts`, `src/HSchool.Client/src/ui/whatsNew.test.ts`, `src/HSchool.Client/src/ui/seenRevision.ts`, `src/HSchool.Client/src/ui/viewState.ts`, `src/HSchool.Client/src/ui/viewState.test.ts`, `src/HSchool.Client/src/ui/gameScreen.ts`, `src/HSchool.Client/src/main.ts`, `docs/protocol.md`, `docs/design/off-queue/skip-stale-build.md`, `docs/design/off-queue/whats-new.md`, `docs/design/off-queue/view-state.md`
- **Итог:** обещания 49/54/55 совпадают с кодом. Сокет не бампили (v9). Дописаны порядок нескольких коммитов в changelog и восстановление вкладки с меню из `sessionStorage`. `run-aspire` передаёт `-c` в `dotnet run`, не только в штамп. Дизайн 49 догнан до `run-aspire.sh`. `BuildChangelogTests` зелёные (4). Хостовые `ChangelogApiTests` и `LaunchBuildStampTests` в этом проходе не гонялись (штамп не менялся; HTTP не менялся; живой сервер пользователя не трогали).
### Фаза 49
`apphost-uptodate.ps1` / `LaunchBuildStamp` / `needs_build` в `.sh` смотрят AppHost+Server dll против `*.cs`/`*.csproj`/`*.props` под `src/` и трёх named props; TS/JSONC и `bin`/`obj`/`node_modules` не входы. Семь тестов штампа на временных папках есть, без `AppHostFixture`. `--rebuild` собирает и затем стартует AppHost.
### Фаза 54
SHA и first-parent лог вшиваются при сборке Server, не из рантайма. `GET /api/changelog` за сессией: пусто без `since` / неизвестный / текущий SHA; `Mark phase N` в списке нет, якорем остаётся. Кука `hschool.seen-rev` (год, `Path=/`, `SameSite=Lax`, не HttpOnly). Модалка после `ensureSession` на старте и после logout, не при выходе из школы на меню.
### Фаза 55
Query держит школу/режим/вкладки/выбор; `sessionStorage` ключ `h-school.view.{id}` — фильтры людей, соискателей, карточку и управление. Вход/выход — `pushState`, вкладки и фильтры — `replaceState`. Гость с `mode=manage` остаётся в обзоре. F5 с `?school=` шлёт тот же `OpenSchool`.
### Открытое
Ничего, что фаза 54 обещала и не сделала. Баги сессии из журнала среза 8 (другое имя при живой куке, Data Protection) сюда не входят — не трогали.