Enterprise UI redesign — Phases 14–22 (Docusign-branded migration console) #1
Loading…
Reference in New Issue
No description provided.
Delete Branch "ui-redesign"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
blockers[]andwarnings[]to/api/templates/status/api/verifyrouter (send/status/void envelope), frontend polling with per-row status updatesTest plan
pytest tests/ -v— 118/118 passingtests/UI-SMOKE-TEST.md(11 sections, 55 steps)uvicorn web.app:app --reload --port 8000and verify all 7 nav views render🤖 Generated with Claude Code
Phase 8: Normalized intermediate schema (src/models/normalized_template.py, src/services/mapping_service.py) - Platform-agnostic NormalizedTemplate as pipeline bridge - PDF SHA-256 checksums computed during normalization - 13 tests passing Phase 9: Validation service + report builder (src/services/validation_service.py, src/reports/report_builder.py) - Blockers (no recipients, no documents) halt migration - Warnings (no fields, unassigned roles, unsupported features) logged - Structured MigrationReport with per-template status - 20 tests passing Phase 10: Migration options API (web/routers/migrate.py) - source_template_ids, dry_run, overwrite_if_exists, include_documents options - Backward compatible with legacy adobe_template_ids field - 7 tests passing Phase 11: Retry with exponential backoff (src/utils/retry.py) - retry_with_backoff and async_retry_with_backoff decorators - 429/5xx detection via check_response_retryable - 14 tests passing Phase 12: Security hardening (src/utils/log_sanitizer.py) - SanitizingFilter redacts tokens, JWTs, base64 PDF content from logs - 15 tests passing Phase 13: Batch migration API - POST /api/migrate/batch — async background job with job_id - GET /api/migrate/batch/{job_id} — poll progress and results - 6 tests passing Full suite: 108/108 tests passing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>Options modal: dry_run, overwrite_if_exists, include_documents toggles, target folder input. Launches POST /api/migrate/batch and polls GET /api/migrate/batch/{id} every 2s with per-template status icons. Results view: 5-stat summary grid, expandable per-template result rows, CSV export, Verify Templates button. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>Backend (web/routers/verify.py): POST /send (creates envelope from template), GET /status/{id} (polls envelope state), POST /void/{id} (voids test envelope). Registered in app.py. 7 tests passing. Frontend (verification.js): table of migrated templates, Send Test button opens dialog with pre-filled name/email from settings, polling every 5s, per-row status updates (Sent → Delivered → Verified), Void button for cleanup. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>GET /api/auth/{adobe,docusign}/connect and /disconnect — not POST. api.js was calling them with POST, causing 405 Method Not Allowed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>Replaces flat warning strings with machine-readable FieldIssue objects (code, field_name, message, severity) emitted during compose and surfaced in all migration result paths via a new field_issues[] key. Codes: CROSS_RECIPIENT_CONDITIONAL, UNSUPPORTED_OPERATOR, HIDE_ACTION, MULTI_PREDICATE, INVALID_PARENT_TAB, FIELD_TYPE_SKIPPED, PARTIAL_FIELD_TYPE Cross-recipient conditional detection: compose now builds a field→assignee map and flags conditions where the trigger field belongs to a different recipient — the main cause of the CONDITIONALTAB_HAS_INVALID_PARENT 400. UI changes: - Success rows with field_issues show ⚠️ icon + amber "partial" badge - Results, History & Audit, and Template Detail history tab all show field issues grouped by code in collapsible sections within expanded rows Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>