Adds a new prose contract infrastructure-maintenance.prose.md and registers it in contract-registry.yaml. The contract consolidates system-level maintenance previously handled by raw shell scripts into a typed, scheduled responsibility, and establishes a deliberate partition with infrastructure-update:
infrastructure-update owns the full-fleet cluster-wide wave (apt across the PVE cluster + CTs/VMs, and its existing Wave 3 Docker image updates across all stacks).
infrastructure-maintenance (new) owns the narrower host-level weekly maintenance loop on the primary host plus Docker image pulls scoped to .116 and .7 only.
Contract scope
OS package updates — apt update && apt upgrade -y on the primary host, with a pre-update snapshot/backup check
Docker image pulls — pull latest stable tags for LiteLLM, SearXNG, and other running containers on .116/.7
Container restarts — restart stacks one at a time with per-stack health verification (120s)
Post-update service verification — LiteLLM proxy + MCP gateway, SearXNG, Zulip, Gitea, PM2 processes, Hermes gateways, with a regression check against a pre-update health baseline
Rollback on failure — image (pin digest in compose, up -d) / apt (Proxmox snapshot or apt install <pkg>=<old>) / config restore, with escalation
Index ↔ contracts consistency verified (every indexed name has a contracts: entry)
no-mistakes pipeline: intent ✅ rebase ✅ review ✅ (fixed broken rollback syntax) test ✅ document ✅ (reframed as deliberate partition per reviewer) lint ✅ push ✅
Notes
Frontmatter follows existing convention (kind/name/description/agent/triggers/version only) — category/sensitivity/owner/trigger/escalation/circuit_breaker/depends_on live in the registry, matching infrastructure-update and proxmox-monitor. No schema drift.
All host/IP values grounded in infrastructure-update and infrastructure-control; every live-state field marked VERIFY-BEFORE-USE per the authoring guide.
infrastructure-update.prose.md content is unchanged (only its registry owner moved to ops).
## Summary
Adds a new prose contract `infrastructure-maintenance.prose.md` and registers it in `contract-registry.yaml`. The contract consolidates system-level maintenance previously handled by raw shell scripts into a typed, scheduled responsibility, and establishes a deliberate partition with `infrastructure-update`:
- **`infrastructure-update`** owns the full-fleet cluster-wide wave (apt across the PVE cluster + CTs/VMs, *and* its existing Wave 3 Docker image updates across all stacks).
- **`infrastructure-maintenance`** (new) owns the narrower **host-level** weekly maintenance loop on the primary host plus Docker image pulls scoped to `.116` and `.7` only.
## Contract scope
1. **OS package updates** — `apt update && apt upgrade -y` on the primary host, with a pre-update snapshot/backup check
2. **Docker image pulls** — pull latest stable tags for LiteLLM, SearXNG, and other running containers on `.116`/`.7`
3. **Container restarts** — restart stacks one at a time with per-stack health verification (120s)
4. **Post-update service verification** — LiteLLM proxy + MCP gateway, SearXNG, Zulip, Gitea, PM2 processes, Hermes gateways, with a regression check against a pre-update health baseline
5. **Rollback on failure** — image (pin digest in compose, `up -d`) / apt (Proxmox snapshot or `apt install <pkg>=<old>`) / config restore, with escalation
## Contract metadata
| field | value |
|-------|-------|
| name | infrastructure-maintenance |
| kind | responsibility |
| category | maintenance |
| sensitivity | high |
| owner | ops (firstmate secondmate) |
| agent | ops |
| trigger | scheduled, weekly Sunday 2am ET (`0 2 * * 0`) |
| escalation | warning→abiba+mumuni, critical→abiba+mumuni, fatal→abiba+mumuni+kwame |
| circuit_breaker | max_retries 2, window 7200, trip_action escalate_to_fatal |
| depends_on | infrastructure-monitoring (pre-update health baseline) |
## Registry updates
- Added `infrastructure-maintenance` to `index.by_category.maintenance`, `index.by_domain.infrastructure`, `index.by_owner.ops` (new), `index.by_trigger.scheduled`, `index.by_sensitivity.high`
- Added `ops` to the top-level `owners` list
- Changed `infrastructure-update` owner `abiba` → `ops` (in its `contracts:` entry and the `by_owner` index)
- Added the full `contracts:` entry for `infrastructure-maintenance` (modeled on `infrastructure-update`)
## Validation
- `bash scripts/prose-lint.sh` — ✅ PASSED (10 pre-existing warnings, zero new from this change)
- `python3 -c "import yaml; yaml.safe_load(open('contract-registry.yaml'))"` — ✅ valid
- Frontmatter parses; required `## Maintains` section present (responsibility kind)
- Index ↔ contracts consistency verified (every indexed name has a `contracts:` entry)
- no-mistakes pipeline: intent ✅ rebase ✅ review ✅ (fixed broken rollback syntax) test ✅ document ✅ (reframed as deliberate partition per reviewer) lint ✅ push ✅
## Notes
- Frontmatter follows existing convention (`kind`/`name`/`description`/`agent`/`triggers`/`version` only) — `category`/`sensitivity`/`owner`/`trigger`/`escalation`/`circuit_breaker`/`depends_on` live in the registry, matching `infrastructure-update` and `proxmox-monitor`. No schema drift.
- All host/IP values grounded in `infrastructure-update` and `infrastructure-control`; every live-state field marked `VERIFY-BEFORE-USE` per the authoring guide.
- `infrastructure-update.prose.md` content is **unchanged** (only its registry owner moved to `ops`).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Adds a new prose contract
infrastructure-maintenance.prose.mdand registers it incontract-registry.yaml. The contract consolidates system-level maintenance previously handled by raw shell scripts into a typed, scheduled responsibility, and establishes a deliberate partition withinfrastructure-update:infrastructure-updateowns the full-fleet cluster-wide wave (apt across the PVE cluster + CTs/VMs, and its existing Wave 3 Docker image updates across all stacks).infrastructure-maintenance(new) owns the narrower host-level weekly maintenance loop on the primary host plus Docker image pulls scoped to.116and.7only.Contract scope
apt update && apt upgrade -yon the primary host, with a pre-update snapshot/backup check.116/.7up -d) / apt (Proxmox snapshot orapt install <pkg>=<old>) / config restore, with escalationContract metadata
0 2 * * 0)Registry updates
infrastructure-maintenancetoindex.by_category.maintenance,index.by_domain.infrastructure,index.by_owner.ops(new),index.by_trigger.scheduled,index.by_sensitivity.highopsto the top-levelownerslistinfrastructure-updateownerabiba→ops(in itscontracts:entry and theby_ownerindex)contracts:entry forinfrastructure-maintenance(modeled oninfrastructure-update)Validation
bash scripts/prose-lint.sh— ✅ PASSED (10 pre-existing warnings, zero new from this change)python3 -c "import yaml; yaml.safe_load(open('contract-registry.yaml'))"— ✅ valid## Maintainssection present (responsibility kind)contracts:entry)Notes
kind/name/description/agent/triggers/versiononly) —category/sensitivity/owner/trigger/escalation/circuit_breaker/depends_onlive in the registry, matchinginfrastructure-updateandproxmox-monitor. No schema drift.infrastructure-updateandinfrastructure-control; every live-state field markedVERIFY-BEFORE-USEper the authoring guide.infrastructure-update.prose.mdcontent is unchanged (only its registry owner moved toops).