@@ -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