v1.9.0 is a major architectural release — a central session context replaces all fragmented singletons, a shared base class unifies all 11 editors, equipment slot resolution is now synchronous and reliable, and the pack directory scaffold is made static and predictable.

New Features

AreaChange
CoreEditorContext — central shared session state replacing all fragmented singletons (PackContext, EquipmentSlotRegistry, scattered DynamicOptions calls); holds pack name, pack root, equipment slot types, and equipment categories; fires typed events (SLOT_TYPES_CHANGED, EQUIP_CATEGORIES_CHANGED, RESET) that editors receive immediately on the EDT
CoreBaseEditor abstract class — all 11 editors now extend BaseEditor instead of JPanel implements Saveable, Undoable; provides ctx field (EditorContext), isShipSlot() helper with full resolution chain, onContextEvent() with automatic listener cleanup
CoreEquipmentSlotRegistry middleware singletonConcurrentHashMap mapping category IDs to "ship"/"personal"; written synchronously by PackIndexer, ManifestEditor, and EditorContext; eliminates all EDT timing issues around slot type resolution
EquipmentSlot type indicator — live label displayed below the Category combo; green = SHIP (from manifest), blue = PERSONAL (from manifest), amber = inferred; confirms EditorContext registration at a glance
CorePackIndexer.indexManifest() runs synchronously on pack open — manifest is parsed before the async scan so equipment categories and slot types are immediately available; reads the slotType field embedded by ManifestEditor
ManifestEmbeds slotType in core_systems JSON — each category entry now stores "slotType": "ship"/"personal" so the slot type survives across sessions without relying on naming conventions
EquipmentEquipment category combo fully dynamic — no original:* built-in slots pre-seeded; SLOT_TYPES_CHANGED event triggers an immediate Equipment tab refresh when the manifest is saved or loaded
ManifestStatic pack directory scaffold — Create Full Pack Structure creates only 13 universal base directories; all content-specific folders (skill categories, quest groups, recipe types, equipment slots) are created from manifest ticked rows only, not pre-generated
Open PackReference pack tree locked[REF] tab clicks no longer switch the file tree or enable Load into Editor; the tree always shows the edit pack only; eliminates the cross-pack loading corruption bug

Changes

  • deriveSlotValue matches by string not combo index — custom manifest categories return their category ID as equipmentSlot; built-in original:* categories matched by exact string against EQUIPMENT_CATEGORIES
  • All original:* seeds removed from DynamicOptionsCRAFT_TYPES, SKILLS, QUEST_CATEGORIES, SKILL_CATEGORIES, equipment_categories start empty and are populated only from manifest saves or pack file scans
  • Skills section in Manifest starts with no default rows — combat/crafting/science no longer pre-seeded; users add only the categories their pack uses

Fixes

  • Equipment slot type not applying for custom-named categories (e.g. weapon_001) — resolved via EditorContext which all three write paths update synchronously
  • Room and Quest files not loading into editors — PackBrowserEditor switch now handles both room/rooms and quest/quests root keys
  • Memory not cleared on pack close — EditorContext.reset() clears all registries atomically