46 lines
2.3 KiB
Docker
46 lines
2.3 KiB
Docker
# CP2A2.2B — L1 Red Queen Worker (L1 Worker Foundation)
|
|
# STRICTLY NON-AUTONOMOUS / NON-PRODUCTIVE. NO AUTONOMY. NO HEARTBEAT. NO SCHEDULER.
|
|
#
|
|
# Separate minimale L1 Worker Runtime fuer spaetere Read-only-Autonomie.
|
|
# Basis: nousresearch/hermes-agent:latest (Hermes oneshot `hermes -z`).
|
|
#
|
|
# HAERTUNG:
|
|
# - non-root hermes-User (UID 10000 / GID 10000, im Basis-Image definiert)
|
|
# - read-only rootfs (docker-compose: read_only: true)
|
|
# - cap_drop ALL, no-new-privileges (docker-compose)
|
|
# - kein Docker-Socket, keine Host-Root-Mounts, keine Host-Namespaces
|
|
# - kein s6-overlay / kein Gateway / kein Telegram / kein API-Server
|
|
# - eigener minimaler Entrypoint (inert idle, KEIN autonomer Loop)
|
|
#
|
|
# CREDENTIAL ZERO POLICY: Dieses Image enthaelt KEINE Credentials.
|
|
# Kein FORGEJO_WRITE_TOKEN, NOTION_API_KEY, TELEGRAM_BOT_TOKEN,
|
|
# SAVE_TOKEN, DELETE_TOKEN, SSH-Keys, Git-Write-Credentials, .netrc,
|
|
# .git-credentials, Cloud/DB/Service-Account/Webhook/Bearer/Docker/
|
|
# Broker/Trading-Credentials. ENV wird im Compose NICHT gesetzt.
|
|
#
|
|
# RED_QUEEN_TRADING_AUTHORITY=NEVER (permanente Invariante, siehe CP1.0S).
|
|
|
|
FROM nousresearch/hermes-agent:latest
|
|
|
|
# Kein s6-overlay, kein Gateway. Eigener minimaler Entrypoint.
|
|
# Der Worker startet inert (sleep infinity) und fuehrt KEINEN autonomen Tick aus.
|
|
# Ein Tick wird ausschliesslich extern getriggert (spaeterer externer Scheduler
|
|
# -> Gate-Evaluator /check -> ALLOW -> `hermes -z` oneshot). In CP2A2.2B existiert
|
|
# der Tick-Wrapper als Datei, wird aber NICHT automatisch ausgefuehrt.
|
|
|
|
# Worker-eigene Skripte (read-only im Image, keine Secrets)
|
|
COPY worker-entrypoint.sh /opt/l1-worker/worker-entrypoint.sh
|
|
COPY worker-tick.sh /opt/l1-worker/worker-tick.sh
|
|
COPY worker-config.yaml /opt/l1-worker/worker-config.yaml
|
|
|
|
# State-Verzeichnis (worker-owned, wird als Volume gemountet)
|
|
# Der hermes-User (UID 10000) ist der Worker. Das State-Volume wird im
|
|
# Compose als bind-mount von /opt/l1-worker-state gemountet (Host-root-angelegt,
|
|
# auf 10000:10000 gechownt) — nur der Worker kann schreiben.
|
|
RUN mkdir -p /opt/l1-worker/state && chown -R hermes:hermes /opt/l1-worker
|
|
|
|
# Non-root: der Worker laeuft als hermes-User (UID 10000 / GID 10000).
|
|
USER hermes:hermes
|
|
|
|
# Inert idle Entrypoint: KEIN autonomer Loop, KEIN Tick-Start.
|
|
ENTRYPOINT ["/bin/sh", "/opt/l1-worker/worker-entrypoint.sh"]
|