feat(topdata): anchor autogen lock identity on model path with cutover remap

Lock identity for accessory VFX rows is now the model source path
(dataset:group/subgroup/file.mdl) rather than the config-derived
presentation key. Config-only edits (key_format, delimiter, case,
strip_prefixes) no longer reshuffle row IDs.

Adds: accessoryVisualeffectLockKey, hasKey helper, stale pruning loop
(managed keys with no live entry are freed), and one-time cutover remap
(old config-derived key in historical lock → new model-path key, with
the old key pruned). autogenConsumerManagedLockKeyMatcher is now
config-independent (dataset prefix + first path segment ∈ policy groups).

Updates autogen_manifest_file_test.go and topdata_test.go lock-key
assertions to match the new model-path scheme.
This commit is contained in:
2026-06-21 14:43:38 +02:00
parent 62bc152edc
commit 945204ce50
4 changed files with 179 additions and 19 deletions
+3 -3
View File
@@ -7706,13 +7706,13 @@ func TestApplyAutogenConsumersAugmentsAccessoryVisualeffectsFromLocalOverride(t
t.Fatalf("unexpected head feature defaults: %#v", hair)
}
if _, ok := got[0].LockData["visualeffects:head_accessories/hat/bandana"]; !ok {
if _, ok := got[0].LockData["visualeffects:head_accessories/hat/hfx_bandana.mdl"]; !ok {
t.Fatalf("expected head accessory lock id, got %#v", got[0].LockData)
}
if _, ok := got[0].LockData["visualeffects:head_decorations/laurel/laurel"]; !ok {
if _, ok := got[0].LockData["visualeffects:head_decorations/laurel/hfx_laurel.mdl"]; !ok {
t.Fatalf("expected head decoration lock id, got %#v", got[0].LockData)
}
if _, ok := got[0].LockData["visualeffects:head_features/hair/hair_bangs"]; !ok {
if _, ok := got[0].LockData["visualeffects:head_features/hair/hfx_hair_bangs.mdl"]; !ok {
t.Fatalf("expected head feature lock id, got %#v", got[0].LockData)
}
}