@lbruton/specflow 3.0.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +89 -0
- package/README.md +34 -26
- package/dist/core/__tests__/convention-detector.test.d.ts +2 -0
- package/dist/core/__tests__/convention-detector.test.d.ts.map +1 -0
- package/dist/core/__tests__/convention-detector.test.js +199 -0
- package/dist/core/__tests__/convention-detector.test.js.map +1 -0
- package/dist/core/__tests__/security-utils.test.js +2 -2
- package/dist/core/__tests__/security-utils.test.js.map +1 -1
- package/dist/core/__tests__/template-generator.test.d.ts +2 -0
- package/dist/core/__tests__/template-generator.test.d.ts.map +1 -0
- package/dist/core/__tests__/template-generator.test.js +167 -0
- package/dist/core/__tests__/template-generator.test.js.map +1 -0
- package/dist/core/convention-detector.d.ts +36 -0
- package/dist/core/convention-detector.d.ts.map +1 -0
- package/dist/core/convention-detector.js +298 -0
- package/dist/core/convention-detector.js.map +1 -0
- package/dist/core/project-registry.d.ts +6 -0
- package/dist/core/project-registry.d.ts.map +1 -1
- package/dist/core/project-registry.js +17 -1
- package/dist/core/project-registry.js.map +1 -1
- package/dist/core/security-utils.js +2 -2
- package/dist/core/security-utils.js.map +1 -1
- package/dist/core/template-generator.d.ts +21 -0
- package/dist/core/template-generator.d.ts.map +1 -0
- package/dist/core/template-generator.js +217 -0
- package/dist/core/template-generator.js.map +1 -0
- package/dist/markdown/templates/design-template.md +8 -6
- package/dist/markdown/templates/tasks-template.md +23 -20
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +3 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/tools/spec-status.d.ts.map +1 -1
- package/dist/tools/spec-status.js +35 -8
- package/dist/tools/spec-status.js.map +1 -1
- package/dist/tools/spec-workflow-guide.js +25 -15
- package/dist/tools/spec-workflow-guide.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security-utils.js","sourceRoot":"","sources":["../../src/core/security-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"security-utils.js","sourceRoot":"","sources":["../../src/core/security-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ProjectConventions } from './convention-detector.js';
|
|
2
|
+
export interface GeneratedTemplates {
|
|
3
|
+
designTemplate: string;
|
|
4
|
+
tasksTemplate: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Generate project-specific user-templates from detected conventions.
|
|
8
|
+
*
|
|
9
|
+
* Reads the current default templates (from .spec-workflow/templates/ or bundled fallback),
|
|
10
|
+
* then replaces the Testing Strategy and Standard Closing Tasks sections with
|
|
11
|
+
* project-specific content based on the detected conventions.
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateUserTemplates(projectPath: string, conventions: ProjectConventions): Promise<GeneratedTemplates>;
|
|
14
|
+
/**
|
|
15
|
+
* Write generated user-templates to `.spec-workflow/user-templates/`.
|
|
16
|
+
*
|
|
17
|
+
* IMPORTANT: If user-templates already exist, this function returns early
|
|
18
|
+
* without overwriting them. Users own their user-templates once created.
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeUserTemplates(projectPath: string, templates: GeneratedTemplates): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=template-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-generator.d.ts","sourceRoot":"","sources":["../../src/core/template-generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAInE,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AA+LD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAU7B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { readFile, mkdir, writeFile, stat } from 'fs/promises';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
/**
|
|
6
|
+
* Safely read a file, returning null on any error.
|
|
7
|
+
*/
|
|
8
|
+
async function safeReadFile(filePath) {
|
|
9
|
+
try {
|
|
10
|
+
return await readFile(filePath, 'utf-8');
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if a file exists.
|
|
18
|
+
*/
|
|
19
|
+
async function fileExists(filePath) {
|
|
20
|
+
try {
|
|
21
|
+
const s = await stat(filePath);
|
|
22
|
+
return s.isFile();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Read a default template by name, checking the project's .spec-workflow/templates/
|
|
30
|
+
* first, then falling back to the bundled src/markdown/templates/.
|
|
31
|
+
*/
|
|
32
|
+
async function readDefaultTemplate(projectPath, templateName) {
|
|
33
|
+
// Primary: project's copied templates
|
|
34
|
+
const projectTemplate = join(projectPath, '.spec-workflow', 'templates', `${templateName}.md`);
|
|
35
|
+
const content = await safeReadFile(projectTemplate);
|
|
36
|
+
if (content !== null) {
|
|
37
|
+
return content;
|
|
38
|
+
}
|
|
39
|
+
// Fallback: bundled source templates (compiled to dist/core/, so go up to dist/markdown/templates/)
|
|
40
|
+
const bundledTemplate = join(__dirname, '..', 'markdown', 'templates', `${templateName}.md`);
|
|
41
|
+
const bundledContent = await safeReadFile(bundledTemplate);
|
|
42
|
+
if (bundledContent !== null) {
|
|
43
|
+
return bundledContent;
|
|
44
|
+
}
|
|
45
|
+
throw new Error(`Could not find default template "${templateName}.md" in project or bundled sources`);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate the Testing Strategy section for browserbase projects.
|
|
49
|
+
*/
|
|
50
|
+
function generateBrowserbaseTestingStrategy() {
|
|
51
|
+
return `### Runbook E2E Tests (Primary)
|
|
52
|
+
- Identify affected \`tests/runbook/\` section(s): [01-page-load, 02-crud, 03-backup-restore, 04-import-export, 05-market, 06-ui-ux, 07-activity-log, 08-spot-prices]
|
|
53
|
+
- New test blocks to write (TDD — before implementation): [describe tests]
|
|
54
|
+
- Run via \`/bb-test sections=NN\` against PR preview URL
|
|
55
|
+
|
|
56
|
+
### Manual Verification
|
|
57
|
+
- [Any flows that require manual testing]`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Generate the Testing Strategy section for non-browserbase projects.
|
|
61
|
+
*/
|
|
62
|
+
function generateGenericTestingStrategy(conventions) {
|
|
63
|
+
const framework = conventions.testing.framework || 'Not detected — identify manually';
|
|
64
|
+
const command = conventions.testing.command || 'npm test';
|
|
65
|
+
const testDir = conventions.testing.testDir || 'tests/';
|
|
66
|
+
return `### Automated Tests
|
|
67
|
+
- **Test Framework:** ${framework}
|
|
68
|
+
- **Test Command:** \`${command}\`
|
|
69
|
+
- **Test Directory:** \`${testDir}\`
|
|
70
|
+
- **New tests to write (TDD — before implementation):** [describe tests using ${framework}]
|
|
71
|
+
- **Run via:** \`${command}\` after implementation
|
|
72
|
+
|
|
73
|
+
### Manual Verification
|
|
74
|
+
- [Any flows that require manual testing beyond the automated test suite]`;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Replace the Testing Strategy section in the design template with project-specific content.
|
|
78
|
+
*/
|
|
79
|
+
function replaceDesignTestingStrategy(template, conventions) {
|
|
80
|
+
const replacement = conventions.testing.hasBrowserbase
|
|
81
|
+
? generateBrowserbaseTestingStrategy()
|
|
82
|
+
: generateGenericTestingStrategy(conventions);
|
|
83
|
+
// Match the ## Testing Strategy section up to the next ## heading or end of file
|
|
84
|
+
const sectionRegex = /## Testing Strategy\n[\s\S]*?(?=\n## |\n$|$)/;
|
|
85
|
+
if (sectionRegex.test(template)) {
|
|
86
|
+
return template.replace(sectionRegex, `## Testing Strategy\n\n${replacement}`);
|
|
87
|
+
}
|
|
88
|
+
// If no Testing Strategy section found, append it
|
|
89
|
+
return template + `\n\n## Testing Strategy\n\n${replacement}\n`;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Generate the Standard Closing Tasks section for browserbase projects.
|
|
93
|
+
* Reproduces the runbook-specific tasks from the StakTrakr-era template.
|
|
94
|
+
*/
|
|
95
|
+
function generateBrowserbaseClosingTasks() {
|
|
96
|
+
return `## Standard Closing Tasks
|
|
97
|
+
|
|
98
|
+
- [ ] 6. Integration and testing
|
|
99
|
+
- Plan integration approach and identify affected runbook sections for TDD test authoring
|
|
100
|
+
- _Leverage: tests/runbook/*.md, /browserbase-test-maintenance skill_
|
|
101
|
+
- _Requirements: 6.0_
|
|
102
|
+
- _Prompt: Role: Integration Engineer with expertise in system integration and testing strategies | Task: Plan comprehensive integration approach following requirement 6.0. Identify which tests/runbook/ section files are affected by this spec and write new runbook test blocks BEFORE implementation tasks begin (TDD). Use the /browserbase-test-maintenance skill for format guidance and section mapping. | Restrictions: Must consider all system components, ensure proper test coverage, write tests in the standard 7-field runbook format | Success: Integration plan is comprehensive, runbook test blocks are written for all new user-facing behavior, tests are appended to the correct section files_
|
|
103
|
+
|
|
104
|
+
- [ ] 6.1 Write end-to-end runbook tests (TDD — write BEFORE implementation)
|
|
105
|
+
- Write runbook test blocks in tests/runbook/*.md for new user-facing behavior
|
|
106
|
+
- Use the /browserbase-test-maintenance skill for the standard 7-field format
|
|
107
|
+
- Map implementation changes to the correct runbook section file
|
|
108
|
+
- _Leverage: /browserbase-test-maintenance skill, tests/runbook/*.md section files_
|
|
109
|
+
- _Requirements: All_
|
|
110
|
+
- _Prompt: Role: QA Automation Engineer with expertise in Browserbase/Stagehand natural-language browser automation | Task: Write runbook test blocks in tests/runbook/*.md for all new user-facing behavior using the /browserbase-test-maintenance skill. Each test block must use the 7-field format (Test name, Added, Preconditions, Steps, Pass criteria, Tags, Section). Map changes to the correct section file. After implementation, verify by running /bb-test sections=NN against the PR preview URL. | Restrictions: Use the standard runbook format, append to section files (never modify existing tests), act steps must be atomic. No Playwright, no browserless. | Success: All new user-facing behavior has corresponding runbook test blocks, tests pass when run via /bb-test against the PR preview URL_
|
|
111
|
+
|
|
112
|
+
- [ ] 6.2 Verify tests against PR preview
|
|
113
|
+
- Run /bb-test sections=NN against PR preview URL to verify all new tests pass
|
|
114
|
+
- _Leverage: /bb-test skill, PR preview URL from gh pr checks_
|
|
115
|
+
- _Requirements: All_
|
|
116
|
+
- _Prompt: Role: QA Automation Engineer | Task: Run /bb-test sections=NN against the PR preview URL to verify all new runbook tests pass. Get the preview URL with: gh pr checks <PR_NUMBER> --json name,state,targetUrl. For 1-3 tests, consider manual verification via Chrome DevTools instead of a full Browserbase session. | Restrictions: Do NOT use Playwright or browserless. | Success: All new tests pass against the PR preview URL_
|
|
117
|
+
|
|
118
|
+
- [ ] 6.3 Final integration and cleanup
|
|
119
|
+
- Integrate all components
|
|
120
|
+
- Fix any integration issues
|
|
121
|
+
- Clean up code and documentation
|
|
122
|
+
- _Leverage: src/utils/cleanup.ts, docs/templates/_
|
|
123
|
+
- _Requirements: All_
|
|
124
|
+
- _Prompt: Role: Senior Developer with expertise in code quality and system integration | Task: Complete final integration of all components and perform comprehensive cleanup covering all requirements, using cleanup utilities and documentation templates | Restrictions: Must not break existing functionality, ensure code quality standards are met, maintain documentation consistency | Success: All components are fully integrated and working together, code is clean and well-documented, system meets all requirements and quality standards_`;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Generate the Standard Closing Tasks section for non-browserbase projects.
|
|
128
|
+
* Uses the generic test command from detected conventions.
|
|
129
|
+
*/
|
|
130
|
+
function generateGenericClosingTasks(conventions) {
|
|
131
|
+
const command = conventions.testing.command || 'npm test';
|
|
132
|
+
const framework = conventions.testing.framework || 'the project test framework';
|
|
133
|
+
return `## Standard Closing Tasks
|
|
134
|
+
|
|
135
|
+
- [ ] 6. Run project test suite and verify baseline
|
|
136
|
+
- Run \`${command}\` to establish a passing baseline before changes
|
|
137
|
+
- If no test suite exists, flag this and discuss with the user
|
|
138
|
+
- _Leverage: Project test configuration (package.json scripts, vitest.config, jest.config, etc.)_
|
|
139
|
+
- _Requirements: All_
|
|
140
|
+
- _Prompt: Role: QA Engineer | Task: Run the project's established test suite (\`${command}\`) to verify a passing baseline before implementation. If no test suite exists, flag this to the user. | Restrictions: Use the project's existing test framework, do not introduce a new one. | Success: Test suite runs and baseline results are recorded._
|
|
141
|
+
|
|
142
|
+
- [ ] 6.1 Write tests for new behavior (TDD — write BEFORE implementation)
|
|
143
|
+
- Write failing tests using ${framework} for all new behavior
|
|
144
|
+
- Tests should cover the acceptance criteria from requirements.md
|
|
145
|
+
- _Leverage: Project test framework, requirements.md acceptance criteria_
|
|
146
|
+
- _Requirements: All_
|
|
147
|
+
- _Prompt: Role: QA Engineer | Task: Write failing tests for all new behavior described in requirements.md using ${framework}. Follow TDD - tests must fail before implementation, pass after. | Restrictions: Use the project's existing test framework. Tests must be runnable with \`${command}\`. | Success: Failing tests exist for all new acceptance criteria._
|
|
148
|
+
|
|
149
|
+
- [ ] 6.2 Verify all tests pass after implementation
|
|
150
|
+
- Run \`${command}\` after all implementation tasks are complete
|
|
151
|
+
- All new tests must pass; no existing tests may regress
|
|
152
|
+
- _Leverage: Project test command_
|
|
153
|
+
- _Requirements: All_
|
|
154
|
+
- _Prompt: Role: QA Engineer | Task: Run \`${command}\`. Verify all new tests pass and no existing tests regressed. | Restrictions: Do not skip or disable failing tests. | Success: Full test suite passes with zero regressions._
|
|
155
|
+
|
|
156
|
+
- [ ] 6.3 Final integration and cleanup
|
|
157
|
+
- Integrate all components
|
|
158
|
+
- Verify no lint or type errors
|
|
159
|
+
- Clean up temporary code and documentation
|
|
160
|
+
- _Leverage: Project lint/build commands_
|
|
161
|
+
- _Requirements: All_
|
|
162
|
+
- _Prompt: Role: Senior Developer | Task: Complete final integration of all components and perform comprehensive cleanup. Run lint and type checks. Remove any temporary code or debug statements. | Restrictions: Must not break existing functionality. Ensure code quality standards are met. | Success: All components integrated, no lint or type errors, code is clean._`;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Replace the Standard Closing Tasks section in the tasks template with project-specific content.
|
|
166
|
+
*/
|
|
167
|
+
function replaceTasksClosingSection(template, conventions) {
|
|
168
|
+
const replacement = conventions.testing.hasBrowserbase
|
|
169
|
+
? generateBrowserbaseClosingTasks()
|
|
170
|
+
: generateGenericClosingTasks(conventions);
|
|
171
|
+
// Match the ## Standard Closing Tasks section to end of file
|
|
172
|
+
const sectionRegex = /## Standard Closing Tasks\n[\s\S]*$/;
|
|
173
|
+
if (sectionRegex.test(template)) {
|
|
174
|
+
return template.replace(sectionRegex, replacement.replace(/^## Standard Closing Tasks\n/, '## Standard Closing Tasks\n'));
|
|
175
|
+
}
|
|
176
|
+
// If no Standard Closing Tasks section found, append it
|
|
177
|
+
return template + '\n\n' + replacement + '\n';
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Generate project-specific user-templates from detected conventions.
|
|
181
|
+
*
|
|
182
|
+
* Reads the current default templates (from .spec-workflow/templates/ or bundled fallback),
|
|
183
|
+
* then replaces the Testing Strategy and Standard Closing Tasks sections with
|
|
184
|
+
* project-specific content based on the detected conventions.
|
|
185
|
+
*/
|
|
186
|
+
export async function generateUserTemplates(projectPath, conventions) {
|
|
187
|
+
const [designRaw, tasksRaw] = await Promise.all([
|
|
188
|
+
readDefaultTemplate(projectPath, 'design-template'),
|
|
189
|
+
readDefaultTemplate(projectPath, 'tasks-template'),
|
|
190
|
+
]);
|
|
191
|
+
const designTemplate = replaceDesignTestingStrategy(designRaw, conventions);
|
|
192
|
+
const tasksTemplate = replaceTasksClosingSection(tasksRaw, conventions);
|
|
193
|
+
return { designTemplate, tasksTemplate };
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Write generated user-templates to `.spec-workflow/user-templates/`.
|
|
197
|
+
*
|
|
198
|
+
* IMPORTANT: If user-templates already exist, this function returns early
|
|
199
|
+
* without overwriting them. Users own their user-templates once created.
|
|
200
|
+
*/
|
|
201
|
+
export async function writeUserTemplates(projectPath, templates) {
|
|
202
|
+
const userTemplatesDir = join(projectPath, '.spec-workflow', 'user-templates');
|
|
203
|
+
const designPath = join(userTemplatesDir, 'design-template.md');
|
|
204
|
+
const tasksPath = join(userTemplatesDir, 'tasks-template.md');
|
|
205
|
+
// Check if either user-template already exists — if so, do not overwrite
|
|
206
|
+
if (await fileExists(designPath) || await fileExists(tasksPath)) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
// Create directory if needed
|
|
210
|
+
await mkdir(userTemplatesDir, { recursive: true });
|
|
211
|
+
// Write both templates
|
|
212
|
+
await Promise.all([
|
|
213
|
+
writeFile(designPath, templates.designTemplate, 'utf-8'),
|
|
214
|
+
writeFile(tasksPath, templates.tasksTemplate, 'utf-8'),
|
|
215
|
+
]);
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=template-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-generator.js","sourceRoot":"","sources":["../../src/core/template-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -131,11 +131,13 @@ _If **No**, skip this section entirely. If **Yes**, complete all fields below
|
|
|
131
131
|
|
|
132
132
|
## Testing Strategy
|
|
133
133
|
|
|
134
|
-
###
|
|
135
|
-
- Identify
|
|
136
|
-
-
|
|
137
|
-
-
|
|
134
|
+
### Automated Tests
|
|
135
|
+
- **Test Framework:** [Identify the project's test framework — check for vitest.config, jest.config, pytest.ini, or package.json test script]
|
|
136
|
+
- **Test Command:** [The command to run the project's test suite — e.g., `npm test`, `npx vitest`, `pytest`]
|
|
137
|
+
- **Test Directory:** [Where tests live in this project — e.g., `src/__tests__/`, `tests/`, `test/`]
|
|
138
|
+
- **New tests to write (TDD — before implementation):** [describe tests using the project's framework]
|
|
139
|
+
- **Run via:** [project's test command] after implementation
|
|
138
140
|
|
|
139
141
|
### Manual Verification
|
|
140
|
-
- [Any flows that require manual testing
|
|
141
|
-
- [Flows requiring API keys
|
|
142
|
+
- [Any flows that require manual testing beyond the automated test suite]
|
|
143
|
+
- [Flows requiring API keys, external services, or user interaction]
|
|
@@ -153,30 +153,33 @@
|
|
|
153
153
|
- _Requirements: 5.2, 5.3_
|
|
154
154
|
- _Prompt: Role: React Developer with expertise in state management and API integration | Task: Implement feature-specific components following requirements 5.2 and 5.3, using API hooks from src/hooks/useApi.ts and extending BaseComponent patterns | Restrictions: Must use existing state management patterns, handle loading and error states properly, maintain component performance | Success: Components are fully functional with proper state management, API integration works smoothly, user experience is responsive and intuitive_
|
|
155
155
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
-
|
|
160
|
-
-
|
|
161
|
-
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
-
|
|
156
|
+
## Standard Closing Tasks
|
|
157
|
+
|
|
158
|
+
- [ ] 6. Run project test suite and verify baseline
|
|
159
|
+
- Run the project's test command to establish a passing baseline before changes
|
|
160
|
+
- If no test suite exists, flag this and discuss with the user
|
|
161
|
+
- _Leverage: Project test configuration (package.json scripts, vitest.config, jest.config, etc.)_
|
|
162
|
+
- _Requirements: All_
|
|
163
|
+
- _Prompt: Role: QA Engineer | Task: Run the project's established test suite to verify a passing baseline before implementation. Identify the test command from package.json, CLAUDE.md, or project conventions. If no test suite exists, flag this to the user. | Restrictions: Use the project's existing test framework, do not introduce a new one. | Success: Test suite runs and baseline results are recorded._
|
|
164
|
+
|
|
165
|
+
- [ ] 6.1 Write tests for new behavior (TDD — write BEFORE implementation)
|
|
166
|
+
- Write failing tests using the project's test framework for all new behavior
|
|
167
|
+
- Tests should cover the acceptance criteria from requirements.md
|
|
168
|
+
- _Leverage: Project test framework, requirements.md acceptance criteria_
|
|
167
169
|
- _Requirements: All_
|
|
168
|
-
- _Prompt: Role: QA
|
|
170
|
+
- _Prompt: Role: QA Engineer | Task: Write failing tests for all new behavior described in requirements.md using the project's test framework. Follow TDD - tests must fail before implementation, pass after. | Restrictions: Use the project's existing test framework. Tests must be runnable with the project's test command. | Success: Failing tests exist for all new acceptance criteria._
|
|
169
171
|
|
|
170
|
-
- [ ] 6.2 Verify tests
|
|
171
|
-
- Run
|
|
172
|
-
-
|
|
172
|
+
- [ ] 6.2 Verify all tests pass after implementation
|
|
173
|
+
- Run the full test suite after all implementation tasks are complete
|
|
174
|
+
- All new tests must pass; no existing tests may regress
|
|
175
|
+
- _Leverage: Project test command_
|
|
173
176
|
- _Requirements: All_
|
|
174
|
-
- _Prompt: Role: QA
|
|
177
|
+
- _Prompt: Role: QA Engineer | Task: Run the project's full test suite. Verify all new tests pass and no existing tests regressed. | Restrictions: Do not skip or disable failing tests. | Success: Full test suite passes with zero regressions._
|
|
175
178
|
|
|
176
179
|
- [ ] 6.3 Final integration and cleanup
|
|
177
180
|
- Integrate all components
|
|
178
|
-
-
|
|
179
|
-
- Clean up code and documentation
|
|
180
|
-
- _Leverage:
|
|
181
|
+
- Verify no lint or type errors
|
|
182
|
+
- Clean up temporary code and documentation
|
|
183
|
+
- _Leverage: Project lint/build commands_
|
|
181
184
|
- _Requirements: All_
|
|
182
|
-
- _Prompt: Role: Senior Developer
|
|
185
|
+
- _Prompt: Role: Senior Developer | Task: Complete final integration of all components and perform comprehensive cleanup. Run lint and type checks. Remove any temporary code or debug statements. | Restrictions: Must not break existing functionality. Ensure code quality standards are met. | Success: All components integrated, no lint or type errors, code is clean._
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,iBAAiB,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,iBAAiB,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0B1C;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAInE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAK,EAC9B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC,CAa1B"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -6,6 +6,9 @@ import { specStatusPrompt } from './spec-status.js';
|
|
|
6
6
|
import { injectSpecWorkflowGuidePrompt } from './inject-spec-workflow-guide.js';
|
|
7
7
|
import { injectSteeringGuidePrompt } from './inject-steering-guide.js';
|
|
8
8
|
import { refreshTasksPrompt } from './refresh-tasks.js';
|
|
9
|
+
// wrap is now a plugin skill (skills/wrap/SKILL.md), not an MCP prompt
|
|
10
|
+
// prime is now a plugin skill (skills/prime/SKILL.md), not an MCP prompt
|
|
11
|
+
// audit is now a plugin skill (skills/audit/SKILL.md), not an MCP prompt
|
|
9
12
|
// Registry of all prompts
|
|
10
13
|
const promptDefinitions = [
|
|
11
14
|
createSpecPrompt,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAIA,uCAAuC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAIA,uCAAuC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AAEzE,0BAA0B;AAC1B,MAAM,iBAAiB,GAAuB;IAC5C,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;IACnB,gBAAgB;IAChB,6BAA6B;IAC7B,yBAAyB;IACzB,kBAAkB;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO;QACL,OAAO,EAAE,eAAe,EAAE;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,OAA4B,EAAE,EAC9B,OAAoB;IAEpB,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAE1E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-status.d.ts","sourceRoot":"","sources":["../../src/tools/spec-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"spec-status.d.ts","sourceRoot":"","sources":["../../src/tools/spec-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOxD,eAAO,MAAM,cAAc,EAAE,IAwB5B,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAqP9F"}
|
|
@@ -84,6 +84,17 @@ export async function specStatusHandler(args, context) {
|
|
|
84
84
|
currentPhase = 'implementation';
|
|
85
85
|
overallStatus = 'ready-for-implementation';
|
|
86
86
|
}
|
|
87
|
+
// Read project conventions if available
|
|
88
|
+
let conventions = null;
|
|
89
|
+
try {
|
|
90
|
+
const { promises: fsPromises } = await import('fs');
|
|
91
|
+
const convPath = `${translatedPath}/.spec-workflow/project-conventions.json`;
|
|
92
|
+
const convContent = await fsPromises.readFile(convPath, 'utf-8');
|
|
93
|
+
conventions = JSON.parse(convContent);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// No conventions file — use generic defaults
|
|
97
|
+
}
|
|
87
98
|
// Phase details
|
|
88
99
|
const phaseDetails = [
|
|
89
100
|
{
|
|
@@ -114,13 +125,26 @@ export async function specStatusHandler(args, context) {
|
|
|
114
125
|
{
|
|
115
126
|
name: 'Post-Implementation',
|
|
116
127
|
status: currentPhase === 'post-implementation' ? 'action-required' : 'not-started',
|
|
117
|
-
checklist: currentPhase === 'post-implementation' ?
|
|
118
|
-
'DocVault updated (/vault-update)'
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
128
|
+
checklist: currentPhase === 'post-implementation' ? (() => {
|
|
129
|
+
const items = ['DocVault updated (/vault-update)'];
|
|
130
|
+
// Dynamic test item based on conventions
|
|
131
|
+
const testItem = conventions?.testing?.command
|
|
132
|
+
? `Tests run (${conventions.testing.command})`
|
|
133
|
+
: 'Project test suite run';
|
|
134
|
+
items.push(testItem);
|
|
135
|
+
// Conditional version bump
|
|
136
|
+
if (conventions?.versioning?.hasVersionLock) {
|
|
137
|
+
items.push('Version bumped');
|
|
138
|
+
}
|
|
139
|
+
// Conditional changelog
|
|
140
|
+
if (conventions?.changelog?.hasChangelog || conventions?.changelog?.docvaultFallback) {
|
|
141
|
+
items.push('Changelog updated');
|
|
142
|
+
}
|
|
143
|
+
items.push('Vault issues closed (mark Done)');
|
|
144
|
+
items.push('GitHub issues closed (gh issue close)');
|
|
145
|
+
items.push('Spec archived');
|
|
146
|
+
return items;
|
|
147
|
+
})() : undefined
|
|
124
148
|
}
|
|
125
149
|
];
|
|
126
150
|
// Next steps based on current phase
|
|
@@ -164,7 +188,10 @@ export async function specStatusHandler(args, context) {
|
|
|
164
188
|
nextSteps.push('All tasks completed (marked [x]) — Phase 5 required before spec is done');
|
|
165
189
|
nextSteps.push('1. Run /vault-update to update affected DocVault documentation');
|
|
166
190
|
nextSteps.push('2. Commit DocVault changes (DocVault commits go direct to main)');
|
|
167
|
-
|
|
191
|
+
const testStep = conventions?.testing?.command
|
|
192
|
+
? `3. Run project test suite (${conventions.testing.command})`
|
|
193
|
+
: '3. Run project test suite';
|
|
194
|
+
nextSteps.push(testStep);
|
|
168
195
|
nextSteps.push('4. CLOSE all linked vault issues (mark status as Done in the issue markdown file)');
|
|
169
196
|
nextSteps.push('5. CLOSE the linked GitHub issue if one exists (gh issue close)');
|
|
170
197
|
nextSteps.push('6. Archive the spec after all issues are closed');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-status.js","sourceRoot":"","sources":["../../src/tools/spec-status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"spec-status.js","sourceRoot":"","sources":["../../src/tools/spec-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -292,6 +292,12 @@ flowchart TD
|
|
|
292
292
|
- **No contradictions**: Check for conflicting statements between documents (e.g., design says "modal" but tasks say "inline panel").
|
|
293
293
|
- **Prototype consistency**: If design.md references a prototype HTML file, verify it appears in task 0.1-0.3 artifacts and/or task \`_Leverage\` fields.
|
|
294
294
|
- **File touch map validation**: Verify the File Touch Map in tasks.md covers all files mentioned in individual tasks.
|
|
295
|
+
- **Test Design Coverage**: At least one task in tasks.md covers test authoring for new behavior (matching task title/description patterns: "test", "TDD", "verify", "write tests"). If no test task found → FAIL.
|
|
296
|
+
- **Release Hygiene**: Check \`.spec-workflow/project-conventions.json\` (if exists):
|
|
297
|
+
- If version lock detected: verify a task covers version bump. Missing → FAIL.
|
|
298
|
+
- If changelog detected: verify a task covers changelog entry. Missing → FAIL.
|
|
299
|
+
- Verify a task covers DocVault documentation update. Missing → FAIL.
|
|
300
|
+
- If no conventions file exists: note "No project conventions detected — consider running convention detection" as an advisory finding (not a failure).
|
|
295
301
|
3. Save the report as \`readiness-report.md\` in the spec folder using the output format below.
|
|
296
302
|
4. Request dashboard approval using approvals tool with action:'request', filePath pointing to readiness-report.md
|
|
297
303
|
5. Poll status using approvals with action:'status' until responded — the user has THREE options on the dashboard:
|
|
@@ -325,6 +331,14 @@ flowchart TD
|
|
|
325
331
|
## File Touch Map
|
|
326
332
|
- Consistent | [Task 5 touches foo.js but File Touch Map omits it]
|
|
327
333
|
|
|
334
|
+
## Test Design Coverage
|
|
335
|
+
- Task N: "[test task title]" ✓ | [NO TEST TASK FOUND] ✗
|
|
336
|
+
|
|
337
|
+
## Release Hygiene
|
|
338
|
+
- Version bump task: ✓ / ✗ / N/A (no version lock)
|
|
339
|
+
- Changelog task: ✓ / ✗ / N/A (no changelog)
|
|
340
|
+
- DocVault task: ✓ / ✗
|
|
341
|
+
|
|
328
342
|
## Agent Recommendation
|
|
329
343
|
{Brief explanation of the recommendation — why PASS/CONCERNS/FAIL}
|
|
330
344
|
\`\`\`
|
|
@@ -457,23 +471,19 @@ Only dispatch AFTER Stage 1 passes. Verify the code is well-built and production
|
|
|
457
471
|
|
|
458
472
|
Phase 5 has three stages. The spec is NOT complete until all three are done.
|
|
459
473
|
|
|
460
|
-
#### Phase 5.1: Automated
|
|
461
|
-
|
|
462
|
-
**Tools**:
|
|
463
|
-
- Skill \`bb-test\`: Browserbase/Stagehand cloud E2E tests — **primary E2E tool for all specs**
|
|
474
|
+
#### Phase 5.1: Automated Testing
|
|
464
475
|
|
|
465
|
-
|
|
476
|
+
**Purpose**: Run the project's test suite to verify the implementation.
|
|
466
477
|
|
|
467
478
|
**Process**:
|
|
468
|
-
1.
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
3. If E2E tests fail: fix the failures before proceeding to QA. Do not skip to 5.2 with known test failures.
|
|
479
|
+
1. Check \`.spec-workflow/project-conventions.json\` for the project's test command and framework.
|
|
480
|
+
2. If conventions exist and specify a test command: run that command (e.g., \`npm test\`, \`npx vitest\`, \`pytest\`).
|
|
481
|
+
3. If no conventions exist: check \`package.json\` for a \`test\` script. If found, run \`npm test\`. If not found, ask the user for the test command.
|
|
482
|
+
4. If the project uses Browserbase/Stagehand (\`conventions.testing.hasBrowserbase\` is true):
|
|
483
|
+
- Get the PR preview URL from the draft PR's deployment checks
|
|
484
|
+
- Run \`/bb-test\` with the preview URL for E2E browser testing
|
|
485
|
+
- This is IN ADDITION to the unit/integration tests from step 2
|
|
486
|
+
5. If tests fail: fix the failures before proceeding to QA. Do not skip to 5.2 with known test failures.
|
|
477
487
|
|
|
478
488
|
#### Phase 5.2: User QA Session
|
|
479
489
|
|
|
@@ -530,7 +540,7 @@ Phase 5 has three stages. The spec is NOT complete until all three are done.
|
|
|
530
540
|
- Get explicit user approval between phases (using approvals tool with action:'request')
|
|
531
541
|
- Complete phases in sequence (no skipping)
|
|
532
542
|
- Phase 5 has three stages: 5.1 (automated E2E), 5.2 (user QA session), 5.3 (docs + PR finalization) — all three are mandatory. Docs run AFTER QA so documentation captures final post-QA code
|
|
533
|
-
- Phase 5
|
|
543
|
+
- Phase 5.1 runs the project's test suite as detected in project-conventions.json. Browserbase/Stagehand is used additionally when the project has browser-based E2E tests.
|
|
534
544
|
- CRITICAL: During Phase 5.2 (User QA), the agent MUST NOT suggest merging, declare the work done, or push back on findings. The user drives QA, the agent fixes. QA ends ONLY when the user says so
|
|
535
545
|
- CRITICAL: The spec finish line is marking the PR ready for review (Phase 5.3), NOT passing automated tests. Automated tests passing = ready for QA, not ready to merge
|
|
536
546
|
- One spec at a time
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-workflow-guide.js","sourceRoot":"","sources":["../../src/tools/spec-workflow-guide.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAS;IACzC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE;;;kXAGmW;IAChX,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,KAAK;KAC5B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAS,EAAE,OAAoB;IAC5E,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7C,kCAAkC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1D,gEAAgE,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,oEAAoE;QAC7E,IAAI,EAAE;YACJ,KAAK,EAAE,oBAAoB,EAAE;YAC7B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY;SAC3C;QACD,SAAS,EAAE;YACT,iEAAiE;YACjE,gDAAgD;YAChD,sCAAsC;YACtC,oBAAoB;YACpB,gBAAgB;SACjB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB;IAC3B,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,OAAO;;;;6PAIoP,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+EA6IzL,WAAW;;;;;;;;;;;;;;;;;;;;;;;yEAuBjB,WAAW
|
|
1
|
+
{"version":3,"file":"spec-workflow-guide.js","sourceRoot":"","sources":["../../src/tools/spec-workflow-guide.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAS;IACzC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE;;;kXAGmW;IAChX,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,KAAK;KAC5B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAS,EAAE,OAAoB;IAC5E,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7C,kCAAkC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1D,gEAAgE,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,oEAAoE;QAC7E,IAAI,EAAE;YACJ,KAAK,EAAE,oBAAoB,EAAE;YAC7B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY;SAC3C;QACD,SAAS,EAAE;YACT,iEAAiE;YACjE,gDAAgD;YAChD,sCAAsC;YACtC,oBAAoB;YACpB,gBAAgB;SACjB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB;IAC3B,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,OAAO;;;;6PAIoP,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+EA6IzL,WAAW;;;;;;;;;;;;;;;;;;;;;;;yEAuBjB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2X7E,CAAC;AACR,CAAC"}
|