---
name: rename-sql-object
description: TRIGGER when user asks to rename the object type or struct used by a SQL CRUD microservice.
---

**CRITICAL**: Read and analyze this microservice before starting. Do NOT explore or analyze other microservices unless explicitly instructed to do so. The instructions in this skill are self-contained to this microservice.

**IMPORTANT**: `MyNoun`, `MyNounKey`, `mynoun`, and `mynounapi` are placeholders for the actual object, its key, directory, and API package of the microservice.

## Workflow

Copy this checklist and track your progress:

```
Renaming the object:
- [ ] Step 1: Read Local CLAUDE.md File
- [ ] Step 2: Update Type Definitions
- [ ] Step 3: Update References
- [ ] Step 4: Alias the Old Type Definitions
- [ ] Step 5: Housekeeping
```

#### Step 1: Read Local `CLAUDE.md` File

Read the local `CLAUDE.md` file in the microservice's directory. It contains microservice-specific instructions that should take precedence over global instructions.

#### Step 2: Update Type Definitions

Find the struct definition of `MyNounKey` in `mynounapi/objectkey.go` and rename it to the new name `MyNewNounKey`.

Find the struct definition of `MyNoun` in `mynounapi/object.go` and rename it to the new name `MyNewNoun`.

#### Step 3: Update References

Update only the hand-written files; the generated files (`mynounapi/client.go`, `intermediate.go`, `mock.go`, `mock_test.go`, `manifest.yaml`) are regenerated from `definition.go` in Step 5.

Search the hand-written files in `mynounapi/` (`definition.go` and the sibling type files) for references to `MyNounKey` and `MyNoun`, and update to `MyNewNounKey` and `MyNewNoun`. In `definition.go` this covers the In/Out struct fields that carry the object/key types (e.g. `Obj *MyNoun`, `ObjKey MyNounKey`).

Search the microservice's other hand-written files (`service.go`, `service_test.go`) for `mynounapi.MyNounKey` and `mynounapi.MyNoun`, and update them.

Search other microservices that consume this type for `mynounapi.MyNounKey` and `mynounapi.MyNoun` and update their hand-written `definition.go`/`service.go`; their generated files are regenerated by their own housekeeping. The aliases added in Step 4 keep everything compiling in the meantime.

#### Step 4: Alias the Old Type Definitions

This step intentionally reintroduces the old type names as deprecated aliases for backwards compatibility.

Add a type alias of the old object key to the new object key in `mynounapi/objectkey.go`

```go
// MyNounKey is an alias to MyNewNounKey.
//
// Deprecated: Use [MyNewNounKey]
type MyNounKey = MyNewNounKey
```

Add a type alias of the old object to the new object in `mynounapi/object.go`

```go
// MyNoun is an alias to MyNewNoun.
//
// Deprecated: Use [MyNewNoun]
type MyNoun = MyNewNoun
```

#### Step 5: Housekeeping

Follow the `housekeeping` skill. The renamed object type is referenced by `definition.go`, so the boilerplate regeneration (genservice) re-emits `client.go`/`intermediate.go`/`mock.go`/`mock_test.go`/`manifest.yaml` with the new name.
