adobe-to-docusign-migrator/tests/PLATFORM-QUIRKS.md

77 lines
4.1 KiB
Markdown

# Known Bugs, Platform Quirks & System Notes
---
## DocuSign API Bugs
### `numberTabs` renders as text field with Numbers validation (2026-04-15)
**Status:** Confirmed DocuSign API bug
**Symptom:** When a template is created via API with a `numberTabs` entry, DocuSign
renders it in the template editor as a plain Text field with "Numbers" validation
applied — not as a native Number tab type. The JSON sent to the API is correct
(`numberTabs`); the mismatch is in how DocuSign stores or interprets it server-side.
**Impact:** Visual/semantic only. The field still enforces numeric input at signing
time. Tab merging and formula references may behave differently than a true Number tab.
**Workaround:** None known via API. Can be corrected manually in the DocuSign template
editor after upload.
---
## Adobe Sign API Quirks
### Token refresh uses a separate endpoint `/oauth/v2/refresh` (2026-04-16)
**Symptom:** Calling the standard OAuth2 token endpoint (`/oauth/v2/token`) with
`grant_type=refresh_token` returns `{"error":"invalid_request","error_description":
"Invalid grant_type refresh_token"}` — even with a valid, freshly-issued refresh token.
**Root cause:** Adobe Sign uses a non-standard separate endpoint for token refresh:
`/oauth/v2/refresh` (not `/oauth/v2/token`). This differs from the OAuth2 spec and
virtually all other OAuth2 providers.
**Fix applied:** `adobe_api.py` now uses `REFRESH_URL = .../oauth/v2/refresh` for
refresh requests and `TOKEN_URL = .../oauth/v2/token` only for the initial auth code
exchange.
**Note:** `redirect_uri` is not required in the refresh request and should be omitted.
### Company/Title contentType returned with `SIGNER_` prefix (2026-04-15)
**Symptom:** When Company and Title fields are set via the Adobe Sign UI (the API
rejects `COMPANY`/`TITLE` as contentType values), the API returns them as
`SIGNER_COMPANY` and `SIGNER_TITLE` respectively.
**Fix applied:** `compose_docusign_template.py` accepts both variants:
`content_type in ("COMPANY", "SIGNER_COMPANY")` and `("TITLE", "SIGNER_TITLE")`.
### Multi-location (cloned) fields — only first location used (2026-04-15)
**Symptom:** Adobe Sign allows a single field definition to have multiple `locations`
(e.g. Drop-down 1 appeared twice on the page, synced). The original compose script
only used `locations[0]`, silently dropping all subsequent instances.
**Fix applied:** `compose_docusign_template.py` now emits one tab per location for
all data-entry tab types. DocuSign replicates Adobe Sign's cloned-field sync behavior
via tab merging: tabs sharing the same `tabLabel` auto-sync at signing time.
**Tab types covered by fix:** `textTabs`, `numberTabs`, `dateTabs`, `dateSignedTabs`,
`fullNameTabs`, `emailAddressTabs`, `companyTabs`, `titleTabs`, `listTabs`,
`checkboxTabs`.
**Not applicable to:** `radioGroupTabs` (each location is a radio button, not a
clone), `signHereTabs` / `initialHereTabs` (each location is an independent signing
action), `signerAttachmentTabs`.
---
## Migration Pipeline Bugs Fixed
### Text fields rendered as vertical lines (zero width) (2026-04-15)
**Symptom:** All text-entry tabs in DocuSign appeared as a thin vertical line rather
than a visible input box.
**Root cause:** `loc_to_docusign()` was dropping the `width` and `height` values from
the Adobe Sign location dict. DocuSign rendered tabs with no width.
**Fix applied:** `loc_to_docusign()` now returns `(page, x, y, width, height)`.
`width` and `height` are included on all sized tabs. A `MIN_TEXT_WIDTH = 120`
constant ensures fields are at least ~15 characters wide even if the source was
narrower.
---
## Pre-existing Notes
- DocuSign radio tabs sometimes display out of order when group is missing name (2026-04-14, regression found)
- Some PDFs import with negative/zero field widths (caught in onboarding mapping test, 2026-04-14)
- API rate limits: Adobe test sandbox can return 429 if >10 requests/sec (avoid in integration tests)
- DocuSign account- vs user-level templates: admin-only API tokens needed for bulk tests
- DocuSign list tabs with >99 items currently fail to render (API limitation as of 2026)