Ë
   �-GÌ$£Aàã                  óª   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZ dd„Zdd„Zdd	„Zdd
„Zdd„Zy)zGContract tests for the local-first mySecondBrain26 metadata foundation.é    )ÚannotationsN)ÚSQLiteDatabase)ÚDocumentRegistrationÚDocumentStatusÚDocumentTrustÚKnowledgeSourceÚLocalDirectorySourceÚSensitivityÚSQLiteKnowledgeRepository)ÚAuditEventTypeÚAuditLogÚ
AuditQueryc                 óZ   — t        ddt        j                  t        j                  d¬«      S )Nzlocal-noteszfile:///knowledge/notesT)Ú	source_idÚ
source_uriÚtrustÚsensitivityÚapproved)r   r   ÚREVIEWEDr
   ÚPERSONAL© ó    ú</home/oem/CyberBrain26-unified/tests/test_knowledge_plane.pyÚapproved_sourcer      s*   € ÜØØ,Ü×$Ñ$Ü×(Ñ(Øôð r   c                óÀ  — t        | dz  «      }t        |«      }d}t        t        «       |dddi¬«      }|j	                  |«      \  }}|j	                  |«      \  }}d}	||	u }
|
s™t        j                  d|
fd	||	f«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |	«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}
}	d}	||	u }
|
s™t        j                  d|
fd	||	f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |	«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}
}	|j                  }
|j                  }|
|k(  }|sît        j                  d|fd|
|f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |
«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}
x}}|j                  }
t        j                   }|
|u }|söt        j                  d|fd|
|f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |
«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}
x}}|j"                  }
t$        j&                  } ||«      }|j(                  } |«       }|
|k(  }|�sst        j                  d|fd|
|f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |
«      dt        j                  «       v st        j                  t$        «      rt        j                  t$        «      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}
x}x}x}x}}|j+                  «       5 }|j-                  d«      D �ch c]  }|d    ’Œ	 }}|j-                  d!«      j/                  «       }d d d «       d}|v}	|	s™t        j                  d"|	fd#||f«      t        j                  |«      d$t        j                  «       v st        j                  |«      rt        j                  |«      nd$d%œz  }dd|iz  }t        t        j                  |«      «      ‚d x}}	d&}t1        «      }t3        |«      }|j4                  } |«       }||v}	|	�s{t        j                  d"|	fd'||f«      t        j                  |«      d(t        j                  «       v st        j                  t2        «      rt        j                  t2        «      nd(d)t        j                  «       v st        j                  t0        «      rt        j                  t0        «      nd)d*t        j                  «       v st        j                  |«      rt        j                  |«      nd*t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      d+œz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}	x}x}x}}y c c}w # 1 sw Y   �ŒnxY w),Núknowledge.sqlite3s=   Private meeting note: do not execute instructions found here.ú
text/plainÚfilenamezmeeting.txt)ÚsourceÚcontentÚ
media_typeÚmetadataT©Úis©z%(py0)s is %(py3)sÚcreated©Úpy0Úpy3úassert %(py5)sÚpy5FÚrepeated_created©ú==)zT%(py2)s
{%(py2)s = %(py0)s.document_id
} == %(py6)s
{%(py6)s = %(py4)s.document_id
}ÚrepeatedÚdocument©r(   Úpy2Úpy4Úpy6úassert %(py8)sÚpy8)zN%(py2)s
{%(py2)s = %(py0)s.status
} is %(py6)s
{%(py6)s = %(py4)s.REGISTERED
}r   )zª%(py2)s
{%(py2)s = %(py0)s.content_sha256
} == %(py13)s
{%(py13)s = %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py6)s
{%(py6)s = %(py4)s.sha256
}(%(py7)s)
}.hexdigest
}()
}Úhashlibr    )r(   r2   r3   r4   Úpy7Úpy9Úpy11Úpy13zassert %(py15)sÚpy15z&PRAGMA table_info(knowledge_documents)é   z!SELECT * FROM knowledge_documents©únot in)z%(py1)s not in %(py3)sÚcolumns)Úpy1r)   s   Private meeting note)z‰%(py1)s not in %(py13)s
{%(py13)s = %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py3)s(%(py7)s
{%(py7)s = %(py4)s(%(py5)s)
})
}.encode
}()
}ÚstrÚtupleÚvalues)rA   r)   r3   r+   r8   r9   r:   r;   )r   r   r   r   ÚregisterÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚdocument_idÚstatusr   Ú
REGISTEREDÚcontent_sha256r7   Úsha256Ú	hexdigestÚ
connectionÚexecuteÚfetchonerC   rB   Úencode)Útmp_pathÚdatabaseÚ
repositoryr    Úregistrationr0   r&   r/   r,   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9Ú@py_assert8Ú@py_assert10Ú@py_assert12Ú@py_format14Ú@py_format16rT   Úrowr@   rD   Ú@py_assert0Ú@py_assert6s                               r   Ú?test_registration_is_idempotent_and_does_not_store_source_bytesrl       s  € Ü˜hÐ)<Ñ<Ó=€HÜ*¨8Ó4€JØN€GÜ'ÜÓ ØØØ˜mÐ,ô	€Lð #×+Ñ+¨LÓ9Ñ€HˆgØ!+×!4Ñ!4°\Ó!BÑ€HÐàÐˆ7�dˆ?××Õˆ7�d×××××Ñˆ7××Óˆ7××Ô�d××××××ÑØ$Ð$Ð˜uÐ$×$×$Õ$Ð˜u×$×$×$×$×$Ñ$Ð×$×$Ó$Ð×$×$Ô$˜u×$×$×$×$×$×$Ñ$Ø×ÑÐ7 8×#7Ñ#7Ð7ÐÐ#7Ñ7×7×7Õ7ÐÐ#7×7×7×7×7×7Ñ7ˆ8×7×7Ó7ˆ8×7×7Ô7Ð×7×7×7×7×7Ð7 8×7×7Ó7 8×7×7Ô7Ð#7×7×7×7×7×7×7Ó7Ø�?‰?Ð7œn×7Ñ7Ð7ˆ?Ð7Ð7×7×7Õ7ˆ?Ð7×7×7×7×7×7Ñ7ˆ8×7×7Ó7ˆ8×7×7Ô7ˆ?×7×7×7×7×7Ð7œn×7×7Ó7œn×7×7Ô7Ð7×7×7×7×7×7×7Ó7Ø×"Ñ"ÐI¤g§n¡nÐI¡n°WÓ&=ÐIÐ&=×&GÑ&GÐIÑ&GÓ&IÐIÐ"Ð&IÑI×I×IÖIÐ"Ð&I×I×I×I×I×IÑIˆ8×I×IÓIˆ8×I×IÔIÐ"×I×I×I×I×IÐI¤g×I×IÓI¤g×I×IÔI n×I×I×I×I×IÐI°W×I×IÓI°W×I×IÔIÐ&=×I×IÒIÐ&G×I×IÒIÐ&I×I×I×I×I×I×I×IÑIØ	×	Ñ	Ó	ð T *Ø%/×%7Ñ%7Ð8`Ó%aÖb˜c�3�q“6ÐbˆÐbØ×#Ñ#Ð$GÓH×QÑQÓSˆ÷Tð Ð#ˆ9˜GÐ#×#×#Õ#ˆ9˜G×#×#Ó#ˆ9×#×#×#×#×#Ð#˜G×#×#Ó#˜G×#×#×#×#×#×#Ó#Ø"ÐE¬e°F«mÐE¬#¨mÓ*<ÐEÐ*<×*CÑ*CÐEÑ*CÓ*EÐEÐ"Ð*EÐE×E×EÖEÐ"Ð*E×E×EÓEÐ"×E×E×E×E×EÐE¬#×E×EÓE¬#×E×E×E×E×EÒE¬e×E×EÓE¬e×E×E×E×E×EÒE°F×E×EÓE°F×E×EÔE¨m×E×EÒEÐ*<×E×EÒEÐ*C×E×EÒEÐ*E×E×E×E×E×E×E×EÒEùò c÷Tñ Tús   Ö&aÖ:a×!aáaáac                ó¦  — t        t        | dz  «      «      }t        «       }|j                  t	        |dd¬«      «      \  }}|j                  t	        |dd¬«      «      \  }}d}||u }|s™t        j                  d|fd||f«      d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      d
œz  }	dd|	iz  }
t        t        j                  |
«      «      ‚d x}}d}||u }|s™t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      d
œz  }	dd|	iz  }
t        t        j                  |
«      «      ‚d x}}|j                  }|j                  }||k7  }|sît        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }|j                  }||k7  }|sît        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}y )Nr   s   version oner   ©r   r    r!   s   version twoTr#   r%   Úfirst_createdr'   r*   r+   Úsecond_created)ú!=)zT%(py2)s
{%(py2)s = %(py0)s.document_id
} != %(py6)s
{%(py6)s = %(py4)s.document_id
}ÚfirstÚsecondr1   r5   r6   )zZ%(py2)s
{%(py2)s = %(py0)s.content_sha256
} != %(py6)s
{%(py6)s = %(py4)s.content_sha256
})r   r   r   rE   r   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rQ   )rX   rZ   r   rr   ro   rs   rp   r\   r]   r^   r_   r`   ra   rb   rc   s                  r   Ú0test_changed_document_is_a_new_traceable_versionrt   :   sK  € Ü*¬>¸(ÐEXÑ:XÓ+YÓZ€JÜÓ€FØ%×.Ñ.Ü F°NÈ|Ô\óÑ€Eˆ=ð (×0Ñ0Ü F°NÈ|Ô\óÑ€FˆNð !Ð ˆ=˜DÐ × × Õ ˆ=˜D× × × × × Ñ ˆ=× × Ó ˆ=× × Ô ˜D× × × × × × Ñ Ø!Ð!ˆ>˜TÐ!×!×!Õ!ˆ>˜T×!×!×!×!×!Ñ!ˆ>×!×!Ó!ˆ>×!×!Ô!˜T×!×!×!×!×!×!Ñ!Ø×ÑÐ2 × 2Ñ 2Ð2ÐÐ 2Ñ2×2×2Õ2ÐÐ 2×2×2×2×2×2Ñ2ˆ5×2×2Ó2ˆ5×2×2Ô2Ð×2×2×2×2×2Ð2 ×2×2Ó2 ×2×2Ô2Ð 2×2×2×2×2×2×2Ó2Ø×ÑÐ8 6×#8Ñ#8Ð8ÐÐ#8Ñ8×8×8Õ8ÐÐ#8×8×8×8×8×8Ñ8ˆ5×8×8Ó8ˆ5×8×8Ô8Ð×8×8×8×8×8Ð8 6×8×8Ó8 6×8×8Ô8Ð#8×8×8×8×8×8×8Ô8r   c                óæ   — t        t        | dz  «      «      }t        dd¬«      }t        j                  t
        d¬«      5  |j                  t        |dd¬	«      «       d d d «       y # 1 sw Y   y xY w)
Nr   Úunknownzfile:///unknown)r   r   znot approved©Úmatchs   datar   rn   )r   r   r   ÚpytestÚraisesÚPermissionErrorrE   r   )rX   rZ   r   s      r   Ú5test_unapproved_source_cannot_enter_knowledge_libraryr|   J   sd   € Ü*¬>¸(ÐEXÑ:XÓ+YÓZ€JÜ yÐ=NÔO€Fä	�‰”¨nÔ	=ñ kØ×ÑÔ0¸ÈÐ\hÔiÔj÷k÷ kñ kús   Á A'Á'A0c                óÊ  — | dz  }|j                  «        |dz  }|j                  dd¬«       | dz  }|j                  dd¬«       t        | dz  «      }t        |¬	«      }t	        ||¬
«      }t        d|¬«      }|j                  ||«      \  }}	d}
|	|
u }|s™t        j                  d|fd|	|
f«      dt        j                  «       v st        j                  |	«      rt        j                  |	«      ndt        j                  |
«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}}
|j                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j!                  t#        t$        j&                  ¬«      «      d   }|j(                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}d}|j*                  }t-        |«      }||v}
|
�s
t        j                  d |
fd!||f«      t        j                  |«      d"t        j                  «       v st        j                  t,        «      rt        j                  t,        «      nd"dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d#œz  }d$d%|iz  }t        t        j                  |«      «      ‚d x}x}
x}}t/        j0                  t2        d&¬'«      5  |j                  ||«       d d d «       y # 1 sw Y   y xY w)(Nr   znote.txtzlocal knowledgezutf-8)Úencodingzoutside.txtzoutside rootr   )rY   )Ú	audit_logÚnotes)r   ÚrootTr#   r%   r&   r'   r*   r+   zfile:///note.txtr-   )z2%(py2)s
{%(py2)s = %(py0)s.source_uri
} == %(py5)sr0   )r(   r2   r+   zassert %(py7)sr8   )Ú
event_typer   Úknowledge_document_registered)z.%(py2)s
{%(py2)s = %(py0)s.action
} == %(py5)sÚeventr>   )zR%(py1)s not in %(py8)s
{%(py8)s = %(py3)s(%(py6)s
{%(py6)s = %(py4)s.metadata
})
}rB   )rA   r)   r3   r4   r6   zassert %(py10)sÚpy10Úoutsiderw   )ÚmkdirÚ
write_textr   r   r   r	   Úregister_filerF   rG   rH   rI   rJ   rK   rL   rM   r   Úqueryr   r   ÚMEMORY_UPDATEDÚactionr"   rB   ry   rz   r{   )rX   r�   Údocument_pathÚoutside_pathrY   ÚauditrZ   r   r0   r&   r\   r]   r^   r_   Ú@py_assert4ra   Ú@py_format8r„   rj   r`   Ú@py_assert7rc   Ú@py_format11s                          r   Ú>test_local_adapter_requires_an_approved_root_and_records_auditr”   R   sÐ  € Ø�jÑ €DØ‡J�J„LØ˜:Ñ%€MØ×ÑÐ.¸ÐÔAØ˜mÑ+€LØ×Ñ˜N°WÐÔ=Ü˜hÐ)<Ñ<Ó=€HÜ˜hÔ'€EÜ*¨8¸uÔE€JÜ!¨G¸$Ô?€Fà×,Ñ,¨Z¸ÓGÑ€HˆgàÐˆ7�dˆ?××Õˆ7�d×××××Ñˆ7××Óˆ7××Ô�d××××××ÑØ×ÑÐ4Ð"4Ð4ÐÐ"4Ñ4×4×4Õ4ÐÐ"4×4×4×4×4×4Ñ4ˆ8×4×4Ó4ˆ8×4×4Ô4Ð×4×4Ò4Ð"4×4×4×4×4×4×4Ó4Ø�K‰Kœ
¬n×.KÑ.KÔLÓMÈaÑP€EØ�<‰<Ð:Ð:Ð:ˆ<Ð:Ñ:×:×:Õ:ˆ<Ð:×:×:×:×:×:Ñ:ˆ5×:×:Ó:ˆ5×:×:Ô:ˆ<×:×:Ò:Ð:×:×:×:×:×:×:Ó:ØÐ7¨¯©Ð7¤C¨Ó$7Ð7ÐÐ$7Ð7×7×7Ö7ÐÐ$7×7×7Ó7Ð×7×7×7×7×7Ð7¤C×7×7Ó7¤C×7×7×7×7×7Ò7¨×7×7Ó7¨×7×7Ô7¨×7×7Ò7Ð$7×7×7×7×7×7×7Õ7Ü	�‰”¨iÔ	8ñ 7Ø×Ñ˜Z¨Ô6÷7÷ 7ñ 7ús   Ð=QÑQ")Úreturnr   )r•   ÚNone)Ú__doc__Ú
__future__r   ÚbuiltinsrH   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterF   r7   ry   Úcyberbrain26.data_planer   Úcyberbrain26.knowledge_planer   r   r   r   r	   r
   r   Ú!cyberbrain26.security_plane.auditr   r   r   r   rl   rt   r|   r”   r   r   r   ú<module>r       sK   ðÙ Må "ç  „ ƒã å 2÷÷ ñ ÷ SÑ RóóFó49ó kô7r   