Security Case
Dated security-assurance map as of 2026-11-05: the producer and current status of each evidence file, how AI-assisted security work is reviewed, and the open items.
On this page
This page is the entry point for a buyer, integrator, or reviewer who wants to check security evidence without trusting a summary. Each row points at the file that produces or records the metric, and the machine-readable status lives in docs/security/external-validation.json. The status is dated 2026-11-05. A change to a status must update this page and that JSON record together.
What this page is for
- It names the gate or document behind each claim, so the claim can be reproduced from the repository.
- It labels self-assessments as self-assessments instead of presenting them as independent findings.
- It shows
pendingwhere evidence does not exist yet, including the external penetration test. - It records the review date, so a stale assurance page is visible as stale.
What this page is not
- It is not an audit report. No accounting or security firm has reviewed the controls described here.
- It is not a certificate. The project holds no ISO/IEC 27001, SOC 2, or comparable certification, and the OWASP ASVS matrix is a mapping rather than a passed audit.
- It does not claim that SveltyCMS is safer than another product. No competitor is named or compared on this page, and no ranking is implied.
- It is not a substitute for testing your own deployment. Configuration, hosting, secrets, and integrations determine the effective posture of a running installation.
Compliance note
Security statements in this repository follow EU Directive 2006/114/EC on misleading and comparative advertising and German UWG §6. As of 2026-11-05, the rules applied here are:
- every factual claim is dated and links to a source that can be checked;
- self-assessments are labelled as self-assessments;
- no comparative claim is made about another product;
- missing evidence is shown as
pending, not inferred from adjacent checks.
Evidence map
The status column describes what exists in this repository on 2026-11-05. Internal metrics are produced by project scripts and have not been independently reviewed.
Every row is checked by one command: bun run security:assurance (also part of bun run check and the CI whitebox job). --only=<id> runs a single check and --json prints a machine-readable summary.
| Metric | Produced by | Current status (2026-11-05) |
|---|---|---|
| Patch latency | scripts/security/check-advisories.ts; published in patch latency |
Self-assessed internal gate. No advisory has been published as of 2026-11-05: the table is empty by design, and provenance: "example" records are excluded from every count. |
| Advisories per fix (OSV / CVE) | Advisory process; ledger in scripts/security/check-advisories.ts, dependency data from scripts/security/scan-osv.ts |
Process documented and enforced by the ledger gate. No public advisory exists yet; the first real record will carry the OSV/CVE ids. |
| Test strength (mutation score) | scripts/security/check-test-strength.ts; published in test strength |
Self-assessed internal measurement. Floors are defined; no mutation run has been published yet. |
| Threat-model coverage | scripts/security/check-threat-model-drift.ts; docs/security/threat-model.json and threat models |
Self-assessed inventory, machine-checked: 58/58 server route files (100.0%) covered as of 2026-11-05; not independently reviewed. |
| Supply chain (Scorecard/SLSA/Sigstore) | docs/security/external-validation.json; Scorecard runs in .github/workflows/scorecard.yml |
pending — no Scorecard score, SLSA level, or Sigstore identity is recorded as of 2026-11-05. |
| Independent validation (pen test / bounty) | docs/security/external-validation.json |
pending — no dated external penetration test and no live public bug-bounty programme as of 2026-11-05. |
AI-assisted security
AI tools assist this project under rules that keep a human accountable for every fix:
- AI may draft vulnerability triage notes, regression tests, threat-model entries, and advisory text.
- A named human maintainer reviews and signs every security fix before merge. The signature is the approving review on the change request; automation does not approve security changes.
- Model output is untrusted input. It is reviewed like any external contribution and is not merged without tests that demonstrate the fix.
- No secrets, credentials, customer data, or private deployment configuration are sent to a model. Bootstrap secrets stay in
config/private.tsand are not pasted into prompts, issues, or commits.
Open items
- External penetration test. No dated report by a party outside the project exists as of 2026-10-18. The JSON record stays
pendinguntil a report exists. See security posture. - OpenSSF Scorecard. The
scorecard.ymlworkflow is configured, but no score is recorded; the record stayspendinguntil a run result is written intoopenssf_scorecard.latest_score. - SLSA provenance.
pending. The level is recorded when a verifiable build attestation exists. - Sigstore signing.
pending. The identity is recorded when release artifacts are signed. - Bug bounty.
pending. No public programme is live; the responsible-disclosure route in SECURITY.md remains open. - Independent review of internal metrics. Patch latency, mutation score, and threat-model coverage are self-assessed samples. They are not an external audit.
- OWASP ASVS. The OWASP ASVS matrix maps controls to chapters; it is not a passed audit and not a certificate.
- Next review.
last_reviewed_atin the JSON record is2026-11-05;scripts/security/check-external-validation.tsfails when the review is more than 180 days old or a completed penetration test is more than 365 days old.
Reporting and disclosure
Report vulnerabilities through the private GitHub Security Advisory form or security@sveltycms.com. Reply and fix windows, the coordinated-disclosure timeline, and the supported scope are in SECURITY.md; operational handling is in incident response.