diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bebd9c9..59a22cf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,6 +23,55 @@ and CI clones it at HEAD rather than vendoring a copy. That coupling is deliberate — the harness carries the spec, and a relay tested against a pinned old harness is tested against a pinned old spec. +## Issues and merge requests + +Work is tracked in GitLab issues, one per thing, in the repository where the fix +lands. Four repositories carry this project (see above), so an issue about the +apps does not belong here just because the relay noticed it. + +Cross-project references work and should be used: `paulhitt/flamenet-e2e#1` +renders as a link from any of the four. Use them rather than restating the other +issue, so the two never drift. + +A branch is named `-` — `1-metadata-sealed-rosters`. The merge +request opens with **`Closes #N`** on its own line, which links the two and shuts +the issue on merge. Without it the issue stays open after the fix ships and +somebody re-does the work. + +⚠️ `Closes #N` is resolved **in the repository the branch is pushed to**. Getting +the repository wrong does not error — it silently points at whatever issue holds +that number there, or at nothing. Check `git remote get-url origin` before you +commit, not after you push. + +### Labels + +| label | means | +|---|---| +| `accuracy` | A public page or doc claims something the code does not do | +| `privacy` | Changes what is stored, or what we say is stored | +| `parity` | One platform has it and the other does not | +| `unwired` | Built in the engine, not reachable from the UI | +| `ops` | Deploy, CI, infrastructure | +| `blocked:apple` | Waiting on App Store review | + +`accuracy` outranks the rest. A page that overstates what we protect is worse +than a missing feature: somebody reads it and decides what to say on this +network. Fix those first, and fix them in the direction of claiming *less*. + +🔴 **`unwired` is not a nice-to-have.** Engine work that no screen reaches +protects nobody, and it is the failure this project keeps repeating — sealed +rosters, group names and delivery capabilities all landed in the engine well +before any UI called them. An issue that only closes half of that is not closed. + +### What an issue should carry + +The evidence, not the impression. A path and line, a query and its output, a +`grep` and what it printed. "Groups may still be plaintext" ages badly; `4 +plaintext, 0 sealed` does not, and tells the next person how to re-check it. + +Say what "done" is as a checklist, and include the verification step — the thing +somebody runs to prove it, not just the thing they change. + ## Building and testing Swift **6.1** — pinned, and pinned to match `Dockerfile`. Not 6.0: postgres-kit