From 1d5a91174d58c49fdef5f5eeac77c295dac8538c Mon Sep 17 00:00:00 2001 From: Mohsen Azimi Date: Mon, 2 Nov 2026 23:56:18 +0100 Subject: [PATCH] Regenerate assessment coverage metadata from the control-plane contract --- openapi.public.json | 15 +++++++++ .../models/customer_code_assessment.py | 13 ++++++++ .../_generated/models/routing_finding_view.py | 32 +++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/openapi.public.json b/openapi.public.json index 2641819..17a7f38 100644 --- a/openapi.public.json +++ b/openapi.public.json @@ -1480,6 +1480,13 @@ "null" ] }, + "coverage_details": { + "description": "Recorded check coverage counts and fixed cancellation causes, without source text.\n Absent coverage does not establish that every check ran.", + "items": { + "type": "string" + }, + "type": "array" + }, "findings": { "description": "The code-only findings the code assessment recorded, `SERIOUS` first.\n An empty list does not establish deployment safety.", "items": { @@ -5656,6 +5663,14 @@ ], "description": "Human override beside the original decision, when one was requested." }, + "publication_group": { + "description": "The finding that represents this finding's publication group, when an\n applied group publishes it in one comment with other findings. Every\n member names the same finding, the representative included.", + "format": "uuid", + "type": [ + "string", + "null" + ] + }, "reason_codes": { "description": "Recognized safe reason codes; unknown values are represented as `UNRECOGNIZED`.", "items": { diff --git a/proofline/_generated/models/customer_code_assessment.py b/proofline/_generated/models/customer_code_assessment.py index 72c3848..a920ddf 100644 --- a/proofline/_generated/models/customer_code_assessment.py +++ b/proofline/_generated/models/customer_code_assessment.py @@ -33,6 +33,9 @@ class CustomerCodeAssessment: never a verdict on the change: only `COMPLETED` says the assessment covered what it read. completed_at (datetime.datetime | None | Unset): When the code assessment ended. Null while it has not. + coverage_details (list[str] | Unset): Recorded check coverage counts and fixed cancellation causes, without + source text. + Absent coverage does not establish that every check ran. incompleteness_kind (None | str | Unset): Why an `INCOMPLETE` code assessment is incomplete: `NOT_CONFIGURED`, `POLICY_EXCLUDED`, `EVIDENCE_UNAVAILABLE`, `HYPOTHESES_UNRESOLVED` or `MODEL_BUDGET_EXHAUSTED`. Null otherwise. @@ -45,6 +48,7 @@ class CustomerCodeAssessment: id: UUID status: CodeAssessmentStatusType0 | Literal["EXCLUDED"] completed_at: datetime.datetime | None | Unset = UNSET + coverage_details: list[str] | Unset = UNSET incompleteness_kind: None | str | Unset = UNSET started_at: datetime.datetime | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -75,6 +79,10 @@ def to_dict(self) -> dict[str, Any]: else: completed_at = self.completed_at + coverage_details: list[str] | Unset = UNSET + if not isinstance(self.coverage_details, Unset): + coverage_details = self.coverage_details + incompleteness_kind: None | str | Unset if isinstance(self.incompleteness_kind, Unset): incompleteness_kind = UNSET @@ -102,6 +110,8 @@ def to_dict(self) -> dict[str, Any]: ) if completed_at is not UNSET: field_dict["completed_at"] = completed_at + if coverage_details is not UNSET: + field_dict["coverage_details"] = coverage_details if incompleteness_kind is not UNSET: field_dict["incompleteness_kind"] = incompleteness_kind if started_at is not UNSET: @@ -164,6 +174,8 @@ def _parse_completed_at(data: object) -> datetime.datetime | None | Unset: completed_at = _parse_completed_at(d.pop("completed_at", UNSET)) + coverage_details = cast(list[str], d.pop("coverage_details", UNSET)) + def _parse_incompleteness_kind(data: object) -> None | str | Unset: if data is None: return data @@ -197,6 +209,7 @@ def _parse_started_at(data: object) -> datetime.datetime | None | Unset: id=id, status=status, completed_at=completed_at, + coverage_details=coverage_details, incompleteness_kind=incompleteness_kind, started_at=started_at, ) diff --git a/proofline/_generated/models/routing_finding_view.py b/proofline/_generated/models/routing_finding_view.py index d9f29e1..4fee407 100644 --- a/proofline/_generated/models/routing_finding_view.py +++ b/proofline/_generated/models/routing_finding_view.py @@ -31,6 +31,9 @@ class RoutingFindingView: retained. promotion (FindingPromotionView | None | Unset): Human override beside the original decision, when one was requested. + publication_group (None | Unset | UUID): The finding that represents this finding's publication group, when an + applied group publishes it in one comment with other findings. Every + member names the same finding, the representative included. """ finding_id: UUID @@ -42,6 +45,7 @@ class RoutingFindingView: floor_reason: None | str | Unset = UNSET inline_reason: None | str | Unset = UNSET promotion: FindingPromotionView | None | Unset = UNSET + publication_group: None | Unset | UUID = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: @@ -83,6 +87,14 @@ def to_dict(self) -> dict[str, Any]: else: promotion = self.promotion + publication_group: None | str | Unset + if isinstance(self.publication_group, Unset): + publication_group = UNSET + elif isinstance(self.publication_group, UUID): + publication_group = str(self.publication_group) + else: + publication_group = self.publication_group + field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( @@ -102,6 +114,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["inline_reason"] = inline_reason if promotion is not UNSET: field_dict["promotion"] = promotion + if publication_group is not UNSET: + field_dict["publication_group"] = publication_group return field_dict @@ -164,6 +178,23 @@ def _parse_promotion(data: object) -> FindingPromotionView | None | Unset: promotion = _parse_promotion(d.pop("promotion", UNSET)) + def _parse_publication_group(data: object) -> None | Unset | UUID: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + publication_group_type_0 = UUID(data) + + return publication_group_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(None | Unset | UUID, data) + + publication_group = _parse_publication_group(d.pop("publication_group", UNSET)) + routing_finding_view = cls( finding_id=finding_id, inline_limit_exceeded=inline_limit_exceeded, @@ -174,6 +205,7 @@ def _parse_promotion(data: object) -> FindingPromotionView | None | Unset: floor_reason=floor_reason, inline_reason=inline_reason, promotion=promotion, + publication_group=publication_group, ) routing_finding_view.additional_properties = d