§
    �ÄjP  ã                   óà  — U d Z ddlZddlZddlZddlmZ ddlZddlmZ ddl	m
Z
  eej        d¦  «        rej                             dd¬	¦  «          eej        d¦  «        rej                             dd¬	¦  «         d
ZdZdZdddddg d¢g d¢dœdddddg d¢g d¢dœdddddg d¢g d ¢dœd!d"d#d$d%g d&¢g d'¢dœd(d)d*d$d+g d,¢g d-¢dœd.d/d0d$dg d1¢g d2¢dœd3d4d5d$d6g d7¢d8d9gdœd:d;d<d$dg d=¢d>d9gdœgZeeeef                  ed?<    G d@„ dA¦  «        ZdBeeef         dCefdD„ZdEeeef         dFeeeef                  dCeeef         fdG„ZdCeeeeeef                  f         fdH„ZdIeeeef                  dJedCdfdK„Z ej        dL¬M¦  «        dN„ ¦   «         ZdO„ Z dP„ Z!dQ„ Z"dR„ Z#dS„ Z$dT„ Z%dU„ Z&dV„ Z'e(dWk    r: e)dX¦  «          e¦   «         \  Z*Z+ ee+e*¦  «          ej,        e*rdndY¦  «         dS dS )Zu1  DSCons ERP Mem0 Knowledge Base Verification Test Suite.

End-to-end automated verification harness for the Mem0 long-term memory engine
backing DSCons ERP (CÃ´ng ty TNHH XÃ¢y Dá»±ng Ä�á»‹nh SÆ¡n - MST: 0202111150).

Directives:
1. Zero synthetic / fake data: Queries the live Mem0 service on http://127.0.0.1:8765/sse.
2. Evaluates 8 verification queries across 5 knowledge pillars.
3. Enforces quantitative gates: Top-1 Score >= 0.55, 100% DSCons domain dominance, 0% contamination.
4. Outputs formatted CLI scorecard and exits with code 0 on PASS, 1 on FAIL.
é    N)ÚAny)ÚClientSession)Ú
sse_clientÚreconfigurezutf-8Úreplace)ÚencodingÚerrorszhttp://127.0.0.1:8765/sseÚ	developergš™™™™™á?ÚQ1z,Mandatory Q1 - DSCons Root Rules & Core LawszDSCons ruleTzArea 1: Root Standards)u   Báº£y Ä�iá»�u luáº­tu
   cá»‘t lÃµizsynthetic dataõ   Ä�á»‹nh SÆ¡nÚ
0202111150u   lá»¥c giÃ¡cÚ	Hexagonal)zapp/core/logging_configÚ	FreeExileÚAtlasÚSavageú	Feral NPC)ÚidÚnameÚqueryÚ	mandatoryÚareaÚexpected_keywordsÚforbidden_keywordsÚQ2z#Mandatory Q2 - Frontend UI/UX Themezfrontend themezArea 3: Frontend UI/UX)z
Dark Slatez#0b0f19z#080d1aÚInterzJetBrains MonoÚ	Bloombergzerp_enterprise.css)r   zDialogue HUDz	Combat UIr   r   ÚQ3z/Mandatory Q3 - Backend Clean Architecture & DDDzbackend architecturezArea 2: Backend & DB)zClean ArchitectureÚDDDúNUMERIC(18, 4)ÚDecimalÚPortsz4-Layeru   4 táº§ng)zServer-Authoritative StreamingzCocos Creatorr   ÚFeralÚQ4z-Domain Q4 - AEC Pricing Norms & BoQ BudgetingzAEC pricing normsFzArea 4: AEC Business)u   ThÃ´ng tÆ° 38u   cá»« LarsenzVL = 0zMR / TzMR/TÚG_XDu   Ä�á»‹nh má»©c)u
   4.753 tá»·zcache 71r   ÚQ5z'Domain Q5 - CAD Takeoff Engine GeometryzCAD takeoff geometryzArea 4: CAD Takeoff)ÚTCVN3zstroke-width: 1pxzBounding Boxu   ChÆ°Æ¡ng SAz.VnTimez	Zero-Void)r   ÚCombatÚNPCÚQ6z2Domain Q6 - Database Precision & Financial Ledgerszdatabase precision)r   r    u	   Sá»• kÃ©pzDouble-entryz18, 4)u   FLOAT cho tiá»�n tá»‡u   DOUBLE cho tiá»�n tá»‡r   ÚQ7z,Domain Q7 - Testing Workflow & Quality Gatesztesting workflowzArea 5: Testing & Workflow)zDeep MatrixzD1-D6u   D1 Ä�áº¿n D6ÚTDDztask.mdÚVerificationz80%u   scaffolding rá»—ngr   ÚQ8z(Domain Q8 - Mandatory MCP Tools ProtocolzMCP tools protocol)zlsp-mcpzchrome-devtools-mcpÚ
markitdownÚmemoryÚ	StitchMCPu"   grep_search cho Ä‘á»•i tÃªn symbolÚVERIFICATION_CATALOGc            
       ó˜   — e Zd ZdZefdefd„Zdeeef         fd„Z	ddede
deeeef                  fd	„Zdeeeef                  fd
„ZdS )Ú
Mem0ClientzTLightweight async MCP client for querying the local Mem0 FastMCP background service.Ússe_urlc                 ó   — || _         d S )N)r4   )Úselfr4   s     ú2C:\Projects\DSCons\tests\test_mem0_verification.pyÚ__init__zMem0Client.__init__Ð   s   € ØˆŒˆˆó    Úreturnc              ƒ   óà  K  — t          | j        ¦  «        4 ƒd{V —†	 \  }}t          ||¦  «        4 ƒd{V —†	 }|                     ¦   «         ƒ d{V —† |                     di ¬¦  «        ƒ d{V —†}t          j        |j        d         j        ¦  «        cddd¦  «        ƒd{V —† cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )z&Check Mem0 service operational status.NÚmem0_status©Ú	argumentsr   )	r   r4   r   Ú
initializeÚ	call_toolÚjsonÚloadsÚcontentÚtext)r6   ÚreadÚwriteÚsessionÚress        r7   Úcheck_statuszMem0Client.check_statusÓ   sI  è è € õ �t”|Ñ$Ô$ð	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3Ù(5¨¨uÝ˜$ Ñ&Ô&ð	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3à*1à×$Ò$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø×)Ò)¨-À2Ð)ÑFÔFÐFÐFÐFÐFÐFÐFˆCÝ”:˜cœk¨!œnÔ1Ñ2Ô2ð	3ð 	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3ð 	3ð 	3s5   žC¹AB9ÂCÂ9
C	ÃCÃC	ÃCÃ
C'Ã*C'é   r   Úlimitc           	   ƒ   óF  K  — t          | j        ¦  «        4 ƒd{V —†	 \  }}t          ||¦  «        4 ƒd{V —†	 }|                     ¦   «         ƒ d{V —† |                     d|t
          |dœ¬¦  «        ƒ d{V —†}t          j        |j        d         j	        ¦  «        }| 
                    di ¦  «         
                    dg ¦  «        cddd¦  «        ƒd{V —† cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )z0Search Mem0 long-term memory for matching facts.NÚmem0_search)r   Úuser_idrK   r=   r   ÚmemoriesÚresults©r   r4   r   r?   r@   ÚUSER_IDrA   rB   rC   rD   Úget)r6   r   rK   rE   rF   rG   rH   Údatas           r7   ÚsearchzMem0Client.searchÝ   sŒ  è è € õ �t”|Ñ$Ô$ð
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?Ù(5¨¨uÝ˜$ Ñ&Ô&ð
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?à*1à×$Ò$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø×)Ò)ØØ$)µgÈÐNÐNð *ñ ô ð ð ð ð ð ð ˆCõ ”:˜cœk¨!œnÔ1Ñ2Ô2ˆDØ—8’8˜J¨Ñ+Ô+×/Ò/°	¸2Ñ>Ô>ð
	?ð 
	?ð 
	?ð 
	?ñ 
	?ô 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ñ 
	?ô 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?øøøð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ñ 
	?ô 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?øøøð 
	?ð 
	?ð 
	?ð 
	?ð 
	?ð 
	?s5   žD¹BC,ÃDÃ,
C6	Ã6DÃ9C6	Ã:DÄ
DÄDc              ƒ   óB  K  — t          | j        ¦  «        4 ƒd{V —†	 \  }}t          ||¦  «        4 ƒd{V —†	 }|                     ¦   «         ƒ d{V —† |                     ddt
          i¬¦  «        ƒ d{V —†}t          j        |j        d         j	        ¦  «        }| 
                    di ¦  «         
                    dg ¦  «        cddd¦  «        ƒd{V —† cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )z(Fetch all stored memories for developer.NÚmem0_get_allrN   r=   r   rO   rP   rQ   )r6   rE   rF   rG   rH   rT   s         r7   Úget_allzMem0Client.get_allë   s†  è è € õ �t”|Ñ$Ô$ð		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?Ù(5¨¨uÝ˜$ Ñ&Ô&ð		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?à*1à×$Ò$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø×)Ò)Ø¨9µgÐ*>ð *ñ ô ð ð ð ð ð ð ˆCõ ”:˜cœk¨!œnÔ1Ñ2Ô2ˆDØ—8’8˜J¨Ñ+Ô+×/Ò/°	¸2Ñ>Ô>ð		?ð 		?ð 		?ð 		?ñ 		?ô 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ñ 		?ô 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?øøøð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ñ 		?ô 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?øøøð 		?ð 		?ð 		?ð 		?ð 		?ð 		?s5   žD¹BC*ÃDÃ*
