@scoutflo/topology-contracts 0.7.25 → 0.7.27

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.
@@ -480,7 +480,7 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
480
480
  } | {
481
481
  readonly key: "k8s_workload_sends_metrics_to_prometheus_compatible";
482
482
  readonly version: "v1";
483
- readonly status: "active";
483
+ readonly status: "experimental";
484
484
  readonly family: "integrations";
485
485
  readonly source_endpoint: {
486
486
  readonly entity_type: "resource";
@@ -495,7 +495,7 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
495
495
  };
496
496
  readonly relation_class: "associative";
497
497
  readonly attribute_schema_key: "relationship.observability_binding.v1";
498
- readonly evidence_level: "implemented";
498
+ readonly evidence_level: "pre_prod_validation";
499
499
  readonly provider_family: "prometheus_compatible";
500
500
  readonly provider_category: "observability";
501
501
  readonly claim_layers: {
@@ -504,12 +504,12 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
504
504
  readonly diagnostic: readonly ["release", "version", "commit_sha"];
505
505
  readonly contract_scoped_identity: readonly [];
506
506
  };
507
- readonly notes: readonly ["Ratified and implemented Connection Contract V1 active key; also covers Mimir and VictoriaMetrics via helper mapping."];
507
+ readonly notes: readonly ["Legacy workload endpoint retained for migration compatibility; new writes use the service endpoint contract."];
508
508
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
509
509
  } | {
510
510
  readonly key: "service_sends_metrics_to_prometheus_compatible";
511
511
  readonly version: "v1";
512
- readonly status: "experimental";
512
+ readonly status: "active";
513
513
  readonly family: "integrations";
514
514
  readonly source_endpoint: {
515
515
  readonly entity_type: "service";
@@ -523,14 +523,15 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
523
523
  };
524
524
  readonly relation_class: "associative";
525
525
  readonly attribute_schema_key: "relationship.observability_binding.v1";
526
- readonly evidence_level: "pre_prod_validation";
526
+ readonly evidence_level: "implemented";
527
527
  readonly provider_family: "prometheus_compatible";
528
528
  readonly provider_category: "observability";
529
+ readonly notes: readonly ["Canonical Prometheus-compatible binding uses the Scoutflo service endpoint; Kubernetes workload identity remains supporting evidence."];
529
530
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
530
531
  } | {
531
532
  readonly key: "workload_reports_errors_to_sentry";
532
533
  readonly version: "v1";
533
- readonly status: "active";
534
+ readonly status: "experimental";
534
535
  readonly family: "integrations";
535
536
  readonly source_endpoint: {
536
537
  readonly entity_type: "resource";
@@ -545,7 +546,7 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
545
546
  };
546
547
  readonly relation_class: "associative";
547
548
  readonly attribute_schema_key: "relationship.observability_binding.v1";
548
- readonly evidence_level: "implemented";
549
+ readonly evidence_level: "pre_prod_validation";
549
550
  readonly provider_family: "sentry";
550
551
  readonly provider_category: "observability";
551
552
  readonly claim_layers: {
@@ -554,12 +555,12 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
554
555
  readonly scope: readonly ["cluster", "environment"];
555
556
  readonly diagnostic: readonly ["release", "version", "commit_sha"];
556
557
  };
557
- readonly notes: readonly ["Ratified and implemented Connection Contract V1 active key."];
558
+ readonly notes: readonly ["Legacy workload endpoint retained for compatibility; new writes use the service endpoint contract."];
558
559
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
559
560
  } | {
560
561
  readonly key: "service_reports_errors_to_sentry";
561
562
  readonly version: "v1";
562
- readonly status: "experimental";
563
+ readonly status: "active";
563
564
  readonly family: "integrations";
564
565
  readonly source_endpoint: {
565
566
  readonly entity_type: "service";
@@ -573,14 +574,21 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
573
574
  };
574
575
  readonly relation_class: "associative";
575
576
  readonly attribute_schema_key: "relationship.observability_binding.v1";
576
- readonly evidence_level: "pre_prod_validation";
577
+ readonly evidence_level: "implemented";
577
578
  readonly provider_family: "sentry";
578
579
  readonly provider_category: "observability";
580
+ readonly claim_layers: {
581
+ readonly contract_scoped_identity: readonly ["project"];
582
+ readonly identity: readonly ["service", "workload", "namespace", "app", "pod", "container"];
583
+ readonly scope: readonly ["cluster", "environment"];
584
+ readonly diagnostic: readonly ["release", "version", "commit_sha"];
585
+ };
586
+ readonly notes: readonly ["Canonical Sentry binding uses the Scoutflo service endpoint; Kubernetes workload identity remains supporting evidence."];
579
587
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
580
588
  } | {
581
589
  readonly key: "k8s_workload_sends_logs_to_loki";
582
590
  readonly version: "v1";
583
- readonly status: "active";
591
+ readonly status: "experimental";
584
592
  readonly family: "integrations";
585
593
  readonly source_endpoint: {
586
594
  readonly entity_type: "resource";
@@ -595,14 +603,14 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
595
603
  };
596
604
  readonly relation_class: "associative";
597
605
  readonly attribute_schema_key: "relationship.observability_binding.v1";
598
- readonly evidence_level: "implemented";
606
+ readonly evidence_level: "pre_prod_validation";
599
607
  readonly provider_family: "loki";
600
608
  readonly provider_category: "logging";
601
609
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
602
610
  } | {
603
611
  readonly key: "k8s_workload_sends_logs_to_elk";
604
612
  readonly version: "v1";
605
- readonly status: "active";
613
+ readonly status: "experimental";
606
614
  readonly family: "integrations";
607
615
  readonly source_endpoint: {
608
616
  readonly entity_type: "resource";
@@ -617,14 +625,14 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
617
625
  };
618
626
  readonly relation_class: "associative";
619
627
  readonly attribute_schema_key: "relationship.observability_binding.v1";
620
- readonly evidence_level: "implemented";
628
+ readonly evidence_level: "pre_prod_validation";
621
629
  readonly provider_family: "elk";
622
630
  readonly provider_category: "logging";
623
631
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
624
632
  } | {
625
633
  readonly key: "k8s_workload_sends_logs_to_victorialogs";
626
634
  readonly version: "v1";
627
- readonly status: "active";
635
+ readonly status: "experimental";
628
636
  readonly family: "integrations";
629
637
  readonly source_endpoint: {
630
638
  readonly entity_type: "resource";
@@ -639,14 +647,14 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
639
647
  };
640
648
  readonly relation_class: "associative";
641
649
  readonly attribute_schema_key: "relationship.observability_binding.v1";
642
- readonly evidence_level: "implemented";
650
+ readonly evidence_level: "pre_prod_validation";
643
651
  readonly provider_family: "victorialogs";
644
652
  readonly provider_category: "logging";
645
653
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
646
654
  } | {
647
655
  readonly key: "service_sends_logs_to_logging_provider";
648
656
  readonly version: "v1";
649
- readonly status: "experimental";
657
+ readonly status: "active";
650
658
  readonly family: "integrations";
651
659
  readonly source_endpoint: {
652
660
  readonly entity_type: "service";
@@ -660,14 +668,14 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
660
668
  };
661
669
  readonly relation_class: "associative";
662
670
  readonly attribute_schema_key: "relationship.observability_binding.v1";
663
- readonly evidence_level: "pre_prod_validation";
671
+ readonly evidence_level: "implemented";
664
672
  readonly provider_family: "logging_provider";
665
673
  readonly provider_category: "logging";
666
674
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
667
675
  } | {
668
676
  readonly key: "k8s_workload_sends_traces_to_tempo";
669
677
  readonly version: "v1";
670
- readonly status: "active";
678
+ readonly status: "experimental";
671
679
  readonly family: "integrations";
672
680
  readonly source_endpoint: {
673
681
  readonly entity_type: "resource";
@@ -682,14 +690,14 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
682
690
  };
683
691
  readonly relation_class: "associative";
684
692
  readonly attribute_schema_key: "relationship.observability_binding.v1";
685
- readonly evidence_level: "implemented";
693
+ readonly evidence_level: "pre_prod_validation";
686
694
  readonly provider_family: "tempo";
687
695
  readonly provider_category: "tracing";
688
696
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
689
697
  } | {
690
698
  readonly key: "k8s_workload_sends_traces_to_victoriatraces";
691
699
  readonly version: "v1";
692
- readonly status: "active";
700
+ readonly status: "experimental";
693
701
  readonly family: "integrations";
694
702
  readonly source_endpoint: {
695
703
  readonly entity_type: "resource";
@@ -704,14 +712,14 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
704
712
  };
705
713
  readonly relation_class: "associative";
706
714
  readonly attribute_schema_key: "relationship.observability_binding.v1";
707
- readonly evidence_level: "implemented";
715
+ readonly evidence_level: "pre_prod_validation";
708
716
  readonly provider_family: "victoriatraces";
709
717
  readonly provider_category: "tracing";
710
718
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
711
719
  } | {
712
720
  readonly key: "service_sends_traces_to_tracing_provider";
713
721
  readonly version: "v1";
714
- readonly status: "experimental";
722
+ readonly status: "active";
715
723
  readonly family: "integrations";
716
724
  readonly source_endpoint: {
717
725
  readonly entity_type: "service";
@@ -725,7 +733,7 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
725
733
  };
726
734
  readonly relation_class: "associative";
727
735
  readonly attribute_schema_key: "relationship.observability_binding.v1";
728
- readonly evidence_level: "pre_prod_validation";
736
+ readonly evidence_level: "implemented";
729
737
  readonly provider_family: "tracing_provider";
730
738
  readonly provider_category: "tracing";
731
739
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
@@ -755,7 +763,7 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
755
763
  } | {
756
764
  readonly key: "service_monitored_by_observability_provider";
757
765
  readonly version: "v1";
758
- readonly status: "experimental";
766
+ readonly status: "active";
759
767
  readonly family: "integrations";
760
768
  readonly source_endpoint: {
761
769
  readonly entity_type: "service";
@@ -769,15 +777,15 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
769
777
  };
770
778
  readonly relation_class: "associative";
771
779
  readonly attribute_schema_key: "relationship.observability_binding.v1";
772
- readonly evidence_level: "pre_prod_validation";
780
+ readonly evidence_level: "implemented";
773
781
  readonly provider_family: "multi_signal_observability";
774
782
  readonly provider_category: "observability";
775
- readonly notes: readonly ["Experimental umbrella for Datadog/Grafana/Groundcover-style providers; do not ratify from capability declarations alone."];
783
+ readonly notes: readonly ["Canonical multi-signal observability binding uses the Scoutflo service endpoint; Kubernetes workload identity remains supporting evidence."];
776
784
  readonly guardrails: readonly ["Capabilities do not create edges; contracts need source evidence and Gateway-owned validation before emission.", "Provider-specific query hints, IDs, URLs, and setup details remain in source_attributes.", "Candidate, experimental, and reserved entries are not production-ratified contracts."];
777
785
  } | {
778
786
  readonly key: "k8s_workload_monitored_by_datadog";
779
787
  readonly version: "v1";
780
- readonly status: "active";
788
+ readonly status: "experimental";
781
789
  readonly family: "integrations";
782
790
  readonly source_endpoint: {
783
791
  readonly entity_type: "resource";
@@ -792,7 +800,7 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
792
800
  };
793
801
  readonly relation_class: "associative";
794
802
  readonly attribute_schema_key: "relationship.observability_binding.v1";
795
- readonly evidence_level: "implemented";
803
+ readonly evidence_level: "pre_prod_validation";
796
804
  readonly provider_family: "datadog";
797
805
  readonly provider_category: "observability";
798
806
  readonly notes: readonly ["Active after Gateway runtime verification proved bounded provider API evidence can normalize to canonical workload/service signals."];
@@ -800,7 +808,7 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
800
808
  } | {
801
809
  readonly key: "k8s_workload_monitored_by_grafana";
802
810
  readonly version: "v1";
803
- readonly status: "active";
811
+ readonly status: "experimental";
804
812
  readonly family: "integrations";
805
813
  readonly source_endpoint: {
806
814
  readonly entity_type: "resource";
@@ -815,7 +823,7 @@ export declare const CONNECTION_CONTRACT_REGISTRY: ({
815
823
  };
816
824
  readonly relation_class: "associative";
817
825
  readonly attribute_schema_key: "relationship.observability_binding.v1";
818
- readonly evidence_level: "implemented";
826
+ readonly evidence_level: "pre_prod_validation";
819
827
  readonly provider_family: "grafana";
820
828
  readonly provider_category: "observability";
821
829
  readonly notes: readonly ["Active for canonical observability evidence only; Gateway still requires strong source/provider claim overlap before emitting relationships."];
@@ -104,7 +104,7 @@ const src_1 = require("../src");
104
104
  strict_1.default.equal(endpoint.resource_type, src_1.TOPOLOGY_RESOURCE_TYPE.KUBERNETES_DEPLOYMENT);
105
105
  strict_1.default.equal(src_1.topologyCorrelationRelationClassSchema.parse('associative'), 'associative');
106
106
  strict_1.default.equal(src_1.topologyCorrelationContractFamilySchema.parse('observability.metrics'), 'observability.metrics');
107
- strict_1.default.equal(src_1.topologyCorrelationContractKeySchema.parse(ref.correlation_contract_key), 'k8s_workload_sends_metrics_to_prometheus_compatible');
107
+ strict_1.default.equal(src_1.topologyCorrelationContractKeySchema.parse(ref.correlation_contract_key), 'k8s_workload_sends_metrics_to_prometheus_compatible', 'service_sends_metrics_to_prometheus_compatible');
108
108
  });
109
109
  (0, node_test_1.default)('exports observed service call relationship contracts', () => {
110
110
  strict_1.default.equal(src_1.OBSERVED_SERVICE_CALLS_SERVICE_CONTRACT_KEY, 'observed_service_calls_service');
@@ -226,7 +226,9 @@ const src_1 = require("../src");
226
226
  'observed_service_calls_service',
227
227
  'observed_service_bidirectional_calls_service',
228
228
  'k8s_workload_sends_metrics_to_prometheus_compatible',
229
+ 'service_sends_metrics_to_prometheus_compatible',
229
230
  'workload_reports_errors_to_sentry',
231
+ 'service_reports_errors_to_sentry',
230
232
  'k8s_workload_sends_logs_to_loki',
231
233
  'k8s_workload_sends_logs_to_elk',
232
234
  'k8s_workload_sends_logs_to_victorialogs',
@@ -234,10 +236,14 @@ const src_1 = require("../src");
234
236
  'k8s_workload_sends_traces_to_victoriatraces',
235
237
  'k8s_workload_monitored_by_datadog',
236
238
  'k8s_workload_monitored_by_grafana',
239
+ 'service_sends_logs_to_logging_provider',
240
+ 'service_sends_traces_to_tracing_provider',
241
+ 'service_monitored_by_observability_provider',
237
242
  ]);
238
243
  strict_1.default.equal(src_1.connectionContractV1KeySchema.parse(src_1.K8S_WORKLOAD_PART_OF_NAMESPACE_CONTRACT_KEY), src_1.K8S_WORKLOAD_PART_OF_NAMESPACE_CONTRACT_KEY);
239
244
  strict_1.default.equal(src_1.connectionContractV1KeySchema.parse(src_1.K8S_WORKLOAD_SENDS_METRICS_TO_PROMETHEUS_COMPATIBLE_CONTRACT_KEY), src_1.K8S_WORKLOAD_SENDS_METRICS_TO_PROMETHEUS_COMPATIBLE_CONTRACT_KEY);
240
245
  strict_1.default.equal(src_1.connectionContractV1KeySchema.parse(src_1.WORKLOAD_REPORTS_ERRORS_TO_SENTRY_CONTRACT_KEY), src_1.WORKLOAD_REPORTS_ERRORS_TO_SENTRY_CONTRACT_KEY);
246
+ strict_1.default.equal(src_1.connectionContractV1KeySchema.parse(src_1.SERVICE_REPORTS_ERRORS_TO_SENTRY_CONTRACT_KEY), src_1.SERVICE_REPORTS_ERRORS_TO_SENTRY_CONTRACT_KEY);
241
247
  strict_1.default.throws(() => src_1.connectionContractV1KeySchema.parse('pagerduty_service_alerts_workload'));
242
248
  strict_1.default.deepEqual([...src_1.CONNECTION_CONTRACT_V1_REFS], [
243
249
  {
@@ -304,10 +310,18 @@ const src_1 = require("../src");
304
310
  correlation_contract_key: 'k8s_workload_sends_metrics_to_prometheus_compatible',
305
311
  correlation_contract_version: 'v1',
306
312
  },
313
+ {
314
+ correlation_contract_key: 'service_sends_metrics_to_prometheus_compatible',
315
+ correlation_contract_version: 'v1',
316
+ },
307
317
  {
308
318
  correlation_contract_key: 'workload_reports_errors_to_sentry',
309
319
  correlation_contract_version: 'v1',
310
320
  },
321
+ {
322
+ correlation_contract_key: 'service_reports_errors_to_sentry',
323
+ correlation_contract_version: 'v1',
324
+ },
311
325
  {
312
326
  correlation_contract_key: 'k8s_workload_sends_logs_to_loki',
313
327
  correlation_contract_version: 'v1',
@@ -336,6 +350,18 @@ const src_1 = require("../src");
336
350
  correlation_contract_key: 'k8s_workload_monitored_by_grafana',
337
351
  correlation_contract_version: 'v1',
338
352
  },
353
+ {
354
+ correlation_contract_key: 'service_sends_logs_to_logging_provider',
355
+ correlation_contract_version: 'v1',
356
+ },
357
+ {
358
+ correlation_contract_key: 'service_sends_traces_to_tracing_provider',
359
+ correlation_contract_version: 'v1',
360
+ },
361
+ {
362
+ correlation_contract_key: 'service_monitored_by_observability_provider',
363
+ correlation_contract_version: 'v1',
364
+ },
339
365
  ]);
340
366
  strict_1.default.deepEqual(src_1.connectionContractV1RefSchema.parse(src_1.K8S_WORKLOAD_PART_OF_NAMESPACE_CONTRACT_REF), src_1.K8S_WORKLOAD_PART_OF_NAMESPACE_CONTRACT_REF);
341
367
  strict_1.default.throws(() => src_1.connectionContractV1RefSchema.parse({
@@ -404,7 +430,7 @@ const src_1 = require("../src");
404
430
  diagnostic: ['release', 'version', 'commit_sha'],
405
431
  contract_scoped_identity: [],
406
432
  });
407
- const sentry = (0, src_1.getConnectionContract)(src_1.WORKLOAD_REPORTS_ERRORS_TO_SENTRY_CONTRACT_KEY, src_1.CONNECTION_CONTRACT_VERSION_V1);
433
+ const sentry = (0, src_1.getConnectionContract)(src_1.SERVICE_REPORTS_ERRORS_TO_SENTRY_CONTRACT_KEY, src_1.CONNECTION_CONTRACT_VERSION_V1);
408
434
  strict_1.default.deepEqual(sentry?.claim_layers, {
409
435
  identity: ['service', 'workload', 'namespace', 'app', 'pod', 'container'],
410
436
  scope: ['cluster', 'environment'],
@@ -431,9 +457,14 @@ const src_1 = require("../src");
431
457
  });
432
458
  strict_1.default.deepEqual((0, src_1.sentryContractForProvider)(' SENTRY '), {
433
459
  attribute_schema_key: 'relationship.observability_binding.v1',
434
- correlation_contract_key: 'workload_reports_errors_to_sentry',
460
+ correlation_contract_key: 'service_reports_errors_to_sentry',
435
461
  correlation_contract_version: 'v1',
436
462
  });
463
+ strict_1.default.equal((0, src_1.serviceObservabilityContractForProvider)(' Prometheus ')?.correlation_contract_key, 'service_sends_metrics_to_prometheus_compatible');
464
+ strict_1.default.equal((0, src_1.serviceObservabilityContractForProvider)('victorialogs')?.correlation_contract_key, 'service_sends_logs_to_logging_provider');
465
+ strict_1.default.equal((0, src_1.serviceObservabilityContractForProvider)('tempo')?.correlation_contract_key, 'service_sends_traces_to_tracing_provider');
466
+ strict_1.default.equal((0, src_1.serviceObservabilityContractForProvider)('datadog')?.correlation_contract_key, 'service_monitored_by_observability_provider');
467
+ strict_1.default.equal((0, src_1.serviceObservabilityContractForProvider)('sentry'), undefined);
437
468
  for (const provider of ['datadog', 'grafana', 'loki', 'tempo', 'pagerduty', 'zenduty']) {
438
469
  strict_1.default.equal((0, src_1.prometheusCompatibleContractForProvider)(provider), undefined);
439
470
  strict_1.default.equal((0, src_1.sentryContractForProvider)(provider), undefined);
@@ -457,12 +488,8 @@ const src_1 = require("../src");
457
488
  strict_1.default.equal((0, src_1.argocdCandidateForTarget)({ provider: 'github', sourceType: 'github_account' }), undefined);
458
489
  });
459
490
  (0, node_test_1.default)('exports manual relationship authoring contracts from active SDK registry', () => {
460
- const workloadToPrometheus = (0, src_1.resolveAuthorableRelationshipContract)({
461
- from: {
462
- entity_type: 'resource',
463
- resource_type: src_1.TOPOLOGY_RESOURCE_TYPE.KUBERNETES_DEPLOYMENT,
464
- provider: src_1.TOPOLOGY_PROVIDER.K8S,
465
- },
491
+ const serviceToPrometheus = (0, src_1.resolveAuthorableRelationshipContract)({
492
+ from: { entity_type: 'service' },
466
493
  relation: src_1.TOPOLOGY_RELATION_TYPE.SENDS_METRICS_TO,
467
494
  to: {
468
495
  entity_type: 'resource',
@@ -470,24 +497,20 @@ const src_1 = require("../src");
470
497
  provider: src_1.TOPOLOGY_PROVIDER.PROMETHEUS,
471
498
  },
472
499
  });
473
- strict_1.default.equal(workloadToPrometheus?.attribute_schema_key, 'relationship.observability_binding.v1');
474
- strict_1.default.equal(workloadToPrometheus?.correlation_contract_key, src_1.K8S_WORKLOAD_SENDS_METRICS_TO_PROMETHEUS_COMPATIBLE_CONTRACT_KEY);
475
- strict_1.default.deepEqual((0, src_1.relationshipAuthoringRequiredAttributeKeys)(workloadToPrometheus?.attribute_schema_key || ''), [
500
+ strict_1.default.equal(serviceToPrometheus?.attribute_schema_key, 'relationship.observability_binding.v1');
501
+ strict_1.default.equal(serviceToPrometheus?.correlation_contract_key, src_1.SERVICE_SENDS_METRICS_TO_PROMETHEUS_COMPATIBLE_CONTRACT_KEY);
502
+ strict_1.default.deepEqual((0, src_1.relationshipAuthoringRequiredAttributeKeys)(serviceToPrometheus?.attribute_schema_key || ''), [
476
503
  'relationship_kind',
477
504
  'observed_service_id',
478
505
  'signal_type',
479
506
  'basis',
480
507
  'from_role',
481
508
  'to_role',
482
- 'cluster_id',
483
- 'namespace',
484
- 'workload_name',
485
- 'workload_type',
486
509
  ]);
487
- strict_1.default.deepEqual((0, src_1.defaultRelationshipAuthoringAttributes)(workloadToPrometheus), {
510
+ strict_1.default.deepEqual((0, src_1.defaultRelationshipAuthoringAttributes)(serviceToPrometheus), {
488
511
  relationship_kind: 'observability_binding',
489
512
  basis: 'manual_mapping',
490
- from_role: 'workload',
513
+ from_role: 'service',
491
514
  to_role: 'observability_tool',
492
515
  signal_type: 'metrics',
493
516
  });
@@ -556,15 +579,11 @@ const src_1 = require("../src");
556
579
  'service_deployed_as_k8s_workload/v1',
557
580
  'observed_service_calls_service/v1',
558
581
  'observed_service_bidirectional_calls_service/v1',
559
- 'k8s_workload_sends_metrics_to_prometheus_compatible/v1',
560
- 'workload_reports_errors_to_sentry/v1',
561
- 'k8s_workload_sends_logs_to_loki/v1',
562
- 'k8s_workload_sends_logs_to_elk/v1',
563
- 'k8s_workload_sends_logs_to_victorialogs/v1',
564
- 'k8s_workload_sends_traces_to_tempo/v1',
565
- 'k8s_workload_sends_traces_to_victoriatraces/v1',
566
- 'k8s_workload_monitored_by_datadog/v1',
567
- 'k8s_workload_monitored_by_grafana/v1',
582
+ 'service_sends_metrics_to_prometheus_compatible/v1',
583
+ 'service_reports_errors_to_sentry/v1',
584
+ 'service_sends_logs_to_logging_provider/v1',
585
+ 'service_sends_traces_to_tracing_provider/v1',
586
+ 'service_monitored_by_observability_provider/v1',
568
587
  ]);
569
588
  strict_1.default.deepEqual(src_1.ACTIVE_CONNECTION_CONTRACT_REFS, activeCompositeKeys.map((key) => {
570
589
  const [correlation_contract_key, correlation_contract_version] = key.split('/');
@@ -572,17 +591,18 @@ const src_1 = require("../src");
572
591
  }));
573
592
  strict_1.default.equal((0, src_1.getConnectionContract)('k8s_workload_part_of_namespace', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.ACTIVE);
574
593
  strict_1.default.equal((0, src_1.getConnectionContract)('aws_vpc_part_of_account', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.ACTIVE);
575
- strict_1.default.equal((0, src_1.getConnectionContract)('service_sends_logs_to_logging_provider', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
576
- strict_1.default.equal((0, src_1.getConnectionContract)('service_sends_metrics_to_prometheus_compatible', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
577
- strict_1.default.equal((0, src_1.getConnectionContract)('service_reports_errors_to_sentry', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
578
- strict_1.default.equal((0, src_1.getConnectionContract)('service_sends_traces_to_tracing_provider', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
579
- strict_1.default.equal((0, src_1.getConnectionContract)('service_monitored_by_observability_provider', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
594
+ strict_1.default.equal((0, src_1.getConnectionContract)('service_sends_logs_to_logging_provider', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.ACTIVE);
595
+ strict_1.default.equal((0, src_1.getConnectionContract)('service_sends_metrics_to_prometheus_compatible', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.ACTIVE);
596
+ strict_1.default.equal((0, src_1.getConnectionContract)('service_reports_errors_to_sentry', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.ACTIVE);
597
+ strict_1.default.equal((0, src_1.getConnectionContract)('workload_reports_errors_to_sentry', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
598
+ strict_1.default.equal((0, src_1.getConnectionContract)('service_sends_traces_to_tracing_provider', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.ACTIVE);
599
+ strict_1.default.equal((0, src_1.getConnectionContract)('service_monitored_by_observability_provider', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.ACTIVE);
580
600
  strict_1.default.equal((0, src_1.getConnectionContract)('github_account_owns_repository', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.RESERVED);
581
601
  strict_1.default.equal((0, src_1.getConnectionContract)('argocd_app_deploys_to_k8s_workload', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.CANDIDATE);
582
602
  strict_1.default.equal((0, src_1.getConnectionContract)('argocd_app_sources_github_repository', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.CANDIDATE);
583
603
  strict_1.default.equal((0, src_1.getConnectionContract)('argocd_app_deploys_to_k8s_service', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
584
- strict_1.default.equal((0, src_1.getConnectionContract)('k8s_workload_monitored_by_datadog', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.ACTIVE);
585
- strict_1.default.equal((0, src_1.getConnectionContract)('k8s_workload_monitored_by_grafana', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.ACTIVE);
604
+ strict_1.default.equal((0, src_1.getConnectionContract)('k8s_workload_monitored_by_datadog', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
605
+ strict_1.default.equal((0, src_1.getConnectionContract)('k8s_workload_monitored_by_grafana', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
586
606
  strict_1.default.equal((0, src_1.getConnectionContract)('k8s_workload_monitored_by_groundcover', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL);
587
607
  strict_1.default.equal((0, src_1.getConnectionContract)('k8s_workload_monitored_by_pagerduty_alerting', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.CANDIDATE);
588
608
  strict_1.default.equal((0, src_1.getConnectionContract)('k8s_workload_monitored_by_zenduty_alerting', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.CANDIDATE);
@@ -599,7 +619,7 @@ const src_1 = require("../src");
599
619
  strict_1.default.equal((0, src_1.getConnectionContract)('pagerduty_service_alerts_workload', 'v1'), undefined);
600
620
  strict_1.default.equal((0, src_1.getConnectionContract)('service_uses_jira', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.CANDIDATE);
601
621
  strict_1.default.equal((0, src_1.getConnectionContract)('service_uses_jsm', 'v1')?.status, src_1.CONNECTION_CONTRACT_STATUS.CANDIDATE);
602
- const activeObservabilityKeys = [
622
+ const legacyWorkloadObservabilityKeys = [
603
623
  'k8s_workload_sends_logs_to_loki',
604
624
  'k8s_workload_sends_logs_to_elk',
605
625
  'k8s_workload_sends_logs_to_victorialogs',
@@ -608,13 +628,13 @@ const src_1 = require("../src");
608
628
  'k8s_workload_monitored_by_datadog',
609
629
  'k8s_workload_monitored_by_grafana',
610
630
  ];
611
- strict_1.default.deepEqual(activeObservabilityKeys.map((key) => (0, src_1.getConnectionContract)(key, 'v1')?.status), activeObservabilityKeys.map(() => src_1.CONNECTION_CONTRACT_STATUS.ACTIVE));
631
+ strict_1.default.deepEqual(legacyWorkloadObservabilityKeys.map((key) => (0, src_1.getConnectionContract)(key, 'v1')?.status), legacyWorkloadObservabilityKeys.map(() => src_1.CONNECTION_CONTRACT_STATUS.EXPERIMENTAL));
612
632
  const observabilityBindingKeys = [
613
633
  'k8s_workload_sends_metrics_to_prometheus_compatible',
614
634
  'workload_reports_errors_to_sentry',
615
- ...activeObservabilityKeys,
616
- 'service_sends_metrics_to_prometheus_compatible',
617
635
  'service_reports_errors_to_sentry',
636
+ ...legacyWorkloadObservabilityKeys,
637
+ 'service_sends_metrics_to_prometheus_compatible',
618
638
  'service_sends_logs_to_logging_provider',
619
639
  'service_sends_traces_to_tracing_provider',
620
640
  'k8s_workload_monitored_by_observability_provider',
@@ -642,12 +662,8 @@ const src_1 = require("../src");
642
662
  'argocd_app_sources_github_repository',
643
663
  'argocd_app_deploys_to_k8s_service',
644
664
  'argocd_app_deploys_to_k8s_workload',
645
- 'service_sends_metrics_to_prometheus_compatible',
646
- 'service_reports_errors_to_sentry',
647
- 'service_sends_logs_to_logging_provider',
648
- 'service_sends_traces_to_tracing_provider',
665
+ 'workload_reports_errors_to_sentry',
649
666
  'k8s_workload_monitored_by_observability_provider',
650
- 'service_monitored_by_observability_provider',
651
667
  'k8s_workload_monitored_by_groundcover',
652
668
  'k8s_workload_monitored_by_pagerduty_alerting',
653
669
  'k8s_workload_monitored_by_zenduty_alerting',