# ============================================================================= # L1 RENDERING — kind: container renders the PaaS workload (R-PLAT-02) # Catalog: docs/13 `kind: container` (PaaS default). The render analog of the # vm-lifecycle (R-PLAT-03) test for the container path. # # GIVEN a kind: container ServiceDefinition, # WHEN the renderer produces resources, # THEN it renders a Deployment (the container workload) + a Service, matching the # golden, with the egress-class + auth-mode labels admission requires. # # STATUS: IMPLEMENTED (T-0.3). render-check.sh is a pure offline check (renderer + # golden diff + structural asserts, no cluster). conformance/run.sh --layer l1 and # ci/l1.sh run it directly; this Chainsaw Test wraps the SAME script so an in-cluster # run executes the identical assertion. Rendering != enforcement (behavior at L2). # ============================================================================= apiVersion: chainsaw.kyverno.io/v1alpha1 kind: Test metadata: name: container-workload-render labels: conformance.home.k3s/R-PLAT-02: "true" annotations: conformance.home.k3s/requirements: "R-PLAT-02" conformance.home.k3s/layer: "L1" conformance.home.k3s/safety-critical: "false" # WHY SCOPE, NOT REQUIREMENTS ALONE: every L1 test exercises ONE shared code path — # catalog/render.py against schemas/servicedefinition.schema.json — so anything that changes # rendered output breaks these goldens regardless of which requirement the touched path maps to. # Requirement-scoped selection cannot see that coupling. Concretely (2026-09-04 external-dns # merge): `platform/externaldns/helmrelease.yaml` attributes R-ENV-02, R-OBS-01/02/04, # R-STATE-03 and R-TEST-01/02/03/04 via ci/touched-requirements.sh — NOT R-PLAT-02, R-NET-01 or # R-NET-05/06/07 — yet it added `external-dns.alpha.kubernetes.io/controller: none` to the # rendered output of ALL THREE L1 goldens. A requirement-scoped gate selected ZERO L1 tests, went # GREEN, and left every golden stale; the staleness surfaced only on a later full run. # ci/l1.sh has passed --include-scope since it was written, waiting for this annotation. conformance.home.k3s/scope: "whole-repo" conformance.home.k3s/intent: >- A kind: container ServiceDefinition renders a Deployment + Service (the PaaS path). spec: steps: - name: render-and-assert-container-workload description: >- Render a container ServiceDefinition and assert it produces a Deployment running the declared image plus a Service, with the required pod labels, matching golden. try: - script: content: bash ./render-check.sh