From fcd704437facd3bac8a55f01f65f981ffb1bf529 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 13 Jun 2026 12:46:34 +0100 Subject: [PATCH] Import full typed name files --- .voidbot/state/aetheria.cc | Bin 28510 -> 28952 bytes Aetheria.State.Import/Program.cs | 12 +++++-- Aetheria.State.Unity.Smoke/Program.cs | 5 +-- .../AetheriaRuntimeCatalogSnapshotMapper.cs | 3 +- Aetheria.State.Verify/Program.cs | 7 +++- Aetheria.State/Documents/AetheriaNameFile.cs | 5 ++- Aetheria.State/README.md | 25 +++++++------ GameData/aetheria-world.cc | Bin 19319 -> 19489 bytes ...6bcb5217c5fee889541667442528a98491.msgpack | 2 +- ...a275af9147897cd1f60b23a18cc48b7fee.msgpack | 2 +- ...3921217d7ba077f48246e0b33fc1493431.msgpack | 2 +- ...3fbff428c15ab389a42d0d2aa0e75980fd.msgpack | 2 +- ...6b93b4259541f580967a52464d9686f3aa.msgpack | 2 +- ...fdee0c7ff471c8bb4b4e0b2067eb36da09.msgpack | 2 +- ...cc1c87e1e40afcab2bb8dd8f889fe0918b.msgpack | 2 +- ...1ac1edd3dffac04996b12d9f9d0e8304f1.msgpack | 2 +- ...1368ec2948a11425e377fa92a71d575637.msgpack | 2 +- ...8858c36442af01034165db67b886e94ce3.msgpack | 2 +- ...2cd5bdbf86136a558044079cba7a029ac8.msgpack | 2 +- ...6ba52bd445978bb0cb399047cf64aa722f.msgpack | 2 +- ...3e8ff05893f872c2437a5621f2a2eec71b.msgpack | 2 +- ...9bb06b3f45a746ac5f7739b1cbd896443f.msgpack | 2 +- ...07d0fb3e1d5d58fbc176520a100614f404.msgpack | 4 +-- ...48df04cfa2250b7101fc00f9c6f2c1317c.msgpack | 2 +- ...06e97680a29efe7d1436947e3a8eba4c95.msgpack | 2 +- ...2ccd793983d2af31967b7d70a977fd2e02.msgpack | 2 +- ...f91cb8ca685ea96318a795771ae6d911eb.msgpack | 2 +- ...db27aa2b805705e823bed4877c4623cf88.msgpack | 2 +- ...5eead201bac20496fa5a2649e4b1522a37.msgpack | 2 +- ...fa0290206edd7b2e0dc08b0f9842dea0f2.msgpack | 2 +- ...dd6eeb3d8311f3753af60c2b5596719b15.msgpack | 2 +- ...d7e3a5d8fa1509efb8a9249d0e48891299.msgpack | 4 +-- ...c76a739617023ffa2c2aeb091cf5580b7d.msgpack | 4 +-- ...f5bd89832b6e55959ea4902bfa15bc8117.msgpack | 2 +- ...d52fa612f479ccbad76307db432c0b6147.msgpack | 4 +-- ...268eff507c40681c6b1955fa786f99066c.msgpack | 4 +-- ...ad0cb1b8ec9229ee0525bb8571edb6ea32.msgpack | 2 +- ...616a532f076ae0a66f2257f9c7899100a9.msgpack | 2 +- ...ae26acc72f64a9ca536b895d59a8675c66.msgpack | 2 +- ...44c85439d1f3caa1caaf24beb34e7d8d50.msgpack | 4 +-- ...9500e6c9192f76c38393eb84bee3345ee0.msgpack | 2 +- ...dd6ef83562c3b82a0e03c21a37c241f5b8.msgpack | 2 +- ...5cdcddbcded4980427149dc10ba9eb08a1.msgpack | 2 +- ...baf1c52a76a0e7adce5acb06a2d7f5bd79.msgpack | 2 +- ...79872da971faf89ceef4c395a64f1b5e88.msgpack | 2 +- ...60257125aef40381db5877aa16c02b39e4.msgpack | 2 +- ...ea1ff3e3f204925bb28ccb1d45d2b3d732.msgpack | 2 +- ...786b7af0cd4f808a703d5f242c9b0fd372.msgpack | 4 +-- ...05ae7658005ee7019c3810650baf8e6c4f.msgpack | 2 +- ...d65f26dcd9e6b2bc9ef89cb16dd16e4b07.msgpack | 2 +- ...4187f90237d4386c76e3b847376b466dd3.msgpack | 2 +- ...042b3f00710055061bb4b6d9b2306d14c3.msgpack | 2 +- ...36ce1066ae558fc09801457a30674f515b.msgpack | 2 +- ...e298fc6ceb8352b047986733e405d6006b.msgpack | 2 +- ...7cb628668b9e3842a59c0e2dd106a820bb.msgpack | 2 +- ...b30b7614eb776ee14b16bed525675b67b8.msgpack | 2 +- ...6321b14e59b2b62a7e914e74771273097a.msgpack | 2 +- ...d39c7f7412772d7ad9adc1f1db3f39cc10.msgpack | 2 +- ...e152a6e77f714229898548c45b02cc72d6.msgpack | 2 +- ...0ecea7ff27435bd9e9d534bcb0c1b892ef.msgpack | 2 +- ...daf7ada6d75ceaa0a07f1e0dc46d65003f.msgpack | 2 +- ...25c2c88303bdbc1a54a178c895086e6c55.msgpack | 2 +- ...320b70986559345e184297437f13bcae7d.msgpack | 2 +- ...1f7c425775d76ba34c55a9ae879e27b3d8.msgpack | 2 +- ...8181b2c9794fa3a70f803c67de8d0dcff0.msgpack | 2 +- ...918704bf6ad447ce7a4733664d3888359d.msgpack | 2 +- ...9358f522e1794e5a675f77b06e99ee061e.msgpack | 2 +- ...fd4bd127dae7ce9a1cc25669b23daffd1b.msgpack | 2 +- ...72d6a82431bf8c842bc57b1c7f3bae4876.msgpack | 2 +- ...78de0d154287774728c30a461ed0d9e334.msgpack | 2 +- ...5a77b77ba285ba04fa6e1c678d86988867.msgpack | 2 +- ...cb33184e1aade105b24afaba265b148ce4.msgpack | 2 +- ...92a3874ff91d1e08024120231bb836c2bb.msgpack | 2 +- ...30a284a5876d9f55597d457cebba6a2226.msgpack | 2 +- ...04c4d886f2bf72ae35b733603966e28d61.msgpack | 2 +- ...a65e76836067e0661b91eb2fa4cc5c2b3f.msgpack | 2 +- ...6550ff7ce20b046a653debb4e7bc10e047.msgpack | 4 +-- ...2888041296cc8e256b3774e29b1b969c4b.msgpack | 2 +- ...d247ef4aa34cfbe648b0b1587836dc48cb.msgpack | 2 +- ...eb069ff9e1ed707a2590cedcffc835ac23.msgpack | 2 +- ...199f861a6986234742cd7d603c9d8cbe86.msgpack | 2 +- ...699d5fc930104242470efeddc8f9500222.msgpack | 2 +- ...ef7f34c156794d697606252db56928e23b.msgpack | 2 +- ...d30298201bd0eced6bfa9c3b7e01d9448c.msgpack | 2 +- ...946ba31ec32b37bfe4b0829825c4e85029.msgpack | 2 +- ...cb793e7bcf5f7afa2c328d12d6561d0f1e.msgpack | 2 +- ...56919b8dd915d9fef8f2361b77d9bf6b99.msgpack | 2 +- ...386b0b8e8f80cfe0ad311061b682ecff95.msgpack | 2 +- ...1c82be1f818ee634833d6e3e637e694344.msgpack | 2 +- ...4f2a1a72a54f72c42a4e4c1d0f231586ba.msgpack | 2 +- ...34144722b989cf3cf2f03431cabc1f3929.msgpack | 2 +- ...a34a37e5fcb7892a29eb02cf5da1c338de.msgpack | 2 +- ...c97b1604f21df8132d6305f350e80ba5b7.msgpack | 2 +- ...98c89c7c57fff60a2c357887e8dc400dc3.msgpack | 2 +- ...c595e7f3aea98935f9e9a6aafdf8b4d9d2.msgpack | 2 +- ...1539aa45529f4c740066eb5301ed36edfd.msgpack | 2 +- ...2e4971d71ab5b8b38ac0c89c3f9a764764.msgpack | 2 +- ...cc7b2c41fe7e5fcc138566aa65f6a2b10b.msgpack | 2 +- ...79e8b3e7a51e9d5145e08f639a88de38be.msgpack | 2 +- ...cb2be74c711de0d5b22f9160aba0ee7ee9.msgpack | 4 +-- ...65d32cdc881f54a82297e048ac6adff8ff.msgpack | 2 +- ...0336d40c18572d3f6ed6318a4008af5a89.msgpack | 2 +- ...fcd8fa1e9858c270d58ccf5d2170a3842c.msgpack | 2 +- ...d2064953cbde740647c3a820bacf9c27c3.msgpack | 2 +- ...33d98be75491a3b1b3af0d080505b31b21.msgpack | 2 +- ...76f8e8486ae0dd84c256d8c672c54837ec.msgpack | 2 +- ...7dd3b2bd29116afbf8857d8b5afdc85c8f.msgpack | 2 +- ...26af1122625e375d29d192aacad668e2a7.msgpack | 2 +- ...0d87791a49bb911b2e7ab294e1303e180c.msgpack | 2 +- ...85198b8b38c36fc5417df965fe098c7523.msgpack | 2 +- ...fdf046f5a7951655cf83dc22938e7563b2.msgpack | 2 +- ...f4651415e50cce4eb13240370a1394b928.msgpack | 2 +- ...52a044e5c42314b43945ded225f3009bf9.msgpack | 2 +- ...b76604f01f891d11f6bc9c079621d2b45c.msgpack | 2 +- ...dd6056bad45424aaadc0ed86534053fd43.msgpack | 4 +-- ...6a84bb1ad648c6e3f72452f8ee47f98cb5.msgpack | 2 +- ...28230b2636da2c91d4e12ec6c804c8a04a.msgpack | 2 +- ...480afdb5047dee177edeac207ce337e083.msgpack | 2 +- ...7f81911af70edf42cb5275ce8f96dee707.msgpack | 2 +- ...07128f325b6f8981e61bf216400dd09f8e.msgpack | 2 +- ...f4dc349da455027ef5db10f14d88553894.msgpack | 2 +- ...1ade7f7e67031a1f69bec307690212bb53.msgpack | 2 +- ...3ff4da3985d54c314bcaf6ceca29a0d80e.msgpack | 2 +- ...1b1a624f836079caf3f9c892cbc94d0aae.msgpack | 2 +- ...01600dd1985f3e1ddeeb16b10593afc5ab.msgpack | 4 +-- ...08e1a83f1dc14096339f67d56c0e0869ff.msgpack | 2 +- ...06d60f0e24b919fdf36a025cfddee87011.msgpack | 2 +- ...0f1c261fbbb7f1961d8acd057a3b287e38.msgpack | 2 +- ...5b07b6b9ec7bba75debf9915460dbe3e1a.msgpack | 2 +- ...2762b088b45c2b873b2816cc7dd4e7672c.msgpack | 2 +- ...e79aecf53d9558fd48290599da73065788.msgpack | 2 +- ...3dd2a11f08fa54e6ffc699ee7ff032399d.msgpack | 4 +-- ...36c731b877c242d1dd966801858145a431.msgpack | 2 +- ...8668f9d2c05806983d89a8e9227a63871e.msgpack | 2 +- ...e2540502e68596a3603f76389e57028805.msgpack | 2 +- ...9ab8ab7bd5c5792eaffa4226a6c04eb105.msgpack | 2 +- ...b464103bd76e410747a9c9b7ff24e3c4e1.msgpack | 2 +- ...5ee0f0a8c3001293f5702aa2424e24427e.msgpack | 2 +- ...731eadcb421407c89d781610905a20f024.msgpack | 2 +- ...4a3699e1985d69a91cf8dcb7f4c66bddf5.msgpack | 2 +- ...25da6d94408d6a3d1d9118f6ee39b59f6b.msgpack | 2 +- ...27c780283d518bb03ec1796d41885bd88a.msgpack | 2 +- ...0f473896745b146e5990046afe53ac54b8.msgpack | 2 +- ...e9c2093d642b67286400600a6215e90683.msgpack | 2 +- ...8f723d3a0a7f48de7e52fe545a530c2559.msgpack | 2 +- ...3f7d34327c64a8a33c3dfb1809131717a1.msgpack | 2 +- ...42f2cef8f92eb11513d698d60a8ad234c4.msgpack | 2 +- ...d4f7d77f094191b2e9d7590b6795950780.msgpack | 2 +- ...c4bd13b358f1ffb0937b14289d35ab2d53.msgpack | 2 +- ...6b87f1ba0566a44f3d381b757edb40d25d.msgpack | 2 +- ...e4f0b2d619dceb69ec354fe56f99488b42.msgpack | 2 +- ...beb23a1fa47461adda98ef10295021480f.msgpack | 2 +- ...d3f4d154424deaf2f21dd15d213684d46f.msgpack | 2 +- ...8da4a63ef12a1dc5126b11ebba43840395.msgpack | 2 +- .../Runtime/AetheriaRuntimeCatalogSnapshot.cs | 5 ++- .../Runtime/AetheriaRuntimeCatalogStore.cs | 5 +-- docs/aetheria-perfect-machine-map.md | 33 +++++++++++------- 157 files changed, 224 insertions(+), 192 deletions(-) diff --git a/.voidbot/state/aetheria.cc b/.voidbot/state/aetheria.cc index d283076b8018a3f97fdd95f79bdf206baef1d362..63aa979a3e5bff0b5f99d697f2810c4665e16a59 100644 GIT binary patch delta 1271 zcmaJ>&ubGw6t-zaThN14#Nv-B7zAmzZIZTHf>3I$9$ILr3OU%0yDys|yEE&|Y?|~E zi$}f4UIZ_KwZ*C+uj)_dX`LbqtQfkuP2l16Vc>k&&Aa0kH*!WnajaePr9C6u6bY)PF)x- zG6#s#R0H8+jhIwQ28tAY$B7OQ9MGCF-kJ_&Zu93f=n_aq7x41!@UAN=h@}Ogt$&OV zcO}F%DjBlIbcuwAl|hzEK$z>*h14L41Q%Hm%3dN;Rr*Q&Ou9)MKz7ghbmKA1&ita`pyDWb)3tv@)!qV`uH2~B9F^#qyf^} zIy7UR%Ce}$iFK^e_D%X+GZ!<)BuJQziaf*&FuqPf#vJGwI;E*2>{+g5EgxnOhH;Y= zrErNITXjHU>`-o&gj|B6`hG0m_>+Ej>BQ4F5{k{CVAU8bCIE)1Hp`4#@0IYS8CPT* zop!0LHE$g5q$NxYfum@%giRqym!f9Iy@;x5#8l~k_Fs4yJMv$mYfFg6IOBGbZ{*2= zo+N*1e1HnGfSV9YBf(xK-`KyE?_NGq!sPv=jjhsQ{ODc$iQ)PZOd+k<_((Iv1^|6uWv5&UL-!B^|} znbu=6mMLs%YGZz*jmCo~slksDJTaAg?AtBqowgp;$QDlZ_O`DF-@4DYUY+sr_+{EK iKes27(L1za`N?D=eyjGajrJrHo@oT|rMEqrDEtL2FVva< delta 874 zcmY*YOKTKC5H_0-T;mJTgF;M;ugmVjhCDV=L`e)RBoc$7#zUyg)XX;N=^nd#HrZSf zuX+#}1b;wce1fuPi5@(A4oE=nUi<-K_3XOF%QW+KSACD_e*U9tcem^Pi`;?1(ed(d zsXQ_?|Fr8w`X%?cjSP*BWr*rtZ6lS+aE9#f>CY{kZC>n|7`OpwYp6MF3Rpz(@>=_M z%Op_*y0LS!YB6H5RxxVJ(Xa?)5`bqDjhgw~!~z;DQg!s1Rq2y+r>2;Z5SyB^rA!wk zaTzjO7kbwoO(-Ij39^WXP8`LcDWjs2 zqLFb@0NT(r*jz#)k#WOEhTYtz545L`upzXW9{2LI5NLsAtbV5bNb$TuKDx+p?toxnSRHU t*(Dz-l`E}>a0$0NNTvM{deebG{YA&h8Tu}G*g>+&=1llG-+?Oge*o3^I^F;P diff --git a/Aetheria.State.Import/Program.cs b/Aetheria.State.Import/Program.cs index 470463635..dc328135b 100644 --- a/Aetheria.State.Import/Program.cs +++ b/Aetheria.State.Import/Program.cs @@ -96,7 +96,7 @@ await node.PutMigrationLedgerAsync(new AetheriaMigrationLedger }, new AetheriaMigrationCount { - DocumentType = "aetheria.name_file.v1", + DocumentType = "aetheria.name_file.v2", Count = parsedNameFiles.Length } ], @@ -421,7 +421,8 @@ internal static class LegacyCatalogReader Name = name, LegacyId = legacyId, NameCount = GetArrayLength(payload, 2), - SampleNames = GetStringArraySample(payload, 2, 8) + SampleNames = GetStringArraySample(payload, 2, 8), + Names = GetStringArray(payload, 2) } : null); } @@ -789,6 +790,13 @@ internal static class LegacyCatalogReader : []; } + private static string[] GetStringArray(IReadOnlyDictionary payload, int key) + { + return payload.TryGetValue(key, out var value) && value is object?[] array + ? array.OfType().ToArray() + : []; + } + private static ShapeFacts ReadShape(IReadOnlyDictionary payload, int key) { if (!payload.TryGetValue(key, out var value) || value == null) diff --git a/Aetheria.State.Unity.Smoke/Program.cs b/Aetheria.State.Unity.Smoke/Program.cs index fb3fbe761..f632c1695 100644 --- a/Aetheria.State.Unity.Smoke/Program.cs +++ b/Aetheria.State.Unity.Smoke/Program.cs @@ -109,9 +109,10 @@ if (catalog.GetManufacturer(manufactured) == null) } var packageCorporation = packageCatalog.Corporations.FirstOrDefault(corporation => !string.IsNullOrWhiteSpace(corporation.GeonameFileLegacyId)); -if (packageCorporation == null || packageCatalog.GetNameFile(packageCorporation) == null) +var packageNameFile = packageCorporation == null ? null : packageCatalog.GetNameFile(packageCorporation); +if (packageNameFile == null || packageNameFile.Names.Count == 0 || packageNameFile.Names.Count != packageNameFile.NameCount) { - throw new InvalidOperationException("Package catalog store did not read corporation/name-file links."); + throw new InvalidOperationException("Package catalog store did not read corporation/name-file links with full names."); } if (surface?.Schema != "gamecult.eve.surface.v1" || diff --git a/Aetheria.State.Unity/AetheriaRuntimeCatalogSnapshotMapper.cs b/Aetheria.State.Unity/AetheriaRuntimeCatalogSnapshotMapper.cs index 75220dab7..b1bf54653 100644 --- a/Aetheria.State.Unity/AetheriaRuntimeCatalogSnapshotMapper.cs +++ b/Aetheria.State.Unity/AetheriaRuntimeCatalogSnapshotMapper.cs @@ -116,6 +116,7 @@ internal static class AetheriaRuntimeCatalogSnapshotMapper nameFile.LegacyId, nameFile.Name, nameFile.NameCount, - nameFile.SampleNames); + nameFile.SampleNames, + nameFile.Names); } } diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index bf1b4af60..06b763a05 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -23,7 +23,7 @@ var surface = AetheriaCatalogSurfaceProjector.Build(catalog, DateTimeOffset.UtcN RequireCount(ledger, "aetheria.item_definition.v1", items.Length); RequireCount(ledger, "aetheria.corporation.v1", corporations.Length); -RequireCount(ledger, "aetheria.name_file.v1", nameFiles.Length); +RequireCount(ledger, "aetheria.name_file.v2", nameFiles.Length); if (items.Length == 0) { @@ -40,6 +40,11 @@ if (nameFiles.Length == 0) throw new InvalidOperationException("Typed state has no name files."); } +if (nameFiles.Any(nameFile => nameFile.Names.Length == 0 || nameFile.Names.Length != nameFile.NameCount)) +{ + throw new InvalidOperationException("Typed name files did not import their full name arrays."); +} + var pricedItems = items.Count(item => item.Price > 0); var manufacturedItems = items.Count(item => !string.IsNullOrWhiteSpace(item.ManufacturerLegacyId)); var shapedItems = items.Count(item => item.ShapeWidth > 0 && item.ShapeHeight > 0 && item.OccupiedCells > 0); diff --git a/Aetheria.State/Documents/AetheriaNameFile.cs b/Aetheria.State/Documents/AetheriaNameFile.cs index 6ef605841..13f9757b1 100644 --- a/Aetheria.State/Documents/AetheriaNameFile.cs +++ b/Aetheria.State/Documents/AetheriaNameFile.cs @@ -3,7 +3,7 @@ using MessagePack; namespace Aetheria.State.Documents; -[CultDocument("aetheria.name_file", "aetheria.name_file.v1")] +[CultDocument("aetheria.name_file", "aetheria.name_file.v2")] [MessagePackObject] public sealed class AetheriaNameFile { @@ -20,4 +20,7 @@ public sealed class AetheriaNameFile [Key(3)] public string[] SampleNames { get; set; } = []; + + [Key(4)] + public string[] Names { get; set; } = []; } diff --git a/Aetheria.State/README.md b/Aetheria.State/README.md index 945394b0a..be28b0ac0 100644 --- a/Aetheria.State/README.md +++ b/Aetheria.State/README.md @@ -42,8 +42,7 @@ edits are runtime-only until Verse owns a typed layout/settings document. The old IMGUI CultCache database editor has been deleted, and `NameTools` no longer exports `NameFile/*.msgpack`. `AetherDB.msgpack` and existing name files -remain legacy catalog inputs only; typed catalog migration is the next owner -move. +remain legacy catalog inputs only; typed catalog records are the durable owner. `Aetheria.State.Import` captures the legacy catalog files into typed quarantine state: path, size, and SHA-256 fingerprint for `AetherDB.msgpack` plus @@ -62,6 +61,10 @@ field from key 3, name-file and boss-hull legacy IDs, influence distance, allegiance count, and music bank IDs. Runtime object graphs, typed behavior factory construction, and simulation state remain legacy until dedicated typed runtime documents exist. +Typed name-file documents are `aetheria.name_file.v2` records. They carry the +legacy ID, display name, count, compact sample names for surfaces, and the full +name array needed to move `Galaxy`/Markov name generation off legacy +`NameFile.Names`. Legacy GUID references that are `Guid.Empty` are imported as absent references, not as resolvable catalog links. Before materializing state, the importer clears the generated `.cc`, @@ -101,15 +104,15 @@ equipment slots, weapon groups, and stat grids without reviving `Aetheria.State.Verify` opens a materialized state file and checks that the typed migration ledger matches the actual item, corporation, and name-file records in the `.cc` store. It also verifies the canonical legacy-ID lookup API -for one migrated record of each catalog kind and checks that expanded item and -corporation catalog facts survived materialization. The verifier also exercises -the typed catalog snapshot query surface, shape-mask invariants, and the -typed behavior payload tree, and the published Eve catalog surface. The current -catalog materializes 65 behavior payloads, 661 behavior fields, and 18 -behavior-side legacy-ID references. Legacy content currently includes at least -one overhanging hardpoint; the verifier preserves the payload and checks -hardpoint local masks rather than silently converting content repair into -migration. +for one migrated record of each catalog kind, checks that name-file v2 records +carry their full name arrays, and checks that expanded item and corporation +catalog facts survived materialization. The verifier also exercises the typed +catalog snapshot query surface, shape-mask invariants, the typed behavior +payload tree, and the published Eve catalog surface. The current catalog +materializes 65 behavior payloads, 661 behavior fields, and 18 behavior-side +legacy-ID references. Legacy content currently includes at least one overhanging +hardpoint; the verifier preserves the payload and checks hardpoint local masks +rather than silently converting content repair into migration. Use it after import when `GameData/aetheria-world.cc` changes. `Aetheria.State.Unity.Smoke` opens the materialized state through the runtime diff --git a/GameData/aetheria-world.cc b/GameData/aetheria-world.cc index ffcc0ec9dce25c96f8533b96aa7cf70d5cd10c7a..700d2204552bcdae39910e6cbaec74490cb82d11 100644 GIT binary patch delta 289 zcmbu3J4!@B5CD0spn=N<;xEuZL^P3^dEL|V4BRy`Qg0yiO!sJFWb7quluZ>x13_Ug z;5GCjf{DI67*|2n_kHs)ZQd{ZM6`lNbxDX?2vu5%ULC1Vl%NZmky_~zxmYo^m9WRs z3z=ilF50u-Jqe%3*OweH9%$wws3oZf30-7FCPg2ROO3hqg<3K&mqb(%e53*@H9HI- z?7jwDb~au!2(Ag{wqIt$_OZDgE)7ok%6?bZ?REd$-eB?QzvFl2_BL#^uw!F9oS)7; P^#Qey&6U{={w)6iu4`B3 delta 260 zcmbu3J5EC}5CHY4P!vQJDNWh{-G1z6n*u>a#Stjh>s{z`6ho928bpIYxds=2iy%?) z?m#)s%slOepY8B|hnFJ=i&;zsm9n9h=AbB?Bb7>GLay4#&}*U!>QO2~4P#Zq;{63r zZ}97Sb1xLfb2hHAdM0Bj#U!R&fWTX!pb`@1hGG*jWLJ(pr4c3%QxHq-`{1$P&Xzq8 i^pDx={)nH4{ sampleNames) + IReadOnlyList sampleNames, + IReadOnlyList names) { LegacyId = legacyId; Name = name; NameCount = nameCount; SampleNames = sampleNames; + Names = names; } public string LegacyId { get; } public string Name { get; } public int NameCount { get; } public IReadOnlyList SampleNames { get; } + public IReadOnlyList Names { get; } } } diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeCatalogStore.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeCatalogStore.cs index 99830826e..d0bf9d566 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeCatalogStore.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeCatalogStore.cs @@ -218,8 +218,9 @@ namespace GameCult.Aetheria.State.Unity var legacyId = ReadFieldString(ref reader, fields, 1); var nameCount = ReadFieldInt32(ref reader, fields, 2); var sampleNames = ReadFieldStringArray(ref reader, fields, 3); - SkipRemaining(ref reader, fields, 4); - return new AetheriaRuntimeNameFile(legacyId, name, nameCount, sampleNames); + var names = ReadFieldStringArray(ref reader, fields, 4); + SkipRemaining(ref reader, fields, 5); + return new AetheriaRuntimeNameFile(legacyId, name, nameCount, sampleNames, names); } private static string ReadFieldString(ref MessagePackReader reader, int fields, int index) diff --git a/docs/aetheria-perfect-machine-map.md b/docs/aetheria-perfect-machine-map.md index 6fcebb392..85177a7b5 100644 --- a/docs/aetheria-perfect-machine-map.md +++ b/docs/aetheria-perfect-machine-map.md @@ -116,8 +116,11 @@ legacy catalog cache, and legacy UI paths should be migration-only or deleted. description from key 3, name-file and boss-hull legacy IDs, influence distance, allegiance count, and music bank IDs. Empty legacy GUID references are imported as absent links rather than as `Guid.Empty` catalog IDs. - `Aetheria.State` now owns the canonical legacy-ID record key mapping for - migrated item, corporation, and name-file documents. + Name-file documents are now `aetheria.name_file.v2` records and carry both + sample names for compact surfaces and the full legacy name array for future + `Galaxy`/Markov name generation cutover. `Aetheria.State` now owns the + canonical legacy-ID record key mapping for migrated item, corporation, and + name-file documents. - `AetheriaCatalogSnapshot` is the typed catalog read surface over materialized `.cc` records. It exposes trade-item, manufacturer, corporation prefix, and corporation name-file queries, plus equipment, hardpoint, and behavior @@ -152,17 +155,18 @@ legacy catalog cache, and legacy UI paths should be migration-only or deleted. evolution can rematerialize typed state instead of being blocked by stale embedded schema catalogs. `Aetheria.State.Verify` opens the materialized file and checks that migration - ledger counts match actual typed catalog records, that the legacy-ID lookup - API resolves migrated item, corporation, and name-file documents, and that - the expanded typed catalog facts, typed catalog snapshot queries, and typed - Eve catalog surface are present in the `.cc` store. The current verifier sees - 52 shaped item masks, 5 interior masks, 3 hardpoint-host hulls, 22 - hardpoints, 39 behavior-bearing item definitions, 65 behavior payloads, 661 - behavior fields, 18 behavior-side legacy-ID references, 51 hardpoint-tagged - equipment items, 3 hull items, and 18 weapon-facet item definitions. Legacy - content includes at least one overhanging hardpoint (`LonginusX`); migration - verification preserves that payload and does not convert content repair into - mapper authority. + ledger counts match actual typed catalog records, that name-file v2 records + carry their full name arrays, that the legacy-ID lookup API resolves migrated + item, corporation, and name-file documents, and that the expanded typed + catalog facts, typed catalog snapshot queries, and typed Eve catalog surface + are present in the `.cc` store. The current verifier sees 52 shaped item + masks, 5 interior masks, 3 hardpoint-host hulls, 22 hardpoints, 39 + behavior-bearing item definitions, 65 behavior payloads, 661 behavior fields, + 18 behavior-side legacy-ID references, 51 hardpoint-tagged equipment items, 3 + hull items, and 18 weapon-facet item definitions. Legacy content includes at + least one overhanging hardpoint (`LonginusX`); migration verification + preserves that payload and does not convert content repair into mapper + authority. - `.voidbot/state/aetheria.cc` is the repo Persona state witness. Aetheria is not registered as a VoidBot Discord identity yet, so mutations use the repo-local `void-self-state.mjs apply-operation` typed boundary rather than @@ -348,6 +352,9 @@ First Aetheria surfaces to publish: - Done: implement a bounded raw payload mapper that converts stable old `DatabaseEntry` union fields into typed item/faction/name-file catalog documents without making `Aetheria.State` depend on Unity's legacy model. + - Done: promote typed name files to `aetheria.name_file.v2` with full name + arrays, so future `Galaxy` name generation has a Verse-owned replacement + for legacy `NameFile.Names`. - Done: expand the stable item mapper to include equipment facets and behavior kind fingerprints needed by future Unity/Eve catalog consumers. - Done: import full item shape-cell masks into typed catalog documents and