Copr Gateway
Last updated: 2026-07-09
Copr Gateway is a bounded per-executable runner behind a small HTTP gateway. It is designed for one file, one run, explicit status, and clean handoff to April-side observation and message packaging.
Status: Private distribution
License summary
copr_gateway is licensed, not sold.
The license covers the purchasing customer and its affiliates under common control.
Service providers may operate the software on the customer’s behalf, but do not receive independent license rights.
copr_gateway may be used in the customer group’s business operations, including internet-facing deployments and customer-serving systems.
copr_gateway itself may not be resold, sublicensed, or transferred as a standalone product without written permission.
Purchase or subscription does not guarantee future updates, upgrades, downgrades, bug-fix releases, support, or continued development unless expressly stated in the applicable order, Marketplace offer, or Seller support policy.
Use of copr_gateway is governed by the applicable order and the EULA.
What it is
Small HTTP surface over a bounded runner for one explicitly supplied executable file at a time.
Reports the executable run boundary clearly so April-side tooling can observe journald, stderr, and surrounding evidence without making Copr an orchestrator.
Returns explicit status without becoming an orchestrator, container-control layer, or April observation stack.
What it does
- checks liveness
- returns compact service status
- accepts a bounded executable run request
- reports run status
- closes the run boundary explicitly
April may call Copr, but April, bea-series observers, Milky receipts, Hammer packaging, and LLM-facing message packaging stay outside Copr.
Deployment model
copr_gateway is intended to expose a small runner package.
The important unit is the executable file run, not a broad container-control surface.
Default runtime configuration:
- bind address:
:8080 - runtime binary:
/usr/local/bin/copr_api - run records root:
/data/runs - thin status posture:
true
Environment variables:
COPR_BIND_ADDRCOPR_API_BINCOPR_RUN_ROOTCOPR_STATUS_THIN
Quick start
Build the package image:
docker build -f nsc_mai/crates/copr_gateway/Dockerfile -t copr_gateway:2026.1.0 .
Run it:
docker run --rm \
-p 8080:8080 \
-v $(pwd)/data:/data \
-e COPR_BIND_ADDR=:8080 \
-e COPR_API_BIN=/usr/local/bin/copr_api \
-e COPR_RUN_ROOT=/data/runs \
-e COPR_STATUS_THIN=true \
copr_gateway:2026.1.0
API overview
GET /health
Minimal liveness check.
{"ok":true}
GET /status
Returns compact gateway status.
The status surface is intentionally small by default.
POST /run
Request a bounded executable run.
{"file":"/work/example.exe","args":[]}
POST /run/status
Inspect a run boundary by id.
{"run_id":"example-run"}
POST /run/close
Close the run boundary explicitly.
{"run_id":"example-run"}
Example calls
curl -s http://127.0.0.1:8080/health
curl -s http://127.0.0.1:8080/status
curl -s -X POST http://127.0.0.1:8080/run \
-H 'Content-Type: application/json' \
-d '{"file":"/work/example.exe","args":[]}'
curl -s -X POST http://127.0.0.1:8080/run/status \
-H 'Content-Type: application/json' \
-d '{"run_id":"example-run"}'
curl -s -X POST http://127.0.0.1:8080/run/close \
-H 'Content-Type: application/json' \
-d '{"run_id":"example-run"}'
Run records
Run records are local to the deployment surface under /data.
Default container path:
/data/runs
Mount /data when run records should survive restarts.
Observation, journald access, stderr collection, bea-series error packets, Milky receipts, Hammer packaging, and LLM handoff remain April-stack responsibilities.
Scope
This package is:
- a small HTTP gateway over a bounded per-executable runner
- explicit about run boundaries
- inspectable through compact status
- suitable for controlled deployments and private packaging
This package is not:
- a general orchestration platform
- a host-wide control plane
- a cluster scheduler
- a container-control layer
- the April observation stack
- the bea/Milky/Hammer message packaging layer
Version
2026.1.0