Mechanics gives users real platform capabilities without making shared cluster credentials the default interface. The isolation model grew around tenant namespaces, Argo CD projects, deploy keys, and narrow SSH verbs.
Each user owns a bounded tenant
0.1.34 introduced the current tenant shape: a private gitops repo, an
x-<user> Kubernetes namespace, and a per-user Argo CD AppProject. The
AppProject constrains what the user's Applications can reconcile and where they
can reconcile it.
That release also moved app lifecycle to ApplicationSet discovery from the GitOps repo. The user can create, update, and delete apps through Mechanics commands, while Argo CD remains the reconciler and the AppProject remains the boundary.
GitOps access stopped depending on personal tokens
0.1.42 changed Argo CD repository access from personal access tokens to SSH deploy keys. Each GitOps repo gets a dedicated read-only deploy key and Argo CD known-hosts management. This narrows the credential blast radius: reconciliation needs repository read access, not a broad user token.
The same release added full user deprovisioning. Removing a user can tear down the user's ApplicationSets, Applications, AppProject, repo secrets, Gateway, namespace, Forgejo account, and identity records in an ordered way.
Users got operational self-service
0.1.51 added a self-service Argo CD owner role scoped to the user's own Applications. That enables rollback, sync, restart, log access, and resource inspection through Argo CD without granting general cluster access. Mechanics also started attributing GitOps commits to the acting Forgejo user, so platform writes show up under the user who requested them.
Addons added resource guardrails
0.1.55 extended tenant provisioning for addons. Each namespace gets an addon quota, and the tenant AppProject whitelists the resource kinds needed by the registered addon catalog. The goal is not unlimited self-service; it is typed self-service inside a namespace, a quota, and a reconciler boundary.
Mechanics does not start by giving agents a kubeconfig. It gives them tenant-scoped verbs and leaves the platform boundary intact.