Down to the Kubernetes manifest

From a project to the actual objects, their YAML, their events and their logs.

The rule this console tries to keep: you can always get to the real Kubernetes objects eventually. Here is every route down, and what to do when one is not available.

  1. 1

    Start at a cell

    On the project view or the environment view, every cell is a component or a resource in one environment. Clicking it takes you to that deployment's binding detail page.

  2. 2

    The objects the platform created

    The binding detail page lists what the ReleaseBinding actually produced — Deployment, Service, HTTPRoute, ConfigMap, ExternalSecret, NetworkPolicy — with each object's health.

    This comes from the platform API's k8sresources endpoints. The response is flat despite the endpoint being called tree, so a Pod sits beside its Deployment rather than under it.

  3. 3

    Describe one object

    Each object can be described down to its YAML. Not kubectl describe's prose — that format is assembled by a printer inside kubectl and is not available over the API — but the object itself, which is the thing describe is a rendering of.

    Noise Kubernetes writes into everything is stripped first: managedFields, resourceVersion, uid, generation. managedFields alone is routinely longer than the spec.

    GET/api-docs#/default/api_deploy_describe_api_deploys__binding__describe_getrun it →

    The JSON twin, if you want the object without the page around it.

  4. 4

    Events and pod output

    The same page reaches the events the cluster recorded against an object, and the pods' own stdout — without a kubeconfig.

When a cell has no binding

The binding name comes from a token-scoped read. Signed out, cells fall back to the component's deploy history, which is served from the delivery index and needs no token. That is a worse answer than the manifest and much better than a dead link.

caution

The binding name is deliberately not reconstructed as <component>-<environment>. That convention holds for every binding in this cluster today and breaks on the ones dns_safe() truncates at 60 characters — silently, on the longest names, which are the least likely to be spot-checked.

Something not deployed anywhere

A platform construct has no binding, so its drill-down is what it expands into: the templates it renders, with the kind, API group, name pattern, target plane and the condition each object is included under.

Resource types, component types, traits, workflows and project types — all one page each, all with an What it expands into panel.

Browse the constructs →

${metadata.name} is printed exactly as the construct writes it. Substituting a plausible value would produce a name that looks real and is not, and a reader comparing it against a live object would be comparing against a guess.

A trait that only patches renders nothing. patches is a third verb, kept apart from renders and creates, because listing a patched Deployment under the same heading would claim the trait produces one.