{
  "changelog_id": "praxikon:sys:registry:register:dataset-releases",
  "changelog_format_version": "1.0.0",
  "dataset_id": "praxikon:sys:registry:dataset:ai-act-implementation-graph",
  "register_started_at": "2026-08-08",
  "generated_from": [
    "data/ai-act/releases.ts",
    "data/ai-act/graph-snapshots",
    "data/ai-act/implementation-graph.ts"
  ],
  "current": {
    "dataset_version": "2.1.0",
    "schema_version": "1.4.0",
    "openapi_version": "1.11.0-beta.1",
    "default_effective_at": "2026-08-08T00:00:00.000Z",
    "default_known_at": "2026-08-14T00:00:00.000Z"
  },
  "coverage": {
    "recorded_releases": 3,
    "recorded_dataset_versions": [
      "1.1.0",
      "2.0.0",
      "2.1.0"
    ],
    "snapshot_register_started_at": "2026-08-13T00:00:00.000Z",
    "limits": [
      {
        "code": "content_releases_without_a_snapshot",
        "detail": {
          "nl": "1.0.0 verzette de inhoudsteller maar heeft geen vastgelegde momentopname. Die payloads staan niet meer in de repository, dus het verslag valt achteraf niet te maken. Paragraaf 5.6 van het versiebeleid beschrijft in woorden wat er bewoog, en die beschrijving is alles wat er is.",
          "en": "1.0.0 moved the content counter but has no recorded snapshot. Its payloads are no longer in the repository, so the record cannot be created after the fact. Section 5.6 of the versioning policy describes in words what moved, and that description is all there is."
        }
      }
    ]
  },
  "releases": [
    {
      "release_id": "praxikon:sys:registry:release:2026-08-15-addressable-answers",
      "sequence": 12,
      "released_at": "2026-08-15",
      "dataset_version": "2.1.0",
      "schema_version": "1.4.0",
      "openapi_version": "1.11.0-beta.1",
      "moved": [
        "api_surface"
      ],
      "headline": {
        "nl": "Een vast adres voor ieder gepubliceerd antwoord",
        "en": "A stable address for every published answer"
      },
      "summary": {
        "nl": "Het antwoordendpoint kan naast een vrije vraag nu ook exact op `answer_id` of het canonieke paginapad lezen. Basisantwoorden en verfijningen dragen dezelfde taal-onafhankelijke identifier in de volledige en compacte vorm. Het OpenAPI-contract beschrijft de werkelijke respons nu volledig als drie expliciete vormen: compact, volledig en geen treffer. Er verdween of hernoemde geen veld en de graph bewoog niet.",
        "en": "Alongside a free-form question, the answer endpoint can now retrieve an exact `answer_id` or canonical page path. Base answers and refinements carry the same language-independent identifier in the full and compact views. The OpenAPI contract now describes the actual response completely as three explicit shapes: compact, full and no match. No field was removed or renamed and the graph did not move."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/api/v1/openapi"
      ],
      "is_current": true,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "praxikon:sys:registry:graph-snapshot:2.1.0",
        "recorded_at": "2026-08-14T00:00:00.000Z",
        "recorded_basis": "first_registration",
        "object_count": 425
      },
      "diff": {
        "available": false,
        "code": "dataset_version_unchanged",
        "detail": {
          "nl": "Deze release verzette de inhoudsteller niet, dus valt er per object niets te vergelijken. Wat bewoog was de vorm van het antwoord of het oppervlak eromheen, en dat staat in de samenvatting.",
          "en": "This release did not move the content counter, so there is nothing to compare per object. What moved was the shape of the response or the surface around it, and that is described in the summary."
        }
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-14-article-86",
      "sequence": 11,
      "released_at": "2026-08-14",
      "dataset_version": "2.1.0",
      "schema_version": "1.4.0",
      "openapi_version": "1.10.0-beta.1",
      "moved": [
        "dataset",
        "schema"
      ],
      "headline": {
        "nl": "Het recht dat tegenover de plicht staat",
        "en": "The right that sits opposite the duty"
      },
      "summary": {
        "nl": "De kennisbank dekte de plichten van de gebruiksverantwoordelijke wel en het recht van de persoon over wie wordt beslist niet. Artikel 86 is nu een eigen object: wie geraakt wordt door een besluit dat op de uitvoer van een bijlage III-systeem steunt, kan uitleg vragen over de rol van dat systeem en over de hoofdelementen van het besluit. Het object is het eerste dat een voorlopige lezing draagt. Dat is nieuw in schema 1.4.0: twee velden die zeggen dat de tekst van een bepaling vaststaat terwijl de toepassing ervan nergens is uitgemaakt, met een toelichting die zegt wat er open is en welke andere lezing verdedigbaar is. Die toelichting reist mee in de API, de MCP-antwoorden en de gestructureerde data, en staat niet als voetnoot op een pagina. Het object draagt ook de eerste eigen kennisdatum: tot nu toe droeg elk gepubliceerd object hetzelfde moment, waardoor een venster op de kennisas twee momenten niet kon scheiden.",
        "en": "The knowledge base covered the deployer duties but not the right of the person being decided about. Article 86 is now an object of its own: anyone affected by a decision resting on the output of an Annex III system can request an explanation of the role of that system and of the main elements of the decision. It is the first object to carry a preliminary reading. That is new in schema 1.4.0: two fields saying that the text of a provision is settled while its application has not been decided anywhere, with a note stating what is open and which alternative reading is defensible. That note travels in the API, the MCP responses and the structured data rather than sitting as a footnote on a page. The object also carries the first known_at of its own: until now every published object carried the same moment, so a window on the knowledge axis could not separate two moments."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/api/v1/openapi"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "praxikon:sys:registry:graph-snapshot:2.1.0",
        "recorded_at": "2026-08-14T00:00:00.000Z",
        "recorded_basis": "first_registration",
        "object_count": 425
      },
      "diff": {
        "available": true,
        "from_dataset_version": "2.0.0",
        "to_dataset_version": "2.1.0",
        "url": "https://www.praxikon.com/api/v1/diff?from_dataset_version=2.0.0&to_dataset_version=2.1.0&lang=en"
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-13-compact-answer-view",
      "sequence": 10,
      "released_at": "2026-08-13",
      "dataset_version": "2.0.0",
      "schema_version": "1.3.0",
      "openapi_version": "1.10.0-beta.1",
      "moved": [
        "api_surface"
      ],
      "headline": {
        "nl": "Hetzelfde antwoord, een tiende van de bytes",
        "en": "The same answer, a tenth of the bytes"
      },
      "summary": {
        "nl": "Het antwoord-endpoint kent nu `view=brief`. Die vorm geeft terug wat een agent nodig heeft om te handelen en te verwijzen: de vraag, de vermoedelijke rol, de verplichtingen met label, identifier, status en toepassingsmoment, de eerste acties, het gevraagde bewijs, en per verplichting één vindplaats. Het is hetzelfde antwoord uit dezelfde deterministische engine met de toelichting eruit, niet een ander oordeel. De volledige vorm blijft de standaard en verandert niet; wie de parameter weglaat merkt niets. Een onbekende waarde valt terug op de volledige vorm in plaats van een fout te geven, want een tikfout in een parameter die alleen de omvang bepaalt hoort geen antwoord te kosten.",
        "en": "The answer endpoint now takes `view=brief`. That form returns what an agent needs in order to act and to cite: the question, the likely role, the obligations with label, identifier, legal status and application date, the first actions, the required evidence, and one locator per obligation. It is the same answer from the same deterministic engine with the explanation removed, not a different conclusion. The full form stays the default and does not change; anyone who omits the parameter notices nothing. An unrecognised value falls back to the full form rather than returning an error, because a typo in a parameter that only governs size should not cost an answer."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/api/v1/openapi"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "praxikon:sys:registry:graph-snapshot:2.0.0",
        "recorded_at": "2026-08-13T00:00:00.000Z",
        "recorded_basis": "at_release",
        "object_count": 417
      },
      "diff": {
        "available": false,
        "code": "dataset_version_unchanged",
        "detail": {
          "nl": "Deze release verzette de inhoudsteller niet, dus valt er per object niets te vergelijken. Wat bewoog was de vorm van het antwoord of het oppervlak eromheen, en dat staat in de samenvatting.",
          "en": "This release did not move the content counter, so there is nothing to compare per object. What moved was the shape of the response or the surface around it, and that is described in the summary."
        }
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-13-ruling-register",
      "sequence": 9,
      "released_at": "2026-08-13",
      "dataset_version": "2.0.0",
      "schema_version": "1.3.0",
      "openapi_version": "1.9.0-beta.1",
      "moved": [
        "api_surface"
      ],
      "headline": {
        "nl": "Wat wij weten dat een bepaling betekent",
        "en": "What we know a provision means"
      },
      "summary": {
        "nl": "Naast de laag die zegt wat er is gebeurd, staat nu een laag die zegt wat een uitspraak met een bepaling doet: interpreteert, verengt, verruimt, bevestigt of spreekt tegen. Die relatie is het punt, want een uitspraak verandert de tekst van een verplichting niet en verschuift haar ingangsdatum niet; zij verschuift wat wij erover weten, en dat moment staat als aparte datum op de uitspraak. Een manifest dat een verengde verplichting draagt, komt daardoor via `/api/v1/impact` naar boven zonder dat er een veld in de graph bewoog. Er is nog geen rechtspraak over de AI-verordening zelf, en dat staat er met zoveel woorden bij in plaats van als een leeg veld: de zeven opgenomen besluiten zijn AVG-context en dragen uitsluitend de relatie \"illustreert\".",
        "en": "Beside the layer that says what happened there is now a layer that says what a ruling does to a provision: interprets, narrows, broadens, confirms or contradicts. That relation is the point, because a ruling does not change the text of an obligation and does not move its date of application; it moves what we know about it, and that moment sits on the ruling as a date of its own. A manifest carrying a narrowed obligation therefore surfaces through `/api/v1/impact` without a single field of the graph having moved. There is no case law on the AI Act itself yet, and that is stated in words rather than left as an empty field: the seven recorded decisions are GDPR context and carry the relation \"illustrates\" only."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/nl/rechtspraak"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "praxikon:sys:registry:graph-snapshot:2.0.0",
        "recorded_at": "2026-08-13T00:00:00.000Z",
        "recorded_basis": "at_release",
        "object_count": 417
      },
      "diff": {
        "available": false,
        "code": "dataset_version_unchanged",
        "detail": {
          "nl": "Deze release verzette de inhoudsteller niet, dus valt er per object niets te vergelijken. Wat bewoog was de vorm van het antwoord of het oppervlak eromheen, en dat staat in de samenvatting.",
          "en": "This release did not move the content counter, so there is nothing to compare per object. What moved was the shape of the response or the surface around it, and that is described in the summary."
        }
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-13-identifier-namespace",
      "sequence": 8,
      "released_at": "2026-08-13",
      "dataset_version": "2.0.0",
      "schema_version": "1.3.0",
      "openapi_version": "1.8.0-beta.1",
      "moved": [
        "dataset",
        "schema",
        "api_surface"
      ],
      "headline": {
        "nl": "Ruimte voor meer dan een verordening",
        "en": "Room for more than one regulation"
      },
      "summary": {
        "nl": "Elke identifier draagt nu de rechtsorde en de regeling waar hij bij hoort: `praxikon:eu:ai-act:obligation:article-11-technical-documentation` in plaats van de platte vorm van daarvoor. Zonder die twee segmenten zouden artikel 11 van de AI Act, van de AVG en van een nationale uitvoeringswet om dezelfde sleutel vechten. De oude identifiers blijven permanent oplossen op precies hetzelfde object, en elk antwoord noemt de canonieke vorm van wat u vroeg plus de oude vorm van elk object.",
        "en": "Every identifier now carries the legal order and the instrument it belongs to: `praxikon:eu:ai-act:obligation:article-11-technical-documentation` instead of the flat form before it. Without those two segments, Article 11 of the AI Act, of the GDPR and of a national implementing act would fight over the same key. The old identifiers keep resolving to exactly the same object, permanently, and every response names the canonical form of what you asked for plus the old form of every object."
      },
      "payload_hashes_moved": true,
      "payload_hashes_note": {
        "nl": "De payloadhash van elk object dat een identifier draagt, bewoog mee: de hash gaat over de hele payload en daar staan de verwijzingen in. Geen enkele uitspraak, bron, datum of status bewoog. Dat is geen belofte maar een controle: een releaseguard schrijft de payload van vandaag terug naar de oude naamruimte en eist dat elke veldvingerafdruk precies is wat in de momentopname van 1.1.0 staat. Wie op hash verifieert, leest paragraaf 5.8 van het versiebeleid.",
        "en": "The payload hash of every object carrying an identifier moved with it: the hash covers the whole payload, and the references sit inside it. Not one statement, source, date or status moved. That is a check rather than a promise: a release guard writes the current payload back into the old namespace and requires every field fingerprint to be exactly what the 1.1.0 snapshot recorded. If you verify by hash, read section 5.8 of the versioning policy."
      },
      "documentation": [
        "https://www.praxikon.com/api/v1/openapi"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "praxikon:sys:registry:graph-snapshot:2.0.0",
        "recorded_at": "2026-08-13T00:00:00.000Z",
        "recorded_basis": "at_release",
        "object_count": 417
      },
      "diff": {
        "available": true,
        "from_dataset_version": "1.1.0",
        "to_dataset_version": "2.0.0",
        "url": "https://www.praxikon.com/api/v1/diff?from_dataset_version=1.1.0&to_dataset_version=2.0.0&lang=en"
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-13-api-hygiene",
      "sequence": 7,
      "released_at": "2026-08-13",
      "dataset_version": "1.1.0",
      "schema_version": "1.2.0",
      "openapi_version": "1.7.0-beta.1",
      "moved": [
        "api_surface"
      ],
      "headline": {
        "nl": "Goedkoop pollen, en één foutvorm",
        "en": "Cheap polling, and one error shape"
      },
      "summary": {
        "nl": "De twee endpoints die een consument hoort te pollen, de datasetbeschrijving en het OpenAPI-document, geven nu een ETag en een 304 op `If-None-Match`, net als de graph-endpoints al deden. Daarnaast een statusendpoint op `/api/v1/status` met de release, het aantal objecten en de uitkomst van de laatste guardrun, deze changelog, en één foutvorm op alle v1-endpoints. Over verzoeklimieten staat nu precies wat er wordt afgedwongen en waar niets geldt.",
        "en": "The two endpoints a consumer is supposed to poll, the dataset description and the OpenAPI document, now carry an ETag and answer `If-None-Match` with a 304, as the graph endpoints already did. Alongside that: a status endpoint at `/api/v1/status` carrying the release, the object counts and the outcome of the last guard run, this changelog, and one error shape across every v1 endpoint. On request limits it now states exactly what is enforced and where nothing applies."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/api/v1/status"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "raip:graph-snapshot:1.1.0",
        "recorded_at": "2026-08-13T00:00:00.000Z",
        "recorded_basis": "first_registration",
        "object_count": 417
      },
      "diff": {
        "available": false,
        "code": "dataset_version_unchanged",
        "detail": {
          "nl": "Deze release verzette de inhoudsteller niet, dus valt er per object niets te vergelijken. Wat bewoog was de vorm van het antwoord of het oppervlak eromheen, en dat staat in de samenvatting.",
          "en": "This release did not move the content counter, so there is nothing to compare per object. What moved was the shape of the response or the surface around it, and that is described in the summary."
        }
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-13-impact-feed",
      "sequence": 6,
      "released_at": "2026-08-13",
      "dataset_version": "1.1.0",
      "schema_version": "1.2.0",
      "openapi_version": "1.6.0-beta.1",
      "moved": [
        "api_surface"
      ],
      "headline": {
        "nl": "Of wat bewoog uw dossier raakt",
        "en": "Whether what moved touches your dossier"
      },
      "summary": {
        "nl": "De impactfeed op `/api/v1/impact` legt een manifest naast een venster in de kennislaag en meldt per geraakt object de grond van de match. Niet kunnen kijken is er nooit \"geen impact\": een venster dat niet is vastgelegd komt terug als een aanbeveling om opnieuw te rekenen.",
        "en": "The impact feed at `/api/v1/impact` lays a manifest beside a window in the knowledge layer and reports, per touched object, the ground of the match. Not being able to see is never \"no impact\": an uncovered window comes back as a recommendation to recompute."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/api/v1/openapi"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "raip:graph-snapshot:1.1.0",
        "recorded_at": "2026-08-13T00:00:00.000Z",
        "recorded_basis": "first_registration",
        "object_count": 417
      },
      "diff": {
        "available": false,
        "code": "dataset_version_unchanged",
        "detail": {
          "nl": "Deze release verzette de inhoudsteller niet, dus valt er per object niets te vergelijken. Wat bewoog was de vorm van het antwoord of het oppervlak eromheen, en dat staat in de samenvatting.",
          "en": "This release did not move the content counter, so there is nothing to compare per object. What moved was the shape of the response or the surface around it, and that is described in the summary."
        }
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-13-regulatory-diff",
      "sequence": 5,
      "released_at": "2026-08-13",
      "dataset_version": "1.1.0",
      "schema_version": "1.2.0",
      "openapi_version": "1.5.0-beta.1",
      "moved": [
        "api_surface"
      ],
      "headline": {
        "nl": "Wat bewoog tussen twee ijkpunten, en welke helft ertoe deed",
        "en": "What moved between two reference points, and which half mattered"
      },
      "summary": {
        "nl": "De regulatoire diff werd bereikbaar op `/api/v1/diff`, met daaronder het momentopnameregister dat per release vastlegt welke objectversies er stonden. Elk antwoord draagt de dekking van de vastgelegde historie mee, zodat een lege diff niet als een rustige periode kan worden gelezen.",
        "en": "The regulatory diff became reachable at `/api/v1/diff`, with the snapshot register underneath it recording which object versions stood published per release. Every response carries the coverage of the recorded history, so an empty diff cannot be read as a quiet period."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/api/v1/openapi"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "raip:graph-snapshot:1.1.0",
        "recorded_at": "2026-08-13T00:00:00.000Z",
        "recorded_basis": "first_registration",
        "object_count": 417
      },
      "diff": {
        "available": false,
        "code": "dataset_version_unchanged",
        "detail": {
          "nl": "Deze release verzette de inhoudsteller niet, dus valt er per object niets te vergelijken. Wat bewoog was de vorm van het antwoord of het oppervlak eromheen, en dat staat in de samenvatting.",
          "en": "This release did not move the content counter, so there is nothing to compare per object. What moved was the shape of the response or the surface around it, and that is described in the summary."
        }
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-13-manifest-over-http",
      "sequence": 4,
      "released_at": "2026-08-13",
      "dataset_version": "1.1.0",
      "schema_version": "1.2.0",
      "openapi_version": "1.4.0-beta.1",
      "moved": [
        "api_surface"
      ],
      "headline": {
        "nl": "Het dossier over de lijn",
        "en": "The dossier over the wire"
      },
      "summary": {
        "nl": "Het Regulatory Manifest werd bereikbaar over HTTP, samen met een endpoint dat een manifest controleert dat u al heeft. Beide bewaren niets. Er kwam geen object bij en er bewoog geen payload, dus alleen het API-oppervlak groeide.",
        "en": "The Regulatory Manifest became reachable over HTTP, together with an endpoint that validates a manifest you already hold. Neither stores anything. No object was added and no payload moved, so only the API surface grew."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/api/v1/openapi"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "raip:graph-snapshot:1.1.0",
        "recorded_at": "2026-08-13T00:00:00.000Z",
        "recorded_basis": "first_registration",
        "object_count": 417
      },
      "diff": {
        "available": false,
        "code": "dataset_version_unchanged",
        "detail": {
          "nl": "Deze release verzette de inhoudsteller niet, dus valt er per object niets te vergelijken. Wat bewoog was de vorm van het antwoord of het oppervlak eromheen, en dat staat in de samenvatting.",
          "en": "This release did not move the content counter, so there is nothing to compare per object. What moved was the shape of the response or the surface around it, and that is described in the summary."
        }
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-13-review-status-and-corrections",
      "sequence": 3,
      "released_at": "2026-08-13",
      "dataset_version": "1.1.0",
      "schema_version": "1.2.0",
      "openapi_version": null,
      "moved": [
        "schema"
      ],
      "headline": {
        "nl": "Wanneer wij voor het laatst keken, en wat wij fout hadden",
        "en": "When we last looked, and what we got wrong"
      },
      "summary": {
        "nl": "Een controlestatus op elke objectversie, buiten de payloadhash gehouden zodat een hercontrole geen citatie ongeldig maakt, en een openbaar correctieregister op `/api/v1/corrections`. Vorm bewoog, inhoud niet: geen object erbij, geen versie toegevoegd, geen payload verplaatst, en daarom bleef `dataset_version` op 1.1.0 staan.",
        "en": "A review status on every object version, kept outside the payload hash so that a recheck cannot invalidate a citation, and a public correction register at `/api/v1/corrections`. Shape moved, content did not: no object added, no version appended, no payload touched, which is why `dataset_version` stayed at 1.1.0."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/en/correcties"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "raip:graph-snapshot:1.1.0",
        "recorded_at": "2026-08-13T00:00:00.000Z",
        "recorded_basis": "first_registration",
        "object_count": 417
      },
      "diff": {
        "available": false,
        "code": "dataset_version_unchanged",
        "detail": {
          "nl": "Deze release verzette de inhoudsteller niet, dus valt er per object niets te vergelijken. Wat bewoog was de vorm van het antwoord of het oppervlak eromheen, en dat staat in de samenvatting.",
          "en": "This release did not move the content counter, so there is nothing to compare per object. What moved was the shape of the response or the surface around it, and that is described in the summary."
        }
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-13-relation-model",
      "sequence": 2,
      "released_at": "2026-08-13",
      "dataset_version": "1.1.0",
      "schema_version": "1.1.0",
      "openapi_version": null,
      "moved": [
        "dataset",
        "schema"
      ],
      "headline": {
        "nl": "Wie draagt de plicht, en wie wordt alleen geraakt",
        "en": "Who carries the duty, and who is only affected"
      },
      "summary": {
        "nl": "Vijf optionele relatievelden op de payload, ingevuld op alle 25 verplichtingen, plus een `duty_holder`-parameter en twee toezichthoudende actoren. Een verplichting zegt sindsdien apart wie de normadressaat is en wie er praktisch door wordt geraakt, zodat een vraag naar plichten geen plichten van een ander meer teruggeeft.",
        "en": "Five optional relation fields on the payload, populated on all 25 obligations, plus a `duty_holder` parameter and two supervisory actors. An obligation now states separately who the legal addressee is and who is practically affected, so a query about duties no longer returns duties resting on someone else."
      },
      "payload_hashes_moved": true,
      "payload_hashes_note": {
        "nl": "De payloadhash van 25 verplichtingen verschoof bij een ongewijzigd objectversienummer, omdat de hash over de hele payload gaat en die vijf velden erbij kwamen. Geen bestaand veld bewoog en geen superseded versie werd aangeraakt. Wie op hash verifieert, leest paragraaf 5.6 van het versiebeleid.",
        "en": "The payload hash of 25 obligations moved at an unchanged object version, because the hash covers the whole payload and those five fields were added. No existing field moved and no superseded version was touched. If you verify by hash, read section 5.6 of the versioning policy."
      },
      "documentation": [
        "https://www.praxikon.com/en/methodologie"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": true,
        "snapshot_id": "raip:graph-snapshot:1.1.0",
        "recorded_at": "2026-08-13T00:00:00.000Z",
        "recorded_basis": "first_registration",
        "object_count": 417
      },
      "diff": {
        "available": false,
        "code": "release_not_recorded",
        "detail": {
          "nl": "Een vergelijking van release tot release vraagt aan beide kanten een vastgelegde momentopname, en 1.0.0 heeft die niet. Het momentopnameregister begon op 2026-08-13T00:00:00.000Z; wat daarvoor gepubliceerd stond is niet vastgelegd en wordt achteraf niet gereconstrueerd.",
          "en": "A release-to-release comparison needs a recorded snapshot on both sides, and 1.0.0 has none. The snapshot register started at 2026-08-13T00:00:00.000Z; what stood published before that date was not recorded and is not reconstructed after the fact."
        }
      }
    },
    {
      "release_id": "praxikon:sys:registry:release:2026-08-08-first-public-release",
      "sequence": 1,
      "released_at": "2026-08-08",
      "dataset_version": "1.0.0",
      "schema_version": "1.0.0",
      "openapi_version": null,
      "moved": [
        "dataset",
        "schema"
      ],
      "headline": {
        "nl": "Eerste openbare release",
        "en": "First public release"
      },
      "summary": {
        "nl": "De implementatiegraph werd voor het eerst openbaar: gepubliceerde objecten met twee tijdassen, per uitspraak een primaire bron, en een payloadhash per objectversie om een citatie mee te controleren. Dit is ook de kennisdatum waarop elke gepubliceerde versie sindsdien staat, en daarmee de bodem van de kennisas.",
        "en": "The implementation graph became public for the first time: published objects on two time axes, a primary source per statement, and a payload hash per object version to verify a citation against. It is also the knowledge date every published version has carried since, and therefore the floor of the knowledge axis."
      },
      "payload_hashes_moved": false,
      "payload_hashes_note": null,
      "documentation": [
        "https://www.praxikon.com/en/methodologie"
      ],
      "is_current": false,
      "snapshot": {
        "recorded": false,
        "code": "release_predates_snapshot_register",
        "detail": {
          "nl": "Van dataset 1.0.0 is geen momentopname vastgelegd. Het register begon op 2026-08-13T00:00:00.000Z en een eerdere release valt achteraf niet te reconstrueren, want die payloads staan niet meer in de repository. Dat is een gat in de vastgelegde historie en geen bewering dat er niets bewoog.",
          "en": "No snapshot is recorded for dataset 1.0.0. The register started at 2026-08-13T00:00:00.000Z and an earlier release cannot be reconstructed after the fact, because its payloads are no longer in the repository. That is a gap in the recorded history, not a statement that nothing moved."
        }
      },
      "diff": {
        "available": false,
        "code": "no_predecessor_release",
        "detail": {
          "nl": "Dit is de eerste gepubliceerde release. Er is geen eerdere stand van de dataset om hem tegen af te zetten.",
          "en": "This is the first published release. There is no earlier state of the dataset to compare it against."
        }
      }
    }
  ],
  "links": {
    "self": "https://www.praxikon.com/changelog.json",
    "human_page_nl": "https://www.praxikon.com/nl/releases",
    "human_page_en": "https://www.praxikon.com/en/releases",
    "status": "https://www.praxikon.com/api/v1/status",
    "dataset": "https://www.praxikon.com/api/v1/dataset",
    "diff": "https://www.praxikon.com/api/v1/diff",
    "corrections": "https://www.praxikon.com/api/v1/corrections",
    "documentation": "https://www.praxikon.com/api/v1/openapi",
    "licence": "https://www.praxikon.com/nl/legal/terms"
  },
  "note": "Three counters move independently: dataset_version says which content is published, schema_version which shape it has, and the OpenAPI version how large the surface around it is. Each entry states which of the three moved. This register says what we released; it does not say a change in the law happened, which lives in /api/v1/changes, and it does not say we were wrong, which lives in /api/v1/corrections."
}
