Claude 145a2f988c Fix Mission 5 critical progression blockers and complete objectives
CRITICAL FIXES - Resolved progression-blocking issues:

**1. Added Missing Items for Room Access:**
- Added rfid_cloner to Kevin's inventory (enables badge cloning mechanic)
- Added Torres Office Keycard to Kevin's inventory (enables Torres office access)
- Added Security Office Keycard to Patricia's inventory (enables her office access)
- Added Server Password Sticky Note to open_office_area (enables server_room access)

**2. Populated Empty Rooms:**

**Patricia's Office:**
- Added Security Incident Log (shows Torres' suspicious activity timeline)
- Added SAFETYNET Mission Brief (full mission context with casualty projections)
- Changed from locked to unlocked (Patricia is mission handler, no need for lock)

**Data Center:**
- Added Exfiltration Upload Terminal (Torres' staging system)
- Added Upload Schedule (shows Operation Schrodinger timeline, $200K payment)
- Added Data Package Manifest (847 GB stolen data, 12-40 projected casualties)

**Open Office Area:**
- Added Server Password Sticky Note (password: quantum2024)
- Added IT Department Notice (mentions Torres' unusual server access)

**3. Updated Objectives - Added Missing Tasks:**

**Investigate Employees (3 new tasks):**
- obtain_rfid_cloner: Obtain RFID badge cloner from Kevin
- obtain_torres_keycard: Get keycard for Torres' office from Kevin
- find_lockpick: Acquire lockpick set from Kevin

**Exploit Infrastructure (2 new tasks):**
- clone_employee_badge: Clone Kevin's employee badge for server access
- find_server_password: Find the server room password
- access_data_center: Access the data center to find exfiltration evidence
- find_upload_schedule: Discover Torres' upload schedule

**Total Objectives:** 5 aims, 27 tasks (was 19 tasks)

**4. Progression Path Now Complete:**

BEFORE (BLOCKED):
Reception → Break Room → Main Office ✓
  ↓
Kevin interview ✓
  ↓
Get tools  (NO RFID CLONER!)
  ↓
Clone badge  (CAN'T CLONE!)
  ↓
Server access  (NO PASSWORD!)
  ↓
Torres office  (NO KEYCARD!)

AFTER (WORKING):
Reception → Break Room → Main Office ✓
  ↓
Kevin interview → Get lockpick, rfid_cloner, Torres keycard ✓
  ↓
Clone Kevin's employee badge ✓
  ↓
Find server password in office area ✓
  ↓
Access server_hallway (cloned badge) ✓
  ↓
Access server_room (password) ✓
  ↓
VM exploitation & flag submission ✓
  ↓
Access torres_office (keycard from Kevin) ✓
  ↓
Find medical bills & journal (evidence_level +2) ✓
  ↓
Access data_center (upload schedule evidence) ✓
  ↓
Confront Torres when evidence_sufficient ✓

**5. Evidence & Lore Added:**
- 7 new readable documents with mission-critical information
- Security logs showing Torres' escalation timeline
- Full SAFETYNET mission brief with casualty estimates
- Operation Schrodinger exfiltration details
- Data package manifest (847 GB, 12-40 casualties)

**Validation Status:**
✓ Schema validation passed
✓ ERB rendered successfully
✓ No missing recommended fields
⚠ 6 optional suggestions (waypoints, PIN locks, containers)

Mission 5 progression path is now fully functional and playable.
2026-01-03 18:01:16 +00:00
2025-05-16 10:42:42 +01:00
2025-11-21 15:27:53 +00:00
2025-11-21 15:27:53 +00:00
2025-11-14 19:47:54 +00:00

BreakEscape Rails Engine

Cybersecurity training escape room game as a mountable Rails Engine.

Features

  • 24+ cybersecurity escape room scenarios
  • Server-side progress tracking with 2-table schema
  • Randomized passwords per game instance via ERB
  • JIT Ink script compilation for NPC dialogue
  • Polymorphic player support (User/DemoUser)
  • Pundit authorization
  • RESTful API for game state management
  • Session-based state persistence

Installation

In your Gemfile:

gem 'break_escape', path: 'path/to/break_escape'

Then:

bundle install
rails break_escape:install:migrations
rails db:migrate
rails db:seed  # Optional: creates missions from scenarios

Mounting in Host App

In your config/routes.rb:

mount BreakEscape::Engine => "/break_escape"

Usage

Standalone Mode (Development)

export BREAK_ESCAPE_STANDALONE=true
rails server
# Visit http://localhost:3000/break_escape/

Mounted Mode (Production)

Mount in Hacktivity or another Rails app. The engine will use the host app's current_user via Devise.

Configuration

# config/initializers/break_escape.rb
BreakEscape.configure do |config|
  config.standalone_mode = false  # true for development
  config.demo_user_handle = 'demo_player'
end

Database Schema

  • break_escape_missions - Scenario metadata (name, display_name, published, difficulty)
  • break_escape_games - Player state + scenario snapshot (JSONB)
  • break_escape_demo_users - Standalone mode only (optional)

API Endpoints

  • GET /games/:id/scenario - Scenario JSON (ERB-generated)
  • GET /games/:id/ink?npc=X - NPC script (JIT compiled from .ink)
  • GET /games/:id/bootstrap - Initial game data
  • PUT /games/:id/sync_state - Sync player state
  • POST /games/:id/unlock - Validate unlock attempt
  • POST /games/:id/inventory - Update inventory

Architecture

ERB Scenario Generation

Scenarios are stored as .json.erb templates and rendered on-demand with randomized values:

  • <%= random_password %> - Generates unique password per game
  • <%= random_pin %> - Generates unique 4-digit PIN
  • <%= random_code %> - Generates unique hex code

JIT Ink Compilation

NPC dialogue scripts compile on first request (~300ms):

  1. Check if .json exists and is newer than .ink
  2. If needed, run inklecate to compile
  3. Cache compiled JSON for subsequent requests

State Management

Player state stored in JSONB column:

  • Current room and unlocked rooms
  • Inventory and collected items
  • NPC encounters
  • Global variables (synced with client)
  • Health and minigame state

Testing

rails test

License

AGPL v3 - See LICENSE file for details

Documentation

See HACKTIVITY_INTEGRATION.md for integration guide.

Description
No description provided
Readme 72 MiB
Languages
JavaScript 86.5%
Ink 7%
HTML 2.9%
CSS 2.5%
Ruby 0.9%
Other 0.2%