You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
No tool name in a supertype (the schema owner's lane rule, Skeld, OW Market h40 #11385, #11386: "a converter never writes its own name into supertype or subtype; where a thing came from is the producer line and its x_<tool>_ keys, what a thing is goes in the type words"). Behaviour change in three doors: an untyped element came in as a Narrative with supertype kanka (a Kanka module with no OnlyWorlds type), notion (a row of an untyped Notion database) or legendkeeper (a LegendKeeper page whose tags name no type, or two); each now comes in with supertype Article, as the World Anvil and Campfire doors already write. Nothing else moves: the subtype (Kanka's module folder, Notion's database title), the tags, the x_<tool>_ keys and every id stay as they were, and a test pins each door's ids to those 0.41.0 gave (Kanka's and LegendKeeper's real exports, Notion's built fixture, LegendKeeper's recorded API answers). No other place in the package writes a door's name into a supertype or subtype.
LegendKeeper maps (onlyworlds.legendkeeper; Skeld's ruling, OW Market h40 #11385; Boss's three cases, #11387; Seethe's measured placement, #11426, #11429). From the export file, a map document becomes a Map, named <resource>: <document> as a hidden page's Narrative is: widthmax_x - min_x and heightmax_y - min_y from the document's map bounds, the bounds kept as x_legendkeeper_bounds and max_zoom as x_legendkeeper_max_zoom; image_url the map's mapId only when it is an http(s) address, as given and never copied (the image lives on LegendKeeper's host and loads only as long as that account's asset does, which the report says); a bare asset id (the tutorial map's) kept as x_legendkeeper_map_id, never written as a URL; location when the map's resource became a Location, else x_legendkeeper_resource its element id. A map document with no map object is a Map with no width, height or image, named so in the report, never zeros. Each pin becomes a Pin on its Map: its name, or, for a pin with none, the name of the element it places (what LegendKeeper shows), each named in the report; element_type and element_id the element its lk://resources/<id> uri names; a pin with no uri, or one naming no resource of the export, a Pin with no element, named, never a dangling id. Its place: the bounds are image pixels, but LegendKeeper's pos is [y, x] in zoom-0 units, an image pixel divided by 2^max_zoom, y counting down from 0 at the map's top to min_y; OnlyWorlds counts image pixels from the bottom left, so x is x * 2^max_zoom - min_x and yy * 2^max_zoom - min_y, a half rounded up, the exact pair kept as x_legendkeeper_pos, and the report names each map's scale ("positions scaled by 2^2 = 4"). Measured on two pins of Seethe's quay map, an 800 by 600 image with max_zoom 2 (OW Market h40 #11426, #11429; Skeld #11428): the first, read at image pixel (127, 110) from the top left, is stored [-27.5, 32], which times 4 is (128, 110): x 128, y 490; the second, read at about (796, 524), is stored [-131.118, 199.314]: x 797, y 76. Both fit the scaled reading and neither the unscaled one. A pin on a map with no max_zoom gets no x, y (the scale is not known, never guessed), keeps its pos, and the report names the map; its icon and label (iconGlyph, iconColor, iconShape, labelSize, labelVisibility, isSynced, any other) together as x_legendkeeper_pin. A hidden map document, or one on a hidden resource, is a hidden Map whose Pins are hidden; a pin whose isHidden is true a hidden Pin (no real file has a hidden pin or map yet: the tests plant them). Ids UUIDv5 of legendkeeper:<project>:map:<resource>:<document> and ...:pin:<resource>:<document>:<pin>. The API road keeps 0.41.0's behaviour: the API's map shape (bounds, pins) is not known, never read on the wire, so a map read through the API stays not imported, and the report now says why.
The third real export (Seethe's, a few hours after the first, the JSON type, her quay map with two pins: "The quay" on her page, and one near the map's right edge with no name and no uri, a Pin with no element named Untitled pin (uhljd0gj) in the report): banked as tests/fixtures/legendkeeper/the-quay-world-3.json, Boss's scrubbed copy (OW Market h40 #11434): the account's createdBy id and her map image's asset id each a same-length placeholder, LegendKeeper's tutorial asset ids and its authors' ids as exported. A test checks every uuid left on LegendKeeper's asset hosts is also in the first export (LegendKeeper's own tutorial content) or the placeholder. It becomes 113 elements: 2 Characters, a Creature, 29 Events, a Location, 5 Maps, 54 Narratives, 18 Pins, 3 Relations. The first export's folder is byte for byte 0.41.0's but for the supertype, its maps (4 Maps, 16 Pins) added.
Fixtures: no account identifier (Skeld's doctrine, OW Market h40 #11415; Boss's scrubs, #11420, #11430, #11434). The Kanka fixture is Boss's scrubbed copy, renamed tests/fixtures/kanka/quay-export-world_20261023_074706.zip (the old name carried the username): the username, user id and campaign id each a same-length placeholder. The Kanka fixture's ids moved with the scrubbed campaign id (the door keys them on it); a real user's ids are unchanged: 0.41.0 run on the scrubbed file gives the ids the test now pins. The LegendKeeper .lk fixture is Boss's scrubbed copy too (the account's createdBy id a placeholder), and the door's folder from it is the unscrubbed file's, byte for byte. A new test (tests/test_fixture_identifiers.py) holds the Kanka username, the LegendKeeper account id and its map image's asset id by sha256 only, and fails if any word-start window of any fixture (zip members and gzip read through) or test file hashes to one; run on the unscrubbed exports it finds each.
Folder format v0.3.18: a stamp move, the spec's one change being the campfire-export word (Skeld, OW Market h40 #11413). FORMAT_VERSION is 0.3.18.
Tests: on the third export the quay map and its two pins at their measured places, the scale the report names per map, the bare-id map and its 16 unnamed pins (Wiki City x 3553, y 5445 at 2^6), the three map-less documents, counts, the lint, determinism; on planted copies bounds that do not start at 0 and half bounds, a map with no max_zoom, a hidden pin, a hidden map, a pin naming no resource, a visible pin on a hidden page; the API road's map named; Kanka's untyped module on a planted copy; the ids of every door; no account identifier in any fixture or test file, by hash. 27 mutants watched failing, one per rule (the unscaled position, a guessed scale with no max_zoom, and a blind hash check among them).