Plugin: testing · Categories: hardcoded opinion (1), externalization gap (2)
Source: work-readiness sweep (read-only audit vs docs/PLUGIN-PHILOSOPHY.md + docs/MIGRATION-PLAYBOOK.md)
Findings
plugins/testing/skills/write/SKILL.md:41 — fallback naming defaults {Method}_Should{Behavior}_When{Condition} etc. (PascalCase C# idiom presented as THE universal default, unqualified); also :59-60
plugins/testing/skills/write/context/organize.md:47-56 — "Test class: {ClassUnderTest}Tests" under a bare "## Naming" heading, no ecosystem qualifier
plugins/testing/skills/write/context/write.md:95-113 — the only worked code sample is a C#/xUnit [Fact] block; also :47-53,119-121
plugins/testing/skills/diagnose/context/loop.md:59-65 — the sole regression example is dotnet test
- Also:
plugins/testing/skills/plan/SKILL.md:39-42, run-e2e/context/non-ui.md:22-29,73-79, diagnose/SKILL.md:49-50, diagnose/context/investigate.md:15,17,21
Why it breaks agnosticism
The skills hedge correctly elsewhere ("comes from the consuming project's testing conventions") — real mitigation. But the FALLBACK DEFAULTS a consumer lands on when nothing is documented, the only worked code sample, and the regression command are uniformly C#/.NET with no neutral counterpart. A Python/Go/JS/Rust consumer gets house-stack-only illustration as canonical. The seam exists; the default it falls back to is the issue.
Fix direction
State fallback defaults ecosystem-relative and route through the convention-resolution ladder ("use the project's documented pattern; when undocumented, mirror the ecosystem's idiom") instead of a PascalCase C# template as universal. Keep .NET examples but pair the sole code sample/regression command with one non-.NET idiom or label the block "illustrative (.NET/xUnit)". Demote house-stack forms from "default" to "one labeled example" — not a hardcode swap.
Plugin:
testing· Categories: hardcoded opinion (1), externalization gap (2)Source: work-readiness sweep (read-only audit vs docs/PLUGIN-PHILOSOPHY.md + docs/MIGRATION-PLAYBOOK.md)
Findings
plugins/testing/skills/write/SKILL.md:41— fallback naming defaults{Method}_Should{Behavior}_When{Condition}etc. (PascalCase C# idiom presented as THE universal default, unqualified); also:59-60plugins/testing/skills/write/context/organize.md:47-56— "Test class: {ClassUnderTest}Tests" under a bare "## Naming" heading, no ecosystem qualifierplugins/testing/skills/write/context/write.md:95-113— the only worked code sample is a C#/xUnit[Fact]block; also:47-53,119-121plugins/testing/skills/diagnose/context/loop.md:59-65— the sole regression example isdotnet testplugins/testing/skills/plan/SKILL.md:39-42,run-e2e/context/non-ui.md:22-29,73-79,diagnose/SKILL.md:49-50,diagnose/context/investigate.md:15,17,21Why it breaks agnosticism
The skills hedge correctly elsewhere ("comes from the consuming project's testing conventions") — real mitigation. But the FALLBACK DEFAULTS a consumer lands on when nothing is documented, the only worked code sample, and the regression command are uniformly C#/.NET with no neutral counterpart. A Python/Go/JS/Rust consumer gets house-stack-only illustration as canonical. The seam exists; the default it falls back to is the issue.
Fix direction
State fallback defaults ecosystem-relative and route through the convention-resolution ladder ("use the project's documented pattern; when undocumented, mirror the ecosystem's idiom") instead of a PascalCase C# template as universal. Keep .NET examples but pair the sole code sample/regression command with one non-.NET idiom or label the block "illustrative (.NET/xUnit)". Demote house-stack forms from "default" to "one labeled example" — not a hardcode swap.