{
  "schemaVersion": 1,
  "policyVersion": 3,
  "entries": [
    {
      "id": "website-visit",
      "status": "current",
      "action": "Visit this website",
      "trigger": "You open a page on murmursphere.com.",
      "collected": [
        "Basic connection details needed to deliver the page, such as internet address (IP address), time, requested page, and basic browser details"
      ],
      "notCollected": [
        "Conversation text",
        "Character or persona content",
        "An advertising profile",
        "A Murmur Sphere visitor ID"
      ],
      "purpose": "Deliver the page, protect the site, and keep the service working.",
      "recipient": "Cloudflare, the company that delivers this website and provides its approved website analytics",
      "required": "Required to use the public website",
      "retention": "Murmur Sphere creates no app-owned visitor record. Cloudflare controls its delivery records under its applicable terms; this record does not invent a retention period.",
      "publicUse": "Not added to public download totals or a Murmur Sphere visitor profile.",
      "privacyLink": "/privacy#website",
      "evidence": "Website delivery boundary, repository browser suite, and corrected production-audit contract"
    },
    {
      "id": "website-analytics",
      "status": "current",
      "action": "Measure website visits and page performance",
      "trigger": "After you open a production page, the repository-built page loads one exact Cloudflare Web Analytics beacon. The manual snippet is used because automatic injection did not occur for the Worker response.",
      "collected": [
        "Website visits and page views",
        "Requested host and path",
        "Referrer information",
        "Country",
        "Device category",
        "Browser and operating system",
        "Navigation type",
        "Page-load and Core Web Vitals performance information",
        "Connection information Cloudflare receives while handling the page request, including internet address (IP address)"
      ],
      "notCollected": [
        "Local conversations",
        "Characters or Personas",
        "Prompts or AI replies",
        "Installed models",
        "Recovery information",
        "Local app activity",
        "A Murmur Sphere custom visitor ID",
        "An advertising profile",
        "A supporter profile",
        "A Murmur Sphere cross-site tracking record",
        "Cookies or browser storage created by Murmur Sphere analytics"
      ],
      "purpose": "Understand which public pages are used and whether they load and respond well, without adding advertising or cross-site behavioral tracking.",
      "recipient": "Cloudflare, the website delivery and analytics provider",
      "required": "Automatic after a production website visit; it is not part of the desktop app",
      "retention": "Murmur Sphere does not set or claim a retention period for Cloudflare's provider-controlled analytics processing. Cloudflare's applicable service and privacy terms govern that processing.",
      "publicUse": "Kept separate from download-start totals. Visits and page views are not downloads, installations, updates, active users, or unique people.",
      "privacyLink": "/privacy#website",
      "evidence": "Creator-approved policy, repository-owned exact-request classifier, source audit allowing only the exact beacon, and the passing 19-route production audit for site a0098c1d and deployment 0095108a"
    },
    {
      "id": "release-record-check",
      "status": "current",
      "action": "Check whether a public release is ready",
      "trigger": "This website loads its small official release record.",
      "collected": [
        "The same basic connection details used for an ordinary website request"
      ],
      "notCollected": [
        "Installed app version",
        "Installation ID",
        "Device fingerprint",
        "Conversation text"
      ],
      "purpose": "Keep every download button unavailable unless a complete, accepted release record exists.",
      "recipient": "Murmur Sphere's website through Cloudflare",
      "required": "Automatic on current website pages",
      "retention": "No Murmur Sphere release-check history is stored.",
      "publicUse": "The public page shows only the current release state.",
      "privacyLink": "/privacy#website",
      "evidence": "Release-record validator and browser failure tests"
    },
    {
      "id": "local-private-chat",
      "status": "current",
      "action": "Chat in Local Private",
      "trigger": "You send a message inside the desktop app.",
      "collected": [
        "Your active conversation is handled in memory by Murmur Sphere and the local AI on your own computer"
      ],
      "notCollected": [
        "Conversation text by Murmur Sphere online services",
        "Advertising data",
        "Usage analytics",
        "A cloud AI account"
      ],
      "purpose": "Create the reply you asked for.",
      "recipient": "Only Murmur Sphere and the local AI services running on your computer",
      "required": "Required for a Local Private reply",
      "retention": "Current v6 saved app information stays on your computer as local plaintext with integrity checking, protected by your OS account and device access. Historical encrypted recovery inputs remain preserved.",
      "publicUse": "No conversation fact is included in public statistics.",
      "privacyLink": "/privacy#local-private",
      "evidence": "Exact app source ac18f01c4b75c3db8f52893136d88f8946118549 and its Local Private, internet-boundary, protected-file, and package checks"
    },
    {
      "id": "public-model-download",
      "status": "current",
      "action": "Download a public AI model or LoRA",
      "trigger": "You choose a public Hugging Face item and explicitly start the download.",
      "collected": [
        "Public model project name",
        "Chosen public file",
        "Exact public version and file facts needed to check the download"
      ],
      "notCollected": [
        "Conversation text",
        "Character or persona content",
        "Local file paths in the request",
        "Murmur Sphere credentials"
      ],
      "purpose": "Download and verify the public model files you selected.",
      "recipient": "Hugging Face and its file-delivery hosts",
      "required": "Optional and started by you",
      "retention": "Murmur Sphere keeps a record on your computer to identify and check the downloaded model. The outside service applies its own connection-record rules.",
      "publicUse": "Not included in Murmur Sphere's public site statistics.",
      "privacyLink": "/privacy#optional-downloads",
      "evidence": "Public-download boundary and redirect tests"
    },
    {
      "id": "training-tools",
      "status": "current",
      "action": "Download optional local training tools",
      "trigger": "You choose a feature that needs a missing public optimizer, Python add-on, or fixed llama.cpp tool.",
      "collected": [
        "Only the fixed public tool, add-on, version, and file information needed for that download"
      ],
      "notCollected": [
        "Training examples",
        "Conversation text",
        "Recovery keys",
        "Credentials inherited from the computer"
      ],
      "purpose": "Prepare optional local training tools on your computer.",
      "recipient": "Hugging Face, Python or PyTorch download services, or GitHub, depending on the tool",
      "required": "Optional and tied to the feature you choose",
      "retention": "Murmur Sphere keeps only the information on your computer needed to use or check the chosen tool. Each outside service applies its own connection-record rules.",
      "publicUse": "Not included in public statistics.",
      "privacyLink": "/privacy#optional-downloads",
      "evidence": "Fixed-tool, separate add-on installer, and internet-boundary checks"
    },
    {
      "id": "public-avatar-import",
      "status": "current",
      "action": "Import a character's public avatar image",
      "trigger": "You choose a character card whose avatar points to a public web image.",
      "collected": [
        "The public image address needed to fetch the selected picture"
      ],
      "notCollected": [
        "Conversation text",
        "Local network addresses",
        "Cookies",
        "Credentials",
        "Referrer information"
      ],
      "purpose": "Bring the selected public picture into the local character card.",
      "recipient": "The public image host you selected",
      "required": "Optional",
      "retention": "The fetched image can become part of the local character. The image host applies its own connection-record rules.",
      "publicUse": "Not included in public statistics.",
      "privacyLink": "/privacy#optional-downloads",
      "evidence": "Public-image address, redirect, size, and private-network denial tests"
    },
    {
      "id": "contact-page-open",
      "status": "current",
      "action": "Open Contact from the desktop app",
      "trigger": "You explicitly choose Contact in the app or Help.",
      "collected": [
        "Only the fixed public Contact page request and ordinary website connection details"
      ],
      "notCollected": [
        "A draft",
        "Automatic technical details",
        "Conversation text",
        "Persona",
        "Recovery key",
        "Query text",
        "App or installation ID"
      ],
      "purpose": "Show the public Workspace address and privacy-conscious feedback and reporting guidance without carrying app content into the browser.",
      "recipient": "Murmur Sphere's website through Cloudflare",
      "required": "Optional and started by you",
      "retention": "No app message or Contact draft exists. Ordinary website delivery is described under Visit this website.",
      "publicUse": "Not used in public statistics.",
      "privacyLink": "/privacy#contact-and-bugs",
      "evidence": "DS-0058 exact external-action and no-payload tests"
    },
    {
      "id": "bug-report-draft",
      "status": "current",
      "action": "Prepare a bug report",
      "trigger": "You type in the app's Bug report workspace and may choose to include the shown technical details.",
      "collected": [
        "Nothing is sent; you preview exactly what will be copied"
      ],
      "notCollected": [
        "Conversation text",
        "Recovery keys",
        "Raw error logs",
        "Local paths",
        "Automatic uploads"
      ],
      "purpose": "Help you prepare a useful report without sending it automatically.",
      "recipient": "No recipient while drafting or copying; after review, you may manually address an email to support@murmursphere.com",
      "required": "Optional",
      "retention": "The unsaved draft and preview are cleared when you leave the open Bug Report space.",
      "publicUse": "None.",
      "privacyLink": "/privacy#contact-and-bugs",
      "evidence": "Privacy-safe report and no-network tests"
    },
    {
      "id": "workspace-email",
      "status": "current",
      "action": "Send a question, feedback message, bug report, or security report",
      "trigger": "You open your own email service, manually enter the plain public address, and choose Send.",
      "collected": [
        "Sender and recipient addresses",
        "Subject and message you compose",
        "Attachments you add",
        "Ordinary email headers"
      ],
      "notCollected": [
        "Automatic conversation or Persona content",
        "Recovery keys",
        "Model inventory",
        "Installation ID",
        "Automatic app diagnostics"
      ],
      "purpose": "Respond to the general question, bug report, or security concern you choose to send.",
      "recipient": "Your email provider and the support@murmursphere.com Google Workspace inbox",
      "required": "Optional and started entirely by you",
      "retention": "Messages may remain in the Workspace inbox and its backups until they are manually deleted under the account's normal retention settings.",
      "publicUse": "Not included in public download totals or visitor statistics.",
      "privacyLink": "/privacy#contact-and-bugs",
      "evidence": "Creator-approved plain address, closed contact configuration, and rendered no-form/no-mailto tests"
    },
    {
      "id": "security-report-guidance",
      "status": "current",
      "action": "Prepare a security or privacy report",
      "trigger": "You read the Security page and prepare the smallest useful report under your own control.",
      "collected": [
        "Nothing is submitted by the site; only an email you deliberately compose and send reaches the Workspace inbox"
      ],
      "notCollected": [
        "Conversation text",
        "Recovery keys",
        "Sign-in secrets",
        "Automatic technical details",
        "A saved report"
      ],
      "purpose": "Explain how to prepare and manually send a careful report without exposing private app content automatically.",
      "recipient": "No recipient while reading the page; your email provider and the support@murmursphere.com Google Workspace inbox after you choose Send",
      "required": "Optional",
      "retention": "The site keeps no report. A sent message may remain in the Workspace inbox and its backups until manually deleted under the account's normal retention settings.",
      "publicUse": "None.",
      "privacyLink": "/privacy#contact-and-bugs",
      "evidence": "Public Security route and no-form site source"
    },
    {
      "id": "installer-download",
      "status": "current",
      "action": "Download the public Windows installer",
      "trigger": "You press the final website Download button for the accepted public release. App-update downloads still work but do not add to the estimate.",
      "collected": [
        "A random first-party ID stored in your browser after the first deliberate website download click",
        "On the server: a secret-protected one-way code derived from the browser ID, or a secret-protected fallback derived from ordinary connection details when browser storage is unavailable",
        "In the app-owned counter: target public version, Windows, 64-bit computer type, release channel, aggregate estimate, record-change time, and the retained historical website/update totals",
        "A random one-time download token that expires after five minutes and is deleted when used",
        "Cloudflare receives ordinary connection details needed to process the action and deliver the file"
      ],
      "notCollected": [
        "Name",
        "Email",
        "Account ID",
        "Installation ID",
        "Current app version",
        "Raw browser ID in the server-side counter",
        "Raw IP address in the server-side counter",
        "Raw browser header in the server-side counter",
        "Cookie",
        "Referrer in the aggregate counter",
        "Per-download timestamped event",
        "Completed installation"
      ],
      "purpose": "Estimate unique website downloaders more closely by suppressing repeats from the same browser or approximate device, then direct the request to the one accepted immutable file.",
      "recipient": "Murmur Sphere's first-party download counter and immutable R2 file adapter through Cloudflare.",
      "required": "Optional and started by an explicit final download button",
      "retention": "The browser ID remains until site storage is cleared. The SQLite owner retains only secret-protected deduplication codes, bounded release totals, aggregate freshness and sequence, and up to 100 corrections. One-time intents expire after five minutes and are deleted when used.",
      "publicUse": "One public estimated-unique-downloader total. Duplicate filtering began September 26, 2026; the existing total and historical website/update split were retained.",
      "privacyLink": "/privacy#download-counts",
      "evidence": "Activated release 0.5.6 at 2026-10-25T12:34:37.347Z; Worker, browser, Durable Object, privacy, replay, and deduplication tests remain the governing contract."
    },
    {
      "id": "startup-update-check",
      "status": "current",
      "action": "Check for a newer app version",
      "trigger": "At startup of a normally installed public Alpha, the app may read the official small release record.",
      "collected": [
        "A request containing no app content, sent to the official public release record"
      ],
      "notCollected": [
        "Conversation text",
        "Installation ID",
        "Device ID",
        "Current or source version for download counting"
      ],
      "purpose": "Tell you when a newer accepted public-Alpha version exists.",
      "recipient": "Murmur Sphere's website through Cloudflare.",
      "required": "The small check is automatic; any installer download remains a separate explicit choice.",
      "retention": "Release checks create no Murmur Sphere user history.",
      "publicUse": "Opening or declining an update will not count as a download.",
      "privacyLink": "/privacy#download-counts",
      "evidence": "Activated release 0.5.6; exact-route, no-tracking, fail-open startup, channel, redirect, and malformed-manifest tests apply."
    },
    {
      "id": "financial-support",
      "status": "current",
      "action": "Choose optional one-time creator support on Support",
      "trigger": "Opening /support does not contact Stripe. Choosing Show payment details creates a live Checkout Session and loads Stripe Elements inside the page. On return, the Worker verifies the payment status.",
      "collected": [
        "After your choice, Stripe receives the chosen USD amount, a fixed support source label, and the return URL",
        "The Worker checks the opaque Stripe Checkout Session ID on return",
        "Stripe receives contact and card details entered in its secure on-page fields"
      ],
      "notCollected": [
        "Complete card information by Murmur Sphere",
        "Conversation or Persona content",
        "A supporter account on Murmur Sphere",
        "Supporter identity or payment information in Murmur Sphere download or activity statistics"
      ],
      "purpose": "Let visitors optionally provide financial support while Murmur Sphere remains free.",
      "recipient": "Stripe, operating the approved Murmur Sphere checkout",
      "required": "Completely optional; it buys no message credits, features, priority support, influence, or private access",
      "retention": "The site stores no supporter account, payment log, mailing list, Checkout Session ID, or complete card data. Stripe handles payments and receipts under its own privacy and payment terms.",
      "publicUse": "No supporter identity or payment information is added to public download or activity statistics.",
      "privacyLink": "/privacy#support",
      "evidence": "First-party form, live-key and same-origin gates, amount checks, Stripe API tests, source-origin audit, and browser checks"
    },
    {
      "id": "financial-support-comparison",
      "status": "current",
      "action": "Complete a payment started on the old unlisted support route",
      "trigger": "The unlisted /donationtest route uses the same on-page checkout as /support and makes no Stripe request on page visit. It remains accessible so earlier Checkout Sessions can return and be verified.",
      "collected": [
        "The chosen amount in USD and a fixed page-source label are sent to Stripe after your click",
        "On return, the opaque Stripe Checkout Session ID is sent to the Worker for payment-status verification",
        "Stripe receives contact and card information entered in its secure on-page Elements"
      ],
      "notCollected": [
        "Complete card information by Murmur Sphere",
        "Conversation or Persona content",
        "A Murmur Sphere supporter account or payment database",
        "Supporter identity in download or activity statistics"
      ],
      "purpose": "Let a visitor finish a checkout started at the former comparison route.",
      "recipient": "Stripe for Checkout Session creation, on-page Elements, and status verification",
      "required": "Completely optional; it buys no message credits, features, priority, influence, or private access",
      "retention": "The site does not retain a payment log, supporter profile, session ID, or complete card data. Stripe handles payments and receipts under its own terms and account controls.",
      "publicUse": "No supporter identity or payment information enters public download or activity statistics.",
      "privacyLink": "/privacy#support",
      "evidence": "Same support form, legacy source verification, noindex and browser checks"
    }
  ]
}
