Files
emba-course-solver/openspec/changes/emba-specialization-solver/specs/course-data/spec.md
Bill Ballou 9e00901179 Implement EMBA Specialization Solver web app
Full React+TypeScript app with LP-based optimization engine,
drag-and-drop specialization ranking (with touch/arrow support),
course selection UI, results dashboard with decision tree, and
two optimization modes (maximize-count, priority-order).
2026-02-28 20:43:00 -05:00

3.7 KiB

ADDED Requirements

Requirement: Elective set definitions

The system SHALL define 12 elective sets, each with an ID, display name, term (Spring/Summer/Fall), and an ordered list of course IDs. Sets 1 and 6 (Spring Set 1 and Summer Set 1) SHALL contain the same three courses.

Scenario: All 12 sets present

  • WHEN the data module is loaded
  • THEN exactly 12 elective sets are defined, covering Spring (sets 1-5), Summer (sets 6-8), and Fall (sets 9-12)

Scenario: Sets 1 and 6 share courses

  • WHEN inspecting Spring Set 1 and Summer Set 1
  • THEN both sets contain the same three course entries (Global Immersion Experience II, Collaboration Conflict and Negotiation, Conquering High Stakes Communication)

Requirement: Course definitions

The system SHALL define 46 courses. Each course SHALL have an ID, display name, and the ID of the elective set it belongs to.

Scenario: Course count

  • WHEN the data module is loaded
  • THEN exactly 46 courses are defined

Scenario: Each course belongs to one set

  • WHEN iterating all courses
  • THEN every course references a valid elective set ID, and the set's course list includes that course

Requirement: Specialization definitions

The system SHALL define 14 specializations. Each specialization SHALL have an ID, display name, and abbreviation. Specializations with a required course gate SHALL reference the required course ID.

Scenario: Specialization count

  • WHEN the data module is loaded
  • THEN exactly 14 specializations are defined

Scenario: Required course mappings

  • WHEN inspecting specializations with required courses
  • THEN exactly 4 specializations have required course gates: Sustainable Business and Innovation (Sustainability for Competitive Advantage), Entrepreneurship and Innovation (Foundations of Entrepreneurship), Entertainment Media and Technology (Entertainment and Media Industries), Brand Management (Brand Strategy)

Requirement: Course-specialization qualification matrix

Each course SHALL declare which specializations it qualifies for, with a marker type of standard (■), S1, or S2. Courses with no qualifying specializations SHALL have an empty qualification list.

Scenario: Marker types

  • WHEN inspecting course qualifications
  • THEN every qualification entry uses one of three marker types: standard, S1, or S2

Scenario: Strategy markers

  • WHEN counting Strategy-qualifying courses
  • THEN exactly 10 courses have S1 markers and exactly 7 courses have S2 markers

Scenario: Qualification counts match reachability table

  • WHEN counting qualifying courses per specialization (across distinct sets)
  • THEN the counts match the "Across Sets" column in the reachability summary: Management 11, Strategy 9, Leadership and Change Management 9, Finance 9, Corporate Finance 8, Marketing 7, Banking 6, Brand Management 6, Financial Instruments and Markets 6, Management of Technology and Operations 6, Global Business 5, Entertainment Media and Technology 4, Entrepreneurship and Innovation 4, Sustainable Business and Innovation 4

Requirement: Derived lookup indexes

The data module SHALL export pre-computed lookup maps: courses by set ID, qualifying specializations by course ID, and qualifying courses by specialization ID. These lookups SHALL be computed once at module load.

Scenario: Courses-by-set lookup

  • WHEN querying courses for a given set ID
  • THEN the returned list matches the set's defined course list in order

Scenario: Specs-by-course lookup

  • WHEN querying specializations for a given course ID
  • THEN the returned list contains all specializations the course qualifies for, with correct marker types