Severity: LOW (UX/footgun). Found during the #67 stress sweep; framing refreshed 2026-07-11 to the current data ingest / --task verbs (RFC-0002 renamed dataset push --category → data ingest --task). The bug itself is unchanged and still live.
Repro (all pass pre-flight, flag silently ignored)
tracebloc data ingest ./tab/... --task tabular_classification --target-size 512x512 # target-size meaningless for tabular
tracebloc data ingest ./tab/... --task tabular_classification --time-column created_at # time-column only for time_to_event_prediction
tracebloc data ingest ./tab/... --task tabular_classification --number-of-keypoints 17 # keypoints only for keypoint_detection
tracebloc data ingest ./img/... --task image_classification --schema a:INT # schema only for tabular / time-series
Each runs as if the flag weren't there — no error, no warning.
Current state (verified 2026-07-11)
All five task-scoped flags are still registered unconditionally in internal/cli/data.go (--target-size ~L308, --schema ~L316, --label-policy ~L319, --time-column ~L322, --number-of-keypoints ~L324). There is no flag-relevance guard anywhere — the only Flags().Changed uses in data.go are for the --table/--category alias resolution, not for relevance checking. So an out-of-task flag is silently dropped.
Why it matters
A user who sets --target-size 256x256 for a tabular ingest (or --schema for images) reasonably expects it to take effect. Silent acceptance means "I set it but it did nothing" with no feedback — the classic footgun. --help documents which flags belong to which task, but nothing enforces or warns at runtime.
Expected
When a flag that's only meaningful for task X is set with task Y, emit a warning (Note: --target-size is ignored for tabular_classification) — or, for clearly-nonsensical combinations, error. At minimum warn; don't silently drop. A single taskScopedFlags relevance table checked after task resolution covers all five.
Part of #67.
Severity: LOW (UX/footgun). Found during the #67 stress sweep; framing refreshed 2026-07-11 to the current
data ingest/--taskverbs (RFC-0002 renameddataset push --category→data ingest --task). The bug itself is unchanged and still live.Repro (all pass pre-flight, flag silently ignored)
Each runs as if the flag weren't there — no error, no warning.
Current state (verified 2026-07-11)
All five task-scoped flags are still registered unconditionally in
internal/cli/data.go(--target-size~L308,--schema~L316,--label-policy~L319,--time-column~L322,--number-of-keypoints~L324). There is no flag-relevance guard anywhere — the onlyFlags().Changeduses indata.goare for the--table/--categoryalias resolution, not for relevance checking. So an out-of-task flag is silently dropped.Why it matters
A user who sets
--target-size 256x256for a tabular ingest (or--schemafor images) reasonably expects it to take effect. Silent acceptance means "I set it but it did nothing" with no feedback — the classic footgun.--helpdocuments which flags belong to which task, but nothing enforces or warns at runtime.Expected
When a flag that's only meaningful for task X is set with task Y, emit a warning (
Note: --target-size is ignored for tabular_classification) — or, for clearly-nonsensical combinations, error. At minimum warn; don't silently drop. A singletaskScopedFlagsrelevance table checked after task resolution covers all five.Part of #67.