Description
I was cruising by and remembered some conversations I had had with @tomjaguarpaw about best practices in package maintainership. I wonder whether this group would be a good place to flesh out such standards and work to get them into part of the general Haskell community workflow. I'm opening this as an Issue, not a PR, because it's not all fully-formed enough in my head to write up a formal proposal. Yet the idea is well formed enough that I think writing something is better than nothing. Do feel free to just close this if this is too far from your immediate agenda and is unhelpful.
Goal: Have the community recognize some subset of packages as well maintained. These packages might be highlighted with a badge on Hackage, for example. The packages are then understood to be more likely to be reliable into the future, and more worthy of being the basis of, say, a commercial enterprise.
Non-goal: Getting every Haskell contributor to follow these standards or to mandate anything, anywhere. This is all opt-in.
Bronze-Standard Maintenance:
- The package lists a maintainer email address. Emails to this address are answered within 2 weeks. (Exceptions allowed around holidays.)
- The package lists a place to post bugs. Posts to this location receive some response within 2 weeks. (Exceptions allowed around holidays.)
- The package includes a license.
- The package includes a testsuite and CI infrastructure.
- The package builds with all (stable) versions of GHC released between 6 months ago and two years ago (among, perhaps, others). Exception: if the package uses features new in GHC since four years ago, it is appropriate to have a lower version bound on GHC version.
Silver-Standard Maintenance:
- All of the Bronze-Standard requirements.
- The package includes a changelog, detailing how it has evolved from release to release.
- The package is included in a Stackage LTS.
- For the past three releases of GHC (including minor releases), the package was up-to-date (the testsuite passed) within 1 month of GHC release.
Gold-Standard Maintenance:
- All of the Silver-Standard requirements.
- The package includes a backup maintainer (with email address), who has full technical credentials to take over the project.
- The package contains a takeover plan if the primary maintainer becomes unresponsive.
- The package's ticketing system contains a reference to a code of conduct or other structure to encourage professional, welcoming communication.
- The package's README or manual includes informative examples of how to use the package. (Not just type signatures, for example.) (Is this too subjective?)
- The package's testsuite includes performance tests.
- The package builds with all (stable) versions of GHC released between 1 month ago and four years ago (among, perhaps, others). Exception: if the package uses features new in GHC since four years ago, it is appropriate to have a lower version bound on GHC version.
Platinum-Standard Maintenance:
- All of the Gold-Standard requirements.
- The package includes a timestamped statement within the past year attesting the aim to meet the Platinum-Standard requirements.
- The testsuite is analyzed for code coverage and covers at least 95% of the code in the package.
- Issues reported against the package get triaged in at most 2 business days.
Certifying the standard to which a package adheres clearly takes some human intervention, but most of the tests above can be automated. A package would have to request getting the badge in order for a human to assess it. This kind of assessment might be something the HF could take on. I do think having these maintenance levels would be very useful to people deciding on what packages to use in their mission-critical project!