Enable NativeAOT publishing for SkillValidator#221
Merged
Conversation
Migrate all serialization to source-generated, AOT-compatible patterns: - Add PublishAot to csproj and Vecc.YamlDotNet.Analyzers.StaticGenerator package - Create SkillValidatorJsonContext with source-generated serializers for all types - Create SkillValidatorYamlContext with static YAML deserialization for eval config and frontmatter parsing - Change AgentEvent.Data from Dictionary<string, object?> to Dictionary<string, JsonNode?> for AOT-safe serialization - Replace anonymous type in Reporter.cs with named ResultsOutput record - Fix JsonStringEnumConverter to generic AOT-safe JsonStringEnumConverter<T> - Move ConsolidateData to Models.cs for JSON context accessibility - Switch EvalSchema and SkillDiscovery to StaticDeserializerBuilder - Add RawFrontmatter model for strongly-typed YAML frontmatter parsing - Update all JsonSerializer call sites to use context-based overloads The published binary is a single 14.6 MB native executable. All 198 existing tests pass. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Single build job with matrix for linux-x64, linux-arm64, win-x64, win-arm64, osx-arm64 - Each matrix entry: build, test, NativeAOT publish, pack NuGet, upload tarball - collect-packages job: builds RID-agnostic package, merges with per-RID packages into a single skill-validator-nupkgs artifact - Add daily schedule trigger (08:00 UTC) with 90-day retention - Keep existing path-based triggers for push/PR Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Single build job with matrix for linux-x64, linux-arm64, win-x64, win-arm64, osx-arm64 - Each matrix entry: build, test, NativeAOT publish, pack NuGet, upload binary - Upload publish directory directly (Actions wraps in zip automatically) - collect-packages job: builds RID-agnostic package, merges with per-RID packages into a single skill-validator-nupkgs artifact - Add daily schedule trigger (08:00 UTC) with 90-day retention - Keep existing path-based triggers for push/PR Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Increase totalTimeoutMs from 200ms to 2000ms. The tight budget was causing the CTS to fire before the retry attempt on slower CI runners (macOS arm64). The test still validates that the 60s base delay gets clamped — the 5s wall-time assertion is the real check. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add concurrency group so that pushing a new commit to a PR automatically cancels any still-running workflow for that ref. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The pack step was producing the same agnostic package for every RID. Adding --use-current-runtime ensures each matrix entry produces a RID-specific nupkg that gets collected into the combined artifact. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet pack --use-current-runtime already runs publish internally, producing the native AOT binary in artifacts/publish/. The separate dotnet publish step was redundant. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Increase baseDelayMs from 50ms to 200ms so that OS scheduling jitter on slow CI runners (macOS arm64) doesn't dominate the measured gaps. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
NuGet packages are zip files containing the native binaries, so the separate skill-validator-<rid> publish folder uploads are redundant. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pack the RID-agnostic package from the linux-x64 matrix entry instead of a separate downstream job, eliminating the bundle step entirely. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use precise glob patterns with the stable package name to distinguish RID-specific from agnostic nupkgs. The agnostic upload uses a negation pattern to exclude the RID-specific package on linux-x64. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
On scheduled runs, downloads all nupkg artifacts and publishes them as a rolling 'skill-validator-nightly' pre-release on the repo. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
JanKrivanek
approved these changes
Mar 5, 2026
The original MCPServerDef deserialization used PropertyNameCaseInsensitive which was dropped when switching to source-generated context. Add it back to the JsonSourceGenerationOptions to preserve flexible property casing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
Skill Validation Results
Model: claude-opus-4.6 | Judge: claude-opus-4.6 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Migrate SkillValidator (\�ng/skill-validator) to publish as a NativeAOT binary, producing a single ~15 MB native executable with fast startup and no JIT dependency.
Changes
Source-generated JSON serialization
Source-generated YAML deserialization
AOT-safe AgentEvent data
Validation