| name | remove-feature |
| description | TRIGGER when user asks to remove, delete, or drop an endpoint, config, metric, ticker, or event from a microservice. |
CRITICAL: Read and analyze this microservice before starting. Do NOT explore or analyze other microservices. The instructions in this skill are self-contained to this microservice.
CRITICAL: A feature lives by hand in myserviceapi/definition.go (its define.* var and In/Out structs), service.go (its handler), and service_test.go (its test). Remove it from those, then run cmd/genservice.
Workflow
Copy this checklist and track your progress:
Removing a feature of a microservice:
- [ ] Step 1: Remove the declaration from definition.go
- [ ] Step 2: Remove the handler from service.go
- [ ] Step 3: Remove the test from service_test.go
- [ ] Step 4: Remove unused custom types
- [ ] Step 5: Generate the boilerplate
- [ ] Step 6: Housekeeping
Search for MARKER: FeatureName within the microservice's directory to locate the feature's hand-written code. The markers in the generated files can be ignored - those files are regenerated in Step 5.
Step 1: Remove the Declaration from definition.go
Delete the feature's define.* var (the whole var FeatureName = define.X{ ... } block) and its In/Out struct types from myserviceapi/definition.go. These all carry // MARKER: FeatureName.
Step 2: Remove the Handler from service.go
Delete the feature's handler in service.go (carrying // MARKER: FeatureName):
- A function, web, task, inbound event, or ticker has a handler method.
- A workflow has a graph builder method.
- A callback config has an
OnChangedFeatureName method; an observable metric has an OnObserveFeatureName method.
- An outbound event, a non-callback config, and a non-observable metric have no handler in
service.go; also remove any call sites that trigger the event or record the metric.
Step 3: Remove the Test from service_test.go
Delete the feature's test function (e.g. TestMyService_FeatureName) from service_test.go.
Step 4: Remove Unused Custom Types
If the removed feature used non-primitive custom types defined in the myserviceapi directory, and those types are no longer used elsewhere by the microservice, remove their definitions.
Step 5: Generate the Boilerplate
From the microservice's directory, run the generator. It regenerates client.go, intermediate.go, mock.go, mock_test.go, and manifest.yaml without the removed feature.
go run github.com/microbus-io/fabric/cmd/genservice .
Then verify the microservice compiles with go vet ./... from the project root.
Step 6: Housekeeping
Follow the housekeeping skill.