Summary
Issue #910 included a reported restart shape that remains valid evidence but did not reproduce in the controlled path used for PR #1079.
A Jcode seat acquired a second session journal after a runtime restart. Senders kept resolving the seat from presence and every cotal_dm call reported success, but the replacement received none of those DMs. The replacement also booted from its stale launch brief instead of carrying the predecessor state.
This is separate from the reproduced active-turn stall fixed by PR #1079. That defect occurs without a restart: directed traffic stays in the connector-owned automatic queue until the current turn ends. PR #1079 routes it through Jcode soft interrupts and commits at the clean containing-turn boundary.
What did not reproduce
A controlled same-lifecycle Jcode host replacement behaved correctly:
- the sender retained the predecessor presence record;
- the predecessor exited;
- the sender published a DM before successor presence;
- the replacement reused the same wire principal and lifecycle durable;
- the prior Harness session resumed;
- the replacement recipient session observed the DM.
That cell does not depend on the active-turn soft-interrupt fix. It shows the reported restart loss and the active-turn stall are different mechanisms.
Remaining discriminator
Reproduce a production runtime restart that either:
- changes the DM lifecycle or wire principal while senders still resolve stale presence, or
- launches the replacement with stale material that addresses or binds the wrong lifecycle resources.
Neither occurred in the controlled replacement. The original report may still be accurate. It is unreproduced here, not disproven.
Acceptance bar
- Reproduce live before fixing.
- Assert recipient-observed delivery, not sender publish success, broker ack, presence, or process liveness.
- Prove whether the replacement bound the predecessor DM durable or a fresh lifecycle frontier.
- Record the sender-resolved principal, replacement principal, lifecycle uid, durable name/frontier, and whether a second journal was created. Do not surface argv or cmdline.
Related
Summary
Issue #910 included a reported restart shape that remains valid evidence but did not reproduce in the controlled path used for PR #1079.
A Jcode seat acquired a second session journal after a runtime restart. Senders kept resolving the seat from presence and every
cotal_dmcall reported success, but the replacement received none of those DMs. The replacement also booted from its stale launch brief instead of carrying the predecessor state.This is separate from the reproduced active-turn stall fixed by PR #1079. That defect occurs without a restart: directed traffic stays in the connector-owned automatic queue until the current turn ends. PR #1079 routes it through Jcode soft interrupts and commits at the clean containing-turn boundary.
What did not reproduce
A controlled same-lifecycle Jcode host replacement behaved correctly:
That cell does not depend on the active-turn soft-interrupt fix. It shows the reported restart loss and the active-turn stall are different mechanisms.
Remaining discriminator
Reproduce a production runtime restart that either:
Neither occurred in the controlled replacement. The original report may still be accurate. It is unreproduced here, not disproven.
Acceptance bar
Related