Improve analysis UX: algorithm explanations, skeleton loading, auto-expand achieved specs

- Replace terse one-line optimization mode descriptions with clearer multi-sentence
  explanations of how Maximize Count and Priority Order algorithms behave
- Add skeleton loading placeholders on course buttons while analysis is pending
- Auto-expand achieved specializations to show credit breakdown by default
- Add instructional subtitles to Course Selection and Specializations sections
- Make Clear and Clear All buttons more prominent with visible backgrounds
This commit is contained in:
2026-02-28 21:56:06 -05:00
parent 6af24d9270
commit 969d4ff5a9
10 changed files with 201 additions and 17 deletions

View File

@@ -0,0 +1,25 @@
## ADDED Requirements
### Requirement: Mode description explains practical behavior
The ModeToggle component SHALL display a multi-sentence description for each optimization mode that explains the algorithm's practical behavior and when a user would choose it.
For "Maximize Count", the description SHALL convey that:
- The algorithm finds the combination of specializations that achieves the highest count (up to 3).
- The user's ranking is used only to break ties when multiple combinations achieve the same count.
For "Priority Order", the description SHALL convey that:
- The algorithm processes specializations in the user's ranked order, top to bottom.
- It locks in the highest-ranked achievable specialization first, then adds more if feasible.
- The user's ranking directly controls which specializations are prioritized.
#### Scenario: User selects Maximize Count mode
- **WHEN** the optimization mode is set to "maximize-count"
- **THEN** a description is displayed that explains the algorithm finds the largest possible set of specializations and uses ranking only as a tiebreaker
#### Scenario: User selects Priority Order mode
- **WHEN** the optimization mode is set to "priority-order"
- **THEN** a description is displayed that explains the algorithm guarantees the top-ranked specialization first and greedily adds more in rank order
#### Scenario: Description updates on mode switch
- **WHEN** the user switches from one mode to the other
- **THEN** the description text SHALL update immediately to reflect the newly selected mode

View File

@@ -0,0 +1,21 @@
## ADDED Requirements
### Requirement: Skeleton placeholder during analysis
When an elective set is not pinned and analysis is pending, the CourseSelection component SHALL display skeleton placeholder elements in place of the course choice buttons.
The skeleton placeholders SHALL:
- Visually approximate the size and layout of the course choice buttons they replace.
- Display a pulsing/animated background to indicate loading.
- Replace the current "analyzing..." text label.
#### Scenario: Analysis pending for an unpinned set
- **WHEN** an elective set is not pinned AND `loading` is true AND no analysis result exists for that set
- **THEN** skeleton placeholder rectangles SHALL be displayed instead of course choice buttons
#### Scenario: Analysis completes for a set
- **WHEN** an analysis result arrives for a previously loading set
- **THEN** the skeleton placeholders SHALL be replaced with the actual course choice buttons showing analysis data
#### Scenario: Set is already pinned
- **WHEN** an elective set has a pinned course
- **THEN** no skeleton placeholders SHALL be shown regardless of loading state

View File

@@ -0,0 +1,20 @@
## ADDED Requirements
### Requirement: Achieved specializations default to expanded
The SpecializationRanking component SHALL initialize with all achieved specializations in the expanded state, showing their AllocationBreakdown credit list by default.
#### Scenario: Initial render with achieved specializations
- **WHEN** the SpecializationRanking component renders with one or more achieved specializations
- **THEN** the AllocationBreakdown (per-course credit list) SHALL be visible for each achieved specialization without user interaction
#### Scenario: Achieved set changes after course selection
- **WHEN** the set of achieved specializations changes due to a course pin/unpin or ranking reorder
- **THEN** all newly achieved specializations SHALL be expanded by default
#### Scenario: User manually collapses an achieved specialization
- **WHEN** the user clicks on an achieved specialization that is currently expanded
- **THEN** the AllocationBreakdown for that specialization SHALL collapse
#### Scenario: Non-achieved specializations remain non-expandable
- **WHEN** a specialization has a status other than "achieved"
- **THEN** it SHALL NOT display an AllocationBreakdown and SHALL NOT be expandable