Ë
    ÛJêj¤P  ã                  ó,  — d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
  ej                  e«      Z G d„ dee«      Z G d	„ d
ee«      Ze G d„ d«      «       Ze G d„ d«      «       Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zg d¢Zy)u+  Quality Gates â€” release validation checks.

Every significant release must pass through quality gates.
These gates validate that the system meets security, privacy,
and architecture standards before being approved for deployment.

Gates 19-21 cover Security, Privacy, and Architecture validation.
é    )ÚannotationsN)Ú	dataclassÚfield)ÚEnum)ÚAnyc                  ó    — e Zd ZdZdZdZdZdZy)Ú
GateStatuszStatus of a quality gate check.ÚpassÚfailÚskipÚwarnN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚPASSÚFAILÚSKIPÚWARN© ó    úX/home/oem/CyberBrain26-unified/src/cyberbrain26/security_plane/quality_gates/__init__.pyr	   r	      s   „ Ù)à€DØ€DØ€DØ�Dr   r	   c                  ó    — e Zd ZdZdZdZdZdZy)Ú	GateLevelz$Criticality level of a quality gate.ÚcriticalÚhighÚmediumÚlowN)r   r   r   r   ÚCRITICALÚHIGHÚMEDIUMÚLOWr   r   r   r   r      s   „ Ù.à€HØ€DØ€FØ
�Cr   r   c                  ór   — e Zd ZU dZded<   ded<   dZded<   ej                  Zded	<    e	e
¬
«      Zded<   y)Ú	GateCheckz%A single check within a quality gate.ÚstrÚnamer	   ÚstatusÚ Údetailr   Úseverity©Údefault_factoryúdict[str, Any]ÚmetadataN)r   r   r   r   Ú__annotations__r)   r   r!   r*   r   Údictr.   r   r   r   r$   r$   &   s9   … á/à
ƒIØÓØ€FˆCÓØ#×*Ñ*€HˆiÓ*Ù$°TÔ:€HˆnÔ:r   r$   c                  ó²   — e Zd ZU dZded<   ded<   ded<    ee¬«      Zded	<   d
Zded<   d
Z	ded<   d
Z
ded<   d
Zded<    ee¬«      Zded<   edd„«       Zy)Ú
GateResultz$Result of a quality gate evaluation.r%   Ú	gate_nameÚgate_idr	   r'   r+   zlist[GateCheck]Úchecksr   ÚintÚpassedÚfailedÚskippedÚwarningsr-   r.   c                ó    — | j                   dk(  S )z&Whether the gate passed (no failures).r   )r8   ©Úselfs    r   Úoverall_passedzGateResult.overall_passed?   s   € ð �{‰{˜aÑÐr   N©ÚreturnÚbool)r   r   r   r   r/   r   Úlistr5   r7   r8   r9   r:   r0   r.   Úpropertyr>   r   r   r   r2   r2   1   sk   … á.àƒNØƒLØÓÙ#°DÔ9€FˆOÓ9Ø€FˆCƒOØ€FˆCƒOØ€GˆSÓØ€HˆcÓÙ$°TÔ:€HˆnÓ:àò ó ñ r   r2   c                  ób   — e Zd ZdZdZdZej                  Zdd„Z		 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d	d„Z
y)
ÚSecurityGateaŒ  Quality Gate #19: Security validation.

    Validates that the system meets security requirements:
    - All agents have identities
    - No untrusted agents in production
    - Permission gateway is active
    - Policy engine is configured
    - Audit logging is enabled
    - AI firewall is operational
    - No hardcoded secrets
    - All sensitive actions require approval or are blocked
    zgate-19zSecurity Gatec                ó   — g | _         y ©N©Ú_checksr<   s    r   Ú__init__zSecurityGate.__init__W   ó	   € Ø(*ˆ�r   Nc                óh
  — g }|�kt        d„ |D «       «      }|j                  t        d|rt        j                  nt        j
                  t        |«      › d�t        j                  ¬«      «       n:|j                  t        dt        j                  dt        j                  ¬«      «       |�€|D �cg c]  }|j                  d«      dk(  r|‘Œ }	}|j                  t        d|	st        j                  nt        j
                  |	rt        |	«      › d	�nd
t        j                  ¬«      «       n:|j                  t        dt        j                  dt        j                  ¬«      «       |�;|j                  t        dt        j                  dt        j                  ¬«      «       n:|j                  t        dt        j
                  dt        j                  ¬«      «       |�V|j                  t        dt        j                  dt        |d«      r|j                  nd› �t        j                  ¬«      «       n:|j                  t        dt        j
                  dt        j                  ¬«      «       |�;|j                  t        dt        j                  dt        j                  ¬«      «       n:|j                  t        dt        j
                  dt        j                  ¬«      «       |�;|j                  t        dt        j                  dt        j                  ¬«      «       n:|j                  t        dt        j                  dt        j                  ¬«      «       |�³t        |d«      r§|j                  j                  dk(  r;|j                  t        dt        j                  dt        j                  ¬«      «       n�|j                  t        dt        j                  d|j                  j                  › d�t        j                  ¬«      «       n:|j                  t        dt        j                  dt        j                  ¬«      «       |j                  t        dt        j                  d t        j                  ¬«      «       t!        d!„ |D «       «      }
t!        d"„ |D «       «      }t!        d#„ |D «       «      }t!        d$„ |D «       «      }t#        | j$                  | j&                  |d%k(  rt        j                  nt        j
                  ||
|||d&| j(                  j                  i¬'«	      S c c}w )(a  Evaluate security gate checks.

        Args:
            agents: List of agent dicts with identity info.
            permission_gateway: PermissionGateway instance.
            policy_engine: PolicyEngine instance.
            audit_log: AuditLog instance.
            firewall: AIFirewall instance.

        Returns:
            GateResult with all security check results.
        c              3  óh   K  — | ]*  }|j                  d «      duxs |j                  d«      –— Œ, y­w)ÚidentityNÚagent_id)Úget)Ú.0Úas     r   ú	<genexpr>z(SecurityGate.evaluate.<locals>.<genexpr>r   s4   è ø€ ò $ØGH�—‘�jÓ!¨Ð-ÒB°·±°zÓ1BÓBñ$ùs   ‚02Úall_agents_have_identityz agents checked©r&   r'   r)   r*   zNo agents provided for checkÚtrust_levelÚ	untrustedÚno_untrusted_agentsz untrusted agents foundzNo untrusted agentsÚpermission_gateway_activez Permission gateway is configuredz$Permission gateway is not configuredÚpolicy_engine_configuredzPolicy engine mode: ÚmodeÚ
configuredzPolicy engine is not configuredÚaudit_logging_enabledzAudit log is activezAudit logging is not enabledÚai_firewall_operationalzAI firewall is activezAI firewall is not configuredÚsafeÚ"sensitive_actions_require_approvalz-SAFE mode: sensitive actions require approvalzMode z": verify sensitive action controlsz%Policy engine not available for checkÚno_hardcoded_secretsz.No hardcoded secrets detected in configurationc              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­w©é   N©r'   r	   r   ©rQ   Úcs     r   rS   z(SecurityGate.evaluate.<locals>.<genexpr>÷   ó   è ø€ ÒF˜1¨!¯(©(´j·o±oÓ*E”QÑFùó   ‚",¥,c              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   ©r'   r	   r   rf   s     r   rS   z(SecurityGate.evaluate.<locals>.<genexpr>ø   rh   ri   c              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   ©r'   r	   r   rf   s     r   rS   z(SecurityGate.evaluate.<locals>.<genexpr>ù   ó   è ø€ ÒG˜A¨1¯8©8´z·±Ó+F”aÑGùri   c              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   ©r'   r	   r   rf   s     r   rS   z(SecurityGate.evaluate.<locals>.<genexpr>ú   ó   è ø€ ÒH˜Q¨A¯H©H¼
¿¹Ó,G”qÑHùri   r   Úlevel©	r3   r4   r'   r5   r7   r8   r9   r:   r.   )ÚallÚappendr$   r	   r   r   Úlenr   r   r   rP   Úhasattrr[   r    r   ÚvalueÚsumr2   Ú	GATE_NAMEÚGATE_IDÚLEVEL)r=   ÚagentsÚpermission_gatewayÚpolicy_engineÚ	audit_logÚfirewallr5   Úall_have_identityrR   rW   r7   r8   r9   r:   s                 r   ÚevaluatezSecurityGate.evaluateZ   s6  € ð( #%ˆð ÐÜ #ñ $ØLRô$ó !Ðð �M‰Mœ)Ø/Ù*;”z—’ÄÇÁÜ˜f›+˜ oÐ6Ü"×+Ñ+ô	õ ð �M‰Mœ)Ø/Ü!—‘Ø5Ü"×+Ñ+ô	ô ð Ðà!öØØ—5‘5˜Ó'¨;Ò6ò ðˆIð ð �M‰Mœ)Ø*Ù.7”z—’¼Z¿_¹_ÙENœ#˜i›.Ð)Ð)@ÑAÐTiÜ"×+Ñ+ô	õ ð �M‰Mœ)Ø*Ü!—‘Ø5Ü"×+Ñ+ô	ô ð Ð)Ø�M‰Mœ)Ø0Ü!—‘Ø9Ü"×+Ñ+ô	õ ð �M‰Mœ)Ø0Ü!—‘Ø=Ü"×+Ñ+ô	ô ð Ð$Ø�M‰Mœ)Ø/Ü!—‘Ø-ÄGÈMÐ[aÔDb¨m×.@Ò.@ÐhtÐ-uÐvÜ"×+Ñ+ô	õ ð �M‰Mœ)Ø/Ü!—‘Ø8Ü"×+Ñ+ô	ô ð Ð Ø�M‰Mœ)Ø,Ü!—‘Ø,Ü"×+Ñ+ô	õ ð �M‰Mœ)Ø,Ü!—‘Ø5Ü"×+Ñ+ô	ô ð ÐØ�M‰Mœ)Ø.Ü!—‘Ø.Ü"Ÿ™ô	õ ð �M‰Mœ)Ø.Ü!—‘Ø6Ü"Ÿ™ô	ô ð Ð$¬°ÀÔ)GØ×!Ñ!×'Ñ'¨6Ò1Ø—‘œiØ=Ü%Ÿ?™?ØJÜ&Ÿ^™^ô	õ ð —‘œiØ=Ü%Ÿ?™?Ø" =×#5Ñ#5×#;Ñ#;Ð"<Ð<^Ð_Ü&Ÿ^™^ô	õ ð �M‰Mœ)Ø9Ü!—‘Ø>Ü"Ÿ™ô	ô ð 	�‰”iØ'Ü—?‘?ØCÜ×'Ñ'ô	
ô 	ô ÑF ÔFÓFˆÜÑF ÔFÓFˆÜÑG ÔGÓGˆÜÑH &ÔHÓHˆäØ—n‘nØ—L‘LØ&,°¢k”:—?’?´z·±ØØØØØØ˜tŸz™z×/Ñ/Ð0ô

ð 
	
ùòos   Â0T/©r@   ÚNone)NNNNN)r}   úlist[dict[str, Any]] | Noner~   ú
Any | Noner   r‡   r€   r‡   r�   r‡   r@   r2   ©r   r   r   r   r{   rz   r   r   r|   rJ   rƒ   r   r   r   rE   rE   E   sz   „ ñð €GØ€IØ×Ñ€Eó+ð
 /3Ø)-Ø$(Ø $Ø#ðl
à+ðl
ð 'ðl
ð "ð	l
ð
 ðl
ð ðl
ð 
ôl
r   rE   c                  óh   — e Zd ZdZdZdZej                  Zdd„Z		 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„Z
y)
ÚPrivacyGatea(  Quality Gate #20: Privacy validation.

    Validates that the system meets privacy requirements:
    - Data minimization is enforced
    - PII handling is controlled
    - Telemetry is opt-in
    - Data residency is configured
    - Retention policies are set
    - Pseudonymous IDs are used
    zgate-20zPrivacy Gatec                ó   — g | _         y rG   rH   r<   s    r   rJ   zPrivacyGate.__init__  rK   r   Nc                óÂ  — g }|j                  t        d|rt        j                  nt        j                  |rdndt
        j                  ¬«      «       |j                  t        d|rt        j                  nt        j                  |rdndt
        j                  ¬«      «       |j                  t        d|st        j                  nt        j                  |sd	nd
t
        j                  ¬«      «       |�>|j                  t        dt        j                  d|› �t
        j                  ¬«      «       n:|j                  t        dt        j                  dt
        j                  ¬«      «       |�?|j                  t        dt        j                  d|› d�t
        j                  ¬«      «       n:|j                  t        dt        j                  dt
        j                  ¬«      «       |j                  t        d|rt        j                  nt        j                  |rdndt
        j                  ¬«      «       t        d„ |D «       «      }t        d„ |D «       «      }	t        d„ |D «       «      }
t        d„ |D «       «      }t        | j                  | j                  |	dk(  rt        j                  nt        j                  |||	|
|d| j                  j                  i¬«	      S )zoEvaluate privacy gate checks.

        Returns:
            GateResult with all privacy check results.
        Údata_minimizationzData minimization is enforcedzData minimization not enforcedrU   Úpii_detectionzPII detection is activezPII detection not activeÚtelemetry_opt_inz Telemetry is disabled by defaultu'   Telemetry is enabled â€” verify consentÚdata_residency_configuredzData residency: zData residency not configuredÚretention_policy_setzRetention: z dayszNo retention policy configuredÚpseudonymous_idszPseudonymous IDs are usedzPseudonymous IDs not usedc              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   re   rf   s     r   rS   z'PrivacyGate.evaluate.<locals>.<genexpr>l  rh   ri   c              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   rk   rf   s     r   rS   z'PrivacyGate.evaluate.<locals>.<genexpr>m  rh   ri   c              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   rm   rf   s     r   rS   z'PrivacyGate.evaluate.<locals>.<genexpr>n  rn   ri   c              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   rp   rf   s     r   rS   z'PrivacyGate.evaluate.<locals>.<genexpr>o  rq   ri   r   rr   rs   )ru   r$   r	   r   r   r   r   r   r    r!   ry   r2   rz   r{   r|   rx   )r=   Útelemetry_enabledr�   rŽ   Údata_residencyÚretention_daysr’   r5   r7   r8   r9   r:   s               r   rƒ   zPrivacyGate.evaluate  s@  € ð #%ˆð 	�‰”iØ$Ù&7”:—?’?¼Z¿_¹_Ù6GÑ2ÐMmÜ×'Ñ'ô	
