Almost none of this problem is novel. The parts that feel novel — a wrapping horizontal axis, ordinal decks, gravity as a function of radius — turn out to have close analogues in domains that solved them decades ago, and the parts that feel routine are the ones with the sharpest existing theory.
Already in this project#
The scene/voice split is the model/view separation, at n = 1. Dawn at Scimitar Falls is bland state under a “Physical givens” heading; the six sibling files are renderings; scene: and voice: frontmatter are the join. The architecture being designed here is a generalisation of a pattern the project already runs — including its failure mode, since the renderings invented facts the prompt never contained.
The Spatial Ledger is the query interface, executed by hand. Its seven fields — position, facing, overhead, up-axis, light, landmarks, motion — are exactly what a scene-scoped retrieval should return. It also establishes the rule that an unfillable field is a finding rather than a blocker, which is the requirement for a first-class undecided.
Frontmatter as a join key is established practice here (problem, kind, scene, voice), and enableGitInfo is already on, which matters below.
The canon memory under .claude/memory/canon/ is a compressed index deliberately forbidden from becoming a second wiki. That constraint should hold for the model too, from the other direction: the model is not a third place to write prose.
Addressing built environments#
Building Information Modelling, and the IFC schema in particular. This is the closest real-world analogue and it is closer than it sounds: a building has storeys — ordinal, discrete, not freely traversable — containing spaces with irregular boundaries, overlaid by systems (structural, electrical, HVAC) whose topology deliberately does not match the spatial containment. IFC’s answer is to keep the spatial structure hierarchy and the system networks as separate graphs over shared geometry, related by explicit assignment rather than by nesting. That is a direct answer to the three-organizations problem, arrived at by an industry that had no choice about getting it right.
US Navy compartment numbering. A compartment is addressed as something like 3-75-2-L: deck number (ordinal, counted from a datum), frame number (metric, longitudinal, counted from a fixed origin), position relative to the centreline (transverse, with a parity convention for port and starboard), and a usage letter. It is learnable in a paragraph, it is unambiguous, and it survives the ship being rebuilt. Two things transfer. First, the shape is the shape Gyrealm needs — ordinal deck plus metric longitudinal plus transverse position. Second, the naval frame was already adopted by the spatial-consistency bundle for direction vocabulary; extending the same source to addressing keeps the borrowed conventions coherent rather than accumulating unrelated ones.
Spatial indexing#
R-trees, quadtrees, k-d trees are the standard answers to “which regions contain this point” and “do these two regions overlap.” They index bounding volumes and refine adaptively, which suits irregular named regions.
Cell hierarchies — Google S2, Uber H3, geohash, Morton/Z-order codes — replace geometry with set algebra: a region becomes a set of cell identifiers, and containment and overlap become prefix operations. Extremely fast, and unreadable by hand.
The caveat on all of it: every one of these assumes a sphere or a plane. A cylinder with one bounded axis, one cyclic axis, and an ordinal third is neither. The wrap in particular breaks naive bounding boxes — a region straddling the prime meridian has a “minimum” longitude greater than its “maximum.” Any borrowed index has to be re-derived for this topology rather than adopted. That is a real cost and an argument for deferring indexing until it is demonstrably needed.
Temporal modelling#
This is where the strongest and least-known prior art sits.
Bitemporal modelling (Snodgrass, and standardised in SQL:2011) separates valid time — when a fact is true in the world — from transaction time — when it was recorded. Conflating them is the classic error, and this project is at risk of it because both are natural to think of as “when.”
Allen’s interval algebra (1983) enumerates the thirteen possible relations between two intervals — before, meets, overlaps, starts, during, finishes, equals, and their inverses. It is precisely the vocabulary for “these two facts overlap in time,” it handles open ends, and it is small enough to implement in an afternoon. The temporal half of contradiction detection is a solved problem with a name.
SQL:2011 period predicates and temporal-table implementations give a working reference for what operations a valid-time system needs to support.
Provenance#
RDF named graphs and PROV-O are the mature answer to “which assertion came from where, and on whose authority.” Their vocabulary maps well onto the derived / decreed / undecided requirement. Their cost is that RDF drags in a whole toolchain, and the project needs three enum values and a citation field, not an ontology.
What git already provides free#
enableGitInfo = true is set, so transaction time is already handled. Git records when every fact was written, by whom, and what it said before. The model therefore needs valid time only — a full bitemporal implementation would be duplicating version control.
The corollary is a warning: git tracks authoring time, and the temptation to reach for branches or tags to represent in-world time should be resisted. They are different axes that happen to share a word.
What transfers#
Ranked by benefit against cost here:
- Allen’s interval algebra. Small, exact, immediately useful, and it settles the temporal half of overlap detection outright.
- The IFC separation of spatial structure from system networks. The direct answer to political/geographic/infrastructure, from a domain that had to solve it.
- Naval compartment addressing. The right address shape, and coherent with vocabulary already borrowed.
- Valid-time-only modelling, with git left to do transaction time.
- Bounding-volume indexing, re-derived for a cyclic axis — but deferred until region counts justify it.
What does not transfer is the cell-hierarchy family, unless legibility is abandoned as a goal. S2 and H3 are built for machines to exchange, and this corpus is built for a person to hand-edit.