Skip to content

Keep UIAdapterInterfaces files in patches until the next base - #1208

Merged
thejambi merged 2 commits into
mainfrom
patch-installer-uiadapterinterfaces-standins
Oct 27, 2026
Merged

thejambi merged 2 commits into
mainfrom
patch-installer-uiadapterinterfaces-standins

Conversation

@thejambi

@thejambi thejambi commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Start here: Build/Installer.legacy.targets, the RescuePatching target. It is the only file changed.

Status: Draft until a Patch Installer dispatch run on this branch goes green. That workflow never runs on pull requests.

The Patch Installer workflow on main has failed since #1202 with 33 errors of this form:

error PYRO0305: Removing component 'cmp…' from feature 'Telugu' is not supported

This PR adds the dropped files to RemovedSinceLastBase. The target then writes zero-byte stand-ins, so the patch keeps every component that base build 1452 installed. #1092 used the same fix for StructureMap.dll, and FLExInstaller/AGENTS.md documents it.

Why #1206 hit this. The failure isn't specific to #1206 (SIL.Machine 3.9.6). #1202 deleted the UIAdapterInterfaces project and DistFiles/FwTMDefinition.xml. The run on #1202's own commit was cancelled by a later push, so the first visible failure was on #1201 (c734bffa8), before #1206 merged. A Windows Installer patch can't remove a component the base installed, so pyro rejects each missing one.

Where to look

  • Is the list complete? It covers 4 files in the Complete feature (UIAdapterInterfaces.dll, .dll.config, .pdb, FwTMDefinition.xml) plus UIAdapterInterfaces.resources.dll in 29 culture folders. That's 33 entries, one per PYRO0305 error, checked against the base's BuildDir.zip listing. Malay counts twice because it covers both ms and zlm.
  • Are empty files safe to install? Nothing in the tree references either name. No assembly scan would pick up UIAdapterInterfaces.dll.

Not here: an issue to remove these stand-ins before the next base. The base release build already fails while any RemovedSinceLastBase entry remains.

Verification

  1. RescuePatching run alone into a scratch folder: writes 35 zero-byte files (2 existing + 33 new) at the base's relative paths.
  2. ./build.ps1 -CommentHygiene -TokenHygiene: passed, 0 warnings, 0 errors.
  3. Not run locally: -BuildPatch (this machine lacks the installer build prerequisites).
  4. Still needed: Actions > Patch Installer > Run workflow on this branch, with make_release set to false.

Next: approve once the Patch Installer dispatch run is green.


Reading this a year from now -- start here

These stand-ins exist only to keep patches on base build 1452 installable. Remove the UIAdapterInterfaces and FwTMDefinition.xml entries from RescuePatching before cutting the next base. A base release build fails while they remain (FailOnRemovedSinceLastBase), and a dirty local build must also delete the zero-byte files.

Paths not taken
  • Heat exclusion (PatchableInstallerHeatExclude.xml). It removes files from the harvest, which still drops the components from the patch. FLExInstaller/AGENTS.md rules it out for this case.
  • Restoring the deleted project. It would rebuild real binaries just to satisfy the patch. Placeholders do the same job for 33 files and need nothing built.
Evidence
  • Failing run: https://github.com/sillsdev/FieldWorks/actions/runs/40356898068. The same 33 errors appear in run 40329238599 on c734bffa8. The last green push run was on 2de0a3d63.
  • Errors by feature: Complete 4, Malay 2, and 1 each for Arabic, Azerbaijani, Bengali, Burmese, Chinese, French, German, Hindi, Hungarian, Indonesian, Khmer, Kinyarwanda, Korean, Malayalam, Nepali, Persian, Portuguese, Russian, Spanish, Swahili, Tamil, Telugu, Thai, Turkish, Urdu, Vietnamese and Yoruba.
  • The release build-1452 BuildDir.zip (read through its zip directory, not downloaded) has objects/FieldWorks/{UIAdapterInterfaces.dll,.dll.config,.pdb,FwTMDefinition.xml}. It also has objects/FieldWorks_L10n/<culture>/UIAdapterInterfaces.resources.dll for ar az bn de es fa fr hi hu id km ko ml ms my ne pt ru rw sw ta te th tr ur vi yo zh-CN zlm. Stand-ins under $(dir-outputBase)/<culture>/ are staged as L10n files, and root stand-ins as bin files, so both land at those paths.
  • DLL directory scanners in Src: FwAvaloniaPreviewHost/ModuleCatalog.cs (dev-only preview host) and a *Plugin.dll DirectoryCatalog in ScriptureProvider.cs. Neither matches the stand-ins.

