pipelines/PAGE_PIPELINE_REVIEW_2026-07-20.md
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.
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.
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.
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.
Grouped by root cause after de-duplication (the eight lanes independently surfaced many of these; the
count reflects distinct fixes, not distinct findings).
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.
(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.
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.
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).
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).
Each carries a direction, a recommendation, and a kill-test that decides it cheaply.
| Enhancement | Direction | Recommendation | Kill-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" subsection | APPLIED (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 number | If 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 time | ADOPT once the Asset Manifest (3-L) exists — it makes prompt-composition deterministic and preserves the roused/baseline style nuance a build-time inferer would flatten | Build 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 {adaptive | loop | oneshot} tag per Section-10 AIVA cue | APPLIED (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 beat | If 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 consume | DEFER until the terrain/asset benchmark days set the real palette — authoring it now risks over-specifying | Build 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 derivable | Derive 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 canon | APPLIED (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 canon | Fun-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 pages | ADOPT · 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 miss | Break 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: ready | blocked-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 glance | Extend 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 |
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.