chore(plugins): remove the Smoke gate plugin; MossTank shelf icon 0x06002C41
Owner direction 2026-09-06: the owner visually accepted all three connected
gates from the plugin-shelf/DAT-icon work — the movable plugin shelf
(Slice A), the DAT icon markup (Slice B), and the retained-UI outline-order
fix (761a7519f). With that gate passed, the Smoke plugin's job as the gate
artifact is done, so it is deleted outright rather than merely hidden:
src/AcDream.Plugins.Smoke/ (SmokePlugin.cs, SmokeIconPanel.cs, csproj, lock
files).
Reference sites cleaned:
- AcDream.slnx: removed the project entry.
- src/AcDream.App/AcDream.App.csproj: removed the Smoke ProjectReference and
the CopySmokePluginToBuildOutput/CopySmokePluginToPublishOutput targets;
the MossTank equivalents are untouched.
- .github/workflows/headless-portability.yml: the Linux package-contract
step no longer asserts a Smoke plugin.dll/plugin.json pair — repointed at
MossTank's, since the step's job was to prove the plugin-copy packaging
mechanism works end to end, not specifically to prove Smoke.
- tests/AcDream.Core.Tests/Plugins/PluginManifestTests.cs: the inline JSON
fixture used Smoke's manifest values as arbitrary test data; swapped for
MossTank's so the parser test still proves the same thing.
- tests/AcDream.App.Tests/Rendering/LinuxPlatformBoundaryTests.cs: the
shipped-plugin-copy shape test counted 4 GetTargetPath targets (Smoke +
MossTank, build + publish); now 2 (MossTank only).
- tests/AcDream.App.Tests/Plugins/AppAutomationSurfaceIconInstalledDatTests.cs:
reworded a doc comment that named the now-deleted SmokeIconPanel.
- README.md, docs/plugin-ui-markup.md: dropped Smoke-specific mentions,
kept the icon markup example/grammar (now citing MossTank's own real
IconSurfaceId).
- docs/plans/2026-09-06-plugin-shelf-and-dat-icons.md: recorded the owner's
2026-09-06 acceptance and the Smoke removal in the review ledger; deleted
the now-moot "before shipment" Smoke-in-release-zip warning.
- docs/reviews/coverage-ledger.md, docs/reviews/findings-ledger.md: left
untouched — both are frozen audit snapshots ("complete for baseline
<hash>"), so their Smoke rows are historical record, not live claims.
- docs/ISSUES.md: left untouched — its Smoke mentions are inside closed
issue #193's historical write-up of a past investigation.
MossTank plugin shelf icon: MossTankPlugin.cs's PluginPanelDescriptor now
sets IconSurfaceId = 0x06002C41 (IconText = "MT" remains the fallback).
Verified against the installed retail DAT with a new InstalledDat-lane test,
tests/AcDream.App.Tests/UI/MossTankIconInstalledDatTests.cs, mirroring
RetailMarkupIconResolverInstalledDatTests's convention: confirms the id is a
real Portal/HighRes RenderSurface and that RetailMarkupIconResolver.ResolveDid
returns a non-zero texture for it.
Verified: dotnet build AcDream.slnx -c Release green; a stale
plugins/AcDream.Plugins.Smoke output folder from a prior build was deleted
and a fresh build does not recreate it. Full App suite: 7,363 passed / 97
skipped / 36 failed (was 7,362/97/36) — the failing set is unchanged and
none are plugin-related; the one new pass is the MossTank DAT-icon test.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
ce05c4fb03
commit
ece2104189
17 changed files with 102 additions and 359 deletions
|
|
@ -23,9 +23,9 @@ namespace AcDream.App.Tests.Plugins;
|
|||
[Trait("Lane", "InstalledDat")]
|
||||
public sealed class AppAutomationSurfaceIconInstalledDatTests
|
||||
{
|
||||
/// <summary>Retail's Strength Other I — the same well-known spell id
|
||||
/// SmokeIconPanel falls back to when the local character has learned
|
||||
/// nothing yet.</summary>
|
||||
/// <summary>Retail's Strength Other I — a well-known always-present spell
|
||||
/// id, usable as a fallback when the local character has learned nothing
|
||||
/// yet.</summary>
|
||||
private const uint KnownSpellId = 1u;
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ public sealed class LinuxPlatformBoundaryTests
|
|||
Assert.Contains("$(OutputPath)plugins/", project, StringComparison.Ordinal);
|
||||
Assert.Contains("$(PublishDir)plugins/", project, StringComparison.Ordinal);
|
||||
Assert.Equal(
|
||||
4,
|
||||
2,
|
||||
project.Split("Targets=\"GetTargetPath\"", StringSplitOptions.None)
|
||||
.Length - 1);
|
||||
Assert.Contains(
|
||||
|
|
|
|||
65
tests/AcDream.App.Tests/UI/MossTankIconInstalledDatTests.cs
Normal file
65
tests/AcDream.App.Tests/UI/MossTankIconInstalledDatTests.cs
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
using AcDream.App.Rendering;
|
||||
using AcDream.App.Tests.Rendering;
|
||||
using AcDream.App.Tests.Rendering.Gpu;
|
||||
using AcDream.App.UI;
|
||||
using AcDream.Content;
|
||||
using AcDream.Core.Items;
|
||||
using DatReaderWriter;
|
||||
using DatReaderWriter.DBObjs;
|
||||
using DatReaderWriter.Options;
|
||||
using Xunit;
|
||||
|
||||
namespace AcDream.App.Tests.UI;
|
||||
|
||||
/// <summary>
|
||||
/// Owner direction 2026-09-06 (Smoke-plugin removal +
|
||||
/// <c>docs/plans/2026-09-06-plugin-shelf-and-dat-icons.md</c> follow-up):
|
||||
/// <c>MossTankPlugin</c>'s shelf descriptor now sets a real
|
||||
/// <c>IconSurfaceId</c> instead of relying solely on the <c>"MT"</c> text
|
||||
/// fallback. Mirrors the
|
||||
/// <see cref="AcDream.App.Tests.UI.RetailMarkupIconResolverInstalledDatTests"/>
|
||||
/// installed-DAT gate convention: <see cref="InstalledDatTestPath"/> +
|
||||
/// <c>[Trait("Lane", "InstalledDat")]</c>, <c>Assert.Fail</c> with the
|
||||
/// standard message when no DAT is configured (see docs/release-gate.md).
|
||||
/// </summary>
|
||||
[Trait("Lane", "InstalledDat")]
|
||||
public sealed class MossTankIconInstalledDatTests
|
||||
{
|
||||
/// <summary>The id <c>MossTankPlugin.cs</c> sets as its shelf descriptor's
|
||||
/// <c>IconSurfaceId</c>.</summary>
|
||||
private const uint MossTankShelfIconId = 0x06002C41u;
|
||||
|
||||
[Fact]
|
||||
public void MossTankShelfIconId_IsARealInstalledRenderSurface()
|
||||
{
|
||||
string? datDir = InstalledDatTestPath.Resolve();
|
||||
if (datDir is null)
|
||||
{
|
||||
Assert.Fail(
|
||||
"Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
return;
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
using var adapter = new DatCollectionAdapter(dats);
|
||||
|
||||
// The RenderSurface must exist in Portal or HighRes — the same two
|
||||
// databases RetailMarkupIconResolver.ResolveDid probes before ever
|
||||
// touching TextureCache.
|
||||
bool existsInPortal = adapter.Portal.TryGet<RenderSurface>(MossTankShelfIconId, out _);
|
||||
bool existsInHighRes = adapter.HighRes.TryGet<RenderSurface>(MossTankShelfIconId, out _);
|
||||
Assert.True(
|
||||
existsInPortal || existsInHighRes,
|
||||
$"expected 0x{MossTankShelfIconId:X8} to be a real installed RenderSurface (Portal or HighRes)");
|
||||
|
||||
var device = new RecordingGpuDevice();
|
||||
using var cache = new TextureCache(device, adapter);
|
||||
var icons = new IconComposer(adapter, cache);
|
||||
var objects = new ClientObjectTable();
|
||||
var resolver = new RetailMarkupIconResolver(adapter, cache, icons, objects);
|
||||
|
||||
(uint tex, int w, int h) = resolver.ResolveDid(MossTankShelfIconId);
|
||||
Assert.NotEqual(0u, tex);
|
||||
Assert.True(w > 0 && h > 0);
|
||||
}
|
||||
}
|
||||
|
|
@ -9,20 +9,20 @@ public class PluginManifestTests
|
|||
{
|
||||
const string json = """
|
||||
{
|
||||
"id": "acdream.smoke",
|
||||
"displayName": "Smoke Test",
|
||||
"id": "acdream.mosstank",
|
||||
"displayName": "MossTank",
|
||||
"version": "0.1.0",
|
||||
"entryDll": "AcDream.Plugins.Smoke.dll",
|
||||
"entryDll": "AcDream.Plugins.MossTank.dll",
|
||||
"apiVersion": 1
|
||||
}
|
||||
""";
|
||||
|
||||
var manifest = PluginManifest.Parse(json);
|
||||
|
||||
Assert.Equal("acdream.smoke", manifest.Id);
|
||||
Assert.Equal("Smoke Test", manifest.DisplayName);
|
||||
Assert.Equal("acdream.mosstank", manifest.Id);
|
||||
Assert.Equal("MossTank", manifest.DisplayName);
|
||||
Assert.Equal("0.1.0", manifest.Version);
|
||||
Assert.Equal("AcDream.Plugins.Smoke.dll", manifest.EntryDll);
|
||||
Assert.Equal("AcDream.Plugins.MossTank.dll", manifest.EntryDll);
|
||||
Assert.Equal(1, manifest.ApiVersion);
|
||||
Assert.Equal([PluginKind.Gameplay], manifest.Kinds);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue