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:
@@ -1,5 +1,11 @@
|
|||||||
# Changelog
|
# 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
|
## v1.1.0 — 2026-03-13
|
||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
|
|||||||
@@ -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 s1Count = 0;
|
||||||
let s2Count = 0;
|
let s2Count = 0;
|
||||||
for (const course of COURSES) {
|
for (const course of COURSES) {
|
||||||
@@ -59,8 +59,8 @@ describe('Data integrity', () => {
|
|||||||
if (q.specId === 'STR' && q.marker === 'S2') s2Count++;
|
if (q.specId === 'STR' && q.marker === 'S2') s2Count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
expect(s1Count).toBe(10);
|
expect(s1Count).toBe(9);
|
||||||
expect(s2Count).toBe(7);
|
expect(s2Count).toBe(8);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('all qualification markers are valid types', () => {
|
it('all qualification markers are valid types', () => {
|
||||||
|
|||||||
@@ -109,11 +109,10 @@ export const COURSES: Course[] = [
|
|||||||
|
|
||||||
// === Summer Elective Set 2 ===
|
// === Summer Elective Set 2 ===
|
||||||
{
|
{
|
||||||
id: 'sum2-managing-growing', name: 'Managing Growing Companies', setId: 'sum2',
|
id: 'sum2-innovation-design', name: 'Innovation and Design', setId: 'sum2',
|
||||||
cancelled: true,
|
|
||||||
qualifications: [
|
qualifications: [
|
||||||
{ specId: 'ENT', marker: 'standard' }, { specId: 'LCM', marker: 'standard' },
|
{ specId: 'BRM', marker: 'standard' }, { specId: 'ENT', marker: 'standard' },
|
||||||
{ specId: 'MGT', marker: 'standard' }, { specId: 'STR', marker: 'S1' },
|
{ specId: 'MKT', marker: 'standard' }, { specId: 'STR', marker: 'S2' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export const ELECTIVE_SETS: ElectiveSet[] = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'sum2', name: 'Summer Elective Set 2', term: 'Summer',
|
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',
|
id: 'sum3', name: 'Summer Elective Set 3', term: 'Summer',
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ describe('analyzeDecisionTree', () => {
|
|||||||
'spr4-fintech',
|
'spr4-fintech',
|
||||||
'spr5-corporate-finance',
|
'spr5-corporate-finance',
|
||||||
'sum1-collaboration',
|
'sum1-collaboration',
|
||||||
'sum2-managing-growing',
|
'sum2-innovation-design',
|
||||||
'sum3-valuation',
|
'sum3-valuation',
|
||||||
'fall1-private-equity',
|
'fall1-private-equity',
|
||||||
'fall2-behavioral-finance',
|
'fall2-behavioral-finance',
|
||||||
@@ -50,7 +50,7 @@ describe('analyzeDecisionTree', () => {
|
|||||||
'spr4-fintech',
|
'spr4-fintech',
|
||||||
'spr5-corporate-finance',
|
'spr5-corporate-finance',
|
||||||
'sum1-collaboration',
|
'sum1-collaboration',
|
||||||
'sum2-managing-growing',
|
'sum2-innovation-design',
|
||||||
'sum3-valuation',
|
'sum3-valuation',
|
||||||
'fall1-private-equity',
|
'fall1-private-equity',
|
||||||
'fall2-behavioral-finance',
|
'fall2-behavioral-finance',
|
||||||
@@ -72,7 +72,7 @@ describe('analyzeDecisionTree', () => {
|
|||||||
'spr4-fintech',
|
'spr4-fintech',
|
||||||
'spr5-corporate-finance',
|
'spr5-corporate-finance',
|
||||||
'sum1-collaboration',
|
'sum1-collaboration',
|
||||||
'sum2-managing-growing',
|
'sum2-innovation-design',
|
||||||
'sum3-valuation',
|
'sum3-valuation',
|
||||||
'fall1-private-equity',
|
'fall1-private-equity',
|
||||||
'fall2-behavioral-finance',
|
'fall2-behavioral-finance',
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import react from '@vitejs/plugin-react'
|
|||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react()],
|
plugins: [react()],
|
||||||
define: {
|
define: {
|
||||||
__APP_VERSION__: JSON.stringify('1.1.0'),
|
__APP_VERSION__: JSON.stringify('1.1.1'),
|
||||||
__APP_VERSION_DATE__: JSON.stringify('2026-03-13'),
|
__APP_VERSION_DATE__: JSON.stringify('2026-03-27'),
|
||||||
},
|
},
|
||||||
server: {
|
server: {
|
||||||
allowedHosts: ['soos'],
|
allowedHosts: ['soos'],
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
schema: spec-driven
|
||||||
|
created: 2026-03-27
|
||||||
@@ -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.
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user