v1.2.2: Add Healthcare specialization, mark cancelled courses, rename Digital Marketing
Apply the J27 (5/6/2026) Stern specialization sheet: - Add Healthcare (HCR) as the 15th specialization, with HCR cross-listings on spr2-health-medical, spr3-analytics-ml, sum2-social-media (renamed), and fall1-managing-change. 10 credits available, no required-course gate. - Rename sum2-social-media to "Digital Marketing Strategy in Practice"; replace its description with new MSKCC-anchored content; clear instructor pending confirmation of new lead. - Switch from delete-and-replace to the previously-unused cancelled flag (Approach B): mark spr5-customer-insights cancelled, add Managing Growing Companies back to Summer Set 2 as a cancelled placeholder per the printed sheet. - Update data integrity tests: course count 46 -> 47, spec count 14 -> 15; per-spec "across sets" helper now filters cancelled courses so future cancellations trigger an obvious assertion failure (BRM 6 -> 5, MKT 7 -> 6, HCR 4 new). - Replace hardcoded 14 in optimizer.test.ts with SPECIALIZATIONS.length.
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Healthcare specialization
|
||||
The system SHALL include "Healthcare" (abbreviation `HCR`) as a defined specialization with no required course gate.
|
||||
|
||||
#### Scenario: Healthcare appears in specialization list
|
||||
- **WHEN** the data module is loaded
|
||||
- **THEN** a specialization with id `HCR`, name "Healthcare", and abbreviation `HCR` is present in `SPECIALIZATIONS`
|
||||
|
||||
#### Scenario: Healthcare has no required course
|
||||
- **WHEN** inspecting the Healthcare specialization
|
||||
- **THEN** its `requiredCourseId` is undefined
|
||||
|
||||
#### Scenario: Healthcare reaches four elective sets
|
||||
- **WHEN** counting the distinct elective sets containing at least one non-cancelled HCR-qualifying course
|
||||
- **THEN** the count is exactly 4 (`spr2`, `spr3`, `sum2`, `fall1`), yielding 10.0 credits available (4 × 2.5)
|
||||
|
||||
### Requirement: Healthcare cross-listings on existing courses
|
||||
The system SHALL add Healthcare (`HCR`, standard marker) as an additional qualification on four existing courses without removing their prior qualifications.
|
||||
|
||||
#### Scenario: Business of Health & Medical Care qualifies for Healthcare
|
||||
- **WHEN** inspecting `spr2-health-medical` qualifications
|
||||
- **THEN** the list includes both `STR` (S2) and `HCR` (standard)
|
||||
|
||||
#### Scenario: Analytics & Machine Learning for Managers qualifies for Healthcare
|
||||
- **WHEN** inspecting `spr3-analytics-ml` qualifications
|
||||
- **THEN** the list includes both `MTO` (standard) and `HCR` (standard)
|
||||
|
||||
#### Scenario: Digital Marketing Strategy in Practice qualifies for Healthcare
|
||||
- **WHEN** inspecting `sum2-social-media` qualifications
|
||||
- **THEN** the list includes `BRM`, `EMT`, `MKT`, and `HCR` (all standard)
|
||||
|
||||
#### Scenario: Managing Change qualifies for Healthcare
|
||||
- **WHEN** inspecting `fall1-managing-change` qualifications
|
||||
- **THEN** the list includes `LCM`, `MGT`, `STR` (S2), and `HCR` (standard)
|
||||
|
||||
### Requirement: Cancelled courses preserved with cancelled flag
|
||||
The system SHALL retain cancelled course entries in the course data with `cancelled: true` rather than deleting them. Cancelled courses SHALL NOT be considered selectable, SHALL be excluded from solver computations, and SHALL render in the UI as visibly disabled.
|
||||
|
||||
#### Scenario: Customer Insights is marked cancelled
|
||||
- **WHEN** inspecting `spr5-customer-insights`
|
||||
- **THEN** the course has `cancelled: true` and remains a member of `spr5`
|
||||
|
||||
#### Scenario: Managing Growing Companies present as cancelled placeholder in Summer Set 2
|
||||
- **WHEN** inspecting Summer Elective Set 2 (`sum2`)
|
||||
- **THEN** it contains exactly five course entries, one of which is `sum2-managing-growing-companies` with `cancelled: true` and an empty qualifications list
|
||||
|
||||
#### Scenario: Cancelled courses excluded from solver
|
||||
- **WHEN** the solver computes specialization assignments
|
||||
- **THEN** no cancelled course id contributes credits toward any specialization
|
||||
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: Course definitions
|
||||
The system SHALL define exactly 47 courses. Each course SHALL have an ID, display name, and the ID of the elective set it belongs to. Courses MAY carry a `cancelled: true` flag indicating the offering has been withdrawn.
|
||||
|
||||
#### Scenario: Course count
|
||||
- **WHEN** the data module is loaded
|
||||
- **THEN** exactly 47 courses are defined
|
||||
|
||||
#### Scenario: Each course belongs to one set
|
||||
- **WHEN** iterating all courses
|
||||
- **THEN** every course references a valid elective set ID, and the set's course list includes that course
|
||||
|
||||
#### Scenario: Cancelled courses are flagged, not deleted
|
||||
- **WHEN** filtering courses by `cancelled === true`
|
||||
- **THEN** the result includes both `spr5-customer-insights` and `sum2-managing-growing-companies`
|
||||
|
||||
### Requirement: Specialization definitions
|
||||
The system SHALL define exactly 15 specializations. Each specialization SHALL have an ID, display name, and abbreviation. Specializations with a required course gate SHALL reference the required course ID.
|
||||
|
||||
#### Scenario: Specialization count
|
||||
- **WHEN** the data module is loaded
|
||||
- **THEN** exactly 15 specializations are defined
|
||||
|
||||
#### Scenario: Healthcare is included
|
||||
- **WHEN** searching specializations for id `HCR`
|
||||
- **THEN** a specialization named "Healthcare" is found
|
||||
|
||||
#### Scenario: Required course mappings unchanged
|
||||
- **WHEN** inspecting specializations with required courses
|
||||
- **THEN** exactly 4 specializations have required course gates: SBI → `spr4-sustainability`, ENT → `spr4-foundations-entrepreneurship`, EMT → `sum3-entertainment-media`, BRM → `fall4-brand-strategy`
|
||||
|
||||
### Requirement: Course-specialization qualification matrix
|
||||
Each course SHALL declare which specializations it qualifies for, with a marker type of standard (■), S1, or S2. Courses with no qualifying specializations (including cancelled courses) SHALL have an empty qualification list. Reachability counts SHALL exclude qualifications belonging to courses flagged `cancelled`.
|
||||
|
||||
#### Scenario: Marker types
|
||||
- **WHEN** inspecting course qualifications
|
||||
- **THEN** every qualification entry uses one of three marker types: standard, S1, or S2
|
||||
|
||||
#### Scenario: Strategy markers
|
||||
- **WHEN** counting Strategy-qualifying courses across all (non-cancelled) courses
|
||||
- **THEN** exactly 9 courses have S1 markers and exactly 8 courses have S2 markers
|
||||
|
||||
#### Scenario: Reachable distinct-set counts per specialization
|
||||
- **WHEN** counting distinct elective sets containing at least one non-cancelled course qualifying for each specialization
|
||||
- **THEN** the counts are: MGT 11, STR 9, LCM 9, FIN 9, CRF 8, MKT 6, BNK 6, BRM 5, FIM 6, MTO 6, GLB 5, EMT 4, ENT 4, SBI 4, HCR 4
|
||||
- **AND** these counts represent raw distinct-set reachability, not the CSV's published credit totals (which additionally apply S1/S2 and shared-course rules — out of scope for this assertion)
|
||||
|
||||
### Requirement: Renamed Digital Marketing course
|
||||
The system SHALL display course `sum2-social-media` with the name "Digital Marketing Strategy in Practice" and the updated description anchored on the Memorial Sloan Kettering Cancer Center engagement. The course id SHALL remain `sum2-social-media` (unchanged) so existing lookup tables and tests continue to resolve.
|
||||
|
||||
#### Scenario: Display name updated
|
||||
- **WHEN** inspecting the course with id `sum2-social-media`
|
||||
- **THEN** its `name` is "Digital Marketing Strategy in Practice"
|
||||
|
||||
#### Scenario: Description reflects MSKCC engagement
|
||||
- **WHEN** the user opens the course info popover for `sum2-social-media`
|
||||
- **THEN** the description references Memorial Sloan Kettering Cancer Center, agentic AI, and digital strategy practice
|
||||
|
||||
#### Scenario: Instructor cleared pending confirmation
|
||||
- **WHEN** inspecting the course's instructor list in `COURSE_DESCRIPTIONS`
|
||||
- **THEN** the `instructors` array is empty
|
||||
|
||||
## REMOVED Requirements
|
||||
|
||||
_None. The "Managing Growing Companies" id, previously removed by `replace-cancelled-course-with-innovation-design`, is reintroduced as a cancelled placeholder per the J27 sheet — see ADDED Requirements above._
|
||||
Reference in New Issue
Block a user