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).
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