Module Package Release / publish-packages (push) Successful in 13s
Release v0.1.46. Coordinated integrity review: GovOPlaN/govoplan-core#298.
91 lines
5.7 KiB
Markdown
91 lines
5.7 KiB
Markdown
# Tabular Source Preview Contract
|
|
|
|
Core defines provider-neutral DTOs for optional tabular source providers. A
|
|
source declares whether it is live, cached, file-backed, or static; its schema
|
|
and immutable fingerprint; structured health; and the exact projection,
|
|
pagination, filter, aggregation, and sorting operations that the provider can
|
|
push down. Consumers must not infer pushdown support from a provider name.
|
|
|
|
Every preview request carries independent row, byte, and elapsed-time budgets.
|
|
A provider may tighten these values but must return its effective limits,
|
|
returned byte count, elapsed milliseconds, truncation state, and structured
|
|
diagnostics. Equivalent fields on the Datasources read request and result
|
|
preserve that evidence when a live source is consumed through the catalogue.
|
|
A row that cannot fit within the byte budget fails explicitly rather than
|
|
leaking a partial value. Timeout, stale fingerprint, unavailable source, and
|
|
authorization failures remain distinct provider-neutral errors.
|
|
|
|
Connector health and preview diagnostics must contain no credentials, endpoint
|
|
userinfo, row values, or unbounded remote error bodies. A Datasource origin
|
|
preserves this contract so registration and staging do not erase source mode,
|
|
health, pushdown, or preview-limit evidence.
|
|
|
|
## Durable CSV imports and original evidence
|
|
|
|
`TabularCsvSource` optionally accompanies a durable `TabularSnapshotInput` or
|
|
`DatasourceStageInput`. It carries the exact submitted Unicode text, delimiter,
|
|
explicit value mode and parser profile. It is not part of ordinary catalogue,
|
|
preview or stage DTOs. Transient inspection does not retain original content.
|
|
|
|
The `text` mode preserves cell strings, including whitespace, leading zeroes,
|
|
decimal spelling, boolean-looking text and explicit empty cells. It rejects
|
|
malformed quoting and rows with missing or extra cells. Header normalization is
|
|
unchanged. The API default remains `legacy_typed` for existing integrations;
|
|
interactive CSV imports offer text mode by default and an explicit legacy choice.
|
|
JSON and existing stored snapshots are not reinterpreted. Core and Datasources
|
|
retain distinct versioned legacy parser profiles where their historical coercion
|
|
rules differ. Shared schema inference preserves first-seen column order, missing
|
|
value nullability and the owning provider's type naming.
|
|
|
|
Owners verify that the source reparses to exactly the stored projection, including
|
|
scalar types: `true`, `1` and `1.0` are not equivalent evidence. Raw input and row
|
|
projections each have a 5,000,000-byte limit; row parsing is capped at 10,000 rows.
|
|
The original text has its own UTF-8 SHA-256 and byte count, separate from the
|
|
existing row fingerprint. Only a small allowlisted source summary enters metadata.
|
|
Checksums detect drift; they are not digital signatures or protection against an
|
|
attacker who can rewrite the database and all its evidence.
|
|
|
|
Original exports are explicit owner APIs, tenant scoped, integrity checked and
|
|
`no-store`. Datasources additionally requires administrator scope, audits the
|
|
export, and denies the whole original when current or historical governance
|
|
restricts any row or field. Freezing verifies the prior summary before copying
|
|
source evidence and retains prior policy restrictions, including referenced
|
|
policy evaluations. At most 32 distinct governance snapshots may accompany one
|
|
original; further incompatible history fails explicitly. Payload disposal also
|
|
disposes retained original content. Connectors applies its own current read,
|
|
tenant and lifecycle checks. See the owning module's documentation for endpoints.
|
|
|
|
Original UTF-8 text is not proof of pre-decoding file bytes, and does not undo
|
|
CSV spreadsheet formula semantics. Exported content is deliberately unmodified;
|
|
operators must treat it as untrusted input when opening it in a spreadsheet.
|
|
New nullable columns require the owning modules' additive migrations. Historical
|
|
rows remain unchanged and report original content unavailable, not reconstructed.
|
|
Back up retained originals before any schema downgrade that removes those columns.
|
|
|
|
## Deutsch: CSV-Datentreue
|
|
|
|
Dauerhafte CSV-Importe können den unveränderten übermittelten Unicode-Text mit
|
|
Trennzeichen, Parserprofil und explizitem Wertemodus aufbewahren. Der Textmodus
|
|
erhält Zellwerte einschließlich Leerzeichen, führender Nullen und Dezimalschreibweise.
|
|
Fehlerhafte Zeilen werden abgewiesen. Die API bleibt aus Kompatibilitätsgründen bei
|
|
der bisherigen Typumwandlung als Standard; im Importdialog ist Text voreingestellt.
|
|
Bestehende Daten und JSON-Importe werden nicht neu interpretiert.
|
|
|
|
Original und Zeilenprojektion werden getrennt begrenzt und geprüft; boolesche
|
|
Werte, Ganzzahlen und Gleitkommazahlen sind keine austauschbaren Belege. Der
|
|
Originaltext erscheint weder im Katalog noch in Vorschauantworten. Die expliziten
|
|
Export-APIs prüfen Mandant, Berechtigungen, Lebenszyklus und gespeicherten Hash.
|
|
Datasources verlangt zusätzlich Administrationsrechte, protokolliert Exporte und
|
|
berücksichtigt aktuelle sowie historische Zeilen-, Feld- und Zugriffsrichtlinien.
|
|
Eingeschränkte Originale werden vollständig gesperrt, nicht teilweise freigegeben.
|
|
Eingefrorene Kopien übernehmen diese Einschränkungen; nach 32 unterschiedlichen
|
|
Richtlinienständen wird eine weitere Kopie mit neuer Richtlinie explizit abgewiesen.
|
|
Die Aufbewahrungsbereinigung entfernt auch das gespeicherte Original.
|
|
|
|
Die Grenzen betragen jeweils 5.000.000 UTF-8-Bytes für Original und Projektion
|
|
sowie 10.000 Zeilen. Prüfsummen sind keine Signaturen. Ein CSV-Original bleibt beim
|
|
Export unverändert und kann Tabellenkalkulationsformeln enthalten. Frühere
|
|
Dateikodierungen lassen sich daraus nicht rekonstruieren. Additive Migrationen
|
|
ändern keine historischen Zeilen; fehlende Originale werden nicht erfunden.
|
|
Vor einem Schema-Downgrade sind aufbewahrte Originale zu sichern.
|