Diff of the two buildlogs:

--
--- b1/build.log	2025-03-06 11:54:06.364301467 +0000
+++ b2/build.log	2025-03-06 11:58:22.280813322 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Wed Apr  8 06:14:04 -12 2026
-I: pbuilder-time-stamp: 1775672044
+I: Current time: Fri Mar  7 01:54:09 +14 2025
+I: pbuilder-time-stamp: 1741262049
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz]
 I: copying local configuration
@@ -25,52 +25,84 @@
 dpkg-source: info: applying 0004-Fix-failing-tests-with-rails-5.2.patch
 I: Not using root during the build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/1425942/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/2981363/tmp/hooks/D01_modify_environment starting
+debug: Running on ionos1-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  6 11:54 /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/2981363/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/2981363/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=42 '
-  DISTRIBUTION='unstable'
-  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=20 '
+  DIRSTACK=()
+  DISTRIBUTION=unstable
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=x86_64
+  HOST_ARCH=amd64
   IFS=' 	
   '
-  INVOCATION_ID='4bfac5e281f346018aa44018611c9f0a'
-  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='1425942'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=27fad87a549c4f28b30b8eba5636d4b4
+  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=2981363
   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.KQDL5pWK/pbuilderrc_Qphr --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.KQDL5pWK/b1 --logfile b1/build.log ruby-factory-bot_6.5.1-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://213.165.73.152: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.KQDL5pWK/pbuilderrc_gvYe --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.KQDL5pWK/b2 --logfile b2/build.log ruby-factory-bot_6.5.1-1.dsc'
+  SUDO_GID=110
+  SUDO_UID=105
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
+  http_proxy=http://46.16.76.132:3128
 I: uname -a
-  Linux ionos15-amd64 6.12.12+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.12-1~bpo12+1 (2025-02-23) x86_64 GNU/Linux
+  Linux i-capture-the-hostname 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux
 I: ls -l /bin
-  lrwxrwxrwx 1 root root 7 Mar  4  2025 /bin -> usr/bin
-I: user script /srv/workspace/pbuilder/1425942/tmp/hooks/D02_print_environment finished
+  lrwxrwxrwx 1 root root 7 Mar  4 11:20 /bin -> usr/bin
+I: user script /srv/workspace/pbuilder/2981363/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -271,7 +303,7 @@
 Get: 147 http://deb.debian.org/debian unstable/main amd64 ruby-rspec-its all 1.3.0-1 [6864 B]
 Get: 148 http://deb.debian.org/debian unstable/main amd64 ruby-sqlite3 amd64 1.7.3-1 [50.0 kB]
 Get: 149 http://deb.debian.org/debian unstable/main amd64 ruby-timecop all 0.9.10-1.1 [12.2 kB]
-Fetched 49.9 MB in 9s (5752 kB/s)
+Fetched 49.9 MB in 3s (16.0 MB/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 ... 19783 files and directories currently installed.)
@@ -766,8 +798,8 @@
 Setting up tzdata (2025a-2) ...
 
 Current default time zone: 'Etc/UTC'
-Local time is now:      Wed Apr  8 18:16:30 UTC 2026.
-Universal Time is now:  Wed Apr  8 18:16:30 UTC 2026.
+Local time is now:      Thu Mar  6 11:56:33 UTC 2025.
+Universal Time is now:  Thu Mar  6 11:56:33 UTC 2025.
 Run 'dpkg-reconfigure tzdata' if you wish to change it.
 
 Setting up ruby-minitest (5.25.4-2) ...
@@ -902,7 +934,11 @@
 Building tag database...
  -> Finished parsing the build-deps
 I: Building the package
-I: Running cd /build/reproducible-path/ruby-factory-bot-6.5.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-factory-bot_6.5.1-1_source.changes
+I: user script /srv/workspace/pbuilder/2981363/tmp/hooks/A99_set_merged_usr starting
+Not re-configuring usrmerge for unstable
+I: user script /srv/workspace/pbuilder/2981363/tmp/hooks/A99_set_merged_usr finished
+hostname: Name or service not known
+I: Running cd /build/reproducible-path/ruby-factory-bot-6.5.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-factory-bot_6.5.1-1_source.changes
 dpkg-buildpackage: info: source package ruby-factory-bot
 dpkg-buildpackage: info: source version 6.5.1-1
 dpkg-buildpackage: info: source distribution unstable
@@ -935,7 +971,7 @@
 │ ruby-factory-bot: Installing files and building extensions for ruby3.3       │
 └──────────────────────────────────────────────────────────────────────────────┘
 
-/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20260408-1472157-y08qva/gemspec
+/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20250307-3012155-vlc51t/gemspec
 WARNING:  open-ended dependency on activesupport (>= 6.1.0) is not recommended
   if activesupport is semantically versioned, use:
     add_runtime_dependency "activesupport", "~> 6.1", ">= 6.1.0"
@@ -966,7 +1002,7 @@
   Name: factory_bot
   Version: 6.5.1
   File: factory_bot-6.5.1.gem
-/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-factory-bot/usr/share/rubygems-integration/all /tmp/d20260408-1472157-y08qva/factory_bot-6.5.1.gem
+/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-factory-bot/usr/share/rubygems-integration/all /tmp/d20250307-3012155-vlc51t/factory_bot-6.5.1.gem
 /build/reproducible-path/ruby-factory-bot-6.5.1/debian/ruby-factory-bot/usr/share/rubygems-integration/all/gems/factory_bot-6.5.1/lib/factory_bot.rb
 /build/reproducible-path/ruby-factory-bot-6.5.1/debian/ruby-factory-bot/usr/share/rubygems-integration/all/gems/factory_bot-6.5.1/lib/factory_bot/aliases.rb
 /build/reproducible-path/ruby-factory-bot-6.5.1/debian/ruby-factory-bot/usr/share/rubygems-integration/all/gems/factory_bot-6.5.1/lib/factory_bot/attribute.rb
@@ -1052,350 +1088,56 @@
 mv Gemfile.lock ./.gem2deb.Gemfile.lock
 /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,factory_bot/\*\*/\*_spec.rb\} --format documentation
 
-Randomized with seed 43749
-
-FactoryBot::Decorator::AttributeHash
-  #attributes
-    returns a hash of attributes
-    with an attribute called 'attributes'
-      does not call itself recursively
-
-FactoryBot::Factory running a factory
-  creates the right strategy using the build class when running
-  returns the result from the strategy when running
-  calls the block and returns the result
-
-FactoryBot::Factory when defined with a custom class name
-  has a build_class equal to its custom class name
-
-FactoryBot::NullObject
-  responds to the given methods
-  does not respond to other methods
-
-FactoryBot::Strategy::Create
-  runs a custom create block
-  it should behave like strategy with callbacks
-    returns the object from the evaluation
-    runs the callbacks [:after_build, :before_create, :after_create] with the evaluation's object
-  it should behave like strategy with association support
-    runs the factory with the correct overrides
-    finds the factory with the correct factory name
-
-FactoryBot::Strategy::AttributesFor
-  does not run the to_create block
-  returns the hash from the evaluation
-  it should behave like strategy without association support
-    returns nil when accessing an association
-
-FactoryBot::Factory
-  has a build class
-  has a factory name
-  creates a new factory using the class of the parent
-  guesses the build class from the factory name
-  includes associations from the parent factory
-  returns associations
-  creates a new factory while overriding the parent class
-  overriding an attribute with an alias
-    uses the passed in value for the alias
-    discards the predefined value for the attribute
-  when overriding generated attributes with a hash
-    overrides a symbol parameter with a string parameter
-    returns the overridden value in the generated attributes
-
-FactoryBot::NullFactory
-  delegates defined traits to its definition
-  delegates attributes to its definition
-  has a nil value for its compile attribute
-  delegates constructor to its definition
-  has a nil value for its class_name attribute
-  has FactoryBot::Evaluator as its evaluator class
-  has an instance of FactoryBot::AttributeList for its attributes attribute
-  delegates callbacks to its definition
-
-FactoryBot::EvaluatorClassDefiner
-  evaluates the block in the context of the evaluator
-  only instance_execs the block once even when returning nil
-  returns an evaluator when accessing the evaluator class
-  adds each attribute to the evaluator
-  sets attributes on the evaluator class
-  with a custom evaluator as a parent class
-    bases its attribute lists on itself and its parent evaluator
-
-FactoryBot::DefinitionProxy#initialize_with
-  defines the constructor on the definition
-
-FactoryBot::DefinitionProxy#add_attribute
-  declares a dynamic attribute on the factory when the proxy respects attributes
-  declares a dynamic attribute on the factory when the proxy ignores attributes
-
-FactoryBot::DefinitionProxy#to_create
-  accepts a block to run in place of #save!
-
-FactoryBot
-  finds a registered strategy
-  .use_parent_strategy
-    is true by default
-
-FactoryBot::StrategyCalculator
-  returns the strategy found when instantiated with a symbol
-  returns the class passed when it is instantiated with a class
-  finds the strategy by name when instantiated with a symbol
-
-FactoryBot::Decorator::DisallowsDuplicatesRegistry
-  raises when attempting to #register a previously registered strategy
-  delegates #register to the registry when not registered
-
-FactoryBot::Factory with a name ending in s
-  has a build class
-  has a name
-
-FactoryBot::DefinitionProxy#factory
-  with a block
-  without options
-  with options
-
-FactoryBot::Factory when defined with a custom class
-  is an instance of that custom class
-
-FactoryBot::Attribute::Dynamic
-  with a block referencing an attribute on the attribute
-    evaluates the attribute from the attribute
-  with a block returning a sequence
-    raises a sequence abuse error
-  name
-    is expected to eq :first_name
-  with a block returning its block-level variable
-    returns self when executing the proc
-  with a block returning a static value
-    returns the value when executing the proc
-
-FactoryBot::AttributeList generating names
-  knows all its #names for #ignored attributes
-  knows all its #names
-  knows all its #names for #non_ignored attributes
-  knows all its #names for #associations
-
-FactoryBot::AttributeList#define_attribute with a named attribute list
-  does not raise when the attribute is not a self-referencing association
-  raises when the attribute is a self-referencing association
+Randomized with seed 20731
 
 FactoryBot::Declaration::Implicit
-  with a known factory
-    has the correct factory name
-    creates an association attribute
-  with a known sequence
-    does not create an association attribute
-    creates a sequence attribute
   #==
-    when the names are different
-      the objects are NOT equal
     when the attributes are equal
       the objects are equal
-    when one is ignored and the other isn't
+    when the names are different
       the objects are NOT equal
     when comparing against another type of object
       the objects are NOT equal
     when the factories are different
       the objects are NOT equal
-
-FactoryBot::DefinitionProxy#trait
-  declares a trait
-
-FactoryBot::Callback
-  has a name
-  converts strings to symbols
-  runs its block with two parameters
-  runs its block with no parameters
-  runs its block with one parameter
-
-FactoryBot::Registry
-  includes a did_you_mean message
-  is an enumerable
-  finds a registered object
-  clears registered factories
-  knows that an object is registered by string
-  raises when an object cannot be found
-  finds a registered object with square brackets
-  knows that an object is registered by symbol
-  knows when an object is not registered
-  iterates registered objects
-  adds and returns the object registered
-  does not include duplicate objects with registered under different names
-
-FactoryBot::Declaration::Dynamic
-  #==
-    when comparing against another type of object
-      the objects are NOT equal
     when one is ignored and the other isn't
       the objects are NOT equal
-    when the names are different
-      the objects are NOT equal
-    when the attributes are equal
-      the objects are equal
-    when the blocks are different
-      the objects are NOT equal
-
-FactoryBot::AttributeList#apply_attributes
-  adds attributes in the order defined
-
-FactoryBot after defining an alias
-  the list of aliases should include a variant with no suffix at all, and one with an '_id' suffix
-
-FactoryBot::AttributeList filter based on ignored attributes
-  filters #non_ignored attributes
-  filters #ignored attributes
-
-FactoryBot::Declaration::Association
-  #==
-    when the names are different
-      the objects are NOT equal
-    when the options are different
-      the objects are NOT equal
-    when comparing against another type of object
-      the objects are NOT equal
-    when the attributes are equal
-      the objects are equal
-
-FactoryBot::Factory with a string for a name
-  sets build_class correctly with a class with an underscore
-  has a name
-
-FactoryBot::Attribute::Association with a string name
-  name
-    is expected to eq :name
-
-FactoryBot::Factory when given a class that overrides #to_s
-  sets build_class correctly
-
-FactoryBot::Internal
-  .strategy_by_name
-    finds a registered strategy
-  .register_sequence
-    returns the registered sequence
-    registers the provided sequence
-  .factory_by_name
-    finds a registered factory
-  .rewind_sequences
-    rewinds the sequences and the internal sequences
-  .factory_by_name
-    finds a registered factory
-  .register_factory
-    registers the provided factory
-    returns the registered factory
-  .trait_by_name
-    finds a previously registered trait
-  .sequence_by_name
-    finds a registered sequence
-  .register_strategy
-    register the provided strategy name with the class
-  .register_factory
-    registers the provided factory
-    returns the registered factory
-  .register_trait
-    returns the registered trait
-    registers the provided trait
-
-FactoryBot::Attribute::Association
-  builds the association when calling the proc
-  is expected to be association
-  builds the association when calling the proc
-  name
-    is expected to eq :author
-
-FactoryBot::DeclarationList#declare_attribute
-  deletes declarations with the same name when overridable
-  adds the declaration to the list when overridable
-  appends declarations with the same name when NOT overridable
-  adds the declaration to the list when not overridable
-
-FactoryBot::Factory for namespaced class
-  sets build_class correctly with a namespaced class with Namespace::Class syntax
-  sets build_class correctly with a namespaced class with namespace/class syntax
-
-FactoryBot::Attribute::Dynamic with a string name
-  name
-    is expected to eq :name
-
-FactoryBot::AttributeList#define_attribute
-  returns the attribute
-  maintains a list of attributes
-  raises if an attribute has already been defined
-
-FactoryBot::Strategy::Build
-  it should behave like strategy with association support
-    finds the factory with the correct factory name
-    runs the factory with the correct overrides
-  it should behave like strategy with strategy: :build
-    runs the factory with the correct overrides
-    finds the factory with the correct factory name
-  it should behave like strategy with callbacks
-    runs the callbacks [:after_build] with the evaluation's object
-    returns the object from the evaluation
-
-FactoryBot::DefinitionProxy#association
-  declares an association with options
-  declares an association
-  when passing a block raises an error
-
-FactoryBot::Factory human names
-  parses human names with underscores
-  parses names without underscores
-  parses names with aliases
-  parses human names without underscores
-  parses names with underscores
-  parses human names with big letters
-  parses names with big letters
-  parses human names with aliases
-
-FactoryBot::DefinitionProxy#transient
-  makes all attributes added ignored
-
-FactoryBot::Factory when defined with a class instead of a name
-  has a build_class
-  has a name
+  with a known sequence
+    does not create an association attribute
+    creates a sequence attribute
+  with a known factory
+    has the correct factory name
+    creates an association attribute
 
-FactoryBot::DefinitionProxy adding callbacks
-  adding both an :after_stub and a :before_create callback succeeds
-  adding an :after_stub callback succeeds
-  adding both an :after_stub and an :after_create callback succeeds
-  adding an :after_create callback succeeds
-  adding an :after_build callback succeeds
-  adding both a :before_stub and a :before_create callback succeeds
+FactoryBot::Attribute
+  is not an association
+  converts the name attribute to a symbol
 
 FactoryBot::Sequence
+  a custom sequence and scope increments within the correct scope
   a custom sequence and scope increments within the correct scope when incrementing
   a custom scope increments within the correct scope after rewinding
-  a custom sequence and scope increments within the correct scope
-  a basic sequence
+  a basic sequence without a block
     behaves like a sequence
       has a next value equal to the 1st value after rewinding
       has a next value equal to the 2nd value after being incremented
       has a next value equal to its first value
-    name
-      is expected to eq :test
-    names
-      is expected to eq [:test]
-  a custom sequence
+  a sequence with custom value and aliases
+    has the expected names as its names
     behaves like a sequence
+      has a next value equal to its first value
       has a next value equal to the 1st value after rewinding
       has a next value equal to the 2nd value after being incremented
-      has a next value equal to its first value
   a sequence with aliases using default value
     has the expected names as its names
     behaves like a sequence
       has a next value equal to the 2nd value after being incremented
-      has a next value equal to the 1st value after rewinding
       has a next value equal to its first value
-  a sequence with custom value and aliases
-    has the expected names as its names
-    behaves like a sequence
       has a next value equal to the 1st value after rewinding
-      has a next value equal to its first value
-      has a next value equal to the 2nd value after being incremented
-  a basic sequence without a block
+  a custom sequence
     behaves like a sequence
-      has a next value equal to the 1st value after rewinding
       has a next value equal to the 2nd value after being incremented
+      has a next value equal to the 1st value after rewinding
       has a next value equal to its first value
   iterating over items in an enumerator
     navigates to the next items until no items remain
@@ -1403,592 +1145,617 @@
       has a next value equal to the 2nd value after being incremented
       has a next value equal to the 1st value after rewinding
       has a next value equal to its first value
-  a custom sequence without a block
+  a basic sequence
+    names
+      is expected to eq [:test]
     behaves like a sequence
       has a next value equal to the 1st value after rewinding
       has a next value equal to the 2nd value after being incremented
       has a next value equal to its first value
+    name
+      is expected to eq :test
+  a custom sequence without a block
+    behaves like a sequence
+      has a next value equal to its first value
+      has a next value equal to the 2nd value after being incremented
+      has a next value equal to the 1st value after rewinding
 
-FactoryBot::DefinitionProxy#sequence
-  creates a new sequence starting at 1
-  creates a new sequence with a block
-  creates a new sequence with an overridden starting value
-
-FactoryBot::Attribute::Sequence
-  assigns the next value in the sequence
-  name
-    is expected to eq :first_name
-
-FactoryBot::DefinitionProxy#method_missing
-  declares an association when called with a ':factory' key
-  raises a NoMethodError when called with a static-attribute-like argument
-  declares an implicit declaration when called without args or a block
-  declares a dynamic attribute when called with a block
-
-FactoryBot::AttributeList#associations
-  returns associations
-
-FactoryBot::Definition
-  exposes a non-default create strategy when one is provided by the user
-  doesn't expose a separate create strategy when none is specified
-  maintains a list of callbacks
-  has an overridable declaration list
-  maintains a list of traits
-  creates a new attribute list with the name passed when given a name
-  maintains a list of enum fields
-  has a name
-  delegates :declare_attribute to declarations
-  adds only unique traits
-
-FactoryBot::DeclarationList#attributes
-  returns an AttributeList
-  defines each attribute on the attribute list
-
-definition loading
-  with a factories file under test
-    it should behave like finds definitions
-      is expected to load definitions from test/factories.rb
-  with a factories file under test/factories
-    it should behave like finds definitions
-      is expected to load definitions from test/factories/post_factory.rb
-  with nested and unnested factories files under test
-    it should behave like finds definitions
-      is expected to load definitions from test/factories/person_factory.rb
-      is expected to load definitions from test/factories/post_factory.rb
-      is expected to load definitions from test/factories.rb
-  with factories.rb
-    it should behave like finds definitions
-      is expected to load definitions from factories.rb
-  with deeply nested factory files under test
-    it should behave like finds definitions
-      is expected to load definitions from test/factories/subdirectory/person_factory.rb
-      is expected to load definitions from test/factories/subdirectory/post_factory.rb
-  with deeply nested factory files under spec
-    it should behave like finds definitions
-      is expected to load definitions from spec/factories/subdirectory/person_factory.rb
-      is expected to load definitions from spec/factories/subdirectory/post_factory.rb
-  with several factories files under spec/factories
-    it should behave like finds definitions
-      is expected to load definitions from spec/factories/post_factory.rb
-      is expected to load definitions from spec/factories/person_factory.rb
-  with nested and unnested factories files under spec
-    it should behave like finds definitions
-      is expected to load definitions from spec/factories.rb
-      is expected to load definitions from spec/factories/person_factory.rb
-      is expected to load definitions from spec/factories/post_factory.rb
-  with several factories files under test/factories
-    it should behave like finds definitions
-      is expected to load definitions from test/factories/post_factory.rb
-      is expected to load definitions from test/factories/person_factory.rb
-  with a factories file under spec/factories
-    it should behave like finds definitions
-      is expected to load definitions from spec/factories/post_factory.rb
-  with several factories files under test/factories in non-alphabetical order
-    loads the files in the right order
-  with a factories file under spec
-    it should behave like finds definitions
-      is expected to load definitions from spec/factories.rb
-  with several factories files under spec/factories in non-alphabetical order
-    loads the files in the right order
+FactoryBot::Factory when defined with a custom class name
+  has a build_class equal to its custom class name
 
-FactoryBot::Attribute
-  is not an association
-  converts the name attribute to a symbol
+FactoryBot::Registry
+  adds and returns the object registered
+  knows when an object is not registered
+  includes a did_you_mean message
+  does not include duplicate objects with registered under different names
+  iterates registered objects
+  raises when an object cannot be found
+  finds a registered object with square brackets
+  knows that an object is registered by symbol
+  clears registered factories
+  is an enumerable
+  knows that an object is registered by string
+  finds a registered object
 
-FactoryBot aliases
-  for a foreign key should include both the suffixed and un-suffixed variants
-  for an attribute should include the original attribute and a version suffixed with '_id'
-  for an attribute which starts with an underscore should not include a non-underscored version
+FactoryBot::Factory for namespaced class
+  sets build_class correctly with a namespaced class with namespace/class syntax
+  sets build_class correctly with a namespaced class with Namespace::Class syntax
 
 FactoryBot::Strategy::Stub
+  it should behave like strategy with association support
+    finds the factory with the correct factory name
+    runs the factory with the correct overrides
+  it should behave like strategy with strategy: :build
+    finds the factory with the correct factory name
+    runs the factory with the correct overrides
+  it should behave like strategy with callbacks
+    runs the callbacks [:after_stub] with the evaluation's object
+    returns the object from the evaluation
   asking for a result
-    assigns created_at
+    is expected to be persisted
     is expected not to be new record
     is expected not to be destroyed
-    is expected to be persisted
-    overriding persistence method: #update_attributes
-      raises an informative error if the method is called
+    assigns created_at
+    overriding persistence method: #touch
       overrides the method with any arity
-    overriding persistence method: #update_columns
+      raises an informative error if the method is called
+    overriding persistence method: #delete
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #toggle!
+    overriding persistence method: #reload
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #update_column
+    overriding persistence method: #update!
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #update_attributes!
+    overriding persistence method: #update_attributes
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #update
+    overriding persistence method: #update_columns
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #increment!
-      overrides the method with any arity
+    overriding persistence method: #destroy!
       raises an informative error if the method is called
-    overriding persistence method: #destroy
       overrides the method with any arity
-      raises an informative error if the method is called
     overriding persistence method: #save
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #save!
+    overriding persistence method: #update_attributes!
+      overrides the method with any arity
+      raises an informative error if the method is called
+    overriding persistence method: #update_column
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #decrement!
+    overriding persistence method: #destroy
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #touch
+    overriding persistence method: #connection
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #reload
+    overriding persistence method: #save!
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #destroy!
+    overriding persistence method: #update
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #update!
+    overriding persistence method: #increment!
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #update_attribute
-      overrides the method with any arity
-      raises an informative error if the method is called
-    overriding persistence method: #delete
+    overriding persistence method: #decrement!
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #connection
+    overriding persistence method: #update_attribute
       raises an informative error if the method is called
       overrides the method with any arity
+    overriding persistence method: #toggle!
+      overrides the method with any arity
+      raises an informative error if the method is called
+
+FactoryBot::Internal
+  .register_factory
+    returns the registered factory
+    registers the provided factory
+  .register_sequence
+    returns the registered sequence
+    registers the provided sequence
+  .strategy_by_name
+    finds a registered strategy
+  .register_trait
+    registers the provided trait
+    returns the registered trait
+  .trait_by_name
+    finds a previously registered trait
+  .rewind_sequences
+    rewinds the sequences and the internal sequences
+  .sequence_by_name
+    finds a registered sequence
+  .factory_by_name
+    finds a registered factory
+  .factory_by_name
+    finds a registered factory
+  .register_strategy
+    register the provided strategy name with the class
+  .register_factory
+    returns the registered factory
+    registers the provided factory
+
+FactoryBot::DefinitionProxy#factory
+  with options
+  without options
+  with a block
+
+FactoryBot::DefinitionProxy#trait
+  declares a trait
+
+FactoryBot::DefinitionProxy#add_attribute
+  declares a dynamic attribute on the factory when the proxy ignores attributes
+  declares a dynamic attribute on the factory when the proxy respects attributes
+
+FactoryBot::Attribute::Sequence
+  assigns the next value in the sequence
+  name
+    is expected to eq :first_name
+
+FactoryBot::Strategy::Create
+  runs a custom create block
   it should behave like strategy with association support
     finds the factory with the correct factory name
     runs the factory with the correct overrides
+  it should behave like strategy with callbacks
+    runs the callbacks [:after_build, :before_create, :after_create] with the evaluation's object
+    returns the object from the evaluation
+
+FactoryBot::AttributeList generating names
+  knows all its #names for #ignored attributes
+  knows all its #names for #non_ignored attributes
+  knows all its #names for #associations
+  knows all its #names
+
+FactoryBot::Declaration::Dynamic
+  #==
+    when the blocks are different
+      the objects are NOT equal
+    when comparing against another type of object
+      the objects are NOT equal
+    when the names are different
+      the objects are NOT equal
+    when the attributes are equal
+      the objects are equal
+    when one is ignored and the other isn't
+      the objects are NOT equal
+
+FactoryBot::AttributeList filter based on ignored attributes
+  filters #ignored attributes
+  filters #non_ignored attributes
+
+FactoryBot::Factory
+  includes associations from the parent factory
+  guesses the build class from the factory name
+  returns associations
+  creates a new factory while overriding the parent class
+  creates a new factory using the class of the parent
+  has a factory name
+  has a build class
+  overriding an attribute with an alias
+    discards the predefined value for the attribute
+    uses the passed in value for the alias
+  when overriding generated attributes with a hash
+    returns the overridden value in the generated attributes
+    overrides a symbol parameter with a string parameter
+
+FactoryBot::DefinitionProxy#method_missing
+  raises a NoMethodError when called with a static-attribute-like argument
+  declares a dynamic attribute when called with a block
+  declares an association when called with a ':factory' key
+  declares an implicit declaration when called without args or a block
+
+FactoryBot::Strategy::Build
   it should behave like strategy with strategy: :build
+    runs the factory with the correct overrides
     finds the factory with the correct factory name
+  it should behave like strategy with association support
     runs the factory with the correct overrides
+    finds the factory with the correct factory name
   it should behave like strategy with callbacks
     returns the object from the evaluation
-    runs the callbacks [:after_stub] with the evaluation's object
+    runs the callbacks [:after_build] with the evaluation's object
 
-Finished in 0.83691 seconds (files took 0.46675 seconds to load)
-291 examples, 0 failures
+definition loading
+  with a factories file under test
+    it should behave like finds definitions
+      is expected to load definitions from test/factories.rb
+  with nested and unnested factories files under spec
+    it should behave like finds definitions
+      is expected to load definitions from spec/factories.rb
+      is expected to load definitions from spec/factories/post_factory.rb
+      is expected to load definitions from spec/factories/person_factory.rb
+  with nested and unnested factories files under test
+    it should behave like finds definitions
+      is expected to load definitions from test/factories/person_factory.rb
+      is expected to load definitions from test/factories.rb
+      is expected to load definitions from test/factories/post_factory.rb
+  with a factories file under spec
+    it should behave like finds definitions
+      is expected to load definitions from spec/factories.rb
+  with a factories file under spec/factories
+    it should behave like finds definitions
+      is expected to load definitions from spec/factories/post_factory.rb
+  with deeply nested factory files under test
+    it should behave like finds definitions
+      is expected to load definitions from test/factories/subdirectory/person_factory.rb
+      is expected to load definitions from test/factories/subdirectory/post_factory.rb
+  with several factories files under test/factories
+    it should behave like finds definitions
+      is expected to load definitions from test/factories/post_factory.rb
+      is expected to load definitions from test/factories/person_factory.rb
+  with several factories files under test/factories in non-alphabetical order
+    loads the files in the right order
+  with factories.rb
+    it should behave like finds definitions
+      is expected to load definitions from factories.rb
+  with deeply nested factory files under spec
+    it should behave like finds definitions
+      is expected to load definitions from spec/factories/subdirectory/person_factory.rb
+      is expected to load definitions from spec/factories/subdirectory/post_factory.rb
+  with several factories files under spec/factories
+    it should behave like finds definitions
+      is expected to load definitions from spec/factories/post_factory.rb
+      is expected to load definitions from spec/factories/person_factory.rb
+  with several factories files under spec/factories in non-alphabetical order
+    loads the files in the right order
+  with a factories file under test/factories
+    it should behave like finds definitions
+      is expected to load definitions from test/factories/post_factory.rb
 
-Randomized with seed 43749
+FactoryBot::Factory when defined with a class instead of a name
+  has a name
+  has a build_class
 
-/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/acceptance/\*\*/\*_spec.rb --format documentation
+FactoryBot::DefinitionProxy adding callbacks
+  adding an :after_stub callback succeeds
+  adding both an :after_stub and a :before_create callback succeeds
+  adding both an :after_stub and an :after_create callback succeeds
+  adding both a :before_stub and a :before_create callback succeeds
+  adding an :after_create callback succeeds
+  adding an :after_build callback succeeds
 
-Randomized with seed 31184
+FactoryBot
+  finds a registered strategy
+  .use_parent_strategy
+    is true by default
 
-a built instance with strategy: :create
-  is expected to be new record
-  assigns and saves associations
+FactoryBot after defining an alias
+  the list of aliases should include a variant with no suffix at all, and one with an '_id' suffix
 
-initialize_with with an 'attributes' attribute
-  assigns attributes correctly
+FactoryBot::Attribute::Association
+  builds the association when calling the proc
+  builds the association when calling the proc
+  is expected to be association
+  name
+    is expected to eq :author
 
-aliases and overrides
-  one
-    is expected to eq "override"
-  two
-    is expected to be nil
+FactoryBot::Attribute::Dynamic with a string name
+  name
+    is expected to eq :name
 
-defining methods inside FactoryBot
-  raises with a meaningful message
+FactoryBot::AttributeList#associations
+  returns associations
 
-defaulting `updated_at`
-  allows overriding updated_at for objects with updated_at
-  defaults updated_at for objects with updated_at
-  doesn't allow setting updated_at on an object that doesn't define it
-  is doesn't mark the object as changed
-  allows assignment of updated_at
-  behaves the same as a non-stubbed updated_at
-  doesn't add updated_at to objects who don't have the method
+FactoryBot::DefinitionProxy#sequence
+  creates a new sequence with a block
+  creates a new sequence starting at 1
+  creates a new sequence with an overridden starting value
 
-initialize_with non-ORM-backed objects
-  allows for overrides
-  generates random data
+FactoryBot::AttributeList#define_attribute with a named attribute list
+  raises when the attribute is a self-referencing association
+  does not raise when the attribute is not a self-referencing association
 
-create multiple instances
-  without the count
-    raise ArgumentError with the proper error message
-  without default attributes
-    uses the default factory values
-    creates all the posts
-    length
-      is expected to eq 20
-  with a block that receives both the object and an index
-    uses the new values
-  with a block
-    uses the new values
-  with default attributes
-    overrides the default values
+FactoryBot::AttributeList#apply_attributes
+  adds attributes in the order defined
 
-initialize_with with a hash argument
-  builds the object correctly
+FactoryBot::NullObject
+  does not respond to other methods
+  responds to the given methods
 
-custom callbacks
-  runs a custom callback without prepending before or after when the proper strategy executes
-  runs a custom after callback when the proper strategy executes
-  runs a custom before callback when the proper strategy executes
+FactoryBot::Definition
+  doesn't expose a separate create strategy when none is specified
+  has a name
+  exposes a non-default create strategy when one is provided by the user
+  has an overridable declaration list
+  delegates :declare_attribute to declarations
+  creates a new attribute list with the name passed when given a name
+  adds only unique traits
+  maintains a list of traits
+  maintains a list of enum fields
+  maintains a list of callbacks
 
-global callbacks
-  triggers after build callbacks for all factories
+FactoryBot::Factory when defined with a custom class
+  is an instance of that custom class
 
-multiple creates and transient attributes to dynamically build attribute lists
-  generates the correct number of posts
-  allows the number of posts to be modified
+FactoryBot::Decorator::AttributeHash
+  #attributes
+    returns a hash of attributes
+    with an attribute called 'attributes'
+      does not call itself recursively
 
-a custom create
-  uses the custom create block instead of save
+FactoryBot::Factory with a name ending in s
+  has a build class
+  has a name
 
-defining a child factory before a parent
-  creates admin factories correctly
+FactoryBot aliases
+  for a foreign key should include both the suffixed and un-suffixed variants
+  for an attribute should include the original attribute and a version suffixed with '_id'
+  for an attribute which starts with an underscore should not include a non-underscored version
 
-including FactoryBot::Syntax::Methods when custom strategies have been declared
-  allows adding additional strategies
+FactoryBot::StrategyCalculator
+  returns the class passed when it is instantiated with a class
+  returns the strategy found when instantiated with a symbol
+  finds the strategy by name when instantiated with a symbol
 
-calling methods on the model instance
-  with the referenced attribute being overridden
-    uses the overridden value
-    uses the overridden value during attributes_for
-  without the attribute being overridden
-    returns nil during attributes_for
-    returns the correct value from the instance
-    doesn't instantiate a record with attributes_for
-  with the attribute being overridden
-    uses the overridden value
-    uses the overridden value during attributes_for
+FactoryBot::Attribute::Association with a string name
+  name
+    is expected to eq :name
 
-modifying factories
-  allows for overriding child classes
-  doesn't overwrite already defined child's attributes
-  raises an exception if the factory was not defined before
-  adding callbacks
-    login
-      is expected to be nil
-    name
-      is expected to eq "great user"
-  reusing traits
-    email
-      is expected to eq "Johnny Rockstar!!!@example.com"
-    login
-      is expected to eq "JOHNNY ROCKSTAR!!!"
-    name
-      is expected to eq "Johnny Rockstar!!!"
-  simple modification
-    doesn't allow the factory to be subsequently defined
-    does allow the factory to be subsequently modified
-    name
-      is expected to eq "Great User"
-    login
-      is expected to eq "GREAT USER"
-  redefining attributes
-    creating admin
-      without overrides
-        name
-          is expected to eq "Great User"
-        admin
-          is expected to equal true
-        email
-          is expected to eq "Great User-modified@example.com"
-      overriding the email
-        name
-          is expected to eq "Great User"
-        admin
-          is expected to equal true
-        email
-          is expected to eq "perfect@example.com"
-      overriding the name
-        admin
-          is expected to equal true
-        name
-          is expected to eq "wonderful"
-        email
-          is expected to eq "wonderful-modified@example.com"
-    creating user
-      overriding the email
-        name
-          is expected to eq "Great User"
-        email
-          is expected to eq "perfect@example.com"
-      overriding the name
-        email
-          is expected to eq "wonderful-modified@example.com"
-        name
-          is expected to eq "wonderful"
-      without overrides
-        email
-          is expected to eq "Great User-modified@example.com"
-        name
-          is expected to eq "Great User"
+FactoryBot::DeclarationList#attributes
+  returns an AttributeList
+  defines each attribute on the attribute list
 
-enum traits
-  when automatically_define_enum_traits is true
-    prefers user defined traits over automatically built traits
-    builds traits for each enumerated value using a custom enumerable
-    builds traits for each enumerated value using a provided list of values as a Hash
-    builds traits for each enumerated value using a provided list of values as an Array
-    builds traits automatically for model enum field
-  when automatically_define_enum_traits is false
-    builds traits for each enumerated value when traits_for_enum are specified
-    raises an error for undefined traits
+FactoryBot::DefinitionProxy#initialize_with
+  defines the constructor on the definition
 
-nested implicit traits
-  defined inside the factory
-    it should behave like assigning data from traits
-      assigns the correct values
-  defined outside the factory
-    it should behave like assigning data from traits
-      assigns the correct values
+FactoryBot::Decorator::DisallowsDuplicatesRegistry
+  raises when attempting to #register a previously registered strategy
+  delegates #register to the registry when not registered
 
-calling `create` with a block
-  passes the created instance
-  returns the created instance
+FactoryBot::Attribute::Dynamic
+  with a block returning its block-level variable
+    returns self when executing the proc
+  with a block returning a static value
+    returns the value when executing the proc
+  with a block returning a sequence
+    raises a sequence abuse error
+  name
+    is expected to eq :first_name
+  with a block referencing an attribute on the attribute
+    evaluates the attribute from the attribute
 
