Diff of the two buildlogs:

--
--- b1/build.log	2025-02-25 12:39:22.402577952 +0000
+++ b2/build.log	2025-02-25 12:41:00.974158651 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Tue Feb 25 00:36:50 -12 2025
-I: pbuilder-time-stamp: 1740487010
+I: Current time: Tue Mar 31 09:02:23 +14 2026
+I: pbuilder-time-stamp: 1774897343
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz]
 I: copying local configuration
@@ -26,52 +26,84 @@
 dpkg-source: info: applying no-relative-path-in-tests.patch
 I: Not using root during the build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/3737696/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/1258052/tmp/hooks/D01_modify_environment starting
+debug: Running on ionos15-amd64.
+I: Changing host+domainname to test build reproducibility
+I: Adding a custom variable just for the fun of it...
+I: Changing /bin/sh to bash
+'/bin/sh' -> '/bin/bash'
+lrwxrwxrwx 1 root root 9 Mar 30 19:02 /bin/sh -> /bin/bash
+I: Setting pbuilder2's login shell to /bin/bash
+I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other
+I: user script /srv/workspace/pbuilder/1258052/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/1258052/tmp/hooks/D02_print_environment starting
 I: set
-  BUILDDIR='/build/reproducible-path'
-  BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other'
-  BUILDUSERNAME='pbuilder1'
-  BUILD_ARCH='amd64'
-  DEBIAN_FRONTEND='noninteractive'
-  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=20 '
-  DISTRIBUTION='trixie'
-  HOME='/root'
-  HOST_ARCH='amd64'
+  BASH=/bin/sh
+  BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath
+  BASH_ALIASES=()
+  BASH_ARGC=()
+  BASH_ARGV=()
+  BASH_CMDS=()
+  BASH_LINENO=([0]="12" [1]="0")
+  BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:.
+  BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment")
+  BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
+  BASH_VERSION='5.2.37(1)-release'
+  BUILDDIR=/build/reproducible-path
+  BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other'
+  BUILDUSERNAME=pbuilder2
+  BUILD_ARCH=amd64
+  DEBIAN_FRONTEND=noninteractive
+  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=42 '
+  DIRSTACK=()
+  DISTRIBUTION=trixie
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=x86_64
+  HOST_ARCH=amd64
   IFS=' 	
   '
-  INVOCATION_ID='750af0c5e2714a758f23047486fa9ba1'
-  LANG='C'
-  LANGUAGE='en_US:en'
-  LC_ALL='C'
-  MAIL='/var/mail/root'
-  OPTIND='1'
-  PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
-  PBCURRENTCOMMANDLINEOPERATION='build'
-  PBUILDER_OPERATION='build'
-  PBUILDER_PKGDATADIR='/usr/share/pbuilder'
-  PBUILDER_PKGLIBDIR='/usr/lib/pbuilder'
-  PBUILDER_SYSCONFDIR='/etc'
-  PPID='3737696'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=20bf160eadac48a1bad9c8f62b4a92ed
+  LANG=C
+  LANGUAGE=et_EE:et
+  LC_ALL=C
+  MACHTYPE=x86_64-pc-linux-gnu
+  MAIL=/var/mail/root
+  OPTERR=1
+  OPTIND=1
+  OSTYPE=linux-gnu
+  PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+  PBCURRENTCOMMANDLINEOPERATION=build
+  PBUILDER_OPERATION=build
+  PBUILDER_PKGDATADIR=/usr/share/pbuilder
+  PBUILDER_PKGLIBDIR=/usr/lib/pbuilder
+  PBUILDER_SYSCONFDIR=/etc
+  PIPESTATUS=([0]="0")
+  POSIXLY_CORRECT=y
+  PPID=1258052
   PS4='+ '
-  PWD='/'
-  SHELL='/bin/bash'
-  SHLVL='2'
-  SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.pJ4dONig/pbuilderrc_lBLe --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.pJ4dONig/b1 --logfile b1/build.log ruby-icalendar_2.10.3-1.dsc'
-  SUDO_GID='111'
-  SUDO_UID='106'
-  SUDO_USER='jenkins'
-  TERM='unknown'
-  TZ='/usr/share/zoneinfo/Etc/GMT+12'
-  USER='root'
-  _='/usr/bin/systemd-run'
-  http_proxy='http://46.16.76.132:3128'
+  PWD=/
+  SHELL=/bin/bash
+  SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix
+  SHLVL=3
+  SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.pJ4dONig/pbuilderrc_AvP8 --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.pJ4dONig/b2 --logfile b2/build.log ruby-icalendar_2.10.3-1.dsc'
+  SUDO_GID=111
+  SUDO_UID=106
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
+  http_proxy=http://213.165.73.152:3128
 I: uname -a
-  Linux ionos11-amd64 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux
+  Linux i-capture-the-hostname 6.12.9+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.9-1~bpo12+1 (2025-01-19) x86_64 GNU/Linux
 I: ls -l /bin
-  lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin
-I: user script /srv/workspace/pbuilder/3737696/tmp/hooks/D02_print_environment finished
+  lrwxrwxrwx 1 root root 7 Nov 22  2024 /bin -> usr/bin
+I: user script /srv/workspace/pbuilder/1258052/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -270,7 +302,7 @@
 Get: 147 http://deb.debian.org/debian trixie/main amd64 ruby-simplecov all 0.22.0-2 [45.2 kB]
 Get: 148 http://deb.debian.org/debian trixie/main amd64 ruby-timecop all 0.9.10-1.1 [12.2 kB]
 Get: 149 http://deb.debian.org/debian trixie/main amd64 ruby-tzinfo all 2.0.6-1 [66.7 kB]
-Fetched 50.2 MB in 1s (68.7 MB/s)
+Fetched 50.2 MB in 5s (9723 kB/s)
 Preconfiguring packages ...
 Selecting previously unselected package libpython3.13-minimal:amd64.
 (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 19802 files and directories currently installed.)
@@ -766,8 +798,8 @@
 Setting up tzdata (2025a-2) ...
 
 Current default time zone: 'Etc/UTC'
-Local time is now:      Tue Feb 25 12:38:33 UTC 2025.
-Universal Time is now:  Tue Feb 25 12:38:33 UTC 2025.
+Local time is now:      Mon Mar 30 19:03:05 UTC 2026.
+Universal Time is now:  Mon Mar 30 19:03:05 UTC 2026.
 Run 'dpkg-reconfigure tzdata' if you wish to change it.
 
 Setting up ruby-minitest (5.25.4-2) ...
@@ -901,7 +933,11 @@
 Building tag database...
  -> Finished parsing the build-deps
 I: Building the package
-I: Running cd /build/reproducible-path/ruby-icalendar-2.10.3/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S  > ../ruby-icalendar_2.10.3-1_source.changes
+I: user script /srv/workspace/pbuilder/1258052/tmp/hooks/A99_set_merged_usr starting
+Not re-configuring usrmerge for trixie
+I: user script /srv/workspace/pbuilder/1258052/tmp/hooks/A99_set_merged_usr finished
+hostname: Name or service not known
+I: Running cd /build/reproducible-path/ruby-icalendar-2.10.3/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S  > ../ruby-icalendar_2.10.3-1_source.changes
 dpkg-buildpackage: info: source package ruby-icalendar
 dpkg-buildpackage: info: source version 2.10.3-1
 dpkg-buildpackage: info: source distribution unstable
@@ -934,7 +970,7 @@
 │ ruby-icalendar: Installing files and building extensions for ruby3.3         │
 └──────────────────────────────────────────────────────────────────────────────┘
 
