feat(composer): Tier 4c -- a season that can actually ship, with a veto page
The composer could invent, measure and show strates. What did not exist was an ARTEFACT a season could ship. Now it does. VF_ComposeSeason: generate N candidates -> measure -> reject failures -> select a descent sequence -> emit a JSON manifest + a review page. ⭐ THE PROPERTY THAT MATTERS: round-trip bit-identity. The manifest was loaded, every selected stack rebuilt, and 393,216 density samples compared BIT-IDENTICALLY. Re-composing the same seed yields byte-identical JSON. A manifest that cannot reproduce its own world is worthless, and that is the one thing that could not be assumed. Floats serialise as readable values PLUS exact IEEE bits, so a season survives a text round trip. Test season: 24 generated, 19 survived the hard gates, 6 selected. 18 not selected -- 4 vacuous, 1 primordial-law failure, 13 policy non-selections. 4 grounded, 2 outliers. EVERY selected slot passes the primordial law, asserted per slot rather than sampled. Selection policy is explicit, named and PROVISIONAL, because Jahni has not defined "good" yet and said so: "it'll be easier once i'm able to see the strates candidates." So no quality score was invented and presented as settled. The knobs are 75/25 grounded-to-outlier (outlier axis = distance from corpus centroid), adjacent-similarity threshold .20 with penalty 1.0, new-archetype bonus .10, new-recipe bonus .05, boss cadence every 5th non-terminal slot. All of them are his to turn. The veto is a review page in DESCENT ORDER -- the season read top to bottom the way it is played, not the survivor/outlier ordering the candidate sheet uses. Reuses VoxelStratePreview rather than a second renderer. Saved/VoxelForge/SeasonTest/season_0000_seed_9320/season_manifest.json .../review/index.html ⚠️ FIVE GAPS CODEX RAISED, recorded not buried: 1. §4's Tier A is strates PLUS passages; only the strate spine is persisted. Manager-generated passage geometry and content placement are not. 2. Authored fixed strates keep scalar vectors + asset paths, not every asset-level passage/biome/disturbance/content field. 3. Boss slots are MARKERS, not arena or content guarantees. 4. WorldRadiusVoxels == 0 is enforced as specced but contradicts a production bounded world -- Jahni's call, still unset by design. 5. Bit identity is proven for the same build and platform. A frozen season spanning engine versions needs an explicit schema contract. Real risk, since seasons freeze generation for months. Build clean, 28 succeeded / 0 failed, verified by me. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VJiTcTSDNkKBtnNdiBtdaU
This commit is contained in:
1 parent
0b3ec18b43
commit
42e1f0ec8c
8 files changed
+3351
-5
No files matched your search
+88
-4
@@ -89,6 +89,64 @@ normal game path.** The editor-only PIE inspection button described below is a d
|
||||
exception: it overlays one already-built slot so the owner can walk a measured candidate; it is not
|
||||
cooked, does not compose a season, and is cleared by RebuildStrates.
|
||||
|
||||
**Tier 4c is now the build-box seam:** `VF_ComposeSeason(SeasonSeed, Settings)` generates a bounded
|
||||
candidate batch, measures every candidate, rejects vacuous/fragmented/primordial-law failures, and
|
||||
writes the selected Tier A spine as diffable `season_manifest.json`. The default test budget is 24
|
||||
candidates at measurement step 8 and a six-slot output; production can raise the candidate count for
|
||||
the overnight budget without changing the runtime contract. The manifest stores each selected seed,
|
||||
recipe, complete native parameter-family vector, archetype, bounds, measured metrics, and gate facts.
|
||||
Floating-point fields carry both a readable value and their exact IEEE-754 bit pattern, so a loader can
|
||||
rebuild the same stack and the season test can assert bit-identical density rather than assume it.
|
||||
|
||||
The selected-only review page is a descent-ordered `VoxelStratePreview` contact sheet. Each card shows
|
||||
the depth, recipe, metrics, grounded/outlier/fixed selection reason, and boss-slot marker. Selection is
|
||||
deliberately provisional: the current readable policy reserves 75% grounded and 25% outlier slots,
|
||||
penalises near-identical neighbours, rewards new archetypes/recipes, and respects fixed absolute slots.
|
||||
Jahni's preview and veto remain the decision that turns this artifact into a published season. The
|
||||
composer and review writer are editor/build-box code only; no normal runtime generation path calls
|
||||
them, and `WorldRadiusVoxels` remains 0.
|
||||
|
||||
An abbreviated manifest shape is:
|
||||
|
||||
```json
|
||||
{
|
||||
"format": "VoxelForgeSeasonManifest",
|
||||
"schema_version": 1,
|
||||
"season": 0,
|
||||
"seed": 9320,
|
||||
"candidate_count": 24,
|
||||
"survivor_count": 19,
|
||||
"selected_count": 6,
|
||||
"strates": [
|
||||
{
|
||||
"depth_index": 0,
|
||||
"seed": 123,
|
||||
"archetype": "Maze",
|
||||
"uses_recipe": true,
|
||||
"recipe": {
|
||||
"root_polarity": 0,
|
||||
"root": { "op_class": 0, "param_block": 3 },
|
||||
"shape_source": { "op_class": 3, "param_block": 3 },
|
||||
"conversion": { "op_class": 8, "param_block": 3 },
|
||||
"structural_param_block": 3,
|
||||
"modifiers": []
|
||||
},
|
||||
"parameters": { "maze": { "LatticeSpacing": { "value": 18.0, "bits": "0x41900000" } } },
|
||||
"measured_metrics": {
|
||||
"air_fraction": { "kind": "float", "value": 0.5, "bits": "0x3F000000" },
|
||||
"largest_component_share": { "kind": "float", "value": 0.9, "bits": "0x3F666666" }
|
||||
},
|
||||
"selection_reason": "grounded; provisional 75/25 policy",
|
||||
"boss_slot": false
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
The real file is complete; the sample is intentionally abbreviated. `FVoxelSeasonFixedStrate` also
|
||||
allows a build invocation to provide a full recipe/vector for an absolute slot, while entries adapted
|
||||
from today's authored `FixedStrates` retain their native vector and source asset path.
|
||||
|
||||
### 3.2 Structure: how a stack gets assembled
|
||||
|
||||
The current shipping builders, for reference (structural posts included; TunnelNetwork's builder is
|
||||
@@ -759,8 +817,15 @@ reviewable outlier quota instead of assuming survivor promotion preserves surpri
|
||||
### ⭐ It is TWO things, not one
|
||||
|
||||
**Tier A — the SPINE. Finite, tiny, actually stored.** Strate slots and passages. ~30 strates plus a few
|
||||
passages each is roughly 100 entries — kilobytes. **This already exists** as `StrateLayout` plus the
|
||||
passage list, computed once in `UVoxelStrateManager::Initialize`.
|
||||
passages each is roughly 100 entries — kilobytes. The runtime manager already computes `StrateLayout`
|
||||
and its passage list once in `UVoxelStrateManager::Initialize`; Tier 4c now adds the first reviewable
|
||||
serialized Tier A artifact, `season_manifest.json`, containing the selected ordered strate spine and
|
||||
the data required to reproduce each selected density field exactly.
|
||||
|
||||
The current Tier 4c manifest deliberately serializes the chosen strates, not the manager's generated
|
||||
inter-strate passage geometry or the full material/creature/content placement payload. The season test
|
||||
therefore proves each stored strate's density round trip; passage serialization and the wider content
|
||||
manifest remain a follow-up before this file can be called the complete world manifest described here.
|
||||
|
||||
**Tier B — the FIELD. Effectively unbounded in XY, therefore NEVER stored.** Landmarks, rooms, material
|
||||
deposits, build sites. It is a **function**: give it a region, it enumerates what is there.
|
||||
@@ -1038,8 +1103,16 @@ roughness and should stay late in the stack.
|
||||
violations, plus 64 rendered preview pairs and an index.html contact sheet. The fine survivor ROI
|
||||
is centred on `LargestComponentPoint` and labelled largest open space; the final before/after
|
||||
blank-plan count is 6/42 → 3/42.
|
||||
- ⬜ Reject-and-resample driven by Tier 2 (§3.5) · the **offline season pipeline** with Jahni's review
|
||||
and veto (§3.1).
|
||||
- ✅ **Season pipeline (§3.1, §3.5, §4, Tier 4c)** — `VF_ComposeSeason` generates and measures a
|
||||
bounded candidate batch, rejects vacuous/fragmented/primordial-law failures, and writes a Tier A
|
||||
JSON spine plus a selected-only descent review page using `VoxelStratePreview`. The explicit policy
|
||||
is provisional: default 75% grounded / 25% outlier, adjacent-similarity penalty, archetype/recipe
|
||||
variety bonuses, and fixed absolute slots with boss markers every five non-terminal slots. The
|
||||
focused artifact run was **24 generated / 19 hard-gate survivors / 6 selected / 18 rejected or
|
||||
unselected**: 4 vacuous, 1 primordial-law budget failure, and 13 policy-not-selected. The loader
|
||||
rebuild test compared **393,216 density samples bit-identically**, and the same seed emitted
|
||||
byte-identical JSON. This closes the offline artifact and veto seam; full passage/content manifest
|
||||
serialization is still open as noted in §4.
|
||||
|
||||
### Tier 5 — the long game
|
||||
- ✅ **Promotion** (good strates rejoin the corpus) — JSON promotable records and season manifests,
|
||||
@@ -1145,6 +1218,17 @@ in §3.3. The StructureRoll preview measured fine blank plan/card counts **6/42
|
||||
42 fine filled pairs plus 42 contour pairs with 0 refusals. No existing generation/equivalence test
|
||||
failed.
|
||||
|
||||
**2026-09-05 — Tier 4c season validation.** The specified UE 5.7 `VoxelMEditor Win64 Development`
|
||||
build succeeded after adding the season manifest and review seam. The focused
|
||||
`VoxelForge.Composer.Season` test passed, then the full headless `VoxelForge` namespace reported
|
||||
**28 succeeded, 0 failed, 0 not run, 0 succeeded-with-warnings**. The season artifact used 24
|
||||
generated candidates, 19 hard-gate survivors, and selected 6; it recorded 4 vacuous rejections, 1
|
||||
primordial-law budget rejection, and 13 provisional-policy non-selections. Reloading the JSON and
|
||||
rebuilding every selected stack compared **393,216 density samples bit-identically**; composing the
|
||||
same seed twice emitted byte-identical JSON. The selected-only descent review was written beside the
|
||||
manifest. The run also kept all existing equivalence, determinism, box-verdict, and connectivity
|
||||
tests green.
|
||||
|
||||
---
|
||||
|
||||
## 11. Tier 1 status — passages aim at real open space (bounded full-point query; build not run)
|
||||
|
||||
Reference in new issue
Block a user