Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion docs/adr/0002-react-frontend-replaces-litelement-ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ Do **not** port LitElement patterns — Redux, Webpack, Lit decorators,
`@lit/reactive-element` — into `ui-react`. Screens ported "1:1" mean behaviour parity,
not structural parity.

## Current state (2026-08-08)
## Current state (2026-08-09)

**Ported and merged** (route → page): `/` home, `/models` faceted configuration browser,
`/models/register` and `/models/configure/:slug` (config-first registration replacing the
Expand All @@ -105,6 +105,14 @@ thread wizard and the datasets/parameters/runs/results steps, `/datasets/*`, `/r
including the editor, `/variables` as a standard-variable-primary searchable catalog,
plus OAuth2 callback and login-required routes.

> **Correction (2026-08-09, issue #104).** Until this date the parameters, runs and results
> steps were listed above but were **stubs**: their component was rendered, and nothing ever
> loaded the execution state it reads, so the wizard dead-ended at Parameters. The Datasets
> step wrote no binding either. Both are fixed — `GetThreadExecution` loads the pipeline and
> the two steps persist what they collect. Do not read the paragraph above as a porting
> inventory: a route being listed means a component exists at it, not that its data path is
> wired.

**Not ported** (still Lit-only): Analysis, Emulators, Messages, `models-compare` /
`models-calibrate` / `models-cromo`, thread Visualize and Summary, and the 3,256-LOC
`model-view` detail screen. Some of these are dead or stubbed in the Lit app anyway
Expand Down
10 changes: 10 additions & 0 deletions ui-react/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ui-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
"react-router-dom": "^6.26.0",
"tailwind-merge": "^2.4.0",
"tailwindcss-animate": "^1.0.7",
"ts-md5": "^1.3.1",
"uuid": "^14.0.0",
"zod": "^3.23.0"
},
Expand Down
2 changes: 2 additions & 0 deletions ui-react/src/graphql/generated/execution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ export interface ModelInputFile {
resources?: Array<{ id: string; name: string; url?: string | null; selected?: boolean | null }>;
} | null;
variables?: string[];
/** The model runs without this input bound; the Datasets step may skip it. */
isOptional?: boolean;
}

/** Mirrors ModelIO (output file) from ui legacy */
Expand Down
11 changes: 8 additions & 3 deletions ui-react/src/graphql/generated/modeling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1335,7 +1335,10 @@ export type ModelConfigInfo = {
};

/** A configuration or setup that carries inputs/outputs — the unit extractModelIO consumes. */
export type ModelIOConfig = Pick<ModelConfigInfo, 'id' | 'label' | 'regions' | 'inputs' | 'outputs'> & {
// `regions` is optional: the thread execution query reads a configuration's I/O
// without its regions, and extractModelIO never looks at them.
export type ModelIOConfig = Pick<ModelConfigInfo, 'id' | 'label' | 'inputs' | 'outputs'> & {
regions?: ConfigRegionRef[];
child_configurations?: ModelSetupInfo[];
};

Expand Down Expand Up @@ -1370,8 +1373,10 @@ export type ModelIO = {
};

function specToVar(spec: DatasetSpecRef, optional: boolean): ModelInputVar {
const svs = spec.presentations
.map((p) => p.presentation.standard_variable)
// An input with no variable presentation is a real state in the catalog, and
// it must not take the whole step down with it.
const svs = (spec.presentations ?? [])
.map((p) => p.presentation?.standard_variable)
.filter((sv): sv is StandardVariableRef => !!sv);
return {
id: spec.id,
Expand Down
Loading
Loading