C4	Ã4DÃ7C4	Ã8DÄ
DÄDN)rJ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚMEM0_SSE_URLÚstrr8   Údictr   rI   ÚintÚlistrU   rX   © r9   r7   r3   r3   Í   sÃ   € € € € € Ø^Ð^à&2ð ð  ð ð ð ð ð3 D¨¨c¨¤Nð 3ð 3ð 3ð 3ð?ð ? #ð ?¨cð ?¸$¸tÀCÈÀH¼~Ô:Nð ?ð ?ð ?ð ?ð?˜t D¨¨c¨¤NÔ3ð ?ð ?ð ?ð ?ð ?ð ?r9   r3   Úitemr:   c                 óN  — |                       dd¦  «        }|                       d¦  «        pi }t          |                      dd¦  «        ¦  «                             ¦   «                              ¦   «         }|dk    rdS t	          |                     d¦  «        pd|v pd	|v ¦  «        S )
zEDetermine whether a returned record belongs to the DSCons ERP domain.r/   Ú ÚmetadataÚprojectÚdsconsTz[DSConsz
DSCons ERPr   )rS   r^   ÚstripÚlowerÚboolÚ
startswith)rc   rD   rf   Úprojs       r7   Úis_dscons_recordrn   ù   s�   € à�8Š8�H˜bÑ!Ô!€DØ�xŠx˜
Ñ#Ô#Ð) r€HÝˆx�|Š|˜I rÑ*Ô*Ñ+Ô+×1Ò1Ñ3Ô3×9Ò9Ñ;Ô;€DàˆxÒÐØˆtÝ�—’ 	Ñ*Ô*Ð\¨l¸dÐ.BÐ\ÀnÐX\ÐF\Ñ]Ô]Ð]r9   Úcatalog_entryrP   c                 ób  — | d         }| d         }| d         }| d         }|| d         || d         t          |¦  «        dddd	dd
g ddg dœ}|s|d                              d¦  «         |S |d         }|                     dd¦  «        }t          |                     dd¦  «        ¦  «        }	|	|d<   t          |¦  «        dk    r|d
d…         dz   n||d<   |	t          k    |d<   t          |¦  «        }
|d
d…         }t          d„ |D ¦   «         ¦  «        }|r|t          |¦  «        z  nd}|
o|dk    ot          |
¦  «        |d<   |D ]6}|                     ¦   «         |                     ¦   «         v rd	|d<   ||d<    nŒ7t          |¦  «        D �]|\  }}|                     dd¦  «        }|                     d¦  «        pi }t          |                     dd¦  «        ¦  «                             ¦   «         }|D ]T}|                     ¦   «         |                     ¦   «         v r*d|d<   |d                              d |d!z   › d"|› d#�¦  «         ŒUd$|                     ¦   «         v sd%|                     ¦   «         v r-|d&k    r'd|d<   |d                              d |d!z   › d'�¦  «         |d(                              |d!z   |                     dd¦  «        t          |¦  «        t          |¦  «        d)k    r|d
d)…         dz   n|d*œ¦  «         �Œ~|d         o|d         o|d         o|d         |d+<   |S ),z=Evaluate a single query's results against pass/fail criteria.r   r   r   r   r   r   g        FTNre   )r   r   r   r   Ú
total_hitsÚ
top1_scoreÚ
score_passÚdomain_dominance_passÚcontamination_cleanÚexpected_keyword_foundÚmatched_keywordÚcontamination_reasonsÚoverall_passÚtop1_snippetÚ
top3_itemsrx   zNo results returned from queryr   r/   Úscorerr   éZ   z...rz   rs   é   c              3   ó8   K  — | ]}t          |¦  «        ¯d V — ŒdS )é   N)rn   )Ú.0Úrs     r7   ú	<genexpr>z(evaluate_query_result.<locals>.<genexpr>4  s0   è è € ÐCÐC !Õ/?ÀÑ/BÔ/BÐC˜AÐCÐCÐCÐCÐCÐCr9   g…ëQ¸å?rt   rv   rw   rf   rg   ru   zHit #r€   z contains forbidden keyword 'ú'Ú	freeexilez	feral npcrh   z4 has corrupted metadata (FreeExile tagged as DSCons)r{   éF   )Úrankr|   Ú	is_dsconsÚsnippetry   )ÚlenÚappendrS   ÚfloatÚMIN_SIMILARITY_SCORErn   Úsumrk   rj   Ú	enumerater^   )ro   rP   Úentry_idr   Úexpected_kwsÚforbidden_kwsÚ
evaluationÚtop1Ú	top1_textrr   Útop1_is_dsconsÚtop3Útop3_dscons_countÚ
top3_ratioÚkwÚir‚   Úr_textÚr_metaÚr_projÚfkws                        r7   Úevaluate_query_resultr      sõ  € ð ˜TÔ"€HØ˜'Ô"€EØ Ð!4Ô5€LØ!Ð"6Ô7€Mð Ø˜fÔ%ØØ" ;Ô/Ý˜'‘l”lØØØ!&Ø#Ø"'ØØ!#ØØØðð €Jð$ ð ØÐ*Ô+×2Ò2Ð3SÑTÔTÐTØÐà�1Œ:€DØ—’˜ 2Ñ&Ô&€IÝ�t—x’x ¨Ñ-Ô-Ñ.Ô.€JØ)€Jˆ|Ñå$'¨	¡N¤N°RÒ$7Ð$7ˆ�3�B�3Œ˜%Ñ	Ð	¸Yð ˆ~Ñð
  *Õ-AÒA€Jˆ|Ñõ & dÑ+Ô+€Nà�2�A�2Œ;€DÝÐCÐC tÐCÑCÔCÑCÔCÐØ26Ð?Ð"¥S¨¡Y¤YÑ.Ð.¸C€Jð 	ÐH˜J¨$Ò.ÐHµD¸Ñ4HÔ4Hð Ð&Ñ'ð ð ð ˆØ�8Š8‰:Œ:˜ŸšÑ*Ô*Ð*Ð*Ø37ˆJÐ/Ñ0Ø,.ˆJÐ(Ñ)ØˆEð +õ ˜$‘”ð 
ñ 
‰ˆˆ1Ø—’�x Ñ$Ô$ˆØ—’�zÑ"Ô"Ð( bˆÝ�V—Z’Z 	¨2Ñ.Ô.Ñ/Ô/×5Ò5Ñ7Ô7ˆð !ð 	ð 	ˆCØ�yŠy‰{Œ{˜fŸlšl™nœnÐ,Ð,Ø49�
Ð0Ñ1ØÐ2Ô3×:Ò:ØD˜A˜a™CÐDÐD¸cÐDÐDÐDñô ð øð ˜6Ÿ<š<™>œ>Ð)Ð)¨[¸F¿LºL¹N¼NÐ-JÐ-JØ˜Ò Ð Ø05ˆJÐ,Ñ-ØÐ.Ô/×6Ò6ØQ˜˜!™ÐQÐQÐQñô ð ð 	�<Ô ×'Ò'à˜A™ØŸš˜w¨Ñ,Ô,Ý-¨aÑ0Ô0Ý47¸±K´KÀ"Ò4DÐ4D˜F 3 B 3œK¨%Ñ/Ð/È&ð	ð ñ	
ô 	
ð 	
ñ 	
ð 	�<Ô ð 	1ØÐ.Ô/ð	1àÐ,Ô-ð	1ð Ð/Ô0ð	 ˆ~Ñð Ðr9   c                  ó¢   ‡— t          ¦   «         Šˆfd„} t          j         | ¦   «         ¦  «        \  }}t          d„ |D ¦   «         ¦  «        }||fS )zRExecute all 8 verification queries synchronously via asyncio and return scorecard.c               “   óì   •K  — ‰                      ¦   «         ƒ d {V —†} g }t          D ]J}‰                     |d         d¬¦  «        ƒ d {V —†}t          ||¦  «        }|                     |¦  «         ŒK| |fS )Nr   rJ   )rK   )rI   r1   rU   r    r‹   )ÚstatusÚevaluationsÚentryrP   ÚevÚclients        €r7   Ú
_async_runz)run_all_verifications.<locals>._async_runr  sš   øè è € Ø×*Ò*Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,ˆØˆÝ)ð 	#ð 	#ˆEØ"ŸMšM¨%°¬.À˜MÑBÔBÐBÐBÐBÐBÐBÐBˆGÝ& u¨gÑ6Ô6ˆBØ×Ò˜rÑ"Ô"Ð"Ð"Ø�{Ð"Ð"r9   c              3   ó&   K  — | ]}|d          V — ŒdS )ry   Nrb   ©r�   r¦   s     r7   rƒ   z(run_all_verifications.<locals>.<genexpr>|  s'   è è € Ð>Ð>¨B�R˜Ô'Ð>Ð>Ð>Ð>Ð>Ð>r9   )r3   ÚasyncioÚrunÚall)r¨   Ú_statusr¤   Ú
all_passedr§   s       @r7   Úrun_all_verificationsr°   n  sh   ø€ å‰\Œ\€Fð#ð #ð #ð #ð #õ #œ; z z¡|¤|Ñ4Ô4Ñ€Gˆ[ÝÐ>Ð>°+Ð>Ñ>Ô>Ñ>Ô>€JØ�{Ð"Ð"r9   r¤   r¯   c                 óê  — d}d}t          d|z   ¦  «         t          d¦  «         t          |¦  «         t          ddd›dd	d
›ddd›ddd›ddd›ddd›ddd›�¦  «         t          |¦  «         | D ]£}|d         }|d         rdnd}t          |d         ¦  «        dk    r|d         dd…         dz   n|d         }|d         d›}|d         rd nd!}	|d"         rd#nd$}
|d%         rd&nd!}t          d|d›d|d
›d|d›d|d›d|	d›d|
d›d|d›�¦  «         Œ¤t          |¦  «         t          d'„ | D ¦   «         ¦  «        }t          | ¦  «        }||z  d(z  }t          d)|› d*|› d+|d,›d-�¦  «         |rt          d.¦  «         �n`t          d/¦  «         t          d0¦  «         | D �]>}|d%         �s2t          d1|d         › d2|d         › d3�¦  «         t          d4|d         d›d5t          › d6|d7         › d8�¦  «         t          d9|d         › �¦  «         t          d:|d;         › d<|d=         › d8�¦  «         t          d>|d"         › �¦  «         |d?         r|d?         D ]}t          d@|› �¦  «         Œt          dA|dB         › �¦  «         |dC         rNt          dD¦  «         |dC         D ]6}t          dE|dF         › dG|dH         d›dI|dJ         › dK|dL         › �¦  «         Œ7�Œ@t          |dz   ¦  «         dS )Mz=Print an attractive, aligned ASCII scorecard table to stdout.z^==============================================================================================z^----------------------------------------------------------------------------------------------ú
z?                     DSCONS ERP MEM0 LONG-TERM MEMORY SCORECARDú ÚIDz<3z | ÚTypez<5zQuery Stringz<24zTop-1z<7ÚDomainz<8ÚContamÚStatusz<6r   r   ÚManÚDomr   é   Né   z..rr   ú.4frt   ÚDSConsÚFAILru   ÚCLEANÚDIRTYry   ÚPASSc              3   ó*   K  — | ]}|d          ¯
dV — ŒdS )ry   r€   Nrb   rª   s     r7   rƒ   z"print_scorecard.<locals>.<genexpr>ž  s,   è è € ÐEÐE˜R°"°^Ô2DÐE�qÐEÐEÐEÐEÐEÐEr9   g      Y@z
 SUMMARY: ú/z Queries Passed (z.1fz%)zB FINAL VERDICT: [PASS] All 8 queries met 100% acceptance criteria.z@ FINAL VERDICT: [FAIL] System requires cleanup and/or ingestion.z
--- FAILURE DIAGNOSTICS ---z
[!] Failure in z - "z":z    - Score: z (>= z: rs   ú)z    - Domain Dominance: z    - Keyword Found: rv   z (Matched: rw   z    - Contamination Clean: rx   z      * Contamination: z    - Top 1 Snippet: rz   r{   z    - Top Hits:z      #r‡   z: score=r|   z is_dscons=rˆ   z text=r‰   )ÚprintrŠ   rŽ   r�   )r¤   r¯   ÚborderÚ
sub_borderr¦   Úq_idÚq_typeÚ	query_strÚ	score_strÚ
domain_strÚ
contam_strÚ
status_strÚpassed_countÚtotal_countÚpass_pctÚcrÚits                    r7   Úprint_scorecardrÕ   €  s©  € à€FØ€Jå	ˆ$�‰-ÑÔÐÝ	Ð
KÑLÔLÐLÝ	ˆ&�M„M€MÝ	ØyˆDÐyÐyÐy˜ÐyÐyÐy nÐyÐyÐy¸WÐyÐyÐyÈHÐyÐyÐyÐ\dÐyÐyÐyÐltÐyÐyÐyñô ð õ 
ˆ*ÑÔÐàð 
ð 
ˆØ�$ŒxˆØ˜[œ/Ð4��¨uˆå'*¨2¨g¬;Ñ'7Ô'7¸"Ò'<Ð'<ˆBˆwŒK˜˜˜Ô˜tÑ#Ð#À"ÀWÄ+ð 	ð ˜,Ô'Ð-Ð-ˆ	Ø!#Ð$;Ô!<ÐH�X�XÀ&ˆ
Ø "Ð#8Ô 9ÐF�W�W¸wˆ
Ø! .Ô1Ð=�V�V°vˆ
åð A�ð  Að  Að  A˜Fð  Að  Að  A¨)ð  Að  Að  A¸Ið  Að  Að  AÈZð  Að  Að  AÐ_ið  Að  Að  AÐq{ð  Að  Að  Añ	
ô 	
ð 	
ð 	
õ 
ˆ&�M„M€MåÐEÐE ;ÐEÑEÔEÑEÔE€LÝ�kÑ"Ô"€KØ˜{Ñ*¨eÑ3€Hå	ØR�\ÐRÐR KÐRÐRÀ(ÐRÐRÐRÐRñô ð ð ð ÝÐRÑSÔSÐSÑSåÐPÑQÔQÐQÝÐ-Ñ.Ô.Ð.Øð 	ñ 	ˆBØ�nÔ%ñ ÝÐI¨"¨T¬(ÐIÐI¸¸G¼ÐIÐIÐIÑJÔJÐJÝØj B |Ô$4ÐjÐjÐjÕ?SÐjÐjÐWYÐZfÔWgÐjÐjÐjñô ð õ ÐN°Ð4KÔ1LÐNÐNÑOÔOÐOÝØm¨BÐ/GÔ,HÐmÐmÐUWÐXiÔUjÐmÐmÐmñô ð õ ÐO°BÐ7LÔ4MÐOÐOÑPÔPÐPØÐ-Ô.ð >Ø Ð!8Ô9ð >ð >˜ÝÐ<¸Ð<Ð<Ñ=Ô=Ð=Ð=ÝÐB¨b°Ô.@ÐBÐBÑCÔCÐCØ�lÔ#ð ÝÐ+Ñ,Ô,Ð,Ø  Ô.ð ð ˜ÝØ| b¨¤jÐ|Ð|¸"¸W¼+Ð|Ð|Ð|ÐVXÐYdÔVeÐ|Ð|ÐmoÐpyÔmzÐ|Ð|ñô ð ð ùõ 
ˆ&�4‰-ÑÔÐÐÐr9   Úmodule)Úscopec                  ó<   — t          ¦   «         \  } }d„ |D ¦   «         S )z<Module fixture caching the 8 verification query evaluations.c                 ó    — i | ]}|d          |“ŒS )r   rb   rª   s     r7   ú
<dictcomp>z(verification_results.<locals>.<dictcomp>Ì  s   € Ð/Ð/Ð/˜RˆBˆtŒH�bÐ/Ð/Ð/r9   )r°   )Ú_all_passedr¤   s     r7   Úverification_resultsrÜ   È  s(   € õ  5Ñ6Ô6Ñ€K�Ø/Ð/ ;Ð/Ñ/Ô/Ð/r9   c                 ó  — | d         }|d         sJ d|d         d›dt           › �¦   «         ‚|d         sJ d|d	         › �¦   «         ‚|d
         sJ d|d         › �¦   «         ‚|d         s
J d¦   «         ‚|d         sJ ‚dS )z5Verify Mandatory Q1: DSCons root rules and core laws.r   rs   úTop-1 score rr   r½   ú < rt   úDomain dominance failed for r   ru   úContamination detected: rx   rv   z4No expected DSCons root rule keywords found in Top-1ry   N©r�   ©rÜ   r¦   s     r7   Útest_q1_dscons_root_rulesrä   Ð  óï   € à	˜dÔ	#€Bà
ˆ<ÔðFð FàE�b˜Ô&ÐEÐEÐEÕ/CÐEÐEñFô FØð 	Ð"Ô#ð4ð 4à3 b¨¤kÐ3Ð3ñ4ô 4Ø#ð 	Ð Ô!ð@ð @à? "Ð%<Ô"=Ð?Ð?ñ@ô @Ø!ð 	Ð#Ô$ð>ð >à=ñ>ô >Ø$àˆnÔÐÐÐÐÐr9   c                 ó  — | d         }|d         sJ d|d         d›dt           › �¦   «         ‚|d         sJ d|d	         › �¦   «         ‚|d
         sJ d|d         › �¦   «         ‚|d         s
J d¦   «         ‚|d         sJ ‚dS )z5Verify Mandatory Q2: Frontend UI/UX Dark Slate theme.r   rs   rÞ   rr   r½   rß   rt   rà   r   ru   rá   rx   rv   z0No Dark Slate / UI theme keywords found in Top-1ry   Nrâ   rã   s     r7   Útest_q2_frontend_themerç   â  sï   € à	˜dÔ	#€Bà
ˆ<ÔðFð FàE�b˜Ô&ÐEÐEÐEÕ/CÐEÐEñFô FØð 	Ð"Ô#ð4ð 4à3 b¨¤kÐ3Ð3ñ4ô 4Ø#ð 	Ð Ô!ð@ð @à? "Ð%<Ô"=Ð?Ð?ñ@ô @Ø!ð 	Ð#Ô$ð:ð :à9ñ:ô :Ø$àˆnÔÐÐÐÐÐr9   c                 ó  — | d         }|d         sJ d|d         d›dt           › �¦   «         ‚|d         sJ d|d	         › �¦   «         ‚|d
         sJ d|d         › �¦   «         ‚|d         s
