Skip to content

deps: Bump xunit.runner.visualstudio from 3.0.2 to 3.1.5#27

Closed
dependabot[bot] wants to merge 1 commit intomainfrom
dependabot/nuget/tests/PPDS.Dataverse.Tests/multi-482fdbdb78
Closed

deps: Bump xunit.runner.visualstudio from 3.0.2 to 3.1.5#27
dependabot[bot] wants to merge 1 commit intomainfrom
dependabot/nuget/tests/PPDS.Dataverse.Tests/multi-482fdbdb78

Conversation

@dependabot
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Dec 29, 2025

Updated xunit.runner.visualstudio from 3.0.2 to 3.1.5.

Release notes

Sourced from xunit.runner.visualstudio's releases.

No release notes found for this version range.

Commits viewable in compare view.

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

---
updated-dependencies:
- dependency-name: xunit.runner.visualstudio
  dependency-version: 3.1.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: xunit.runner.visualstudio
  dependency-version: 3.1.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: xunit.runner.visualstudio
  dependency-version: 3.1.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github
Copy link
Contributor Author

dependabot bot commented on behalf of github Dec 29, 2025

Labels

The following labels could not be found: dependencies, nuget. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@joshsmithxrm
Copy link
Owner

Merged into feature/unified-cli-auth branch

@dependabot @github
Copy link
Contributor Author

dependabot bot commented on behalf of github Dec 29, 2025

OK, I won't notify you again about this release, but will get in touch when a new version is available. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot dependabot bot deleted the dependabot/nuget/tests/PPDS.Dataverse.Tests/multi-482fdbdb78 branch December 29, 2025 09:33
joshsmithxrm added a commit that referenced this pull request Jan 2, 2026
Addresses issues #7, #9, #15, #27 from code review:

- #7: Add thread-safety remarks to ConsoleProgressReporter
- #9: Add documentation for role mapping limitation in TieredImporter
- #15: Replace Console.WriteLine with AuthenticationOutput in auth library
  - New AuthenticationOutput class allows consumers to redirect or suppress output
  - Set AuthenticationOutput.Writer = null to suppress, or provide custom Action<string>
- #27: Add validation in CredentialProviderFactory before null-forgiveness
  - ValidateRequiredFields checks GitHubFederated, AzureDevOpsFederated, UsernamePassword

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
joshsmithxrm added a commit that referenced this pull request Jan 2, 2026
* fix: add thread-safe async locking to ProfileConnectionSource

Add SemaphoreSlim for proper async synchronization in GetSeedClientAsync.
The previous implementation checked _seedClient outside any lock, allowing
concurrent calls to create duplicate providers and clients.

Changes:
- Add _asyncLock SemaphoreSlim for async method synchronization
- Implement double-check locking pattern in GetSeedClientAsync
- Dispose SemaphoreSlim in Dispose method

Fixes part of #71

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: use ConcurrentBag for thread-safe provider tracking

Replace List<ICredentialProvider> with ConcurrentBag<ICredentialProvider>
to prevent collection corruption when CreateFromProfileAsync is called
concurrently from multiple threads.

Changes:
- Add System.Collections.Concurrent using
- Change _activeProviders to ConcurrentBag<ICredentialProvider>
- Update Dispose to use TryTake pattern instead of Clear()

Fixes part of #71

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: properly unregister MSAL cache in InteractiveBrowserCredentialProvider

Unregister the MsalCacheHelper from the token cache during disposal to
release file locks on the token cache file.

Fixes part of #71

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: properly unregister MSAL cache in GlobalDiscoveryService

Unregister the MsalCacheHelper from the token cache during disposal to
release file locks on the token cache file.

Fixes part of #71

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: remove redundant CancellationTokenSource from Program.cs

System.CommandLine 2.x handles Ctrl+C automatically and passes the
cancellation token to command handlers via SetAction's cancellationToken
parameter. The manual CancelKeyPress handler was creating a CTS that was
never connected to the command invocation pipeline.

Removed the unused CTS and added a clarifying comment about how
cancellation is handled.

Fixes part of #71

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: use ConcurrentDictionary for entity type code cache

Replace Dictionary<string, int> with ConcurrentDictionary<string, int>
for the _entityTypeCodeCache to ensure thread-safe access in case of
concurrent operations.

Fixes part of #71

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* refactor: extract duplicate ParseBypassPlugins to DataCommandGroup

Move the ParseBypassPlugins method from ImportCommand and CopyCommand
to DataCommandGroup as a shared internal helper. Both commands now
reference the single implementation.

Fixes part of #71

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* chore: suppress NU1702 warning for cross-framework PPDS.Plugins reference

PPDS.Plugins must target net462 (Dataverse plugin sandbox requirement) but
is referenced by projects targeting net8.0+. Since the package contains only
attributes and enums with no framework-specific APIs, this cross-framework
reference is intentional and safe.

Added explanatory comments in each affected project file.

Fixes part of #71

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: remove NU1903 vulnerability warning suppression

The high-severity vulnerability in transitive dependencies has been fixed
upstream. Remove the suppression so future vulnerabilities are properly
reported.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: use X509CertificateLoader for .NET 9+ certificate loading

Replace deprecated X509Certificate2 constructor with X509CertificateLoader
on .NET 9+. Uses conditional compilation to maintain compatibility with
.NET 8.

Fixes SYSLIB0057 warnings on net9.0 and net10.0 targets.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: suppress SYSLIB0014 warning for ServicePointManager

ServicePointManager is obsolete in .NET 6+, but these settings are required
for optimal Dataverse throughput. The Dataverse SDK uses HttpWebRequest
internally, so these settings still apply. No alternative exists until
Microsoft updates their SDK to use HttpClient.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: use async/await in thread safety tests (xUnit1031)

Convert blocking Task.WaitAll() to async Task.WhenAll() to resolve
xUnit1031 analyzer warnings about potential deadlocks in test methods.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: address 11 code review findings from #80

Critical fixes:
- Fix copy-paste bug in CertificateStoreCredentialProvider (StoreName→StoreLocation)
- Fix memory leak in DeviceCodeCredentialProvider.Dispose() (unregister cache)
- Fix memory leak in UsernamePasswordCredentialProvider.Dispose() (unregister cache)
- Fix double-checked locking bug in ConnectionStringSource (add volatile)

High priority fixes:
- Add debug logging for expected role lookup failures in TieredImporter
- Remove duplicate endpoint lookup in GlobalDiscoveryService
- Remove dead code ExecuteBatchesParallelAsync (76 lines)

Medium priority fixes:
- Redact exception messages in TieredImporter using ConnectionStringRedactor
- Add validation for empty entity/field names in CmtSchemaReader
- Add validation for MaxParallelEntities >= 1 in ImportOptions
- Preserve FaultException error codes in BulkOperationExecutor

Closes #80

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: add AuthenticationOutput for configurable auth messaging (#80)

Addresses issues #7, #9, #15, #27 from code review:

- #7: Add thread-safety remarks to ConsoleProgressReporter
- #9: Add documentation for role mapping limitation in TieredImporter
- #15: Replace Console.WriteLine with AuthenticationOutput in auth library
  - New AuthenticationOutput class allows consumers to redirect or suppress output
  - Set AuthenticationOutput.Writer = null to suppress, or provide custom Action<string>
- #27: Add validation in CredentialProviderFactory before null-forgiveness
  - ValidateRequiredFields checks GitHubFederated, AzureDevOpsFederated, UsernamePassword

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: address remaining issue 71 code review findings (8, 12)

Issue 8: Wrap sync-over-async in Task.Run to avoid deadlock
- ProfileConnectionSource.GetSeedClient() now runs async code on
  threadpool to prevent deadlock in sync contexts (UI/ASP.NET)

Issue 12: Use Uri.TryCreate instead of try-catch for flow control
- AuthCommandGroup.ExtractEnvironmentName() refactored to avoid
  exception-based control flow

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* refactor: extract phase processors from TieredImporter (#18)

Extract schema validation, deferred field processing, and relationship
processing into separate classes to improve testability and maintainability.

New components:
- ISchemaValidator/SchemaValidator: Load target metadata, detect mismatches
- DeferredFieldProcessor: Process self-referential lookup updates
- RelationshipProcessor: Process M2M associations with role mapping
- ImportContext: Shared context for all import phases
- FieldMetadataCollection: Type-safe wrapper for field validity data
- SchemaMismatchResult: Result type with detailed error message builder
- IImportPhaseProcessor/PhaseResult: Common interface for phase processors

TieredImporter reduced from 1,085 to 646 lines, now focused on orchestration.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: address PR review feedback (issues 1, 3, 4)

- Remove unused roleNameCache from RelationshipProcessor (#1)
  The cache was built with a network call but never used since
  LookupRoleByIdAsync queries by ID directly, not by name.

- Add volatile to AuthenticationOutput._writer (#3)
  Ensures thread-safe reads/writes of the static field.

- Unify ProfileConnectionSource locking (#4)
  Both sync and async paths now use the same SemaphoreSlim lock,
  preventing race conditions between GetSeedClient and GetSeedClientAsync.
  Also marked _seedClient as volatile for proper double-checked locking.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
joshsmithxrm added a commit that referenced this pull request Jan 8, 2026
* chore: streamline slash commands and add new workflow commands

Simplify existing commands for Opus 4.5 (85% line reduction):
- cleanup-code: 670 → 55 lines
- fix-technical-debt: 481 → 76 lines
- code-review: 250 → 62 lines
- review-technical-debt: 317 → 57 lines

Add new commands:
- /design - Invoke design-architect for feature design
- /new-panel - Scaffold new VS Code panel with Clean Architecture
- /handoff - Generate session summary for context handoff

Update CLAUDE.md with new commands and git commit preferences.

* fix: inject project context into design commands

- /design now tells agent to read CLAUDE.md and template
- /new-panel now tells agent to read panel patterns
- Both specify correct output location (docs/design/)
- Fixes issue where agents didn't know project conventions

* docs: add Data Explorer technical design document

Comprehensive design for SQL-to-FetchXML query tool including:
- Bidirectional SQL/FetchXML translation with warning support
- Clean Architecture layers (domain, application, presentation)
- Shared CsvFormatter infrastructure component
- Integration testing plan and UX decisions
- Refactoring plan for presentation logic in domain

* chore: consolidate and streamline AI workflow documentation

Major reductions for Opus 4.5 efficiency:
- WORKFLOW.md: 1,418 → 119 lines (92% reduction)
- TROUBLESHOOTING.md: 266 → 78 lines (71% reduction)
- README.md: consolidated with AGENTS.md → 95 lines

Archived (moved to .claude/archive/):
- AGENTS.md - content merged into README.md and WORKFLOW.md
- SETUP_GUIDE.md - meta-docs not needed for daily use
- agents/*.md - custom agent files (2,900+ lines not read by Task tool)

Added to CLAUDE.md:
- Session habits table (when to use /design, /code-review, /handoff, /clear)

Total .claude/ reduction: ~6,000 → ~300 lines (95% reduction)

* feat(data-explorer): implement Slice 0 - SQL parser and transpiler

Domain layer implementation for Data Explorer feature:
- SqlLexer: Tokenizes SQL SELECT statements
- SqlParser: Recursive descent parser producing AST
- SqlToFetchXmlTranspiler: Converts SQL AST to FetchXML
- QueryResult, QueryResultColumn, QueryResultRow value objects
- IDataExplorerQueryRepository interface
- DataverseDataExplorerQueryRepository infrastructure

Application layer:
- QueryResultViewModel DTOs for presentation
- QueryResultViewModelMapper with display formatting
  (toHeaderText, toDisplayString methods)

Includes comprehensive test coverage for all components.
Domain value objects contain no presentation logic per
Clean Architecture - formatting moved to application mapper.

* docs: add webview development patterns guide

Create docs/architecture/WEBVIEW_PATTERNS.md documenting:
- Message format contract ({ command, data } structure)
- Global variables in webview context (window.vscode)
- CSS layout patterns for scrollable content
- Behavior file patterns and webpack config
- Panel initialization pattern
- New panel implementation checklist
- Common mistakes and solutions

Also update related docs to cross-reference and remove dates
per DOCUMENTATION_STYLE_GUIDE.md.

* chore: restore agents and remove docs-generator

- Restore code-guardian and design-architect agents from archive
- Remove docs-generator agent (not actively used)
- Update CLAUDE.md and README references to reflect changes
- Point agent references to new .claude/agents/ directory

* docs: add Data Explorer IntelliSense design documents

Add technical design documents for SQL IntelliSense feature:

- V1: Initial design using virtual documents (identified issues)
- V2: Revised design fixing read-only document issue, supporting
  loading files from disk, and decoupling environment context

Key architectural decisions:
- Use VS Code native editor API (zero bundle size)
- Register completion provider for all SQL files
- Separate IntelliSenseContextService for environment tracking
- Support both new queries and existing .sql files from disk

* feat(data-explorer): implement Slice 1 - query execution and results display

Add SQL query execution against Dataverse with live FetchXML preview:

Domain Layer:
- SqlToFetchXmlTranspiler: convert SQL AST to FetchXML format
- Rich QueryResult entity with behavior methods

Application Layer:
- ExecuteSqlQueryUseCase: orchestrates parsing, transpilation, execution
- SqlParseErrorViewModelMapper: maps parse errors to view models
- QueryResultFactory for test data

Infrastructure Layer:
- DataverseDataExplorerQueryRepository: executes FetchXML via OData API
- Extract columns from FetchXML for sparse data support

Presentation Layer:
- DataExplorerPanelComposed: panel coordinator with environment scoping
- QueryEditorSection: SQL editor with FetchXML preview
- DataExplorerBehavior.js: webview interactions and result rendering
- SqlHighlighter/XmlHighlighter: syntax highlighting utilities

Features:
- Live FetchXML preview as you type SQL
- Query results table with sorting
- Horizontal scrolling for wide results
- Error display with position information

* feat(data-explorer): add clickable record links and copy URL functionality

Add ability to click lookup values (CreatedBy, ModifiedBy) and primary key
columns to open records directly in Dataverse browser. Include hover copy
button for record URLs.

Key changes:
- Add DataverseRecordUrlService for building/opening/copying record URLs
- Add Prefer header for OData annotations to get lookup entity types
- Fix link-entity column handling with _x002e_ encoding
- Add entityLogicalName and rowLookups to QueryResultViewModel
- Fix CSS stacked columns bug using wrapper span instead of flex on td

* fix(data-explorer): use FetchXML aliases as response keys

When FetchXML specifies column aliases, Dataverse returns data keyed
by the alias, not the attribute name. Repository was looking for data
by attribute name, causing empty cells in query results.

Changes:
- Added FetchXmlAttribute interface to track name, alias, responseKey
- Updated extractAttributesFromFetchXml to handle all alias scenarios
- Use responseKey (alias if present) for column matching
- Added test for LEFT JOIN with multiple aliased columns

* fix(data-explorer): prevent duplicate query execution from dual event listeners

Add customHandler property to ButtonConfig to allow behavior scripts to opt out
of generic messaging.js click handlers. Fixes duplicate query execution bug where
both messaging.js and DataExplorerBehavior.js were attaching handlers to the same
button, causing queries to execute twice on single click.

* docs: add TECHNICAL_DEBT.md and update Data Explorer TODO

- Create TECHNICAL_DEBT.md with TD-001 for EnvironmentSetup button workaround
- Mark duplicate query execution bug as resolved in DATA_EXPLORER_TODO.md
- Document proper customHandler pattern vs stopPropagation workaround

* Revert "docs: add TECHNICAL_DEBT.md and update Data Explorer TODO"

This reverts commit 1a54a81f73185f80266a101f32d14a6afa6282a0.

* fix(environment-setup): migrate from stopPropagation workaround to customHandler pattern

Replace stopPropagation() + capture phase workaround with proper customHandler
pattern for button click handlers. All 5 buttons (Save, Save & Close, Test
Connection, Delete, Discover ID) now use data-custom-handler attribute to skip
generic messaging.js handlers.

This brings EnvironmentSetup into consistency with Data Explorer fix (d215ac9)
and eliminates brittle event propagation manipulation.

* feat(e2e): add Data Explorer integration tests (WIP)

Add Playwright E2E tests for Data Explorer panel including:
- Panel opening and SQL editor tests
- Query execution tests (single click verification)
- Results display and record links tests
- Copy URL functionality tests

Note: Tests currently failing due to webview iframe detection issue.
Same infrastructure worked on feature/e2e-playwright branch - needs debugging.

* fix(e2e): update webview selector and test assertions for VS Code

- Changed iframe selector from src-based to class-based (VS Code uses dynamic URLs)
- Fixed keyboard event handling (use Page API, not Frame API)
- Added editor disabled state waits between tests
- Fixed log counting to use differential counts (logs persist across tests)
- Fixed status bar layout with proper flexbox (removed empty space)
- Reset FetchXML code element styling (removed highlight)
- Added initial results section HTML for proper layout

* chore: prepare release v0.2.2

- Update version in package.json
- Add 0.2.2 section to CHANGELOG.md
- Add release notes (docs/releases/v0.2.2.md)

* fix: address Copilot review feedback

- EnvironmentSetupBehavior.js: Fix misleading comment about data-custom-handler
- WebviewHelper.ts: Document _viewType param kept for API compatibility
- CLAUDE.md: Fix Co-authored-by capitalization (Git convention)

* test(data-explorer): add comprehensive domain layer tests

- Add SqlLexer.test.ts with 218 lines covering operators, quoted
  identifiers, strings, numbers, error handling, comments, and EOF
- Add SqlToken.test.ts with 113 lines covering is(), isOneOf(),
  isKeyword(), and isComparisonOperator() methods
- Add SqlAst.test.ts with 338 lines covering all AST value objects
  including SqlColumnRef, SqlTableRef, SqlLiteral, conditions, joins,
  and SqlSelectStatement
- Add SqlParseError.test.ts with 126 lines covering constructor,
  atPosition(), and getErrorContext()
- Expand SqlParser.test.ts (+48 lines) with RIGHT JOIN, NULL literals,
  and additional error cases
- Expand SqlToFetchXmlTranspiler.test.ts (+168 lines) with nested
  conditions (LIKE, IS NULL, IN within AND/OR), LIKE patterns without
  wildcards, and JOIN edge cases

Coverage improvements:
- SqlLexer.ts: 75% → 100%
- SqlToken.ts: 81% → 100%
- SqlAst.ts: 86% → 100%
- SqlParser.ts: 94% → 98%
- SqlToFetchXmlTranspiler.ts: 85% → 98%

Also fixes:
- CodeQL unused variables in DataExplorerBehavior.js
- Add istanbul ignore comments for defensive unreachable code paths
  in SqlParseError.ts and ExecuteSqlQueryUseCase.ts
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.

1 participant