Async & artifacts

When a tile runs asynchronously, its result is written to your S3 as an artifact and its progress is tracked as status. This page covers both.

Status lifecycle

An async tile moves through these states:

text
REQUESTED ─> RUNNING ─> SUCCEEDED
                   └──> FAILED
                   └──> CANCELLED

The dashboard polls status while a tile is active. On SUCCEEDED, StrataBI loads the artifact and renders the block. On FAILED, the tile shows the failure message. Status rows carry a TTL and expire automatically.

Caution
Status must be reported with the exact uppercase values above. A finished run that reports anything other than SUCCEEDED is treated as failed — this matters when you write your own module Lambdas.

Where artifacts live

Async results are written under a runtime results prefix in your system bucket, keyed by dashboard, session, tile, and run. Result artifacts and scratch objects are expired by S3 lifecycle rules (results after ~2 days, temp after ~1 day), so treat them as regenerable, not durable storage.

Downloading an artifact

Expose a tile's artifact for download by enabling it on the tile:

json
{ "artifact": { "download": true, "label": "⤓", "filename": "sales.parquet" } }

This renders a ⤓ button on the tile. When a downloadable artifact exists, the button presents a time-limited link to it.

Troubleshooting

SymptomLikely cause
Tile stuck on "Processing…"Async runner not invoked or status never written. Check the Lambda and status table.
Tile shows a failure messageThe query or module raised; the message and traceback come from the run.
Download button missingartifact.download not set, or no artifact produced yet.
Blank tile, no errorBlock type can't render the result kind (e.g. a table got non-dataframe data).