Skip to content

feat(core): add always_show_recommendation config option - #2609

Open
will-ai-m wants to merge 5 commits into
bmad-code-org:mainfrom
will-ai-m:feature/always-show-recommendation
Open

feat(core): add always_show_recommendation config option#2609
will-ai-m wants to merge 5 commits into
bmad-code-org:mainfrom
will-ai-m:feature/always-show-recommendation

Conversation

@will-ai-m

@will-ai-m will-ai-m commented Jul 20, 2026

Copy link
Copy Markdown

What

Adds an always_show_recommendation config option to core and wires it into /bmad-code-review so the agent states a recommended option with a brief justification whenever it asks the user to choose.

Why

At decision points the agent presents options without an opinion, leaving the user to weigh trade-offs alone even when the agent has enough context to pre-digest them.
Fixes #2602

How

  • New always_show_recommendation key in src/core-skills/module.yaml (user scope, default "true", string-valued single-select to match how --set and carry-forward handle values). Core values are spread into every module's generated config.yaml, so the key reaches skills in any module; behavior wiring is intentionally limited to bmad-code-review for now — later adoption is purely additive. Changeable any time via npx bmad-method install --set core.always_show_recommendation=false
  • Loaded in bmad-code-review's config step with a workflow-wide rule
  • Canonical rule wording in SKILL.md and in the RULES of step-01 and step-04 (the two steps with user decision points; step-04 keeps its contextual examples), including a no-grounds clause so evidence-free asks don't manufacture a justification
  • Docs (English + French): option described in the interactive-install section, --set core.… example in the overrides section
  • Tests assert the key lands in [core] of config.user.toml and is spread into a non-core module's generated config.yaml

Depends on #2633 — installer fix that seeds schema-declared core keys on --yes installs and propagates core --set overrides to module config spreads. This PR merges after it.

Testing

Installer component tests (394/394 incl. the two new assertions), refs/urls/channels/skills validators, eslint, markdownlint, and prettier all pass locally. test:renderer fails on this machine on pristine main as well (local Python 3.9 lacks tomllib) — environmental; CI covers it.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: d64f0b97-608e-402b-9816-871e428eec0f

📥 Commits

Reviewing files that changed from the base of the PR and between 5690ec5 and 1e7b485.

📒 Files selected for processing (2)
  • docs/fr/how-to/install-bmad.md
  • docs/how-to/install-bmad.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/how-to/install-bmad.md

📝 Walkthrough

Walkthrough

Adds the user-scoped always_show_recommendation setting, applies it to multi-option code review decisions, validates configuration propagation, and documents installation and override behavior.

Changes

Recommendation preference

