Skip to content

Commit 06ada77

Browse files
authored
Merge pull request #9 from artiso-ai/release/0.5.1
release/0.5.1: Docs Coherence Plan rollout
2 parents 3bcbe84 + 9234856 commit 06ada77

39 files changed

Lines changed: 2672 additions & 3039 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ jobs:
6969
- name: Check error documentation
7070
run: uv run python scripts/check_error_docs.py
7171

72+
# Phase 7 of the Docs Coherence Plan — guard the "default UNTP
73+
# version" claim in user-facing docs against drifting away from
74+
# DEFAULT_VERSIONS[SchemaFamily.UNTP]. Same script runs in
75+
# .pre-commit-config.yaml.
76+
- name: Check docs default-version coherence
77+
run: uv run python tools/check_doc_default_version.py
78+
7279
# License scanning - ensure all dependencies have compatible licenses
7380
- name: Check dependency licenses
7481
run: |

.github/workflows/docs.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,8 @@ jobs:
2121
- name: Install dependencies
2222
run: uv sync --group docs
2323

24-
- name: Build and deploy docs
24+
- name: Build docs (strict)
25+
run: uv run mkdocs build --strict
26+
27+
- name: Deploy docs
2528
run: uv run mkdocs gh-deploy --force

.github/workflows/release.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,25 @@ jobs:
138138
- name: Validate real fixture
139139
run: dppvalidator validate tests/fixtures/valid/minimal_dpp.json
140140

141+
# Full functional smoke against the TestPyPI-installed wheel.
142+
# ``scripts/smoke_test.py`` ships ~22 sections (~109 assertions)
143+
# across CLI, Python API, compat shim, exporter, plugins,
144+
# manifest integrity, doctor, content-negotiation, and the
145+
# Phase 9 (0.5.0) contracts (six-code exit surface, D1
146+
# statusListIndex int coercion, D2 PartyRoleEnum gradient +
147+
# PRT001 advisory, deprecation warnings, UNTP↔CIRPASS round-
148+
# trip). DPP_BIN/PY_BIN point the script at the just-installed
149+
# binary instead of a dev .venv. This is the deeper second-
150+
# pass gate that runs after the lightweight import + CLI
151+
# smoke checks above.
152+
- name: Run full smoke-test suite against TestPyPI install
153+
run: |
154+
export DPP_BIN="$(which dppvalidator)"
155+
export PY_BIN="$(which python)"
156+
echo "DPP_BIN=$DPP_BIN"
157+
echo "PY_BIN=$PY_BIN"
158+
python scripts/smoke_test.py
159+
141160
publish-pypi:
142161
name: Publish to PyPI
143162
runs-on: ubuntu-latest

.pre-commit-config.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,14 @@ repos:
9393
language: system
9494
pass_filenames: false
9595
stages: [ pre-push ]
96+
# Phase 7 of the Docs Coherence Plan — guard against the
97+
# "default UNTP version" claim drifting away from the registry.
98+
# Runs against user-facing docs (README, AGENTS.md, mkdocs pages,
99+
# llms*.txt). See tools/check_doc_default_version.py for the
100+
# exempt list and detection algorithm.
101+
- id: check-doc-default-version
102+
name: check-doc-default-version
103+
entry: uv run python tools/check_doc_default_version.py
104+
language: system
105+
pass_filenames: false
106+
files: ^(README\.md|AGENTS\.md|CLAUDE\.md|docs/(?!plans/|adr/0006).*\.(md|txt)|src/dppvalidator/schemas/registry\.py)$

AGENTS.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
- **ty** (Astral) for type checking
1414
- **pytest** for testing
1515
- **GitHub Actions** for CI/CD
16+
- Optional extras: `[cli]` (rich CLI formatting), `[rdf]` (SHACL via
17+
`rdflib` + `pyshacl`), `[all]` (both). SHACL is opt-in to keep the
18+
default install footprint minimal.
1619

1720
## Directory Structure
1821

@@ -21,12 +24,14 @@ src/dppvalidator/ # Main package
2124
├── models/ # Pydantic models for DPP entities
2225
│ ├── v0_6/ # UNTP 0.6.x models (ProductPassport envelope)
2326
│ ├── v0_7/ # UNTP 0.7.0 models (Product as credentialSubject)
27+
│ ├── cirpass/v1_3/ # CIRPASS DPP reference structure 1.3.0
2428
│ └── … # Top-level shims re-export v0.6 for back-compat
25-
├── validators/ # Validation logic (per-version dispatch)
26-
│ ├── rules/v0_6/ # Semantic rules — v0.6
27-
│ ├── rules/v0_7/ # Semantic rules — v0.7
29+
├── validators/ # Validation logic (per-version + per-family dispatch)
30+
│ ├── rules/v0_6/ # Semantic rules — UNTP 0.6
31+
│ ├── rules/v0_7/ # Semantic rules — UNTP 0.7
32+
│ ├── rules/cirpass_v1_3/ # Quality rules — CIRPASS 1.3 (CQ*)
2833
│ └── …
29-
├── compat/ # Cross-version compat shims
34+
├── compat/ # Cross-version + cross-family shims (UPG*, MAP*)
3035
├── verifier/ # Signature and credential verification
3136
├── exporters/ # JSON-LD and EU DPP export formats
3237
├── schemas/ # JSON Schema loading + version registry
@@ -46,14 +51,16 @@ tests/ # Test suite
4651
└── upstream/ # SHA-pinned upstream samples
4752
```
4853

49-
## UNTP version handling
54+
## Schema family + version handling
5055

51-
dppvalidator supports **UNTP DPP 0.6.x and 0.7.0** in the same release.
56+
dppvalidator supports **UNTP DPP 0.6.x and 0.7.0** and the **CIRPASS
57+
DPP reference structure 1.3.0** (`SchemaFamily.CIRPASS`) in the same
58+
release.
5259

5360
- Version detection: `validators/detection.py` is the only place that
5461
decides the version of a payload.
5562
- Default version: `schemas.registry.DEFAULT_SCHEMA_VERSION` (currently
56-
`0.6.1`); call `dppvalidator.compat.active_version()` from feature
63+
`0.7.0`); call `dppvalidator.compat.active_version()` from feature
5764
code instead of hardcoding the literal.
5865
- Adding a new version: see
5966
[`.claude/rules/untp-versioning.md`](.claude/rules/untp-versioning.md)

CHANGELOG.md

Lines changed: 92 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,100 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.5.1] - 2026-05-10
9+
10+
Documentation-only patch. No runtime behaviour changed; no API,
11+
schema, validator, or CLI surface was touched. The release executes
12+
the [Docs Coherence Plan](https://github.com/artiso-ai/dppvalidator/blob/main/docs/plans/DOCS_COHERENCE_PLAN.md)
13+
end-to-end: every public source now agrees on the active default
14+
version, the canonical seven-layer taxonomy, and the error-code
15+
prefix table.
16+
17+
### Added
18+
19+
- [ADR 0006](https://github.com/artiso-ai/dppvalidator/blob/main/docs/adr/0006-validation-layer-taxonomy.md)
20+
pinning the canonical "seven layers + Layer 0 detection" taxonomy
21+
and the non-layer error-code prefix list (`PRS`, `DET`, `VER`,
22+
`UPG`, `MAP`, `PRT`).
23+
- New error-page coverage for codes that ship in 0.5.0 but had no
24+
reference page: `DET001` (family mismatch), `MAP001``MAP005`
25+
(cross-family migration warnings).
26+
- `tools/check_doc_default_version.py` — CI guard that walks the
27+
user-facing docs surface and asserts every "default UNTP version"
28+
claim matches `DEFAULT_VERSIONS[SchemaFamily.UNTP]`. Wired into
29+
pre-commit and `ci.yml` lint.
30+
- `tests/unit/test_doc_error_code_coverage.py` — asserts every error
31+
code emitted by `src/` has a `docs/errors/<CODE>.md` page and an
32+
`mkdocs.yml` nav entry, and the prefix allow-list agrees with
33+
ADR 0006.
34+
- `mkdocs build --strict` is now a hard gate in
35+
[`.github/workflows/docs.yml`](.github/workflows/docs.yml).
36+
37+
### Changed
38+
39+
- Default UNTP version flipped `0.6.1``0.7.0` across every
40+
user-facing surface (README, mkdocs index/concepts/guides/FAQ,
41+
AGENTS.md, both `llms*.txt`). The runtime default already lived at
42+
`0.7.0` in [`schemas/registry.py`](https://github.com/artiso-ai/dppvalidator/blob/main/src/dppvalidator/schemas/registry.py)
43+
since 0.5.0; the docs caught up.
44+
- Error-code prefix `MOD``MDL` in every doc that referenced it
45+
(the source code has emitted `MDL001``MDL099` since 0.5.0; only
46+
the docs lagged).
47+
- The README + concept-page mermaid diagrams now render the full
48+
seven-layer flow (Detection → Schema → Model → JSON-LD →
49+
Semantic → Vocabulary → Plugin → Signature) instead of the older
50+
five-layer dispatch path.
51+
- `SIG001``SIG099` is documented as **reserved**: the verifier
52+
currently surfaces untyped error strings via
53+
`VerificationResult.errors`; the `SIG` prefix is held for the
54+
future structured-code migration.
55+
- README hero, `mkdocs.yml site_description`, and both `llms*.txt`
56+
framings now name **CIRPASS DPP reference structure 1.3.0**
57+
alongside UNTP 0.6.x / 0.7.0; previous wording mentioned only
58+
UNTP.
59+
- `docs/changelog.md` is now a one-line `pymdownx.snippets` include
60+
of the root `CHANGELOG.md` — single source of truth, both
61+
surfaces stay in sync at build time.
62+
- Root `llms.txt` and `llms-ctx.txt` are symlinks into `docs/`; the
63+
two copies can no longer drift.
64+
- FAQ error-prefix table extended from 7 rows to 12 (adds `DET`,
65+
`VER`, `UPG`, `MAP`, `PRT`; clarifies `SIG` reservation).
66+
- `AGENTS.md` directory tree adds `models/cirpass/v1_3/` and
67+
`validators/rules/cirpass_v1_3/`; "UNTP version handling" section
68+
renamed to "Schema family + version handling" and now names
69+
`SchemaFamily.CIRPASS`; `[rdf]` / `[cli]` / `[all]` extras called
70+
out.
71+
72+
### Removed
73+
74+
- Scratch artefacts that had drifted into `docs/`: `docs/dpp/*.json`
75+
(raw schema fixtures duplicated under `tests/fixtures/`),
76+
`docs/uv/uv.md` and `docs/windsurf/cascade-reference.md`
77+
(third-party docs copies),
78+
`docs/dpp_validator_description.md` (early marketing draft).
79+
- Internal planning documents moved out of the published docs site
80+
into `docs/plans/` (already in `exclude_docs:`):
81+
`IMPLEMENTATION_PLAN.md`, `IMPROVEMENT_ROADMAP.md`,
82+
`REFACTORING_PLAN.md`, `STRATEGIC_ROADMAP.md`,
83+
`UNTTP_PLUGIN_PLAN.md`, `VC_WALLET_ROADMAP.md`. Their content is
84+
unchanged; the relocation closes the mkdocs `--strict` orphan
85+
gap.
86+
87+
### Maintenance
88+
89+
- All cross-document references in this `CHANGELOG.md` rewritten as
90+
GitHub-absolute URLs so the snippet-included copy at
91+
[`docs/changelog.md`](https://artiso-ai.github.io/dppvalidator/changelog/)
92+
resolves cleanly under `mkdocs build --strict`.
93+
894
## [0.5.0] - 2026-05-09 (Preview)
995

1096
This release adds **end-to-end CIRPASS-2 reference structure v1.3.0**
1197
support alongside UNTP DPP 0.6.x / 0.7.0 and ships the cross-family
1298
forward / reverse shims, the EUDPP v1.9.x ontology rebase, two pilot
1399
profiles (Textile v2 built-in, Tyres GPL plugin), and a six-code CLI
14100
exit surface. The migration plan is at
15-
[`docs/plans/CIRPASS_2_MIGRATION.md`](docs/plans/CIRPASS_2_MIGRATION.md);
101+
[`docs/plans/CIRPASS_2_MIGRATION.md`](https://github.com/artiso-ai/dppvalidator/blob/main/docs/plans/CIRPASS_2_MIGRATION.md);
16102
each phase has its own implementation log there.
17103

18104
**Status: Preview / unstable.** The Pydantic v0.7 model layer has
@@ -39,7 +125,7 @@ correctness check.
39125
`src/dppvalidator/vocabularies/data/ontologies/`; 6 fresh
40126
manifest entries, every IRI rebased onto the canonical
41127
`https://w3id.org/eudpp#` fragment namespace per
42-
[ADR 0002](docs/adr/0002-canonical-eudpp-iri.md).
128+
[ADR 0002](https://github.com/artiso-ai/dppvalidator/blob/main/docs/adr/0002-canonical-eudpp-iri.md).
43129
- **CIRPASS reference Pydantic models** at
44130
`dppvalidator.models.cirpass.v1_3.*` (20 classes — Actor,
45131
ActorRoleAssignment, ConnectorRelation, Material, LifeCycleAssessment,
@@ -140,7 +226,7 @@ correctness check.
140226

141227
The Pydantic v0.7 model layer has documented drift from the upstream
142228
JSON Schema, catalogued as drift items D3–D27 in
143-
[Phase 8.9 of the migration plan](docs/plans/CIRPASS_2_MIGRATION.md).
229+
[Phase 8.9 of the migration plan](https://github.com/artiso-ai/dppvalidator/blob/main/docs/plans/CIRPASS_2_MIGRATION.md).
144230
Schema validation (Layer 1) catches every contract violation; the
145231
drift is confined to the Python API ergonomics layer and will be
146232
fully reconciled in 0.6.0 (Phase 10 tasks 10.9–10.15). Specifically:
@@ -198,7 +284,7 @@ fully reconciled in 0.6.0 (Phase 10 tasks 10.9–10.15). Specifically:
198284
This release adds first-class support for **UNTP DPP 0.7.0** alongside
199285
the existing 0.6.x. Both wire formats coexist and are auto-detected
200286
from `@context` / `$schema` URLs. The plan is captured in
201-
[`docs/plans/UNTP_0.7.0_MIGRATION.md`](docs/plans/UNTP_0.7.0_MIGRATION.md);
287+
[`docs/plans/UNTP_0.7.0_MIGRATION.md`](https://github.com/artiso-ai/dppvalidator/blob/main/docs/plans/UNTP_0.7.0_MIGRATION.md);
202288
each phase has its own implementation log there.
203289

204290
### Added
@@ -249,8 +335,8 @@ each phase has its own implementation log there.
249335
`MANIFEST.json` now carry both an SHA-pinned `source_url` and a
250336
human-friendly `production_url` (e.g. `untp.unece.org`).
251337
- **Documentation**. New
252-
[`docs/concepts/untp-versions.md`](docs/concepts/untp-versions.md)
253-
and [`docs/guides/migration-0-6-to-0-7.md`](docs/guides/migration-0-6-to-0-7.md);
338+
[`docs/concepts/untp-versions.md`](https://github.com/artiso-ai/dppvalidator/blob/main/docs/concepts/untp-versions.md)
339+
and [`docs/guides/migration-0-6-to-0-7.md`](https://github.com/artiso-ai/dppvalidator/blob/main/docs/guides/migration-0-6-to-0-7.md);
254340
refreshed schema, JSON-LD, validation, CLI, FAQ, and index pages
255341
with both v0.6 and v0.7 examples.
256342

0 commit comments

Comments
 (0)