Conversation
| try { | ||
| parsedFrontmatter = frontmatter ? yaml.load(frontmatter) : {}; | ||
| } catch (e) { | ||
| errors.push(`Invalid YAML in frontmatter: ${e.message}`); |
There was a problem hiding this comment.
Should we use a safe YAML schema here? yaml.load uses the full schema by default, which can instantiate arbitrary JS types from YAML tags. Since this reads user-supplied SKILL.md files, yaml.load(frontmatter, { schema: yaml.DEFAULT_SAFE_SCHEMA }) would be safer. Low risk for a local CLI, but a quality-focused skill should model safe patterns.
| ? "\n⚠ Validation passed with warnings." | ||
| : "\n✔ Validation passed.", | ||
| ); | ||
| } |
There was a problem hiding this comment.
The validator checks frontmatter and size metrics but doesn't verify that the body contains the skill's own RequiredSections (# Title and ## Steps | ## Process). This means the validator can't enforce what the skill defines as required. Should we add a RequiredSections check to validateSkillContent?
| @@ -0,0 +1,15 @@ | |||
| # 🛠️ /aidd-upskill | |||
There was a problem hiding this comment.
This command file is missing the description frontmatter block that every other command file has:
---
description: Create and review AIDD skills following the AgentSkills.io specification and SudoLang authoring patterns.
---This is why commands/index.md shows "No description available" for this entry.
Additionally, the validate-skill.js tool should be recursively used here, then this error wouldn't have slipped through.
| - Write frontmatter: `name` + `description` required; add `metadata.alwaysApply` if needed | ||
| - Write body with all `RequiredSections` | ||
| - If body will exceed the line threshold (run `validate-skill` to check), extract content to `references/` and use `import $referenceFile` |
There was a problem hiding this comment.
"Do not await user approval" + run /aidd-review then /aidd-fix until clean could loop indefinitely if review and fix keep introducing new issues. Should we add a max iteration count or circuit breaker here?
| bodyTokens: Math.ceil(body.length / 4), | ||
| frontmatterTokens: Math.ceil(frontmatter.length / 4), | ||
| }); |
There was a problem hiding this comment.
The chars / 4 token estimation can be off by 30-50% depending on content (code-heavy, non-ASCII, etc.). Should we at least document that this is a rough heuristic, not a real tokenizer, so users aren't misled by the metric output?
| assert({ | ||
| given: "a valid aidd-prefixed lowercase hyphenated name", | ||
| should: "return no errors", | ||
| actual: validateName("aidd-format-code", "aidd-format-code"), | ||
| expected: [], | ||
| }); | ||
| }); | ||
|
|
||
| test("missing aidd- prefix", () => { | ||
| const errors = validateName("format-code", "format-code"); | ||
|
|
There was a problem hiding this comment.
The validateName tests assert on error array indices (errors[0], errors[1]), which couples the tests to the internal push order. If the order of validation checks changes, these tests break even though the function still produces the same set of errors. Should we use errors.some(e => e.includes(...)) instead (like the validateSkillContent tests already do)?
| ## Role | ||
|
|
||
| Expert skill author. Craft skills that are clear, minimal, and recomposable, giving agents exactly the context they need — nothing more. | ||
|
|
There was a problem hiding this comment.
Two things about the skill components reference:
-
Duplicate thinking pipeline — The
caveman()/ RTC thinking process (restate → ideate → reflect → expand → score → respond) tested incaveman-test.sudois being extracted into its own standalone skill in feat(skills): add /aidd-rtc #193 (/aidd-rtc). Should we reference/aidd-rtcrather than re-testing the thinking pipeline here? -
Missing SudoLang spec reference — A skill-authoring guide should probably reference and enforce the SudoLang spec (https://github.com/paralleldrive/sudolang/blob/main/sudolang.sudo.md). Should we include it as a reference file and add a constraint that generated skills must follow SudoLang syntax? Currently the skill mentions
aidd-sudolang-syntaxin passing but doesn't import or enforce it.
Split from PR #94. One skill per PR per project standards. Adds the /aidd-upskill skill for creating and reviewing AIDD agent skills, including: - Skill creation and review pipelines (SKILL.md, references, scripts) - Command definition (ai/commands/aidd-upskill.md) - AI eval tests (caveman, dedup, function tests) - validate-skill CLI and its unit tests - Epic documentation (tasks/aidd-upskill-epic.md) - Upskill entries in aidd-agent-orchestrator, aidd-please, index files - .gitignore and package.json entries for the validator binary and eval script
…om aidd-please - SKILL.md: update skill components to reference aidd-please (provides RTC think()) instead of non-existent aidd-rtc skill - references/process.md: replace /aidd-rtc --compact with think() --compact in both createSkill and reviewSkill pipelines and step descriptions - ai/commands/aidd-upskill.md: align format with other command files (# heading, /aidd-please reference, load-and-execute pattern)
- Use safe YAML schema in validate-skill.js to prevent arbitrary type instantiation - Add RequiredSections validation (# Title and ## Steps/Process) - Add description frontmatter to command file - Document token estimation as a rough heuristic (chars / 4) - Decouple validateName test assertions from push order (errors.some) - Add SudoLang spec reference to SKILL.md
c263b0f to
22174a6
Compare
Split from PR #94. One skill per PR per project standards.
What
Adds the
/aidd-upskillskill — a guide for creating and reviewing high-quality AIDD agent skills following the AgentSkills.io specification and SudoLang authoring patterns.Changes
New files
ai/skills/aidd-upskill/— Full skill directory with SKILL.md, README.md, references (process.md, types.md), and scripts (validate-skill.js + tests)ai/commands/aidd-upskill.md— Command definitionai-evals/aidd-upskill/— AI eval tests (caveman, dedup, function tests) with fixturestasks/aidd-upskill-epic.md— Epic documentationModified files
ai/skills/aidd-agent-orchestrator/SKILL.md— Added upskill to agent routingai/skills/aidd-please/SKILL.md— Added/aidd-upskillcommand entryai/commands/index.md— Added upskill entryai/skills/index.md— Added upskill entry.gitignore— Added compiled validate-skill binarypackage.json— Addedbuild:validate-skillandtest:ai-eval:upskillscriptsNot included (RTC-only changes from PR #94)
ai/skills/aidd-review/SKILL.mdchanges (RTC refactor only, no upskill content)ai/skills/aidd-please/SKILL.mdRTC refactor (only upskill command line included)Review
Ran the full
/aidd-upskill reviewpipeline against this skill:createSkillandreviewSkillclearly named; parameters/defaults well separated; judgment-based → AI prompt; deterministic validation → CLI tool# aidd-upskilltitle and## Processsection presentOverall verdict: ✅ Pass
Testing
validate-skillpasses on the skill itself