What an entry is, and what it is not
Two rows for one organisation is the defect every other directory defect turns out to be.
An entry is the record of one listed thing. It is created once, by a steward or by a holder’s accepted submission, and it is never duplicated. An entry does not describe itself — that is the listing’s job — and it holds nothing about a person beyond the role an account carries.
What an entry is for is resolution. Given a name typed in a search box, a slug in an address bar or a category someone walked down to, the directory has to answer with exactly one row or none. Everything in the field list below exists to make that answer unambiguous; anything that does not help the answer belongs on the listing instead.
The eight fields an entry cannot open without
Fixed field list
| Field | Shape | Set by | May change |
|---|---|---|---|
| identifier | whole number, allocated in sequence | the directory, once | never, and never reissued |
| registered name | the name as it stands on the register the portal draws on | a steward | only to follow the register |
| display name | short text, no punctuation a slug cannot carry | the holder | yes, with a slug decision |
| slug | lower-case letters, digits and hyphens | derived, then registered | yes, leaving the old one redirecting |
| primary category | exactly one category identifier | the holder, confirmed by a moderator | yes, through the queue |
| post town and outward postcode | two short fields, nothing finer | the holder | yes |
| contact route | one address, reachable | the holder | yes |
| state | one of the five listing states | moves only through a recorded transition | yes, never silently |
The address fields stop at the post town and the outward half of the postcode. That is enough to put a listed thing in a place and to group it regionally, and it is deliberately not enough to put anyone at a door. A finer field would be collected once and then asked for forever.
The single-writer rule, and why proposals are not edits
One account holds an entry and writes to it. Any other account — including a moderator — proposes. A proposal is a row in the revision queue carrying the field, the value before, the value after and the account that asked; it does not become the entry until a moderator accepts it.
Identifier and slug are kept apart for the same reason. The identifier is what the category tree, the index and the record all point at, so it has to be stable. The slug is what a reader types or copies, so it has to be legible, and legible things get renamed.
Not in the directory: free-text notes against an entry, uploaded documents, anything about a named individual, and any field whose only use is sorting entries by how much they paid.