# Compat Hunter

> Use when hunting for OBJ/GLB/glTF/VOX parser compatibility issues by streaming candidate models, parsing each immediately, deleting clean files, and retaining only actionable failures, unknown warnings, or unexplained zero-polygon outputs. Especially useful in the polycss repo with scripts/compat-hunter.mjs.

- Skill: `layoutit/compat-hunter` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add layoutit/compat-hunter`
- Raw SKILL.md: https://api.skillmd.com/api/skills/layoutit/compat-hunter/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: layoutit (https://skillmd.com/u/layoutit)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/layoutit/compat-hunter

---


# Compat Hunter

Use this skill when the user wants to keep digging for parser compatibility issues without building a fixed local corpus.

## Workflow

1. In the repo, prefer the reusable script:

   ```bash
   pnpm compat-hunter -- --max-models 2000
   ```

   Equivalent explicit form:

   ```bash
   pnpm --filter @layoutit/polycss-core build
   node .agents/skills/compat-hunter/scripts/compat-hunter.mjs --max-models 2000
   ```

2. Let the script stream remote OBJ/GLB/glTF/VOX candidates, parse each model, and discard clean files. Reports are written under `bench/results/`, which is ignored by git.

3. Treat these as known non-actionable unless the user asks to support them:
   - glTF POINTS/LINES/LINE_LOOP/LINE_STRIP primitives.
   - Required Draco or meshopt compressed primitives skipped with a warning.
   - STL source-quality diagnostics that the parser already handles: degenerate triangles, repaired winding, component orientation, non-manifold/shared-edge topology, supplied-normal mismatches, malformed normals/facets, overdeclared binary triangle counts, trailing binary bytes, and ignored non-Magics binary attribute bytes.
   - Empty/corrupt STL containers with no complete triangle records or no valid ASCII facets.

4. Stop and inspect anything classified as:
   - `throw`
   - `unknown-warning`
   - `obj-zero-no-warning`
   - `glb-zero-no-warning`

5. If an actionable parser issue is found, keep the saved file under the report's `interesting/` directory, add a focused parser test using that behavior, implement the smallest fix, and rerun the focused parser tests plus the hunter on the saved file or source class.

## Useful Commands

Fresh Objaverse and expanded GitHub stream:

```bash
pnpm compat-hunter -- --max-models 5000 --max-bytes 10mb --timeout-ms 30000
```

Objaverse only, later shards:

```bash
pnpm compat-hunter -- --sources objaverse --objaverse-shards 120:220 --max-models 5000
```

GitHub only:

```bash
pnpm compat-hunter -- --sources github --max-models 500
```

Poly Haven only:

```bash
pnpm compat-hunter -- --sources polyhaven --polyhaven-limit 250 --max-models 200
```

VOX-heavy GitHub sources:

```bash
pnpm compat-hunter -- --sources github --github-repos ephtracy/voxel-model@master:vox/,mikelovesrobots/mmmm@master:vox/ --max-models 1000
```

Local directory:

```bash
pnpm compat-hunter -- --sources local --local-root /tmp/models --max-models 1000
```

Keep known-warning files too:

```bash
pnpm compat-hunter -- --keep-known --max-models 500
```

For STL hunts, `--keep-known` keeps warning-only models under `known/` and the report includes `warningCategoriesByKind` plus `stlDiagnostics` on retained rows. Unknown STL warning text, throws, zero-polygon outputs, and suspicious DOM collapses remain `interesting/`.

Avoid repeating the same shuffled queue:

```bash
pnpm compat-hunter -- --sources thingi10k --exts stl --max-models 5000 --seed "$(date +%s)" --queue-offset 5000
```

Skip models already attempted by prior reports:

```bash
pnpm compat-hunter -- --sources thingi10k --exts stl --max-models 5000 --skip-report bench/results/<previous-run>/report.json
```

Continue after interesting cases:

```bash
pnpm compat-hunter -- --no-stop-on-interesting --max-models 2000
```

## Reporting

Summarize the final `report.json` with:

```bash
pnpm compat-hunter -- --report bench/results/<run>/report.json
```

In the final response, state the attempted/parsed counts, whether any interesting files were retained, and whether the findings are actionable. Do not imply a clean stream proves full compatibility; it only means this pass found no new actionable parser issue.

