# Verdant governance evidence pack

- **Generated:** 2026-10-25T01:55:48.962355+00:00
- **Project:** https://gitlab.com/gitlab-ai-hackathon/transcend-october-2026/43645688/showcase
- **Pipeline:** https://gitlab.com/gitlab-ai-hackathon/transcend-october-2026/43645688/showcase/-/pipelines/2985588046
- **Commit:** `37610941df6892c1c72260d4278118c21d801546` on `main`

## Evidence

| Stage | Evidence | File | Present |
|---|---|---|---|
| Verify | Unit tests (JUnit) | `reports/junit.xml` | yes |
| Verify | Gate proof (bad changes must be blocked) | `reports/gate-proof.json` | yes |
| Verify | Coverage (Cobertura) | `reports/coverage.xml` | yes |
| Secure | SAST (GitLab) | `gl-sast-report.json` | yes |
| Secure | Secret detection (GitLab) | `gl-secret-detection-report.json` | yes |
| Secure | Dependency scan (Trivy) | `reports/trivy-fs.json` | yes |
| Secure | SBOM (CycloneDX) | `reports/sbom.cdx.json` | yes |
| Package | Container scan (Trivy) | `reports/trivy-image.json` | yes |
| Package | Signed image digest (cosign keyless) | `reports/image.env` | yes |
| Package | Container smoke test | `reports/image-smoke.json` | yes |
| Configure | Carbon decision log | `reports/carbon-decision.json` | yes |
| Configure | SCI report | `reports/sci-report.md` | yes |
| Govern | OPA policy input | `reports/policy-input.json` | yes |
| Govern | OPA policy decision | `reports/policy-decision.json` | yes |
| Deploy | Live deployment record (Render or Cloud Run) | `reports/deploy.env` | yes |
| Monitor | SLO validation | `reports/slo.json` | yes |
| Monitor | Rollback record | `reports/rollback.json` | not produced |
| Govern | Verdant's own CI footprint | `reports/ci-footprint.json` | yes |

## Artifact

- Image: `registry.gitlab.com/gitlab-ai-hackathon/transcend-october-2026/43645688/showcase/greenops-status-api@sha256:055b05415fbfae9802c1c9ef2226f29ebcbc8f278d1f06c247530fc6620fd1a2`
- Signed with Sigstore cosign (keyless, GitLab OIDC identity); SBOM attached as an attestation.

## Gate proof

10/10 scenarios behaved correctly. Bad changes are fed through the same carbon engine, OPA policies and SLO probe the delivery path uses.

| Scenario | Gate | Expected | Observed | Result |
|---|---|---|---|---|
| Johannesburg users, 80 ms budget: only africa-south1 (641 g/kWh) is fast enough | carbon gate | blocked | blocked | PASS |
| Western-Europe users, 80 ms budget (control) | carbon gate | allowed | allowed | PASS |
| High-severity dependency CVE | OPA policy gate | blocked | blocked | PASS |
| Secret committed to the repository | OPA policy gate | blocked | blocked | PASS |
| Agent branch edits .gitlab-ci.yml to weaken the pipeline | OPA policy gate | blocked | blocked | PASS |
| Agent branch tries an unsupported change type (auth rewrite) | OPA policy gate | blocked | blocked | PASS |
| Agent branch touches more than 12 files | OPA policy gate | blocked | blocked | PASS |
| Agent branch adds a read-only endpoint in app/ (control) | OPA policy gate | allowed | allowed | PASS |
| Bad release: /healthz is green but the API returns HTTP 500 | SLO gate (triggers rollback) | blocked | blocked | PASS |
| Healthy release (the real GreenOps API) | SLO gate (triggers rollback) | allowed | allowed | PASS |

## Verdant's own CI footprint (this pipeline)

- Runner time: **449 s** across 16 finished jobs
- Estimated energy: **1.11 Wh** (8.9 W per 2 vCPU / 8 GB runner, PUE 1.1)
- Estimated emissions: **0.64 gCO2e** (range 0.38-0.64: runners run in us-east1 or us-east5, headline uses the dirtier grid)
- **Carbon payback:** deploying to europe-north1 instead of europe-west4 saves 0.2632 g per 1,000 requests, so this pipeline's own emissions are repaid after about **2,447 requests** (modeled).
- Model: Cloud Carbon Footprint coefficients, 50% CPU utilisation assumed; embodied excluded.

## Built image under live probes

- Result: **PASS**
- Observed: `{"requests": 40, "error_rate_pct": 0.0, "p95_latency_ms": 2.3, "availability_pct": 100.0, "status_codes": {"200": 40}}`

## Policy gate (OPA)

- Result: **ALLOW**

## Carbon decision

- Selected region: **europe-north1** (Finland, zone FI)
- Operational SCI: 0.047744 g / 1,000 requests (+/-18.0%)
- vs carbon-unaware baseline europe-west4: -84.65% (modeled)
- Source: Google Cloud region carbon data 2025 (annual average, location-based grid intensity) - github.com/GoogleCloudPlatform/region-carbon-info

### Decision log

- Evaluated 11 Google Cloud regions for workload 'api' (user base: eu-west).
- Constraints: max_latency=80ms, residency=any, carbon_budget=0.35 g/1k req.
- Selected europe-north1 (Finland, zone FI) at 29.84 gCO2e/kWh, CFE 98%.
- Carbon-unaware baseline (lowest latency): europe-west4 at 194.35 gCO2e/kWh.
- Rejected africa-south1: latency 165ms exceeds 80ms budget.
- Rejected asia-east1: latency 260ms exceeds 80ms budget.
- Rejected europe-west1: feasible but higher modeled SCI (0.20229 vs 0.04774 g/1k req).
- Rejected europe-west10: feasible but higher modeled SCI (0.44130 vs 0.04774 g/1k req).
- Rejected europe-west2: feasible but higher modeled SCI (0.17502 vs 0.04774 g/1k req).
- Rejected europe-west4: feasible but higher modeled SCI (0.31096 vs 0.04774 g/1k req).
- Rejected southamerica-east1: latency 200ms exceeds 80ms budget.
- Rejected us-central1: latency 110ms exceeds 80ms budget.
- Rejected us-east1: latency 95ms exceeds 80ms budget.
- Rejected us-west1: latency 150ms exceeds 80ms budget.
- Carbon gate passed: modeled operational SCI 0.04774 g/1k req <= budget 0.35.

## Deployment

- Target: render-free
- Previous version: 60864a46
- Region: n/a
- URL: https://greenops-status-api-latest.onrender.com
- Revision: 37610941

## SLO validation

- Target: https://greenops-status-api-latest.onrender.com
- Result: **PASS**
- Observed: `{"requests": 40, "error_rate_pct": 0.0, "p95_latency_ms": 353.3, "availability_pct": 100.0, "status_codes": {"200": 40}}`

---

# SCI report - greenops-status-api

- **Version:** 37610941
- **Functional unit (R):** 1,000 successful HTTP requests
- **User base:** eu-west
- **Generated:** 2026-10-25T01:50:53.558883+00:00

## Operational SCI = (E x I) / R

| Field | Value |
|---|---|
| Energy per functional unit (E) | 0.0016 kWh (modeled) |
| Grid intensity (I) | 29.84 gCO2e/kWh (FI) |
| **Operational SCI** | **0.047744 gCO2e / 1,000 requests** |
| Uncertainty | +/-18% |

## Embodied emissions (M, reported separately)

0.004 gCO2e / 1,000 requests - assumption, not measured; see docs/carbon-methodology.md.

## Deployment decision

- **Selected:** europe-north1 (Finland, zone FI, CFE 98%)
- **Constraints:** {"max_latency_ms": 80.0, "allowed_regions": null, "carbon_budget_g_per_1k": 0.35}
- **Data source:** Google Cloud region carbon data 2025 (annual average, location-based grid intensity) - github.com/GoogleCloudPlatform/region-carbon-info (dataset year 2025)

| Region | Zone | gCO2e/kWh | Latency | Outcome |
|---|---|---|---|---|
| europe-north1 | FI | 29.84 | 32 ms | **selected** |
| africa-south1 | ZA | 641.42 | 165 ms | latency 165ms exceeds 80ms budget |
| asia-east1 | TW | 427.95 | 260 ms | latency 260ms exceeds 80ms budget |
| europe-west1 | BE | 126.43 | 10 ms | higher SCI |
| europe-west10 | DE | 275.81 | 12 ms | higher SCI |
| europe-west2 | GB | 109.39 | 14 ms | higher SCI |
| europe-west4 | NL | 194.35 | 8 ms | higher SCI |
| southamerica-east1 | BR-CS | 73.25 | 200 ms | latency 200ms exceeds 80ms budget |
| us-central1 | US-MIDW-MISO | 431.95 | 110 ms | latency 110ms exceeds 80ms budget |
| us-east1 | US-CAR-SC | 579.44 | 95 ms | latency 95ms exceeds 80ms budget |
| us-west1 | US-NW-BPAT | 97.85 | 150 ms | latency 150ms exceeds 80ms budget |

## Incremental comparison

| Scenario | Region | Operational SCI (g/1k req) |
|---|---|---|
| Carbon-unaware baseline | europe-west4 | 0.310960 |
| Verdant | europe-north1 | 0.047744 |

**Modeled reduction: 84.7% (+/-18%).** Modeled incremental comparison. Same workload, same right-sizing and scale-to-zero in both scenarios; the delta comes only from choosing the lowest-carbon feasible region instead of the lowest-latency one. Uses annual-average location-based grid intensity, not marginal or real-time data.

