Files
otivm/docs/architecture/terminology.md

231 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Terminology and Naming Convention
### TheRON — OTIVM / CIVICVS / TESSERA Stack
### Status: Living document — terms are added as they are established, never removed
### Date: 2026-04-28
---
## 0. Purpose and standard
This document is the referee for all naming decisions across code, database
schema, API endpoints, documentation, and UI text.
A term is admitted to this vocabulary only if it passes three tests:
1. **Period-authentic.** The term belongs to the period and culture it
describes. It is not borrowed forward or backward in time. A term that
applies equally to a Mesolithic forager and a Roman merchant and a
modern logistics manager has lost its precision and must not be used
as a canonical token.
2. **Semantically dense.** The term carries more information than its
nearest equivalent in the other layer. If the English and Latin mean
the same thing with equal precision, English is used in code. If the
Latin carries meaning the English cannot carry without a sentence of
explanation, Latin is used as the canonical token.
3. **Scope-bounded.** The term cannot be misapplied across periods without
the misapplication being immediately visible. GLADIVS cannot be used to
describe a Viking sword without the error being obvious. That visibility
is a feature, not a limitation.
**The exemplar:** CIVICVS. One word. Irreducible. Carries civic duty,
social obligation, public life, and the specifically Roman relationship
between the individual and the res publica — all at once. No English
word or phrase carries the same cargo. It is scoped to Rome: it cannot
be applied to the Mesolithic without obvious anachronism, and its modern
descendants ("civic") have shed most of its meaning. It passes all three
tests. It is the model for every term that follows.
---
## 1. Three layers
### Layer 1 — Universal substrate terms
Concepts that exist across all periods, cultures, and contexts.
These are the code tokens used in TESSERA, in database schemas, in API
endpoints, and in any code that must be period-neutral.
Universal terms are always lowercase in code. They describe the physics
and logic of the simulation, not the human experience of it.
### Layer 2 — Period-specific human terms
The vocabulary of a specific culture in a specific period. These are the
labels the participant or player encounters. They are never used as
database column names or API parameters — they live in UI text, journal
entries, documentation prose, and research briefs.
Period-specific terms are written in the conventions of their period.
Latin terms for Rome: CAPITALS for canonical introduction, mixed case
in prose thereafter. Reconstructed Mesolithic terms: follow the
conventions of the relevant scholarship.
### Layer 3 — Code tokens
The actual identifiers in source code, database columns, API parameters,
and file names. Always lowercase, snake_case for multi-word tokens.
Never use a period-specific term as a code token unless it has been
explicitly admitted to Layer 3 in this document.
---
## 2. Universal substrate terms (Layer 1)
These terms apply across all periods. They are the atoms of the simulation.
| Universal term | Definition | Code token | Notes |
|---|---|---|---|
| **actor** | Any individual or collective capable of initiating action in the simulation. A person, a clan, a guild, a vessel. | `actor` | Not "player", not "character", not "agent". An actor acts. |
| **location** | A point or bounded area in TESSERA space, identified by H3 cell ID at a specified resolution. | `location` | Never a coordinate pair alone. Always H3. |
| **movement** | A displacement of an actor or cargo from one location to another, with a start time, end time, mode, and cost. | `movement` | The universal abstraction of leg, route, voyage, journey, expedition. |
| **resource** | Any quantifiable thing that can be held, transferred, consumed, or produced. Physical goods, money, time, social capital. | `resource` | Deliberately broad. Specialised in period layer. |
| **exchange** | A transfer of resource between two or more actors, with terms, at a location and time. | `exchange` | Not "trade", not "sale", not "barter". Exchange is universal. |
| **venture** | A bounded sequence of movements and exchanges with a defined purpose, initiated by an actor. Has a start, an end, a cost, and an outcome. | `venture` | The universal abstraction of NEGOTIVM, foraging expedition, hunting party. |
| **leg** | A single movement within a venture. One mode, one route, one origin, one destination. | `leg` | Indivisible unit of movement within a venture. |
| **interval** | A bounded period of time during which an actor is not in movement. Rest, preparation, waiting, otium. | `interval` | Not "downtime". An interval has parameters — what the actor did, what it cost, what it produced. |
| **cost** | Any resource consumed by a movement, exchange, or interval. Time is always a cost. | `cost` | Time is the master cost. All others are denominated alongside it. |
| **outcome** | The net change in resources held by an actor at the conclusion of a venture. | `outcome` | Not "profit". Outcome can be negative, zero, or positive across multiple resource types simultaneously. |
| **parameter** | A quantifiable attribute of any simulation entity — actor, movement, exchange, resource, location. The atomic unit of the behavioral record. | `parameter` | Parameters are recorded. They are never inferred after the fact. |
| **event** | A timestamped record of a state change in the simulation. The atomic unit of history. | `event` | Time is the master dimension. Every event has a timestamp. No event is undated. |
| **epoch** | A named period of time with defined physical world parameters — sea level, climate, terrain. | `epoch` | Defined in `paleo_epochs` table. Not a game concept — a physical reality concept. |
---
## 3. Roman period terms (Layer 2) — OTIVM
Terms authentic to Rome, approximately 1st century BCE to 1st century CE,
western Mediterranean context. These are the human-facing vocabulary of OTIVM.
The test for each term: would a literate Roman of the period use this word
in this sense, in this context, without anachronism?
| Latin term | Literal meaning | Simulation meaning | English gloss | Notes |
|---|---|---|---|---|
| **MERCATOR** | merchant, trader | The actor in OTIVM. A free person conducting commercial ventures for personal profit. | merchant | Not "trader". MERCATOR implies a specific social and legal status in Rome. A NEGOTIATOR was higher status, a INSTITOR lower. MERCATOR is the correct term for our actor. |
| **NEGOTIVM** | business, affair, occupation | A venture: a bounded commercial undertaking with a defined route, cargo, and expected outcome. The opposite of OTIUM. | venture | The universal term `venture` maps to NEGOTIVM in the Roman layer. |
| **ITER** | journey, march, road | A single leg of a NEGOTIVM. One mode, one route, origin to destination. | leg | The universal term `leg` maps to ITER in the Roman layer. |
| **OTIUM** | leisure, rest, withdrawal | An interval of deliberate non-commercial activity. Has social, civic, and restorative functions. Produces AVCTORITAS when conducted correctly. | otium | Not "rest" or "downtime". OTIUM is a moral and social category. It has costs and outcomes like any other interval. |
| **AVCTORITAS** | authority, influence, reputation | A resource accumulated through correct conduct — commercial reliability, civic participation, social relationships. Opens opportunities unavailable to those who lack it. | auctoritas | Not "reputation points". AVCTORITAS was real social capital in Rome with legal and commercial consequences. |
| **CODEX ACCEPTI ET EXPENSI** | account book of receipts and expenditures | The merchant's ledger. The record of all resources received and spent. | ledger | The Ledger tab in OTIVM. The name is correct and intentional. |
| **RATIONES** | accounts, reckoning | The disaggregated line items of a NEGOTIVM — what was spent, on what, at what leg, with what outcome. | accounts | The third tab in OTIVM. The name is correct and intentional. |
| **FACTOR** | agent, doer | A trusted agent resident at a destination who acts on the MERCATOR's behalf. Negotiates prices, arranges storage, manages local relationships. | factor | An NPC in future releases. Not a "merchant's assistant" — a FACTOR had legal standing and could bind the MERCATOR contractually. |
| **AMPHORA** | two-handled vessel | The standard Roman cargo unit for liquids. Type-specific: Dressel 1 (wine), Dressel 20 (olive oil), Dressel 7-11 (garum). Not interchangeable. | amphora | The cargo unit. When the code records cargo, it records amphora type, not generic "units". |
| **MODIVS** | measure | Standard dry measure for grain and other bulk goods. ~8.62 litres. | modius | The cargo unit for grain. |
| **SVCCINUM** | amber | Fossil resin from the Baltic coast, traded south through intermediary networks over centuries. In OTIVM, the first good that connects Roman commerce to pre-Roman worlds. | amber | Not merely "amber". SVCCINUM is the Roman term for a specific good with a specific, traceable provenance chain reaching back to Maglemoisian forests. |
| **TVS** | frankincense, incense | Aromatic resin from southern Arabia. Reached Rome via intermediary networks through Egypt and the Levant. In OTIVM, the good that extends the supply chain furthest from Rome. | frankincense | |
| **VECTVRA** | carriage, transport charge | The freight cost for a specific leg of a NEGOTIVM. Paid to the carrier, not the MERCATOR. | freight charge | A cost parameter recorded per leg. |
| **PORTORIUM** | customs duty, toll | The tax levied on goods crossing provincial or customs boundaries. Collected by PVBLICANI (tax farmers). Rate and collection point are leg-specific. | customs duty | A cost parameter recorded per crossing point. |
| **HORREUM** | warehouse, granary | Storage facility at a port or market. The MERCATOR pays for storage by the day or season. | warehouse | A location type in the simulation. |
| **NAVIS ONERARIA** | cargo ship | A broad class of sailing vessels designed for cargo. Subtypes: CORBITA (round ship, slow, large capacity), ACTUARIA (oared, faster, smaller). | cargo vessel | Not "ship" or "galley". The vessel type determines capacity, crew size, speed, and weather vulnerability. |
| **NAUFRAGIVM** | shipwreck | Loss of vessel and cargo at sea. The catastrophic failure mode for maritime legs. | shipwreck | A failure event type. Probability derived from archaeological wreck distribution data. |
| **MARE CLAVSVM** | closed sea | The period approximately November to March when Mediterranean maritime commerce was suspended due to weather risk. A hard seasonal constraint on maritime legs. | closed sea season | An epoch-level parameter that disables or heavily penalises maritime legs during its duration. |
| **COLLEGIUM** | association, guild | A voluntary association of merchants, craftsmen, or others with shared commercial interests. Membership provides social capital, dispute resolution, and mutual aid. | guild | A social structure the MERCATOR may belong to. Affects AVCTORITAS and available NEGOTIA. |
| **CLIENTELA** | client relationship | The network of mutual obligation between a patron (PATRONVS) and clients (CLIENTES). A MERCATOR both has clients and is a client. Obligations compete with NEGOTIVM for time. | clientela | A social resource that generates and consumes OTIUM. |
---
## 4. Mesolithic period terms (Layer 2) — CIVICVS
Terms authentic to the Mesolithic, approximately 100004000 BCE, northern
European context (Maglemoisian, Ertebølle, Sauveterrian, Azilian cultures).
This section is a stub. Terms will be added as the CIVICVS corpus develops
and as scholarship is incorporated. The same three-test standard applies.
No term is admitted without a traceable source in the archaeological or
linguistic record.
| Term | Culture | Simulation meaning | Notes |
|---|---|---|---|
| *pending* | — | — | Terms to be established through corpus development and research briefs parallel to the Roman research brief. |
---
## 5. Code tokens (Layer 3)
The identifiers used in source code, database columns, API parameters,
and file names. All lowercase, snake_case. Period-neutral.
A code token maps to exactly one universal term (Layer 1). Its
period-specific expression (Layer 2) is documented here for reference
but never used in code.
| Code token | Universal term | Roman expression | Mesolithic expression | Used in |
|---|---|---|---|---|
| `actor` | actor | MERCATOR, FACTOR | Constructor | database, API |
| `venture` | venture | NEGOTIVM | foraging expedition | database, API, events |
| `leg` | leg | ITER | movement corridor | database, API |
| `interval` | interval | OTIUM | rest period | database, API, events |
| `exchange` | exchange | — | — | database, API |
| `resource` | resource | denarii, amphora, avctoritas | calories, flint, social bond | database |
| `location` | location | OSTIA, CAPVA, etc. | hex H3 ID | database, API |
| `movement` | movement | — | — | database |
| `cost` | cost | VECTVRA, PORTORIUM | — | database |
| `outcome` | outcome | profit/loss | net resource change | database |
| `parameter` | parameter | — | — | database |
| `event` | event | — | — | database, save file |
| `epoch` | epoch | roman_14bce | mesolithic_8000bce | database, API |
| `event_type` values: | | | | |
| `venture_start` | — | NEGOTIVM begins | expedition departs | events |
| `venture_complete` | — | NEGOTIVM returns | expedition returns | events |
| `leg_start` | — | ITER begins | — | events |
| `leg_complete` | — | ITER ends | — | events |
| `interval_start` | — | OTIUM begins | rest begins | events |
| `interval_complete` | — | OTIUM ends | rest ends | events |
| `exchange_complete` | — | sale/purchase | — | events |
| `session_abandoned` | — | MERCATOR withdraws | Constructor withdraws | events |
| `chapter_advance` | — | chapter milestone | — | events |
| `journal_unlock` | — | journal entry fires | — | events |
---
## 6. Terms explicitly rejected
These terms were considered and rejected. They must not appear in code,
schema, or canonical documentation. The reason for rejection is recorded
so the decision is not revisited without new argument.
| Rejected term | Reason for rejection |
|---|---|
| `trade` | Too broad. Applies equally to barter, gift exchange, market sale, and tribute. Erases the distinctions the simulation depends on. Use `exchange` or `venture` as appropriate. |
| `route` | Implies a fixed, named path. A NEGOTIVM is not a fixed route — it is a sequence of legs chosen by the MERCATOR. The path is a parameter, not the unit. Use `venture` and `leg`. |
| `player` | Implies a game. The MERCATOR is an actor in a simulation. The participant is a participant. Use `actor` in code. |
| `NPC` | Game terminology. Use `actor` with a `controlled_by` parameter indicating AI, simulation, or participant. |
| `points` | Any resource described as "points" has been stripped of its meaning. AVCTORITAS is not "reputation points". Use the correct resource name. |
| `dispatch` | Used in OTIVM-I and OTIVM-II as scaffolding. To be replaced by `venture_start` in OTIVM-III. The Dispatch Galley button will be renamed. |
| `galley` | Inaccurate. The vessel type is NAVIS ONERARIA or a subtype. The word "galley" implies an oared warship. The MERCATOR does not operate warships. |
| `reset` | A player resets a game. A MERCATOR abandons a NEGOTIVM or withdraws from a session. Use `session_abandoned`. |
---
## 7. Naming convention rules
**Databases and files:**
- Per-player database: `data/players/{token}.sqlite3`
- Master store: named by container role, not by content
- Never use a period-specific term in a file name
**API endpoints:**
- Always versioned: `/api/v1/...`
- Use code tokens (Layer 3): `/api/v1/venture`, not `/api/v1/negotium`
- Period-specific terms belong in response body documentation, not in endpoint paths
**Database columns:**
- Use code tokens (Layer 3) exclusively
- Timestamp column is always `recorded_at` — not `created_at`, not `timestamp`
- Every table that records simulation events must have `recorded_at` as its primary time dimension
**UI text:**
- Use period-specific terms (Layer 2) in all player/participant-facing text
- The Ledger tab: CODEX ACCEPTI ET EXPENSI in header, "Ledger" in navigation
- The Accounts tab: RATIONES in header, "Accounts" in navigation
- Never expose code tokens (Layer 3) to participants
**Comments in code:**
- When a code token maps to a period-specific term, note it in a comment on first use
- Example: `// venture = NEGOTIVM in Roman layer, foraging expedition in Mesolithic layer`
---
*Terminology and Naming Convention — living document, 2026-04-28*
*A term admitted is never removed. A rejected term is never reinstated without new argument.*
*TheRON — single contributor. AI assistants implement, document, flag — do not direct.*