Skip to content

Application approval: manual is validated but deploy never enforces it #106

Open

Description

@shipmill-romamo

Found while writing the CI deploy guide for #89 (PR #104).

Application.spec.approval accepts automatic or manual (config/schemas/v1/application.schema.json). inventory.py parses it into DeploymentApproval and writes it into the inventory, but nothing reads it: cloudfall deploy --yes deploys an application declared approval: manual exactly as it deploys an automatic one. The example config/examples/applications/crm.yaml declares manual, and the Render importer writes "approval": "manual" for every application it imports, so imported projects look gated and aren't.

Checked on main (348ed73): the only references to DeploymentApproval outside tests are its definition in sdk/src/cloudfall/domain.py, the parse and serialisation in sdk/src/cloudfall/inventory.py, and the importer.

What would fix it

Either:

  • deploy honours manual: for example, it refuses --yes for a manual application unless an approval record (the operator's decision store) names that release, so an agent or a CI job can't approve its own deploy
  • or the field is documented as advisory, or deprecated, and the importer stops writing it

The CI guide in #104 tells teams to use GitHub's required reviewers as the real gate meanwhile.

Activity

  1. shipmill-romamo commented on Oct 20, 2026

    @shipmill-romamo
    ContributorAuthor

    Triage: needs a decision. Confirmed on main (a9167f5): approval: manual is parsed into DeploymentApproval and written into the inventory, and nothing reads it, so cloudfall deploy --yes treats manual and automatic the same. The example crm.yaml and every application the Render importer writes say manual. Waits on your decision below.

  2. shipmill-romamo commented on Oct 20, 2026

    @shipmill-romamo
    ContributorAuthor

    @romamo Decision needed: should deploy enforce approval: manual, or should the field stop claiming a gate?

    1. Enforce it, through a spec (recommended): deploy --yes on a manual application refuses unless an approval in the operator's decision store names that release, so an agent or a CI job can't approve its own deploy. That fits "Cloudfall is the conscience", but it breaks every project that declares manual and deploys with --yes today, the example and imported projects included. It needs a spec and a Breaking changelog entry
    2. Document it as advisory: the schema description and the guides say manual is a declaration for the operator and the CI environment's reviewers, and the importer keeps writing it. No user breaks, but the record still carries a field that gates nothing
    3. Deprecate it: validation warns on the field and the importer stops writing it. No break now; removed in a later major

    Reply here with a number or your own answer; shipmill takes this up on the tick after your reply.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneeds-decisionA shipmill session asked a question here; waits for a reply

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions