Skip to content

release/0.5.0 — CIRPASS-2 reference structure v1.3.0 + UNTP 0.7.0 alignment#8

Merged
matbmeijer merged 3 commits into
mainfrom
release/0.5.0
May 9, 2026
Merged

release/0.5.0 — CIRPASS-2 reference structure v1.3.0 + UNTP 0.7.0 alignment#8
matbmeijer merged 3 commits into
mainfrom
release/0.5.0

Conversation

@matbmeijer

Copy link
Copy Markdown
Contributor

Summary

dppvalidator 0.5.0 (Preview) — adds end-to-end CIRPASS-2 reference structure v1.3.0 support alongside UNTP DPP 0.6.x / 0.7.0; ships the cross-family forward / reverse shims, the EUDPP v1.9.x ontology rebase, two pilot profiles (Textile v2 built-in, Tyres GPL plugin), and a six-code CLI exit surface.

End-to-end implementation log: docs/plans/CIRPASS_2_MIGRATION.md (Phases 0–9).

Full release notes: CHANGELOG.md — family-keyed sections (CIRPASS-2, UNTP, Plugins), Bug fixes, Deprecations, Cross-version compatibility, Known limitations referencing all 27 Phase 8.9 drift items, Migration guide.

Highlights

  • CIRPASS-2 v1.3.0 as a first-class schema family (SchemaFamily.CIRPASS); 20 Pydantic models; 11 semantic rules across 4 prefixes (ACT/REL/SOC/LCA); cross-family forward + reverse shims with 5 MAP00X warning codes; CIRPASS-JSONLD exporter.
  • EUDPP v1.9.x ontologies vendored (P_DPP, ACTOR, SOC, LCA v1.9.4-Maki, CON, CORE) with all IRIs rebased onto the canonical https://w3id.org/eudpp# fragment namespace per ADR 0002.
  • UNTP 0.7.0 is the new default version (Phase 9 task 9.1). v0.6.x stays supported via auto-detection and the v0.6 → v0.7 upgrade shim.
  • D1 BLOCKER fix (9.7) — BitstringStatusListEntry.statusListIndex is now int | None with ge=0; transparent v0.6 numeric-string back-compat coercion. Non-breaking.
  • D2 BLOCKER fix (9.8) — PartyRoleEnum documented dual-tier acceptance gradient + new PRT001 advisory rule + opt-in ValidationEngine(strict_role_enum=True). Preserves CIRPASS reverse-shim mapping fidelity. Non-breaking.
  • 3 deprecation surfaces activated (9.4) for Phase 10 / 0.6.0 removal: bare-string SCHEMA_REGISTRY[] lookup, is_dpp_document() alias, EUDPP_CONTEXT_URL.
  • Three-tier alignment guard test (9.9) registers the full Phase 8.9 drift baseline.
  • Plugins: built-in Textile v2 profile (TXT001–TXT007); Tyres GPL plugin (dppvalidator-tyres==0.1.0, Pre-1.0); plugin license-isolation gate (tools/check_imports.py).

Test plan

  • uv run pytest tests/ — 2525 passed / 36 skipped (+57 new tests vs 0.4.0)
  • uv run ruff check src/ tests/ — clean
  • uv run ruff format --check src/ tests/ — clean
  • uv run ty check src/ — clean
  • uv run --group docs mkdocs build --strict — clean
  • uv run python scripts/check_error_docs.py — 96/96 documented + nav-wired
  • uv run python scripts/smoke_test.py — 96/97 passed (1 skipped)
  • Cross-version regression baseline (9.11): uv run pytest tests/integration/test_version_matrix.py tests/integration/test_compat_roundtrip.py tests/integration/test_round_trip_untp_cirpass.py tests/integration/test_cross_family_isolation.py tests/unit/test_engine_extended.py — 101/101
  • UAT scenarios (9.5): U1/U2/U3/U4 manually verified.
  • Coverage 92.04% (>=90 floor)
  • Cold-start contract: import dppvalidator does not eager-load models.cirpass
  • CI green on this PR (lint + test matrix 3 OS × 5 Python)

Compatibility

  • v0.6.0 / v0.6.1 fixtures parse, validate, and upgrade without regression.
  • CIRPASS v1.3.0 round-trips remain bit-stable through forward + reverse shims.

Release pipeline

Tag v0.5.0 after merge → .github/workflows/release.yml builds, publishes to TestPyPI, smoke-tests, then publishes to PyPI, creates a GitHub Release with SBOM, and emits SLSA provenance.

🤖 Generated with Claude Code

matbmeijer and others added 3 commits May 9, 2026 20:16
…0 alignment

End-to-end implementation of the CIRPASS-2 migration plan
(docs/plans/CIRPASS_2_MIGRATION.md, Phases 0–9). Adds the second
parallel schema family alongside UNTP DPP, completes the UNTP 0.7.0
alignment, and stages the 0.5.0 Preview release prep.

CIRPASS-2 (Phases 0–7):
- New SchemaFamily.CIRPASS family with v1.3.0 registered as a first-
  class entry. Auto-detection routes via @context and shape signatures;
  --target {auto,untp,cirpass} CLI flag plus DET001 family-mismatch
  diagnostic + EXIT_FAMILY_MISMATCH (3) exit code.
- 20 Pydantic models under dppvalidator.models.cirpass.v1_3.* covering
  every required field of the CIRPASS reference schema.
- 11 semantic rules under validators/rules/cirpass_v1_3/ across 4
  prefixes (ACT, REL, SOC, LCA) covering every axiom in the v1.9.x
  EUDPP module specs.
- Cross-family forward + reverse compat shims at compat/ with 5
  MAP00X warning codes and a 15-row M01-M15 declarative step table.
