From 1ee62b30d724ce2968772f7ad573551f508fccef Mon Sep 17 00:00:00 2001 From: Paul Hitt Date: Mon, 31 Aug 2026 09:46:31 -0400 Subject: [PATCH] Write down how work gets tracked MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two days of work across four repositories was tracked in conversation and commit messages. That held while everything shipped the same day, and stopped holding the moment things did not: a stale privacy claim on a live page, an Android post-quantum gap, and 125 uncommitted lines that had never been built were all discoverable only by re-reading the history. So: issues in the repository where the fix lands, cross-project references rather than restating, `-` branches, and `Closes #N` in the merge request so the issue actually shuts when the fix ships. Three of the rules are paid for. `accuracy` outranks everything, because a page that overstates what we protect is worse than a missing feature — somebody reads it and decides what is safe to say. `unwired` is not a nice-to-have: engine work no screen reaches protects nobody, and this project has now done it three times running. And the warning about `Closes #N` resolving against whichever repository you pushed to is there because this very commit was first written into flamenet-e2e by mistake, where #5 is a different issue and nothing would have said so. Closes #5 Co-Authored-By: Claude Opus 4.8 --- CONTRIBUTING.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) 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 -- 2.54.0