Thank you for your interest in improving HMP. This document describes how to propose changes to the protocol specification.
- The spec is the contract. Every change affects every implementation. Proposals must be precise, justified, and backward-compatible whenever possible.
- Implementations drive evolution. Spec changes should emerge from real implementation experience, not theoretical design.
- Simplicity is a feature. HMP's power comes from its minimal surface area. New RPCs, fields, or schemas carry a permanent maintenance cost. The bar for additions is high.
| Type | Process | Example |
|---|---|---|
| Typo / Clarification | Pull Request | Fix ambiguous wording, correct a JSON example |
| Editorial | Pull Request | Improve structure, add cross-references |
| Spec Gap | Issue → Discussion → PR | Missing error codes, undefined behavior |
| New Feature | RFC Process | New RPC method, new file schema, new extension |
| Breaking Change | RFC Process | Rename a field, change the confidence formula |
For typos, clarifications, and editorial improvements:
- Fork the repository.
- Create a branch from
mainwith a descriptive name (e.g.,fix/pagination-cursor-gap). - Make your changes to
README.mdor other spec files. - Ensure all JSON examples remain valid.
- Open a Pull Request with a clear description of what changed and why.
For any change that affects protocol behavior, wire format, or schemas:
Create a GitHub Issue using the title format:
RFC: <Short description>
The issue body must include:
- Summary — One paragraph describing the change.
- Motivation — Why is this needed? What implementation problem does it solve?
- Proposal — The specific spec change, including any new or modified JSON examples.
- Backward Compatibility — Does this break existing implementations? If so, what is the migration path?
- Alternatives Considered — What other approaches were evaluated and why were they rejected?
The issue will be labeled rfc and open for community discussion. RFCs require a minimum 14-day discussion period before moving forward.
During discussion, the proposal may be revised based on feedback. The issue author is responsible for maintaining an up-to-date proposal in the issue body.
After the discussion period, the maintainers will label the RFC with one of:
| Label | Meaning |
|---|---|
rfc/accepted |
Approved for implementation. Author or a maintainer opens a PR. |
rfc/deferred |
Valid proposal, but not the right time. Will be reconsidered in a future version. |
rfc/rejected |
Declined with rationale. |
Once accepted, submit a Pull Request that:
- Updates the spec (
README.mdand/or schema files). - Updates the
CHANGELOG.mdunder[Unreleased]. - Adds or updates test vectors if the change affects wire format or computation.
The protocol follows Semantic Versioning:
- Patch (
0.1.1) — Clarifications and editorial fixes. No behavioral change. - Minor (
0.2.0) — Backward-compatible additions (new optional fields, new extensions, new RPC methods). - Major (
1.0.0,2.0.0) — Breaking changes (renamed fields, removed methods, formula changes).
The protocol will remain at 0.x.x until at least two independent implementations demonstrate interoperability.
| Stage | Meaning |
|---|---|
| Working Draft | Active development. Breaking changes expected. |
| Candidate | Feature-complete. Seeking implementation feedback. Breaking changes unlikely. |
| Standard | Stable. Two or more interoperable implementations exist. Breaking changes require a new major version. |
All participants are expected to be respectful and constructive. Proposals are evaluated on technical merit.
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.