-nested factories with different parents
-  honors :parent over the factory block nesting
+FactoryBot::DefinitionProxy#to_create
+  accepts a block to run in place of #save!
 
-build multiple instances
-  without default attributes
-    uses the default factory values
-    builds (but doesn't save) all the posts
-    length
-      is expected to eq 20
-  with a block
-    correctly uses the set value
-  with default attributes
-    overrides the default values
-  with a block that receives both the object and an index
-    correctly uses the set value
+FactoryBot::NullFactory
+  has a nil value for its compile attribute
+  delegates attributes to its definition
+  has an instance of FactoryBot::AttributeList for its attributes attribute
+  has a nil value for its class_name attribute
+  delegates defined traits to its definition
+  delegates constructor to its definition
+  has FactoryBot::Evaluator as its evaluator class
+  delegates callbacks to its definition
 
-callbacks using syntax methods without referencing FactoryBot explicitly
-  works when the callback has two variables
-  works when the callback has no variables
-  works when the callback has one variable
+FactoryBot::EvaluatorClassDefiner
+  returns an evaluator when accessing the evaluator class
+  sets attributes on the evaluator class
+  adds each attribute to the evaluator
+  only instance_execs the block once even when returning nil
+  evaluates the block in the context of the evaluator
+  with a custom evaluator as a parent class
+    bases its attribute lists on itself and its parent evaluator
 
-traits and dynamic attributes that are applied simultaneously
-  combined
-    is expected to eq "John <John@example.com>"
-  name
-    is expected to eq "John"
-  email
-    is expected to eq "John@example.com"
+FactoryBot::Declaration::Association
+  #==
+    when the names are different
+      the objects are NOT equal
+    when the options are different
+      the objects are NOT equal
+    when the attributes are equal
+      the objects are equal
+    when comparing against another type of object
+      the objects are NOT equal
 
-making sure the factory is properly compiled the first time we want to instantiate it
-  can honor traits on the very first call
+FactoryBot::DefinitionProxy#association
+  declares an association
+  when passing a block raises an error
+  declares an association with options
 
-syntax methods within dynamic attributes
-  can access syntax methods from dynamic attributes
-  can access methods already existing on the class
-  allows syntax methods to be used when the block has an arity of 1
-  can access syntax methods from dynamic attributes
+FactoryBot::AttributeList#define_attribute
+  returns the attribute
+  raises if an attribute has already been defined
+  maintains a list of attributes
 
-declaring attributes on a Factory that are private methods on Object
-  system
-    is expected to eq false
-  link
-    is expected to eq "http://example.com"
-  sleep
-    is expected to eq -5
+FactoryBot::Factory with a string for a name
+  has a name
+  sets build_class correctly with a class with an underscore
 
-attribute overrides
-  with an admin posting
-    secure
-      is expected to eq false
-  with a non-admin posting
-    secure
-      is expected to be nil
-  with no user posting
-    secure
-      is expected to be nil
+FactoryBot::Factory running a factory
+  returns the result from the strategy when running
+  calls the block and returns the result
+  creates the right strategy using the build class when running
 
-initialize_with with FG attributes that are transient
-  name
-    is expected to eq "Handsome Chap from .construct"
+FactoryBot::Callback
+  runs its block with two parameters
+  has a name
+  runs its block with one parameter
+  runs its block with no parameters
+  converts strings to symbols
 
-transient sequences
-  increments sequences correctly
+FactoryBot::DeclarationList#declare_attribute
+  deletes declarations with the same name when overridable
+  adds the declaration to the list when overridable
+  adds the declaration to the list when not overridable
+  appends declarations with the same name when NOT overridable
 
-initialize_with parent and child factories
-  allows child factories to override initialize_with
-  uses the parent's constructor when the child factory doesn't assign it
+FactoryBot::Strategy::AttributesFor
+  does not run the to_create block
+  returns the hash from the evaluation
+  it should behave like strategy without association support
+    returns nil when accessing an association
 
-FactoryBot.lint
-  allows for selective linting
-  executes linting in an ActiveRecord::Base transaction
-  does not raise when all factories are valid
-  raises when a factory is invalid
-  trait validation
-    enabled
-      raises if a trait produces an invalid object
-      does not raise if a trait produces a valid object
-    disabled
-      does not raises if a trait produces an invalid object
-  verbose linting
-    prints the backtrace for each factory error
-  factory strategy for linting
-    uses the requested strategy
-    uses the requested strategy during trait validation
+FactoryBot::Factory human names
+  parses names with underscores
+  parses human names without underscores
+  parses names with aliases
+  parses human names with big letters
+  parses names with big letters
+  parses human names with underscores
+  parses human names with aliases
+  parses names without underscores
 
-modifying inherited factories with traits
-  returns the correct value for overridden attributes from traits
-  returns the correct value for overridden attributes from traits defining multiple attributes
-  allows modification of attributes created via traits
+FactoryBot::DefinitionProxy#transient
+  makes all attributes added ignored
 
-a generated attributes hash where order matters
-  factory with a parent
-    assigns attributes in the order they're defined
-  factory without a parent
-    assigns attributes in the order they're defined without a parent class
+FactoryBot::Factory when given a class that overrides #to_s
+  sets build_class correctly
 
-FactoryBot.rewind_sequences
-  does not collide with globally registered factories
-  resets all sequences back to their starting values
-  resets inline sequences back to their starting value
-  still allows global sequences prefixed with a factory name
-  allows setting sequences within identically named traits
+Finished in 2.63 seconds (files took 1.24 seconds to load)
+291 examples, 0 failures
 
-setting private attributes
-  raises a NoMethodError
+Randomized with seed 20731
 
-global skip_create
-  does not persist any record
-  honors inline trait to_create
-  honors overridden to_create
-  does not persist child records
+/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/acceptance/\*\*/\*_spec.rb --format documentation
 
-assigning values from a transient attribute
-  does not ignore an _id attribute that is an alias for a transient attribute
+Randomized with seed 10544
 
-traits with to_create
-  gives additional traits higher priority than base traits and factory definition
-  can apply to_create from the definition
-  can apply to_create from traits
-  gives additional traits higher priority than to_create from the definition
-  gives base traits normal priority
-  gives base traits lower priority than overrides
+#add_attribute
+  assigns attributes for reserved words on .build
+  assigns attributes for reserved words on .attributes_for
+
+defaulting `id`
+  allows overriding id
+
+defaulting `created_at`
+  doesn't add created_at to objects who don't have the method
+  doesn't allow setting created_at on an object that doesn't define it
+  behaves the same as a non-stubbed created_at
+  allows overriding created_at for objects with created_at
+  allows assignment of created_at
+  defaults created_at for objects with created_at
+  is doesn't mark the object as changed
+
+associations without overriding :strategy
+  when the :use_parent_strategy config option is set to false
+    uses the overridden strategy on the association
+  when the :use_parent_strategy config option is set to true
+    uses the parent strategy on the association
+
+using ActiveSupport::Instrumentation to track compile_factory interaction
+  builds the correct payload
+  tracks proper time of compiling the factory
+  when factory with additional traits
+    builds the correct payload
+  when factory with base traits
+    builds the correct payload
 
 associations
-  when building interrelated associations
-    connects records with interdependent relationships
-    assigns the instance passed as an association attribute
-  when accidentally using an implicit declaration as an override
-    raises an error
   when accidentally using an implicit declaration for the factory
     raises an error
+  when accidentally using an implicit declaration as an override
+    raises an error
   when building collection associations
     builds the association according to the given strategy
+  when building interrelated associations
+    assigns the instance passed as an association attribute
+    connects records with interdependent relationships
 
-accessing methods from the instance within a dynamic attribute that is also a private method on object
-  more_format
-    is expected to eq "format: This is an awesome format"
-
-associations overriding :strategy
-  uses the overridden create strategy to create the association
+assigning values from a transient attribute
+  does not ignore an _id attribute that is an alias for a transient attribute
 
 initialize_with has access to all attributes for construction
   assigns attributes correctly
 
-initialize_with for a constructor that requires a block
-  executes the block correctly
+finding factories keyed by class instead of symbol
+  doesn't find the factory
 
-traits used in associations
-  allows assigning traits for the factory of an association
-  allows inline traits with a specific factory for an association
-  allows inline traits with the default association
+transient sequences
+  increments sequences correctly
 
-a built instance
-  is expected to be new record
-  when the :use_parent_strategy config option is set to true
-    assigns but does not save associations
-  when the :use_parent_strategy config option is set to false
-    assigns and saves associations
+Ruby 3.0: attributes_for destructuring syntax
+  supports being destructured
 
-transient attributes
-  returning attributes for a factory
-    is expected to have key :email
-    is expected not to have key :upcased
-    is expected not to have key :rockstar
-    is expected not to have key :four
-    is expected to have key :name
-  without transient variables assigned
-    uses the default value of the attribute
-  with a transient variable assigned
-    generates the correct attributes on a groupie
-    generates the correct attributes on a rockstar with a name
-    generates the correct attributes on an upcased rockstar
-    generates the correct attributes on a rockstar
+trait indifferent access
+  when trait is defined as struct
+    can be invoked with a struct
+    can be invoked with a string
+  when trait is defined as a symbol
+    can be invoked with a symbol
+    can be invoked with a string
+  when trait is defined as a string
+    can be invoked with a string
+    can be invoked with a symbol
+  when trait is defined as integer
+    can be invoked with as integer
+    can be invoked with a string
 
-a stubbed instance
-  acts as if it came from the database
-  assigns associations and acts as if it is saved
+including FactoryBot::Syntax::Methods when custom strategies have been declared
+  allows adding additional strategies
+
+an instance generated by a factory
+  registers the user factory
+
+an instance generated by a factory named a camel case string
+  registers the UserModel factory
+
+nested implicit traits
+  defined inside the factory
+    it should behave like assigning data from traits
+      assigns the correct values
+  defined outside the factory
+    it should behave like assigning data from traits
+      assigns the correct values
+
+initialize_with for a constructor that requires a block
+  executes the block correctly
 
 applying inline traits
   applies traits only to the instance generated for that call
 
+global skip_create
+  does not persist child records
+  does not persist any record
+  honors inline trait to_create
+  honors overridden to_create
+
 attributes defined using Symbol#to_proc
   assigns overridden value correctly
   assigns value with override correctly
   assigns values correctly
 
-assigning overrides that are also private methods on object
-  some_funky_method
-    is expected to eq "foobar!"
-  y
-    is expected to eq 12345
-  format
-    is expected to eq "Great"
-  more_format
-    is expected to eq "format: Great"
+making sure the factory is properly compiled the first time we want to instantiate it
+  can honor traits on the very first call
 
-reload
-  does not reset the value of use_parent_strategy
+when a self-referential trait is defined
+  raises a TraitDefinitionError
+  raises a TraitDefinitionError
 
-a custom create passing in an evaluator
-  passes the evaluator to the custom create block
+binding a callback to multiple callbacks
+  binds the callback to creation
+  does not bind the callback to building
+  binds the callback to stubbing
+
+initialize_with with an 'attributes' attribute
+  assigns attributes correctly
+
+setting private attributes
+  raises a NoMethodError
 
 an instance generated by a factory with multiple traits
+  child factory using grandparents' trait
+    great
+      is expected to eq "GREAT!!!"
+  factory with implicit traits called by child
+    calls the correct trait when parent built first
+    calls the correct trait when child built first
   factory with trait defined multiple times
     child factory redefining trait
       great
         is expected to eq "EVEN GREATER!!!"
     great
       is expected to eq "GREAT!!!"
-  the parent class
-    is expected not to be admin
-    gender
-      is expected to be nil
-    name
-      is expected to eq "John"
-  the child with multiple traits
+  the child class with one trait
     is expected to be admin
-    gender
-      is expected to eq "Female"
     name
-      is expected to eq "Jane"
-  the other child class with one trait
-    is expected not to be admin
-    gender
-      is expected to eq "Female"
-    name
-      is expected to eq "Jane"
-  child factory using grandparents' trait
-    great
-      is expected to eq "GREAT!!!"
-  child factory created where trait attributes are inherited
-    gender
-      is expected to eq "Male"
-    date_of_birth
-      is expected to eq Sat, 01 Jan 2000
-  factory created with alternate syntax for specifying trait
-    where trait name and attribute are the same
-      great
-        is expected to eq "GREAT!!!"
+      is expected to eq "John"
     gender
-      is expected to eq "Male"
-    where trait name and attribute are the same and attribute is overridden
-      great
-        is expected to eq "SORT OF!!!"
+      is expected to be nil
   the child with multiple traits who override the same attribute
     when the male assigns name after female
       is expected to be admin
@@ -2002,343 +1769,612 @@
         is expected to eq "Female"
       name
         is expected to eq "Jane"
-  the child with multiple traits and overridden attributes
+  child class with scoped trait and inherited trait
     is expected to be admin
     gender
-      is expected to be nil
+      is expected to eq "Female"
     name
-      is expected to eq "Jill"
+      is expected to eq "Judy"
   factory using global trait
-    name
-      is expected to eq "Bill"
     email
       is expected to eq "Bill@example.com"
-  factory with implicit traits called by child
-    calls the correct trait when child built first
-    calls the correct trait when parent built first
-  the child class with one trait
+    name
+      is expected to eq "Bill"
+  the other child class with one trait
+    is expected not to be admin
+    gender
+      is expected to eq "Female"
+    name
+      is expected to eq "Jane"
+  the child with multiple traits and overridden attributes
     is expected to be admin
     name
-      is expected to eq "John"
+      is expected to eq "Jill"
     gender
       is expected to be nil
-  child class with scoped trait and inherited trait
+  the child with multiple traits
     is expected to be admin
     gender
       is expected to eq "Female"
     name
-      is expected to eq "Judy"
+      is expected to eq "Jane"
+  the parent class
+    is expected not to be admin
+    name
+      is expected to eq "John"
+    gender
+      is expected to be nil
+  child factory created where trait attributes are inherited
+    date_of_birth
+      is expected to eq Sat, 01 Jan 2000
+    gender
+      is expected to eq "Male"
+  factory created with alternate syntax for specifying trait
+    where trait name and attribute are the same
+      great
+        is expected to eq "GREAT!!!"
+    gender
+      is expected to eq "Male"
+    where trait name and attribute are the same and attribute is overridden
+      great
+        is expected to eq "SORT OF!!!"
+
+assigning overrides that are also private methods on object
+  some_funky_method
+    is expected to eq "foobar!"
+  more_format
+    is expected to eq "format: Great"
+  format
+    is expected to eq "Great"
+  y
+    is expected to eq 12345
 
 calling `attributes_for` with a block
-  passes the hash of attributes
   returns the hash of attributes
+  passes the hash of attributes
 
-an instance generated by a factory with a custom class name
-  is expected to be admin
-  is expected to be a kind of User(id: integer, admin: boolean)
+defining methods inside FactoryBot
+  raises with a meaningful message
 
-sequences are evaluated in the correct context
-  allows direct reference of a method in a sequence
-  invokes the correct method on the instance
-  invokes a method with no arguments on the instance
-  builds a sequence calling sprintf correctly
+FactoryBot.lint
+  allows for selective linting
+  executes linting in an ActiveRecord::Base transaction
+  does not raise when all factories are valid
+  raises when a factory is invalid
+  factory strategy for linting
+    uses the requested strategy
+    uses the requested strategy during trait validation
+  trait validation
+    enabled
+      does not raise if a trait produces a valid object
+      raises if a trait produces an invalid object
+    disabled
+      does not raises if a trait produces an invalid object
+  verbose linting
+    prints the backtrace for each factory error
 
-a stubbed instance overriding strategy
-  acts as if it is saved in the database
-  assigns associations and acts as if it is saved
+a generated stub instance
+  disables reload
+  allows decrement
+  disables update_attribute
+  disables connection
+  disables decrement!
+  allows toggle
+  disables toggle!
+  assigns a default attribute
+  allows increment
+  isn't changed
+  isn't a new record
+  assigns associations
+  disables increment!
+  disables save
+  disables destroy
+  generates unique ids
+  has an id
+  assigns an overridden attribute
+  assigns associations that aren't new records
 
-a created instance, specifying strategy: :build
-  saves associations (strategy: :build only affects build, not create)
+a created instance
+  assigns and saves associations
+  is expected not to be new record
 
-initialize_with doesn't duplicate assignment on attributes accessed from initialize_with
-  instantiates the correct object
+traits with to_create
+  gives additional traits higher priority than base traits and factory definition
+  gives base traits normal priority
+  gives base traits lower priority than overrides
+  gives additional traits higher priority than to_create from the definition
+  can apply to_create from the definition
+  can apply to_create from traits
+
+create multiple instances
+  with default attributes
+    overrides the default values
+  with a block that receives both the object and an index
+    uses the new values
+  without default attributes
+    creates all the posts
+    uses the default factory values
+    length
+      is expected to eq 20
+  with a block
+    uses the new values
+  without the count
+    raise ArgumentError with the proper error message
 
 overridden primary keys conventions
-  a stubbed instance with no id setter
+  a stubbed instance with no primary key
+    behaves like a persisted record
     builds a stubbed instance
   a stubbed instance with a uuid primary key
-    builds a stubbed instance
     behaves like a persisted record
+    builds a stubbed instance
     has a uuid primary key
-  a stubbed instance with no primary key
+  a stubbed instance with no id setter
     builds a stubbed instance
-    behaves like a persisted record
 
-a created instance
-  assigns and saves associations
-  is expected not to be new record
+modifying factories
+  doesn't overwrite already defined child's attributes
+  raises an exception if the factory was not defined before
+  allows for overriding child classes
+  redefining attributes
+    creating admin
+      overriding the email
+        admin
+          is expected to equal true
+        name
+          is expected to eq "Great User"
+        email
+          is expected to eq "perfect@example.com"
+      without overrides
+        name
+          is expected to eq "Great User"
+        admin
+          is expected to equal true
+        email
+          is expected to eq "Great User-modified@example.com"
+      overriding the name
+        admin
+          is expected to equal true
+        email
+          is expected to eq "wonderful-modified@example.com"
+        name
+          is expected to eq "wonderful"
+    creating user
+      overriding the name
+        email
+          is expected to eq "wonderful-modified@example.com"
+        name
+          is expected to eq "wonderful"
+      without overrides
+        email
+          is expected to eq "Great User-modified@example.com"
+        name
+          is expected to eq "Great User"
+      overriding the email
+        name
+          is expected to eq "Great User"
+        email
+          is expected to eq "perfect@example.com"
+  adding callbacks
+    login
+      is expected to be nil
+    name
+      is expected to eq "great user"
+  simple modification
+    doesn't allow the factory to be subsequently defined
+    does allow the factory to be subsequently modified
+    name
+      is expected to eq "Great User"
+    login
+      is expected to eq "GREAT USER"
+  reusing traits
+    login
+      is expected to eq "JOHNNY ROCKSTAR!!!"
+    name
+      is expected to eq "Johnny Rockstar!!!"
+    email
+      is expected to eq "Johnny Rockstar!!!@example.com"
 
-create multiple instances
+skipping the default create
+  doesn't execute anything when creating the instance
+
+build multiple instances
+  with a block
+    correctly uses the set value
   without default attributes
     uses the default factory values
-    creates all the posts
+    builds (but doesn't save) all the posts
     length
-      is expected to eq 2
+      is expected to eq 20
+  with default attributes
+    overrides the default values
+  with a block that receives both the object and an index
+    correctly uses the set value
 
-traits with callbacks
-  executes callbacks in the order assigned
-  when the factory has an implicit trait
+sequences
+  generates several values in the correct format
+  generates aliases for the sequence that reference the same block and retains value
+  generates aliases for the sequence that reference the same block
+  generates few values of the sequence
+  generates sequential numbers if no block is given
+
+traits added via strategy
+  adding traits in build_list
+    builds all the records
+    length
+      is expected to eq 2
+  adding traits in create
+    doesn't modify the user factory
     name
-      is expected to eq "JOHN"
-  when the factory has a trait passed via arguments
+      is expected to eq "JOE"
+    admin
+      is expected to equal true
+  adding traits in attributes_for
+    [:name]
+      is expected to eq "John"
+    [:admin]
+      is expected to equal true
+  adding traits in build_stubbed
+    admin
+      is expected to equal true
     name
-      is expected to eq "JOHN"
+      is expected to eq "Jack"
+  adding traits in create_list
+    creates all the records
+    length
+      is expected to eq 2
+  adding traits in build
+    name
+      is expected to eq "Joe"
+    admin
+      is expected to equal true
 
-configuring the starting id
-  defines which id build_stubbed instances start with
+attribute aliases
+  assigning an association by passing factory
+    assigns attributes correctly
+  assigning an association by foreign key
+    doesn't assign both an association and its foreign key
 
-an instance generated by a factory named a camel case string
-  registers the UserModel factory
+callbacks using Symbol#to_proc
+  runs the callback correctly
 
-initialize_with implicit constructor
-  instantiates the correct object
+syntax methods within dynamic attributes
+  allows syntax methods to be used when the block has an arity of 1
+  can access methods already existing on the class
+  can access syntax methods from dynamic attributes
+  can access syntax methods from dynamic attributes
+
+defaulting `updated_at`
+  allows assignment of updated_at
+  defaults updated_at for objects with updated_at
+  is doesn't mark the object as changed
+  doesn't add updated_at to objects who don't have the method
+  doesn't allow setting updated_at on an object that doesn't define it
+  allows overriding updated_at for objects with updated_at
+  behaves the same as a non-stubbed updated_at
+
+multiple creates and transient attributes to dynamically build attribute lists
+  allows the number of posts to be modified
+  generates the correct number of posts
 
 calling `build_stubbed` with a block
-  passes the stub instance
   returns the stub instance
+  passes the stub instance
 
-using ActiveSupport::Instrumentation to track compile_factory interaction
-  builds the correct payload
-  tracks proper time of compiling the factory
-  when factory with additional traits
-    builds the correct payload
-  when factory with base traits
-    builds the correct payload
+initialize_with implicit constructor
+  instantiates the correct object
 
-finding factories keyed by class instead of symbol
-  doesn't find the factory
+nested factories with different parents
+  honors :parent over the factory block nesting
 
-callbacks using Symbol#to_proc
-  runs the callback correctly
+global initialize_with
+  uses initialize_with globally across FactoryBot.define
+  handles inline trait override
+  handles child initialize_with
+  handles child initialize_with with trait
+  handles base initialize_with
 
-`attributes_for` for a class whose constructor has required params
-  [:name]
-    is expected to eq "John Doe"
+calling `build` with a block
+  returns the built instance
+  passes the built instance
 
-attribute aliases
-  assigning an association by passing factory
-    assigns attributes correctly
-  assigning an association by foreign key
-    doesn't assign both an association and its foreign key
+calling methods on the model instance
+  with the referenced attribute being overridden
+    uses the overridden value during attributes_for
+    uses the overridden value
+  without the attribute being overridden
+    doesn't instantiate a record with attributes_for
+    returns the correct value from the instance
+    returns nil during attributes_for
+  with the attribute being overridden
+    uses the overridden value
+    uses the overridden value during attributes_for
 
-Ruby 3.0: attributes_for destructuring syntax
-  supports being destructured
+a custom create passing in an evaluator
+  passes the evaluator to the custom create block
 
-defaulting `created_at`
-  defaults created_at for objects with created_at
-  doesn't allow setting created_at on an object that doesn't define it
-  allows assignment of created_at
-  doesn't add created_at to objects who don't have the method
-  allows overriding created_at for objects with created_at
-  behaves the same as a non-stubbed created_at
-  is doesn't mark the object as changed
+a stubbed instance
+  assigns associations and acts as if it is saved
+  acts as if it came from the database
+
+aliases and overrides
+  two
+    is expected to be nil
+  one
+    is expected to eq "override"
+
+a generated attributes hash
+  assigns an overridden value
+  assigns a default value
+  doesn't assign associations
+  assigns a lazy, dependent attribute
+
+calling `create` with a block
+  passes the created instance
+  returns the created instance
 
 callbacks
   runs child callback after parent callback
-  runs both the after(:stub) callback on the factory and the inherited after(:stub) callback
   runs both the after(:build) and after(:create) callbacks when creating
   runs the after(:stub) callback when stubbing
   runs the after(:build) callback when building
+  runs both the after(:stub) callback on the factory and the inherited after(:stub) callback
 
-when a self-referential trait is defined
-  raises a TraitDefinitionError
-  raises a TraitDefinitionError
+initialize_with with a hash argument
+  builds the object correctly
+
+a created instance, specifying strategy: :build
+  saves associations (strategy: :build only affects build, not create)
+
+initialize_with non-ORM-backed objects
+  generates random data
+  allows for overrides
+
+traits with callbacks
+  executes callbacks in the order assigned
+  when the factory has an implicit trait
+    name
+      is expected to eq "JOHN"
+  when the factory has a trait passed via arguments
+    name
+      is expected to eq "JOHN"
 
 using ActiveSupport::Instrumentation to track run_factory interaction
   builds the correct payload
   tracks proper time of creating the record
 
-skipping the default create
-  doesn't execute anything when creating the instance
+`attributes_for` for a class whose constructor has required params
+  [:name]
+    is expected to eq "John Doe"
 
-a generated stub instance
-  disables decrement!
-  isn't a new record
-  disables connection
-  disables reload
-  isn't changed
-  disables toggle!
-  has an id
-  disables destroy
-  allows decrement
-  disables save
-  assigns associations that aren't new records
-  assigns associations
-  disables increment!
-  assigns an overridden attribute
-  assigns a default attribute
-  allows increment
-  disables update_attribute
-  generates unique ids
-  allows toggle
+enum traits
+  when automatically_define_enum_traits is false
+    raises an error for undefined traits
+    builds traits for each enumerated value when traits_for_enum are specified
+  when automatically_define_enum_traits is true
+    prefers user defined traits over automatically built traits
+    builds traits for each enumerated value using a custom enumerable
+    builds traits for each enumerated value using a provided list of values as a Hash
+    builds traits for each enumerated value using a provided list of values as an Array
+    builds traits automatically for model enum field
 
-traits added via strategy
-  adding traits in build_stubbed
-    admin
-      is expected to equal true
+global to_create
+  uses to_create globally across FactoryBot.define
+  handles child to_create with trait
+  handles inline trait override
+  handles child to_create
+  handles base to_create
+
+an instance generated by a factory with a custom class name
+  is expected to be a kind of User(id: integer, admin: boolean)
+  is expected to be admin
+
+an instance generated by a factory that inherits from another factory
+  the child class redefining parent's attributes
+    is expected to be admin
+    is expected to be a kind of User(id: integer, name: string, admin: boolean, email: string, upper_email: string, login: string)
+    upper_email
+      is expected to eq "ADMIN@EXAMPLE.COM"
+    email
+      is expected to eq "admin@example.com"
+    login
+      is expected to eq "admin@example.com"
     name
-      is expected to eq "Jack"
-  adding traits in attributes_for
-    [:name]
-      is expected to eq "John"
-    [:admin]
-      is expected to equal true
-  adding traits in build_list
-    builds all the records
-    length
-      is expected to eq 2
-  adding traits in create
-    doesn't modify the user factory
+      is expected to eq "admin"
+  the parent class
+    is expected not to be admin
     name
-      is expected to eq "JOE"
-    admin
-      is expected to equal true
-  adding traits in create_list
-    creates all the records
+      is expected to eq "John"
+    email
+      is expected to eq "john@example.com"
+    login
+      is expected to eq "john@example.com"
+
+a built instance with strategy: :create
+  assigns and saves associations
+  is expected to be new record
+
+traits used in associations
+  allows inline traits with the default association
+  allows inline traits with a specific factory for an association
+  allows assigning traits for the factory of an association
+
+create multiple instances
+  without default attributes
+    uses the default factory values
+    creates all the posts
     length
       is expected to eq 2
-  adding traits in build
-    name
-      is expected to eq "Joe"
-    admin
-      is expected to equal true
 
-calling `build` with a block
-  passes the built instance
-  returns the built instance
+sequences are evaluated in the correct context
+  builds a sequence calling sprintf correctly
+  invokes a method with no arguments on the instance
+  allows direct reference of a method in a sequence
+  invokes the correct method on the instance
+
+associations overriding :strategy
+  uses the overridden create strategy to create the association
+
+accessing methods from the instance within a dynamic attribute that is also a private method on object
+  more_format
+    is expected to eq "format: This is an awesome format"
+
+defining a child factory before a parent
+  creates admin factories correctly
 
 register custom strategies
-  allows using the *_pair method to build a list using a custom strategy
   allows adding additional strategies
-  allows overriding default strategies
+  allows using the *_pair method to build a list using a custom strategy
   allows using the *_list method to build a list using a custom strategy
+  allows overriding default strategies
 
-binding a callback to multiple callbacks
-  binds the callback to creation
-  binds the callback to stubbing
-  does not bind the callback to building
+a custom create
+  uses the custom create block instead of save
 
-global initialize_with
-  handles child initialize_with with trait
-  handles base initialize_with
-  uses initialize_with globally across FactoryBot.define
-  handles child initialize_with
-  handles inline trait override
+initialize_with with FG attributes that are transient
+  name
+    is expected to eq "Handsome Chap from .construct"
 
-associations without overriding :strategy
-  when the :use_parent_strategy config option is set to true
-    uses the parent strategy on the association
+callbacks using syntax methods without referencing FactoryBot explicitly
+  works when the callback has no variables
+  works when the callback has one variable
+  works when the callback has two variables
+
+attribute overrides
+  with no user posting
+    secure
+      is expected to be nil
+  with a non-admin posting
+    secure
+      is expected to be nil
+  with an admin posting
+    secure
+      is expected to eq false
+
+FactoryBot.rewind_sequences
+  resets inline sequences back to their starting value
+  still allows global sequences prefixed with a factory name
+  does not collide with globally registered factories
+  allows setting sequences within identically named traits
+  resets all sequences back to their starting values
+
+traits and dynamic attributes that are applied simultaneously
+  email
+    is expected to eq "John@example.com"
+  name
+    is expected to eq "John"
+  combined
+    is expected to eq "John <John@example.com>"
+
+custom callbacks
+  runs a custom after callback when the proper strategy executes
+  runs a custom before callback when the proper strategy executes
+  runs a custom callback without prepending before or after when the proper strategy executes
+
+implicit traits containing callbacks
+  only runs the callback once
+
+traits with initialize_with
+  gives additional traits higher priority than initialize_with from the definition
+  gives additional traits higher priority than base traits and factory definition
+  gives base traits normal priority
+  can apply initialize_with from the definition
+  can apply initialize_with from traits
+  gives base traits lower priority than overrides
+
+a built instance
+  is expected to be new record
   when the :use_parent_strategy config option is set to false
-    uses the overridden strategy on the association
+    assigns and saves associations
+  when the :use_parent_strategy config option is set to true
+    assigns but does not save associations
 
-trait indifferent access
-  when trait is defined as struct
-    can be invoked with a struct
-    can be invoked with a string
-  when trait is defined as integer
-    can be invoked with a string
-    can be invoked with as integer
-  when trait is defined as a symbol
-    can be invoked with a string
-    can be invoked with a symbol
-  when trait is defined as a string
-    can be invoked with a symbol
-    can be invoked with a string
+initialize_with doesn't duplicate assignment on attributes accessed from initialize_with
+  instantiates the correct object
 
-looking up traits that don't exist
-  when the factory includes an invalid default trait
-    raises a KeyError including the factory name
-    maintains 'Did you mean?' suggestions at the end of the error message
-  when passing an invalid override trait
-    raises a KeyError
-  when a trait includes an invalid default trait
-    raises a KeyError including the factory name
+declaring attributes on a Factory that are private methods on Object
+  system
+    is expected to eq false
+  link
+    is expected to eq "http://example.com"
+  sleep
+    is expected to eq -5
 
-an instance generated by a factory that inherits from another factory
-  the parent class
-    is expected not to be admin
-    login
-      is expected to eq "john@example.com"
-    name
-      is expected to eq "John"
-    email
-      is expected to eq "john@example.com"
-  the child class redefining parent's attributes
-    is expected to be admin
-    is expected to be a kind of User(id: integer, name: string, admin: boolean, email: string, upper_email: string, login: string)
-    name
-      is expected to eq "admin"
-    login
-      is expected to eq "admin@example.com"
-    upper_email
-      is expected to eq "ADMIN@EXAMPLE.COM"
-    email
-      is expected to eq "admin@example.com"
+transient attributes
+  without transient variables assigned
+    uses the default value of the attribute
+  with a transient variable assigned
+    generates the correct attributes on an upcased rockstar
+    generates the correct attributes on a rockstar
+    generates the correct attributes on a groupie
+    generates the correct attributes on a rockstar with a name
+  returning attributes for a factory
+    is expected to have key :name
+    is expected not to have key :four
+    is expected to have key :email
+    is expected not to have key :rockstar
+    is expected not to have key :upcased
 
-an instance generated by a factory
-  registers the user factory
+modifying inherited factories with traits
+  returns the correct value for overridden attributes from traits defining multiple attributes
+  allows modification of attributes created via traits
+  returns the correct value for overridden attributes from traits
 
-a generated attributes hash
-  doesn't assign associations
-  assigns a default value
-  assigns a lazy, dependent attribute
-  assigns an overridden value
+reload
+  does not reset the value of use_parent_strategy
 
-defaulting `id`
-  allows overriding id
+a generated attributes hash where order matters
+  factory with a parent
+    assigns attributes in the order they're defined
+  factory without a parent
+    assigns attributes in the order they're defined without a parent class
 
-inline traits overriding existing attributes
-  returns the default status
-  prefers inline trait attributes over traits on a factory
-  prefers overridden attributes over attributes from traits, inline traits, or attributes on factories
-  prefers inline traits over attributes on factories
-  prefers inline trait attributes over default attributes
-  prefers attributes on factories over attributes from non-inline traits
-  prefers traits on a factory over default attributes
+a stubbed instance overriding strategy
+  assigns associations and acts as if it is saved
+  acts as if it is saved in the database
+
+configuring the starting id
+  defines which id build_stubbed instances start with
 
 association assignment from nested attributes
-  assigns the correct amount of comments
   assigns the correct amount of comments when overridden
+  assigns the correct amount of comments
 
-implicit traits containing callbacks
-  only runs the callback once
+looking up traits that don't exist
+  when passing an invalid override trait
+    raises a KeyError
+  when a trait includes an invalid default trait
+    raises a KeyError including the factory name
+  when the factory includes an invalid default trait
+    maintains 'Did you mean?' suggestions at the end of the error message
+    raises a KeyError including the factory name
 
 initialize_with with non-FG attributes
-  name
-    is expected to eq "John Doe"
   age
     is expected to eq 21
+  name
+    is expected to eq "John Doe"
 
-traits with initialize_with
-  gives additional traits higher priority than initialize_with from the definition
-  can apply initialize_with from traits
-  gives additional traits higher priority than base traits and factory definition
-  gives base traits lower priority than overrides
-  gives base traits normal priority
-  can apply initialize_with from the definition
-
-global to_create
-  uses to_create globally across FactoryBot.define
-  handles child to_create with trait
-  handles child to_create
-  handles base to_create
-  handles inline trait override
+global callbacks
+  triggers after build callbacks for all factories
 
-#add_attribute
-  assigns attributes for reserved words on .build
-  assigns attributes for reserved words on .attributes_for
+initialize_with parent and child factories
+  allows child factories to override initialize_with
+  uses the parent's constructor when the child factory doesn't assign it
 
-sequences
-  generates aliases for the sequence that reference the same block
-  generates aliases for the sequence that reference the same block and retains value
-  generates sequential numbers if no block is given
-  generates few values of the sequence
-  generates several values in the correct format
+inline traits overriding existing attributes
+  prefers inline trait attributes over traits on a factory
+  prefers overridden attributes over attributes from traits, inline traits, or attributes on factories
+  returns the default status
+  prefers attributes on factories over attributes from non-inline traits
+  prefers inline traits over attributes on factories
+  prefers inline trait attributes over default attributes
+  prefers traits on a factory over default attributes
 
-Finished in 2.87 seconds (files took 0.45665 seconds to load)
+Finished in 12 seconds (files took 1.32 seconds to load)
 374 examples, 0 failures
 
-Randomized with seed 31184
+Randomized with seed 10544
 
 mv ./.gem2deb.Gemfile.lock Gemfile.lock
 
@@ -2373,12 +2409,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/2981363/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/2981363/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/1425942 and its subdirectories
-I: Current time: Wed Apr  8 06:17:05 -12 2026
-I: pbuilder-time-stamp: 1775672225
+I: removing directory /srv/workspace/pbuilder/2981363 and its subdirectories
+I: Current time: Fri Mar  7 01:58:21 +14 2025
+I: pbuilder-time-stamp: 1741262301