Skip to content

fix(apps): label deployment lists from the lifecycle, not the raw status - #70

Merged
v0l merged 1 commit into
mainfrom
fix/deployment-list-labels
Jul 28, 2026
Merged

fix(apps): label deployment lists from the lifecycle, not the raw status#70
v0l merged 1 commit into
mainfrom
fix/deployment-list-labels

Conversation

@v0l

@v0l v0l commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Closes #69.

/account/apps labelled each row from the operator status alone, so a never-paid deployment — which the operator writes back as stopped — read Stopped in the list and Needs payment on its own page after #68. Two names for one state, one click apart, on the screen a customer lands on first.

deploymentStatus now takes the DeploymentLifecycle that #68 already derives instead of an AppDeploymentStatus, and the deployment page's local copy of the same switch is deleted. One mapper, three surfaces.

/apps/:id's "Your deployments" list is fixed with it (app.tsx:313) — identical defect one page over. The issue names /account/apps; leaving the other list saying "Stopped" while its own page says "Needs payment" would reproduce the bug being closed.

Measured

Headless Chrome, signed in, stub serving one deployment per state. Both lists, all nine fixtures:

fixture b2160e4 this branch
unpaid STOPPED NEEDS PAYMENT
expired STOPPED EXPIRED
deploying (desired=running) STOPPED DEPLOYING
deploying (status=pending) PENDING DEPLOYING
running / stopped / error / deleting unchanged unchanged
billing_state: null STOPPED STOPPED

The last row is unchanged on purpose: an unresolved subscription is an operational fault, not a billing verdict.

No new strings — every label already existed, and Pending is still used by account-subscription.tsx:158 and account-referral.tsx:720, so src/locales/en.json is untouched.

Not bumping docs/agents-common here — please confirm

@Alejandra asked for the submodule bump in this PR. I have left it at a047e25, because bumping today does not do what was asked:

  • docs: keep comments and commit messages short, and don't name apps in code agents#1 is still open. The verbosity lines are not on main yet, so there is nothing to pull in for them.
  • The one commit the bump would pull in is d12ce93, "never push commits without explicit per-message instruction" — which adds to common.md: "Never auto-commit changes. Always ask the user before committing" and "Never push commits unless the user explicitly asks you to push in that specific message."

That is a real behavioural rule and it contradicts how this queue currently runs — every issue I have been handed ends in a pushed branch and an open PR without a separate "push" instruction. Importing it as a side effect of a labelling fix seemed like the wrong way for it to arrive. Happy to bump the moment agents#1 merges, and happy to bump to d12ce93 now if the push rule is intended to apply to me — but that is a decision, not a chore.

Checks

bunx tsc --noEmit clean, bun run build exit 0. src/pages/app.tsx fails prettier --check both before and after this change (pre-existing on main) and is not reformatted here. Commit unsigned (--no-gpg-sign): no pinentry TTY.

Closes #69.

`/account/apps` labelled each row from the operator `status` alone, so a
never-paid deployment — written back as `stopped` — read **Stopped** in the
list and **Needs payment** on its own page after web#68. Two names for one
state, one click apart, and the list is the screen a customer lands on first.

`deploymentStatus` now takes the `DeploymentLifecycle` that web#68 already
derives, rather than an `AppDeploymentStatus`, and the deployment page's local
copy of the same switch is gone. One mapper, three surfaces, so the page that
gates its sections on a state and the lists that label it cannot drift.

`/apps/:id`'s "Your deployments" list (`app.tsx:313`) had the identical defect
one page over and is fixed with it. The issue names `/account/apps`; leaving
the other list saying "Stopped" while its own page says "Needs payment" would
have been reproducing the bug being closed.

Measured in headless Chrome, signed in, against a stub serving one deployment
per state:

    fixture                        b2160e4    this branch
    unpaid                         STOPPED    NEEDS PAYMENT
    expired                        STOPPED    EXPIRED
    deploying (desired=running)    STOPPED    DEPLOYING
    deploying (status=pending)     PENDING    DEPLOYING
    billing_state null             STOPPED    STOPPED

Both lists now read what `/account/apps/deployments/{id}` reads, in all nine
fixtures. The null case is unchanged on purpose: an unresolved subscription is
an operational fault, not a billing verdict.

No new strings — every label already existed, and `Pending` is still used by
`account-subscription.tsx:158` and `account-referral.tsx:720`, so `en.json` is
untouched.

`bunx tsc --noEmit` clean, `bun run build` exit 0. `src/pages/app.tsx` fails
`prettier --check` before and after this change; not reformatted here.

Signed-off-by: Kieran <kieran@harkin.me>
@v0l
v0l merged commit 0b56b69 into main Jul 28, 2026
3 checks passed
@v0l
v0l deleted the fix/deployment-list-labels branch July 28, 2026 07:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

/account/apps says "Stopped" where the deployment page says "Needs payment"

1 participant