Skip to content

0.13.0 — crate boundaries, the open sector lane, and verified semantic IDs - #76

Merged
LKSNDRTMLKV merged 18 commits into
mainfrom
fix/withdraw-catena-x-identifier
Jul 30, 2026
Merged

0.13.0 — crate boundaries, the open sector lane, and verified semantic IDs#76
LKSNDRTMLKV merged 18 commits into
mainfrom
fix/withdraw-catena-x-identifier

Conversation

@LKSNDRTMLKV

@LKSNDRTMLKV LKSNDRTMLKV commented Jul 30, 2026

Copy link
Copy Markdown
Member

The whole 0.13.0 body. Supersedes #73, #74 and #75, whose branches are ancestors of this one — all fifteen commits are here unchanged in content.

Implements the 0.13.0 scope of ADR-010 (sealed, fourth amendment). Every commit is a pure move, a pure fix, or a self-contained feature.

Crate layout after this

dpp-domain        + access/ (disclosure policy), + domain/{compliance,seal}
dpp-crypto        jws + keystore — now zero workspace dependencies
dpp-vc            credentials, did:web, status lists, JSON-LD          (new)
dpp-aas           AAS shells + per-product-group submodels             (new)
dpp-digital-link  GS1 Digital Link + link-type negotiation  (name kept)

dpp-digital-link keeps its published name — what remains is exactly what the name says, so no crates.io name is abandoned and no shim is needed. dpp-aas and dpp-vc are new names, claimed permanently at publish.

The four substantive changes

1. The sector axis is open on the wire. Sector and SectorData were plain derives, so a passport whose sector was not one of twelve variants failed to deserialize, and Other matched only the literal tag "other" — discarding the real key. Meanwhile the catalog, schema registry, disclosure map and plugin manifests were all string-keyed data. The wire was the one closed part.

Both types now carry the tag (Other(String), Other { sector, data }) with hand-written serde that falls through instead of failing. An unknown sector round-trips byte-identically — the test compares serialised bytes, not Values, because a signature is computed over bytes.

Adding a product group is now a catalog manifest plus a schema file. This was scheduled for 0.14.0 and brought forward: it is the only item clamped to first issuance, and one breaking release beats two.

2. Crate boundaries. AAS and the trust layer move out. LocalIdentityService had to move to dpp-vc too — it depends on both jws/keystore and did_builder/passport_credential, so leaving it would have closed a dependency cycle. The disclosure contract moves to dpp-domain, which is what leaves dpp-crypto dependency-free.

3. Semantic IDs. Seven third-party identifiers were emitted; six were malformed — four IDTA URNs using a document-number form IDTA does not use, an ECLASS IRDI with the Property/Classification code space inverted, and one coined urn:idta: identifier. The seventh (Catena-X) is real, current and CC-BY-4.0, but its correspondence to our battery submodel was never established, so it was withdrawn too: a malformed identifier fails closed, a well-formed one naming the wrong concept fails open.

dpp-aas now emits no third-party semanticIds. The interop claim is the narrow, true one — AAS-shaped output carrying our own semantics. All seven are recorded in src/semantic_ids/allowlist.json under tracked, with the correct value where known, under a test-enforced key set.

4. README examples are compiled. cargo nextest does not run doctests, so no README example in this workspace had ever been compiled. Wiring test-doc into just check immediately surfaced Passport::new (does not exist), three wrong field names, a trait impl missing five methods, and two directory trees being compiled as Rust.

Gate

just check green: fmt, clippy -D warnings, workspace tests, doctests, all ten plugin suites, cargo doc -D warnings, cargo audit.

Key behaviours are pinned rather than asserted in prose — round-trip byte identity, typed-lane preservation, untagged-payload refusal, the untyped variant refusing to alias a typed sector, semanticId provenance, and the allowlist key set. The provenance gate and the doctest harness were both mutation-checked.

Reviewer notes

  • Rebased onto main. An earlier history rewrite (removing a keystore an example had written into the tree) left the branch sharing no recent ancestry with main; it would have shown 43 commits and duplicated a month of history. Rebased to 15.
  • Nothing waits on a human attestation. The Catena-X identifier was withdrawn rather than signed off, so the allowlist ships empty and the release is unblocked.
  • Not included: removing typed lanes for provisional sectors. Eight of eleven catalog sectors are provisional — textile among them — so that is a capability decision, and unlike the wire format it is not clamped to any deadline. It is 0.14.0 along with the AAS gate polarity flip.

Engine repin prepared in odal-node/dpp-engine#66; it needs a follow-up commit for the sector-lane fallout (Sector is no longer Copy) and is blocked until this publishes.

@codacy-production

codacy-production Bot commented Jul 30, 2026

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 4 high

Alerts:
⚠ 4 issues (≤ 0 issues of at least minor severity)

Results:
4 new issues

Category Results
Security 4 high

View in Codacy

🟢 Metrics 290 complexity · 39 duplication

Metric Results
Complexity 290
Duplication 39

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@LKSNDRTMLKV
LKSNDRTMLKV force-pushed the feat/open-sector-lane branch from a3005e6 to 6f97d0a Compare July 30, 2026 14:47
@LKSNDRTMLKV
LKSNDRTMLKV force-pushed the fix/withdraw-catena-x-identifier branch from 9f9515b to dda50e5 Compare July 30, 2026 14:47
@LKSNDRTMLKV
LKSNDRTMLKV force-pushed the fix/withdraw-catena-x-identifier branch from b366577 to 0f8f32b Compare July 30, 2026 17:30
@LKSNDRTMLKV LKSNDRTMLKV changed the title Withdraw the last third-party semantic ID 0.13.0 — crate boundaries, the open sector lane, and verified semantic IDs Jul 30, 2026
@LKSNDRTMLKV
LKSNDRTMLKV changed the base branch from feat/open-sector-lane to main July 30, 2026 17:30
@LKSNDRTMLKV
LKSNDRTMLKV force-pushed the fix/withdraw-catena-x-identifier branch from 2748a3c to 488f10e Compare July 30, 2026 18:34
@LKSNDRTMLKV
LKSNDRTMLKV merged commit 3630c52 into main Jul 30, 2026
12 of 13 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