Uh oh!
There was an error while loading. Please reload this page.
feat(data ingest): honest waits + plain-language run output (#172) - #173
Merged
Conversation
The `tracebloc data ingest` run worked but spoke Kubernetes and went
silent at the worst moment. Three UX fixes surfaced by the ingest-flow
audit:
1. Silent hang after submit. WatchJob's waitForJobPod polls up to 5 min
(PodReadyTimeout) for the ingestor Pod to schedule + pull its image,
printing nothing — the CLI looked hung right after the key step. Now
a live spinner ("Waiting for the ingestion to start…", with a Ctrl-C
hint) covers that wait, then a clean "Ingestion started — live
progress:" precedes the log stream. WatchJob takes a nil-safe
*ui.Printer for this; nil (tests) stays silent as before.
2. Undisclosed 1-hour watch cap. JobWatchTimeout is 1h; on expiry the
CLI silently "detached". Step 4 now discloses the follow window up
front — and only when NOT --detach (the hints used to promise
streaming even under --detach, which was itself dishonest).
3. Kubernetes jargon on the happy path. Reworded the run narrative to
plain language: upload-channel wording instead of "stage Pod",
"Submitted — tracebloc is validating your data…", "Connecting to your
workspace to submit the run…", and plain detach/timeout messages. The
raw `kubectl logs` reconnect stays (there is no CLI re-attach verb
yet) but as a labelled optional follow, not jargon in a sentence.
From the pre-PR adversarial review: the green "✔ Ingestion started" now
only shows for a live/completed pod — a Pod already Failed (immediate
crash, or a prior backoffLimit retry) gets a neutral "streaming logs:"
line instead of a success checkmark before its crash output
(waitForJobPod now returns the selected pod's phase). The
pod-wait-timeout detach message no longer claims "you don't need to do
anything" (false for the PSA-rejection / unschedulable subcases the same
path covers).
No control-flow or exit-code changes — output copy + one nil-safe
progress-reporter param. Tests updated for the reworded strings + the
new waitForJobPod phase return.
Closes#172. Part of the data ingest UX sweep (epic #67).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>LukasWodka added a commit
that referenced
this pull request
Jul 7, 2026
…nomy Draft RFC capturing the ingest-UX redesign discussed with Lukas: - Invert the flow: ask for the DATA first, sniff the family from the layout, then offer only the compatible tasks — instead of the current task-first 16-item wall shown before anything is known about the data. - Accept a flexible input path (a bare .csv for tabular/time, a directory otherwise) — today every family requires a directory, even tabular. - Never "upload/push/stage" in user copy — the data stays on the user's own infrastructure; "ingest" umbrella, "copy into your storage" for the move. Rename --category -> --task (required), --intent -> --split. - Reduce ceremony: one environment, so drop "Connect to your workspace" and the cluster/PVC fields; Kubernetes behind --verbose. - The 15 ML tasks with data-scientist-facing names + one-liners (HF / scikit-learn / Papers With Code research); the label column is task-specific (skipped for the self-supervised text tasks). - The taxonomy contract: the task list is duplicated in 5 places across 3 repos with one enforced edge; make the schema enum the single source of truth + cross-repo drift checks. - Phased delivery incl. wiring the 5 CLI-pending text tasks so the CLI matches the platform. Grounded in a code-level audit of CLI develop + the ingestor + the backend. Supersedes the copy in #173 where they conflict. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
saadqbal
commented
Jul 8, 2026
Collaborator
bugbot run |
Bugbot couldn't runBugbot is not enabled for your user on this team. Ask your team administrator to increase your team's hard limit for Bugbot seats or add you to the allowlist in the Cursor dashboard. |
saadqbal
commented
Jul 8, 2026
Collaborator
Clean, careful PR 👍 — one tiny thing: on the fast-completion path |
saadqbal
approved these changes
Jul 8, 2026
Uh oh!
There was an error while loading. Please reload this page.
saadqbal pushed a commit
that referenced
this pull request
Jul 8, 2026
…nomy (#174) * docs(rfc-0002): tracebloc data ingest — flow, terminology & task taxonomy Draft RFC capturing the ingest-UX redesign discussed with Lukas: - Invert the flow: ask for the DATA first, sniff the family from the layout, then offer only the compatible tasks — instead of the current task-first 16-item wall shown before anything is known about the data. - Accept a flexible input path (a bare .csv for tabular/time, a directory otherwise) — today every family requires a directory, even tabular. - Never "upload/push/stage" in user copy — the data stays on the user's own infrastructure; "ingest" umbrella, "copy into your storage" for the move. Rename --category -> --task (required), --intent -> --split. - Reduce ceremony: one environment, so drop "Connect to your workspace" and the cluster/PVC fields; Kubernetes behind --verbose. - The 15 ML tasks with data-scientist-facing names + one-liners (HF / scikit-learn / Papers With Code research); the label column is task-specific (skipped for the self-supervised text tasks). - The taxonomy contract: the task list is duplicated in 5 places across 3 repos with one enforced edge; make the schema enum the single source of truth + cross-repo drift checks. - Phased delivery incl. wiring the 5 CLI-pending text tasks so the CLI matches the platform. Grounded in a code-level audit of CLI develop + the ingestor + the backend. Supersedes the copy in #173 where they conflict. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(rfc-0002): Rev 2 — split→name→path order, file-or-folder echo, label column task-specific Per discussion with Lukas: settle the Phase-1 prompt order (train/test → name → path → task), make the file-or-folder mental model explicit (point at your data in whatever shape it has; the "Found ..." echo removes the confusion), and move the label column fully into the task-specific questions. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(rfc-0002): Rev 3 — label design (kill #340 silent-null) + full 15-task input matrix Rewrite the label section: three shapes (class/target/absent), precise per-family wording (never the ambiguous "label to predict"), and pick-from-real-headers + exact-match-or-hard-fail validation that closes the data-ingestors#340 case-mismatch silent-NULL-label bug. Add the full task-specific input matrix for all 15 tasks. New reconciliation open questions (drop vestigial --label-column for sidecar-labeled vision, forecasting timestamp gap, target_size placement, schema-for-regression). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(rfc-0002): Rev 4 — settle the 4 reconciliation decisions Per Lukas: drop --label-column for sidecar-labeled vision (object detection/keypoint/segmentation); forecasting gets a first-class timestamp prompt + preflight; normalize --target-size to file_options; surface inferred schema for confirmation on the regression family. Task display names remain under review (decoupled from the wire task_id). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
saadqbal
commented
Jul 8, 2026
Collaborator
/fr-pass |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #172 (from the ingest-flow UX audit): the
tracebloc data ingestrun worked but spoke Kubernetes and went silent right after the most important step. Three fixes, output-copy + progress only — no control-flow or exit-code changes.1. No more silent hang after submit
WatchJob'swaitForJobPodpolls up toPodReadyTimeout(5 min) for the ingestor Pod to schedule + pull its image, printing nothing — the CLI looked hung. Now a live spinner ("Waiting for the ingestion to start…", with a Ctrl-C hint) covers that wait, then a cleanIngestion started — live progress:precedes the log stream.WatchJobgained a nil-safe*ui.Printerfor this; passingnil(tests, non-TTY) keeps the old silent behavior.2. The 1-hour watch cap is disclosed up front
JobWatchTimeoutis 1h; on expiry the CLI silently detached. Step 4 now says so — and only when not--detach(the old hints promised streaming even under--detach, which was itself dishonest — an adversarial-review catch).3. Plain language instead of k8s jargon
Reworded the whole run narrative: upload-channel wording instead of
stage Pod,Submitted — tracebloc is validating your data…,Connecting to your workspace to submit the run…, and plain detach/timeout messages. The rawkubectl logsreconnect stays (there's no CLI re-attach verb yet) but as a labelled optional follow.From the adversarial review (folded in)
✔ Ingestion startednow shows only for a live/completed pod — a Pod already Failed (immediate crash, or a prior backoffLimit retry thatbestPodselects) gets a neutralstreaming logs:line, not a success checkmark before its crash output (waitForJobPodnow returns the selected pod's phase).What the user sees now
The full happy-path flow (with the new lines marked) is in the terminal walkthrough I shared with Lukas; the headline change is that the 5-minute post-submit silence is now a live spinner, and every line reads in plain language.
Tests
Updated
submit_test.go(reworded strings),watch_test.go(the newwaitForJobPodphase return + nil-printer callers, with phase assertions added),stage_test.go(new substrings). Fullinternal/...suite green;gofmt/go vetclean.Scope / follow-ups
Independent of #167 (staging reclaim) — this is copy + progress. Deliberately not in scope, noted in #172: the
client/workspace/clusterterminology sweep, the orphan-warningkubectl deletecopy, naming the destination table in the success summary, and a real re-attach verb.Closes#172. Part of the data ingest UX sweep (epic #67).
🤖 Generated with Claude Code