AlexStocks commented on code in PR #3565:
URL: https://github.com/apache/dubbo-go/pull/3565#discussion_r3702159638


##########
.workbuddy/skills/dubbogo/SKILL.md:
##########
@@ -0,0 +1,136 @@
+---
+name: dubbogo-onboarding
+description: "Dubbo-go 
新手/初学者上手助手。帮助刚接触本仓库的用户快速理解项目结构、构建测试方式、扩展(SPI)机制,并指导完成『添加 filter / protocol / 
registry / 跑通测试』等常见任务。当用户提到 \"dubbogo 怎么上手\"、\"dubbo-go 入门\"、\"新人 
onboarding\"、\"项目结构\"、\"怎么跑起来\"、\"怎么测试\"、\"怎么加一个 filter/protocol\"、\"extension 
机制\"、\"explore dubbo-go\"、\"dubbogo architecture\" 时使用。触发前先确认用户是否在本仓库根目录。"
+display_name: "dubbogo-onboarding"
+display_name_en: "dubbogo-onboarding"
+visibility: "public"
+---
+
+# Dubbo-go 上手 Skill(面向初学者 + AI Coding Agent)
+
+> 目标:让第一次接触 apache/dubbo-go 的人,能在 AI 编码助手的引导下,5 分钟内看懂项目骨架,30 
分钟内跑通构建与单测,并知道「加一个新能力」该动哪些文件。
+
+---
+
+## 何时触发(Trigger)
+
+- 用户刚 clone 本仓库,想了解「这是什么、怎么组织、怎么跑」
+- 用户问:怎么 build / test / 加一个 filter / 加一个 protocol / 看懂 extension 机制
+- 关键词:dubbogo 入门、onboarding、上手、项目结构、架构、怎么跑、怎么测、添加filter、添加protocol、SPI、扩展机制
+
+**前置确认**:先确认当前工作目录是 dubbo-go 仓库根(`go.mod` 的 module 为 
`dubbo.apache.org/dubbo-go/v3`)。若不在,提示用户切到仓库根再继续。
+
+---
+
+## 项目地图(Project Map)
+
+顶层目录 → 职责(让 agent 先建立全局认知):
+
+| 目录 | 职责 |
+|------|------|
+| `dubbo.go` / `options.go` / `instance_options_init.go` / `loader.go` | 
应用入口、配置项、配置加载 |
+| `client/` | 客户端调用(reference 配置与调用链路) |
+| `cluster/` | 集群治理:路由(router)、负载均衡(loadbalance)、重试、容错 |
+| `common/` | 公共能力与**扩展注册表 `common/extension`**(SPI 核心) |
+| `config_center/` | 配置中心(nacos/zk/apollo…)适配 |
+| `filter/` | 过滤器链(tracing/metrics/accesslog/限流…) |
+| `global/` | 全局配置结构定义 |
+| `logger/` | 日志抽象与实现 |
+| `metadata/` | 元数据中心 |
+| `metrics/` / `otel/` | 可观测性(Prometheus / OpenTelemetry) |
+| `protocol/` | 协议层(dubbo/triple/grpc…) |
+| `proxy/` | 代理生成(invoker 包装) |
+| `registry/` | 注册中心(zookeeper/nacos/etcd…) |
+| `remoting/` | 底层通信(getty/exchange) |
+| `graceful_shutdown/` | 优雅下线 |
+| `imports/` | **聚合所有扩展的 `init()` 注册**(让扩展在二进制里生效) |
+| `doc/` | 架构图(PNG)与说明 |
+| `tools/` | 仓库内部工具(如 variadic rpc 检查) |
+
+---
+
+## 环境与构建(Environment & Build)
+
+- **Go 版本**:`go.mod` 要求 `go 1.25.0`。构建请用 `GOTOOLCHAIN=go1.25.0+auto`(Makefile 
已内置),避免用错版本。
+- **常用命令**(来自 `Makefile`):
+  - 跑单测:`make test`(等价 `GOTOOLCHAIN=go1.25.0+auto go test ./...`)
+  - 竞态测试(PR 必过):`make test-race`

