From 61c2b9729e4b09dbae88b71d6199f3d0fb7bca34 Mon Sep 17 00:00:00 2001 From: Saadat Ali Date: Mon, 14 Sep 2026 17:43:42 +0500 Subject: [PATCH 1/3] chore: establish graphpowers product manifest Adds .nextbridge/product.yaml, the source of truth the ecosystem's sync contract expects every product repository to carry (manifests/README.md: "product.yaml in the product repository is authoritative"). This file never existed in this repository's git history before this commit (verified exhaustively against git log --all across every branch and commit) - there is no prior version to recover. Content is copied byte-for-byte from the Nextbridge ecosystem's existing manifests/graphpowers.yaml snapshot, after independently verifying that snapshot against this repository's actual state: pyproject.toml (name, license, requires-python, CLI entry point, homepage), the real skills/ directory (11 skills, each with SKILL.md), and the absence of agents/, commands/, and .mcp.json matching the manifest's declared component counts. This establishes the ecosystem's existing representation as this repository's authoritative manifest going forward, rather than recovering anything that previously existed here. --- .nextbridge/product.yaml | 95 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 .nextbridge/product.yaml diff --git a/.nextbridge/product.yaml b/.nextbridge/product.yaml new file mode 100644 index 0000000..40592ba --- /dev/null +++ b/.nextbridge/product.yaml @@ -0,0 +1,95 @@ +schema: nextbridge.dev/product/v1 + +id: graphpowers +name: GraphPowers + +description: + short: >- + Bridges a Graphify knowledge graph into agent development workflows: + blast radius, context packs, drift, and graph-first debugging. + long: >- + A zero-dependency Python bridge plus eleven Claude Code skills that make an + existing code graph usable during real work. It computes the blast radius of + a change by bidirectional traversal, renders token-budgeted context packs for + subagents, answers reverse-dependency questions, diffs two graph snapshots to + surface architecture drift, checks whether the graph is still current, and + flags scope creep by comparing touched files against the planned set. It reads + graph.json directly rather than importing the tool that produced it, so a + schema change fails loudly instead of quietly misleading a plan. + +problem: >- + A coding agent plans, debugs, and reviews from whatever files it happened to + read, with no view of what a change actually reaches, so blast radius is + guessed and architectural drift is noticed only after it ships. + +user: + - ai-agent-developer + - developer-using-ai-agent + +capabilities: + core: + - graph-impact-analysis + - context-selection + - token-budgeting + - architecture-drift-detection + - agent-process-guidance + secondary: + - git-scoping + +interfaces: + - type: cli + command: graphpowers + summary: >- + Thirteen subcommands over an existing graph.json - freshness, blast, pack, + drift, who-uses, upstream-check, snapshot, guard, narrate, parallel, + explain, pack-feedback, doctor. Installed from the repository; the console + script is declared in pyproject.toml but the package is not published. + +distribution: + - channel: github + repository: nextbridgehq/graphpowers + - channel: gemini-cli-extension + repository: nextbridgehq/graphpowers + +runtime: + language: python + python: ">=3.9" + +license: MIT + +maturity: stable + +plugins: + - name: graphpowers + host: claude-code + path: . + manifest: .claude-plugin/plugin.json + marketplace: nextbridge + components: + skills: 11 + agents: 0 + commands: 0 + hooks: true + mcp: false + status: published + +integrations: + # Graphify produces the graph; this product only reads it, via the node-link + # graph.json contract, without importing graphify. Not "verified": the canary + # that would exercise a real graphify install lives at ci/upstream-watch.yml + # and is not installed under .github/workflows, so nothing runs it. + - to: graphify + external: true + type: graph-consumer + interface: file + status: supported + contract: + consumes: graphify-out/graph.json (networkx node-link, schema node-link-v1) + + # The skills extend the Superpowers methodology and reference its skills by + # name. `upstream-check` verifies those references, but only when run. + - to: superpowers + external: true + type: methodology-extension + interface: plugin + status: supported From 5bb6f3a6d6ef4f340c8a283d994abe1a87deb649 Mon Sep 17 00:00:00 2001 From: Saadat Ali Date: Mon, 14 Sep 2026 17:43:50 +0500 Subject: [PATCH 2/3] chore: remove stray marketplace manifest .claude-plugin/marketplace.json declared a competing "graphpowers-marketplace", added in 6d24053 (2026-07-20) and never removed since. The plugin's own manifest (.claude-plugin/plugin.json) already correctly declares marketplace: nextbridge, and the canonical Nextbridge marketplace already lists this plugin - this file is a leftover competing declaration, not a needed one. The ecosystem's R-MK2 rule flags any product repository shipping its own marketplace file once that product has a synced manifest; this repository has had one since before this commit. --- .claude-plugin/marketplace.json | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 .claude-plugin/marketplace.json diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json deleted file mode 100644 index 2fa5b17..0000000 --- a/.claude-plugin/marketplace.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "graphpowers-marketplace", - "owner": { - "name": "Nextbridge" - }, - "description": "A collection of orchestration tools and plugins that combine Superpowers workflows with Graphify's queryable knowledge graph for your coding agent.", - "plugins": [ - { - "name": "graphpowers", - "source": "./", - "description": "Graph-aware orchestration for AI coding agents. Combines Superpowers workflows with Graphify's knowledge graph for context-aware software development.", - "author": { - "name": "Nextbridge" - }, - "homepage": "https://github.com/nextbridgehq/graphpowers#readme" - } - ] -} \ No newline at end of file From 905196ef60952e2ab9d16a75d9f64c7bfe808afe Mon Sep 17 00:00:00 2001 From: Saadat Ali Date: Mon, 14 Sep 2026 19:48:11 +0500 Subject: [PATCH 3/3] test: drop marketplace.json from the agent-manifest existence check The prior commit removed .claude-plugin/marketplace.json (a stray competing marketplace declaration). This suite's MANIFESTS tuple still listed it, so CI failed on this branch checking for a file this same PR intentionally deletes. test_manifest_versions_match_pyproject already excludes marketplace.json from its own manifest list (it deliberately carries no version, by ecosystem design), so this test now matches that same precedent. --- tests/test_bridge.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_bridge.py b/tests/test_bridge.py index 0108a21..541f1b8 100644 --- a/tests/test_bridge.py +++ b/tests/test_bridge.py @@ -616,7 +616,6 @@ def test_cli_exit_codes(tmp_path): MANIFESTS = ( ".claude-plugin/plugin.json", - ".claude-plugin/marketplace.json", "gemini-extension.json", )