Diff of the two buildlogs:

--
--- b1/build.log	2025-03-07 18:45:10.439942341 +0000
+++ b2/build.log	2025-03-07 18:46:28.404433072 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Thu Apr  9 13:06:27 -12 2026
-I: pbuilder-time-stamp: 1775783187
+I: Current time: Sat Mar  8 08:45:13 +14 2025
+I: pbuilder-time-stamp: 1741373113
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz]
 I: copying local configuration
@@ -26,54 +26,86 @@
 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/6081/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/57979/tmp/hooks/D01_modify_environment starting
+debug: Running on ionos12-i386.
+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  7 18:45 /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/57979/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/57979/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='i386'
-  DEBIAN_FRONTEND='noninteractive'
-  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=22 '
-  DISTRIBUTION='trixie'
-  HOME='/root'
-  HOST_ARCH='i386'
+  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]="i686-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=i386
+  DEBIAN_FRONTEND=noninteractive
+  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=10 '
+  DIRSTACK=()
+  DISTRIBUTION=trixie
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=i686
+  HOST_ARCH=i386
   IFS=' 	
   '
-  INVOCATION_ID='207cac10b5434202b8c8a4a2af8e2d4e'
-  LANG='C'
-  LANGUAGE='en_US:en'
-  LC_ALL='C'
-  LD_LIBRARY_PATH='/usr/lib/libeatmydata'
-  LD_PRELOAD='libeatmydata.so'
-  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='6081'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=62d0b3b5da084959836304566de72669
+  LANG=C
+  LANGUAGE=de_CH:de
+  LC_ALL=C
+  LD_LIBRARY_PATH=/usr/lib/libeatmydata
+  LD_PRELOAD=libeatmydata.so
+  MACHTYPE=i686-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=57979
   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.xETdkaom/pbuilderrc_GNTi --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.xETdkaom/b1 --logfile b1/build.log ruby-factory-bot_6.5.1-1.dsc'
-  SUDO_GID='112'
-  SUDO_UID='107'
-  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.xETdkaom/pbuilderrc_dbpa --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.xETdkaom/b2 --logfile b2/build.log ruby-factory-bot_6.5.1-1.dsc'
+  SUDO_GID=112
+  SUDO_UID=107
+  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 ionos6-i386 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux
+  Linux i-capture-the-hostname 6.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 Nov 22  2024 /bin -> usr/bin
-I: user script /srv/workspace/pbuilder/6081/tmp/hooks/D02_print_environment finished
+  lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin
+I: user script /srv/workspace/pbuilder/57979/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -273,7 +305,7 @@
 Get: 146 http://deb.debian.org/debian trixie/main i386 ruby-rspec-its all 1.3.0-1 [6864 B]
 Get: 147 http://deb.debian.org/debian trixie/main i386 ruby-sqlite3 i386 1.7.3-1 [51.3 kB]
 Get: 148 http://deb.debian.org/debian trixie/main i386 ruby-timecop all 0.9.10-1.1 [12.2 kB]
-Fetched 50.4 MB in 1s (37.9 MB/s)
+Fetched 50.4 MB in 1s (41.1 MB/s)
 Preconfiguring packages ...
 Selecting previously unselected package libpython3.13-minimal:i386.
 (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 ... 19787 files and directories currently installed.)
@@ -765,8 +797,8 @@
 Setting up tzdata (2025a-2) ...
 
 Current default time zone: 'Etc/UTC'
-Local time is now:      Fri Apr 10 01:07:24 UTC 2026.
-Universal Time is now:  Fri Apr 10 01:07:24 UTC 2026.
+Local time is now:      Fri Mar  7 18:45:51 UTC 2025.
+Universal Time is now:  Fri Mar  7 18:45:51 UTC 2025.
 Run 'dpkg-reconfigure tzdata' if you wish to change it.
 
 Setting up ruby-minitest (5.25.4-2) ...
@@ -900,7 +932,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/57979/tmp/hooks/A99_set_merged_usr starting
+Not re-configuring usrmerge for trixie
+I: user script /srv/workspace/pbuilder/57979/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
@@ -933,7 +969,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/d20260409-16423-ihhsgu/gemspec
+/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20250308-3704-on4uhi/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"
@@ -964,7 +1000,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/d20260409-16423-ihhsgu/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/d20250308-3704-on4uhi/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
@@ -1050,187 +1086,100 @@
 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 39661
+Randomized with seed 1233
 
-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
-
-FactoryBot::Internal
-  .strategy_by_name
-    finds a registered strategy
-  .register_sequence
-    registers the provided sequence
-    returns the registered sequence
-  .sequence_by_name
-    finds a registered sequence
-  .register_strategy
-    register the provided strategy name with the class
-  .register_factory
-    returns the registered factory
-    registers the provided factory
-  .register_factory
-    returns the registered factory
-    registers the provided factory
-  .register_trait
-    registers the provided trait
-    returns the registered trait
-  .trait_by_name
-    finds a previously registered trait
-  .factory_by_name
-    finds a registered factory
-  .factory_by_name
-    finds a registered factory
-  .rewind_sequences
-    rewinds the sequences and the internal sequences
-
-FactoryBot::Factory with a name ending in s
-  has a name
-  has a build class
-
-FactoryBot::DefinitionProxy#trait
-  declares a trait
+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::Factory with a string for a name
-  has a name
-  sets build_class correctly with a class with an underscore
+FactoryBot::Factory running a factory
+  calls the block and returns the result
+  creates the right strategy using the build class when running
+  returns the result from the strategy when running
 
 FactoryBot::AttributeList#associations
   returns associations
 
-FactoryBot::DefinitionProxy#transient
-  makes all attributes added ignored
-
-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
-  name
-    is expected to eq :first_name
-  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
-
-FactoryBot::Attribute
-  converts the name attribute to a symbol
-  is not an association
-
-FactoryBot::AttributeList filter based on ignored attributes
-  filters #non_ignored attributes
-  filters #ignored attributes
-
-FactoryBot::Attribute::Dynamic with a string name
-  name
-    is expected to eq :name
-
-FactoryBot::DefinitionProxy#method_missing
-  declares an implicit declaration when called without args or a block
-  declares an association when called with a ':factory' key
-  raises a NoMethodError when called with a static-attribute-like argument
-  declares a dynamic attribute when called with a block
-
-FactoryBot::Attribute::Association with a string name
-  name
-    is expected to eq :name
-
-FactoryBot::Factory when defined with a custom class
-  is an instance of that custom class
-
-FactoryBot::Factory when given a class that overrides #to_s
-  sets build_class correctly
+FactoryBot::Callback
+  converts strings to symbols
+  runs its block with one parameter
+  runs its block with no parameters
+  runs its block with two parameters
+  has a name
 
-FactoryBot::DefinitionProxy#sequence
-  creates a new sequence with a block
-  creates a new sequence with an overridden starting value
-  creates a new sequence starting at 1
+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::NullObject
-  does not respond to other methods
   responds to the given methods
+  does not respond to other methods
 
-FactoryBot::Decorator::DisallowsDuplicatesRegistry
-  raises when attempting to #register a previously registered strategy
-  delegates #register to the registry when not registered
+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::Factory when defined with a custom class name
   has a build_class equal to its custom class name
 
-FactoryBot::Strategy::AttributesFor
-  returns the hash from the evaluation
-  does not run the to_create block
-  it should behave like strategy without association support
-    returns nil when accessing an association
-
-FactoryBot::Declaration::Association
-  #==
-    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
-    when the names are different
-      the objects are NOT equal
-
-FactoryBot::Definition
-  delegates :declare_attribute to declarations
-  adds only unique traits
-  has a name
-  maintains a list of callbacks
-  has an overridable declaration list
-  doesn't expose a separate create strategy when none is specified
-  creates a new attribute list with the name passed when given a name
-  maintains a list of enum fields
-  maintains a list of traits
-  exposes a non-default create strategy when one is provided by the user
+FactoryBot
+  finds a registered strategy
+  .use_parent_strategy
+    is true by default
 
 FactoryBot::AttributeList generating names
-  knows all its #names
-  knows all its #names for #associations
   knows all its #names for #non_ignored attributes
   knows all its #names for #ignored attributes
+  knows all its #names
+  knows all its #names for #associations
 
-FactoryBot::DefinitionProxy#to_create
-  accepts a block to run in place of #save!
+FactoryBot::Factory human names
+  parses names with underscores
+  parses names without underscores
+  parses human names with big letters
+  parses names with big letters
+  parses names with aliases
+  parses human names with aliases
+  parses human names without underscores
+  parses human names with underscores
 
-FactoryBot::DefinitionProxy#factory
-  without options
-  with options
-  with a block
+FactoryBot::Factory when defined with a class instead of a name
+  has a build_class
+  has a name
 
-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
-    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] with the evaluation's object
-    returns the object from the evaluation
+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::DeclarationList#declare_attribute
-  adds the declaration to the list when not overridable
-  appends declarations with the same name when NOT overridable
-  adds the declaration to the list when overridable
-  deletes declarations with the same name when overridable
+FactoryBot::AttributeList filter based on ignored attributes
+  filters #non_ignored attributes
+  filters #ignored attributes
+
+FactoryBot::DefinitionProxy#to_create
+  accepts a block to run in place of #save!
 
 FactoryBot::StrategyCalculator
-  finds the strategy by name when instantiated with a symbol
   returns the strategy found when instantiated with a symbol
+  finds the strategy by name when instantiated with a symbol
   returns the class passed when it is instantiated with a class
 
-FactoryBot::NullFactory
-  delegates callbacks to its definition
-  delegates defined traits to its definition
-  has a nil value for its compile attribute
-  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 attributes to its definition
-  delegates constructor to its definition
+FactoryBot::Registry
+  iterates registered objects
+  adds and returns the object registered
+  includes a did_you_mean message
+  knows that an object is registered by symbol
+  knows when an object is not registered
+  finds a registered object
+  clears registered factories
+  finds a registered object with square brackets
+  does not include duplicate objects with registered under different names
+  raises when an object cannot be found
+  knows that an object is registered by string
+  is an enumerable
 
 FactoryBot::Decorator::AttributeHash
   #attributes
@@ -1238,149 +1187,137 @@
     with an attribute called 'attributes'
       does not call itself recursively
 
-definition loading
-  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 several factories files under test/factories in non-alphabetical order
-    loads the files in the right order
-  with nested and unnested factories files under spec
-    it should behave like finds definitions
-      is expected to load definitions from spec/factories/person_factory.rb
-      is expected to load definitions from spec/factories.rb
-      is expected to load definitions from spec/factories/post_factory.rb
-  with a factories file under test
-    it should behave like finds definitions
-      is expected to load definitions from test/factories.rb
-  with several factories files under spec/factories in non-alphabetical order
-    loads the files in the right order
-  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 nested and unnested factories files under test
-    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
-      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 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 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 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 a factories file under spec/factories
-    it should behave like finds definitions
-      is expected to load definitions from spec/factories/post_factory.rb
+FactoryBot::EvaluatorClassDefiner
+  sets attributes on the evaluator class
+  evaluates the block in the context of the evaluator
+  adds each attribute to the evaluator
+  returns an evaluator when accessing the evaluator class
+  only instance_execs the block once even when returning nil
+  with a custom evaluator as a parent class
+    bases its attribute lists on itself and its parent evaluator
 
-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::DefinitionProxy#association
+  declares an association
+  declares an association with options
+  when passing a block raises an error
 
-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::DefinitionProxy#transient
+  makes all attributes added ignored
 
-FactoryBot aliases
-  for a foreign key should include both the suffixed and un-suffixed variants
-  for an attribute which starts with an underscore should not include a non-underscored version
-  for an attribute should include the original attribute and a version suffixed with '_id'
+FactoryBot::Factory with a name ending in s
+  has a build class
+  has a name
 
-FactoryBot::AttributeList#define_attribute
-  returns the attribute
-  raises if an attribute has already been defined
-  maintains a list of attributes
+FactoryBot::Attribute::Association with a string name
+  name
+    is expected to eq :name
 
-FactoryBot::DeclarationList#attributes
-  returns an AttributeList
-  defines each attribute on the attribute list
+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
+
+FactoryBot::DeclarationList#declare_attribute
+  adds the declaration to the list when not overridable
+  appends declarations with the same name when NOT overridable
+  adds the declaration to the list when overridable
+  deletes declarations with the same name when overridable
 
 FactoryBot::Attribute::Sequence
   assigns the next value in the sequence
   name
     is expected to eq :first_name
 
-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 aliases
+  for an attribute should include the original attribute and a version suffixed with '_id'
+  for a foreign key should include both the suffixed and un-suffixed variants
+  for an attribute which starts with an underscore should not include a non-underscored version
 
-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::Factory with a string for a name
+  has a name
+  sets build_class correctly with a class with an underscore
 
-FactoryBot::Declaration::Implicit
-  with a known factory
-    has the correct factory name
-    creates an association attribute
+FactoryBot::NullFactory
+  delegates callbacks to its definition
+  has a nil value for its compile attribute
+  delegates defined traits to its definition
+  delegates attributes to its definition
+  has an instance of FactoryBot::AttributeList for its attributes attribute
+  delegates constructor to its definition
+  has FactoryBot::Evaluator as its evaluator class
+  has a nil value for its class_name attribute
+
+FactoryBot::Declaration::Dynamic
   #==
-    when comparing against another type of object
-      the objects are NOT equal
-    when the factories are different
+    when the blocks 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
+    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
-  with a known sequence
-    creates a sequence attribute
-    does not create an association attribute
-
-FactoryBot::Registry
-  knows that an object is registered by string
-  does not include duplicate objects with registered under different names
-  is an enumerable
-  finds a registered object
-  adds and returns the object registered
-  clears registered factories
-  knows when an object is not registered
-  iterates registered objects
-  raises when an object cannot be found
-  knows that an object is registered by symbol
-  includes a did_you_mean message
-  finds a registered object with square brackets
 
 FactoryBot::Attribute::Association
   builds the association when calling the proc
-  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::Factory when defined with a custom class
+  is an instance of that custom class
+
+FactoryBot::Definition
+  delegates :declare_attribute to declarations
+  maintains a list of traits
+  maintains a list of enum fields
+  creates a new attribute list with the name passed when given a name
+  adds only unique traits
+  has an overridable declaration list
+  has a name
+  maintains a list of callbacks
+  doesn't expose a separate create strategy when none is specified
+  exposes a non-default create strategy when one is provided by the user
+
+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 a static value
+    returns the value when executing the proc
+  with a block returning its block-level variable
+    returns self when executing the proc
+
+FactoryBot::Decorator::DisallowsDuplicatesRegistry
+  delegates #register to the registry when not registered
+  raises when attempting to #register a previously registered strategy
+
+FactoryBot::DefinitionProxy#factory
+  without options
+  with a block
+  with options
+
 FactoryBot::DefinitionProxy adding callbacks
   adding both an :after_stub and a :before_create callback succeeds
+  adding both a :before_stub and a :before_create callback succeeds
   adding both an :after_stub and an :after_create callback succeeds
+  adding an :after_stub callback succeeds
   adding an :after_build callback succeeds
   adding an :after_create callback succeeds
-  adding an :after_stub callback succeeds
-  adding both a :before_stub and a :before_create callback succeeds
 
 FactoryBot::Factory
-  returns associations
-  includes associations from the parent factory
-  creates a new factory using the class of the parent
-  guesses the build class from the factory name
   creates a new factory while overriding the parent class
+  creates a new factory using the class of the parent
+  includes associations from the parent factory
+  returns associations
   has a factory name
   has a build class
+  guesses the build class from the factory name
   when overriding generated attributes with a hash
     returns the overridden value in the generated attributes
     overrides a symbol parameter with a string parameter
@@ -1388,400 +1325,527 @@
     discards the predefined value for the attribute
     uses the passed in value for the alias
 
+FactoryBot::Internal
+  .factory_by_name
+    finds a registered factory
+  .trait_by_name
+    finds a previously registered trait
+  .sequence_by_name
+    finds a registered sequence
+  .register_sequence
+    registers the provided sequence
+    returns the registered sequence
+  .rewind_sequences
+    rewinds the sequences and the internal sequences
+  .register_strategy
+    register the provided strategy name with the class
+  .strategy_by_name
+    finds a registered strategy
+  .factory_by_name
+    finds a registered factory
+  .register_trait
+    registers the provided trait
+    returns the registered trait
+  .register_factory
+    returns the registered factory
+    registers the provided factory
+  .register_factory
+    registers the provided factory
+    returns the registered factory
+
 FactoryBot::Strategy::Stub
-  it should behave like strategy with callbacks
-    returns the object from the evaluation
-    runs the callbacks [:after_stub] with the evaluation's object
-  it should behave like strategy with strategy: :build
-    runs the factory with the correct overrides
-    finds the factory with the correct factory name
   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: #decrement!
-      raises an informative error if the method is called
-      overrides the method with any arity
-    overriding persistence method: #toggle!
-      raises an informative error if the method is called
+    assigns created_at
+    overriding persistence method: #increment!
       overrides the method with any arity
-    overriding persistence method: #update!
       raises an informative error if the method is called
+    overriding persistence method: #save!
       overrides the method with any arity
-    overriding persistence method: #delete
       raises an informative error if the method is called
-      overrides the method with any arity
     overriding persistence method: #reload
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #update_columns
+    overriding persistence method: #destroy
+      raises an informative error if the method is called
+      overrides the method with any arity
+    overriding persistence method: #update_attributes
       raises an informative error if the method is called
       overrides the method with any arity
     overriding persistence method: #touch
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #save
-      raises an informative error if the method is called
+    overriding persistence method: #update
       overrides the method with any arity
-    overriding persistence method: #update_attributes!
+      raises an informative error if the method is called
+    overriding persistence method: #connection
+      raises an informative error if the method is called
       overrides the method with any arity
+    overriding persistence method: #toggle!
       raises an informative error if the method is called
-    overriding persistence method: #increment!
+      overrides the method with any arity
+    overriding persistence method: #destroy!
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #update_attribute
+    overriding persistence method: #update_column
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #update_attributes
+    overriding persistence method: #decrement!
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #connection
-      overrides the method with any arity
+    overriding persistence method: #update_attributes!
       raises an informative error if the method is called
-    overriding persistence method: #update
+      overrides the method with any arity
+    overriding persistence method: #update!
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #destroy
+    overriding persistence method: #update_columns
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #update_column
+    overriding persistence method: #delete
       overrides the method with any arity
       raises an informative error if the method is called
-    overriding persistence method: #save!
+    overriding persistence method: #save
       raises an informative error if the method is called
       overrides the method with any arity
-    overriding persistence method: #destroy!
+    overriding persistence method: #update_attribute
       raises an informative error if the method is called
       overrides the method with any arity
   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
+    returns the object from the evaluation
+    runs the callbacks [:after_stub] with the evaluation's object
 
-FactoryBot::Factory when defined with a class instead of a name
-  has a name
-  has a build_class
+FactoryBot::Factory when given a class that overrides #to_s
+  sets build_class correctly
 
-FactoryBot::Factory human names
-  parses human names with underscores
-  parses human names with big letters
-  parses names with underscores
-  parses names with big letters
-  parses human names with aliases
-  parses names with aliases
-  parses human names without underscores
-  parses names without underscores
+FactoryBot::DefinitionProxy#trait
+  declares a trait
+
+FactoryBot::AttributeList#define_attribute
+  returns the attribute
+  raises if an attribute has already been defined
+  maintains a list of attributes
+
+FactoryBot::Attribute::Dynamic with a string name
+  name
+    is expected to eq :name
+
+FactoryBot::Attribute
+  is not an association
+  converts the name attribute to a symbol
+
+FactoryBot::Strategy::Build
+  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
+    runs the callbacks [:after_build] with the evaluation's object
+    returns the object from the evaluation
+  it should behave like strategy with strategy: :build
+    runs the factory with the correct overrides
+    finds the factory with the correct factory name
+
+FactoryBot::DefinitionProxy#sequence
+  creates a new sequence with an overridden starting value
+  creates a new sequence starting at 1
+  creates a new sequence with a block
+
+FactoryBot::Declaration::Implicit
+  with a known factory
+    creates an association attribute
+    has the correct factory name
+  with a known sequence
+    creates a sequence attribute
+    does not create an association attribute
+  #==
+    when comparing against another type of object
+      the objects are NOT equal
+    when the factories are different
+      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::DefinitionProxy#method_missing
+  declares a dynamic attribute when called with a block
+  declares an implicit declaration when called without args or a block
+  raises a NoMethodError when called with a static-attribute-like argument
+  declares an association when called with a ':factory' key
+
+FactoryBot::Declaration::Association
+  #==
+    when the options 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
 
 FactoryBot::DefinitionProxy#initialize_with
   defines the constructor on the definition
 
-FactoryBot
-  finds a registered strategy
-  .use_parent_strategy
-    is true by default
+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::AttributeList#apply_attributes
-  adds attributes in the order defined
+FactoryBot::DeclarationList#attributes
+  defines each attribute on the attribute list
+  returns an AttributeList
 
 FactoryBot::Sequence
-  a custom scope increments within the correct scope after rewinding
-  a custom sequence and scope increments within the correct scope
   a custom sequence and scope increments within the correct scope when incrementing
-  a basic sequence without a block
-    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
+  a custom sequence and scope increments within the correct scope
+  a custom scope increments within the correct scope after rewinding
   a basic sequence
+    name
+      is expected to eq :test
     behaves like a sequence
       has a next value equal to the 2nd value after being incremented
       has a next value equal to its first value
       has a next value equal to the 1st value after rewinding
     names
       is expected to eq [:test]
-    name
-      is expected to eq :test
-  iterating over items in an enumerator
-    navigates to the next items until no items remain
-    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
+  a custom sequence
     behaves like a sequence
-      has a next value equal to the 2nd value after being incremented
       has a next value equal to its first value
       has a next value equal to the 1st value after rewinding
-  a custom sequence
+      has a next value equal to the 2nd value after being incremented
+  iterating over items in an enumerator
+    navigates to the next items until no items remain
     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 custom sequence without a block
     behaves like a sequence
+      has a next value equal to the 2nd value after being incremented
       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
   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 its first value
+      has a next value equal to the 1st value after rewinding
+  a basic sequence without a block
+    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 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
 
-FactoryBot::Callback
-  has a name
-  runs its block with two parameters
-  converts strings to symbols
-  runs its block with no parameters
-  runs its block with one parameter
-
-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::EvaluatorClassDefiner
-  only instance_execs the block once even when returning nil
-  evaluates the block in the context of the evaluator
-  sets attributes on the evaluator class
-  adds each attribute to the evaluator
-  returns an evaluator when accessing the evaluator class
-  with a custom evaluator as a parent class
-    bases its attribute lists on itself and its parent evaluator
-
-FactoryBot::DefinitionProxy#association
-  declares an association with options
-  when passing a block raises an error
-  declares an association
+FactoryBot::AttributeList#apply_attributes
+  adds attributes in the order defined
 
-FactoryBot::Declaration::Dynamic
-  #==
-    when the blocks are different
-      the objects are NOT equal
-    when the names are different
-      the objects are NOT equal
-    when one is ignored and the other isn't
-      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
+definition loading
+  with nested and unnested factories files under spec
+    it should behave like finds definitions
+      is expected to load definitions from spec/factories/person_factory.rb
+      is expected to load definitions from spec/factories.rb
+      is expected to load definitions from spec/factories/post_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 nested and unnested factories files under test
+    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
+      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 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 test/factories in non-alphabetical order
+    loads the files in the right order
+  with several factories files under spec/factories
+    it should behave like finds definitions
+      is expected to load definitions from spec/factories/person_factory.rb
+      is expected to load definitions from spec/factories/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/post_factory.rb
+      is expected to load definitions from spec/factories/subdirectory/person_factory.rb
+  with deeply nested factory files under test
+    it should behave like finds definitions
+      is expected to load definitions from test/factories/subdirectory/post_factory.rb
+      is expected to load definitions from test/factories/subdirectory/person_factory.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 several factories files under test/factories
+    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
+  with several factories files under spec/factories in non-alphabetical order
+    loads the files in the right order
+  with a factories file under test
+    it should behave like finds definitions
+      is expected to load definitions from test/factories.rb
 
-Finished in 2.15 seconds (files took 1.84 seconds to load)
+Finished in 1.17 seconds (files took 0.91982 seconds to load)
 291 examples, 0 failures
 
-Randomized with seed 39661
+Randomized with seed 1233
 
 /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
 
-Randomized with seed 53355
+Randomized with seed 7359
 
-an instance generated by a factory named a camel case string
-  registers the UserModel factory
-
-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
-
-global to_create
-  handles base to_create
-  handles inline trait override
-  handles child to_create with trait
-  uses to_create globally across FactoryBot.define
-  handles child to_create
-
-a custom create
-  uses the custom create block instead of save
+associations overriding :strategy
+  uses the overridden create strategy to create the association
 
-defaulting `id`
-  allows overriding id
+calling `build` with a block
+  passes the built instance
+  returns the built instance
 
 a created instance
-  is expected not to be new record
   assigns and saves associations
-
-binding a callback to multiple callbacks
-  binds the callback to stubbing
-  binds the callback to creation
-  does not bind the callback to building
+  is expected not to be new record
 
 overridden primary keys conventions
-  a stubbed instance with a uuid primary key
-    has a uuid primary key
-    builds a stubbed instance
-    behaves like a persisted record
   a stubbed instance with no id setter
     builds a stubbed instance
   a stubbed instance with no primary key
+    behaves like a persisted record
+    builds a stubbed instance
+  a stubbed instance with a uuid primary key
+    has a uuid primary key
     builds a stubbed instance
     behaves like a persisted record
 
-attributes defined using Symbol#to_proc
-  assigns value with override correctly
-  assigns overridden value correctly
-  assigns values correctly
+applying inline traits
+  applies traits only to the instance generated for that call
 
-associations without overriding :strategy
-  when the :use_parent_strategy config option is set to true
-    uses the parent strategy on the association
-  when the :use_parent_strategy config option is set to false
-    uses the overridden strategy on the association
+configuring the starting id
+  defines which id build_stubbed instances start with
 
-transient sequences
-  increments sequences correctly
+FactoryBot.rewind_sequences
+  allows setting sequences within identically named traits
+  does not collide with globally registered factories
+  still allows global sequences prefixed with a factory name
+  resets inline sequences back to their starting value
+  resets all sequences back to their starting values
 
-sequences are evaluated in the correct context
-  allows direct reference of a method in a sequence
-  builds a sequence calling sprintf correctly
-  invokes the correct method on the instance
-  invokes a method with no arguments on the instance
+global callbacks
+  triggers after build callbacks for all factories
 
-an instance generated by a factory
-  registers the user factory
+setting private attributes
+  raises a NoMethodError
 
-FactoryBot.lint
-  raises when a factory is invalid
-  executes linting in an ActiveRecord::Base transaction
-  does not raise when all factories are valid
-  allows for selective linting
-  verbose linting
-    prints the backtrace for each factory error
-  factory strategy for linting
-    uses the requested strategy
-    uses the requested strategy during trait validation
-  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
+a custom create
+  uses the custom create block instead of save
 
-traits used in associations
-  allows assigning traits for the factory of an association
-  allows inline traits with the default association
-  allows inline traits with a specific factory for an 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"
 
-traits and dynamic attributes that are applied simultaneously
-  combined
-    is expected to eq "John <John@example.com>"
-  email
-    is expected to eq "John@example.com"
-  name
-    is expected to eq "John"
+reload
+  does not reset the value of use_parent_strategy
 
-finding factories keyed by class instead of symbol
-  doesn't find the 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
 
-associations
-  when building collection associations
-    builds the association according to the given strategy
-  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 building interrelated associations
-    assigns the instance passed as an association attribute
-    connects records with interdependent relationships
+attributes defined using Symbol#to_proc
+  assigns values correctly
+  assigns value with override correctly
+  assigns overridden value correctly
+
+attribute aliases
+  assigning an association by foreign key
+    doesn't assign both an association and its foreign key
+  assigning an association by passing factory
+    assigns attributes correctly
+
+assigning overrides that are also private methods on object
+  format
+    is expected to eq "Great"
+  some_funky_method
+    is expected to eq "foobar!"
+  more_format
+    is expected to eq "format: Great"
+  y
+    is expected to eq 12345
+
+traits with to_create
+  gives additional traits higher priority than to_create from the definition
+  can apply to_create from the definition
+  gives base traits lower priority than overrides
+  can apply to_create from traits
+  gives base traits normal priority
+  gives additional traits higher priority than base traits and factory definition
+
+callbacks
+  runs the after(:build) callback when building
+  runs both the after(:build) and after(:create) callbacks when creating
+  runs both the after(:stub) callback on the factory and the inherited after(:stub) callback
+  runs child callback after parent callback
+  runs the after(:stub) callback when stubbing
+
+syntax methods within dynamic attributes
+  can access syntax methods from dynamic attributes
+  can access syntax methods from dynamic attributes
+  allows syntax methods to be used when the block has an arity of 1
+  can access methods already existing on the class
 
 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)
 
-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"
-  simple modification
-    does allow the factory to be subsequently modified
-    doesn't allow the factory to be subsequently defined
+initialize_with doesn't duplicate assignment on attributes accessed from initialize_with
+  instantiates the correct object
+
+an instance generated by a factory named a camel case string
+  registers the UserModel factory
+
+a stubbed instance overriding strategy
+  assigns associations and acts as if it is saved
+  acts as if it is saved in the database
+
+defaulting `created_at`
+  defaults created_at for objects with created_at
+  behaves the same as a non-stubbed created_at
+  is doesn't mark the object as changed
+  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
+
+callbacks using Symbol#to_proc
+  runs the callback correctly
+
+a generated attributes hash
+  assigns a default value
+  assigns a lazy, dependent attribute
+  assigns an overridden value
+  doesn't assign associations
+
+traits added via strategy
+  adding traits in build_list
+    builds all the records
+    length
+      is expected to eq 2
+  adding traits in attributes_for
+    [:admin]
+      is expected to equal true
+    [:name]
+      is expected to eq "John"
+  adding traits in build
+    admin
+      is expected to equal true
     name
-      is expected to eq "Great User"
-    login
-      is expected to eq "GREAT USER"
-  reusing traits
-    email
-      is expected to eq "Johnny Rockstar!!!@example.com"
-    login
-      is expected to eq "JOHNNY ROCKSTAR!!!"
+      is expected to eq "Joe"
+  adding traits in create
+    doesn't modify the user factory
+    admin
+      is expected to equal true
     name
-      is expected to eq "Johnny Rockstar!!!"
-  redefining attributes
-    creating user
-      overriding the name
-        name
-          is expected to eq "wonderful"
-        email
-          is expected to eq "wonderful-modified@example.com"
-      overriding the email
-        email
-          is expected to eq "perfect@example.com"
-        name
-          is expected to eq "Great User"
-      without overrides
-        name
-          is expected to eq "Great User"
-        email
-          is expected to eq "Great User-modified@example.com"
-    creating admin
-      without overrides
-        email
-          is expected to eq "Great User-modified@example.com"
-        name
-          is expected to eq "Great User"
-        admin
-          is expected to equal true
-      overriding the email
-        admin
-          is expected to equal true
-        email
-          is expected to eq "perfect@example.com"
-        name
-          is expected to eq "Great User"
-      overriding the name
-        admin
-          is expected to equal true
-        email
-          is expected to eq "wonderful-modified@example.com"
-        name
-          is expected to eq "wonderful"
-
-create multiple instances
-  without default attributes
-    creates all the posts
-    uses the default factory values
+      is expected to eq "JOE"
+  adding traits in create_list
+    creates all the records
     length
       is expected to eq 2
+  adding traits in build_stubbed
+    admin
+      is expected to equal true
+    name
+      is expected to eq "Jack"
 
-implicit traits containing callbacks
-  only runs the callback once
+inline traits overriding existing attributes
+  prefers inline traits over attributes on factories
+  prefers inline trait attributes over traits on a factory
+  prefers attributes on factories over attributes from non-inline traits
+  prefers inline trait attributes over default attributes
+  returns the default status
+  prefers traits on a factory over default attributes
+  prefers overridden attributes over attributes from traits, inline traits, or attributes on factories
 
-callbacks using Symbol#to_proc
-  runs the callback correctly
+initialize_with for a constructor that requires a block
+  executes the block correctly
 
-global initialize_with
-  handles inline trait override
-  handles child initialize_with with trait
-  uses initialize_with globally across FactoryBot.define
-  handles base initialize_with
-  handles child initialize_with
+calling `build_stubbed` with a block
+  passes the stub instance
+  returns the stub instance
+
+making sure the factory is properly compiled the first time we want to instantiate it
+  can honor traits on the very first call
+
+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
 
 defaulting `updated_at`
-  is doesn't mark the object as changed
-  allows overriding updated_at for objects with updated_at
+  doesn't add updated_at to objects who don't have the method
+  behaves the same as a non-stubbed updated_at
   defaults updated_at for objects with updated_at
   allows assignment of updated_at
-  doesn't add updated_at to objects who don't have the method
+  allows overriding updated_at for objects with updated_at
   doesn't allow setting updated_at on an object that doesn't define it
-  behaves the same as a non-stubbed updated_at
+  is doesn't mark the object as changed
+
+looking up traits that don't exist
+  when a trait includes an invalid default trait
+    raises a KeyError including the factory name
+  when passing an invalid override trait
+    raises a KeyError
+  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
+
+a generated stub instance
+  generates unique ids
+  disables save
+  allows decrement
+  isn't a new record
+  allows increment
+  assigns an overridden attribute
+  allows toggle
+  disables update_attribute
+  assigns a default attribute
+  disables connection
+  disables decrement!
+  has an id
+  disables reload
+  disables toggle!
+  assigns associations that aren't new records
+  disables increment!
+  assigns associations
+  isn't changed
+  disables destroy
+
+assigning values from a transient attribute
+  does not ignore an _id attribute that is an alias for a transient attribute
+
+#add_attribute
+  assigns attributes for reserved words on .attributes_for
+  assigns attributes for reserved words on .build
 
 attribute overrides
   with an admin posting
@@ -1794,267 +1858,244 @@
     secure
       is expected to be nil
 
-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
-    returns nil during attributes_for
-    doesn't instantiate a record with attributes_for
-    returns the correct value from the instance
-  with the attribute being overridden
-    uses the overridden value
-    uses the overridden value during attributes_for
+association assignment from nested attributes
+  assigns the correct amount of comments when overridden
+  assigns the correct amount of comments
 
-including FactoryBot::Syntax::Methods when custom strategies have been declared
-  allows adding additional strategies
+defaulting `id`
+  allows overriding id
 
-initialize_with with non-FG attributes
-  age
-    is expected to eq 21
-  name
-    is expected to eq "John Doe"
+create multiple instances
+  without default attributes
+    uses the default factory values
+    creates all the posts
+    length
+      is expected to eq 2
 
