chore: fix VersionInfoProvider bugs, drop stale RegFree.targets entry, thin opsx prompts#978
chore: fix VersionInfoProvider bugs, drop stale RegFree.targets entry, thin opsx prompts#978johnml1135 wants to merge 3 commits into
Conversation
This comment has been minimized.
This comment has been minimized.
Restores or reverts items with no connection to the Avalonia migration and
no stated rationale in this branch's history:
- Restore EVIDENCE_CRITERA.md (WiX3->WiX6 installer parity doc, unrelated
subsystem, deleted with no explanation anywhere in this branch).
- Restore Obj/FwBuildTasks/*.nuget.g.{props,targets} (Dependabot-generated
NuGet restore artifacts; deleting them is reasonable hygiene but unrelated
to this branch).
- Revert DistFiles/.../MorphologyParts.xml's MsFeatures layout reference
(publication -> Browse) back to its prior value: this file is consumed by
the live legacy views engine with no UIMode gate, so the change altered
today's rendering for all users with no stated rationale anywhere.
- Remove Docs/superpowers/specs/2026-06-21-dialogs-19g-design.md: a stray
file in a directory with no other presence in this repo, and its content
is stale (claims Delete-confirmation/LexReferenceDetails "shipped fully"
when both were later backed out per this same PR's own description).
Also removes three unrelated-but-legitimate fixes that were bundled in and
have been extracted to their own PR (#978,
chore/version-info-and-opsx-tooling-fixes): VersionInfoProvider.cs's
copyright/version-string fixes and its new test file, the RegFree.targets
stale ManagedVwWindow.dll reference removal, and the opsx-*.prompt.md
delegate-to-skill refactor. XmlViewsUtils.cs and FilterBar.cs's related
changes stay in this branch: the Avalonia browse table's GetRowCellStrings
depends on the former, and Src/xWorks/xWorksTests/WinFormsUiaSmokeTests.cs
(this branch's own test) asserts on the latter's new automation IDs, so
neither is cleanly separable.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
First of a 4-PR stack landing Phase 1 of the WinForms->Avalonia migration. Every Avalonia surface is gated behind the UIMode setting, which DEFAULTS TO "Legacy" (Src/Common/FwUtils/Properties/Settings.Designer.cs), so default users see no behavioral change. Contents: - The Avalonia migration framework: region/composer (FullEntryRegionComposer), the typed view-definition IR compiled from XML layouts, owned dense controls, the seam contracts, and the region-editor plugin registry. - The base detail-editor surfaces active under UIMode=New: lexiconEdit, lexiconEditPopup, notebookEdit, posEdit. - The Avalonia browse table (LexicalBrowseView, LexicalBrowseHostControl, BulkEditBarView, ClerkBrowse*) and its RecordBrowseView product wiring, shipped DORMANT (fused to base wiring; activated by the table follow-up PR). - 13 dialog UIs + a shared MessageBox riding behind UIMode=New, each verified wired to a real WinForms call site; 4 cleanly-removable unwired Avalonia dialogs backed out (SpecialCharacter, WritingSystemProperties, DeleteConfirmation, LexReferenceDetails). - ChorusNotesBarControl (the Chorus/FLExBridge notes bar) rides as a Phase-1 follow-up surface alongside the browse table and the interlinear/ rule-formula plugins -- built, but not registered in this base PR. - Migration skills/playbook (incl. the inert-surface activation recipe), the roadmap's core proposal/design/tasks/spec, and the landed openspec change specs (lexical-edit-avalonia-migration, shared-editable-virtualized-table, avalonia-multi-writing-system-text-foundation). The interlinear and rule-formula detail editors are carved out to their own stacked follow-up PRs; the inert tool lists are LexicalEditSurfaceRegistry.Phase1FollowUpSurfaceTools and LexicalEditSurfaceResolver.Phase1FollowUpBrowseTools. Migration per-screen docs (the JIRA-ticket basis) and the full 13-stage migration-program planning material live on the separate never-merged phase1-docs branch (the latter also mirrored to chore/relocate-roadmap-planning-docs). Phase 2 (avalonia-end-game: net multiplatform + shell conversion + WinForms removal) is planned only and gated on Phase 1 + tester burn-down; its proposal lives with the roadmap material above, not in this PR. Post-review cleanup folded into this commit (see PR_964_review.md for the full audit trail): - Removed content unrelated to this migration that had been swept in: an unrelated installer-docs deletion and an ungated Legacy-mode rendering change were reverted, and a misplaced/stale stray doc file was dropped. - Split two unrelated-but-legitimate fixes into their own PRs rather than carrying them here: #978 (VersionInfoProvider copyright/version-string bugs, a stale RegFree.targets entry, an opsx-prompt refactor) and #979 (a pre-existing cross-worktree test-collision bug in RealDataTestsBase, found while verifying this branch but unrelated to it). - Fixed a real build break (RecordBrowseView.cs used a pub/sub API signature main had already replaced) and a real product bug (the Avalonia refresh controller could stay unwired when a tool loads directly into UIMode=New, fixed in RecordEditView.cs). - Pared back ~7,500 lines of speculative future-phase openspec planning docs (the 13-stage migration program, legacy-screenshot-capture tooling, the end-game proposal) to a separate branch, and deleted two fully superseded proposals and stale DataTree-model-view-separation specs asserting an architecture that was never built. - Wired the one missing UIMode gate (GoLinkEntryDlgListener.OnGotoLexEntry), documented one honest parity deferral (MsaInflectionFeatureListDlgLauncher switch-tools navigation), removed dead API and orphaned localization keys, strengthened the FwAvalonia engine-isolation audit to match its own documented symbol list, fixed three evidence-language issues in Path3BundleTests, and reconciled dialog spacing tokens against real measured WinForms control geometry. Verification: whole-solution build green. Surface-registry census: 6 custom-slice classes classified (LexemeEditorBurnDownTests); 7 tools in LexicalEditSurfaceRegistry.Phase1FollowUpSurfaceTools; 8 tools in LexicalEditSurfaceResolver.Phase1FollowUpBrowseTools. Full CI-equivalent test run: all tests pass except 38 pre-existing, environment-specific RealDataTestsBase cross-worktree-collision failures (fix is PR #979, kept separate) and one test-harness limitation in RecordEditViewSwitchTests documented in PR_964_review.md (the underlying product bug is fixed; the test's idle-queue draining has a separate, deeper, pre-existing issue that needs its own follow-up). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
First of a 4-PR stack landing Phase 1 of the WinForms->Avalonia migration. Every Avalonia surface is gated behind the UIMode setting, which DEFAULTS TO "Legacy" (Src/Common/FwUtils/Properties/Settings.Designer.cs), so default users see no behavioral change. Contents: - The Avalonia migration framework: region/composer (FullEntryRegionComposer), the typed view-definition IR compiled from XML layouts, owned dense controls, the seam contracts, and the region-editor plugin registry. - The base detail-editor surfaces active under UIMode=New: lexiconEdit, lexiconEditPopup, notebookEdit, posEdit. - The Avalonia browse table (LexicalBrowseView, LexicalBrowseHostControl, BulkEditBarView, ClerkBrowse*) and its RecordBrowseView product wiring, shipped DORMANT (fused to base wiring; activated by the table follow-up PR). - 13 dialog UIs + a shared MessageBox riding behind UIMode=New, each verified wired to a real WinForms call site; 4 cleanly-removable unwired Avalonia dialogs backed out (SpecialCharacter, WritingSystemProperties, DeleteConfirmation, LexReferenceDetails). - ChorusNotesBarControl (the Chorus/FLExBridge notes bar) rides as a Phase-1 follow-up surface alongside the browse table and the interlinear/ rule-formula plugins -- built, but not registered in this base PR. - Migration skills/playbook (incl. the inert-surface activation recipe), the roadmap's core proposal/design/tasks/spec, and the landed openspec change specs (lexical-edit-avalonia-migration, shared-editable-virtualized-table, avalonia-multi-writing-system-text-foundation). The interlinear and rule-formula detail editors are carved out to their own stacked follow-up PRs; the inert tool lists are LexicalEditSurfaceRegistry.Phase1FollowUpSurfaceTools and LexicalEditSurfaceResolver.Phase1FollowUpBrowseTools. Migration per-screen docs (the JIRA-ticket basis) and the full 13-stage migration-program planning material live on the separate never-merged phase1-docs branch (the latter also mirrored to chore/relocate-roadmap-planning-docs). Phase 2 (avalonia-end-game: net multiplatform + shell conversion + WinForms removal) is planned only and gated on Phase 1 + tester burn-down; its proposal lives with the roadmap material above, not in this PR. Post-review cleanup folded into this commit (see PR_964_review.md for the full audit trail): - Removed content unrelated to this migration that had been swept in: an unrelated installer-docs deletion and an ungated Legacy-mode rendering change were reverted, and a misplaced/stale stray doc file was dropped. - Split two unrelated-but-legitimate fixes into their own PRs rather than carrying them here: #978 (VersionInfoProvider copyright/version-string bugs, a stale RegFree.targets entry, an opsx-prompt refactor) and #979 (a pre-existing cross-worktree test-collision bug in RealDataTestsBase, found while verifying this branch but unrelated to it). - Fixed a real build break (RecordBrowseView.cs used a pub/sub API signature main had already replaced) and a real product bug (the Avalonia refresh controller could stay unwired when a tool loads directly into UIMode=New, fixed in RecordEditView.cs). - Pared back ~7,500 lines of speculative future-phase openspec planning docs (the 13-stage migration program, legacy-screenshot-capture tooling, the end-game proposal) to a separate branch, and deleted two fully superseded proposals and stale DataTree-model-view-separation specs asserting an architecture that was never built. - Wired the one missing UIMode gate (GoLinkEntryDlgListener.OnGotoLexEntry), documented one honest parity deferral (MsaInflectionFeatureListDlgLauncher switch-tools navigation), removed dead API and orphaned localization keys, strengthened the FwAvalonia engine-isolation audit to match its own documented symbol list, fixed three evidence-language issues in Path3BundleTests, and reconciled dialog spacing tokens against real measured WinForms control geometry. Verification: whole-solution build green. Surface-registry census: 6 custom-slice classes classified (LexemeEditorBurnDownTests); 7 tools in LexicalEditSurfaceRegistry.Phase1FollowUpSurfaceTools; 8 tools in LexicalEditSurfaceResolver.Phase1FollowUpBrowseTools. Full CI-equivalent test run: all tests pass except 38 pre-existing, environment-specific RealDataTestsBase cross-worktree-collision failures (fix is PR #979, kept separate) and one test-harness limitation in RecordEditViewSwitchTests documented in PR_964_review.md (the underlying product bug is fixed; the test's idle-queue draining has a separate, deeper, pre-existing issue that needs its own follow-up). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jasonleenaylor
left a comment
There was a problem hiding this comment.
Looks good, Devin noted that ManagedVwWindow.dll was removed from RegFree.targets defaults but is still present in FieldWorks.exe BuildInclude.targets
@jasonleenaylor reviewed 14 files and all commit messages, and made 1 comment.
Reviewable status:complete! all files reviewed, all discussions resolved (waiting on johnml1135).
- VersionInfoProvider: copyright year no longer freezes at whatever year the constant was last edited, ApplicationVersion resolves from the correct assembly instead of always falling back to the entry assembly, and MajorVersion/ParseInformationalVersion index defensively instead of assuming a fixed part count. Covered by new VersionInfoProviderTests.cs. - RegFree.targets: removes a dangling ManagedVwWindow.dll entry; the project was already retired in #904/#906, so the entry pointed at nothing. - opsx-*.prompt.md: replace inlined instructions with delegation to the existing .claude/skills/openspec-*/SKILL.md files, per this repo's skills-over-inline-prompts convention. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
aa9fee5 to
67fcd69
Compare
Code review (automated deep review, verified against the code)Overall: the core VersionInfoProvider bug fixes are correct and well-tested — verified each against the real generated attribute shapes ( A few points: MEDIUM — the RegFree cleanup is only half-done, and overlaps PR #989This PR removes Also note: this RegFree.targets edit is the same line PR #989 removes (there it's replaced with an explanatory comment). The two PRs will conflict / one becomes a no-op — worth deciding which one carries the RegFree change and dropping it from the other. The removal is genuinely useful for LCMBrowser/GenerateHCConfig/UnicodeCharEditor/ComManifestTestHost, which hit the fallback path. LOW / nit —
|
|
Fixed the MEDIUM issue in 5b96437: removed the remaining Leaving the two LOW nits (const→static readonly, literal copyright strip) as documented trade-offs rather than churning the diff further; flag if you'd like those addressed too. |
This comment has been minimized.
This comment has been minimized.
ManagedVwWindow.dll was retired with the Linux-era view shims (#906). The RegFree.targets fallback entry was removed earlier in this PR, but BuildInclude.targets pre-populates ManagedComAssemblies explicitly for FieldWorks.exe (bypassing that fallback), so the "Could not find file" warning kept firing for the main product. Also drops the matching stale CLSID exclusion in mkall.targets. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CI's Commit messages check runs gitlint with the default title/body length rules, which several commits in this session violated (title >72 chars), breaking CI without a clear signal why. Document the limits and the local check command so future commits pass on the first try. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
5b96437 to
0baae87
Compare
Summary
VersionInfoProvider.cs: fixes a stale hardcoded copyright year, a bug whereApplicationVersionalways fell back to the entry assembly's version instead of the assembly it was actually built for, and defensive indexing inMajorVersion/ParseInformationalVersionto avoid a crash on an odd informational version string. Covered by newVersionInfoProviderTests.cs.Build/RegFree.targets: removes a danglingManagedVwWindow.dllentry — that project was already retired in Reduce optional COM usage #904/Retire Linux-era view shims #906, so the entry pointed at a component that no longer exists..github/prompts/opsx-*.prompt.md(10 files): replaces inlined instructions with delegation to the existing.claude/skills/openspec-*/SKILL.mdfiles, consistent with this repo's skills-over-inline-prompts convention.None of this is Avalonia-migration-specific; splitting it out so PR #964 stays scoped to the migration.
Test plan
./build.ps1succeeds./test.ps1forFwUtilsTests(specificallyVersionInfoProviderTests) passes🤖 Generated with Claude Code
This change is