Layer / File(s) Summary
Recommendation configuration
src/core-skills/module.yaml, src/bmm-skills/4-implementation/bmad-code-review/SKILL.md, test/test-installation-components.js
Defines the user-scoped setting with a default of "true", loads it for code review, emits it to user configuration, and tests propagation to module configuration.
Decision-point recommendation rules
src/bmm-skills/4-implementation/bmad-code-review/steps/step-01-gather-context.md, src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md
Requires a recommended option and brief justification before pausing on multi-option decisions when the setting is enabled, while leaving the final choice to the user.
Recommendation setting documentation
docs/how-to/customize-bmad.md, docs/fr/how-to/customize-bmad.md, docs/how-to/install-bmad.md, docs/fr/how-to/install-bmad.md
Documents the user-scoped setting, its default installation behavior, decision-point recommendations, and the command to disable them.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly names the new core config option and matches the main change.
Description check ✅ Passed The description is directly related and accurately summarizes the config, wiring, docs, and tests.
Linked Issues check ✅ Passed The PR addresses #2602 by adding the recommendation flag, wiring it into bmad-code-review, and keeping the final choice with the user.
Out of Scope Changes check ✅ Passed The changes stay focused on the recommendation option, related docs, and tests with no obvious unrelated additions.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/bmm-skills/module.yaml`:
- Around line 28-40: Document the user-facing bmm.always_show_recommendation
setting in the appropriate docs/ configuration or installation documentation,
including its default value of "true", installation behavior, workflow-wide
effect, and the override command npx bmad-method install --set
bmm.always_show_recommendation=false.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 987c4dd1-c3db-47b7-afb7-376e8146b534

📥 Commits

Reviewing files that changed from the base of the PR and between 8b4da79 and db35074.

📒 Files selected for processing (4)
  • src/bmm-skills/4-implementation/bmad-code-review/SKILL.md
  • src/bmm-skills/4-implementation/bmad-code-review/steps/step-01-gather-context.md
  • src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md
  • src/bmm-skills/module.yaml

Comment thread src/bmm-skills/module.yaml Outdated
@jheyworth

Copy link
Copy Markdown
Contributor

@will-ai-m

Thanks for this; super appreciated! Looks great!

I won't have any free time to properly look at this until tomorrow ( tues ), but in the meantime could you:

  1. link this PR to the original issue that was raided on this topic
  2. Review ALL Code rabbit suggestions that code rabbit has made in this PR and comment in the PR on progress against the code rabbit suggestions
  3. review the other possibly related PRs as identified above in this PR and comment on them

Happy to chat / answer question in this PR before I have proper time etc do a full review tomorrow

will-ai-m added a commit to will-ai-m/BMAD-METHOD that referenced this pull request Jul 21, 2026
Addresses CodeRabbit review on bmad-code-org#2609.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@will-ai-m

Copy link
Copy Markdown
Author

done. @jheyworth

@jheyworth

Copy link
Copy Markdown
Contributor

Thanks @will-ai-m !

I can't look at this today unfortunately, but will loot at it in the next day or two and update you in the PR with feedback/ questions etc.

@jheyworth

jheyworth commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@will-ai-m — thanks for yr patience. Full review below: traced through the installer, checked against all six satellite module repos (gds, cis, wds, tea, bmb, bmad-loop), and tested locally — both your branch as-is and the change I'm suggestiung. I've made all the calls so hopefully there's nothing to debate — just implement.

TL;DR: move the key from bmm to core. That requires one small installer fix (a latent bug your key would be the first to hit; I've prototyped it — ~60 lines across two files, full test suite passes, diff at the bottom) — please open that fix as a separate PR first, then this PR merges after it. Also keep the wiring scoped to bmad-code-review, align all three rule copies to the canonical wording below, and fix the docs sentence. The full checklist is at the bottom.

First, credit where due: your branch works end-to-end exactly as your PR body claims — I installed it fresh with --yes (key lands in config.user.toml [modules.bmm], appears in _bmad/bmm/config.yaml) and ran the documented --set bmm.always_show_recommendation=false --action update (routes to user scope, carries forward correctly). Nothing below is a defect in what you built; it's about where the key should live.

Decisions

  • Move the key to corecore.always_show_recommendation, same schema shape. Why:

    • Core's subheader defines its scope as "used across all installed bmad skills, workflows, and agents" — a preference whose prompt says "Should agents recommend…" (and which [Enhancement] Add option to always surface the BMad agent's recommendation when a question or decision point is raised #2602 §3 wants for "ideally any skill") is that, exactly.
    • One core declaration reaches every module: core answers are spread into every module's config.yaml (installer.js:984-995) — no per-module schema edit. Proven live: gds-code-review/SKILL.md:43-52 resolves {user_name} and {communication_language} — both core, both user-scoped — straight out of _bmad/gds/config.yaml. In bmm, the key reaches bmm skills only.
    • Module-scoping a cross-cutting preference is how we got divergence before: bmm's user_skill_level vs gds's game_dev_experience — same concept, two keys, two scopes. No module outside core/bmm declares a single scope: user key, so there's no per-module convention to follow either.
    • Core is always fully prompted in interactive installs (official-modules.js:1090, :1578) — what [Enhancement] Add option to always surface the BMad agent's recommendation when a question or decision point is raised #2602 asked for.
    • One catch, found by testing the move locally: the --yes path drops new core keys. Fresh --yes installs seed core from a hardcoded five-key literal (ui.js:843-867) without reading core's schema, and --yes updates reuse existing config and skip core — so with the key in core, a --yes install silently loses it everywhere (verified: absent from config.user.toml, from core/config.yaml, and from the spread), and --set core.always_show_recommendation=false then mis-files to team-scope config.toml. Interactive installs are unaffected. This is a pre-existing installer bug that any future core key would hit — yours would just be first.
    • I prototyped the fix and verified it (~60 lines, diff at the bottom): a --yes backfill in ui.js that seeds schema-declared core keys missing from the assembled config — with value migration, so a key promoted from a module section (like this bmm → core move) keeps the user's prior answer instead of resetting to the default — plus a small extension in set-overrides.js so a core --set refreshes the spread copies in each module's config.yaml (skills read their own module's copy, so without this a core --set wouldn't take effect until the next install). Note the existing _hoistCoreKeysFromLegacyModuleConfigs() does not cover this: it only runs on the legacy pre-central-toml load path — for v6 installs loadExistingConfig returns early after reading the tomls, so the hoist never fires on update (verified empirically: without the migration logic, the prior value resets to default). With the fix, everything passes — see "Tested locally" below — and the full test suite is green (391/391 installer component tests, channels, refs, skills, eslint).
    • The fix goes in its own PR, which I'd like you to open if thats ok — not in this one. Three reasons: the set-overrides.js half fixes a bug that is live on main today with existing core keys (--set core.user_name=X --action update patches the tomls but leaves every module's spread copy stale, so bmm skills keep greeting with the old name until some later install — it shouldn't wait on this PR's review cycle); this PR is currently zero executable code and should stay that way (a --yes seeding change has install-wide blast radius and deserves its own review); and the repo squash-merges, so an installer behavior change would otherwise hide under a feat(core) changelog entry. This PR then merges after the fix PR. Suggested title: fix(installer): seed schema-declared core keys on --yes installs and propagate core --set overrides to module config spreads.
    • Footnote: a --modules gds install (no bmm — only core is locked, ui.js:923) gets gds-code-review with identical decision points, but a bmm-scoped key can never be enabled there.
    • Moving it later is a config-key rename for anyone already installed — hence deciding now.
  • Keep the wiring scope at bmad-code-review only. Declaring in core doesn't oblige wiring every skill now — the key lands in every module's config.yaml regardless, so later adoption is purely additive. (Scale of the full [Enhancement] Add option to always surface the BMad agent's recommendation when a question or decision point is raised #2602 ambition, rough grep estimate: on the order of 100 files across the six modules contain multi-option asks — wds ~53, gds ~23, tea ~13, bmb ~6, cis ~5, bmad-loop 0. A roadmap, not this PR.)

  • Keep default: "true" and the string-valued single-select — matches user_skill_level and how --set/carry-forward handle values; the behavior change is additive and reversible.

  • Keep the rule in all three places (SKILL.md, step-01, step-04) — your original structure, and the repo's per-step idiom — but make the wording identical. Canonical:

    When {always_show_recommendation} is true: whenever you ask the user to choose between multiple valid options, state which option you recommend and justify it in one or two lines before halting. If you have no grounds to prefer one, say so rather than manufacture a preference. The final decision is always the user's.

    The "no grounds" clause is the one substantive addition: step-01's Tier-5 ask ("What do you want to review?") fires precisely when the cascade found no evidence, and without it the rule would force a made-up justification there. With it, the rule is safe at Tier 5 and genuinely useful at step-01's evidence-rich asks (the >3000-line chunking offer, the base-branch choice, multiple review stories). In step-04, keep your parenthetical example list — "resolving decision-needed findings, handling patch findings, next steps" — wording identical apart from that.

  • Translations: French in this PR; zh-cn and vi-vn to a separate sync PR.

    • docs/fr is fully in sync with English (install-bmad.md 266/266 lines, customize-bmad.md 395/395) and already carries the --set section and config-files table this PR edits — so mirror both edits there.
    • docs/zh-cn (120 lines) and docs/vi-vn (116) are under half the English file with no --set section at all — nowhere to put the sentence without translating a missing chapter first. Batch-sync territory, per prior practice (docs(fr): sync French docs with latest English source + fix non-ASCII anchor validation #2408 fr, docs(zh-cn): add missing translations for forge-idea, web-bundles, and dev-auto #2579 zh-cn).
    • Nothing to translate for the feature itself: the rule is an instruction to the agent, which already speaks communication_language. And the installer prompt stays English — there's no i18n layer for prompts (install-messages.yaml is a single English file; every prompt in all eight module.yamls is hardcoded English), so localising them is its own feature, not this PR's debt.

Checklist

First, the new PR (gates this one):

  • Open a separate installer-fix PRfix(installer): seed schema-declared core keys on --yes installs and propagate core --set overrides to module config spreads. Use the diff at the bottom as-is or reimplement to taste; include three regression tests: the --yes seed picks up schema-declared keys; a core --set updates the spread copies; and a key promoted from a module section keeps the user's prior value on --yes update (don't rely on _hoistCoreKeysFromLegacyModuleConfigs for this — it only runs on the legacy pre-central-toml load path). Without these, the moved key is silently dropped on every --yes install and --set core.… mis-files to team scope — both verified locally. feat(core): add always_show_recommendation config option #2609 merges after that PR.

Then, in this PR:

  • src/bmm-skills/module.yaml — remove the always_show_recommendation block.
  • src/core-skills/module.yaml — add it there, schema shape unchanged.
  • bmad-code-review/SKILL.md — keep the key in the activation config list (the "Load Config" step; the key still arrives via _bmad/bmm/config.yaml, now through the core spread); replace the rule with the canonical wording.
  • steps/step-01-gather-context.md and steps/step-04-present.md — align both rules to the canonical wording (step-04 keeps its parenthetical examples).
  • docs/how-to/install-bmad.md — key becomes core.always_show_recommendation, including in the bash example block (--set core.always_show_recommendation=false). Move the "what it does" sentence out of the --set mechanics section (keep the example there). Reword "is prompted during install" to "prompted during interactive install" — as a bmm key that claim was false on the default path (non-core config sits behind the Express Setup gateway, official-modules.js:1098-1127, default accept all defaults); as a core key it's true interactively, while --yes applies the default silently.
  • docs/how-to/customize-bmad.md:292 — spell out the actual key name instead of "recommendation preference".
  • docs/fr/how-to/install-bmad.md and docs/fr/how-to/customize-bmad.md — mirror both English edits.
  • test/test-installation-components.js — two assertions: the key lands in [core] of config.user.toml, and it appears in a non-core module's config.yaml (the only guard on the core-spread behavior this design depends on — existing tests only cover the inverse, stripping spread keys out of [modules.*]). The three installer regression tests (--yes seed, --set propagation, migration value preservation) belong in the installer-fix PR.
  • Retitle the PR feat(core): … and update the PR body's --set bmm.… reference.
  • Reply to and resolve the CodeRabbit inline thread on module.yaml L28-40, then re-trigger CodeRabbit (@coderabbitai review) — it only ever saw db350747, never the docs commit 54c87b62.

No longer needed

Tested locally — what I actually ran

Fresh installs into scratch directories with this repo's installer, plus --action update runs:

  • Your branch as-is, fresh --yes install: key lands in config.user.toml [modules.bmm] = "true" and in _bmad/bmm/config.yaml; absent from team config.toml. Correct.
  • Your branch as-is, --set bmm.always_show_recommendation=false --action update: routes to config.user.toml, carries into _bmad/bmm/config.yaml. Correct — your documented command works.
  • Key moved to core, no installer fix — fresh --yes install of bmm+cis: key dropped everywhere — not in config.user.toml, not in core/config.yaml, never spread to bmm or cis.
  • Key moved to core, no installer fix — --set core.…=false --action update: installer logs Applied --set overrides: core.always_show_recommendation → config.toml — team scope, the wrong file.
  • Key moved to core, with the fix — fresh --yes install of bmm+cis: config.user.toml [core] = "true"; spread into _bmad/bmm/config.yaml, _bmad/cis/config.yaml (an externally fetched module), and _bmad/core/config.yaml; team config.toml clean.
  • Key moved to core, with the fix — --set core.…=false --action update: routes to config.user.toml and immediately updates every module's spread copy (bmm, cis, core all read "false").
  • Migration of an existing install (had the bmm-scoped key, user had set it to "false") on --yes update: key appears in [core] of config.user.toml with the user's prior value preserved ("false", not the default), spread copies refreshed, stale [modules.bmm] entry dropped by the schema-strict partition.
  • Regression: full suite green — 391/391 installer component tests, channels, refs, skills validators, eslint on both touched files.

So keep your schema shape exactly as-is (single-select / scope: user / result: "{value}" — all verified) — the move is a relocation plus the installer fix below, not a redesign.

Installer fix — prototype diff for the separate PR

Verified working (see "Tested locally") and written to match the surrounding style. Lift it as-is into the new PR or reimplement to taste — either way it needs the two regression tests noted in the checklist.

diff --git a/tools/installer/set-overrides.js b/tools/installer/set-overrides.js
index 9349ee2d..cd34327d 100644
--- a/tools/installer/set-overrides.js
+++ b/tools/installer/set-overrides.js
@@ -291,8 +291,22 @@ async function applySetOverrides(overrides, bmadDir) {
     // value lives in the per-module yaml but won't be re-emitted into
     // config.toml on the next install (the schema-strict partition drops
     // it); re-pass `--set` if you need it sticky.
-    const moduleYamlPath = path.join(bmadDir, moduleCode, 'config.yaml');
-    if (await fs.pathExists(moduleYamlPath)) {
+    // Core overrides also refresh the spread copies: core values are spread
+    // into every module's config.yaml at generate time and skills read their
+    // own module's copy — without this, a core --set would not take effect
+    // until the next install regenerates the spread.
+    const yamlTargets = [path.join(bmadDir, moduleCode, 'config.yaml')];
+    if (moduleCode === 'core') {
+      const nonModuleDirs = new Set(['_config', '_memory', 'memory', 'docs', 'scripts', 'custom', 'core']);
+      const entries = await fs.readdir(bmadDir, { withFileTypes: true });
+      for (const entry of entries) {
+        if (entry.isDirectory() && !nonModuleDirs.has(entry.name)) {
+          yamlTargets.push(path.join(bmadDir, entry.name, 'config.yaml'));
+        }
+      }
+    }
+    for (const moduleYamlPath of yamlTargets) {
+      if (!(await fs.pathExists(moduleYamlPath))) continue;
       try {
         const text = await fs.readFile(moduleYamlPath, 'utf8');
         const parsed = yaml.parse(text);
diff --git a/tools/installer/ui.js b/tools/installer/ui.js
index 7adc867f..ddf5ecd3 100644
--- a/tools/installer/ui.js
+++ b/tools/installer/ui.js
@@ -866,6 +866,47 @@ class UI {
       }
     }
 
+    // --yes backfill: seed any core keys declared in the schema but absent from
+    // the config assembled above (the fresh-install defaults, CLI-flag seed, or
+    // carried-forward existing config). Without this, a newly declared core key
+    // is silently dropped on every --yes install — core is skipped by
+    // collectAllConfigurations once seeded, so schema defaults never apply.
+    // Value precedence per key: prior [core] answer, then a prior answer under
+    // a module section (key promoted module → core, e.g. bmm → core), then the
+    // schema default. This mirrors _hoistCoreKeysFromLegacyModuleConfigs, which
+    // only runs on the legacy (pre-central-toml) load path.
+    if (options.yes) {
+      try {
+        const yaml = require('yaml');
+        const { getSourcePath } = require('./project-root');
+        const coreSchema = yaml.parse(await fs.readFile(path.join(getSourcePath('core-skills'), 'module.yaml'), 'utf8'));
+        const core = (configCollector.collectedConfig.core ||= {});
+        const existing = configCollector._existingConfig || {};
+        const existingCore = existing.core && typeof existing.core === 'object' && !Array.isArray(existing.core) ? existing.core : {};
+        for (const [key, item] of Object.entries(coreSchema || {})) {
+          if (!item || typeof item !== 'object' || Array.isArray(item) || !item.prompt || key in core) continue;
+          let value = existingCore[key];
+          if (value === undefined) {
+            for (const [moduleName, cfg] of Object.entries(existing)) {
+              if (moduleName === 'core' || !cfg || typeof cfg !== 'object' || Array.isArray(cfg)) continue;
+              if (cfg[key] !== undefined) {
+                value = cfg[key];
+                break;
+              }
+            }
+          }
+          if (value === undefined) {
+            let def = item.default;
+            if (typeof def === 'string') def = def.replace('{directory_name}', path.basename(directory));
+            value = def;
+          }
+          if (value !== undefined && value !== null && value !== '') core[key] = value;
+        }
+      } catch {
+        // Schema unreadable — keep the seeded config as-is rather than fail the install.
+      }
+    }
+
     // Collect all module configs — core is skipped if already seeded above
     await configCollector.collectAllConfigurations(modules, directory, {
       skipPrompts: options.yes || false,

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '=== Candidate files ==='
fd -t f . src tools test docs | rg '(^|/)(module\.yaml|SKILL\.md|step-01-gather-context\.md|step-04-present\.md|install-bmad\.md|customize-bmad\.md|ui\.js|set-overrides\.js|test-installation-components\.js)$' | sort

printf '%s\n' '=== JavaScript structure ==='
ast-grep outline tools/installer/ui.js --items all --type class,function --view expanded
ast-grep outline tools/installer/set-overrides.js --items all --type function --view expanded
ast-grep outline test/test-installation-components.js --items all --type function --view expanded

printf '%s\n' '=== Current preference and documentation references ==='
rg -n -C 5 --glob 'module.yaml' --glob '*.md' --glob '*.js' \
  '(always_show_recommendation|recommendation preference|--set (bmm|core)\.always_show_recommendation)' \
  src tools test docs

printf '%s\n' '=== Installer paths cited in the review ==='
rg -n -C 8 --glob '*.js' \
  '(collectAllConfigurations|collectedConfig\.core|applySetOverrides|config\.yaml|core-skills)' \
  tools/installer

printf '%s\n' '=== Installation test references to core and config spreading ==='
rg -n -C 8 --glob 'test-installation-components.js' \
  '(config\.user\.toml|\[core\]|modules\.|config\.yaml|spread|core)' \
  test

Length of output: 165378


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '=== Core and BMM schema conventions ==='
sed -n '1,75p' src/core-skills/module.yaml
sed -n '1,52p' src/bmm-skills/module.yaml

printf '%s\n' '=== Generated module-config spread ==='
sed -n '950,1025p' tools/installer/core/installer.js

printf '%s\n' '=== Existing core-key hoist migration ==='
sed -n '950,1065p' tools/installer/modules/official-modules.js

printf '%s\n' '=== --set routing and generated-YAML patching ==='
sed -n '237,335p' tools/installer/set-overrides.js

printf '%s\n' '=== Existing focused tests ==='
sed -n '1774,1908p' test/test-installation-components.js
sed -n '2948,3062p' test/test-installation-components.js
sed -n '3168,3265p' test/test-installation-components.js

printf '%s\n' '=== English and French documentation sections ==='
rg -n -C 8 --glob 'install-bmad.md' --glob 'customize-bmad.md' \
  '(decision-point recommendations|recommendation preference|Cross-cutting state|--set)' \
  docs/how-to docs/fr/how-to

Length of output: 57540


@jheyworth Confirmed from the current branch:

  • The requested core relocation fits the existing schema and generated-config model: generateModuleConfigs() spreads core values into each non-core module’s config.yaml.
  • The existing generic migration helper, OfficialModules._hoistCoreKeysFromLegacyModuleConfigs(), will already move a prior bmm.always_show_recommendation value into core once the key is declared in src/core-skills/module.yaml. The feature PR should add a regression assertion for that behavior rather than duplicate migration code.
  • The existing central-config test suite is the right place to assert the user-scoped key writes under [core] in config.user.toml; the existing promotion suite can cover the legacy BMM-to-core carry-forward.
  • The separate installer PR should extend the existing applySetOverrides tests to verify that a core override refreshes a non-core generated config.yaml, plus add focused coverage for the --yes schema-default backfill.
  • English docs currently use bmm.always_show_recommendation; French docs do not yet include the feature-specific example, so both require the requested updates.

✏️ Learnings added
Learnt from: jheyworth
URL: https://github.com/bmad-code-org/BMAD-METHOD/pull/2609

Timestamp: 2026-07-23T13:24:15.207Z
Learning: In the BMAD installer, `tools/installer/modules/official-modules.js` method `OfficialModules._hoistCoreKeysFromLegacyModuleConfigs()` generically migrates any schema-declared core configuration key from legacy non-core module `config.yaml` files into the core configuration, without overwriting an already present core value. When promoting a BMM setting to `src/core-skills/module.yaml`, add regression coverage rather than a separate migration path.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

@jheyworth Thank you for the thorough validation and precise installer-path clarification. You are correct: the existing _hoistCoreKeysFromLegacyModuleConfigs() path is legacy-only and does not protect v6 central-TOML --yes updates, so my prior statement that it could cover the BMM-to-core promotion was incorrect.

The separate installer fix, including regression coverage for schema-default seeding, propagated core --set values, and preservation of a promoted module value, is the appropriate prerequisite. Once those changes and the follow-up updates to #2609 are pushed, re-request a review and I’ll assess the revised implementation and docs against this checklist.

🐇🔍


✏️ Learnings added
Learnt from: jheyworth
URL: https://github.com/bmad-code-org/BMAD-METHOD/pull/2609

Timestamp: 2026-07-23T13:34:08.160Z
Learning: In the BMAD installer’s v6 central-TOML configuration path, `OfficialModules._hoistCoreKeysFromLegacyModuleConfigs()` is not executed on update because `loadExistingConfig` returns after loading the TOML configuration. When a user-scoped key is promoted from a module schema (such as `src/bmm-skills/module.yaml`) to `src/core-skills/module.yaml`, the `--yes` installer path must explicitly preserve a prior module-scoped value, rather than relying on the legacy hoist helper.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

@jheyworth

Copy link
Copy Markdown
Contributor

@coderabbitai One correction to your analysis above, verified empirically: _hoistCoreKeysFromLegacyModuleConfigs() will not migrate a prior bmm.always_show_recommendation value into core on v6 installs. It only runs on the legacy fallback path — loadExistingConfig returns early after reading config.toml/config.user.toml (the v6 primary source), so the hoist never fires for any install that has the central tomls. I tested the exact scenario: a v6 install with the bmm-scoped key set to "false", key relocated to core, --yes update → the value reset to the default. The regression assertion you suggested would fail against current main.

The right outcome (user's prior value preserved across the module → core promotion) is achievable though, and I agree it should be asserted. I've updated the review comment above: the prototype diff now includes value migration in the --yes backfill (precedence: prior [core] answer → prior module-section answer → schema default), the same scenario now preserves "false", and the installer-fix PR's checklist item asks for three regression tests instead of two — including exactly the preservation case you proposed, just not implemented via the legacy hoist.

@will-ai-m heads-up: the main review comment was edited — prototype diff is now ~60 lines (was ~40) and the migration behavior improved. Everything else stands.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

@jheyworth You’re right—thank you for the empirical correction. The legacy hoist helper is not applicable to v6 central-TOML updates, and my earlier recommendation to rely on it was incorrect.

The proposed --yes backfill with precedence of existing [core] value → existing module-scoped value → schema default is the correct migration behavior. The separate installer PR should cover all three regressions: schema-key seeding, immediate propagation of core --set values to generated module configs, and preservation of a prior bmm value during the module-to-core promotion.

🐇🔎

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

@jheyworth Acknowledged. The separation and scope are clear:

Prerequisite: installer fix PR

  • Open the installer-only PR with the requested title:
    fix(installer): seed schema-declared core keys on --yes installs and propagate core --set overrides to module config spreads
  • Backfill missing schema-declared core values during --yes, preserving values in this order: existing [core], existing module-scoped value, then schema default.
  • Propagate --set core.* overrides immediately to generated non-core module config.yaml spread copies.
  • Add regression tests for schema-key seeding, core override propagation, and BMM-to-core value preservation on v6 updates.

Follow-up: feature PR #2609

  • Relocate always_show_recommendation unchanged from src/bmm-skills/module.yaml to src/core-skills/module.yaml.
  • Keep consumption limited to bmad-code-review; retain the activation-config reference.
  • Apply the canonical recommendation rule consistently in SKILL.md, Step 01, and Step 04, retaining Step 04’s contextual examples.
  • Update English and French install/customization documentation to use core.always_show_recommendation, including the --set example and interactive-install wording.
  • Add assertions that the user-scoped value is written under [core] and reaches a non-core module’s generated config.yaml.
  • Retitle and update the PR description, resolve the existing inline thread, then request a fresh CodeRabbit review after the docs commit is included.

🐇🧭


✏️ Learnings added
Learnt from: jheyworth
URL: https://github.com/bmad-code-org/BMAD-METHOD/pull/2609

Timestamp: 2026-07-23T13:45:00.107Z
Learning: For BMAD’s cross-cutting `always_show_recommendation` preference, declare the user-scoped string-valued single-select setting in `src/core-skills/module.yaml`, not `src/bmm-skills/module.yaml`. Core values are spread into every installed module’s generated `config.yaml`; initial behavior wiring remains intentionally limited to the BMM `bmad-code-review` skill.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


Failed to handle agent chat message. Please try again.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

@jheyworth Acknowledged. Your proposed separation is the right boundary:

  • The installer behavior fix should land independently first, with coverage for --yes schema-default seeding, v6 module-to-core value preservation, and immediate propagation of --set core.* to generated module config.yaml files.
  • #2609 can then promote always_show_recommendation to core, retain initial wiring only in bmad-code-review, use the canonical rule consistently across all three locations, and make the specified English/French documentation and feature-level test updates.
  • The existing legacy hoist helper must not be relied on for v6 central-TOML updates.

Once the prerequisite PR and revised #2609 are available, request a fresh review and I’ll evaluate them against this checklist.

🐇🔎


✏️ Learnings added
Learnt from: jheyworth
URL: https://github.com/bmad-code-org/BMAD-METHOD/pull/2609

Timestamp: 2026-07-23T15:24:00.296Z
Learning: In the BMAD installer, `--set core.<key> ... --action update` must update not only central TOML configuration but also every installed non-core module’s generated `config.yaml`, because core values are spread into those files and skills read their local module configuration. Without this propagation, an existing core override remains stale in skills until a later installation regenerates the module configs.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

@jheyworth Thanks for the comprehensive validation and the tested prototype. The requested boundary is clear.

I agree with the sequencing:

  1. First: land the separate installer fix for schema-driven core-key seeding on --yes, v6 module-to-core value preservation, and immediate propagation of --set core.* into generated non-core config.yaml files.
  2. Then: update #2609 to declare core.always_show_recommendation, keep initial consumption limited to bmad-code-review, apply the canonical decision rule in all three locations, and make the specified English/French documentation and feature-level test updates.

The legacy _hoistCoreKeysFromLegacyModuleConfigs() helper must not be used as the v6 migration mechanism. The prerequisite PR’s regressions should explicitly cover all three cases you listed, including preserving a prior bmm value during a --yes update.

Once the prerequisite PR and revised #2609 are available, request another review and I’ll verify the implementation against this checklist.

🐇🔎

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

@jheyworth Thank you for the detailed validation and tested prototype. The requested boundary and sequencing are clear.

I agree that the prerequisite installer PR should land first, with regression coverage for:

  1. Schema-declared core-key seeding on --yes.
  2. Immediate propagation of --set core.* overrides to generated non-core config.yaml files.
  3. Preserving a prior module-scoped value when promoting a key to core on v6 central-TOML updates.

After that, #2609 should relocate the unchanged user-scoped single-select setting to core, retain initial consumption exclusively in bmad-code-review, apply the canonical decision rule across all three locations, and make the specified English/French documentation and feature-level test updates.

The legacy _hoistCoreKeysFromLegacyModuleConfigs() helper must not be used as the migration mechanism for v6 updates. Once the prerequisite and revised feature PR are ready, request a fresh review and I’ll verify them against this checklist.

🐇🔎


✏️ Learnings added
Learnt from: jheyworth
URL: https://github.com/bmad-code-org/BMAD-METHOD/pull/2609

Timestamp: 2026-07-23T15:30:53.429Z
Learning: For BMAD’s `always_show_recommendation` feature, the BMM `bmad-code-review` skill and its Step 01/Step 04 instruction files must use the same canonical rule: when `{always_show_recommendation}` is `true`, recommend one valid option with a one- or two-line justification before halting; if no option is preferable, explicitly say so; the user always makes the final decision. Step 04 retains its contextual examples.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

@jheyworth

Copy link
Copy Markdown
Contributor

@will-ai-m any thoughts on the above ?

@will-ai-m

Copy link
Copy Markdown
Author

@jheyworth sorry for the delay, taking care of this now

will-ai-m and others added 3 commits July 26, 2026 22:53
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Addresses CodeRabbit review on bmad-code-org#2609.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rding

Review round on bmad-code-org#2609: the preference is cross-cutting ("Should agents
recommend...", wanted for any skill per bmad-code-org#2602), so it belongs in core,
where one declaration reaches every module's config.yaml via the core
spread — not just bmm skills.

- schema block moves from src/bmm-skills/module.yaml to
  src/core-skills/module.yaml unchanged (scope: user, default "true",
  string-valued single-select)
- canonical rule wording in SKILL.md, step-01, and step-04 (step-04
  keeps its parenthetical examples), adding the no-grounds clause so
  evidence-free asks don't manufacture a justification
- docs: key becomes core.always_show_recommendation (incl. the --set
  example); the what-it-does paragraph moves out of the --set mechanics
  section into the interactive-install section and says "prompted during
  interactive install"; customize-bmad names the key explicitly; French
  docs mirror both edits
- tests: assert the key lands in [core] of config.user.toml and is
  spread into a non-core module's generated config.yaml

Merges after bmad-code-org#2633, which makes --yes installs seed schema-declared
core keys.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@will-ai-m
will-ai-m force-pushed the feature/always-show-recommendation branch from c8ee914 to 5690ec5 Compare July 27, 2026 05:57
@will-ai-m will-ai-m changed the title feat(bmm): add always_show_recommendation config option feat(core): add always_show_recommendation config option Jul 27, 2026
@will-ai-m

Copy link
Copy Markdown
Author

@jheyworth Thanks for the thorough review and the tested prototype — agreed with all the calls, everything is now implemented.

Prerequisite PR: opened #2633 with your installer diff (lifted as-is) plus the three requested regression tests — --yes seeding of a schema-declared core key, core --set refreshing the spread copies immediately, and a module → core promoted key keeping the user's prior value on --yes update (implemented via the backfill, not the legacy hoist) — along with edge guards for [core]-beats-module precedence, non-module dirs, and module-scoped --set isolation.

This PR (latest push):

  • Key moved unchanged to src/core-skills/module.yaml; removed from bmm
  • Canonical rule wording (incl. the no-grounds clause) in SKILL.md, step-01, and step-04, identical apart from step-04's parenthetical examples; the key stays in the Load Config list
  • docs/how-to/install-bmad.md: --set core.always_show_recommendation=false in the example block; the what-it-does paragraph moved to the interactive-install section and reworded to "prompted during interactive install" (with a note that --yes applies the default silently); customize-bmad.md names the key explicitly; French docs mirror both edits
  • Tests: the key lands in [core] of config.user.toml, and it appears in a non-core module's generated config.yaml via the core spread
  • PR retitled feat(core): …, body updated, CodeRabbit thread resolved; requesting a fresh CodeRabbit review next

One mechanical note: the branch was rebased onto current main, replacing the GitHub-UI merge commit (c8ee914) — verified content-identical before the force-push.

@will-ai-m

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@greptile-apps

greptile-apps Bot commented Jul 27, 2026

Copy link
Copy Markdown

Greptile Summary

This PR introduces an always_show_recommendation config key (user scope, default "true") that instructs the bmad-code-review workflow to state a recommended option with a brief justification at every user decision point, rather than presenting options without an opinion. The feature is intentionally scoped to bmad-code-review for now, with the config key reaching other modules via the existing core-to-module config spread mechanism.

  • src/core-skills/module.yaml: Adds the new key as a string-valued single-select ("true" / "false") with user scope, matching the pattern of existing user-scoped keys; it spreads automatically into every installed module's config.yaml.
  • SKILL.md + step-01 + step-04: Adds the recommendation rule at the global config-load level and again inside the two steps that contain user decision points; includes a "no grounds to prefer" escape hatch to prevent the agent from manufacturing justifications.
  • Tests + Docs: Two new assertions cover the user-toml routing and the non-core spread; English and French docs explain the option and the --set override path.

Confidence Score: 5/5

Safe to merge — the change is purely additive, default-on behaviour is fully opt-out, and the only runtime effect is instructional text added to an LLM prompt.

Every changed file is either documentation, test assertions, or prompt/instruction text. The new config key is user-scoped and defaults to the safe "on" state that the PR is designed to enable. No installer logic, no runtime code paths, and no schema migrations are touched; the spreading mechanism that carries the key to module configs is tested and pre-existing.

Files Needing Attention: No files require special attention.

Important Files Changed

Filename Overview
src/core-skills/module.yaml Adds always_show_recommendation as a user-scoped, string-valued single-select key (default "true"); follows the same schema pattern as the other user-scoped keys in this file.
src/bmm-skills/4-implementation/bmad-code-review/SKILL.md Adds always_show_recommendation to the config-loading list and a workflow-wide rule in the "Load Config" step; rule text is clear, includes a no-grounds clause, and defers the final decision to the user.
src/bmm-skills/4-implementation/bmad-code-review/steps/step-01-gather-context.md Adds the recommendation rule to the step RULES block; step-02 and step-03 are verified to have no user decision points, so this is the correct place.
src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md Adds the recommendation rule with additional contextual scope (decision-needed findings, patch findings, next steps), which helpfully anchors the rule to the concrete decision moments in this step.
test/test-installation-components.js Adds two assertions: that always_show_recommendation lands in [core] of config.user.toml, and that it is spread into a non-core module's config.yaml. Both assertions cover the critical propagation path for the new key.
docs/how-to/install-bmad.md Adds a prose paragraph explaining the new option as a sub-item within the existing "per-module config" interactive-install step, and adds a --set override example; the "five things" count remains accurate.
docs/fr/how-to/install-bmad.md French translation mirrors the English additions faithfully; CLI commands are untranslated as expected.
docs/how-to/customize-bmad.md Adds always_show_recommendation to the user-scope description line in the config-file map diagram.
docs/fr/how-to/customize-bmad.md French version of the same one-line config-file map update.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["src/core-skills/module.yaml\nalways_show_recommendation\nscope: user, default: 'true'"] --> B["Interactive Install\n(prompted) or --yes\n(silent default)"]
    A --> C["--set core.always_show_recommendation=false\n(override at any time)"]
    B --> D["_bmad/config.user.toml\n[core]\nalways_show_recommendation = 'true'"]
    C --> D
    D --> E["generateModuleConfigs()\ncore keys spread into every module"]
    E --> F["_bmad/bmm/config.yaml\nalways_show_recommendation: 'true'"]
    F --> G["SKILL.md — Step 4: Load Config\nresolves {always_show_recommendation}"]
    G --> H{"always_show_recommendation\nis 'true'?"}
    H -- Yes --> I["step-01: at every user decision point\nstate recommended option + 1-2 line justification\nor say 'no grounds to prefer'"]
    H -- Yes --> J["step-04: at decision-needed / patch /\nnext-steps choices\nsame recommendation rule"]
    H -- No --> K["Present options only\n(no recommendation)"]
Loading

Reviews (3): Last reviewed commit: "Merge branch 'main' into feature/always-..." | Re-trigger Greptile

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/how-to/install-bmad.md`:
- Line 41: Update the documentation sentence describing
core.always_show_recommendation in docs/how-to/install-bmad.md at lines 41-41 to
state that /bmad-code-review is the current consumer, optionally noting future
expansion; apply the same scope correction in French at
docs/fr/how-to/install-bmad.md lines 41-41, without implying all decision-point
workflows currently support the setting.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 31c368e0-3340-45a0-976c-2c754c773ba0

📥 Commits

Reviewing files that changed from the base of the PR and between db35074 and 5690ec5.

📒 Files selected for processing (9)
  • docs/fr/how-to/customize-bmad.md
  • docs/fr/how-to/install-bmad.md
  • docs/how-to/customize-bmad.md
  • docs/how-to/install-bmad.md
  • src/bmm-skills/4-implementation/bmad-code-review/SKILL.md
  • src/bmm-skills/4-implementation/bmad-code-review/steps/step-01-gather-context.md
  • src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md
  • src/core-skills/module.yaml
  • test/test-installation-components.js
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/bmm-skills/4-implementation/bmad-code-review/steps/step-01-gather-context.md
  • src/bmm-skills/4-implementation/bmad-code-review/SKILL.md
  • src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md

Comment thread docs/how-to/install-bmad.md Outdated
@jheyworth

Copy link
Copy Markdown
Contributor

@will-ai-m — outstanding delivery on both PRs. I've verified everything locally before this review, so let me lead with that:

Verified locally ✓

The extra edge guards in Suite 49 (precedence, non-module dirs, --set isolation) go beyond what was asked — good instincts.

One final pass, then we merge

The bot reviews landed after your push, so none are addressed yet. All are small; three are defects in my prototype that you inherited by lifting it as-is, so consider these my bugs to own and yours to fix:

#2633 — four fixes:

  • ui.jsreplacereplaceAll for {directory_name} (CodeRabbit). Real correctness gap: buildQuestion() uses replaceAll, so a default containing the placeholder twice would resolve differently under --yes. One-word fix, CodeRabbit's proposed diff is correct.
  • ui.js — narrow the try to the schema read/parse and log a warning in the catch (CodeRabbit + greptile, same spot). As written it swallows everything silently — a syntax error in core's module.yaml would make --yes installs silently drop keys. Keep install-success behavior; just make it visible on stderr.
  • ui.js — use the public existingConfig accessor instead of reaching into _existingConfig (CodeRabbit). The getter is the stable contract.
  • set-overrides.js — extract a shared nonModuleDirs constant (CodeRabbit + greptile, each citing a different pre-existing duplicate — the set now exists in at least three places). Greptile's failure mode is the convincer: a future non-module dir containing a config.yaml would silently receive core-key patches. Export one constant, import it everywhere the set appears.

#2633 — two optional test additions (CodeRabbit; recommended but your call):

  • The schema-read catch branch: unreadable/absent core module.yaml → install still proceeds with the seeded config.
  • --yes combined with --user-name/--output-folder: the backfill must not overwrite CLI-provided values (the key in core guard handles it — a test pins it).

