Renumbers the two records that landed on main colliding (149 and 150 -> 153 and 154), and adds the check that would have caught it.
Issue 155 records the gap: the number is max(main) + 1 and main lags every open PR, so two machines reading the same main allocate the same number. The second collision reached main with all three checks green.
Proven by adding a duplicate and watching cycle.py fail, then removing it and watching it pass.
Renumbers the two records that landed on main colliding (149 and 150 -> 153 and 154), and adds the check that would have caught it.
Issue 155 records the gap: the number is `max(main) + 1` and main lags every open PR, so two machines reading the same main allocate the same number. The second collision reached main with all three checks green.
Proven by adding a duplicate and watching cycle.py fail, then removing it and watching it pass.
Two machines filing issues in the same hour both read main correctly and
both took "the next free number". main lags every open pull request —
seven that evening — so they collided twice. The second collision
reached main with records, cycle and index all reporting success.
cycle.py now refuses a tree where two issue folders share a leading
number, and names both. Proven by adding a duplicate and watching it
fail. The colliding records become 153 and 154, renumbered in the branch
that lands last, because renumbering a branch whose author is still
pushing only moves the race.
The check catches a collision; it does not prevent one. Taking a number
still means reading the open pull requests as well as main — issue 155
says so.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Renumbers the two records that landed on main colliding (149 and 150 -> 153 and 154), and adds the check that would have caught it.
Issue 155 records the gap: the number is
max(main) + 1and main lags every open PR, so two machines reading the same main allocate the same number. The second collision reached main with all three checks green.Proven by adding a duplicate and watching cycle.py fail, then removing it and watching it pass.