Skip to main content

Release Reliability

Most linters inspect one file at a time. Release failures often live in the joins between files: an Ingress exposes a route whose guard exists only in source, or a CUDA container is shipped to a driver and GPU architecture it cannot run on.

Skylos' Release Reliability checks correlate those joins before deployment. Their findings are evidence-backed, diff-aware, and reported separately from Security so reliability policy does not distort a security grade.

Quick Start

Run all security and deployment/runtime contract analyzers, then display only Reliability findings:

skylos . --danger --category reliability --format concise

Run a narrow release gate by selecting exact rules:

# Kubernetes exposure proof
skylos . --select SKY-DEP001,SKY-DEP002,SKY-DEP003 --gate --format concise

# GPU release compatibility
skylos . --select SKY-GPU001,SKY-GPU002,SKY-GPU003 --gate --format concise

Exact selection enables the required analyzer family automatically. The GPU command also retains the prerequisite SKY-GPU000, so an absent or invalid target contract blocks instead of passing open.

Kubernetes Deployment Exposure Proof

These rules answer a concrete question: what source route does this external Ingress actually reach, and is the deployed runtime mode safe?

Skylos follows that chain only when every edge is explicit and unambiguous in one rendered, multi-document Kubernetes YAML file.

Opt In With Deployment Annotations

Mark the Ingress as an external plain-HTTP proof surface:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-public
namespace: prod
annotations:
skylos.dev/network-scope: external
skylos.dev/backend-protocol: http

For route-guard proof, declare the source file and required guards on the workload's Pod template:

apiVersion: apps/v1
kind: Deployment
metadata:
name: api
namespace: prod
spec:
template:
metadata:
annotations:
skylos.dev/source-file: app/main.py
skylos.dev/required-guards: require_admin,login_required

SKY-DEP002 and SKY-DEP003 need the explicit Ingress scope/protocol contract but do not require the source/guard annotations.

Rules

RuleCategoryWhat Skylos proves
SKY-DEP001Security, HIGHAn externally reachable sensitive FastAPI or Flask route is missing a guard named by the workload contract
SKY-DEP002Security, HIGHThe resolved external Flask container effectively enables its development debugger
SKY-DEP003Reliability, MEDIUMThe resolved Flask, Uvicorn, or Gunicorn container effectively enables reload mode

The finding includes the primary location plus related_locations for the Ingress, Service, workload, container, source route, and guard evidence used in the proof. Diff filtering considers those contributing locations, so a change to either side of the join can keep the finding in PR scope.

Intentional Boundaries

Skylos abstains rather than guessing when:

  • external scope or plain-HTTP backend intent is not explicitly annotated;
  • resources are split across files or the YAML is an unrendered Helm/Kustomize template;
  • selectors, ports, commands, bindings, entrypoints, or route paths are dynamic or ambiguous;
  • the chain does not resolve to a supported Flask or FastAPI route.

This is static release evidence. It does not query a live cluster, infer network policy, or claim that an unannotated Ingress is private.

GPU Release Compatibility

GPU checks compare the fleet you intend to support with the artifact you are actually building and packaging:

Declare The Target Fleet

Create .skylos/gpu-targets.yml (or .yaml) at the repository root:

version: 1
targets:
- name: a100-prod
vendor: nvidia
driver: "535.104.05"
compute_capability: "8.0"
platform: linux/amd64
- name: rtx-a6000-edge
vendor: nvidia
driver: "535.104.05"
compute_capability: "8.6"
platform: linux/amd64

Target names must be unique. Skylos currently accepts NVIDIA targets and uses the declared platform when applying CUDA driver branch floors.

Rules And Evidence

RuleWhat Skylos correlates
SKY-GPU000Contract validity and whether bounded evidence discovery completed without missing, deleted, dynamic, or ambiguous required inputs
SKY-GPU001The effective final Docker stage's NVIDIA CUDA major version against each target's driver branch and platform
SKY-GPU002Declared compute capabilities against real/virtual architectures emitted by CMake, TORCH_CUDA_ARCH_LIST, or real NVCC command evidence
SKY-GPU003A serialized TensorRT engine's exact build/write path, its packaging into the effective final Docker stage, and hardware compatibility configured before the build

The TensorRT proof recognizes concrete Python and C++ builder operations. A comment, docstring, echo example, similarly named artifact, unused Docker stage, or compatibility flag applied after the engine build is not accepted as release evidence.

Fail-Closed Contract Behavior

Repositories without a GPU target contract are not treated as GPU projects by default. The contract becomes required when it exists, is deleted in a changed-file scan, or any SKY-GPU* rule is explicitly selected.

If Skylos cannot validate the contract or authoritative evidence, it emits SKY-GPU000 rather than making a compatibility claim. Selecting a leaf rule such as SKY-GPU002 automatically retains SKY-GPU000, including in diff-scoped release gates.

These checks do not probe local GPUs or drivers, run a CUDA build, benchmark kernels, disassemble binaries, or scan dependencies for CVEs.

Output And Gating

Reliability findings have their own JSON bucket and count:

{
"reliability": [
{
"rule_id": "SKY-GPU001",
"category": "RELIABILITY",
"severity": "HIGH",
"file": "Dockerfile",
"related_locations": []
}
],
"analysis_summary": {
"reliability_count": 1
}
}

They do not consume danger_count or max_security. Configure the independent release threshold in pyproject.toml:

[tool.skylos.gate]
max_reliability = 0

0 is the default, so any Reliability finding blocks a gate that enabled or selected these analyzers.

Use --category reliability to filter displayed results after analysis. Use --select when you want to enable and gate an exact rule family. See CLI Reference, Understanding the Output, and Quality Gate for the complete operational contract.