Files
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

5.1 KiB

ADDED Requirements

Requirement: Specialization status summary

The system SHALL display all 14 specializations with their current status: achieved, achievable, missing_required, or unreachable. Achieved specializations SHALL be visually prominent. The list SHALL follow the user's priority ranking order.

Scenario: Mixed statuses displayed

  • WHEN the optimization produces 2 achieved, 5 achievable, 1 missing_required, and 6 unreachable specializations
  • THEN all 14 are displayed in priority rank order, each with its status clearly indicated through distinct visual styling (color, icon, or badge)

Scenario: No courses pinned

  • WHEN no courses are pinned (all sets open)
  • THEN all specializations show as achievable or unreachable based on upper-bound reachability

Requirement: Credit progress display

Each specialization SHALL display its current credit progress toward the 9-credit threshold. Achieved specializations SHALL show allocated credits. Achievable specializations SHALL show upper-bound potential credits. Unreachable specializations SHALL show maximum possible credits.

Scenario: Achieved specialization credits

  • WHEN Finance has 9.5 credits allocated by the optimizer
  • THEN Finance shows "9.5 / 9.0 credits" with a filled progress indicator

Scenario: Achievable specialization potential

  • WHEN Marketing has 5.0 allocated credits from pinned courses and 3 open sets with qualifying courses
  • THEN Marketing shows current allocation plus potential (e.g., "5.0 allocated, up to 12.5 potential")

Requirement: Credit allocation breakdown

The system SHALL allow the user to view the detailed credit allocation for achieved specializations: which courses contribute credits and the amount from each course.

Scenario: Expand allocation detail

  • WHEN the user expands an achieved specialization
  • THEN a breakdown shows each contributing course name and the credit amount allocated from it (e.g., "Valuation: 2.5, Corporate Finance: 2.5, The Financial Services Industry: 2.5, Behavioral Finance: 1.5")

Requirement: Decision tree for open sets

The system SHALL display a decision tree section showing open (unpinned) elective sets ordered by decision impact. For each open set, each course choice SHALL display its ceiling outcome: the best achievable specialization count and set assuming optimal choices in remaining open sets.

Scenario: High-impact set displayed first

  • WHEN Spring Set 4 has high variance in ceiling outcomes across its courses (one choice enables 3 specs, another only 2) and Fall Set 2 has no variance (all choices lead to same ceiling)
  • THEN Spring Set 4 appears before Fall Set 2 in the decision tree

Scenario: Course choice outcomes shown

  • WHEN viewing an open set in the decision tree
  • THEN each course shows: ceiling specialization count, the names of ceiling specializations, and any specs that become permanently unreachable if this course is chosen

Requirement: Decision tree loading state

When the background Web Worker is computing ceiling outcomes, the system SHALL show a loading indicator on the decision tree. Results SHALL appear progressively as each open set's analysis completes.

Scenario: Progressive loading

  • WHEN the Web Worker has completed analysis for 3 of 6 open sets
  • THEN the 3 completed sets show full ceiling results and the remaining 3 show a loading indicator

Scenario: Instant fallback

  • WHEN the Web Worker has not yet returned results
  • THEN the decision tree shows upper-bound reachability per course choice (computed instantly on main thread) as a preliminary result

Requirement: Mode comparison

When the two optimization modes (maximize-count and priority-order) produce different results for the current pinned courses, the system SHALL highlight the difference to help the user understand the trade-off.

Scenario: Modes agree

  • WHEN both modes produce the same achieved specialization set
  • THEN no comparison is shown; the result is displayed normally

Scenario: Modes disagree

  • WHEN maximize-count achieves {Corp Finance, Strategy, Management} (3 specs) but priority-order achieves {Finance, Corp Finance} (2 specs, Finance is rank #1)
  • THEN the system displays both outcomes with an explanation: maximize-count achieves more specializations, but priority-order guarantees the user's top-ranked specialization

Requirement: Mutual exclusion warnings

When a course selection or open-set state creates a mutual exclusion (two specializations that cannot both be achieved), the system SHALL display a warning explaining the conflict.

Scenario: SBI vs E&I conflict

  • WHEN Spring Set 4 is open
  • THEN the system notes that choosing Sustainability for Competitive Advantage eliminates Entrepreneurship and Innovation (and vice versa) because both required courses are in the same set

Scenario: Conflict already resolved

  • WHEN Spring Set 4 is pinned to Foundations of Entrepreneurship
  • THEN the SBI specialization shows status missing_required with an explanation that its required course was in the same set as the pinned choice