Routes started as the way to put an app on the public internet. They quickly became a separate GitOps concern: networking has its own lifecycle, its own safety checks, and its own reconciliation lag to explain.
The first route primitive
0.1.24 introduced route create, route list,
route info, and route delete. Mechanics provisioned a per-user
Gateway, attached cert-manager for automatic Let's Encrypt certificates, and
rendered HTTPRoutes that point at the app Service. The default hostname followed
the tenant shape: <route>.<user>.<base-domain>.
The early safety boundary was host validation. A user could serve their own Mechanics-managed hostnames, while custom domains later became a separate claim system. That split kept route creation from becoming an implicit ownership grab.
Networking moved out of app directories
0.1.38 moved Mechanics-managed routes into network/routes/<app>/ in the
user's gitops repo. This was more than a file shuffle. It gave each tenant a
dedicated network Argo CD Application, so route reconciliation could be reasoned
about independently from workload reconciliation.
The move also made deletion cleaner. app delete could remove the
Mechanics-managed route files for that app and clean up unused Gateway hosts,
while user-authored HTTPRoutes outside the network area stayed untouched.
Routes got production defaults
0.1.40 added automatic HTTP-to-HTTPS redirect routes. Every
route create now creates a companion redirect HTTPRoute and a backend
HTTPS route. Gateway listeners also gained explicit section names, so HTTP and
HTTPS routes bind to the intended listeners instead of matching too broadly.
Diagnostics became part of the route
0.1.50 turned route info into a real troubleshooting command. It reports
Gateway listener status, TLS certificate readiness, backend Service existence,
ready endpoints, and HTTPRoute acceptance conditions. That matters because a
route can be declared correctly but still be waiting on certificate issuance,
Gateway acceptance, or backend readiness.
0.1.55 completed the GitOps-first route model with route sync and
route wait. The GitOps declaration became the authority: Mechanics can
reconcile Gateway listeners from declared routes, remove stranded listeners,
and explain whether a problem is cluster lag or a missing declaration. Host
conflict guards also enforce one hostname per route before any mutation.
A route is not just a live Gateway object. It is a GitOps declaration, a TLS certificate, a backend check, and an audit record.