+
+ ETL PoC scenarios
+
+ {schema
+ ? `${schema.steps.length} steps · ${schema.mappings.length} cols`
+ : "schema loading…"}
+
+
+ hydrated {hydration.hydratedScenarios} scenarios / {hydration.pagesHydrated}{" "}
+ pages
+
+
+ fetch ms — r:{hydration.fetchMsByEntity.results.toFixed(0)} · m:
+ {hydration.fetchMsByEntity.metrics.toFixed(0)} · t:
+ {hydration.fetchMsByEntity.testcases.toFixed(0)} · tr:
+ {hydration.fetchMsByEntity.traces.toFixed(0)}
+
+
+ slices:{" "}
+ {hydration.activeSlices.length === 0
+ ? "none (cell-side on-demand)"
+ : hydration.activeSlices.join(", ")}
+ {hydration.activeSlices.length > 0 && hydration.activeSlices.length < 4
+ ? " (predicate-driven)"
+ : ""}
+
+ {/*
+ * Slice-fetch strategy toggle. Changing the mode resets
+ * `hydratedScenarioIdsRef` (in useHydrateScenarios) so the
+ * next render re-hydrates with the new slice set — flip
+ * to "All" to see the bytes/time cost of fetching every
+ * slice; back to "Auto" to see the predicate-driven
+ * savings. Live A/B without a page reload.
+ */}
+
+ hydrate:
+
+ size="small"
+ value={sliceMode}
+ options={[
+ {label: "Auto", value: "auto"},
+ {label: "All slices", value: "all"},
+ ]}
+ onChange={(value) => setSliceMode(value)}
+ />
+
+ {hydration.lastError && (
+
+ hydrate error
+
+ )}
+ {predicate && (
+
+ )}
+
+ runId {runId}
+
+
+
+
+
+
+
+ columns={
+ ivtColumns as unknown as React.ComponentProps<
+ typeof InfiniteVirtualTable
+ >["columns"]
+ }
+ dataSource={filteredRows}
+ loadMore={pagination.loadNextPage}
+ rowKey={(r) => r.key}
+ scopeId={`etl-poc-${runId}`}
+ /*
+ * containerClassName matters: the bare InfiniteVirtualTable
+ * doesn't bound its own scroll container by default — the
+ * container grows to content height, which feeds back into
+ * `useContainerResize` and disables virtualization (rendering
+ * all rows at full height). FeatureShell sets the same
+ * class internally; we mirror it here.
+ */
+ containerClassName="w-full grow min-h-0 overflow-hidden"
+ tableProps={{
+ size: "small",
+ sticky: true,
+ bordered: true,
+ tableLayout: "fixed",
+ }}
+ /*
+ * tableRef gives us a handle on antd's virtual
+ * Table for programmatic scroll. Used by the
+ * "reset to top on predicate change" effect above.
+ */
+ tableRef={tableRef}
+ /*
+ * NOTE: do NOT pass `useIsolatedStore` — the cells need to
+ * read `hydrationVersionAtom` written by the hook above,
+ * which lives in the parent Jotai store. An isolated store
+ * would silently desync the bump signal from the cells.
+ */
+ />
+
+
+