I0913 — The provider configuration is generated, and the cheap profile is declared
Generate the Fly configuration from the canonical object — application, region, port, resources, autostart and autostop, health check, concurrency — and declare the cheap cost profile as data that a reader and a check can both see.
BLOCKED wave 3 · p0 · implementation profile · parallel safe
Blocked. This issue cannot start until I0902, I0903 are done. The status is derived from that, not declared.
Objective
Generate the Fly configuration from the canonical object — application, region, port, resources, autostart and autostop, health check, concurrency — and declare the cheap cost profile as data that a reader and a check can both see.
Why
fly.toml at the repository root is excellent for a developer and unacceptable as a second source of truth. Generating it keeps the ergonomics and removes the drift; declaring the cost profile makes an expensive change deliberate and visible in review.
Current state
No fly.toml exists. No region, resource envelope or cost profile is stated anywhere.
Desired state
fly.toml is generated, marked as generated with its source and regeneration command, validated by the provider's own validator, and every value in it traces to the canonical object.
Scope
- fly.toml
- apps/majordomus-cli/src/deploy/fly.rs
Out of scope
- A second configuration file for a high-availability profile
- Any volume, extra service or extra address that the deployment does not require
- Any secret value
Dependencies
- I0902BLOCKED The deployment object becomes typed Rust that refuses nonsense
- I0903BLOCKED Deployment reads are declared once and projected everywhere
What waits on this
- I0914BLOCKED One deployment core, one command, and a dry run that mutates nothing
- I0926BLOCKED The deployment documentation is generated and reachable
- I0931BLOCKED The application exists, one machine runs it, and the URL answers
Acceptance criteria
- Every value in the generated configuration traces to the canonical object, and changing the object changes the configuration on regeneration
- The generated file carries a header naming its source and its regeneration command without invalidating the format
- The region is chosen deliberately for the intended audience and persisted in the canonical object rather than hardcoded in the projection
- The cheap profile — one machine, shared CPU, the declared memory, minimum running zero, autostart on, autostop enabled, one region, no volume — is declared as data and asserted by a check
- A service health check points at the canonical route with a startup grace period taken from the measured cold start
- Concurrency limits follow the measured behaviour of the server rather than an arbitrary number
- The provider's own configuration validator accepts the generated file
Validation
- majordomus generate --check
- fly config validate
Evidence required
- generated_flytoml
- region_from_spec
- cheap_profile
- fly_config_validate
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Risk
The high-availability profile invites a second configuration file. It must be a derived override of the same base or documented prose, never a parallel file to maintain.
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/I0913.yaml. Read it back with majordomus plan show I0913.