Static-Token-Code-Deployment auf Agent Runtime CT 259¶
Zweck und Grenze¶
agent_runtime_code_deploy.py deployt ausschließlich diese vier Python-Dateien:
rbac_governance.pystatic_mcp_token_admin.pylanstyle_openapi_facade.pylanstyle_remote_mcp.py
Der Provider ist fest an root@10.0.0.220, Proxmox-CT 259,
/opt/agent-runtime/tools und die Compose-Services lanstyle-tools-api sowie
lanstyle-remote-mcp gebunden. Er akzeptiert keine frei wählbaren Hosts,
VMIDs, Zielpfade, Services oder Remote-Kommandos. Die Compose-Datei wird nicht
verändert.
Diese Capability provisioniert weder Secrets noch .env-Werte. Insbesondere
bleibt LANSTYLE_STATIC_MCP_TOKEN_ADMIN_HMAC_KEY ein separates technisches
Gate. Ein fehlender HMAC-Key wird im Receipt als
separate-gate-not-ready ausgewiesen und niemals erfunden.
Das Gate wird anschließend ausschließlich über den engen
static-token-bootstrap.md-Provider geschlossen.
Manifest und Prestate¶
Das Manifest trennt Release und erwarteten Live-Prestate:
source_refbleibt festorigin/main; alle vier gewünschten Dateien müssen bytegenau sowohl dem lokalenHEAD-Blob als auch demorigin/main-Blob entsprechen;prestate_refist ein voller 40-hex Commit und liefert ausschließlich die erwarteten Prestate-Digests der vier Artefakte.
Ohne Option wird prestate_ref auf den aktuellen origin/main-Commit
aufgelöst. Für ein Upgrade muss --prestate-ref explizit gesetzt werden. Der
Wert muss vollständig sein, als Commit existieren und ein Ancestor von
origin/main sein. Short-SHAs, Branches, Tags, unbekannte oder nicht im
Release-Verlauf liegende Commits werden abgewiesen. docker-compose.yml
bleibt an den Release-Stand von origin/main gebunden und wird nie verändert.
Ein Live-Digest außerhalb des manifestierten Prestate stoppt vor dem ersten
Write.
private_dir="$(mktemp -d)"
chmod 0700 "$private_dir"
python3 agent-runtime/tools/agent_runtime_code_deploy.py build-manifest \
--output "$private_dir/ct259-static-token-code.json"
# Upgrade vom bereits validierten Stand 4a499fe auf Release origin/main:
python3 agent-runtime/tools/agent_runtime_code_deploy.py build-manifest \
--prestate-ref '4a499fe8a224fb73f8e3ab298a60e8b565237a75' \
--output "$private_dir/ct259-static-token-upgrade.json"
python3 agent-runtime/tools/agent_runtime_code_deploy.py preflight \
--manifest "$private_dir/ct259-static-token-code.json"
preflight prüft ausschließlich lesend:
- CT 259 ist
running; - Toolverzeichnis, vier Zielzustände und Compose-Digest;
- beide fest gebundenen Compose-Services sind vorhanden und laufen;
- Tools-API-Health und authentifizierter API-Zugriff;
- anonymer Remote-MCP-Zugriff wird abgewiesen und ein vorhandener technischer Token authentifiziert erfolgreich.
Es werden keine Environment- oder Secretwerte ausgegeben.
Kontrollierte Ausführung¶
Ein Apply ist Medium Risk und benötigt eine eindeutige Benutzeranweisung für genau diesen Scope. Der Aufruf besitzt nur Manifest und Run-ID:
python3 agent-runtime/tools/agent_runtime_code_deploy.py apply \
--manifest "$private_dir/ct259-static-token-code.json" \
--run-id "run-code-deploy-YYYYMMDDHHMM"
Der feste Remote-Provider führt aus:
- erneuter Preflight;
- exklusiver rootverwalteter
flockauf dem Proxmox-Host; - Live-Prestate-Digestprüfung unter dem Lock;
- root-only Backups und initiales Receipt unter
/var/lib/lanstyle-agent-runtime-code-deploy/runs/<runId>; pct pushauf temporäre Dateien und digest-/CAS-gebundener atomarer Replace im CT;- Read-after-write aller vier Dateien und unveränderte Compose-Prüfsumme;
- ausschließlich
lanstyle-tools-apiundlanstyle-remote-mcpmit--no-deps --force-recreateneu erstellen; - Container-, HTTP-, API- und Auth-Verifikation;
- root-only Receipt ohne Secretwerte.
Fehler nach dem ersten Dateischreibvorgang lösen einen guarded Rollback aus.
Bei Fremddrift wird kein fremder Stand überschrieben; der Lauf endet als
failed-quarantine.
Expliziter Rollback¶
python3 agent-runtime/tools/agent_runtime_code_deploy.py rollback \
--manifest "$private_dir/ct259-static-token-code.json" \
--run-id "run-code-deploy-YYYYMMDDHHMM"
Rollback ist nur möglich, wenn Manifest-Digest, Receipt, Compose-Digest und
alle vier aktuellen Poststate-Digests noch exakt zum eigenen erfolgreichen
Lauf gehören. Ein im gebundenen prestate_ref nicht vorhandenes Ziel wird nur unter
diesem Poststate-CAS entfernt; bestehende Dateien werden aus dem root-only
Backup wiederhergestellt. Danach werden wiederum nur die beiden betroffenen
Services neu erstellt und der frühere Health-/Auth-Pfad verifiziert.
Abnahme vor dem ersten Live-Write¶
python3 -m unittest -v agent-runtime.tests.test_agent_runtime_code_deploy
python3 -m unittest -v agent-runtime.tests.test_static_mcp_token_admin
python3 -m py_compile \
agent-runtime/tools/agent_runtime_code_deploy.py \
agent-runtime/tools/agent_runtime_code_deploy_remote.py
Zusätzliche Live-Gates:
- hostgebundener SSH-Key und bekannter Hostkey für
root@10.0.0.220; - exakter Live-Prestate entspricht dem frisch erzeugten Manifest;
- CT 259 und beide Compose-Services sind gesund;
- ausreichender Platz im root-only Backupverzeichnis;
- HMAC-/Env-Provisionierung wird separat geplant und auditiert.