inventory can't sweep an instance — a discovery verb that needs you to have discovered #22

Closed
opened 2026-07-13 18:36:31 +00:00 by dan-claude-bot · 0 comments
dan-claude-bot commented 2026-07-13 18:36:31 +00:00 (Migrated from github.com)

The gap

cast inventory (#19, shipped in #20) reconciles a manifest against one
project and one environment that you name
. But the premise of the verb is that
you are looking at a box you did not build — so you do not know those
coordinates yet.
It is a discovery tool that requires you to have already
discovered.

Consequence, from the first real use, an hour after it merged: an operator
adopting a hand-built box still had to hand-curl /projects, /projects/{uuid}
and /applications to find out where anything lived. The verb could answer "how
does this one spot compare to my manifest?"
but not "what is on this box?"
which is the question that was actually being asked.

Worse: an empty live side reads as quiet, not as wrong

Pointed at a project's production environment (Coolify's auto-created default,
which was empty), inventory reported:

on the box, and in the manifest
    (nothing matched — see both lists below)

in the manifest, NOT on the box
    application  core
    …
on the box, NOT in the manifest
    (none)

5 difference(s) between the manifest and this box.

Every word of that is true, and the overall impression — "the box has nothing;
the manifest has five things"
— is exactly the D-237 lie, which cast refuses
elsewhere. The resources were alive and serving production the whole time, in a
different environment of the same project. (It was named staging. Nobody had
ever swapped it.)

An environment with zero resources is far more often the wrong coordinate than
an empty environment.

Proposal

  1. No --project / --environment → sweep the instance. Every project, every
    environment, every resource, with counts. No manifest needed, no reconciliation
    — just what is here. This is the pass that must come first, and it is the one
    thing cast currently cannot do at all.
  2. With a target → reconcile, exactly as today.
  3. A zero-resource live side must shout, not whisper. Say plainly that an
    empty environment is more likely a wrong coordinate than an empty box, and
    point at the sweep. Same spirit as the absent-target refusal (#12) and the
    absent-resource refusal (#18) — this is the third face of the same lie.

Acceptance

  • cast inventory <slug> --instance <name> with no project/environment prints
    every project → environment → resource on the instance.
  • A targeted inventory that finds zero live resources says so unmistakably, and
    names the sweep as the way to find where things actually are.
  • Reconciliation still requires a target (it needs a manifest, and manifests are
    per-repo) — but looking never does.
## The gap `cast inventory` (#19, shipped in #20) reconciles a manifest against **one project and one environment that you name**. But the premise of the verb is that you are looking at a box you did not build — so **you do not know those coordinates yet.** It is a discovery tool that requires you to have already discovered. Consequence, from the first real use, an hour after it merged: an operator adopting a hand-built box still had to hand-curl `/projects`, `/projects/{uuid}` and `/applications` to find out where anything lived. The verb could answer *"how does this one spot compare to my manifest?"* but not *"what is on this box?"* — which is the question that was actually being asked. ## Worse: an empty live side reads as quiet, not as wrong Pointed at a project's `production` environment (Coolify's auto-created default, which was empty), inventory reported: ``` on the box, and in the manifest (nothing matched — see both lists below) in the manifest, NOT on the box application core … on the box, NOT in the manifest (none) 5 difference(s) between the manifest and this box. ``` Every word of that is true, and the overall impression — *"the box has nothing; the manifest has five things"* — is **exactly the D-237 lie**, which cast refuses elsewhere. The resources were alive and serving production the whole time, in a different environment of the same project. (It was named `staging`. Nobody had ever swapped it.) An environment with **zero** resources is far more often the wrong coordinate than an empty environment. ## Proposal 1. **No `--project` / `--environment` → sweep the instance.** Every project, every environment, every resource, with counts. No manifest needed, no reconciliation — just *what is here*. This is the pass that must come first, and it is the one thing cast currently cannot do at all. 2. **With a target → reconcile**, exactly as today. 3. **A zero-resource live side must shout, not whisper.** Say plainly that an empty environment is more likely a wrong coordinate than an empty box, and point at the sweep. Same spirit as the absent-target refusal (#12) and the absent-resource refusal (#18) — this is the third face of the same lie. ## Acceptance - `cast inventory <slug> --instance <name>` with no project/environment prints every project → environment → resource on the instance. - A targeted inventory that finds zero live resources says so unmistakably, and names the sweep as the way to find where things actually are. - Reconciliation still requires a target (it needs a manifest, and manifests are per-repo) — but *looking* never does.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/cast#22
No description provided.