Skip to content

testing: C#/.NET idioms are the fallback defaults and only worked examples in ecosystem-agnostic skills #429

Description

@kyle-sexton

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: highSignificant impact, or blocks an imminent release; staff this cycle.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions