{
  "name": "Pergola Wiki browser security and privacy posture",
  "version": "2.3",
  "dateModified": "2026-07-25",
  "landingPage": "https://pergola.wiki/security-and-privacy/",
  "scope": "Public static Pergola Wiki pages, first-party browser scripts and response-header configuration in release v2.3.",
  "architecture": {
    "siteType": "Static bilingual educational website",
    "firstPartyExecutableScripts": [
      "/app.js",
      "/search-index-en.js or /search-index-zh.js"
    ],
    "inlineExecutableScripts": 0,
    "thirdPartyExecutableScripts": 0,
    "thirdPartyAnalyticsScripts": 0,
    "advertisingScripts": 0,
    "siteManagedCookies": 0,
    "serviceWorkers": 0,
    "userAccounts": 0,
    "serverSideForms": 0
  },
  "browserDataHandling": {
    "localOnlyTools": [
      "classification path assistant",
      "product evidence checker",
      "installation inspection log",
      "accessibility barrier-report builder",
      "independent reviewer workbench"
    ],
    "behavior": "Entries are processed in the current browser. Generated downloads use browser-created files; the site does not submit those entries to a Pergola Wiki application endpoint.",
    "hostingBoundary": "The hosting and delivery providers may process ordinary request metadata and server logs under their own services. Pergola Wiki does not claim that network or hosting logs do not exist."
  },
  "expectedResponseHeaders": {
    "Strict-Transport-Security": "max-age=31536000",
    "Content-Security-Policy": "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; media-src 'self'; frame-src 'none'; worker-src 'self'; manifest-src 'self'; upgrade-insecure-requests",
    "X-Content-Type-Options": "nosniff",
    "X-Frame-Options": "DENY",
    "Referrer-Policy": "strict-origin-when-cross-origin",
    "Permissions-Policy": "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()",
    "Cross-Origin-Opener-Policy": "same-origin",
    "X-Permitted-Cross-Domain-Policies": "none"
  },
  "verification": {
    "method": "Inspect the HTTPS response headers for the canonical URL and confirm site search, local tools, downloads, images and styles still work under the Content Security Policy.",
    "canonicalUrl": "https://pergola.wiki/",
    "machineReleaseIdentity": "https://pergola.wiki/release.json",
    "checksumManifest": "https://pergola.wiki/SHA256SUMS"
  },
  "knownLimits": {
    "dedicatedPublicSecurityContact": false,
    "securityTxtPublished": false,
    "independentPenetrationTestRecorded": false,
    "independentSecurityCertificationRecorded": false,
    "vulnerabilityDisclosureProgramRecorded": false,
    "subdomainsCoveredByHstsPolicy": false,
    "hstsPreloadAsserted": false,
    "statement": "Headers reduce selected browser-side risks; they do not prove hosting-account security, eliminate software vulnerabilities, validate content correctness or constitute an independent security audit."
  }
}