J d¦   «         ‚|d         sJ ‚dS )z6Verify Mandatory Q3: Backend Clean Architecture & DDD.r   rs   rÞ   rr   r½   rß   rt   rà   r   ru   rá   rx   rv   z-No Clean Architecture keywords found in Top-1ry   Nrâ   rã   s     r7   Útest_q3_backend_architectureré   ô  óï   € à	˜dÔ	#€Bà
ˆ<ÔðFð FàE�b˜Ô&ÐEÐEÐEÕ/CÐEÐEñFô FØð 	Ð"Ô#ð4ð 4à3 b¨¤kÐ3Ð3ñ4ô 4Ø#ð 	Ð Ô!ð@ð @à? "Ð%<Ô"=Ð?Ð?ñ@ô @Ø!ð 	Ð#Ô$ð7ð 7à6ñ7ô 7Ø$àˆnÔÐÐÐÐÐr9   c                 ó  — | d         }|d         sJ d|d         d›dt           › �¦   «         ‚|d         sJ d|d	         › �¦   «         ‚|d
         sJ d|d         › �¦   «         ‚|d         s
J d¦   «         ‚|d         sJ ‚dS )z2Verify Domain Q4: AEC pricing norms & Circular 38.r#   rs   rÞ   rr   r½   rß   rt   rà   r   ru   rá   rx   rv   z6No Circular 38 / pricing norms keywords found in Top-1ry   Nrâ   rã   s     r7   Útest_q4_aec_pricing_normsrì     só   € à	˜dÔ	#€Bà
ˆ<ÔðFð FàE�b˜Ô&ÐEÐEÐEÕ/CÐEÐEñFô FØð 	Ð"Ô#ð4ð 4à3 b¨¤kÐ3Ð3ñ4ô 4Ø#ð 	Ð Ô!ð@ð @à? "Ð%<Ô"=Ð?Ð?ñ@ô @Ø!ð 	Ð#Ô$ð@ð @à?ñ@ô @Ø$àˆnÔÐÐÐÐÐr9   c                 ó  — | d         }|d         sJ d|d         d›dt           › �¦   «         ‚|d         sJ d|d	         › �¦   «         ‚|d
         sJ d|d         › �¦   «         ‚|d         s
J d¦   «         ‚|d         sJ ‚dS )z6Verify Domain Q5: CAD takeoff engine & TCVN3 decoding.r%   rs   rÞ   rr   r½   rß   rt   rà   r   ru   rá   rx   rv   z.No CAD takeoff / TCVN3 keywords found in Top-1ry   Nrâ   rã   s     r7   Útest_q5_cad_takeoff_geometryrî     sï   € à	˜dÔ	#€Bà
ˆ<ÔðFð FàE�b˜Ô&ÐEÐEÐEÕ/CÐEÐEñFô FØð 	Ð"Ô#ð4ð 4à3 b¨¤kÐ3Ð3ñ4ô 4Ø#ð 	Ð Ô!ð@ð @à? "Ð%<Ô"=Ð?Ð?ñ@ô @Ø!ð 	Ð#Ô$ð8ð 8à7ñ8ô 8Ø$àˆnÔÐÐÐÐÐr9   c                 ó  — | d         }|d         sJ d|d         d›dt           › �¦   «         ‚|d         sJ d|d	         › �¦   «         ‚|d
         sJ d|d         › �¦   «         ‚|d         s
J d¦   «         ‚|d         sJ ‚dS )z=Verify Domain Q6: Database precision NUMERIC(18,4) & ledgers.r)   rs   rÞ   rr   r½   rß   rt   rà   r   ru   rá   rx   rv   z4No NUMERIC(18,4) / precision keywords found in Top-1ry   Nrâ   rã   s     r7   Útest_q6_database_precisionrð   *  rå   r9   c                 ó  — | d         }|d         sJ d|d         d›dt           › �¦   «         ‚|d         sJ d|d	         › �¦   «         ‚|d
         sJ d|d         › �¦   «         ‚|d         s
