From 21136ea94ea53ca7d18ad0c99fe57cb26f72afd1 Mon Sep 17 00:00:00 2001 From: Danil Silantyev Date: Sun, 19 Jul 2026 12:40:38 +0500 Subject: [PATCH] fix(builder): resolve .claude-plugin marketplace local sources at the repo root (0.3.11) Codex derives the marketplace root by stripping the recognized manifest layout (marketplace_root_from_layout) and resolves `./`-relative local plugin sources against that root. The checker mirrored this for `.agents/plugins/` but treated a `.claude-plugin/marketplace.json` root as the `.claude-plugin/` directory itself, so a valid local source resolved one level too deep and was reported missing. Resolve `.claude-plugin/` catalogs relative to the directory that contains them. Advance the builder plugin to 0.3.6 and the module to 0.3.11. Claude-Session: https://claude.ai/code/session_01Y29c9sJRhChvxDcUjab5Xo --- CHANGELOG.md | 12 ++++++++++++ VERSION | 2 +- build/manifest.json | 2 +- build/release-evidence.json | 10 +++++----- build/version.json | 4 ++-- plugins/nddev-builder/.codex-plugin/plugin.json | 2 +- .../nddev-builder/scripts/check_codex_artifact.py | 5 +++++ 7 files changed, 27 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d2a621..1f19c61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project are documented here. +## [0.3.11] - 2026-07-19 + +### Fixed + +- The `marketplace` checker now resolves local plugin sources in a + `.claude-plugin/marketplace.json` catalog relative to the repository root (the + directory that contains `.claude-plugin/`), matching how Codex derives the + marketplace root. Previously such paths resolved one level too deep and a valid + local source was reported missing. `.agents/plugins/` catalogs are unchanged. +- The builder plugin advances to 0.3.6 so an in-place `install-builder` + re-materializes the cache. + ## [0.3.10] - 2026-07-19 ### Fixed diff --git a/VERSION b/VERSION index 5503126..2080591 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.3.10 +0.3.11 diff --git a/build/manifest.json b/build/manifest.json index da77f80..0e62a1b 100644 --- a/build/manifest.json +++ b/build/manifest.json @@ -5,7 +5,7 @@ "location": "sibling ..nddev-codex-backups", "slots": 10 }, - "build_version": "0.3.10", + "build_version": "0.3.11", "command_policy": { "json_supported": [ "list", diff --git a/build/release-evidence.json b/build/release-evidence.json index 4782c28..6fc1c76 100644 --- a/build/release-evidence.json +++ b/build/release-evidence.json @@ -2,15 +2,15 @@ "schema_version": 2, "module": { "repository": "NDDev-it-com/nddev-codex-app", - "setup_digest": "sha256:7af08077a27c6133d2ec29bbd948ab192341a65a4f6158b64375e15bb395dd93" + "setup_digest": "sha256:47c123ec6af139298ec37c82157511cb231a95e8de9b1a8db18884c85c8fd8d2" }, "harness": { "repository": "NDDev-it-com/nddev-harnesses", - "commit": "656095c3922e6354e6b87fabb9fe137b74d7a29d" + "commit": "c10983fa2094e1052b3d69413d391a2e8bb9391b" }, "adapter": { "id": "codex", - "version": "0.3.10" + "version": "0.3.11" }, "vendor": { "cli_version": "0.144.6", @@ -29,8 +29,8 @@ } ], "lanes": [], - "generated_at_utc": "2026-07-19T07:13:38Z", - "expires_at_utc": "2027-01-15T07:13:38Z", + "generated_at_utc": "2026-07-19T07:40:21Z", + "expires_at_utc": "2027-01-15T07:40:21Z", "promotion": { "decision": "pending", "waivers": [] diff --git a/build/version.json b/build/version.json index 821e376..0f8d565 100644 --- a/build/version.json +++ b/build/version.json @@ -1,8 +1,8 @@ { - "build_version": "0.3.10", + "build_version": "0.3.11", "codex_permission_profiles_since": "0.138.0", "codex_cli_tested": "0.144.6", - "nddev_builder_plugin_version": "0.3.5", + "nddev_builder_plugin_version": "0.3.6", "python_requires": ">=3.10", "runtime_baseline_ref": "references/codex-baseline.json", "schema_version": 2 diff --git a/plugins/nddev-builder/.codex-plugin/plugin.json b/plugins/nddev-builder/.codex-plugin/plugin.json index 790b67c..341d540 100644 --- a/plugins/nddev-builder/.codex-plugin/plugin.json +++ b/plugins/nddev-builder/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "nddev-builder", - "version": "0.3.5", + "version": "0.3.6", "description": "Create and validate native Codex skills, plugins, marketplaces, agents, hooks, MCP servers, app mappings, configuration, instructions, execpolicy rules, and managed requirements.", "author": { "name": "Danil Silantyev / NDDev", diff --git a/plugins/nddev-builder/scripts/check_codex_artifact.py b/plugins/nddev-builder/scripts/check_codex_artifact.py index 1d44d58..41ac611 100644 --- a/plugins/nddev-builder/scripts/check_codex_artifact.py +++ b/plugins/nddev-builder/scripts/check_codex_artifact.py @@ -2497,8 +2497,13 @@ def _validate_plugin_root(root: Path, *, budget: ScanBudget | None = None) -> Ar def _marketplace_base(path: Path) -> Path: + # Codex resolves local plugin paths relative to the marketplace root: the + # directory that contains the recognized manifest layout. Mirror that for each + # recognized filename so `./`-relative sources resolve the same way it does. if path.parent.name == "plugins" and path.parent.parent.name == ".agents": return path.parent.parent.parent + if path.parent.name == ".claude-plugin": + return path.parent.parent return path.parent