Review Comment:
   [P1] 不要引用仓库中不存在的验证入口
   当前 `Makefile` 没有 `test-race` 和 `vulncheck` target,仓库中也不存在后文引用的 
`CODE_REVIEW_GUIDE.md`。Agent 按这份 onboarding 
执行会直接在验证阶段失败,且无法找到声称的评审规范。建议把竞态验证改为实际存在的 `GOTOOLCHAIN=go1.25.0+auto go test 
-race ./<changed-package>`,删除或替换漏洞扫描命令,并只链接当前仓库真实存在的 
`CONTRIBUTING.md`、`Makefile` 和 workflow。



##########
.workbuddy/skills/dubbogo/SKILL.md:
##########
@@ -0,0 +1,136 @@
+---
+name: dubbogo-onboarding
+description: "Dubbo-go 
新手/初学者上手助手。帮助刚接触本仓库的用户快速理解项目结构、构建测试方式、扩展(SPI)机制,并指导完成『添加 filter / protocol / 
registry / 跑通测试』等常见任务。当用户提到 \"dubbogo 怎么上手\"、\"dubbo-go 入门\"、\"新人 
onboarding\"、\"项目结构\"、\"怎么跑起来\"、\"怎么测试\"、\"怎么加一个 filter/protocol\"、\"extension 
机制\"、\"explore dubbo-go\"、\"dubbogo architecture\" 时使用。触发前先确认用户是否在本仓库根目录。"
+display_name: "dubbogo-onboarding"
+display_name_en: "dubbogo-onboarding"
+visibility: "public"
+---
+
+# Dubbo-go 上手 Skill(面向初学者 + AI Coding Agent)
+
+> 目标:让第一次接触 apache/dubbo-go 的人,能在 AI 编码助手的引导下,5 分钟内看懂项目骨架,30 
分钟内跑通构建与单测,并知道「加一个新能力」该动哪些文件。
+
+---
+
+## 何时触发(Trigger)
+
+- 用户刚 clone 本仓库,想了解「这是什么、怎么组织、怎么跑」
+- 用户问:怎么 build / test / 加一个 filter / 加一个 protocol / 看懂 extension 机制
+- 关键词:dubbogo 入门、onboarding、上手、项目结构、架构、怎么跑、怎么测、添加filter、添加protocol、SPI、扩展机制
+
+**前置确认**:先确认当前工作目录是 dubbo-go 仓库根(`go.mod` 的 module 为 
`dubbo.apache.org/dubbo-go/v3`)。若不在,提示用户切到仓库根再继续。
+
+---
+
+## 项目地图(Project Map)
+
+顶层目录 → 职责(让 agent 先建立全局认知):
+
+| 目录 | 职责 |
+|------|------|
+| `dubbo.go` / `options.go` / `instance_options_init.go` / `loader.go` | 
应用入口、配置项、配置加载 |
+| `client/` | 客户端调用(reference 配置与调用链路) |
+| `cluster/` | 集群治理:路由(router)、负载均衡(loadbalance)、重试、容错 |
+| `common/` | 公共能力与**扩展注册表 `common/extension`**(SPI 核心) |
+| `config_center/` | 配置中心(nacos/zk/apollo…)适配 |
+| `filter/` | 过滤器链(tracing/metrics/accesslog/限流…) |
+| `global/` | 全局配置结构定义 |
+| `logger/` | 日志抽象与实现 |
+| `metadata/` | 元数据中心 |
+| `metrics/` / `otel/` | 可观测性(Prometheus / OpenTelemetry) |
+| `protocol/` | 协议层(dubbo/triple/grpc…) |
+| `proxy/` | 代理生成(invoker 包装) |
+| `registry/` | 注册中心(zookeeper/nacos/etcd…) |
+| `remoting/` | 底层通信(getty/exchange) |
+| `graceful_shutdown/` | 优雅下线 |
+| `imports/` | **聚合所有扩展的 `init()` 注册**(让扩展在二进制里生效) |
+| `doc/` | 架构图(PNG)与说明 |
+| `tools/` | 仓库内部工具(如 variadic rpc 检查) |
+
+---
+
+## 环境与构建(Environment & Build)
+
+- **Go 版本**:`go.mod` 要求 `go 1.25.0`。构建请用 `GOTOOLCHAIN=go1.25.0+auto`(Makefile 
已内置),避免用错版本。
+- **常用命令**(来自 `Makefile`):
+  - 跑单测:`make test`(等价 `GOTOOLCHAIN=go1.25.0+auto go test ./...`)
+  - 竞态测试(PR 必过):`make test-race`
+  - 静态检查:`make lint`(含 `go vet` + `golangci-lint run ./... --timeout=10m`)
+  - 格式化:`make fmt`,CI 用 `make check-fmt` 校验
+  - 集成测试:`integrate_test.sh`
+  - 依赖漏洞扫描:`make vulncheck`
+- **永远先 `go build ./...` 或 `make test` 验证**再告知用户「改好了」。
+
+---
+
+## 核心入口(Core Entry Points)— 给 agent 的阅读顺序
+
+1. `dubbo.go`:应用/框架启动与配置装配入口
+2. `options.go` + `instance_options_init.go`:可配置项与默认值
+3. `loader.go`:配置加载逻辑
+4. `common/extension/`:全局扩展注册表(理解「实现如何被找到」)
+5. `imports/`:所有扩展的 init 注册汇总(理解「实现如何被启用」)
+
+---
+
+## 扩展机制(Extension / SPI)— 最关键的概念
+
+dubbo-go 用**全局注册表 + `init()` 自注册**做依赖注入,而不是在调用点直接 new:
+
+1. 各模块在 `init()` 里调用 `common/extension.SetXxx(name, constructor)` 注册实现。
+2. 运行时通过 `common/extension.GetXxx(name)` 按名取出。
+3. `imports/` 包空导入(blank import)这些模块,确保它们的 `init()` 被执行——**不 import,扩展就不生效**。
+
+**新增一个扩展的标准三步**(agent 指导用户时照此):
+1. 实现对应接口(如 `filter.Filter`、`protocol.Protocol`、`registry.Registry`)。
+2. 在自己的包里写 `func init() { extension.SetXxx("my-name", newMyImpl) }`。
+3. 在 `imports/` 下增加对该包的引用(blank import),否则注册不会发生。
+
+> ⚠️ 常见坑:只写了实现和 `init()` 却在 `imports/` 里忘了引用 → 运行时不报错但扩展「不存在」。
+
+---
+
+## 常见任务(Common Tasks)— 给 agent 的执行步骤
+
+### 任务 A:加一个 Filter
+1. `Grep` 现有 filter(如 `filter/`(目录下 `accesslog`、`tps` 等)理解接口签名 
`filter.Filter`)。
+2. 在 `filter/` 下新建子包,实现 `filter.Filter` 的 `Invoke`/`OnResponse`。
+3. `init()` 中 `extension.SetFilter("my-filter", newMyFilter)`。
+4. 在 `imports/` 增加 blank import。
+5. `make test-race` 验证。
+
+### 任务 B:加一个 Protocol
+1. 参考 `protocol/dubbo/` 或 `protocol/tri/` 的实现。

Review Comment:
   [P1] 使用仓库中的真实 Protocol 目录和接口
   这里的 `protocol/tri/` 不存在,实际实现目录是 `protocol/triple/`;注册表接收的接口也定义在 
`protocol/base.Protocol`,`extension.SetProtocol` 的 creator 签名是 `func() 
base.Protocol`。按当前步骤会把新贡献者引到不存在的路径,并生成无法对照真实接口的实现。建议改为读取 
`protocol/base/base_protocol.go`,参考 `protocol/dubbo/` 或 `protocol/triple/`,再按 
`common/extension/protocol.go` 的签名注册。



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to