PAGE_PIPELINE_REVIEW_2026-07-20.md

pipelines/PAGE_PIPELINE_REVIEW_2026-07-20.md

Region-Page → Pipeline Build-Readiness Review — 2026-07-20

Synthesis of the eight-lane adversarial pass over the four ratified region pages (flores_island,

bali, sumatra_java, angkor_khmer) against the six ACTIVE Translation Docs (Terrain, AssetGen, Audio,

Cinematic, UE5_Build, Combat) and the region-page gate (harness/check_region_page.py). Question

answered per lane: can an unattended build consume the pages as they stand today?

Scope note: this is an operational readiness review, not canon. Every APPLY-NOW item below re-keys or

reconciles facts already on the page or in a Translation Doc; none mints chapter, numerical, naming,

hard-line, or system canon. The three genuinely-Josh calls are collected in the last section.

1. Verdict per pipeline lane

The headline: all four pages pass the gate green and each one is unbuildable unattended by every lane.

The gate validates structure and foreign keys only (header, region_id, chapter_set, section roster,

stale vocabulary, use_class, BE/LINK/CHAR FKs, orphan sources, the zone→§3b consumption boundary) and

inspects none of the build parameters the Translation Docs consume — so machine-emptiness is invisible

to CI. This is verified against the gate source, not the docstring alone.

page must carry a machine-readable PARAMETERS BLOCK (region_bbox, meters_per_vertex, target_footprint,

alteration_list, dem_source_used, water_plane, era_modifications, gaea_pass) "for Steps 1-8 to run

unattended." All four Section 1 bodies are prose; none of these fields exists. Compounding, §1 of the

doc says area_bounds is "a polygon vertex array or center_plus_radius in WGS84 lat/lon," but every

Zone Catalog authors area_bounds as "first-pass design sizings (meters, local ENU origin at the region

center)" — a size with no world position, so the region_bbox union the DOWNLOAD step needs is not

computable. Verified BLOCKER.

its closest analog … resolve per-asset at build time," and §4.1 requires a morphology value to compose

the prompt. The staged materialized-argument bosses (flores BE_0002_S2 the Polo, BE_0003_S3 Tombo

Holes; bali BE_0004; angkor's roused ward-constructs) have no analog and no morphology anywhere on the

page. Verified BLOCKER. Real cultural architecture routing is additionally un-machine-gated (see 3-N).

is prose, so the §2.7 clone/canonical-track routing under-routes the page-ruled ELEVATED Cham surfaces;

and the angkor Section-10 crowd-line actively mis-routes the living Cham ritual/pilgrimage voice to the

bulk local-no-clone lane, contradicting the page's own ELEVATED ruling.

beat_ref/scene_type/path_bucket/anchor_type/participant_refs) rather than the full column shape

sumatra_java and angkor_khmer exemplify; boss-phase beats have no matching scene rows; named

folkloric-being participants have no Creature_Roster id to resolve.

zone_ref, quest_type, or questline binding; bali's "pande forge" seed points at a zone that does not

exist in bali's Zone Catalog. Section-12 personas are deferred to the build pass.

with no georeference); terrain is a required_zone_type enum (sacred_site, water_body) not a physical

biome, so PCG Biome Core and the auto-material have no vegetation class to key on; MetaHuman Step 7 has

no persona/appearance parametrics; sumatra_java and angkor_khmer are geographically non-contiguous and

break the one-umap-per-region assumption.

launch-posture scalpel; no page-side environment-grammar (EG_ ids, D-verbs, alteration_permanence) for

the "environment as a combat surface" pillar.

A caution on the Terrain evidence base

Several Terrain findings anchored their evidence on a committed tool, terrain_fetch_preprocess.py, with

cited line numbers and a "proven Liang Bua run." That tool is not present in the repository (a full

content search returns only docs and pages, no such Python file). The Terrain BLOCKERs do not depend on

it — they are re-anchored above on the Translation Doc §3 mandate, the pages' own area_bounds header

text, and the verified gate source, all of which are decisive on their own. But the "proven run" and the

provenance round-trip enhancement (5-A) presuppose a tool that has not landed; treat that narrative as

aspirational until the tool is committed.

2. APPLY-NOW — the set the director executes tonight

Inline-edit effort, evidence-decisive, do-not-invent-safe. Each was verified against the live file.

