
     i)                    |    d Z ddlmZ ddlZddlmZmZ e G d d             Ze G d d             Z G d	 d
      Z	y)u  
core/evolution/axiomatic_tests.py

Axiomatic test assertions compiled from GLOBAL_GENESIS_RULES.md.
Any proposed architectural change is instantly rejected if it violates a Genesis axiom.

Axioms enforced:
  AXIOM_NO_SQLITE       — Rule 7: SQLite forbidden, all storage via Elestio PG/Qdrant/Redis
  AXIOM_NO_API_KEY_LEAK — Security: no API keys / secrets in state output
  AXIOM_OCC_REQUIRED    — Rule 7: DB writes must include OCC version check
  AXIOM_NO_C_DRIVE      — Rule 6: all writes must stay on E: drive, never C:
  AXIOM_GEMINI_AUTH     — Rule 12: Gemini access requires authenticated session

All methods are pure (no I/O, no external calls). 100% unit-testable.
    )annotationsN)	dataclassfieldc                  0    e Zd ZU dZded<   ded<   ded<   y)AxiomViolationzEA single Genesis axiom violation detected during a code/state review.straxiom_iddescriptionevidenceN)__name__
__module____qualname____doc____annotations__     7/mnt/e/genesis-system/core/evolution/axiomatic_tests.pyr   r      s    OMMr   r   c                  8    e Zd ZU dZded<    ee      Zded<   y)AxiomResultz1Aggregate result of running all axiomatic checks.boolpassed)default_factorylist[AxiomViolation]
violationsN)r   r   r   r   r   r   listr   r   r   r   r   r   #   s    ;L',T'BJ$Br   r   c                      e Zd ZdZd
dZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	e
ddd       Zy	)AxiomaticTestsa;  
    Compiled Genesis axioms extracted from GLOBAL_GENESIS_RULES.md.

    Usage::

        checker = AxiomaticTests()
        result = checker.run_all(code_content="...", state_content={...})
        if not result.passed:
            for v in result.violations:
                print(v.axiom_id, v.description)
    c                    g }| j                  ||       | j                  ||       | j                  ||       | j                  ||       | j	                  ||       t        t        |      dk(  |      S )a  
        Run all 5 Genesis axioms against the provided inputs.

        NOT fail-fast: all axioms are checked even when earlier ones fail.
        Returns all violations accumulated across the full run.

        Args:
            code_content: Raw source-code string to analyse.
            state_content: Arbitrary dict (serialised as str) to check for
                           leaked credentials.

        Returns:
            AxiomResult with passed=True iff violations list is empty.
        r   )r   r   )_check_no_sqlite_check_no_api_key_leak_check_occ_required_check_no_c_drive_check_gemini_authr   len)selfcode_contentstate_contentr   s       r   run_allzAxiomaticTests.run_all@   su     ,.
lJ7##M:>  z:|Z8j9z?a'!
 	
