Bug Report
Module
console — SkillRemoteHandler
Description
SkillRemoteHandler#createDraft has a parameter mismatch compared to the correct inner (local) implementation SkillInnerHandler#createDraft.
The remote handler calls the 4-parameter overload of SkillMaintainerService#createDraft, passing form.getSkillCard() into the targetVersion argument slot. The 4-parameter overload then delegates to the 5-parameter version with skillCard = null, so:
targetVersion receives the skill card JSON string — wrong value.
skillCard is silently set to null — the actual skill content is lost entirely.
Code Comparison
SkillMaintainerService#createDraft full signature (5-parameter)
String createDraft(String namespaceId, String skillName, String basedOnVersion,
String targetVersion, String skillCard) throws NacosException;
4-parameter overload (delegates with skillCard = null)
default String createDraft(String namespaceId, String skillName, String basedOnVersion, String targetVersion) {
return createDraft(namespaceId, skillName, basedOnVersion, targetVersion, null); // skillCard forced to null
}
SkillInnerHandler#createDraft (correct — calls SkillOperationService which takes a Skill object)
return skillOperationService.createDraft(
form.getNamespaceId(), form.getSkillName(), form.getBasedOnVersion(),
form.getTargetVersion(), form.getResolvedInitialSkillOrNull()); // Skill object
SkillRemoteHandler#createDraft (buggy)
return clientHolder.getAiMaintainerService().skill().createDraft(
form.getNamespaceId(), form.getSkillName(),
form.getBasedOnVersion(), form.getSkillCard()); // ❌ skillCard lands in targetVersion slot; skillCard becomes null
Impact
When running in cluster/remote mode, calling createDraft via the Console will:
- Set
targetVersion to the skill card JSON string (wrong value).
- Send
skillCard = null to the server, losing the skill content entirely.
Expected Fix
SkillMaintainerService#createDraft takes String skillCard as the 5th parameter (not a Skill object like SkillOperationService). The correct remote call is:
return clientHolder.getAiMaintainerService().skill().createDraft(
form.getNamespaceId(), form.getSkillName(), form.getBasedOnVersion(),
form.getTargetVersion(), form.getSkillCard()); // ✅ correct parameter order
Environment
- Branch:
develop
- File:
console/src/main/java/com/alibaba/nacos/console/handler/impl/remote/ai/SkillRemoteHandler.java
Bug Report
Module
console—SkillRemoteHandlerDescription
SkillRemoteHandler#createDrafthas a parameter mismatch compared to the correct inner (local) implementationSkillInnerHandler#createDraft.The remote handler calls the 4-parameter overload of
SkillMaintainerService#createDraft, passingform.getSkillCard()into thetargetVersionargument slot. The 4-parameter overload then delegates to the 5-parameter version withskillCard = null, so:targetVersionreceives the skill card JSON string — wrong value.skillCardis silently set tonull— the actual skill content is lost entirely.Code Comparison
SkillMaintainerService#createDraftfull signature (5-parameter)4-parameter overload (delegates with
skillCard = null)SkillInnerHandler#createDraft(correct — callsSkillOperationServicewhich takes aSkillobject)SkillRemoteHandler#createDraft(buggy)Impact
When running in cluster/remote mode, calling
createDraftvia the Console will:targetVersionto the skill card JSON string (wrong value).skillCard = nullto the server, losing the skill content entirely.Expected Fix
SkillMaintainerService#createDrafttakesString skillCardas the 5th parameter (not aSkillobject likeSkillOperationService). The correct remote call is:Environment
developconsole/src/main/java/com/alibaba/nacos/console/handler/impl/remote/ai/SkillRemoteHandler.java