system-protobuf-extract (platform, system-utils)
Platform reserved. Decodes HEAT capture DataPacket / DataPacketBundle trees from a parent input-node and emits scoped JSON records. Subset of hydrate-protobuf-v2 targets without requiring core-utils.
Parent: single input-node.
Configuration
| Property | Required | Default | Description |
|---|---|---|---|
extractionTarget | Yes | — | EntityDataEvent, EntityState, or SimulationFrame |
outputFormat | No | json | Only json supported |
lineDelimitedJson | No | false | One record per line; forced true when incrementalHydration is on |
incrementalHydration | No | false | Append new parent outputs using watermark |
enableUploadDeduplication | No | false | Skip upload when md5 matches prior output |
readWindowBytes | No | 8388608 | Bounded read per parent blob |
batchSize | No | 100 | Max parent outputs per run |
timeBudgetSeconds | No | 300 | Cooperative time budget |
filterOriginUuid | No | — | Emit only records from this origin_uuid |
filterOriginIndex | No | — | Emit only records for captureIdentity.origins[index] |
filterEntityId | No | — | Emit only records for this simulation entity id |
filterEntityIndex | No | — | Emit only records for captureIdentity.entities[index] (lane) |
filterEntityName | No | — | Exact entity name match (case-sensitive) |
updateSessionCaptureIdentity | No | smart default | Merge observed origins/entities into session captureIdentity. Default true without index filters; default false when filterOriginIndex or filterEntityIndex is set |
Output shape
Wrapped JSON (default):
{
"records": [
{
"parent_output_id": 1,
"origin_uuid": "…",
"origin_index": 0,
"entity_id": 42,
"entity_name": "Pilot-1",
"entity_index": 0,
"extraction_target": "EntityDataEvent"
}
]
}NDJSON when lineDelimitedJson: true (required for incremental append).
Capture identity and lanes
For multi-user SIM templates, use one registry extract node plus parallel lane nodes. See Capture identity lanes.
{
"extractionTarget": "EntityDataEvent",
"filterEntityIndex": 0,
"updateSessionCaptureIdentity": false,
"lineDelimitedJson": true,
"incrementalHydration": true
}Authoring guidance
- Prefer
EntityDataEventoverSimulationFramewhen possible. - Run parallel branches per target or per lane instead of one deep hydrate chain.
- Pair with
system-arbex-jsandheat-system-next-dimensionfor dashboards.
When core-utils is available, hydrate-protobuf-v2 remains an alternative with CSV output and merge ecosystem.
Shipped preset
heat-capture-mainline-scoped: discovery leaf, identity registry, two entity-index lanes, and scoped mainline. See Capture session templates.