STATUS (2026-07-20, director-approved delegated call): all 7 APPLY-NOW items below are APPLIED via

the apply-agent, together with enhancement adopts AF, BH, and I (see Section 4). The region-page gate

stays green after the pass — python harness/check_region_page.py --self-test = PASS, 4/4 pages,

exit 0. BI and BJ are APPROVED-NEXT-SESSION (harness/gate work); the DEFERs (AR, BF, BG, and W held

until 3-L) stand with their kill-tests unchanged; the three genuinely-Josh calls in Section 5 stand

open. No commit was made by the apply pass.

paragraph sits inside the table body, between the manggarai_village_edge row and the wae_rebo_village

row (lines 52 → 54 → 55), with the table resuming headerless below it. A markdown/DataTable extractor

terminates the table at the prose and silently drops the six CH_03 zones beneath it — including the

P1 hub wae_rebo_village and the P1 boss site todo_royal_village. Move the paragraph to immediately

after the final table row, matching the sumatra_java and angkor_khmer placement. Pure formatting move,

zero content change. Highest-value item tonight.

each carry the standalone "never sampled from consecrated performance" sentence; the flores pilot,

which scores the living sacred caci contest, carries only "the gong-waning ensemble at reference

register." Add the guardrail sentence to close the pilot-predates-guardrail gap.

which AssetGen §2 explicitly excludes from the Vril-Sites mesh backend and routes to terrain; the

"Vril sites" label can misroute them to the generative backend. Add a half-line stating both route to

terrain and the Vril-Sites generative category is empty for the region. The Zone Catalog terrain=water_body

already disambiguates, so this is clarity, not a correctness rescue.

gong-waning substrate as thin/deep-research-gap, but the audio lane reads Section 10, which does not

carry the flag. Echo the one-line confidence flag into Section 10 so the batch audit sees that the

music brief rests on thin substrate. Echoes an existing flag; mints nothing.

the named cast," but Section 12 authors the entire excursion cast un-named at spine scope, so Step 7

finds zero named targets. Reword Section 17 to "for any principals promoted at the quest layer;

background factions and the un-named hosts use the Crowd/modular actor path," matching Section 12.

pilgrimage/ritual crowd voice to the agent-only local no-clone lane, contradicting the page's own RULED

ELEVATED scope for myson_champa and the Po Nagar pilgrimage. Edit the sentence to exempt the Cham

ritual/pilgrimage ambient and route it to the canonical-track cultural-authenticity review per §2.3/§2.7.

Aligns the page to its own 2026-07-20 ruling.

reading "costume substrate + Section 8"). The template's Section 8 is Politics; dress and costume live

in Section 4 (the same doc's voice step already reads Section 4 for dress at its line 486 — an internal

inconsistency). Correct the foley pointer's "Section 8" to "Section 4." Doc-side, decisive.

3. NEXT-PASS — rides each page's pass-2 or the template

Grouped by root cause after de-duplication (the eight lanes independently surfaced many of these; the

count reflects distinct fixes, not distinct findings).

Terrain / world-chain

georeferenced anchor (real lat/lon) plus a separate meter footprint field, so region_bbox, the carve

polygons (Step 4), and the weightmap alignment (Step 8) all have a world position. Derived from the

real site coordinates the headers already list plus a chosen AOI radius.

omits it today, so a page author following the doc would never add it), or auto-derive UTM from the

bbox centroid inside the tool; cross-zone regions still need the per-AOI value.

replacing the prose hedge, and reconcile the doc's "ONE mpv per region" model with the pages'

per-hero-site tightening (single value, or documented multi-run-then-stitch).

tile-layout) rather than one region scalar for the multi-site regions (sumatra_java two hemispheres and

three UTM zones; angkor_khmer two countries), and add a documented World-Partition stitch step; amend

Terrain Step 3/4 wording to "one umap per region, N disjoint sub-region landscape tiles." Resolve the

sumatra_java "Toba caldera ~100 km" vs Zone Catalog "caldera-rim ~2.5 km" AOI ambiguity by pinning the

DEM extent per AOI.

2.0 m/vertex — past the 43,351 px import-file ceiling on both axes) to the CH_04 site clusters as the

