A teammate’s pull request adds cover pages. The cover renders in a tab of its own, which the job borrows while it still holds the tab for the invoice. Under load that second borrow found the pool empty, so the pull request also lets the pool open one spare tab beyond size. You are reviewing it. The host’s limit has not changed.
The host runs more tabs than it has memory for. Without the spare, a cover job needs two tabs at once, so two cover jobs at the same moment each hold one and wait for the other’s.
Reproduce
On a pool of 2, hold one tab (another job running), then print a for acme with a cover page: it prints, but the host reports most open 3.
Acceptance criteria
- The host never has more than size tabs open.
- A job with a cover page prints both, cover first, while another job holds the other tab.
- When every tab is lent, a job gets none, cover or not.
- The earlier rules still hold: tabs are reused and signed out, and a wedged tab is closed and replaced.
Notes
- A cover job prints “cover as <account>; ” before its invoice line. Each case prints one entry per step, joined by “ | ”, then the host’s counts.
- Keep the names and signatures; the checker calls them. Don’t edit the plumbing.