Security and retained data

Source/dependency isolation protects measurement correctness. MarginCI is not a hostile-code sandbox. Run trusted code only; the application can access the credentials and filesystem privileges of your runner. Do not expose provider secrets to arbitrary fork code, and never combine pull_request_target, untrusted checkout and privileged credentials.

The supplied workflow fails the MarginCI job for fork PRs before checkout or credential use; it never labels a skipped measurement PASS. Internal PR authors must already be trusted with the supplied credentials. Repository owners control CI workflow/config changes, protected secrets, required checks and any extra environment approvals. See CI policy.

Files retained by default

.marginci/runs/<run-id>/ contains frozen config/cases/rates, source snapshots, source hashes, comparison identity, lock/install metadata, package-manager logs, runtime configuration, append-only event ledgers, per-attempt result files and final reports. The run root is private (0700); stdout/stderr/runtime files use 0600. Snapshots may contain customer source and workload data. No automatic deletion or cloud upload occurs.

MarginCI-owned event metadata contains provider/path/method/transport, ownership IDs, times, status, supported returned quantities, configured rates, valuation/provenance and completion reasons. Request authorization headers, cookies, arbitrary request bodies and full response bodies are not intentionally captured. Queries/fragments/userinfo are stripped from captured URLs; unsupported endpoint paths are replaced. Known configured/environment credential values and credential-named fields are redacted from event metadata. Only the request-ID header is retained for correlation. Successful provider usage metadata/model/resource IDs are retained; they can still be commercially sensitive.

MarginCI does not guarantee redaction of arbitrary secrets printed by customer code. Application stdout/stderr, result files, committed source, workload inputs and installer logs may contain sensitive data. Keep .marginci/ private, do not commit it, and review artifacts before sharing. Do not embed credentials in YAML, workload, .npmrc or source. Use environment substitution for private registry credentials. Unknown secrets in arbitrary application-owned data cannot be reliably inferred.

--json stdout has one report; application output remains in attempt stdout.log/stderr.log. Verbose progress is stderr. Human/JSON output can include local artifact paths; this is intentional local debugging metadata. The package excludes local absolute source paths, .env files and customer logs.

The example CI upload includes reports only, with short retention. Adding logs/ledgers/snapshots is an owner decision requiring review of their data. No cloud service, telemetry endpoint, account or billing integration is needed for V0.