# Triage Issue

> Triage an OpenROAD GitHub issue by reproducing the bug and minimizing the test case with whittle.py. Use when an issue has an attached tarball artifact (.tar.gz) from `make *_issue`.

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

---


# Triage OpenROAD Issue

You are triaging OpenROAD issue **$ARGUMENTS**.

## 1. Fetch issue details

```bash
gh issue view $ARGUMENTS --repo The-OpenROAD-Project/OpenROAD \
  --json title,body,labels,state,comments
```

Look for:
- Error string (e.g. `GPL-0305`, `GPL-0307`, `DRT-XXXX`)
- Attached tarball URL (from `make *_issue`)
- OpenROAD version the bug was reported against

## 2. Download and extract artifact

Download any `.tar.gz` attached to the issue body or comments.
Extract into a working directory:

```bash
mkdir -p /tmp/triage-$ARGUMENTS
cd /tmp/triage-$ARGUMENTS
tar xzf <downloaded-tarball>
cd <extracted-dir>
```

## 3. Fix the run script

The `run-me-*.sh` scripts from `make *_issue` often need two fixes:

```bash
# Add set -e to exit on error
sed -i '2i set -e' run-me-*.sh

# Add -exit so openroad exits after the tcl script
sed -i 's/openroad -no_init/openroad -exit -no_init/g' run-me-*.sh
sed -i 's/openroad -no_splash/openroad -exit -no_splash/g' run-me-*.sh
```

## 4. Build OpenROAD

Build from the OpenROAD source tree:

```bash
cd <path-to>/OpenROAD
bazelisk build :openroad
```

The binary is at `bazel-bin/openroad`. Export it:

```bash
export OPENROAD_EXE=$(pwd)/bazel-bin/openroad
```

## 5. Reproduce the bug

Run the step command and confirm the error string appears:

```bash
cd /tmp/triage-$ARGUMENTS/<extracted-dir>
./run-me-*.sh 2>&1 | tee reproduce.log
grep -c "<error-string>" reproduce.log
```

If the bug does NOT reproduce with the latest OpenROAD, report this
on the issue -- the bug may have been fixed.

## 6. Run whittle.py

```bash
python3 <path-to>/OpenROAD/etc/whittle.py \
  --error_string "<error-string>" \
  --base_db_path <path-to>.odb \
  --use_stdout --exit_early_on_error \
  --step "./run-me-*.sh" \
  --persistence 3 --multiplier 2
```

### Monitoring progress

Watch the `[whittle]` lines. Key things to check:

- **ETA growing?** The design may be too large for the current
  persistence level. Try `--persistence 1` for a coarse first pass.
- **.odb size not shrinking?** The error may depend on most of the
  design. Try increasing `--multiplier`.
- **Step timeout too long?** Use `--timeout 300` to cap each step
  at 5 minutes.
- **After 5 minutes** of a step, whittle.py shows the tail of the
  step's log so you can see what it is doing.

### When to abort

- If after 20+ steps the .odb size has not changed, abort and try
  different parameters.
- If the step itself takes >10 minutes, consider whether the error
  string is specific enough (avoid generic strings like "ERROR").

## 7. Upload results

Create a new tarball with the whittled .odb:

```bash
cp whittle_base_result_*.odb <original-odb-path>
tar czf whittled-$ARGUMENTS.tar.gz <extracted-dir>/
```

Comment on the issue with before/after stats:

```bash
gh issue comment $ARGUMENTS --repo The-OpenROAD-Project/OpenROAD \
  --body "Whittled test case: original NNN insts -> MMM insts, \
.odb size: XXX MB -> YYY MB. Attached whittled tarball."
```

Upload the tarball to the issue comment via the GitHub web UI
(gh CLI does not support file attachments on comments).

