Skip to content

Write round-trip timestamps in transport headers (#3645) - #5407

Draft
jcd1991 wants to merge 1 commit into
JasperFx:mainfrom
jcd1991:codex/3645-standard-timestamp-headers
Draft

jcd1991 wants to merge 1 commit into
JasperFx:mainfrom
jcd1991:codex/3645-standard-timestamp-headers

Conversation

@jcd1991

@jcd1991 jcd1991 commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

Transport timestamp headers currently use yyyy-MM-dd HH:mm:ss:ffffff Z, which stock date parsers cannot read. This completes the writer portion of #3645: both timestamp writers now emit invariant round-trip ("o") UTC values, preserving all seven fractional-second digits. Readers continue accepting legacy headers. No schema changes.

The regression covers scheduling, expiration and sent timestamps, non-UTC input, three cultures, null headers, and legacy timestamps through binary persistence. Migration guidance explains receiver-first rollout.

Release sequencing — draft

This must not ship to mixed fleets until receivers can read the new format. The 6.x reader change merged in #3656; the 5.x backport merged in #4583. NuGet's latest 5.x package at verification was 5.41.0, and its tagged source still uses legacy-only readers. The backport needs a published release and a documented receiver version floor before this writer change is released to those fleets. Maintainer confirmation of release sequencing is needed before marking this ready.

Verification

  • Timestamp regression: 12 passed on .NET 9 and .NET 10. With the original writers restored, the three culture/precision cases fail (9 pass, 3 fail).
  • Envelope-related CoreTests: 207 passed on each target.
  • Full CoreTests on each target: 4,031 passed, 8 skipped, 1 failed out of 4,040. These are not clean full-suite results.
    • .NET 10: ignoring_traffic_for_every_session_on_a_host.without_the_rule_the_same_traffic_holds_the_session_open; expected timeout, observed completion. Its entire class passed 9/9 in an isolated rerun.
    • .NET 9: exception_event_on_failed_attempt_span_5311.each_attempt_of_a_retried_then_dead_lettered_message_records_its_exception; expected two spans, observed zero. It also fails with the original timestamp writers restored.
  • Full solution Release build for net9.0 attempted: blocked by Grpc.Tools' bundled macOS x64 protoc failing on this ARM Mac (Bad CPU type in executable). CoreTests builds succeeded on both targets.
  • Scoped style and analyzer checks passed with --verify-no-changes. The test style check excludes IDE1006 because this existing fixture uses the repository's snake_case test naming; production style checks include naming.
  • git diff --check passed. Final review found no additional implementation issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant