This fork preserves the official microsoft/SkillOpt history and adds a reusable C# implementation of SkillOpt's text-space optimizer. The upstream Python package remains available for research benchmarks and host-specific adapters; this package is the in-process .NET implementation.
- Target .NET 10 and use only Microsoft.Extensions.AI
IChatClientand Microsoft.Extensions.AI.EvaluationIEvaluatorfor model/evaluation integrations. - All package execution is embedded and in-process through caller-provided clients. Never add Python, subprocesses, required cloud services, direct provider SDKs, or custom HTTP model transports.
- Keep prompts and authored instructions in tracked resource files. Keep contracts typed and async operations cancellable.
- Preserve upstream's text optimization behavior and document gaps precisely in
docs/Parity.md.
dotnet restore ManagedCode.SkillOpt.slndotnet format ManagedCode.SkillOpt.sln --verify-no-changesdotnet build ManagedCode.SkillOpt.sln --configuration Releasedotnet test ManagedCode.SkillOpt.sln --configuration Releasedotnet pack src/ManagedCode.SkillOpt/ManagedCode.SkillOpt.csproj --configuration Release
- Set the single NuGet version in the root
Directory.Build.props<Version>property. - Release only from a tag named
dotnet-v<Version>(for example,dotnet-v0.1.0). This namespace avoids the upstream Python project's existingv*tags; never move or overwrite upstream tags. .github/workflows/dotnet.ymlruns format, build, tests, and pack for branch/PR changes. On adotnet-v*tag it additionally publishes the matching package to NuGet.org, verifies the flat-container package URL, and creates a GitHub release on the same C# commit.- Before tagging, verify the package contents, passing CI, and the exact version/repository commit metadata. A local pack is not a release.