Skip to main content
When a gliss.yaml asks for something the schema or your catalog does not allow, Gliss refuses it before anything is built. A refusal is one line per problem, written so your AI can fix the file without asking you:
  • <where> is the dotted path of the object with the problem, for example capabilities.cache, or gliss.yaml for a top-level field.
  • Every problem is reported in one pass, so a second attempt can fix them all.
  • A refusal never repeats a secret value.
  • An accepted file can also return notices: things that will happen but do not block, such as IT approval at Publish.

Config rules

These rules apply to names and values under config and stages.*.config, in this order. The first rule that matches a name decides the refusal.

Every tested refusal

Gliss is tested against each of these files and the exact lines it must return.

Type not offered

: capability types the catalog does not offer. Email (SES) is planned after v1.

Database size large

A size that does not exist, and a field a postgres capability does not have.

Secret value inline

An LLM pasted a secret value instead of declaring its type. The refusal must not echo the value.

Kubernetes and helm

No charts, manifests, kubectl or raw env in gliss.yaml; plain settings go in config.

Privileged port and path

Port 80 needs root, which the restricted pod-security level forbids; the build folder leaves the repository.

Live stage override

Live has no overrides: every secret declared for Live must be set before Publish.

Missing required

No owner, and a component with no build folder.

Audience and healer level

An audience that is not a Gliss audience, a list that names more than groups, and the healer level auto, which needs the managed maintenance package.

Runtime and reserved hostname

A runtime the catalog does not offer, a hostname the secret-intake page already uses, and a double hyphen, which Preview addresses use to separate builder and app.

Wrong api version and names

A Kubernetes-style apiVersion, an app name with capitals and underscores, and a bad owner.

Two sign ins

An app has one sign-in capability, and its hostname must point at a component with a port.

Not yaml

Config reserved and hijack

Names the platform sets, and names that change how the runtime loads code or routes traffic.

Config tls and debug

Switching off TLS checks is never allowed; debugger switches are not allowed in Live.

Config secret values

Values that look like secrets belong in capabilities.secrets. The refusals must not repeat them.

Config shapes

Config values are one line of text, a number or true/false, under upper-case names.

Extensions and egress

Extensions outside the catalog’s list for its Postgres version, and egress the catalog does not allow.

Cache and reserved app

A cache size the catalog does not offer, a config name the cache capability sets, and a reserved app name.

Reserved component

A component named preview: images CI builds from a work branch live under the app’s preview/ repositories.

Schedules

Schedules: a name a component has, a component that is not there, a cron that is not five fields, one every minute, an unknown time zone, a timeout over two hours and a field gliss.yaml does not have.