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 three 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

Fifteen concepts, three 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

Three words name the wrong thing, and one of them is on screen right now

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

draftunreviewed

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.

soonplanned

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.

Routed — cheapest and Restricted*

Both name a mechanism inside a group labelled privacy, where the question is where the audio goes — and the first smuggles a second axis, price, into the same string. On-device is the only chip already labelled on the scheme's own axis, which is how the inconsistency was spotted. These are claims made to users about their recordings, so they are marked decide and want sign-off rather than a unilateral edit.

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.