Compare commits

...

11 Commits

Author SHA1 Message Date
Alex Verkhovsky 80604b45fe
Merge pull request #2025 from bmad-code-org/flatten-quick-dev-steps
refactor(skill): flatten quick-dev-new-preview step files
2026-03-16 08:21:52 -06:00
Alex Verkhovsky bce72fe18d
Merge branch 'main' into flatten-quick-dev-steps 2026-03-16 08:21:04 -06:00
Alex Verkhovsky 6742b1ff7b
Merge pull request #2022 from bmad-code-org/chore/coderabbit-default-profile
chore(review): replace adversarial CodeRabbit with skill-validator refs
2026-03-16 08:20:07 -06:00
Alex Verkhovsky e21d6b36ae
Merge branch 'main' into chore/coderabbit-default-profile 2026-03-16 08:16:11 -06:00
Alex Verkhovsky cad25817eb refactor(skill): flatten quick-dev-new-preview step files to skill root
Move step files from steps/ subdirectory to the skill root directory
and update path references in workflow.md and step-02-plan.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:10:47 -06:00
Alex Verkhovsky aa2a9a2818
Merge pull request #1968 from meysholdt/feat/add-ona-platform-support
feat: add Ona as a supported platform
2026-03-16 07:48:46 -06:00
Alex Verkhovsky be6611570a
Merge branch 'main' into feat/add-ona-platform-support 2026-03-16 07:26:53 -06:00
Alex Verkhovsky 28954fea79 chore(review): replace adversarial CodeRabbit with skill-validator refs
Remove the cynical adversarial reviewer persona from .coderabbit.yaml
and replace with per-path instructions that reference
tools/skill-validator.md as the single source of truth — matching the
approach already used in .augment/code_review_guidelines.yaml.

Add skill-validator pointer to AGENTS.md so all AI tools can discover it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 05:39:57 -06:00
Alex Verkhovsky 2a3708fd32
Merge branch 'main' into feat/add-ona-platform-support 2026-03-15 07:39:13 -06:00
Alex Verkhovsky 2aa5cddbe6
Merge branch 'main' into feat/add-ona-platform-support 2026-03-15 06:35:23 -06:00
Moritz Eysholdt df4d53de0e feat: add Ona as a supported platform
Add Ona (ona.com) to the BMAD installer so users can select it during
`npx bmad-method install` or via `--tools ona`. Skills are installed to
`.ona/skills/<name>/SKILL.md` using the default templates.

Fixes #1967

Co-authored-by: Ona <no-reply@ona.com>
2026-03-14 02:49:35 +00:00
11 changed files with 136 additions and 18 deletions

View File

@ -60,23 +60,33 @@ reviews:
- "!**/validation-report-*.md" - "!**/validation-report-*.md"
- "!CHANGELOG.md" - "!CHANGELOG.md"
path_instructions: path_instructions:
- path: "**/*" - path: "src/**/skills/**"
instructions: | instructions: |
You are a cynical, jaded reviewer with zero patience for sloppy work. Skill file. Apply the full rule catalog defined in tools/skill-validator.md.
This PR was submitted by a clueless weasel and you expect to find problems. That document is the single source of truth for all skill validation rules
Be skeptical of everything. covering SKILL.md metadata, workflow.md constraints, step file structure,
Look for what's missing, not just what's wrong. path references, variable resolution, sequential execution, and skill
Use a precise, professional tone — no profanity or personal attacks. invocation syntax.
- path: "src/**/workflows/**"
Review with extreme skepticism — assume problems exist. instructions: |
Find at least 10 issues to fix or improve. Legacy workflow file (pre-skill conversion). Apply the full rule catalog
defined in tools/skill-validator.md — the same rules apply to workflows
Do NOT: that are being converted to skills.
- Comment on formatting, linting, or style - path: "src/**/tasks/**"
- Give "looks good" passes instructions: |
- Anchor on any specific ruleset — reason freely Task file. Apply the full rule catalog defined in tools/skill-validator.md.
- path: "src/**/*.agent.yaml"
If you find zero issues, re-analyze — this is suspicious. instructions: |
Agent definition file. Check:
- Has metadata section with id, name, title, icon, and module
- Defines persona with role, identity, communication_style, and principles
- Menu triggers reference valid skill names that exist
- path: "docs/**/*.md"
instructions: |
Documentation file. Check internal markdown links point to existing files.
- path: "tools/**"
instructions: |
Build script/tooling. Check error handling and proper exit codes.
chat: chat:
auto_reply: true # Response to mentions in comments, a la @coderabbit review auto_reply: true # Response to mentions in comments, a la @coderabbit review
issue_enrichment: issue_enrichment:

