Context
Across t/unit/Test2/Harness/, t/unit/Test2/Tools/, t/unit/Test2/EventFacet/, and t/unit/TAP/ there are 19 test stubs with skip_all "write me" placeholders. These cover utility functions, event handling, log processing, file I/O abstractions, and the TAP compatibility bridge.
Modules to test
Utilities (8 files):
Util.t → Test2::Harness::Util (core utility functions)
Util/Deprecated.t, Util/File.t, Util/File/JSON.t, Util/File/JSONL.t, Util/File/Stream.t, Util/File/Value.t, Util/HashBase.t
Log processing (4 files):
Log.t → Test2::Harness::Log
Log/CoverageAggregator.t, Log/CoverageAggregator/ByRun.t, Log/CoverageAggregator/ByTest.t
Log/TimeTracker.t → Test2::Harness::Log::TimeTracker
Util/LogFile.t → Test2::Harness::Util::LogFile
Events (1 file):
Event.t → Test2::Harness::Event
Test2/EventFacet/Binary.t → Test2::EventFacet::Binary
TAP bridge (2 files):
TAP/Harness/Yath.t → TAP::Harness::Yath
TAP/Harness/Yath/Aggregator.t → TAP::Harness::Yath::Aggregator
Test tools (1 file):
Test2/Tools/HarnessTester.t → Test2::Tools::HarnessTester
Suggested test scenarios
Utility functions (Test2::Harness::Util)
clean_path() — path normalization, absolute path handling
find_in_updir() — upward directory search
is_same_file() — inode comparison
mod2file() / file2mod() — module ↔ file path conversion
fqmod() — fully-qualified module name resolution
parse_exit() — exit code interpretation (signal, core dump, status)
open_file() / read_file() / write_file() / write_file_atomic() — file I/O
lock_file() / unlock_file() — file locking
sanitize_filename() — ANSI stripping, control char escaping
File abstractions
- File::JSON: JSON file read/write with atomic operations
- File::JSONL: line-delimited JSON (log files), append, iterate
- File::Stream: streaming file reader
- File::Value: single-value file (PID files, status files)
Log processing
- Log: JSONL log format documentation validation
- CoverageAggregator: coverage data aggregation (ByRun vs ByTest strategies)
- TimeTracker: test timing data collection and reporting
- LogFile: log file reading, event iteration
Events
- Event:
as_json() serialization, trace() accessor, facet_data structure
- EventFacet::Binary: binary data facet handling
TAP bridge
- TAP::Harness::Yath: TAP::Harness compatibility wrapper —
runtests() method
- Aggregator: TAP result aggregation
Test tools
- HarnessTester: test helpers for harness testing — event generation, assertion utilities
Notes
Many of these are excellent good first issue candidates, especially the utility functions and file abstractions — self-contained, well-defined input/output, no complex setup needed.
Test2::Harness::Util already has known edge cases documented:
@INC can contain blessed objects and code refs (must filter for JSON encoding)
sanitize_filename() must handle ANSI CSI/OSC sequences
Context
Across
t/unit/Test2/Harness/,t/unit/Test2/Tools/,t/unit/Test2/EventFacet/, andt/unit/TAP/there are 19 test stubs withskip_all "write me"placeholders. These cover utility functions, event handling, log processing, file I/O abstractions, and the TAP compatibility bridge.Modules to test
Utilities (8 files):
Util.t→Test2::Harness::Util(core utility functions)Util/Deprecated.t,Util/File.t,Util/File/JSON.t,Util/File/JSONL.t,Util/File/Stream.t,Util/File/Value.t,Util/HashBase.tLog processing (4 files):
Log.t→Test2::Harness::LogLog/CoverageAggregator.t,Log/CoverageAggregator/ByRun.t,Log/CoverageAggregator/ByTest.tLog/TimeTracker.t→Test2::Harness::Log::TimeTrackerUtil/LogFile.t→Test2::Harness::Util::LogFileEvents (1 file):
Event.t→Test2::Harness::EventTest2/EventFacet/Binary.t→Test2::EventFacet::BinaryTAP bridge (2 files):
TAP/Harness/Yath.t→TAP::Harness::YathTAP/Harness/Yath/Aggregator.t→TAP::Harness::Yath::AggregatorTest tools (1 file):
Test2/Tools/HarnessTester.t→Test2::Tools::HarnessTesterSuggested test scenarios
Utility functions (
Test2::Harness::Util)clean_path()— path normalization, absolute path handlingfind_in_updir()— upward directory searchis_same_file()— inode comparisonmod2file()/file2mod()— module ↔ file path conversionfqmod()— fully-qualified module name resolutionparse_exit()— exit code interpretation (signal, core dump, status)open_file()/read_file()/write_file()/write_file_atomic()— file I/Olock_file()/unlock_file()— file lockingsanitize_filename()— ANSI stripping, control char escapingFile abstractions
Log processing
Events
as_json()serialization,trace()accessor, facet_data structureTAP bridge
runtests()methodTest tools
Notes
Many of these are excellent good first issue candidates, especially the utility functions and file abstractions — self-contained, well-defined input/output, no complex setup needed.
Test2::Harness::Utilalready has known edge cases documented:@INCcan contain blessed objects and code refs (must filter for JSON encoding)sanitize_filename()must handle ANSI CSI/OSC sequences