Install lifecycle
All lifecycle steps are audited commands (see Commands); the admin's Eklentiler gallery is just a client of them.
- Browse — the gallery lists
listedfirst-party extensions by category. Never a price. - Consent — a Mozaik-owned screen shows the manifest's
scopeswith Turkish labels from the platform scope registry (KVKK-sensitive scopes highlighted) and thepii.purposeTRstatement with the number of buyer fields the extension will receive. - Install —
extension.installcreates the store's row DISABLED, pinsversion+ amanifest_snapshot, and grants the scopes verbatim. Sandbox-runtime manifests are refused until P2 (ADR 0027). - Configure —
extension.configurestores the config after server-side Zod validation and normalization (defaults applied, IBANs canonicalized). The admin form is generated from the manifest's JSON Schema. Secrets go throughsecret.set(write-only; sandbox prefix enforced whileconfig.mode !== "live"). - Enable —
extension.enablerequires every required secret present and a valid config, enforces one enabled extension permethodId, and stamps the snapshot. Enable/disable/configure bump the store's catalog generation because payment capabilities and checkout CSP origins project into cached storefront HTML. - Upgrade —
extension.upgrademoves the pinned version to the platform's current manifest after re-validating the stored config. Never silent. - Uninstall — two-step:
extension.disablefirst, thenextension.uninstall. The row is deleted; the config is archived in the command's audit result; secrets are KEPT (merchant-owned credentials —secret.deleteis explicit);app.{vendor}.*metafields are kept (orders reference them).
A fresh store seeds exactly one row: the unlisted mozaik.flat-shipping floor, installed but disabled, enabled by the merchant's first "Kargo ücreti" save.
Generated from the live platform registries at build time — reference pages cannot go stale. Markdown variant: /install-lifecycle.md