# Test Discipline

Design assertions that prove the actual contract and fail on realistic regressions

- Repository: https://github.com/microsoft/waza (1496 stars)
- Category: Design
- License: MIT
- Last updated: 2026-10-31
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add microsoft/waza --skill test-discipline -g -a claude-code -y`
Codex: `npx skills add microsoft/waza --skill test-discipline -g -a codex -y`
Cursor: `npx skills add microsoft/waza --skill test-discipline -g -a cursor -y`
Gemini CLI: `npx skills add microsoft/waza --skill test-discipline -g -a gemini-cli -y`

## Description

Design assertions that prove the actual contract and fail on realistic regressions

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

## Context

Use this skill whenever a change affects an API, public interface, workflow contract, generated
artifact, or user-observable behavior. A passing status-only test is not evidence that the
intended artifact or contract is correct.

## Patterns

- Update tests in the same change as an API, signature, export, or public-interface change.
- Make assertions name and inspect the offending artifact, output, or configuration field, not just
  an exit code or broad success status.
- Mutation-test critical gates by changing the real source or emitted artifact and proving the
  assertion turns red.
- Exercise every caller path for a changed parser, normalizer, or helper; isolated unit coverage
  can miss the integration path that invokes it differently.
- Reproduce working-tree-only failures locally when the contract depends on index, filesystem,
  line-ending, or generated-output state.
- Keep expected inventory arrays synchronized with the files they enumerate.

## Examples

A workflow-compilation test mutates the source workflow, compiles it, and inspects the emitted
safe-output contract. A repair-script test constructs the actual index/blob/worktree state that
the repair routine must handle instead of a simplified fixture.

## Anti-Patterns

- Calling a test sufficient because it observes only a successful process exit
- Mutating a hand-built fixture instead of the source or artifact protected by the gate
- Testing a helper while omitting production callers
- Treating a local checkout defect as something CI alone can validate