-callbacks
-  runs both the after(:stub) callback on the factory and the inherited after(:stub) callback
-  runs the after(:stub) callback when stubbing
-  runs child callback after parent callback
-  runs the after(:build) callback when building
-  runs both the after(:build) and after(:create) callbacks when creating
+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
 
-calling `build_stubbed` with a block
-  passes the stub instance
-  returns the stub instance
+a built instance with strategy: :create
+  assigns and saves associations
+  is expected to be new record
+
+a created instance, specifying strategy: :build
+  saves associations (strategy: :build only affects build, not create)
 
 skipping the default create
   doesn't execute anything when creating the instance
 
-syntax methods within dynamic attributes
-  can access methods already existing on the class
-  can access syntax methods from dynamic attributes
-  allows syntax methods to be used when the block has an arity of 1
-  can access syntax methods from dynamic attributes
+global initialize_with
+  handles child initialize_with
+  handles inline trait override
+  handles child initialize_with with trait
+  handles base initialize_with
+  uses initialize_with globally across FactoryBot.define
 
-a custom create passing in an evaluator
-  passes the evaluator to the custom create block
+initialize_with with a hash argument
+  builds the object correctly
 
-nested factories with different parents
-  honors :parent over the factory block nesting
+initialize_with with an 'attributes' attribute
+  assigns attributes correctly
 
-sequences
-  generates aliases for the sequence that reference the same block
-  generates several values in the correct format
-  generates sequential numbers if no block is given
-  generates aliases for the sequence that reference the same block and retains value
-  generates few values of the sequence
+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
 
-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"
+sequences are evaluated in the correct context
+  invokes the correct method on the instance
+  builds a sequence calling sprintf correctly
+  invokes a method with no arguments on the instance
+  allows direct reference of a method in a sequence
 
-defaulting `created_at`
-  doesn't allow setting created_at on an object that doesn't define it
-  doesn't add created_at to objects who don't have the method
-  is doesn't mark the object as changed
-  allows overriding created_at for objects with created_at
-  defaults created_at for objects with created_at
-  behaves the same as a non-stubbed created_at
-  allows assignment of created_at
+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"
+    name
+      is expected to eq "admin"
+    login
+      is expected to eq "admin@example.com"
+  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"
 
-calling `build` with a block
-  returns the built instance
-  passes the built instance
+an instance generated by a factory
+  registers the user factory
 
-initialize_with non-ORM-backed objects
-  generates random data
-  allows for overrides
+implicit traits containing callbacks
+  only runs the callback once
 
-setting private attributes
-  raises a NoMethodError
+initialize_with with FG attributes that are transient
+  name
+    is expected to eq "Handsome Chap from .construct"
 
-a stubbed instance
-  assigns associations and acts as if it is saved
-  acts as if it came from the database
+multiple creates and transient attributes to dynamically build attribute lists
+  allows the number of posts to be modified
+  generates the correct number of posts
 
-initialize_with implicit constructor
-  instantiates the correct object
+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
+
+sequences
+  generates aliases for the sequence that reference the same block
+  generates few values of the sequence
+  generates sequential numbers if no block is given
+  generates several values in the correct format
+  generates aliases for the sequence that reference the same block and retains value
 
 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 that receives both the object and an index
     correctly uses the set value
   with a block
     correctly uses the set value