J d¦   «         ‚|d         sJ ‚dS )z;Verify Domain Q7: Deep Matrix D1-D6 testing workflow & TDD.r*   rs   rÞ   rr   r½   rß   rt   rà   r   ru   rá   rx   rv   z5No Deep Matrix / TDD workflow keywords found in Top-1ry   Nrâ   rã   s     r7   Útest_q7_testing_workflowrò   <  sï   € à	˜dÔ	#€Bà
ˆ<ÔðFð FàE�b˜Ô&ÐEÐEÐEÕ/CÐEÐEñFô FØð 	Ð"Ô#ð4ð 4à3 b¨¤kÐ3Ð3ñ4ô 4Ø#ð 	Ð Ô!ð@ð @à? "Ð%<Ô"=Ð?Ð?ñ@ô @Ø!ð 	Ð#Ô$ð?ð ?à>ñ?ô ?Ø$àˆnÔÐÐÐÐÐr9   c                 ó  — | d         }|d         sJ d|d         d›dt           › �¦   «         ‚|d         sJ d|d	         › �¦   «         ‚|d
         sJ d|d         › �¦   «         ‚|d         s
J d¦   «         ‚|d         sJ ‚dS )z/Verify Domain Q8: Mandatory MCP tools protocol.r-   rs   rÞ   rr   r½   rß   rt   rà   r   ru   rá   rx   rv   z-No MCP tools protocol keywords found in Top-1ry   Nrâ   rã   s     r7   Útest_q8_mcp_tools_protocolrô   N  rê   r9   Ú__main__z=Initiating DSCons ERP Mem0 Knowledge Base Verification Run...r€   )-r\   r«   rA   ÚsysÚtypingr   ÚpytestÚmcp.client.sessionr   Úmcp.client.sser   ÚhasattrÚstdoutr   Ústderrr]   rR   r�   r1   ra   r_   r^   Ú__annotations__r3   rk   rn   r    Útupler°   rÕ   ÚfixturerÜ   rä   rç   ré   rì   rî   rð   rò   rô   rY   rÆ   r¯   r¤   Úexitrb   r9   r7   ú<module>r     sÿ  ðð
ð 
ð 
ð €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø %Ð %Ð %Ð %Ð %Ð %ð €7ˆ3Œ:�}Ñ%Ô%ð ?Ø„J×Ò G°IÐÑ>Ô>Ð>Ø
€7ˆ3Œ:�}Ñ%Ô%ð ?Ø„J×Ò G°IÐÑ>Ô>Ð>ð +€Ø
€ØÐ ð
 Ø>ØØØ(ð
ð 
ð 
ð
ð 
ð 
ðð ð0 Ø5Ø!ØØ(ð
ð 
ð 
ð
ð 
ð 
ðð ð0 ØAØ'ØØ&ð
ð 
ð 
ð
ð 
ð 
ðð ð. Ø?Ø$ØØ&ð
ð 
ð 
ð
ð 
ð 
ðð ð, Ø9Ø'ØØ%ð
ð 
ð 
ð
ð 
ð 
ðð ð* ØDØ%ØØ&ð
ð 
ð 
ð
ð 
ð 
ðð ð( Ø>Ø#ØØ,ð
ð 
ð 
ð !Øð
ðð ð* Ø:Ø%ØØ(ð
ð 
ð 
ð 1Øð
ðð ðkg.Ð �d˜4  S œ>Ô*ð gð gñ gðT)?ð )?ð )?ð )?ð )?ñ )?ô )?ð )?ðX^˜4  S œ>ð ^¨dð ^ð ^ð ^ð ^ðfØ˜˜S˜”>ðfØ,0°°c¸3°h´Ô,@ðfà	ˆ#ˆsˆ(„^ðfð fð fð fðR#˜u T¨4°°S¸#°X´Ô+?Ð%?Ô@ð #ð #ð #ð #ð$@  d¨3°¨8¤nÔ!5ð @À4ð @ÈDð @ð @ð @ð @ðP €„�hÐÑÔð0ð 0ñ  Ôð0ðð ð ð$ð ð ð$ð ð ð$ð ð ð$ð ð ð$ð ð ð$ð ð ð$ð ð ð, ˆzÒÐØ	€EÐ
IÑJÔJÐJØ3Ð3Ñ5Ô5Ñ€J�Ø€O�K Ñ,Ô,Ð,Ø€C„H�*Ð#ˆQˆQ !Ñ$Ô$Ð$Ð$Ð$ð	 Ðr9   