Skip to content

Commit 3d1e784

Browse files
Lalitclaude
andcommitted
feat(qcsd): add live website URL support for QCSD Ideation Swarm
- Add extractWebsiteContent action for URL-to-epic conversion - Implement HTML parsing to detect e-commerce features (cart, login, etc.) - Generate acceptance criteria from detected website features - Add content flag detection for conditional agent spawning - Wire extractWebsiteContent as first step in qcsd-ideation-swarm workflow - Add comprehensive integration tests (24 tests) covering: - Feature extraction from e-commerce HTML - Acceptance criteria generation - Error handling (invalid URLs, HTTP errors, network failures) - Passthrough mode for non-URL epic input - Workflow execution integration Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 37ffeee commit 3d1e784

File tree

5 files changed

+1098
-18
lines changed

5 files changed

+1098
-18
lines changed

v3/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

v3/src/coordination/workflow-orchestrator.ts

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1852,25 +1852,47 @@ export class WorkflowOrchestrator implements IWorkflowOrchestrator {
18521852
// Per QCSD framework: Quality Criteria sessions during PI/Sprint Planning
18531853
// Primary: qe-quality-criteria-recommender (HTSM v6.3 analysis)
18541854
// Supporting: testability-scoring, qe-risk-assessor, qe-requirements-validator
1855+
// Enhanced: Supports live URL input - extracts website content for analysis
18551856
this.registerWorkflow({
18561857
id: 'qcsd-ideation-swarm',
18571858
name: 'QCSD Ideation Swarm',
18581859
description:
1859-
'Quality Conscious Software Delivery ideation phase: quality-criteria (HTSM) -> [testability, risk, requirements] in parallel -> aggregated report',
1860-
version: '1.0.0',
1861-
tags: ['qcsd', 'ideation', 'quality-criteria', 'htsm', 'shift-left'],
1860+
'Quality Conscious Software Delivery ideation phase: [url-extraction] -> quality-criteria (HTSM) -> [testability, risk, requirements] in parallel -> aggregated report. Supports live website URLs.',
1861+
version: '2.0.0',
1862+
tags: ['qcsd', 'ideation', 'quality-criteria', 'htsm', 'shift-left', 'url-analysis'],
18621863
steps: [
1864+
// Step 0: Optional - Website Content Extraction (for URL input)
1865+
{
1866+
id: 'website-content-extraction',
1867+
name: 'Website Content Extraction',
1868+
domain: 'requirements-validation',
1869+
action: 'extractWebsiteContent',
1870+
inputMapping: {
1871+
url: 'input.url',
1872+
},
1873+
outputMapping: {
1874+
extractedDescription: 'extraction.description',
1875+
extractedFeatures: 'extraction.features',
1876+
extractedAcceptanceCriteria: 'extraction.acceptanceCriteria',
1877+
detectedFlags: 'extraction.flags',
1878+
isWebsite: 'extraction.isWebsite',
1879+
},
1880+
timeout: 60000, // 1 minute for URL fetch
1881+
continueOnFailure: true, // Continue even if URL fetch fails
1882+
},
18631883
// Step 1: Primary - Quality Criteria Analysis (HTSM v6.3)
18641884
{
18651885
id: 'quality-criteria-analysis',
18661886
name: 'HTSM Quality Criteria Analysis',
18671887
domain: 'requirements-validation',
18681888
action: 'analyzeQualityCriteria',
1889+
dependsOn: ['website-content-extraction'],
18691890
inputMapping: {
18701891
targetId: 'input.targetId',
18711892
targetType: 'input.targetType',
1872-
description: 'input.description',
1873-
acceptanceCriteria: 'input.acceptanceCriteria',
1893+
// Use extracted description if available, otherwise use input
1894+
description: 'results.website-content-extraction.extractedDescription || input.description',
1895+
acceptanceCriteria: 'results.website-content-extraction.extractedAcceptanceCriteria || input.acceptanceCriteria',
18741896
},
18751897
outputMapping: {
18761898
qualityCriteria: 'qualityCriteria.criteria',
@@ -1888,8 +1910,8 @@ export class WorkflowOrchestrator implements IWorkflowOrchestrator {
18881910
dependsOn: ['quality-criteria-analysis'],
18891911
inputMapping: {
18901912
targetId: 'input.targetId',
1891-
description: 'input.description',
1892-
acceptanceCriteria: 'input.acceptanceCriteria',
1913+
description: 'results.website-content-extraction.extractedDescription || input.description',
1914+
acceptanceCriteria: 'results.website-content-extraction.extractedAcceptanceCriteria || input.acceptanceCriteria',
18931915
},
18941916
outputMapping: {
18951917
overallScore: 'testability.overallScore',
@@ -1910,7 +1932,7 @@ export class WorkflowOrchestrator implements IWorkflowOrchestrator {
19101932
inputMapping: {
19111933
targetId: 'input.targetId',
19121934
targetType: 'input.targetType',
1913-
description: 'input.description',
1935+
description: 'results.website-content-extraction.extractedDescription || input.description',
19141936
},
19151937
outputMapping: {
19161938
overallRisk: 'risks.overallRisk',
@@ -1930,8 +1952,8 @@ export class WorkflowOrchestrator implements IWorkflowOrchestrator {
19301952
dependsOn: ['quality-criteria-analysis'],
19311953
inputMapping: {
19321954
targetId: 'input.targetId',
1933-
description: 'input.description',
1934-
acceptanceCriteria: 'input.acceptanceCriteria',
1955+
description: 'results.website-content-extraction.extractedDescription || input.description',
1956+
acceptanceCriteria: 'results.website-content-extraction.extractedAcceptanceCriteria || input.acceptanceCriteria',
19351957
},
19361958
outputMapping: {
19371959
valid: 'requirements.valid',
@@ -1941,22 +1963,23 @@ export class WorkflowOrchestrator implements IWorkflowOrchestrator {
19411963
timeout: 90000,
19421964
continueOnFailure: true,
19431965
},
1944-
// Step 3: Optional - Security Threat Modeling (if security concerns detected)
1966+
// Step 3: Optional - Security Threat Modeling (if security concerns or URL with security features)
19451967
{
19461968
id: 'security-threat-modeling',
19471969
name: 'Early Security Threat Modeling',
19481970
domain: 'security-compliance',
19491971
action: 'modelSecurityThreats',
19501972
dependsOn: ['quality-criteria-analysis'],
1973+
// Trigger if explicitly requested OR if website extraction detected security features
19511974
condition: {
1952-
path: 'input.securityCritical',
1975+
path: 'results.website-content-extraction.detectedFlags.hasSecurity || input.securityCritical',
19531976
operator: 'eq',
19541977
value: true,
19551978
},
19561979
inputMapping: {
19571980
targetId: 'input.targetId',
1958-
description: 'input.description',
1959-
securityCritical: 'input.securityCritical',
1981+
description: 'results.website-content-extraction.extractedDescription || input.description',
1982+
securityCritical: 'results.website-content-extraction.detectedFlags.hasSecurity || input.securityCritical',
19601983
},
19611984
outputMapping: {
19621985
threats: 'security.threats',

0 commit comments

Comments
 (0)