101 lines
5.9 KiB
Markdown
101 lines
5.9 KiB
Markdown
# Gear namespaces and recoverable legacy records
|
||
|
||
The source runtime distinguishes an item's game namespace from the dungeon that
|
||
produced its source row. `InventoryItem.contentCategory` is `wow`, `rom`, or
|
||
`coa`; it stays optional in the TypeScript contract for legacy callers, while
|
||
new WoW and Runewaker factories explicitly write their own source category.
|
||
Saved character/class identity chooses the expected owner category. A dungeon
|
||
selection cannot change it or relabel another game's gear.
|
||
|
||
## Item and equipment boundaries
|
||
|
||
`lootTypes.ts` exposes an explicit category match and a usability check.
|
||
RoM usability additionally requires a nonempty payload accepted by the existing
|
||
`normalizeRomNativeGearStats` normalizer. This is structural validation, not
|
||
proof of an authenticated item association or authoritative stat ranges.
|
||
Unidentified and foreign records cannot be equipped or contribute active gear.
|
||
Contradictory owner-category hints cannot override the source class category.
|
||
|
||
Owner-aware loot generation and combat grants filter foreign/unusable records.
|
||
An unavailable same-game item pool yields no borrowed gear. Boss-card identity
|
||
continues to use the boss/dungeon source. Native Godot still remaps both loot
|
||
catalogs to its cards-only adapter; this change does not enable ordinary loot.
|
||
The generic Runewaker item catalog has source-tagged records without native
|
||
gear payloads and is not promoted into a playable equipment progression pool.
|
||
|
||
Synthetic equipment scoring and internal training gear remain simulation
|
||
scaffolding. They are not imported live loot. A private training-item identity
|
||
can preserve existing simulator fallback calculations without authorizing a
|
||
persisted or copied record as native RoM gear.
|
||
|
||
## Profile migration and recovery
|
||
|
||
`accountRepository.ts` reads local database versions 1–8 at the existing
|
||
`healer-man.profile-database.v1` key and writes schema 8. A missing item category
|
||
may migrate to `wow` only for an explicit WoW owner; the existing normalized
|
||
numeric item fields and equipment references retain their prior values.
|
||
Missing categories on RoM/CoA records are not guessed from names, IDs or dungeons.
|
||
|
||
Normalized active inventories and assignments contain usable same-game items.
|
||
Rejected legacy records remain in character-local `gearRecovery.items` with
|
||
original item data and a reason (`missing-category`, `foreign-category`, or
|
||
`invalid-native-payload`). `gearRecovery.equipment` retains former owner/slot/
|
||
instance references. Repeated load/cloud normalization merges recovery without
|
||
multiplying it, and ordinary gear updates preserve the existing recovery.
|
||
This schema retains data for a later explicit recovery operation; it does not
|
||
provide a recovery UI or invent a replacement item.
|
||
|
||
Inventory/equipment mutations reject foreign or unusable incoming gear before
|
||
writing. Rejected mutations leave stored bytes unchanged. Other profiles and
|
||
owners retain separate inventories and recovery. Cloud serialization carries
|
||
full profile rows, and hydration queues a save when namespace/recovery migration
|
||
changes the roster; existing boss-card checkpoint and session-generation behavior
|
||
remain separate.
|
||
|
||
## Native integration and remaining scope
|
||
|
||
Shared source issue [#9](https://git.whoagland.com/phenom/healer-man/issues/9)
|
||
owns the source guards and profile schema. Native checkpoint
|
||
[#292](https://git.whoagland.com/Codex/healer-man-godot/issues/292) owns reviewed
|
||
source pins, bridge regressions and installation. Parent native
|
||
[#124](https://git.whoagland.com/Codex/healer-man-godot/issues/124) remains open:
|
||
native offline profiles currently store identity/appearance and do not persist
|
||
runtime item inventory/loadout or expose recovery. RoM entry retains empty gear.
|
||
Source-backed RoM progression and equipment presentation are not established by
|
||
the source association catalog. CoA is Ascension Conquest of Azeroth, distinct
|
||
from supplementary Chronicles of Arcadia references; no native CoA mode is added.
|
||
|
||
RoM stat formulas, weights and allocations remain under the separate native
|
||
[#123](https://git.whoagland.com/Codex/healer-man-godot/issues/123) claim. The
|
||
existing possibility of non-finite native gear aggregates is tracked separately
|
||
in shared [#10](https://git.whoagland.com/phenom/healer-man/issues/10); namespace
|
||
metadata does not establish numeric bounds or source authenticity.
|
||
|
||
## Verification
|
||
|
||
Validation results and exact inputs are recorded with the owning issues. The
|
||
focused item/equipment suites pass 39 tests; account/migration/cloud suites pass
|
||
35; combat/stat regressions pass 120; selected training/slot checks pass three;
|
||
and the avatar suite passes 56 with verified copied inputs and explicit
|
||
AppleDouble exclusions. The native source-boundary suite passes seven tests,
|
||
and the candidate native bundle builds from the composed, pinned source.
|
||
|
||
The required browser production build currently stops at the missing
|
||
`public/assets/game/manastorm` asset-audit input in the isolated review checkout.
|
||
This is retained as an unmet browser build/visual verification limit; a passing
|
||
native bundle does not certify the browser release. Source TypeScript and
|
||
combined native/card/simulator checks are recorded separately. The repository
|
||
release hygiene check passes. No new GPU capture, live browser roster/dungeon
|
||
check, manual playthrough or listening is claimed.
|
||
|
||
The full source app TypeScript check passes with the original `src` scope and
|
||
task-local exclusions for AppleDouble companion files. All 21 selected native
|
||
cases pass across the unchanged 20-case run and the exact missing-catalog case
|
||
rerun. A serial public-runtime comparison matches all five Ready WoW profiles
|
||
at level 80 with identical clock and random inputs. Those profiles have empty
|
||
gear; equipped-item and migration behavior is covered by the focused source
|
||
suites. Earlier varying mana results came from run-ID-seeded party identities,
|
||
not a gear formula change; the superseded controls remain in the archive.
|
||
|
||
See `gear-namespace-validation.json` for exact source and evidence identities.
|