From 01e9db1c27738b63ddd97ff882ad26b8d7ff20c7 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 30 Sep 2026 02:26:50 +0200 Subject: [PATCH] Ship S0: correct the authoring doc, record the merge status in the map Applies corrections 1-4 of docs/moddable-ships-cut.md B.1 to docs/moddable-ship-authoring.md: label the Quiet probe numbers as unrecorded, name the double-held mod hull in the derived catalog, name the ShipAuthoring catalog-routing invariant, and scope "same semantic validator" to C# callers. The map's status header gains the S0 result (615 tests on the merge), the S-Soul status, the corrected TradeMenu.cs path, and anchors re-taken against the merged tree. Co-Authored-By: Claude Sonnet 5.5 --- docs/moddable-ship-authoring.md | 20 ++++++++++++++++++-- docs/moddable-ships-cut.md | 23 ++++++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/docs/moddable-ship-authoring.md b/docs/moddable-ship-authoring.md index 85f9c79f8..0b6a814ea 100644 --- a/docs/moddable-ship-authoring.md +++ b/docs/moddable-ship-authoring.md @@ -6,6 +6,10 @@ authoring, validation, loading, and play checks. ## LineArt proof from Quiet.blend +The numbers in this section and in the compose example below come from an +unrecorded probe. `Build/quiet.cc` is git-ignored and no committed fixture or +test reproduces them. + `C:\Users\Meta\Desktop\Quiet.blend` is a read-only source for this probe. At frame 1, `Quiet / Dexter Quiet Lineart` evaluates to 1,040 polylines with 3,125 points. Blender 5.2.2 wrote those coordinates, point radii and opacities, @@ -96,7 +100,9 @@ is not yet an end-to-end ship loader in the current game. migrated hull; it does not keep two writable definitions of that hull. `ship-authoring validate`, the catalog composer, and the visual importer call -the same semantic validator. Blender edits the hull grid, hardpoints, and +the same semantic validator; that shared path is true of the C# callers only. +The Blender side checks grid bounds and footprint shape (`ship_cc.py`) and +nothing semantic. Blender edits the hull grid, hardpoints, and captured lines in the typed source record; `inspect` reads incomplete drafts. Unity's **Aetheria / Preview Mod Ship Package** imports a validated package from disk, resolves stable GLB node IDs, @@ -107,13 +113,23 @@ records. ## Runtime catalog seam +`AetheriaStores.CatalogTypes` routes `ShipAuthoring` to the shipped catalog, +but the shipped catalog contains no `ShipAuthoring` record. This stays correct +only while nothing writes a `ShipAuthoring` through a catalog-writable cache on +`Aetheria.cc`; a mod ship's authoring record lives in its own `ship.cc` and in +the derived catalog. + `CultCache` routes `ItemData` to one home backing store, and `ActionGameManager.CultCache` holds that store for the entire play session. Attaching each mod's `.cc` as another item store would violate the cache's one-home invariant. `ship-authoring compose` instead derives one runtime catalog from the shipped catalog and validated mod packages, preserving all shipped record keys. Each mod's stable `ShipAuthoring.Id` yields separate deterministic keys -for its copied `HullData` and its runtime authoring record. The generated +for its copied `HullData` (`mod-hull:`) and its runtime authoring record +(`mod-ship:`). The authoring record's key 1 is the same `HullData`, so the +derived catalog currently holds each mod hull twice. Gameplay reads only the +`mod-hull` copy; the `mod-ship` copy is dead weight inside a disposable file +until the open question on which record owns the hull is settled. The generated catalog is disposable; the shipped catalog and each mod's source `.cc` remain the owners. A player session opens one catalog snapshot and cannot hot-swap its designs beneath existing entities. diff --git a/docs/moddable-ships-cut.md b/docs/moddable-ships-cut.md index 7ce1d032d..8562de141 100644 --- a/docs/moddable-ships-cut.md +++ b/docs/moddable-ships-cut.md @@ -136,10 +136,31 @@ control, which has since moved 8 commits to `b66ba524`. Neither side touches the | `375d6bd4` | Blender layout editing (hull grid, hardpoints) through `ship_cc.py` | The delta is +511 C# (including `tools/AetherDb`), +494 Python, +119 tests, and one new Unity package dependency. -It also carries a stray fix in `TradeMenu.cs` (an unused `using System.Runtime.Remoting.Contexts`). +It also carries a stray fix in `Assets/Scripts/UI/Menu/TradeMenu.cs` (an unused `using System.Runtime.Remoting.Contexts`). +Self's ruling: it stays on this branch as cleanup. Master compiled clean in Unity with the using present, so master does +not need it. **Test counts.** The two ship tests pass on the merged tree: 364/364 (section 0). +**S-Soul status:** F1, F2, F3 and F6 fixed at `fe38f288` (479 tests). F4 has no spec entry. The Python tests +(`tools/blender/tests/test_ship_cc.py`, 32) have no runner yet; run them by hand. + +**S0 status (2026-09-30):** master `65c63495` (fire control 12, `dcd7bbc5`) merged into `codex/moddable-ships` with +`--no-ff` at `18e12d81`, no conflicts. Corrections 1-4 applied to `docs/moddable-ship-authoring.md`. Yggdrasil full +suite on the merge (`dotnet test tests/Aetheria.Shared.Tests`, CultLib `45c2f40`, CultMath `6d5e209`): **615 passed, 0 failed**. The Unity batchmode compile and the `ShipModPreview.Smoke` run are Self's +steps and have not run. + +**Anchors re-taken against the merged tree (`18e12d81`).** +- Unchanged: `ShipAuthoring.cs:15` (`Hull`, key 1), `:84`, `:111-136` (the hardpoint checks are `:112-131`), + `ShipModCatalog.cs:20-21` (keys), `ItemData.cs:512` (`Hardpoints` `Key(23)`), `:515` (`Prefab` `Key(24)`), + `Loadout.cs:74`, `EntityInstance.cs:15-27`, `ZoneRenderer.cs:289-310` (`LoadEntity`), `AetheriaStores.cs:9`. +- Moved: the second upsert in `ShipModCatalog.Compose` is `:68-69` (was `:60-61`; the F1-F3 fix added the + name-collision checks above it). `ship_cc.py`: slot constants are `:23-25`, `replace_layout` is `:96-124`, + the `body[HULL_SLOT]` reads are `:84,101`. `ActionGameManager.cs`: the catalog opens at `:55-59` + (`AetheriaStores.Open`, not `:45-60`); `capturepreset` is `:621-662`. +- S1's key 32 for `HullData.Visual` holds: `EquippableItemData` owns 30 and 31, `HullData` uses 23-29, and + `WeaponItemData.Fuse` at 32 (`ItemData.cs:505`) is a sibling class, not an ancestor. + **Proof-gate status against the doc's own gates (`docs/moddable-ship-authoring.md:149-164` @`375d6bd4`):** | Gate | Doc implies | Verified in git |