three sibling pages do, or declare a coarse island-base mpv plus tight hero-site AOIs, and state the

tile count. Intertwined with the mpv value, so it rides pass-2 rather than tonight.

operation, feather_radius_m), water_plane (a real lake/reservoir/moat surface elevation — Lake Toba,

the West Baray, the ~190 m Angkor moat, Kelimutu crater lakes, Tirta Empul; a derived fact), and the

structured era_modifications keyed to the present-frame era. Specify that Step 6 Z-scale must add

headroom for any carve that raises geometry above the real DEM max.

the Kedu paddy) where erosion synthesis adds little, pending the §5-item-2 Gaea CLI-tier confirmation.

fields: assert each AOI carries a well-formed bbox + utm_epsg + meters_per_vertex and flag a prose-only

Section 1 as a FAIL, so terrain-unbuildable pages go red instead of green.

AssetGen

(materialized-argument, shadow, proverb-construct), and until authored mark the row

asset_status: concept-pending so the lane skips it rather than inventing a look. The visual concept

itself is Josh/quest-layer (section 5).

from the spine) enumerating each buildable object by the seven-category taxonomy, keyed to zone_id —

re-keying facts already in area_bounds, Section 7, and Section 3 into a structured table.

each boss-index row, plus a metahuman_or_generative sub-flag for corrupted-human bosses (the

"hollowed"/"degraded" human question, e.g. flores Rangku Wera).

fantastical = generate-OK), derived from Section 7's own real-vs-fantastical sentences, and stop any

downstream use of the protected boolean as the generate gate (protected is a sacred-site axis, and real

heritage sits in protected:false zones such as angkor west_baray and flores wae_water_spring).

reference_source (owned-capture | licensed-kit | licensed-stock | none) in Section 7, so the §6

capture-rights gate can clear the UNESCO living-heritage hero sites (Wae Rebo mbaru niang, Angkor Wat,

Bayon, Ta Prohm, My Son). Where status is unknown it stands as an explicit build-blocking obligation.

Creature_Roster id and a one-line visual_substrate cite, or mark it asset_status: substrate-gated when

the grounding book is unacquired. The polo and naga tana are staged bosses with no CR_ id today (flores

rows only Ebu Gogo = CR_0010); this same missing-id gap blocks Cinematic participant resolution and

Quest speaker_ref.

era_variants list where a time-fluctuation window shows the object in another stratum (flores four

strata ~60 kya→1900s; sumatra_java Candi Sukuh reached only as a forward stratum).

batches on the RCM Ch-5 Khmer/Cham block landing in the queryable corpus (the page states no queryable

substrate exists yet — it grounds on four deep-research files), or promote those files into

book_substrate with region_tags so the §6 cultural-authenticity audit and the batch music audit have a

trail to trace.

(terrain/machine: ready | folklore-creatures: substrate-gated | real-architecture: capture-gated) plus

a machine-readable region_batch_ready boolean the §4.1 trigger reads — re-keying the Section-20 prose,

which today asserts "the machine layer is build-ready now" while substrate is gated.

count, collision type per Weapons/Creatures/VrilSites/Architecture) as required fields; where the UE5

Pipeline Contract §1.7 has not set numbers, mark them a hard upstream dependency blocking §4.3

finishing. The numbers themselves are a contract/performance-budget call (section 5).

or Creature_Roster id inline in Section 3 (Shell, Kira, the Sanur Octopus lack ids; Khan = CR_0024 is

rowed). Held to pass-2 rather than tonight because citing an id for a roster row that does not yet exist

would be inventing one — where the row is absent this is a flag, not an edit.

Audio

descriptor applies to this zone) and footfall_surface (the acoustic surface, derived from spine terrain

plus Section-1 geology). Region-level biome cannot resolve per-zone across cave/sacred/water/agricultural

zones, and the terrain enum is land-use, not surface-acoustic.

Catalog surfacing the existing angkor ruling, and surface it on the boss/entity rows; route the SFX and

music track_assignment and the Combat launch-posture scalpel from the field rather than a fixed

chapter list.

environmental audio," but every page's Section 17 is UE-build content with zero audio, and SFX Step 1

genuinely reads Sections 1/6/8 that the pointer omits. Either add an Environmental-Audio block to

Section 17 or relabel the pointer to Section 10, and extend the audio row to name Sections 1, 6, 8.

deferral a machine-checkable precondition rather than prose, or seed a minimal per-NPC voice-register

stub (gender/age_range/register) and per-NPC appearance range so the bulk voice lane and MetaHuman

Step 7 have a schema-bound input.

rows so SFX Step 4 can tell construct craft from creature vocalization; if these early folklore

constructs are intended standard-track, state that explicitly so the router does not over-escalate.

cultural-practitioner voice (the Manggarai dukun, the Balinese balian/pedanda, the Batak datu, the Cham

pilot), or a page-level note routing all Ch 2-5 practitioner voices to synthetic-only per §4.4.1, so the

clone gate routes them without human triage.

mood_tags, canonical-vs-region track) to bridge until T0_Theme_Registry lands.

Cinematic / Quest

standard — Scene index to the full column shape (scene_anchor_id | beat_ref | scene_type | path_bucket |

anchor_type | participant_refs), SQ index to questline·stage·gate·beats — a mechanical spine join, and

pin the exact column set in the template so all pages regenerate uniformly.

Boss index gets a matching §13 scene row, or boss cinematics are declared resolution-only by design),

then regenerate each Scene index to carry the mandated boss-phase rows.

questline_id, zone_ref/site_ref, and a realized_beat_ref or an explicit region-ambient marker), adding a

region-ambient Zone Catalog row where the seed names a location with none (bali's pande_forge). Types

what is already the page's own prose authority; per the pending CG-22 ruling.

(which also resolves the beat_ref-less anchor gap), or explicitly scope ambient cinematics out of the

Ch 2-5 slice so the pipeline does not block on an empty class.

and the Consumer Loading Patterns: union the Derived Indexes of every region page in a chapter's set

before Step 1 (CH_05 splits across sumatra_java and angkor_khmer). The pages already cross-reference

cleanly.

the SC_ slug as scene_anchor_id and derive scene_id = SCENE_<slug-tail>, or accept it as both).

UE5_Build / World Partition / PCG / Combat

plus a structured vegetation_classes list (from the Section-2 foliage prose) that the auto-material and

PCG Biome Core key on; leave terrain for required_zone_type/quest use.

priority_notes field; reconstruct the zone→boss-site role via the spine beat→site→zone join rather than

smuggling it into the enum column.

recoverable from chapter_set) or an explicit chapter:site pair grammar, and regenerate the four catalogs'

first column.

a set-piece/high-vril-trace flag distinct from the baseline→high magnitude ramp; document the

vril_density → creature-tier lookup in Terrain Step 6 and the Combat consistency check so it is not

guessed per region.

transcribed from the ritual terms already named in Section 17, feeding the LOCTABLE generator when the

Spike-10 String-Table mechanism lands.

T0_Environment_Grammar_Registry EG_ ids with D-verbs and alteration_permanence_default for

