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]
-
Docs: Demo videos for setup in #653
- Added video recordings for Mac and Windows setup processes to README
- Enhanced documentation accessibility with visual setup guides
- Improved onboarding experience for new developers
-
Docs: Release 2 demo video in #658
- Added Release 2 demo video link to README documentation
- Provided visual demonstration of release features and functionality
- Enhanced project documentation with multimedia content
-
Docs: Deployment link to README in #687
- Updated README with velosim.app deployment link and TA credentials
- Made production environment easily accessible for testing and evaluation
- Improved documentation for external stakeholders
-
Docs: Wiki contributions in Repo Wiki
- Updated Usability Tests documentation.
- List of Revisions: 1
@briantkatch - Brian Tkatch [ID: 40191139]
-
CI: Improve database standup and migration in #681
- Fixed deployment scripts to prevent postgres_data volume destruction during deployments
- Improved PostgreSQL healthcheck configuration with increased retries and start period
- Added prepare mode to migration script for safe manual database restoration
-
Backend: ProgressionLIVE-like REST endpoints in #684
- Added endpoint to get current simulation frame with all state information
- Implemented pagination and filtering support for tasks and drivers with maxResults and startResult
- Added expansion support for including station or task/vehicle details in responses
@cmezzac - Christopher Mezzacappa [ID: 40249451]
-
Sim: Report driving vs servicing time in #685
- Implemented simulation metrics tracking time drivers spent driving vs performing tasks
- Added report field to payload with servicingToDrivingRatio metric
- Created SimulationMetrics class wrapper integrated with SimPy environment
-
Sim: Report average tasks per shift in #710
- Added tasks_completed_per_shift tracking to SimulationReport
- Implemented get_average_tasks_per_shift computation for shift-based metrics
- Integrated task count reporting at driver shift end with comprehensive test coverage
@Jpuntul - Jutipong Puntuleng [ID: 40080233]
-
Frontend: Entity-specific forms in #682
- Created insertion forms for vehicles, stations, and drivers with comprehensive validation
- Implemented Montreal geographic bounds checking and scheduled task format validation
- Added temporal logic validation for driver time formats and lunch break constraints
-
Frontend: CodeMirror scenario editor in #690
- Replaced custom textarea with CodeMirror 6 for robust JSON editing experience
- Added built-in line numbers, syntax highlighting, auto-indentation, and bracket matching
- Implemented code folding and search functionality for large scenario files
@Michael-Mezzacappa - Michael Mezzacappa [ID: 40263789]
-
Docs: Updated grafana README in #655
- Fixed outdated information in grafana_logging README file
- Corrected frontend logging endpoint paths to match actual API
- Updated file structure paths and timestamp re-ingestion notes
-
Infrastructure: Grafana Alloy setup with HTTP logging in #708
- Replaced Promtail with Grafana Alloy for local development log collection
- Implemented direct HTTP push to Loki eliminating file-based pipeline
- Rewrote logger.py with custom LokiHandler for instant log delivery
-
Docs: Wiki contributions in Repo Wiki
@MeSumo - Sumer Abd Alla [ID: 40247712]
-
Frontend: HQ Widget Hover Corners in #678
- Fixed HQ widget corners un-rounding on hover by adding overflow-hidden
- Ensured button hover effects stay within rounded widget bounds
- Tested fix across multiple browsers for consistency
-
Docs: Wiki contributions in Repo Wiki
-
Contributed to traffic event state machine design
-
Reviewed all sim PRs except for one
@mahutt - Thomas Mahut [ID: 40249811]
-
Frontend: Seek backwards from UI in #703
- Introduced frame sources concept with LocalFrameSource and ServerFrameSource implementations
- Created scrubber UI component using @radix-ui/react-slider for timeline control
- Overhauled simulation provider to manage and control multiple frame sources
-
Docs: Wiki contributions in Repo Wiki
@Ambrose821 - Ambrose McLaughlin [ID: 40239754]
- Sim: Refactor Scheduled Tasks(WIP) in #581
- Refactor existing logic for scheduled tasks to use
default_TPU_strategy, fromsim/behaviour/default. - Remove existing spawn delay logic.
- Update parsing and resumability logic to accomodate new handling of scheduled tasks
- Refactor existing logic for scheduled tasks to use
What's Changed
- docs: Updated grafana README #654 by @Michael-Mezzacappa in #655
- docs: add demo videos for set up by @vinishamanek in #653
- docs: add release 2 demo video by @vinishamanek in #658
- fix: add onOpenChange prop to DeleteScenarioDialog and integrate with ScenarioSidebar by @Niravanaa in #671
- feat: hide stations with zero tasks from map #602 by @Verdone in #669
- feat: append timestamps to logs #650 by @Niravanaa in #677
- feat: add batch task assign endpoint by @Verdone in #675
- feat: add granular per-segment traffic control by @CarciDev in #674
- fix: HQ Widget Corners on Hover by @MeSumo in #678
- ci: Improve database standup and migration by @briantkatch in #681
- feat: add branch_simulation service layer tests for uncovered error paths by @Niravanaa in #676
- docs: add deployment link to readme by @vinishamanek in #687
- feat: add ProgressionLIVE-like rest endpoints. by @briantkatch in #684
- feat: traffic parser by @CarciDev in #683
- feat: report total time drivers spent driving vs performing tasks by @cmezzac in #685
- feat: implement traffic event state machine with SimPy lifecycle by @CarciDev in #696
- feat: implement in-memory TrafficStateStore with sim_id isolation by @CarciDev in #697
- feat: add task-reassignment to batch assign #699 by @Verdone in #700
- feat: Traffic mapper with PositionRegistry by @CarciDev in #698
- feat: add entity form by @Jpuntul in #682
- feat: Traffic Testing Script by @CarciDev in #705
- feat: Alloy setup & http to send logs #679 by @Michael-Mezzacappa in #708
- feat: add line numbers to scenario editor textarea by @Jpuntul in #690
- feat: report average number of tasks completed per shift by @cmezzac in #710
- feat: seek backwards from UI on running simulation by @mahutt in #703
Full Changelog: Iteration8...Iteration9