Diff of the two buildlogs:

--
--- b1/build.log	2025-01-29 20:02:02.341127486 +0000
+++ b2/build.log	2025-01-29 20:04:05.947517118 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Tue Mar  3 14:23:04 -12 2026
-I: pbuilder-time-stamp: 1772590984
+I: Current time: Thu Jan 30 10:02:05 +14 2025
+I: pbuilder-time-stamp: 1738180925
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz]
 I: copying local configuration
@@ -27,52 +27,84 @@
 dpkg-source: info: applying rack3.patch
 I: Not using root during the build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/1825267/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/2429027/tmp/hooks/D01_modify_environment starting
+debug: Running on codethink04-arm64.
+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 Jan 29 20: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/2429027/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/2429027/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='arm64'
-  DEBIAN_FRONTEND='noninteractive'
+  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]="aarch64-unknown-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=arm64
+  DEBIAN_FRONTEND=noninteractive
   DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 '
-  DISTRIBUTION='unstable'
-  HOME='/root'
-  HOST_ARCH='arm64'
+  DIRSTACK=()
+  DISTRIBUTION=unstable
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=aarch64
+  HOST_ARCH=arm64
   IFS=' 	
   '
-  INVOCATION_ID='f188c9088c9f48d789f1fde6af769225'
-  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='1825267'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=785d465e131e401f94c613be62f763bc
+  LANG=C
+  LANGUAGE=nl_BE:nl
+  LC_ALL=C
+  MACHTYPE=aarch64-unknown-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=2429027
   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.yv7H9o69/pbuilderrc_3IRk --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.yv7H9o69/b1 --logfile b1/build.log ruby-omniauth_2.1.1-4.dsc'
-  SUDO_GID='109'
-  SUDO_UID='104'
-  SUDO_USER='jenkins'
-  TERM='unknown'
-  TZ='/usr/share/zoneinfo/Etc/GMT+12'
-  USER='root'
-  _='/usr/bin/systemd-run'
-  http_proxy='http://192.168.101.4: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.yv7H9o69/pbuilderrc_123O --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.yv7H9o69/b2 --logfile b2/build.log ruby-omniauth_2.1.1-4.dsc'
+  SUDO_GID=109
+  SUDO_UID=104
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
+  http_proxy=http://192.168.101.4:3128
 I: uname -a
-  Linux codethink03-arm64 6.1.0-30-cloud-arm64 #1 SMP Debian 6.1.124-1 (2025-01-12) aarch64 GNU/Linux
+  Linux i-capture-the-hostname 6.1.0-30-cloud-arm64 #1 SMP Debian 6.1.124-1 (2025-01-12) aarch64 GNU/Linux
 I: ls -l /bin
-  lrwxrwxrwx 1 root root 7 Nov 22  2024 /bin -> usr/bin
-I: user script /srv/workspace/pbuilder/1825267/tmp/hooks/D02_print_environment finished
+  lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin
+I: user script /srv/workspace/pbuilder/2429027/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -299,7 +331,7 @@
 Get: 169 http://deb.debian.org/debian unstable/main arm64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [90.2 kB]
 Get: 170 http://deb.debian.org/debian unstable/main arm64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB]
 Get: 171 http://deb.debian.org/debian unstable/main arm64 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B]
-Fetched 56.3 MB in 1s (98.5 MB/s)
+Fetched 56.3 MB in 1s (94.1 MB/s)
 Preconfiguring packages ...
 Selecting previously unselected package libpython3.13-minimal:arm64.
 (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 ... 19957 files and directories currently installed.)
@@ -862,8 +894,8 @@
 Setting up tzdata (2025a-1) ...
 
 Current default time zone: 'Etc/UTC'
-Local time is now:      Wed Mar  4 02:24:03 UTC 2026.
-Universal Time is now:  Wed Mar  4 02:24:03 UTC 2026.
+Local time is now:      Wed Jan 29 20:03:02 UTC 2025.
+Universal Time is now:  Wed Jan 29 20:03:02 UTC 2025.
 Run 'dpkg-reconfigure tzdata' if you wish to change it.
 
 Setting up ruby-minitest (5.22.3-1) ...
@@ -1018,7 +1050,11 @@
 Building tag database...
  -> Finished parsing the build-deps
 I: Building the package
-I: Running cd /build/reproducible-path/ruby-omniauth-2.1.1/ && 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-omniauth_2.1.1-4_source.changes
+I: user script /srv/workspace/pbuilder/2429027/tmp/hooks/A99_set_merged_usr starting
+Not re-configuring usrmerge for unstable
+I: user script /srv/workspace/pbuilder/2429027/tmp/hooks/A99_set_merged_usr finished
+hostname: Name or service not known
+I: Running cd /build/reproducible-path/ruby-omniauth-2.1.1/ && 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-omniauth_2.1.1-4_source.changes
 dpkg-buildpackage: info: source package ruby-omniauth
 dpkg-buildpackage: info: source version 2.1.1-4
 dpkg-buildpackage: info: source distribution unstable
@@ -1055,7 +1091,7 @@
 │ ruby-omniauth: Installing files and building extensions for ruby3.3          │
 └──────────────────────────────────────────────────────────────────────────────┘
 
-/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20260303-1843954-uyx709/gemspec
+/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20250130-2460706-o6kb7n/gemspec
 WARNING:  description and summary are identical
 WARNING:  open-ended dependency on hashie (>= 3.4.6) is not recommended
   if hashie is semantically versioned, use:
@@ -1070,7 +1106,7 @@
   Name: omniauth
   Version: 2.1.1
   File: omniauth-2.1.1.gem
-/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-omniauth/usr/share/rubygems-integration/all /tmp/d20260303-1843954-uyx709/omniauth-2.1.1.gem
+/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-omniauth/usr/share/rubygems-integration/all /tmp/d20250130-2460706-o6kb7n/omniauth-2.1.1.gem
 /build/reproducible-path/ruby-omniauth-2.1.1/debian/ruby-omniauth/usr/share/rubygems-integration/all/gems/omniauth-2.1.1/lib/omniauth.rb
 /build/reproducible-path/ruby-omniauth-2.1.1/debian/ruby-omniauth/usr/share/rubygems-integration/all/gems/omniauth-2.1.1/lib/omniauth/auth_hash.rb
 /build/reproducible-path/ruby-omniauth-2.1.1/debian/ruby-omniauth/usr/share/rubygems-integration/all/gems/omniauth-2.1.1/lib/omniauth/authenticity_token_protection.rb
@@ -1116,82 +1152,87 @@
 RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-omniauth-2.1.1/debian/ruby-omniauth/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-omniauth-2.1.1/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake
 /usr/bin/ruby3.3 -I/usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib:/usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern ./spec/\*\*/\*_spec.rb --format documentation
 
-Randomized with seed 53822
+Randomized with seed 45057
 
-OmniAuth::Strategies::Developer
-  callback phase
-    with default options
-      sets the email in the auth hash
-      sets the name in the auth hash
-      sets the uid to the email
-    with custom options
-      sets info fields properly
-      sets the uid properly
-  request phase
-    has a text field for each of the fields
-    has the callback as the action for the form
-    displays a form
+OmniAuth::FailureEndpoint
+  raise-out environment
+    raises out the error
+    raises out an OmniAuth::Error if no omniauth.error is set
+  non-raise-out environment
+    is a redirect
+    respects the globally configured path prefix
+    escapes the message key
+    includes the origin (escaped) if one is provided
+    respects the custom path prefix configured on the strategy
+    includes the SCRIPT_NAME
 
-OmniAuth::AuthHash
-  converts a supplied info key into an InfoHash object
-  does not try to parse `string` as InfoHash
-  has a subkey_class
-  #to_hash
-    supplies the calculated name in the converted hash
-    does not pollute the URL hash with 'name' etc
-    has string keys
-    converts an info hash as well
-    is a plain old hash
-  #name
-    displays the email if no name, first, last, or nick is available
-    displays the nickname if no name, first, or last is available
-    displays only a first or last name if only that is available
-    falls back to go to first_name last_name concatenation
-    defaults to the name key
-  #valid?
-    is valid with the right parameters
-    requires a name in the user info hash
-    requires a uid
-    requires a provider
-  OmniAuth::AuthHash::InfoHash
-    has a subkey_class
-    #valid?
-      is valid if there is a name
-    with Hashie 3.5.1+
-      does not log anything in Hashie 3.5.1+
+OmniAuth::KeyStore
+  on Hashie 3.5.2+
+    does not log anything to the console
+  on Hashie < 3.5.0
+    does not log anything to the console
+  on Hashie 3.5.0 and 3.5.1
+    does not log anything to the console
+
+OmniAuth::Builder
+  #before_request_phase
+    passes the block to the config
+  #call
+    passes env to to_app.call
+  #configure
+    passes the block to the config
+  #options
+    adds an argument if no options are provided
+    merges provided options in
+  #on_failure
+    passes the block to the config
+  #provider
+    raises a helpful LoadError message if it can't find the class
+    accepts a class
+    doesn't translate a symbol to a top-level constant
+    translates a symbol to a constant
+  #before_options_phase
+    passes the block to the config
+  #before_callback_phase
+    passes the block to the config
 
 OmniAuth
-  .logger
-    calls through to the configured logger
-  ::Utils
-    .camelize
-      works in special cases that have been added
-      replaces / with ::
-      doesn't uppercase the first letter when passed false
-      works on normal cases
-    form_css
-      returns a style tag with the configured form_css
-    .deep_merge
-      combines hashes
   .strategies
     increases when a new strategy is made
   configuration
-    is able to set the path
+    is able to set hook on request_call
     is callable from .configure
+    is able to set the path
     is able to set the on_failure rack app
+    is able to set request_validation_phase
     is able to set hook on option_call
     is able to set hook on callback_call
-    is able to set hook on request_call
-    is able to set request_validation_phase
     mock auth
-      facebook is AuthHash
-      sets facebook attributes
       default is AuthHash
       does not mutate given auth hash
+      facebook is AuthHash
+      sets facebook attributes
     .defaults
       is a hash of default configuration
+  .logger
+    calls through to the configured logger
+  ::Utils
+    form_css
+      returns a style tag with the configured form_css
+    .camelize
+      replaces / with ::
+      works on normal cases
+      doesn't uppercase the first letter when passed false
+      works in special cases that have been added
+    .deep_merge
+      combines hashes
 
 OmniAuth::Form
+  #initialize
+    sets an H1 tag from the passed :title option
+    sets the form action to the passed :url option
+  #password_field
+    adds a labeled input field
   #html
     appends to the html body
   fieldset
@@ -1199,262 +1240,257 @@
   .build
     evaluates in the instance when called with a block and no argument
     yields the instance when called with a block and argument
-  #password_field
-    adds a labeled input field
-  #initialize
-    sets the form action to the passed :url option
-    sets an H1 tag from the passed :title option
 
-OmniAuth::KeyStore
-  on Hashie < 3.5.0
-    does not log anything to the console
-  on Hashie 3.5.0 and 3.5.1
-    does not log anything to the console
-  on Hashie 3.5.2+
-    does not log anything to the console
+OmniAuth::AuthHash
+  has a subkey_class
+  converts a supplied info key into an InfoHash object
+  does not try to parse `string` as InfoHash
+  OmniAuth::AuthHash::InfoHash
+    has a subkey_class
+    with Hashie 3.5.1+
+      does not log anything in Hashie 3.5.1+
+    #valid?
+      is valid if there is a name
+  #to_hash
+    has string keys
+    is a plain old hash
+    converts an info hash as well
+    supplies the calculated name in the converted hash
+    does not pollute the URL hash with 'name' etc
+  #name
+    displays the email if no name, first, last, or nick is available
+    defaults to the name key
+    displays only a first or last name if only that is available
+    displays the nickname if no name, first, or last is available
+    falls back to go to first_name last_name concatenation
+  #valid?
+    is valid with the right parameters
+    requires a uid
+    requires a name in the user info hash
+    requires a provider
 
 OmniAuth::Strategy
+  is the current class's proc call if one exists
   inherits by merging with preference for the latest class
   inherits by merging with preference for the latest class
-  is the current class's proc call if one exists
   inherits by merging with preference for the latest class
   is the current class's proc call if one exists
   is the current class's proc call if one exists
-  #full_host
-    remains calm when there is a pipe in the URL
-  #inspect
-    returns the class name
-  #call
-    raises NoSessionError if rack.session isn't set
-    duplicates and calls
-  #auth_hash
-    returns an AuthHash
-    calls through to uid, info, credentials, and extra
-  #callback_phase
-    sets the auth hash
-  #uid
-    inherits if it can
-    is the current class's uid if one exists
-  .option
-    sets a default value
-    sets the default value to nil if none is provided
-  #skip_info?
-    is false by default
-    is true if options.skip_info is true
-    is false if options.skip_info is false
-    is true if options.skip_info is a callable that evaluates to truthy
   fetcher stacks
-    .extra_stack
-      is an array of called ancestral procs
-    .info_stack
-      is an array of called ancestral procs
     .uid_stack
       is an array of called ancestral procs
     .credentials_stack
       is an array of called ancestral procs
-  .args
-    sets args to the specified argument if there is one
-    is inheritable
-    accepts corresponding options as default arg values
-  user_info
-    should default to an empty hash
-  request_phase
-    raises a NotImplementedError
-  #fail!
-    provides a generic message when not provided an exception
-    provides exception information when one is provided
-  #redirect
-    uses javascript if :iframe is true (PENDING: Temporarily skipped with xit)
-  .configure
-    takes a hash and deep merge it
-    when block is passed
-      allows for default options setting
-      works when block doesn't evaluate to true
+    .extra_stack
+      is an array of called ancestral procs
+    .info_stack
+      is an array of called ancestral procs
   #call
-    calls fail! when encountering an unhandled exception
     redirects to the fail! result when encountering an unhandled exception
+    calls fail! when encountering an unhandled exception
     authenticity validation
-      with default POST only request methods
-        allows a request with matching authenticity_token
-        does not allow a request without a matching authenticity token
-      with custom allow_if proc
-        allows a valid request
       with allowed GET
         allows a request without authenticity token
         warning message logging
           logs warning message
           when not login path is requested
             does not log warning message
+      with custom allow_if proc
+        allows a valid request
+      with default POST only request methods
+        does not allow a request without a matching authenticity token
+        allows a request with matching authenticity_token
+    when in test mode and path not on request path
+      does not verify token
     custom full_host
-      honors HTTP_X_FORWARDED_PROTO if present
       is based on the request if it's not a string nor a proc
       runs the proc with the env when it is a proc
       is the string when a string is there
+      honors HTTP_X_FORWARDED_PROTO if present
+    with relative url root
+      accepts the request
+      accepts the callback
+      error during auth phase
+        passes the error to fail!()
+      error during call_app!
+        raises the application error
+      custom request
+        does not prefix a custom request path
+      callback_url
+        redirects to the correctly prefixed callback
+    request method restriction
+      allows a request method of the correct type
+      does not allow a request method of the wrong type
+    receiving an OPTIONS request
+      to the request path
+        behaves like an OPTIONS request
+          responds with 200
+          sets the Allow header properly
+      to some other path
+        does not short-circuit the request
+      to the request path
+        behaves like an OPTIONS request
+          responds with 200
+          sets the Allow header properly
+    :form option
+      calls through to the supplied form option if one exists
+      calls through to the app if :form => true is set as an option
+    dynamic paths
+      provides a custom callback path if request_path evals to a string
+      runs the callback phase if the custom callback path evaluator is truthy
+      runs the request phase if the custom request path evaluator is truthy
+      correctly reports the callback path when the custom callback path evaluator is truthy
+    options mutation
+      in callback phase
+        does not affect original options
+        does not affect deep options
+      in request phase
+        does not affect original options
+        does not affect deep options
+    custom paths
+      uses a custom callback_path if one is provided
+      uses a custom request_path if one is provided
+      callback_url
+        preserves the query parameters
+        uses a custom callback_path if one is provided
     test mode
+      short circuits the request phase entirely
       responds with the default hash if none is set
-      sets omniauth.params with query params on the request phase
-      respects SCRIPT_NAME (a.k.a. BaseURI)
+      doesn't short circuit the request if request method is not allowed
+      redirects on failure
       is case insensitive on request path
-      respects SCRIPT_NAME (a.k.a. BaseURI) on failure
-      is case insensitive on callback path
+      does not set body parameters of POST request on the request phase
       turns omniauth.params into an env variable on the callback phase
+      executes callback hook on the callback phase
+      rescues errors in request_call
+      sets omniauth.params with query params on the request phase
+      does not short circuit requests outside of authentication
+      maintains host and port
+      simulates login failure if mocked data is set as a symbol
       turns omniauth.origin into an env variable on the callback phase
-      short circuits the request phase entirely
+      responds with a provider-specific hash if one is set
+      respects SCRIPT_NAME (a.k.a. BaseURI) on failure
       maintains query string parameters
       executes request hook on the request phase
-      simulates login failure if mocked data is set as a symbol
-      doesn't short circuit the request if request method is not allowed
-      maintains host and port
-      redirects on failure
-      responds with a provider-specific hash if one is set
-      rescues errors in request_call
-      does not short circuit requests outside of authentication
-      executes callback hook on the callback phase
-      does not set body parameters of POST request on the request phase
+      is case insensitive on callback path
+      respects SCRIPT_NAME (a.k.a. BaseURI)
       omniauth.origin
-        custom
-          sets omniauth.origin from a custom param
         default flow
           sets omniauth.origin to the HTTP_REFERER on the request phase by default
           sets omniauth.origin from the params if provided
         disabled
           does not set omniauth.origin
-    dynamic paths
-      provides a custom callback path if request_path evals to a string
-      runs the callback phase if the custom callback path evaluator is truthy
-      correctly reports the callback path when the custom callback path evaluator is truthy
-      runs the request phase if the custom request path evaluator is truthy
-    options mutation
-      in callback phase
-        does not affect deep options
-        does not affect original options
-      in request phase
-        does not affect original options
-        does not affect deep options
-    receiving an OPTIONS request
-      to the request path
-        behaves like an OPTIONS request
-          responds with 200
-          sets the Allow header properly
-      to the request path
-        behaves like an OPTIONS request
-          responds with 200
-          sets the Allow header properly
-      to some other path
-        does not short-circuit the request
-    when in test mode and path not on request path
-      does not verify token
+        custom
+          sets omniauth.origin from a custom param
+    default paths
+      uses the default callback path
+      strips trailing spaces on callback
+      strips trailing spaces on request
+      is case insensitive on request path
+      uses the default request path
+      is case insensitive on callback path
+      callback_url
+        preserves the query parameters
+        consider script name
+        uses the default callback_path
     omniauth.origin
-      disabled
-        does not set omniauth.origin
       default flow
         is set on the failure env
         is set on the request phase
-        is turned into an env variable on the callback phase
         sets from the params if provided
+        is turned into an env variable on the callback phase
         with script_name
-          is set on the request phase, containing full path
           is turned into an env variable on the callback phase, containing full path
+          is set on the request phase, containing full path
+      disabled
+        does not set omniauth.origin
       custom
         sets from a custom param
-    with relative url root
-      accepts the callback
-      accepts the request
-      error during auth phase
-        passes the error to fail!()
-      custom request
-        does not prefix a custom request path
-      error during call_app!
-        raises the application error
-      callback_url
-        redirects to the correctly prefixed callback
-    default paths
-      is case insensitive on request path
-      strips trailing spaces on callback
-      uses the default request path
-      strips trailing spaces on request
-      uses the default callback path
-      is case insensitive on callback path
-      callback_url
-        consider script name
-        uses the default callback_path
-        preserves the query parameters
-    :form option
-      calls through to the app if :form => true is set as an option
-      calls through to the supplied form option if one exists
-    custom paths
-      uses a custom callback_path if one is provided
-      uses a custom request_path if one is provided
-      callback_url
-        uses a custom callback_path if one is provided
-        preserves the query parameters
-    request method restriction
-      allows a request method of the correct type
-      does not allow a request method of the wrong type
     custom prefix
       uses a custom prefix for callback
       uses a custom prefix for request
       callback_url
         uses a custom prefix
         preserves the query parameters
-  setup phase
-    when options[:setup] is an app
-      does not call the app on a non-omniauth endpoint
-      calls the rack app
-    when options[:setup] = true
-      does not call through on a non-omniauth endpoint
-      calls through to /auth/:provider/setup
+  #auth_hash
+    calls through to uid, info, credentials, and extra
+    returns an AuthHash
   fetcher procs
-    .extra
-      sets and retrieve a proc
     .credentials
       sets and retrieve a proc
-    .info
-      sets and retrieve a proc
     .uid
       sets and retrieve a proc
+    .extra
+      sets and retrieve a proc
+    .info
+      sets and retrieve a proc
+  #redirect
+    uses javascript if :iframe is true (PENDING: Temporarily skipped with xit)
+  #call
+    raises NoSessionError if rack.session isn't set
+    duplicates and calls
+  .args
+    is inheritable
+    sets args to the specified argument if there is one
+    accepts corresponding options as default arg values
+  #fail!
+    provides a generic message when not provided an exception
+    provides exception information when one is provided
+  .option
+    sets the default value to nil if none is provided
+    sets a default value
+  .configure
+    takes a hash and deep merge it
+    when block is passed
+      works when block doesn't evaluate to true
+      allows for default options setting
   #initialize
-    options extraction
-      is the default options if any are provided
-      is the last argument if the last argument is a Hash
     custom args
       sets options based on the arguments if they are supplied
+    options extraction
+      is the last argument if the last argument is a Hash
+      is the default options if any are provided
+  #full_host
+    remains calm when there is a pipe in the URL
+  #uid
+    inherits if it can
+    is the current class's uid if one exists
+  user_info
+    should default to an empty hash
+  setup phase
+    when options[:setup] is an app
+      calls the rack app
+      does not call the app on a non-omniauth endpoint
+    when options[:setup] = true
+      calls through to /auth/:provider/setup
+      does not call through on a non-omniauth endpoint
   .default_options
     is inherited from a parent class
+  #callback_phase
+    sets the auth hash
+  #skip_info?
+    is false if options.skip_info is false
+    is false by default
+    is true if options.skip_info is true
+    is true if options.skip_info is a callable that evaluates to truthy
+  request_phase
+    raises a NotImplementedError
+  #inspect
+    returns the class name
 
-OmniAuth::FailureEndpoint
-  raise-out environment
-    raises out an OmniAuth::Error if no omniauth.error is set
-    raises out the error
-  non-raise-out environment
-    respects the globally configured path prefix
-    respects the custom path prefix configured on the strategy
-    includes the SCRIPT_NAME
-    includes the origin (escaped) if one is provided
-    is a redirect
-    escapes the message key
-
-OmniAuth::Builder
-  #on_failure
-    passes the block to the config
-  #before_callback_phase
-    passes the block to the config
-  #options
-    merges provided options in
-    adds an argument if no options are provided
-  #provider
-    accepts a class
-    raises a helpful LoadError message if it can't find the class
-    doesn't translate a symbol to a top-level constant
-    translates a symbol to a constant
-  #configure
-    passes the block to the config
-  #before_request_phase
-    passes the block to the config
-  #call
-    passes env to to_app.call
-  #before_options_phase
-    passes the block to the config
+OmniAuth::Strategies::Developer
+  request phase
+    displays a form
+    has a text field for each of the fields
+    has the callback as the action for the form
+  callback phase
+    with default options
+      sets the name in the auth hash
+      sets the email in the auth hash
+      sets the uid to the email
+    with custom options
+      sets info fields properly
+      sets the uid properly
 
 Pending: (Failures listed here are expected and do not affect your suite's status)
 
@@ -1462,10 +1498,10 @@
      # Temporarily skipped with xit
      # ./spec/omniauth/strategy_spec.rb:278
 
-Finished in 0.63675 seconds (files took 0.93877 seconds to load)
+Finished in 0.26334 seconds (files took 0.78798 seconds to load)
 211 examples, 0 failures, 1 pending
 
-Randomized with seed 53822
+Randomized with seed 45057
 
 /usr/bin/ruby3.1 /usr/bin/gem2deb-test-runner
 
@@ -1792,7 +1828,7 @@
 #   ./lib/omniauth/authenticity_token_protection.rb:1:in `<top (required)>'
 No examples found.
 
-Finished in 0.00006 seconds (files took 0.64032 seconds to load)
+Finished in 0.00006 seconds (files took 0.64971 seconds to load)
 0 examples, 0 failures, 8 errors occurred outside of examples
 
 /usr/bin/ruby3.1 -I/usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib:/usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern ./spec/\*\*/\*_spec.rb --format documentation failed
@@ -1826,12 +1862,14 @@
 dpkg-buildpackage: info: binary-only upload (no source included)
 dpkg-genchanges: info: not including original source code in upload
 I: copying local configuration
+I: user script /srv/workspace/pbuilder/2429027/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/2429027/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/1825267 and its subdirectories
-I: Current time: Tue Mar  3 14:25:01 -12 2026
-I: pbuilder-time-stamp: 1772591101
+I: removing directory /srv/workspace/pbuilder/2429027 and its subdirectories
+I: Current time: Thu Jan 30 10:04:04 +14 2025
+I: pbuilder-time-stamp: 1738181044