Skip to content

Maintainership standards #7

@goldfirere

Description

@goldfirere

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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions