Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
70d8758
feat(delegation): add delegated signing evidence spec and implementation
jdsika Feb 24, 2026
fa44078
feat(delegation): align evidence model with OID4VP and add TypeScript…
jdsika Feb 25, 2026
f2df582
feat(harbour): align delegated signing and did:webs credential modeling
jdsika Feb 25, 2026
3e3622e
feat(harbour): refactor credential issuance model — Signing Service a…
jdsika Feb 26, 2026
69fc1b6
fix(ci): add TypeScript build step to interop job
jdsika Feb 26, 2026
072ea23
refactor(examples): separate harbour skeletons from Gaia-X domain ext…
jdsika Feb 26, 2026
8bb6bd3
refactor(linkml): merge core.yaml into harbour.yaml
jdsika Feb 26, 2026
64a99c5
chore(ci): use Makefile targets in CI workflows and ASCII-only Makefile
jdsika Feb 26, 2026
b207f51
fix(ci): add yarn install to TS Makefile targets
jdsika Feb 26, 2026
e72f10a
fix(makefile): use abspath for PYTHON in validate-shacl target
flhps Feb 26, 2026
5a8a2b3
docs(readme): consolidate testing section and fix commands
flhps Feb 26, 2026
908ae21
refactor(linkml): rename schema files to harbour-core-credential and …
jdsika Mar 2, 2026
ce73098
fix(makefile): resolve PYTHON path correctly in CI for validate-shacl
jdsika Mar 2, 2026
89c475e
fix(examples): add BMW natural person credentials for Andreas and Max
jdsika Mar 6, 2026
c385b02
refactor(linkml): eliminate SHACL ghost properties and fix issuer nod…
jdsika Mar 6, 2026
a08d3c2
fix(shacl): add linkml issue refs and strip sh:class linkml:Any const…
jdsika Mar 9, 2026
88d0002
feat: migrate DID method from did:web to did:ethr
jdsika Mar 9, 2026
fbb3fb7
refactor(linkml): SHACL ghost properties, model audit, and markdownli…
jdsika Mar 10, 2026
8d71132
docs: add credential data model documentation and expand architecture
jdsika Mar 10, 2026
40056f5
fix(linkml): add did: prefix to resolve namespace warnings
jdsika Mar 10, 2026
012742d
refactor: use context-mapped short names in examples and mappings
jdsika Mar 10, 2026
540e70a
refactor: consolidate examples and make skeletons minimal
jdsika Mar 10, 2026
3e61f49
refactor(schemas): namespace refactoring, example reorganization, tes…
jdsika Mar 11, 2026
0038732
chore: replace black/isort/flake8 with ruff
jdsika Mar 11, 2026
36c0d39
fix(generator): add OWL equivalence patches for class_uri bridging
jdsika Mar 11, 2026
dd5c652
fix(ci): update OMB submodule to HTTPS URLs
jdsika Mar 11, 2026
f0cae06
docs: add DID identity system overview
flhps Mar 12, 2026
ec61c96
fix(did): align Harbour Base resolver modeling
jdsika Mar 12, 2026
59094b3
feat(workflow): group story and validation commands
jdsika Mar 12, 2026
d343dda
fix(ci): use grouped make commands
jdsika Mar 12, 2026
843f1ea
feat(linkml): Gaia-X compliance model, delegation schema, spec refere…
jdsika Mar 13, 2026
705daf0
feat(signing): multi-key trust chain with derived did:ethr addresses
jdsika Mar 16, 2026
5308bd9
test(shacl): add validation failure test suite
jdsika Mar 16, 2026
7645fb6
docs(guide): add credential lifecycle with swimlane diagrams
jdsika Mar 16, 2026
a568379
docs: promote credential lifecycle guide on home page
jdsika Mar 16, 2026
42e6dd1
chore: update yarn version and OMB pin to main
jdsika Mar 17, 2026
d51b76c
chore: update OMB pin to main (linkml fork + deterministic output)
jdsika Mar 18, 2026
a123e3e
feat(release): add w3id artifact publishing to release workflow
jdsika Mar 20, 2026
42fbe17
chore: update OMB pin to include covering axiom bugfix
jdsika Mar 20, 2026
943917a
chore: update OMB pin with HTTPS schema.org GX artifacts
jdsika Mar 21, 2026
b95af9f
fix(examples): use https://schema.org/ in GX example contexts
jdsika Mar 21, 2026
2b8b732
feat: add deterministic flag and xsd-anyuri-as-iri to harbour generators
jdsika Mar 26, 2026
5573d6e
fix: update docs, deps, and regenerate with normalize-prefixes
jdsika Mar 26, 2026
62f74b8
chore: bump ontology-management-base submodule
jdsika Mar 27, 2026
debd9e9
fix(tests): update assertions for bare term prefix simplification
jdsika Mar 27, 2026
52b9e3c
style: apply ruff formatting fixes
jdsika Mar 27, 2026
63c0e6d
chore: update OMB submodule pin
jdsika Mar 27, 2026
b53d7d8
fix(linkml): drop class_uri overrides for HarbourVerifiable* types
jdsika Mar 27, 2026
6ed417b
fix(examples): add HarbourVerifiableCredential type to inner evidence…
jdsika Mar 27, 2026
094a655
fix(examples): rework nested evidence example to show actual 2-level …
jdsika Mar 27, 2026
b149859
fix(examples): add HarbourVerifiableCredential to all harbour-issued VCs
jdsika Mar 27, 2026
a688619
chore: pin OMB with OWL xsd-anyuri-as-iri consistency fix
jdsika Mar 28, 2026
a424678
chore: update OMB pin (hybrid deterministic serializer)
jdsika Mar 28, 2026
2f06384
chore: update OMB submodule pin (rebased linkml)
jdsika Mar 30, 2026
75d9fdb
chore: update OMB submodule pin (openlabel-v2 artifacts)
jdsika Mar 30, 2026
eff7eb3
fix(make): install linkml from fork submodule instead of PyPI
jdsika Mar 30, 2026
ed3e4cf
fix(deps): add rdflib to dev dependencies for SHACL tests
jdsika Mar 30, 2026
2c7acc6
fix(examples): remove _comment keys that violate closed SHACL shapes
jdsika Mar 30, 2026
908c225
refactor(owlgen): use use_native_uris=False, remove equivalence patch
jdsika Mar 30, 2026
f4ac3f5
refactor(linkml): standardize type IRIs with prefixed CURIEs
jdsika Mar 31, 2026
9f355d3
refactor(examples): remove redundant parent types from evidence and c…
jdsika Mar 31, 2026
0ff4763
fix(linkml): replace range: Any with spec-aligned types
jdsika Apr 1, 2026
7a7e41e
fix(tests): use temp files for cross-runtime interop on Windows
jdsika Apr 1, 2026
b542ef4
chore: bump OMB submodule with normalize-prefixes fix
jdsika Apr 1, 2026
63d45c4
chore: bump OMB submodule (deterministic pipeline + prefix fixes)
jdsika Apr 1, 2026
99716f1
chore: bump OMB submodule (sorted boolean expressions + review fixes)
jdsika Apr 2, 2026
be5c4e9
chore: bump OMB submodule (rebuilt combined branch)
jdsika Apr 2, 2026
72c1eab
chore: pin OMB to linkml develop branch
jdsika Apr 2, 2026
132b8bd
fix: align test targets, add lint hooks, and add check target
jdsika Apr 2, 2026
21c1b7e
ci: add OS and Python version matrix to all non-lint jobs
jdsika Apr 2, 2026
c836fdb
ci: add credential lifecycle story job
jdsika Apr 2, 2026
2f387f8
fix: set PYTHONIOENCODING=utf-8 for story targets on Windows
jdsika Apr 2, 2026
8260d13
fix(linkml): add missing W3C DID Core properties to DIDDocument
jdsika Apr 3, 2026
37e0b2a
chore: pin OMB to v0.1.6
jdsika Apr 4, 2026
2833cb2
chore: sync w3id.org fork with upstream master
jdsika Apr 4, 2026
c569ec8
fix: use @type instead of type in serviceEndpoint objects
jdsika Apr 4, 2026
de4c3cc
chore: pin w3id.org to upstream master with merged redirects
jdsika Apr 4, 2026
9943c17
feat: add revocation warning and transaction freshness to VP verifica…
jdsika Apr 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions .flake8

This file was deleted.

34 changes: 20 additions & 14 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,38 @@ This repository contains cryptographic libraries for signing and verifying verif
```bash
# Install dev dependencies
make setup
make install-dev
make install dev

# Run all tests (Python + TypeScript)
make test-all
make test full

# Run Python tests only
make test

# Run TypeScript tests only
make test-ts
make test ts

# Build TypeScript
make build-ts
make build

# Lint and format
make lint
make format

# Run with coverage
make test-cov
make test cov
```

## Instruction Files

Read these BEFORE making changes:

| Topic | File |
| ------------------ | ---------------------- |
| Agent instructions | [../AGENTS.md](../AGENTS.md) |
| Claude guidance | [../CLAUDE.md](../CLAUDE.md) |
| Documentation | [../README.md](../README.md) |
| Topic | File |
| ------------------ | ----------------------------------------- |
| Agent instructions | [AGENTS.md](../AGENTS.md) |
| Claude guidance | [CLAUDE.md](../CLAUDE.md) |
| Documentation | [README.md](../README.md) |
| Architecture | [architecture.md](../docs/architecture.md)|

## Core Principles

Expand All @@ -47,7 +48,7 @@ Read these BEFORE making changes:

## Project Structure

```
```text
src/
├── python/
│ ├── harbour/ # Crypto library (keys, sign, verify, sd-jwt, kb-jwt, x509)
Expand Down Expand Up @@ -102,15 +103,20 @@ git commit -s -S -m "feat(harbour): add KB-JWT support"

## Preparing Commits and Pull Requests

When instructed to prepare a commit or PR, **do not commit directly**. Instead:
When instructed to prepare a commit or PR, default to preparing the `.playground`
files first. After **explicit human confirmation in the current session**, the
agent may directly create the signed commit, push the branch, and open the PR
using the prepared `.playground` content. Otherwise:

1. Create files in the `.playground/` directory (already in `.gitignore`)
2. Generate two markdown files:
- `.playground/commit-message.md` — Conventional commit message(s)
- `.playground/pr-description.md` — PR description

The human operator will review these files and either:
- Use them to manually commit/push and create a PR, or

- Use them to manually commit/push and create a PR,
- Ask the agent to perform the signed commit/push/PR flow directly after explicit confirmation, or
- Use automated tooling with signed commits (`git commit -s -S`)

## Common Mistakes to Avoid
Expand All @@ -119,4 +125,4 @@ The human operator will review these files and either:
- ❌ **Don't forget CLI** — All Python modules need `main()` with `--help`
- ❌ **Don't break parity** — Keep Python and TypeScript APIs consistent
- ❌ **Don't commit without signing** — Always use `-s -S`
- ❌ **Don't skip tests** — Run `make test-all` before committing
- ❌ **Don't skip tests** — Run `make test full` before committing
74 changes: 67 additions & 7 deletions .github/workflows/cd-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@ on:
push:
tags:
- 'v*.*.*'
- 'v*.*.*-rc.*'

workflow_dispatch:
inputs:
tag:
description: 'Release tag (e.g., v0.1.0)'
description: 'Release tag (e.g., v1.0.0 or v1.0.0-rc.1)'
required: true
type: string

Expand Down Expand Up @@ -64,17 +65,76 @@ jobs:
name: Release ${{ steps.tag.outputs.tag }}
body: ${{ steps.changelog.outputs.content }}
draft: false
prerelease: false
prerelease: ${{ contains(steps.tag.outputs.tag, '-rc.') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

docs:
name: 📚 Publish Documentation
publish:
name: 📦 Publish Artifacts & Docs
needs: release
uses: ./.github/workflows/cd-docs.yml
with:
ref: main
runs-on: ubuntu-latest
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: 'pip'

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22"

- name: Enable Corepack
run: corepack enable

- name: Install Python dependencies
run: python3 -m pip install -e ".[dev,docs]"

- name: Install TypeScript dependencies
working-directory: src/typescript/harbour
run: yarn install --immutable

- name: Generate artifacts
run: make generate

- name: Validate artifacts
run: make validate shacl

- name: Generate TypeScript API docs
working-directory: src/typescript/harbour
run: npx typedoc --out ../../../docs/api/typescript index.ts --skipErrorChecking

- name: Setup Pages
uses: actions/configure-pages@v4

- name: Build MkDocs site
run: mkdocs build --strict --site-dir site

- name: Prepare w3id artifacts
run: make release-artifacts

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./site

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
125 changes: 81 additions & 44 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ jobs:
cache: 'pip'

- name: Install dependencies
run: python3 -m pip install -e ".[dev]"
run: make install dev

- name: Run pre-commit
run: pre-commit run --all-files
run: make lint

lint-ts:
name: Lint (TypeScript)
lint-markdown:
name: Lint (Markdown)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -39,20 +39,29 @@ jobs:
with:
node-version: "22"

- name: Enable Corepack
run: corepack enable
- name: Lint Markdown
run: npx --yes markdownlint-cli2

- name: Install dependencies
working-directory: src/typescript/harbour
run: yarn install --immutable
lint-ts:
name: Lint (TypeScript)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Type check
working-directory: src/typescript/harbour
run: yarn lint
- uses: actions/setup-node@v4
with:
node-version: "22"

- name: Lint TypeScript
run: make lint ts

generate-validate:
name: Generate & Validate
runs-on: ubuntu-latest
name: Generate & Validate (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -63,10 +72,10 @@ jobs:
python-version: "3.12"
cache: 'pip'

- name: Install dependencies
- name: Install dependencies and submodules
run: |
python3 -m pip install -e ".[dev]" linkml
python3 -m pip install -e "./submodules/ontology-management-base"
make install dev
make setup submodules

- name: Generate artifacts
run: make generate
Expand All @@ -75,49 +84,54 @@ jobs:
run: make validate

- name: Validate examples (SHACL conformance)
run: make validate-shacl
run: make validate shacl

test-python:
name: Test (Python)
runs-on: ubuntu-latest
name: Test (Python) (${{ matrix.os }}, py${{ matrix.python-version }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.12", "3.13"]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"
python-version: ${{ matrix.python-version }}
cache: 'pip'

- name: Install dependencies
run: python3 -m pip install -e ".[dev]"
run: make install dev

- name: Run tests
run: PYTHONPATH=src/python:$PYTHONPATH pytest tests/ -v --tb=short --cov
run: make test

test-ts:
name: Test (TypeScript)
runs-on: ubuntu-latest
name: Test (TypeScript) (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: "22"

- name: Enable Corepack
run: corepack enable

- name: Install dependencies
working-directory: src/typescript/harbour
run: yarn install --immutable

- name: Run tests
working-directory: src/typescript/harbour
run: yarn test
run: make test ts

test-interop:
name: Cross-Runtime Interop
runs-on: ubuntu-latest
name: Cross-Runtime Interop (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
needs: [test-python, test-ts]
steps:
- uses: actions/checkout@v4
Expand All @@ -131,15 +145,38 @@ jobs:
with:
node-version: "22"

- name: Enable Corepack
run: corepack enable

- name: Install Python dependencies
run: python3 -m pip install -e ".[dev]"
run: make install dev

- name: Install TypeScript dependencies
working-directory: src/typescript/harbour
run: yarn install --immutable
- name: Build TypeScript
run: make build ts

- name: Run interop tests
run: PYTHONPATH=src/python:$PYTHONPATH pytest tests/interop/test_cross_runtime.py -v --tb=short
run: make test interop

# --- Credential Lifecycle Story ---
story:
name: Credential Story (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
needs: [generate-validate]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: 'pip'

- name: Install dependencies and submodules
run: |
make install dev
make setup submodules

- name: Run credential storyline (generate → sign → verify → SHACL validate)
run: make story
Loading
Loading