Skip to content

Version 2.1 / 2.2 release and fix VS Code debug launch#5

Merged
PhantornRU merged 16 commits into
mainfrom
rusificator-and-fixes
May 30, 2026
Merged

Version 2.1 / 2.2 release and fix VS Code debug launch#5
PhantornRU merged 16 commits into
mainfrom
rusificator-and-fixes

Conversation

@PhantornRU

@PhantornRU PhantornRU commented May 28, 2026

Copy link
Copy Markdown
Owner

Summary / Кратко

RU

  • Подготовлен релиз v2.1 / v2.2: обновлена версия WPF-приложения, добавлен eng/build-release.ps1, обновлены README/docs и добавлен docs/releases/v2.1.md с русской и английской версиями описания.
  • Исправлен запуск дебага в VS Code: конфигурация по умолчанию использует C# Dev Kit dotnet debug type, а старый coreclr fallback и связанные staging tasks удалены, чтобы не возвращать ошибку неизвестного debug adapter.
  • README и README-ru дополнены v2.1 highlights, расширенными возможностями editor/batch/settings и инструкцией запуска F5 через .vscode/extensions.json + Launch AdaptiveSpritesDmiTool WPF (.NET).
  • Ветка включает пользовательские изменения rusificator-and-fixes: русские/английские ресурсы UI, настройки shell/editor, новые direction scopes, улучшения batch workspace, исправления Fill/Move, mirrored/parallel directions, rendering/performance и закрытия приложения.
  • Добавлены рекомендации VS Code extensions для C# Dev Kit/C#/.NET runtime и очищены Release warning-и CA1707 в EditorSessionMoveTests без изменения поведения тестов.

EN

  • Prepared the v2.1 / v2.2 release: updated WPF app metadata, added eng/build-release.ps1, refreshed README/docs, and added docs/releases/v2.1.md with Russian and English release text.
  • Fixed VS Code debug startup: the default configuration uses the C# Dev Kit dotnet debug type, and the old coreclr fallback plus related staging tasks were removed so the unknown debug adapter error does not come back.
  • README and README-ru now include v2.1 highlights, expanded editor/batch/settings capabilities, and F5 launch guidance through .vscode/extensions.json + Launch AdaptiveSpritesDmiTool WPF (.NET).
  • The branch includes the rusificator-and-fixes product work: Russian/English UI resources, shell/editor settings, new direction scopes, batch workspace improvements, Fill/Move fixes, mirrored/parallel direction fixes, rendering/performance improvements, and shutdown fixes.
  • Added VS Code extension recommendations for C# Dev Kit/C#/.NET runtime and cleaned CA1707 Release warnings in EditorSessionMoveTests without changing test behavior.

Release Artifact / Артефакт релиза

Local release package generated for manual upload:

artifacts/release/AdaptiveSpritesDMItool-v2.1-win-x64.zip
artifacts/release/AdaptiveSpritesDMItool-v2.1-win-x64.sha256.txt

SHA256:

55A2C86EF25F13CD644BABCD5B7B681CBE26A6772931788FF4816989253A26CB  AdaptiveSpritesDMItool-v2.1-win-x64.zip

Compatibility / Совместимость

  • Windows x64
  • self-contained .NET 8 WPF
  • JSON config schema version: 1
  • CSV remains import-only compatibility format / CSV остается import-only форматом совместимости

Validation / Проверка

Previously passed locally for the release package:

powershell -NoProfile -ExecutionPolicy Bypass -File .\eng\check-hidden-unicode.ps1
dotnet restore AdaptiveSpritesDMItool.sln -m:1
dotnet build AdaptiveSpritesDMItool.sln -c Release -m:1 -v minimal --no-restore
dotnet test AdaptiveSpritesDMItool.sln -c Release -m:1 -v minimal --no-build
git diff --check
powershell -NoProfile -ExecutionPolicy Bypass -File .\eng\build-release.ps1 -Version v2.1 -Runtime win-x64

Additional docs/debug cleanup validation:

VS Code JSON parse passed
git diff --check
powershell -NoProfile -ExecutionPolicy Bypass -File .\eng\check-hidden-unicode.ps1
rg found no stale coreclr fallback/staging references

Test results:

118 unit tests passed
41 integration tests passed
Release build completed with 0 warnings and 0 errors
ZIP smoke extraction and executable existence check passed

