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 Execute each item against a freshly-rebuilt orchestrator (`podman compose
build orchestrator-backend && podman compose up -d orchestrator-backend`) 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 For each item, capture the actual output/observation next to the
expectation. Mark a checkbox ONLY after observing the success criterion expectation. Mark a checkbox ONLY after observing the success criterion
with your own eyes. with your own eyes.
@ -244,14 +244,14 @@ uses; commands assume access via `podman exec blockninja-db psql -U orchestrator
- [x] Run: - [x] Run:
```bash ```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] 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 ### 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. - [x] Output is empty.
### D4. `registry_versions.git_commit` / `git_tag` columns are gone ### 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 ### 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. - [x] No matches.
### D6. The CLI no longer references the `ninja` git remote ### 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] 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. - [x] No matches.
--- ---

View File

@ -1,7 +1,7 @@
# Execution prompt — Plugin publish (tarball) + categories # Execution prompt — Plugin publish (tarball) + categories
Copy the body below verbatim into a new Claude Code session at the repo 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 self-contained: anyone reading it should be able to drive the work end
to end without further context. 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) ### 1. Required reading (in this order)
Read these three files fully before touching any code. Treat each as 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. 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. 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. 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. 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/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/orchestrator` — Go module at `backend/`. Holds the orchestrator service, schema, migrations, and proto source of truth. - `~/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 ### 2. Process
@ -79,7 +79,7 @@ top to bottom. For each box:
- Run the command(s) the item specifies, against the actual orchestrator - Run the command(s) the item specifies, against the actual orchestrator
(you may need to `podman compose build orchestrator-backend && (you may need to `podman compose build orchestrator-backend &&
podman compose up -d orchestrator-backend` first) and the actual 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. - Observe the result with your own eyes.
- Tick the box ONLY if the observation matches the expectation. - Tick the box ONLY if the observation matches the expectation.
- If it doesn't match: do not tick. Return to the plan, identify which - 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`. **Tech Stack:** Go (orchestrator backend + ninja CLI), Connect RPC over HTTP, Postgres + sqlc + goose, klauspost/compress/zstd, stdlib `archive/tar`.
**Repos involved:** **Repos involved:**
- `~/src/orchestrator` (backend module at `backend/`) - `~/src/blockninja/orchestrator` (backend module at `backend/`)
- `~/src/core` (ninja CLI at `cmd/ninja/`, SDK at `plugin/`) - `~/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. 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 ## 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.go` — pure helpers: open tar.zst, walk to `plugin.mod`, enforce size caps.
- Create: `internal/registry/archive/archive_test.go` - Create: `internal/registry/archive/archive_test.go`
- Create: `internal/registry/api/category.go``ListCategories` handler. - 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: `internal/db/*.sql.go` via `make sqlc`.
- Auto-regen: `sql/schema.sql` via `make schema`. - 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.go` — pure helper to build `tar.zst` from `git archive HEAD`.
- Create: `cmd/ninja/internal/archive/archive_test.go` - Create: `cmd/ninja/internal/archive/archive_test.go`
- Modify: `proto/orchestrator/v1/plugin_registry.proto` — mirror orchestrator's proto changes. - 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 ## Task 1: [core] Add klauspost/compress dependency
**Files:** **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** - [ ] **Step 1: Fetch the dep**
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
go get github.com/klauspost/compress/zstd@latest go get github.com/klauspost/compress/zstd@latest
go mod tidy 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 ## Task 2: [orch] Add klauspost/compress dependency
**Files:** **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** - [ ] **Step 1: Fetch the dep**
```bash ```bash
cd ~/src/orchestrator/backend cd ~/src/blockninja/orchestrator/backend
go get github.com/klauspost/compress/zstd@latest go get github.com/klauspost/compress/zstd@latest
go mod tidy 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. `cmd/ninja/internal/archive/` so the CLI can use it but nothing else.
**Files:** **Files:**
- Create: `~/src/core/cmd/ninja/internal/archive/archive.go` - Create: `~/src/blockninja/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_test.go`
- [ ] **Step 1: Write the failing test** - [ ] **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 ```go
package archive package archive
@ -214,14 +214,14 @@ func keys(m map[string]string) []string {
- [ ] **Step 2: Run test to verify it fails** - [ ] **Step 2: Run test to verify it fails**
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
go test ./cmd/ninja/internal/archive/... go test ./cmd/ninja/internal/archive/...
``` ```
Expected: FAIL — package doesn't exist yet. Expected: FAIL — package doesn't exist yet.
- [ ] **Step 3: Implement** - [ ] **Step 3: Implement**
`~/src/core/cmd/ninja/internal/archive/archive.go`: `~/src/blockninja/core/cmd/ninja/internal/archive/archive.go`:
```go ```go
package archive package archive
@ -288,12 +288,12 @@ decompresses, walks the tar, extracts `plugin.mod`, and returns parsed
contents. contents.
**Files:** **Files:**
- Create: `~/src/orchestrator/backend/internal/registry/archive/archive.go` - Create: `~/src/blockninja/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_test.go`
- [ ] **Step 1: Write the failing test** - [ ] **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 ```go
package archive package archive
@ -374,14 +374,14 @@ func TestOpenAndValidate_RejectsDecompressionBomb(t *testing.T) {
- [ ] **Step 2: Run test to verify failure** - [ ] **Step 2: Run test to verify failure**
```bash ```bash
cd ~/src/orchestrator/backend cd ~/src/blockninja/orchestrator/backend
go test ./internal/registry/archive/... go test ./internal/registry/archive/...
``` ```
Expected: FAIL — package doesn't exist. Expected: FAIL — package doesn't exist.
- [ ] **Step 3: Implement** - [ ] **Step 3: Implement**
`~/src/orchestrator/backend/internal/registry/archive/archive.go`: `~/src/blockninja/orchestrator/backend/internal/registry/archive/archive.go`:
```go ```go
package archive 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. `registry_versions`. These are not used after the publish flow change.
**Files:** **Files:**
- Create: `~/src/orchestrator/backend/sql/migrations/00055_drop_publish_git_fields.sql` - Create: `~/src/blockninja/orchestrator/backend/sql/migrations/00055_drop_publish_git_fields.sql`
- Modify: `~/src/orchestrator/backend/sql/queries/registry_versions.sql` - Modify: `~/src/blockninja/orchestrator/backend/sql/queries/registry_versions.sql`
- Modify: `~/src/orchestrator/backend/sql/schema.sql` (auto via `make schema`) - Modify: `~/src/blockninja/orchestrator/backend/sql/schema.sql` (auto via `make schema`)
- Regen: `~/src/orchestrator/backend/internal/db/*.sql.go` (auto via `make sqlc`) - Regen: `~/src/blockninja/orchestrator/backend/internal/db/*.sql.go` (auto via `make sqlc`)
- [ ] **Step 1: Write the migration** - [ ] **Step 1: Write the migration**
@ -521,7 +521,7 @@ Renumber the placeholders accordingly.
- [ ] **Step 3: Run the migration** - [ ] **Step 3: Run the migration**
```bash ```bash
cd ~/src/orchestrator/backend cd ~/src/blockninja/orchestrator/backend
make migrate make migrate
``` ```
Expected: migrations applied through `00055`. 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. `PublishVersionRequest` drops `git_ref` and gains `string version` + `bytes archive`. `CreatePluginResponse` drops `git_remote_url`. Apply in both proto files and regen.
**Files:** **Files:**
- Modify: `~/src/orchestrator/proto/orchestrator/v1/plugin_registry.proto` - Modify: `~/src/blockninja/orchestrator/proto/orchestrator/v1/plugin_registry.proto`
- Modify: `~/src/core/proto/orchestrator/v1/plugin_registry.proto` - Modify: `~/src/blockninja/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/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/core/internal/api/orchestrator/v1/plugin_registry.pb.go` + connect file (via `cd ~/src/core && 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** - [ ] **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 ```proto
message CreatePluginResponse { message CreatePluginResponse {
@ -609,12 +609,12 @@ message PublishVersionRequest {
- [ ] **Step 2: Mirror to core proto** - [ ] **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** - [ ] **Step 3: Regen orchestrator**
```bash ```bash
cd ~/src/orchestrator cd ~/src/blockninja/orchestrator
make -C backend proto make -C backend proto
``` ```
Expected: `backend/api/orchestrator/v1/plugin_registry.pb.go` regenerated. 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** - [ ] **Step 4: Regen core**
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
buf generate buf generate
``` ```
Expected: `internal/api/orchestrator/v1/plugin_registry.pb.go` regenerated. 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: In orchestrator:
```bash ```bash
cd ~/src/orchestrator cd ~/src/blockninja/orchestrator
git add proto/ backend/api/ frontend/src/lib/api/gen/ git add proto/ backend/api/ frontend/src/lib/api/gen/
git commit -m "feat(orch): PublishVersionRequest takes bytes archive; drop git_remote_url" git commit -m "feat(orch): PublishVersionRequest takes bytes archive; drop git_remote_url"
``` ```
In core: In core:
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
git add proto/ internal/api/ git add proto/ internal/api/
git commit -m "feat(core): mirror PublishVersionRequest archive bytes proto change" 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. the version. No git, no `repos`, no tag.
**Files:** **Files:**
- Modify: `~/src/orchestrator/backend/internal/registry/api/publish.go` - Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/publish.go`
- Modify: `~/src/orchestrator/backend/internal/registry/api/converters.go` - Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/converters.go`
- [ ] **Step 1: Replace publish.go contents** - [ ] **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 ```go
package api package api
@ -861,7 +861,7 @@ func splitRef(ref string) (scope, name string, ok bool) {
- [ ] **Step 2: Update `versionToProto` to drop git fields** - [ ] **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 ```go
func versionToProto(v db.RegistryVersion) *orchestratorv1.Version { 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** - [ ] **Step 3: Verify build**
```bash ```bash
cd ~/src/orchestrator/backend cd ~/src/blockninja/orchestrator/backend
go build ./... go build ./...
``` ```
Expected: clean (Task 5's `git_commit`/`git_tag` references now resolved by the new converter). 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 ## Task 8: [orch] Drop `git_remote_url` and update `CreatePlugin` handler
**Files:** **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** - [ ] **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 ## Task 9: [orch] Delete `internal/registry/git/`, wiring + config cleanup
**Files:** **Files:**
- Delete: `~/src/orchestrator/backend/internal/registry/git/` (entire directory) - Delete: `~/src/blockninja/orchestrator/backend/internal/registry/git/` (entire directory)
- Modify: `~/src/orchestrator/backend/internal/server/registry_wiring.go` - Modify: `~/src/blockninja/orchestrator/backend/internal/server/registry_wiring.go`
- Modify: `~/src/orchestrator/backend/internal/config/config.go` - Modify: `~/src/blockninja/orchestrator/backend/internal/config/config.go`
- [ ] **Step 1: Delete the git package** - [ ] **Step 1: Delete the git package**
```bash ```bash
cd ~/src/orchestrator/backend cd ~/src/blockninja/orchestrator/backend
git rm -r internal/registry/git/ 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 ## Task 10: [core] Rewrite `publish` CLI command
**Files:** **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`** - [ ] **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 ```go
func newPluginPublishCmd() *cobra.Command { func newPluginPublishCmd() *cobra.Command {
@ -1238,7 +1238,7 @@ At the top of `plugin.go`, add to the imports:
- [ ] **Step 3: Verify build** - [ ] **Step 3: Verify build**
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
go build ./... go build ./...
``` ```
Expected: clean. 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) ## Task 11: [core] Rewrite `init` CLI command (auto-commit, no remote)
**Files:** **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** - [ ] **Step 1: Replace the git-repo block**
@ -1333,7 +1333,7 @@ func autoCommitPluginMod() error {
- [ ] **Step 3: Verify build** - [ ] **Step 3: Verify build**
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
go build ./... go build ./...
``` ```
Expected: clean. Expected: clean.
@ -1360,7 +1360,7 @@ This is verification only — no commit.
- [ ] **Step 1: Restart the orchestrator** - [ ] **Step 1: Restart the orchestrator**
```bash ```bash
cd ~/src/orchestrator cd ~/src/blockninja/orchestrator
podman compose build orchestrator-backend podman compose build orchestrator-backend
podman compose up -d 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` ## Task 13: [core] Add `Kind` and `Categories` to `ModFile` + update `writeMod`
**Files:** **Files:**
- Modify: `~/src/core/plugin/mod.go` - Modify: `~/src/blockninja/core/plugin/mod.go`
- Modify: `~/src/core/plugin/mod_test.go` - Modify: `~/src/blockninja/core/plugin/mod_test.go`
- Modify: `~/src/core/cmd/ninja/cmd/plugin.go` (the `writeMod` helper) - Modify: `~/src/blockninja/core/cmd/ninja/cmd/plugin.go` (the `writeMod` helper)
- [ ] **Step 1: Add the new test cases** - [ ] **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 ```go
func TestParseModFull_KindAndCategories(t *testing.T) { func TestParseModFull_KindAndCategories(t *testing.T) {
@ -1465,14 +1465,14 @@ version = "0.1.0"
- [ ] **Step 2: Run tests to verify failure** - [ ] **Step 2: Run tests to verify failure**
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
go test ./plugin/... go test ./plugin/...
``` ```
Expected: FAIL — `Kind`/`Categories` fields don't exist yet. Expected: FAIL — `Kind`/`Categories` fields don't exist yet.
- [ ] **Step 3: Add fields to `ModPlugin`** - [ ] **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 ```go
type ModPlugin struct { type ModPlugin struct {
@ -1493,7 +1493,7 @@ Expected: PASS.
- [ ] **Step 5: Update `writeMod` to emit new fields** - [ ] **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 ```go
func writeMod(path string, m *core.ModFile) error { 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 ## Task 14: [orch] Migration — add `kind` to registry_plugins + new `registry_categories` table
**Files:** **Files:**
- Create: `~/src/orchestrator/backend/sql/migrations/00056_plugin_kind_and_categories.sql` - Create: `~/src/blockninja/orchestrator/backend/sql/migrations/00056_plugin_kind_and_categories.sql`
- Create: `~/src/orchestrator/backend/sql/queries/registry_categories.sql` - Create: `~/src/blockninja/orchestrator/backend/sql/queries/registry_categories.sql`
- Modify: `~/src/orchestrator/backend/sql/queries/registry_plugins.sql` (add kind handling) - Modify: `~/src/blockninja/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` - Auto-regen: `~/src/blockninja/orchestrator/backend/sql/schema.sql` and `~/src/blockninja/orchestrator/backend/internal/db/*.sql.go`
- [ ] **Step 1: Write the migration** - [ ] **Step 1: Write the migration**
@ -1633,7 +1633,7 @@ new optional params.)
- [ ] **Step 4: Run the migration** - [ ] **Step 4: Run the migration**
```bash ```bash
cd ~/src/orchestrator/backend cd ~/src/blockninja/orchestrator/backend
make migrate make migrate
``` ```
Expected: applied through `00056`. 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 ## Task 15: Proto change — `Plugin.kind`, request fields, `ListCategories` RPC
**Files:** **Files:**
- Modify: `~/src/orchestrator/proto/orchestrator/v1/plugin_registry.proto` - Modify: `~/src/blockninja/orchestrator/proto/orchestrator/v1/plugin_registry.proto`
- Modify: `~/src/core/proto/orchestrator/v1/plugin_registry.proto` - Modify: `~/src/blockninja/core/proto/orchestrator/v1/plugin_registry.proto`
- Regen on both repos. - Regen on both repos.
- [ ] **Step 1: Edit orchestrator proto — `Plugin` gains `kind`** - [ ] **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** - [ ] **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** - [ ] **Step 6: Regen orchestrator**
```bash ```bash
cd ~/src/orchestrator cd ~/src/blockninja/orchestrator
make -C backend proto make -C backend proto
``` ```
- [ ] **Step 7: Regen core** - [ ] **Step 7: Regen core**
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
buf generate buf generate
``` ```
@ -1762,14 +1762,14 @@ buf generate
orchestrator: orchestrator:
```bash ```bash
cd ~/src/orchestrator cd ~/src/blockninja/orchestrator
git add proto/ backend/api/ frontend/src/lib/api/gen/ git add proto/ backend/api/ frontend/src/lib/api/gen/
git commit -m "feat(orch): proto adds Plugin.kind, ListCategories RPC, filter args" git commit -m "feat(orch): proto adds Plugin.kind, ListCategories RPC, filter args"
``` ```
core: core:
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
git add proto/ internal/api/ git add proto/ internal/api/
git commit -m "feat(core): mirror Plugin.kind + ListCategories proto regen" 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 ## Task 16: [orch] Converters + CreatePlugin + helper for category validation
**Files:** **Files:**
- Modify: `~/src/orchestrator/backend/internal/registry/api/converters.go` - Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/converters.go`
- Modify: `~/src/orchestrator/backend/internal/registry/api/plugin.go` - Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/plugin.go`
- [ ] **Step 1: Update converters to include `Kind`** - [ ] **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 ## Task 17: [orch] Add `ListCategories` handler
**Files:** **Files:**
- Create: `~/src/orchestrator/backend/internal/registry/api/category.go` - Create: `~/src/blockninja/orchestrator/backend/internal/registry/api/category.go`
- Modify: `~/src/orchestrator/backend/internal/registry/api/plugin.go` (add method to `PluginHandler`) - Modify: `~/src/blockninja/orchestrator/backend/internal/registry/api/plugin.go` (add method to `PluginHandler`)
- [ ] **Step 1: Add the handler method** - [ ] **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. plugin across versions.
**Files:** **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** - [ ] **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 ## Task 19: [core] CLI `init` prompts for kind and categories
**Files:** **Files:**
- Modify: `~/src/core/cmd/ninja/cmd/plugin.go` - Modify: `~/src/blockninja/core/cmd/ninja/cmd/plugin.go`
- [ ] **Step 1: Add a `promptKind` helper** - [ ] **Step 1: Add a `promptKind` helper**
@ -2195,7 +2195,7 @@ if err := upsertPluginMod(scope, name, kind, cats); err != nil {
- [ ] **Step 4: Verify build** - [ ] **Step 4: Verify build**
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
go build ./... go build ./...
``` ```
Expected: clean. Expected: clean.
@ -2218,7 +2218,7 @@ git commit -m "feat(cli): init prompts for kind and categories"
- [ ] **Step 1: Restart orchestrator** - [ ] **Step 1: Restart orchestrator**
```bash ```bash
cd ~/src/orchestrator cd ~/src/blockninja/orchestrator
podman compose build orchestrator-backend podman compose build orchestrator-backend
podman compose up -d 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 ### 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: - [ ] **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. - [ ] **Step 2:** Build and reinstall.
```bash ```bash
cd ~/src/core cd ~/src/blockninja/core
go build ./... && go install ./cmd/ninja go build ./... && go install ./cmd/ninja
``` ```