topmark.pipeline.machine.payloads¶
topmark / pipeline / machine / payloads
Payload builders for pipeline-related machine-readable output.
This module contains pure helpers that build the payload fragments used by
pipeline machine-readable output for check, strip, and probe.
Scope:
These helpers do **not**:
- add `"meta"` / `"kind"` envelopes,
- choose between JSON vs NDJSON record layout,
- serialize (`json.dumps`) or print.
They only construct the domain payload shapes consumed by envelope builders
in [`topmark.core.machine.envelopes`][topmark.core.machine.envelopes]
(JSON envelopes and NDJSON records).
Naming conventions:
- `build_*_payload(...) -> <payload object>`: constructs an eager payload object.
- `iter_*_payload_items(...) -> Iterator[...]`: yields payload items lazily.
Probe payloads:
Probe payloads are built from `ProcessingContext.resolution_probe` and include
both ordinary file-type probe results and synthetic filtered results for
explicit inputs excluded during discovery before file-type probing.
build_probe_selection_payload ¶
Build a machine payload for a selected file type or processor.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
selection
|
ResolutionProbeSelection | None
|
Probe selection to serialize, or |
required |
Returns:
| Type | Description |
|---|---|
dict[str, object] | None
|
JSON-compatible selection payload, or |
Source code in src/topmark/pipeline/machine/payloads.py
build_probe_match_payload ¶
Build a machine payload for candidate match signals.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
match
|
ResolutionProbeMatchSignals
|
Probe-visible match signals. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, object]
|
JSON-compatible match payload. |
Source code in src/topmark/pipeline/machine/payloads.py
build_probe_candidate_payload ¶
Build a machine payload for one scored probe candidate.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
candidate
|
ResolutionProbeCandidate
|
Probe candidate to serialize. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, object]
|
JSON-compatible candidate payload including score, selection state, rank, |
dict[str, object]
|
and match signals. |
Source code in src/topmark/pipeline/machine/payloads.py
build_probe_result_payload ¶
Build a machine payload for one resolution probe context.
Filtered explicit inputs are represented as probe results with:
status="filtered"selected_file_type=Noneselected_processor=Nonecandidates=[]
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
result
|
ProcessingContext
|
Processing context containing a resolution probe result. Contexts
without a probe result are serialized as |
required |
Returns:
| Type | Description |
|---|---|
dict[str, object]
|
JSON-compatible probe result payload. |
Source code in src/topmark/pipeline/machine/payloads.py
iter_probe_results_payload_items ¶
Yield per-path resolution probe payloads for machine-readable output.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
results
|
list[ProcessingContext]
|
Ordered list of processing contexts. The list may contain normal file-backed probe contexts and synthetic contexts for explicit inputs filtered before file-type probing. |
required |
Yields:
| Type | Description |
|---|---|
dict[str, object]
|
One probe result payload per context, in the same order as |
Source code in src/topmark/pipeline/machine/payloads.py
iter_processing_results_payload_items ¶
Yield per-file processing result objects for machine-readable output (detail mode).
Each yielded mapping corresponds to one processed file and is produced by
ProcessingContext.to_dict().
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
results
|
list[ProcessingContext]
|
Ordered list of per-file processing contexts. |
required |
Yields:
| Type | Description |
|---|---|
dict[str, object]
|
One per-file result mapping per processed context, in the same order as |
Source code in src/topmark/pipeline/machine/payloads.py
build_processing_results_summary_rows_payload ¶
Build a JSON-friendly summary payload for processing results (summary mode).
The returned payload is a flat list of summary rows, each preserving both bucketing axes:
outcomereasoncount
This avoids collapsing distinct reasons inside the same outcome bucket.
This payload is intended for JSON envelopes where the summary is a flat list, e.g.::
"summary": [
{"outcome": "unchanged", "reason": "no changes needed", "count": 3},
{"outcome": "would insert", "reason": "header missing, changes found", "count": 1}
]
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
results
|
list[ProcessingContext]
|
Ordered list of per-file processing contexts. |
required |
Returns:
| Type | Description |
|---|---|
list[OutcomeSummaryRow]
|
List of |
Source code in src/topmark/pipeline/machine/payloads.py
iter_processing_results_summary_entries ¶
Yield NDJSON-friendly summary rows for processing results.
Each yielded object preserves the full (outcome, reason, count) tuple so
NDJSON summary mode does not collapse sub-buckets inside the same outcome, e.g.:
{"kind": "summary", "meta": {...},
"summary": {"outcome": "unchanged", "reason": "no changes needed", "count": 3}}
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
results
|
list[ProcessingContext]
|
Ordered list of per-file processing contexts. |
required |
Yields:
| Type | Description |
|---|---|
OutcomeSummaryRow
|
One summary row object per |