+  without default attributes
+    builds (but doesn't save) all the posts
+    uses the default factory values
+    length
+      is expected to eq 20
   with default attributes
     overrides the default values
 
-global callbacks
-  triggers after build callbacks for all factories
-
-callbacks using syntax methods without referencing FactoryBot explicitly
-  works when the callback has one variable
-  works when the callback has two variables
-  works when the callback has no variables
-
-aliases and overrides
-  two
-    is expected to be nil
-  one
-    is expected to eq "override"
-
-declaring attributes on a Factory that are private methods on Object
-  sleep
-    is expected to eq -5
-  link
-    is expected to eq "http://example.com"
-  system
-    is expected to eq false
+create multiple instances
+  with a block that receives both the object and an index
+    uses the new values
+  without the count
+    raise ArgumentError with the proper error message
+  with default attributes
+    overrides the default values
+  with a block
+    uses the new values
+  without default attributes
+    creates all the posts
+    uses the default factory values
+    length
+      is expected to eq 20
 
-Ruby 3.0: attributes_for destructuring syntax
-  supports being destructured
+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
 
-multiple creates and transient attributes to dynamically build attribute lists
-  allows the number of posts to be modified
-  generates the correct number of posts
+global to_create
+  handles child to_create with trait
+  handles base to_create
+  handles child to_create
+  uses to_create globally across FactoryBot.define
+  handles inline trait override
 
-a generated stub instance
-  disables decrement!
-  isn't changed
-  generates unique ids
-  assigns associations
-  disables destroy
-  isn't a new record
-  disables connection
-  disables increment!
-  allows toggle
-  disables update_attribute
-  has an id
-  assigns an overridden attribute
-  allows increment
-  disables reload
-  disables toggle!
-  assigns a default attribute
-  assigns associations that aren't new records
-  allows decrement
-  disables save
+calling `attributes_for` with a block
+  passes the hash of attributes
+  returns the hash of attributes
 
-traits added via strategy
-  adding traits in create_list
-    creates all the records
-    length
-      is expected to eq 2
-  adding traits in create
-    doesn't modify the user factory
-    name
-      is expected to eq "JOE"
-    admin
-      is expected to equal true
-  adding traits in attributes_for
-    [:admin]
-      is expected to equal true
-    [:name]
-      is expected to eq "John"
-  adding traits in build_stubbed
-    name
-      is expected to eq "Jack"
-    admin
-      is expected to equal true
-  adding traits in build_list
-    builds 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
+using ActiveSupport::Instrumentation to track compile_factory interaction
+  builds the correct payload
+  tracks proper time of compiling the factory
+  when factory with base traits
+    builds the correct payload
+  when factory with additional traits
+    builds the correct payload
 
-initialize_with for a constructor that requires a block
-  executes the block correctly
+initialize_with implicit constructor
+  instantiates the correct object
 
-making sure the factory is properly compiled the first time we want to instantiate it
-  can honor traits on the very first call
+when a self-referential trait is defined
+  raises a TraitDefinitionError
+  raises a TraitDefinitionError
 
-using ActiveSupport::Instrumentation to track run_factory interaction
-  builds the correct payload
-  tracks proper time of creating the record
+custom callbacks
+  runs a custom before callback when the proper strategy executes
+  runs a custom callback without prepending before or after when the proper strategy executes
+  runs a custom after callback when the proper strategy executes
 
 calling `create` with a block
   passes the created instance
   returns the created instance
 
-initialize_with with a hash argument
-  builds the object correctly
-
-a stubbed instance overriding strategy
-  acts as if it is saved in the database
-  assigns associations and acts as if it is saved
+initialize_with has access to all attributes for construction
+  assigns attributes correctly
 
-FactoryBot.rewind_sequences
-  still allows global sequences prefixed with a factory name
-  allows setting sequences within identically named traits
-  resets inline sequences back to their starting value
-  resets all sequences back to their starting values
-  does not collide with globally registered factories
+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>"
 
-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
+enum traits
+  when automatically_define_enum_traits is true
+    builds traits for each enumerated value using a provided list of values as an Array
+    builds traits for each enumerated value using a provided list of values as a Hash
+    builds traits for each enumerated value using a custom enumerable
+    builds traits automatically for model enum field
+    prefers user defined traits over automatically built 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 a self-referential trait is defined
-  raises a TraitDefinitionError
-  raises a TraitDefinitionError
+global skip_create
+  honors overridden to_create
+  does not persist any record
+  does not persist child records
+  honors inline trait to_create
 
-initialize_with with FG attributes that are transient
-  name
-    is expected to eq "Handsome Chap from .construct"
+binding a callback to multiple callbacks
+  does not bind the callback to building
+  binds the callback to stubbing
+  binds the callback to creation
 
 an instance generated by a factory with multiple traits
-  factory created with alternate syntax for specifying trait
-    gender
-      is expected to eq "Male"
-    where trait name and attribute are the same
-      great
-        is expected to eq "GREAT!!!"
-    where trait name and attribute are the same and attribute is overridden
-      great
-        is expected to eq "SORT OF!!!"
-  the child with multiple traits and overridden attributes
-    is expected to be admin
+  the parent class
+    is expected not to be admin
     gender
       is expected to be nil
     name
-      is expected to eq "Jill"
+      is expected to eq "John"
+  factory using global trait
+    name
+      is expected to eq "Bill"
+    email
+      is expected to eq "Bill@example.com"
+  child factory using grandparents' trait
+    great
+      is expected to eq "GREAT!!!"
   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"
+    gender
+      is expected to eq "Female"
   the child class with one trait
     is expected to be admin
     name
       is expected to eq "John"
     gender
       is expected to be nil
-  the parent class
-    is expected not to be admin
-    name
-      is expected to eq "John"
+  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 "Judy"
   the child with multiple traits who override the same attribute
     when the male assigns name after female
       is expected to be admin
@@ -2068,255 +2109,145 @@
         is expected to eq "Female"
       name
         is expected to eq "Jane"
-  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 with multiple traits
+  the child with multiple traits and overridden attributes
     is expected to be admin
-    name
-      is expected to eq "Jane"
     gender
-      is expected to eq "Female"
-  factory using global trait
+      is expected to be nil
     name
-      is expected to eq "Bill"
-    email
-      is expected to eq "Bill@example.com"
+      is expected to eq "Jill"
+  factory with implicit traits called by child
+    calls the correct trait when child built first
+    calls the correct trait when parent built first
   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"
+    date_of_birth
+      is expected to eq Sat, 01 Jan 2000
   factory with trait defined multiple times
     child factory redefining trait
       great
         is expected to eq "EVEN GREATER!!!"
     great
       is expected to eq "GREAT!!!"
-  child factory using grandparents' trait
-    great
-      is expected to eq "GREAT!!!"
-  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"
-
-initialize_with has access to all attributes for construction
-  assigns attributes correctly
-
-traits with to_create
-  gives base traits lower priority than overrides
-  gives additional traits higher priority than base traits and factory definition
-  can apply to_create from the definition
-  gives base traits normal priority
-  can apply to_create from traits
-  gives additional traits higher priority than to_create from the definition
-
-a created instance, specifying strategy: :build
-  saves associations (strategy: :build only affects build, not create)
-
-associations overriding :strategy
-  uses the overridden create strategy to create the association
-
-applying inline traits
-  applies traits only to the instance generated for that call
-
-configuring the starting id
-  defines which id build_stubbed instances start with
-
-initialize_with doesn't duplicate assignment on attributes accessed from initialize_with
-  instantiates the correct object
-
-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"
-
-#add_attribute
-  assigns attributes for reserved words on .build
-  assigns attributes for reserved words on .attributes_for
-
-custom callbacks
-  runs a custom before callback when the proper strategy executes
-  runs a custom callback without prepending before or after when the proper strategy executes
-  runs a custom after callback when the proper strategy executes
-
-global skip_create
-  does not persist any record
-  does not persist child records
-  honors inline trait to_create
-  honors overridden to_create
-
-a generated attributes hash where order matters
-  factory without a parent
-    assigns attributes in the order they're defined without a parent class
-  factory with a parent
-    assigns attributes in the order they're defined
-
-calling `attributes_for` with a block
-  passes the hash of attributes
-  returns the hash of attributes
-
-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
-    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
-    prefers user defined traits over automatically built traits
-    builds traits for each enumerated value using a custom enumerable
-    builds traits automatically for model enum field
-
-defining methods inside FactoryBot
-  raises with a meaningful message
+      is expected to eq "Jane"
+  factory created with alternate syntax for specifying trait
+    gender
+      is expected to eq "Male"
+    where trait name and attribute are the same
+      great
+        is expected to eq "GREAT!!!"
+    where trait name and attribute are the same and attribute is overridden
+      great
+        is expected to eq "SORT OF!!!"
 
-reload
-  does not reset the value of use_parent_strategy
+Ruby 3.0: attributes_for destructuring syntax
+  supports being destructured
 
-association assignment from nested attributes
-  assigns the correct amount of comments when overridden
-  assigns the correct amount of comments
+a custom create passing in an evaluator
+  passes the evaluator to the custom create block
 
 `attributes_for` for a class whose constructor has required params
   [:name]
     is expected to eq "John Doe"
 
-modifying inherited factories with traits
-  returns the correct value for overridden attributes from traits defining multiple attributes
-  returns the correct value for overridden attributes from traits
-  allows modification of attributes created via traits
-
-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
-
-inline traits overriding existing attributes
-  prefers traits on a factory over default attributes
-  returns the default status
-  prefers inline trait attributes over default attributes
-  prefers inline trait attributes over traits on a factory
-  prefers inline traits over attributes on factories
-  prefers attributes on factories over attributes from non-inline traits
-  prefers overridden attributes over attributes from traits, inline traits, or attributes on factories
-
-create multiple instances
-  without the count
-    raise ArgumentError with the proper error message
-  with a block that receives both the object and an index
-    uses the new values
-  with a block
-    uses the new values
-  without default attributes
-    uses the default factory values
-    creates all the posts
-    length
-      is expected to eq 20
-  with default attributes
-    overrides the default values
-
-assigning values from a transient attribute
-  does not ignore an _id attribute that is an alias for a transient attribute
+calling methods on the model instance
+  with the attribute being overridden
+    uses the overridden value
+    uses the overridden value during attributes_for
+  without the attribute being overridden
+    doesn't instantiate a record with attributes_for
+    returns nil during attributes_for
+    returns the correct value from the instance
+  with the referenced attribute being overridden
+    uses the overridden value
+    uses the overridden value during 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
+defining a child factory before a parent
+  creates admin factories correctly
 
-using ActiveSupport::Instrumentation to track compile_factory interaction
+using ActiveSupport::Instrumentation to track run_factory interaction
+  tracks proper time of creating the record
   builds the correct payload
-  tracks proper time of compiling the factory
-  when factory with base traits
-    builds the correct payload
-  when factory with additional traits
-    builds the correct payload
-
-trait indifferent access
-  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 string
-    can be invoked with a symbol
-  when trait is defined as integer
-    can be invoked with a string
-    can be invoked with as integer
-  when trait is defined as struct
-    can be invoked with a string
-    can be invoked with a struct
 
 traits with callbacks
   executes callbacks in the order assigned
-  when the factory has an implicit trait
+  when the factory has a trait passed via arguments
     name
       is expected to eq "JOHN"
-  when the factory has a trait passed via arguments
+  when the factory has an implicit trait
     name
       is expected to eq "JOHN"
 
-an instance generated by a factory that inherits from another factory
-  the child class redefining parent's attributes
-    is expected to be a kind of User(id: integer, name: string, admin: boolean, email: string, upper_email: string, login: string)
-    is expected to be admin
-    email
-      is expected to eq "admin@example.com"
-    name
-      is expected to eq "admin"
-    upper_email
-      is expected to eq "ADMIN@EXAMPLE.COM"
-    login
-      is expected to eq "admin@example.com"
-  the parent class
-    is expected not to be admin
-    email
-      is expected to eq "john@example.com"
-    name
-      is expected to eq "John"
-    login
-      is expected to eq "john@example.com"
+associations
+  when building interrelated associations
+    assigns the instance passed as an association attribute
+    connects records with interdependent relationships
+  when building collection associations
+    builds the association according to the given strategy
+  when accidentally using an implicit declaration as an override
+    raises an error
+  when accidentally using an implicit declaration for the factory
+    raises an error
 
-defining a child factory before a parent
-  creates admin factories correctly
+transient sequences
+  increments sequences correctly
 
-traits with initialize_with
-  gives base traits normal priority
-  gives additional traits higher priority than base traits and factory definition
-  can apply initialize_with from the definition
-  gives additional traits higher priority than initialize_with from the definition
-  can apply initialize_with from traits
-  gives base traits lower priority than overrides
+initialize_with non-ORM-backed objects
+  generates random data
+  allows for overrides
 
-a built instance with strategy: :create
-  is expected to be new record
-  assigns and saves associations
+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
+
+defining methods inside FactoryBot
+  raises with a meaningful message
 
 transient attributes
+  with a transient variable assigned
+    generates the correct attributes on an upcased rockstar
+    generates the correct attributes on a rockstar with a name
+    generates the correct attributes on a groupie
+    generates the correct attributes on a rockstar
   returning attributes for a factory
-    is expected to have key :name
-    is expected not to have key :rockstar
     is expected not to have key :four
+    is expected not to have key :rockstar
+    is expected to have key :name
     is expected to have key :email
     is expected not to have key :upcased
   without transient variables assigned
     uses the default value of the attribute
-  with a transient variable assigned
-    generates the correct attributes on a rockstar with a name
-    generates the correct attributes on an upcased rockstar
-    generates the correct attributes on a groupie
-    generates the correct attributes on a rockstar
 
-looking up traits that don't exist
-  when a trait includes an invalid default trait
-    raises a KeyError including the factory name
-  when passing an invalid override trait
-    raises a KeyError
-  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
+declaring attributes on a Factory that are private methods on Object
+  link
+    is expected to eq "http://example.com"
+  sleep
+    is expected to eq -5
+  system
+    is expected to eq false
+
+aliases and overrides
+  one
+    is expected to eq "override"
+  two
+    is expected to be nil
+
+traits used in associations
+  allows inline traits with the default association
+  allows assigning traits for the factory of an association
+  allows inline traits with a specific factory for an association
+
+finding factories keyed by class instead of symbol
+  doesn't find the factory
+
+a stubbed instance
+  acts as if it came from the database
+  assigns associations and acts as if it is saved
 
 register custom strategies
   allows using the *_list method to build a list using a custom strategy
@@ -2324,19 +2255,124 @@
   allows adding additional strategies
   allows using the *_pair method to build a list using a custom strategy
 
-initialize_with with an 'attributes' attribute
-  assigns attributes correctly
+including FactoryBot::Syntax::Methods when custom strategies have been declared
+  allows adding additional strategies
 
-a generated attributes hash
-  assigns a lazy, dependent attribute
-  doesn't assign associations
-  assigns an overridden value
-  assigns a default value
+initialize_with with non-FG attributes
+  age
+    is expected to eq 21
+  name
+    is expected to eq "John Doe"
+
+modifying factories
+  doesn't overwrite already defined child's attributes
+  allows for overriding child classes
+  raises an exception if the factory was not defined before
+  adding callbacks
+    name
+      is expected to eq "great user"
+    login
+      is expected to be nil
+  redefining attributes
+    creating user
+      overriding the email
+        name
+          is expected to eq "Great User"
+        email
+          is expected to eq "perfect@example.com"
+      overriding the name
+        name
+          is expected to eq "wonderful"
+        email
+          is expected to eq "wonderful-modified@example.com"
+      without overrides
+        email
+          is expected to eq "Great User-modified@example.com"
+        name
+          is expected to eq "Great User"
+    creating admin
+      overriding the email
+        email
+          is expected to eq "perfect@example.com"
+        admin
+          is expected to equal true
+        name
+          is expected to eq "Great User"
+      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"
+  reusing traits
+    email
+      is expected to eq "Johnny Rockstar!!!@example.com"
+    name
+      is expected to eq "Johnny Rockstar!!!"
+    login
+      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"
+
+nested factories with different parents
+  honors :parent over the factory block nesting
+
+traits with initialize_with
+  gives base traits lower priority than overrides
+  can apply initialize_with from traits
+  can apply initialize_with from the definition
+  gives base traits normal priority
+  gives additional traits higher priority than initialize_with from the definition
+  gives additional traits higher priority than base traits and factory definition
+
+FactoryBot.lint
+  does not raise when all factories are valid
+  allows for selective linting
+  raises when a factory is invalid
+  executes linting in an ActiveRecord::Base transaction
+  factory strategy for linting
+    uses the requested strategy
+    uses the requested strategy during trait validation
+  verbose linting
+    prints the backtrace for each factory error
+  trait validation
+    disabled
+      does not raises if a trait produces an invalid object
+    enabled
+      does not raise if a trait produces a valid object
+      raises if a trait produces an invalid object
+
+trait indifferent access
+  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
+  when trait is defined as a symbol
+    can be invoked with a symbol
+    can be invoked with a string
+  when trait is defined as struct
+    can be invoked with a string
+    can be invoked with a struct
 
-Finished in 5.45 seconds (files took 1.53 seconds to load)
+Finished in 4.83 seconds (files took 1.02 seconds to load)
 374 examples, 0 failures
 
-Randomized with seed 53355
+Randomized with seed 7359
 
 mv ./.gem2deb.Gemfile.lock Gemfile.lock
 
@@ -2371,12 +2407,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/57979/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/57979/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/6081 and its subdirectories
-I: Current time: Thu Apr  9 13:08:06 -12 2026
-I: pbuilder-time-stamp: 1775783286
+I: removing directory /srv/workspace/pbuilder/57979 and its subdirectories
+I: Current time: Sat Mar  8 08:46:27 +14 2025
+I: pbuilder-time-stamp: 1741373187