# Release v1.5-rc1

This document is the operational walkthrough for the `v1.5-rc1` pre-release tag in the actproof-events repository. It documents the rename of the substrate from the working name `openproof` to the canonical name `actproof`, plus the two new catalogue entries that v1.5-rc1 adds.

## Summary

`v1.5-rc1` introduces:

1. **The rename of the catalogue and its substrate from `openproof` to `actproof`.** This is the first release under the canonical name. The companion library `actproof-py` v0.1.0 is the first PyPI release; this catalogue release is paired with that library release. The schema discriminator is now `actproof.act_catalogue_entry.v3` (renamed from `openproof.act_catalogue_entry.v3` in v1.4-era development). Act-type IDs preserve the `op:` prefix as a stable historical identifier; the namespace within IDs is renamed where it referenced the working name (so `op:openproof.software_release.v1` becomes `op:actproof.software_release.v1`; identifiers without "openproof" in the namespace are unchanged).

2. **Two new catalogue entries** that join the two retrofitted ones (NIS2 Article 20 management body approval, EUDR DDS preparation):
   - `op:actproof.software_release.v1` — software release attestation. The May 18 mainnet dogfood uses this act type to attest the release of `actproof==0.1.0` itself.
   - `op:democracy.civil_society_mandate.settlement.v1` — civil society mandate settlement. A democratic act type covering bounded-scope mandates issued by participatory bodies.

3. **Schema v3 of the catalogue entry format.** v3 is a strict superset of v2: four new optional sub-objects on each entry (`regulated_context_profile`, `prior_receipts_profile`, `reliance_context`, `disclosure_profile`). All four v1.5-rc1 entries declare `private_fields = []`; the disclosure-tier structure is structurally present, exercised end-to-end in v1.5-rc2 (the H8 four-pair lifecycle scheduled for May 30).

This is a **pre-release candidate**, not v1.5 final. v1.5 final lands after the v1.5-rc2 H8 work completes and the four lifecycle pairs are exercised end-to-end.

## Why the rename

The PyPI namespace `openproof` was held by a placeholder package unrelated to this project, blocking first publication under the working name. The name `actproof` was available across PyPI, GitHub, and the project's brand-defensible namespace, and is more semantically precise (proof of a regulated act, not formal proof in the mathematical sense). The companion library was renamed in coordination with this catalogue release. The receipt envelope v1.0 specification kept its name; only the implementing library and catalogue identifier are renamed.

See the actproof-py v0.1.0 CHANGELOG entry for the full rationale and the public contract.

## What's in v1.5-rc1

### Naming changes from v1.4-rc1

| Surface | v1.4-rc1 | v1.5-rc1 |
|---|---|---|
| Catalogue schema discriminator | `openproof.act_catalogue_entry.v2` | `actproof.act_catalogue_entry.v2` and `actproof.act_catalogue_entry.v3` |
| Spec file | `spec/openproof-events.spec.md` | `spec/actproof-events.spec.md` |
| Test vector input directory | `scripts/test_vector_inputs/openproof_software_release_v1_001.json` | `scripts/test_vector_inputs/actproof_software_release_v1_001.json` |
| Catalogue directory for own-namespace entries | `catalogue/acts/openproof/` | `catalogue/acts/actproof/` |
| Act-type ID for the software release act | `op:openproof.software_release.v1` | `op:actproof.software_release.v1` |
| Act-type IDs for EU regulation entries | `op:eu.nis2.art20.management_body_approval.v1`, `op:eu.eudr.dds_preparation.v1` | unchanged (no "openproof" in the ID) |
| Repository URLs in documentation | `github.com/deyan-paroushev/openproof-events` | `github.com/deyan-paroushev/actproof-events` (auto-redirect preserved) |

### New entries at v3 (this release)

- `catalogue/acts/actproof/software_release.v1.json` — software release act type with full v3 profile blocks. The reference verifier loads this entry and validates manifests of software release attestations against it. `disclosure_profile.commitment_fields = []` (this entry has no commercially sensitive fields). The May 18 mainnet dogfood issues a receipt against this entry attesting the release of `actproof==0.1.0`.
- `catalogue/acts/actproof/software_release.v1.test_vectors.json` — deterministic test vector for the software release entry. The vector exercises canonicalization, manifest hashing, and the v3 profile-block round-trip.
- `catalogue/acts/democracy/civil_society_mandate.settlement.v1.json` — civil society mandate settlement act type. `disclosure_profile.commitment_fields = ["member_approval_basis"]` (one commercially or organizationally sensitive field, exercised at issue time by the issuer-side salting and commitment generation). Schema v3 with substantive `reliance_context` and `back_propagation_scope`.
- `catalogue/acts/democracy/civil_society_mandate.settlement.v1.test_vectors.json` — test vector for the civil society mandate entry. Exercises one-commitment manifest construction and disclosure-receipt round-trip.

### Retrofitted entries from v2 to v3

- `catalogue/acts/eu/nis2/art20/management_body_approval.v1.json` — NIS2 management body approval, schema bumped from v2 to v3 with optional v3 profile blocks populated. The v2-era test vectors continue to produce byte-identical hashes against the v3-retrofit entry (backward compatibility verified).
- `catalogue/acts/eu/eudr/dds_preparation.v1.json` — EUDR Due Diligence Statement preparation, schema bumped from v2 to v3. Same backward-compatibility verification.

### Schema files

- `spec/schemas/act_catalogue_entry.v3.json` — the v3 JSON Schema. Includes the four new optional sub-objects. Strict `additionalProperties: false` for the wire schema; loaders that tolerate unknown keys (like actproof-py's `_parse_entry`) ignore extras gracefully.
- `spec/schemas/act_catalogue_entry.v2.json` — preserved unchanged. Receipts issued against v1.4-rc1 entries pin the v2 schema hash; verifying those receipts requires the v2 schema file at the original hash. Removing the v2 schema would break the receipt-binding chain for any historical v2 receipt.

### Specification update

- `spec/actproof-events.spec.md` — updated to describe v3, name the schema discriminator under the canonical name, and document the rename relationship to `actproof-py`.

## Consumer upgrade path

Consumers of `openproof-events v1.4-rc1` upgrading to `actproof-events v1.5-rc1`:

1. **Catalogue files using `"schema": "openproof.act_catalogue_entry.v3"`** must update to `"schema": "actproof.act_catalogue_entry.v3"`. Equivalently for v2.
2. **Loaders pinning to the openproof name** should switch to `from actproof.catalogue import load_catalogue`. The library API is unchanged.
3. **Repository URLs** in documentation update from `github.com/deyan-paroushev/openproof-events` to `github.com/deyan-paroushev/actproof-events`. GitHub's auto-redirect preserves the old URL functionally, but reference documentation should use the canonical URL.
4. **The `op:openproof.software_release.v1` act-type ID** is renamed to `op:actproof.software_release.v1`. Any receipts or manifests pinning the old ID need to be reissued under the new ID. (In practice, no public receipts were issued under the working-name ID; only mock/demo samples used it.)
5. **Receipts issued against v1.4-rc1 entries** with v2 schema continue to verify. The catalogue's v2 schema file is preserved at its original byte-identical content; the schema_hash field on those receipts continues to resolve.

## Verification

The v1.5-rc1 catalogue was verified end-to-end against `actproof-py` v0.1.0:

- `actproof.load_catalogue` resolves the directory tree, parses all four entries, and computes the `schema_hash` against `act_catalogue_entry.v3.json`.
- `cat.get("op:actproof.software_release.v1")` returns the renamed entry with `entry.schema == "actproof.act_catalogue_entry.v3"`.
- All four entries have well-formed `regulated_context_profile`, `reliance_context`, and `disclosure_profile` blocks.
- Schema discriminator strings now match the actproof-py library's `SCHEMA_DISCRIMINATOR_V2` and `SCHEMA_DISCRIMINATOR_V3` constants.

The `actproof-py` test suite runs 483/485 tests passing with this catalogue. The two failing tests are stale v1.4-era assertions in `tests/test_catalogue_v3.py` that explicitly note they need updating once v1.5-rc1 lands (`"Update or split the test once v1.5-rc1 lands"`); those updates ship with `actproof-py` v0.1.1.

## What ships in v1.5-rc2 (next, scheduled by May 30)

The four-lifecycle-pair extension for the H8 deliverable, paired with `actproof-py` v0.1.1's disclosure CLI:

- Buyer-side entries: `eu.eudr.dds_preparation.v1` (upgraded), `eu.nis2.art23.final_report.v1`, `eu.csrd.sustainability_statement.v1`, `eu.dora.major_incident_final_report.v1`
- Supplier-side entries: `eu.eudr.supplier_dispatch_evidence.v1`, `eu.nis2.supplier_security_attestation.v1`, `eu.csrd.value_chain_evidence.v1`, `eu.dora.ict_third_party_evidence.v1`

The EUDR pair is exercised end-to-end as the worked example for the NGI0 Commons application (June 1 submission).

## Pre-release tag

This release is tagged `v1.5-rc1` as a pre-release. The git tag is annotated with this release-notes document URL.

## License

Catalogue entries: CC0 1.0 Universal (no rights reserved). Spec, schemas, and documentation: Apache-2.0. See LICENSE for the full text.
