Skip to content

Add live upload progress bar for DCM file sync#3068

Draft
sfc-gh-jsommerfeld wants to merge 3 commits into
mainfrom
feature/dcm-upload-progress
Draft

Add live upload progress bar for DCM file sync#3068
sfc-gh-jsommerfeld wants to merge 3 commits into
mainfrom
feature/dcm-upload-progress

Conversation

@sfc-gh-jsommerfeld

@sfc-gh-jsommerfeld sfc-gh-jsommerfeld commented May 31, 2026

Copy link
Copy Markdown

Introduce DeployProgressTracker (progress.py) with a live Rich display that shows the UPLOAD phase as files are synced to a temporary stage before any DCM operation, and establish progress.py as the single source of truth for the phase checklist used by every DCM command.

  • DeployProgressTracker renders a phase checklist; the UPLOAD row shows a braille spinner, a per-group file-count summary, and transitions to a green check when complete.
  • sync_local_files gains an optional progress parameter; when supplied it calls progress.set_upload_context / advance_upload / complete_upload so the UI updates in real time.
  • _summarize_upload_paths replaces _report_files_to_be_deployed: groups files by sources/ subfolder and pads "file " to align with "files".
  • styles.py adds PHASE_DONE / PHASE_RUNNING / PHASE_FAILED color tokens.

Canonical phase model

progress.py owns _PHASES_BY_OPERATION for all operations so the deploy/plan/purge and compile/dependencies command lines can't diverge. Every operation uses the same RENDER → COMPILE → PLAN → DEPLOY/PURGE vocabulary (the consuming commands are wired up in the PRs stacked on top of this one):

  • deploy: UPLOAD → RENDER → COMPILE → PLAN → DEPLOY
  • plan: UPLOAD → RENDER → COMPILE → PLAN
  • compile: UPLOAD → RENDER → COMPILE (runs the server-side ANALYZE statement, but ANALYZE is an implementation detail and is never shown as a phase)
  • purge: RENDER → COMPILE → PLAN → PURGE (no UPLOAD; the server-side DEPLOY phase is displayed as PURGE via a per-operation display-name override)

Pre-review checklist

  • If my changes add or modify user-facing interface (commands, flags, output formats), I consulted maintainers and got sign-off beforehand (how).
  • I've confirmed that instructions included in README.md are still correct after my changes in the codebase.
  • I've added or updated unit tests to verify correctness of my new code.
  • I've added or updated integration tests to verify correctness of my new code.
  • Manually tested on macOS
  • Manually tested on Windows
  • I've confirmed my changes are up-to-date with the target branch.
  • I've described my changes in RELEASE-NOTES.md (see when and how).
  • I've updated documentation if behavior changed.

Changes description

...

Introduce DeployProgressTracker (progress.py) with a live Rich display
that shows the UPLOAD phase as files are synced to a temporary stage
before any DCM operation (deploy, plan, analyze).

- DeployProgressTracker renders a phase checklist; the UPLOAD row shows
  a braille spinner, a per-group file-count summary, and transitions to
  a green check when complete.
- sync_local_files gains an optional `progress` parameter; when supplied
  it calls progress.set_upload_context / advance_upload / complete_upload
  so the UI updates in real time.
- _summarize_upload_paths replaces _report_files_to_be_deployed: groups
  files by sources/ subfolder and pads "file " to align with "files".
- styles.py adds PHASE_DONE / PHASE_RUNNING / PHASE_FAILED color tokens.

Co-authored-by: Cursor <cursoragent@cursor.com>
@sfc-gh-jsommerfeld
sfc-gh-jsommerfeld requested a review from a team as a code owner May 31, 2026 20:31
@sfc-gh-jsommerfeld
sfc-gh-jsommerfeld marked this pull request as draft May 31, 2026 20:31
Make progress.py the single source of truth for the phase checklist so the
deploy/plan/purge and compile/dependencies command lines can't diverge:

- every operation uses the same RENDER -> COMPILE -> PLAN -> DEPLOY/PURGE
  vocabulary
- the "compile" operation runs the server-side ANALYZE statement, but ANALYZE
  is an implementation detail and is never shown as a phase (it renders
  RENDER -> COMPILE and stops)
- add the server-side "purge" operation (no UPLOAD; DEPLOY shown as PURGE)
  and per-operation display-name overrides

Co-authored-by: Cursor <cursoragent@cursor.com>
Collapse the two divergent blues — the periwinkle hex #a0a8fe (refresh
status / unknown rows) and the terminal-default named "blue" (running
phase, progress bar/spinner) — onto one BLUE constant in styles.py, and
route progress.py's hardcoded style="blue" literals through it, so every
blue in DCM output renders the same hue.

Co-authored-by: Cursor <cursoragent@cursor.com>
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