unhappychoice unhappychoice · 2026-09-07 - 2026-09-13

lintric resolution heuristics and a 170-commit Saturday

A week dominated by dependency hygiene across 20+ repos, punctuated by deep Rust fixes in lintric and a suspiciously productive Saturday.

This week was fundamentally a maintenance and housekeeping sprint across a sprawling portfolio of projects. The dependency update conveyor belt ran hard — 15 PRs merged, 64 reviews approved, touching everything from Rust crates to Ruby gems to npm packages across repos like mdts, gitlogue, steamfetch, gittype, and half a dozen others. It's the kind of week where the commit graph looks like a heartbeat monitor rather than a sprint chart.

The genuinely interesting story lives in lintric, where I was deep in the weeds on Rust resolution heuristics — fixing how qualified members are narrowed by resolved owner identity, preserving imports reached through module paths, and resolving lexical imports and enum members by their roles. These aren't glamorous commit messages, but they represent the kind of careful, fiddly static analysis work that's easy to get wrong. The PR activity there (comments, a changes_requested, multiple iterations) tells the story of a feature that needed real thought.

Saturday the 12th was something else entirely — 170 commits in a single day, which dwarfs the rest of the week combined. That's clearly an automated or batch-merge day where the dependency pipeline flushed, but it's a striking spike. Alongside that, four releases shipped: DroidFlyer v2.1.0, Norimaki v1.1.2, splashboard v2.10.1, and circleci-tools/CircleCI 2.1.1 — a solid release cadence for a single week.

Summary

6 sections
deep-dive
lintric: untangling Rust resolution heuristics
The most technically dense work this week was in unhappychoice/lintric, where I pushed a series of fixes around how the static analysis core resolves symbols. Commits like 'prefer concrete members over trait defaults', 'narrow qualified members by resolved owner identity', and 'resolve lexical imports and enum members by their roles' point to a systematic effort to make the resolution engine more correct. The review activity here was notably different from the rest of the week — I left comments and a changes_requested on lintric PRs, which means I was actually thinking critically rather than rubber-stamping dependency bumps.
repo unhappychoice/lintric PRs reviewed 7 PRs review types approved + changes_requested
activity-pattern
170 commits on a Saturday — what happened?
The daily commit distribution this week is wild: 47, 36, 57, 25, 25, 170, 10. Saturday the 12th accounts for more commits than Monday through Friday combined. This is almost certainly the day the dependency merge pipeline ran in bulk — Dependabot PRs queuing up and flushing all at once across the 20+ active repos. The bookend days (Sunday at 10) confirm the burst was a one-day event, not a sustained push.
47
Mon
36
Tue
57
Wed
25
Thu
25
Fri
170
Sat
10
Sun
peak day Sat Sep 12: 170 total commits 171 quietest day Sun Sep 13: 10
repo-summary
20+ repos touched, mdts leads the charge
unhappychoice/mdts was the busiest repo by far with 18 PRs, covering eslint 9→10 migration, jest 30.5.1, jest-environment-jsdom, webpack-cli, typescript-eslint, and @types/aws-lambda updates. Beyond mdts, the week spread across lintric, circleci-cli, cycle-flyer, blog, DroidFlyer, gitlogue, steamfetch, and more — a true portfolio maintenance week spanning JavaScript, Rust, Ruby, and Kotlin ecosystems.
unhappychoice/mdts 18 PRs
unhappychoice/lintric 7 PRs
circleci-tools/circleci-cli 5 PRs
bitflyer-tools/cycle-flyer 4 PRs
unhappychoice/blog 4 PRs
bitflyer-tools/DroidFlyer 4 PRs
unhappychoice/gitlogue 3 PRs
unhappychoice/steamfetch 3 PRs
unhappychoice/oss-issue-opener 3 PRs
unhappychoice/slack_channel_stats 3 PRs
irasutoya-tools/irasutoya 3 PRs
circleci-tools/Norimaki 3 PRs
unhappychoice/splashboard 3 PRs
unhappychoice/gittype 2 PRs
unhappychoice/terminal_image 2 PRs
irasutoya-tools/irasutoya-cli 2 PRs
unhappychoice/cycle-pusher 1 PRs
bitflyer-tools/bitflyer 1 PRs
unhappychoice/kobito 1 PRs
bitflyer-tools/bitflyer-cli 1 PRs
unhappychoice/zenn-docs 1 PRs
circleci-tools/CircleCI 1 PRs
unhappychoice/color-hash.kt 1 PRs
deariary/github-weekly-reporter 1 PRs
unhappychoice/mdts 18 PRs unhappychoice/lintric 7 PRs total repos 20+ languages JS · Rust · Ruby · Kotlin
release-roundup
Four releases shipped, including DroidFlyer v2.1.0
Four projects cut releases this week. DroidFlyer v2.1.0 landed with a batch of Gradle and Kotlin dependency bumps. Norimaki v1.1.2 shipped with a targetSdk raise to 36 for Play Store compliance. splashboard v2.10.1 fixed a remote name comparison bug for gix 0.86. circleci-tools/CircleCI 2.1.1 followed with Kotlin version bumps and test improvements. Steady release cadence across the Android and Rust projects.
releases 4 shipped DroidFlyer v2.1.0 Norimaki v1.1.2 splashboard v2.10.1
review-summary
64 reviews, mostly approvals — with one notable exception
I logged 64 reviews this week spanning 20+ repos, and the overwhelming majority were approvals on dependency update PRs. The exception was lintric, where I left two comments and a changes_requested — the only repo this week where the review process involved actual back-and-forth. That ratio (63 approvals vs. 1 changes_requested) reflects a week where most work was mechanical dependency hygiene, with lintric as the sole place requiring real judgment.
total reviews 64 approved 61 changes_requested 1 commented 2
tech-debt
Silent CI bug in gitlogue: curl eating 404s
One of the more satisfying fixes this week was 'fix(ci): fail Homebrew SHA step on HTTP errors' in gitlogue. The bug was subtle: curl -sL | sha256sum exits 0 even on a 404, so the pipeline was happily hashing error response bodies and writing bogus SHAs to the Homebrew formula while reporting success. The fix extracted a fetch_sha helper with curl -fsSL --retry 3 --retry-delay 5 and added set -euo pipefail to make failures actually fail. Classic silent CI footgun.
repo unhappychoice/gitlogue fix curl -fsSL + set -euo pipefail lines +10 -4

Highlights

5 items
pr
unhappychoice/gitlogue · merged Sep 2026 · +10 -4 · 1 file
A genuinely sneaky bug: curl silently digesting 404 error bodies and producing a valid-looking SHA for the Homebrew formula. Adding set -euo pipefail and a proper fetch_sha helper closes the gap.
pr
unhappychoice/mdts · merged Sep 2026 · +338 -640 · 2 files
A dependency bump that actually deleted more than it added — 640 lines out, 338 in. jest 30.5.1 apparently cleaned up some generated lockfile bloat in the process.
release
v2.1.0
bitflyer-tools/DroidFlyer · released Sep 2026
DroidFlyer hits v2.1.0 with a Kotlin and Gradle refresh. Keeping the Android trading app current with the Kotlin 2.x ecosystem.
release
Release v2.10.1
unhappychoice/splashboard · released Sep 2026
Patched a remote name comparison bug introduced by a gix 0.86 API change — the kind of upstream breakage that only surfaces when you actually run the tool.
pr
unhappychoice/mdts · merged Sep 2026 · +127 -76 · 1 file
Part of the broader eslint 9→10 migration push in mdts this week — this one brought in new features from eslint 10.10.0 alongside the config churn.
Share 𝕏 in 🦋