v1.1.1: Replace cancelled Managing Growing Companies with Innovation and Design

Replace cancelled course in Summer Elective Set 2 with new course
"Innovation and Design" qualifying for Brand Management, Entrepreneurship
and Innovation, Marketing, and Strategy (S2).
This commit is contained in:
2026-03-27 11:26:53 -04:00
parent 8b887f7750
commit 99a39a2581
11 changed files with 111 additions and 13 deletions

View File

@@ -1,5 +1,11 @@
# Changelog
## v1.1.1 — 2026-03-27
### Changes
- **Course replacement** — replaced cancelled "Managing Growing Companies" with new course "Innovation and Design" in Summer Elective Set 2; qualifies for Brand Management, Entrepreneurship and Innovation, Marketing, and Strategy (S2)
## v1.1.0 — 2026-03-13
### Changes

View File

@@ -50,7 +50,7 @@ describe('Data integrity', () => {
});
});
it('has exactly 10 S1 markers and 7 S2 markers for Strategy', () => {
it('has exactly 9 S1 markers and 8 S2 markers for Strategy', () => {
let s1Count = 0;
let s2Count = 0;
for (const course of COURSES) {
@@ -59,8 +59,8 @@ describe('Data integrity', () => {
if (q.specId === 'STR' && q.marker === 'S2') s2Count++;
}
}
expect(s1Count).toBe(10);
expect(s2Count).toBe(7);
expect(s1Count).toBe(9);
expect(s2Count).toBe(8);
});
it('all qualification markers are valid types', () => {

View File

@@ -109,11 +109,10 @@ export const COURSES: Course[] = [
// === Summer Elective Set 2 ===
{
id: 'sum2-managing-growing', name: 'Managing Growing Companies', setId: 'sum2',
cancelled: true,
id: 'sum2-innovation-design', name: 'Innovation and Design', setId: 'sum2',
qualifications: [
{ specId: 'ENT', marker: 'standard' }, { specId: 'LCM', marker: 'standard' },
{ specId: 'MGT', marker: 'standard' }, { specId: 'STR', marker: 'S1' },
{ specId: 'BRM', marker: 'standard' }, { specId: 'ENT', marker: 'standard' },
{ specId: 'MKT', marker: 'standard' }, { specId: 'STR', marker: 'S2' },
],
},
{

View File

@@ -27,7 +27,7 @@ export const ELECTIVE_SETS: ElectiveSet[] = [
},
{
id: 'sum2', name: 'Summer Elective Set 2', term: 'Summer',
courseIds: ['sum2-managing-growing', 'sum2-social-media', 'sum2-leading-ai', 'sum2-business-drivers'],
courseIds: ['sum2-innovation-design', 'sum2-social-media', 'sum2-leading-ai', 'sum2-business-drivers'],
},
{
id: 'sum3', name: 'Summer Elective Set 3', term: 'Summer',

View File

@@ -23,7 +23,7 @@ describe('analyzeDecisionTree', () => {
'spr4-fintech',
'spr5-corporate-finance',
'sum1-collaboration',
'sum2-managing-growing',
'sum2-innovation-design',
'sum3-valuation',
'fall1-private-equity',
'fall2-behavioral-finance',
@@ -50,7 +50,7 @@ describe('analyzeDecisionTree', () => {
'spr4-fintech',
'spr5-corporate-finance',
'sum1-collaboration',
'sum2-managing-growing',
'sum2-innovation-design',
'sum3-valuation',
'fall1-private-equity',
'fall2-behavioral-finance',
@@ -72,7 +72,7 @@ describe('analyzeDecisionTree', () => {
'spr4-fintech',
'spr5-corporate-finance',
'sum1-collaboration',
'sum2-managing-growing',
'sum2-innovation-design',
'sum3-valuation',
'fall1-private-equity',
'fall2-behavioral-finance',

View File

@@ -6,8 +6,8 @@ import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
define: {
__APP_VERSION__: JSON.stringify('1.1.0'),
__APP_VERSION_DATE__: JSON.stringify('2026-03-13'),
__APP_VERSION__: JSON.stringify('1.1.1'),
__APP_VERSION_DATE__: JSON.stringify('2026-03-27'),
},
server: {
allowedHosts: ['soos'],

View File

@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-03-27

View File

@@ -0,0 +1,26 @@
## Context
Summer Elective Set 2 currently contains a cancelled course "Managing Growing Companies" (`sum2-managing-growing`) marked with `cancelled: true`. It qualifies for ENT, LCM, MGT, and STR (S1). A replacement course "Innovation and Design" has been announced, qualifying for BRM, ENT, MKT, and STR (S2).
## Goals / Non-Goals
**Goals:**
- Replace the cancelled course data entry with the new course
- Update all test assertions to match the new data
**Non-Goals:**
- No UI changes needed — the `cancelled` flag removal and new course entry are handled by existing rendering logic
- No solver logic changes — the solver already excludes cancelled courses and will automatically include the new one
## Decisions
### Direct replacement over keeping both entries
Replace the cancelled course entry rather than adding a new entry alongside it. The cancelled course has no historical value in the UI since the app is a forward-looking course selection tool. This keeps the course count at 46 and avoids unnecessary complexity.
### Specialization marker choices
All qualifications use `standard` marker except Strategy which uses `S2` (per user specification). This shifts one Strategy course from S1 pool to S2 pool.
## Risks / Trade-offs
- **STR S1 pool shrinks from 10 to 9** — Minor reduction in S1-qualifying courses. No mitigation needed; this reflects the actual curriculum change.
- **LCM and MGT lose coverage in sum2** — These specializations no longer have a qualifying course in Summer Set 2. This accurately reflects the new course's different focus.

View File

@@ -0,0 +1,30 @@
## Why
The cancelled course "Managing Growing Companies" in Summer Elective Set 2 needs to be replaced with a new course "Innovation and Design" that counts towards different specializations (BRM, ENT, MKT, STR-S2 instead of ENT, LCM, MGT, STR-S1).
## What Changes
- Remove the cancelled course entry `sum2-managing-growing` ("Managing Growing Companies") from the course data
- Add a new course `sum2-innovation-design` ("Innovation and Design") in Summer Set 2 with qualifications: Brand Management (BRM), Entrepreneurship and Innovation (ENT), Marketing (MKT), Strategy (STR, S2 marker)
- Update test assertions to reflect changed specialization counts and Strategy marker counts
## Capabilities
### New Capabilities
_None — this is a data change, not a new capability._
### Modified Capabilities
_None — no spec-level behavior changes, only course data._
## Impact
- `app/src/data/courses.ts` — replace cancelled course entry with new course
- `app/src/data/__tests__/data.test.ts` — update assertions:
- STR S1 count: 10 → 9
- STR S2 count: 7 → 8
- BRM across sets: 6 → 7
- MKT across sets: 7 → 8
- LCM across sets: 9 → 8
- MGT across sets: 11 → 10

View File

@@ -0,0 +1,18 @@
## ADDED Requirements
### Requirement: Innovation and Design course in Summer Set 2
The system SHALL include "Innovation and Design" as an active course in Summer Elective Set 2 (`sum2`), qualifying for Brand Management (BRM), Entrepreneurship and Innovation (ENT), Marketing (MKT), and Strategy (STR, S2 marker).
#### Scenario: Course appears in Summer Set 2
- **WHEN** the user views Summer Elective Set 2
- **THEN** "Innovation and Design" appears as a selectable course
#### Scenario: Course qualifies for correct specializations
- **WHEN** the user selects "Innovation and Design"
- **THEN** it contributes credits towards BRM, ENT, MKT, and STR (S2)
## REMOVED Requirements
### Requirement: Managing Growing Companies course
**Reason**: Course has been cancelled by the program and replaced by "Innovation and Design"
**Migration**: No migration needed — the cancelled course was already excluded from solver computations

View File

@@ -0,0 +1,17 @@
## 1. Course Data
- [x] 1.1 Replace `sum2-managing-growing` entry in `app/src/data/courses.ts` with new `sum2-innovation-design` course: name "Innovation and Design", setId "sum2", qualifications BRM (standard), ENT (standard), MKT (standard), STR (S2)
## 2. Test Assertions
- [x] 2.1 Update STR marker counts in `app/src/data/__tests__/data.test.ts`: S1 from 10 to 9, S2 from 7 to 8
- [x] 2.2 Update per-specialization "across sets" counts: BRM 6→7, MKT 7→8, LCM 9→8, MGT 11→10
## 3. Version and Changelog
- [x] 3.1 Bump version to `1.1.1` and update date in `app/vite.config.ts` (`__APP_VERSION__` and `__APP_VERSION_DATE__`)
- [x] 3.2 Add v1.1.1 entry to `CHANGELOG.md` documenting the course replacement
## 4. Verification
- [x] 4.1 Run test suite and confirm all tests pass