Skip to content

I0903 — Deployment reads are declared once and projected everywhere

Declare the read-only deployment operations as canonical capabilities so that the CLI, the HTTP API, MCP, OpenAPI and the generated documentation all derive from one declaration.

BLOCKED wave 2 · p0 · implementation profile · parallel safe

Part of fly-deployment — A deployment is a projection of the repository model, and a reachable URL is its evidence.

Blocked. This issue cannot start until I0902 is done. The status is derived from that, not declared.

Objective

Declare the read-only deployment operations as canonical capabilities so that the CLI, the HTTP API, MCP, OpenAPI and the generated documentation all derive from one declaration.

Why

The repository's rule is that an operation is declared once and projected; adding deployment to a transport registry, an OpenAPI file or a documentation table by hand is the defect ADR 0004 names.

Current state

The capability registry holds modules for capabilities, graph, health, objects, peers, perf, repository, scope and views. No deployment module exists.

Desired state

A deploy capability module declares the deployment reads, and every projection picks them up from generate with no second registration anywhere.

Scope

  • apps/majordomus-cli/src/capability/builtin/deploy.rs
  • apps/majordomus-cli/src/capability/builtin/mod.rs

Out of scope

  • Mutating operations over HTTP or MCP; deployment mutation belongs to the trusted CLI and CI
  • Hand-edited OpenAPI, route tables or documentation lists

Dependencies

What waits on this

Acceptance criteria

  • Each operation is one capability! declaration with its input, output, stability, exposure and tags
  • The operations appear in the CLI, the HTTP API, the MCP surface, openapi.json and the generated reference without any file listing them a second time
  • No capability performs a mutating deployment action
  • generate --check is green after regeneration and fails when a projection is edited by hand
  • The benchmark coverage projection accounts for the new capabilities, as the coverage rule requires

Validation

  • cargo test --workspace --all-features
  • majordomus generate --check

Evidence required

  • capability_declared
  • projections_derived
  • generate_check
  • benchmark_coverage

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Risk

A deployment status read wants to call flyctl, which turns a cheap capability into a network call on a hot path. Live provider state belongs behind an explicit operation with its own cost, not behind an ordinary read.

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/I0903.yaml. Read it back with majordomus plan show I0903.