alunduil / alunduil/blog.alunduil.com
Maintenance at scale-of-one: one template, four Haskell libraries
- 主要语言
- Astro
- 星标
- 1
- 派生
- 1
- 平均合并
- 6 小时 34 分钟
- 30 天内合并 PR
- 118
描述
## Spark
This week the same modernization template — Travis → GitHub Actions matrix, drop Nix, fourmolu+hlint pre-commit, KAC 1.1.0 changelog, AGENTS.md/CLAUDE.md, Renovate `config:best-practices`, `develop`→`main`, modernized cabal bounds, tag-driven Hackage release workflow — landed across four Haskell repos: `collection-json.hs`, `network-uri-json`, `siren-json.hs`, `network-arbitrary`. Same shape, four repos, five days.
## Why it could be interesting
The activity is "I modernized my Haskell libraries." The underlying claim worth a post: **for solo maintainers, the bottleneck on supporting N libraries isn't writing code — it's keeping N CI/release/lint configurations coherent.** A reusable template (whether copy-paste, GitHub starter, chezmoi-managed scaffolding, or org-level reusable workflows) collapses the per-repo *meta*-maintenance cost from O(N) to O(1), leaving the actual library logic as the only per-repo work.
Maintainer Month is a useful framing here: maintainer burnout in the published narrative is mostly *meta-work* (CI breakage, release plumbing, security advisories, Dependabot churn), not feature work. A solo-maintainer template is the same insight applied at the personal scale.
## Open questions
- [ ] What's actually shared vs. genuinely per-repo across the four libraries?
- [ ] What's the right deliverable shape — `cookiecutter` starter? GitHub `.github/` repo with reusable workflows? chezmoi-shipped scaffolding? Just a checklist?
- [ ] How does the template language-bind? Haskell-specific bits vs. portable bits — would the same template fit zfs-replicate (Python) or woodland-generators (TS)?
- [ ] Connects to: #72 (Terraform import skill) — same impulse (collapse meta-work), different layer.
## Source material
- [collection-json.hs#135](https://github.com/alunduil/collection-json.hs/pull/135) — ci: replace Travis with GitHub Actions matrix
- [collection-json.hs#134](https://github.com/alunduil/collection-json.hs/pull/134) — Modernise cabal file and set verified bounds
- [collection-json.hs#133](https://github.com/alunduil/collection-json.hs/pull/133) — Add tag-driven Hackage release workflow
- [collection-json.hs#131](https://github.com/alunduil/collection-json.hs/pull/131) — Add fourmolu + hlint to CI
- [collection-json.hs#82](https://github.com/alunduil/collection-json.hs/issues/82) — Rename develop → main
- [collection-json.hs#111](https://github.com/alunduil/collection-json.hs/issues/111) — Drop Nix tooling
- [siren-json.hs#71](https://github.com/alunduil/siren-json.hs/pull/71) — Drop unmaintained Nix scaffolding
- [siren-json.hs#72](https://github.com/alunduil/siren-json.hs/pull/72) — Migrate Object construction to Data.Aeson.KeyMap
- [network-uri-json#96](https://github.com/alunduil/network-uri-json/pull/96), [#97](https://github.com/alunduil/network-uri-json/pull/97) — README + AGENTS.md/CLAUDE.md
- [network-arbitrary#87](https://github.com/alunduil/network-arbitrary/pull/87) — Renovate config:best-practices
- [Welcome to Maintainer Month: Celebrating the people behind the code](https://read.readwise.io/read/01kqw8r31wqxg3sbt3scg6aqef) — GitHub
- [Bliki: Mythical Man Month](https://read.readwise.io/read/01kqwfb4a39ct7pfh54ea7thqx) — Fowler
- [Haskell: the re-export module X pattern](https://read.readwise.io/read/01kqwscehfqfy0tvrr26f5ej6z) — Unformed Delta
贡献指南
这个仓库没有索引到贡献指南
评估
这个 Issue 还没有评估数据。