# Output of shift/run_demo.sh — 2026-10-15T03:57:37Z, gcc 13, cargo 1.97.0 (c980f4866 2026-06-30), OpenSSL 3.0.13
# (Temporary paths and timings vary per run.)

== A. True time 2026-10-15, no helper (baseline: should be correct)
LOG now=@T1792065600 due=@T1794657600
  now:      2026-10-15 Thu 12:00:00
  due:      2026-11-14 Sat 12:00:00
  due after now?  yes
  license:        valid

== B. True time 2040-02-15, no helper (32-bit field overflows)
LOG now=@T-2082047296 due=@T-2079455296
  now:      1904-01-10 Sun 05:31:44
  due:      1904-02-09 Tue 05:31:44
  due after now?  yes
  license:        valid

== B2. True time 2038-01-10, no helper (clock fits, but the program's +30 days math overflows)
LOG now=@T2146737600 due=@T-2145637696
  now:      2038-01-10 Sun 12:00:00
  due:      1902-01-04 Sat 05:31:44
  due after now?  NO - date arithmetic failed
  license:        EXPIRED

== B3. True time 2038-01-10, with helper and translation
LOG now=2038-01-10T12:00:00.000000000Z due=2038-02-09T12:00:00.000000000Z
  now:      2010-01-10 Sun 12:00:00
  due:      2010-02-09 Tue 12:00:00
  due after now?  yes
  license:        valid

== C. True time 2040-02-15, helper shifts the clock 28 years; raw output
LOG now=@T1329307200 due=@T1331899200
  now:      2012-02-15 Wed 12:00:00
  due:      2012-03-16 Fri 12:00:00
  due after now?  yes
  license:        valid

== D. Same run as C, with outbound translation (+28 years on @T timestamps)
LOG now=2040-02-15T12:00:00.000000000Z due=2040-03-16T12:00:00.000000000Z
  now:      2012-02-15 Wed 12:00:00
  due:      2012-03-16 Fri 12:00:00
  due after now?  yes
  license:        valid

== E. True time 2066-01-19T03:14:08Z with helper (past the shifted limit: must refuse)
time_shift_shim: REFUSED - true time 3031096448 minus shift 883612800 does not fit a 32-bit field
legacy_app: clock unavailable
  legacy_app exited with status 1 (helper refused; no wrapped value given)
