Every config in this lab sets NonStopSession=Y with StartTime equal to EndTime, and config/exchange.cfg says why: "the session never rolls, so a drill is never interrupted by a scheduled reset."
That is correct for the drills and wrong for reality, and the repo admits it twice without ever showing it:
docs/drills/06-seqnum-persistence.md: "B3 resets drop-copy sequence numbers on its own schedule, several times a week. ResetOnLogon=N is correct within a session's life, not across a scheduled reset — you have to know the venue's calendar."
docs/drills/07-gap-and-resend.md repeats the same caveat.
So a reader finishes drill 06 believing ResetOnLogon=N is simply the right answer, and it is only right between resets. On the wrong morning that belief produces a client stuck demanding a resend of messages that no longer exist on a counter that has already gone back to 1.
What the drill should teach
StartTime / EndTime / NonStopSession and what the engine actually does at a boundary
- The sequence numbers resetting at a scheduled rollover, and both sides agreeing about it
- The failure: reconnecting across a boundary with a stale expectation, and what that looks like on the wire — which is not the clean gap of drill 07
- Why
ResetOnLogon is a per-connect decision informed by a calendar, not a value you set once
Implementation sketch
The drills need this to happen on demand rather than at 23:00, so: POST /admin/roll forcing the venue through a scheduled reset, plus a config profile using real StartTime/EndTime so the reader can see the settings that drive it.
Acceptance
docs/drills/13-session-schedule.md
- A test covering a clean rollover and a client reconnecting with a stale expectation
- Drills 06 and 07 updated to link here instead of leaving the caveat dangling
Every config in this lab sets
NonStopSession=YwithStartTimeequal toEndTime, andconfig/exchange.cfgsays why: "the session never rolls, so a drill is never interrupted by a scheduled reset."That is correct for the drills and wrong for reality, and the repo admits it twice without ever showing it:
docs/drills/06-seqnum-persistence.md: "B3 resets drop-copy sequence numbers on its own schedule, several times a week.ResetOnLogon=Nis correct within a session's life, not across a scheduled reset — you have to know the venue's calendar."docs/drills/07-gap-and-resend.mdrepeats the same caveat.So a reader finishes drill 06 believing
ResetOnLogon=Nis simply the right answer, and it is only right between resets. On the wrong morning that belief produces a client stuck demanding a resend of messages that no longer exist on a counter that has already gone back to 1.What the drill should teach
StartTime/EndTime/NonStopSessionand what the engine actually does at a boundaryResetOnLogonis a per-connect decision informed by a calendar, not a value you set onceImplementation sketch
The drills need this to happen on demand rather than at 23:00, so:
POST /admin/rollforcing the venue through a scheduled reset, plus a config profile using realStartTime/EndTimeso the reader can see the settings that drive it.Acceptance
docs/drills/13-session-schedule.md