The contained runner that drove the 2026-09 security audit, the README review and four rounds of design ideation lived only inside the ignored notebook. It moves to scripts/agent-runner/: the prepare, tools, audit, ideation and teardown scripts, the compose and container files, the allowlist proxy and the prompt templates, with the paths that assumed the notebook fixed and findings written to a caller-named directory. Run outputs, transcripts and the round-specific sheet scripts stay behind. docs/agent-runner.md states the method: the disposable git archive copy and the fail-closed proxy, how a task is shaped, union rather than intersection of findings across models, separate adjudication of every finding against the source, and the evidence a finding must carry.
56 lines
2.0 KiB
YAML
56 lines
2.0 KiB
YAML
name: member-console-audit
|
|
|
|
networks:
|
|
# Proxy reaches the internet through here.
|
|
egress:
|
|
driver: bridge
|
|
labels: { com.member-console.audit: "1" }
|
|
# Auditor lives here ONLY. `internal: true` means no route off-box except
|
|
# via a container that also sits on `egress` — i.e. the proxy. Fail-closed.
|
|
isolated:
|
|
driver: bridge
|
|
internal: true
|
|
labels: { com.member-console.audit: "1" }
|
|
|
|
services:
|
|
egress-proxy:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.proxy
|
|
image: member-console-audit-proxy:latest
|
|
networks: [egress, isolated]
|
|
volumes:
|
|
- ./tinyproxy.conf:/etc/tinyproxy/tinyproxy.conf:ro
|
|
- ./allowlist.txt:/etc/tinyproxy/allowlist.txt:ro
|
|
labels: { com.member-console.audit: "1" }
|
|
|
|
auditor:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: member-console-audit:latest
|
|
# Auditor is on the isolated (internal) network only. Its sole path out is
|
|
# the proxy, addressed by name; the proxy enforces the host allowlist.
|
|
networks: [isolated]
|
|
environment:
|
|
HTTPS_PROXY: http://egress-proxy:8888
|
|
HTTP_PROXY: http://egress-proxy:8888
|
|
ALL_PROXY: http://egress-proxy:8888
|
|
NO_PROXY: localhost,127.0.0.1,egress-proxy
|
|
# Scanners must not reach for modules at run time; the cache is baked in.
|
|
GOPROXY: "off"
|
|
GOFLAGS: "-mod=mod"
|
|
volumes:
|
|
# Disposable git-archive copy — the auditor's writable working tree.
|
|
# The real repository is never mounted.
|
|
- ./.code:/src
|
|
# The only path that survives the run: the caller's findings directory.
|
|
# Every script that produces findings exports OUT; the fallback exists
|
|
# so `docker compose build` parses this file without it.
|
|
- ${OUT:-./.run/out}:/out
|
|
# Model-provider keys, read-only. Override the host path with
|
|
# AUDIT_AUTH_JSON if your opencode auth lives elsewhere.
|
|
- ${AUDIT_AUTH_JSON:-${HOME}/.local/share/opencode/auth.json}:/root/.local/share/opencode/auth.json:ro
|
|
working_dir: /src
|
|
labels: { com.member-console.audit: "1" }
|