- CIRPASSJsonLDExporter accepting both native CIRPASS and UNTP-shimmed
  inputs; EUDPP exporter rebased onto v1.9.1 namespaces with
  EUDPP_CONTEXT_URL deprecated via PEP 562.
- migrate --to {untp-0.7,cirpass-1.3} generalises the migrate command
  with --default-language for LocalisedText wrapping.
- 6 EUDPP v1.9.x ontology TTLs vendored, every IRI rebased onto
  the canonical https://w3id.org/eudpp# fragment namespace
  (ADR 0002).
- Six-code CLI exit surface formalised at module level
  (EXIT_VALID/INVALID/ERROR/FAMILY_MISMATCH/BLOCKING_WARNINGS/
  IO_ERROR), documented at docs/reference/cli/exit-codes.md
  (ADR 0005).

Plugins (Phase 7):
- Textile v2 profile built-in (--profile textile-v2): 7 rules
  TXT001-TXT007 including TXT006 recycled-content disclosure and
  TXT007 repair-info (both new in v2). The legacy textile-v1 profile
  remains available; both ship as TEXTILE_PROFILES registry entries
  (ADR 0004).
- Tyres GPL plugin under plugins/tyres/ (dppvalidator-tyres==0.1.0,
  Pre-1.0 / Experimental): 4 GDSO declaration models (Birth v0.9,
  Collection v0.1, Retread v0.1, Recycling v0.1) +
  TyreLifecycleHistory aggregate enforcing UUID-chain /
  chronological-order / single-Recycling invariants. 8 TYR-coded
  validators auto-registered via entry-points (ADR 0003).
- Plugin license isolation enforced via tools/check_imports.py
  (AST-walks the core source tree; fails on any import from
  plugins/* — R8 mitigation).

UNTP 0.7.0 alignment (Phase 8 polish + Phase 9 BLOCKER fixes):
- DEFAULT_VERSIONS[UNTP] flipped from 0.6.1 to 0.7.0 (Phase 9.1).
  v0.6.x remains supported via auto-detection and the v0.6 -> v0.7
  upgrade shim (compat/upgrade_0_6_to_0_7.py).
- D1 BLOCKER fix (Phase 9.7): BitstringStatusListEntry.statusListIndex
  is now int | None with ge=0; new before-validator transparently
  coerces numeric strings (whitespace and leading-zero tolerant) for
  v0.6 fixture back-compat. Non-breaking.
- D2 BLOCKER fix (Phase 9.8): PartyRoleEnum acceptance gradient
  documented + new SCHEMA_STRICT_ROLES constant + new advisory rule
  PRT001 surfaces the gap when payloads use one of the 14 wider
  values. New ValidationEngine(strict_role_enum=True) opt-in
  upgrades PRT001 from info to error. CIRPASS reverse-shim mapping
  fidelity preserved. Non-breaking.
- 3-tier alignment guard test (Phase 9.9):
  tests/unit/test_v07_model_schema_alignment.py registers the full
  Phase 8.9 drift baseline (12 tests across strict / drift-watch /
  compat tiers), forcing every future PR widening drift to update
  the registered baseline atomically.
- 3 deprecation surfaces activated for Phase 10 removal (Phase 9.4):
  bare-string SCHEMA_REGISTRY[version] lookup, is_dpp_document()
  alias, EUDPP_CONTEXT_URL legacy URL.

Polish (Phase 8.5-8.6):
- Centralised cross-CLI _load_input helper at cli/_io.py.
- Centralised UNTP-CIRPASS shim helpers at compat/_shared.py and
  rules/cirpass_v1_3/_helpers.py.
- Removed 6 dead pre-Phase-2 detection aliases.
- Authored 2 missing error-doc pages (TXT006, TXT007).

Tests:
- 2525 passed / 36 skipped (+57 new tests vs the 0.4.0 baseline of
  2468).
- Coverage 92.04% (effectively flat).
- 101/101 cross-version regression baseline (Phase 9.11 release-
  gate command).

Documentation:
- New CHANGELOG.md 0.5.0 entry (family-keyed: CIRPASS-2, UNTP,
  Plugins; Bug fixes; Deprecations; Cross-version compatibility;
  Known limitations referencing all 27 Phase 8.9 drift items;
  Migration guide).
- New concept doc cirpass-2-alignment.md, user-facing guide
  migrate-untp-to-cirpass.md, and reference/cirpass/ section
  auto-generated via mkdocstrings.
- Two new ADRs (0004 — textile v2 built-in; 0005 — six-code CLI
  exit surface) plus two refreshed earlier ADRs.

Compatibility constraints honoured throughout (Phase 9 plan
addendum): v0.6.0 / v0.6.1 fixtures parse, validate, and upgrade
without regression; CIRPASS v1.3.0 round-trips remain bit-stable;
mkdocs build --strict, ruff check, ruff format --check, ty check
all clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bump pyproject.toml version to 0.5.0 (Preview). The release ships
CIRPASS-2 reference structure v1.3.0 support, completes UNTP 0.7.0
alignment, and activates the Phase 10 deprecation surfaces.

Tag-triggered release pipeline (.github/workflows/release.yml) will
build, publish to TestPyPI, smoke-test, then publish to PyPI on
push of tag v0.5.0.

See CHANGELOG.md and docs/plans/CIRPASS_2_MIGRATION.md Phase 9
status block for the full release notes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
matbmeijer added a commit that referenced this pull request May 9, 2026
Update Phase 9 status block with the release-cut state — develop
advanced through commits 290e303 + a8ea0c0; release/0.5.0 branch
cut and pushed; PR #8 open with 36 CI checks running. Records the
final manual tag step the release manager runs after PR merge.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@matbmeijer matbmeijer merged commit 3bcbe84 into main May 9, 2026
38 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant