The region model¶
Nerthus.Core (until cutover). This page describes the frozen system that runs today and is deleted at cutover. Replaced by: not yet written.
A Region is a named, time-scoped grouping of locations: Południowa Elancja spans
places that sit under different parents in the containment tree, and its borders can move
without any directory moving. This page is the contributor model of the Region entity
type and the temporal @region membership tag — where region blocks live, who may carry
the tag, how membership resolves as of a date, and what regions deliberately are not. The
containment tree, Mapa, and doors belong to the location model; the plain
introduction is in Locations and maps.
Concepts¶
- Region — the eighth entity type in the closed set. A
### <Name>block under the## Regionindex section, carrying@typ: Region. - Membership — one temporal
@regionline on the member, naming the region:- @region: Południowa Elancja (2020-04:). A Region block never lists its members. - Member — a
Lokacja, or aRegion(nesting). No other type is a member. - As-of-date resolution — membership is always evaluated against a query date; member lists are computed output, never stored state.
The Region entity type¶
The importer mints no regions — there is no on-disk region source to walk. A Region
comes to exist exactly two ways, the Przedmiot precedent (a type with no importer
section):
- hand-authoring a block into
nerthus.entities.md, which the index header invites; - the API —
POST /regionsforces@typ: Regionand lands the block under## Region.
The ## Region section is durable across re-import by construction: regeneration splices
only the four machine sections (NPC, Grupa, Lokacja, Mapa). The @region lines on
Lokacja blocks sit inside a machine section and survive regeneration as operator
lines, because region is not a machine-owned tag key. A regression test pins both.
The membership tag¶
Membership is one line on the member:
- Arity: temporal scalar. One region per location at a time, last-active-wins as of
the query date — the exact posture of
@lokacjaand@outerior. Overlap of the containment kind is expressed by nesting (below), not by tagging a place twice. - The
(from:to)grammar is owned by the tag schema; an open end bound ((2020-04:)) means the membership holds from that month onward. - A border move is close-and-append. The update closes the active line's range and appends the new membership dated from the change month — both lines stay, so the record keeps where the place belonged before the border moved:
- Values name the region exactly as its heading spells it, canonical diacritics
included. A
@regionvalue that names noRegionblock — including one that matches only a same-namedLokacja— is a dangling reference: integrity reports it as anUnresolvedReferenceWarning, never silently ignores it.
Direction: the member points at the region¶
A Region block never lists its members. The site already states this doctrine for
containment — one direction, the child's @lokacja; the parent-side @zawiera is retired
from the closed schema. A region-side member list would be @zawiera reborn, with the
same reciprocal-consistency bug class: two places to update, one of them forgotten.
One direction means a membership change is a one-line temporal edit on the member, and
member lists exist only as computed query output.
Nesting and who may carry @region¶
A Region may itself carry @region, so Południowa Elancja ⊂ Elancja is expressible:
- Membership is restricted to
LokacjaandRegion.@regionon any other type draws aRegionMemberTypevalidation Warning, not an Error — lore may legitimately lag, and an authoring mistake is worth surfacing without blocking a write. - A nesting cycle is an integrity Error (
RegionCycle), exactly as a@lokacjacontainment loop is. The membership query still terminates on a cycled index. - Queries return direct members by default; the transitive closure over nested
regions is opt-in (
?recurse=trueonGET /regions/{name}).
Namespace posture. Region names coexist with location names — the model merges blocks
by name and type, so a Region Elancja beside a future Lokacja Elancja is legal. The
two never bleed: @region values and region lookups resolve only against ## Region
blocks, with an exact folded-name match and no fuzzy stage; region names never enter
location resolution. A typo in a @region value is a miss, not a guess at a
similarly-named Lokacja.
Resolution as of a date¶
Membership is always evaluated against a query date (?activeOn=, default: now):
last-active-wins among covering ranges, the same evaluation every temporal scalar gets. A
membership that changes over time is the designed case — asking "which region was
Racicowy Matecznik in during 2019?" and "which is it in now?" are the same query with
different dates. @region on a path-qualified heading (### Karczma (Torneg)) works
unchanged, and member lists report qualified headings verbatim, so the output is
unambiguous.
What regions are not¶
- Not maps. A
Mapais a Margonem render, never a region member; regions group places (Lokacja) only. - Not the containment chain.
@lokacjaparenting and the computed@outeriorworld root express where a place physically sits. A region is orthogonal: it never participates in outerior resolution, door projection, or the location tree, and putting a place in a region moves nothing. - Not session placement. Nothing under
Lokacje/or the session scan roots reads regions.
A region is a read-side, named, time-scoped grouping — that is the whole contract.
Południowa Elancja is the type specimen: world prose defines it as a region, player
logs use it as a location-path prefix, and until this type existed it was an entity of
no type at all.
Cmdlet surface¶
Find-NerthusRegion, Get-NerthusRegion, New-NerthusRegionEntity,
Set-NerthusRegionEntity; the location filter is Find-NerthusLocation -Region. Routes,
envelopes, and executed examples: API reference — Regions.
See also¶
- Architecture — the daemon/thin-client contract every subsystem rides
- The location model — the containment tree,
Mapa, normalization, doors - The entity model — index files, the fixpoint merge, machine authorship
- Tag schema — the closed tag table and the range grammar
- Locations and maps — the operator article that owns regions in plain language