ô 	ð 	�‰”iØ Ù&3”:—?’?¼¿¹Ù0=Ñ,ÐC]Ü×'Ñ'ô	
ô 	ð 	�‰”iØ#Ù*;”:—?’?ÄÇÁÙ=NÑ5ÐT}Ü—^‘^ô	
ô 	ð Ð%Ø�M‰Mœ)Ø0Ü!—‘Ø)¨.Ð)9Ð:Ü"Ÿ™ô	õ ð �M‰Mœ)Ø0Ü!—‘Ø6Ü"Ÿ™ô	ô ð Ð%Ø�M‰Mœ)Ø+Ü!—‘Ø$ ^Ð$4°EÐ:Ü"×)Ñ)ô	õ ð �M‰Mœ)Ø+Ü!—‘Ø7Ü"×)Ñ)ô	ô ð 	�‰”iØ#Ù&6”:—?’?¼J¿O¹OÙ2BÑ.ÐHcÜ—^‘^ô	
ô 	ô ÑF ÔFÓFˆÜÑF ÔFÓFˆÜÑG ÔGÓGˆÜÑH &ÔHÓHˆäØ—n‘nØ—L‘LØ&,°¢k”:—?’?´z·±ØØØØØØ˜tŸz™z×/Ñ/Ð0ô

ð 
	
r   r„   )FTTNNT)r—   rA   r�   rA   rŽ   rA   r˜   ú
str | Noner™   z
int | Noner’   rA   r@   r2   rˆ   r   r   r   rŠ   rŠ   	  sˆ   „ ñ	ð €GØ€IØ×Ñ€Eó+ð
 #(Ø"&Ø"Ø%)Ø%)Ø!%ð_
àð_
ð  ð_
ð ð	_
ð
 #ð_
ð #ð_
ð ð_
ð 
ô_
r   rŠ   c                  ób   — e Zd ZdZdZdZej                  Zdd„Z		 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d	d„Z
y)
ÚArchitectureGateuƒ  Quality Gate #21: Architecture validation.

    Validates that the system meets architecture requirements:
    - Security boundary is enforced (Identity â†’ Policy â†’ Permission â†’ Audit)
    - No direct coupling between planes
    - Extension points use interfaces
    - No core module imports concrete provider implementations
    - Agent identity is separate from user identity
    zgate-21zArchitecture Gatec                ó   — g | _         y rG   rH   r<   s    r   rJ   zArchitectureGate.__init__�  rK   r   c                óì  — g }|j                  t        d|rt        j                  nt        j                  |rdndt
        j                  ¬«      «       |j                  t        d|st        j                  nt        j                  |sdndt
        j                  ¬«      «       |j                  t        d|rt        j                  nt        j                  |rd	nd
