Skip to content

Support Testably.Abstractions 10.4 by forwarding IFileSystem.RandomAccess - #103

Merged
matt-edmondson merged 1 commit into
mainfrom
claude/project-thread-441o6g
Oct 9, 2026
Merged

matt-edmondson merged 1 commit into
mainfrom
claude/project-thread-441o6g

Conversation

@matt-edmondson

Copy link
Copy Markdown
Contributor

Before: ktsu.Essentials.FileSystemProviders.Native was built against Testably.Abstractions 10.0.0. In 10.4.0, Testably.Abstractions.FileSystem.Interface adds IFileSystem.RandomAccess (IRandomAccess) on net6.0 and later. NativeFileSystemProvider implements IFileSystem through IFileSystemProvider and has no such member. So a downstream repo that resolves Testably 10.4 at run time, either directly or by taking Testably.Abstractions.Testing 7.1.x (which requires Interface [10.4.0, 10.5.0)), fails with TypeLoadException: Method 'get_RandomAccess' ... does not have an implementation. That is why the dependabot PRs in GitLfsCache and GitBranchStateCache are failing.

After: Both Testably.Abstractions and Testably.Abstractions.FileSystem.Interface are pinned at 10.4.0, and NativeFileSystemProvider.RandomAccess forwards to RealFileSystem.RandomAccess in the same way the other members forward. Once this ships, the downstream repos can take Testably 10.4 and Testing 7.1.x.

How: Testably declares the member under FEATURE_FILESYSTEM_RANDOMACCESS, which it defines only for net6.0 and later (Feature.Flags.props at core/v10.4.0). I checked the published 10.4.0 assemblies: IRandomAccess and get_RandomAccess appear in the net6.0, net8.0, net9.0 and net10.0 builds of both the interface and RealFileSystem, and in neither netstandard build. The forwarder is therefore wrapped in #if NET6_0_OR_GREATER. The net7.0 target resolves Testably's net6.0 asset, so it gets the member too. The netstandard2.1 build is unchanged. IRandomAccess lives in System.IO.Abstractions in the directly referenced Interface package, so no new reference is needed for KTSU0006. Between 10.0 and 10.4 the interface package also changed IFile, but Essentials does not implement IFile, and NativeFileSystemProvider is the only IFileSystem implementer in the repo. Adding a public member is additive for package validation. No other Testably packages (such as .Testing) are referenced here.

Validated by reading only; there was no local .NET SDK, so CI is the first build.

🤖 Generated with Claude Code

https://claude.ai/code/session_013j5p1tUWLykEtnhAziUkZa


Generated by Claude Code

…cess

Testably.Abstractions.FileSystem.Interface 10.4.0 adds IFileSystem.RandomAccess
on net6.0 and later. NativeFileSystemProvider implements IFileSystem through
IFileSystemProvider, so a consumer that resolves 10.4 at run time gets a
TypeLoadException for the missing get_RandomAccess. Bump both Testably packages
to 10.4.0 and forward RandomAccess to RealFileSystem, matching the other
members, on the target frameworks where the interface declares it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013j5p1tUWLykEtnhAziUkZa
@sonarqubecloud

sonarqubecloud Bot commented Oct 9, 2026

Copy link
Copy Markdown

@matt-edmondson
matt-edmondson merged commit 050daf7 into main Oct 9, 2026
14 checks passed
@matt-edmondson
matt-edmondson deleted the claude/project-thread-441o6g branch October 9, 2026 12:34
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.

2 participants