vagabond-rpg-foundryvtt/PROJECT_ROADMAP.json
Cal Corum 8afcf8c07b Implement class feature automation system
- Add _onCreate/_preDelete lifecycle methods to VagabondItem for automatic
  feature application and cleanup when classes are added/removed
- Add updateActor hook to apply new features when character level increases
- Implement applyClassFeatures() with idempotency to prevent duplicate effects
- Add _applyClassProgression() for mana/castingMax from class progression
- Add _applyTrainedSkills() to mark class skills as trained
- Fix getCastingMaxAtLevel() to sum values instead of taking maximum
- Add comprehensive test suite (10 tests) covering unit and integration tests

Effects are tagged with vagabond flags for easy filtering and management.
Methods calculate progression values directly for robustness with embedded items.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 21:19:26 -06:00

1039 lines
37 KiB
JSON

{
"project": {
"name": "Vagabond RPG - Foundry VTT System",
"description": "Complete Foundry VTT v13 system implementation for Vagabond RPG (Pulp Fantasy TTRPG)",
"repository": "vagabond-rpg-foundryvtt",
"license": "MIT",
"foundry_version": "13",
"created": "2024-12-12",
"status": "in_progress"
},
"phases": [
{
"id": "phase-0",
"name": "Project Foundation",
"description": "Initial setup, tooling, and development environment",
"tasks": [
{
"id": "0.1",
"name": "Create system manifest (system.json)",
"description": "Define system metadata, compatibility, dependencies, and entry points for Foundry VTT",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": []
},
{
"id": "0.2",
"name": "Create project structure",
"description": "Set up directory structure: module/, templates/, styles/, lang/, packs/, assets/",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": []
},
{
"id": "0.3",
"name": "Set up local Foundry dev container",
"description": "Docker Compose for local Foundry instance with hot-reload system mounting",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": []
},
{
"id": "0.4",
"name": "Create README.md",
"description": "Project documentation with setup instructions, development guide, and contribution guidelines",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": []
},
{
"id": "0.5",
"name": "Create .gitignore",
"description": "Ignore node_modules, foundry data, secrets, IDE files",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": []
},
{
"id": "0.6",
"name": "Set up SCSS compilation",
"description": "Build tooling for SCSS to CSS compilation with watch mode",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["0.2"]
},
{
"id": "0.7",
"name": "Create LICENSE file",
"description": "MIT license file",
"completed": true,
"tested": false,
"priority": "medium",
"dependencies": []
},
{
"id": "0.8",
"name": "Create CLAUDE.md",
"description": "AI context file for development assistance",
"completed": true,
"tested": false,
"priority": "medium",
"dependencies": []
}
]
},
{
"id": "phase-1",
"name": "Data Models",
"description": "Define all Actor and Item data structures using Foundry's Data Model system",
"tasks": [
{
"id": "1.1",
"name": "Create base Actor data model",
"description": "Shared fields for all actors: name, img, type, system data container",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["0.1", "0.2"]
},
{
"id": "1.2",
"name": "Create Character (PC) data model",
"description": "Stats (MIT/DEX/AWR/RSN/PRS/LUK), derived values (HP, Speed, Saves, Skill difficulties), level, XP, ancestry, class reference",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["1.1"]
},
{
"id": "1.3",
"name": "Create NPC/Monster data model",
"description": "HD, HP, TL, Zone, Morale, Appearing, Armor, Immune, Weak, Actions array, Abilities array",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["1.1"]
},
{
"id": "1.4",
"name": "Create dynamic resources system",
"description": "Extensible resource tracker: HP, Mana, Luck, Fatigue, Studied Dice, custom resources with current/max/bonus fields",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["1.2"]
},
{
"id": "1.5",
"name": "Create Skills data structure",
"description": "12 skills with associated stat, trained boolean, difficulty calculation, custom crit threshold",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["1.2"]
},
{
"id": "1.6",
"name": "Create base Item data model",
"description": "Shared fields for all items: name, img, type, system data container, description",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["0.1", "0.2"]
},
{
"id": "1.7",
"name": "Create Ancestry item data model",
"description": "Being type, size, traits array with name/description pairs",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["1.6"]
},
{
"id": "1.8",
"name": "Create Class item data model",
"description": "Key stat, action style, zone, training grants, starting pack, progression table (level -> features/mana/spells), feature definitions",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["1.6"]
},
{
"id": "1.9",
"name": "Create Spell item data model",
"description": "Damage type, base effect, crit effect, valid delivery types, duration options, mana cost formula components",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["1.6"]
},
{
"id": "1.10",
"name": "Create Perk item data model",
"description": "Prerequisites (stat requirements, training requirements, spell requirements), full description, mechanical effects",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["1.6"]
},
{
"id": "1.11",
"name": "Create Weapon item data model",
"description": "Damage dice, grip type (1H/2H/Versatile), properties (Finesse, Thrown, Cleave, etc.), attack skill, slot cost, value",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["1.6"]
},
{
"id": "1.12",
"name": "Create Armor item data model",
"description": "Armor value, type (Light/Heavy/Shield), slot cost, value, dodge penalty flag",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["1.6"]
},
{
"id": "1.13",
"name": "Create Equipment item data model",
"description": "Generic items: slot cost, value, description, quantity, consumable flag",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["1.6"]
},
{
"id": "1.14",
"name": "Create Feature item data model",
"description": "Class features as separate items: source class, level gained, description, mechanical effects, passive vs active",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["1.6"]
},
{
"id": "1.15",
"name": "Create Active Effects integration",
"description": "System for items (classes, perks, features) to modify actor stats, crit thresholds, resources",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["1.2", "1.8", "1.10", "1.14"]
}
]
},
{
"id": "phase-2",
"name": "Core System Logic",
"description": "JavaScript modules for game mechanics, rolls, and calculations",
"tasks": [
{
"id": "2.1",
"name": "Create main system entry point (vagabond.mjs)",
"description": "System initialization, hook registration, CONFIG setup, document class registration",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["1.1", "1.6"]
},
{
"id": "2.2",
"name": "Implement VagabondActor class",
"description": "Extended Actor with prepareData for derived values calculation (HP, Speed, Saves, Skill difficulties)",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["2.1", "1.2", "1.3"]
},
{
"id": "2.3",
"name": "Implement VagabondItem class",
"description": "Extended Item with type-specific preparation and chat card generation",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["2.1", "1.6"]
},
{
"id": "2.4",
"name": "Create dice rolling module",
"description": "Core roll functions: d20 checks, damage rolls, exploding dice (d6!), countdown dice, favor/hinder modifiers",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["2.1"]
},
{
"id": "2.5",
"name": "Implement skill check system",
"description": "Roll dialog with skill selection, favor/hinder toggles, automatic difficulty calculation, crit threshold display",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["2.2", "2.4"],
"notes": "Implemented with ApplicationV2, favor/hinder via Active Effects flags, FavorHinderDebug panel for testing"
},
{
"id": "2.6",
"name": "Implement attack roll system",
"description": "Weapon attack rolls with stat selection, damage calculation, crit bonus damage, Block/Dodge prompts for targets",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["2.4", "2.5", "1.11"],
"notes": "AttackRollDialog with weapon selection, damage roll on hit, crit doubles dice. Block/Dodge prompts deferred to Task 7.8"
},
{
"id": "2.7",
"name": "Implement save roll system",
"description": "Reflex/Endure/Will saves with correct stat combinations, favor/hinder, crit detection",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["2.4", "2.5"],
"notes": "SaveRollDialog with save type selection, Block/Dodge defense options. Uses {{this.variable}} pattern for Handlebars context."
},
{
"id": "2.8",
"name": "Implement spell casting system",
"description": "Dynamic spell dialog: select damage dice, delivery type, duration; auto-calculate mana cost; track focus state",
"completed": true,
"tested": false,
"priority": "critical",
"dependencies": ["2.4", "1.9"],
"notes": "SpellCastDialog with damage/effect toggle, delivery/duration selectors, live mana cost using rulebook formula. Focus tracking on successful cast."
},
{
"id": "2.9",
"name": "Implement crit threshold modifier system",
"description": "Per-skill and per-action crit thresholds that can be modified by Active Effects from classes/perks/features",
"completed": true,
"tested": true,
"priority": "high",
"dependencies": ["2.5", "1.15"]
},
{
"id": "2.10",
"name": "Implement resource management",
"description": "HP damage/healing, Mana spending/recovery, Luck pool, Fatigue accumulation with death trigger at 5",
"completed": true,
"tested": true,
"priority": "high",
"dependencies": ["2.2", "1.4"]
},
{
"id": "2.11",
"name": "Implement inventory slot tracking",
"description": "Calculate slots used from equipped items, max slots from Might, over-capacity warnings",
"completed": true,
"tested": true,
"priority": "high",
"dependencies": ["2.2", "1.11", "1.12", "1.13"]
},
{
"id": "2.12",
"name": "Implement class feature automation",
"description": "When class item added to character, apply appropriate Active Effects for current level; update on level change",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["2.2", "2.3", "1.8", "1.15"]
},
{
"id": "2.13",
"name": "Implement morale check system (NPC)",
"description": "2d6 vs Morale roll, triggered manually or via hooks on death/half HP",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["2.4", "1.3"]
},
{
"id": "2.14",
"name": "Implement zone AI hints (NPC)",
"description": "Display suggested behavior based on Zone (Frontline/Midline/Backline) and HP status",
"completed": false,
"tested": false,
"priority": "low",
"dependencies": ["1.3"]
}
]
},
{
"id": "phase-3",
"name": "Actor Sheets (UI)",
"description": "Handlebars templates and sheet classes for Actor display and interaction",
"tasks": [
{
"id": "3.1",
"name": "Create base VagabondActorSheet class",
"description": "Extended ActorSheet with common methods, tab handling, drag-drop, context menus",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["2.2"]
},
{
"id": "3.2",
"name": "Design Character sheet layout (HTML/Handlebars)",
"description": "Match official Hero Record: Stats column, HP/Armor/Fatigue, Speed section, Saves, Skills grid, Attacks, Inventory, Abilities, Magic",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["3.1"]
},
{
"id": "3.3",
"name": "Implement Character sheet - Header section",
"description": "Name, Ancestry, Level, Class, XP, Size, Being Type fields",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["3.2"]
},
{
"id": "3.4",
"name": "Implement Character sheet - Stats section",
"description": "Six stats display with large numbers matching official sheet aesthetic",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["3.2"]
},
{
"id": "3.5",
"name": "Implement Character sheet - Combat section",
"description": "HP (current/max), Armor, Fatigue, Speed (base/bonus/crawl/travel), Current Luck",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["3.2"]
},
{
"id": "3.6",
"name": "Implement Character sheet - Saves section",
"description": "Reflex, Endure, Will with calculated difficulties, clickable for rolls",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["3.2", "2.7"]
},
{
"id": "3.7",
"name": "Implement Character sheet - Skills section",
"description": "12 skills grid with trained checkboxes, stat associations, difficulty numbers, clickable for rolls",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["3.2", "2.5"]
},
{
"id": "3.8",
"name": "Implement Character sheet - Attacks section",
"description": "Weapon attack skills (Melee/Brawl/Ranged/Finesse) with difficulties, equipped weapons list with roll buttons",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["3.2", "2.6"]
},
{
"id": "3.9",
"name": "Implement Character sheet - Inventory tab",
"description": "Item list with slots display, wealth tracking (G/S/C), occupied/max/bonus slots, drag-drop support",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["3.2", "2.11"]
},
{
"id": "3.10",
"name": "Implement Character sheet - Abilities tab",
"description": "List of Features, Perks, Ancestry traits; expandable descriptions; usage tracking for limited abilities",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["3.2"]
},
{
"id": "3.11",
"name": "Implement Character sheet - Magic tab",
"description": "Mana (current/max/casting max), known spells list with cast buttons, focus indicator",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["3.2", "2.8"]
},
{
"id": "3.12",
"name": "Implement Character sheet - Biography tab",
"description": "Rich text editor for character background, notes, bonds",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["3.2"]
},
{
"id": "3.13",
"name": "Create NPC/Monster sheet layout",
"description": "Compact stat block format: HD, HP, TL, Zone, Morale, Armor, Immunities, Weaknesses, Actions, Abilities",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["3.1", "1.3"]
},
{
"id": "3.14",
"name": "Implement NPC sheet - Stat block section",
"description": "Display all combat-relevant stats in traditional TTRPG stat block format",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["3.13"]
},
{
"id": "3.15",
"name": "Implement NPC sheet - Actions section",
"description": "List of attack actions with clickable roll buttons, damage dice display",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["3.13", "2.4"]
},
{
"id": "3.16",
"name": "Implement NPC sheet - Morale button",
"description": "Clickable morale check with result interpretation",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["3.13", "2.13"]
}
]
},
{
"id": "phase-4",
"name": "Item Sheets (UI)",
"description": "Handlebars templates and sheet classes for Item display and editing",
"tasks": [
{
"id": "4.1",
"name": "Create base VagabondItemSheet class",
"description": "Extended ItemSheet with common methods, type-specific tab handling",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["2.3"]
},
{
"id": "4.2",
"name": "Implement Ancestry item sheet",
"description": "Being type dropdown, size dropdown, traits editor (add/remove trait entries)",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["4.1", "1.7"]
},
{
"id": "4.3",
"name": "Implement Class item sheet",
"description": "Key stat, training grants, progression table editor, feature definitions",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["4.1", "1.8"]
},
{
"id": "4.4",
"name": "Implement Spell item sheet",
"description": "Damage type, effect text, crit effect, delivery options checkboxes, cost formula display",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["4.1", "1.9"]
},
{
"id": "4.5",
"name": "Implement Perk item sheet",
"description": "Prerequisites editor (stat/training/spell requirements), description, effects",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["4.1", "1.10"]
},
{
"id": "4.6",
"name": "Implement Weapon item sheet",
"description": "Damage dice selector, grip type, properties checkboxes, attack skill dropdown, value/slots",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["4.1", "1.11"]
},
{
"id": "4.7",
"name": "Implement Armor item sheet",
"description": "Armor value, type dropdown, dodge penalty checkbox, value/slots",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["4.1", "1.12"]
},
{
"id": "4.8",
"name": "Implement Equipment item sheet",
"description": "Generic item fields: description, quantity, slots, value, consumable flag",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["4.1", "1.13"]
},
{
"id": "4.9",
"name": "Implement Feature item sheet",
"description": "Source class, level requirement, description, passive/active toggle, effects editor",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["4.1", "1.14"]
}
]
},
{
"id": "phase-5",
"name": "Styling & Theming",
"description": "SCSS styles for parchment theme with accessibility considerations",
"tasks": [
{
"id": "5.1",
"name": "Create SCSS architecture",
"description": "Variables file, mixins, partials structure for maintainable styles",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["0.6"]
},
{
"id": "5.2",
"name": "Define color palette",
"description": "Parchment background tones, high-contrast text colors, accent colors; WCAG AA compliant",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["5.1"]
},
{
"id": "5.3",
"name": "Create typography system",
"description": "Font selections for headers (stylized) and body (readable), size scale, line heights",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["5.1"]
},
{
"id": "5.4",
"name": "Style Character sheet",
"description": "Match official Hero Record aesthetic: stat column layout, bordered sections, parchment background",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["5.1", "5.2", "5.3", "3.2"]
},
{
"id": "5.5",
"name": "Style NPC sheet",
"description": "Clean stat block format, readable at small sizes, collapsible sections",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["5.1", "5.2", "5.3", "3.13"]
},
{
"id": "5.6",
"name": "Style Item sheets",
"description": "Consistent look across all item types, clear form layouts",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["5.1", "5.2", "5.3", "4.1"]
},
{
"id": "5.7",
"name": "Style roll dialogs",
"description": "Favor/Hinder toggles, modifier inputs, clear roll button",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["5.1", "5.2"]
},
{
"id": "5.8",
"name": "Style chat cards",
"description": "Roll results, spell casts, attack outcomes in themed chat messages",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["5.1", "5.2"]
},
{
"id": "5.9",
"name": "Accessibility audit",
"description": "Verify color contrast ratios, focus indicators, screen reader compatibility",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["5.4", "5.5", "5.6"]
}
]
},
{
"id": "phase-6",
"name": "Compendium Content",
"description": "Pre-populated compendium packs with all Vagabond RPG content",
"tasks": [
{
"id": "6.1",
"name": "Create compendium pack definitions",
"description": "Define packs in system.json: ancestries, classes, spells, perks, weapons, armor, equipment, monsters",
"completed": true,
"tested": false,
"priority": "high",
"dependencies": ["0.1"]
},
{
"id": "6.2",
"name": "Populate Ancestries compendium",
"description": "Human, Dwarf, Elf, Halfling, Draken, Goblin, Orc with full traits",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["6.1", "1.7"]
},
{
"id": "6.3",
"name": "Populate Classes compendium",
"description": "All 18 classes with complete progression tables and features",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["6.1", "1.8"]
},
{
"id": "6.4",
"name": "Populate Spells compendium",
"description": "All 55+ spells with damage types, effects, crit bonuses, delivery/duration options",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["6.1", "1.9"]
},
{
"id": "6.5",
"name": "Populate Perks compendium",
"description": "All 90+ perks with prerequisites and full descriptions",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["6.1", "1.10"]
},
{
"id": "6.6",
"name": "Populate Weapons compendium",
"description": "Standard weapons from equipment tables with stats and properties",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["6.1", "1.11"]
},
{
"id": "6.7",
"name": "Populate Armor compendium",
"description": "Standard armor options from equipment tables",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["6.1", "1.12"]
},
{
"id": "6.8",
"name": "Populate Equipment compendium",
"description": "Adventuring gear, alchemical items, tools from equipment tables",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["6.1", "1.13"]
},
{
"id": "6.9",
"name": "Populate Bestiary compendium",
"description": "Monsters from bestiary with full stat blocks (prioritize common encounters)",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["6.1", "1.3"]
}
]
},
{
"id": "phase-7",
"name": "Roll Dialogs & Chat",
"description": "Interactive roll configuration dialogs and rich chat message output",
"tasks": [
{
"id": "7.1",
"name": "Create Skill Check dialog",
"description": "Select skill, show difficulty/crit threshold, favor/hinder toggles, situational modifier input",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["2.5"]
},
{
"id": "7.2",
"name": "Create Attack Roll dialog",
"description": "Weapon selection, attack skill, favor/hinder, show crit threshold, target selection",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["2.6"]
},
{
"id": "7.3",
"name": "Create Save Roll dialog",
"description": "Save type selection (or auto from context), Block/Dodge choice for defense, favor/hinder",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["2.7"]
},
{
"id": "7.4",
"name": "Create Spell Cast dialog",
"description": "Damage dice selector (+Mana), delivery type dropdown with cost display, duration selector, total mana cost, cast skill",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["2.8"]
},
{
"id": "7.5",
"name": "Create Damage Roll dialog",
"description": "Dice pool display, exploding toggle, crit bonus indicator, target HP context",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["2.4"]
},
{
"id": "7.6",
"name": "Create roll result chat cards",
"description": "Rich chat output: roll formula, result, success/fail/crit indicator, damage if applicable",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["2.4"]
},
{
"id": "7.7",
"name": "Create spell cast chat cards",
"description": "Spell name, effect description, mana spent, damage if applicable, duration/focus indicator",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["2.8", "7.6"]
},
{
"id": "7.8",
"name": "Create defense prompt system",
"description": "When attack targets a token, prompt defender with Block/Dodge buttons in chat",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["7.2", "7.3"]
}
]
},
{
"id": "phase-8",
"name": "Localization",
"description": "Internationalization support with English as base language",
"tasks": [
{
"id": "8.1",
"name": "Create English language file",
"description": "All UI strings, stat names, skill names, item type names in en.json",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["3.2", "4.1"]
},
{
"id": "8.2",
"name": "Implement localization in templates",
"description": "Replace hardcoded strings with {{localize}} calls throughout all Handlebars templates",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["8.1"]
}
]
},
{
"id": "phase-9",
"name": "Testing & Polish",
"description": "Quality assurance, bug fixes, and user experience refinements",
"tasks": [
{
"id": "9.1",
"name": "Test character creation workflow",
"description": "Create character from scratch: set stats, add ancestry, add class, verify derived values",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["3.2", "6.2", "6.3"]
},
{
"id": "9.2",
"name": "Test skill check workflow",
"description": "Roll all 12 skills with various favor/hinder combinations, verify difficulties",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["7.1"]
},
{
"id": "9.3",
"name": "Test combat workflow",
"description": "Full combat round: attacks, saves, damage, HP tracking, death at 0 HP",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["7.2", "7.3", "7.5"]
},
{
"id": "9.4",
"name": "Test spell casting workflow",
"description": "Cast spells with various delivery/duration/damage combinations, verify mana costs",
"completed": false,
"tested": false,
"priority": "critical",
"dependencies": ["7.4"]
},
{
"id": "9.5",
"name": "Test leveling workflow",
"description": "Level up character: HP increase, feature gains, perk at odd levels, stat at even levels",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["2.12"]
},
{
"id": "9.6",
"name": "Test compendium import",
"description": "Drag items from all compendiums to character, verify data integrity",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["6.2", "6.3", "6.4", "6.5"]
},
{
"id": "9.7",
"name": "Test NPC/Monster workflow",
"description": "Create monster, run attacks, trigger morale check",
"completed": false,
"tested": false,
"priority": "high",
"dependencies": ["3.13", "6.9"]
},
{
"id": "9.8",
"name": "Cross-browser testing",
"description": "Verify functionality in Chrome, Firefox, Safari",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["9.1", "9.2", "9.3", "9.4"]
},
{
"id": "9.9",
"name": "Performance optimization",
"description": "Profile sheet rendering, optimize slow operations",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["9.1"]
}
]
},
{
"id": "phase-10",
"name": "Documentation & Release",
"description": "User documentation and package preparation for distribution",
"tasks": [
{
"id": "10.1",
"name": "Write user guide",
"description": "How to create characters, use sheets, cast spells, run combat",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["9.1", "9.2", "9.3", "9.4"]
},
{
"id": "10.2",
"name": "Write GM guide",
"description": "How to create NPCs/monsters, use compendiums, run encounters",
"completed": false,
"tested": false,
"priority": "medium",
"dependencies": ["9.7"]
},
{
"id": "10.3",
"name": "Create changelog",
"description": "Version history with features and fixes",
"completed": false,
"tested": false,
"priority": "low",
"dependencies": []
},
{
"id": "10.4",
"name": "Prepare package for Foundry repository",
"description": "Verify manifest, create release bundle, test fresh installation",
"completed": false,
"tested": false,
"priority": "low",
"dependencies": ["10.1", "10.2"]
}
]
}
],
"summary": {
"total_tasks": 98,
"phases": 11,
"critical_path": [
"0.1 -> 1.1 -> 2.1 -> 2.2 -> 3.1 -> 3.2 -> 7.1 -> 9.2",
"0.1 -> 1.6 -> 1.9 -> 2.8 -> 7.4 -> 9.4"
],
"estimated_complexity": "large",
"notes": [
"Phase 0-2 must complete before meaningful UI work",
"Phases 3-4 can proceed in parallel once data models exist",
"Phase 5 styling can be iterated throughout",
"Phase 6 content population can happen incrementally",
"Phase 7 dialogs depend on core mechanics but can be refined iteratively",
"Testing should happen continuously, not just in Phase 9"
]
}
}