-/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20250225-3756480-anwsbk/gemspec
+/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20260331-1276425-ewcgn0/gemspec
 WARNING:  License identifier 'icalendar' is invalid. Use an identifier from
 https://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
 or set it to nil if you don't want to specify a license.
@@ -948,7 +984,7 @@
   Name: icalendar
   Version: 2.10.3
   File: icalendar-2.10.3.gem
-/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-icalendar/usr/share/rubygems-integration/all /tmp/d20250225-3756480-anwsbk/icalendar-2.10.3.gem
+/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-icalendar/usr/share/rubygems-integration/all /tmp/d20260331-1276425-ewcgn0/icalendar-2.10.3.gem
 /build/reproducible-path/ruby-icalendar-2.10.3/debian/ruby-icalendar/usr/share/rubygems-integration/all/gems/icalendar-2.10.3/lib/icalendar.rb
 /build/reproducible-path/ruby-icalendar-2.10.3/debian/ruby-icalendar/usr/share/rubygems-integration/all/gems/icalendar-2.10.3/lib/icalendar/alarm.rb
 /build/reproducible-path/ruby-icalendar-2.10.3/debian/ruby-icalendar/usr/share/rubygems-integration/all/gems/icalendar-2.10.3/lib/icalendar/calendar.rb
@@ -1021,29 +1057,13 @@
 
 All examples were filtered out; ignoring {:focus=>true}
 
-Randomized with seed 55954
-
-Icalendar::Values::DateOrDateTime
-  #call
-    Date value
-      returns a Date object
-      has the proper value
-    DateTime value
-      returns a DateTime object
-      has the proper value
-    unparseable date
-      raises an error including the unparseable time
-  #to_ical
-    should call parse behind the scenes
-
-Icalendar::Todo
-  #dtstart
-    is not normally required
-    with duration set
-      is valid when set
-      is invalid if not set
+Randomized with seed 15075
 
 Icalendar::Timezone
+  marshalling
+    can be de/serialized
+    with standard/daylight components
+      can be de/serialized
   valid?
     with neither standard or daylight
       is expected not to be valid
@@ -1053,119 +1073,48 @@
       is expected to be valid
     with only standard
       is expected to be valid
-  marshalling
-    can be de/serialized
-    with standard/daylight components
-      can be de/serialized
 
-Icalendar::Event
-  multi values
-    #comment
-      can be appended
-      can be added
-      will return an array when set singly
-  #to_ical
-    is expected to include "GEO:41.230896;-74.411774"
-    is expected to include "DTSTART:20131227T013000Z"
-    is expected to include "URL;VALUE=URI:https://example.com"
-    is expected to include "SUMMARY:My event\\, my ical\\, my test"
-    is expected to include "X-CUSTOM-PROPERTY:customize"
-    is expected to include "DTEND:20131227T033000Z"
-    complex organizer
-      is expected to include "ORGANIZER;CN=John Smith:mailto:jsmith@example.com"
-    simple organizer
-      is expected to include "ORGANIZER:mailto:jsmith@example.com"
-  suggested single values
-    is invalid with strict checking
-    is valid by default
-  .parse
-    should return an events array
-  #append_custom_property
-    with a defined property
-      sets the proper setter
-    with custom property
-      appends to the custom properties hash
-  #has_alarm?
-    with a set valarm
-      is expected to have alarm
-    without a set valarm
-      is expected not to have alarm
-  #dtstart
-    no parent
-      is invalid if not set
-      is valid if set
-    with parent
-      is valid with parent method set
-      is invalid without method set
-  #custom_property
-    returns a default for missing properties
-  mutually exclusive values
-    is invalid if both dtend and duration are set
-    is valid if dtend is set
-    is valid if duration is set
-  #find_alarm
-    should not respond_to find_alarm
+Icalendar::Values::Duration
+  #hours
+    is expected to eq 6
+  #days=
+    can set the number of days
+  #past?
+    positive implicit
+      is expected to equal false
+    negative
+      is expected to equal true
+    positive explicit
+      is expected to equal false
+  #seconds
+    is expected to eq 30
+  #minutes
+    is expected to eq 45
+  #value_ical
+    is expected to eq "P2DT4H"
+  #weeks
+    is expected to eq 3
+  #days
+    days given
+      is expected to eq 5
+    no days given
+      is expected to eq 0
 
