fix(ui-react): load the thread execution pipeline from Hasura (#104) - #105
Merged
Conversation
The Parameters, Runs and Results steps were stubs. threadExecutionData started null in MintThread, no query ever loaded it, and both setters bailed out on null, so the steps were fed an empty object. Parameters showed "Please select model(s) first." with no Continue button, Runs and Results never unlocked, and a satisfied Datasets step still read Pending because datasetsComplete read the same dead field. The Datasets step was a stub too, which the issue did not name: it sent UpdateThreadData with empty `data` and `modelIO`, and that mutation deletes every binding for the thread first. So Continue destroyed the bindings instead of writing them, and the assignment did not survive a reload. - GetThreadExecution loads models, ensembles, bindings, dataslices and execution summaries; threadExecutionFromGQL maps them, mirroring the Lit adapters. - DatasetsStep persists dataslices and thread_model_io, and seeds itself from what is already bound. - UpdateThreadParameters writes thread_model_parameter and the execution summaries, so the Runs step has something to submit. - handleFetchRuns queries executions for a thread model; the summary is polled while runs are in flight. Three defects found while wiring it, each fixed here: - Resource ids were a djb2 hash where Lit writes an MD5 of the URL, and TACC's rows carry the MD5. A dataslice written here would have stored a second row for a file the deployment already had. Verified against a live TACC dataslice. - execution.run_progress is a fraction, not a percentage. The progress bar drew a completed run as a 1%-wide sliver. - total_runs counted parameter values only. A run is one combination of input resources and parameter values, so a 6-file dataslice is 6 runs, not 1 — which is what TACC's own summaries hold. parametersComplete now also requires an execution summary: a model with no adjustable parameters satisfied the binding test vacuously, so the step read done before it had written anything. Corrects docs/adr/0002: parameters/runs/results were listed as ported.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Aug 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #104. Unblocks #92.
The fault
threadExecutionDatastartednullinMintThread, no query ever loaded it, and bothsetters bailed out on
null. Parameters, Runs and Results were fed an empty object, sothe wizard dead-ended at Parameters with
Please select model(s) first.and no Continuebutton.
The Datasets step was a stub too — the issue did not name this. It sent
UpdateThreadDatawithdata: []andmodelIO: [], and that mutation deletes everybinding for the thread before it inserts. Continue destroyed the bindings rather than
writing them.
What this does
GetThreadExecutionloads models with their catalog I/O, data and parameter bindings,dataslices and execution summaries.
threadExecutionFromGQLmaps them, mirroring theLit adapters in
ui/src/util/graphql_adapter.ts.DatasetsSteppersists dataslices andthread_model_io, and seeds itself from what isalready bound.
UpdateThreadParameterswritesthread_model_parameterand the execution summaries, sothe Runs step has something to submit. Byte-for-byte Lit's
update-parameters.graphql.handleFetchRunsqueries executions for a thread model. The summary is polled whileruns are in flight and the poll stops when they land.
buildThreadModelsand the whole-catalog model-tree query are gone fromMintThread—the per-thread query supplies the same inputs.
Three defects found while wiring it
ts-md5, checked against a live TACC dataslice.execution.run_progressis a fraction, not a percentagetotal_runscounted parameter values onlyparametersCompletenow also requires an execution summary: a model with no adjustableparameters satisfied the binding test vacuously and read done before the step had written
anything.
Verification
852 tests green, lint clean, build clean.
Both new read documents were run live against TACC's Hasura: the whole
thread_modelssubtree, every
thread_model_execution_summarycolumn, and the executions query, whichreturned a real run.
thread.thread_dataanddataslice.datasetareuser-role-only, sothose two hops and every write are not yet verified live — that needs a signed-in walk.
Corrects
docs/adr/0002, which listed parameters/runs/results as ported.