Skip to content

MILAB-7194: store picked columns as ids and gates and conditions as column value references - #16

Open
AStaroverov wants to merge 6 commits into
mainfrom
MILAB-7194_column-value-refs
Open

AStaroverov wants to merge 6 commits into
mainfrom
MILAB-7194_column-value-refs

Conversation

@AStaroverov

@AStaroverov AStaroverov commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

The block stores the columns it picks as result-pool column ids and the gates and conditions it picks as column value references of the gate and condition columns, so the metadata block knows which of its values this block uses and a missing pick is explained in place. Behaviour is unchanged otherwise: every check that disables the run stays.

  • Columns. The dataset and the condition, gate and sort-fraction columns are result-pool ids, found through ColumnsCollection(["result_pool"]) / deriveColumnOptions.
  • Picked values. gateOrder, inputGate and excludedConditions are ColumnValueIds. The ranks the workflow receives are keyed by the same ids and turned back into plain gate values at workflow entry. The model reads the values of the metadata columns and the sample names; the settings panel no longer fetches column data.
  • Value snapshots. gateValues and conditionValues, written when a column is picked, are kept as ColumnValueId[], so the checks against them stay: a gate column with no values, a gate or an input the gate column does not carry, and every condition excluded still disable the run. A pick missing from the column also shows as not available, with a tooltip naming the block that was to provide it.
  • Migration. Step Ver_2026_10_21 converts the stored dataset ref to an id and clears the anchored condition, gate and sort-fraction columns with the values picked in them and their snapshots. Kind params carry the new forms, snapshots included, so templates made for the earlier kind cannot be applied. Major bump.
  • Workflow. The dataset id is decoded into the anchor ref, metadata columns come through the bundle by id, picked values are unwrapped with columnValue.valueOf and passed to the software as text.
  • Deprecated API. 14 uses in the model before, 0 after; PlMaskIcon24 replaced by PlIcon24.

Unpublished SDK changes in milaboratory/platforma#1911 (ColumnValueId, readColumnValues / deriveColumnValueOptions, column links and the ui-vue picker hints, workflow.column-value). CI builds after their release and an SDK catalog bump here; locally it builds against packed tarballs, which are not part of this PR.

Checked: forced build 12/12, software tests 250. Not run: a run on a live backend.

RetriggerView in GreptileConfidence Score: 5/5

No new blocking issue was found in the changes since the previous review.

Summary

The PR stores selected columns by their result-pool IDs and selected gates and conditions by references to their column values.

  • Saved picks keep the identity of the column and block that supplied them.
  • The settings drawer shows metadata values with their source columns.
  • The scoring workflow turns source-aware picks into the text values it uses.

Important touched types:

  • ColumnUniversalId: Identifies a column and its producing block. It replaces dataset refs and anchored metadata IDs.
  • ColumnValueId: Identifies a value together with its column. It replaces plain strings in gate picks, exclusions, and snapshots.
  • BlockData: Holds saved settings and view state. Its column and value picks now use the new IDs.
  • BlockArgs: Holds workflow inputs. Its ranks use value IDs as keys, and required column fields can be absent while settings are incomplete.
  • BlockParams: Holds template settings. Its column picks and value snapshots now use the new IDs.
  • ColumnFrame: Describes a column as resolving, absent, or present with a readable frame. It replaces model-provided value lists.
  • ColumnValueOptionsState: Tracks a UI read as loading, absent, read, or failed.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  Pool["Upstream columns"] --> Model["Model: column IDs and frames"]
  Model --> UI["Settings: read values and save picks"]
  UI --> Data["BlockData: column and value IDs"]
  Data --> Checks["settingsIssues / argsIssues"]
  Checks --> Args["BlockArgs"]
  Args --> Workflow["Workflow: resolve columns and unwrap values"]
  Workflow --> Software["Software: plain gate and condition text"]
Loading

Reviews (3) · Last reviewed commit: "MILAB-7194: offer the unsorted input fro..." · Reviewed by Greptile

Comment thread ui/src/components/SettingsDrawer.vue Resolved
…h frames

args() builds args from whatever is configured and argsIssues() says what keeps the block from
running, so the app sees the columns the block references while it is still being set up.

The metadata values and the sample names are read in the UI, through a frame of each column, so
a column of any storage format can be picked from; a column that is gone or cannot be read says
why under its picker.
@AStaroverov

Copy link
Copy Markdown
Contributor Author

@greptileai

Comment thread ui/src/components/SettingsDrawer.vue Resolved
@AStaroverov

Copy link
Copy Markdown
Contributor Author

@greptileai

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant