Governance
Governance
Who decides what happens to this project, how decisions get made and recorded, and how someone else can come to share them.
Who decides
One person: the maintainer. There is no steering committee, no technical
board, no voting, and no legal entity. This is a benevolent-dictator model, and naming it is
more honest than implying a process. The dictator part is real: one person can accept a pull
request or change a repository setting, and nobody can overrule them. Publishing a release is
similar but not identical: the maintainer alone still decides whether a crate
releases at all — scoping and naming a release is his, unconditionally — but as of
2026-09-02 he may direct an AI coding agent to judge whether a release he has already scoped
meets this project's own stated readiness criteria and, if so, run cargo publish for it. The benevolent part is not a promise — it is a set of constraints anyone can
check: a decision about behaviour is written down before it is implemented, a declined idea is
recorded with its reasoning, a rule without a test fails the build, nothing merges
automatically, and the project says what it does not have rather than omitting it.
The specification is the authority
Each crate’s spec/ directory is canonical: when the spec and the code
disagree, the spec is right and the code is a bug. Every behavioural guarantee carries a
stable rule ID, and a coverage table — itself checked by cargo test —
maps each rule to the test that enforces it. The practical effect is that arguments here are
about text, not about authority: “R13 says an unrecognised sequence stays literal, and
this code does not” is a complete argument the maintainer cannot wave away. That is a
deliberate transfer of power away from the person holding the merge button, and it is the
main thing this project offers in place of a committee.
A change lands the same way for everyone, maintainer included: the spec section changes first, then a test expresses the rule, then the code, then the documentation, then the checks pass, then the maintainer reviews and merges. Nothing merges automatically, and no tool merges anything, ever.
What gets declined, and why
Most declines fall into three groups:
- It crosses a layer boundary.
er7is the ER7 encoding; validation, typed segment models, code tables, and transports belong to the layer above, which is a different project. - It would add a dependency. The counts are zero, one, and two, each justified by name in the family policy. Healthcare integration code gets audited, and these crates are meant to sit at the bottom of somebody else’s stack.
- It would make a claim the project cannot support. No conformance certification, no comparative performance claim without a fair benchmark, no compliance statement. Overclaiming in healthcare software is treated as a defect.
A decline is written down with its reasoning, in the spec, where you can argue with it. A decision being recorded does not make it right; it makes it arguable.
Becoming a maintainer, and forking
The route to maintainership is open and deliberately unglamorous: contribute, show sustained judgement about the specification — not just the code — and ask. Nobody is expected to wait to be noticed.
Forking is legitimate continuity, not a hostile act, and the project is arranged to make it cheap: five licences at your option, near-zero dependencies, a specification with numbered rules bound to tests, no CLA and no copyright assignment. If the maintainer becomes unavailable, a fork is the intended answer.
The canonical document is GOVERNANCE.md at the repository root; this page is a summary of it. Conduct is governed by CODE_OF_CONDUCT.md, which applies across the workspace.