Skip to content
docs
Arxo ↗

Local and shared vocabulary

For LLMs4 sections

Not every declaration is meant to travel. This page explains the two scopes vocabulary lives in — local to one package, or shared across many through versioned dictionary packages — and how to keep the boundary clean.

Each claim carries a status in words with a letter mark; the full legend is on the topic index.

Declarations marked internal stay inside their package — available in the public release (S). They can be renamed, reshaped, or removed without coordinating with anyone, because no other package can reference them — provided the promised public behaviour stays put. Prefer internal for modeling details that only your own rules need.

That freedom covers names and shapes, not answers. Renaming an internal declaration cannot move any other package, because no other package can name it — but changing what an internal criterion accepts moves every public answer downstream of it. In the lab fixtures, the rule that completes registration is local to its package, yet three fee rules and one appeal rule in other packages read the public registered predicate it feeds: tighten the local criterion and parcels stop being registered, so fee answers disappear, with no signature touched at all. Internal means unreferenceable from outside, never unobservable through public predicates.

Within a package, files declare their intra-package dependencies in a single use self::{…} block per file (S). In the explicit authoring mode the block lists exactly what the file uses from its own package, and the law fix imports command regenerates these blocks from the resolution journal. Run that command only for packages you own; never across the whole tree.

When several packages need the same concepts — countries, currencies, courts, kinship — the corpus ships them as ordinary versioned packages whose names start with vocab. (S). Examples live in the corpus today: vocab.geo (regions, stations, points with trilingual labels), vocab.currency, vocab.country, vocab.courts, vocab.kinship, and more than two dozen others.

Dictionary packages follow strict rules (S, held by review):

  • Types and constants only: no rules and no source blocks inside.
  • No jurisdiction of their own: the importing act supplies the context.
  • Versioned like any package: consumers pin an exact version, so the meaning they tested against is the meaning they keep.

Importing a dictionary is the same mechanism as importing any package: declare the dependency in the manifest, pin it in the lockfile, and the locked world links it by name.

SituationScope
Concept used by one act aloneLocal internal declaration
Concept reused across actsShared vocab.* dictionary package
Same meaning, different display per languageShared declaration; vary labels and overlays — see languages
Genuinely different meaningsSeparate local declarations; never one shared node with two minds
Unsure whether two wordings mean the sameKeep both local; merge only through an explicit mapping later — see bridges
Stable cross-act identityDictionary constant with explicit identity

The companion lab material follows this split: package labparcels.iface is the shared interface every other fixture imports, while each consumer keeps its own rules local.

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.