Manual Follow-Up / Ручная проверка

  • Reload VS Code.
  • Install recommended extensions if VS Code prompts for them.
  • Select Launch AdaptiveSpritesDmiTool WPF (.NET).
  • Press F5 and confirm the WPF app starts without the coreclr debug adapter error.

@PhantornRU PhantornRU changed the title [codex] Prepare v2.1 release and fix VS Code debug launch Version 2.1 release and fix VS Code debug launch May 28, 2026
@PhantornRU PhantornRU marked this pull request as ready for review May 28, 2026 09:49

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 72a664719d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +229 to +231
/// Forces a mapping regardless of whether <paramref name="target"/> equals <paramref name="source"/>.
/// Unlike <see cref="SetMapping"/>, this method overwrites existing mappings without identity checks.
/// It is intended for use in Undo/Redo mechanisms, Drag & Drop move operations, or mass deserialization.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve forced identity mappings when loading configs

When a drag/move creates a forced identity mapping where the editable coordinate and backing source are equal, GetMappings() will save that row, but JsonSpriteConfigRepository.ToDomain still deserializes rows via SetMapping(...), whose identity optimization removes target == source. This makes save/reopen silently drop the same mappings this new drag/drop path is trying to preserve; the deserializer should use SetMappingForced for persisted rows so configs round-trip.

Useful? React with 👍 / 👎.

@PhantornRU PhantornRU changed the title Version 2.1 release and fix VS Code debug launch Version 2.1 / 2.2 release and fix VS Code debug launch May 29, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8f8801354d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

{
cancellationToken.ThrowIfCancellationRequested();

var dmiFile = _dmiCache.GetOrAdd(sourcePath, path => new DMIFile(path));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Invalidate cached DMI when the file changes

In the WPF app this preview builder is registered as a singleton, and this cache is keyed only by the full path, so if a user regenerates/overwrites a .dmi and opens the same path again, DmiSharpReader will inspect the new file but preview generation will keep reading the old DMIFile instance until the app restarts. That makes base/landmark/overlay previews stale for a common edit-build-preview loop; include the file timestamp/length in the key or clear this cache when the loaded asset changes.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a20c198b92

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +1302 to +1306
var previewResult = await _readStateFrameUseCase.ExecuteAsync(
asset.SourcePath ?? string.Empty,
Path.GetFileName(asset.SourcePath ?? asset.DisplayName),
previewBitmap,
ImportedStatePlacementMode.None,
order);
imported.IsValid = isValid;
imported.ValidationMessage = validationMessage;
AttachImportedStateItem(imported);
ImportedDmiStateItems.Add(imported);
continue;
state.Name,
SpriteDirection.South,
cancellationToken);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Warm imported frames for every available direction

When opening a 4- or 8-direction DMI, this only seeds _importedStateFrameCache for South, while the new multi-direction/source rendering path reads imported layers from that cache and GetImportedStateFrame returns null for cache misses. After the user switches to East/North/West or enables the All/Parallel canvases, those source/editable surfaces render transparent until some later layer toggle happens to call PreloadImportedStateFramesAsync; preload all supported directions during the merge or schedule the warm-up before refreshing the editor.

Useful? React with 👍 / 👎.

Comment on lines +154 to +157
if (_restoredImportedStateSettings.Count > 0)
{
await RestoreImportedStateItemsAsync(CancellationToken.None);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Seed imported states when restoring older workspaces

For settings saved before ImportedStates existed, _restoredImportedStateSettings is empty, so startup restore skips this block and never calls the default MergeImportedStatesFromAssetAsync path that OpenDmiFromPathAsync uses. Since the new source/editable renderer now composes from ImportedDmiStateItems, upgraded workspaces restore with no source layers and blank canvases until the user reopens the DMI; when a loaded asset exists and no imported-state settings were saved, seed the default state list or keep a _baseImage fallback.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 04303a443d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

{
if (_dmiCache.TryUpdate(path, newEntry, existingEntry))
{
existingEntry.File.Dispose();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Avoid disposing cached DMI files still in use

When the source .dmi changes while another BuildAsync for the same path is still running, that earlier request may already hold the DMIFile returned from this cache. Replacing the cache entry here immediately disposes that same object, so the in-flight preview can continue into FindState/ReadFrame on a disposed file and fail or produce inconsistent previews; defer disposal until no build can be using the old entry, or avoid sharing disposable instances across concurrent builds.

Useful? React with 👍 / 👎.

@PhantornRU PhantornRU merged commit 96be38d into main May 30, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant