{
  "evidence_version": 1,
  "domain": "socialmedia2.com",
  "status": "synthetic_qa_only_not_build_done_evidence",
  "source_inventory": "ops/synthetic-qa/socialmedia2.com/form-surfaces.json",
  "build_done_expected": false,
  "last_evaluated_at": "2026-05-30T03:26:44Z",
  "secret_values_public": false,
  "hosted_ci": false,
  "no_paid_operations": true,
  "secret_store_reference": {
    "provider": "infisical",
    "path": "/polis/socialmedia2_com",
    "keys_referenced": [
      "POLIS_SYNTHETIC_ONBOARDING_TOKEN"
    ],
    "values_public": false
  },
  "build_done_boundary": {
    "e2_e3_satisfied_by_synthetic": false,
    "synthetic_rows_counted_as_real_calibration": 0,
    "synthetic_rows_counted_as_build_done_evidence": 0,
    "real_calibration_required": "At least 500 real opt-in citizens with joined 30-day tie outcomes.",
    "blocked_build_done_codes": [
      "E2",
      "E3",
      "I19",
      "I24",
      "I0"
    ]
  },
  "real_calibration_readback": {
    "intake_response_count": 1,
    "thirty_day_outcome_response_count": 0,
    "joined_record_upper_bound": 0,
    "respondent_data_in_repo": false,
    "respondent_data_printed": false,
    "source": "cloudflare_d1_first_party_native",
    "source_manifest": "site/landing/status/build-done-blockers.json"
  },
  "synthetic_qa_counts": {
    "form_surfaces_total": 17,
    "submit_surfaces_total": 14,
    "implemented_submit_smokes": 16,
    "reference_only_surfaces": 3,
    "open_submit_smokes": 0,
    "local_successful_synthetic_paths": 16,
    "production_successful_synthetic_rows": 0,
    "production_live_canary_runs": 1
  },
  "production_canary": {
    "last_run_status": "production_canary_inserted_read_back_and_cleaned",
    "issue": 127,
    "endpoint": "/api/onboarding/intake",
    "report_path": "target/production-canary/onboarding-canary.json",
    "secret_reference": "/polis/socialmedia2_com/POLIS_SYNTHETIC_ONBOARDING_TOKEN",
    "cloudflare_pages_secret_reference": "POLIS_SYNTHETIC_ONBOARDING_TOKEN",
    "secret_value_printed": false,
    "cleanup_rule": "delete production synthetic canary rows after D1 readback",
    "remaining_canary_rows": 0,
    "synthetic_rows_counted_as_build_done": 0,
    "last_readback_fsv": "docs/fsv/0243-production-onboarding-canary.md"
  },
  "storage_readback": {
    "polis_account_db": {
      "table": "polis_onboarding_intakes",
      "synthetic_rows": 0,
      "citizen_rows": 1,
      "build_done_evidence_rows": 0,
      "last_readback_fsv": "docs/fsv/0369-native-calibration-response-count.md"
    }
  },
  "surfaces": [
    {
      "id": "native_onboarding_intake",
      "route": "/onboarding/",
      "endpoint": "/api/onboarding/intake",
      "status": "implemented",
      "issue": 118,
      "local_check": "scripts/fsv/checks/native_onboarding_synthetic_check.sh",
      "local_report": "target/synthetic-qa/native-onboarding-smoke.json",
      "live_boundary": "Unguarded synthetic POST returns SYNTHETIC_QA_NOT_AUTHORIZED.",
      "never_build_done_evidence": true
    },
    {
      "id": "email_login_request",
      "route": "/account/",
      "endpoint": "/api/auth/email/start",
      "status": "implemented",
      "issue": 119,
      "local_check": "scripts/fsv/checks/email_login_synthetic_check.sh",
      "local_report": "target/synthetic-qa/email-login-smoke.json",
      "live_boundary": "Production-like unconfigured email path returns EMAIL_LOGIN_NOT_CONFIGURED.",
      "never_build_done_evidence": true
    },
    {
      "id": "account_profile_private",
      "route": "/account/home/",
      "endpoint": "/api/account/profile",
      "status": "implemented",
      "issue": 117,
      "local_check": "scripts/fsv/checks/account_profile_synthetic_check.sh",
      "local_report": "target/synthetic-qa/account-profile-smoke.json",
      "live_boundary": "Unauthenticated production profile API returns AUTH_SESSION_REQUIRED; synthetic account rows are marked never-build-done evidence.",
      "never_build_done_evidence": true
    },
    {
      "id": "account_citizenship_reading_90d",
      "route": "/account/citizenship-reading/",
      "endpoint": "/api/account/citizenship-reading",
      "status": "implemented",
      "issue": 62,
      "local_check": "scripts/fsv/checks/account_citizenship_reading_check.sh",
      "local_report": "target/synthetic-qa/account-citizenship-reading-smoke.json",
      "live_boundary": "Unauthenticated production Citizenship Reading API returns AUTH_SESSION_REQUIRED; synthetic reading sessions send no real invitation and remain never-build-done evidence.",
      "never_build_done_evidence": true
    },
    {
      "id": "account_inactivity_90d",
      "route": "/account/inactivity/",
      "endpoint": "/api/account/inactivity",
      "status": "implemented",
      "issue": 65,
      "local_check": "scripts/fsv/checks/account_inactivity_check.sh",
      "local_report": "target/synthetic-qa/account-inactivity-smoke.json",
      "live_boundary": "Unauthenticated production inactivity API returns AUTH_SESSION_REQUIRED; synthetic inactivity events send no real outreach and remain never-build-done evidence.",
      "never_build_done_evidence": true
    },
    {
      "id": "account_reflection_24h",
      "route": "/account/reflect/",
      "endpoint": "/api/account/reflection",
      "status": "implemented",
      "issue": 73,
      "local_check": "scripts/fsv/checks/browser_form_journey_check.sh",
      "local_report": "target/synthetic-qa/browser-form-journey-smoke.json",
      "live_boundary": "Unauthenticated production reflection API returns AUTH_SESSION_REQUIRED; synthetic reflection events are marked never-build-done evidence.",
      "never_build_done_evidence": true
    },
    {
      "id": "account_tie_check_30d",
      "route": "/account/tie-check/",
      "endpoint": "/api/account/tie-check",
      "status": "implemented",
      "issue": 74,
      "local_check": "scripts/fsv/checks/account_tie_check_check.sh",
      "local_report": "target/synthetic-qa/account-tie-check-smoke.json",
      "live_boundary": "Unauthenticated production tie-check API returns AUTH_SESSION_REQUIRED; synthetic tie-check events produce tie_strength_30d payloads and remain never-build-done evidence.",
      "never_build_done_evidence": true
    },
    {
      "id": "account_invitation_private",
      "route": "/account/invite/",
      "endpoint": "/api/account/invitations",
      "status": "implemented",
      "issue": 66,
      "local_check": "scripts/fsv/checks/browser_form_journey_check.sh",
      "local_report": "target/synthetic-qa/browser-form-journey-smoke.json",
      "live_boundary": "Unauthenticated production invitation API returns AUTH_SESSION_REQUIRED; synthetic invitation events send no real invitation and remain never-build-done evidence.",
      "never_build_done_evidence": true
    },
    {
      "id": "account_dm_ciphertext_envelope",
      "route": "/account/dm/",
      "endpoint": "/api/account/dm",
      "status": "implemented",
      "issue": 75,
      "local_check": "scripts/fsv/checks/account_dm_check.sh",
      "local_report": "target/synthetic-qa/account-dm-smoke.json",
      "live_boundary": "Unauthenticated production DM API returns AUTH_SESSION_REQUIRED; synthetic DM events contain ciphertext envelope fields only and remain never-build-done evidence.",
      "never_build_done_evidence": true
    },
    {
      "id": "account_exit_self_serve_deletion",
      "route": "/account/exit/",
      "endpoint": "/api/account/exit/immediate-delete",
      "status": "implemented",
      "issue": 64,
      "local_check": "scripts/fsv/checks/browser_form_journey_check.sh",
      "local_report": "target/synthetic-qa/browser-form-journey-smoke.json",
      "live_boundary": "Unauthenticated production deletion API returns AUTH_SESSION_REQUIRED; synthetic deletion events execute no real deletion and are marked never-build-done evidence.",
      "never_build_done_evidence": true
    },
    {
      "id": "partner_venue_application",
      "route": "/venues/apply/",
      "endpoint": "/api/venues/applications",
      "status": "implemented",
      "issue": 287,
      "local_check": "scripts/fsv/checks/partner_venue_application_check.sh",
      "local_report": "target/synthetic-qa/partner-venue-application.json",
      "live_boundary": "Synthetic partner venue applications stay in operator review, hash contact references, and never enter live nudges or BUILD_DONE evidence.",
      "never_build_done_evidence": true
    },
    {
      "id": "manual_event_import",
      "route": "/venues/operator/",
      "endpoint": "/api/venues/operator/manual-import",
      "status": "implemented",
      "issue": 296,
      "local_check": "scripts/fsv/checks/manual_event_import_check.sh",
      "local_report": "target/synthetic-qa/manual-event-import.json",
      "live_boundary": "Synthetic manual imports require source contact references, terms attestation, and operator review before they can reach nudge candidates.",
      "never_build_done_evidence": true
    },
    {
      "id": "partner_event_lifecycle",
      "route": "/venues/operator/",
      "endpoint": "/api/venues/operator/lifecycle",
      "status": "implemented",
      "issue": 303,
      "local_check": "scripts/fsv/checks/partner_event_lifecycle_check.sh",
      "local_report": "target/synthetic-qa/partner-event-lifecycle.json",
      "live_boundary": "Synthetic lifecycle updates stale affected recommendations, write no-tracking notice rows, and block cancelled or unsafe events from suggestions.",
      "never_build_done_evidence": true
    },
    {
      "id": "hosted_event_self_service",
      "route": "/events/submit/",
      "endpoint": "/api/events/host-submissions",
      "status": "implemented",
      "issue": 324,
      "local_check": "scripts/fsv/checks/hosted_event_self_service_check.sh",
      "local_report": "target/synthetic-qa/hosted-event-self-service.json",
      "live_boundary": "Synthetic hosted-event self-service rows stay queued for review, hash contact references, and cannot enter public discovery or nudges before approval.",
      "never_build_done_evidence": true
    },
    {
      "id": "browser_form_journey",
      "route": "all local submit surfaces",
      "endpoint": "browser",
      "status": "implemented",
      "issue": 121,
      "local_check": "scripts/fsv/checks/browser_form_journey_check.sh",
      "local_report": "target/synthetic-qa/browser-form-journey-smoke.json",
      "live_boundary": "Browser-level local smoke remains local-only and uses Worker-backed synthetic data.",
      "never_build_done_evidence": true
    },
    {
      "id": "production_live_canary",
      "route": "/onboarding/",
      "endpoint": "/api/onboarding/intake",
      "status": "implemented",
      "issue": 127,
      "local_check": "scripts/fsv/checks/production_onboarding_canary_check.sh",
      "local_report": "target/production-canary/onboarding-canary.json",
      "live_boundary": "A successful production canary requires the guarded QA token path and deletes its synthetic D1 row after readback.",
      "never_build_done_evidence": true
    },
    {
      "id": "governance_sortition_receipt_verifier",
      "route": "/governance/sortition/",
      "endpoint": "none",
      "status": "reference_only",
      "issue": 90,
      "local_check": "scripts/fsv/checks/governance_sortition_page_check.sh",
      "local_report": "none",
      "live_boundary": "Reference-only public receipt verifier reads non-secret aggregate receipts and persists no respondent data.",
      "never_build_done_evidence": true
    }
  ],
  "parent_issue_cross_links": [
    {
      "issue": 2,
      "purpose": "E2/E3 real calibration blocker stays separate from synthetic QA."
    },
    {
      "issue": 53,
      "purpose": "Original synthetic/form QA tracker receives the public boundary link."
    },
    {
      "issue": 62,
      "purpose": "Citizenship Reading synthetic sessions stay separate from real invite scheduling."
    },
    {
      "issue": 64,
      "purpose": "Exit self-serve deletion synthetic events stay separate from real deletion evidence."
    },
    {
      "issue": 65,
      "purpose": "90-day inactivity synthetic events stay separate from real citizen outreach."
    },
    {
      "issue": 66,
      "purpose": "Private invitation synthetic events stay separate from real invite sending evidence."
    },
    {
      "issue": 73,
      "purpose": "Reflection form synthetic events stay separate from real 24-hour outcome evidence."
    },
    {
      "issue": 74,
      "purpose": "30-day tie-check synthetic events stay separate from real joined tie outcome evidence."
    },
    {
      "issue": 75,
      "purpose": "DM ciphertext-envelope synthetic events stay separate from real post-meeting messages."
    },
    {
      "issue": 90,
      "purpose": "Sortition receipt verifier is reference-only and persists no citizen or respondent data."
    },
    {
      "issue": 107,
      "purpose": "Browser smoke issue receives the same never-build-evidence boundary."
    },
    {
      "issue": 115,
      "purpose": "Login wall issue receives the same account/auth synthetic boundary."
    },
    {
      "issue": 287,
      "purpose": "Partner venue application synthetic rows stay in operator review and never enter live nudges."
    },
    {
      "issue": 296,
      "purpose": "Manual event import synthetic rows prove CSV, JSON, and paste validation without live connector activation."
    },
    {
      "issue": 303,
      "purpose": "Partner event lifecycle synthetic rows prove cancellation, reschedule, takedown, incident, and safety stale old suggestions without real notices."
    },
    {
      "issue": 324,
      "purpose": "Hosted event self-service synthetic rows prove host create/update/cancel/reschedule flows without public unreviewed listings."
    }
  ]
}
