An OpenClaw-compatible, REST-only prototype that evaluates an IBM Data Product Hub draft before marketplace publication. It collects IBM metadata, ODCS contract evidence, assets, business terms and classifications; applies a controlled readiness taxonomy; produces an evidence-backed report; previews a GitHub issue; and creates that issue only after explicit human approval.
Version 1.0 cannot modify or publish IBM resources. It can generate a non-executable proposed remediation file for owner review.
Data-product publication is often treated as a metadata-completion exercise. A product can have a name, an owner and an asset yet remain difficult to understand or unsafe to reuse. This prototype acts like a pre-publication investigation skill:
- retrieve the draft and its governed context;
- assess fitness for a stated consumer and task;
- distinguish observed evidence from missing evidence;
- route findings to the appropriate owner role;
- record the result in GitHub after approval.
flowchart TD
A[OpenClaw skill] --> B[Python CLI]
B --> C[IBM IAM]
B --> D[Data Product Hub REST]
D --> E[Draft and ODCS contract]
D --> F[Assets and IBM glossary]
E --> G[Controlled readiness assessment]
F --> G
G --> H[Evidence and report]
H --> I[Issue preview]
I -->|APPROVE ISSUE| J[GitHub issue]
H --> K[Non-executable patch proposal]
| Capability | Included |
|---|---|
| IBM Cloud IAM authentication | Yes |
| Search Data Product Hub drafts | Yes |
| Retrieve one draft and ODCS v3 contract | Yes |
| Retrieve asset metadata | Yes |
| Retrieve IBM business terms and classifications | Yes |
| List glossary evidence in every GitHub issue | Yes |
| Controlled readiness taxonomy | Yes |
| Markdown and JSON reports | Yes |
| Approval-gated GitHub issue | Yes |
| Proposed draft remediation | Local proposal only |
| Modify or publish an IBM draft | No |
| Third-party glossary integration | No |
| MCP server | No |
- Python 3.11 or later
- an IBM watsonx.data intelligence SaaS account with Data Product Hub access
- an IBM Cloud IAM API key
- OpenClaw for the agent workflow
- GitHub CLI (
gh) authenticated for issue creation
The key is created in IBM Cloud IAM, not inside the Data Product Hub page.
- Sign in to watsonx.data intelligence with your IBMid.
- Open IBM Cloud API keys with the same IBMid.
- Select Create an IBM Cloud API key.
- Name it
openclaw-wdi-readiness-v1. - Copy or download the value immediately; IBM displays it only at creation time.
For a local prototype, a personal key uses your existing access. For persistent or shared deployment, prefer a dedicated Service ID with minimum required access.
git clone https://github.com/gprzybycien/data-product-publish-readiness.git
cd data-product-publish-readiness
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"export WDI_BASE_URL="https://api.dataplatform.cloud.ibm.com"
export WDI_API_KEY="your-ibm-cloud-iam-api-key"
export GITHUB_REPO="gprzybycien/data-product-publish-readiness"Do not commit these values. If OpenClaw is started from Hatch in Terminal, export them in that same terminal before starting OpenClaw.
dpp-readiness auth-test
dpp-readiness catalog-id
dpp-readiness search-drafts --query "*"auth-test never prints the bearer token. catalog-id verifies access to the default Data Product Hub catalog. The search command returns only draft name, version ID and state.
From the repository root:
openclaw skills install ./skills/data-product-publish-readiness --as data-product-publish-readiness
openclaw skills listOpenClaw workspace skills are normally installed under ~/.openclaw/workspace/skills. Start a new chat if an existing session does not refresh its available-skills snapshot.
dpp-readiness run \
--name "Daily Order Fulfilment Performance" \
--consumer "Regional operations manager" \
--task "Identify orders likely to miss their fulfilment SLA" \
--criticality "Operational decision support; daily use" \
--output-base artifactsThe command creates a timestamped directory:
artifacts/<timestamp>-<product>/
├── evidence.json
├── readiness-report.json
├── readiness-report.md
├── github-issue-preview.md
└── proposed-draft-update.json
proposed-draft-update.json contains placeholders and owner roles. It is intentionally not an IBM API payload.
Example prompt:
Use data-product-publish-readiness.
Assess the draft "Daily Order Fulfilment Performance" for a regional
operations manager who needs to identify orders likely to miss SLA.
Criticality: operational decision support, used daily.
Mode: ASSESS_ONLY.
Do not modify IBM resources or GitHub.
Then ask:
Preview a GitHub issue for the findings in
gprzybycien/data-product-publish-readiness.
Inspect the complete preview. Only then respond with the exact phrase:
APPROVE ISSUE
OpenClaw will invoke the approval-gated command. The CLI independently regenerates the expected issue body from the JSON report and refuses creation if the supplied preview differs.
The packaged taxonomy is in src/dpp_readiness/readiness_taxonomy.json.
Every generated report and GitHub issue includes a Business Glossary checks section. For each product asset it lists the assigned business terms and classifications, their artifact IDs, and whether each assignment resolved uniquely through IBM Global Search. This proves assignment and canonical resolvability; it does not assert that a term is approved, correct for the intended use, or sufficient for enterprise policy.
It initially evaluates:
- purpose;
- accountable ownership;
- business-term assignment;
- ambiguous governance artifacts;
- classifications;
- ODCS contract presence;
- quality commitments;
- delivery configuration;
- consumer usage guidance.
Decisions are:
READYREADY_WITH_CONDITIONSBLOCKEDINSUFFICIENT_EVIDENCE
The rules are transparent heuristics for this prototype, not IBM product policy. Avoid converting the findings into a single opaque score.
The implementation follows current IBM REST patterns:
| Evidence | Operation |
|---|---|
| IAM token | POST https://iam.cloud.ibm.com/identity/token |
| Default Data Product Hub catalog | GET /v2/catalogs/ibm-default-hub |
| Draft search | POST /v3/search with draft and catalog filters |
| Draft | GET /data_product_exchange/v1/data_products/-/drafts/{version}@{catalog} |
| ODCS contract | GET .../contract_terms/{id}/format?format=odcs&format_version=3 |
| Asset | GET /v2/assets/{asset}?catalog_id={catalog} |
| Attached IBM semantics | read-only POST /v3/search |
IBM references:
The IBM repository is referenced as executable documentation of REST calls; this project does not install or use its MCP server.
The REST adapter rejects IBM operations other than:
GET; andPOST /v3/search, which is used for read-only Global Search.
SaaS mode also rejects a configured API base host outside the
dataplatform.cloud.ibm.com domain and validates identifiers before placing
them into REST paths.
The client cannot call IBM PUT, PATCH or DELETE. It does not expose draft publication, glossary creation, workflow actions or contract modification.
GitHub issue creation is a separate capability with three controls:
- a saved issue preview;
- the exact approval phrase
APPROVE ISSUE; - a body-integrity comparison against the JSON report.
See SECURITY.md for operational guidance.
The repository includes synthetic evidence fixtures.
pytest -q
ruff check .The tests verify that:
- IBM write methods are blocked before any network request;
- draft search includes state and catalog filters;
- seeded readiness gaps are detected;
- patch proposals are non-executable;
- GitHub creation requires exact approval;
ghis called without a shell.
No authentic enterprise data or credentials are included.
See the synthetic sample GitHub issue and sample remediation proposal.
- IBM SaaS response shapes can change; test against a non-production draft first.
- Contract-test execution results are not retrieved in v1.0.
- Semantic conflict detection is limited to ambiguous artifact resolution; it does not use an LLM to judge competing definitions.
- DQ evidence is assessed from contract structure, not source data or runtime quality results.
- Delivery-method detection is structural and might require adjustment for tenant-specific response fields.
- The tool recommends remediation destinations but does not assign named people.
Draft updating should be added only after confirming the exact supported write endpoint and payload in the target SaaS tenant. A write-capable version should use a separate module and require:
- a field allowlist;
- an immutable pre-change snapshot;
last_updatedor ETag concurrency protection;- a field-level diff;
- approval bound to the draft version ID;
- one bounded update;
- read-back verification;
- no automatic publication.
Until those conditions are implemented and tested, keep proposed-draft-update.json as an owner-review artifact.
After reviewing the files locally:
git init -b main
git add .
git commit -m "Initial data-product publish-readiness prototype"
gh repo create gprzybycien/data-product-publish-readiness \
--public \
--source=. \
--remote=origin \
--pushThe final command creates an external public repository. Run it only after confirming that no tenant evidence, API keys or local artifacts are staged.