Skip to content
Cockpit0.29.0
A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live

I0901

The deployment description is a kind of the layer, not a provider file

Where it stands

devtask.issue
Readiness
complete completion is recorded and every required evidence token is present
Status
DONE
Can start
not now
Milestone
Milestone status
ACTIVE
Wave
0
Waiting on
none
Holds back
Behind it in all
31
Evidence
4 of 4
A move writes the repository: it stamps one field of this issue's record and appends one event to the ledger, and a commit will carry both.
The same moves from a terminal

majordomus plan start I0901

majordomus plan verify I0901

majordomus plan done I0901

What it is

Objective
Register `deployment` as a kind of the AI layer — allowed keys, schema, directory contract — and describe this repository's own deployment as one object under .ai/repo/deployments/, so that every later projection reads one file and no provider file is ever authoritative.
Why
A Dockerfile and a fly.toml written by hand would restate the port, the routes, the resources and the build inputs that the repository already knows. The layer already has a mechanism for canonical facts: a kind, its allowed keys, its schema and its directory contract. Deployment is a kind, and everything downstream is a projection.
Now
The kind exists on the trunk: share/kinds.yaml declares deployment against the schema majordomus.deployment/v1, share/allow/deployment.txt closes its keys and is generated from that schema, and .ai/repo/deployments/majordomus.yaml describes this repository's own deployment beside the directory's README. The work reached master with feature/deployment-core and nothing was ever recorded against this issue, so the milestone reads PLANNED 0/32 while its first artifacts are on the trunk. Measured on master 6042f4286, 2026-09-10; not marked complete here because this issue's own validation (bash test/run.sh, bin/majordomus doctor) has not been rerun against that tree.
Wanted
A deployment object is indexed, readable through the same object surface as every other kind, closed by an allow file, described by a schema, and living in a directory that carries its own context document.
Done when
unknown: the record declares no `completion`
Risk
A schema written for one deployment becomes either a Kubernetes-grade abstraction nobody needs or a Fly file with a different extension. It has to be generic where a second provider would plausibly reuse it and concrete everywhere else.

Acceptance

  • The object states the generic deployment facts — application identity, package and binary, listen port, health and readiness routes, resources, machine count, region, autostart and autostop, build inputs, budgets — and keeps provider-specific facts in a named provider block rather than mixed through the generic ones
  • Keys are closed by share/allow/deployment.txt and an unknown key is refused
  • The directory carries a context README that says what is authoritative, what is generated and how to regenerate it, per ADR 0011
  • The object is listed and read through the existing object surface with no code that special-cases it
  • No secret value or credential name appears in the object
Validation
bash test/run.shbin/majordomus doctor
Evidence required
kind_registeredkeys_closeddirectory_contractobject_indexed
Evidence present
kind_registeredobject_indexedkeys_closeddirectory_contract

Scope

Touches
.ai/repo/deploymentsshare/kinds.yamlshare/allow/deployment.txtshare/schemas
Not
Any provider artifact; this issue writes no Dockerfile and no fly.tomlAny Rust; the typed model is I0902Any secret value, credential name or token
Depends on
none
Priority
p0
Profile
deep-work
Parallel safe
true
Owner
unknown: the record declares no `owner`

The work so far

Branches
none
Merged
none
Commits
0
Trunk
master
Sessions
none
Created
2026-09-06
Updated
2026-10-04T10:00:11Z
Started
2026-10-04T09:55:21Z
Verified
2026-10-04T09:59:52Z
Completed
2026-10-04T10:00:11Z

Synchronisation

Adapter
scripts/github-sync
Repository
unknown: the derived plan's header carries no repository
External issue
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
State there
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it

Findings

Nothing is wrong with these records.