I0931 — The application exists, one machine runs it, and the URL answers
Create or resolve the production application, deploy the cheap profile without accidental redundancy, verify the machine inventory and the resources against the declared policy, run the route-derived smoke suite against the public URL, and write the deployment report.
BLOCKED wave 7 · p0 · deep-work profile · runs alone
Blocked. This issue cannot start until I0913, I0914, I0916, I0917, I0918, I0922, I0930 are done. The status is derived from that, not declared.
Objective
Create or resolve the production application, deploy the cheap profile without accidental redundancy, verify the machine inventory and the resources against the declared policy, run the route-derived smoke suite against the public URL, and write the deployment report.
Why
Everything before this is preparation. A deployment that has never run is a hypothesis, and an exit code from a deploy command is not evidence that anything is being served.
Current state
No application exists at any provider.
Desired state
One application, one machine, the declared resources, the declared region, a public HTTPS URL that answers, a smoke suite that passes against it, and a machine-readable report of what was deployed.
Scope
- .ai/repo/deployments
Out of scope
- Creating a new application on any subsequent deploy
- Mutating or deleting any unrelated application
- Accepting a deploy command's exit code as verification
Dependencies
- I0913BLOCKED The provider configuration is generated, and the cheap profile is declared
- I0914BLOCKED One deployment core, one command, and a dry run that mutates nothing
- I0916BLOCKED The smoke suite is derived from the route registry, never written twice
- I0917BLOCKED A bad deployment can be undone deterministically
- I0918BLOCKED The bootstrap credential is used once and belongs to nothing
- I0922BLOCKED The memory hypothesis is tested, not asserted
- I0930BLOCKED The real image runs under the real limits before anything is deployed
What waits on this
- I0929BLOCKED Production deploys from CI with a token scoped to one application
- I0932BLOCKED The milestone is accepted on its evidence
Acceptance criteria
- The authenticated identity and organisation are inspected before anything is created, and an existing intended application is reused rather than duplicated
- The application name is deterministic, and a global collision produces a stable derived name rather than an interactive dead end
- The first deployment does not create redundant machines, and the inventory is inspected from machine-readable output rather than assumed
- The machine count, CPU class, memory, region, autostart, autostop and minimum running are asserted against the declared cheap profile after the deployment
- The public URL answers over HTTPS, redirects behave as intended, and static assets load
- The route-derived smoke suite passes against the public URL, including the websocket, MCP and API surfaces that are served
- A machine-readable deployment report records the application, the URL, the revision, the image, the region, the resources, the measured sizes and the smoke result, following the repository's artifact conventions
Validation
- majordomus deploy
- majordomus deploy status
- majordomus deploy doctor
Evidence required
- app_created
- single_machine
- remote_smoke
- deployment_report
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Risk
This is the issue that spends money and touches a real account. It runs once the container evidence is in, and the inventory assertion is what keeps a mistake from billing indefinitely.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I0931.yaml. Read it back with majordomus plan show I0931.