Download LRTS, convert to Parquet and run COLEMAN¶
This workflow uses real public Karaf test reports, not the owned correctness fixture. It downloads pinned source bytes, converts eight selected reports into Parquet, writes a completion/provenance manifest and executes Random and UCB through the existing native TCPCI runner. Repeating the command reuses verified inputs and resumes the same native checkpoint.
For additional projects and explicit multistage correspondence, see ActiveMQ and Log4j stage views. That new recipe family preserves these original single-stage contracts and receipts.
Use Python 3.14+ and the published 4.13.0 wheel. Pip verifies its SHA-256:
python -m pip install "https://github.com/jacksonpradolima/coleman/releases/download/v4.13.0/coleman-4.13.0-py3-none-any.whl#sha256=bbe2f3cf8954fc27fc8f5a44e3713519aa30bcf2cfdd2aad140f4bcc1ae45abc"
Choose cache and output directories outside Git. No Docker, optional MCP SDK, credentials or provider account is required:
python -m coleman.transports.lrts_etl \
--cache /tmp/coleman-lrts-source-cache \
--output /tmp/coleman-lrts-data \
--fetch --run
# Reopen the same source/data and continue the same native run, offline:
python -m coleman.transports.lrts_etl \
--cache /tmp/coleman-lrts-source-cache \
--output /tmp/coleman-lrts-data \
--run
--fetch explicitly permits the two pinned public HTTPS downloads. A verified
cache hit makes no request. Each request has a 15-second inactivity timeout and
a 300-second elapsed budget checked between reads; this is not an OS deadline
for DNS/headers. Failed acquisitions publish no complete source blob. A retry
reuses completed blobs and restarts any incomplete download from byte zero.
Without --run, the command only prepares data. Exceptions return nonzero and
never print a successful ETL summary. The final JSON reports the completion path,
analytical table, native datasets directory, exclusions and native run location.
What the recipe selects¶
The preset lrts-karaf-first-eight-v1.json pins:
karaf.zipfrom LRTS raw reports v3: 16,571,092 bytes, SHA-256d87c5fa06f5b220ca0f719ba4032719396a5da3dd0776994ceaa32cc2fcd5841;- the 13,698,468-byte metadata CSV at repository revision
2c1b68e9b1d4ec6c4f304869e36af2e3168da889, previously matched byte-for-byte to the original code artifact; - eight outer ZIP members and each nested ZIP's decoded JSON, with independent SHA-256 and byte counts;
- separately reviewed CC BY 4.0 record evidence for metadata and raw reports.
Credit: Runxiang Cheng, Shuai Wang, Reyhaneh Jabbarvand and Darko Marinov, Revisiting Test-Case Prioritization on Long-Running Test Suites, ISSTA 2024. Their dataset/component terms remain separate from COLEMAN's MIT license. The recipe-only disposition keeps downloaded and converted content in external local storage; COLEMAN bundles metadata/pins, not third-party rows or archives.
The slice contains the first eight Karaf builds when sorting the pinned metadata by its scheduled label, PR and source build ID. It is a declared bounded slice, not the entire project/corpus or the authors' confirmatory profile:
| Replay round | Source PR | Source build |
|---|---|---|
| 1 | PR-1213 | 3 |
| 2 | PR-1077 | 2 |
| 3 | PR-1213 | 4 |
| 4 | PR-1077 | 3 |
| 5 | PR-1287 | 1 |
| 6 | PR-1287 | 2 |
| 7 | PR-1288 | 1 |
| 8 | PR-1289 | 1 |
Files you can actually use¶
The JSON summary points to a content-addressed export directory:
corpus-etl/<export-id>/
observations.parquet
builds.parquet
datasets/karaf/features-engineered.parquet
complete.json
observations.parquet preserves 6,876 source method executions, including
repeated labels, skipped/unknown outcomes, unavailable durations, observed zero,
raw suite/node/enclosure identities and raw suite timestamp spelling. Duration
columns explicitly include seconds, source meaning and availability status.
execution_id identifies the actual project/PR/build/suite/case position.
replay_name separately identifies an assumed cross-round label correspondence.
Neither identifies a unique fault.
builds.parquet maps every modeled round back to its actual source PR/build and
preserves typed metadata as canonical JSON. Scheduled epoch labels remain
separate from outcome_available_at, which is null. Per-round replay counts and
eligibility retain rounds with no compatible reported cases.
The native Parquet has 6,567 compatible executions with the existing
BuildId, Name, Duration, CalcPrio, LastRun and Verdict columns, plus
SourceExecutionId for the audit join. The 309 not-run methods remain in the
analytical table and are explicitly excluded from runnable input. Unknown
outcomes and unavailable durations have separate exclusion reasons; neither is
filled with zero or pass. All 29 reported failed executions remain runnable.
complete.json is written last using the existing immutable artifact writer. It
binds the full recipe, actual producer digest, writer version, logical-row digest,
three file digests/sizes/counts, source dataset identities and conserved metadata
and method exclusions. A partial export lacks this receipt. Individual complete
files/cache blobs can survive an interruption and are checked again on retry.
Concurrent identical exports converge; conflicting contents fail closed.
Inspect the result using the exact path printed by the command:
from pathlib import Path
import polars as pl
root = Path("/absolute/export/path/from/the/completion/summary")
observations = pl.read_parquet(root / "observations.parquet")
print(observations.group_by("outcome", "replay_exclusion").len())
print(pl.read_parquet(root / "builds.parquet"))
native = pl.read_parquet(root / "datasets/karaf/features-engineered.parquet")
assert native.height + observations.filter(pl.col("replay_exclusion").is_not_null()).height == observations.height
Meaning of the native run¶
The default run uses existing Random and UCB (c=1) policies, RNFail, seed 42
and a 50% ratio budget, with native Parquet results and checkpoints. Eight rounds
times two policies produce 16 native result rows. Repeating the command resumes
those rows rather than appending another experiment. The exact ETL receipt is
included in the native artifact manifest. Native run parameters/provenance remain
available through the existing RunSpec/API, without a second runner.
This is explicitly a post-hoc serial simulation:
- rounds follow scheduled source labels, not verified completion/availability;
- costs add reported method seconds, not measured runner occupancy or CI latency;
- feedback uses
budget-censored-native-RNFail-zero-nondetection: detected failures within budget earn reward 1; all other prioritized cases, including unscheduled ones, earn reward 0. Zero reward means nondetection, not an observed pass or a calibrated failure probability. Source verdicts remain unchanged; - matching suite/context/class/method labels and occurrence order are an assumed correspondence, not verified stable cross-build identities;
CalcPrio=0is a neutral native input and emptyLastRunretains unavailable history, without creating a wall-clock date;- verdicts count reported failing executions, never independently mapped faults.
The source assessment remains in force. Admission stays
blocked_source_evidence, generalization stays insufficient_evidence and
protected temporal evaluation remains unavailable. The generated files are usable
for inspection and this declared simulation; results cannot establish policy
superiority, prospective savings or confirmatory cross-corpus generalization.
Seeds, PRs and repeated executions do not become independent projects/faults.
Legacy receipts declaring full-reported-labels-after-modeled-round remain
readable and their analytical Parquet remains verifiable. New exports, downloads
and native execution reject that declaration: the existing RNFail learner never
provided full-label feedback. To opt into the corrected model, explicitly create
a recipe with feedback="budget-censored-native-RNFail-zero-nondetection" and
export again. This creates a new recipe/export/run identity; retain the old
receipt unchanged for audit. Missing/unknown feedback declarations reject rather
than acquiring an implicit meaning. Existing results must not be silently relabeled.
Architecture and compatibility¶
flowchart LR
H[Explicit pinned HTTPS download] --> C[Existing verified external cache]
C --> Z[Separate bounded selected-member ZIP recipe]
Z --> J[Existing nested ZIP materializer]
M[Pinned metadata CSV] --> C
J --> L[Existing typed LRTS parser]
C --> L
L --> P[Analytical and native Parquet]
P --> R[Completion receipt written last]
R --> A[Existing native API and RunSpec]
A --> N[Native results and learning checkpoint]
The old complete-package v1 ZIP contract still allows at most 128 entries and rejects ZIP64. The separate selected-member recipe allows an explicitly bounded directory of up to 4,096 entries and 2 MiB metadata. It validates every name/type/local header before decoding only the declared members (at most 128, 64 MiB selected total). Unselected payloads are not decoded/certified. Full container SHA-256 and selected/nested digests remain mandatory. No archive path is used as an output filesystem path.
New ETL/selection contracts require schema version 1 and reject missing/future
versions. Existing native Parquet, source receipts, results and checkpoints keep
their meanings. No legacy migration is performed. Fixed Parquet settings and the
recorded Polars version support byte reproducibility; logical-row identities are
independent of physical encoding. validate_lrts_etl rechecks actual cached
sources and actual Parquet schema/rows/bytes offline rather than trusting a JSON
declaration. Integrity checks do not authenticate historical producer execution.
Reproduce package validation¶
Normal tests use only owned tiny fixtures. For installed real-source verification, first populate the explicit cache above, then run from the source checkout:
COLEMAN_LRTS_ETL_REAL_CACHE=/tmp/coleman-lrts-source-cache \
uv run pytest tests/corpus/test_installed_lrts_etl.py --no-cov -q
This installs a wheel outside the checkout, verifies core import boundaries, converts real source bytes and runs/reopens actual native checkpoints. Network acquisition remains a separate explicit verification. Other projects, larger slices, additional baselines and protected confirmatory evidence remain #261 work.