mirror of
https://github.com/cliffe/BreakEscape.git
synced 2026-02-21 11:18:08 +00:00
3.4 KiB
3.4 KiB
Quick Start Checklist
Use this checklist to implement the mission metadata feature. Reference IMPLEMENTATION_PLAN.md for detailed code.
Pre-Implementation
- Read and understand
IMPLEMENTATION_PLAN.md - Review existing Mission model (
app/models/break_escape/mission.rb) - Review current seeds (
db/seeds.rb) - Confirm Hacktivity's Cybok model structure (if integrating)
Phase 1: Database Migrations
1.1 Add columns to missions table
rails g migration AddMetadataToBreakEscapeMissions secgen_scenario:string collection:string
Then edit migration to add:
- Default
'default'for collection - Index on collection
Run: rails db:migrate
1.2 Create CyBOK table
rails g migration CreateBreakEscapeCyboks
Edit to match schema in plan (ka, topic, keywords, polymorphic columns).
Run: rails db:migrate
Phase 2: Models
2.1 Create Cybok model
- Create
app/models/break_escape/cybok.rb - Add KA_CODES and CATEGORY_MAPPING constants
- Add helper methods
2.2 Update Mission model
- Add
has_many :break_escape_cyboksassociation - Add conditional Hacktivity association
- Add scopes:
by_collection,collections - Add metadata loading methods
Phase 3: Service Layer
3.1 Create sync service
- Create
app/services/break_escape/cybok_sync_service.rb - Implement
sync_for_missionmethod - Handle dual-mode (standalone vs Hacktivity)
Phase 4: Seeds Update
4.1 Update seeds.rb
- Add mission.json loading logic
- Add CyBOK sync calls
- Add fallback defaults
- Add collection inference for test scenarios
Phase 5: Mission JSON Files
Priority missions (have scenario content):
scenarios/biometric_breach/mission.jsonscenarios/ceo_exfil/mission.jsonscenarios/cybok_heist/mission.json
Secondary (existing scenarios):
scenarios/scenario1/mission.json(collection: testing)scenarios/scenario2/mission.json(collection: testing)scenarios/scenario3/mission.json(collection: testing)scenarios/scenario4/mission.json(collection: testing)
Test scenarios (minimal metadata):
scenarios/npc-*/mission.json(collection: testing)scenarios/test-*/mission.json(collection: testing)
Phase 6: Testing
Standalone mode testing
# Run migrations
rails db:migrate
# Run seeds
rails db:seed
# Verify in console
rails c
BreakEscape::Mission.count
BreakEscape::Mission.first.break_escape_cyboks.count
BreakEscape::Mission.collections
Hacktivity mode testing (if applicable)
rails c
# Check both tables populated
BreakEscape::Mission.first.cyboks.count
::Cybok.where(cybokable_type: 'BreakEscape::Mission').count
Verification Queries
# All missions with CyBOK data
BreakEscape::Mission.joins(:break_escape_cyboks).distinct
# Missions by collection
BreakEscape::Mission.by_collection('testing')
BreakEscape::Mission.by_collection('security_investigations')
# All collections in use
BreakEscape::Mission.collections
# CyBOK entries for a mission
mission = BreakEscape::Mission.find_by(name: 'biometric_breach')
mission.break_escape_cyboks.map { |c| "#{c.ka}: #{c.topic}" }
# Missions by KA code
BreakEscape::Cybok.where(ka: 'AAA').map(&:cybokable).uniq
Rollback Commands (if needed)
# Rollback migrations
rails db:rollback STEP=2
# Reseed with old data
rails db:seed