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 in #547
- Made task list in selected item bar scrollable for drivers with multiple queued tasks
- Fixed UI overflow issues when drivers have long task queues
- Enhanced usability by ensuring all tasks are accessible through scrolling
-
Frontend: Fix driver lag effects in #548
- Fixed driver lag visual effects during map rendering
- Resolved timing synchronization issues with driver position updates from backend
- Improved simulation visual smoothness and position accuracy
-
Frontend: Disable pop-up tasks in station run method in #580
- Disabled task pop-up mechanism to prevent random tasks not specified in scenario
- Commented out pop-up trigger code while preserving implementation for future queue-based refactor
- Enhanced simulation predictability by ensuring only scheduled tasks are executed
-
Frontend: Update trigger resource bar render logic in #618
- Updated resource bar re-render logic to check driver-vehicle pair changes, battery count changes, and task count changes
- Refactored to reduce excessive div nesting in simulation page UI overlay elements
- Improved render trigger accuracy to ensure resource bar reflects all state changes
-
Frontend: Persist full routes in driver in #626
- Resolved route flicker bug by persisting all routes between driver stops instead of only current route
- Replaced travel_to(position) with travel_to_next_stop() to follow pre-computed route list
- Improved route accuracy by computing routes once during state changes instead of regenerating on every keyframe
-
Frontend: Add mahutt to sim tests code owners in #632
-
Docs: Wiki contributions in Repo Wiki
@MeSumo - Sumer Abd Alla [ID: 40247712]
-
Sim: Re-order and Unassign In-Progress Tasks in #551
- Implemented drag-and-drop reordering for in-progress tasks in driver task queues
- Added unassignment capability for active driver tasks during simulation
- Enhanced dispatcher flexibility to reorganize task priorities in real-time
- Introduced driver state enum
-
Sim: Automatically Assign a Lunch Break in #630
- Implemented automatic lunch break assignment when drivers have no provided lunch break in scenario
- Added logic to assign breaks only when simulation duration > 2x lunch duration and shift length > 5 hours
- Created _assign_lunch_break utility method to schedule breaks at appropriate times during shifts
-
Docs: Wiki contributions in Repo Wiki
@Michael-Mezzacappa - Michael Mezzacappa [ID: 40263789]
-
Infrastructure: Fix loki for prod in #629
- Configured Loki and Promtail services for production log aggregation via Ansible deployment
- Added Grafana service configuration with Loki data source provisioning for log visualization
- Created directory structure for Loki data persistence (chunks, index, cache, WAL, compactor)
-
Infrastructure: Added prometheus setup to ansible in #642
- Created Prometheus configuration template (prometheus.yml.j2) for Ansible deployment to production
- Configured Prometheus to scrape backend metrics endpoint (/api/v1/metric/metrics) with 30-day retention
- Added prometheus service to production docker-compose with persistent data storage and localhost:9090 SSH tunnel access
-
Docs: Wiki contributions in Repo Wiki
@Niravanaa - Nirav Patel [ID: 40248940]
-
Backend: Pin black version to 25.9.0 for compatibility in #578
- Pinned Black formatter version to 25.9.0 in dependencies
- Resolved version compatibility issues preventing successful builds
- Ensured consistent code formatting across development and CI environments
-
Frontend: Add column filters state management to DataTable component in #615
- Fixed user search functionality to reset to page 1 when filtering users after pagination
- Added ColumnFiltersState management with onColumnFiltersChange handler to track filter changes
- Removed autoResetPageIndex: false to enable automatic page reset ensuring search results are visible
-
Frontend: Prevent unsaved changes dialog when selecting the active scenario in #616
- Added early return in handleSelectScenario to check if clicked scenario is already selected
- Prevented unsaved changes modal from appearing when clicking currently active scenario
- Improved user experience by eliminating false positive dialog warnings
-
Backend: Remove unnecessary database commit in SimulationService in #622
- Removed premature db.commit() after creating SimInstance record to fix race condition
- Resolved NULL UUID issue in SimInstance when server stops during initialization
- Improved database transaction safety by eliminating unnecessary early commits
-
Backend: Ensure consistent user pagination ordering and improve reset password in #623
- Added ORDER BY User.id to user pagination query to prevent users from jumping positions after password changes
- Fixed password change dialog by moving form element inside DialogContent with py-4 wrapper for improved spacing
- Enhanced consistency so users remain in same position in list after password updates
-
Frontend: Prevent event propagation during drag and drop in ResourceItem component in #624
- Fixed Safari/WebKit drag-and-drop hover persistence bug where yellow hover effect remained stuck on resources
- Simplified dragLeave event handler logic and added stopPropagation() to drop handler to prevent event bubbling
- Improved relatedTarget null/undefined handling for better Safari/WebKit compatibility
-
Backend: Streamline first-time setup process and improve environment config in #639
- Added Vite proxy configuration and default backend URL (http://localhost:8000) to enable fresh clones to run immediately
- Made .env file optional by setting sensible defaults (OSRM URL: http://localhost:5001)
- Updated setup script to be interactive, creating .env with user-provided Mapbox token and auto-generated JWT secret
-
Docs: Wiki contributions in Repo Wiki
- Updated Infrastructure and Tools (2)
- Updated Metrics (3)
- Updated Backend - API Design Guidelines (3)
- Updated Deployment Plan and Infrastructure
- Updated Overall Architecture and Class Diagrams (4)
- Updated Logging
- Renamed Killed Design Doc: US-23 Simulator Persistence and Replayability
- Renamed Design Doc: US-23 Simulator Persistence and Replayability
- List of Revisions: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16
@Verdone - Giuliano Verdone [ID: 40252190]
-
Backend: Implement total frame persistence in #582
- Migrated from sparse keyframe persistence to ALL frames (keyframes + diffs) for full replay capability
- Created new sim_frames table with seq_number and is_key fields, replacing sim_keyframes table
- Extended sim_instances with name, playback_capable, parent_sim_instance_id, branch_keyframe_seq for future replay/branching
-
Frontend: Prevent state transition on assignment in #619
- Modified assignTask and unassignTask to only update selected item when driver is already selected
- Preserved station selection when assigning/unassigning tasks from station dialog
- Added unit tests to verify selection preservation behavior during task operations
-
Backend: Add batch processing for sim frame data in #634
- Implemented in-memory queue with bulk upserts instead of writing each frame individually
- Introduced FRAME_PERSIST_BATCH_SIZE (default: 32 frames) and FRAME_PERSIST_BATCH_TIMEOUT (default: 1 second) environment variables
- Improved database write performance through batch processing while avoiding external message queue infrastructure
-
Docs: Wiki contributions in Repo Wiki
- Updated Missing knowledge and Independent Learning (2)
- Updated Infrastructure and Tools
- Updated Overall Architecture and Class Diagrams (2)
- Updated Deployment Plan and Infrastructure
- Updated Usability Tests (6)
- Updated Budget (4)
- Updated Meeting Minutes - General (4)
- Updated _Sidebar
- Updated Meeting Minutes - Backend (2)
- List of Revisions: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23
@vinishamanek - Vinisha Manek [ID: 40229456]
-
Frontend: Add station circles for city wide view in #540
- Added circular station visualizations for city-wide map view to improve station visibility
- Implemented scalable station markers that adapt to different zoom levels
- Enhanced map readability by making stations more prominent in zoomed-out views
-
Frontend: Update sizing of resource bar and hq widget in #558
- Updated sizing and layout of resource bar for better screen space utilization
- Improved HQ widget dimensions and positioning for enhanced visual balance
- Enhanced UI consistency and usability across different screen sizes
-
Docs: Update simulation codeowners in #572
- Updated CODEOWNERS file for simulation components to reflect current team structure
- Improved code review routing to ensure appropriate reviewers for simulation changes
- Enhanced team ownership clarity for simulation-related code
-
Frontend: Drag to import scenario json in #633
- Implemented drag-and-drop functionality to import scenario JSON files directly to editor
- Added overlay displaying "Drop to import scenario" during drag operation with visual feedback
- Integrated with existing unsaved changes flow to prompt user before discarding previous changes
-
Frontend: Predict and visualize route to hq for battery restock in #636
- Added battery depletion prediction logic in compute_routes() that simulates battery count across task queue
- Automatically inserts HQ position into route when simulated battery count reaches zero
- Enhanced route visualization to show predicted HQ stops for battery restocking before depletion occurs
-
Docs: Wiki contributions in Repo Wiki
📋 What's Changed
- fix: add station circles for city wide view by @vinishamanek in #540
- fix: driver lag effects #537 by @mahutt in #548
- feat: expose resume method to back by @cmezzac in #544
- ci: Add su_abdal to server by @briantkatch in #555
- refactor: improve mapbox error logging to extract meaningful error me… by @Jpuntul in #553
- feat: added debugging feature to the backend. by @cmezzac in #570
- fix: Re-order and Unassign In-Progress Tasks by @MeSumo in #551
- docs: update simulation codeowners by @vinishamanek in #572
- fix: Handle resume of paused simulations by @briantkatch in #568
- fix: pin black version to 25.9.0 for compatibility by @Niravanaa in #578
- fix: disable pop-up tasks in station run method #579 by @mahutt in #580
- fix: update sizing of resource bar and hq widget by @vinishamanek in #558
- feat: Traffic Domain Models and Ratio-based mapping Algorithm by @CarciDev in #541
- fix: add column filters state management to DataTable component by @Niravanaa in #615
- feat: implement total frame persistence by @Verdone in #582
- fix: prevent unsaved changes dialog when selecting the active scenario by @Niravanaa in #616
- ci: Retain logs for 60 days by @briantkatch in #557
- fix: prevent state transition on assignment #599 by @Verdone in #619
- fix: remove unnecessary database commit in SimulationService by @Niravanaa in #622
- fix: make selected item bar task list scrollable #534 by @mahutt in #547
- fix: update trigger resource bar render logic by @mahutt in #618
- fix: prevent event propagation during drag and drop in ResourceItem component by @Niravanaa in #624
- feat: Add seek endpoint #575 by @briantkatch in #621
- fix: add mahutt to sim tests code owners #571 by @mahutt in #632
- fix: Automatically Assign a Lunch Break by @MeSumo in #630
- Split HEADING_TO_HQ state by @Ambrose821 in #559
- fix: ensure consistent user pagination ordering and improve reset password by @Niravanaa in #623
- feat: Added servicing time for tasks #546 by @Ambrose821 in #617
- fix: persist full routes in driver #552 by @mahutt in #626
- feat: end to end resumability feature by @cmezzac in #625
- feature: drag to import scenario json by @vinishamanek in #633
- feat: predict and visualize route to hq for battery restock by @vinishamanek in #636
- fix: loki for prod by @Michael-Mezzacappa in #629
- feat: branch endpoint by @briantkatch in #628
- feat: Added prometheus setup to ansible #641 by @Michael-Mezzacappa in #642
- fix: streamline first-time setup process and improve environment config by @Niravanaa in #639
- feat: route toggle control #481 by @Jpuntul in #550
- fix: add batch processing for sim frame data #631 by @Verdone in #634
Full Changelog: Iteration7...Iteration8