App::Y...replay(3pm)

πŸ’– NAME πŸ’–

App::Yath::Command::replay β€” bestie, this is the yath command that replays a test run straight from an event log. No cap. πŸŽ€


✨ DESCRIPTION ✨

okay so listen 🫢 this yath command re-runs the harness against an event log that some previous test run left behind. The only required argument is the path to that log file β€” and yes, it maybe compressed, that's fine, it handles it. Any extra arguments you throw at it are assumed to be job id's. And if you list any jobs? Only the listed jobs get processed. Periodt. πŸ’…

This command accepts all the same renderer/formatter options that the test command accepts. Same vibe, different entry point. πŸ¦‹


🌸 USAGE 🌸

$ yath [YATH OPTIONS] replay [COMMAND OPTIONS]

πŸ’œ YATH OPTIONS

Developer

  • --dev-lib, --dev-lib=lib, -D, -D=lib, -Dlib, --no-dev-lib β€” Add paths to @INC before loading ANYTHING. This is the one you reach for when you're developing yath or yath plugins and you need the yath script to find your local code instead of the installed versions of the same code (the way that it just picks up the wrong one otherwise 😭). You can hand it an argument (-Dfoo) to give a custom path, or just use -D with no arg to add lib, blib/lib and blib/arch.

Can be specified multiple times

Environment

  • --persist-dir ARG, --persist-dir=ARG, --no-persist-dir β€” Where to find persistence files.
  • --persist-file ARG, --persist-file=ARG, --pfile ARG, --pfile=ARG, --no-persist-file β€” Where to find the persistence file. The default is /{system-tempdir}/project-yath-persist.json. If no project is specified then it falls back to the current directory. And if the current directory is not writable it defaults to /tmp/yath-persist.json, which limits you to one persistent runner on your system. That's the tradeoff, bestie 🀷
  • --project ARG, --project=ARG, --project-name ARG, --project-name=ARG, --no-project β€” This lets you drop a label for your current project/codebase. Best used in a .yath.rc file. This is necessary for a persistent runner, so don't skip it.

Help and Debugging

  • --show-opts, --no-show-opts β€” Exit after showing what yath thinks your options mean. Iconic for debugging the debugging. πŸ”
  • --version, -V, --no-version β€” Exit after showing a helpful usage message.

Plugins

  • --no-scan-plugins, --no-no-scan-plugins β€” Normally yath scans for and loads all App::Yath::Plugin::* modules so it can bring in command-line options they may provide. This flag disables that whole situation. Super useful if you have a naughty plugin that's loading other modules when it should not (we've all met one). πŸ™ˆ
  • --plugins PLUGIN, --plugins +App::Yath::Plugin::PLUGIN, --plugins PLUGIN=arg1,arg2,..., --plugin PLUGIN, --plugin +App::Yath::Plugin::PLUGIN, --plugin PLUGIN=arg1,arg2,..., -pPLUGIN, --no-plugins β€” Load a yath plugin. That's it, that's the option. 🧚

Can be specified multiple times

πŸ’… COMMAND OPTIONS

Cover Options

  • --cover-aggregator ByTest, --cover-aggregator ByRun, --cover-aggregator +Custom::Aggregator, --cover-agg ByTest, --cover-agg ByRun, --cover-agg +Custom::Aggregator, --no-cover-aggregator β€” Choose a custom aggregator subclass.
  • --cover-class ARG, --cover-class=ARG, --no-cover-class β€” Choose a Test2::Plugin::Cover subclass.
  • --cover-dirs ARG, --cover-dirs=ARG, --cover-dir ARG, --cover-dir=ARG, --no-cover-dirs β€” NO DESCRIPTION - FIX ME

Can be specified multiple times

  • --cover-exclude-private, --no-cover-exclude-private, --cover-files, --no-cover-files β€” Use Test2::Plugin::Cover to collect coverage data for what files are touched by what tests. Unlike Devel::Cover this has very little performance impact (About 4% difference). Lowkey a steal. ✨
  • --cover-from path/to/log.jsonl, --cover-from http://example.com/coverage, --cover-from path/to/coverage.jsonl, --no-cover-from β€” This can be a test log, a coverage dump (old style json or new jsonl format), or a url to any of the previous. Heads up: tests will not be run if the file/url is invalid. 🚨
  • --cover-from-type json, --cover-from-type jsonl, --cover-from-type log, --no-cover-from-type β€” File type for coverage source. Usually it can be detected, but when it cannot you should specify. "json" is old style single-blob coverage data, "jsonl" is the new by-test style, "log" is a logfile from a previous run.
  • --cover-manager My::Coverage::Manager, --no-cover-manager β€” Coverage 'from' manager to use when coverage data does not provide one.
  • --cover-maybe-from path/to/log.jsonl, --cover-maybe-from http://example.com/coverage, --cover-maybe-from path/to/coverage.jsonl, --no-cover-maybe-from β€” This can be a test log, a coverage dump (old style json or new jsonl format), or a url to any of the previous. Tests will coninue if even if the coverage file/url is invalid. (yes, that's the original spelling, bestie, I don't make the rules πŸ’€)
  • --cover-maybe-from-type json, --cover-maybe-from-type jsonl, --cover-maybe-from-type log, --no-cover-maybe-from-type β€” Same as "from_type" but for "maybe_from". Defaults to "from_type" if that is specified, otherwise auto-detect.
  • --cover-metrics, --no-cover-metrics, --cover-types ARG, --cover-types=ARG, --cover-type ARG, --cover-type=ARG, --no-cover-types β€” NO DESCRIPTION - FIX ME

Can be specified multiple times

  • --cover-write, --cover-write=coverage.jsonl, --cover-write=coverage.json, --no-cover-write β€” Create a json or jsonl file of all coverage data seen during the run (This implies --cover-files). πŸ‘‘

Display Options

  • --color, --no-color β€” Turn color on, default is true if STDOUT is a TTY.
  • --hide-runner-output, --no-hide-runner-output β€” Hide output from the runner, showing only test output. (See Also truncate_runner_output)
  • --no-final-table, --no-no-final-table β€” When printing final results, don't use table-style display.
  • --no-wrap, --no-no-wrap β€” Do not do fancy text-wrapping, let the terminal handle it.
  • --progress, --no-progress β€” Toggle progress indicators. On by default if STDOUT is a TTY. You can use --no-progress to disable the 'events seen' counter and buffered event pre-display.
  • --quiet, -q, --no-quiet β€” Be very quiet. 🀫

Can be specified multiple times

  • --renderers +My::Renderer, --renderers Renderer=arg1,arg2,..., --renderer +My::Renderer, --renderer Renderer=arg1,arg2,..., --no-renderers β€” Specify renderers, (Default: "Formatter=Test2"). Use "+" to give a fully qualified module name. Without "+" "Test2::Harness::Renderer::" will be prepended to your argument.

Can be specified multiple times. If the same key is listed multiple times the value lists will be appended together.

  • --show-times, -T, --no-show-times β€” Show the timing data for each job. ⏱️
  • --term-width 80, --term-width 200, --term-size 80, --term-size 200, --no-term-width β€” Alternative to setting $TABLE_TERM_SIZE. Setting this will override the terminal width detection to the number of characters specified.
  • --truncate-runner-output, --no-truncate-runner-output β€” Only show runner output that was generated after the current command. This is only useful with a persistent runner.
  • --verbose, -v, --no-verbose β€” Be more verbose. πŸ“’

Can be specified multiple times

Formatter Options

  • --formatter ARG, --formatter=ARG, --no-formatter β€” NO DESCRIPTION - FIX ME
  • --qvf, --no-qvf β€” [Q]uiet, but [V]erbose on [F]ailure. Hide all output from tests when they pass, except to say they passed. If a test fails then ALL output from the test is verbosely output. Genuinely one of the best vibes in here. πŸ”₯
  • --show-job-end, --no-show-job-end β€” Show output when a job ends. (Default: on)
  • --show-job-info, --no-show-job-info β€” Show the job configuration when a job starts. (Default: off, unless -vv)
  • --show-job-launch, --no-show-job-launch β€” Show output for the start of a job. (Default: off unless -v)
  • --show-run-info, --no-show-run-info β€” Show the run configuration when a run starts. (Default: off, unless -vv)

Git Options

  • --git-change-base master, --git-change-base HEAD^, --git-change-base df22abe4, --no-git-change-base β€” Find files changed by all commits in the current branch from most recent, stopping when a commit is found that is also present in the history of the branch/commit specified as the change base. πŸ¦‹

Help and Debugging

  • --dummy, -d, --no-dummy β€” Dummy run, do not actually execute anything. Pretend mode, but make it productive. ✨

Can also be set with the following environment variables: "T2_HARNESS_DUMMY"

  • --help, -h, --no-help β€” exit after showing help information.
  • --interactive, -i, --no-interactive β€” Use interactive mode, 1 test at a time, stdin forwarded to it.
  • --keep-dirs, --keep_dir, -k, --no-keep-dirs β€” Do not delete directories when done. This is useful if you want to inspect the directories used for various commands. πŸ•΅οΈ
  • --procname-prefix ARG, --procname-prefix=ARG, --no-procname-prefix β€” Add a prefix to all proc names (as seen by ps).

YathUI Options

  • --yathui-api-key ARG, --yathui-api-key=ARG, --no-yathui-api-key β€” Yath-UI API key. This is not necessary if your Yath-UI instance is set to single-user.
  • --yathui-grace, --no-yathui-grace β€” If yath cannot connect to yath-ui it normally throws an error, use this to make it fail gracefully. You get a warning, but things keep going. 🫢
  • --yathui-long-duration 10, --no-yathui-long-duration β€” Minimum duration length (seconds) before a test goes from MEDIUM to LONG.
  • --yathui-medium-duration 5, --no-yathui-medium-duration β€” Minimum duration length (seconds) before a test goes from SHORT to MEDIUM.
  • --yathui-mode summary, --yathui-mode qvf, --yathui-mode qvfd, --yathui-mode complete, --no-yathui-mode β€” Set the upload mode (default 'qvfd').
  • --yathui-project ARG, --yathui-project=ARG, --no-yathui-project β€” The Yath-UI project for your test results.
  • --yathui-retry, --no-yathui-retry β€” How many times to try an operation before giving up. πŸ”

Can be specified multiple times


🌈 SOURCE 🌈

The source code repository for Test2-Harness can be found at http://github.com/Test-More/Test2-Harness/.


πŸ‘‘ MAINTAINERS πŸ‘‘

Chad Granum <exodist@cpan.org>


πŸŽ€ AUTHORS πŸŽ€

Chad Granum <exodist@cpan.org>

okay so legal bit, bestie, but make it cute:

Copyright 2026 Chad Granum <exodist7@gmail.com>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. πŸ’–

See http://dev.perl.org/licenses/ for the full licensing vibe.

ngl the "same terms as Perl itself" thing is the whole mood β€” it's giving "artistic license, but make it open source" and honestly? slay. Percy girlies stay winning. 🫢

and that's the whole page, bestie!! you read all of it, which is lowkey an achievement, no cap. πŸŽ€

shoutout to this doc being part of perl v5.40.1, dated 2026-05-10, filed under App::Y...replay(3pm) β€” yeah the name is cut off in the header, that's just how the manpage do, iconic behavior honestly. ✨

anyway go forth and replay some YAML. main character energy only. πŸ’…πŸŒΈπŸ¦‹

πŸ“¦ where this page comes from