# ATLAS security and publication policy

Treat every committed file as public-staging material, regardless of repository
visibility. Repository privacy and noindex are not access controls.

## Protected material

Never commit or upload restricted research PDFs, private master ZIPs, credentials,
private notes, identifying information, or unapproved research artifacts. Never
copy them into tests, screenshots, caches, deployment packages, or Git history.
Report suspected exposure through the repository owner's private security
workflow; do not include secret values or private attachments in public issues.

## Website controls

- No accounts, backend, analytics, cookies, third-party fonts, or remote assets.
- Dynamic content uses safe text nodes and explicit SVG attributes. No unsafe DOM
  injection, eval, new Function, inline executable script, or event attributes.
- Meta CSP restricts all default resources and permits only local scripts,
  styles, images, connections, and workers. Forms cannot submit.
- `_headers` adds frame-ancestors, no-sniff, no-referrer, restricted permissions,
  frame denial, and same-origin cross-origin policies on compatible hosts.
- Offline reading requires an explicit button click. `sw.js` accepts only exact
  same-origin, query-free allowlisted GETs. No PDFs, archives, Python downloads,
  Markdown, private paths, or redirects are cached. Cache names are scope-specific.
  Users can remove the offline copy and worker via the footer or browser settings.
- `scripts/package.py` copies only a reviewed explicit public allowlist. The
  complete checkout must never be used as the deployment artifact.

## Validation boundary

The static tests check source and allowlist invariants; real browser checks test
CSP enforcement, worker boundaries, and controls. These do not constitute a
penetration test or proof of full accessibility conformance. The Python local
server does not apply `_headers`. Actual host headers and HTTPS remain untested
until a separately authorized deployment is configured. See DEPLOYMENT.md.

Public viewing of the allowlisted ATLAS site was approved on October 29, 2026. The site is **not automatically deployed by committing this repository**. Deploy only reviewed release artifacts through the isolated `production` branch and Cloudflare Pages, then run `scripts/audit_live.py` against the actual HTTPS URL. Never publish the source checkout or private master. The verified Cloudflare-managed `atlas-reality-calculus.pages.dev` hostname is eligible for a one-year, host-specific HSTS rule. No `includeSubDomains` or preload is configured. Future custom domains require a separate review.
