Skip to content

[Voice] Preserve imported primary Voice change history at knowledge cutoffs #748

Description

@seonghobae

Product gap

ADR 0251 prevents a later imported primary Voice from being antedated, but migration 0237 currently deletes the former primary assignment before inserting the new one. An authorized historical-cutoff read therefore cannot recover the former primary after a source update. It honestly returns unavailable, but it does not preserve the product history users expect.

Required decision

Define an ADR-first temporal persistence contract before changing the schema. Reuse the existing source_post_voice boundary and PostgreSQL range/constraint features where possible; do not infer a Voice, invent a weight, or duplicate the source representation. Keep additional evidence-bearing assignments and counterparty relationships separate.

Acceptance

  • A primary Voice update closes the former effective interval and opens the new interval atomically.
  • Live reads return exactly one current imported primary; an authorized cutoff read returns the primary effective at that instant.
  • Re-import and migration replay are idempotent and do not manufacture history that the source never supplied.
  • The schema permits repeated use of the same atomic Voice in non-overlapping periods while rejecting overlapping primary intervals.
  • API, ontology JSON-LD/CSV, and UI preserve ABAC and cutoff boundaries; hidden evidence remains hidden.
  • Synthetic PostgreSQL integration tests prove A → B → A changes at before/between/after cutoffs and concurrent UPSERT behavior.
  • ADR 0251, PRD/TRD/UML, and docs/product-technical-gap-baseline.md distinguish non-antedating from historical preservation.

No real organization or record identifiers belong in fixtures or evidence.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions