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

75 lines
5.1 KiB
Markdown

## 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