Iteration 5
Release Date: November 24, 2025
🎯 Overall Summary
Iteration 5 focused on post-Release 1 refinements, delivering critical bug fixes, performance optimizations, and infrastructure improvements. This iteration addressed Safari compatibility issues, implemented task reordering functionality, enhanced scenario validation with line number tracking, and established automatic simulation resource cleanup. Key achievements include WebSocket refactoring, OSRM integration with containerization, and RAF-based batching for improved map rendering performance.
🏎️ Velocity
For the fifth iteration, we planned and successfully completed the following:
- ✅ Safari WebSocket authentication fix (PR: #378)
- ✅ WebSocket logic extraction into custom hook (PR: #385)
- ✅ Scenario validation enhancements with line numbers (PR: #379)
- ✅ Task reordering functionality (PR: #383)
- ✅ Simulation resource cleanup and auto-shutdown (PR: #384)
- ✅ OSRM integration with containerization (PR: #337)
- ✅ RAF-based map update batching (PR: #387)
- ✅ SimEntity constructor refactoring (PR: #386)
- ✅ Backend Dockerfile updates for pyproject.toml (PR: #389)
- ✅ Password dialog state reset fix (PR: #334)
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Frontend Performance & WebSocket Refactor | Medium (35h) | $770 |
| Backend Task Management & Resource Cleanup | Medium (40h) | $880 |
| Infrastructure & Containerization | Medium (30h) | $660 |
| Testing & Documentation | Low (10h) | $220 |
| Total | 115h | $2,530 |
🔄 Retrospective
What Went Well
- OSRM finally merged (+2)
- Teamwork makes the dream work
- Work got done despite most of the team having an exam and delays from stakeholder
- Meetings with stakeholder were effective (+2)
- Huge performance refactors saved project feasibility (+1)
What Went Wrong
- R1 deliverables bled into iteration 5 (+1)
- Stakeholder's illness made us delayed on iterative work
- PRs were opened super early but became a bit stale (CSSE responses, Stakeholder AFK)
- Final exam on the day before iteration 5 due date was tough for members
- Many team members afk
What Can Be Improved
- N/A - velocity was low due to various factors
👥 Contributions by Individuals
@vinishamanek - Vinisha Manek [ID: 40229456]
-
Docs: Release 1 demo video in #333
- Added Release 1 Demo Video to README
-
Docs: Wiki contributions in Repo Wiki
@mahutt - Thomas Mahut [ID: 40249811]
-
Frontend: Password dialog state reset in #334
- Resets the reset-password-dialog message after it is closed
- Added loading state for visual feedback
- Cancelled
setTimeouton manual dialog close
-
Docs: Bug report template enhancement in #381
- Added ideal hours estimate field to bug report template
- Updated
.github/ISSUE_TEMPLATE/bug_report.md
-
Infrastructure: AWS deployment updates in #389
- Updates AWS deployment code to accommodate OSRM refactor in production
- Added OSRM service container to
VeloSimStack - Updated
docker/nginx-proxy/nginx.conffor websocket support
-
Docs: Wiki contributions in Repo Wiki
@Jpuntul - Jutipong Puntuleng [ID: 40080233]
-
Frontend: Safari WebSocket authentication fix in #378
- Fixed Safari WebSocket authentication failures with cookie attribute formatting
- Changed
Secureflag to conditional format Safari accepts - Disabled SSR to prevent
AuthProviderhydration mismatches
-
Frontend: WebSocket logic extraction in #385
- Created
useSimulationWebSockethook to encapsulate full WebSocket lifecycle - Added comprehensive test suite covering lifecycle, frames, errors, and auth
- Simplified SimulationProvider by ~200 lines
- Created
-
Frontend: Map rendering optimization in #387
- Implemented
requestAnimationFrame-based batching to prevent excessive re-renders - Added
queueMapUpdate()andflushMapUpdates()for batch processing - Reduced 5 clicks from 5 separate renders to 1-2 batched renders
- Implemented
@CarciDev - David Carciente [ID: 40247907]
- Infrastructure: OSRM refactor and containerization in #337
- Unified
.envconfiguration in root directory - Implemented hybrid containerization for production and development
- Migrated from OSM to OSRM with Docker networking configuration
- Unified
@Niravanaa - Nirav Patel [ID: 40248940]
- Backend: Scenario validation enhancements in #379
- Added optional line number tracking for precise error reporting
- Implemented automatic task ID generation (sequential from 1)
@MeSumo - Sumer Abd Alla [ID: 40247712]
-
Backend: Scenario validation enhancements in #379
- Added support for dayX:HH:MM time format in validation
-
Docs: Wiki contributions in Repo Wiki
@Ambrose821 - Ambrose Mclaughlin [ID: 40239754]
- Sim: Environment constructor refactoring in #386
- Removed simpy.Environment from entity constructors
- Moved environment logic to
prep_entities()method - Prevents bugs from wrong event queue associations
@briantkatch - Brian Tkatch [ID: 40191139]
- Backend: Task reordering functionality in #383
- Implemented POST
/simulation/{sim_id}/resources/reorder-tasksendpoint - Algorithm maintains in-progress tasks at top with top/bottom reordering modes
- Thread-safe with WebSocket frame updates on changes
- Implemented POST
@Verdone - Giuliano Verdone [ID: 40252190]
- Backend: Simulation resource cleanup in #384
- Added auto-shutdown for idle simulations after 15 seconds
- Refactored simulation_service to use global simulation instance
- Updated tests to 92% coverage with environment variable docs
@cmezzac - Christopher Mezzacappa [ID: 40249451]
- Led the research for replay/resume features #388
- Looked into bug where tasks scheduled at same time appeared at different ticks. #331
- Worked with Stakeholder to get performance expectations.
- No code production but artifacts were built and presented to stakeholder. (Research Page)
- Started preliminary research on replay and resume feature. (Research Page)
What's Changed
- docs: add release 1 demo video by @vinishamanek in #333
- fix: reset state of password dialog on close #319 by @mahutt in #334
- Refactor: OSM to OSRM, .env unification and hybrid containerization of project for Prod and Dev by @CarciDev in #337
- bugfix: resolve Safari WebSocket authentication and SSR hydration issues by @Jpuntul in #378
- feat: enhance scenario validation with line number tracking and auto-generated task IDs by @Niravanaa and @MeSumo in #379
- Add ideal hours estimate to bug report template #380 by @mahutt in #381
- feat: reorder tasks by @briantkatch in #383
- fix: release simulation resources #335 by @Verdone in #384
- refactor: extract WebSocket logic into hook #344 by @Jpuntul in #385
- fix: Remove env from sim entity constructors #329 by @Ambrose821 in #386
- refactor: batch map updates with RAF queue by @Jpuntul in #387
- fix: update backend dockerfile to use pyproject.toml in root by @mahutt in #389
Full Changelog: Iteration4...Iteration5