pipelines/FORKC_TRANSITIONS_BRIEF_2026-07-27.md
The challenge (Josh, 2026-07-27): *"why does it need a map change cover instead of a playable
loading transition?"*
Scope: the Flores→Bali→Sumatra seams + the CH_05 four-map belt. Synthesis of three analyses
(engine reality · design precedent · canon travel), after an independent adversarial pass over every
load-bearing claim. Per the standing decision protocol: options, deep-dive, adversarial, a
RECOMMENDATION, the strongest objection, and a falsifiable re-open trigger.
---
I re-derived every claim the recommendation rests on. Claims confirmed by my own read are marked
[V] with the line I read; claims I corrected or downgraded are called out in full.
| claim | verified at | |||||
|---|---|---|---|---|---|---|
PresentTravelCard() is a UE_LOG and nothing else — there is no cover today | HumanityQuestSliceDriver.cpp L354-365, read in full [V] | |||||
| Zero loading-screen / streaming / seamless-travel code in the project | `grep -riE "loadingscreen\ | streamlevel\ | seamlesstravel\ | movieplayer\ | LoadPackageAsync\ | LoadLevelInstance" Source/ Config/ → 0; positive control OpenLevel` → 28 [V] |
TransitionMap unset; only EditorStartupMap / GameDefaultMap set | Config/DefaultEngine.ini L3-7 [V] | |||||
| Only two cross-map seams: CH_03→04, CH_04→05 | IsCrossMapSeam L66-70 [V] | |||||
| The CH_05 four-map belt is not seamed at all | code comment L51-53: *"a further seam layer, not this pass"* [V] | |||||
| UE 5.8 primitives exist | World.h:4243 SeamlessTravel, :4246 IsInSeamlessTravel, :4254 SetSeamlessTravelMidpointPause [V] | |||||
| FACT 1 — destination loads async while the transition world ticks | World.cpp:8492 LoadPackageAsync [V] | |||||
| FACT 2 — source → transition → destination; the two big maps are never co-resident | World.cpp:8338 bSwitchedToDefaultMap=true → :8347 StartLoadingDestination(), guarded :8508 [V] | |||||
FACT 3 — the mechanism ships with zero content: an empty TransitionMap makes a dummy world | World.cpp:8367-8370 if (TransitionMap.IsEmpty()) … CreateWorld(...) [V] | |||||
| Midpoint pause is the hold lever on slow storage | World.cpp:8440-8450 gates StartLoadingDestination [V] | |||||
UHumanityStatusSubsystem : UWorldSubsystem — dies every map change | header L49 [V] | |||||
UWorldStateSubsystem : UGameInstanceSubsystem — survives | header L27 [V] | |||||
| Region maps are monolithic, not World Partition | grep -ac WorldPartition: Flores 0, Angkor 0; positive control LiangBua (retired smoke map) 3; __ExternalActors__/Maps/ holds only LiangBua [V] | |||||
| Map sizes | Angkor 377,431,173 B, Flores 80.7 MB, Bali 28.1 MB, Samosir 225 KB, Palembang 192 KB [V] | |||||
| Angkor load times | measured 10.84 / 20.02 / 20.58 / 24.09 / 31.35 s — median 20.58 s; Flores 3.06-15.26 s [V] |
| claim | verified at |
|---|---|
CH04_B12 casts the player as crew, not cargo | build/spine_rows/CH_04/beats.csv — role=exit, mode=traversal, site=uluwatu_seacliff_temple, actors=protagonist;CHAR_0029, player_objective="Wayan Dwija's boat goes west on the turning tide, and he will take a passenger who can hold a rope." [V] |
kra_traverse is a site with a dialogue function | CH_05/sites.csv: coastal,traversal;dialogue,low,baseline,none,false,"the Kra crossing, where the cargo walks" [V] |
| 78 authored seams | grep -h "^- Passage\." docs/spine/transitions/*.md → 78 across 8 files (79 nodes = 78 seams; coherent) [V] |
chapter_bridging_cinematic — DT-3's designated home does not exist as data | positive control PASSED: 11 real scene_type values arc-wide (per_chapter_cutscene 203, boss_encounter_resolution 91, canonical_set_piece 36, ambient_cinematic 21 …); chapter_bridging_cinematic is not among them [V] |
| Player owns no watercraft at Ch 3-5 | T0_Vehicle_Registry [DRAFT v0.1]: 3 rows; VH_002 Coastal Skiff acquisition_chapter_id=CH_08; VH_003 Caravel CH_33 [V] |
| Walked geography | WGM L993 *"walking, riding, river and coastal sailing"* [V] |
| The Ch-55 transformation | WGM L985 *"no longer constrained to walking or sailing"*; L764 free travel [V] |
| Watercraft is post-79 | DOMAINS_VEHICLES… L1/L3 *"capture now, heavy-build after all 79 chapters are built"*; §7 C5 *"Confirmed."* [V] |
| Presentation doctrine never ruled | DESIGN_GAP_REGISTER.md #29 [V] |
| Fork A ruled continuity-by-default | commit 0812633 [V] |
| FLAG — CH_05 arrival mismatch is REAL | MapForChapter("CH_05")="/Game/Maps/SamosirToba" (comment: *"the CH_05 ARRIVAL map"*), but CH05_B01 seq 1 site = borobudur; samosir_highlands is CH05_B05, seq 5. The seam lands the player at the chapter's fifth site. [V] |
The design analyst's "World Partition is configured in DefaultEngine.ini L80-81" is FALSE.
Those lines are:
[/Script/WorldPartitionEditor.WorldPartitionEditorSettings] CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet'
That is UE boilerplate present in every project — it names the *conversion commandlet class*, it does
not enable World Partition on anything. Verified against the packages themselves: Flores and Angkor
have zero WorldPartition hits; only the retired LiangBua_TerrainSmoke smoke map is WP. The
engine analyst's read is correct and the design analyst's caveat built on it ("T0/T1 continuity may
require a topology change") rests on a false premise — though its *conclusion* survives for a
different and true reason: the regions are separate .umaps.
Consequence for the brief: World Partition is not a live variable in this fork. It is a
worthwhile, separately-justified optimisation of each region map (it is the actual fix for Angkor's
20.58 s), but it does not remove a single seam and must not be costed as if it did.
The canon analyst cites PRESENTATION_DOCTRINE §4.1 / §4.2 / DT-1…DT-5 as though binding. It is
docs/proposals/PRESENTATION_DOCTRINE.md, header: *"Tier: PROPOSAL … nothing here enters a build pack
until Josh rules the three forks in §0"*, authored 2026-07-27 — i.e. **the very document that
raised Fork C.** Its §0.C is titled *"FORK C — the loading screen's standing"* and carries the
ESCALATED — Josh, 2026-07-27 note quoting this exact challenge.
So "the doctrine's own taxonomy already names the answer" is **not corroboration — it is the
proposal restating itself.** I have downgraded every doctrine citation to *"the proposal anticipated
this"* and re-grounded the argument on the independent authorities, which do hold on their own:
CVD Layer 1.5, WGM §10/§11, beats.csv, sites.csv, HL_0043/HL_0044, T0_Vehicle_Registry.
The canon case survives this downgrade intact — it never needed the doctrine.
The engine analyst is right that neither savegame persists player state and that today every
cross-map seam silently resets health, vril, cooldowns, status effects, the gather ledger, and
position — invisible under a cover, on screen under a playable transition. Confirmed:
WorldStateSaveGame holds only TMap<FGameplayTag, FWorldStateValue> State + SaveVersion [V].
But the cost estimate should be split, because the two halves are an order of magnitude apart:
State is a *generic tag map*. Persisting health/vril across a seam needsnew tags, not a new savegame class, not a schema change, not an FK. This is hours, not days.
subsystems (UHumanityStatusSubsystem, UHumanityGatherLedger, UHumanityAudioSubsystem) must be
promoted or handed over, and the pawn + ASC must ride the keep-list. That is genuine engineering.
Stating it as one undifferentiated block overstates the barrier. It is **one real item and one easy
item**, and we owe both anyway the first time a player dies and respawns across a boundary.
The design analyst's seam-class split (26 water / 19 Vimana / 8 dimensional / 9 within-realm / 10 land
/ 6 other). The denominator is confirmed (78 [V]); the per-class counts are their
classification and I did not re-derive them. Since the "3 rigs cover 78 seams" affordability claim
rests on this split, it must be **mechanically re-derived from the - Passage. lines before it
becomes a budget number.** It is cheap to do (scriptable, zero-token) and it is listed in §5 as a
prerequisite, not an assumption.
---
It was never designed. It is a plan-item default plus a stub, and no one ever ruled it.
Three things happened, in this order, and none of them was a design decision:
1. PRE_5090_BUILD_PLAN_VOL2.md U11.26 was written as *"Loading / level-streaming /
transition-screen UX — loading screen + hitch-masking across the Flores→Bali→Sumatra map
changes."* That is the engine-default framing of a map change: a map change needs a loading
screen. It was authored as an infrastructure item, not a presentation ruling.
2. PG-2 needed the seam not to be silent, so it shipped the cheapest possible placeholder —
PresentTravelCard(), a single UE_LOG [V] — whose own comment defers the real thing to
another workstream and explicitly leaves the seam *"for a later capture/scene layer to hang off."*
3. The presentation doctrine did not exist until today. DESIGN_GAP_REGISTER #29 records it as a
DOC-STUB, *"never ruled — named a Josh gap twice"* [V].
So the honest answer to "why does it need a cover" is: it doesn't, and nothing ever said it did.
Josh is not challenging a shipped decision — he is asking the question at the only moment it is free.
Sunk cost is exactly zero. Nothing is thrown away by choosing the playable transition.
The doctrine's §4 already makes the diegetic cover the default and the screen the fallback, and
its strongest listed cover class is *"THE CROSSING — a passage the player is genuinely making — the
ship's deck, the river boat, the mountain pass … loopable by construction."*
That is a playable transition. The word "cover" is doing damage: Josh reads it as *screen*, the
doctrine means it as *anything diegetic that can hold*. Two consequences:
object at these seams.
BUILD-NOW plan item — really does say "loading screen," and that isthe screen-first framing Josh is right to challenge. The plan item and the doctrine had already
drifted apart; the challenge catches the drift.
Recommendation carried into §5: retire the word "cover" for the diegetic tiers. Call them
TRAVERSALS; reserve "cover" for the screen. Naming the fallback and the default with the same word is
how a team ships the fallback.
Mostly no — with one real residual.
What does not survive:
architecture. UWorld::SeamlessTravel goes source → tiny transition → destination
(World.cpp:8338/8347/8508 [V]), so the two big maps are never co-resident. Peak memory ≈
max(region map) + vessel — essentially the same peak OpenLevel already pays today. The
double-occupancy cost belongs to level-instance streaming, which we would not use. The floor
objection dies against the path we would actually take.
mechanism lands with an empty TransitionMap and a dummy world [V] — art decouples completely
from plumbing.
CH04_B12, a typed traversal beat with the captain as an actor [V]), the route (CH05_B07), the landfall
(CH05_B01), and one leg as a site with a dialogue function (kra_traverse [V]). Only the
open-water *middle* is blank.
constrained to walking or sailing"* **one of three structural transformations in the entire
79-node arc, gated to Ch 55 [V]**. A cover at the Ch 3→4 seam hands the player the *felt
experience of instant arrival* in the tutorial band — spending the arc's second-biggest structural
payoff 52 chapters early.
What does survive — the residual, and it is real:
Angkor's measured median is 20.58 s, on uncooked, empty greybox, on NVMe, single-threaded
(the editor runs Async Loading Thread: false), on a monolithic non-WP 377 MB map [V]. On a
Steam Deck's eMMC, content-complete, that is worse before it is better. **No traversal design holds a
player's attention indefinitely, and a cover that ends before the stream completes must yield to
something.** A fallback screen must exist. The doctrine's own Option 3 ("no screen at all") is
correctly rejected as unsurvivable.
Net: the *default* should invert — playable first, screen as the yield-target. The screen does not
disappear; it stops being the design.
---
Costed on four axes: engine cost · content cost per the 77-chapter factory (the number that
actually decides this — 78 seams, not 3) · canon fit · Fork-A continuity fit.
OpenLevel + a loading screen at every region boundary.
MoviePlayer, hook PreLoadMap/PostLoadMapWithWorld, one widget. Cheapest on the board. Nothing new breaks: ws.* already carries [V].
This is its only real strength, and it is a genuine one.
spends the WGM §10 Ch-55 transformation early; strands the seams' authored content (Shell's first
water leg, Kira riding the passage) with nowhere to live, because DT-3 forbids the cover from
carrying seam meaning and its designated home chapter_bridging_cinematic **has zero rows
arc-wide [V]; and it is the only** form that occupies four HL_0043/HL_0044 surfaces at once
(UI + narration + art direction + score). The sharpest concrete hazard: a water/falling-water motif
on the Bali→Sumatra card would pre-frame the Borobudur waterfall cue that CH05_B01 plants as
pure sensation one beat later, payoff Ch 76-77.
maximal discontinuity, applied at the arc's 78 most geographically meaningful moments.
Play a short departure (walk to the quay, board, the last look back) and a short arrival (up the beach
into the new region). The voyage middle elides.
screen, Josh's challenge is only half-answered. If it is seamless travel, this is Option 3's
mechanism with less content.
Departure. and an Arrival. line; a quayis a site, not a rig. Reuses region geometry already owed.
leaves the middle blank — a rung-2 card over *the middle only*, lifting its line from the exit
beat's existing player_objective, is a truthful presentation of something canon deliberately
declined to write. Zero new authorial voice — which satisfies the Natural Voice Doctrine by reuse.
asset is not yet built. It is also the correct *frame* around every richer tier.
UWorld::SeamlessTravel + a TransitionMap; the player keeps full character control on a moving deck
while the destination streams.
work (cheap serialization + real live handover), plus three named integration items:
TryRestorePendingSeam() runs from OnWorldBeginPlay, and the driver is a UTickableWorldSubsystem — under seamless travel it fires on the transition world
and would consume the pending seam in the vessel, leaving the destination with nothing. Gate on
map identity or move consumption to PostSeamlessTravel.
OnWorldBeginPlay too — same failure, and the precedent forgetting this wrong is BUG-0017 (a capture-drive state-blindness class caught by a **director frame
re-read**, not by tests that were green 27/0).
CrossMapSeam test defers the OpenLevel entirely.
not affordable and should not be attempted. The affordability argument depends entirely on
amortisation by seam class — and that split is currently unverified (§0.6).
(VH_002 is CH_08 [V]) and has no navigation trade, so canon casts the player as **crew on an
NPC's boat** — *"a passenger who can hold a rope"* [V]. What that requires is a **walkable deck,
a captain (CHAR_0029, already rowed), a familiar, and a horizon.** No ocean sim, no buoyancy, no
steering, no naval combat. It is reveal-safe *by construction*: with no narrator, it can only show
what a nine-year-old on a boat can see.
to solve the slice's two seams inverts his own sequencing.
the wrong unit.
Build Option 3's mechanism once, universally. Then type each of the 78 seams into one of four
treatments, in the transitions doc the seam already lives in. The player never sees a screen except
as a yield-target.
| tier | treatment | applies to | asset cost |
|---|---|---|---|
| T0 — CONTINUOUS | no transition; keep walking | same-map seams; the Ch 70-77 within-realm seams (canon: *"no spatial move"*) | zero |
| T1 — THRESHOLD | a walked connector hiding the stream; companion talks | canon's beat-free traversal connectors (kra_traverse, passes, defiles); short hops via Option-2 bookends | one corridor kit, re-skinned |
| T2 — CONVEYANCE (on-rails deck) | full character control on a moving platform; the craft drives itself | the water seams (Ship) + the Vimana seams (a required build anyway) | one rig, few skins |
| T3 — RITUAL ELISION | play the departure, the middle elides to the journal, play the arrival | multi-month legs; any destination exceeding the stream budget (Angkor) | the journal screen |
78 existing entries, script-emitted from the - Passage. lines — zero-token) plus *optional*
dressing. T0 costs nothing. This is the only shape that is honest at 78.
tails and authored routes; elide only the middles canon left blank).
justified exception** rather than a silent engine default.
follows a spline. The player walks the deck, talks to the captain, watches the coast — **and cannot
steer.** None of the post-79 Watercraft scope (build/repair ladder, navigation technique, naval
combat, ocean sim, module registry) is touched. **Josh's deferral is honoured; the deferred asset is
pre-earned** — when the real Watercraft lands post-79, the deck rig becomes its interior. That is
the engine-as-reuse-machine posture, not a duplication.
---
The slice has three seams (NextChapterFor: CH_02→03→04→05 [V]), and they are not the same
problem. Treating them identically is how this gets over-built.
| seam | what it is today | what it should do | why |
|---|---|---|---|
| CH_02 → CH_03 | same-map quest reload on FloresIsland; not a cross-map seam [V] | T0 — CONTINUOUS. Nothing. No card, no screen, no travel. | It is already continuous. Any presentation here is invented discontinuity, and Fork A forbids it. This one is free and should be claimed immediately. |
| CH_03 → CH_04 (Flores→Bali) | real OpenLevel; Bali median 3.18 s, Flores 5.91 s [V] | T2 — the walkable deck. The prototype. | The measured load is short enough that a deck loop comfortably covers it. Canon names it *"the range's first water leg"* and stages Shell's first passage as a chosen bond — content a card cannot render. Constraint: concealment pressure is HIGH here; the child stays hooded — which is the seam's own tension, free. |
| CH_04 → CH_05 (Bali→Sumatra) | real OpenLevel to SamosirToba [V] | T2 — the captained voyage, and fix the arrival first. | Canon already wrote the boarding as a typed traversal beat with the captain as an actor and the player as crew. BLOCKER: the seam lands on SamosirToba, but CH05_B01 seq 1 is borobudur; Samosir is beat 5 [V]. We are currently teleporting the player into the middle of the chapter. Reveal hard-constraint: no water / falling-water imagery on this transition — CH05_B01 plants the Borobudur waterfall cue as pure sensation one beat later (HL_0043, payoff Ch 76-77). |
The CH_05 four-map belt is a fourth, unbuilt layer, not a slice seam — the driver says so
[V]. It is also the best prototype ground in the project: three of its four maps are tiny
(Samosir/Palembang are 128×128 stubs, ~1.7 s loads), nothing is being replaced, and it yields two seam
classes at once (riverine + the already-canon kra_traverse portage). **Angkor — 377 MB, 20.58 s
median — is the stress case to validate against LAST, and it is the one seam in the slice that should
be typed T3 from the start.** Note the belt's canon route also doubles back (local.doubled_back),
so the staged linear samosir→palembang→borobudur→angkor order is itself wrong.
THE FACTORY RULE (what generalises to the other 75 seams):
Continuity is the default; a screen is a yield-target, never a destination. Every seam is typed
T0-T3 in its transitions entry. T0 is free and is the presumption — a seam must *earn* a
treatment by being a real journey in canon. Where canon authored the leg, it is played; where canon
left the middle blank, the middle elides; the screen appears only when the stream outruns the
traversal, and when it does it lifts its line from the exit beat's existing player_objective
rather than composing new narration. No seam is ever authored per-seam in engine — the mechanism
is universal and the tier is an assignment.
---
**Adopt Option 4 (TIERED TRAVERSAL), built on Option 3's engine-native mechanism
(UWorld::SeamlessTravel+TransitionMap), with the screen retained as a genuine, quality-built
fallback.**
Josh's challenge is correct, and it is cheaper than it sounds — because the expensive thing he
is assumed to be asking for (two big maps resident at once) is *not* what the engine-native path
does, and the expensive content (per-seam authored voyages) is *not* what the factory rule asks for.
Ship order: (1) the mechanism with an empty TransitionMap — it works with a dummy world
[V], so plumbing lands before any art; (2) CH_02→03 as T0 immediately (free); (3) the
CH_05 belt as the T1/T2 prototype (small maps, nothing to replace); (4) the two slice water
seams as T2; (5) Angkor as the T3 stress case, validated last.
Why this and not the others: Option 1 is the right fallback but contradicts Fork A at 78 points
and strands authored content that has no other home (DT-3's carrier has zero rows [V]).
Option 2 is a tier, not an architecture. Option 3 is the right mechanism with the wrong content unit.
Option 4 is the only shape whose per-seam marginal cost is an assignment rather than a build,
which is the only property that survives the 77-chapter factory.
**"You are building a vehicle to solve a loading problem, and Josh ruled Watercraft is post-79 — and
you are doing it before the P0 benchmark harness exists to measure any of it."**
This is the objection with real force, and it has two teeth. Answer to the first: the on-rails
deck is a *transition space* that shares the Watercraft's geometry, not the Watercraft *system*; none
of the excluded scope is touched, and the deferred asset is pre-earned rather than duplicated.
The second tooth I cannot fully answer, and it should shape the ruling: every performance
statement in this brief is an editor number on uncooked, empty greybox — no cooked build has ever
been produced (Saved/Cooked and Saved/StagedBuilds are both absent), and the Deck floor is
*declared, not ratified*. This is why the recommendation is sequenced mechanism-first, art-last:
the plumbing is defensible on architecture alone (FACT 2 makes it memory-neutral [V]), while every
content commitment beyond the prototype waits for the first cook.
A second, honest objection: the ME1-elevator failure case. A traversal that carries no
relationship is *worse* than an honest load screen. Our seams already carry authored relationship
content — but that content is currently prose in the transitions doc, not rows in beats.csv. If the
tiering lands without moving that content into beats, we build the elevator and not the boat.
Re-open Fork C toward Option 1 (screen-first) if any of these is measured true:
1. After the first cooked build, a T2 deck cannot hold 60 fps at the steam_deck_minimum budget
*while streaming* the destination — i.e. the traversal cannot coexist with the load it is hiding.
2. **The tier split, once mechanically re-derived (§0.6), shows fewer than ~60 of the 78 seams landing
in T0/T1** — i.e. amortisation fails and the "few rigs" premise was wrong.
3. The T2 moving-platform character-attachment spike fails or needs a bespoke movement mode per
craft — i.e. the deck is a system, not a space.
4. Conversely, re-open toward a first-class reading surface (the doctrine's Option 2) if the
post-cook streaming profile shows the fallback firing routinely on target hardware — at which
point "pure fallback" is a fiction and the screen deserves real design.
Each is measurable, each has an owner, and each would change the ruling rather than merely annoy it.
---
Free / zero-token, do regardless of the ruling:
pip install psutil + re-run Tools/run_soak.py. The collector is already wired; memory is currently n/a across all 21 soak runs. Converts every memory claim in this fork from reasoning to
measurement. *(Caveat: the dev box reports 15.6 GB physical with ~1.5 GB free — it is the wrong
instrument for a floor measurement, but right for leak detection.)*
HumanityQuestAutomationTests.cpp:1264 claiming the travel crosses*"World-Partition maps."* It is false [V] and will mislead a later agent.
- Passage. lines (§0.6). This is theaffordability number; it must not stay an estimate.
MapForChapter("CH_05") should land on the chapter's first site(Borobudur), not its fifth [V]. This is a canon-fidelity defect independent of the fork.
The mechanism (build once — the real engineering):
bUseSeamlessTravel on the GameMode; TransitionMap left empty initially (dummy world [V]).OpenLevel at HumanityQuestSliceDriver.cpp:402 for ServerTravel.GetSeamlessTravelActorList on GameMode + PlayerController to carry the pawn (with itsASC), companions, and camera. This is what the keep-list is *for*.
SetSeamlessTravelMidpointPause(true) as the hold-on-slow-storage lever; release on the async-loadcallback. Design every traversal as a loop with an exit cue, never a fixed-length cutscene — that
turns slow storage into a pacing variable instead of a failure.
TryRestorePendingSeam transition-world bug *before* it ships.IsInSeamlessTravel(); add an await_arrival station). BUG-0017 is the precedent for what happens when the capture drive is blind
to state.
OpenLevelentirely, so the actual travel has zero automated coverage under any option.
State carry (split per §0.5):
ws.* tags for health/vril/status/position. Generic tag map; no schema change.UHumanityStatusSubsystem, UHumanityGatherLedger, UHumanityAudioSubsystem; carry pawn + ASC on the keep-list.
green 21/21 proves nothing about any transition, and seamless travel's world-teardown-with-
survivors is a classic leak site.
Spikes to run before committing content (each small, none needs a 5090):
1. Moving-platform character attachment — the single technical gate on T2. Two known approaches;
one spike settles it. Do this first.
2. Save on a conveyance — mitigated by canon, not engineering: **conveyances are non-save zones;
the vril-site sanctum on either side is the save anchor**, which is what canon already says the well
is for. Clean constraint, zero invention.
3. Streaming budget — proposed rule for the perf register: a traversal space is budgeted at
~30% of a normal play space's render cost, because the other 70% is the stream.
Content (the factory work, deliberately last):
beats.csv —this is the anti-ME1 requirement and the highest-value content item in the fork.
T0_Vehicle_Registry has 3 rows and the earliest watercraft is CH_08 [V] — there is no vessel row for the Flores→Bali crossing. A canon-author item,
landing inside window-plan rank 21.
House-of-Velheim antagonist-agent term. Use Watercraft (system) / Ship (player-facing).
line lifted from the exit beat's player_objective — never composed, never a tips rail, never
mode taxonomy. Josh's own instinct for a richer surface is better served by the journal (live
from Ch 13, already a plot object, W10 already ships book screens) than by a loading screen.
The reveal contract, binding on every tier at these seams. MAY show: the boat, the captain, the
water, the coast, the weather, Shell in the water, Kira on the air, the hooded child, the crew, the
port. MAY NOT: name or pattern the family; narrate a thesis; carry Grand-Sage-adjacent art direction
or score; use falling-water imagery immediately before CH05_B01; render substrate/vril
perception; draw a route on an unwalked map; state elapsed time or age; expose the protagonist's
features at HIGH concealment pressure; hint the Child Familiar; carry mode taxonomy.
Where the ruling lands: docs/proposals/PRESENTATION_DOCTRINE.md §4 + §0.C (Fork C), with the
tier taxonomy added to docs/TRANSITION_TREATMENT.md as Layer 2b, and U11.26 rewritten from
"loading screen + hitch-masking" to the mechanism + tiering. **This should be ruled before CN5.2
bakes camera blocking into 11 templates** — because the tier a seam gets determines whether its
template needs an arrival camera at all.
---
Independently verified this pass ([V] above): HumanityQuestSliceDriver.cpp L40-75, L340-410;
HumanityStatusSubsystem.h L49; WorldStateSubsystem.h L27; WorldStateSaveGame.h L22-27;
Config/DefaultEngine.ini L3-7, L80-81; Content/Maps/*.umap sizes + WorldPartition scan;
Saved/QA/capture_run*.log load times; UE 5.8 World.h L4243/4246/4254 and World.cpp
L8322-8521; build/spine_rows/CH_04/beats.csv, CH_05/{beats,sites,scenes}.csv, arc-wide
scene_type tally; docs/spine/transitions/*.md (78 - Passage. lines);
registries/T0_Vehicle_Registry [DRAFT v0.1]/Sheet1.csv; T1_World_Geography_Master [ACTIVE v2.3]
L764/985/993; docs/proposals/PRESENTATION_DOCTRINE.md (tier header, §0.C, §4.2, DT-1…DT-6);
docs/proposals/DOMAINS_VEHICLES_AND_ENRICHMENT_BACKLOG.md L1/L3/§7; docs/DESIGN_GAP_REGISTER.md
#29; commit 0812633.
Synthesized from: forkc_engine_reality.md, forkc_design_precedent.md, forkc_canon_travel.md.
Corrections applied to the analysts' claims are recorded in §0.3 (a DefaultEngine.ini claim that
died), §0.4 (a circular doctrine citation, downgraded), §0.5 (a cost estimate split), and §0.6 (an
unverified count flagged as a prerequisite rather than an assumption). AAA precedent claims are
general shipped-title design knowledge, stated factually, not quoted.