Skip to content

fix #1891 - support wider range of characters in relationship labels #887

fix #1891 - support wider range of characters in relationship labels

fix #1891 - support wider range of characters in relationship labels #887

Triggered via pull request November 28, 2025 22:18
Status Failure
Total duration 1m 9s
Artifacts

build-calm-widgets.yml

on: pull_request
Build, Test, and Lint Calm Widgets Module
1m 4s
Build, Test, and Lint Calm Widgets Module
Fit to window
Zoom out
Zoom in

Annotations

10 errors
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > filters architecture based on node focusing with comprehensive scenarios: calm-widgets/src/widgets.e2e.spec.ts#L296
AssertionError: expected '## Single Node Focus [focus-nodes="we…' to be '## Single Node Focus [focus-nodes="we…' // Object.is equality - Expected + Received @@ -9,11 +9,11 @@ api-gateway["API Gateway"]:::node web-app["Web Application"]:::node - web-app -->|Web app connects to API gateway| api-gateway + web-app -->|"Web app connects to API gateway"| api-gateway class web-app highlight ``` @@ -36,14 +36,14 @@ api-gateway["API Gateway"]:::node load-balancer["Load Balancer"]:::node web-app["Web Application"]:::node - web-app -->|Web app connects to API gateway| api-gateway + web-app -->|"Web app connects to API gateway"| api-gateway - api-gateway -->|Gateway routes to user service| user-service + api-gateway -->|"Gateway routes to user service"| user-service - api-gateway -->|Gateway routes to order service| order-service + api-gateway -->|"Gateway routes to order service"| order-service - load-balancer -->|Load balancer routes to API gateway| api-gateway + load-balancer -->|"Load balancer routes to API gateway"| api-gateway class api-gateway highlight ``` @@ -67,16 +67,16 @@ api-gateway["API Gateway"]:::node notification-service["Notification Service"]:::node database["PostgreSQL Database"]:::node - api-gateway -->|Gateway routes to user service| user-service + api-gateway -->|"Gateway routes to user service"| user-service - api-gateway -->|Gateway routes to order service| order-service + api-gateway -->|"Gateway routes to order service"| order-service - order-service -->|Order service calls payment service| payment-service + order-service -->|"Order service calls payment service"| payment-service - order-service -->|Order service triggers notifications| notification-service + order-service -->|"Order service triggers notifications"| notification-service - user-service -->|User service connects to database| database + user-service -->|"User service connects to database"| database - order-service -->|Order service connects to database| database + order-service -->|"Order service connects to database"| database class user-service highlight class order-service highlight @@ -98,12 +98,12 @@ end class backend-container boundary database["PostgreSQL Database"]:::node - user-service -->|User service connects to database| database + user-service -->|"User service connects to database"| database - order-service -->|Order service connects to database| database + order-service -->|"Order service connects to database"| database class database highlight ``` @@ -128,17 +128,17 @@ api-gateway["API Gateway"]:::node notification-service["Notification Service"]:::node database["PostgreSQL Database"]:::node redis-cache["Redis Cache"]:::node - api-gateway -->|Gateway routes to user service| user-service + api-gateway -->|"Gateway routes to user service"| user-service - api-gateway -->|Gateway routes to order service| order-service + api-gateway -->|"Gateway routes to order service"| order-service - order-service -->|Order service calls payment service| payment-service + order-service -->|"Order service calls payment service"| payment-service - order-service -->|Order service triggers notifications| notification-service + order-service -->|"Order service triggers notifications"| notification-service - user-service -->|User service connects to database| database + user-service -->|"User service connects to database"| database - order-service -->|Order service connects to database| database + order-service -->|"Order service connects to database"| database - payment-service -->|Payment service uses cache| redis-cache + payment-service -->|"Payment service uses cache"| redis-cache class backend-container highlight ``` ❯ src/widgets.e2e.spec.ts:296:35
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > filters architecture based on control matching by ID and properties: calm-widgets/src/widgets.e2e.spec.ts#L289
AssertionError: expected '## Default Architecture (No Focus)\n`…' to be '## Default Architecture (No Focus)\n`…' // Object.is equality - Expected + Received @@ -12,13 +12,13 @@ database-server["Database Server"]:::node frontend-app["Frontend Application"]:::node payment-processor["Payment Processing Service"]:::node web-server["Web Server"]:::node - web-server -->|Web server connects to API service| api-service + web-server -->|"Web server connects to API service"| api-service - api-service -->|API service connects to database| database-server + api-service -->|"API service connects to database"| database-server - frontend-app -->|Frontend connects to payment processor| payment-processor + frontend-app -->|"Frontend connects to payment processor"| payment-processor ``` @@ -50,11 +50,11 @@ api-service["API Service"]:::node web-server["Web Server"]:::node - web-server -->|Web server connects to API service| api-service + web-server -->|"Web server connects to API service"| api-service ``` @@ -70,12 +70,12 @@ api-service["API Service"]:::node database-server["Database Server"]:::node web-server["Web Server"]:::node - web-server -->|Web server connects to API service| api-service + web-server -->|"Web server connects to API service"| api-service - api-service -->|API service connects to database| database-server + api-service -->|"API service connects to database"| database-server ``` @@ -106,11 +106,11 @@ frontend-app["Frontend Application"]:::node payment-processor["Payment Processing Service"]:::node - frontend-app -->|Frontend connects to payment processor| payment-processor + frontend-app -->|"Frontend connects to payment processor"| payment-processor ``` @@ -127,11 +127,11 @@ api-service["API Service"]:::node frontend-app["Frontend Application"]:::node payment-processor["Payment Processing Service"]:::node web-server["Web Server"]:::node - web-server -->|Web server connects to API service| api-service + web-server -->|"Web server connects to API service"| api-service - frontend-app -->|Frontend connects to payment processor| payment-processor + frontend-app -->|"Frontend connects to payment processor"| payment-processor ``` ❯ src/widgets.e2e.spec.ts:289:35
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > filters architecture based on interface matching by unique-id and properties: calm-widgets/src/widgets.e2e.spec.ts#L282
AssertionError: expected '## Focus on All Interfaces [render-in…' to be '## Focus on All Interfaces [render-in…' // Object.is equality - Expected + Received @@ -29,18 +29,18 @@ trade-service["Trade Service"]:::node trade-service__iface__trade-data-interface["◻ trade-data-interface"]:::iface trade-service__iface__trade-websocket["◻ trade-websocket"]:::iface trade-service__iface__trade-metrics["◻ trade-metrics"]:::iface - api-gateway__iface__gateway-rest -->|API Gateway routes product requests| product-service__iface__product-data-interface + api-gateway__iface__gateway-rest -->|"API Gateway routes product requests"| product-service__iface__product-data-interface - api-gateway__iface__gateway-rest -->|API Gateway routes account requests| account-service__iface__account-data-interface + api-gateway__iface__gateway-rest -->|"API Gateway routes account requests"| account-service__iface__account-data-interface - api-gateway__iface__gateway-rest -->|API Gateway routes trade requests| trade-service__iface__trade-data-interface + api-gateway__iface__gateway-rest -->|"API Gateway routes trade requests"| trade-service__iface__trade-data-interface - trade-service__iface__trade-data-interface -->|Trade service publishes execution events| kafka-broker__iface__kafka-events + trade-service__iface__trade-data-interface -->|"Trade service publishes execution events"| kafka-broker__iface__kafka-events - account-service__iface__account-data-interface -->|Account service publishes update events| kafka-broker__iface__kafka-events + account-service__iface__account-data-interface -->|"Account service publishes update events"| kafka-broker__iface__kafka-events - legacy-system__iface__legacy-trade-interface -->|Legacy system publishes trades via adapter| kafka-broker__iface__kafka-events + legacy-system__iface__legacy-trade-interface -->|"Legacy system publishes trades via adapter"| kafka-broker__iface__kafka-events - trade-service__iface__trade-data-interface -->|Trade service validates account balance| account-service__iface__account-data-interface + trade-service__iface__trade-data-interface -->|"Trade service validates account balance"| account-service__iface__account-data-interface - trade-service__iface__trade-data-interface -->|Trade service gets product pricing| product-service__iface__product-data-interface + trade-service__iface__trade-data-interface -->|"Trade service gets product pricing"| product-service__iface__product-data-interface product-service -.- product-service__iface__product-data-interface product-service -.- product-service__iface__product-rest-api product-service -.- product-service__iface__product-health-check account-service -.- account-service__iface__account-data-interface @@ -123,12 +123,12 @@ trade-service["Trade Service"]:::node trade-service__iface__trade-data-interface["◻ trade-data-interface"]:::iface trade-service__iface__trade-websocket["◻ trade-websocket"]:::iface trade-service__iface__trade-metrics["◻ trade-metrics"]:::iface - api-gateway__iface__gateway-rest -->|API Gateway routes product requests| product-service__iface__product-data-interface + api-gateway__iface__gateway-rest -->|"API Gateway routes product requests"| product-service__iface__product-data-interface - trade-service__iface__trade-data-interface -->|Trade service gets product pricing| product-service__iface__product-data-interface + trade-service__iface__trade-data-interface -->|"Trade service gets product pricing"| product-service__iface__product-data-interface product-service -.- product-service__iface__product-data-interface product-service -.- product-service__iface__product-rest-api product-service -.- product-service__iface__product-health-check trade-service -.- trade-service__iface__trade-data-interface ❯ src/widgets.e2e.spec.ts:282:35
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > filters architecture based on specific flows: calm-widgets/src/widgets.e2e.spec.ts#L275
AssertionError: expected '## Default Architecture with All Flow…' to be '## Default Architecture with All Flow…' // Object.is equality - Expected + Received @@ -39,17 +39,17 @@ class payments-system boundary end class ecommerce-platform boundary - web-app -->|HTTP requests| api-gateway + web-app -->|"HTTP requests"| api-gateway - api-gateway -->|User operations| user-service + api-gateway -->|"User operations"| user-service - api-gateway -->|Order operations| order-service + api-gateway -->|"Order operations"| order-service - order-service -->|Process payment| payment-service + order-service -->|"Process payment"| payment-service - payment-service -->|Payment notification| notification-service + payment-service -->|"Payment notification"| notification-service - user-service -->|Store user data| user-db + user-service -->|"Store user data"| user-db - order-service -->|Store order data| order-db + order-service -->|"Store order data"| order-db ``` @@ -67,14 +67,14 @@ notification-service["Notification Service"]:::node order-service["Order Service"]:::node payment-service["Payment Service"]:::node web-app["Web Application"]:::node - web-app -->|HTTP requests| api-gateway + web-app -->|"HTTP requests"| api-gateway - api-gateway -->|Order operations| order-service + api-gateway -->|"Order operations"| order-service - order-service -->|Process payment| payment-service + order-service -->|"Process payment"| payment-service - payment-service -->|Payment notification| notification-service + payment-service -->|"Payment notification"| notification-service ``` @@ -107,13 +107,13 @@ class data-platform boundary end class ecommerce-platform boundary - web-app -->|HTTP requests| api-gateway + web-app -->|"HTTP requests"| api-gateway - api-gateway -->|User operations| user-service + api-gateway -->|"User operations"| user-service - user-service -->|Store user data| user-db + user-service -->|"Store user data"| user-db ``` @@ -157,15 +157,15 @@ class payments-system boundary end class ecommerce-platform boundary - web-app -->|HTTP requests| api-gateway + web-app -->|"HTTP requests"| api-gateway - api-gateway -->|User operations| user-service + api-gateway -->|"User operations"| user-service - api-gateway -->|Order operations| order-service + api-gateway -->|"Order operations"| order-service - order-service -->|Process payment| payment-service + order-service -->|"Process payment"| payment-service - payment-service -->|Payment notification| notification-service + payment-service -->|"Payment notification"| notification-service - user-service -->|Store user data| user-db + user-service -->|"Store user data"| user-db ``` ❯ src/widgets.e2e.spec.ts:275:35
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > applies domain interaction diagram: calm-widgets/src/widgets.e2e.spec.ts#L267
AssertionError: expected '## Domain-Only View [node-types="doma…' to be '## Domain-Only View [node-types="doma…' // Object.is equality - Expected + Received @@ -12,14 +12,14 @@ catalog-domain["Catalog Domain"]:::node customer-domain["Customer Domain"]:::node inventory-domain["Inventory Domain"]:::node order-domain["Order Domain"]:::node - order-domain -->|Needs product data| catalog-domain + order-domain -->|"Needs product data"| catalog-domain - order-domain -->|Needs customer profile| customer-domain + order-domain -->|"Needs customer profile"| customer-domain - order-domain -->|Reserves inventory| inventory-domain + order-domain -->|"Reserves inventory"| inventory-domain - order-domain -->|Requests payment authorization| billing-domain + order-domain -->|"Requests payment authorization"| billing-domain class order-domain highlight class catalog-domain highlight class customer-domain highlight @@ -68,18 +68,18 @@ class order-domain boundary end class commerce-platform boundary - order-ui -->|User places order| order-svc + order-ui -->|"User places order"| order-svc - order-svc -->|Fetch product details| catalog-svc + order-svc -->|"Fetch product details"| catalog-svc - order-svc -->|Retrieve customer profile| customer-svc + order-svc -->|"Retrieve customer profile"| customer-svc - order-svc -->|Reserve inventory| inventory-svc + order-svc -->|"Reserve inventory"| inventory-svc - checkout-svc -->|Authorize payment| billing-svc + checkout-svc -->|"Authorize payment"| billing-svc - order-domain -->|Needs product data| catalog-domain + order-domain -->|"Needs product data"| catalog-domain - order-domain -->|Needs customer profile| customer-domain + order-domain -->|"Needs customer profile"| customer-domain - order-domain -->|Reserves inventory| inventory-domain + order-domain -->|"Reserves inventory"| inventory-domain - order-domain -->|Requests payment authorization| billing-domain + order-domain -->|"Requests payment authorization"| billing-domain ``` ❯ src/widgets.e2e.spec.ts:267:35
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > renders a nested architecture with nested relationships: calm-widgets/src/widgets.e2e.spec.ts#L253
AssertionError: expected '## Nested Architecture Collapsed View…' to be '## Nested Architecture Collapsed View…' // Object.is equality - Expected + Received @@ -33,21 +33,21 @@ class enterprise-platform boundary external-payment-gateway["External Payment Gateway"]:::node monitoring-system["Monitoring System"]:::node - web-client -->|Client connects to API gateway| api-gateway + web-client -->|"Client connects to API gateway"| api-gateway - api-gateway -->|API gateway routes to microservices platform| microservices-platform + api-gateway -->|"API gateway routes to microservices platform"| microservices-platform - microservices-platform -->|Platform integrates with external payment gateway| external-payment-gateway + microservices-platform -->|"Platform integrates with external payment gateway"| external-payment-gateway - microservices-platform -->|Platform sends metrics and logs to monitoring| monitoring-system + microservices-platform -->|"Platform sends metrics and logs to monitoring"| monitoring-system - user-service -->|User service stores user data| internal-db + user-service -->|"User service stores user data"| internal-db - auth-service -->|Auth service stores session data| internal-db + auth-service -->|"Auth service stores session data"| internal-db - order-service -->|Order service stores order data| internal-db + order-service -->|"Order service stores order data"| internal-db - order-service -->|Order service calls payment service| payment-service + order-service -->|"Order service calls payment service"| payment-service - payment-service -->|Payment service publishes events| message-bus + payment-service -->|"Payment service publishes events"| message-bus - order-service -->|Order service publishes events| message-bus + order-service -->|"Order service publishes events"| message-bus - user-service -->|User service integrates with auth service| auth-service + user-service -->|"User service integrates with auth service"| auth-service ``` @@ -67,13 +67,13 @@ class enterprise-platform boundary external-payment-gateway["External Payment Gateway"]:::node monitoring-system["Monitoring System"]:::node - api-gateway -->|API gateway routes to microservices platform| microservices-platform + api-gateway -->|"API gateway routes to microservices platform"| microservices-platform - microservices-platform -->|Platform integrates with external payment gateway| external-payment-gateway + microservices-platform -->|"Platform integrates with external payment gateway"| external-payment-gateway - microservices-platform -->|Platform sends metrics and logs to monitoring| monitoring-system + microservices-platform -->|"Platform sends metrics and logs to monitoring"| monitoring-system class microservices-platform highlight ``` ❯ src/widgets.e2e.spec.ts:253:35
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > renders enterprise bank with clickable navigation pattern and progressive detail levels: calm-widgets/src/widgets.e2e.spec.ts#L246
AssertionError: expected '# Block Architecture — Navigation Exa…' to be '# Block Architecture — Navigation Exa…' // Object.is equality - Expected + Received @@ -18,13 +18,13 @@ message-bus["Message Bus"]:::node trade-svc["Trade Service"]:::node trading-db["Trading DB"]:::node trading-ui["Trading UI"]:::node - trading-ui -->|Place Trade| trade-svc + trading-ui -->|"Place Trade"| trade-svc - trade-svc -->|Persist| trading-db + trade-svc -->|"Persist"| trading-db - trade-svc -->|Publish Events| message-bus + trade-svc -->|"Publish Events"| message-bus class trade-svc highlight class trading-ui highlight class trading-db highlight @@ -63,13 +63,13 @@ trading-db["Trading DB"]:::node trading-db__iface__sql["◻ SQL Interface"]:::iface trading-ui["Trading UI"]:::node trading-ui__iface__web-ui["◻ Web Interface"]:::iface - trading-ui__iface__web-ui -->|Place Trade| trade-svc__iface__api + trading-ui__iface__web-ui -->|"Place Trade"| trade-svc__iface__api - trade-svc__iface__jdbc -->|Persist| trading-db__iface__sql + trade-svc__iface__jdbc -->|"Persist"| trading-db__iface__sql - trade-svc__iface__events -->|Publish Events| message-bus__iface__trade-events-topic + trade-svc__iface__events -->|"Publish Events"| message-bus__iface__trade-events-topic trading-ui -.- trading-ui__iface__web-ui trade-svc -.- trade-svc__iface__api trade-svc -.- trade-svc__iface__jdbc trade-svc -.- trade-svc__iface__events ❯ src/widgets.e2e.spec.ts:246:35
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > renders enterprise bank trading system with mixed communication patterns: calm-widgets/src/widgets.e2e.spec.ts#L239
AssertionError: expected '## Enterprise Trading System without …' to be '## Enterprise Trading System without …' // Object.is equality - Expected + Received @@ -52,19 +52,19 @@ class trading-system boundary end class enterprise-bank boundary - trading-ui -->|User places trades| trade-svc + trading-ui -->|"User places trades"| trade-svc - trade-svc -->|Update positions sync| position-svc + trade-svc -->|"Update positions sync"| position-svc - trade-svc -->|Publish TradeEvent| message-bus + trade-svc -->|"Publish TradeEvent"| message-bus - message-bus -->|TradeEvent → Position| position-svc + message-bus -->|"TradeEvent → Position"| position-svc - message-bus -->|TradeEvent → Accounting| account-svc + message-bus -->|"TradeEvent → Accounting"| account-svc - message-bus -->|TradeEvent → Risk| risk-svc + message-bus -->|"TradeEvent → Risk"| risk-svc - message-bus -->|TradeEvent → Reporting| reporting-svc + message-bus -->|"TradeEvent → Reporting"| reporting-svc - trade-svc -->|Validate product| product-svc + trade-svc -->|"Validate product"| product-svc - trade-svc -->|Fetch client info| client-svc + trade-svc -->|"Fetch client info"| client-svc ``` @@ -140,19 +140,19 @@ class trading-system boundary end class enterprise-bank boundary - trading-ui__iface__web-ui -->|User places trades| trade-svc__iface__trade-api + trading-ui__iface__web-ui -->|"User places trades"| trade-svc__iface__trade-api - trade-svc__iface__trade-api -->|Update positions sync| position-svc__iface__position-updates + trade-svc__iface__trade-api -->|"Update positions sync"| position-svc__iface__position-updates - trade-svc__iface__trade-events -->|Publish TradeEvent| message-bus__iface__trade-events-topic + trade-svc__iface__trade-events -->|"Publish TradeEvent"| message-bus__iface__trade-events-topic - message-bus__iface__trade-events-topic -->|TradeEvent → Position| position-svc__iface__position-api + message-bus__iface__trade-events-topic -->|"TradeEvent → Position"| position-svc__iface__position-api - message-bus__iface__trade-events-topic -->|TradeEvent → Accounting| account-svc__iface__account-api + message-bus__iface__trade-events-topic -->|"TradeEvent → Accounting"| account-svc__iface__account-api - message-bus__iface__trade-events-topic -->|TradeEvent → Risk| risk-svc__iface__risk-check + message-bus__iface__trade-events-topic -->|"TradeEvent → Risk"| risk-svc__iface__risk-check - message-bus__iface__trade-events-topic -->|TradeEvent → Reporting| reporting-svc__iface__reports + message-bus__iface__trade-events-topic -->|"TradeEvent → Reporting"| reporting-svc__iface__reports - trade-svc__iface__trade-api -->|Validate product| product-svc__iface__product-lookup + trade-svc__iface__trade-api -->|"Validate product"| product-svc__iface__product-lookup - trade-svc__iface__trade-api -->|Fetch client info| client-svc__iface__client-info + trade-svc__iface__trade-api -->|"Fetch client info"| client-svc__iface__client-info trading-ui -.- trading-ui__iface__web-ui trade-svc -.- trade-svc__iface__trade-api trade-svc -.- trade-svc__iface__trade-events position-svc -.- position-svc__iface__position-api ❯ src/widgets.e2e.spec.ts:239:35
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > handles all interface rendering variations in one comprehensive test: calm-widgets/src/widgets.e2e.spec.ts#L231
AssertionError: expected '## Node-to-Node Connections without I…' to be '## Node-to-Node Connections without I…' // Object.is equality - Expected + Received @@ -9,11 +9,11 @@ inventory-svc["Inventory Service"]:::node order-svc["Order Service"]:::node - order-svc -->|REST API call to reserve stock| inventory-svc + order-svc -->|"REST API call to reserve stock"| inventory-svc ``` @@ -30,11 +30,11 @@ inventory-svc["Inventory Service"]:::node inventory-svc__iface__rest["◻ REST API"]:::iface order-svc["Order Service"]:::node order-svc__iface__rest["◻ REST API"]:::iface - order-svc -->|REST API call to reserve stock| inventory-svc__iface__rest + order-svc -->|"REST API call to reserve stock"| inventory-svc__iface__rest order-svc -.- order-svc__iface__rest inventory-svc -.- inventory-svc__iface__rest @@ -57,11 +57,11 @@ order-svc__iface__rest["◻ REST API"]:::iface end class retail-platform boundary - order-svc -->|REST API call to reserve stock| inventory-svc__iface__rest + order-svc -->|"REST API call to reserve stock"| inventory-svc__iface__rest order-svc -.- order-svc__iface__rest inventory-svc -.- inventory-svc__iface__rest ❯ src/widgets.e2e.spec.ts:231:35
src/widgets.e2e.spec.ts > Widgets E2E - Handlebars Integration > Block Architecture Widget > renders basic architecture structures (empty, single system, multiple systems): calm-widgets/src/widgets.e2e.spec.ts#L223
AssertionError: expected '## Container Composition with No Edge…' to be '## Container Composition with No Edge…' // Object.is equality - Expected + Received @@ -40,11 +40,11 @@ svc2["Service 2"]:::node end class system-a boundary - svc1 -->|Service 1 calls Service 2| svc2 + svc1 -->|"Service 1 calls Service 2"| svc2 class system-a highlight ``` @@ -69,12 +69,12 @@ svc3["Service 3"]:::node end class system-b boundary - svc1 -->|Service 1 calls Service 2| svc2 + svc1 -->|"Service 1 calls Service 2"| svc2 - svc2 -->|Service 2 integrates with Service 3| svc3 + svc2 -->|"Service 2 integrates with Service 3"| svc3 class system-a highlight ``` @@ -99,11 +99,11 @@ svc3["Service 3"]:::node end class system-b boundary - svc1 -->|Service 1 calls Service 2| svc2 + svc1 -->|"Service 1 calls Service 2"| svc2 - svc2 -->|Service 2 integrates with Service 3| svc3 + svc2 -->|"Service 2 integrates with Service 3"| svc3 ``` ❯ src/widgets.e2e.spec.ts:223:35