ClickHouse / ClickHouse/clickhousectl
`cloud udf delete` is blocked while any version is `building`, undocumented; UDF list/delete output differs from every sibling
- Dominant language
- Rust
- Stars
- 74
- Forks
- 5
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 196
Description
## Validated scope and current-PR plan — 2026-09-11
This section records the QA review and the current decision to finalize existing PRs without opening new PRs. It supersedes the proposed routing/fix suggestions in the original report below; the original observations are retained. Central plan: #757.
### Disposition
Deferred from this existing-PR finalization pass. Keep the issue open; no new PR is requested now. This is not a resolution, a severity downgrade, or a waiver of release acceptance.
### Validation and corrections
Whole-function building precondition is reported live behavior and a reasonable help addition. Empty-state and delete confirmations can be improved locally. Pagination metadata is useful information, not inherently a leak; retain an intelligible count/page indicator. DELETE response JSON overlaps #849/#863 and should follow their output contract decision.
---
## Original QA report
Found in the 2026-09-11 QA sweep of the combined PR stack at [`d2c37f81`](https://github.com/ClickHouse/clickhousectl/commit/d2c37f814fff53fe68d636e34103e2d0550bf84d), top PR #823, installed release build (package version still 0.4.2). Reproduced behaviour only; no implementation included.
Severity: low.
After `udf create` + `udf version create` (both `status: building`), `cloud udf delete ` → `Error: A UDF version is still building and the UDF cannot be deleted`, exit 1, until ~100 s later. The precondition is documented only for `udf version delete` ("versions still building cannot be deleted individually"), not for whole-function `udf delete`, whose CONTEXT says "Deletes every version and detaches the UDF from all services".
Output nits in the same module:
- `udf list` / `version list` / `attachment list` with zero rows print an empty markdown table followed by loose `limit: 100` / `totalRecords: 0` lines; every other empty list prints "No X found". Non-empty lists append the same pagination lines after the table — the only place pagination metadata leaks into the human view.
- `udf delete` / `version delete` print `status: 200` / `requestId: …` (the shared `DeleteResponse` through generic `print_human`) where every sibling prints a sentence. The same `DeleteResponse` pattern backs `settings unset --json` (see #849).
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in the cloud UDF command handlers and the shared DeleteResponse/print_human path mentioned in the report; compare udf list, version list, attachment list, udf delete, and version delete with sibling commands. Check #757, #849, and #863 for the current output-contract decision, then make the whole-function building precondition, empty-state output, pagination display, and delete output consistent with the agreed behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- clickhouse, rust
- Domain
- cli, documentation
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100