Compare commits

...

7 Commits

Author SHA1 Message Date
gabadi 694b60e803
Merge cb6006686c into 2c5436f672 2026-04-01 00:01:36 -07:00
Brian 2c5436f672
style: update docs theme to match bmadcode.com Ghost blog (#2176)
Replace purple/electric blue accent with Ghost blog design tokens:
- Background #0a0a0a, surface #1a1a1a, borders #262626
- Accent blue #3b82f6, text #fafafa/#a1a1a1/#666666
- Inter body, Space Grotesk headings, JetBrains Mono code
- Remove logo images, use text title
2026-04-01 01:12:40 -05:00
Alex Verkhovsky cb6006686c
Merge branch 'main' into fix/quick-dev-consumer-propagation 2026-03-25 20:56:14 -06:00
2-gabadi 92b7c12bf2
fix: remove redundant step-03 precondition
The step-03 consumer tracing instruction duplicated step-02 without
adding validation. Keep only the step-02 planning instruction.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 03:41:06 -03:00
2-gabadi df8b54c946
fix: handle zero-consumers case and add recovery path
- step-02: add `consumer — none found` annotation for empty grep results
- step-03: replace dead-end HALT with actionable recovery (perform
  tracing now) so the agent isn't stuck if step-02 was skipped

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 03:37:45 -03:00
2-gabadi cb60c06a29
fix: reference exact annotation prefix in step-03 HALT gate
Use backtick-quoted `consumer —` prefix to match the step-02
convention, making the precondition check unambiguous and grepable.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 03:30:19 -03:00
2-gabadi 17e87f8164
fix: add consumer propagation check to bmad-quick-dev workflow
When introducing new type variants, error codes, or DB values, the
workflow now requires enumerating all consumers in the Code Map during
planning (step-02) and HALTs implementation (step-03) if consumer
tracing was missed.

Fixes #2122

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 03:25:39 -03:00
4 changed files with 77 additions and 65 deletions

View File

@ -12,7 +12,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._ If the approach introduces new type variants, error codes, or DB values: grep all consumers of the parent type/column and annotate each in the Code Map as `consumer — update required` or `consumer — excluded (reason)`. If no consumers exist, note `consumer — none found`.
2. Read `./spec-template.md` fully. Fill it out based on the intent and investigation, and write the result to `{wipFile}`. 2. Read `./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.

View File

@ -50,12 +50,6 @@ export default defineConfig({
defaultLocale: 'root', defaultLocale: 'root',
locales, locales,
logo: {
light: './public/img/bmad-light.png',
dark: './public/img/bmad-dark.png',
alt: 'BMAD Method',
replacesTitle: true,
},
favicon: '/favicon.ico', favicon: '/favicon.ico',
// Social links // Social links

View File

@ -12,16 +12,16 @@ const llmsFullUrl = `${getSiteUrl()}/llms-full.txt`;
.ai-banner { .ai-banner {
width: 100%; width: 100%;
height: var(--ai-banner-height, 2.75rem); height: var(--ai-banner-height, 2.75rem);
background: #334155; background: #1a1a1a;
color: #cbd5e1; color: #a1a1a1;
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
font-size: 0.875rem; font-size: 0.875rem;
border-bottom: 1px solid rgba(140, 140, 255, 0.15); border-bottom: 1px solid #262626;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
box-sizing: border-box; box-sizing: border-box;
font-family: system-ui, sans-serif; font-family: 'Inter', system-ui, sans-serif;
} }
/* Truncate text on narrow screens */ /* Truncate text on narrow screens */
@ -32,15 +32,16 @@ const llmsFullUrl = `${getSiteUrl()}/llms-full.txt`;
max-width: 100%; max-width: 100%;
} }
.ai-banner a { .ai-banner a {
color: #B9B9FF; color: #3b82f6;
text-decoration: none; text-decoration: none;
font-weight: 600; font-weight: 600;
} }
.ai-banner a:hover { .ai-banner a:hover {
color: #fafafa;
text-decoration: underline; text-decoration: underline;
} }
.ai-banner a:focus-visible { .ai-banner a:focus-visible {
outline: 2px solid #B9B9FF; outline: 2px solid #3b82f6;
outline-offset: 2px; outline-offset: 2px;
border-radius: 2px; border-radius: 2px;
} }

View File

@ -1,14 +1,15 @@
/** /**
* BMAD Method Documentation - Custom Styles for Starlight * BMAD Method Documentation - Custom Styles for Starlight
* Electric Blue theme optimized for dark mode * Dark theme matching bmadcode.com Ghost blog
* *
* CSS Variable Mapping: * Design tokens from Ghost theme:
* Docusaurus Starlight * Background: #0a0a0a | Surface: #1a1a1a | Border: #262626
* --ifm-color-primary --sl-color-accent * Accent: #3b82f6 | Gold: #d4a853 | Text: #fafafa/#a1a1a1/#666666
* --ifm-background-color --sl-color-bg
* --ifm-font-color-base --sl-color-text
*/ */
/* Google Fonts - match Ghost blog typography */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
/* ============================================ /* ============================================
COLOR PALETTE - Light Mode COLOR PALETTE - Light Mode
============================================ */ ============================================ */
@ -19,10 +20,10 @@
/* Full-width content - override Starlight's default 45rem/67.5rem */ /* Full-width content - override Starlight's default 45rem/67.5rem */
--sl-content-width: 65rem; --sl-content-width: 65rem;
/* Primary accent colors - purple to match Docusaurus */ /* Primary accent colors - blue to match Ghost blog */
--sl-color-accent-low: #e0e0ff; --sl-color-accent-low: #dbeafe;
--sl-color-accent: #5E5ED0; --sl-color-accent: #2563eb;
--sl-color-accent-high: #3333CC; --sl-color-accent-high: #1d4ed8;
/* Text colors */ /* Text colors */
--sl-color-white: #1e293b; --sl-color-white: #1e293b;
@ -35,13 +36,14 @@
--sl-color-black: #f8fafc; --sl-color-black: #f8fafc;
/* Font settings */ /* Font settings */
--sl-font: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', --sl-font: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',
Arial, sans-serif; Arial, sans-serif;
--sl-font-mono: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
--sl-text-base: 1rem; --sl-text-base: 1rem;
--sl-line-height: 1.7; --sl-line-height: 1.7;
/* Code highlighting */ /* Code highlighting */
--sl-color-bg-inline-code: rgba(94, 94, 208, 0.1); --sl-color-bg-inline-code: rgba(59, 130, 246, 0.08);
} }
/* ============================================ /* ============================================
@ -51,35 +53,49 @@
/* Full-width content - override Starlight's default */ /* Full-width content - override Starlight's default */
--sl-content-width: 65rem; --sl-content-width: 65rem;
/* Primary accent colors - purple to match Docusaurus */ /* Primary accent colors - blue to match Ghost blog */
--sl-color-accent-low: #2a2a5a; --sl-color-accent-low: rgba(59, 130, 246, 0.12);
--sl-color-accent: #8C8CFF; --sl-color-accent: #3b82f6;
--sl-color-accent-high: #B9B9FF; --sl-color-accent-high: #60a5fa;
/* Background colors */ /* Background colors - match Ghost blog */
--sl-color-bg: #1b1b1d; --sl-color-bg: #0a0a0a;
--sl-color-bg-nav: #1b1b1d; --sl-color-bg-nav: #0a0a0a;
--sl-color-bg-sidebar: #1b1b1d; --sl-color-bg-sidebar: #0a0a0a;
--sl-color-hairline-light: rgba(140, 140, 255, 0.1); --sl-color-hairline-light: rgba(255, 255, 255, 0.06);
--sl-color-hairline: rgba(140, 140, 255, 0.15); --sl-color-hairline: #262626;
/* Text colors */ /* Text colors - match Ghost blog */
--sl-color-white: #f8fafc; --sl-color-white: #fafafa;
--sl-color-gray-1: #e2e8f0; --sl-color-gray-1: #e2e8f0;
--sl-color-gray-2: #cbd5e1; --sl-color-gray-2: #a1a1a1;
--sl-color-gray-3: #94a3b8; --sl-color-gray-3: #94a3b8;
--sl-color-gray-4: #64748b; --sl-color-gray-4: #666666;
--sl-color-gray-5: #475569; --sl-color-gray-5: #475569;
--sl-color-gray-6: #334155; --sl-color-gray-6: #262626;
--sl-color-black: #1b1b1d; --sl-color-black: #0a0a0a;
/* Code highlighting */ /* Code highlighting */
--sl-color-bg-inline-code: rgba(140, 140, 255, 0.15); --sl-color-bg-inline-code: rgba(59, 130, 246, 0.15);
} }
/* ============================================ /* ============================================
TYPOGRAPHY TYPOGRAPHY
============================================ */ ============================================ */
/* Space Grotesk for all headings - match Ghost blog */
.sl-markdown-content h1,
.sl-markdown-content h2,
.sl-markdown-content h3,
.sl-markdown-content h4,
.sl-markdown-content h5,
.sl-markdown-content h6,
.site-title,
starlight-toc h2 {
font-family: 'Space Grotesk', 'Inter', system-ui, sans-serif;
letter-spacing: -0.02em;
}
.sl-markdown-content h1 { .sl-markdown-content h1 {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
@ -138,14 +154,14 @@
/* Active state - thin left accent bar */ /* Active state - thin left accent bar */
.sidebar-content a[aria-current='page'] { .sidebar-content a[aria-current='page'] {
background-color: rgba(94, 94, 208, 0.08); background-color: rgba(59, 130, 246, 0.08);
color: var(--sl-color-accent); color: var(--sl-color-accent);
border-left-color: var(--sl-color-accent); border-left-color: var(--sl-color-accent);
font-weight: 600; font-weight: 600;
} }
:root[data-theme='dark'] .sidebar-content a[aria-current='page'] { :root[data-theme='dark'] .sidebar-content a[aria-current='page'] {
background-color: rgba(140, 140, 255, 0.1); background-color: rgba(59, 130, 246, 0.1);
color: var(--sl-color-accent-high); color: var(--sl-color-accent-high);
border-left-color: var(--sl-color-accent); border-left-color: var(--sl-color-accent);
} }
@ -232,7 +248,8 @@ header.header .header.sl-flex {
} }
:root[data-theme='dark'] header.header { :root[data-theme='dark'] header.header {
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); box-shadow: none;
border-bottom: 1px solid #262626;
} }
.site-title { .site-title {
@ -281,20 +298,20 @@ header.header .header.sl-flex {
.card:hover { .card:hover {
transform: translateY(-3px); transform: translateY(-3px);
border-color: var(--sl-color-accent); border-color: var(--sl-color-accent);
box-shadow: 0 8px 24px rgba(94, 94, 208, 0.15); box-shadow: 0 8px 24px rgba(59, 130, 246, 0.15);
} }
:root[data-theme='dark'] .card { :root[data-theme='dark'] .card {
background: linear-gradient(145deg, rgba(30, 41, 59, 0.6), rgba(15, 23, 42, 0.8)); background: #1a1a1a;
border-color: rgba(140, 140, 255, 0.2); border-color: #262626;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
} }
:root[data-theme='dark'] .card:hover { :root[data-theme='dark'] .card:hover {
border-color: rgba(140, 140, 255, 0.5); border-color: #3b82f6;
box-shadow: box-shadow:
0 8px 32px rgba(140, 140, 255, 0.2), 0 8px 32px rgba(59, 130, 246, 0.15),
0 0 0 1px rgba(140, 140, 255, 0.1); 0 0 0 1px rgba(59, 130, 246, 0.1);
} }
/* Starlight card grid */ /* Starlight card grid */
@ -313,11 +330,11 @@ header.header .header.sl-flex {
} }
:root[data-theme='dark'] .sl-link-card { :root[data-theme='dark'] .sl-link-card {
border-color: rgba(140, 140, 255, 0.2); border-color: #262626;
} }
:root[data-theme='dark'] .sl-link-card:hover { :root[data-theme='dark'] .sl-link-card:hover {
border-color: rgba(140, 140, 255, 0.5); border-color: #3b82f6;
} }
/* ============================================ /* ============================================
@ -372,21 +389,21 @@ table {
} }
:root[data-theme='dark'] table { :root[data-theme='dark'] table {
border-color: rgba(140, 140, 255, 0.1); border-color: #262626;
} }
:root[data-theme='dark'] table th { :root[data-theme='dark'] table th {
background-color: rgba(140, 140, 255, 0.05); background-color: rgba(59, 130, 246, 0.05);
} }
:root[data-theme='dark'] table tr:nth-child(2n) { :root[data-theme='dark'] table tr:nth-child(2n) {
background-color: rgba(140, 140, 255, 0.02); background-color: rgba(255, 255, 255, 0.02);
} }
/* Blockquotes */ /* Blockquotes */
blockquote { blockquote {
border-left-color: var(--sl-color-accent); border-left-color: var(--sl-color-accent);
background-color: rgba(94, 94, 208, 0.05); background-color: rgba(59, 130, 246, 0.05);
border-radius: 0 8px 8px 0; border-radius: 0 8px 8px 0;
padding: 1rem 1.25rem; padding: 1rem 1.25rem;
} }
@ -423,19 +440,19 @@ blockquote {
/* Note aside */ /* Note aside */
.starlight-aside--note { .starlight-aside--note {
background-color: rgba(94, 94, 208, 0.08); background-color: rgba(59, 130, 246, 0.08);
} }
.starlight-aside--note .starlight-aside__title { .starlight-aside--note .starlight-aside__title {
color: #5C5CCC; color: #2563eb;
} }
:root[data-theme='dark'] .starlight-aside--note { :root[data-theme='dark'] .starlight-aside--note {
background-color: rgba(140, 140, 255, 0.12); background-color: rgba(59, 130, 246, 0.12);
} }
:root[data-theme='dark'] .starlight-aside--note .starlight-aside__title { :root[data-theme='dark'] .starlight-aside--note .starlight-aside__title {
color: #8C8CFF; color: #3b82f6;
} }
/* Caution aside */ /* Caution aside */
@ -512,7 +529,7 @@ blockquote {
ROADMAP STYLES ROADMAP STYLES
============================================ */ ============================================ */
.roadmap-container { .roadmap-container {
--color-planned: #6366f1; --color-planned: #3b82f6;
--color-in-progress: #10b981; --color-in-progress: #10b981;
--color-exploring: #f59e0b; --color-exploring: #f59e0b;
--color-bg-card: rgba(255, 255, 255, 0.03); --color-bg-card: rgba(255, 255, 255, 0.03);
@ -663,8 +680,8 @@ blockquote {
} }
.roadmap-badge.planned { .roadmap-badge.planned {
background: rgba(99, 102, 241, 0.15); background: rgba(59, 130, 246, 0.15);
color: #6366f1; color: #3b82f6;
} }
.roadmap-badge.exploring { .roadmap-badge.exploring {
@ -735,7 +752,7 @@ blockquote {
.roadmap-future-card { .roadmap-future-card {
padding: 1.5rem; padding: 1.5rem;
border-radius: 12px; border-radius: 12px;
background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(245, 158, 11, 0.05)); background: linear-gradient(135deg, rgba(59, 130, 246, 0.08), rgba(212, 168, 83, 0.05));
border: 1px solid var(--color-border); border: 1px solid var(--color-border);
transition: transform 0.2s ease; transition: transform 0.2s ease;
display: flex; display: flex;