v1.3.3 Plan
Status: Working draft
Branch: designer
Focus: UI revalidation, shared-system consolidation, backend contract sync, and page-by-page refinement
0. Progress Snapshot
- Contract-fix slice
- Pipelines + detail workflow refinement
- Shared stats / overview contract
- Cluster overhaul implementation pass
- Dashboard refinement implementation pass
- Wizard narrowing implementation pass
- Cluster/dashboard interaction cleanup pass
- Stream visibility follow-up captured as GH issue
- MIB source-store/compiler stabilization pass
- Shared contract / API surface audit pass
- Core shell / route truth cleanup pass
- Shared UI system consolidation pass
- Dashboard metrics split pass
- Cluster live-metrics follow-up pass
- Full manual validation sweep
1. Purpose
v1.3.3 is a UI-focused release.
This is not a backend design release in the same sense as the archived v1.3.x plans.
The job here is to:
- review every page and sub-page in the current UI
- fix broken or stale frontend/backend contracts
- refine weak UX flows
- overhaul the pages that are structurally out of date
- validate both
standaloneandmanagermodes
The target is a UI that is correct, predictable, mode-aware, and easier to continue evolving.
2. Working Principles
2.1 Keep tram/ui/src/api.js as the UI contract layer
All UI-to-backend calls should flow through tram/ui/src/api.js unless there is a very specific reason not to:
- blob download
- raw text response
- browser-only edge case
If a page uses direct fetch() without a good reason, it should be pulled back into api.js.
2.2 Prefer shared UI resources before page-local code
The repo already has shared frontend resources:
tram/ui/src/style.csstram/ui/src/api.jstram/ui/src/utils.js- shared page helpers such as
runs_table.js
Use those first. If the same renderer, modal behavior, or status treatment appears in multiple places, it should be consolidated unless there is a clear behavioral difference.
2.3 Theme parity is required
Active pages must work in both dark and light theme.
- no hardcoded dark-only surfaces on active pages
- buttons, forms, cards, modals, tables, status panels, and toasts should derive from shared tokens/classes
- inline styles should be the exception, not the main styling strategy
2.4 Browser navigation is part of correctness
Routing is not just a convenience layer.
- browser back/forward should work for reachable flows
- route table, visible entrypoints, and actual reachable pages must agree
- dead routes and silent rewrites should be removed or made explicit
2.5 Standalone mode is still supported
Every affected page must be checked in:
- standalone mode
- manager mode
No page should silently assume workers exist.
2.6 Dashboard remains an overview page
The dashboard should stay light:
- summary cards
- one chart
- top pipelines
- recent runs
It should not become a full ops dashboard.
2.7 Detail page owns runtime depth
The pipeline detail page is the correct place for:
- manual trigger lifecycle
- stream placement state
- richer runtime status
- versions
- alerts
- config
2.8 Wizard stays, but with narrower scope
The wizard is still useful for common flows and onboarding. It may remain in the codebase, but it should not compete with the editor or pretend to be a reachable first-class flow while disabled.
3. Current Known Issues
This section now mixes carried-forward release items with the new end-to-end UI audit findings.
Completed slices are recorded in section 8; unresolved items remain here until they are closed or explicitly deferred.
3.1 Contract and API client issues
- Active pages now route through
tram/ui/src/api.js; remaining contract work is limited to standalone coverage rather than structural cleanup.
3.2 Shell, routing, and navigation issues
- Hash navigation now preserves browser history in code, and route truth is explicit (
templates -> pipelines,wizard -> pipelines).
3.3 Shared UI system and styling issues
- The dedicated Templates page has been retired; template browsing now lives in the Pipelines modal plus the backward-compatible
#templatesalias. - Shared run-monitor and YAML diff helpers now back the active dashboard/pipelines/detail/editor flows.
3.4 State, polling, and caching issues
- Version-YAML caching is now scoped per pipeline in code and has been manually validated across pipelines.
3.5 Cluster and overview information gaps
- Dashboard 15-minute overview cards and the bytes-processed load chart still aggregate completed batch runs from
run_history; they do not show in-progress long-running batch totals mid-run. Follow-up tracked in#22.
3.6 Validation and release-close issues
- Manual validation is complete for the active UI surface in both manager and standalone modes, including alert CRUD and stream-placement checks where applicable.
- Long-running stream-state correctness remains deferred in
#17
4. Main Workstreams
Completed slices are captured in section 8.
The remaining v1.3.3 work is centered on the unresolved items below.
A. Core Correctness / Route / State Cleanup
This comes before any last-mile visual polish.
Target items:
- login-overlay unauthorized toast cleanup
- router history semantics and back/forward behavior
- dead wizard-route / editor-rewrite cleanup
- dashboard poll-interval sync and live recent-runs refresh
- detail version-cache scoping/reset
- action binding hardening for quoted ids/names
Definition of done:
- browser navigation works for reachable routes
- live panels honor configured polling
- version viewers never cross pipeline state
- action handlers tolerate apostrophes and other real-world ids
B. Shared UI System Consolidation
Use the shared resources already in the repo before adding page-local code.
Target items:
- move hardcoded page-local presentation into
tram/ui/src/style.csstokens/classes - normalize buttons, forms, cards, modals, status panels, and toasts
- converge template browsing around the Pipelines modal plus the
#templatesalias - extract shared helpers/renderers where logic is currently duplicated
Definition of done:
- active pages look like the same product in dark and light theme
- shared classes/tokens are the default path
- duplicate renderers/helpers are reduced to justified cases only
C. Shared Contract / API Surface Discipline
Keep tram/ui/src/api.js as the UI contract layer and re-check any remaining drift.
Target items:
- finish pulling page calls back through
api.jswhere reasonable - ensure raw-text/blob paths stay explicit and consistent
- recheck auth/API-key behavior across active pages
Definition of done:
- no remaining accidental direct
fetch()use on active pages - contract handling is explicit for JSON, text, and blob flows
D. Shared Stats / Overview Contract
Define the minimum backend contract needed for:
- dashboard overview
- pipeline summaries
- detail-page runtime summaries
- stream live view
- chart buckets
Target chart controls if feasible:
- period:
1h,6h,24h - granularity:
5m,15m,1h
Definition of done:
- displayed totals and summaries align across pages
- chart labels and bucket math match the selected controls
E. Dashboard + Overview Consistency
Keep dashboard lightweight, but make it truthful.
Target items:
- accurate cards and chart labeling
- recent-runs panel refresh on the same cadence as the live state it implies
- respect saved poll interval
- keep lower panels balanced and scroll behavior sane
Definition of done:
- overview stays light
- live indicators match actual refresh behavior
- visible stats agree with the rest of the UI
F. Pipelines / Detail / Editor / Templates Convergence
These pages are the main operator workflow and should feel like one connected system.
Target items:
- keep return paths, view/download flows, and template deploy flows consistent
- keep detail/editor diff behavior aligned
- keep version/config/runtime surfaces correct after navigation between pipelines
- reduce duplicated template browsing/presentation logic
Pipelines page:
- keep lightweight
- validate stats shown there
- decide whether to add limited summary stats
Detail page:
- fix navigation after edit
- fix manual batch trigger lifecycle
- keep stream placement behavior correct
- improve runtime refresh behavior
- keep version/config/runtime surfaces scoped to the correct pipeline
- reduce duplicated view/download/preview behavior with editor/templates
Definition of done:
- manual batch runs do not leave stale action states
- detail page remains the main runtime/status page
G. Cluster and Standalone Truth Pass
Cluster page should be rebuilt around current backend truth, while preserving standalone support.
Standalone:
- explicitly show standalone state
- do not fall into misleading empty-cluster messaging
Manager:
- show workers correctly
- show stream placement correctly
- show degraded states correctly
Definition of done:
- cluster page is accurate in both modes
H. Wizard Decision / Route Truth
The wizard may stay in the codebase, but the main UI must be honest about its state.
Goals:
- keep disabled state explicit while it is not a first-class release surface
- remove route/entrypoint mismatches
- if later re-enabled, use shared form resources and theme-safe styling
Definition of done:
- no dead route pretending to exist
- future wizard work starts from shared UI resources, not parallel systems
5. Page Status Board
This section is the high-level snapshot only.
Section 7 is the detailed manual-validation source of truth.
Implementation cleanup across active pages is largely done; what remains is a smaller code close-out plus the full manual sweep.
- Core shell: Auth-gated boot, login flow, shared shell/nav polish, topbar/health behavior, and route/history truth are now implemented in code; a final cross-page manual navigation sweep is still pending.
- Dashboard: Overview behavior is implemented with contextual pipeline actions, live recent-runs refresh, saved poll-interval handling, split records/bytes in/out cards backed by the shared stats contract, a bytes-processed load chart with metric toggle and bucket tooltip, and a manual refresh affordance; standalone and final value validation remain. Long-running batch jobs still update the 15-minute overview totals and chart on completion rather than mid-run.
- Pipelines page: Core manager-mode actions are validated; template browsing is now consolidated into the Pipelines modal, and the no-worker run-now failure path is fixed in code; import/export standalone validation plus explicit no-worker manual validation remain.
- Pipeline detail page: Core runtime/config/version flows are validated in manager mode with shared theme-safe modal/result chrome; version-cache scoping and no-worker manual-trigger failure visibility are fixed in code, while alerts CRUD, stream-placement close-out, and standalone/manual validation remain open.
- Pipeline editor: Core load/save/dry-run/connector-test/AI flows are manually validated; shared diff-renderer convergence and the shared-style layout pass are in code, while the final full regression sweep still remains.
- Pipeline wizard: It is intentionally not a release surface in the main flow; the page itself has been moved onto shared styles/event wiring, and any direct route now canonicalizes back to Pipelines while the flow stays disabled.
- Runs page: Manager-mode validation is effectively done; standalone pass remains.
- Schemas page: Current scope, including search and odd-character path actions, is functionally validated; only standalone/non-regression sweep remains.
- MIBs page: Current scope, including search plus raw/compiled download affordances, is functionally validated; only final regression/manual sweep remains.
- Cluster page:
Manager-mode redesign and the live-metrics follow-up are now in code, including the reordered top row, merged input/output summary cards, active-pipelines naming cleanup, worker-level live metrics, and per-worker processed records/bytes totals; standalone-mode behavior and final manual truth validation still need a final pass. Long-running stream-state correctness remains deferred in
#17. - Plugins page: Functional and shared-style cleanup are done.
- Settings page: Core settings/auth flows and shared theme cleanup are in place; API-key connection-test and AI-specific validation remain.
- Templates entry:
The old dedicated Templates page has been removed; the active surface is the Pipelines modal, with
#templatesretained as a backward-compatible deep-link alias that still needs explicit manual validation.
6. Validation Lenses
Each page should be checked for:
- loading state
- empty state
- error state
- auth/API key behavior
- standalone behavior
- manager behavior
- correct navigation in and out
- browser back/forward behavior
- visual consistency with the shared shell/components in dark and light theme
- whether page-local code is duplicating a shared renderer/helper without need
7. Manual Validation Tracker
Use this section as the single detailed page-by-page click-through tracker for a running UI.
Suggested status markers:
[ ]not manually validated[-]partially validated[x]manually validated
For each page, validate both where applicable:
- standalone mode
- manager mode
7.1 Core Shell
- App boot loads without console-breaking behavior
- Login overlay appears only when auth requires it (fresh-session hash boot no longer shows protected-page unauthorized toast)
- Login succeeds and shell becomes usable
- Logout returns to login overlay cleanly
- Sidebar navigation changes pages correctly
- Browser back/forward navigation works for reachable pages after hash-history cleanup
- Route table and visible entrypoints agree (
wizard/templatesalias truth) - Topbar title/subtitle update correctly
- Health indicator updates correctly
- Theme toggle works and persists
7.2 Dashboard
- Page loads without errors
- Summary cards render valid values
- Manual refresh button works
- Bytes-processed load chart renders correctly
- Chart labels match current metric and bucket logic
- Chart metric toggle works
- Chart tooltip shows bytes processed and records out for each bucket
- Pipelines panel renders correctly
- Stopped manual pipelines show
Run nowinstead ofStartin the dashboard action affordance - Recent runs panel renders correctly
- Recent runs panel stays fresh while live polling continues
- Pipelines panel scroll behavior is correct
- Lower panels have equal visual height
- Saved poll interval is respected
- Navigation to Pipelines works
- Navigation to Runs works
- Standalone behavior checked
- Manager behavior checked
- Records In/Out and Bytes In/Out cards display properly
- Dashboard 15-minute card behavior is acceptable for long-running batch runs for
v1.3.3(live mid-run gap tracked in#22)
7.3 Pipelines Page
- Page loads without errors
- Search filter works
- Status filter works
- Type filter works
- Refresh works
- Reload works
- Start action works
- Stop action works
- Run-now action works for manual pipeline
- Run-now failure with no healthy workers surfaces an actionable reason
- Edit action works
- Delete action works
- Export YAML works
- Import new pipeline works
- Import replace flow works
- Import rename flow works
- Templates modal opens correctly
- Template search works
- Template preview works
- Template deploy-to-editor works
- Template modal/button parity within the active Pipelines flow is acceptable
- Actions tolerate pipeline names with apostrophes/odd characters
- Standalone behavior checked
- Manager behavior checked
7.4 Pipeline Detail Page
- Page loads from pipelines page correctly
- Source / sinks / schedule / transforms cards show correct values
- Header meta shows updated-at correctly
- Header/layout respects dark and light theme
- Edit action opens editor correctly
- Save from editor returns to detail page correctly
- Cancel from editor returns correctly
- Start action works for non-manual pipelines
- Stop action works
- Restart action works
- Run-now action works for manual/batch pipeline
- Manual trigger returns to correct state after completion
- Manual trigger failure with no healthy workers creates a visible failed run / actionable reason
- Trigger button does not remain stale after batch completion
- Connector test works
- YAML download works
- Versions tab loads correctly
- Diff modal works
- Diff modal layout/theme works in dark and light mode
- Version YAML view/copy/download/compare stays scoped to current pipeline after visiting another pipeline
- Rollback works
- Config tab loads correctly
- Alerts tab loads correctly
- Alert create works
- Alert edit works
- Alert delete works
- Stream placement / placement card behavior checked when applicable
- Standalone behavior checked
- Manager behavior checked
7.5 Pipeline Editor
- New pipeline editor loads correctly
- Existing pipeline editor loads YAML correctly
- Copy action works
- Diff vs saved works
- Diff / result surfaces are visually aligned with detail/templates shared modal/panel styles after the layout pass
- Dry-run works
- Connector test works
- Save new pipeline works
- Save existing pipeline works
- Cancel works
- AI generate works if configured
- AI modify works if configured
- AI explain/fix after dry-run works if configured
7.6 Pipeline Wizard
- Wizard is intentionally disabled in the main
v1.3.3UI flow - Deferred: future redesign / re-enable pass (not part of the current release close-out)
7.7 Runs Page
- Page loads without errors
- Pipeline filter works
- Status filter works
- Date filter works
- Refresh works
- Error row expansion works
- Export works
- Standalone behavior checked
- Manager behavior checked
7.8 Schemas Page
- Page loads without errors
- Schema list renders correctly
- Search works
- Drag/drop works
- File picker works
- Upload
.protoworks - Upload
.avscworks - Upload
.jsonworks - Upload
.xsdworks - Upload
.yaml/.ymlworks - Upload
.asnworks - Upload
.asn1works - Subdirectory upload works
- Delete works
- Download/Delete works for paths containing spaces or apostrophes
7.9 MIBs Page
- Page loads without errors
- MIB list renders correctly
- Search works
- Upload works
- Download-by-name works
- Raw source entry click downloads
.mib - Compiled entry click downloads
.py - Delete works
7.10 Cluster Page
- Page loads without errors
- Standalone messaging is correct
- Standalone empty state is correct
- Runtime top row and stats row layout/sequence are correct
- Manager worker list renders correctly
- Worker accordion behavior works
- Worker table processed-records / processed-bytes columns render correctly
- Assigned/running pipeline badges render correctly
- Summary merged Input / Output traffic cards render correctly
- Active pipelines table In/Out and Bytes In/Out columns render correctly
- Worker live in/out stats render correctly
- Active pipelines section renders correctly
- Stream row navigation to detail works
- Degraded state behavior checked
- No-worker-configured manager behavior checked
7.11 Plugins Page
- Page loads without errors
- Plugin categories render correctly
- Counts render correctly
- Empty categories render correctly
7.12 Settings Page
- Base URL save works
- API key save works
- Poll interval save works
- Reset URL works
- Connection test works
- Password change works when enabled
- AI config load works
- AI config save works
- AI test works
7.13 Templates Entry (Pipelines Modal / #templates Alias)
- Pipelines templates modal loads without errors
- Search filter works
- Source filter works
- Sink filter works
- Schedule filter works
- Preview modal works
- Deploy-to-editor works
#templatesdeep link opens Pipelines with the templates modal active- Visual parity with shared buttons/modal viewer is achieved
- Preview / deploy behavior is aligned with the Pipelines template flow
7.14 Cross-Page Navigation Flows
- Dashboard -> Pipelines
- Dashboard -> Runs
- Pipelines -> Detail
- Detail -> Editor -> Detail
- Detail -> Runs
- Pipelines -> Editor -> Pipelines
#templatesalias -> Editor- Wizard intentionally disabled in main flow
- Cluster -> Detail
7.15 Shared UI Consistency
- Browser back/forward navigation works across shell-driven flows after route canonicalization
- Reachable routes and visible entrypoints agree (
wizard/templatesalias truth) - Buttons/cards/forms/modals use shared style treatment across active pages
- Dark and light theme both look correct on dashboard/detail/editor/template flows/settings
- Dashboard, detail, editor, and template flows no longer rely on separate duplicated renderers where a shared renderer exists
8. Testing Record
Use this section to separate automated verification from manual verification as work progresses.
Completed Change Summary
-
Python version and image split completed: Dropped Python 3.11 support; minimum is now 3.13 (
requires-python = ">=3.13"). All Docker images upgraded frompython:3.11-slimtopython:3.13-slim. Introduced three distinct images:Dockerfile(standalone — manager+worker union, single-node deployments),Dockerfile.manager(manager-only — scheduling, persistence, schema/MIB management, AI features; no execution connectors), andDockerfile.worker(worker-only — execution connectors and serializers; no scheduling, no UI, no MIB compilation). Addedprotobufextra topyproject.tomlfor worker-side runtime-only protobuf decode, splitting it fromprotobuf_ser(which includes grpcio-tools for manager-side.protocompilation). Regroupedpyproject.tomloptional-dependencies with logical section headers;allextra now includes commented-out excluded entries (s3, gcs, azure, parquet, protobuf_ser, corba) with size and reason notes. CI matrix updated to Python 3.13 only (single job, no matrix). Release workflow updated:dockerjob renameddocker-standalone, newdocker-managerjob added,helmjob depends on all three image jobs. Deploy script (scripts/deploy-kind-tram-dev.sh) updated to build and load all three images and passmanager.image.*to Helm. Helm_helpers.tplextended withtram.managerImagehelper;manager-statefulset.yamlnow uses it;values.yamlgains amanager.imageblock. - Contract-fix slice completed:
dry-run response normalization, runs
from_dtsync, ASN/ASN.1 schema upload support, sharedapi.jsalignment, and cron/editor contract cleanup. - Pipelines/detail refinement completed: return-to-detail-after-edit, manual batch trigger polling, stale button-state cleanup, detail refresh feedback, and run-status sync after completion.
- Shared stats contract completed:
/api/statsnow supports period and granularity controls and returns shared chart/window data used by overview pages. - Dashboard refinement pass completed: controllable period/granularity, synced cards, equal-height lower panels, and scrollable pipeline list while keeping the page overview-only.
- Cluster truth-sync pass completed:
standalone vs manager messaging corrected, page title normalized to
Cluster, running pipeline highlight improved, andDispatched/Live Throughputwording aligned to current behavior. - Wizard narrowing pass completed:
old handwritten wizard field maps replaced by backend-generated
/api/config/schema; wizard scope reduced to common source/sink wiring with refine/editor handoff for advanced shaping; flow reduced to 3 steps (Basics -> Wiring -> Review) with schema-grouped required/optional fields. - Wizard follow-up correction completed:
schema metadata now treats optional simple fields correctly and no longer leaks
PydanticUndefineddefaults; however, the wizard remains temporarily disabled in the main UI flow until a later redesign makes it production-ready. - Plugins page refinement completed:
/api/pluginsnow keeps legacy category-name arrays while also returning UI-friendly plugin details derived from live registry docstrings and backend schema; the page was reshaped from a bare accordion list into searchable category sections with expandable rows, summaries, and config highlights. - Settings / Cluster role split refined:
runtime daemon state (
scheduler,database,uptime) was removed from Settings and consolidated into Cluster so Settings stays configuration-focused while Cluster owns live system/runtime state. - Cluster redesign pass expanded:
sidebar label normalized to
Cluster; runtime state moved into a top strip with execution state, scheduler, database, and uptime; summary stats widened with running/error visibility; worker cards replaced by expandable comparison rows with running/dispatched details and clearer semantics. - Validation model cleanup completed: pipeline config shape now follows shared strict Pydantic schema rules, and filename template token validation is driven by backend-supported runtime tokens instead of one-off UI checks.
- Cluster / dashboard interaction cleanup completed: cluster worker rows now use chevron expand/collapse controls; plugins rows also use chevron expansion; dashboard pipeline row click-to-detail behavior was restored; and cluster worker assignment display was tightened to current controller truth instead of stale worker-pool history.
- Runs / MIBs contract pass completed:
Runs status filtering now mirrors backend run-history states and CSV export now uses the backend
/api/runs?format=csvcontract with auth-aware downloads; MIBs page copy now distinguishes raw.mibupload from dependency-resolving remote download. - Runs / MIBs follow-up refinement completed: pipeline detail no longer carries a second embedded run-history table and now hands off to the shared Runs page with pipeline prefiltering; the shared Runs table now suppresses noisy repeated skip-note strings, shows compact inline skip/DLQ counts, and only surfaces a single top-level failure reason for genuinely failed runs; MIB uploads now support an opt-in remote dependency lookup path plus visible busy/progress state, and the backend classifies builtin/local/resolved/unresolved imports generically so bundled base MIBs do not surface as bogus hard failures.
- Pipelines / detail follow-up refinement continued:
run history now preserves the actual worker node for dispatched pipeline executions instead of always reflecting the manager node, and the detail page exposes a pipeline-scoped Runs tab that reuses the shared
/api/runsresource plus the same shared table/expander renderer used by the standalone Runs page. - Pipeline version-history correctness pass completed: duplicate version rows caused by daemon boot hydration and identical-content updates are now suppressed generically in the backend; rollback now re-activates an existing historical version instead of cloning it into a new row, persists that selected YAML back into the registered pipeline store, and only auto-restarts when the pipeline had actually been active before the rollback request.
- Detail / Versions overhaul pass completed:
the pipeline detail page now opens on
Runsby default withConfigpromoted ahead ofVersions; actions are regrouped into lifecycle-left and tools-right with clearer restart vs refresh affordances; the header now carries title/status context plus refresh stamp; transforms are rendered as a compact flow instead of ballooning pills; andVersionsnow uses a scrollable history list with exact saved timestamps, inlineview/copy/download/compare/rollbackactions, a current-version marker in-row instead of a redundant status column, and a two-sided compare viewer with selectable left/right versions plus synced scrolling. - Schemas / MIBs export affordance follow-up completed: the Schemas page now exposes direct file download from the existing raw schema API route, and the MIBs page now exposes both raw ASN.1 source and compiled Python module visibility in the same table while making raw-source download the primary operator-facing action and compiled-module download a secondary/debug action.
- Detail / MIB polish follow-up completed: the detail header now shows pipeline update time under the title instead of repeating source/sink metadata, the back action was moved to the far-right edge after status badges, lifecycle/tools labels were removed, alert/version/diff modal chrome now uses theme-aware colors with a slightly wider compare dialog, and the shared Runs expander now renders grouped recorded skip reasons instead of only a skipped-count line; on the MIB page, explicit raw/compiled download buttons were removed and the raw-source / compiled artifact entries themselves now trigger download.
- Pipelines / editor polish follow-up completed: the Pipelines page import-conflict and template-selection modals now use the same theme-aware shell as the rest of the UI, template selection inside the Pipelines page gained source/sink/schedule filters plus a cleaner YAML preview, import replace messaging was aligned to backend dedupe semantics, and template-to-editor flows now preserve their return target instead of always dropping back to Pipelines; in the editor, inline diff, dry-run results, connector-test results, and AI assist surfaces were moved off hardcoded dark-only blocks into theme-safe panels that behave correctly in both themes.
- Pipelines / templates interaction follow-up completed:
pipeline start now returns backend-truth feedback (
started,already active,manual,disabled in YAML) so list/detail/dashboard actions no longer toast a false success for disabled configs, and the Pipelines header actions were normalized to the shared secondary button style with explicit labels plus a clearerNew Pipelineentrypoint; the remaining Templates/shared-component visual drift is now folded back into the active v1.3.3 shared UI consolidation pass. - MIB raw-source-store backend pass completed:
shared MIB compile/download wiring now lives in a reusable backend helper used by both the API router and CLI; uploaded/downloaded raw ASN.1 MIB sources are persisted alongside compiled
.pyartifacts so later vendor MIB compiles can resolve local dependencies without re-fetching; delete now removes both compiled and raw-source artifacts; standalone and manager images now preserve bundled base raw MIB sources at build time while workers remain compiled-MIB consumers only. A follow-up hotfix alignedtram[mib]back to thepysmi-lextudioline used by the images, added reader compatibility for camelCase vs snake_casepysmiAPIs, and wired bundled readonly source caches into the runtime compile path. - Shared shell / dashboard / templates cleanup completed:
auth-gated boot no longer flashes protected-page unauthorized errors on fresh-session hash deep links; shared shell, login, and health wiring were cleaned up; dashboard contextual actions now use pipeline metadata so stopped manual pipelines surface
Run now; template view modals were re-centered and clipping-safe; Schemas and MIBs gained search; and wizard plus the remaining active pages were pulled further onto shared styles/event wiring where applicable. - Core shell / shared-renderer / template-consolidation pass completed:
hash navigation now preserves browser-history semantics instead of replace-only rendering;
#templatescanonicalizes to Pipelines and opens the templates modal, while#wizardcanonicalizes back to Pipelines while the flow stays disabled; the legacy dedicated Templates page was removed; shared triggered-run monitoring now backs dashboard/pipelines/detail actions; shared YAML diff rendering now backs detail/editor; the detail version-YAML cache is scoped per pipeline; and no-worker batch dispatch now records a failed run result with the actionable errorNo healthy workers available for dispatchinstead of only flipping pipeline state. - Editor layout cleanup follow-up completed: the editor toolbar is regrouped into clearer action clusters, sidebar cards now use the same shared card/header treatment as the rest of the UI, and the AI/reference panels now behave more consistently across desktop/mobile breakpoints.
- Deferred hotfix captured:
manager/worker stream-state visibility over time remains a separate runtime-state issue and is tracked outside
v1.3.3in GitHub issue#17; it should not block the current UI polish release. - Shared-component parity issue moved back into active scope: template/page modal/button visual parity and similar cross-page consistency issues are no longer treated as deferred follow-up work; they are now part of the active v1.3.3 shared UI consolidation pass.
- Dashboard / cluster metrics follow-up completed:
/api/statsnow returns 15-minutebytes_in/bytes_outtotals alongside records, overview formatting is shared viatram/ui/src/utils.js, dashboard summary cards now split records and bytes into explicit in/out cards, the overview chart now tracks bytes processed (bytes_in + bytes_out) as the primary load signal, and cluster now promotesWorkers / Runtimeinto the runtime strip while the stats row, active pipelines table, and expanded worker details all surface live records/bytes in/out metrics. - Dashboard / cluster operator-polish follow-up completed:
cluster top-row ordering is now
Execution State -> Workers / Runtime -> Uptime -> Database; cluster summary traffic is merged intoInput TrafficandOutput Trafficcards; active-stream naming is aligned toActive Pipelines; worker rows now show processed records/bytes totals; expanded worker details now surfaceActive Runs,Active Streams, andLive Errorsin the head row after health while keeping dispatched pipelines visually neutral; dashboard gained a manual refresh button and the record-output card copy now matches the rest of the in/out cards. The dashboard 15-minute cards and bytes-processed chart still remain completion-based for long-running batch runs. - Dashboard chart UX follow-up completed:
the overview chart now supports a local metric toggle (
Bytes processed/Records out) without changing the shared stats contract, and hover tooltip content now shows both bytes processed and records out for the selected bucket with its time range.
Remaining Active Findings To Close
- No remaining active validation findings remain for
v1.3.3. - Deferred follow-ups only:
dashboard live mid-run batch stats in
#22; long-running stream-state correctness in#17.
Automated
- Targeted backend unit tests for initial contract-fix slice
- UI build for initial contract-fix slice
- Additional targeted tests for later stats/cluster/dashboard changes
- Targeted tests for backend-generated config schema route after router cleanup
- Targeted tests for enriched plugins contract
- Targeted backend router tests for generic MIB import classification and upload resolve-missing flow
- Targeted backend helper + router tests for raw-source-store MIB compilation flow
- UI build verification after Runs / MIBs follow-up refinement
- Targeted backend tests for pipeline version dedupe / rollback activation semantics
- UI build verification after detail / versions overhaul pass
- UI build verification after detail header/theme + MIB click-download polish
- UI build verification after pipelines/editor modal + result-panel polish
- UI build verification after shared shell/dashboard/templates/wizard cleanup
git diff --checkafter shared UI cleanup pass- Targeted backend test for no-worker batch dispatch failed-run recording
- UI build verification after route/history + editor/layout consolidation pass
git diff --checkafter route/history + editor/layout consolidation pass- [-] Broad
tests/unit/test_pipeline_controller.py -qsweep remains timing-sensitive aroundtest_update_identical_yaml_is_noop; the relevant no-worker regression and rerun of the isolated case both passed
Manual
- Manual validation pass completed
- Standalone pass completed
- Manager pass completed
9.1 Remaining Execution Order For v1.3.3
The following order reflects the current release decision:
- keep
v1.3.3focused on UI polish, validation, and contract cleanup - defer long-running stream manager/worker state issues to a later hotfix
Recommended remaining order:
- Final checklist close-out
- Carry deferred follow-ups into the next pass
Current next batch:
- Manual validation closure completed
- Remaining non-close-out work is deferred follow-up tracking only (
#22,#17)
Out of scope for v1.3.3:
- manager/worker stream-state correctness over time
- single-worker stream current worker-assignment modeling
- long-running stream disappearance from cluster/worker live state
10. Execution Order
Recommended order:
- Core correctness / route / state cleanup
- Shared contract / API surface discipline
- Shared UI system consolidation
- Dashboard + pipelines/detail/editor/templates convergence
- Cluster + standalone truth pass
- Full page-by-page regression sweep
Reason:
- fix correctness and navigation first
- then close any remaining contract/API drift
- then eliminate shared-style and duplication drift
- then converge the primary operator workflows
- then finish standalone and cluster truth validation
11. Open Decisions
These should be answered during implementation, not deferred indefinitely.
-
Keep wizard or remove it? Current direction: keep the codepath available if useful, but canonicalize any direct route back to Pipelines while it stays disabled.
-
Should cluster page be overhauled? Current direction: yes.
-
Should dashboard be fine-tuned or overhauled? Current direction: refine, not rebuild as a full ops console.
-
Should Templates page and Pipelines template modal remain separate implementations? Resolved for
v1.3.3: no. The dedicated Templates page is removed; the Pipelines modal is the single active surface, with#templatesretained only as a backward-compatible alias. -
Should pipelines list show limited stats? Current direction: feasible, but keep it lightweight and decide after shared stats contract is defined.
12. Release Done Criteria
v1.3.3 is done when:
- all current pages and sub-pages have been revisited
- known contract/state mismatches are fixed
- browser back/forward navigation works on reachable routes
tram/ui/src/api.jsis the primary frontend API surface again- active pages use shared style tokens/components instead of hardcoded page-local dark-only blocks
- dark and light theme parity is validated on active pages
- duplicated renderers/helpers are consolidated where they currently serve the same UI
- standalone mode is explicitly validated
- manager mode is explicitly validated
- detail page batch/stream runtime behavior is corrected
- dashboard live sections honor configured polling
- cluster page is updated to current reality
- dashboard is improved as an overview page
- wizard/route truth no longer mismatches actual product behavior