Forum teuk.org

🧪 Mediabot v3 — Classify the Test Suite Before Making It Faster

in Mediabot · started by TeuK · 5d ago

TeuK · 5d ago

Commit: 35a4932
Version: 3.4dev-20260818_021212

MB660 starts the second half of the test-efficiency work that began with the MB650 profiler.

The goal is deliberately conservative: before attempting faster execution, Mediabot now knows what kind of tests it has.

No parallel execution is introduced yet.


🧭 Why this round exists

The full Mediabot suite has grown to roughly 14–15 minutes.

That is acceptable as a global checkpoint, but too expensive to run after every small development round.

MB650 already gave us timing data. MB660 adds the missing structural layer: classification.

The test runner can now describe test files using the roadmap vocabulary:

PURE
FILESYSTEM
PROCESS
DB
NETWORK

These are capability classifications, not parallel-safety certifications.

That distinction is intentional.


📊 Current inventory

On the reviewed test tree, MB660 reports:

725 discovered test files

Primary class
-------------
PURE        306
FILESYSTEM   27
PROCESS     115
DB          248
NETWORK      29

Capability tags may overlap:

PURE        306
FILESYSTEM   97
PROCESS     181
DB          257
NETWORK      29

A test can therefore touch more than one kind of resource even though it has one primary classification.


🧪 New runner selectors

t/test_commands.pl now supports deterministic classification-oriented selection:

--class
--exclude-class
--class-summary
--list-selected

For example:

perl t/test_commands.pl --class-summary

prints the classification inventory without running the suite.

A caller can also select a subset such as:

perl t/test_commands.pl --class PURE

or exclude a capability:

perl t/test_commands.pl --exclude-class NETWORK

These are selection primitives only.


🚫 What MB660 does not do

MB660 deliberately adds no:

--jobs
--parallel
automatic test reordering
implicit fast mode
silent test skipping

The normal default suite behaviour remains unchanged.

This is important: speed is not useful if it creates a false sense of coverage.


🧠 Conservative classification

The classifier is based on source touchpoints and tries to avoid simplistic categorisation.

For example, merely reading a file or using File::Spec is not enough to call a test FILESYSTEM.

The filesystem classification is aimed at tests that actually create or mutate filesystem state, temporary paths, directories, renames, removals and similar operations.

Likewise, process, database and network indicators are treated as capabilities that can overlap.


🧪 Representative validation

MB660 was validated with a representative runner regression covering the existing crash guards, isolation contracts, MB650 profiling support and the new classifier itself.

Result:

PASSED : 235/235
RC=0

Runtime:

26s

The source guards also passed:

OK: roadmap capability vocabulary is present
OK: include/exclude/summary/list CLI paths are present
OK: classification explicitly refuses parallel-safety claims
OK: MB660 adds no --jobs/--parallel executor
OK: MB650 profiler contract remains intact
MB660_SOURCE_GUARD=OK

A full 14–15 minute suite was intentionally not run for this round.

The purpose of MB660 is precisely to build the infrastructure that will make full-suite runs a checkpoint rather than a reflex after every small change.


🧱 Operational scope

MB660 introduces:

no database schema change
no migration
no runtime configuration change
no service change
no systemd change
no production deployment change

Committed scope:

CHANGELOG.md
README.md
VERSION
t/test_commands.pl
t/lib/TestClassifier.pm
t/cases/842_mb660_test_classification.t

✨ Commit

35a4932
🧪 Classify the Test Suite Before Making It Faster

Version:

3.4dev-20260818_021212

Mediabot’s test suite is not faster yet.

But for the first time, we have a structured map of what it is safe to reason about next.

You must be logged in to reply.