From 99a39a258119708ad6f20a90f99ab6b95a436f55 Mon Sep 17 00:00:00 2001 From: Bill Ballou Date: Fri, 27 Mar 2026 11:26:53 -0400 Subject: [PATCH] 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). --- CHANGELOG.md | 6 ++++ app/src/data/__tests__/data.test.ts | 6 ++-- app/src/data/courses.ts | 7 ++--- app/src/data/electiveSets.ts | 2 +- app/src/solver/__tests__/decisionTree.test.ts | 6 ++-- app/vite.config.ts | 4 +-- .../.openspec.yaml | 2 ++ .../design.md | 26 ++++++++++++++++ .../proposal.md | 30 +++++++++++++++++++ .../specs/course-data/spec.md | 18 +++++++++++ .../tasks.md | 17 +++++++++++ 11 files changed, 111 insertions(+), 13 deletions(-) create mode 100644 openspec/changes/replace-cancelled-course-with-innovation-design/.openspec.yaml create mode 100644 openspec/changes/replace-cancelled-course-with-innovation-design/design.md create mode 100644 openspec/changes/replace-cancelled-course-with-innovation-design/proposal.md create mode 100644 openspec/changes/replace-cancelled-course-with-innovation-design/specs/course-data/spec.md create mode 100644 openspec/changes/replace-cancelled-course-with-innovation-design/tasks.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 48b6cfd..99870af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/app/src/data/__tests__/data.test.ts b/app/src/data/__tests__/data.test.ts index 1148dc3..ef95120 100644 --- a/app/src/data/__tests__/data.test.ts +++ b/app/src/data/__tests__/data.test.ts @@ -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', () => { diff --git a/app/src/data/courses.ts b/app/src/data/courses.ts index 1a25130..ee8525e 100644 --- a/app/src/data/courses.ts +++ b/app/src/data/courses.ts @@ -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' }, ], }, { diff --git a/app/src/data/electiveSets.ts b/app/src/data/electiveSets.ts index 0f5f285..a6ed501 100644 --- a/app/src/data/electiveSets.ts +++ b/app/src/data/electiveSets.ts @@ -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', diff --git a/app/src/solver/__tests__/decisionTree.test.ts b/app/src/solver/__tests__/decisionTree.test.ts index 0c64948..4438c97 100644 --- a/app/src/solver/__tests__/decisionTree.test.ts +++ b/app/src/solver/__tests__/decisionTree.test.ts @@ -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', diff --git a/app/vite.config.ts b/app/vite.config.ts index ebace54..b8e778c 100644 --- a/app/vite.config.ts +++ b/app/vite.config.ts @@ -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'], diff --git a/openspec/changes/replace-cancelled-course-with-innovation-design/.openspec.yaml b/openspec/changes/replace-cancelled-course-with-innovation-design/.openspec.yaml new file mode 100644 index 0000000..a61e7c1 --- /dev/null +++ b/openspec/changes/replace-cancelled-course-with-innovation-design/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-03-27 diff --git a/openspec/changes/replace-cancelled-course-with-innovation-design/design.md b/openspec/changes/replace-cancelled-course-with-innovation-design/design.md new file mode 100644 index 0000000..7bf1616 --- /dev/null +++ b/openspec/changes/replace-cancelled-course-with-innovation-design/design.md @@ -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. diff --git a/openspec/changes/replace-cancelled-course-with-innovation-design/proposal.md b/openspec/changes/replace-cancelled-course-with-innovation-design/proposal.md new file mode 100644 index 0000000..7263602 --- /dev/null +++ b/openspec/changes/replace-cancelled-course-with-innovation-design/proposal.md @@ -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 diff --git a/openspec/changes/replace-cancelled-course-with-innovation-design/specs/course-data/spec.md b/openspec/changes/replace-cancelled-course-with-innovation-design/specs/course-data/spec.md new file mode 100644 index 0000000..f9ed73b --- /dev/null +++ b/openspec/changes/replace-cancelled-course-with-innovation-design/specs/course-data/spec.md @@ -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 diff --git a/openspec/changes/replace-cancelled-course-with-innovation-design/tasks.md b/openspec/changes/replace-cancelled-course-with-innovation-design/tasks.md new file mode 100644 index 0000000..5f4f458 --- /dev/null +++ b/openspec/changes/replace-cancelled-course-with-innovation-design/tasks.md @@ -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