#2609 — one word:

  • docs/how-to/install-bmad.md:41 + the French mirror: make the current scope explicit — "currently /bmad-code-review" rather than implying all decision-point workflows are wired. (CodeRabbit's one actionable; the ambiguous phrasing was inherited from my review text, so also mine to own.)

Process, same as before: disposition each bot comment in-thread (fixed / skipped-with-reason), then re-request review from both bots on both PRs.

Merge order stands: #2633 first, then #2609. Once the pass is done and the bots are green, both are ready from my side.

Bot-review pass on bmad-code-org#2609: say "workflows wired to the option —
currently /bmad-code-review" instead of implying every decision-point
workflow already consumes it. English and French mirrors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@will-ai-m

Copy link
Copy Markdown
Author

@jheyworth Final pass done on both PRs: all four #2633 fixes landed in c6b9446 (plus both optional test additions — Suite 49 is now 8 scenarios, 408/408 component tests), and the #2609 docs scope wording is fixed in 1e7b485 (EN + FR). Every bot comment is dispositioned in-thread and fresh reviews are requested from both bots on both PRs. Full npm test including the renderer now passes locally on both branches (Python upgraded to 3.14).

@will-ai-m

Copy link
Copy Markdown
Author

@coderabbitai review

@will-ai-m

Copy link
Copy Markdown
Author

@greptileai review

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@jheyworth

Copy link
Copy Markdown
Contributor

Thanks for this @will-ai-m !. I will review over the next day or so

@will-ai-m

Copy link
Copy Markdown
Author

@jheyworth bump :)

@jheyworth

Copy link
Copy Markdown
Contributor

@will-ai-m am waiting on a an imminent version bump of BMM, before progressing this as I’m guessing that there might be som impact on this PR.

I hope that might be over the next few days.
Will revert after that next release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Enhancement] Add option to always surface the BMad agent's recommendation when a question or decision point is raised

2 participants