{
  "schema_version": 1,
  "name": "wordpress_inquiry_to_manual_review_to_crm",
  "as_of": "2026-08-29",
  "status": "OFFLINE_VALIDATED_RUNTIME_UNMEASURED",
  "purpose": "Accept a WordPress inquiry, reject malformed or bot-like input, return a non-sensitive receipt, require human approval, then prepare a minimal HubSpot contact payload.",
  "states": [
    "received",
    "rejected",
    "pending_manual_review",
    "approved_for_crm",
    "rejected_by_reviewer"
  ],
  "required_fields": [
    "name",
    "email",
    "message",
    "consent"
  ],
  "optional_fields": [
    "company",
    "source",
    "website"
  ],
  "limits": {
    "name_characters": 100,
    "email_characters": 254,
    "company_characters": 150,
    "message_characters": 2000
  },
  "privacy": {
    "public_response_contains_pii": false,
    "audit_event_contains_pii": false,
    "crm_payload_before_manual_approval": false,
    "raw_message_in_default_crm_contact_payload": false,
    "production_retention_days": "UNMEASURED_REQUIRES_OWNER_POLICY"
  },
  "security_gates_before_activation": [
    "Configure n8n Header Auth credential shared only with WordPress.",
    "Configure TLS, request size limit, and rate limiting at the edge.",
    "Replace the review-form link with an authenticated reviewer-only path.",
    "Set execution-data retention and verify that successful runs do not persist raw personal data.",
    "Create HubSpot private app credentials with only the scopes required for contact create/update.",
    "Run n8n security audit and a backup restore test if self-hosted.",
    "Publish a privacy notice and define deletion/access request handling."
  ],
  "stop_conditions": [
    "Do not activate with Webhook authentication set to none.",
    "Do not connect HubSpot before the manual-review branch is verified.",
    "Do not place credentials, production webhook URLs, or real inquiry samples in Git.",
    "Do not automatically send replies based on priority classification."
  ]
}
