Marketplace Readiness
Security Posture
Marketplace security is future/prep. Current MyronCMS extension security comes from local SDK boundaries: manifest validation, operator grants, caller scopes, namespace checks, migration isolation, and load error capture.
There is no current package signing, sandboxing, dependency resolution, or marketplace trust automation.
Current Controls
| Control | Current behavior |
|---|---|
| Manifest validation | ExtensionManifest.php validates vendor, name, version, scopes, and admin route shape. |
| Vendor namespace | Extension actions must stay under /api/v1/x/{vendor}/ and x.{vendor}.. |
| Operator grant gate | Extensions must be registered, enabled, and granted required manifest scopes. |
| Caller scope gate | API and MCP callers still need the action's requiredScope. |
| MCP exposure gate | MCP tools/list respects exposeToMcp and caller scopes. |
| Migration isolation | SQL migrations may only create, alter, drop, or index {vendor}_* tables. |
| Load error capture | Manifest, migration, and bootstrap failures are recorded without taking core requests down. |
| Audit and rate limits | API/MCP action dispatch uses centralized authorization, audit, and rate-limit behavior where configured. |
Not Current
| Surface | Current status |
|---|---|
| Package signing | Not implemented. |
| Signature verification | Not implemented. |
| Sandbox isolation | Not implemented. |
| Dependency resolution | Not implemented. |
| Marketplace package trust records | Not implemented. |
| Marketplace install audit trail | Not implemented. |
| AI self-install or self-grant | Prohibited by trust-gate policy. |
Human Path
For current local extension work:
- Keep code inside
app/extensions/{vendor}/. - Use a valid manifest.
- Request only necessary base scopes.
- Use isolated
{vendor}_*tables for extension storage. - Register and grant the extension through an administrator.
- Verify load health and errors from the Installed Extensions surface.
For future marketplace work, treat signing, sandboxing, dependency policy, package trust, and install audit as open platform questions.
AI Path
An AI coding agent can review source files and local package docs against this posture.
An installed MCP client cannot install packages, sign packages, verify signatures, sandbox code, resolve dependencies, or grant itself scopes. Those are security parity gaps and trust-boundary questions for future contracts.
Scopes
This page requires no runtime scope to read.
Current security-relevant runtime access uses:
- extension manifest scopes,
- operator grant scopes,
- action
requiredScope, - caller scopes,
- hidden or exposed MCP policy.
No marketplace-specific security scope exists today.
Artifacts
Current security artifacts:
manifest.json- extension grant rows,
- extension load errors,
- action metadata,
- migration files,
- extension-owned tables,
- audit records for reached API/MCP actions where configured.
Future marketplace security artifacts are not implemented.
Safety Boundary
Do not tell AI clients to solve security failures by expanding their own access. If a call fails from missing scope, missing grant, hidden MCP exposure, or rate limiting, the safe response is to stop or ask the operator.
Do not claim package signing, sandboxing, dependency resolution, or package trust automation until those controls exist in runtime.
Verification
Current verification:
php app/tests/verify-extension-system-foundation.php
Review that the package:
- declares only base extension scopes,
- registers only vendor-namespaced actions,
- uses non-empty action schemas,
- keeps migrations inside
{vendor}_*tables, - documents MCP exposure honestly,
- has no hard-coded secrets in extension docs or transport examples.
Future security verification is not available until the platform implements the corresponding runtime controls.
Failure Modes
| Failure | Likely cause | Safe response |
|---|---|---|
| Package claims to be signed | Future trust controls were overstated. | Mark signing as not current. |
| Extension depends on sandbox isolation | Runtime sandboxing does not exist. | Remove the assumption or evaluate sandbox support. |
| AI client asks to grant itself scope | Trust gate boundary was violated. | Keep grants human-admin-only. |
| Migration touches a core table | Storage isolation was bypassed. | Use {vendor}_* tables or contract a core feature. |
| Load error is ignored | Extension failed closed but docs implied success. | Fix the local package and review Installed Extensions load health. |