Security and trust

A boundary, not a badge.

Mozaic’s public beta is designed around explicit tenant ownership, deliberate publication, strong authentication, exact-revision authorization, isolated execution, and evidence that remains attached to the work it describes.

Report a vulnerability

Security principles

01 / TENANCY

Organizations are the boundary.

Product data and authorization are organization-scoped. Tenant-local transactions and forced row-level security reinforce that boundary in the PostgreSQL profile.

02 / VISIBILITY

Private unless published.

Resources do not become public because authorization is missing. Publication is an explicit, authorized action, with ancestor visibility checked rather than inferred.

03 / IDENTITY

Strong authentication for privilege.

Email verification, opaque sessions, WebAuthn/FIDO2, TOTP, recovery codes, and fresh authentication protect account and organization operations.

04 / REVISION

Authorization binds exact work.

Review snapshots, checks, execution grants, and branch policy refer to immutable revisions. A changed proposal cannot borrow old execution evidence.

05 / EXECUTION

Untrusted jobs stay separate.

Pipeline code runs in bounded rootless Podman job pods under a separate supervisor, without a container socket in the application.

06 / EVIDENCE

Releases keep provenance.

Verified package publication retains the revision, plan, attempt, artifact identity, digest, and relevant check and signature evidence.

People and policy

Identity establishes who. Policy still decides what.

Authentication does not imply organization membership or resource access. Organization roles are composed from explicit claims, may be assigned at a defined scope, and are re-evaluated by the context that owns the requested operation.

  • Verified account lifecycleRegistration, email verification, recovery, opaque sessions, and password screening avoid unnecessary account disclosure.
  • Multi-factor optionsPlatform passkeys, roaming FIDO2 security keys, TOTP authenticators, and single-use recovery codes are supported.
  • Fresh privileged sessionsSensitive owner and security actions require a recently confirmed strong authenticator.
  • Versioned roles and invitationsAssignments refer to an explicit role version; invitations are email-bound, expiring, single-use, and revalidated at acceptance.
  • No implicit external membershipA public contributor can propose work without silently becoming a member of the target organization.
Hostile-code boundary

The runner is outside the application.

Pipeline orchestration resolves and records a canonical plan, while a separately operated rootless supervisor executes user code. The application container never receives a Docker or Podman socket.

A user request reaches ingress and the Mozaic application. The application uses tenant-scoped PostgreSQL data. Pipeline grants are delivered to a separate rootless runner, which starts ephemeral bounded job pods without access to the application control plane.

The runner boundary is separate from the organization product plane.

External-contributor execution

  • Exact grantAn authorized maintainer grants one exact repository revision and one resolved plan, not a moving branch.
  • Restricted authorityUntrusted jobs receive no protected secrets, privileged mode, host mounts, deployment authority, package publication authority, or trusted cache writes.
  • Immutable attemptsLogs, test results, and artifacts belong to an immutable attempt. Retrying creates new history.
  • Honest uncertaintyRunner loss after possible execution becomes indeterminate rather than silently running user code again.
Public and published

Exposure is a deliberate state change.

Mozaic keeps working state and public state distinct. New resources start non-public; an authorized user publishes specific project and repository state or a specific immutable knowledge checkpoint.

  • Ancestor visibility is enforcedA project cannot become effectively public through a private organization, and a repository cannot bypass private ancestors.
  • Public readers receive a bounded viewPublic pages expose only permitted project metadata, published knowledge, public source, visible work, trusted builds, releases, and activity.
  • Knowledge publishes a checkpointReaders do not see an editor’s changing working state unless an authorized user deliberately publishes a new revision.
  • Package lifecycle stays auditableVersion bytes are immutable; unlisting and deprecation are metadata changes, while elevated purge retains a tombstone.
Integrity and operations

Failure should remain visible.

Security-relevant state changes produce governance audit evidence. The operated topology also exposes component readiness, runner state, storage integrity, backup posture, incidents, migration state, and delivery queues to supported operator views.

  • Trace context and typed errorsHTTP boundaries retain diagnostic context without turning internal failure into a false success.
  • Durable delivery stateMail, notifications, events, and signed outgoing webhooks use persistent handoff and idempotent processing.
  • Storage verificationBlob state and integrity scans can identify missing, mismatched, unsafe, or unverified data.
  • Backup posture is explicitThe operator receives a persistent critical warning when remote recovery is not configured and total host loss remains unrecoverable.
Public beta, not certification.

These are product and architecture boundaries, not a claim of third-party compliance certification or a stable support window.

Vulnerability reporting

Please report suspected vulnerabilities privately.

Do not open a public issue. Contact the project maintainers through a private channel and include affected versions or revisions, reproduction steps, impact, and any suggested mitigation. Do not include credentials, personal data, or third-party secrets.

Read beta scope