.squad/skills/post-build-validation/SKILL.md
Validate side effects after build/deploy operations with graceful degradation
npx skillsauth add csharpfritz/aspire-minecraft post-build-validationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When build or deployment operations rely on external systems (APIs, remote commands, databases), individual operations can fail silently or be rate-limited. Post-build validation helps detect these failures and provides observability without blocking the entire process.
Validate After Build, Not During:
Graceful Degradation:
LogWarning() with structured logging (include coordinates, expected values)Verification Helper Pattern:
private async Task<bool> VerifyBlockAsync(int x, int y, int z, string expectedBlock, CancellationToken ct)
{
try
{
var response = await rcon.SendCommandAsync($"testforblock {x} {y} {z} {expectedBlock}", ct);
return !response.Contains("did not match", StringComparison.OrdinalIgnoreCase);
}
catch
{
return false; // Fail gracefully on exceptions
}
}
Structure-Specific Validation:
private async Task BuildWatchtowerAsync(int x, int y, int z, CancellationToken ct)
{
// ... build operations ...
await ValidateWatchtowerAsync(x, y, z, ct);
}
private async Task ValidateWatchtowerAsync(int x, int y, int z, CancellationToken ct)
{
if (!await VerifyBlockAsync(x + 3, y + 4, z + 1, "minecraft:glass_pane", ct))
logger.LogWarning("Validation failed at ({X},{Y},{Z})", x + 3, y + 4, z + 1);
}
StructureBuilder.cs:
Build*Async() method calls corresponding Validate*Async() methodVerifyBlockAsync() helper for consistent validation logicDon't throw exceptions from validation:
throw new ValidationException("Block mismatch")logger.LogWarning("Block mismatch at {X},{Y},{Z}", x, y, z)Don't validate everything:
Don't block the build process:
tools
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
tools
Techniques for visually connecting water bodies (canals, lakes, rivers) in Minecraft
development
# Static Configuration Pattern **Confidence:** low **Source:** earned ## When to Use When a class has compile-time constants (`const`) that need to become runtime-configurable without breaking existing consumers. ## Pattern 1. Convert `const` fields to `static T { get; private set; } = <original value>`. 2. Add a public `Configure*()` method that sets the new values. Call once at startup. 3. Add an `internal static Reset*()` method that restores defaults — needed for test isolation since `p
development
Core conventions and patterns used in the Squad codebase