The world grid¶
Nerthus.Core (until cutover). This page describes the frozen system that runs today and is deleted at cutover. Replaced by: not yet written.
A Mapa's @koordynaty is the top-left corner of its render on Margonem's world grid and
@wymiary is its size in tiles, so a placed and sized map is a rectangle.
Routes¶
| Method | Path | Cmdlet | Cap | Write |
|---|---|---|---|---|
| GET | /maps/layout |
— | entity.read |
— |
| POST | /maps/layout |
— | location.override |
✓ |
The write is bulk because placing maps one PATCH /entities/{name} at a time rebuilds the model
once per tag: 120 maps is 120 rewrites of a 25 900-line index and 120 rebuilds.
The overlap refusal is the only server-side invariant. Everything else these routes compute is
advice. Two maps claiming the same tile is a contradiction and the daemon does not persist one;
?force=true is the single way past it, and it exists because an operator mid-realignment really
does hold two maps over one another for one save.
?dryRun=true returns the whole plan with per-row would / refuse and writes nothing.
Rectangles are half-open, so two maps meeting edge to edge are a seam and not an overlap.
origin is whichever map sits at 0,0 — a convention recorded in the data rather than a constant
in the code, which is what lets the world be re-anchored later without a migration.
Findings¶
| Kind | Meaning |
|---|---|
Overlap |
two maps share tiles — a contradiction |
DoorUnsealed |
a @drzwi joins two placed exteriors whose rectangles do not touch |
SeamUnattested |
two maps touch and no @drzwi joins them — a hint, not a fault |
DoorUnsealed and SeamUnattested are raised for exterior-to-exterior pairs and no others. A
doorway into a building can never be a map edge: 111 of the corpus's 251 @drzwi pairs join two
exteriors and the other 140 do not, and admitting those would produce 140 geometric claims
indistinguishable from the real ones. A block carrying no @isexterior is not assumed to be
outdoors.
@isexterior is the tag that is read; @typ_lokacji is not¶
Both exist on Mapa and Lokacja, both are empty across the corpus, and only @isexterior is
consulted by any code path — the daemon's seam rules and the dashboard's grid both read it, with
true / tak / 1 accepted. @typ_lokacji (zewnętrzna / wewnętrzna) is declared, temporal,
and mapped by the map importer, and nothing reads it. Filling it in would write 2370 blocks no
reader consults.
Populating @isexterior is not a separate chore either. Placing a map on the world grid is the
assertion that it tiles, so a successful POST /maps/layout is the honest moment to record it,
and the tag fills in as a by-product of the alignment work. The name heuristic — a trailing p.N
floor suffix, or a building word in the name — is good enough to order a list of candidates and
nowhere near good enough to write a tag.
Until it is populated, a fully measured catalogue still leaves the aligner's "do ułożenia" filter empty: that filter wants outdoor, measured, doored and unplaced, and outdoor is the fact the corpus does not hold.
@koordynaty is temporal on a Lokacja and a snapshot on a Mapa¶
A town can move in the fiction and its block should keep where it used to be. A map cannot: the game
does not slide one sideways, a repaint gets a new version suffix and a re-cut gets a new
@margonemid. So PATCH /entities/{name} closes the active dated line and appends a new one for a
Lokacja, and replaces in place for a Mapa. Every other temporal tag on a Mapa — @url and
@status among them — keeps its timeline.