fix(apps): label deployment lists from the lifecycle, not the raw status - #70
Merged
Conversation
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>
This was referenced Jul 28, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #69.
/account/appslabelled each row from the operatorstatusalone, so a never-paid deployment — which the operator writes back asstopped— 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.deploymentStatusnow takes theDeploymentLifecyclethat #68 already derives instead of anAppDeploymentStatus, 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:
b2160e4desired=running)status=pending)billing_state: nullThe 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
Pendingis still used byaccount-subscription.tsx:158andaccount-referral.tsx:720, sosrc/locales/en.jsonis untouched.Not bumping
docs/agents-commonhere — 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:mainyet, so there is nothing to pull in for them.d12ce93, "never push commits without explicit per-message instruction" — which adds tocommon.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
d12ce93now if the push rule is intended to apply to me — but that is a decision, not a chore.Checks
bunx tsc --noEmitclean,bun run buildexit 0.src/pages/app.tsxfailsprettier --checkboth before and after this change (pre-existing onmain) and is not reformatted here. Commit unsigned (--no-gpg-sign): no pinentry TTY.