Compare commits

...

5 Commits

Author SHA1 Message Date
Nikolas de Hor e425a93519
Merge 1a85069b75 into 783601b576 2026-04-04 22:57:11 -03:00
Brian 783601b576
fix: move BMB announcement to custom Banner component (#2210)
Starlight banner config doesn't render with custom Header. Added
announcement row to Banner.astro and removed unused config.
2026-04-04 16:10:37 -05:00
Brian 975aea6e74
docs: add BMad Builder announcement banner to docs site (#2209) 2026-04-04 16:02:26 -05:00
Alex Verkhovsky f98083ba75
docs: add contribution guardrails for unsolicited PRs (#2207)
Add Discord-first callout banner and AI-generated code curation policy.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 12:13:06 -05:00
Nikolas de Hor 1a85069b75 fix: restore validate-workflow as native skill directory
The validate-workflow task was accidentally deleted during the
XML-to-native-skill refactor in #1864. The schema, handler, and
test fixtures still reference it, creating broken invocations.

Recreates the task as a native skill directory following the
established pattern (SKILL.md + bmad-skill-manifest.yaml + workflow.md),
with the original validation logic preserved.

Fixes #1530
2026-03-11 19:38:13 -03:00
5 changed files with 133 additions and 16 deletions

View File

@ -6,6 +6,12 @@ Thank you for considering contributing! We believe in **Human Amplification, Not
--- ---
> **Before you write code: talk to us on [Discord](https://discord.gg/gk8jAdXWmj).**
>
> If your change adds features, restructures code, or touches more than a couple of files, **confirm with a maintainer that it fits**. A large PR out of the blue has a high chance of being closed — regardless of effort invested. A five-minute conversation can save you hours.
---
## Our Philosophy ## Our Philosophy
BMad strengthens human-AI collaboration through specialized agents and guided workflows. Every contribution should answer: **"Does this make humans and AI better together?"** BMad strengthens human-AI collaboration through specialized agents and guided workflows. Every contribution should answer: **"Does this make humans and AI better together?"**
@ -57,15 +63,10 @@ After searching, use the [feature request template](https://github.com/bmad-code
## Before Starting Work ## Before Starting Work
⚠️ **Required before submitting PRs:**
| Work Type | Requirement | | Work Type | Requirement |
| ------------- | ---------------------------------------------- | | ----------------------- | -------------------------------------------------------- |
| Bug fix | An open issue (create one if it doesn't exist) | | Typo / small bug fix | Just open the PR |
| Feature | An open feature request issue | | Feature or large change | Confirm with a maintainer on Discord **before** you start |
| Large changes | Discussion via issue first |
**Why?** This prevents wasted effort on work that may not align with project direction.
--- ---
@ -83,6 +84,12 @@ Submit PRs to the `main` branch. We use trunk-based development. Every push to `
If your change exceeds 800 lines, break it into smaller PRs that can be reviewed independently. If your change exceeds 800 lines, break it into smaller PRs that can be reviewed independently.
### AI-Generated Code
Given the nature of this project, we expect most contributions involve AI assistance — that's fine. What we require is **heavy human curation**. You must understand every line you're submitting, have made deliberate choices about what to include, and be able to explain your reasoning.
We will reject PRs that read like raw LLM output: bulk refactors nobody asked for, unsolicited "improvements" across many files, or changes where the submitter clearly hasn't read the existing code. Using AI to write code is normal here; using AI as a substitute for thinking is not.
### New to Pull Requests? ### New to Pull Requests?
1. **Fork** the repository 1. **Fork** the repository

View File

@ -0,0 +1,6 @@
---
name: validate-workflow
description: "Run a checklist against a document with thorough analysis and produce a validation report"
---
Follow the instructions in [workflow.md](workflow.md).

View File

@ -0,0 +1 @@
type: skill

View File

@ -0,0 +1,88 @@
# Validate Workflow Output
**Goal:** Run a checklist against a document with thorough analysis and produce a validation report.
**Inputs:**
- **workflow** (required) — Workflow path containing `checklist.md`
- **checklist** (optional) — Checklist to validate against (defaults to the workflow's `checklist.md`)
- **document** (optional) — Document to validate (ask user if not specified)
## STEPS
### Step 1: Setup
- If checklist not provided, load `checklist.md` from the workflow location
- Try to fuzzy-match files similar to the input document name; if document not provided or unsure, ask user: "Which document should I validate?"
- Load both the checklist and document
### Step 2: Validate (CRITICAL)
**For EVERY checklist item, WITHOUT SKIPPING ANY:**
1. Read the requirement carefully
2. Search the document for evidence along with any ancillary loaded documents or artifacts (quotes with line numbers)
3. Analyze deeply — look for explicit AND implied coverage
**Mark each item as:**
- **PASS** `✓` — Requirement fully met (provide evidence)
- **PARTIAL** `⚠` — Some coverage but incomplete (explain gaps)
- **FAIL** `✗` — Not met or severely deficient (explain why)
- **N/A** `` — Not applicable (explain reason)
**DO NOT SKIP ANY SECTIONS OR ITEMS.**
### Step 3: Generate Report
Create `validation-report-{timestamp}.md` in the document's folder with the following format:
```markdown
# Validation Report
**Document:** {document-path}
**Checklist:** {checklist-path}
**Date:** {timestamp}
## Summary
- Overall: X/Y passed (Z%)
- Critical Issues: {count}
## Section Results
### {Section Name}
Pass Rate: X/Y (Z%)
[MARK] {Item description}
Evidence: {Quote with line# or explanation}
{If FAIL/PARTIAL: Impact: {why this matters}}
## Failed Items
{All ✗ items with recommendations}
## Partial Items
{All ⚠ items with what's missing}
## Recommendations
1. Must Fix: {critical failures}
2. Should Improve: {important gaps}
3. Consider: {minor improvements}
```
### Step 4: Summary for User
- Present section-by-section summary
- Highlight all critical issues
- Provide path to saved report
- **HALT** — do not continue unless user asks
## HALT CONDITIONS
- HALT after presenting summary in Step 4
- HALT with error if no checklist is found and none is provided
- HALT with error if no document is found and user does not specify one

View File

@ -7,9 +7,13 @@ const llmsFullUrl = `${getSiteUrl()}/llms-full.txt`;
<div class="ai-banner" role="note" aria-label="AI documentation notice"> <div class="ai-banner" role="note" aria-label="AI documentation notice">
<span>🤖 Consolidated, AI-optimized BMAD docs: <a href={llmsFullUrl}>llms-full.txt</a>. Fetch this plain text file for complete context.</span> <span>🤖 Consolidated, AI-optimized BMAD docs: <a href={llmsFullUrl}>llms-full.txt</a>. Fetch this plain text file for complete context.</span>
</div> </div>
<div class="announce-banner" role="note" aria-label="BMad Builder announcement">
<span>🚀 Build your own BMad modules and share them with the community! <a href="https://bmad-builder-docs.bmad-method.org/tutorials/build-your-first-module/">Get started</a> or <a href="https://bmad-builder-docs.bmad-method.org/how-to/distribute-your-module/">submit to the marketplace</a>.</span>
</div>
<style> <style>
.ai-banner { .ai-banner,
.announce-banner {
width: 100%; width: 100%;
height: var(--ai-banner-height, 2.75rem); height: var(--ai-banner-height, 2.75rem);
background: #1a1a1a; background: #1a1a1a;
@ -25,37 +29,48 @@ const llmsFullUrl = `${getSiteUrl()}/llms-full.txt`;
} }
/* Truncate text on narrow screens */ /* Truncate text on narrow screens */
.ai-banner span { .ai-banner span,
.announce-banner span {
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
max-width: 100%; max-width: 100%;
} }
.ai-banner a { .ai-banner a,
.announce-banner a {
color: #3b82f6; color: #3b82f6;
text-decoration: none; text-decoration: none;
font-weight: 600; font-weight: 600;
} }
.ai-banner a:hover { .ai-banner a:hover,
.announce-banner a:hover {
color: #fafafa; color: #fafafa;
text-decoration: underline; text-decoration: underline;
} }
.ai-banner a:focus-visible { .ai-banner a:focus-visible,
.announce-banner a:focus-visible {
outline: 2px solid #3b82f6; outline: 2px solid #3b82f6;
outline-offset: 2px; outline-offset: 2px;
border-radius: 2px; border-radius: 2px;
} }
.announce-banner {
background: #1a2332;
border-bottom: 1px solid #1e3a5f;
}
/* Match navbar padding at breakpoints */ /* Match navbar padding at breakpoints */
@media (min-width: 50rem) { @media (min-width: 50rem) {
.ai-banner { .ai-banner,
.announce-banner {
padding-left: 2.5rem; padding-left: 2.5rem;
padding-right: 2.5rem; padding-right: 2.5rem;
} }
} }
@media (min-width: 72rem) { @media (min-width: 72rem) {
.ai-banner { .ai-banner,
.announce-banner {
padding-left: 3rem; padding-left: 3rem;
padding-right: 3rem; padding-right: 3rem;
} }