app.storage.postgres.models

SQLAlchemy ORM models of the PostgreSQL catalog store.

The schema is owned by the Alembic migrations (alembic/versions); these classes only mirror it for querying and are never used to create tables outside tests. Triggers (search vector, append-only decisions) and column comments live in the migration only.

Public API: SourceRegistrationRow, RevisionRow, RecordRow, DecisionEventRow, IntakeRunRow.

class app.storage.postgres.models.SourceRegistrationRow(**kwargs)

Bases: Base

A source registration synced from catalog.yaml.

id: Mapped[str]
type: Mapped[str]
config: Mapped[Any]
enabled: Mapped[bool]
config_error: Mapped[str | None]
last_attempt_at: Mapped[datetime | None]
last_success_at: Mapped[datetime | None]
last_status: Mapped[str]
last_error: Mapped[Any]
class app.storage.postgres.models.RevisionRow(**kwargs)

Bases: Base

An immutable content-addressed snapshot.

digest: Mapped[str]
content: Mapped[str]
created_at: Mapped[datetime]
class app.storage.postgres.models.RecordRow(**kwargs)

Bases: Base

A published or candidate ADR record.

id: Mapped[UUID]
kind: Mapped[str]
source_id: Mapped[str]
project: Mapped[str]
path: Mapped[str]
ref: Mapped[str]
adr_uuid: Mapped[UUID | None]
record_key: Mapped[str]
digest: Mapped[str]
previous_digest: Mapped[str | None]
change_token: Mapped[str | None]
metadata_: Mapped[Any]
title: Mapped[str]
title_source: Mapped[str]
decision_date: Mapped[date | None]
decision_date_inferred: Mapped[bool]
record_kind: Mapped[str]
rendered_html: Mapped[str]
erratum: Mapped[Any]
issues: Mapped[Any]
source_url: Mapped[str | None]
author: Mapped[str | None]
search: Mapped[str]
first_seen_at: Mapped[datetime]
updated_at: Mapped[datetime]
last_seen_at: Mapped[datetime]
class app.storage.postgres.models.DecisionEventRow(**kwargs)

Bases: Base

An append-only formal decision on one content digest.

id: Mapped[UUID]
source_id: Mapped[str]
project: Mapped[str]
record_key: Mapped[str]
adr_uuid: Mapped[UUID]
digest: Mapped[str]
action: Mapped[str]
actor_issuer: Mapped[str]
actor_subject: Mapped[str]
actor_display: Mapped[str | None]
actor_email: Mapped[str | None]
comment: Mapped[str | None]
policy_id: Mapped[str]
policy_version: Mapped[int]
provenance: Mapped[Any]
created_at: Mapped[datetime]
class app.storage.postgres.models.IntakeRunRow(**kwargs)

Bases: Base

One poll or push intake run.

id: Mapped[UUID]
source_id: Mapped[str]
kind: Mapped[str]
identity: Mapped[Any]
delivery_id: Mapped[str | None]
started_at: Mapped[datetime]
finished_at: Mapped[datetime | None]
status: Mapped[str]
counts: Mapped[Any]
errors: Mapped[Any]