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).
75 lines
5.1 KiB
Markdown
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
|