UX-WF-003 — Present complete and trustworthy selected-run details
| Field | Value |
|---|---|
| Status | Open; source-verified, deployed examples pending |
| Architecture state | Deployed behavior; managed runtime contract inactive |
| Severity | Medium |
| Affected surface | Workflow detail, selected run, Details tab |
| Components | sparqd/oqullus, sparqd/workflow-backend, Airflow |
| Associated issue | Not opened |
Where the problem appears
Select a run bar rather than a task cell and open Details.
Concrete observed case
The run-detail response model contains configuration, logical/execution date, data-interval start and end, trigger origin, note, and last scheduling decision. The selected-run panel renders only Run ID, Run Type, Start Date, End Date, calculated Duration, and State. The remaining data is silently omitted.
If initial retrieval fails, the panel reduces the failure to No run detail available. If a background refresh fails, the previous detail remains visible without a stale or error indicator.
Expected condition
Show the operational fields needed to identify and explain a run: immutable run ID, type, state, logical date, actual start/end, data interval, trigger origin, configuration with safe redaction, note, and freshness. Clearly separate logical time from wall-clock execution time. Preserve the last good value on a refresh failure only when it is labelled stale with the error and observation time.
Cause and evidence
RunDetails/index.tsxdefines the richer Airflow response shape but buildsinfoRowsfrom only six display values.- Duration is recomputed in the browser and keeps advancing when no end date is present, with no distinction between queued and actually running.
- The fetch error is logged to the developer console; the user sees no status, retry action, correlation ID, or last-success timestamp.
- Background errors deliberately retain
runDetailwithout marking it stale.
Why it matters
Users cannot tell what data interval a run processed, whether it was scheduled or externally triggered, or which configuration produced it. During an Airflow failure, apparently current detail can actually be an older observation.
Existing controls and workarounds
Use the run ID to inspect Airflow through the currently permitted legacy path when the omitted metadata is needed. Check browser Network before trusting No run detail available or a detail panel that stops changing.
Alternatives considered
- Recommended: a concise summary plus expandable Timing, Trigger and configuration, and Diagnostics sections, with secret-aware redaction.
- Link to an authorized raw-detail drawer — useful for operators but not a substitute for the core interval and trigger fields.
- Display every raw field in one table — complete but difficult to scan and unsafe unless configuration is classified and redacted.
Component involvement
- sparqd/oqullus owns presentation, stale/error states, and safe expansion behavior.
sparqd/workflow-backendsupplies the future managed response contract, freshness metadata, error categories, and redaction policy. Its OpenFGA authorization is inactive today.- Airflow remains the runtime metadata authority.
Reproduction and verification
Follow WF-S020.
Resolution conditions
Close when the panel distinguishes logical and actual time, exposes the agreed run provenance fields, redacts sensitive configuration, and visibly handles initial and background retrieval failures.
Validation and blockers
Oqullus, workflow-backend, Airflow, UX, operations, and security owners must validate the field set and redaction policy.