docs: update paths after 2026-06-06 repo consolidation

Repos consolidated under ~/src/blockninja/ parent (collection, not
monorepo). This repo moved from ~/src/core to ~/src/blockninja/core.
Updates historical plan/audit docs that referenced the old paths.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Alex Dunmow 2026-06-06 13:02:51 +08:00
parent af7f44c34d
commit 48c54814ec
3 changed files with 91 additions and 91 deletions

View File

@ -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.
---

View File

@ -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

View File

@ -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
```