repair-timing-grt
Ensures repair_timing analysis is conducted correctly within OpenROAD to prevent misleading results from fast-grt flows.
Install
mkdir -p .claude/skills/repair-timing-grt && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/19033" && unzip -o skill.zip -d .claude/skills/repair-timing-grt && rm skill.zipInstalls to .claude/skills/repair-timing-grt
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Investigate OpenROAD global-route repair_timing correctly — the grt "grind"/timeout, hold- and setup-buffer insertion. Covers why a skip-repair (fast) grt measures nothing about repair, why repair_timing must run inside global_route.tcl on the pre-GR ODB, and how to split the grind into setup vs hold before blaming either. Use when a grt stage times out or runs for hours, when a change is meant to affect repair_timing, or when reasoning about hold vs setup buffer insertion at global route.Key capabilities
- →Investigate `repair_timing` at global route
- →Identify reasons for grt stage timeouts or long runs
- →Analyze hold- and setup-buffer insertion
- →Confirm `repair_timing` actually ran
- →Split grind runtime into setup vs. hold components
- →Reconcile hypotheses against measured setup/hold split
How it works
The skill guides the user to run the full global-route flow with repair enabled, ensuring `repair_timing` runs inside `global_route.tcl` on the pre-GR ODB, and then analyzes the log for repair activity and setup/hold contributions.
Inputs & outputs
When to use repair-timing-grt
- →Debugging grt stage timeouts
- →Analyzing hold buffer insertion
- →Investigating setup buffer placement
- →Validating timing repair changes
About this skill
Goal
Get a trustworthy answer about repair_timing at global route: whether it
grinds, why, and whether a proposed change moves it. Three traps below have each
wasted hours-long runs; avoid all three before drawing any conclusion.
Trap 1 — a skip-repair / fast grt measures nothing about repair
When the question is about repair_timing (the grt grind/timeout, hold- or
setup-buffer insertion), do NOT use a fast/skip-repair grt flow
(SKIP_INCREMENTAL_REPAIR=1, SKIP_CTS_REPAIR_TIMING=1, or a
grt_skiprepair-style extract). It skips repair_design / repair_timing
entirely — it only global-routes and estimates parasitics — so a clean, fast
exit tells you nothing about whether repair grinds. Using it to "test the
grind" is structurally meaningless.
The fast-grt flow is built for clock skew / parasitic re-measurement, where
skipping repair is exactly what you want. For anything about repair, run the
FULL grt with repair enabled (SKIP_INCREMENTAL_REPAIR=0).
Trap 2 — repair_timing needs the live global-route structures
repair_timing must run inside global_route.tcl, on the pre-GR ODB. It
needs the live global-route structures (GR grid, congestion, routing guides)
that are not persisted in the saved post-GR ODB. So you cannot bolt
repair_timing onto a saved post-GR ODB in a fresh session — it must happen in
the same openroad session as global_route, which is exactly what
global_route.tcl does:
# (shape of the flow script)
global_route
if { !$SKIP_INCREMENTAL_REPAIR } {
repair_design_helper
repair_timing_helper
}
To test repair on a modified netlist, stage the PRE-GR ODB (the CTS-stage
output) into the grt extract and run the grt stage with
SKIP_INCREMENTAL_REPAIR=0, so global_route rebuilds the structures and
repair runs live. Do NOT reuse a saved post-GR ODB.
Trap 3 — split the grind into setup vs hold before blaming either
The grind can be setup-dominated (a large count of setup-violated endpoints at negative clock slack — a design far from setup closure) or hold-dominated (many hold endpoints → many hold buffers), and the two want completely different fixes. A hold-side fix does not touch a setup-dominated grind, and vice versa.
Before trusting any grt result about repair, always:
- Confirm
repair_timingactually ran — grep the log forrepair_timing,RSZ-messages, andTook N seconds: repair_timing. If absent, aSKIP_*flag routed around it (Trap 1). - Split setup vs hold — read the setup-violated vs hold-violated endpoint counts and the setup- vs hold-buffer counts from the RSZ messages. Attribute the runtime to whichever dominates.
- Reconcile your hypothesis against the split. If you framed the problem as a "hold pathology" but the measured grind is setup, the framing is wrong — fix the attribution before proposing a hold fix.
Note on the effort dial
repair_timing -effort low|medium|high instruments the setup phase's
marginal-progress stop (it bails out of a non-convergent setup grind early). It
does not currently have an equivalent knob for the hold phase, and hold repair
is generally harder to bound than setup — so do not expect -effort low to
shorten a hold-dominated grind. See the deps-preflight skill for confirming
which effort actually reaches the tool.
Pairs with byo-openroad (iterate on a repair change) and orfs-deps-preflight
(validate the code path before the hours-long run).
When not to use it
- →When using a fast/skip-repair grt flow to test repair_timing
- →When running `repair_timing` on a saved post-GR ODB in a fresh session
- →When the question is about clock skew or parasitic re-measurement
Limitations
- →A skip-repair grt flow measures nothing about repair
- →`repair_timing` must run inside `global_route.tcl`, on the pre-GR ODB
- →The `-effort` dial only instruments the setup phase's marginal-progress stop
How it compares
This skill provides a methodology to correctly investigate `repair_timing` by avoiding common pitfalls that lead to misleading results, unlike simply running a fast or incorrectly configured grt flow.
Compared to similar skills
repair-timing-grt side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| repair-timing-grt (this skill) | 0 | 13d | No flags | Advanced |
| python-testing-patterns | 77 | 2mo | Review | Intermediate |
| chrome-devtools | 41 | 6mo | Review | Intermediate |
| bats | 9 | 7mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
python-testing-patterns
wshobson
Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development. Use when writing Python tests, setting up test suites, or implementing testing best practices.
chrome-devtools
mrgoonie
Browser automation, debugging, and performance analysis using Puppeteer CLI scripts. Use for automating browsers, taking screenshots, analyzing performance, monitoring network traffic, web scraping, form automation, and JavaScript debugging.
bats
OleksandrKucherenko
Bash Automated Testing System (BATS) for TDD-style testing of shell scripts. Use when: (1) Writing unit or integration tests for Bash scripts, (2) Testing CLI tools or shell functions, (3) Setting up test infrastructure with setup/teardown hooks, (4) Mocking external commands (curl, git, docker), (5) Generating JUnit reports for CI/CD, (6) Debugging test failures or flaky tests, (7) Implementing test-driven development for shell scripts.
browser-daemon
noiv
Persistent browser automation via Playwright daemon. Keep a browser window open and send it commands (navigate, execute JS, inspect console). Perfect for interactive debugging, development, and testing web applications. Use when you need to interact with a browser repeatedly without opening/closing it.
performance-profiling
davila7
Performance profiling principles. Measurement, analysis, and optimization techniques.
obsidian-local-dev-loop
jeremylongshore
Configure Obsidian plugin development with hot-reload and fast iteration. Use when setting up development workflow, configuring test vaults, or establishing a rapid development cycle. Trigger with phrases like "obsidian dev loop", "obsidian hot reload", "obsidian development workflow", "develop obsidian plugin".