Add IMPROVEMENT-046 and IMPROVEMENT-047 for the AdminTool - #55
Conversation
Both were requested by the lead developer on 2026-08-17. Recorded as backlog entries only; nothing is designed or implemented here. 046 is the UI/UX pass. It is deliberately not a list of fixes: he asked that a human think about what should improve before the problem is handed to Claude, and a UX judgement derived from reading XAML would be the wrong artefact. The entry captures the request and gives the findings somewhere to land. One observation from using the tool today is recorded as a single data point. 047 is exporting a robot or item as one self-contained script, and it carries the reason he gave: he has already damaged the live database by accidentally adding a robot to it. Measuring the current state first changed the shape of the entry. Export is not missing -- three exporters exist, and RobotExporter already calls ItemExporter per component, so a robot export does carry its parts. The real gap is four tables the create wizards write and no exporter reads (aggregatemodifiers, modulepropertymodifiers, productionduration, robottemplaterelation), which is the whole Property Modifiers tab and the Production tab, plus translations, which no export carries at all. Two things in 047 are stated as questions rather than fixes: whether productionduration belongs in an item export when the duration is category-level, and whether translations belong in the script. One observation is recorded and deliberately not filed as its own entry, since it was not asked for: nothing marks a connection as production. The apply mode already defaults to SqlScript and the status bar shows it, so the default is not the problem -- the tool simply cannot tell the operator that the server they are pointed at is the live one. Measured against cfa0591. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The lead developer answered both on 2026-08-19: productionduration belongs in the export when applicable, translations are not needed. productionduration is keyed by category, not by definition, so the export has to emit it through SqlExportBuilder.IfNotExistsInsert - the same rule the wizard applies through ProductionPanelViewModel.ShouldWriteProductionDuration. A target that already defines the category keeps its own value. Translations stay out of the script, but the export has to state that names and descriptions are not carried, because silence reads as completeness.
|
Both questions answered off the thread on 2026-08-19 —
Translations. They stay out of the script. The work left on that point is the statement — the export says that names and descriptions are not carried, because silence reads as completeness. Still planning only, no code in this pull request. |
Two backlog entries for the AdminTool, from the direction given on 2026-08-17. No code, no design —
one file,
docs/backlog/improvements.md.Last ID usedgoes 045 to 047.IMPROVEMENT-046 — UI/UX pass from a content author's point of view
Deliberately not a list of fixes. The request came with the instruction to think about what should
improve before handing the problem to Claude, and a UX judgement derived from reading XAML would be the
wrong artefact — what matters is the experience of authoring content, which is not visible in the code.
The entry records the request and gives the findings somewhere to land, with a proposed order: author
real content, write the friction down as it happens, and only then design anything.
One observation from using the tool on 2026-08-17 is recorded as a single data point rather than as the
review:
DefinitionNameshows its validation error inline in red, whileCategoryFlags == 0alsoblocks Save but marks nothing at the field — only the italic
undefinedthe description converterproduces, which reads as information rather than as an error.
IMPROVEMENT-047 — export a robot or item as a complete, self-contained SQL script
Measuring the current state changed the shape of this one, so the entry says what is actually true
rather than what the request assumed.
Export is not missing.
ItemExporter,RobotExporterandSeasonExporterexist, andRobotExportercallsItemExporterfor each component definition (Export/RobotExporter.cs:29), so arobot export already carries its parts rather than just the template row.
The gap is narrower and nameable. Comparing the tables the create wizards write against the tables the
exporters read:
aggregatemodifiersmodulepropertymodifiersproductiondurationrobottemplaterelationThe first two are the entire Property Modifiers tab, the third is the Production tab. So an
item created through the wizard can hold data that re-exporting it will not reproduce. Translations are
absent from every export as well:
SeedTranslations()writes to the translation store rather than intothe script, so a script applied elsewhere yields an entity whose name and description do not resolve.
Set to HIGH because the request named damage to the live database as the motivation.
Two things stated as questions rather than fixes
productiondurationbelong in an item export at all? The New Item dialog states that durationis category-level, so writing it back on import would affect every item in that category and not
just the exported one. That is a question about intended semantics.
they do not, the export should say so, because silence reads as completeness.
One observation recorded and deliberately not filed
Nothing in the tool marks a connection as production. The apply mode already defaults to the safe one
(
AppSettings.DefaultApplyMode = ApplyMode.SqlScript) and the status bar shows the current mode, sothe default is not the problem — but the tool cannot tell the operator that the server they are pointed
at is the live one. It is in IMPROVEMENT-047's notes rather than as its own entry, because it was not
asked for and it is a maintainer's call.
Measured against
cfa0591.