Original Westermo results to typed analytical Parquet¶
Inspect real nightly, issue-focused and quarantined embedded-system test results without collapsing abnormal outcomes into failures or inventing duration units. COLEMAN converts an explicit session selection into observations and session tables, verifies both against the pinned original source, and retries offline.
The published wheel below includes the analytical adapter and its typed contracts. Use an explicit source selection and retain the source's unverified semantics.
Install and run outside the checkout¶
With Python 3.14 and uv, using paths outside Git:
uv venv /tmp/coleman-westermo-env --python 3.14
uv pip install --python /tmp/coleman-westermo-env/bin/python \
"https://github.com/jacksonpradolima/coleman/releases/download/v4.19.0/coleman-4.19.0-py3-none-any.whl#sha256=070e21c19fb7e3f2e392bd68706c354ed5ab7f76b86db80f5f1bdc5721b767bd"
mkdir -p /tmp/coleman-westermo-work
cd /tmp/coleman-westermo-work
# Explicit anonymous public fetch, digest verification, conversion and validation.
/tmp/coleman-westermo-env/bin/python -m coleman.transports.westermo_etl \
--fetch --cache /tmp/coleman-westermo-cache --output /tmp/coleman-westermo-output
# Offline retry: identical completed files and receipt; no additional downloads.
/tmp/coleman-westermo-env/bin/python -m coleman.transports.westermo_etl \
--cache /tmp/coleman-westermo-cache --output /tmp/coleman-westermo-output
Keep all source/cache/output paths outside Git. The pinned wheel requires no
checkout for this workflow. --source /path/to/test-results.zip explicitly verifies a local
original archive instead of fetching. To select a compatible frozen session set,
pass --recipe-stdin and redirect the JSON recipe on stdin:
/tmp/coleman-westermo-env/bin/python -m coleman.transports.westermo_etl \
--recipe-stdin --cache /tmp/coleman-westermo-cache \
--output /tmp/coleman-westermo-custom-output < /path/to/recipe.json
Recipe bytes are bounded and schema-checked; they are never interpreted as a
filename. No URL is opened without --fetch.
The packaged example selects the first sixteen nightly sessions on system13
by the publisher's shifted start labels, with their exact (jid, system) keys
frozen in advance. This descriptive example is not a protected evaluation fold.
Its original-source qualification found:
| Quantity | Count |
|---|---|
| Entire input rows checked | 1,063,915 |
| Selected observations | 1,064 |
| Outside-selection rows retained in the raw cache | 1,062,851 |
| Pass / fail / invalid / unmappable | 993 / 31 / 40 / 0 |
| Selected complete / abnormal sessions | 16 / 0 |
These are dependent executions from one industrial source family. Systems, branches, parameter settings and repeated tests do not create independent projects. The complete original release contains abnormal sessions and unmappable outcomes; their absence from this selected example is not evidence of general absence.
Original source, terms and modifications¶
Source: Per Erik Strandberg (2022), The Westermo test results data set, version 1.0, author paper and original public release. The original README explicitly applies CC BY 4.0 to the data; the pinned license and warranty disclaimer remain applicable. Attribution does not imply author endorsement. Preserve this attribution, source/license links and the modification notice when sharing an export.
COLEMAN's modifications are session selection, typed parsing, deterministic row ordering, separate session/observation tables and explicit unknown fields. The original archive stays unchanged in the local cache. No third-party rows, archive or source code are committed. The later enhanced/approximated-duration derivative is a different artifact and is not silently substituted.
| Pin | Value |
|---|---|
| Source commit | 31ca0ab802fd2eecf3455c6622c2c18f5b3fe775 |
| ZIP bytes | 15,072,956 |
| ZIP SHA-256 | 7025cc28601fe9aa02095314a297e53059df5bcd9d331749d456b990d8976dd2 |
| Original TSV bytes | 127,760,900 |
| Original TSV SHA-256 | 6d5a3936230b5c0ace24a817d6eb9ae12ed5df94bac382635b31f05c840dc461 |
Quantities, missingness and evidence boundaries¶
Session duration is reported seconds of session envelope; an abnormal session
has null plus unavailable, whereas a reported zero stays observed zero.
It is not physical runner occupancy or additive per-test work. Per-test
oduration_raw retains its nonnegative integer with unit
westermo-oduration-unverified: the original source description does not explicitly
establish its unit. Negative, fractional and nonfinite durations reject.
Raw outcomes 0/1 map to observed pass/fail. Outcomes 2/3 remain invalid/unmappable
and produce null binary verdicts with unavailable; both raw labels remain
available. A quarantine label records a suite classification, not a proven flaky
test or an independent trial. parameters_raw preserves the literal source text,
including NULL, without guessing whether it means an unknown or absent parameter.
Dates remain author-shifted naive strings, never UTC. First outcome/feature
availability, the planned test universe and physical topology are unverified.
Consequently the receipt explicitly retains blocked_source_evidence; no native
second-budget replay or protected empirical comparison is exposed. This export
does not fill an admitted diversity cell or establish policy superiority.
flowchart LR
Input[Explicit public fetch or local archive] --> Cache[Existing digest-verified source cache]
Cache --> Reader[Bounded typed original TSV reader]
Reader --> Observations[All four outcomes and original identities]
Reader --> Sessions[Session seconds and abnormal-session nulls]
Observations --> Writer[Existing immutable artifact writer]
Sessions --> Writer
Writer --> Complete[Completion receipt published last]
Complete --> Verify[Offline source and file revalidation]
Contracts, recovery and adding a selection¶
Use load_westermo_recipe() from coleman.corpus.westermo_etl to inspect the
packaged WestermoRecipe. Construct a new validated recipe with explicit session
keys to change the selection. Unknown schema versions, duplicate selections,
missing sessions, repeated outcome IDs and conflicting session metadata reject.
Every row is decoded, including outside-selection rows. Bounds are 128 MiB
decoded input, two million rows, 100,000 sessions, 128 selected sessions, 20,000
selected observations and 1,024 characters per field. Each output is at most 64 MiB.
export_westermo_parquet(recipe, cache, ArtifactWriter(output)) returns the
complete.json path. Read it with WestermoReceipt.from_json, then use
validate_westermo_etl(receipt, cache, completion.parent) for actual offline source
and output verification. Parsing a receipt alone verifies metadata only.
Interrupted exports retain individually complete files, with no false completion marker. Concurrent identical retries converge through the existing writer; edited or conflicting files reject. This is source-conversion recovery, separate from native policy checkpoints. Logical digests exclude physical row positions and remain invariant under a source-row permutation; physical file digests preserve those positions. Fixed single-chunk Arrow tables, row groups and writer options avoid execution-thread chunk layout entering Parquet bytes. Producer source and Arrow version are bound into the namespace. Unknown producers require their recorded implementation; old exports and unrelated legacy artifacts are never rewritten or silently migrated.
Continue the workflow¶
Compare evidence types in datasets, retain original source meaning in source admission, and use the research guide for the author paper.