fix(skills): fix CI gate failures blocking PR #1506 merge
Fix pre-existing lint, typecheck, and security failures that were
blocking the PR from passing CI:
- Fix E501 line-too-long in session_service.py (remove erroneous
"sha256:" string prefix from dict comprehension on line 268)
- Fix W293 trailing whitespace in tool.py line 249
- Fix typecheck error in session_service.py: data.get("checksum")
can return None, remove invalid string concatenation
- Fix typecheck error in schema.py: add explicit dict[str, Any]
type annotation for wrapper variable to resolve str|None issue
- Fix vulture false positive: add "destination" Protocol parameter
to vulture_whitelist.py
- Fix @tdd_issue/@tdd_issue_1472 tag placement in skill_schema.feature
(remove blank line between tags and scenario)
- Add @tdd_issue/@tdd_issue_1472 tags to all new wrapper key scenarios
- Add Robot integration test for spec-compliant skill: wrapper YAML
This commit is contained in:
@@ -316,7 +316,6 @@ Feature: Skill YAML schema validation
|
||||
# ────────────────────────────────────────────────────────────
|
||||
@tdd_issue
|
||||
@tdd_issue_1472
|
||||
|
||||
Scenario: Load spec-compliant YAML with skill: wrapper key
|
||||
Given a spec-compliant skill YAML with skill: wrapper key
|
||||
When I validate the skill schema
|
||||
@@ -324,36 +323,48 @@ Feature: Skill YAML schema validation
|
||||
And the skill config name should be "local/wrapped-skill"
|
||||
And the skill config should have 1 tools
|
||||
|
||||
@tdd_issue
|
||||
@tdd_issue_1472
|
||||
Scenario: Load spec-compliant YAML with cleveragents: header and skill: wrapper
|
||||
Given a spec-compliant skill YAML with cleveragents: header and skill: wrapper
|
||||
When I validate the skill schema
|
||||
Then the skill schema validation should succeed
|
||||
And the skill config name should be "local/wrapped-with-meta"
|
||||
|
||||
@tdd_issue
|
||||
@tdd_issue_1472
|
||||
Scenario: skill: wrapper key with None value raises ValueError
|
||||
Given a skill YAML with skill: wrapper key with None value
|
||||
When I validate the skill schema expecting failure
|
||||
Then the skill schema validation should fail
|
||||
And the skill schema error should mention "empty"
|
||||
|
||||
@tdd_issue
|
||||
@tdd_issue_1472
|
||||
Scenario: skill: wrapper key with non-dict value raises ValueError
|
||||
Given a skill YAML with skill: wrapper key and string value
|
||||
When I validate the skill schema expecting failure
|
||||
Then the skill schema validation should fail
|
||||
And the skill schema error should mention "mapping"
|
||||
|
||||
@tdd_issue
|
||||
@tdd_issue_1472
|
||||
Scenario: skill: wrapper key with list value raises ValueError
|
||||
Given a skill YAML with skill: wrapper key and list value
|
||||
When I validate the skill schema expecting failure
|
||||
Then the skill schema validation should fail
|
||||
And the skill schema error should mention "mapping"
|
||||
|
||||
@tdd_issue
|
||||
@tdd_issue_1472
|
||||
Scenario: Flat YAML without wrapper key still works (backward compatibility)
|
||||
Given a skill YAML string with only the name field
|
||||
When I validate the skill schema
|
||||
Then the skill schema validation should succeed
|
||||
And the skill config name should be "local/empty-skill"
|
||||
|
||||
@tdd_issue
|
||||
@tdd_issue_1472
|
||||
Scenario: cleveragents: header alone (flat format with metadata, no skill: wrapper)
|
||||
Given a skill YAML with cleveragents: header and flat format
|
||||
When I validate the skill schema
|
||||
|
||||
@@ -49,3 +49,15 @@ Reject Invalid Skill YAML
|
||||
Should Be Equal As Integers ${result.rc} 0
|
||||
Should Contain ${result.stdout} skill-schema-expected-fail
|
||||
|
||||
Validate Spec-Compliant Skill YAML With skill: Wrapper Key
|
||||
[Tags] tdd_issue tdd_issue_1472
|
||||
[Documentation] Parse a spec-compliant YAML with cleveragents: header and skill: wrapper key
|
||||
${wrapped_yaml}= Set Variable ${TEMPDIR}${/}wrapped_skill.yaml
|
||||
${yaml_content}= Set Variable cleveragents:\n version: "1.0"\nskill:\n name: local/wrapped-skill\n description: "A wrapped skill"\n
|
||||
Create File ${wrapped_yaml} ${yaml_content}
|
||||
${result}= Run Process ${PYTHON} ${HELPER} validate ${wrapped_yaml} cwd=${WORKSPACE}
|
||||
Log ${result.stdout}
|
||||
Log ${result.stderr}
|
||||
Should Be Equal As Integers ${result.rc} 0
|
||||
Should Contain ${result.stdout} skill-schema-ok
|
||||
|
||||
|
||||
@@ -465,7 +465,8 @@ class SkillConfigSchema(BaseModel):
|
||||
# Merge wrapper content with normalized keys.
|
||||
# Wrapper values take precedence so the spec-compliant
|
||||
# format works reliably even if both formats overlap.
|
||||
for key, value in wrapper.items():
|
||||
wrapper_dict: dict[str, Any] = wrapper
|
||||
for key, value in wrapper_dict.items():
|
||||
snake_key = _CAMEL_TO_SNAKE.get(key, key)
|
||||
normalized[snake_key] = value
|
||||
|
||||
|
||||
Reference in New Issue
Block a user