adobe-to-docusign-migrator/docs/agent-harness/EXECUTION-BOARD.md

7.3 KiB
Raw Blame History

Execution Board (Living Kanban)

Last updated: 2026-04-21


Completed (v1 — CLI Pipeline)

  • Adobe Sign OAuth setup + token auto-refresh (src/auth_adobe.py, src/adobe_api.py)
  • Template download pipeline — metadata, fields, docs, PDF (src/download_templates.py)
  • Field type mapping — all major Adobe field types → DocuSign tabs (see field-mapping.md)
  • Coordinate system fix — y passthrough (top-origin, no conversion needed)
  • Conditional logic mapping → conditionalParentLabel/Value (see validation/conditional-logic-eval.md)
  • DocuSign template JSON composition (src/compose_docusign_template.py)
  • DocuSign JWT upload (src/upload_docusign_template.py)
  • Regression checklist for all field types (see tests/FIELD-TYPE-REGRESSION.md)
  • End-to-end round-trip test (3 real Adobe templates → DocuSign)

Phase 1 — Idempotent Upload (2026-04-17)

  • Add find_existing_template(name) to upload_docusign_template.py — lists DS templates by name, returns most-recently-modified match
  • Change upload_template() to upsert: PUT if match found, POST if not
  • Add --force-create CLI flag to bypass upsert
  • Write tests/test_upload_upsert.py — 4 tests passing

Phase 2 — FastAPI Backend Foundation (2026-04-17)

  • Add new dependencies to requirements.txt
  • Create web/ directory structure (app.py, config.py, session.py, routers/, static/)
  • Implement GET /health endpoint
  • Write tests/test_api_health.py — 2 tests passing

Phase 3 — Auth Endpoints (2026-04-17)

  • Implement Adobe Sign OAuth start + callback + disconnect in web/routers/auth.py
  • Implement DocuSign OAuth start + callback + disconnect
  • Implement GET /api/auth/status
  • Write tests/test_api_auth.py — 4 tests passing

Phase 4 — Template Listing API (2026-04-17)

  • Implement GET /api/templates/adobe in web/routers/templates.py
  • Implement GET /api/templates/docusign
  • Implement GET /api/templates/status — computes not_migrated / migrated / needs_update
  • Write tests/test_api_templates.py — 7 tests passing

Phase 5 — Migration API (2026-04-17)

  • Implement POST /api/migrate in web/routers/migrate.py — download → compose → upsert pipeline
  • Implement GET /api/migrate/history — reads/writes migration-output/.history.json
  • Write tests/test_api_migrate.py — 7 tests passing

Phase 6 — Frontend (2026-04-17)

  • Create web/static/index.html — side-by-side template browser layout
  • Create web/static/app.js — auth status check, template listing, migrate flow, history
  • Create web/static/style.css — status badges, layout

Phase 7 — End-to-End & Regression (2026-04-17)

  • Write tests/test_e2e.py — 7-step full pipeline test, 1 test passing
  • Write tests/test_regression.py — compose pipeline vs snapshots, 4 tests passing
  • Create tests/fixtures/expected/ — snapshot JSONs for David Tag Demo, NDA, Rob Test
  • Full suite: 29/29 passing

Phase 8 — Normalized Intermediate Schema (2026-04-21)

  • Create src/models/ package with __init__.py
  • Implement src/models/normalized_template.py — pydantic model with NormalizedTemplate, NormalizedField, NormalizedRole, NormalizedDocument
  • Implement src/services/ package with __init__.py
  • Implement src/services/mapping_service.py — Adobe Sign folder → NormalizedTemplate converter with checksums
  • Write tests/test_normalized_schema.py — 13 tests passing (model construction, serialization, real fixture round-trips)
  • Update README

Phase 9 — Validation Service (2026-04-21)

  • Implement src/services/validation_service.pyValidationResult(blockers, warnings), checks for no recipients, no documents, no fields, missing roles, unsupported features
  • Implement src/reports/report_builder.pyMigrationReport, TemplateReport, MigrationStatus enum, factory functions
  • Integrate validation into migration pipeline (_run_validation in web/routers/migrate.py) — blocks on blockers
  • Implement compare_field_counts(normalized, ds_template) post-migration check
  • Write tests/test_validation_service.py — 20 tests passing
  • Update README

Phase 10 — Migration Options API (2026-04-21)

  • Extend POST /api/migrate request body: source_template_ids[], target_folder, options.dry_run, options.overwrite_if_exists, options.include_documents
  • Implement dry-run path — validate + compose without creating DocuSign templates (status=dry_run)
  • Implement overwrite_if_exists=false — skip already-migrated templates (status=skipped)
  • Implement include_documents toggle — strips documentBase64 from payload when false
  • Keep backward compatibility with legacy adobe_template_ids field
  • Write tests/test_migration_options.py — 7 tests passing
  • Update README

Phase 11 — Rate Limiting & Retry with Backoff (2026-04-21)

  • Implement src/utils/retry.pyretry_with_backoff (sync) and async_retry_with_backoff decorators with exponential backoff + max_delay cap
  • Implement check_response_retryable(status_code) — returns True for 429/500/502/503/504
  • Write tests/test_retry.py — 14 tests passing (exponential delay, max delay, exception filtering, async)
  • Update README

Phase 12 — Security Hardening & Audit Trail (2026-04-21)

  • Implement src/utils/log_sanitizer.pyredact(), redact_dict(), SanitizingFilter, install_sanitizing_filter()
  • Redacts: Bearer tokens, JWT-style tokens, key=value secret assignments, long base64 payloads (PDF content)
  • PDF checksum (SHA-256) computed in mapping_service.adobe_folder_to_normalized() and stored in NormalizedDocument.checksum_sha256
  • Write tests/test_security.py — 15 tests passing
  • Update README

Phase 13 — Batch Migration API (2026-04-21)

  • Implement POST /api/migrate/batch — async background job, returns job_id immediately
  • Implement GET /api/migrate/batch/{job_id} — poll job status, progress, results, summary
  • Implement retry for failed templates (one retry on upload failures)
  • In-memory job store with progress tracking (_batch_jobs dict)
  • Write tests/test_batch_migration.py — 6 tests passing
  • Update README

Full Test Suite (2026-04-21)

108/108 tests passing


Gitea

  • Committed and pushed all changes (2026-04-17)
  • Commit and push Phase 813 work (ui-redesign branch)

Results & Lessons Learned

  • (2026-04-14) NDA, David Tag Demo, Rob Test all converted cleanly
  • (2026-04-15) Coordinate bug fixed — y is top-origin in both platforms, no conversion needed
  • (2026-04-15) Paul Adobe Template created via API; Company/Title fields require manual UI fix (API limitation)
  • (2026-04-17) v2 planning complete — idempotent upload + web UI implementation begins
  • (2026-04-21) Blueprint comparison complete — added normalized schema, validation service, migration options, rate-limit/retry, security hardening, and batch migration phases (Phases 813)
  • (2026-04-21) Phases 813 fully implemented — 108/108 tests passing on ui-redesign branch