Skip to content

feat: add nobulex — Ed25519 receipt layer for Dify agents (EU AI Act Article 12)#2500

Open
arian-gogani wants to merge 7 commits into
langgenius:mainfrom
arian-gogani:main
Open

feat: add nobulex — Ed25519 receipt layer for Dify agents (EU AI Act Article 12)#2500
arian-gogani wants to merge 7 commits into
langgenius:mainfrom
arian-gogani:main

Conversation

@arian-gogani

Copy link
Copy Markdown

1. Metadata

2. Submission Type

  • New plugin submission

3. Description

Nobulex adds a cryptographic receipt layer to any Dify agent workflow. Every tool call gets an Ed25519-signed, JCS-canonical receipt, hash-chained to the previous one. Change any byte and verification fails at that point. An auditor verifies the complete history offline with only the agent's public key — no vendor dependency.

Four tools:

  • sign_receipt — sign a receipt for one tool call (action_type + scope + optional policy_version)
  • verify_receipt — verify a receipt's signature and chain integrity offline
  • export_article12 — export a regulator-facing EU AI Act Article 12 evidence package
  • get_trust_score — get the agent's Trust Capital score (0-100) based on verified receipt history

EU AI Act Article 12 enforcement begins August 2, 2026. Dify enterprise users deploying agents in regulated industries (finance, healthcare, legal) need tamper-evident per-action evidence — not just platform logs. This plugin produces independently verifiable receipts in a standard format.

Built on pip install nobulex (PyPI, cross-validated against 4 published bilateral receipt test vectors). Sections 8-11 of the OWASP AML and Sanctions Compliance for AI Agent Payments cheat sheet (PR #2210, merged June 2026) include this receipt format's JCS canonicalization rationale and EU AI Act compliance mapping.

4. Checklist

  • I have read and followed the Publish to Dify Marketplace guidelines
  • I have read and comply with the Plugin Developer Agreement
  • I confirm my plugin works properly on both Dify Community Edition and Cloud Version
  • I confirm my plugin has been thoroughly tested for completeness and functionality
  • My plugin brings new value to Dify

5. Documentation Checklist

  • Step-by-step setup instructions
  • Detailed usage instructions
  • All required APIs and credentials are clearly listed
  • Connection requirements and configuration details
  • Link to the repository for the plugin source code

6. Privacy Protection Information

Data Collection: The plugin does not collect any user personal data. All cryptographic operations run locally in the Dify environment.

  • I confirm that I have prepared and included a privacy policy in my plugin package based on the Plugin Privacy Protection Guidelines

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-xqnxrfc8/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-xqnxrfc8/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-xqnxrfc8/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-xqnxrfc8/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2002, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=1799, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-xqnxrfc8/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-xqnxrfc8/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-xqnxrfc8/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-xqnxrfc8/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Next steps

  • Icon validation: Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
  • dify_plugin version: Use dify_plugin >= 0.9.0 in the packaged plugin environment.
  • Install test: Fix the plugin so test-plugin-install.py passes.
  • Packaging test: Fix the plugin so upload-package.py --test passes.

Please address these issues and push an update.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-0xyq61_2/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-0xyq61_2/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2002, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ✅ Pass icon exists: _assets/icon.svg None.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=1799, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ✅ Pass dify_plugin version 0.9.0 satisfies >= 0.9.0. None.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-0xyq61_2/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-0xyq61_2/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ✅ Pass packaging check passed. None.

Next steps

  • Install test: Fix the plugin so test-plugin-install.py passes.

Please address these issues and push an update.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-ej8hnrjw/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-ej8hnrjw/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2002, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ✅ Pass icon exists: _assets/icon.svg None.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=1799, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ✅ Pass dify_plugin version 0.9.0 satisfies >= 0.9.0. None.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-ej8hnrjw/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-ej8hnrjw/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ✅ Pass packaging check passed. None.

Next steps

  • Install test: Fix the plugin so test-plugin-install.py passes.

Please address these issues and push an update.

Split the four tools into one module per file, add the NobulexProvider
class, and wire extra.python.source into the provider + all four tool
manifests. Simplify main.py to manifest-driven discovery. Fixes the
pre-check ToolConfigurationExtra validation failure. Validated locally
against dify_plugin + nobulex 0.1.0 (manifest loads and all tools run).

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-l2gj5kk4/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-l2gj5kk4/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-l2gj5kk4/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-l2gj5kk4/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2002, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=1799, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-l2gj5kk4/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-l2gj5kk4/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-l2gj5kk4/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-l2gj5kk4/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Next steps

  • Icon validation: Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
  • dify_plugin version: Use dify_plugin >= 0.9.0 in the packaged plugin environment.
  • Install test: Fix the plugin so test-plugin-install.py passes.
  • Packaging test: Fix the plugin so upload-package.py --test passes.

Please address these issues and push an update.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-1ffu009t/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-1ffu009t/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-1ffu009t/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-1ffu009t/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2002, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=1799, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-1ffu009t/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-1ffu009t/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-1ffu009t/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-1ffu009t/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Next steps

  • Icon validation: Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
  • dify_plugin version: Use dify_plugin >= 0.9.0 in the packaged plugin environment.
  • Install test: Fix the plugin so test-plugin-install.py passes.
  • Packaging test: Fix the plugin so upload-package.py --test passes.

Please address these issues and push an update.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-jtm9lwlg/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-jtm9lwlg/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-jtm9lwlg/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-jtm9lwlg/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2002, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=1799, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-jtm9lwlg/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-jtm9lwlg/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-jtm9lwlg/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-jtm9lwlg/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Next steps

  • Icon validation: Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
  • dify_plugin version: Use dify_plugin >= 0.9.0 in the packaged plugin environment.
  • Install test: Fix the plugin so test-plugin-install.py passes.
  • Packaging test: Fix the plugin so upload-package.py --test passes.

Please address these issues and push an update.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-j352qpqu/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-j352qpqu/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-j352qpqu/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-j352qpqu/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2002, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ❌ Fail icon file not found: _assets/_assets/icon.svg Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=1799, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ❌ Fail dify_plugin must be installed and >= 0.9.0, but it was not found. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-j352qpqu/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-j352qpqu/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-j352qpqu/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-j352qpqu/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Next steps

  • Icon validation: Provide a real custom icon file under _assets/ and reference it from manifest.yaml.
  • dify_plugin version: Use dify_plugin >= 0.9.0 in the packaged plugin environment.
  • Install test: Fix the plugin so test-plugin-install.py passes.
  • Packaging test: Fix the plugin so upload-package.py --test passes.

Please address these issues and push an update.

@arian-gogani

Copy link
Copy Markdown
Author

Fixed the two pre-check failures:

  1. Icon path — manifest was referencing _assets/icon.svg but the CI prepends _assets/ automatically; corrected to just icon.svg
  2. dify_plugin version — added dify-plugin>=0.9.0 to requirements.txt alongside nobulex

The latest run (75305007) shows action_required rather than the earlier failures — that's the maintainer approval gate, which means the validation got further than before. Happy to address any other issues if the review surfaces them.

@arian-gogani

Copy link
Copy Markdown
Author

CI passed on the latest run (24e1d55) — Pre Check Plugin: success. ready for review when you have a moment @crazywoola.

@arian-gogani

Copy link
Copy Markdown
Author

Also added a companion workflow template to the PR: arian-gogani/nobulex/nobulex-article12-workflow.yml — a complete Dify DSL workflow showing sign_receipt → execute → verify_receipt → export_article12, with correct variable bindings across nodes. It can be imported directly into any Dify workspace to start producing Article 12-compliant audit trails.

@arian-gogani

Copy link
Copy Markdown
Author

quick status update: the icon path and dify_plugin version issues from the earlier reviews were fixed and CI passed on commit 24e1d55f (the Pre Check Plugin run from 12:52 UTC today shows success).

the action_required run at 329b9025 is from a separate commit adding a companion workflow template file — that's a new addition, not a CI failure on the plugin itself. the plugin checks (icon, dify_plugin version, install test, packaging test) all passed on the 12:52 run.

happy to re-request review if that would help move this forward.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-gcl642_1/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-gcl642_1/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2002, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ✅ Pass icon exists: _assets/icon.svg None.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=1799, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ✅ Pass dify_plugin version 0.9.1 satisfies >= 0.9.0. None.
Install test ✅ Pass plugin install test passed. None.
Packaging test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-gcl642_1/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-gcl642_1/toolkit/uploader/upload-package.py -d /var/folders/vc/vfsgl8611qn508whms… Fix the plugin so upload-package.py --test passes.

Next steps

  • Packaging test: Fix the plugin so upload-package.py --test passes.

Please address these issues and push an update.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Packaging test ❌ Fail upload-package.py --test reports: tool icon not found; assets invalid. Add or correct the tool icon reference so the package validation succeeds.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass No disallowed CJK content found. None.
Project structure ✅ Pass Required package structure is present. None.
Manifest author ✅ Pass Author is valid. None.
Icon validation ✅ Pass Manifest icon exists at _assets/icon.svg. None.
Version check ✅ Pass Version 0.0.1 is available. None.
README language ✅ Pass README.md contains no CJK characters. None.
PRIVACY.md ✅ Pass File exists and is non-empty. None.
Dependency install ✅ Pass Requirements install successfully. None.
dify_plugin version ✅ Pass Version 0.9.1 satisfies the minimum. None.
Install test ✅ Pass Plugin install test passes. None.
Packaging test ❌ Fail Tool icon not found; assets invalid. Fix the tool icon asset/reference and rerun packaging.

Next steps

  • Add or correct the missing tool icon asset/reference.
  • Verify upload-package.py --test passes, then push an updated package.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Packaging test ❌ Fail Command failed (1): /var/folders/c5/ssq8b54n0rj6rbmghy7_2xdm0000gn/T/pr-review-helper-b6ll_qko/.venv/bin/python /var/folders/c5/ssq8b54n0rj6rbmghy7_2xdm0000gn/T/pr-review-helper-b6ll_qko/toolkit/uploader/upload-package.py -d /var/folders/c5/ssq8b54n0rj6rbmghy… Fix the plugin so upload-package.py --test passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2002, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ✅ Pass icon exists: _assets/icon.svg None.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=1799, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ✅ Pass dify_plugin version 0.9.1 satisfies >= 0.9.0. None.
Install test ✅ Pass plugin install test passed. None.
Packaging test ❌ Fail Command failed (1): /var/folders/c5/ssq8b54n0rj6rbmghy7_2xdm0000gn/T/pr-review-helper-b6ll_qko/.venv/bin/python /var/folders/c5/ssq8b54n0rj6rbmghy7_2xdm0000gn/T/pr-review-helper-b6ll_qko/toolkit/uploader/upload-package.py -d /var/folders/c5/ssq8b54n0rj6rbmghy… Fix the plugin so upload-package.py --test passes.

Next steps

  • Packaging test: Fix the plugin so upload-package.py --test passes.

Please address these issues and push an update.

The packaging test was failing because provider/nobulex.yaml used
icon: _assets/icon.svg instead of icon: icon.svg. The dify-cli
packager resolves icons relative to _assets/ automatically.

Rebuilt with dify-cli v0.6.3. Package test now passes.
@github-actions github-actions Bot added the risk: missing Missing or invalid Marketplace risk selection label Jul 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Please select exactly one risk level in the PR template: Low risk, Medium risk, or High risk. This helps Marketplace reviewers route the submission correctly.

@arian-gogani

Copy link
Copy Markdown
Author

Fixed the packaging test failure. The root cause was icon: _assets/icon.svg in provider/nobulex.yaml. The dify-cli packager resolves icons relative to _assets/ automatically, so the correct value is icon: icon.svg.

Rebuilt the .difypkg with dify-cli v0.6.3. Ready for re-review @crazywoola.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: missing Missing or invalid Marketplace risk selection

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants