Skip to main content

Row Lifecycle

This page describes where row data exists at each stage of the pipeline, what is transient, what is persisted, and how errors propagate through the system.


Where Rows Exist

Stage-by-Stage Location

StageRow LocationFormat
File uploadClient memoryBinary file stream
ParseClient memoryTabular representation (headers + rows)
ValidateClient memoryRows with validation status
MaskClient memoryInternal binary format
TransformClient memoryInternal binary format
ProfileClient memoryRows
ExportClient memory → File blobCSV/XLSX binary
SyncClient memory → HTTP requestBatched payloads

Rows remain in the client environment throughout the pipeline. Row content does not traverse RowOps servers.

Client Memory Lifecycle

File bytes


Parse ──► Parsed rows in memory


Validate ──► Valid + Invalid rows in memory


Mask ──► Masked rows in memory


Transform ──► Transformed rows in memory


Export/Sync ──► Blob download or HTTP delivery


Garbage collection ──► Memory released

What Is Transient

Row Content

Row data is transient within a pipeline execution:

  • Not persisted to disk (browser mode): Rows exist only in browser memory
  • Not persisted to RowOps servers: No evidence found that row content is transmitted to or stored on RowOps infrastructure
  • Released after pipeline completion: Memory is released when the pipeline completes or the page is closed

Intermediate Representations

Buffers used between masking, transform, and profiling stages are transient:

  • Created during stage execution
  • Passed to next stage
  • Released when no longer needed

Headless Mode Storage

In headless mode, the adapter uses local filesystem storage:

  • Temporary storage in .rowops/storage/ directory
  • This storage is local to the execution environment, not server-side

What Is Persisted

Server-Side Persistence

RowOps servers persist metadata, not row content:

PersistedContentRow Data Included
Import recordsRow counts, status, timestampsNo
Mapping historyColumn mappings, preset referencesNo (fileHeaders removed)
Validation summariesError counts by typeNo
Audit logsActor, action, entity referencesNo
Usage eventsEvent type, hostnameNo
Sync logsSession ID, event typeNo

What Is Not Persisted Server-Side

No evidence found of server-side persistence for:

  • Full row-level datasets (CSV/XLSX payloads)
  • Individual row values (valid or invalid)
  • Masked or transformed row outputs
  • Column-level profile aggregates with row samples

Caveat: Usage Tracking

Server-side usage and tracking endpoints accept a strict allowlist of flat fields. Unknown fields are rejected and nested objects are forbidden. Payloads still originate from the client, so treat them as metadata-only and never include row values.


Error Propagation

Validation Errors

Validation errors do not halt the pipeline:

  1. Each row is validated independently
  2. Invalid rows are marked with status and error details
  3. Pipeline continues to completion
  4. Both valid and invalid rows are available in results
Row validation ──► Valid? ──► Yes ──► valid[] array

└──► No ──► invalid[] array

└──► {rowIndex, field, code, message}

Invalid Row Availability

Invalid rows remain accessible after validation:

  • validated[] array contains all rows with status markers
  • Downstream consumers can inspect error details
  • Invalid rows can be exported separately for review
  • Invalid rows do not proceed to Mask/Transform by default

Fatal Errors

Some errors halt the pipeline immediately:

Error TypeStageBehavior
Parse failureParsePipeline halts, no rows returned
MaskingFailedErrorMaskPipeline halts, no fallback
TransformFailedErrorTransformPipeline halts, no fallback
Engine initialization failureAnyPipeline cannot start

Fatal errors are fail-closed: no partial results are produced.

Error Information Structure

Validation errors include:

FieldDescription
rowIndexZero-based index of the failing row
fieldField key that failed validation
codeError code (e.g., REQUIRED, TYPE_MISMATCH)
messageHuman-readable error description

Data Flow Boundaries

Client-to-Server Boundary

Data that crosses from client to RowOps servers:

  • Import metadata (row counts, not row content)
  • License verification requests
  • Usage tracking events
  • Audit log entries

Data that does NOT cross to RowOps servers:

  • Row content
  • Cell values
  • File bytes
  • Masked/transformed outputs

Client-to-Target Boundary

Data that crosses from client to user-configured targets:

  • Sync payloads (batched row data)
  • Webhook event payloads

This delivery is client-direct: the client sends data to the target without proxying through RowOps servers.


Memory Considerations

Browser Mode

  • Large files may approach browser memory limits
  • No automatic disk spillover in browser

Headless Mode

  • Local storage provides some spillover capability
  • Memory limits depend on Node.js configuration
  • Large datasets may require chunked processing

What This Page Does Not Cover