# Game World Entity Registry
#
# PURPOSE: Single source of truth for all named game-world facts that appear
# in more than one document. Skills check this before writing new content to
# detect cross-doc inconsistencies at authoring time.
#
# RULES:
#   - Only register facts that cross system boundaries. Internal-only facts
#     (a formula used in one GDD only) do NOT need to be registered.
#   - Never delete entries — set status: deprecated instead.
#   - When a value changes: update the value, set revised: to today's date,
#     and add a comment with the old value and which GDD changed it.
#   - source: is the authoritative GDD — the one that "owns" this fact.
#     Other GDDs that reference it list themselves in referenced_by.
#   - When a new GDD references an existing entry, append its path to
#     referenced_by. Do not create a duplicate entry.
#
# WRITTEN BY: /design-system (Phase 5 — after GDD sections are approved)
#             /consistency-check (when resolving conflicts)
# READ BY:    /design-system (Phase 2 — before authoring begins, and after
#               Section C/D writes to conflict-check new entities/formulas)
#             /consistency-check (primary input — grep-first, GDD-second)
#             /review-all-gdds (Phase 1 — baseline for Phase 2 checks)
#             /architecture-review (data structure and interface validation)
#
# SEARCH PATTERNS (for skills using Grep):
#   All entity names:        Grep pattern="^  - name:" path="design/registry/entities.yaml"
#   Specific entity:         Grep pattern="  - name: goblin" path="design/registry/entities.yaml"
#   All items:               Grep pattern="^  - name:" path="design/registry/entities.yaml" (items section)
#   What combat.md owns:     Grep pattern="source: design/gdd/combat.md"
#   What inventory.md uses:  Grep pattern="referenced_by.*inventory"
#   All gold values:          Grep pattern="value_gold:"
#   Deprecated entries:      Grep pattern="status: deprecated"
#
# FORMAT: YAML. Consistent indentation is critical for grep reliability.
#   Sections: entities | items | formulas | constants
#   Each entry: name, status, source, referenced_by[], attributes{}, added, revised

version: 1
last_updated: ""

# ─── ENTITIES ────────────────────────────────────────────────────────────────
# Named game-world objects: enemies, NPCs, characters, factions, bosses.
# Register an entity here when it appears in more than one GDD — e.g., an
# enemy defined in combat.md that also drops items listed in inventory.md.
#
# Required fields: name, status, source, referenced_by, added
# Attribute fields: any key stats that could appear in another GDD
#   (health, damage, drops, faction, etc.)

entities: []

# Example (remove when first real entry is added):
#
# entities:
#   - name: goblin
#     status: active              # active | deprecated
#     source: design/gdd/combat.md
#     referenced_by:
#       - design/gdd/combat.md
#       - design/gdd/inventory.md
#     health: 40
#     damage: 8
#     drops:
#       - item: goblin_arm        # must match an entry in items section
#         qty: 1
#         drop_rate: 0.8          # 0.0–1.0
#     added: 2026-03-26
#     revised: ""


# ─── ITEMS ───────────────────────────────────────────────────────────────────
# Named collectables, equipment, consumables, crafting materials, currency.
# Register an item when its name or value appears in more than one GDD.
#
# Required fields: name, status, source, referenced_by, added
# Attribute fields: value_gold, weight, stackable, category, and any stat
#   modifiers that another system (e.g., economy, crafting) might reference.

items: []

# Example:
#
# items:
#   - name: goblin_arm
#     status: active
#     source: design/gdd/combat.md   # drop defined in combat GDD
#     referenced_by:
#       - design/gdd/combat.md
#       - design/gdd/inventory.md    # inventory GDD lists its weight/stack rules
#       - design/gdd/economy.md      # economy GDD references its sell price
#     value_gold: 5
#     weight: 1
#     stackable: true
#     category: crafting_material
#     added: 2026-03-26
#     revised: ""


# ─── FORMULAS ────────────────────────────────────────────────────────────────
# Named calculations with defined variables and output ranges.
# Register a formula when its output feeds into another system's input,
# or when another GDD references it by name.
#
# Required fields: name, status, source, referenced_by, variables[],
#   output_range[min, max], added
# Optional: expression (the actual formula), notes

formulas: []

# Example:
#
# formulas:
#   - name: damage_formula
#     status: active
#     source: design/gdd/combat.md
#     referenced_by:
#       - design/gdd/combat.md
#       - design/gdd/progression.md   # progression GDD scales attack variable
#     variables:
#       - attack
#       - defense
#       - crit_chance
#       - crit_multiplier
#     output_range: [0, 999]
#     expression: "max(0, attack - defense) * (1 + crit_chance * crit_multiplier)"
#     notes: "Output feeds into health-system damage intake. Min is 0 (armour
#       can absorb all damage). Max is uncapped in formula but tuning knob
#       damage_cap in combat.md clamps at 999."
#     added: 2026-03-26
#     revised: ""


# ─── CONSTANTS ───────────────────────────────────────────────────────────────
# Named numerical values referenced across multiple systems.
# Register a constant when it is defined in one GDD but another GDD must
# agree with it (e.g., gold carry limit defined in economy but checked in
# inventory, or base inventory slots defined in inventory but displayed in HUD).
#
# Required fields: name, status, source, referenced_by, value, unit, added

constants: []

# Example:
#
# constants:
#   - name: gold_carry_limit
#     status: active
#     source: design/gdd/economy.md
#     referenced_by:
#       - design/gdd/economy.md
#       - design/gdd/inventory.md   # inventory enforces the carry limit
#       - design/gdd/ui.md          # HUD displays current gold vs limit
#     value: 9999
#     unit: gold
#     added: 2026-03-26
#     revised: ""
#
#   - name: base_inventory_slots
#     status: active
#     source: design/gdd/inventory.md
#     referenced_by:
#       - design/gdd/inventory.md
#       - design/gdd/progression.md  # progression unlocks additional slots
#     value: 20
#     unit: slots
#     added: 2026-03-26
#     revised: ""
