Releases: vinishamanek/VeloSim
Release list
Iteration 13 (Release 3)
Release Date: April 13, 2026
🎯 Overall Summary
Iteration 13 focused on traffic realism, station clustering and assignment UX, simulation metrics visibility, replay stability, and deployment hardening. This release delivered stop-event handling and occupancy tracking, traffic lights/stop-sign behavior, GraphHopper traffic integration and template management, cluster creation/dissolution/assignment flows, expanded task reassignment/unassignment workflows in collapsed and expanded views, simulation completion reporting improvements, and stronger CI/deployment reliability.
🏎️ Velocity
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Traffic & Routing Enhancements | High (36h) | $792 |
| Task UX, Clustering & Assignment Workflows | High (32h) | $704 |
| Simulation Reporting & Replay | Medium (24h) | $528 |
| Backend APIs & Persistence | Medium (18h) | $396 |
| CI/CD, Deployment & Infra Reliability | Medium (12h) | $264 |
| QA, Coverage & Code Quality | Medium (12h) | $264 |
| Total | 134h | $2,948 |
Notes:
- The hours listed above represent the time specifically spent on developing the individual software artifacts. They do not reflect the total time our team has committed to Iteration 13.
🔄 Retrospective
What went well?
What went wrong?
What can be improved on?
🤝 Individual Contributions
@Ambrose821 - Ambrose McLaughlin [ID: 40239754]
-
feat: Add task servicing chain and service time tracking for replay #958 in #961
- Added task servicing-chain support and replay service-time tracking behavior.
-
feat: Block reordering of task grouping when servicing at that station in #988
- Prevented invalid task-grouping reorders while servicing is active.
-
fix: cleanup stale TODOs #995 in #996
- Cleaned up stale TODO comments and reduced maintenance noise.
-
Docs: Wiki contributions in Repo Wiki
@briantkatch - Brian Tkatch [ID: 40191139]
-
ci: Add timeout for production deployment in #902
- Added timeout safeguards for production deployment operations.
-
ci: Run production deployment as app user in #905
- Hardened deployment execution by running under app-user context.
-
Add traffic template API endpoints and tables in #914
- Added backend endpoints and persistence tables for traffic templates.
-
chore: Update openapi.json in apidemo/ #944 in #945
- Updated generated OpenAPI contract for API demo alignment.
-
fix: update back Dockerfile traffic script #954 in #952
- Fixed backend Dockerfile traffic-script behavior for container builds.
@CarciDev - David Carciente [ID: 40247907]
- fix: long loading times on Windows in #903
- Reduced Windows-specific loading delays to improve responsiveness.
@cmezzac - Christopher Mezzacappa [ID: 40249451]
- fix: Added persistence logic to reporting in #941
- Added persistence updates to improve reporting consistency across runs.
@Jpuntul - Jutipong Puntuleng [ID: 40080233]
-
feat: support multi-task reordering and right-click drag select in #889
- Added richer interaction patterns for multi-task editing workflows.
-
Docs: Wiki contributions in Repo Wiki
@mahutt - Thomas Mahut [ID: 40249811]
-
fix: frontend dependency vulnerabilities in #922
- Addressed frontend dependency vulnerability findings.
-
fix: tests expect collapsed driver tasks in #924
- Updated tests to match collapsed-view task behavior.
-
feat: basic station clustering in #928
- Introduced baseline station clustering to reduce map clutter.
-
Add units to metrics in simulation dashboard in #932
- Added units to dashboard metrics for better readability.
-
Make @Niravanaa a frontend code owner in #935
- Updated code ownership configuration for frontend review paths.
-
Dissolve clusters on click in #938
- Added click-to-dissolve interaction for station clusters.
-
Make clusters assignable in #940
- Enabled assignment operations originating from clustered map states.
-
Move reporting widget to bottom right in #957
- Repositioned reporting widget to improve simulation UI layout.
-
Stop unwanted filtration of station circles in #960
- Fixed unwanted station-circle filtering behavior in map rendering.
-
Reduce task service time to 30 seconds in #963
- Adjusted task service-time default to 30 seconds.
-
Enable scrubbing for resumed sim in #964
- Enabled scrubbing support for resumed simulations.
-
Use sim seconds to invoke keyframes in #966
- Updated keyframe invocation timing to simulation seconds.
-
Update collapsed task list label in #986
- Updated collapsed-task label text for clearer UX communication.
-
Docs: Wiki contributions in Repo Wiki
Iteration 12
Release Date: March 22, 2026
🎯 Overall Summary
Iteration 12 focused on routing correctness, simulation observability, frontend usability, deployment readiness, and internationalization. This iteration delivered route-generation fixes for next-stop rendering and in-service task filtering, new backend user preferences endpoints, multiple simulation reporting enhancements (total vehicle distance, live sim reporting, lag reporting, and distance-to-next-traffic-event), improved route behavior with scheduled recalculations and smooth position transitions, and major frontend experience upgrades including multi-station selection, updated station iconography, station names, and a collapsed driver-task view. Infrastructure and deployment improvements include GraphHopper deployment support and a production-focused .dockerignore.
🏎️ Velocity
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Routing & Simulation Engine Behavior | High (32h) | $704 |
| Reporting & Observability | High (28h) | $616 |
| Frontend UX & Visualization | Medium (24h) | $528 |
| Backend API & Preferences | Medium (16h) | $352 |
| Deployment & Infrastructure | Low (10h) | $220 |
| i18n & Code Quality | Medium (17h) | $374 |
| Total | 127h | $2,794 |
Notes:
- The hours listed above represent the time specifically spent on developing the individual software artifacts. They do not reflect the total time our team has committed to Iteration 12.
🔄 Retrospective
What went well?
- Good pair programming (+1)
- Thorough reviews (+1)
- Fixed windows bug (+1)
- Good teamwork and teammates ready to help
What went wrong?
- Some tasks not started whatsoever
- End of semester crunch
- Working on traffic without traffic was hard, but at least its fixed now!
What can be improved on?
- Team bonding activity for the love of the god (+1009)
- GraphHopper did not hop into prod quick enough (+1)
- more work on poster
🤝 Individual Contributions
@Ambrose821 - Ambrose McLaughlin [ID: 40239754]
-
Sim: report total distance traveled by service vehicles in #836
- Added reporting support to compute and expose total distance traveled by service vehicles.
- Expanded simulation metrics coverage for operational movement analytics.
-
Sim: Add reporting for simulation lag in #894
- Added lag-focused reporting metrics to improve visibility into simulation timing drift.
- Supports better diagnosis of real-time vs simulated-time performance.
@briantkatch - Brian Tkatch [ID: 40191139]
-
Backend: Implement user prefs endpoints #847 in #855
- Added backend endpoints to create/read/update user preference settings.
- Enables persistent user-level customization across sessions.
-
Infra: graphhopper deployment in #882
- Added deployment support for GraphHopper in the project infrastructure.
- Improves routing stack readiness for production-like environments.
@cmezzac - Christopher Mezzacappa [ID: 40249451]
-
Frontend: removed Updated Column from simulations page in #876
- Removed the
Updatedcolumn from the simulations table for a cleaner UI. - Streamlined table density and reduced visual noise.
- Removed the
-
Sim: added sync delay to scenario json #857 in #895
- Added sync-delay configuration support in scenario JSON.
- Improves control over timing alignment behavior in simulation flows.
@Jpuntul - Jutipong Puntuleng [ID: 40080233]
-
Frontend: multi-station selection via ctrl+click and shift+drag box select in #832
- Added multi-select interactions for stations using Ctrl+click and Shift+drag box selection.
- Improves high-volume assignment workflows in map-heavy scenarios.
-
Docs: Wiki contributions in Repo Wiki
@mahutt - Thomas Mahut [ID: 40249811]
-
Fix: render route even when at next stop #837 in #838
- Fixed route rendering behavior to continue displaying routes at the next stop boundary condition.
- Prevents route visibility drop-offs during stop transitions.
-
Fix: exclude in-service tasks from route generation in #840
- Updated route generation logic to exclude tasks already in service.
- Reduces route noise and improves assignment correctness.
-
Fix: altered driver names and shifts on resume in #875
- Fixed resume behavior that could alter driver identity and shift details unexpectedly.
- Improves state fidelity when resuming persisted simulations.
-
Refactor: stateful resource icons in #888
- Introduced state-aware resource icon behavior for clearer status communication.
- Improves glanceability of resource state in the UI.
-
Chore: fix typo in compute bearing jsdoc comment #891 in #892
- Corrected documentation typo in compute-bearing JSDoc.
-
Frontend: use enum for frontend log contexts in #897
- Replaced string-based frontend logging contexts with an enum.
- Improves type safety and consistency in log metadata.
-
Sim: live sim reporting #846 in #898
- Added live simulation reporting to surface runtime metrics during execution.
- Strengthens operational observability for in-progress simulations.
-
Docs: Wiki contributions in Repo Wiki
- Added Clustering Design Doc documentation.
- List of Revisions: 1
@MeSumo - Sumer Abd Alla [ID: 40247712]
-
Sim: Distance to Next Traffic Event in #883
- Added distance-to-next-traffic-event metric support.
- Improves route-awareness and traffic-event visibility.
-
Sim: Introduce Smooth Position Transition in #887
- Implemented smoother position transition behavior in simulation movement updates.
- Reduces visible jitter and improves motion continuity.
-
Docs: Wiki contributions in Repo Wiki
- Updated Meeting Minutes - General documentation.
- List of Revisions: 1
@Niravanaa - Nirav Patel [ID: 40248940]
-
Infra: Add .dockerignore to exclude unnecessary files from Docker image in #854
- Added
.dockerignoreto trim build context and exclude non-essential files. - Improves image build performance and artifact cleanliness.
- Added
-
Frontend: add internationalization support with English and French in #878
- Added i18n support with English and French language options.
- Establishes localization foundations for broader language coverage.
@Verdone - Giuliano Verdone [ID: 40252190]
-
Frontend: add sim reports to simulations page #845 in #877
- Added simulation report access/display entry points in the simulations page.
- Improves discoverability of reporting outputs from the main list view.
-
Sim: add scheduled route recalculations in #884
- Added scheduled route recalculation behavior during simulation execution.
- Keeps routes fresher under changing traffic/task conditions.
@vinishamanek - Vinisha Manek [ID: 40229456]
-
Frontend: update station icons to numbers in #879
- Updated station icon rendering to numbered icons.
- Improves map readability and station differentiation.
-
Frontend: add station names and collapsed view for driver tasks in #890
- Added station names in UI contexts where stations are listed or rendered.
- Added collapsed view mode for driver task panels to improve information density control.
@CarciDev - David Carciente [ID: 40247907]
@Michael-Mezzacappa - Michael Mezzacappa [ID: 40263789]
📋 What's Changed
- fix: render route even when at next stop #837 by @mahutt in #838
- fix: exclude in-service tasks from route generation by @mahutt in https://github.com/vinishamane...
Iteration 11
Release Date: March 8, 2026
🎯 Overall Summary
Iteration 11 focused on simulation naming, traffic congestion visualization, metrics reporting, authentication hardening, logging improvements, and code quality refactoring. This iteration delivered end-to-end simulation naming (backend persistence, frontend modal, and simulations table display), traffic congestion data overlaid on the route visualization map, a full simulation metrics pipeline (vehicle utilization rate, metrics endpoint, and CSV download), traffic state persistence across simulation runs, and re-enabled router-level API authentication with centralized error-to-HTTP mapping. Key quality improvements include a comprehensive CamelCase-to-snake_case rename, replacement of bare logging imports, structured endpoint and driver-service logging, and a WebSocket router fix enabling live simulation streaming.
🏎️ Velocity
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Simulation Naming & State | Medium (10h) | $220 |
| Metrics & Reporting | Medium (8h) | $176 |
| Authentication & Security | Medium (7h) | $154 |
| Logging & Observability | Medium (6h) | $132 |
| Traffic Persistence & Visualization | Medium (6h) | $132 |
| Code Quality & Refactoring | Low (5h) | $110 |
| Frontend Routing & UX | Low (3h) | $66 |
| Total | 45h | $990 |
Notes:
- The hours listed above represent the time specifically spent on developing the individual software artifacts. They do not reflect the total time our team has committed to Iteration 11.
🔄 Retrospective
What went well
- Stakeholder thinks the app is pretty much done (+1)
- Traffic visualization finally done!
- Task amount slowing down, were almost there!
- TA feedback addressed (back/sim side)
What went wrong
- Some stuff got rolled over to next sprint
- Stakeholder / dispatchers will be unavailable sooner than expected since they are starting the season earlier.
- Meeting with TA and Rigby didn’t happen.
What we can improve on
- Last-minute PRs (+1)
- Getting feedback on design decisions before proceeding with implementation for big tasks
🤝 Individual Contributions
@Ambrose821 - Ambrose McLaughlin [ID: 40239754]
-
Sim: Added vehicle utilization rate reporting in #794
- Added
get_vehicle_utilization_ratio(),increment_vehicle_active_time(), andincrement_vehicle_idle_time()toSimulationReport; utilization = active time ÷ (active + idle time) - Idle time covers any period where a vehicle has no driver assigned or a driver with no tasks; active time covers all other states
- Added metric recording logic in
vehicle.pyand included utilization in the payload emitted bysimulator_controller.py
- Added
-
Backend: Add endpoint to retrieve simulation metrics in #819
- Added a new GET endpoint
/api/v1/simulation/{sim_id}/reportreturning aggregate metrics via a newSimulationReportResponseschema inback/schemas/simulation_report.py - Implemented
get_simulation_reportinSimulationServiceto fetch the latest persisted report metrics with permissions and error handling
- Added a new GET endpoint
-
Frontend: Add metrics download button in #818
- Added a "Report" button to the actions column in the simulations table that calls the new metrics endpoint and downloads the result as a CSV file
- Introduced
GetSimulationReportResponseTypeScript interface intypes.tsto define the expected API response shape
@briantkatch - Brian Tkatch [ID: 40191139]
-
Chore: Delete CDK in #803
- Removed the AWS CDK infrastructure directory; the Ansible-based deployment is now current and includes observability and TLS support
- Eliminates stale cloud configuration that no longer reflected the active deployment strategy
-
Backend: Implement sim naming in BE #773 in #804
- Updated
initialize_simulationto optionally accept a simulation name - Ensured the backend never returns
nullfor a sim name, falling back to a generated name derived from the scenario name
- Updated
-
Backend: Implement traffic persistence #706 in #826
- Added
traffic_csv_data(TEXT, nullable) column tosim_instanceswith migration09bfae8f09b5_add_traffic_csv_data_to_sim_instances.py - Enhanced
TrafficConfigto support template-based (traffic_level) and in-memory (traffic_csv_data) modes;TrafficParsernow acceptsio.StringIOfor in-memory CSV parsing - Added
traffic_config_extractor.pyutility shared byJsonParseStrategyandReplayParser; updatedinitialize_simulation,restore_simulation, andbranch_simulationservices accordingly - 21 tests covering in-memory CSV parsing, traffic config extraction,
ReplayParserrestoration, and service-layer persistence; all 1,259 tests pass
- Added
@Jpuntul - Jutipong Puntuleng [ID: 40080233]
- Frontend: Add traffic congestion data to simulation and route visualization in #733
- Frontend: split route lines into colored sub-features via a
splitByTraffichelper ingeojson-adapters.ts; worst severity wins when ranges overlap (severe > moderate > free_flow); Mapbox layers use data-drivencoalescepaint expressions oncolor/opacityproperties, defaulting to green when no traffic data is present - Traffic colors are trimmed automatically as drivers advance because the existing
turf.jslineSlicecall already trims route features from the driver's current position
- Frontend: split route lines into colored sub-features via a
@mahutt - Thomas Mahut [ID: 40249811]
-
Frontend: Optimistic task state update on assign #709 in #776
- Fixed the multiple in-progress tasks bug:
BatterySwapTask.set_assigned_driverandunassign_drivernow useself.set_stateinstead of directself.state =assignment, ensuringhas_updated = Trueso the diff frame reflects the change - Updated client-side optimistic entity state update to set task state to "assigned" immediately on submit, preventing tasks from briefly showing as "in progress" when the sim is paused
- Introduced a
TaskStateenum
- Fixed the multiple in-progress tasks bug:
-
Frontend: Add sim name to simulations table #775 in #800
- Replaced the
User IDcolumn with aNamecolumn in the simulations table; displays a faded "N/A" when the simulation'snameattribute isnull - Added
nameattribute to theSimulationTypeScript interface definition
- Replaced the
-
Fix: Real time factor to playback speed conversion #815 in #816
- Fixed
SimulationService.get_playback_speedwhich returned the rawreal_time_factorinstead of its inverted value, causing playback speed to appear backwards
- Fixed
-
Frontend: Simulation name modal in #820
- Prompts the user for a simulation name when they first press "Start Simulation"; defaults to the current scenario name and supports pressing Enter to start directly
- Adds a loading state for simulation initialization; updates sim name type and removes the null check in the simulations table
-
Refactor: Update frontend simulation pages routing path #830 in #831
- Updated client-side routing from
simulation/tosimulations/to comply with REST endpoint naming standards - Updated all internal links, redirects, and
useNavigatecalls; no user-facing URL changes
- Updated client-side routing from
-
Docs: Wiki contributions in Repo Wiki
- Updated Deployment Plan and Infrastructure documentation.
- List of Revisions: 1
@MeSumo - Sumer Abd Alla [ID: 40247712]
-
Refactor: Rename files and variables from CamelCase to snake_case in #799
- Renamed sim CamelCase source files such as
SimulatorController,OSRMConnection, andRealTimeDriverto snake_case - Renamed CamelCase variables inside classes to snake_case; fixed all imports, cross-module references, and tests referencing these changes
- Pure style refactor with no behavioral changes, validated by the existing test suite
- Renamed sim CamelCase source files such as
-
Refactor: Replace Bare Logging Imports in #801
- Replaced all
import loggingin thesimandscriptsfolders withfrom grafana_logging.logger import get_logger - Replaced all
logger = logging.getLogger(__name__)withlogger = get_logger(__name__)for consistency with the centralized Grafana logging setup
- Replaced all
-
Docs: Wiki contributions in Repo Wiki
- Updated Meeting Minutes – General documentation with iteration meeting notes.
- Created and updated R3 Simulation Spec documentation.
- List of Revisions: [1](https://github.com/vinishamanek/VeloSim/wiki/Meeting-Minutes-%E2%80%90-General/0ca300c23eefdb3750a1a2e06b...
Iteration 10
Release Date: February 23, 2026
🎯 Overall Summary
Iteration 10 focused on traffic congestion system completion, frontend task management enhancements, simulation architecture improvements, and security hardening. This iteration delivered the full Montreal Traffic CSV pipeline with realistic congestion data, three congestion-level templates (low/medium/high), mass task assignment via both click-modifiers and station drag-and-drop, a major simulation-React architecture refactor decoupling client logic from the render cycle, driver state visualization in the resource bar, and hardened CI/CD security. Key achievements include the end-to-end traffic configuration system, the first automated API dispatcher demo, and significantly improved logging observability via queryable Loki labels.
🏎️ Velocity
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Traffic & Congestion System | High (27h) | $594 |
| Frontend Enhancements & Task Mgmt | Medium (13h) | $286 |
| Backend, Logging & API | Medium (10h) | $220 |
| Simulation Features & Metrics | Medium (7h) | $154 |
| Infrastructure & CI/Security | Medium (5h) | $110 |
| Code Architecture & Refactoring | Low (3h) | $66 |
| Total | 65h | $1,430 |
Notes:
- Hourly rate assumed: $22/hr (average co-op software engineering rate from Concordia, source).
- The hours listed above represent the time specifically spent on developing the individual software artifacts. They do not reflect the total time our team has committed to Iteration 10.
🔄 Retrospective
What went well?
- Got a lot done (+1)
- A lot of PRs merged!
- Good communication and feedback loop with stakeholder (+3)
- Quick fixes
- Usability test with domain expert! (+1)
- Big client side refactor (thank you thomas!)
What went wrong?
- Left some stuff to last minute (+1)
What can be improved on?
- Team bonding activity (+1)
- Addressing grading feedback as much as possible
- Another scheduled time for a sync up meeting (if availabilities)
- Steady flow of PRs across the iteration instead of end-of-sprint clustering (probably trickier this iteration given midterms) (+3)
🤝 Individual Contributions
@Ambrose821 - Ambrose McLaughlin [ID: 40239754]
-
Sim: Refactor Scheduled Tasks in #715
- Refactored
DefaultTPUStrategyto manage scheduled tasks viastation_scheduled_tasksdict with O(1) lookup and a_scheduled_tasks_setfor O(1) removal - Updated the abstract
TaskPopupStrategyinterface and all usages to return a list ofBatterySwapTaskinstead of a boolean - Removed spawn delay and scheduled state logic from
TaskandBatterySwapTaskconstructors, centralizing responsibility in the popup strategy
- Refactored
-
Sim: Fix scheduled tasks omitted before sim start time in #742
- Added check in
json_parser_strategy.pyto instantiate and assign scheduled tasks to their stations when they are scheduled before the simulation start time - Prevents pre-start-time tasks from being silently dropped from the scenario
- Added check in
@briantkatch - Brian Tkatch [ID: 40191139]
-
Backend: Add demo of API usage in #693
- Added
apidemo/directory with a Python-based automated task dispatcher demonstrating VeloSim REST API usage - Implements greedy nearest-neighbor algorithm for continuous task-driver assignment with OAuth2 authentication and duplicate-assignment prevention
- Includes generated OpenAPI client,
setup.shscript, and committedopenapi.jsonfallback for offline client generation
- Added
-
CI: Fix key management for 3rd-party repos in #718
- Migrated from deprecated
apt_keymodule toget_url+gpg --dearmorfor modern APT key storage in/usr/share/keyrings/ - Repository entries now include
signed-by=parameter binding repos to their specific key, preventing any key from signing any repo - Applied to both Docker and PostgreSQL Ansible roles
- Migrated from deprecated
-
Frontend: Add driver name above the driver in #716
- Passes driver name in GeoJSON properties and adds a text field to the Mapbox symbol layer
- Driver names now display at all zoom levels above vehicle icons on the simulation map
-
CI: Harden traffic template access and deployment in #760
- Added path-traversal defence against inputs like
../../whatever.csvescaping the templates directory - Added traffic dataset download to the backend Dockerfile so templates deploy to production
- Added traffic CSV caching and generation commands to the backend CI workflow
- Added path-traversal defence against inputs like
@cmezzac - Christopher Mezzacappa [ID: 40249451]
- Sim: Report average response time in #714
- Tracks task service duration upon completion by computing
env.now - spawn_delay - Added
get_average_service_time_for_tasks()andadd_task_count_for_shift()toSimulationReport - Added defensive handling when
spawn_delayisNoneand comprehensive unit test coverage
- Tracks task service duration upon completion by computing
@Jpuntul - Jutipong Puntuleng [ID: 40080233]
-
Frontend: Add logging to scenario entity dialog components in #735
- Added structured
WARNINGlogs on form validation failure andINFOlogs on successful entity submission - Updated
add-driver-dialog.tsx,add-station-dialog.tsx, andadd-vehicle-dialog.tsxwithlogandLogLevelimports - Extracted submitted data into a local variable before calling
onSubmitfor cleaner logging context
- Added structured
-
Frontend: Mass assign tasks by dragging from a station in #730
- Implemented
setupStationDragHandlerswith fullmousedown → drag → mouseuplifecycle and a 5-pixel distance threshold to avoid interfering with normal clicks - DOM-based drag ghost follows cursor above all overlays including the resource bar; drop targets include both driver icons on the map and driver cards in the resource bar
- Added
useStationDragHandlershook with toast notifications for edge cases (station not found, no open tasks)
- Implemented
-
Docs: Wiki contributions in Repo Wiki
- Updated Infrastructure and Tools documentation.
- List of Revisions: 1
@mahutt - Thomas Mahut [ID: 40249811]
-
Chore: Resolve frontend dependency vulnerabilities in #712
- Resolved three known CVE vulnerabilities in the frontend sub-directory: GHSA-h5cw-625j-3rxh, GHSA-2w69-qvjg-hvjx, GHSA-8v8x-cx79-35w7
-
Frontend: Decouple client sim and React code in #749
- Introduced
SimulationEngineclass andReactiveStateManagerto fully separate client-side simulation logic from the React render cycle - Eliminated stale-closure refs, duplicate
useState/useRefpairs, and dead code (e.g. unusedrequestReassignment) - Consolidated
assignTask,batchAssignTasks, andreassignTaskinto a singleassignTasksmethod now that the batch endpoint supports reassignment
- Introduced
-
Frontend: Disable user actions on replay in #766
- Disables all
TaskItems when in scrubbing or local (replay) frame-source mode to prevent invalid assignments during playback - Removes the now-unnecessary
taskDragAndDropfeature flag
- Disables all
-
Docs: Wiki contributions in Repo Wiki
- Updated Usability Tests documentation.
- List of Revisions: 1
@MeSumo - Sumer Abd Alla [ID: 40247712]
-
Sim: Introduces Montreal Traffic CSV in #732
- Implemented
traffic_to_csvscript parsing Montreal public datasets into a VeloSim-compatible traffic CSV using pandas with resumable Google Drive downloads - Applies temporal folding for a typical workday profile with 5-minute intervals; uses 85th-percentile flow speed for accurate free-flow baselines
- Added
sim_start_time/sim_end_timetoTrafficConfigand updatedTrafficParserto resolve time-relative tick positions across multi-day scenarios
- Implemented
-
Sim: Congestion Templates and Traffic Configurations in #751
- Added
create_templates.pyandretrieve_templates.pyscripts for generating and downloading three congestion-level CSV templates (low/medium/high) from Google Drive - Replaced
traffic_pathwithtraffic_levelinTrafficConfig;json_parser_strategyvalidates levels and defaults to"default"as requested by stakeholder - Supported
traffic_leveloptions:"default","no_traffic","low_congestion","medium_congestion","high_congestion"
- Added
-
CI: Harden traffic template access and deployment in [#760](https://github.com/vinishamanek/VeloSi...
Iteration 9
Release Date: February 9, 2026
🎯 Overall Summary
Iteration 9 focused on advanced traffic control systems, simulation reporting metrics, scenario editing improvements, and infrastructure upgrades. This iteration delivered major advancements in congestion control with a complete traffic state machine, per-segment traffic application, batch task operations, entity creation forms, and logging infrastructure improvements. Key achievements include the implementation of US-25 (Congestion Control) across three coordinated PRs, simulation performance metrics, enhanced scenario editor with CodeMirror integration, and the migration from Promtail to Grafana Alloy.
🏎️ Velocity
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Traffic & Congestion Control | High (35h) | $770 |
| Simulation Features & Metrics | Medium (18h) | $396 |
| Frontend Enhancements | Medium (15h) | $330 |
| Infrastructure & Logging | Medium (11h) | $242 |
| Backend Improvements | Low (4h) | $88 |
| Total | 83h | $1,826 |
Notes:
- Hourly rate assumed: $22/hr (average co-op software engineering rate from Concordia, source).
- The hours listed above represent the time specifically spent on developing the individual software artifacts. They do not reflect the total time our team has committed to Iteration 9.
🔄 Retrospective
What went well?
- Fast PR reviews (+2)
- Quicker response timings on the PR comments/reviews
- Completed stakeholder-identified high-priority issues (+1)
- We've kept stakeholder up to date on ATs
What went wrong?
- Some poor task size estimation
- Left some tasks till the end of the iteration (+2)
- Low on sim team reviewers (+1)
What can be improved on?
- Team Bonding Activity (+2)
- Some delays and last minute work (+2)
🤝 Individual Contributions
@CarciDev - David Carciente [ID: 40247907]
-
Sim: Granular Per-Segment Traffic Control in #674
- Implemented per-segment traffic control system allowing traffic to target specific node-to-node segments within roads
- Created TrafficRange dataclass and road node tracking infrastructure with O(1) lookup performance
- Added comprehensive traffic application flow with reverse indexing and segment-wise multiplier calculations
-
Sim: Traffic Parser in #683
- Introduced traffic event system for loading and managing events from CSV files
- Created MapPayload configuration structure for cleaner map initialization
- Added TrafficEvent and TrafficEventState entities with CSV parser and validation
-
Sim: Traffic Event State Machine in #696
- Implemented core traffic event state machine with PENDING → TRIGGERED → APPLIED → EXPIRED → DONE lifecycle
- Added SimPy-based event processing pipeline with synchronization and geometry resolution
- Integrated routing provider traffic updates with graceful NotImplementedError handling
-
Sim: TrafficStateStore with sim_id Isolation in #697
- Implemented thread-safe in-memory TrafficStateStore for per-simulation traffic state isolation
- Wired sim_id through Simulator → SimulationEnvironment → MapPayload → OSRMAdapter chain
- Added 5 traffic CRUD methods to OSRMAdapter (set, get, clear, batch operations)
-
Sim: Traffic Mapper with PositionRegistry in #698
- Created PositionRegistry for O(1) geometry intersection between roads and traffic events
- Implemented point generation strategies and road traffic application via overlap detection
- Completed allocated synchronization paths with GPS_SYNC_DELAY between sim and routing provider updates
-
Sim: Traffic Testing Script in #705
- Developed dynamic_traffic_demo.py for generating scenarios with deterministic traffic events
- Implemented three-pass validation (direct, pipeline, routing provider) with timing calculations
- Created GeoJSON visualization output with per-road polylines, traffic markers, and speed-colored waypoints
-
Docs: Wiki contributions in Repo Wiki
- Updated Missing knowledge and Independent Learning with traffic engine research and learning documentation.
- Created Routing + Traffic Engine Research page with comprehensive traffic implementation details.
- Updated Overall Architecture and Class Diagrams, Performance, and Risks pages.
- List of Revisions: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
@Verdone - Giuliano Verdone [ID: 40252190]
-
Frontend: Hide stations with zero tasks in #669
- Implemented filter-based approach to hide station icons with taskCount = 0 from simulation map
- Enhanced map clarity by reducing visual clutter and focusing attention on active stations
- Used feature filtering to remove zero-task stations from layer rendering
-
Backend: Batch task assign endpoint in #675
- Created mass task assignment endpoint supporting multiple task assignment in single operation
- Implemented best-effort approach with per-item result reporting for batch operations
- Added comprehensive test coverage for batch assignment scenarios
-
Backend: Task-reassignment to batch assign in #700
- Enhanced batch assignment endpoint to handle both fresh assignments and reassignments seamlessly
- Removed need for frontend to distinguish between assignment types in batch operations
- Added tests for mixed batch operations including reassignment scenarios
-
Docs: Wiki contributions in Repo Wiki
@Niravanaa - Nirav Patel [ID: 40248940]
-
Frontend: Fix unsaved changes dialog in #671
- Fixed incorrect unsaved changes dialog appearing when deleting different scenario
- Added isDeleteDialogOpen state tracking to prevent false positive warnings
- Enhanced unsaved changes detection to treat empty content as no changes
-
Backend: Append timestamps to logs in #677
- Added timestamps to all backend log file outputs for self-contained debugging
- Updated FILE_LOG_FORMAT in logger.py to include asctime timestamp
- Added test coverage to verify timestamp presence and format in log files
-
Backend: Branch simulation service layer test coverage in #676
- Increased test coverage for branch_simulation service method error paths
- Added tests for missing scenario_payload, keyframe parsing failures, and DB rollback scenarios
- Enhanced error path coverage for previously untested edge cases
-
Contributed to traffic event state machine design
@vinishamanek - Vinisha Manek [ID: 40229456]
Iteration 8 (Release 2)
Release Date: January 28, 2026
🎯 Overall Summary
Iteration 8 focused on simulation features, UI/UX improvements, infrastructure enhancements, and system stability. This iteration delivered major advancements in resumability, traffic domain models, batch processing for simulation frames, seek endpoint functionality, and numerous bug fixes. Key achievements include end-to-end resumability, drag-to-import scenario JSON, route visualization improvements, MapBox error logging, and enhanced debugging capabilities for the backend.
🏎️ Velocity
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Simulation Features & Resumability | High (38h) | $836 |
| UI/UX Enhancements | Medium (34h) | $748 |
| Infrastructure & Monitoring | Medium (29h) | $638 |
| Bug Fixes & Stability Improvements | Medium (24h) | $528 |
| Backend Improvements & Endpoints | Low (19h) | $418 |
| Total | 144h | $3,168 |
Notes:
- Hourly rate assumed: $22/hr (average co-op software engineering rate from Concordia, source).
🔄 Retrospective
What Went Well
- Usability testing (+2)
- Got through wave of PRs
- Excellent turnaround with usability tests
- Replay features (+1)
- Focus on design quality for new features (+1)
- Features planned for R2 were mostly completed!
- We reached at least 80% completion of the project (either finished or started all core features)
- Got a lot of tickets done in iteration 8 (+2)
What Went Wrong
- Logs (+2)
- Honestly not sure why we are still iterating over prod metrics after several confirmations of functionality have been sought
What Can Be Improved
- People assigned to tasks should fill out the task fields
- Ensuring that all usability tests are consistent with tasks done and recordings that are viewable (+1)
👥 Individual Contributions
@Ambrose821 - Ambrose McLaughlin [ID: 40239754]
-
Sim: Split HEADING_TO_HQ state in #559
- Split HEADING_TO_HQ state into HEADING_TO_HQ_RESTOCK and HEADING_TO_HQ_END_SHIFT states
- Refactored driver state machine to distinguish between battery restocking and shift end scenarios
- Updated Overall Architecture and Class Diagrams documentation with new state machine diagrams
-
Sim: Added servicing time for tasks in #617
- Implemented TaskServicingTimeStrategy and DefaultTSTStrategy for non-zero task servicing time
- Added default 4-minute service time with strategy pattern for future dynamic servicing time
- Integrated time-based task servicing into driver.py and SimBehaviour framework
-
Docs: Wiki contributions in Repo Wiki
@briantkatch - Brian Tkatch [ID: 40191139]
-
CI: Add su_abdal to server in #555
- Added su_abdal user to deployment server configuration via Ansible
- Configured SSH access permissions for new team member
- Updated server user management for expanded team collaboration
-
CI: Retain logs for 60 days in #557
- Configured Loki log retention policy to preserve logs for 60 days instead of default
- Enabled long-term troubleshooting capabilities for production issues
- Enhanced system monitoring and audit trail for operational compliance
-
Backend: Handle resume of paused simulations in #568
- Implemented resume endpoint to handle paused simulation restoration
- Added validation for simulation state before resume operations
- Enhanced error handling for edge cases in simulation resumption
-
Backend: Add seek endpoint in #621
- Implemented GET /api/v1/simulation/{sim_id}/seek endpoint for arbitrary position seeking
- Added proper frame reconstruction from keyframes and diff frames
- Implemented live edge detection to prevent seeking beyond current simulation progress
-
Backend: Branch endpoint in #628
- Implemented branch endpoint to create simulation branches from specific frames
- Added lookback logic to find nearest keyframe when branching from non-key frame
- Configured branched simulations to have their ID overwritten in back package
-
Docs: Wiki contributions in Repo Wiki
- Updated Deployment Plan and Infrastructure
- Created and designed the original Design Doc: US-23 Simulator Persistence and Replayability (updated to Design Doc - US-23 Simulator Persistence and Replayability as the semi colon caused issues with windows machines)
- List of Revisions: 1
@CarciDev - David Carciente [ID: 40247907]
- Sim: Traffic Domain Models and Ratio-based mapping Algorithm in #541
- Implemented traffic domain models with ratio-based mapping algorithm for congestion modeling
- Created comprehensive architecture with ASCII diagrams for traffic state representation
- Enhanced simulation realism with traffic-aware routing and congestion calculations
@cmezzac - Christopher Mezzacappa [ID: 40249451]
-
Backend: Expose resume method to back in #544
- Exposed resume method to backend API for simulation restoration
- Implemented simulation state restoration from persisted keyframes and simulation instances
- Added comprehensive architecture documentation with diagrams for resume functionality
-
Backend: Added debugging feature to the backend in #570
- Implemented debugpy integration for backend simulator debugging
- Added breakpoint support and remote debugging capabilities
- Enhanced development workflow with IDE-based debugging for simulation logic
- Added documentation and instructions in Debug Instructions
-
Backend: End to end resumability feature in #625
- Completed end-to-end resumability with new simulations page accessible via feature flag
- Added completed boolean to simulators to track completion status and prevent resuming finished simulations
- Updated /my endpoint to return simulation instance information for resume functionality
-
Docs: Wiki contributions in Repo Wiki
@Jpuntul - Jutipong Puntuleng [ID: 40080233]
-
Frontend: Route toggle control in #550
- Implemented toggle control to show/hide driver route paths on simulation map
- Added user preference for managing map visual complexity during simulations
- Enhanced map clarity by allowing users to declutter route visualizations
-
Frontend: Improve mapbox error logging in #553
- Improved MapBox error logging to extract meaningful error messages from API responses
- Enhanced error message parsing to surface actionable information for map-related failures
- Improved debugging capabilities for MapBox integration issues
-
Docs: Wiki contributions in Repo Wiki
- Updated UI Evolution
- List of Revisions: 1
@mahutt - Thomas Mahut [ID: 40249811]
- Frontend: Make selected item bar task list scrollable ...
Iteration 7
Release Date: January 12, 2026
🎯 Overall Summary
Iteration 7 focused on metrics & observability, routing architecture, simulation features, and UI enhancements. This iteration delivered comprehensive metrics tracking for frontend actions and backend endpoints, Python application performance monitoring, vehicle inventory management, HQ widget implementation, and driver shift schedules. Key achievements include Grafana dashboard migration to a standalone package, OSRM decoupling via adapter pattern, MapController refactoring, unsaved changes protection, and resume simulation functionality.
🏎️ Velocity
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Metrics & Observability | High (35h) | $770 |
| Routing & Architecture Refactoring | Medium (30h) | $660 |
| Simulation Features & Enhancements | Medium (25h) | $550 |
| Frontend UI & UX Improvements | Low (20h) | $440 |
| Infrastructure & Bug Fixes | Low (15h) | $330 |
| Total | 125h | $2,750 |
Notes:
- The hours listed above represent the time specifically spent on developing the individual software artifacts. They do not reflect the total time our team has committed to Iteration 7.
🔄 Retrospective
What Went Well
- Got most of R2 sim behaviour implemented
- Usability test strategy is looking strong (+1)
- Great simulator enhancements (routing engine adapter, decoupling, entity method refactoring, driver schedules)
- Great pair programming for tasks (+1)
- Improved logs & metrics to better understand the app
- Good teamwork - people volunteer to help (+1)
What Went Wrong
- Blocked waiting for heavy sim PRs (+1)
- Left big PRs to last minute
- Last minute request from Fares for usability tests
- Bit off more than we can chew for work (flat burndown)
What Can Be Improved
- Communication between team members when schedule or technical blocks arise (+1)
- More communication with stakeholder (understandable for past weeks due to the break/holidays) (+2)
- Work loads could have been better spread between team members according to task weight and everyone's schedule (+2)
- Burndown chart a bit lackluster, 40-48% completion (+2)
- Be willing to hold design reviews for giant / complex implementations
👥 Contributions by Individuals
@Niravanaa - Nirav Patel [ID: 40248940]
-
Backend: Remove obsolete station code in #477
- Removed all deprecated code related to stations and station tasks entities
- Created Alembic migration to drop obsolete database tables
- Completed migration to keyframe-based persistence architecture
-
Backend: Enhanced simulation initialization in #479
- Improved error handling for simulation initialization and validation
- Enhanced validation error messages with specific field-level feedback
- Added structured error responses for better debugging
-
Frontend: Add metrics tracking for actions in #486
- Implemented comprehensive frontend context logging for user actions
- Added context attributes for scenario operations and user logout events
- Enhanced observability of user behavior not captured by backend metrics
-
Docs: Update logging documentation in #490
- Updated logging configuration documentation in README
- Cleaned up configuration table formatting
- Improved documentation clarity and accuracy
@briantkatch - Brian Tkatch [ID: 40191139]
-
CI: Remove orphaned containers on deploy in #493
- Added
--remove-orphansflag to docker-compose down command - Automated cleanup of orphaned Docker containers during deployment
- Improved deployment reliability and reduced resource waste
- Added
-
Infrastructure: Fix Grafana hostname in #522
- Resolved Grafana infinite redirect in production
- Fixed hostname configuration for reverse proxy
- Improved monitoring dashboard accessibility
-
Infrastructure: Add user to deployment server in #526
- Added m_mezz user to deployment server Ansible configuration
- Updated authorized SSH keys for team access
- Enhanced team collaboration capabilities
-
Infrastructure: Extend session lifetime in #529
- Extended JWT session lifetime from 1 hour to 12 hours
- Reduced user re-authentication frequency
- Improved user experience for long simulation sessions
@mahutt - Thomas Mahut [ID: 40249811]
-
Frontend: Add HQ widget to simulation UI in #514
- Implemented headquarters widget with location display
- Added HQ marker and information panel to simulation map
- Enhanced simulation UI completeness and monitoring
-
Backend: Delete calculateRouteProgress method in #516
- Removed obsolete calculateRouteProgress utility method
- Cleaned up unused route calculation code
- Simplified codebase after routing refactoring
-
Docs: Wiki contributions in Repo Wiki
@vinishamanek - Vinisha Manek [ID: 40229456]
-
Frontend: Iterate through task queue geometry in #498
- Implemented full task queue geometry iteration
- Fixed incomplete route visualization on map
- Display complete route paths for all queued tasks
-
Frontend: Add driver name and battery to resource item in #519
- Display driver names in resource items
- Show battery count for vehicles in UI
- Enhanced resource information display with real-time updates
-
Frontend: Fix nextTaskEndIndex overwrite in #520
- Prevented nextTaskEndIndex overwrite when HQ is next stop
- Fixed edge case in route calculation logic
- Improved routing reliability for HQ-bound vehicles
-
Docs: Wiki contributions in Repo Wiki
@Verdone - Giuliano Verdone [ID: 40252190]
-
Backend: Enforce Montreal coordinate bounds in #475
- Added coordinate validation for Montreal region boundaries
- Implemented geographic bounds checking for scenarios
- Prevented invalid scenario coordinates outside operational area
-
Backend: Add Python app performance monitoring in #488
- Implemented application performance monitoring with Prometheus
- Added CPU and RAM usage tracking metrics
- Enhanced observability of backend application health
-
Docs: Wiki contributions in Repo Wiki
@MeSumo - Sumer Abd Alla [ID: 40247712]
- **Sim: Vehicle Inventory Man...
Iteration 6
Release Date: December 28, 2025
🎯 Overall Summary
Iteration 6 focused on code quality, documentation, deployment infrastructure, and UI enhancements. This iteration delivered comprehensive docstrings for backend and simulation modules, vulnerability resolution, thread safety improvements, persistent database keyframe storage, scenario validation consolidation, and resource type separation. Key achievements include Sphinx documentation infrastructure, Ansible-based on-premise deployment, drag-and-drop task reordering, GBFS station integration, and improved simulation frame payload structure.
🏎️ Velocity
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Documentation & Code Quality | High (45h) | $990 |
| Infrastructure & Deployment | Medium (35h) | $770 |
| Frontend Features & UI Enhancements | Medium (30h) | $660 |
| Backend & Simulation Improvements | Medium (25h) | $550 |
| Bug Fixes & Performance Optimization | Low (20h) | $440 |
| Total | 155h | $3,410 |
Notes:
- The hours listed above represent the time specifically spent on developing the individual software artifacts. They do not reflect the total time our team has committed to Iteration 6.
🔄 Retrospective
What Went Well
- We were quick to address the comments provided by the TA/Rigby
- R2 Scenario Schema is live (+1)
- Efficient and useful meetings
- Separation of Resource into Vehicle/Driver went well
- Early planning/design between sub teams = Parallel work for related tasks (+1)
- Meeting to discuss/plan expected data models well in advance made things a lot easier
What Went Wrong
- Bad estimation/delays on a lot of critical path features
- Logging and metrics disappointing for the amount of time/iterations spent on it
- A bit of back-and-forth regarding PR reviews, rules are laid back, should be better now.
- Vacations, illness, etc causing people to be unavailable
- Seems we never really know when the next meet is - partially due to holidays
- Lots of tasks didn't get completed by the end of iteration 6
What Can Be Improved
- Get more visibility from metrics and logs
- PR 418 (line string visual) was opened for 15 days
👥 Contributions by Individuals
@Niravanaa - Nirav Patel [ID: 40248940]
-
Backend: Convert async endpoints to sync in #409
- Fixed blocking DB calls in async FastAPI endpoints
- Improved endpoint performance and reliability
-
Backend: Add comprehensive Google-style docstrings in #410
- Added full docstring format to backend functions
- Improved code documentation and maintainability
-
Sim: Add comprehensive docstrings in #412
- Added full docstrings to sim subsystem
- Enhanced simulation code documentation
-
Backend: Implement mock database testing in #413
- Created mock testing framework for database-related tests
- Improved test isolation and reliability
-
Backend: Replace print statements with logging in #414
- Implemented centralized logging system
- Replaced print statements throughout backend
-
Backend: Add Sphinx documentation infrastructure in #417
- Set up auto-generated HTML documentation
- Created documentation generation pipeline
-
Backend: Consolidate scenario validator in #443
- Unified ScenarioValidator and JsonParseStrategy
- Simplified validation logic
@briantkatch - Brian Tkatch [ID: 40191139]
-
Infrastructure: Ansible on-premise deployment in #342
- Implemented Ansible-based deployment automation
- Created infrastructure-as-code for on-premise setup
-
Infrastructure: Fix deployment SSH host key in #422
- Resolved deployment SSH host key setup failure
- Used fixed host key for stable deployments
-
Infrastructure: Remove Ansible Vault password ref in #426
- Fixed deployment failures due to invalid Ansible Vault reference
- Improved deployment security configuration
-
Backend: Fix health checks in #433
- Improved health check reliability
- Enhanced monitoring capabilities
-
Backend: Persist keyframes to database in #436
- Implemented 1/n frame persistence to database
- Enabled simulation state recovery
-
Backend: Persist scenario on sim start in #453
- Added automatic scenario persistence
- Improved simulation state management
@mahutt - Thomas Mahut [ID: 40249811]
-
Frontend: Resolve dependency vulnerabilities in #402
- Fixed frontend dependency security vulnerabilities
- Updated packages to secure versions
-
Sim: Fix task spawn timing in #408
- Made task spawn delay relative to sim start time
- Fixed scheduled tasks spawning at correct times
-
Frontend: Refactor simulation frame payload in #419
- Improved frame payload structure
- Enhanced data transmission efficiency
-
Frontend: Use Position type consistently in #430
- Standardized position type declarations
- Reduced code duplication and improved clarity
-
Frontend: Fix scenario template coordinates in #450
- Updated coordinates to Montreal locations
- Fixed broken scenario template
-
Frontend: Add GBFS stations button in #454
- Created "Use GBFS Stations" feature
- Enabled integration with real bike-share data
-
Frontend: Add GBFS to Content-Security-Policy in #473
- Whitelisted gbfs.velobixi.com in CSP
- Enabled GBFS API access
@vinishamanek - Vinisha Manek [ID: 40229456]
-
Sim: Add clock to simulation in #390
- Implemented simulation clock feature
- Enhanced time tracking in simulations
-
Docs: Wiki contributions in Repo Wiki
@Verdone - Giuliano Verdone [ID: 40252190]
-
Backend: Add WebSocket thread safety in #415
- Fixed missing thread safety for WebSocket utilities
- Improved concurrent connection handling
-
Backend: Split resources in backend code in #470
- Separated drivers and vehicles in backend
- Improved resource type management
-
Docs: Wiki contributions in Repo Wiki
- List of Revisions: 1
@Jpuntul - Jutipong Puntuleng [ID: 40080233]
-
Frontend: Add line numbers to validation in #431
- Enhanced save/edit validation with line numbers
- Improved error reporting for scenario editing
-
Frontend: Implement drag-and-drop task reordering in #440
- Created UI for reordering resource task sequence
- Added drag-and-drop functionality
@Michael-Mezzacappa - Michael Mezzacappa [ID: 40263789]
-
Sim: Log simulation startup time in #420
- Added logging for sim startup duration
- Improved performance monitoring
-
Docs: Wiki contributions in Repo Wiki
- List of Revisions: 1
@Ambrose821 - Ambrose McLaughlin [ID: 40239754]
-
Sim: Split resources into drivers and vehicles in #439
- Separated resource types in sim and frontend
- Improved resource type modeling
@CarciDev - David Carciente [ID: 40247907]
-
Frontend + Sim: Add LineString visualization in #418
- Fixed missing LineString in payload
- Added route visualization to map
-
Sim: Traffic Management (WIP)
- Feature pushed to next sprint due to the Flu lasting the entirety of this sprint.
@MeSumo - Sumer Abd Alla [ID: 40247712]
- Sim: Montreal Traffic Integration in #464 :
- Researched various data...
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...
Iteration 4 (Release 1)
Release Date: November 10, 2025
🎯 Overall Summary
Iteration 4 represents the culmination of Release 1, delivering comprehensive scenario management capabilities, end-to-end testing infrastructure, AWS deployment, and advanced simulation control features. This release implements complete CRUD operations for scenarios, Playwright E2E testing framework, user-specific dashboards, task scheduling, and WebSocket-based real-time simulation. The iteration successfully closed 61 out of 68 issues (90% completion rate) with all planned story points completed.
🏎️ Velocity
For the fourth iteration, we planned and successfully completed the following:
- ✅ US-9: Create Scenario - Complete
- ✅ US-10: Save Scenario - Complete
- ✅ US-11: Load a Saved Scenario - Complete
- ✅ US-8: Dispatch Battery Swap Task to a Resource - Complete
- ✅ US-12: Export Scenario (PR: #272)
- ✅ US-13: Import Scenario (PR: #310)
- ✅ US-7: Separation of Users - Complete (PR: #281)
- ✅ Simulation pause and resume components (PR: #39)
- ✅ Speed alteration control components (PRs: #324, #38)
- ✅ E2E testing framework setup (PRs: #271, #278, #326)
- ✅ AWS deployment implementation (PR: #274)
- ✅ Frontend logging infrastructure (PRs: #266, #276)
- ✅ Feature toggles (PR: #282)
- ✅ Task and resource scheduler (PR: #261)
- ✅ User management dashboard (PRs: #260, #262)
For the fourth iteration, we were able to get the following done early or as additional work:
- 🌱 WebSocket simulation with authentication (PR: #314)
- 🌱 Migration validation scripts (PR: #270)
- 🌱 Comprehensive error handling utilities
- 🌱 Python dependency caching in CI
- 🌱 Refactored sim folder structure
- 🌱 Diversity statement on website
💵 Contractor Estimate
| Artifact Type | Level of Effort | Estimated Price (CAD) |
|---|---|---|
| Backend Scenario Management & APIs | High (70h) | $1,540 |
| Frontend Scenario Editor & Dashboard | High (60h) | $1,320 |
| E2E Testing Framework & Infrastructure | High (45h) | $990 |
| Simulator Task Scheduling & WebSocket | Medium (40h) | $880 |
| AWS Deployment & Infrastructure | Medium (30h) | $660 |
| User Management Dashboard | Medium (25h) | $550 |
| Bug Fixes & Documentation | Low (10h) | $220 |
| Total | 280h | $6,160 |
Notes:
- Hourly rate: $22/hr (average co-op software engineering rate from Concordia — source).
- Total hours for artifact development: 70 + 60 + 45 + 40 + 30 + 25 + 10 = 280h.
- Total cost calculation: 280h × $22/hr = $6,160 CAD.
- The hours above represent only the time specifically spent on developing the listed software artifacts — not the total effort from all contributors during Iteration 4.
🔄 Retrospective
| Category | Feedback |
|---|---|
| What went well? | • Got a lot done • Frontend map entities are finally driven by sim diff frames • Bugs were found in code and addressed in the same day • Good inter-team debugging • Instructions to deploy to AWS works, hope to get CSSE follow-up soon • Insane late night debugging sessions and cross subsystem collaboration when it mattered most • Good collaboration between different members/teams which is awesome |
| What went wrong? | • Left integration of all 3 subsystems to the end of R1 • A bit too much crunch time at the end, not healthy • A lot done last minute • Unexpected bugs slowed down implementation • Members sick/sleep deprived from last minute work • Sim team had a slow start for the release overall which led to non-alignment of the codebase parts • Feel like we don't have enough domain specific features |
| Improvements | • Automating ATs is not realistic at the moment, unsure if simulation E2E should even be automated • Should try to plan for future iterations more ahead of time • Have stakeholder be more involved in user story creation now that they can use the tool to some degree • Should assign non-code related tasks (docs, diagrams) a bit earlier • Some future design meetings could involve all sub-teams to know exactly what input/outputs are being expected |
📋 Contributions by Individuals
@Niravanaa - Nirav Patel [ID: 40248940]
-
Backend: Scenario Editor API in #287
- Implemented scenario editor API endpoints
- Added scenario content management
- Integrated JSON schema validation
-
Backend: Complete scenario CRUD API in #286
- Completed all CRUD operations for scenarios
- Added comprehensive API endpoints
- Implemented proper authorization checks
-
Backend: Scenario content validation endpoint in #309
- Implemented scenario validation logic
- Added content validation endpoint
- Ensured scenario integrity checks
-
Backend: Update scenario task time handling in #315
- Updated task time handling in scenarios
- Improved temporal logic
- Fixed timing edge cases
-
Testing: Add E2E testing workflow for Playwright in #278
- Added Playwright E2E testing to CI
- Configured automated test execution
- Integrated with GitHub Actions
-
Testing: User management tests and CI caching in #320
- Implemented comprehensive user management tests
- Added Python dependency caching in CI
- Improved CI workflow performance
-
Backend: Implement pagination for simulation listings in #275
- Added pagination to user and admin simulation listings
- Included metadata in responses
- Improved API scalability
-
Backend: Frontend logging API in #266
- Implemented frontend logging endpoint
- Added log persistence backend
- Enabled client-side error tracking
-
DevOps: Migration validation scripts in #270
- Added database migration validation
- Implemented migration history checks
- Ensured migration integrity in CI
-
Bug Fixes:
@Verdone - Giuliano Verdone [ID: 40252190]
-
Backend: Initialize simulation with scenario in #311
- Implemented scenario loading on simulation start
- Integrated scenario data with simulation engine
- Added proper initialization flow
-
Backend: GET Scenarios API endpoints in #283
- Implemented scenario retrieval endpoints
- Added filtering and querying capabilities
- Ensured proper authorization
-
Backend: Consolidate sim playback endpoints in #291
- Refactored playback speed endpoints
- Consolidated simulation control APIs
- Improved API consistency
-
Backend: Direct sim-instance routing in #268
- Refactored routes to sim-instance scope
- Improved routing architecture
- Enhanced API organization
-
**Backend...