🤖 Generated with Claude Code


This change is Reviewable

Base build 1452 installs UIAdapterInterfaces.dll, its .dll.config and
.pdb, a UIAdapterInterfaces.resources.dll in each of 29 culture folders,
and FwTMDefinition.xml. #1202 deleted the project and the XML file, so
the patch build dropped those 33 components and pyro failed with
PYRO0305 for each one.

List them in RemovedSinceLastBase so RescuePatching writes zero-byte
stand-ins and the patch keeps every base component.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

NUnit Tests

    1 files  ±0      1 suites  ±0   14m 37s ⏱️ + 3m 42s
6 839 tests  - 1  6 754 ✅  - 1  85 💤 ±0  0 ❌ ±0 
6 848 runs   - 1  6 763 ✅  - 1  85 💤 ±0  0 ❌ ±0 

Results for commit 5099af1. ± Comparison against base commit b98ed59.

This pull request removes 1 test.
SIL.FieldWorks.FwCoreDlgs.FwFindReplaceDlgTests ‑ ApplyWS_ToSelectedString

♻️ This comment has been updated with latest results.

@codecov-commenter

codecov-commenter commented Oct 26, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 39.94%. Comparing base (b98ed59) to head (5099af1).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1208      +/-   ##
==========================================
- Coverage   39.94%   39.94%   -0.01%     
==========================================
  Files        1542     1542              
  Lines      355217   355217              
  Branches    41329    41329              
==========================================
- Hits       141903   141900       -3     
- Misses     183977   183981       +4     
+ Partials    29337    29336       -1     

see 3 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@thejambi
thejambi marked this pull request as ready for review October 26, 2026 20:15
The test asserts that the Find box holds Windows keyboard focus after
ApplyWS. In the Patch Installer workflow it failed that check on two
runs of the same commit, while the Base Installer and Debug CI runs of
that code passed it. A test host on a shared runner desktop cannot rely
on keeping focus, which is why LastTextBoxInFocus in this fixture is
already DesktopRequired.

Tag it DesktopRequired so CI skips it and desktop runs keep the check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@mark-sil mark-sil left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for cleaning up the problem I caused!

@thejambi
thejambi merged commit 380cc90 into main Oct 27, 2026
9 of 10 checks passed
@thejambi
thejambi deleted the patch-installer-uiadapterinterfaces-standins branch October 27, 2026 12:40
@thejambi

Copy link
Copy Markdown
Contributor Author

Post-merge summary. This PR merged with a second commit that the title and description don't mention. Both commits together get the Patch Installer green again after #1202.

  1. RemovedSinceLastBase stand-ins for the 33 components Remove code and data that only the Translation Editor used #1202 dropped: UIAdapterInterfaces.dll, .dll.config and .pdb, FwTMDefinition.xml, and UIAdapterInterfaces.resources.dll in 29 culture folders.
  2. FwFindReplaceDlgTests.ApplyWS_ToSelectedString is now [Category("DesktopRequired")]. Once the build passed, this test failed its keyboard-focus assertion in Patch Installer on 2 of 2 runs. It's like its sibling LastTextBoxInFocus, which has been tagged since 2012. It still runs on developer machines.

Verified before merge: Patch Installer run 40438692453 on 5099af164 (make_release=false) passed every step:

  • no PYRO0305; it built and signed FieldWorks_9.3.12.2825_b1452_x64.msp
  • 6,778 tests, 0 failed
  • "Check patch keeps base and previous-patch components": [OK], 2,850 required components

Why the test tag doesn't hide a regression from this PR:

Run Code Workflow ApplyWS_ToSelectedString
40394134462 (2 attempts) main + stand-ins Patch Installer failed both times
40417205694 b98ed59ba (main) Base Installer passed
40428802998 main + stand-ins Base Installer passed, stand-ins present
PR CI main + stand-ins CI (Debug) passed

The failure follows the Patch Installer workflow, not this change. No binary references UIAdapterInterfaces or FwTMDefinition. Why only the patch runner loses the focus race is still unexplained.

Follow-up: the stand-ins must be removed before the next base. A base release build fails while any RemovedSinceLastBase entry remains. The tracking issue hasn't been filed yet.

🤖 Generated with Claude Code

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.

3 participants