Skip to content

chore: fix VersionInfoProvider bugs, drop stale RegFree.targets entry, thin opsx prompts - #978

Open
johnml1135 wants to merge 4 commits into
mainfrom
chore/version-info-and-opsx-tooling-fixes
Open

chore: fix VersionInfoProvider bugs, drop stale RegFree.targets entry, thin opsx prompts#978
johnml1135 wants to merge 4 commits into
mainfrom
chore/version-info-and-opsx-tooling-fixes

Conversation

@johnml1135

@johnml1135 johnml1135 commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

This branch pulls three unrelated fixes out of #964 (the Avalonia migration
branch), where they had been bundled in by mistake: a set of
VersionInfoProvider bugs (frozen copyright year, wrong assembly
resolution, non-defensive version parsing), a stale build-file reference to
a retired COM class, and 11 .github/prompts/opsx-*.prompt.md files
rewritten to delegate to their matching .claude/skills/openspec-* skill
instead of repeating the same instructions inline.

The obvious question for a three-in-one bundle like this is why it isn't
three PRs -- it's the size of the diff that argues against splitting further,
not the relatedness of the changes: each piece is small, self-contained, and
independently testable, and none of them are Avalonia-migration-specific, so
keeping #964 scoped to the migration mattered more than keeping this cleanup
maximally atomic. This has already been through one review round: a prior
pass flagged that the retired-COM-class cleanup only covered
RegFree.targets and missed BuildInclude.targets/mkall.targets; that gap
is now closed (verified below), and #989, the PR that would have collided
with the RegFree.targets line, was closed as a duplicate.

Where to look

  • VersionInfoProvider.cs -- the three bug fixes, pinned by 6 new tests in
    VersionInfoProviderTests.cs that link the real generated
    CommonAssemblyInfo.cs, so they exercise the shipped attribute shapes
    rather than a fake.
  • Build/mkall.targets -- the one remaining stale ManagedVwWindow CLSID
    exclusion; grepping the tree for ManagedVwWindow today returns nothing,
    in any *.targets file, on this branch or on main.
  • .github/prompts/opsx-*.prompt.md (11 files) -- each now delegates to its
    matching .claude/skills/openspec-*/SKILL.md; every target skill
    directory was confirmed to exist.
  • AGENTS.md -- documents the gitlint title/body-length limits CI enforces,
    since several commits in this branch's own history tripped them.

Deliberately not here

  • kDefaultCopyrightString/kSensitiveCopyrightString moved from const
    to static readonly (needed to compute the year at runtime) is a
    binary-compat change for any out-of-repo consumer that inlined the old
    const -- confirmed no in-repo caller does.
  • The sensitive-mode copyright strip
    (.Replace("SIL International", string.Empty)) is literal, not
    pattern-based: fine against today's fixed template, but would leak a
    future suffix (e.g. a city name) into "sensitive" output. Flagged in
    review, left as a documented trade-off rather than churning the diff
    further.

Extracted from #964, not stacked on it. Rebased onto main today (58
commits behind). ./build.ps1 and
./test.ps1 -TestProject "Src/Common/FwUtils/FwUtilsTests" -TestFilter "VersionInfoProviderTests"
both clean on the rebased tree: Test Run Successful. Total tests: 6.


Reading this a year from now -- start here

This PR went through a real review round before this rebase: a prior pass
found a MEDIUM issue (the ManagedVwWindow.dll cleanup was incomplete) and
two LOW nits, and a follow-up commit fixed the MEDIUM one. That follow-up
commit's SHA (and the original bug-finding commit's SHA) are cited in the
PR's older comments but are no longer reachable history after this rebase
-- trust the grep in "Where to look" above over the old SHAs, which is why
this description states the fix as a verified-in-tree fact rather than a
commit reference.

Decisions, and why

