You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The template catalog had exactly one development-capable template
(application: frontend + backend + Postgres), so App Studio projects
that only need a single-container web app — a static site, an SPA —
were forced onto the full 3-tier stack or dead-ended in the assistant's
template interview. simple-webapp itself was vestigial: no public URL,
no development block, predating the Gateway API exposure work and the
template-native sandbox design.
Rework simple-webapp (v0.2.0) into the single-tier counterpart of the
application template:
- Public exposure: HTTPRoute on the platform Gateway parent, controller
stamped expose.fqdn, status.url/host — the wiring App Studio's
preview reads.
- spec.development: one component "app" claiming the workspace root
(workspacePath "."), node dev image, the proven vite shim start
command carried verbatim from the application frontend tier.
- spec.dataPlane: sync/restart/env/log verbs for that component.
- image required in production only (same CEL pattern as application);
a dev-only project provisions with just {name, kedgeMode}.
- agent.usage guidance + sampleValues + portal view; drop serviceType.
Generalize the Application instance controller into a table of exposed
instance kinds: Application keeps the full treatment (fqdn +
credentialsSecretName + OIDC bridge + finalizer); SimpleWebApp gets an
exposure-only reconciler that stamps just spec.expose.fqdn — no
cross-cluster state, no finalizer. A future exposed template is one
line in instanceKinds.
Also: cross-point application's agent guidance at simple-webapp for
frontend-only apps, add the missing agent guidance block to
redis-cache, and pin the simple-webapp development contract in a seed
template test (dev component, workspace-root claim, overlay resources
in the RGD, status fields the preview and data plane resolve through).
No app-studio changes needed — it reads development.components live
from the catalog, so simple-webapp appears in the portal picker and
the assistant's selectable set automatically.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: providers/infrastructure/docs/template-conventions.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ invalid field into a materialized resource.
15
15
16
16
| Kind | How to express it | Example |
17
17
|---|---|---|
18
-
|**Per-instance, configurable** (image, version, size, replicas) |`spec.schema` field **with a `default`**; the resource references `${schema.spec.<field>}`|`simple-webapp.spec.image` (`default: "nginx:latest"`); `postgres-database.spec.version`|
18
+
|**Per-instance, configurable** (image, version, size, replicas) |`spec.schema` field **with a `default`**; the resource references `${schema.spec.<field>}`|`simple-webapp.spec.port` (`default: 8080`); `postgres-database.spec.version`|
19
19
|**Fixed sidecar / tooling image** (not user-facing) |**hardcoded literal** in the resource | the control-token `bitnami/kubectl` job (database, redis, application); `quay.io/oauth2-proxy/oauth2-proxy:v7.6.0`|
20
20
|**Platform-global, no universal default**| a reserved `${kedge.*}` substitution token, resolved by the kro backend from env | the exposure Gateway parent `${kedge.gatewayName}` / `${kedge.gatewayNamespace}`; the dev-overlay images `${kedge.devImage.<toolchain>}` / `${kedge.devAgentImage}`; the exposure-URL port suffix `${kedge.appPublicPort}` (empty in prod, `:10443` on local kind) |
0 commit comments