Skip to content

flash app delete reports success but leaves the serverless endpoint running and billable #367

Description

@kbennett2000

Summary

flash app delete <name> deletes the app record, prints an unqualified success message, and exits 0 — but the serverless endpoint it deployed is still there. The user is left with a live, billable endpoint they have been told is gone.

Reproduction

Deploy any Flash app, then delete it and ask a second question:

$ flash deploy
✓ deployed to production  2.5s
  hello-flash  https://jayf2t4qi40v9r.api.runpod.ai

$ flash app delete hello-flash
✓ deleted app hello-flash

$ runpodctl serverless list
[
  {
    "id": "jayf2t4qi40v9r",
    "name": "hello-flash",
    "workersMax": 1,
    "idleTimeout": 60,
    "flashboot": true,
    ...
  }
]

runpodctl serverless delete jayf2t4qi40v9r then returns {"deleted": true} and the list returns [].

Expected

Either the endpoint is deleted along with the app, or the message says which resources were removed and which were not — for example deleted app hello-flash (endpoint jayf2t4qi40v9r not removed; delete it with ...).

As it stands there is no warning, no partial-success wording, and no non-zero exit. Nothing in the output distinguishes this from a complete teardown.

Why this one matters more than a cosmetic message

The orphaned endpoint scales to zero, so it costs nothing at rest — which is exactly why it can sit unnoticed indefinitely. It is not visible in flash app list afterwards, because the app record is genuinely gone; it is only visible through runpodctl or the console. A user following the documented teardown path has no reason to look there.

Anyone tearing down in a loop — CI, a test suite, a workshop, or a demo run repeatedly — accumulates these silently.

Environment

  • Runpod Flash CLI v1.19.0
  • runpodctl 2.9.0-c094cac
  • Linux, Python 3.13

Suggested fix

Delete the endpoint as part of app delete, or fail loudly when the app record can be removed but its endpoint cannot. If leaving the endpoint is intentional, the success message should say so and name the command that removes it.

Related in spirit to #363 and #364: in all three cases the CLI reports what it attempted rather than what happened.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions