From cf376ab3a8194fa3dd6ed48ca360ecc69d04423e Mon Sep 17 00:00:00 2001 From: opencode Date: Mon, 6 Jul 2026 20:14:44 +0700 Subject: [PATCH] docs(pry): remove hallucinated Zoho CRM from docs + stub crm_sync_zoho.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AUDIT-2026-Q3.md §Hallucinated features flagged that FEATURES.md claimed Zoho CRM sync but no code existed. The codebase now ships Salesforce, HubSpot, Pipedrive, and Close.com in crm_sync.py — no Zoho. This commit enforces doc-vs-code parity: - Remove the Zoho row from FEATURES.md - Strip '~~Zoho~~' from USAGE.md and ARCHITECTURE.md - Move ROADMAP.md from '✅ Zoho CRM sync' to '⏸ deferred' - Add crm_sync_zoho.py as a discoverable stub that raises NotImplementedError and points at the audit doc for rationale PRs welcome: implement Zoho support using the same shape as the other CRM backends in crm_sync.py. --- ARCHITECTURE.md | 2 +- FEATURES.md | 1 - ROADMAP.md | 2 +- USAGE.md | 2 +- crm_sync_zoho.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 crm_sync_zoho.py diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index eea92f5..7341d1c 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -121,7 +121,7 @@ All data stored under `~/.pry/`: | `costing.py` | 266 | Costing | Per-operation cost tracking and analytics | | `email_scraper.py` | 364 | Email | Email data extraction (Gmail, Outlook, raw email) | | `commerce_sync.py` | 191 | Commerce | WooCommerce/Shopify product sync | -| `crm_sync.py` | 359 | CRM | Salesforce/HubSpot/Zoho CRM sync | +| `crm_sync.py` | 359 | CRM | Salesforce / HubSpot / Pipedrive / Close.com sync | | `destinations.py` | 361 | Export | Data export — webhooks, Slack, S3, GCS, SFTP | | `intelligence.py` | 287 | Intel | Competitive intelligence — snapshots, alerts, diff tracking | | `compliance.py` | 443 | Compliance | GDPR/CCPA compliance — sensitive data detection, consent | diff --git a/FEATURES.md b/FEATURES.md index ce9b6f3..ae0cc1f 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -151,7 +151,6 @@ last_updated: 2026-06-30 | Shopify app backend | `shopify-app/` | External | ✅ | | Salesforce CRM sync | `crm_sync.py` | `POST /v1/crm/sync` | ✅ | | HubSpot CRM sync | `crm_sync.py` | `POST /v1/crm/sync` | ✅ | -| ~~Zoho CRM sync~~ | ~~`crm_sync.py`~~ | ~~`POST /v1/crm/sync`~~ | ❌ not implemented (grep: 0 matches in code) | ## Pipelines diff --git a/ROADMAP.md b/ROADMAP.md index f656ef4..2406f15 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -87,7 +87,7 @@ Pry is a mature, feature-complete self-hosted web scraping platform. This roadma - ✅ Shopify product sync (with Shopify app backend) - ✅ Salesforce CRM sync - ✅ HubSpot CRM sync -- ✅ Zoho CRM sync +- ⏸ Zoho CRM sync — deferred (see AUDIT-2026-Q3.md §Hallucinated features) ### Compliance - ✅ GDPR consent management diff --git a/USAGE.md b/USAGE.md index e760b1e..b0847e6 100644 --- a/USAGE.md +++ b/USAGE.md @@ -387,7 +387,7 @@ POST /v1/commerce/sync } ``` -### Salesforce / HubSpot / ~~Zoho~~ +### Salesforce / HubSpot ```json POST /v1/crm/sync diff --git a/crm_sync_zoho.py b/crm_sync_zoho.py new file mode 100644 index 0000000..f5db11a --- /dev/null +++ b/crm_sync_zoho.py @@ -0,0 +1,53 @@ +"""Pry — Zoho CRM sync (NOT IMPLEMENTED). + +Stub kept so the module name is discoverable in code search and so the +doc-vs-code parity promised in AUDIT-2026-Q3.md §"Hallucinated features" +holds: the FEATURES.md row was removed; this stub is the proof that we +considered and deferred Zoho rather than silently shipping a half-baked +implementation. + +If/when Zoho support is reintroduced, the real implementation will live +here. It should follow the same shape as the other CRM backends in +``crm_sync.py`` (sync_to_) and accept either an OAuth refresh +token or a long-lived API token via gopass-injected env vars. + +To enable: implement sync_to_zoho() and remove the NotImplementedError. +Document the API endpoints, scopes, and field map in this module's +docstring before landing. + +# SPDX-License-Identifier: MIT +# Copyright (c) 2026 Rug Munch Media LLC +# +# Part of Pry — https://git.rugmunch.io/RugMunchMedia/pryscraper +# Licensed under MIT. See LICENSE. +""" + +from __future__ import annotations + +from typing import Any + +import httpx + +ZOHO_API_BASE = "https://www.zohoapis.com/crm/v2" + + +async def sync_to_zoho( + objects: list[dict[str, Any]], + object_type: str = "Leads", + access_token: str = "", + api_domain: str = "https://www.zohoapis.com", +) -> dict[str, Any]: + """Sync scraped data to Zoho CRM. + + Raises: + NotImplementedError: Zoho sync is deferred. See AUDIT-2026-Q3.md. + """ + raise NotImplementedError( + "Zoho CRM sync is intentionally not implemented. " + "See AUDIT-2026-Q3.md §Hallucinated features for rationale. " + "PRs welcome: implement using Zoho CRM v2 REST API " + "(/crm/v2/{module} POST upsert) with OAuth2 refresh-token flow." + ) + + +__all__ = ["sync_to_zoho", "ZOHO_API_BASE"] \ No newline at end of file