Why RegFree.targets shows no diff against main. The original version
of this branch removed a stale ManagedVwWindow.dll entry from
Build/RegFree.targets. A separate PR (#989) touched the same line
independently; #989 was closed as a duplicate once this branch's fix was
confirmed to cover the same ground, and by the time this branch was rebased
onto the current main, that line's content already matched -- so the
rebase folded it to a no-op automatically. Nothing was lost; there is
simply nothing left to show.

Why the MEDIUM issue needed a second commit. The first pass only edited
RegFree.targets, whose ManagedVwWindow.dll fallback entry is gated by
Condition="'@(ManagedComAssemblies)' == ''". FieldWorks.exe never hit
that fallback: Src/Common/FieldWorks/BuildInclude.targets populated
ManagedComAssemblies explicitly, with its own ManagedVwWindow.dll entry,
so the main executable kept emitting a "Could not find file" warning
regardless of the RegFree.targets edit. The follow-up removed that
BuildInclude.targets entry and the matching stale CLSID exclusion in
Build/mkall.targets.

Why the two LOW nits were left alone. Both are pre-existing-pattern
trade-offs rather than bugs introduced by this branch: the const ->
static readonly change is required to compute the copyright year at
runtime, and a repo-wide grep confirmed no consumer depends on it being a
compile-time constant. The literal-string copyright strip matches the
current fixed template exactly; making it pattern-based would be defending
against a template change that has not happened, at the cost of a more
fragile regex today.

Evidence
  • ./build.ps1 succeeds on the rebased branch.
  • ./test.ps1 -TestProject "Src/Common/FwUtils/FwUtilsTests" -TestFilter "VersionInfoProviderTests" -- Test Run Successful. Total tests: 6,
    covering the copyright-year, assembly-resolution, and trailing-whitespace
    fixes.
  • grep -rn "ManagedVwWindow" --include="*.targets" . returns no matches
    on this branch, matching main.
  • Every .github/prompts/opsx-*.prompt.md file's target skill name resolves
    to an existing .claude/skills/openspec-*/ directory (checked all 11).

This change is Reviewable

@github-actions

This comment has been minimized.

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown

NUnit Tests

    1 files  ±0      1 suites  ±0   11m 47s ⏱️ +12s
5 766 tests +6  5 685 ✅ +6  81 💤 ±0  0 ❌ ±0 
5 775 runs  +6  5 694 ✅ +6  81 💤 ±0  0 ❌ ±0 

Results for commit d129ff8. ± Comparison against base commit f2fac18.

♻️ This comment has been updated with latest results.

johnml1135 added a commit that referenced this pull request Jul 1, 2026
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>
johnml1135 added a commit that referenced this pull request Jul 1, 2026
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>
johnml1135 added a commit that referenced this pull request Jul 2, 2026
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 jasonleenaylor 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.

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: :shipit: complete! all files reviewed, all discussions resolved (waiting on johnml1135).

@johnml1135

Copy link
Copy Markdown
Contributor Author

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 (ApplicationVersion now reads m_assembly rather than always the entry assembly; the trailing-space leak from the empty $FWBETAVERSION case is fixed by the IsNullOrWhiteSpace guard; MajorVersion no longer emits "9.3 STABILITY"/"9.3 "; copyright years are computed at runtime). The new VersionInfoProviderTests link the real CommonAssemblyInfo.cs, so they exercise the shipped attribute shapes. The 11 opsx stubs delegate to skill names that all map to existing .claude/skills/openspec-*/ dirs. Nice.

A few points:

MEDIUM — the RegFree cleanup is only half-done, and overlaps PR #989

This PR removes ManagedVwWindow.dll from Build/RegFree.targets, but that entry sits in the fallback ItemGroup gated by Condition="'@(ManagedComAssemblies)' == ''". For FieldWorks.exe the list is populated explicitly in Src/Common/FieldWorks/BuildInclude.targets:10 (which still contains <ManagedComAssemblies Include="$(OutDir)ManagedVwWindow.dll" />), so the fallback never applied to the main executable — it will keep emitting the Could not find file ...ManagedVwWindow.dll warning. The retire-linux-era-view-shims change (task 5.1, marked done) names both files; only RegFree.targets was done. Suggest also removing BuildInclude.targets:10 (and the stale CLSID-exclusion comment at Build/mkall.targets:46).

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 — conststatic readonly is a (minor) binary-compat change

VersionInfoProvider.cs:23-28: kDefaultCopyrightString/kSensitiveCopyrightString are public and moved from const to static readonly. Necessary to compute the year at runtime, and I confirmed the only in-repo references are within VersionInfoProvider + the new test (no const-context/attribute/case usages), so it's safe here. Flagging only for public-API hygiene — an out-of-repo consumer that inlined the old const would need a recompile.

LOW — sensitive-mode copyright strip is literal

VersionInfoProvider.cs:305: copyRight.Replace("SIL International", string.Empty).TrimEnd(). Strips cleanly against today's fixed template (Copyright (c) 2002-$YEAR SIL International), but brittle if that string ever gains a trailing suffix (e.g. , Dallas), which would leak into "sensitive" output. Future fragility only.

Process note

The test-plan checkboxes (build.ps1, test.ps1 FwUtilsTests) are still unchecked, so passing tests aren't yet evidenced in the description.

Reviewed with Claude Code; findings verified against the code at the PR head. No code changed.

@johnml1135

Copy link
Copy Markdown
Contributor Author

Fixed the MEDIUM issue in 5b96437: removed the remaining ManagedVwWindow.dll entry from BuildInclude.targets (which pre-populates ManagedComAssemblies for FieldWorks.exe, bypassing the RegFree.targets fallback) and the matching stale CLSID exclusion in mkall.targets. The RegFree.targets overlap with #989 is moot now — #989 was closed as a duplicate.

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.

@github-actions

This comment has been minimized.

@johnml1135
johnml1135 force-pushed the chore/version-info-and-opsx-tooling-fixes branch from 5b96437 to 0baae87 Compare July 7, 2026 20:00
@johnml1135
johnml1135 force-pushed the chore/version-info-and-opsx-tooling-fixes branch from 0baae87 to 2deba4b Compare August 12, 2026 15:13
johnml1135 and others added 4 commits August 14, 2026 15:08
- 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>
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>
This branch's new content used em-dashes and a Unicode "<=" sign in a
few places (opsx-explore.prompt.md, opsx-onboard.prompt.md, AGENTS.md,
VersionInfoProviderTests.cs), which render poorly in some git tooling.
Switch them to the ASCII "--" and "<=" forms the rest of the repo's
prose and comments already use.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@johnml1135
johnml1135 force-pushed the chore/version-info-and-opsx-tooling-fixes branch from 2deba4b to d129ff8 Compare August 14, 2026 19:19
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 10 lines in your changes missing coverage. Please review.
✅ Project coverage is 38.05%. Comparing base (f2fac18) to head (d129ff8).

Files with missing lines Patch % Lines
Src/Common/FwUtils/VersionInfoProvider.cs 50.00% 2 Missing and 8 partials ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #978   +/-   ##
=======================================
  Coverage   38.04%   38.05%           
=======================================
  Files        1499     1499           
  Lines      350108   350113    +5     
  Branches    40231    40238    +7     
=======================================
+ Hits       133216   133233   +17     
+ Misses     187607   187589   -18     
- Partials    29285    29291    +6     
Files with missing lines Coverage Δ
Src/Common/FwUtils/VersionInfoProvider.cs 44.85% <50.00%> (+9.73%) ⬆️

... and 1 file 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.

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