You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Package Deltas: support dump-backed catalogue Import Families #311
Category: enhancement Summary: Extend Package Deltas from spells to dump-backed non-spatial catalogues.
Current behavior:
The spell tracer proves the artifact and replay contract. Dump-backed catalogue families remain unavailable to Package authors.
Desired behavior:
Add explicit table ownership, identifier policy, referential checks, base replay, and Package provenance for the non-spatial dump families such as items, loot, gossip, quests, trainers, casts, globals, and spell metadata. Each table documents whether v1 permits partial updates, inserts, or neither.
Acceptance criteria:
Every supported table maps to exactly one Import Family.
Table-specific primary-key and reserved-row rules are enforced.
Reloading one Import Family reapplies only its Package claims.
Non-spatial catalogue claims reach every Shard that owns that catalogue.
Unsupported tables and operations fail during preflight.
Tests cover cross-table references and a conflict in each supported Import Family group.
Out of scope:
Spatial creatures, spawns, game objects, and creature AI
Remaining: the gossip, trainers, casts, globals, and spellmeta families. None has Table variants in crates/lyracore-package-delta/src/schema.rs, a ClaimFamily implementation, or an entry in PACKAGE_DELTA_DUMP_FAMILIES (importer/src/main.rs, currently items/loot/quests only). The dump ETL already imports all of them, so the work is the claim layer only.
The branch feat/311-package-delta-gossip-trainers-casts-globals is a stale placeholder (bit-identical to the quests-loot tip), not work in progress.
Spec and implementation for the remaining families are in progress in this session; per-table claim policy (partial update / insert / neither) will be recorded per the issue's acceptance criteria.
Per-table claim policy for the three families in #401.
Family
Table
Policy
Why
gossip
game_gossip_menu
neither (update only)
Key is a creature template entry. No Package may invent one.
gossip
game_gossip_menu_profile
insert + partial update
menu_id is its own identifier space.
gossip
game_gossip_menu_profile_option
insert + partial update
Surrogate row_id.
gossip
game_gossip_option
insert + partial update
Surrogate row_id; the creature is a claimed column, not the key.
gossip
game_npc_text
insert + partial update
text_id is its own identifier space.
gossip
game_npc_text_slot
insert + partial update
Surrogate id.
globals
game_class_level_stats
neither (update only)
Key names a class and a level the client fixes.
globals
game_level_stats
neither (update only)
Key names a race, class and level the client fixes.
globals
game_start_position
neither (update only)
Key names a race and a class the client fixes.
globals
game_graveyard_zone
insert + partial update
Surrogate row_id.
globals
game_areatrigger_teleport
neither (update only)
Key is an AreaTrigger.dbc trigger id.
globals
game_createinfo_spell
insert + partial update
Surrogate id.
globals
game_createinfo_action
insert + partial update
Surrogate row_id.
globals
game_start_item
out of scope
Two importer passes own it (--dump globals from 1,000,000 up, --dbcCharStartOutfit below). Only the first has a Package Delta stage, so a claim on a --dbc-owned row would be reverted with nothing to reapply it.
spellmeta
game_spell_chain
insert + partial update
Key IS a spell identifier, so an insert must name a Package spell, not a spellmeta identifier.
spellmeta
game_spell_learn
insert + partial update
Surrogate id.
spellmeta
game_spell_proc_event
insert + partial update
Same spell-identifier policy as game_spell_chain.
Package Identifier Ranges: gossip 12,000,000-12,999,999 (all five insertable gossip tables), globals 13,000,000-13,999,999 (the three surrogate-key tables), spellmeta 14,000,000-14,999,999 (game_spell_learn alone).
With #401 every dump-backed non-spatial family named in this issue has a claim schema, a ClaimFamily, and an entry in PACKAGE_DELTA_DUMP_FAMILIES.
PR filed 2026-09-02: #401 adds the gossip, globals and spellmeta claim families with per-table policy (see the table above), reference checks, live-DB coverage in module/tests/package_delta_references.rs, and three glossary entries. With it every dump-backed non-spatial family in the issue has a claim layer; game_start_item stays out because its identifiers below 1,000,000 belong to the --dbc CharStartOutfit pass. Orchestrated by Claude (model claude-fable-5-1) via Claude Code.
Activity
feat(package-delta): add the quests and loot Import Families
feat(package-delta): add the quests and loot Import Families
Mathih13 commentedon Aug 31, 2026
Batch relevance check, 2026-08-31. Partially shipped:
module/tests/package_delta_references.rs.Tablevariants incrates/lyracore-package-delta/src/schema.rs, aClaimFamilyimplementation, or an entry inPACKAGE_DELTA_DUMP_FAMILIES(importer/src/main.rs, currently items/loot/quests only). The dump ETL already imports all of them, so the work is the claim layer only.feat/311-package-delta-gossip-trainers-casts-globalsis a stale placeholder (bit-identical to the quests-loot tip), not work in progress.Spec and implementation for the remaining families are in progress in this session; per-table claim policy (partial update / insert / neither) will be recorded per the issue's acceptance criteria.
Mathih13 commentedon Sep 3, 2026
Per-table claim policy for the three families in #401.
game_gossip_menugame_gossip_menu_profilemenu_idis its own identifier space.game_gossip_menu_profile_optionrow_id.game_gossip_optionrow_id; the creature is a claimed column, not the key.game_npc_texttext_idis its own identifier space.game_npc_text_slotid.game_class_level_statsgame_level_statsgame_start_positiongame_graveyard_zonerow_id.game_areatrigger_teleportAreaTrigger.dbctrigger id.game_createinfo_spellid.game_createinfo_actionrow_id.game_start_item--dumpglobals from 1,000,000 up,--dbcCharStartOutfitbelow). Only the first has a Package Delta stage, so a claim on a--dbc-owned row would be reverted with nothing to reapply it.game_spell_chaingame_spell_learnid.game_spell_proc_eventgame_spell_chain.Package Identifier Ranges: gossip 12,000,000-12,999,999 (all five insertable gossip tables), globals 13,000,000-13,999,999 (the three surrogate-key tables), spellmeta 14,000,000-14,999,999 (
game_spell_learnalone).With #401 every dump-backed non-spatial family named in this issue has a claim schema, a
ClaimFamily, and an entry inPACKAGE_DELTA_DUMP_FAMILIES.Mathih13 commentedon Sep 3, 2026
PR filed 2026-09-02: #401 adds the gossip, globals and spellmeta claim families with per-table policy (see the table above), reference checks, live-DB coverage in
module/tests/package_delta_references.rs, and three glossary entries. With it every dump-backed non-spatial family in the issue has a claim layer;game_start_itemstays out because its identifiers below 1,000,000 belong to the--dbcCharStartOutfit pass. Orchestrated by Claude (model claude-fable-5-1) via Claude Code.