t
        j                  ¬«      «       |j                  t        d|st        j                  nt        j                  |sdndt
        j                  ¬«      «       |j                  t        d|rt        j                  nt        j                  |rdndt
        j                  ¬«      «       |j                  t        dt        j                  dt
        j                  ¬«      «       t        d„ |D «       «      }t        d„ |D «       «      }t        d„ |D «       «      }	t        d„ |D «       «      }
t        | j                  | j                  |dk(  rt        j                  nt        j                  ||||	|
d| j                  j                  i¬«	      S )zyEvaluate architecture gate checks.

        Returns:
            GateResult with all architecture check results.
        Úsecurity_boundary_enforcedu5   Identity â†’ Policy â†’ Permission â†’ Audit enforcedzSecurity boundary not enforcedrU   Úno_direct_plane_couplingzPlanes are decoupledz'Direct coupling detected between planesÚextension_points_use_interfacesz(Extension points use abstract interfacesz-Extension points use concrete implementationsÚno_core_concrete_importsz-Core modules do not import concrete providersz5Core modules import concrete provider implementationsÚidentity_separate_from_userz-Agent identity is separate from user identityz)Agent identity is not separated from userÚdefault_deny_policyzDefault deny policy is activec              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   re   rf   s     r   rS   z,ArchitectureGate.evaluate.<locals>.<genexpr>Ï  rh   ri   c              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   rk   rf   s     r   rS   z,ArchitectureGate.evaluate.<locals>.<genexpr>Ð  rh   ri   c              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   rm   rf   s     r   rS   z,ArchitectureGate.evaluate.<locals>.<genexpr>Ñ  rn   ri   c              3  ó\   K  — | ]$  }|j                   t        j                  k(  sŒ!d –— Œ& y­wrc   rp   rf   s     r   rS   z,ArchitectureGate.evaluate.<locals>.<genexpr>Ò  rq   ri   r   rr   rs   )ru   r$   r	   r   r   r   r   r    ry   r2   rz   r{   r|   rx   )r=   rŸ   Úplanes_coupledr¡   Úcore_imports_concreter£   r5   r7   r8   r9   r:   s              r   rƒ   zArchitectureGate.evaluate�  sì  € ð #%ˆð 	�‰”iØ-Ù&@”:—?’?ÄjÇoÁoÙNhÑJð  oOÜ×'Ñ'ô	
ô 	ð 	�‰”iØ+Ù*8”:—?’?¼j¿o¹oÙ1?Ñ)ÐEnÜ—^‘^ô	
ô 	ð 	�‰”iØ2Ù&E”:—?’?Ì:Ï?É?ÙA`Ñ=ð  gVÜ—^‘^ô	
ô 	ð 	�‰”iØ+Ù*?”:—?’?ÄZÇ_Á_ÙJ_ÑBð  f]Ü—^‘^ô	
ô 	ð 	�‰”iØ.Ù&A”:—?’?ÄzÇÁÙFaÑBð  hSÜ×'Ñ'ô	
ô 	ð 	�‰”iØ&Ü—?‘?Ø2Ü×'Ñ'ô	
ô 	ô ÑF ÔFÓFˆÜÑF ÔFÓFˆÜÑG ÔGÓGˆÜÑH &ÔHÓHˆäØ—n‘nØ—L‘LØ&,°¢k”:—?’?´z·±ØØØØØØ˜tŸz™z×/Ñ/Ð0ô

ð 
	
r   Nr„   )TFTFT)rŸ   rA   r©   rA   r¡   rA   rª   rA   r£   rA   r@   r2   )r   r   r   r   r{   rz   r   r    r|   rJ   rƒ   r   r   r   rœ   rœ   ~  sx   „ ñð €GØ#€IØ�N‰N€Eó+ð
 ,0Ø$Ø04Ø&+Ø,0ðN
à$(ðN
ð ðN
ð *.ð	N
ð
  $ðN
ð &*ðN
ð 
ôN
r   rœ   c                  ó¨   — e Zd ZdZdd„Zedd„«       Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
d„Zedd„«       Zy)ÚQualityGateRunneraG  Runs all quality gates and reports results.

    Usage:
        runner = QualityGateRunner()
        results = runner.run_all(
            agents=[...],
            permission_gateway=gateway,
            audit_log=audit,
            firewall=firewall,
        )
        all_passed = all(r.overall_passed for r in results)
    c                óH   — t        «       t        «       t        «       g| _        y rG   )rE   rŠ   rœ   Ú_gatesr<   s    r   rJ   zQualityGateRunner.__init__ï  s   € ä‹NÜ‹MÜÓðL
ˆ�r   c                ó,   — t        | j                  «      S )zReturn the configured gates.)rB   r®   r<   s    r   ÚgateszQualityGateRunner.gatesö  s   € ô �D—K‘KÓ Ð r   Nc           	     ó  — g }g | _         | j                  D ]à  }t        |t        «      r|j	                  |||||¬«      }nPt        |t
        «      r|j	                  ||||	|
|¬«      }n(t        |t        «      r|j	                  |||||¬«      }nŒz|j                  |«       t        j                  d|j                  |j                  |j                  j                  |j                  |j                  «       Œâ || _         |S )zTRun all quality gates.

        Returns a list of GateResult, one per gate.
        )r}   r~   r   r€   r�   )r—   r�   rŽ   r˜   r™   r’   )rŸ   r©   r¡   rª   r£   z/Quality gate %s (%s): %s (%d passed, %d failed))Ú_last_resultsr®   Ú
isinstancerE   rƒ   rŠ   rœ   ru   ÚloggerÚinfor3   r4   r'   rx   r7   r8   )r=   r}   r~   r   r€   r�   r—   r�   rŽ   r˜   r™   r’   rŸ   r©   r¡   rª   r£   ÚresultsÚgateÚresults                       r   Úrun_allzQualityGateRunner.run_allû  s  € ð. %'ˆØ/1ˆÔà—K‘Kò %	ˆDÜ˜$¤Ô-ØŸ™Ø!Ø'9Ø"/Ø'Ø%ð 'ó ‘ô ˜D¤+Ô.ØŸ™Ø&7Ø&7Ø"/Ø#1Ø#1Ø%5ð 'ó ‘ô ˜DÔ"2Ô3ØŸ™Ø/IØ#1Ø4SØ*?Ø0Kð 'ó ‘ð à�N‰N˜6Ô"Ü�K‰KØAØ× Ñ Ø—‘Ø—‘×#Ñ#Ø—‘Ø—‘õð=%	ðN %ˆÔØˆr   c                óT   — t        | d«      syt        d„ | j                  D «       «      S )z%Whether all gates passed on last run.r²   Tc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrG   )r>   )rQ   Úrs     r   rS   z/QualityGateRunner.all_passed.<locals>.<genexpr>D  s   è ø€ Ò@¨�1×#Õ#Ñ@ùs   ‚)rw   rt   r²   r<   s    r   Ú
all_passedzQualityGateRunner.all_passed?  s(   € ô �t˜_Ô-ØÜÑ@¨T×-?Ñ-?Ô@Ó@Ð@r   r„   )r@   z3list[SecurityGate | PrivacyGate | ArchitectureGate])NNNNNFTTNéZ   TTFTFT)"r}   r†   r~   r‡   r   r‡   r€   r‡   r�   r‡   r—   rA   r�   rA   rŽ   rA   r˜   rš   r™   r6   r’   rA   rŸ   rA   r©   rA   r¡   rA   rª   rA   r£   rA   r@   zlist[GateResult]r?   )	r   r   r   r   rJ   rC   r°   r¹   r½   r   r   r   r¬   r¬   á  s(  „ ñó
ð ò!ó ð!ð /3Ø)-Ø$(Ø $Ø#Ø"'Ø"&Ø"Ø%)Ø Ø!%Ø+/Ø$Ø04Ø&+Ø,0ð#Bà+ðBð 'ðBð "ð	Bð
 ðBð ðBð  ðBð  ðBð ðBð #ðBð ðBð ðBð %)ðBð ðBð *.ðBð   $ð!Bð" &*ð#Bð$ 
ó%BðH òAó ñAr   r¬   )rœ   r$   r   r2   r	   rŠ   r¬   rE   )r   Ú
__future__r   ÚloggingÚdataclassesr   r   Úenumr   Útypingr   Ú	getLoggerr   r´   r%   r	   r   r$   r2   rE   rŠ   rœ   r¬   Ú__all__r   r   r   ú<module>rÆ      s¸   ðñõ #ã ß (Ý Ý à	ˆ×	Ñ	˜8Ó	$€ô��dô ô��Tô ð ÷;ð ;ó ð;ð ÷ ð  ó ð ÷&A
ñ A
÷Hr
ñ r
÷j`
ñ `
÷FcAñ cAòL	�r   