[Feature] Complete selective and large-batch vCard import/export workflows #21

Closed
opened 2026-08-02 07:07:23 +02:00 by zemion · 2 comments
Owner

Goal

Build the operator-grade batch workflow on top of the existing vCard parser and single-request import/export baseline.

Parent: #8. Builds on closed #4 and does not replace CardDAV sync.

Direction And Boundary

  • Import is static and one-way; export is a generated snapshot. Neither implies a live sync source.
  • Preserve current vCard round-trip behavior and raw source payloads.

Scope

  • Upload one or more .vcf files instead of requiring pasted text.
  • Parse and validate without mutation, show bounded card/field diagnostics, duplicate suggestions, and create/update/ignore plans.
  • Select cards/actions before a confirmed commit and bind commit evidence to the input hash and parser version.
  • Export selected contacts, an address list, or an address book with explicit format/version options and deterministic ordering.
  • Use a resumable job for configured large-batch thresholds, with progress and final downloadable diagnostics when the runtime capability exists; retain a bounded synchronous path.
  • Protect against oversized cards/files, pathological nesting/folding, and repeated partial submissions.
  • Regression tests for multi-file input, selective commit, cancellation, duplicate UID/source references, unchanged reruns, and deterministic export.

Acceptance Criteria

  • Upload and preview never mutate contacts.
  • Operators can select or reject individual planned records before commit.
  • A repeated commit with the same input/plan identity cannot duplicate effects.
  • Export scope and ordering are explicit and covered by round-trip tests.
## Goal Build the operator-grade batch workflow on top of the existing vCard parser and single-request import/export baseline. Parent: #8. Builds on closed #4 and does not replace CardDAV sync. ## Direction And Boundary - Import is static and one-way; export is a generated snapshot. Neither implies a live sync source. - Preserve current vCard round-trip behavior and raw source payloads. ## Scope - Upload one or more `.vcf` files instead of requiring pasted text. - Parse and validate without mutation, show bounded card/field diagnostics, duplicate suggestions, and create/update/ignore plans. - Select cards/actions before a confirmed commit and bind commit evidence to the input hash and parser version. - Export selected contacts, an address list, or an address book with explicit format/version options and deterministic ordering. - Use a resumable job for configured large-batch thresholds, with progress and final downloadable diagnostics when the runtime capability exists; retain a bounded synchronous path. - Protect against oversized cards/files, pathological nesting/folding, and repeated partial submissions. - Regression tests for multi-file input, selective commit, cancellation, duplicate UID/source references, unchanged reruns, and deterministic export. ## Acceptance Criteria - Upload and preview never mutate contacts. - Operators can select or reject individual planned records before commit. - A repeated commit with the same input/plan identity cannot duplicate effects. - Export scope and ordering are explicit and covered by round-trip tests.
Author
Owner

Implementation complete locally in 42fe262.

Delivered:

  • persisted, mutation-free multi-file vCard previews with byte/card/line/folding bounds, parser versioning, content hashes, and a file manifest;
  • per-card selection plus explicit create/update/ignore/reject and duplicate handling before commit;
  • stale-plan rejection, idempotent commit, cancellation, and bounded downloadable diagnostics without raw payload leakage;
  • explicit selected-contact/address-list/address-book export scopes, vCard 3.0/4.0 selection, deterministic ordering, hashes, and round-trip coverage;
  • operator WebUI, migration, manifest-driven user/admin documentation, and regression tests.

Verification: 59 Addresses tests passed; WebUI structure/import-run checks, Core TypeScript, manifest/inventory checks, and the complete workspace focused gate passed (including all module suites, migrations, 59 WebUI permutations, bundle budgets, and 7 browser conformance tests).

The issue remains open only until the local commit is pushed.

Implementation complete locally in `42fe262`. Delivered: - persisted, mutation-free multi-file vCard previews with byte/card/line/folding bounds, parser versioning, content hashes, and a file manifest; - per-card selection plus explicit create/update/ignore/reject and duplicate handling before commit; - stale-plan rejection, idempotent commit, cancellation, and bounded downloadable diagnostics without raw payload leakage; - explicit selected-contact/address-list/address-book export scopes, vCard 3.0/4.0 selection, deterministic ordering, hashes, and round-trip coverage; - operator WebUI, migration, manifest-driven user/admin documentation, and regression tests. Verification: 59 Addresses tests passed; WebUI structure/import-run checks, Core TypeScript, manifest/inventory checks, and the complete workspace focused gate passed (including all module suites, migrations, 59 WebUI permutations, bundle budgets, and 7 browser conformance tests). The issue remains open only until the local commit is pushed.
Author
Owner

Published and verified on remote main: Addresses 42fe262. The repository has no configured commit-status contexts/workflow files; the recorded complete focused workspace gate is the integration evidence. Acceptance criteria are satisfied, so this issue is being closed.

Published and verified on remote `main`: Addresses 42fe262. The repository has no configured commit-status contexts/workflow files; the recorded complete focused workspace gate is the integration evidence. Acceptance criteria are satisfied, so this issue is being closed.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-addresses#21