Files
emba-course-solver/CHANGELOG.md
Bill Ballou 8b887f7750 v1.1.0: Add cancelled course, duplicate prevention, and credit bar ticks
- Mark "Managing Growing Companies" as cancelled with visual indicator and solver exclusion
- Prevent selecting duplicate courses across elective sets (e.g., same course in Spring and Summer)
- Add 2.5-credit interval tick marks to specialization progress bars
- Bump version to 1.1.0 with date display in UI header
2026-03-13 16:11:56 -04:00

3.6 KiB

Changelog

v1.1.0 — 2026-03-13

Changes

  • Cancelled course support — "Managing Growing Companies" (Summer Elective Set 2) is marked as cancelled and rendered with strikethrough, greyed-out styling, and a "(Cancelled)" label; it is excluded from solver computations and decision tree enumeration
  • Duplicate course prevention — courses that appear in multiple elective sets (e.g., "Global Immersion Experience II" in Spring Set 1 and Summer Set 1, "The Financial Services Industry" in Spring Set 2 and Fall Set 4) are now linked; selecting one automatically disables and excludes its duplicate from selection and solver calculations, shown with an "(Already selected)" label
  • Credit bar tick marks — specialization progress bars now display light vertical tick marks at 2.5-credit intervals for visual scale reference, layered above bar fills with the 9.0 threshold marker remaining visually distinct

v1.0.0 — 2026-02-28

Initial release of the EMBA Specialization Solver.

Features

  • Optimization engine — LP-based credit allocation solver with two modes:
    • Maximize Count — finds the largest feasible set of specializations, using ranking as tiebreaker
    • Priority Order — greedily adds specializations in user-ranked order
  • Course selection UI — select one course per elective set across 12 sets (Spring, Summer, Fall terms)
  • Drag-and-drop specialization ranking — reorder the 14 specializations by priority with touch and keyboard support
  • Decision tree analysis — Web Worker enumerates remaining course combinations to compute ceiling outcomes per choice
  • Status tracking — each specialization classified as achieved, achievable, missing required course, or unreachable
  • Mode comparison — displays what the alternative optimization mode would produce
  • Credit bars and allocation breakdowns — visual progress toward the 9-credit threshold with expandable per-course detail
  • Credit legend — collapsible explainer for bars, badges, and limits
  • Required course labels — courses that are prerequisites for a specialization show "Required for ..." labels
  • Algorithm explanations — clear descriptions of how each optimization mode works
  • Skeleton loading — placeholder UI while decision tree analysis runs
  • Auto-expand achieved specializations — achieved specs show their credit breakdown by default
  • Responsive layout — two-panel grid on desktop/tablet, single-column on mobile
  • Mobile floating banners — top banner summarizes specialization statuses, bottom banner shows selection progress (N/12); both appear via IntersectionObserver and scroll to their sections on tap
  • CSS transitions and animations — cross-fade course pin/unpin, credit bar width changes, status badge color transitions, expand/collapse panels, mode toggle switching, flash on status changes; all respect prefers-reduced-motion
  • State persistence — rankings and selections saved to localStorage
  • Docker deployment — multi-stage Dockerfile (Node 22 build → Nginx Alpine serve) with Docker Compose, gzip compression, SPA fallback routing, immutable cache headers for hashed assets, configurable port (default 8080)
  • Full test suite — data integrity, feasibility solver, optimizer, and decision tree tests via Vitest

Constraints Modeled

  • Credit non-duplication (2.5 credits per course shared across specializations)
  • Maximum 3 specializations (30 total credits, 9 required each)
  • Required course prerequisites for 4 specializations
  • Strategy S1/S2 tier system (at most 1 S2 course contributes to Strategy)
  • Mutual exclusion from same-set conflicts