engineering / concepts

Meaning lives in a definition. Words are just labels attached to it.

Store a nuance in an English word and every translation inherits whatever that word got wrong. Store it in a concept — a definition, a scope note, and one label per culture — and translating stops being word-to-word. This page is the review surface for that scheme, and the English pass over it.

Read this first

Nothing here is wired to the product

The app page does not read concepts.json. That is deliberate: this is a place to decide what words should be, separately from the strings currently shipping, so a decision can be argued with before it reaches anyone. The cost of that separation is drift — a review document describing strings that changed months ago is worse than no document, because it is confidently wrong. So every concept records what actually ships, and a CI test asserts those recordings against the real locale files. Change a string without revisiting its concept and the build fails.

Scope is terms, not strings

The app ships 53 keys and most are prose. A sentence does not have a concept — it has meaning in context. Only the terms are modelled here, in two schemes.

The vocabulary, not the stack

Field names are borrowed from SKOS — definition, scopeNote, broader, narrower, related — without the RDF machinery. No triple store, no SPARQL. For fifteen concepts on a site with no backend, that would be all cost.

Divergence is classified, not flagged

Two cultures using different words is usually the model working, not a defect. voice note / voice message / nota de voz / áudio are four right answers. Findings say which kind of difference each one is.

The scheme

Eleven concepts, two schemes

Three views of the same data, because part of the exercise is working out which way of looking at this is actually useful. Cards put the definition first and the labels underneath — good for deciding. Matrix puts every culture side by side on one row — good for spotting divergence. Relations draws the broader/narrower/related edges, which is the structure a held-out check would compare — and drawing it is what makes plain how few edges an interface vocabulary this flat actually has.

What the pass found

Two words name the wrong thing — and the third finding got the control deleted

The full reasoning sits on each concept above. The short version:

draft → unreviewed

draft names a stage of authoring — an unfinished thing its author is still working on. The concept is a state of verification — a finished thing nobody has checked. All four locales ship 53 of 53 keys; nothing is missing. So incomplete and partial are wrong too: they describe coverage. rascunho was never a bad translation — it faithfully carried a word that was already pointing at the wrong axis.

soon → planned

A promise about time that nothing backs. en-gb/culture.json declares this product's register as “Plain, direct British English. No marketing register” — and soon is marketing. The concept is intent, not imminence.

The finding that deleted its own control

Routed — cheapest and Restricted* both named a mechanism inside a group labelled privacy, where the question is where the audio goes — and the first smuggled a second axis, price, into the same string. Both were marked decide, because a claim made to users about their recordings wants sign-off rather than a unilateral edit. The sign-off (issue 060) did not relabel them. It removed the chips: two of the three modes had never been built, and a selector promises a choice — offering privacy modes we cannot honour is a worse defect than labelling them on the wrong axis. In their place is a plain sentence saying where the recording actually goes, which is prose and so out of scope here. The scheme is gone from the data; _resolved in concepts.json is the record of why.

The one that is not a defect

pt-PT uses idioma for the setting and língua for the tongue that was spoken. English uses one word for both and gets away with it because context disambiguates. Portuguese is being more precise, not inconsistent — a genuine lexical gap. Recording it is right; forcing agreement would destroy information.

Not built

What this deliberately does not do yet

Named so the gap is visible rather than assumed.