Commit b30df7f
SP0.12: A3 determinism re-validation + vyhybna integration gate for the lifted seam (#747)
* SP0.12: add conflict-event assertion to A3 gate + VyhybnaLiftedDriverIntegrationTest
* SP0.12: fix VyhybnaLiftedDriverIntegrationTest to use lock-step handshake
* SP0.12: address code review - fix comment style and simplify conflict events list
* SP0.12: rename Vyhybna -> ShuntingLoop in test class/method names (keep vyhybna.xml)
* Fix 6 findings from Goal 10 code review (safety gate, tearing, dedup)
Addresses correctness bugs and a test-coverage gap surfaced by a full-branch
code review of the Goal 10 SP0.x dispatcher-agent series:
- Train.setTargetSpeed's "cleared path ahead" gate checked any block
ownership instead of a reserved-but-not-occupied block, making it
effectively non-functional once a train started moving. Added
PathReservationService.getOccupiedBlocks() and tightened the check.
- AgentLoopDriver read three separate ShuntingLoop observation fields per
cycle, which could tear across sim ticks. Collapsed to a single
getLatestObservation() call.
- ShuntingLoopSmokeTest and TrainMovementIntegrationTest never wired
wireSynchronousDispatcher, so their admission/movement assertions passed
vacuously. Wired the dispatcher and replaced loose assertions with real
admission/exit/capacity checks (manually verified they now fail without
the wiring).
- DefaultNetworkActuatorPort.setSwitchPosition checked lock state before
the already-in-position check, violating its own idempotent-success
contract for a locked switch already in the requested position.
- DispatchDecisionApplier's duplicate-reservation guard never evicted
entries, which could permanently block a legitimate re-reservation after
a train reversal. Added evictReservationsFor(), wired to BLOCK_RELEASED.
- DefaultNetworkPerceptionPort/DefaultNetworkActuatorPort each hand-rolled
the same grid-scan loop. Extracted RailwayNetGrid.cellsOfType().
Also documents RuleBasedDispatcher.DEFAULT_MAX_CONCURRENT_TRAINS /
ShuntingLoop.getMaxConcurrentTrains() as a station-topology safety
invariant (not a tunable knob) and asserts it across the touched tests.
Co-authored-by: Bedrich Hovorka <bedrich.hovorka@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>1 parent 75f3208 commit b30df7f
20 files changed
Lines changed: 953 additions & 137 deletions
File tree
- core/src
- commonMain/kotlin/cz/vutbr/fit/interlockSim
- ports
- sim
- util
- jvmTest/kotlin/cz/vutbr/fit/interlockSim
- ports
- sim
- util
- desktop-ui/src/main/kotlin/cz/vutbr/fit/interlockSim
- dispatcher-agent/src
- main/kotlin/cz/vutbr/fit/interlockSim/dispatcher
- test/kotlin/cz/vutbr/fit/interlockSim/dispatcher
Lines changed: 5 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
869 | 869 | | |
870 | 870 | | |
871 | 871 | | |
| 872 | + | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
872 | 877 | | |
873 | 878 | | |
874 | 879 | | |
| |||
Lines changed: 12 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
242 | 242 | | |
243 | 243 | | |
244 | 244 | | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
245 | 257 | | |
246 | 258 | | |
247 | 259 | | |
| |||
Lines changed: 14 additions & 28 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
20 | 19 | | |
| 20 | + | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| |||
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
| 144 | + | |
144 | 145 | | |
145 | 146 | | |
146 | 147 | | |
147 | 148 | | |
148 | 149 | | |
149 | | - | |
150 | 150 | | |
151 | 151 | | |
152 | 152 | | |
| |||
197 | 197 | | |
198 | 198 | | |
199 | 199 | | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | | - | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
213 | 206 | | |
214 | 207 | | |
215 | 208 | | |
216 | 209 | | |
217 | | - | |
218 | | - | |
219 | | - | |
220 | | - | |
221 | | - | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
230 | 216 | | |
Lines changed: 2 additions & 13 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
298 | 299 | | |
299 | 300 | | |
300 | 301 | | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
310 | | - | |
311 | | - | |
312 | | - | |
313 | | - | |
| 302 | + | |
314 | 303 | | |
Lines changed: 12 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
85 | 85 | | |
86 | 86 | | |
87 | 87 | | |
88 | | - | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
89 | 100 | | |
90 | 101 | | |
91 | 102 | | |
| |||
Lines changed: 35 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
198 | 198 | | |
199 | 199 | | |
200 | 200 | | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
201 | 206 | | |
202 | | - | |
| 207 | + | |
203 | 208 | | |
204 | | - | |
| 209 | + | |
205 | 210 | | |
206 | 211 | | |
207 | 212 | | |
| |||
441 | 446 | | |
442 | 447 | | |
443 | 448 | | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
444 | 464 | | |
445 | 465 | | |
446 | 466 | | |
| |||
539 | 559 | | |
540 | 560 | | |
541 | 561 | | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
542 | 575 | | |
543 | 576 | | |
544 | 577 | | |
| |||
Lines changed: 5 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1360 | 1360 | | |
1361 | 1361 | | |
1362 | 1362 | | |
1363 | | - | |
1364 | | - | |
1365 | | - | |
| 1363 | + | |
| 1364 | + | |
| 1365 | + | |
| 1366 | + | |
| 1367 | + | |
1366 | 1368 | | |
1367 | 1369 | | |
1368 | 1370 | | |
| |||
Lines changed: 32 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
Lines changed: 8 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
388 | 388 | | |
389 | 389 | | |
390 | 390 | | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
391 | 399 | | |
392 | 400 | | |
393 | 401 | | |
| |||
0 commit comments