[Feature] Add a bounded LDIF contact import profile #20

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

Goal

Import offline LDAP/Active Directory exports as evidence-bearing contact projections without requiring a live directory connection.

Parent: #8. This is distinct from the live LDAP connector.

Direction And Boundary

  • Direction is static/one-way import only.
  • LDIF records are parsed as supplied evidence; no LDAP writes or connection credentials are involved.
  • Optional Files/Datasources inputs must not become hard dependencies.

Scope

  • Standards-aware streaming parser for folded lines, base64/binary values, multi-valued attributes, comments, and change records.
  • Saved mapping profile from DN/object classes/attributes to Addresses fields and stable source keys.
  • Bounded dry-run with unsupported/binary attribute diagnostics and no raw secret-like values in logs.
  • Explicit policy for add/modify/delete change records; default to non-mutating diagnostics until selected by the operator.
  • Input hash, row-level provenance, normalization/original preservation, idempotent commit, and correction output.
  • Upload/preview/confirm UI and tests for malformed, large, mixed-schema, duplicate-DN, and encoded input.

Acceptance Criteria

  • Operators can preview exactly which contacts and fields would change before import.
  • Unsupported or malformed records are isolated with line/record diagnostics rather than aborting valid records silently.
  • Reimporting the same evidence creates no duplicate effects.
  • Every retained field links back to the input hash, DN/source key, and record position.
## Goal Import offline LDAP/Active Directory exports as evidence-bearing contact projections without requiring a live directory connection. Parent: #8. This is distinct from the live LDAP connector. ## Direction And Boundary - Direction is static/one-way import only. - LDIF records are parsed as supplied evidence; no LDAP writes or connection credentials are involved. - Optional Files/Datasources inputs must not become hard dependencies. ## Scope - Standards-aware streaming parser for folded lines, base64/binary values, multi-valued attributes, comments, and change records. - Saved mapping profile from DN/object classes/attributes to Addresses fields and stable source keys. - Bounded dry-run with unsupported/binary attribute diagnostics and no raw secret-like values in logs. - Explicit policy for add/modify/delete change records; default to non-mutating diagnostics until selected by the operator. - Input hash, row-level provenance, normalization/original preservation, idempotent commit, and correction output. - Upload/preview/confirm UI and tests for malformed, large, mixed-schema, duplicate-DN, and encoded input. ## Acceptance Criteria - Operators can preview exactly which contacts and fields would change before import. - Unsupported or malformed records are isolated with line/record diagnostics rather than aborting valid records silently. - Reimporting the same evidence creates no duplicate effects. - Every retained field links back to the input hash, DN/source key, and record position.
Author
Owner

Codex State: ready

Summary

  • Implemented bounded LDIF preview/import with profile mapping, duplicate policy, provenance, validation, permissions, audit evidence, and administration UI.
  • Local commit: Addresses 147f34c.

Verification

  • tools/checks/check-focused.sh: passed the integrated backend, manifest, UI-contract, 59-permutation build, and Playwright conformance gate.

Next / Blocked

  • Push the local commits, run remote CI, then close the issue after integration.

Suggested status label: status/ready

## Codex State: ready ### Summary - Implemented bounded LDIF preview/import with profile mapping, duplicate policy, provenance, validation, permissions, audit evidence, and administration UI. - Local commit: Addresses 147f34c. ### Verification - `tools/checks/check-focused.sh: passed the integrated backend, manifest, UI-contract, 59-permutation build, and Playwright conformance gate.` ### Next / Blocked - Push the local commits, run remote CI, then close the issue after integration. Suggested status label: `status/ready`
Author
Owner

Published and verified on remote main: Addresses 147f34c. 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 147f34c. 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#20