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
@MeSumo - Sumer Abd Alla [ID: 40247712]
-
feat: Global Traffic in #947
- Added global-traffic capability for broader simulation behavior control.
-
fix: mypy main issues in #950
- Fixed static typing issues in key code paths.
-
fix: traffic_level in sim initialization in #979
- Corrected
traffic_levelhandling during simulation initialization.
- Corrected
-
Docs: Wiki contributions in Repo Wiki
@Michael-Mezzacappa - Michael Mezzacappa [ID: 40263789]
-
feat: Simulation Completion % added in #933
- Added simulation completion percentage visibility in reporting surfaces.
-
fix: Avg. Tasks/Shift update live #977 in #994
- Fixed live Avg. Tasks/Shift updates in simulation reporting.
@Niravanaa - Nirav Patel [ID: 40248940]
-
feat: traffic lights and stop signs in #906
- Added traffic-light and stop-sign behavior to simulation flow.
-
fix: add missing translations in #910
- Added missing translation strings used in UI paths.
-
feat: implement stop events handling and occupancy tracking in #927
- Implemented stop-event handling with occupancy tracking.
-
fix: adjust container width for day digit count in simulation in #954
- Fixed simulation UI sizing for larger day-digit counts.
-
feat: implement asynchronous logging with Loki in #956
- Implemented asynchronous Loki logging support.
-
feat: add French translations for error messages in task assignment in #969
- Added French localization coverage for task-assignment errors.
-
fix: replace pyrosm with osmium in #973
- Replaced
pyrosmwithosmiumtooling in the pipeline.
- Replaced
-
fix: add missing libexpat1 installation in Dockerfile in #974
- Added missing runtime dependency installation in Dockerfile.
-
fix: add forceRefresh option to getSimulationReport for bypassing cache in #981
- Added force-refresh path for uncached simulation report retrieval.
-
feat: increase coverage thresholds to 90% in #990
- Increased CI coverage thresholds to 90%.
-
feat: correct spelling typos in comments and docstrings in #992
- Corrected spelling typos in comments and docstrings.
-
Docs: Wiki contributions in Repo Wiki
@Verdone - Giuliano Verdone [ID: 40252190]
-
feat: GraphHopper traffic provider in #752
- Added GraphHopper traffic-provider integration.
-
feat: add task batch unassign endpoint in #920
- Added backend endpoint for task batch unassignment workflows.
-
feat: add traffic template management UI in #942
- Added traffic-template management interface on the frontend.
-
feat: add block-aware route.next() wait logic in #948
- Added block-aware wait behavior in route.next() transitions.
@vinishamanek - Vinisha Manek [ID: 40229456]
-
fix: persist task count on scroll in selected item bar in #900
- Fixed task-count persistence behavior while scrolling selected-item UI.
-
feat: make collapsed view default and remove task from task item in #909
- Updated default task view and simplified task-item presentation.
-
feat: add batch unassignment in collapsed driver task view in #925
- Added batch-unassignment support in collapsed driver-task mode.
-
feat: highlight station on map when hovered in collapsed view in #936
- Added hover-linked station highlighting for collapsed view interactions.
-
feat: add completion % to simulations table in #939
- Added completion-percentage visibility to simulations table.
-
feat: highlight station on map when hovered in expanded view in #946
- Added hover-linked station highlighting for expanded view interactions.
-
feat: add hover to expand metrics on running simulation in #972
- Added hover-to-expand metric behavior during active simulations.
-
feat: disable start sim button when scenario is empty in #980
- Prevented starting simulations when no scenario is loaded.
-
feat: allow reassignment of tasks in collapsed view in #987
- Enabled reassignment actions in collapsed task view.
-
docs: add release 3 demo video #993 in #997
- Added Release 3 demo video documentation artifact.
-
Docs: Wiki contributions in Repo Wiki
What's Changed
- fix: persist task count on scroll in selected item bar by @vinishamanek in #900
- ci: Add timeout for production deployment by @briantkatch in #902
- ci: Run production deployment as app user by @briantkatch in #905
- feat: make collapsed view default and remove task from task item by @vinishamanek in #909
- feat: GraphHopper traffic provider by @Verdone in #752
- feat: support multi-task reordering and right-click drag select by @Jpuntul in #889
- feat: add task batch unassign endpoint by @Verdone in #920
- fix: tests expect collapsed driver tasks by @mahutt in #924
- fix: add missing translations by @Niravanaa in #910
- feat: add batch unassignment in collapsed driver task view by @vinishamanek in #925
- feat: basic station clustering by @mahutt in #928
- Make @Niravanaa a frontend code owner by @mahutt in #935
- feat: Simulation Completion % added by @Michael-Mezzacappa in #933
- Add units to metrics in simulation dashboard by @mahutt in #932
- feat: highlight station on map when hovered in collapsed view by @vinishamanek in #936
- Dissolve clusters on click by @mahutt in #938
- feat: add completion % to simulations table by @vinishamanek in #939
- feat: implement stop events handling and occupancy tracking by @Niravanaa in #927
- chore: Update openapi.json in apidemo/ #944 by @briantkatch in #945
- fix: long loading times on Windows by @CarciDev in #903
- feat: highlight station on map when hovered in expanded view by @vinishamanek in #946
- Make clusters assignable by @mahutt in #940
- Add traffic template API endpoints and tables by @briantkatch in #914
- fix: mypy main issues by @MeSumo in #950
- feat: add block-aware route.next() wait logic by @Verdone in #948
- fix: update back Dockerfile traffic script #954 by @briantkatch in #952
- fix: adjust container width for day digit count in simulation by @Niravanaa in #954
- feat: implement asynchronous logging with Loki by @Niravanaa in #956
- Move reporting widget to bottom right by @mahutt in #957
- Stop unwanted filtration of station circles by @mahutt in #960
- Reduce task service time to 30 seconds by @mahutt in #963
- feat: Add task servicing chain and service time tracking for replay #958 by @Ambrose821 in #961
- Use sim seconds to invoke keyframes by @mahutt in #966
- fix: frontend dependency vulnerabilities by @mahutt in #922
- feat: traffic lights and stop signs by @Niravanaa in #906
- fix: replace pyrosm with osmium by @Niravanaa in #973
- feat: add traffic template management UI by @Verdone in #942
- fix: add missing libexpat1 installation in Dockerfile by @Niravanaa in #974
- feat: add hover to expand metrics on running simulation by @vinishamanek in #972
- feat: add French translations for error messages in task assignment by @Niravanaa in #969
- feat: Global Traffic by @MeSumo in #947
- fix: traffic_level in sim initialization by @MeSumo in #979
- fix: Added persistence logic to reporting by @cmezzac in #941
- feat: disable start sim button when scenario is empty by @vinishamanek in #980
- fix: add forceRefresh option to getSimulationReport for bypassing cache by @Niravanaa in #981
- feat: allow reassignment of tasks in collapsed view by @vinishamanek in #987
- Update collapsed task list label by @mahutt in #986
- feat: increase coverage thresholds to 90% by @Niravanaa in #990
- feat: Block reordering of task grouping when servicing at that station by @Ambrose821 in #988
- feat: correct spelling typos in comments and docstrings by @Niravanaa in #992
- Enable scrubbing for resumed sim by @mahutt in #964
- fix: Avg. Tasks/Shift update live #977 by @Michael-Mezzacappa in #994
- fix: cleanup stale TODOs #995 by @Ambrose821 in #996
- docs: add release 3 demo video #993 by @vinishamanek in #997
Full Changelog: Iteration12...Iteration13