pairwise
Generate a minimal pairwise covering array for factors with arbitrary mixed level counts, using the bundled deterministic generator.
Skill by lexfrei
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/lexfrei-pairwise
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/pairwise
What's inside
- Skill name
pairwise- Description
- Generate a minimal pairwise covering array for factors with arbitrary mixed level counts, using the bundled deterministic generator. TRIGGER — invoke when a debugging or testing plan has 3+ independent factors whose level counts do not fit the fixed taguchi arrays (a 4-level factor, a 5-value enum, uneven mixes like 4x3x2x2) and each run is expensive. DO NOT TRIGGER when every factor has 2-3 levels (use the taguchi skill - balanced arrays support effect ranking), for a single factor (bisect it), or when runs are cheap enough to brute-force the full factorial.
- License
- BSD-3-Clause
- Instructions
- 42 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (3)
- SKILL.md
- pairwise.py · scripts/
- test_pairwise.py · scripts/
SKILL.md (first lines)
A pairwise covering array guarantees every combination of levels of every factor pair appears in at least one run, in close to the minimal number of runs. Any behavior driven by one factor or a two-factor interaction is guaranteed to fire somewhere in the array — that is the same trigger guarantee the taguchi arrays give, without their fixed 2-3-level shapes.
The tradeoff: covering arrays are not balanced. Levels appear unequal numbers of times, so averaging outcomes per level is not a fair comparison between factors. Use this skill to make the bug fire and to shortlist suspects; rank and confirm with balanced follow-ups.
## Step 1 — factors and levels
Same rules as the taguchi skill: factors must be independently settable, every level discrete and articulable, observable-but-unsettable factors recorded as covariates. Level counts are unrestricted — that is the point of this skill.
## Step 2 — generate the run sheet
Run the bundled generator (relative to this skill's base directory):
```bash
python3 scripts/pairwise.py "net=fast,slow,flaky,off" "browser=chrome,firefox,safari" "os=linux,macos"
```
It prints a markdown run sheet plus the run count against the full factorial. The output is self-verified: the script crashes rather than print an array with an uncovered pair. It restarts the greedy search from 64 seeds and keeps the shortest array — the seeds cost milliseconds, the runs they save cost CI round-trips (`--restarts` trades one for the other, `--json` emits the rows for a driver script).
**Combinations that cannot be run go in as constraints, not as rows you quietly skip.** Safari does not run on Linux; version X does not build against Y. Dropping such a row by hand takes its pairs down with it and the coverage guarantee is gone without a word:
```bash
python3 scripts/pairwise.py "browser=chrome,firefox,safari" "os=linux,macos" "net=fast,slow" \
--exclude "browser=safari & os=linux"
```
Excluded rows are never generated, pairs that no legal row can contain leave the target set, and everything still reachable stays covered.
Present the sheet with concrete values and execute like the taguchi skill's run plan (randomize order under environment drift; for flaky bugs repeat the whole array N times, N ≥ ln(0.05)/ln(1−p) from the observed repro probability p).
## Step 3 — analyze by failure pattern, not by means
Because the array is unbalanced, skip level means. Work from the failing rows directly:
- For each factor, intersect its values across all failing rows. A factor stuck on one level in every failing row is a prime suspect.
- A factor that spans most of its levels across failing rows is likely innocent.
- Two factors jointly constant across failures point at their interaction — the pair guarantee ensured at least one such row existed.
## Step 4 — confirm
Same discipline as the taguchi skill: an accusation run (suspect levels on an otherwise-innocent config, must fail) and an acquittal run (a failing row with the suspect moved to an innocent level, must pass). If the shortlist has 2-3 suspect factors and the pattern is unclear, run their full factorial, or re-encode just the suspects at 2-3 levels and hand them to the taguchi skill for a balanced ranking pass.From lexfrei/ccc, BSD-3-Clause.
More from lexfrei/ccc
- 0.637score
taguchi
lexfrei
Plan a minimal set of debugging or testing runs with a Taguchi orthogonal array instead of changing one factor at a time.
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
pore-analysis
lexfrei
Measure porosity, pore size/shape, lattice period and ordering (psi6, Voronoi coordination, radial g(r) and orientational correlation length) from a top-view…
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
infostyle
lexfrei
Edit Russian prose into информационный стиль (Ilyahov/Sarycheva): strip meaningless words, unfold abstractions into facts and examples, rebuild sentences…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
lore
lexfrei
Read, search, and monitor Linux kernel mailing-list threads on lore.kernel.org.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
shrink
lexfrei
Find the guilty few among many boolean suspects with group testing (split-half, delta debugging) instead of toggling one thing at a time.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
brew-cleanup
lexfrei
Reclaim Homebrew disk by removing old formula/cask versions, pruning the download cache, and uninstalling orphaned dependencies (brew autoremove).
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
address-pr-comments
lexfrei
End-to-end closeout of unresolved review feedback across one or more GitHub PRs.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
go-cache
lexfrei
Reclaim Go disk by clearing the build, test, fuzz, and module caches.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
stale-forks
lexfrei
Find personal forks that no longer carry value — their unique commits are already merged upstream, or they hold no unique commits at all — and remove the…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
worktree-sweep
lexfrei
Find and remove stale git worktrees across one or many repositories.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
docker-prune
lexfrei
Reclaim Docker disk by pruning unused images, containers, networks, build cache, optionally volumes, and the build cache of non-default buildx builders; on…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
cleanup-all
lexfrei
Run the full local cleanup pipeline — stale git worktrees, dead personal forks, Docker prune, Go caches, and Homebrew — in one pass, each stage report →…
SkillAFreshness: A★ 11Claude Code +9
Signals
- Stars
- 11
- Forks
- 3
- Open issues
- 2
- Last commit (this folder)
- Aug 19, 2026 (2 months ago)
- Last release
- Oct 4, 2026 (24 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- BSD-3-Clause
- Repository
- github.com/lexfrei/ccc
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from lexfrei
- 0.637score
pore-analysis
lexfrei
Measure porosity, pore size/shape, lattice period and ordering (psi6, Voronoi coordination, radial g(r) and orientational correlation length) from a top-view…
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
infostyle
lexfrei
Edit Russian prose into информационный стиль (Ilyahov/Sarycheva): strip meaningless words, unfold abstractions into facts and examples, rebuild sentences…
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
taguchi
lexfrei
Plan a minimal set of debugging or testing runs with a Taguchi orthogonal array instead of changing one factor at a time.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
docker-prune
lexfrei
Reclaim Docker disk by pruning unused images, containers, networks, build cache, optionally volumes, and the build cache of non-default buildx builders; on…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
cleanup-all
lexfrei
Run the full local cleanup pipeline — stale git worktrees, dead personal forks, Docker prune, Go caches, and Homebrew — in one pass, each stage report →…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
lore
lexfrei
Read, search, and monitor Linux kernel mailing-list threads on lore.kernel.org.
SkillAFreshness: A★ 11Claude Code +9
Cite this page
pairwise skill. Agent Mart. https://agentmart.dev/skills/lexfrei-pairwise (last updated 2026-10-24)