diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index e8ef91d..c34f725 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -2,7 +2,7 @@ "interface": { "displayName": "Vstack" }, - "name": "vllnt-stack", + "name": "vllnt", "plugins": [ { "category": "Productivity", diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 0fc06ed..c30ed4c 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,6 +1,6 @@ { "description": "Evidence-led engineering workflows to plan, build, review, and ship software with AI agents. Part of the vllnt universe: open, sovereign tools for freedom by design (vllnt.com).", - "name": "vllnt-stack", + "name": "vllnt", "owner": { "name": "vllnt" }, diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 203da4f..c120e16 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -1,5 +1,5 @@ { - "name": "vllnt-stack", + "name": "vllnt", "owner": { "name": "vllnt" }, diff --git a/CHANGELOG.md b/CHANGELOG.md index 7207dd1..b4d93c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## 0.1.0-canary.5 + +- Rename the marketplace from `vllnt-stack` to `vllnt` for all hosts, so installs read `vstack@vllnt`. Existing installs must remove the `vllnt-stack` marketplace and add `vllnt/stack` again. + ## 0.1.0-canary.4 - Use the vllnt logo as the Claude plugin icon: `assets/vllnt-logo.png` is wrapped by the generator into `.claude-plugin/icon.svg`. diff --git a/README.md b/README.md index d89b144..cb791b1 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,10 @@ The Claude Code plugin is in canary (prerelease versions): installation from Git ```text /plugin marketplace add vllnt/stack -/plugin install vstack@vllnt-stack +/plugin install vstack@vllnt ``` -Then start a new chat and invoke a namespaced skill such as `/vstack:plan-work`. Third-party marketplaces may not auto-update by default; enable auto-update for `vllnt-stack` in `/plugin`, or run `/plugin marketplace update vllnt-stack` to receive new versions. +Then start a new chat and invoke a namespaced skill such as `/vstack:plan-work`. Third-party marketplaces may not auto-update by default; enable auto-update for `vllnt` in `/plugin`, or run `/plugin marketplace update vllnt` to receive new versions. [`vllnt/skills`](https://github.com/vllnt/skills) owns the portable workflows and principles. This repository pins an upstream commit and builds complete, committed host packages. Installed users need no Python, Git submodule, build step, or runtime source download. @@ -30,7 +30,7 @@ Then start a new chat and invoke a namespaced skill such as `/vstack:plan-work`. | `.agents/plugins/marketplace.json` | Codex catalog; selects only its host package | | `.cursor-plugin/marketplace.json` | Cursor catalog; selects only its host package | -Each catalog exposes a plugin named **`vstack`**, under the marketplace identity **`vllnt-stack`**. Separate package roots avoid relying on precedence between multiple host manifests. Generated copies are distribution artifacts, not additional skill authorship locations. +Each catalog exposes a plugin named **`vstack`**, under the marketplace identity **`vllnt`**, so installs read `vstack@vllnt`. Separate package roots avoid relying on precedence between multiple host manifests. Generated copies are distribution artifacts, not additional skill authorship locations. Each package includes all public `workflows/*/SKILL.md` and `mandatory/*/SKILL.md` folders, their existing reference bundles, the upstream MIT license, and `SOURCE.json`. Repository-local maintenance skills and unrelated installed third-party skills are excluded. The initial pin contains 19 workflows and three principle skills. Workflows are discovered dynamically; changes to the three named mandatory principles intentionally require generator/adapter review before packaging. @@ -50,7 +50,7 @@ From Claude Code, add this checkout as a local marketplace, then install its plu ```text /plugin marketplace add /path/to/stack -/plugin install vstack@vllnt-stack +/plugin install vstack@vllnt ``` Choose the desired installation scope and reload plugins if prompted. Verify a namespaced invocation such as `/vstack:plan-work` in a new chat. @@ -149,7 +149,7 @@ Automatic repository synchronization was independently verified on 2026-09-21. A Live testing caught a generated-help false hold and post-push PR-head propagation timing; fixes were reviewed and merged through PRs #5 and #6, with 37 regression tests passing. The fresh PR #7 case required neither manual metadata repair nor manual merge. Daily fallback is configured; its timer was not waited for. Push delivery, manual resends, automatic merging, and manual no-op execution were observed. -Claude Code 2.1.283 (2026-09-27): `claude plugin validate` passes for the catalog and plugin; a local-directory marketplace install into an isolated configuration installed `vstack@vllnt-stack` with all 22 skills, and a maintainer session with the local install listed every `vstack:*` skill. After `vllnt/stack` became public (merge `c3ad08c08fe460ed4f2e1a40630afe4001ddd23c`), an anonymous clone succeeded, and the CLI equivalents `claude plugin marketplace add vllnt/stack` plus `claude plugin install vstack@vllnt-stack` in a clean, credential-free configuration installed the plugin from the GitHub source; a headless session there listed exactly the 22 `vstack:*` skills. The same commands after merge `915a4d0d519d726f84185ec698b3ed3f4c925cb8` installed it again with its icon, updated description, and 22 skills. The in-chat `/plugin` forms were not run separately. Skill invocation behavior (including `plan-work` staying read-only), automatic skill selection, and the rest of the acceptance checklist remain unverified. +Claude Code 2.1.283 (2026-09-27): `claude plugin validate` passes for the catalog and plugin; a local-directory marketplace install into an isolated configuration installed `vstack@vllnt-stack` with all 22 skills, and a maintainer session with the local install listed every `vstack:*` skill. After `vllnt/stack` became public (merge `c3ad08c08fe460ed4f2e1a40630afe4001ddd23c`), an anonymous clone succeeded, and the CLI equivalents `claude plugin marketplace add vllnt/stack` plus `claude plugin install vstack@vllnt-stack` in a clean, credential-free configuration installed the plugin from the GitHub source; a headless session there listed exactly the 22 `vstack:*` skills. The same commands after merge `915a4d0d519d726f84185ec698b3ed3f4c925cb8` installed it again with its icon, updated description, and 22 skills. The in-chat `/plugin` forms were not run separately. The marketplace was later renamed from `vllnt-stack` to `vllnt`; earlier installs must remove the old marketplace and add it again. Skill invocation behavior (including `plan-work` staying read-only), automatic skill selection, and the rest of the acceptance checklist remain unverified. **Codex and Cursor installation, and startup/context-loss behavior in every host, remain unverified.** The repository is public and installable as a GitHub marketplace. A Claude plugin directory submission is in validation and is not listed yet. Canary builds are published as [GitHub prereleases](https://github.com/vllnt/stack/releases); releases are created manually. No automatic Claude/Codex principle loading exists. diff --git a/VERSION b/VERSION index cc9a41d..20eaaf3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.0-canary.4 +0.1.0-canary.5 diff --git a/plugins/claude/.claude-plugin/plugin.json b/plugins/claude/.claude-plugin/plugin.json index 8564a6a..f7edd43 100644 --- a/plugins/claude/.claude-plugin/plugin.json +++ b/plugins/claude/.claude-plugin/plugin.json @@ -13,5 +13,5 @@ "license": "MIT", "name": "vstack", "repository": "https://github.com/vllnt/stack", - "version": "0.1.0-canary.4" + "version": "0.1.0-canary.5" } diff --git a/plugins/claude/SOURCE.json b/plugins/claude/SOURCE.json index 29fb7a8..ba64368 100644 --- a/plugins/claude/SOURCE.json +++ b/plugins/claude/SOURCE.json @@ -1,7 +1,7 @@ { "files": { ".claude-plugin/icon.svg": "0b4b639f6df841b4904ec0cd9f6d38131c6373ce4a52a1e7fe6452a37598d7f1", - ".claude-plugin/plugin.json": "4808262e4a7a3e327124bfd2b6e23590f33502b981cfcc4e893be02674ab4a53", + ".claude-plugin/plugin.json": "075f3e05fe3733d2930d0aaaf378d02758436dfa4f4006c34eda3c505b48e1ef", "LICENSE": "24ba061a4603738ddd5105ef4abc198eeded5ac7efce23b360561816f4dd6559", "skills/build-landing-page/README.md": "46a280eadac8962180cf3f0c42eb0e845a3b0156a644569182d932881e1d51f8", "skills/build-landing-page/SKILL.md": "b08e4963d6149f3647b28a0d9dccdc8793812abab95a1d081d93699e142de0f0", diff --git a/plugins/codex/SOURCE.json b/plugins/codex/SOURCE.json index f10d7d2..4c34085 100644 --- a/plugins/codex/SOURCE.json +++ b/plugins/codex/SOURCE.json @@ -1,7 +1,7 @@ { "files": { "LICENSE": "24ba061a4603738ddd5105ef4abc198eeded5ac7efce23b360561816f4dd6559", - "plugin.json": "789b793f660535ffddadde5268e5d776ea9a76db6b4809014eb71537d877f235", + "plugin.json": "c78e76ede21d79745dc7572f7ba3f563d9296d9d1c3404cedc217f96597f320b", "skills/build-landing-page/README.md": "46a280eadac8962180cf3f0c42eb0e845a3b0156a644569182d932881e1d51f8", "skills/build-landing-page/SKILL.md": "b08e4963d6149f3647b28a0d9dccdc8793812abab95a1d081d93699e142de0f0", "skills/build-landing-page/references/copywriting-formulas.md": "6d19f6166e1badcfdda0af4f8b303160e94ee6e6149321157e12849654cc013e", diff --git a/plugins/codex/plugin.json b/plugins/codex/plugin.json index ab43f83..c7cc4fd 100644 --- a/plugins/codex/plugin.json +++ b/plugins/codex/plugin.json @@ -6,5 +6,5 @@ "description": "Evidence-led engineering workflows to plan, build, review, and ship software with AI agents. Part of the vllnt universe: open, sovereign tools for freedom by design (vllnt.com).", "license": "MIT", "name": "vstack", - "version": "0.1.0-canary.4" + "version": "0.1.0-canary.5" } diff --git a/plugins/cursor/.cursor-plugin/plugin.json b/plugins/cursor/.cursor-plugin/plugin.json index 8dcbac1..3f06dc7 100644 --- a/plugins/cursor/.cursor-plugin/plugin.json +++ b/plugins/cursor/.cursor-plugin/plugin.json @@ -5,5 +5,5 @@ "description": "Evidence-led engineering workflows to plan, build, review, and ship software with AI agents. Part of the vllnt universe: open, sovereign tools for freedom by design (vllnt.com).", "license": "MIT", "name": "vstack", - "version": "0.1.0-canary.4" + "version": "0.1.0-canary.5" } diff --git a/plugins/cursor/SOURCE.json b/plugins/cursor/SOURCE.json index 2c247bb..c70f232 100644 --- a/plugins/cursor/SOURCE.json +++ b/plugins/cursor/SOURCE.json @@ -1,6 +1,6 @@ { "files": { - ".cursor-plugin/plugin.json": "b4325fd2a33221ef271b6b92d621c9c62052b6bd6f468b567d47401fe35ee2ea", + ".cursor-plugin/plugin.json": "63c0531e7ec6ff67f7fecd54ee886f3d10706dbab51820807b373378ce7ee4b3", "LICENSE": "24ba061a4603738ddd5105ef4abc198eeded5ac7efce23b360561816f4dd6559", "rules/vstack-principles.mdc": "5234bc0506e0a328d6163cd83785d2f37dd1fc23ef84287d71e03b92459e064a", "skills/build-landing-page/README.md": "46a280eadac8962180cf3f0c42eb0e845a3b0156a644569182d932881e1d51f8", diff --git a/scripts/sync.py b/scripts/sync.py index dd6dac1..6d52e6e 100644 --- a/scripts/sync.py +++ b/scripts/sync.py @@ -24,6 +24,7 @@ UPSTREAM = "https://github.com/vllnt/skills.git" REPOSITORY = "https://github.com/vllnt/stack" HOMEPAGE = "https://vllnt.com" +MARKETPLACE = "vllnt" DESCRIPTION = ("Evidence-led engineering workflows to plan, build, review, and ship software with AI agents. " "Part of the vllnt universe: open, sovereign tools for freedom by design (vllnt.com).") CLAUDE_ICON = ROOT / "assets" / "vllnt-logo.png" @@ -257,13 +258,13 @@ def build(files: dict[str, bytes], lock: dict, version: str) -> dict[str, bytes] path: hashlib.sha256(content).hexdigest() for path, content in sorted(package.items())}}) output.update({f"plugins/{host}/{path}": content for path, content in package.items()}) for host in ("claude", "cursor"): - catalog = {"name": "vllnt-stack", "owner": {"name": "vllnt"}, + catalog = {"name": MARKETPLACE, "owner": {"name": "vllnt"}, "plugins": [{"name": "vstack", "source": f"./plugins/{host}"}]} if host == "claude": catalog["description"] = DESCRIPTION output[f".{host}-plugin/marketplace.json"] = encoded(catalog) output[".agents/plugins/marketplace.json"] = encoded({ - "name": "vllnt-stack", "interface": {"displayName": "Vstack"}, + "name": MARKETPLACE, "interface": {"displayName": "Vstack"}, "plugins": [{"name": "vstack", "source": {"source": "local", "path": "./plugins/codex"}, "policy": {"installation": "AVAILABLE", "authentication": "ON_INSTALL"}, "category": "Productivity"}]}) diff --git a/tests/test_sync.py b/tests/test_sync.py index 0f36d2c..4257f1c 100644 --- a/tests/test_sync.py +++ b/tests/test_sync.py @@ -59,6 +59,7 @@ def test_deterministic_standalone_packages_and_provenance(self): claude = json.loads(first[".claude-plugin/marketplace.json"]) codex = json.loads(first[".agents/plugins/marketplace.json"]) cursor = json.loads(first[".cursor-plugin/marketplace.json"]) + self.assertEqual({claude["name"], codex["name"], cursor["name"]}, {"vllnt"}) self.assertEqual(claude["plugins"][0]["source"], "./plugins/claude") self.assertEqual(codex["plugins"][0]["source"]["path"], "./plugins/codex") self.assertEqual(cursor["plugins"][0]["source"], "./plugins/cursor")