chore(cutover): sync main into edge before the Asset Bridge cutover
`edge` was BEHIND `main` by two commits — Module-uo#35 (the atlas keeps its `UniqueId`, and a landmark option value names one landmark) and the Event System's core re-pin — so merging `edge` into `main` as the Asset Bridge cutover would have REVERTED a released fix. Phase 9a's walk measured it: 0 of 6,455 spawners carried a `UniqueId` on an `edge` rig even after the column existed. ## The one conflict, and why the number had to move Both sides bumped `PARSER_VERSION` 4 -> 5, for different reasons, and main's 5 is RELEASED in v1.2.2: "a point keeps its `UniqueId`". `edge`'s 5 was phase 7's canonical label order. Keeping 5 would have made phase 7's change unreachable. `sameSources` gates on the tree hash and `currentParser` on the stored number; an install that imported under v1.2.2 already stores 5, so a phase-7 build declaring 5 would be called current and would never re-read. That is precisely the trap this constant exists to defeat, so the merged file carries BOTH notes: 5 is main's released meaning, 6 is phase 7's, with the renumbering explained in place. Everything else merged clean and keeps #35's files verbatim. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
This commit is contained in:
@@ -206,14 +206,25 @@ function hashSources(root) {
|
||||
* targets (Phase 12b). The bump is what re-reads a tree the boot path
|
||||
* would otherwise skip on an unchanged hash — the source files have not
|
||||
* changed, only what is kept from them.
|
||||
* 5 — source files are parsed in one canonical label order (protocol 8 phase
|
||||
* 5 — and it did NOT keep it: version 4 bumped the parser and the aggregator
|
||||
* below still discarded the field, so the intent above shipped as a
|
||||
* comment. This bump is what makes an already-imported tree re-read now
|
||||
* that the mapping keeps it; without it `sameSources` sees an unchanged
|
||||
* tree and every existing install stays empty. Released in v1.2.2.
|
||||
* 6 — source files are parsed in one canonical label order (protocol 8 phase
|
||||
* 7). The decoration index keeps the first item id it sees for a type, so
|
||||
* the read order decided a preview graphic; it now cannot differ between a
|
||||
* tree read off a disk and the same tree read over the bridge. Identical
|
||||
* sources, and for a handful of types a different answer, which is exactly
|
||||
* what this number exists to make reach an install.
|
||||
*
|
||||
* This was written as 5 on `edge` while 5 was being released from `main`
|
||||
* meaning something else, so the cutover renumbered it: an install that
|
||||
* imported under v1.2.2 already stores 5, and had the number not moved,
|
||||
* `sameSources` would have called that tree current and this change would
|
||||
* have reached nobody who was already running.
|
||||
*/
|
||||
const PARSER_VERSION = 5
|
||||
const PARSER_VERSION = 6
|
||||
|
||||
/** True when two source fingerprints describe the same tree. */
|
||||
function sameSources(a, b) {
|
||||
@@ -373,6 +384,16 @@ function buildFromFiles(files, options = {}) {
|
||||
const place = resolveRegion(point.x, point.y, point.facet, placement, resolveOpts)
|
||||
return {
|
||||
name: point.name,
|
||||
// **The field this whole `PARSER_VERSION` note was about, and it was
|
||||
// dropped right here.** The parser has produced it since Phase 12b and
|
||||
// the column and the query have both been waiting for it, but this
|
||||
// mapping rebuilds each point from an explicit field list and `uniqueId`
|
||||
// was not on it — so every row landed with `unique_id` NULL, and
|
||||
// `listSpawners`, whose WHERE is `unique_id IS NOT NULL`, could only ever
|
||||
// answer empty. That made `uo.options.spawners` an empty dropdown and
|
||||
// every Phase 12b object-property lease unauthorable, with nothing on the
|
||||
// form to say why. Found by the Phase 16b walk against a released bundle.
|
||||
uniqueId: point.uniqueId,
|
||||
facet: point.facet,
|
||||
x: point.x,
|
||||
y: point.y,
|
||||
|
||||
Reference in New Issue
Block a user