combat-flagged zones (angkor's flood-pulse-as-combatant, flores's geothermal-vent torch source,

sumatra's caldera endure-and-bind).

4. ENHANCEMENT decisions matrix — the director's approval call

Each carries a direction, a recommendation, and a kill-test that decides it cheaply.

EnhancementDirectionRecommendationKill-test
Provenance meta round-trip (I)Paste the terrain tool's emitted meta JSON (bbox/utm/mpv/z-scale) back into a Section-1 "recorded build output" subsectionAPPLIED (2026-07-20) on the corrected premise — the terrain_fetch_preprocess.py tool lives in the GAME repo (not this canon repo, which resolves the Section-1 caution) and produced a real Liang Bua smoke; its emitted meta (COP30, bbox, EPSG:32751, 30.0 m/vertex SMOKE, 371×372, elev 141.75–1187.07, Z-scale 204.164) is pasted into flores_island Section 1, mpv flagged SMOKE vs the Josh-ruled numberIf a committed tool emits <name>_terrain_meta.json, the round-trip is a one-line write-back; until then it is moot
mesh_tags stub per asset (W)Emit {region, era_tag, style, material, morphology} per Asset-Manifest entry at authoring timeADOPT once the Asset Manifest (3-L) exists — it makes prompt-composition deterministic and preserves the roused/baseline style nuance a build-time inferer would flattenBuild one asset's prompt from registry rows plus a style-rule table; if it matches the hand-stub with no loss of the roused nuance, the stub is redundant
Adaptive/fixed cue tag (AF)One-word {adaptivelooponeshot} tag per Section-10 AIVA cueAPPLIED (2026-07-20) — a {adaptive \loop \oneshot} tag added to every Section-10 cue on all four pages, derived from each cue's own prose behavior (rising/combat/trial/battle → adaptive; static bed/register → loop; two genuine fence cases tagged loop (class provisional))Infer adaptivity from prose verbs for one region; if it never mis-tags a fixed bed as adaptive, skip it
Per-scene audio-intent table (AR)Bind Section-10 register intent to scene_anchor_ids (audio_priority_layer, scene_audio_intent, mood_tags)DEFER — thematic_anchor half is blocked on T0_Theme_Registry regardless, and Step 4 can derive intent from the beatIf Step-4 beat-derived intent reads as well as the authored register, the table adds only cost
Per-zone sensory/mood board (BF)One art-direction table (palette, key-light, weather, signature ambient, signature vril tell, material accents) four lanes consumeDEFER until the terrain/asset benchmark days set the real palette — authoring it now risks over-specifyingBuild one zone through all four lanes from existing section reads; if the palette/light/ambient already agree, the shared board is redundant
Traversal-flow graph (BG)Zone-adjacency block (nodes = zones, edges = traversal type, entry/exit, gating)DEFER — the pages are 1-2-chapter waypoints, so the graph is small and largely derivableDerive World-Partition streaming order from the spine beat→site order for one region; if unambiguous, the explicit graph adds nothing
L1 fun-beats seed (BH)One "L1 fun beats" seed row per region (premise + which pending framework it feeds) without minting system canonAPPLIED (2026-07-20) as seed-only — one L1 fun-beat seed added to Section 13 of each page: flores caci whip-duel circuit (opt-in ER1-ladder rung), bali gamelan-rhythm/wayang-shadow performance minigame, sumatra_java Toba regatta/port market-run, angkor baray pirogue boat-race (Bon Om Touk as authorial-note-only, not in-world at 1200); each cites the page's own culture, marked non-gating and Josh-pending, invents no named canonFun-density read of one region's built loop from the existing Zone-Catalog gameplay_functions; if already fun-dense, the beats are gilding
Slice-coherence harness (BI)harness/slice_coherence.py emitting carried-familiar and LINK-reciprocation manifests across contiguous pagesADOPT · APPROVED-NEXT-SESSION (harness/gate work, not an inline-edit item) — cheap, reusable for every future multi-page slice, and catches carried-state/reciprocation drift the FK gates missBreak one LINK reciprocation and re-run; if an existing gate already reds, the artifact is redundant
Build-readiness scorecard hook (BJ)Per-pipeline readiness block per page in the SELF_IMPROVING schema (Terrain/UE5/Combat/Cinematic/Audio/AssetGen: readyblocked-on: field)ADOPT · APPROVED-NEXT-SESSION (harness/gate work, folds into 3-S) — it turns the honest Section-20 prose deferrals into machine-queryable readiness the director reads at a glanceExtend check_region_page.py to compute readiness from machine-field presence; if the gate can emit the matrix from field presence, the hand-authored block is redundant

5. Genuinely Josh-level — flag, do not decide

Expected to be few; three surfaced.

required before any region's real (non-slice) Step 3 resample; it drives every downstream terrain number

(Z-scale, tile count, cell count, erosion budget). The structure (the machine field per AOI) is the

director's to add; the number is Josh's, tied to traversal pacing. The pages' current 2.0 m/vertex is an

explicit first-pass placeholder, and the tool narrative used a different value (30, native COP30), so

this is unresolved, not implied.

Contract §1.7, itself deferred to Phase-6 region-page surfacing — i.e. to now. The required-field

structure is the director's; the actual triangle/draw-call/LOD-ratio numbers are a

contract/performance-budget call for Josh or the UE5-build owner to set.

(3-J) are director-safe structure, but what a "materialized argument" (the Polo's vital-force theft, the

Tombo-Holes proverb-constructs, the Certification-Shadow) actually looks like is genuine creative canon

for Josh or the quest-layer author. The review adds the slot and defers the look.

Generated by harness/site/structure_site.py — the URL path is the repo path. review root