Skip to content

Issue routing

Status: Accepted

Which repository an issue belongs in, and how it gets there.


Eleven repos, and a reporter who reasonably doesn’t know the split. Someone whose VPN check reports a leak files against lemonfiber — but if the check is behaving as specified and the specification is wrong, the issue belongs here.

Misrouted issues are not merely untidy: they sit in a queue nobody who can act on them is reading.

Is the behaviour what the spec says it should be?

flowchart TD
issue[Issue reported] --> q1{Does the software behave<br/>as the spec describes?}
q1 -->|No| impl[Implementation repo<br/>it's a defect]
q1 -->|Yes, but that's wrong| spec[spec repo<br/>the spec is wrong]
q1 -->|Spec says nothing| spec2[spec repo<br/>a gap]
q1 -->|Unclear| triage[Report anywhere<br/>maintainers route it]

That single question resolves most cases:

Symptom Repo Because
Command crashes lemonfiber Nothing specifies crashing
Wizard asks something answerable only by an expert spec Contradicts A2-R5 — but if the spec permits it, the spec is wrong
Service won’t start lemonfiber-media-stack Compose or manifest defect
Homebrew formula installs the wrong version homebrew-tap Release engineering
“It should also do X” spec A feature request is a spec change
Error message unhelpful lemonfiber or spec lemonfiber if it violates G4; spec if G4 doesn’t cover it
VPN provider unsupported spec Capability model change first

A feature request is a proposed spec change. Filing it against lemonfiber invites the sequence the lifecycle exists to prevent: someone implements it, then writes the spec to match.

The request doesn’t need to be written as a requirement — describe the problem and the desired behaviour, and a maintainer shapes it.

Report it anywhere. Routing is a maintainer’s job, not a reporter’s, and a misrouted issue is far better than an unreported one.

Issues are transferred rather than closed-and-refiled, so the history, the reporter’s attribution, and any discussion survive the move.

An issue that spans repos is filed in spec and linked from tracking issues in each affected implementation repo. The spec issue is the parent; it closes when the specification is settled, and the implementation issues close as work lands.

This mirrors GOV-R7 — a spec change altering accepted behaviour states which repos are affected, and those statements become the tracking issues.

Not through public issues. A private disclosure path is published in each repo’s SECURITY.md.

Security fixes are the primary legitimate use of the override, since a spec PR announcing what is being patched must not precede the patch.

ID Requirement
GOV-R20 Each repo MUST publish issue templates that ask the routing question.
GOV-R21 Misrouted issues MUST be transferred, not closed and refiled.
GOV-R22 Feature requests MUST be routed to the spec repository.
GOV-R23 Cross-repo issues MUST be parented in the spec repository with tracking issues in each affected repo.
GOV-R24 Each repo MUST publish a private security disclosure path.
GOV-R25 Issue templates MUST NOT require a reporter to identify the correct repository.

GOV-R25 is the one that keeps this from becoming a burden on people trying to help. Asking a reporter to understand an eleven-repo split before filing is asking them to do triage — and the predictable outcome is that they don’t file at all.

This page lives in another repository Rendered from lemonfiber/spec at 1d10402, 2026-09-09. Read the source of this page