Write down how work gets tracked #67

Merged
paulhitt merged 1 commits from 5-tracking-convention into main 2026-08-31 13:49:18 +00:00
+49
View File
@@ -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 `<issue>-<slug>` — `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