r   c                    g d}|D ]5  }||v s|j                  t        dd| j                  ||                    y y)z
        AXIOM_NO_SQLITE: SQLite is forbidden in Genesis.
        Detects: ``import sqlite3``, ``import sqlite``, plain ``sqlite3`` token.
        )zimport sqlite3zimport sqlitesqlite3AXIOM_NO_SQLITEu_   SQLite usage detected — forbidden by Rule 7. Use Elestio PostgreSQL / Qdrant / Redis instead.r	   r
   r   N)appendr   _extract_evidence)r%   coder   patternspatterns        r   r   zAxiomaticTests._check_no_sqlite`   sV     B 	G$!!"!2O "&!7!7g!F	 	r   c           	     ~    t        |      }g d}|D ])  }||v s|j                  t        dd| d|              y y)z
        AXIOM_NO_API_KEY_LEAK: No API keys or secrets in state output.
        Detected patterns: ``sk-``, ``API_KEY=``, ``TELNYX_API_KEY``.
        )zsk-zAPI_KEY=TELNYX_API_KEYAXIOM_NO_API_KEY_LEAKz"Potential API key leak detected: 'z7' found in state output. Rotate and remove immediately.r,   N)r   r-   r   )r%   stater   	state_strsecret_patternsr1   s         r   r    z%AxiomaticTests._check_no_api_key_leak}   s`     J	?& 	G)#!!"!8@	 JK K ")	 	r   c                   t        t        j                  d|t        j                              }|syt        t        j                  d|t        j                              }|s|j	                  t        ddd             yy)z
        AXIOM_OCC_REQUIRED: Any INSERT or UPDATE statement must be accompanied
        by an Optimistic Concurrency Control (OCC) ``WHERE version =`` clause.
        z\b(INSERT|UPDATE)\bNzWHERE\s+version\s*=AXIOM_OCC_REQUIREDzDB write operation (INSERT/UPDATE) detected without an OCC version check ('WHERE version ='). Add optimistic concurrency control to prevent lost-update anomalies.z-INSERT/UPDATE found without 'WHERE version ='r,   )r   research
IGNORECASEr-   r   )r%   r/   r   has_db_writehas_version_checks        r   r!   z"AxiomaticTests._check_occ_required   s|     II,dBMMB
  !II,dBMMB
 !1D M
 !r   c                    g d}|D ]G  }t        j                  ||      s|j                  t        dd| j	                  |d                    y y)z
        AXIOM_NO_C_DRIVE: C: drive paths are forbidden. All work on E: drive.
        Detected patterns: ``C:\``, ``C:/``, ``"C:``, ``'C:``.
        )zC:\\\\zC:/z"C:z'C:AXIOM_NO_C_DRIVEuW   C: drive path detected — forbidden by Rule 6. All file paths must reside on E: drive.zC:r,   N)r:   r;   r-   r   r.   )r%   r/   r   c_drive_patternsr1   s        r   r"   z AxiomaticTests._check_no_c_drive   s]     ?' 	Gyy$'!!"!3F "&!7!7d!C	 	r   c                    d|vry|j                         }d|v xs d|v }|s|j                  t        ddd             yy)	z
        AXIOM_GEMINI_AUTH: Any reference to ``gemini.google.com`` must be paired
        with a ``login`` or ``auth`` check in the same code block.
        Unauthenticated Gemini sessions are forbidden by Rule 12.
        zgemini.google.comNloginauthAXIOM_GEMINI_AUTHu   gemini.google.com access detected without authentication check — forbidden by Rule 12. All Gemini sessions must be authenticated via kinan@agileadapt.com (Ultra).z1gemini.google.com found without 'login' or 'auth'r,   )lowerr-   r   )r%   r/   r   
code_lowerhas_auths        r   r#   z!AxiomaticTests._check_gemini_auth   s[     d*ZZ\
j(@Fj,@0J Q
 r   c                    | j                         j                  |j                               }|dk(  r|S t        d||z
        }t        t	        |       |t	        |      z   |z         }| || S )z
        Extract a short snippet of ``text`` centred on ``keyword`` for use as
        human-readable evidence in a violation report.

        Returns ``keyword`` itself if not found in ``text``.
        r   )rF   findmaxminr$   )textkeywordcontext_charsidxstartends         r   r.   z AxiomaticTests._extract_evidence   sg     jjl0"9NAs]*+#d)S3w</-?@E#r   N)r&   r   r'   dictreturnr   )r/   r   r   r   rU   None)r5   rT   r   r   rU   rV   )(   )rN   r   rO   r   rP   intrU   r   )r   r   r   r   r(   r   r    r!   r"   r#   staticmethodr.   r   r   r   r   r   /   s    
 
@ ) 
	: ) 
	: ) 
	H ) 
	8 ) 
	@  r   r   )
r   
__future__r   r:   dataclassesr   r   r   r   r   r   r   r   <module>r\      sV     # 	 (    C C CX Xr   