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

majordomus

The Majordomus layer, served from its container image

What it is

URI
majordomus://deployment/majordomus
Kind
deployment
Identity
majordomus
Path
.ai/repo/deployments/majordomus.yaml
Provenance
declared
Media type
application/yaml
As a capability
deployment.majordomus

Front matter

{
  "schema": "deployment/v1",
  "kind": "deployment",
  "id": "majordomus",
  "title": "The Majordomus layer, served from its container image",
  "description": "The container image of this repository's executable, published to GHCR, serving the AI layer over HTTP and MCP; no hosting provider runs it.",
  "status": "declared",
  "application": "majordomus",
  "build": {
    "package": "majordomus-cli",
    "binary": "majordomus",
    "profile": "release",
    "inputs": [
      "apps/majordomus-cli",
      "share",
      ".ai",
      "docs",
      "lib",
      "bin",
      "test",
      "README.md",
      "AGENTS.md",
      "CLAUDE.md",
      "CONTRIBUTING.md",
      "SECURITY.md"
    ]
  },
  "listen": {
    "port": 8080,
    "interface": "all"
  },
  "health": {
    "liveness": "/api/v1/live",
    "readiness": "/api/v1/ready",
    "grace_seconds": 2,
    "interval_seconds": 15,
    "timeout_seconds": 2
  },
  "resources": {
    "cpu_kind": "shared",
    "cpus": 1,
    "memory_mb": 256
  },
  "machines": {
    "count": 1,
    "min_running": 0,
    "autostart": true,
    "autostop": true
  },
  "region": "fra",
  "budgets": {
    "blocking_check_ms": 25
  },
  "created_at": "2026-09-06",
  "updated_at": "2026-10-12"
}

Content

# The deployment of this repository's executable. Authoritative: the container image
# definition and its ignore file are generated from this file and `majordomus generate
# --check` fails when one of them is edited by hand.
#
# No hosting provider is a target (owner order, 2026-10-12: "disable Fly.io; deploy only
# binaries + GitHub Pages (+ the GHCR image); Fly.io is now disconnected"). This object
# named Fly.io in a `provider` block and fly.toml was rendered from it; nothing ever ran
# there, so `retired` ("it was deployed, and is kept for the record") would claim a past
# that did not happen. The block left the contract instead: a field nothing reads is
# removed (docs/SCHEMAS.md), and fly.toml is no longer generated. What still reads this
# object is the generated deploy/Dockerfile, built and smoke-tested by docker-image.yml and
# by release.yml's `image` job into ghcr.io, and the image's own `serve --deployment
# majordomus`, which takes its address from `listen`. `status: declared` stays true:
# nothing runs from this object. `region`, `machines` and `resources` are still required
# by deployment/v1 but no generated artifact reads them any more; whether they go too is
# the fly-deployment milestone's decision, not this change's.
schema: deployment/v1
kind: deployment
id: majordomus
title: The Majordomus layer, served from its container image
description: The container image of this repository's executable, published to GHCR, serving the AI layer over HTTP and MCP; no hosting provider runs it.
status: declared

application: majordomus

build:
  package: majordomus-cli
  binary: majordomus
  profile: release
  # The build context, and nothing else. The package's own directory is what the builder
  # stage compiles; every other input is what the running process reads — the tool
  # distribution, the layer, and the files this repository's source classes point at, so
  # that the deployed index is the same shape as the one here.
  inputs:
    - apps/majordomus-cli
    - share
    - .ai
    - docs
    - lib
    - bin
    - test
    - README.md
    - AGENTS.md
    - CLAUDE.md
    - CONTRIBUTING.md
    - SECURITY.md
  # No `site:` yet. The image does not carry the built site, and declaring one it does not
  # serve would be the drift this kind exists to prevent (I0912 owns it).

listen:
  # One port. The process and the image both read this.
  port: 8080
  # A hosted process is reachable or it is nothing; `all` is the intent, not a suppressed
  # warning. Local invocation keeps its loopback default and never reads this object.
  interface: all

health:
  # Registered capabilities, not router entries: every capability route lives under
  # /api/v1/, so these are the paths the registry actually serves and the platform polls
  # what OpenAPI, the reference and the smoke suite already know about.
  liveness: /api/v1/live
  readiness: /api/v1/ready
  grace_seconds: 2
  interval_seconds: 15
  timeout_seconds: 2

resources:
  cpu_kind: shared
  cpus: 1
  # A hypothesis until a measured run under it passes; I0922 decides the final number.
  memory_mb: 256

machines:
  count: 1
  min_running: 0
  autostart: true
  autostop: true

region: fra

# Every budget below is written by the run that measured it; a number nobody measured
# would be a preference wearing a baseline's name. The size, cold-start and memory figures
# are not here yet because nothing has measured them (I0921, I0922, I0923).
budgets:
  # `majordomus bench health.live` and `bench health.ready`, quick profile, debug build:
  # p99 2.1 ms and 6.4 ms over HTTP. The ceiling leaves room for a loaded machine and is
  # still an order of magnitude under any platform's check timeout.
  blocking_check_ms: 25

created_at: 2026-09-06
updated_at: 2026-10-12