Skip to content
Lumaft documentation contents
Lumaft documentation

Reading the operation timeline

What each part of the Operations page means, and what it deliberately refuses to say.

Reading the operation timeline

The Operations page answers "what happened to this stack, and when". This page explains what each part of it means and, just as importantly, what it will not claim.

Reading operations requires operations:read, which every fixed role holds. Transcript bodies need the separate transcript-reader role.

ScreenshotThe Operations page with the attention buttons, the filter bar, a list of operations with Outcome, Changes, and Evidence columns, and the Evidence coverage panel

Two questions every row answers

Outcome is what happened to the operation itself.

Outcome Meaning
succeeded Every retained assertion for this operation reports success
failed Every retained assertion reports failure
conflict Retained assertions disagree. Lumaft keeps both and refuses to pick a winner
cancelled A runner explicitly finalized the run as cancelled
in progress A runner announced the run and its activity lease is still live
incomplete A runner announced the run and its lease expired without a finalize. Lumaft never learned how it ended

Impact is what the operation did to your resources, in the Changes column. It is independent of outcome: a failed operation can still have deleted things, and a successful one can have changed nothing. The detail panel breaks the total down per kind (Delete 3 · Create 1), and a Destructive badge appears when a retained count is positive for delete, delete-replaced, or replace.

Impact has three honest non-answers:

  • No changes recorded — the operation reported counts, and they were all zero.
  • Change detail expired — counts were retained once and retention has removed them. The summary survives; the breakdown does not.
  • Changes not reported — this source never asserted counts. Runner rows read this way unless the wrapper was given an event log. The absence is disclosed, not rendered as zero.

Where a row came from

The Evidence column and the detail panel's Source field always name the provenance:

  • Pulumi backend — Lumaft read this from the backend's own update history with its read-only credentials.
  • Runner (deployment runner) or Runner (developer workflow) — an integration token submitted it. The label reflects the token's authority kind, not a claim about a person.

Lumaft records no human identity for a deployment. Pulumi state does not carry one, and Lumaft does not invent one. No row will tell you who ran an operation.

A wrapped deployment that produces both a runner assertion and a backend record appears as two rows, one per source, each labelled. Lumaft stores the trusted join between them but this build does not collapse them into one row.

Conflicts

conflict means Lumaft retained more than one assertion for one operation and they disagree on the result. Lumaft does not resolve it by taking the newest, the first, or the most trusted source. It shows conflict, keeps every assertion, and leaves the judgement to you. A disagreement between sources is information; silently discarding half of it would destroy the only evidence that something is wrong.

Previews and comparison

preview is an operation kind like update, destroy, refresh, import, rename, and resource-import. A preview appears with its own outcome and, where the source reported them, its own planned counts.

The planned versus actual panel lines a preview's planned counts up against an apply's actual counts. It appears only when Lumaft holds a trusted, explicit correlation between the two (see Runner integration). Otherwise the panel says:

Comparison unresolved. No authorized trusted preview-to-deployment correlation is available. Lumaft does not infer a match from timestamps, stack names, or similar resource counts.

With a correlation, the table marks each change kind Unchanged, Changed, Planned only, or Actual only. If either side has lost its change detail to retention, the panel reads Resource detail expired and renders no comparison rather than an empty one.

Active and incomplete work

A runner can announce a run before it finishes. While its lease is live the row shows in progress and the detail panel shows Not finalized in place of an end time. When the lease expires without a finalize, the outcome becomes incomplete — Lumaft never learned how the run ended and says so rather than assuming failure.

The buttons above the filters offer All, Needs attention, and Succeeded. Needs attention selects cancelled, conflict, failed, and incomplete. To see only running work, choose In progress in the Outcome filter.

Attention is a view over immutable outcomes, not a work queue. You can mark an operation reviewed from its detail panel; marks are per user, and Reset all reviewed marks clears yours.

Coverage and gaps

The Evidence coverage panel keeps the rest of the page honest. It reports the earliest retained and latest accepted evidence in your scope, the retention cutoff and how many assertions retention has already pruned, the current policy revision, and for each backend when collection started and when it last observed successfully.

It shows banners rather than leaving you to infer:

Banner Meaning
History not observed Lumaft has never successfully observed a source in this scope. An empty list is not "nothing happened"
Observed, no retained operations Lumaft observed and retains nothing — a different fact
Coverage exists outside these filters Your filters, not the coverage, are why the list is empty
Before coverage began The window starts before Lumaft first observed. That interval is unknowable
Retention-limited interval Part of the window has passed the retention cutoff
Evidence pruned by retention Assertions in scope have already been removed by policy
Collector coverage is stale A backend's last successful observation is old; treat recency with suspicion

Two more appear per operation: Earlier evidence expired when some of its assertions have been pruned, and Source clock skew flagged when a runner's asserted times disagree with Lumaft's clock beyond the accepted bound.

Lumaft cannot show you what it never saw. History a backend pruned before Lumaft first read that stack is not retained, reconstructed, or estimated.

Filters live in the URL, so any view is a link you can paste into a ticket.

Filter Notes
Backend Exact backend id
Layout All, Legacy, or Project scoped; legacy disables Project
Project / Stack Exact names — no wildcards, no substrings
Outcome One of the reachable outcomes above
Accepted after / Accepted before A half-open window in the timezone shown on the field
Source Present but disabled in this build; the only option is All sources

The timezone control switches every timestamp between UTC and local time and is part of the URL too. Each timestamp offers Copy ISO; each operation offers Copy permalink.

Filters are authorization-aware: an operation outside your scope and one that does not exist return the same message, so the page cannot be used to probe for stacks you cannot read.

Resource detail

From a stack's inventory you can open a resource's history: its retained transitions, each typed baseline, appeared, changed, removed, or reappeared, with the changed fields drawn from a closed list.

Continuity is stated, not assumed. A Gap before this change or History has a gap since the newest transition banner names its reason from a closed vocabulary (stack-missing, last-good-only, duplicate-urn, bound-exceeded, projection-diverged, continuity-expired).

The Operations near this change panel lists operations whose observed window overlaps the transition. Lumaft labels that relationship temporal. It is an overlap in time, never a causal claim. The console does not assert that the listed operation caused the change.

Transcripts

When capture was requested, an operation's detail shows transcript metadata: runner-reported status, retained content, labelled gaps, redaction counts, and expiry. Ordinary readers see the metadata; viewing or downloading text requires the transcript-reader role and loads only after View transcript, as inert text. Redaction cannot identify every secret.

Export

The Export evidence panel downloads the versioned evidence record for exactly one stack and one explicit accepted-time window. It enables once your filters name one backend, one layout, one stack, and both window bounds. The document contains bounded operation metadata, normalized changes, digests, and retention state; never raw state, engine logs, or transcript text. Every page is recorded in the export audit. Export requires operations:export, which administrators hold and viewers do not.