Stats
Actions
Tags
How this skill is triggered — by the user, by Claude, or both
Slash command
/kepler-rules:kepler-rulesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
当用户要求遵守项目既有规范时,启用本技能并按本文件执行。
references/docs/kepler-utils/net.xuniversity.kepler.core.util.Arrays2.mdreferences/docs/kepler-utils/net.xuniversity.kepler.core.util.Assert.mdreferences/docs/kepler-utils/net.xuniversity.kepler.core.util.Collections3.mdreferences/docs/kepler-utils/net.xuniversity.kepler.core.util.EnhanceMap.mdreferences/docs/kepler-utils/net.xuniversity.kepler.core.util.Jacksons.mdreferences/docs/kepler-utils/net.xuniversity.kepler.core.util.MapBuilder.mdreferences/docs/kepler-utils/net.xuniversity.kepler.core.util.Maps2.mdreferences/docs/kepler-utils/net.xuniversity.kepler.core.util.Strings2.md当用户要求遵守项目既有规范时,启用本技能并按本文件执行。
import 导入,再使用类短名。仅允许在 import 语句中出现全路径。Request/Response 类;Request 到领域对象、领域对象到 Response 的转换统一在 Controller 层完成。kepler-parent:父 POM,统一依赖与插件版本管理。kepler-core:核心工具类与基础组件。kepler-support:通用支持模块。kepler-autoconfigure:自动配置模块。net.xuniversity.keplerconfig/controller/service/model/util/try-catch,交由全局异常处理器统一处理。net.xuniversity.kepler.core.KeplerException。@EnableFeignClients。VisibleClient#getCurrentVisibility() 进行数据权限过滤时,JPA 条件必须与 kepler-base 一致:
allVisible == true:不追加可见范围过滤条件。allVisible == false 且 workerIds 为空:返回 cb.disjunction()(空结果)。allVisible == false 且 workerIds 非空:追加 IN (workerIds) 过滤。workerIds 是否为空而忽略 allVisible,否则会把全量权限误判为无权限。VisibleClient 调用失败或 fallback 场景按 deny-all 处理:allVisible=false、workerIds=emptySet。Stream API。stream() 会显著降低可读性(如需额外 final 复制局部变量)时,可使用传统 for 循环。@Data。@Component、@Service、@Configuration、@Controller)优先使用构造器注入,并通过 @RequiredArgsConstructor 配合 final 字段实现。@Autowired。PascalCasecamelCaseUPPER_SNAKE_CASEimport 后使用短类名。TagEntity/TagResponse)或拆分职责消除冲突,不以全路径作为规避手段。@SpringBootConfiguration;非 Boot 场景可使用 @Configuration。@EnableConfigurationProperties 进行配置属性绑定。@Lazy 规避循环依赖。findAllByXxxfindByXxx@Query + JPQLnamespace 作为筛选条件:
ProxySQL 动态路由到目标租户库,不应在业务查询层重复追加 namespace 过滤。ResponseEntity<T>,不要直接返回实体对象。Request/Response 对象需配套 JSR303 与 SpringDoc 注解。Request/Response 与领域模型之间的转换,Service 层禁止直接暴露 Request/Response 类型。Request/Response 定义在 kepler-{name}-openfeign 模块。service 模块提供显式转换器(如 Function<Req, Entity> / Function<Entity, Resp>)。Request/Response 可定义在服务模块。Response 提供 from(entity) 工厂方法。Request 提供 toEntity() 转换方法(实例方法或接收参数的静态方法)。POST:创建(@Valid @RequestBody)PATCH:部分更新(通常 @PathVariable + @RequestBody)DELETE:删除(通常配合路径参数)src/main/resources/database/schema.sql 作为主迁移入口。kepler-{module}-service/src/main/resources/database/migration/。V{yyyy.MM.dd.NNN}__{description}.sql(示例:V2026.04.08.002__add_tag_table.sql)。out-of-order=false 时,低版本补录会导致迁移失败。IF EXISTS / IF NOT EXISTS),以提高跨环境重复执行安全性。CREATE TABLE 后必须补齐表与字段注释:
COMMENT ON TABLE table_name IS '表中文语义';COMMENT ON COLUMN table_name.column_name IS '字段中文语义';created_by(创建人)、created_at(创建时间)、updated_by(更新人)、updated_at(更新时间)。order、group、read)在 DDL 与注释中统一使用双引号,保持 PostgreSQL 兼容性。src/test/resources/database/schema.sql 仅用于测试初始化,不得作为生产库变更依据。2026.04.08.000。V2026.04.08.001__baseline_alignment.sql。被测类名 + Test(如 TagServiceTest、TagControllerTest)。lower_snake_case,推荐模式:should_{expected}_when_{condition}。test1、shouldWork 等弱语义命名。assertThat、assertThatThrownBy),异常分支必须断言异常类型与关键语义。@ExtendWith(MockitoExtension.class) + @Mock + @InjectMocks。@WebMvcTest + @AutoConfigureMockMvc(addFilters = false) + @MockitoBean。properties 统一管理。pom.xml 添加。<properties>
<java.version>21</java.version>
<spring-cloud.version>2025.0.0</spring-cloud.version>
<spring-cloud-alibaba.version>2023.0.3.3</spring-cloud-alibaba.version>
<spring-security.version>6.5.0</spring-security.version>
</properties>
spring-cloud-dependencies)进行版本对齐。maven-compiler-pluginmaven-javadoc-pluginmaven-source-pluginspring-boot-maven-plugincom.diffplug.spotless:spotless-maven-pluginsource/target = ${java.version})。<packaging>pom</packaging><packaging>jar</packaging>kepler-{model_name}-modelkepler-{model_name}-openfeignkepler-{model_name}-servicekepler-core 提供的内置工具类。net.xuniversity.kepler.support.spring.security.util.Contexts。Contexts.workerId() 获取当前登录用户工号。net.xuniversity.kepler.core.util.Arrays2net.xuniversity.kepler.core.util.Assertnet.xuniversity.kepler.core.util.Collections3net.xuniversity.kepler.core.util.EnhanceMapnet.xuniversity.kepler.core.util.Jacksonsnet.xuniversity.kepler.core.util.MapBuildernet.xuniversity.kepler.core.util.Maps2net.xuniversity.kepler.core.util.Strings2说明:
Jacksons 仅在当前类不受 Spring 管理时用于 JSON 序列化/反序列化。ObjectMapper,不要滥用 Jacksons。MapBuilder 用于构建可变 Map,语义类似 Guava ImmutableMap 的链式构建,但结果可变。为控制上下文长度,禁止一次性读取全部工具类文档。仅在“确定要使用某个工具类”时读取对应文档。
文档目录(相对本技能目录):
references/docs/kepler-utils按类名精确映射:
net.xuniversity.kepler.core.util.Arrays2
references/docs/kepler-utils/net.xuniversity.kepler.core.util.Arrays2.mdnet.xuniversity.kepler.core.util.Assert
references/docs/kepler-utils/net.xuniversity.kepler.core.util.Assert.mdnet.xuniversity.kepler.core.util.Collections3
references/docs/kepler-utils/net.xuniversity.kepler.core.util.Collections3.mdnet.xuniversity.kepler.core.util.EnhanceMap
references/docs/kepler-utils/net.xuniversity.kepler.core.util.EnhanceMap.mdnet.xuniversity.kepler.core.util.Jacksons
references/docs/kepler-utils/net.xuniversity.kepler.core.util.Jacksons.mdnet.xuniversity.kepler.core.util.MapBuilder
references/docs/kepler-utils/net.xuniversity.kepler.core.util.MapBuilder.mdnet.xuniversity.kepler.core.util.Maps2
references/docs/kepler-utils/net.xuniversity.kepler.core.util.Maps2.mdnet.xuniversity.kepler.core.util.Strings2
references/docs/kepler-utils/net.xuniversity.kepler.core.util.Strings2.mdCollections3 而非自写空值判断)。Assert 断言失败行为)。在产生代码前,按以下顺序进行自检:
在输出说明中,如使用了工具类,需明确写出已读取的对应文档路径(仅列实际读取项)。
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub xuniversity/plugins-marketplace --plugin kepler-rules