GA readiness

Groundwork before calling Externa GA (post-beta): security walkthrough, light performance smoke, and support/upgrade expectations.

Security checklist (staging pass)

Walk Security checklist and Threat model against a staging deploy before GA:

AreaExpectation
APP_DEBUGfalse in production
APP_KEYUnique; never shared across envs
Headers / HTTPSPrefer TLS; TRUSTED_PROXIES when behind a proxy
File downloadsAuthZ on private disks; denylist for dangerous uploads
Public CMS APIKeys + origin allowlist; no unintended public role grants
GraphQLDepth / complexity limits as documented
AI toolsPermission gates (ChecksAiPermissions) on mutating tools

Record findings in the milestone issue or fix before GA cut. Host reporting: repo SECURITY.md.

Performance smoke

Not a full load test. On a reference box (Compose prod or comparable VPS):

  1. Login
  2. List collections; open one item
  3. Public CMS API list + show (Bruno or curl)
  4. Optional GraphQL introspection / one query

Note rough p95 latency for those paths. Flag obvious N+1 or filter costs (especially MySQL vs Postgres) if seen. Optional helper: scripts/perf-smoke.sh in externa-core when present.

Support window (beta → GA)

TopicExpectation
Upgrade pathFollow Upgrade; backup first (Backup)
InstallPackagist create-project (qiick/externa-core); Docker / Herd remain supported
DatabasesSupported databases — Postgres recommended
IssuesGitHub Issues
Post-1.0Public API follows API 1.x compatibility; maintainers ship tags (Releasing #92)

Evidence for this milestone

Beta.4 closed security/install/Docker groundwork (#84–#86, #88, #93, #94). GA (1.0.0) adds AuthZ map docs (#90), outbound empty-secret refuse (#88), Docker deploy DX (#56), and a dated staging pass on the GA issue (#24). Docs site for the cut: 1.1.1.