# 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 10010 / 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 10010) ist der Worker. Das State-Volume wird im # Compose als bind-mount von /opt/l1-worker-state gemountet (Host-root-angelegt, # auf 10010: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 10010 / GID 10000). USER hermes:hermes # Inert idle Entrypoint: KEIN autonomer Loop, KEIN Tick-Start. ENTRYPOINT ["/bin/sh", "/opt/l1-worker/worker-entrypoint.sh"]