Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Self-hosted platform: no command clears the local install record after its database is gone

Open Beginner friendly
#428 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
1/5
Estimated time
1-3 hours
Newbie friendliness
78/100
Issue type
Documentation
Clarity
Clearly specified
Activity status
Active
Tech stack
postgresql, typescript
Domain
backend, cli

Research direction

Read docs/guide/platform/installation/uninstall.md, especially the guidance around line 92 and the “Remove retained resources” list. Document how to clear the local installation record and adjacent recovery and secrets files when the database is permanently gone, then explain how to remove the retained Cloudflare resources by hand. Done when the recovery steps are clear and consistent with the existing resource list.

Written by the indexing model from the issue text.

Description

bug

Problem

If the platform PostgreSQL database is deleted or can no longer be reached, the local
installation record stays, and no Void command can clear it. The installation name stays
blocked on this machine.

database deleted / unreachable
        │
        ▼
void platform uninstall <id>  ──▶ needs the database lifecycle lock first ──▶ fails
void platform install --resume ──▶ reads the saved checkpoint from the database ──▶ fails
void platform install (same name) ──▶ "Installation <id> already uses this name.
                                       Resume it with void platform install --resume" ──▶ loop

A user can still pick a new name, so this is a cleanup dead end, not a full block. The Cloudflare
resources of that installation also stay, and uninstall cannot list them.

Repro (code reading; base 23ddc6e35)

  1. Install a platform (or stop an install after the database claim).
  2. Delete the PostgreSQL database at the provider.
  3. Run void platform uninstall <id>: it stops at the database lock.
  4. Run void platform install --name <same-name>: refused, points to --resume.
  5. Run void platform install --resume --name <id>: it stops at the database read.

Cause

  • Every lifecycle command, uninstall included, takes the database lifecycle lock before any change:
    packages/void/src/cli/platform-management.ts:591-606 (acquirePlatformDatabaseLifecycleLock).
    uninstall --plan reads project Zero Trust state and projects from the database:
    platform-management.ts:311-323.
  • A non-draft resume reads the authoritative manifest from the database first:
    packages/void/src/cli/platform-lifecycle.ts:476-486 (readPlatformDatabaseLifecycleManifest).
  • The name check blocks any record that is not uninstalled:
    packages/void/src/cli/platform-registry.ts:256-268.
  • docs/guide/platform/installation/uninstall.md:92 says uninstall stops when the database cannot
    be reached, with no next step. Deleting ~/.void/platforms/<account>/<id>.json is only mentioned
    for after a finished uninstall (uninstall.md:38).

Options

  1. Docs only: say that when the database is gone for good, the user can delete
    ~/.void/platforms/<account>/<id>.json (and the .recovery.enc / .secrets.enc next to it),
    then remove the Cloudflare resources by hand (the list in "Remove retained resources").
    Smallest; no code risk.
  2. A void platform forget <id> command that removes only the local record after a typed
    confirmation, prints the recorded Cloudflare resources first, and refuses while the database
    is reachable. Needs CLI help, docs and interactive hints.
  3. Let uninstall --purge-resources run without the database when the user passes an explicit
    flag (for example --database-gone). Largest: the database lock and the Zero Trust guard exist
    to stop races with the API, so this needs a careful design of what is still safe to delete.

Recommendation: option 1 now; option 2 if users hit it more than once.

🤖 Generated with Claude Code

https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH

Dominant language
TypeScript
Stars
402
Forks
32
Avg merge
13h 14m
Merged PRs (30d)
73

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from voidzero-dev/void

All issues in voidzero-dev/void

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.