-Icalendar::Calendar
-  #add
-    sets ip_method to "ADD"
-  #cancel
-    sets ip_method to "CANCEL"
-  .parse
-    correctly parses a bad file
-  #decline_counter
-    sets ip_method to "DECLINECOUNTER"
-  #request
-    sets ip_method to "REQUEST"
-  #reply
-    sets ip_method to "REPLY"
-  values
-    sets and gets custom properties
-    #calscale sets and gets
-    #version sets and gets
-    #prodid sets and gets
-    can set params on a property
-    #ip_method sets and gets
-    required values
-      is not valid when prodid is not set
-      is valid when both prodid and version are set
-      is not valid when version is not set
-      is valid by default
-  components
-    #todo passes a component to a block to build parts
-    #journal can be passed in
-    #journal adds a new component
-    #journal passes a component to a block to build parts
-    #event adds a new component
-    #timezone adds a new component
-    #timezone can be passed in
-    #todo adds a new component
-    #freebusy adds a new component
-    #freebusy passes a component to a block to build parts
-    #freebusy can be passed in
-    #event passes a component to a block to build parts
-    adds reference to parent
-    #todo can be passed in
-    #timezone passes a component to a block to build parts
-    #event can be passed in
-    can be added with add_x_ for custom components
-    adds event to events list
-    #find_timezone
-      finds by tzid
-    #add_event
-      delegates to non add_ version
-    #find_event
-      finds by uid
-  #refresh
-    sets ip_method to "REFRESH"
-  #publish
-    sets ip_method to "PUBLISH"
-  #counter
-    sets ip_method to "COUNTER"
-  marshalling
-    can be de/serialized
-  #to_ical
-    outputs properties and components
+Icalendar::DowncasedHash
+  #[]
+    gets an already set value
+  #[]=
+    sets a new value
+  DowncasedHash()
+    returns self when passed an DowncasedHash
+    wraps a hash in an downcased hash
+  #has_key?
+    correctly identifies keys in the hash
+  #delete
+    with a block
+      calls the block when the key is not found
+    no block
+      removes the key
 
 Icalendar::Values::Date
   #==
@@ -1175,16 +1124,23 @@
 
 Icalendar::Alarm
   #valid?
-    display action
-      requires description
     DISPLAY is set as default action
       must be DISPLAY
     only repeat is set
       is expected not to be valid
-    only duration is set
-      is expected not to be valid
     neither duration or repeat is set
       is expected to be valid
+    display action
+      requires description
+    strict validations check parent
+      is expected to equal true
+      with parent
+        journal
+          is expected to equal false
+        event
+          is expected to equal true
+        todo
+          is expected to equal true
     email action
       requires subject and body
         requires description
@@ -1193,242 +1149,322 @@
         can be single
         must be present
         can be multi
-    strict validations check parent
-      is expected to equal true
-      with parent
-        event
-          is expected to equal true
-        journal
-          is expected to equal false
-        todo
-          is expected to equal true
+    only duration is set
+      is expected not to be valid
     both duration and repeat are set
       is expected to be valid
 
-Icalendar::Values::UtcOffset
-  #value_ical
-    does not output seconds unless required
-    with seconds
-      is expected to eq "+023030"
-  #behind?
-    positive offset
-      is expected to equal false
-    no offset
-      is expected to equal false
-      does not allow override
-    negative offset
-      is expected to equal true
+TZInfo::Timezone
+  tzname for offset
+    #standard
+      is expected to eql "CET"
+    #daylight
+      is expected to eql "CEST"
+  no transition
+    creates a standard component with equal offsets
+  standard offset
+    is expected to eq "+0100"
+    is expected to eq "+0200"
+  standard recurrence rule
+    is expected to eq "FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10"
+  no end transition
+    only creates a standard component
+  dst transition
+    is expected not to raise Exception
+    is expected to raise TZInfo::AmbiguousTime
+    is expected not to raise Exception
+    TZInfo::Timezone.default_dst = false
+      is expected not to raise Exception
+    TZInfo::Timezone.default_dst = nil
+      is expected to raise TZInfo::AmbiguousTime
+    TZInfo::Timezone.default_dst = true
+      is expected not to raise Exception
+  daylight offset
+    is expected to eq "+0100"
+    is expected to eq "+0200"
+  daylight recurrence rule
+    is expected to eq "FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3"
+
+Icalendar::Calendar
+  marshalling
+    can be de/serialized
+  #cancel
+    sets ip_method to "CANCEL"
+  .parse
+    correctly parses a bad file
+  #reply
+    sets ip_method to "REPLY"
+  #to_ical
+    outputs properties and components
+  #request
+    sets ip_method to "REQUEST"
+  #counter
+    sets ip_method to "COUNTER"
+  #refresh
+    sets ip_method to "REFRESH"
+  values
+    #version sets and gets
+    can set params on a property
+    #ip_method sets and gets
+    sets and gets custom properties
+    #prodid sets and gets
+    #calscale sets and gets
+    required values
+      is valid when both prodid and version are set
+      is valid by default
+      is not valid when version is not set
+      is not valid when prodid is not set
+  #add
+    sets ip_method to "ADD"
+  #publish
+    sets ip_method to "PUBLISH"
+  components
+    #event can be passed in
+    #freebusy adds a new component
+    #event adds a new component
+    #freebusy passes a component to a block to build parts
+    #journal adds a new component
+    #todo can be passed in
+    #freebusy can be passed in
+    adds reference to parent
+    can be added with add_x_ for custom components
+    #timezone passes a component to a block to build parts
+    #todo passes a component to a block to build parts
+    #todo adds a new component
+    #event passes a component to a block to build parts
+    #timezone can be passed in
+    #timezone adds a new component
+    #journal passes a component to a block to build parts
+    #journal can be passed in
+    adds event to events list
+    #find_event
+      finds by uid
+    #add_event
+      delegates to non add_ version
+    #find_timezone
+      finds by tzid
+  #decline_counter
+    sets ip_method to "DECLINECOUNTER"
+
+Icalendar::Values::Period
+  date-time/duration
+    #explicit_end
+      is expected to eq nil
+    #period_start
+      is expected to eq #<DateTime: 1983-05-07T00:06:00+00:00 ((2445462j,360s,0n),+0s,2299161j)>
+    #duration
+      is expected to eq #<OpenStruct past=false, weeks=1604, days=0, hours=0, minutes=0, seconds=0>
+    #value_ical
+      is expected to eq "19830507T000600Z/P1604W"
+      allows updating duration
+  date-time/date-time
+    #explicit_end
+      is expected to eq #<DateTime: 2014-01-28T20:14:00+00:00 ((2456686j,72840s,0n),+0s,2299161j)>
+    #value_ical
+      is expected to eq "19830507T000600Z/20140128T201400Z"
+    #duration
+      is expected to be nil
+    #period_start
+      is expected to eq #<DateTime: 1983-05-07T00:06:00+00:00 ((2445462j,360s,0n),+0s,2299161j)>
+
+Icalendar::Values::DateOrDateTime
+  #call
+    unparseable date
+      raises an error including the unparseable time
+    DateTime value
+      returns a DateTime object
+      has the proper value
+    Date value
+      has the proper value
+      returns a Date object
+  #to_ical
+    should call parse behind the scenes
 
 Icalendar::Parser
+  #parse with bad line
+    saves params
+    returns an array of calendars
+    properly splits multi-valued lines
   #parse
-    reversed_timezone.ics
-      correctly parses the event timezone
     custom_component.ics
       correctly handles custom named components
-    single_event.ics
-      saves params
-      properly splits multi-valued lines
-      returns an array of calendars
-    events.ics
-      returns an array of events
     recurrence.ics
       correctly parses the exdate array
+    reversed_timezone.ics
+      correctly parses the event timezone
     tzid_search.ics
       correctly sets the weird tzid
     event.ics
       returns an array of events
-  #parse with bad line
-    returns an array of calendars
-    properly splits multi-valued lines
-    saves params
+    single_event.ics
+      saves params
+      properly splits multi-valued lines
+      returns an array of calendars
+    events.ics
+      returns an array of events
   missing date value parameter
     falls back to date type for dtstart
 
-Icalendar::Values::Duration
-  #days=
-    can set the number of days
-  #value_ical
-    is expected to eq "P2DT4H"
-  #past?
-    negative
-      is expected to equal true
-    positive implicit
+Icalendar::Values::UtcOffset
+  #behind?
+    positive offset
       is expected to equal false
-    positive explicit
+    negative offset
+      is expected to equal true
+    no offset
       is expected to equal false
-  #minutes
-    is expected to eq 45
-  #days
-    no days given
-      is expected to eq 0
-    days given
-      is expected to eq 5
-  #weeks
-    is expected to eq 3
-  #seconds
-    is expected to eq 30
-  #hours
-    is expected to eq 6
+      does not allow override
+  #value_ical
+    does not output seconds unless required
+    with seconds
+      is expected to eq "+023030"
+
+Icalendar::Todo
+  #dtstart
+    is not normally required
+    with duration set
+      is valid when set
+      is invalid if not set
 
 Icalendar::Values::Text
-  #value_ical
-    escapes \ , ; NL
-  unescapes in initializer
-    given unescaped version
-      does not try to double unescape
-    given escaped version
-      removes escaping
   escapes parameter text properly
+    multiple values, with special characters
+      quotes values with special characters, joins with comma
     multiple values, no special characters
       joins with comma
-    nil value
-      trats nil as blank
-    multiple values, double quotes
-      replaces double quotes with single
+    single value, no special characters
+      does not wrap param in double quotes
     single value, double quotes
       replaces double quotes with single
     single value, special characters
       wraps param value in double quotes
-    single value, no special characters
-      does not wrap param in double quotes
-    multiple values, with special characters
-      quotes values with special characters, joins with comma
+    nil value
+      trats nil as blank
+    multiple values, double quotes
+      replaces double quotes with single
+  #value_ical
+    escapes \ , ; NL
+  unescapes in initializer
+    given escaped version
+      removes escaping
+    given unescaped version
+      does not try to double unescape
+
+Icalendar::Values::Recur
+  #valid?
+    cannot have both until and count
+    requires frequency
+  #value_ical
+    outputs in spec order
+  parsing
+    multiple bydays
+      is expected to eq "WEEKLY"
+      is expected to eq ["MO", "WE", "FR"]
+      is expected to eq 4
+    neverending yearly
+      can be added to another event by sending
+      is expected to eq "YEARLY"
+    single byday
+      is expected to eq [3]
+      is expected to eq "YEARLY"
+      is expected to eq ["2SU"]
+
+Icalendar::Event
+  #has_alarm?
+    without a set valarm
+      is expected not to have alarm
+    with a set valarm
+      is expected to have alarm
+  mutually exclusive values
+    is valid if dtend is set
+    is invalid if both dtend and duration are set
+    is valid if duration is set
+  #custom_property
+    returns a default for missing properties
+  #dtstart
+    with parent
+      is invalid without method set
+      is valid with parent method set
+    no parent
+      is valid if set
+      is invalid if not set
+  suggested single values
+    is invalid with strict checking
+    is valid by default
+  .parse
+    should return an events array
+  multi values
+    #comment
+      can be added
+      will return an array when set singly
+      can be appended
+  #to_ical
+    is expected to include "DTSTART:20131227T013000Z"
+    is expected to include "GEO:41.230896;-74.411774"
+    is expected to include "URL;VALUE=URI:https://example.com"
+    is expected to include "X-CUSTOM-PROPERTY:customize"
+    is expected to include "DTEND:20131227T033000Z"
+    is expected to include "SUMMARY:My event\\, my ical\\, my test"
+    complex organizer
+      is expected to include "ORGANIZER;CN=John Smith:mailto:jsmith@example.com"
+    simple organizer
+      is expected to include "ORGANIZER:mailto:jsmith@example.com"
+  #append_custom_property
+    with a defined property
+      sets the proper setter
+    with custom property
+      appends to the custom properties hash
+  #find_alarm
+    should not respond_to find_alarm
 
 Icalendar::Values::DateTime
+  without ActiveSupport
+    parses a string to a DateTime instance
+    local time
+      parses the value as local time
   common tests
     does not add any tzid parameter to output
-    floating local time
-      keeps the value as a DateTime
-      does not append a Z on output
-    manually set UTC
-      does not add a tzid parameter, but does add a Z
     unparseable time
       raises an error including the unparseable time
     local time
       keeps value and tzid as localtime on output
-  without ActiveSupport
-    parses a string to a DateTime instance
-    local time
-      parses the value as local time
-
-TZInfo::Timezone
-  no end transition
-    only creates a standard component
-  standard recurrence rule
-    is expected to eq "FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10"
-  standard offset
-    is expected to eq "+0200"
-    is expected to eq "+0100"
-  dst transition
-    is expected to raise TZInfo::AmbiguousTime
-    is expected not to raise Exception
-    is expected not to raise Exception
-    TZInfo::Timezone.default_dst = true
-      is expected not to raise Exception
-    TZInfo::Timezone.default_dst = false
-      is expected not to raise Exception
-    TZInfo::Timezone.default_dst = nil
-      is expected to raise TZInfo::AmbiguousTime
-  no transition
-    creates a standard component with equal offsets
-  daylight recurrence rule
-    is expected to eq "FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3"
-  tzname for offset
-    #standard
-      is expected to eql "CET"
-    #daylight
-      is expected to eql "CEST"
-  daylight offset
-    is expected to eq "+0100"
-    is expected to eq "+0200"
+    floating local time
+      does not append a Z on output
+      keeps the value as a DateTime
+    manually set UTC
+      does not add a tzid parameter, but does add a Z
 
 Icalendar
-  non-default values
-    will output value param on dtstart
-    will set dtend to Date
-    will output value param on dtend
-    will set dtstart to Date
-  sorting time events
-    sorts time events by end time (PENDING: Temporarily skipped with xit)
-    sorts time events by start time (PENDING: Temporarily skipped with xit)
   non-standard values
     strict parser
       is expected to raise NoMethodError
     lenient parser
-      is expected not to raise Exception
       can output custom fields
+      is expected not to raise Exception
+      custom components
+        can output the custom component
       saves non-standard fields
         is expected to eq "Not properly noted as custom with X- prefix."
         is expected to eq "Not properly noted as custom with X- prefix."
-      custom components
-        can output the custom component
-  sorting date / time events
-    sorts time events (PENDING: Temporarily skipped with xit)
+  sorting time events
+    sorts time events by end time (PENDING: Temporarily skipped with xit)
+    sorts time events by start time (PENDING: Temporarily skipped with xit)
   sorting daily events
     sorts day events
   timezone round trip
     will generate the same file as it parsed
+  sorting date / time events
+    sorts time events (PENDING: Temporarily skipped with xit)
+  non-default values
+    will set dtend to Date
+    will output value param on dtend
+    will set dtstart to Date
+    will output value param on dtstart
+  cleanly handle facebook organizers
+    will generate the same file as it parsed
   single event round trip
     array properties can be assigned to a new event
     will generate the same file as is parsed
-  cleanly handle facebook organizers
-    will generate the same file as it parsed
-
-Icalendar::DowncasedHash
-  #delete
-    with a block
-      calls the block when the key is not found
-    no block
-      removes the key
-  DowncasedHash()
-    returns self when passed an DowncasedHash
-    wraps a hash in an downcased hash
-  #has_key?
-    correctly identifies keys in the hash
-  #[]=
-    sets a new value
-  #[]
-    gets an already set value
-
-Icalendar::Values::Recur
-  #valid?
-    requires frequency
-    cannot have both until and count
-  #value_ical
-    outputs in spec order
-  parsing
-    single byday
-      is expected to eq [3]
-      is expected to eq "YEARLY"
-      is expected to eq ["2SU"]
-    neverending yearly
-      is expected to eq "YEARLY"
-      can be added to another event by sending
-    multiple bydays
-      is expected to eq ["MO", "WE", "FR"]
-      is expected to eq 4
-      is expected to eq "WEEKLY"
-
-Icalendar::Values::Period
-  date-time/duration
-    #explicit_end
-      is expected to eq nil
-    #duration
-      is expected to eq #<OpenStruct past=false, weeks=1604, days=0, hours=0, minutes=0, seconds=0>
-    #value_ical
-      is expected to eq "19830507T000600Z/P1604W"
-      allows updating duration
-    #period_start
-      is expected to eq #<DateTime: 1983-05-07T00:06:00+00:00 ((2445462j,360s,0n),+0s,2299161j)>
-  date-time/date-time
-    #value_ical
-      is expected to eq "19830507T000600Z/20140128T201400Z"
-    #duration
-      is expected to be nil
-    #explicit_end
-      is expected to eq #<DateTime: 2014-01-28T20:14:00+00:00 ((2456686j,72840s,0n),+0s,2299161j)>
-    #period_start
-      is expected to eq #<DateTime: 1983-05-07T00:06:00+00:00 ((2445462j,360s,0n),+0s,2299161j)>
 
 Pending: (Failures listed here are expected and do not affect your suite's status)
 
@@ -1444,10 +1480,10 @@
      # Temporarily skipped with xit
      # ./spec/roundtrip_spec.rb:103
 
-Finished in 1.64 seconds (files took 1.02 seconds to load)
+Finished in 0.80334 seconds (files took 0.93339 seconds to load)
 210 examples, 0 failures, 3 pending
 
-Randomized with seed 55954
+Randomized with seed 15075
 
 Coverage report generated for RSpec to /build/reproducible-path/ruby-icalendar-2.10.3/coverage. 1176 / 1250 LOC (94.08%) covered.
 
@@ -1479,12 +1515,14 @@
 dpkg-buildpackage: info: binary-only upload (no source included)
 dpkg-genchanges: info: including full source code in upload
 I: copying local configuration
+I: user script /srv/workspace/pbuilder/1258052/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/1258052/tmp/hooks/B01_cleanup finished
 I: unmounting dev/ptmx filesystem
 I: unmounting dev/pts filesystem
 I: unmounting dev/shm filesystem
 I: unmounting proc filesystem
 I: unmounting sys filesystem
 I: cleaning the build env 
-I: removing directory /srv/workspace/pbuilder/3737696 and its subdirectories
-I: Current time: Tue Feb 25 00:39:21 -12 2025
-I: pbuilder-time-stamp: 1740487161
+I: removing directory /srv/workspace/pbuilder/1258052 and its subdirectories
+I: Current time: Tue Mar 31 09:03:59 +14 2026
+I: pbuilder-time-stamp: 1774897439