Data engineers, analysts, and the DPO. Every merge here changes either
the dataset governance record or the pipeline that transforms personal
data — both are auditable surfaces. Commits follow Conventional Commits;
notable changes land in CHANGELOG.md.
- Synthetic only. Fixtures are generated by faker-seeded generators
(
synthetic/generators/); no real person, company, or address may be committed. Regeneration with a new seed must produce new identities. - Deterministic & versioned. Seed files are committed artifacts
with schema validation (
seed/validators/); CI blocks malformed taxonomy. Changes to taxonomy are MINOR/MAJOR changes for consumers (jolarca) — describe impact in the PR. - Translations are complete. Category names exist in lt/lv/et/en (ru reserved); a missing translation is a CI failure, not a TODO.
- PII is stripped in staging. Staging models hash identifiers and drop names/emails — a model that re-introduces an identifier is a defect of the highest class.
- Every model is documented.
models/**/_models.ymlentries with owner + tests (unique, not_null, relationships) are mandatory; undocumented models faildbt-ci. - Tests encode the invariants. Custom tests (
warehouse/tests/) guard no-null-pii-columns, id-hash-format, eur-only, vat-rate-bounds. - No production credentials. Warehouse access is via scoped service accounts from env vars (ADR-0002); nothing in-repo can reach production, and extraction is read-replica only.
- Every new dataset lands with: a
governance/data-catalog.mdentry, an owner + steward row inownership-register.csv, a classification tier, a RoPA purpose reference, and a retention class.catalog-lintblocks orphans. - Retention class changes require DPO review (CODEOWNERS routes it).
- Policy text lives in
jolarca-compliance; this repo implements it.
- Never commit personal data, real or "temporarily". Synthetic only.
- Never commit warehouse credentials, connection strings with passwords, or API keys — gitleaks enforces.
scripts/check-personal-data.shand the PII pattern scan are tripwires, not a license: passing them does not make a commit lawful.
- Issue first.
dataset_requestfor new datasets,pii_incidentfor PII findings (never put the data itself in the issue). - Branch per change. One dataset/pipeline concern per PR.
- CI is a merge gate.
ci,compliance-check,dbt-ci(parse + slim build + tests) must be green. - CODEOWNERS routing is binding. DPO review on anything touching RESTRICTED paths, lifecycle jobs, and compliance marts.
Solo-era operation (current): the org operates with a single data operator, so human review gates ride on automated checks + CODEOWNERS routing until the second operator onboards. Tracked deviation, not an exemption.
| Class | Examples | Gate |
|---|---|---|
| Low | Docs, reserved scaffolding, dashboards definitions | 1 review |
| Med | New staging model, seed translation additions | 1 review + CI |
| High | New dataset (catalog entry), mart logic, retention job change | CI + owner review; DPO if RESTRICTED |
| Crit | Pseudonymizer change, erasure/legal-hold logic, classification tier change | DPO + data platform owner; adversarial verification |
If you cannot say which retention class the data falls under and how it is erased, the change is not ready.