diff --git a/docs/superpowers/audits/2026-06-03-plugin-publish-and-categories-uat.md b/docs/superpowers/audits/2026-06-03-plugin-publish-and-categories-uat.md index 084eafc..f3142c3 100644 --- a/docs/superpowers/audits/2026-06-03-plugin-publish-and-categories-uat.md +++ b/docs/superpowers/audits/2026-06-03-plugin-publish-and-categories-uat.md @@ -16,7 +16,7 @@ Date: 2026-06-03 Execute each item against a freshly-rebuilt orchestrator (`podman compose build orchestrator-backend && podman compose up -d orchestrator-backend`) -and a freshly-reinstalled CLI (`go install ./cmd/ninja` from `~/src/core`). +and a freshly-reinstalled CLI (`go install ./cmd/ninja` from `~/src/blockninja/core`). For each item, capture the actual output/observation next to the expectation. Mark a checkbox ONLY after observing the success criterion with your own eyes. @@ -244,14 +244,14 @@ uses; commands assume access via `podman exec blockninja-db psql -U orchestrator - [x] Run: ```bash - ls ~/src/orchestrator/backend/internal/registry/ 2>&1 + ls ~/src/blockninja/orchestrator/backend/internal/registry/ 2>&1 ``` - [x] Output does NOT include a `git` directory. -- [x] `grep -r "internal/registry/git" ~/src/orchestrator/backend/ 2>/dev/null | grep -v "^Binary"` returns nothing. +- [x] `grep -r "internal/registry/git" ~/src/blockninja/orchestrator/backend/ 2>/dev/null | grep -v "^Binary"` returns nothing. ### D3. `RegistryGitPath` config is gone -- [x] Run `grep -n "RegistryGitPath\|REGISTRY_GIT_PATH" ~/src/orchestrator/backend/internal/config/config.go`. +- [x] Run `grep -n "RegistryGitPath\|REGISTRY_GIT_PATH" ~/src/blockninja/orchestrator/backend/internal/config/config.go`. - [x] Output is empty. ### D4. `registry_versions.git_commit` / `git_tag` columns are gone @@ -264,14 +264,14 @@ uses; commands assume access via `podman exec blockninja-db psql -U orchestrator ### D5. `Plugin.git_remote_url` is not in the proto -- [x] Run `grep -n "git_remote_url\|GitRemoteUrl" ~/src/orchestrator/proto/orchestrator/v1/plugin_registry.proto ~/src/core/proto/orchestrator/v1/plugin_registry.proto`. +- [x] Run `grep -n "git_remote_url\|GitRemoteUrl" ~/src/blockninja/orchestrator/proto/orchestrator/v1/plugin_registry.proto ~/src/blockninja/core/proto/orchestrator/v1/plugin_registry.proto`. - [x] No matches. ### D6. The CLI no longer references the `ninja` git remote -- [x] Run `grep -nE 'remote\s+(add|remove)\s+"?ninja' ~/src/core/cmd/ninja/cmd/plugin.go`. +- [x] Run `grep -nE 'remote\s+(add|remove)\s+"?ninja' ~/src/blockninja/core/cmd/ninja/cmd/plugin.go`. - [x] No matches. -- [x] Run `grep -nE '"git",\s*"push",\s*"ninja"' ~/src/core/cmd/ninja/cmd/plugin.go`. +- [x] Run `grep -nE '"git",\s*"push",\s*"ninja"' ~/src/blockninja/core/cmd/ninja/cmd/plugin.go`. - [x] No matches. --- diff --git a/docs/superpowers/execution/2026-06-03-plugin-publish-and-categories-prompt.md b/docs/superpowers/execution/2026-06-03-plugin-publish-and-categories-prompt.md index 148a309..85a9bca 100644 --- a/docs/superpowers/execution/2026-06-03-plugin-publish-and-categories-prompt.md +++ b/docs/superpowers/execution/2026-06-03-plugin-publish-and-categories-prompt.md @@ -1,7 +1,7 @@ # Execution prompt — Plugin publish (tarball) + categories Copy the body below verbatim into a new Claude Code session at the repo -root (`~/src/core`) when you want execution to start. The prompt is +root (`~/src/blockninja/core`) when you want execution to start. The prompt is self-contained: anyone reading it should be able to drive the work end to end without further context. @@ -16,17 +16,17 @@ the process below in order. Do not skip steps. Do not improvise. ### 1. Required reading (in this order) Read these three files fully before touching any code. Treat each as -authoritative for its purpose. They live in `~/src/core`: +authoritative for its purpose. They live in `~/src/blockninja/core`: 1. **Spec / design** — `docs/superpowers/specs/2026-06-03-plugin-publish-and-categories-design.md`. Defines *what* and *why*. Do not change this without the user's explicit OK. 2. **Plan** — `docs/superpowers/plans/2026-06-03-plugin-publish-and-categories.md`. Defines the ordered, bite-sized tasks with full code blocks. Do not change this without the user's explicit OK either. Each task ends with a commit. 3. **UAT checklist** — `docs/superpowers/audits/2026-06-03-plugin-publish-and-categories-uat.md`. The hard gate. The work is NOT done until every UAT item has been observed to pass with your own eyes. The UAT may not be softened, skipped, or interpreted away. If any item turns out to be ambiguous or impossible, STOP and ask the user. Also be aware: work spans TWO git repos. -- `~/src/core` — Go module `git.dev.alexdunmow.com/block/core`. Holds the ninja CLI (`cmd/ninja/`), the SDK (`plugin/`), and a mirrored copy of the orchestrator proto under `proto/` + `internal/api/`. -- `~/src/orchestrator` — Go module at `backend/`. Holds the orchestrator service, schema, migrations, and proto source of truth. +- `~/src/blockninja/core` — Go module `git.dev.alexdunmow.com/block/core`. Holds the ninja CLI (`cmd/ninja/`), the SDK (`plugin/`), and a mirrored copy of the orchestrator proto under `proto/` + `internal/api/`. +- `~/src/blockninja/orchestrator` — Go module at `backend/`. Holds the orchestrator service, schema, migrations, and proto source of truth. -CLAUDE.md in each repo applies. Read `~/src/core/CLAUDE.md` if you have not (key rule: no `replace` directives in any `go.mod`). +CLAUDE.md in each repo applies. Read `~/src/blockninja/core/CLAUDE.md` if you have not (key rule: no `replace` directives in any `go.mod`). ### 2. Process @@ -79,7 +79,7 @@ top to bottom. For each box: - Run the command(s) the item specifies, against the actual orchestrator (you may need to `podman compose build orchestrator-backend && podman compose up -d orchestrator-backend` first) and the actual - installed CLI (`cd ~/src/core && go install ./cmd/ninja`). + installed CLI (`cd ~/src/blockninja/core && go install ./cmd/ninja`). - Observe the result with your own eyes. - Tick the box ONLY if the observation matches the expectation. - If it doesn't match: do not tick. Return to the plan, identify which diff --git a/docs/superpowers/plans/2026-06-03-plugin-publish-and-categories.md b/docs/superpowers/plans/2026-06-03-plugin-publish-and-categories.md index 7ffb34c..c40dc01 100644 --- a/docs/superpowers/plans/2026-06-03-plugin-publish-and-categories.md +++ b/docs/superpowers/plans/2026-06-03-plugin-publish-and-categories.md @@ -9,8 +9,8 @@ **Tech Stack:** Go (orchestrator backend + ninja CLI), Connect RPC over HTTP, Postgres + sqlc + goose, klauspost/compress/zstd, stdlib `archive/tar`. **Repos involved:** -- `~/src/orchestrator` (backend module at `backend/`) -- `~/src/core` (ninja CLI at `cmd/ninja/`, SDK at `plugin/`) +- `~/src/blockninja/orchestrator` (backend module at `backend/`) +- `~/src/blockninja/core` (ninja CLI at `cmd/ninja/`, SDK at `plugin/`) Tasks are tagged `[orch]` or `[core]` to indicate which repo they live in. Proto change tasks touch both repos. @@ -18,7 +18,7 @@ Tasks are tagged `[orch]` or `[core]` to indicate which repo they live in. Proto ## File Structure -**`~/src/orchestrator/backend/` changes:** +**`~/src/blockninja/orchestrator/backend/` changes:** - Create: `internal/registry/archive/archive.go` — pure helpers: open tar.zst, walk to `plugin.mod`, enforce size caps. - Create: `internal/registry/archive/archive_test.go` - Create: `internal/registry/api/category.go` — `ListCategories` handler. @@ -38,7 +38,7 @@ Tasks are tagged `[orch]` or `[core]` to indicate which repo they live in. Proto - Auto-regen: `internal/db/*.sql.go` via `make sqlc`. - Auto-regen: `sql/schema.sql` via `make schema`. -**`~/src/core/` changes:** +**`~/src/blockninja/core/` changes:** - Create: `cmd/ninja/internal/archive/archive.go` — pure helper to build `tar.zst` from `git archive HEAD`. - Create: `cmd/ninja/internal/archive/archive_test.go` - Modify: `proto/orchestrator/v1/plugin_registry.proto` — mirror orchestrator's proto changes. @@ -54,12 +54,12 @@ Tasks are tagged `[orch]` or `[core]` to indicate which repo they live in. Proto ## Task 1: [core] Add klauspost/compress dependency **Files:** -- Modify: `~/src/core/go.mod`, `~/src/core/go.sum` +- Modify: `~/src/blockninja/core/go.mod`, `~/src/blockninja/core/go.sum` - [ ] **Step 1: Fetch the dep** ```bash -cd ~/src/core +cd ~/src/blockninja/core go get github.com/klauspost/compress/zstd@latest go mod tidy ``` @@ -81,12 +81,12 @@ git commit -m "chore(core): add klauspost/compress for plugin archive zstd" ## Task 2: [orch] Add klauspost/compress dependency **Files:** -- Modify: `~/src/orchestrator/backend/go.mod`, `~/src/orchestrator/backend/go.sum` +- Modify: `~/src/blockninja/orchestrator/backend/go.mod`, `~/src/blockninja/orchestrator/backend/go.sum` - [ ] **Step 1: Fetch the dep** ```bash -cd ~/src/orchestrator/backend +cd ~/src/blockninja/orchestrator/backend go get github.com/klauspost/compress/zstd@latest go mod tidy ``` @@ -112,12 +112,12 @@ through zstd. Returns the compressed bytes. Lives in `cmd/ninja/internal/archive/` so the CLI can use it but nothing else. **Files:** -- Create: `~/src/core/cmd/ninja/internal/archive/archive.go` -- Create: `~/src/core/cmd/ninja/internal/archive/archive_test.go` +- Create: `~/src/blockninja/core/cmd/ninja/internal/archive/archive.go` +- Create: `~/src/blockninja/core/cmd/ninja/internal/archive/archive_test.go` - [ ] **Step 1: Write the failing test** -`~/src/core/cmd/ninja/internal/archive/archive_test.go`: +`~/src/blockninja/core/cmd/ninja/internal/archive/archive_test.go`: ```go package archive @@ -214,14 +214,14 @@ func keys(m map[string]string) []string { - [ ] **Step 2: Run test to verify it fails** ```bash -cd ~/src/core +cd ~/src/blockninja/core go test ./cmd/ninja/internal/archive/... ``` Expected: FAIL — package doesn't exist yet. - [ ] **Step 3: Implement** -`~/src/core/cmd/ninja/internal/archive/archive.go`: +`~/src/blockninja/core/cmd/ninja/internal/archive/archive.go`: ```go package archive @@ -288,12 +288,12 @@ decompresses, walks the tar, extracts `plugin.mod`, and returns parsed contents. **Files:** -- Create: `~/src/orchestrator/backend/internal/registry/archive/archive.go` -- Create: `~/src/orchestrator/backend/internal/registry/archive/archive_test.go` +- Create: `~/src/blockninja/orchestrator/backend/internal/registry/archive/archive.go` +- Create: `~/src/blockninja/orchestrator/backend/internal/registry/archive/archive_test.go` - [ ] **Step 1: Write the failing test** -`~/src/orchestrator/backend/internal/registry/archive/archive_test.go`: +`~/src/blockninja/orchestrator/backend/internal/registry/archive/archive_test.go`: ```go package archive @@ -374,14 +374,14 @@ func TestOpenAndValidate_RejectsDecompressionBomb(t *testing.T) { - [ ] **Step 2: Run test to verify failure** ```bash -cd ~/src/orchestrator/backend +cd ~/src/blockninja/orchestrator/backend go test ./internal/registry/archive/... ``` Expected: FAIL — package doesn't exist. - [ ] **Step 3: Implement** -`~/src/orchestrator/backend/internal/registry/archive/archive.go`: +`~/src/blockninja/orchestrator/backend/internal/registry/archive/archive.go`: ```go package archive @@ -475,10 +475,10 @@ Goose migration that drops `git_commit` and `git_tag` columns on `registry_versions`. These are not used after the publish flow change. **Files:** -- Create: `~/src/orchestrator/backend/sql/migrations/00055_drop_publish_git_fields.sql` -- Modify: `~/src/orchestrator/backend/sql/queries/registry_versions.sql` -- Modify: `~/src/orchestrator/backend/sql/schema.sql` (auto via `make schema`) -- Regen: `~/src/orchestrator/backend/internal/db/*.sql.go` (auto via `make sqlc`) +- Create: `~/src/blockninja/orchestrator/backend/sql/migrations/00055_drop_publish_git_fields.sql` +- Modify: `~/src/blockninja/orchestrator/backend/sql/queries/registry_versions.sql` +- Modify: `~/src/blockninja/orchestrator/backend/sql/schema.sql` (auto via `make schema`) +- Regen: `~/src/blockninja/orchestrator/backend/internal/db/*.sql.go` (auto via `make sqlc`) - [ ] **Step 1: Write the migration** @@ -521,7 +521,7 @@ Renumber the placeholders accordingly. - [ ] **Step 3: Run the migration** ```bash -cd ~/src/orchestrator/backend +cd ~/src/blockninja/orchestrator/backend make migrate ``` Expected: migrations applied through `00055`. @@ -558,14 +558,14 @@ git commit -m "feat(orch): drop git_commit/git_tag from registry_versions" `PublishVersionRequest` drops `git_ref` and gains `string version` + `bytes archive`. `CreatePluginResponse` drops `git_remote_url`. Apply in both proto files and regen. **Files:** -- Modify: `~/src/orchestrator/proto/orchestrator/v1/plugin_registry.proto` -- Modify: `~/src/core/proto/orchestrator/v1/plugin_registry.proto` -- Regen: `~/src/orchestrator/backend/api/orchestrator/v1/plugin_registry.pb.go` + connect file (via `cd ~/src/orchestrator && make -C backend proto` or `buf generate`) -- Regen: `~/src/core/internal/api/orchestrator/v1/plugin_registry.pb.go` + connect file (via `cd ~/src/core && buf generate`) +- Modify: `~/src/blockninja/orchestrator/proto/orchestrator/v1/plugin_registry.proto` +- Modify: `~/src/blockninja/core/proto/orchestrator/v1/plugin_registry.proto` +- Regen: `~/src/blockninja/orchestrator/backend/api/orchestrator/v1/plugin_registry.pb.go` + connect file (via `cd ~/src/blockninja/orchestrator && make -C backend proto` or `buf generate`) +- Regen: `~/src/blockninja/core/internal/api/orchestrator/v1/plugin_registry.pb.go` + connect file (via `cd ~/src/blockninja/core && buf generate`) - [ ] **Step 1: Edit orchestrator proto** -In `~/src/orchestrator/proto/orchestrator/v1/plugin_registry.proto`, replace: +In `~/src/blockninja/orchestrator/proto/orchestrator/v1/plugin_registry.proto`, replace: ```proto message CreatePluginResponse { @@ -609,12 +609,12 @@ message PublishVersionRequest { - [ ] **Step 2: Mirror to core proto** -Apply the identical changes to `~/src/core/proto/orchestrator/v1/plugin_registry.proto`. (Note: the two protos have small drift — keep core's drift intact and apply only the two diffs above.) +Apply the identical changes to `~/src/blockninja/core/proto/orchestrator/v1/plugin_registry.proto`. (Note: the two protos have small drift — keep core's drift intact and apply only the two diffs above.) - [ ] **Step 3: Regen orchestrator** ```bash -cd ~/src/orchestrator +cd ~/src/blockninja/orchestrator make -C backend proto ``` Expected: `backend/api/orchestrator/v1/plugin_registry.pb.go` regenerated. @@ -622,7 +622,7 @@ Expected: `backend/api/orchestrator/v1/plugin_registry.pb.go` regenerated. - [ ] **Step 4: Regen core** ```bash -cd ~/src/core +cd ~/src/blockninja/core buf generate ``` Expected: `internal/api/orchestrator/v1/plugin_registry.pb.go` regenerated. @@ -631,14 +631,14 @@ Expected: `internal/api/orchestrator/v1/plugin_registry.pb.go` regenerated. In orchestrator: ```bash -cd ~/src/orchestrator +cd ~/src/blockninja/orchestrator git add proto/ backend/api/ frontend/src/lib/api/gen/ git commit -m "feat(orch): PublishVersionRequest takes bytes archive; drop git_remote_url" ``` In core: ```bash -cd ~/src/core +cd ~/src/blockninja/core git add proto/ internal/api/ git commit -m "feat(core): mirror PublishVersionRequest archive bytes proto change" ``` @@ -650,12 +650,12 @@ extract `plugin.mod`, cross-check fields, store via `regstorage`, record the version. No git, no `repos`, no tag. **Files:** -- Modify: `~/src/orchestrator/backend/internal/registry/api/publish.go` -- Modify: `~/src/orchestrator/backend/internal/registry/api/converters.go` +- Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/publish.go` +- Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/converters.go` - [ ] **Step 1: Replace publish.go contents** -Open `~/src/orchestrator/backend/internal/registry/api/publish.go` and replace its contents with: +Open `~/src/blockninja/orchestrator/backend/internal/registry/api/publish.go` and replace its contents with: ```go package api @@ -861,7 +861,7 @@ func splitRef(ref string) (scope, name string, ok bool) { - [ ] **Step 2: Update `versionToProto` to drop git fields** -In `~/src/orchestrator/backend/internal/registry/api/converters.go`, replace `versionToProto` with: +In `~/src/blockninja/orchestrator/backend/internal/registry/api/converters.go`, replace `versionToProto` with: ```go func versionToProto(v db.RegistryVersion) *orchestratorv1.Version { @@ -887,7 +887,7 @@ Go back to Task 6 and add: remove `string git_commit = 4;` and `string git_tag = - [ ] **Step 3: Verify build** ```bash -cd ~/src/orchestrator/backend +cd ~/src/blockninja/orchestrator/backend go build ./... ``` Expected: clean (Task 5's `git_commit`/`git_tag` references now resolved by the new converter). @@ -909,7 +909,7 @@ git commit -m "feat(orch): rewrite PublishVersion to use tar.zst archive" ## Task 8: [orch] Drop `git_remote_url` and update `CreatePlugin` handler **Files:** -- Modify: `~/src/orchestrator/backend/internal/registry/api/plugin.go` +- Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/plugin.go` - [ ] **Step 1: Remove `git_remote_url` from CreatePlugin response** @@ -981,14 +981,14 @@ git commit -m "feat(orch): drop GitRemoteUrl from CreatePlugin response" ## Task 9: [orch] Delete `internal/registry/git/`, wiring + config cleanup **Files:** -- Delete: `~/src/orchestrator/backend/internal/registry/git/` (entire directory) -- Modify: `~/src/orchestrator/backend/internal/server/registry_wiring.go` -- Modify: `~/src/orchestrator/backend/internal/config/config.go` +- Delete: `~/src/blockninja/orchestrator/backend/internal/registry/git/` (entire directory) +- Modify: `~/src/blockninja/orchestrator/backend/internal/server/registry_wiring.go` +- Modify: `~/src/blockninja/orchestrator/backend/internal/config/config.go` - [ ] **Step 1: Delete the git package** ```bash -cd ~/src/orchestrator/backend +cd ~/src/blockninja/orchestrator/backend git rm -r internal/registry/git/ ``` @@ -1143,11 +1143,11 @@ git commit -m "feat(orch): delete registry/git package, drop /git route and Regi ## Task 10: [core] Rewrite `publish` CLI command **Files:** -- Modify: `~/src/core/cmd/ninja/cmd/plugin.go` (the `newPluginPublishCmd` function) +- Modify: `~/src/blockninja/core/cmd/ninja/cmd/plugin.go` (the `newPluginPublishCmd` function) - [ ] **Step 1: Replace `newPluginPublishCmd`** -In `~/src/core/cmd/ninja/cmd/plugin.go`, replace `newPluginPublishCmd` with: +In `~/src/blockninja/core/cmd/ninja/cmd/plugin.go`, replace `newPluginPublishCmd` with: ```go func newPluginPublishCmd() *cobra.Command { @@ -1238,7 +1238,7 @@ At the top of `plugin.go`, add to the imports: - [ ] **Step 3: Verify build** ```bash -cd ~/src/core +cd ~/src/blockninja/core go build ./... ``` Expected: clean. @@ -1260,7 +1260,7 @@ git commit -m "feat(cli): rewrite plugin publish to send tar.zst archive" ## Task 11: [core] Rewrite `init` CLI command (auto-commit, no remote) **Files:** -- Modify: `~/src/core/cmd/ninja/cmd/plugin.go` (the `newPluginInitCmd` function and the closing of the git-repo block) +- Modify: `~/src/blockninja/core/cmd/ninja/cmd/plugin.go` (the `newPluginInitCmd` function and the closing of the git-repo block) - [ ] **Step 1: Replace the git-repo block** @@ -1333,7 +1333,7 @@ func autoCommitPluginMod() error { - [ ] **Step 3: Verify build** ```bash -cd ~/src/core +cd ~/src/blockninja/core go build ./... ``` Expected: clean. @@ -1360,7 +1360,7 @@ This is verification only — no commit. - [ ] **Step 1: Restart the orchestrator** ```bash -cd ~/src/orchestrator +cd ~/src/blockninja/orchestrator podman compose build orchestrator-backend podman compose up -d orchestrator-backend ``` @@ -1416,13 +1416,13 @@ rm -rf /tmp/smokeplugin ## Task 13: [core] Add `Kind` and `Categories` to `ModFile` + update `writeMod` **Files:** -- Modify: `~/src/core/plugin/mod.go` -- Modify: `~/src/core/plugin/mod_test.go` -- Modify: `~/src/core/cmd/ninja/cmd/plugin.go` (the `writeMod` helper) +- Modify: `~/src/blockninja/core/plugin/mod.go` +- Modify: `~/src/blockninja/core/plugin/mod_test.go` +- Modify: `~/src/blockninja/core/cmd/ninja/cmd/plugin.go` (the `writeMod` helper) - [ ] **Step 1: Add the new test cases** -Append to `~/src/core/plugin/mod_test.go`: +Append to `~/src/blockninja/core/plugin/mod_test.go`: ```go func TestParseModFull_KindAndCategories(t *testing.T) { @@ -1465,14 +1465,14 @@ version = "0.1.0" - [ ] **Step 2: Run tests to verify failure** ```bash -cd ~/src/core +cd ~/src/blockninja/core go test ./plugin/... ``` Expected: FAIL — `Kind`/`Categories` fields don't exist yet. - [ ] **Step 3: Add fields to `ModPlugin`** -In `~/src/core/plugin/mod.go`, replace `ModPlugin` with: +In `~/src/blockninja/core/plugin/mod.go`, replace `ModPlugin` with: ```go type ModPlugin struct { @@ -1493,7 +1493,7 @@ Expected: PASS. - [ ] **Step 5: Update `writeMod` to emit new fields** -In `~/src/core/cmd/ninja/cmd/plugin.go`, replace `writeMod` with: +In `~/src/blockninja/core/cmd/ninja/cmd/plugin.go`, replace `writeMod` with: ```go func writeMod(path string, m *core.ModFile) error { @@ -1542,10 +1542,10 @@ git commit -m "feat(sdk): add Kind and Categories to ModPlugin; writeMod emits t ## Task 14: [orch] Migration — add `kind` to registry_plugins + new `registry_categories` table **Files:** -- Create: `~/src/orchestrator/backend/sql/migrations/00056_plugin_kind_and_categories.sql` -- Create: `~/src/orchestrator/backend/sql/queries/registry_categories.sql` -- Modify: `~/src/orchestrator/backend/sql/queries/registry_plugins.sql` (add kind handling) -- Auto-regen: `~/src/orchestrator/backend/sql/schema.sql` and `~/src/orchestrator/backend/internal/db/*.sql.go` +- Create: `~/src/blockninja/orchestrator/backend/sql/migrations/00056_plugin_kind_and_categories.sql` +- Create: `~/src/blockninja/orchestrator/backend/sql/queries/registry_categories.sql` +- Modify: `~/src/blockninja/orchestrator/backend/sql/queries/registry_plugins.sql` (add kind handling) +- Auto-regen: `~/src/blockninja/orchestrator/backend/sql/schema.sql` and `~/src/blockninja/orchestrator/backend/internal/db/*.sql.go` - [ ] **Step 1: Write the migration** @@ -1633,7 +1633,7 @@ new optional params.) - [ ] **Step 4: Run the migration** ```bash -cd ~/src/orchestrator/backend +cd ~/src/blockninja/orchestrator/backend make migrate ``` Expected: applied through `00056`. @@ -1664,8 +1664,8 @@ git commit -m "feat(orch): add plugin kind and registry_categories with seed" ## Task 15: Proto change — `Plugin.kind`, request fields, `ListCategories` RPC **Files:** -- Modify: `~/src/orchestrator/proto/orchestrator/v1/plugin_registry.proto` -- Modify: `~/src/core/proto/orchestrator/v1/plugin_registry.proto` +- Modify: `~/src/blockninja/orchestrator/proto/orchestrator/v1/plugin_registry.proto` +- Modify: `~/src/blockninja/core/proto/orchestrator/v1/plugin_registry.proto` - Regen on both repos. - [ ] **Step 1: Edit orchestrator proto — `Plugin` gains `kind`** @@ -1742,19 +1742,19 @@ message ListCategoriesResponse { repeated Category categories = 1; } - [ ] **Step 5: Mirror all 4 edits to core's proto** -Apply the identical changes to `~/src/core/proto/orchestrator/v1/plugin_registry.proto`. +Apply the identical changes to `~/src/blockninja/core/proto/orchestrator/v1/plugin_registry.proto`. - [ ] **Step 6: Regen orchestrator** ```bash -cd ~/src/orchestrator +cd ~/src/blockninja/orchestrator make -C backend proto ``` - [ ] **Step 7: Regen core** ```bash -cd ~/src/core +cd ~/src/blockninja/core buf generate ``` @@ -1762,14 +1762,14 @@ buf generate orchestrator: ```bash -cd ~/src/orchestrator +cd ~/src/blockninja/orchestrator git add proto/ backend/api/ frontend/src/lib/api/gen/ git commit -m "feat(orch): proto adds Plugin.kind, ListCategories RPC, filter args" ``` core: ```bash -cd ~/src/core +cd ~/src/blockninja/core git add proto/ internal/api/ git commit -m "feat(core): mirror Plugin.kind + ListCategories proto regen" ``` @@ -1777,8 +1777,8 @@ git commit -m "feat(core): mirror Plugin.kind + ListCategories proto regen" ## Task 16: [orch] Converters + CreatePlugin + helper for category validation **Files:** -- Modify: `~/src/orchestrator/backend/internal/registry/api/converters.go` -- Modify: `~/src/orchestrator/backend/internal/registry/api/plugin.go` +- Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/converters.go` +- Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/plugin.go` - [ ] **Step 1: Update converters to include `Kind`** @@ -1960,8 +1960,8 @@ git commit -m "feat(orch): CreatePlugin/ListPlugins handle kind and categories" ## Task 17: [orch] Add `ListCategories` handler **Files:** -- Create: `~/src/orchestrator/backend/internal/registry/api/category.go` -- Modify: `~/src/orchestrator/backend/internal/registry/api/plugin.go` (add method to `PluginHandler`) +- Create: `~/src/blockninja/orchestrator/backend/internal/registry/api/category.go` +- Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/plugin.go` (add method to `PluginHandler`) - [ ] **Step 1: Add the handler method** @@ -2007,7 +2007,7 @@ The published `plugin.mod` must agree with `registry_plugins` on `kind` and plugin across versions. **Files:** -- Modify: `~/src/orchestrator/backend/internal/registry/api/publish.go` +- Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/publish.go` - [ ] **Step 1: Add the cross-check** @@ -2067,7 +2067,7 @@ git commit -m "feat(orch): publish cross-checks plugin.mod kind/categories again ## Task 19: [core] CLI `init` prompts for kind and categories **Files:** -- Modify: `~/src/core/cmd/ninja/cmd/plugin.go` +- Modify: `~/src/blockninja/core/cmd/ninja/cmd/plugin.go` - [ ] **Step 1: Add a `promptKind` helper** @@ -2195,7 +2195,7 @@ if err := upsertPluginMod(scope, name, kind, cats); err != nil { - [ ] **Step 4: Verify build** ```bash -cd ~/src/core +cd ~/src/blockninja/core go build ./... ``` Expected: clean. @@ -2218,7 +2218,7 @@ git commit -m "feat(cli): init prompts for kind and categories" - [ ] **Step 1: Restart orchestrator** ```bash -cd ~/src/orchestrator +cd ~/src/blockninja/orchestrator podman compose build orchestrator-backend podman compose up -d orchestrator-backend ``` @@ -2316,7 +2316,7 @@ warning if non-empty. Spec calls for this; plan didn't include it. Adding now: ### Task 11.5: [core] Publish-time warning for tracked-yet-gitignored files -**Files:** Modify `~/src/core/cmd/ninja/cmd/plugin.go` (the publish command). +**Files:** Modify `~/src/blockninja/core/cmd/ninja/cmd/plugin.go` (the publish command). - [ ] **Step 1:** After the working-tree-clean check and before `BuildSourceArchive`, insert: @@ -2334,7 +2334,7 @@ if names := strings.TrimSpace(string(out)); names != "" { - [ ] **Step 2:** Build and reinstall. ```bash -cd ~/src/core +cd ~/src/blockninja/core go build ./... && go install ./cmd/ninja ```