View File

@ -7,3 +7,5 @@ Open source framework for structured, agent-assisted software delivery.
- Use Conventional Commits for every commit. - Use Conventional Commits for every commit.
- Before pushing, run `npm ci && npm run quality` on `HEAD` in the exact checkout you are about to push. - Before pushing, run `npm ci && npm run quality` on `HEAD` in the exact checkout you are about to push.
`quality` mirrors the checks in `.github/workflows/quality.yaml`. `quality` mirrors the checks in `.github/workflows/quality.yaml`.
- Skill validation rules are in `tools/skill-validator.md`.

View File

@ -13,7 +13,7 @@ deferred_work_file: '{implementation_artifacts}/deferred-work.md'
## INSTRUCTIONS ## INSTRUCTIONS
1. Investigate codebase. _Isolate deep exploration in sub-agents/tasks where available. To prevent context snowballing, instruct subagents to give you distilled summaries only._ 1. Investigate codebase. _Isolate deep exploration in sub-agents/tasks where available. To prevent context snowballing, instruct subagents to give you distilled summaries only._
2. Read `../tech-spec-template.md` fully. Fill it out based on the intent and investigation, and write the result to `{wipFile}`. 2. Read `./tech-spec-template.md` fully. Fill it out based on the intent and investigation, and write the result to `{wipFile}`.
3. Self-review against READY FOR DEVELOPMENT standard. 3. Self-review against READY FOR DEVELOPMENT standard.
4. If intent gaps exist, do not fantasize, do not leave open questions, HALT and ask the human. 4. If intent gaps exist, do not fantasize, do not leave open questions, HALT and ask the human.
5. Token count check (see SCOPE STANDARD). If spec exceeds 1600 tokens: 5. Token count check (see SCOPE STANDARD). If spec exceeds 1600 tokens:

View File

@ -76,4 +76,4 @@ YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `
### 3. First Step Execution ### 3. First Step Execution
Read fully and follow: `./steps/step-01-clarify-and-route.md` to begin the workflow. Read fully and follow: `./step-01-clarify-and-route.md` to begin the workflow.

View File

@ -1808,6 +1808,96 @@ async function runTests() {
console.log(''); console.log('');
// ============================================================
// Suite 32: Ona Native Skills
// ============================================================
console.log(`${colors.yellow}Test Suite 32: Ona Native Skills${colors.reset}\n`);
let tempProjectDir32;
let installedBmadDir32;
try {
clearCache();
const platformCodes32 = await loadPlatformCodes();
const onaInstaller = platformCodes32.platforms.ona?.installer;
assert(onaInstaller?.target_dir === '.ona/skills', 'Ona target_dir uses native skills path');
assert(onaInstaller?.skill_format === true, 'Ona installer enables native skill output');
assert(onaInstaller?.template_type === 'default', 'Ona installer uses default skill template');
tempProjectDir32 = await fs.mkdtemp(path.join(os.tmpdir(), 'bmad-ona-test-'));
installedBmadDir32 = await createTestBmadFixture();
const ideManager32 = new IdeManager();
await ideManager32.ensureInitialized();
// Verify Ona is selectable in available IDEs list
const availableIdes32 = ideManager32.getAvailableIdes();
assert(
availableIdes32.some((ide) => ide.value === 'ona'),
'Ona appears in available IDEs list',
);
// Verify Ona is NOT detected before install
const detectedBefore32 = await ideManager32.detectInstalledIdes(tempProjectDir32);
assert(!detectedBefore32.includes('ona'), 'Ona is not detected before install');
const result32 = await ideManager32.setup('ona', tempProjectDir32, installedBmadDir32, {
silent: true,
selectedModules: ['bmm'],
});
assert(result32.success === true, 'Ona setup succeeds against temp project');
// Verify Ona IS detected after install
const detectedAfter32 = await ideManager32.detectInstalledIdes(tempProjectDir32);
assert(detectedAfter32.includes('ona'), 'Ona is detected after install');
const skillFile32 = path.join(tempProjectDir32, '.ona', 'skills', 'bmad-master', 'SKILL.md');
assert(await fs.pathExists(skillFile32), 'Ona install writes SKILL.md directory output');
// Parse YAML frontmatter between --- markers
const skillContent32 = await fs.readFile(skillFile32, 'utf8');
const fmMatch32 = skillContent32.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
assert(fmMatch32, 'Ona SKILL.md contains valid frontmatter delimiters');
const frontmatter32 = fmMatch32[1];
const body32 = fmMatch32[2];
// Verify name in frontmatter matches directory name
const fmName32 = frontmatter32.match(/^name:\s*(.+)$/m);
assert(fmName32 && fmName32[1].trim() === 'bmad-master', 'Ona skill name frontmatter matches directory name exactly');
// Verify description exists and is non-empty
const fmDesc32 = frontmatter32.match(/^description:\s*(.+)$/m);
assert(fmDesc32 && fmDesc32[1].trim().length > 0, 'Ona skill description frontmatter is present and non-empty');
// Verify frontmatter contains only name and description keys
const fmKeys32 = [...frontmatter32.matchAll(/^([a-zA-Z0-9_-]+):/gm)].map((m) => m[1]);
assert(
fmKeys32.length === 2 && fmKeys32.includes('name') && fmKeys32.includes('description'),
'Ona skill frontmatter contains only name and description keys',
);
// Verify body content is non-empty and contains expected activation instructions
assert(body32.trim().length > 0, 'Ona skill body content is non-empty');
assert(body32.includes('agent-activation'), 'Ona skill body contains expected agent activation instructions');
// Reinstall/upgrade: run setup again over existing output
const result32b = await ideManager32.setup('ona', tempProjectDir32, installedBmadDir32, {
silent: true,
selectedModules: ['bmm'],
});
assert(result32b.success === true, 'Ona reinstall/upgrade succeeds over existing skills');
assert(await fs.pathExists(skillFile32), 'Ona reinstall preserves SKILL.md output');
} catch (error) {
assert(false, 'Ona native skills test succeeds', error.message);
} finally {
if (tempProjectDir32) await fs.remove(tempProjectDir32).catch(() => {});
if (installedBmadDir32) await fs.remove(installedBmadDir32).catch(() => {});
}
console.log('');
// ============================================================ // ============================================================
// Summary // Summary
// ============================================================ // ============================================================

View File

@ -176,6 +176,16 @@ platforms:
template_type: kiro template_type: kiro
skill_format: true skill_format: true
ona:
name: "Ona"
preferred: false
category: ide
description: "Ona AI development environment"
installer:
target_dir: .ona/skills
template_type: default
skill_format: true
opencode: opencode:
name: "OpenCode" name: "OpenCode"
preferred: false preferred: false

View File

@ -127,6 +127,12 @@ platforms:
category: ide category: ide
description: "AI-powered IDE with cascade flows" description: "AI-powered IDE with cascade flows"
ona:
name: "Ona"
preferred: false
category: ide
description: "Ona AI development environment"
# Platform categories # Platform categories
categories: categories:
ide: ide: