neon-sprawl/content
VinPropane ee5e1a0caf NEO-100: Add encounter and reward-table catalogs with CI validation
Ship frozen prototype_combat_pocket spine (schemas, JSON catalogs, validate_content
gates) and update E5.M3, CT.M1, and alignment docs for E5M3-01 completion.
2026-05-30 19:35:02 -04:00
..
abilities NEO-98: Set melee strike to 2 m and elite slam to 4 m. 2026-05-30 17:55:10 -04:00
encounters NEO-100: Add encounter and reward-table catalogs with CI validation 2026-05-30 19:35:02 -04:00
items NEO-50: Add item-def schema, prototype catalog, and CI gates. 2026-05-17 21:25:06 -04:00
mastery NEO-45: address code review doc alignment and CI nits. 2026-05-16 20:05:51 -04:00
npc-behaviors NEO-98: Resolve NPC telegraph hits via attack ability maxRange. 2026-05-30 17:49:21 -04:00
recipes NEO-65: Add prototype recipe catalog, schemas, and CI gates. 2026-05-24 16:21:44 -04:00
resource-nodes NEO-57: add prototype resource node catalogs, schemas, and CI gates 2026-05-24 13:49:47 -04:00
reward-tables NEO-100: Add encounter and reward-table catalogs with CI validation 2026-05-30 19:35:02 -04:00
schemas NEO-100: Add encounter and reward-table catalogs with CI validation 2026-05-30 19:35:02 -04:00
skills NEO-39: add data-driven level curve with startup schema validation 2026-05-06 23:10:06 -04:00
README.md chore: Decompose E5.M3 prototype backlog (NEO-100–NEO-111) 2026-05-30 18:38:18 -04:00

README.md

Content data

Data-driven definitions (skills, items, recipes, quests) validated in CI with JSON Schema.

Path Purpose
schemas/ JSON Schema files (*.schema.json)
skills/ Skill catalogs; each row matches schemas/skill-def.schema.jsonstable id, allowedXpSourceKinds for E2.M1 / E2.M2
mastery/ Mastery catalogs; each file matches schemas/mastery-catalog.schema.jsonstable branchId / perkId, tier gates via skill level (E2.M3)
items/ Item catalogs; each row matches schemas/item-def.schema.jsonstable id, stackMax, inventorySlotKind for E3.M3
recipes/ Recipe catalogs; each row matches schemas/recipe-def.schema.jsonstable id, recipeKind, requiredSkillId, inputs/outputs for E3.M2
abilities/ Combat ability catalogs; each row matches schemas/ability-def.schema.jsonstable id, baseDamage, cooldownSeconds for E5.M1
npc-behaviors/ NPC behavior archetype catalogs; each row matches schemas/npc-behavior-def.schema.jsonstable id, archetypeKind, aggro/leash radii, telegraph + attack timings for E5.M2
encounters/ Encounter templates; each row matches schemas/encounter-def.schema.jsonstable id, completion criteria, rewardTableId for E5.M3
reward-tables/ Reward table catalogs; each row matches schemas/reward-table.schema.jsonstable id, fixedGrants referencing frozen item ids for E5.M3
resource-nodes/ Resource node + yield catalogs; node rows match schemas/resource-node-def.schema.json, yield rows match schemas/resource-yield-row.schema.jsonstable nodeDefId, gatherLens, maxGathers for E3.M1

Prototype Slice 1 (NEO-33): CI expects exactly three skill rows with ids salvage, refine, intrusion (gather + process + tech). Each row must declare allowedXpSourceKinds (non-empty); see E2.M1 — Designer note: allowedXpSourceKinds for what each kind means for grant wiring.

Prototype Slice 2 — resource nodes (NEO-57): CI expects exactly four nodeDefId values aligned to E3.M1 gather lens freeze — one row per gatherLens; exactly one yield row per node referencing scrap_metal_bulk only. Do not rename nodeDefId after ship. See E3M1-prototype-backlog.md and NEO-57 plan.

Prototype Slice 1 — items (NEO-50): CI expects exactly six item rows with ids scrap_metal_bulk, refined_plate_stock, field_stim_mk0, survey_drone_kit, contract_handoff_token, prototype_armor_shell — one row per prototypeRole (material through equip_stub). Do not rename ids after ship—change displayName only. See E3.M3 — Designer note and freeze table.

Prototype Slice 3 — recipes (E3M2-01): CI expects exactly eight recipe ids aligned to E3.M2 recipe freeze — at least one process and one make row; all requiredSkillId values refine; every input/output itemId from the frozen item catalog. Do not rename recipe id after ship. See E3M2-prototype-backlog.md.

Prototype E5 Slice 1 — abilities (NEO-76): CI expects exactly four ability ids aligned to E5.M1 ability freezeprototype_pulse, prototype_guard, prototype_dash, prototype_burst. Do not rename ability id after ship—change displayName only. See E5M1-prototype-backlog.md and NEO-76 plan.

Prototype E5 Slice 2 — NPC behaviors (NEO-87): CI expects exactly three npc behavior ids aligned to E5.M2 behavior freezeprototype_melee_pressure, prototype_ranged_control, prototype_elite_mini_boss. Each row requires leashRadius > aggroRadius. Do not rename behavior id after ship—change displayName only. See E5M2-prototype-backlog.md and NEO-87 plan.

Prototype E5 Slice 3 — encounters + rewards (NEO-100): CI expects exactly one encounter id prototype_combat_pocket and one reward table id prototype_combat_pocket_clear aligned to E5.M3 encounter freeze. requiredNpcInstanceIds must match the three E5.M2 NPC instance ids; fixedGrants reference frozen item ids only. Do not rename ids after ship—change displayName only. See E5M3-prototype-backlog.md.

Prototype Slice 4 (NEO-45): CI expects exactly one MasteryTrack for salvage only (refine / intrusion have no mastery rows yet). Tier 1 @ skill level 2 is a mutually exclusive branch pick (scrap_efficiency vs bulk_haul) with no perks; tier 2 @ level 4 unlocks one perk per branch path. Do not rename branchId / perkId after ship—change displayName only. See E2.M3 — Designer note and freeze table.

Server load path and hot-reload policy are TBD; keep files versioned here as the source of truth.

Validate locally (same as PR gate):

pip install -r scripts/requirements-content.txt
python scripts/validate_content.py
python scripts/check_decomposition_language.py