Nine pull requests reviewed by LightGBM's maintainers and merged, including a C++ networking bug in the distributed-training path.
microsoft/LightGBM, now its own organisation.| PR | Change |
|---|---|
| 7137 | C++ networking: socket timeout was broken on POSIX because setsockopt was given the wrong type |
| 7131 | Fixed a test that was not exercising all of its parameter combinations |
| 7133 | Test coverage for Booster.rollback_one_iter() |
| 7130 | Fixed a numpy integer cast in plot_importance |
| 7115 | Python type annotations through 7118: TypeGuard, return types on the scikit-learn predict methods, DTypeLike and Literal |
| 7119 | Positional arguments for np.arange in the predictor |
The socket fix is the one worth reading. It was a real defect in distributed
training rather than a documentation change, and it was wrong in a way that only
shows up on POSIX: the old call handed setsockopt an int
where POSIX wants a struct timeval, so it failed with
EINVAL and the timeout was never set. The merged change,
11 lines added and 2 removed in the wrapper:
- inline void SetTimeout(int timeout) {
- setsockopt(sockfd_, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast<char*>(&timeout), sizeof(timeout));
+ inline void SetTimeout(int timeout_ms) {
+#if defined(_WIN32)
+ DWORD timeout = static_cast<DWORD>(timeout_ms);
+ setsockopt(sockfd_, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast<const char*>(&timeout), sizeof(timeout));
+#else
+ struct timeval tv;
+ tv.tv_sec = timeout_ms / 1000;
+ tv.tv_usec = (timeout_ms % 1000) * 1000;
+ setsockopt(sockfd_, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
+#endif
}
PR 7137, src/network/socket_wrapper.hpp, the diff as merged in 80ab6d3.
Twelve were authored. Nine merged, two are open, and one was closed without merging.
All three of the unmerged are C++ in the distributed-training path, the hardest
part of that codebase, and the part where a maintainer will not merge something
they are unsure of. 7139 was closed; 7178 is the same fix
reopened in a different shape; 7138 is open in the same area.
Nine merged with the denominator left off would read better and say less. Nine of twelve, with the failures concentrated in the hardest area, is the more useful number.
Getting a change into a library at this level of use means passing review by maintainers with no reason to be generous. It is also checkable in ten seconds by someone with no time to read a portfolio, which is rarer than it sounds.
The companion evidence is the opposite shape: a gradient-boosting implementation written from scratch, benchmarked against LightGBM inside one harness. One shows the algorithm is understood; the other shows a large unfamiliar codebase can be worked in under review.
Every figure above is bound to a named section of the wiki page
lightgbm-contributions and checked mechanically before this page can
deploy. That page carries the GitHub API query behind each count and the date it was
last re-run, 2026-09-14, when every count was unchanged.
Known limits. The project moved organisations. The old API path
answers a permanent redirect with no body, so a script following it reads a
missing key and reports zero merged rather than failing; query the current
organisation. Until 2026-09-14 the table folded 7119 into the
annotations row; its title is a positional-argument fix, so it has its own.
gh api --paginate 'search/issues?q=is:pr+author:wagner-austin+repo:lightgbm-org/LightGBM', twelve items, merged_at non-null on nine.