Claude-skill-registry architecture-reference
Deep-dive reference for Shadow Master subsystems including Combat, Matrix, Rigging, Inventory, Contacts, Sync, and Security. Use when working on specific game mechanics or need detailed file locations for a subsystem.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/architecture-reference" ~/.claude/skills/majiayu000-claude-skill-registry-architecture-reference && rm -rf "$T"
skills/data/architecture-reference/SKILL.mdArchitecture Reference
Detailed documentation for Shadow Master's core subsystems. For high-level architecture overview, see CLAUDE.md.
Combat System
Full combat tracking with initiative, actions, and damage resolution.
Key Concepts:
- Combat Session: Tracks all combatants, turn order, and combat state
- Action Resolution: Executes and validates combat actions
- Initiative Tracking: Automatic turn management with initiative passes
- Damage Tracking: Condition monitor integration
Critical Files:
- Combat state management/lib/combat/CombatSessionContext.tsx
- Action execution framework/lib/rules/action-resolution/
- Core execution logicaction-executor.ts
- Action validationaction-validator.ts
- Dice rolling enginedice-engine.ts
- Dice pool constructionpool-builder.ts
- Edge spending actionsedge-actions.ts
- Combat-specific handlers (damage, weapons)combat/
- Combat session API endpoints/app/api/combat/
- Combat UI (tracker, dice pools, quick reference)/components/combat/
Matrix Operations System
Full matrix hacking with overwatch, marks, and program management.
Key Concepts:
- Cyberdecks: Hardware validation and configuration
- Programs: Slot management and allocation
- Overwatch Score: OS tracking and convergence handling
- Marks: Mark placement and tracking system
- Matrix Actions: Action validation with mark requirements
Critical Files:
- Matrix operations/lib/rules/matrix/
- Hardware validationcyberdeck-validator.ts
- Program allocationprogram-validator.ts
- OS calculationoverwatch-calculator.ts
- Session trackingoverwatch-tracker.ts
- Mark managementmark-tracker.ts
- Matrix action validationaction-validator.ts
- Matrix dice poolsdice-pool-calculator.ts
Rigging Control System
Vehicle and drone control for riggers.
Key Concepts:
- VCR (Vehicle Control Rig): Validation and bonuses
- RCC (Rigger Command Console): Drone slaving and command execution
- Drone Networks: Network management and noise handling
- Jump-In Mode: VR mode management for direct control
- Biofeedback: Damage and dumpshock handling
Critical Files:
- Rigging mechanics/lib/rules/rigging/
- VCR validationvcr-validator.ts
- RCC validation and slavingrcc-validator.ts
- Network managementdrone-network.ts
- Drone damage trackingdrone-condition.ts
- Jump-in modejumped-in-manager.ts
- Biofeedback damagebiofeedback-handler.ts
- Signal noise calculationsnoise-calculator.ts
- Rigging action validationaction-validator.ts
- Vehicle/drone dice poolsdice-pool-calculator.ts
Inventory and Equipment System
Equipment state management for gear, weapons, and devices.
Key Concepts:
- Readiness States: ready, holstered, stored, etc.
- Wireless Toggles: Enable/disable for augmentations and devices
- Device Condition: functional, bricked, repaired
- Gear Validation: Availability and rating validation
Critical Files:
- Equipment state management/lib/rules/inventory/state-manager.ts
- Gear availability validation/lib/rules/gear/validation.ts
- Weapon modifications/lib/rules/gear/weapon-customization.ts
Gameplay Utilities
Runtime calculations for combat and tests.
Key Concepts:
- Effective Ratings: Wireless bonuses and matrix damage effects
- Dice Pool Bonuses: Equipment rating bonuses
- Test Thresholds: Detect, analyze, bypass calculations
- Armor Stacking: SR5 Core p.169-170 rules with accessories and encumbrance
- Wound Modifiers: High/Low Pain Tolerance support
Critical Files:
- Core gameplay calculations/lib/rules/gameplay.ts
- Creation constraint validation/lib/rules/constraint-validation.ts
Grunt/NPC System
Pre-built NPC templates for GMs with professional rating tiers.
Key Concepts:
- Professional Rating (PR): PR0 (street rabble) to PR6 (dragon guard)
- Grunt Templates: Pre-configured NPCs with stats, gear, and skills
- Grunt Teams: Groups of NPCs for encounter management
Critical Files:
- Grunt mechanics and validation/lib/rules/grunts.ts
- Template persistence/lib/storage/grunt-templates.ts
- PR0-PR6 template files/data/editions/{editionCode}/grunt-templates/
- Team management UI/app/campaigns/[id]/grunt-teams/
- Grunt team API/app/api/campaigns/[id]/grunt-teams/
Contact Network System
Contact relationships and favor economy for social gameplay.
Key Concepts:
- Contact Network: Relationships with NPCs and their loyalty/connection ratings
- Favor Economy: Tracking favors owed and earned
- Social Capital: Reputation and influence mechanics
Critical Files:
- Contact relationship logic/lib/rules/contact-network.ts
- Favor economy system/lib/rules/favors.ts
- Social interaction mechanics/lib/rules/social-actions.ts
- Contact persistence/lib/storage/contacts.ts
- Favor tracking/lib/storage/favor-ledger.ts
- Contact API/app/api/characters/[characterId]/contacts/
System Synchronization
Character-ruleset drift detection and migration.
Key Concepts:
- Drift Analysis: Detect metatype, skill, quality changes between rulesets
- Legality Validation: Quick sync status checks
- Migration Engine: Generate and execute migration plans
- Sync Audit: Trail of synchronization events
Critical Files:
- Synchronization system/lib/rules/sync/
- Change detectiondrift-analyzer.ts
- Rule compliance checkinglegality-validator.ts
- Migration planning and executionmigration-engine.ts
- Audit trailsync-audit.ts
- React hooks for client-side synchooks.ts
Optional Rules System
Campaign-level rule customization.
Key Concepts:
- Campaign Configuration: Enable/disable optional rules per campaign
- GM Control: Default override support
- Rule Extraction: Pull optional rules from loaded rulesets
- Content Access: Validate content against enabled rules
Critical Files:
- Optional rule management/lib/rules/optional-rules.ts
Data Management Layers
Authentication State (
/lib/auth/AuthProvider.tsx):
- React Context managing user session globally
- Provides
hook for componentsuseAuth() - Session stored in httpOnly cookie
Ruleset State (
/lib/rules/RulesetContext.tsx):
- React Context caching loaded ruleset
- Provides hooks:
,useRuleset()
,useMetatypes()
, etc.useSkills() - Fetches from
/api/rulesets/[editionCode]
Sidebar State (
/lib/contexts/SidebarContext.tsx):
- React Context managing sidebar open/collapsed state globally
- Provides
hook with:useSidebar()
,isOpen
,isCollapsed
,toggle
,closetoggleCollapse - Desktop collapsed state persisted to localStorage (
)shadow-master-sidebar-collapsed-global - Built-in Escape key handler and resize listener for mobile drawer
- Focus trap and accessibility features managed in
AuthenticatedLayout
Local Storage:
- User preferences and UI state (theme, sidebar collapsed state)
- Draft recovery handled server-side via auto-save
File-Based Storage Pattern
Design: JSON files on disk with atomic writes (temp file + rename pattern)
Storage Layer (
/lib/storage/):
Core modules:
- Core utilities:base.ts
,readJsonFile()
,writeJsonFile()ensureDirectory()
- User CRUD operationsusers.ts
- Character CRUD + specialized operations (damage, karma, etc.)characters.ts
- Campaign CRUD operationscampaigns.ts
- Edition and ruleset loadingeditions.ts
Extended modules:
,contacts.ts
- Contact system persistencefavor-ledger.ts
,combat.ts
- Combat session storageaction-history.ts
,grunt-templates.ts
- NPC system storagegrunts.ts
,notifications.ts
- User activity trackingactivity.ts
,audit.ts
- Audit trail logginguser-audit.ts
,ruleset-snapshots.ts
- Ruleset versioningsnapshot-cache.ts
,locations.ts
- Campaign location storagelocations_connections.ts
- Social capital trackingsocial-capital.ts
- Rule violation trackingviolation-record.ts
Storage Structure:
/data ├── /users/{userId}.json ├── /characters/{userId}/{characterId}.json ├── /campaigns/{campaignId}.json └── /editions/{editionCode}/ ├── edition.json ├── core-rulebook.json ├── {sourcebook}.json └── /grunt-templates/ └── pr{0-6}-{name}.json
Important: This is NOT production-scalable. File I/O happens on every request. Future migration to a database is planned.
Security Infrastructure
Rate Limiting (
/lib/security/rate-limit.ts):
- DDoS protection for API endpoints
- Configurable limits per endpoint
Audit Logging (
/lib/security/audit-logger.ts):
- Full audit trail for user actions
- Security event tracking
- Stored via
/lib/storage/audit.ts
Character Authorization (
/lib/auth/character-authorization.ts):
- Granular character access control
- Owner, campaign GM, and viewer permissions
Additional Auth Modules (
/lib/auth/):
- Auth validation logicvalidation.ts
- Auth middlewaremiddleware.ts
- Campaign-specific authorizationcampaign.ts
- Email verification token handlingemail-verification.ts
Admin User Management (
/app/api/users/[id]/):
- DELETE to clear login lockoutslockout/route.ts
- POST to resend verification emails (rate limited)resend-verification/route.ts
- POST to manually verify user emailverify-email/route.ts
- POST/DELETE to suspend/reactivate accountssuspend/route.ts
Admin UI (
/app/users/):
- User list with lockout/verification badges and menu actionsUserTable.tsx
- User details with lockout info and verification controlsUserEditModal.tsx
- User audit trail viewerUserAuditModal.tsx
API Route Patterns
All API routes follow this pattern:
- Extract session from cookie via
getSession() - Validate user exists via
getUserById() - Return 401 if unauthenticated
- Perform user-scoped operation
- Return JSON response
Example:
// /app/api/characters/route.ts export async function GET(request: NextRequest) { const session = await getSession(); if (!session?.userId) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const user = getUserById(session.userId); if (!user) { return NextResponse.json({ error: "User not found" }, { status: 404 }); } const characters = getUserCharacters(session.userId); return NextResponse.json({ characters }); }