docs(pry): remove hallucinated Zoho CRM from docs + stub crm_sync_zoho.py

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.
This commit is contained in:
opencode 2026-07-06 20:14:44 +07:00 committed by Rug Munch Media LLC
parent 0125da76d0
commit cf376ab3a8
5 changed files with 56 additions and 4 deletions

View file

@ -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 |

View file

@ -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

View file

@ -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

View file

@ -387,7 +387,7 @@ POST /v1/commerce/sync
}
```
### Salesforce / HubSpot / ~~Zoho~~
### Salesforce / HubSpot
```json
POST /v1/crm/sync

53
crm_sync_zoho.py Normal file
View file

@ -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_<platform>) 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"]