Transmission #065: PDD — interactable selection tags

Opened a Prompt-Driven Development project for world inspect / selection tags: mobile screen-tap on melee-attackable targets shows a compact tag (health when applicable, name, always-visible level, race × class on NPCs); tap tag or tap the same target again opens a detail modal; tap empty world or target death clears selection. Planning lives under .agents/planning/2026-05-27-interactable-selection-tags/.

Preliminary research

Codebase pass documented melee target chain (PlayerCombat), missing metadata (mob identity, OSM building labels, Item.components not cached), and UI precedents (FloatingDamageNumberUI, QuestBoardModalUI) in research/.

Requirements + design

Eighteen clarification answers in idea-honing.md: select-only tap (no damage), procedural NPC name/race/class/loadout at spawn, OSM building names, harvestable composition from catalog, quest boards move to inspect detail (melee no longer auto-opens modal), mobile-only v1.

Detailed design in design/detailed-design.md: SelectionManager + ISelectionInspectable adapters, screen-space tag follower (canvas sort 26), detail modal (sort 30), new components WorldNpcIdentity, HarvestableInspectMetadata, BuildingDisplayInfo, and HelerionGameData component caching.

Implementation

Shipped mobile screen-tap inspect under Assets/Scripts/Selection/: SelectionManager, touch input, compact tag UI, detail modal with quest offers, and adapters for NPCs, harvestables, buildings, and quest boards. Mobs get procedural identity/loadout at spawn (WorldNpcIdentityGenerator); buildings persist OSM labels via BuildingDisplayInfo; catalog Item.components cache powers harvestable “Made of” sections. Melee and fireball no longer auto-open quest boards — inspect detail handles contracts. Editor tests: BuildingLabelFormatterTests, WorldNpcIdentityGeneratorTests.

Fix: PlayerCombat StatId import

Restored using Helerion.Progression; in PlayerCombat.cs after quest-board melee removal dropped the namespace — StatId.Punches and PlayerStatTrackerProvider still require it.