Skip to content

Commit 6cefbde

Browse files
committed
fix(ci): resolve CI failures, fix broken links, add Vale and Prettier to pre-commit
CI workflow fixes: - Update lychee-action to v2.8.0 and markdownlint-cli2-action to v23.0.0 - Add .lycheeignore for forward refs, placeholder URLs, and flaky sites Pre-commit improvements: - Replace mirrors-prettier with local npx prettier --check hook (matches CI version, avoids creating unstaged files) - Add Vale hook (errata-ai/vale v3.9.6) to catch prose lint locally Vale configuration (.vale.ini): - Disable rules incompatible with technical specification prose: Passive voice, E-Prime, TooWordy, Headings, Contractions, Parens, Semicolons, Quotes, EmDash, Spacing, Exclamation, Annotations, Typography - Add e.V. to vocabulary accept list Cross-spec prose lint fixes: - Replace all "e.g." with "for example" across all EVES specs - Replace all "i.e." with "that is" across all EVES specs - Fix "specifications specifications" typo in EVES/README.md Broken link fixes (EVES-003): - Pinata docs: /web3/pinning → /api-reference/endpoint/ipfs - Ontology repos: GAIA-X4PLC-AAD → ASCS-eV/artifacts (gx, tzip21) - SPDX ref: StackExchange answer → spdx.org/licenses - GitLab TZIP: gitlab.com/tzip → gitlab.com/tezos - Tezos research: research.tezos.com → docs.tezos.com - Remove duplicate reference entries, add missing bullets Add CLAUDE.md with project setup and quality check instructions. Signed-off-by: jdsika <carlo.van-driesten@vdl.digital>
1 parent 07430a6 commit 6cefbde

19 files changed

Lines changed: 181 additions & 69 deletions

File tree

.github/styles/Vocab/EVES/accept.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@ DPoP
2929
SPARQL
3030
SSI
3131
Catena-X
32+
e\.V\.

.github/workflows/link_checker.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,17 @@ jobs:
1414
runs-on: ubuntu-latest
1515
steps:
1616
- name: Checkout
17-
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
17+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
1818

1919
- name: Restore lychee cache
20-
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
20+
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
2121
with:
2222
path: .lycheecache
2323
key: lychee-cache-${{ github.sha }}
2424
restore-keys: lychee-cache-
2525

2626
- name: Check links
27-
uses: lycheeverse/lychee-action@f81112d0d2814ded911bd23e3beaa9dda9f8ca55 # v2.3.0
27+
uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0
2828
with:
2929
args: >-
3030
--cache

.github/workflows/markdown_linter.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ jobs:
1212
runs-on: ubuntu-latest
1313
steps:
1414
- name: Checkout
15-
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
15+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
1616

1717
- name: Run markdownlint
18-
uses: DavidAnson/markdownlint-cli2-action@db4f21d957a58a0515c3e6b0fb16b2a13e97a1e6 # v19.1.0
18+
uses: DavidAnson/markdownlint-cli2-action@ce4853d43830c74c1753b39f3cf40f71c2031eb9 # v23.0.0
1919
with:
2020
config: .markdownlint.json
2121
globs: "**/*.md"

.lycheeignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Forward references to EVES specs not yet written
2+
EVES-009/eves-009.md
3+
4+
# Placeholder/example URLs used in spec text (not real endpoints)
5+
https://assets.envited-x.net/
6+
https://metadata.envited-x.net/
7+
https://ipfs.envited-x.net/
8+
9+
# GitLab blocks automated requests with 403
10+
https://gitlab.com/tezos/tzip/
11+
12+
# Flaky external sites (intermittent connection resets in CI)
13+
https://www.conventionalcommits.org/

.pre-commit-config.yaml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,16 @@ repos:
1515
- id: markdownlint
1616
args: ["--config", ".markdownlint.json"]
1717

18-
- repo: https://github.com/pre-commit/mirrors-prettier
19-
rev: v4.0.0-alpha.8
18+
- repo: local
2019
hooks:
2120
- id: prettier
21+
name: prettier
22+
entry: npx prettier --check --ignore-path .prettierignore
23+
language: system
2224
types_or: [markdown, json, yaml]
23-
args: ["--prose-wrap", "preserve"]
25+
26+
- repo: https://github.com/errata-ai/vale
27+
rev: v3.9.6
28+
hooks:
29+
- id: vale
30+
types: [markdown]

.vale.ini

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,30 @@ BasedOnStyles = Vale, Google, proselint, write-good
1010
Google.Acronyms = NO
1111
Google.We = NO
1212
Vale.Spelling = NO
13+
# EVES specs quote field names like "name", "tags" — comma placement doesn't apply
14+
Google.Quotes = NO
15+
# NOTE/TODO in blockquotes is standard RFC/spec style
16+
proselint.Annotations = NO
17+
# EVES uses spaced em-dashes (` — `) consistently
18+
Google.EmDash = NO
19+
# Filenames contain "..." which is not prose typography
20+
proselint.Typography = NO
21+
# "e.V." is the German legal abbreviation (eingetragener Verein)
22+
Google.Spacing = NO
23+
# Occasional emphasis is acceptable in specs
24+
Google.Exclamation = NO
25+
# Passive voice is standard in normative specifications ("MUST be derived from...")
26+
write-good.Passive = NO
27+
Google.Passive = NO
28+
# E-Prime ("avoid is/are/was") is incompatible with specification language
29+
write-good.E-Prime = NO
30+
# "however", "indicate", "requirement" are normal technical terms
31+
write-good.TooWordy = NO
32+
# Specs use title-case section headings (e.g. "Backwards Compatibility")
33+
Google.Headings = NO
34+
# Specs MUST NOT use contractions per formal writing conventions
35+
Google.Contractions = NO
36+
# Parenthetical clarifications are common in specs
37+
Google.Parens = NO
38+
# Semicolons are appropriate in complex specification sentences
39+
Google.Semicolons = NO

CLAUDE.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# CLAUDE.md
2+
3+
## Project overview
4+
5+
EVES (ENVITED-X Verifiable Ecosystem Specifications) defines standards for the ENVITED-X Data Space.
6+
Each specification lives in `EVES/EVES-NNN/eves-nnn.md` with associated examples, schemas, and assets.
7+
8+
## Setup
9+
10+
```sh
11+
npm install
12+
pre-commit install
13+
```
14+
15+
## Quality checks
16+
17+
Before every commit, run:
18+
19+
```sh
20+
make lint # markdownlint + frontmatter validation
21+
make format-check # Prettier formatting
22+
```
23+
24+
Pre-commit hooks enforce: trailing whitespace, end-of-file newlines, valid YAML/JSON, no merge conflicts, markdownlint, Prettier formatting (check mode), and Vale prose linting.
25+
26+
If Prettier fails, run `npx prettier --write .` to auto-format, then re-stage and commit.
27+
28+
CI additionally runs link checking (`link_checker.yml`).
29+
30+
### Vale prose lint rules
31+
32+
The project uses Vale with Google, proselint, and write-good styles (see `.vale.ini`).
33+
Several rules are disabled because they conflict with technical specification conventions (see comments in `.vale.ini`).
34+
35+
Key active rule that causes CI failures:
36+
37+
- Use "for example" instead of "e.g." or "i.e." (`Google.Latin`)
38+
39+
To run Vale locally: install [Vale](https://vale.sh/docs/install), then `vale sync && vale EVES/`.
40+
41+
### Markdown lint rules
42+
43+
See `.markdownlint.json`. Maximum line length is 300 characters (tables and code blocks are exempt).
44+
HTML elements `<a>`, `<br>`, `<img>`, `<sup>` are allowed.
45+
46+
## File conventions
47+
48+
- Specification documents use YAML frontmatter with fields: `eves-identifier`, `title`, `author`, `status`, `type`, `created`, `requires`, `replaces`
49+
- JSON schemas go in `eves-nnn-schemas/` directories (excluded from Prettier in `.prettierignore`)
50+
- Example files go in `example/` directories (excluded from Prettier in `.prettierignore`)
51+
- Commit messages follow [Conventional Commits](https://www.conventionalcommits.org/) with scope: `feat(EVES-003): ...`, `fix(ci): ...`
52+
- Branches follow `feat/eves-nnn-description` naming
53+
54+
## Ontology references
55+
56+
The ENVITED-X ontologies are maintained in [ontology-management-base](https://github.com/ASCS-eV/ontology-management-base).
57+
Current versions: `envited-x/v3/`, `manifest/v5/`, `hdmap/v6/`.
58+
59+
The Gaia-X ontology follows the Loire (25.11) release. Key naming:
60+
61+
- `envited-x:ResourceDescription` (subclass of `gx:VirtualResource`) carries the GX compliance metadata
62+
- `gx:name`, `gx:description` are used in the `envited-x:ResourceDescriptionShape` SHACL
63+
- `gx:license`, `gx:copyrightOwnedBy`, `gx:resourcePolicy` remain GX-native properties

EVES/EVES-001/eves-001.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ Each EVES must pass through the following stages:
6464
- **Future Changes**: Only changes designated as a minor editorial update by Editors are allowed in this stage.
6565

6666
5. **Deferred/Rejected**
67-
- **Deferred**: The EVES is paused for future discussion (e.g., lack of resources, overshadowed by another proposal).
67+
- **Deferred**: The EVES is paused for future discussion (for example, lack of resources, overshadowed by another proposal).
6868
- **Rejected**: Consensus cannot be reached, or the specification is fundamentally misaligned with ENVITED-X goals.
6969

7070
6. **Superseded**
@@ -85,20 +85,20 @@ Each EVES must pass through the following stages:
8585
### 2. EVES Numbering
8686

8787
- EVES documents follow sequential numbering, starting from EVES-001, EVES-002, and so on.
88-
- Numbers must be unique and stable once assigned (i.e., no recycling of identifiers).
88+
- Numbers must be unique and stable once assigned (that is, no recycling of identifiers).
8989

9090
### 3. EVES Types
9191

9292
Each EVES must declare one of the following **type** fields in its YAML header:
9393

9494
1. **Standards**
95-
- Defines technical specifications or protocols recommended for ecosystem adoption (e.g., data formats, APIs).
95+
- Defines technical specifications or protocols recommended for ecosystem adoption (for example, data formats, APIs).
9696

9797
2. **Informational**
9898
- Provides context, best practices, or reference material without strict normative requirements.
9999

100100
3. **Process**
101-
- Outlines procedural or governance rules applicable to the ENVITED community (e.g., this EVES-001).
101+
- Outlines procedural or governance rules applicable to the ENVITED community (for example, this EVES-001).
102102

103103
### 4. Roles and Responsibilities
104104

@@ -121,7 +121,7 @@ Each EVES must declare one of the following **type** fields in its YAML header:
121121

122122
- A subset of EVES Editors with voting rights as full ASCS e.V. ENVITED members.
123123
- Provide the final decision on moving an EVES from Candidate to Final.
124-
- Must meet quorum requirements (e.g., at least two Approvers) to grant or deny Final status.
124+
- Must meet quorum requirements (for example, at least two Approvers) to grant or deny Final status.
125125

126126
### 4.5 Conflict Resolution
127127

EVES/EVES-002/eves-002.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ The ENVITED-X Data Space is built on the following core modules:
3636

3737
- **Purpose**:
3838
- Establish trust by verifying user and organization identities.
39-
- Enable permission management (e.g., membership validation, terms of service acceptance).
39+
- Enable permission management (for example, membership validation, terms of service acceptance).
4040
- **Key Features**:
4141
- Credentials are issued via [SimpulseID](https://identity.ascs.digital) and stored in W3C-compliant wallets like [Altme](https://altme.io).
42-
- Future support for contract-based credentials (e.g., purchase or download permissions).
42+
- Future support for contract-based credentials (for example, purchase or download permissions).
4343
- **Standards**:
4444
- Gaia-X Trust Framework.
4545
- W3C Verifiable Credentials and DIDs.
@@ -52,7 +52,7 @@ The ENVITED-X Data Space is built on the following core modules:
5252
- Enable real-time credential checks during system interactions.
5353
- **Functionality**:
5454
- Tracks the **uuid** of credentials to ensure privacy.
55-
- Manages credential statuses (e.g., active/inactive for revocation).
55+
- Manages credential statuses (for example, active/inactive for revocation).
5656
- **Use Cases**:
5757
- Credential validation during login.
5858
- Whitelisting users for minting and accessing assets.
@@ -99,11 +99,11 @@ The interaction between modules can be summarized as follows:
9999
1. **Credential Issuance**:
100100
- A user or organization requests a credential via SimpulseID following the process in EVES-008.
101101
- Credential metadata includes identity, permissions, and additional attributes.
102-
- Credential is stored in a wallet (e.g., Altme) and referenced by uuid in the registry contract.
102+
- Credential is stored in a wallet (for example, Altme) and referenced by uuid in the registry contract.
103103

104104
2. **Login and Validation**:
105105
- User logs in to ENVITED-X.
106-
- The system validates the credential (e.g., membership status) via the registry contract.
106+
- The system validates the credential (for example, membership status) via the registry contract.
107107

108108
3. **Asset Registration**:
109109
- User uploads simulation assets to ENVITED-X following the process in EVES-003.
@@ -142,7 +142,7 @@ Future EVES will provide detailed specifications for each module.
142142

143143
1. [SimpulseID](https://identity.ascs.digital)
144144
2. [Altme Wallet](https://altme.io)
145-
3. [Tezos FA2.1 Standard](https://gitlab.com/tzip/tzip/-/blob/master/proposals/tzip-21/tzip-21.md)
145+
3. [Tezos FA2.1 Standard](https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-21/tzip-21.md)
146146
4. [Etherlink Bridge](https://www.etherlinkbridge.com/bridge)
147147
5. [EVES-003: ENVITED Asset Definition and Upload Process](../EVES-003/eves-003.md)
148148
6. [Gaia-X Trust Framework](https://docs.gaia-x.eu/policy-rules-committee/compliance-document/24.11/)

EVES/EVES-003/eves-003.md

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ This EVES addresses the need for clear guidelines to onboard assets and synchron
3131

3232
The `envited-x:SimulationAsset` defines a digital asset within the domain of simulation including the core simulation data and all necessary files for describing, evaluating, and visualizing the dataset.
3333
All simulation assets MUST be derived from a common `envited-x` ontology defined in the [Gaia-X 4 PLC-AAD Ontology Management Base][1].
34-
A data space portal SHALL display the currently supported version of the ontologies like e.g.: `https://ontologies.envited-x.net/envited-x/v2/ontology#`.
34+
A data space portal SHALL display the currently supported version of the ontologies such as: `https://ontologies.envited-x.net/envited-x/v2/ontology#`.
3535
Each simulation asset SHALL be compliant with the [Gaia-X Ontology and SHACL shapes 2210][2].
3636
The `gx` turtle shacle shapes are derived from the [Gaia-X Trust Framework Schema][3] and the respective application/ld+json [Gaia-X Trust Framework Shapes][4].
3737
A [GaiaX Compliant Claims Example][5] MAY be generated using the [GaiaX 4 PLC-AAD Claim Compliance Provider][6].
@@ -54,15 +54,15 @@ Tooling such as the [ENVITED-X Simulation Asset Tools][20] MAY automate the crea
5454

5555
Every `asset.zip` MUST contain the following top-level folders mapped to `envited-x` artifact categories:
5656

57-
| Folder | `envited-x` Category | Required | `envited-x` Access Role | Description |
58-
| --------------------- | ------------------------------ | ----------- | ----------------------- | ----------------------------------------------- |
59-
| `simulation-data/` | `envited-x:isSimulationData` | MUST | `envited-x:isOwner` | Core simulation data (e.g., `.xodr`, `.xosc`) |
60-
| `documentation/` | `envited-x:isDocumentation` | MUST | `envited-x:isPublic` | Documentation files (e.g., `.pdf`, `.txt`) |
61-
| `metadata/` | `envited-x:isMetadata` | MUST | `envited-x:isPublic` | Domain metadata (e.g., `hdmap_instance.json`) |
62-
| `media/` | `envited-x:isMedia` | MUST | `envited-x:isPublic` | Visualizations, images, GeoJSON, 3D previews |
63-
| `validation-reports/` | `envited-x:isValidationReport` | RECOMMENDED | `envited-x:isPublic` | Quality checker reports (e.g., `.xqar`, `.txt`) |
64-
| _(root)_ | `envited-x:isLicense` | MUST | `envited-x:isPublic` | LICENSE file at the asset root |
65-
| _(root)_ | `envited-x:isManifest` | MUST | `envited-x:isPublic` | `manifest_reference.json` at the asset root |
57+
| Folder | `envited-x` Category | Required | `envited-x` Access Role | Description |
58+
| --------------------- | ------------------------------ | ----------- | ----------------------- | ------------------------------------------------------ |
59+
| `simulation-data/` | `envited-x:isSimulationData` | MUST | `envited-x:isOwner` | Core simulation data (for example, `.xodr`, `.xosc`) |
60+
| `documentation/` | `envited-x:isDocumentation` | MUST | `envited-x:isPublic` | Documentation files (for example, `.pdf`, `.txt`) |
61+
| `metadata/` | `envited-x:isMetadata` | MUST | `envited-x:isPublic` | Domain metadata (for example, `hdmap_instance.json`) |
62+
| `media/` | `envited-x:isMedia` | MUST | `envited-x:isPublic` | Visualizations, images, GeoJSON, 3D previews |
63+
| `validation-reports/` | `envited-x:isValidationReport` | RECOMMENDED | `envited-x:isPublic` | Quality checker reports (for example, `.xqar`, `.txt`) |
64+
| _(root)_ | `envited-x:isLicense` | MUST | `envited-x:isPublic` | LICENSE file at the asset root |
65+
| _(root)_ | `envited-x:isManifest` | MUST | `envited-x:isPublic` | `manifest_reference.json` at the asset root |
6666

6767
> **Note:** The `envited-x` categories and access roles are formally defined in the [ENVITED-X Ontology][21] which extends the generic [Manifest Ontology][22].
6868
> The `envited-x:ExtendedLinkShape` constrains the allowed values for both `manifest:hasCategory` and `manifest:hasAccessRole`.
@@ -146,12 +146,12 @@ IPFS is a peer-to-peer content delivery network built around the innovation of c
146146

147147
#### CID v1
148148

149-
Artifacts uploaded to IPFS e.g. using services like [Pinata][9] MUST use the content identifier version [CID v1][11].
149+
Artifacts uploaded to IPFS, for example using services like [Pinata][9] MUST use the content identifier version [CID v1][11].
150150
In Pinata this is achievable through the API using the `pinataOptions` parameter, as outlined in the [documentation][10].
151151

152152
#### File Naming
153153

154-
Uploaded file names MUST exclude extensions (e.g., use `file` instead of `file.json`) to avoid issues such as double extensions during downloads (e.g., `file.json.json`).
154+
Uploaded file names MUST exclude extensions (for example, use `file` instead of `file.json`) to avoid issues such as double extensions during downloads (for example, `file.json.json`).
155155

156156
### 3. Privacy Layer
157157

@@ -294,46 +294,47 @@ The compatibility with the current release of the [Gaia-X Policy Rules Complianc
294294

295295
## References
296296

297-
- [Gaia-X 4 PLC-AAD Ontology Management Base][1]
298-
- [Gaia-X Ontology and SHACL shapes 2210][2]
297+
- [ASCS Ontology Management Base][1]
298+
- [Gaia-X Ontology and SHACL shapes][2]
299299
- [Gaia-X Trust Framework Schema][3]
300300
- [Gaia-X Trust Framework Shapes][4]
301301
- [GaiaX Compliant Claims Example][5]
302-
- [GaiaX 4 PLC-AAD Claim Compliance Provider][6]
302+
- [GaiaX Claim Compliance Provider][6]
303303
- [ASCS HD-Map Asset Example][7]
304304
- [IPFS][8]
305-
- [Pinata Documentation][10]
305+
- [Pinata][9]
306+
- [Pinata API Documentation][10]
307+
- [CID v1 Content Addressing][11]
306308
- [ENVITED-X Data Space Portal][12]
307309
- [EIP-712][13]
310+
- [SPDX License List][15]
308311
- [RFC 2119: Key Words for Use in RFCs to Indicate Requirement Levels][16]
309312
- [Gaia-X Policy Rules Compliance Document (Release 24.11)][17]
310313
- [Marketplace Contract Reference Implementation][18]
311-
- [ENVITED-X Simulation Asset Tools][20]
312-
- [ENVITED-X Ontology][21]
313-
- [Manifest Ontology][22]
314+
- [TZIP-21 Ontology][19]
314315
- [ENVITED-X Simulation Asset Tools][20]
315316
- [ENVITED-X Ontology][21]
316317
- [Manifest Ontology][22]
317318

318319
[1]: https://github.com/ASCS-eV/ontology-management-base/
319-
[2]: https://github.com/GAIA-X4PLC-AAD/ontology-management-base/tree/main/gx
320+
[2]: https://github.com/ASCS-eV/ontology-management-base/tree/main/artifacts/gx
320321
[3]: https://registry.lab.gaia-x.eu/v1/api/trusted-schemas-registry/v2/schemas/gax-trust-framework
321322
[4]: https://registry.lab.gaia-x.eu/v1/api/trusted-shape-registry/v1/shapes/jsonld/trustframework#
322323
[5]: https://github.com/GAIA-X4PLC-AAD/gaia-x-compliant-claims-example
323324
[6]: https://github.com/GAIA-X4PLC-AAD/claim-compliance-provider
324325
[7]: https://github.com/ASCS-eV/hd-map-asset-example/releases/tag/v0.2.3
325326
[8]: https://ipfs.tech/
326327
[9]: https://pinata.cloud/
327-
[10]: https://docs.pinata.cloud/web3/pinning/pinata-metadata#pinataoptions
328+
[10]: https://docs.pinata.cloud/api-reference/endpoint/ipfs/pin-file-to-ipfs
328329
[11]: https://docs.ipfs.tech/concepts/content-addressing/#version-1-v1
329330
[12]: https://envited-x.net/
330331
[13]: https://eips.ethereum.org/EIPS/eip-712
331332
[14]: https://json-schema.org/understanding-json-schema/reference/string#dates-and-times
332-
[15]: https://softwareengineering.stackexchange.com/a/450839/443441
333+
[15]: https://spdx.org/licenses/
333334
[16]: https://datatracker.ietf.org/doc/html/rfc2119
334335
[17]: https://docs.gaia-x.eu/policy-rules-committee/compliance-document/24.11/
335336
[18]: https://github.com/ASCS-eV/smart-contracts/tree/main/contracts/marketplace/
336-
[19]: https://github.com/GAIA-X4PLC-AAD/ontology-management-base/tree/main/tzip21
337+
[19]: https://github.com/ASCS-eV/ontology-management-base/tree/main/artifacts/tzip21
337338
[20]: https://github.com/openMSL/sl-5-8-asset-tools
338339
[21]: https://github.com/ASCS-eV/ontology-management-base/tree/main/artifacts/envited-x
339340
[22]: https://github.com/ASCS-eV/ontology-management-base/tree/main/artifacts/manifest

0 commit comments

Comments
 (0)