diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
index ed626d34..7d8f63dc 100644
--- a/.claude-plugin/marketplace.json
+++ b/.claude-plugin/marketplace.json
@@ -11,7 +11,7 @@
"name": "bmad",
"source": "./plugins/bmad",
"description": "BMAD Method - Breakthrough Method for Agile AI-Driven Development",
- "version": "6.2.0.4"
+ "version": "6.6.0.1"
}
]
}
diff --git a/.github/badges/upstream-version-bmb.json b/.github/badges/upstream-version-bmb.json
index cd61cdcd..63ff41ea 100644
--- a/.github/badges/upstream-version-bmb.json
+++ b/.github/badges/upstream-version-bmb.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "BMB Module",
- "message": "v1.4.0",
+ "message": "v1.7.0",
"color": "green"
}
diff --git a/.github/badges/upstream-version-cis.json b/.github/badges/upstream-version-cis.json
index 66286b3c..f21a4a6c 100644
--- a/.github/badges/upstream-version-cis.json
+++ b/.github/badges/upstream-version-cis.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "CIS Module",
- "message": "v0.1.9",
+ "message": "v0.2.0",
"color": "green"
}
diff --git a/.github/badges/upstream-version-gds.json b/.github/badges/upstream-version-gds.json
index d146d110..cfe22b86 100644
--- a/.github/badges/upstream-version-gds.json
+++ b/.github/badges/upstream-version-gds.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "GDS Module",
- "message": "v0.2.2",
+ "message": "v0.4.0",
"color": "green"
}
diff --git a/.github/badges/upstream-version-tea.json b/.github/badges/upstream-version-tea.json
index 6d49a345..2932b2d1 100644
--- a/.github/badges/upstream-version-tea.json
+++ b/.github/badges/upstream-version-tea.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "TEA Module",
- "message": "v1.7.3",
+ "message": "v1.17.0",
"color": "green"
}
diff --git a/.github/badges/upstream-version.json b/.github/badges/upstream-version.json
index f24ef041..4fb2e828 100644
--- a/.github/badges/upstream-version.json
+++ b/.github/badges/upstream-version.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "BMAD Method",
- "message": "v6.2.2",
+ "message": "v6.6.0",
"color": "blue"
}
diff --git a/.gitignore b/.gitignore
index 3945a3ec..65a1d0f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
.upstream/
+.upstream-install/
.research/
.git-ignored/
node_modules/
diff --git a/.plugin-version b/.plugin-version
index 2617179a..a5237e2a 100644
--- a/.plugin-version
+++ b/.plugin-version
@@ -1 +1 @@
-v6.2.2.0
+v6.6.0.1
diff --git a/.upstream-versions/bmb.json b/.upstream-versions/bmb.json
index 126b5fa0..9c03a118 100644
--- a/.upstream-versions/bmb.json
+++ b/.upstream-versions/bmb.json
@@ -1,4 +1,4 @@
{
- "version": "v1.4.0",
- "syncedAt": "2026-03-30"
+ "version": "v1.7.0",
+ "syncedAt": "2026-05-10"
}
diff --git a/.upstream-versions/cis.json b/.upstream-versions/cis.json
index f7605dd3..fb7f0244 100644
--- a/.upstream-versions/cis.json
+++ b/.upstream-versions/cis.json
@@ -1,4 +1,4 @@
{
- "version": "v0.1.9",
- "syncedAt": "2026-03-30"
+ "version": "v0.2.0",
+ "syncedAt": "2026-05-10"
}
diff --git a/.upstream-versions/core.json b/.upstream-versions/core.json
index e312a1a0..aeead6b4 100644
--- a/.upstream-versions/core.json
+++ b/.upstream-versions/core.json
@@ -1,4 +1,4 @@
{
- "version": "v6.2.2",
- "syncedAt": "2026-03-30"
+ "version": "v6.6.0",
+ "syncedAt": "2026-05-10"
}
diff --git a/.upstream-versions/gds.json b/.upstream-versions/gds.json
index f7bd7816..c189a321 100644
--- a/.upstream-versions/gds.json
+++ b/.upstream-versions/gds.json
@@ -1,4 +1,4 @@
{
- "version": "v0.2.2",
- "syncedAt": "2026-03-30"
+ "version": "v0.4.0",
+ "syncedAt": "2026-05-10"
}
diff --git a/.upstream-versions/tea.json b/.upstream-versions/tea.json
index 5ab3188c..07f6e653 100644
--- a/.upstream-versions/tea.json
+++ b/.upstream-versions/tea.json
@@ -1,4 +1,4 @@
{
- "version": "v1.7.3",
- "syncedAt": "2026-03-30"
+ "version": "v1.17.0",
+ "syncedAt": "2026-05-10"
}
diff --git a/AGENTS.md b/AGENTS.md
index 98919145..0f49e715 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -14,44 +14,48 @@ All scripts use `bun run ';
+ await page.getByLabel('Bio').fill(xssPayload);
+ await page.getByRole('button', { name: 'Save' }).click();
+
+ // Reload and verify XSS is escaped (not executed)
+ await page.reload();
+ const bio = await page.getByTestId('user-bio').textContent();
+
+ // Text should be escaped, script should NOT execute
+ expect(bio).toContain('<script>');
+ expect(bio).not.toContain('';
+ await page.getByLabel('Bio').fill(xssPayload);
+ await page.getByRole('button', { name: 'Save' }).click();
+
+ // Reload and verify XSS is escaped (not executed)
+ await page.reload();
+ const bio = await page.getByTestId('user-bio').textContent();
+
+ // Text should be escaped, script should NOT execute
+ expect(bio).toContain('<script>');
+ expect(bio).not.toContain('';
+ await page.getByLabel('Bio').fill(xssPayload);
+ await page.getByRole('button', { name: 'Save' }).click();
+
+ // Reload and verify XSS is escaped (not executed)
+ await page.reload();
+ const bio = await page.getByTestId('user-bio').textContent();
+
+ // Text should be escaped, script should NOT execute
+ expect(bio).toContain('<script>');
+ expect(bio).not.toContain('';
+ await page.getByLabel('Bio').fill(xssPayload);
+ await page.getByRole('button', { name: 'Save' }).click();
+
+ // Reload and verify XSS is escaped (not executed)
+ await page.reload();
+ const bio = await page.getByTestId('user-bio').textContent();
+
+ // Text should be escaped, script should NOT execute
+ expect(bio).toContain('<script>');
+ expect(bio).not.toContain('';
+ await page.getByLabel('Bio').fill(xssPayload);
+ await page.getByRole('button', { name: 'Save' }).click();
+
+ // Reload and verify XSS is escaped (not executed)
+ await page.reload();
+ const bio = await page.getByTestId('user-bio').textContent();
+
+ // Text should be escaped, script should NOT execute
+ expect(bio).toContain('<script>');
+ expect(bio).not.toContain('';
+ await page.getByLabel('Bio').fill(xssPayload);
+ await page.getByRole('button', { name: 'Save' }).click();
+
+ // Reload and verify XSS is escaped (not executed)
+ await page.reload();
+ const bio = await page.getByTestId('user-bio').textContent();
+
+ // Text should be escaped, script should NOT execute
+ expect(bio).toContain('<script>');
+ expect(bio).not.toContain('';
+ await page.getByLabel('Bio').fill(xssPayload);
+ await page.getByRole('button', { name: 'Save' }).click();
+
+ // Reload and verify XSS is escaped (not executed)
+ await page.reload();
+ const bio = await page.getByTestId('user-bio').textContent();
+
+ // Text should be escaped, script should NOT execute
+ expect(bio).toContain('<script>');
+ expect(bio).not.toContain('';
+ await page.getByLabel('Bio').fill(xssPayload);
+ await page.getByRole('button', { name: 'Save' }).click();
+
+ // Reload and verify XSS is escaped (not executed)
+ await page.reload();
+ const bio = await page.getByTestId('user-bio').textContent();
+
+ // Text should be escaped, script should NOT execute
+ expect(bio).toContain('<script>');
+ expect(bio).not.toContain('';
+ await page.getByLabel('Bio').fill(xssPayload);
+ await page.getByRole('button', { name: 'Save' }).click();
+
+ // Reload and verify XSS is escaped (not executed)
+ await page.reload();
+ const bio = await page.getByTestId('user-bio').textContent();
+
+ // Text should be escaped, script should NOT execute
+ expect(bio).toContain('<script>');
+ expect(bio).not.toContain('