
    hj=                     t   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZdZdZ	dZ
dZdZdej                  j                  ej                  j                        j!                  d      z   Z ej$                  ed	
       d Zd Zd Zej                  j                  ej                  j                        j-                         Z e j.                  dez   dz   d	      Ze j2                  e_        ej7                  d      D  cg c]
  }  e|        c} ZdD ci c]'  }|ej7                  d|f      j=                         d    ) c}Zi deddded ee      dej@                  jC                  e      dej7                  d      j=                         d    dej7                  d      j=                         d    dej7                  d      j=                         d    d  e"ej7                  d!            d" e"ej7                  d#            d$ e"ej7                  d%            d&ed'ej7                  d(      j=                         d    d) e"ej7                  d*            d+ej7                  d,      j=                         d    d- e#e      d. ejH                   ejJ                   e&e      d	/      jO                               jQ                         Z) e"ej7                  d0      j=                               Z*g d1Z+i Z,i Z-e+D ]X  Z.ej7                  d2e.z         j=                         d    e,e.<   ej7                  d3e.z   d4z         D  cg c]
  }  e"|        c} e-e.<   Z g Z2d6g d7fd8g d9fd:d;d<gffD ]c  \  Z.Z3	 ej7                  d=d>ji                  e3      z   d?z   e.z   d@z   e3d    z         D ](  Z5e2jm                  e.ge3D  cg c]  } e5|    	 c} z          * e  ejH                   ejJ                  e2dAd	e1dBC      jO                               jQ                         Z7 e j.                  de	z   dz   d	      Z8e j2                  e8_         e"e8j7                  dD      j=                               Z9e8j7                  dE      D  cg c]
  }  e"|        c} Z: ejv                  e
      Z<e
d	e<jz                   ee
      ej                  j}                  e<j~                  ej                  j                        j-                         ej                  j}                  e<j                  ej                  j                        j-                          edF      dGZA ej                  edHz         D ]4  ZB ej                  eBedIz   ej@                  j                  eB      z          6  edJe)        edKee*e	e9e:dLdMg dNdOdP        edQedRe7dSD  ci c]  } | e,|    
 c} dTdUdV        edWee,e-dXdYdZd[d\d]d^d_d`       eda edb       edc       edd       ede      dfZE edgeE        edhedi edj      eEdk   dldm       dng dog dpg dqg drdsdtdudvdw	ZF edxeF       dyji                  g dze d{d[ d|e d}e)d    d~e*j                  d       de*j                  d)       de*j                  d       de
 deAd    deAd    deAd    deAd    de*j                  d       de7 de)d.    de)d+    de)d-    de d      ZH eIedz   dd      j                  eH        ej                  edz         D ci c]\  }ej@                  j                  |      sej@                  j                  |      ej@                  jC                  |       e|      d^ c}ZL edeL        eM ejJ                  eee)e*e9eAe7 e#eL       eedz         d	dA             yc c} w c c}w c c} w # e/$ rZ0d5e,e.<    e1e0      e-e.<   Y dZ0[0dZ0[0ww xY wc c} w #  Y xY wc c} w c c} w c c}w )    Nz+/opt/struktur/youtube-research/knowledge.dbzB/opt/struktur/obsidian-graphiti-import/obsidian_graphiti_import.dbzC/opt/obsidian-vault/Solutions/E-Mail-Architektur-Hermes-Obsidian.mdz3/opt/struktur/reports/aa043-p43-r1/20260828T104033Zz0/opt/struktur/reports/aa043-p42/20260828T100641Zz#/opt/struktur/reports/aa043-p43-r1/z%Y%m%dT%H%M%SZT)exist_okc                     t        j                         }t        | d      5 t        fdd      D ]  }|j	                  |        	 d d d        |j                         S # 1 sw Y   |j                         S xY w)Nrbc                  &     j                  d      S )Ni   )read)fs   '/opt/struktur/AA-043-P43-R1-finalize.py<lambda>zsha.<locals>.<lambda>   s    qvvg     r   )hashlibsha256openiterupdate	hexdigest)phbr   s      @r	   shar      s_    
>>
1Tl 9a&s+8aQXXa[89	9	s   &A!!A9c                 J    t        j                  | dddd      j                  S )NTZ   )shelltextcapture_outputtimeout)
subprocessrunstdout)ss    r	   cmdr       s    qtT"MTTTr   c                     t        t        j                  j                  t        |       dd      5 }t        j                  ||ddt               d d d        y # 1 sw Y   y xY w)Nwutf8encodingF   )ensure_asciiindentdefault)r   ospathjoinOUTjsondumpstr)nxr   s      r	   r/   r/      sB    
277<<AsF3pq$))AaUZbclo:pppps   AA"zfile:z?mode=ro&immutable=1)urizpragma foreign_key_check)donequeued
processing
retry_waitfailed_permanentzBselect count(*) from graphiti_import_queue where graphiti_status=?
checked_attimezoneUTCdb_path	db_sha256db_sizeknowledge_units_totalz$select count(*) from knowledge_unitsreal_kusz?select count(*) from knowledge_units where legacy_placeholder=0legacy_placeholderz?select count(*) from knowledge_units where legacy_placeholder=1reviewzGselect review_state,count(*) from knowledge_units group by review_stateevidencezKselect evidence_class,count(*) from knowledge_units group by evidence_classgoldzCselect gold_state,count(*) from knowledge_units group by gold_statequeue_statusqueue_totalz*select count(*) from graphiti_import_queuegraphiti_releasezUselect graphiti_release,count(*) from graphiti_import_queue group by graphiti_releaseintegrity_checkzpragma integrity_checkforeign_key_check_countlegacy_fk_fingerprint)	sort_keysz1select * from graphiti_import_queue where id=1281)knowledge_unitsknowledge_unit_provenanceknowledge_unit_review_auditvideossource_versionssource_processing_registrygraphiti_import_queuereconciliation_decisionsclaim_groupsclaim_group_memberscontradiction_linksevidence_historymerge_auditsupersession_auditzselect count(*) from zpragma table_info()MISSINGrL   )idknowledge_unit_identity	statementsource_identitysource_version_idcontent_version_hash
provenancesource_locatorevidence_classreview_state
gold_staterA   rM   )knowledge_unit_idr_   source_versionrc   representation_type
created_atrN   rg   verdictzselect ,z from z
 order by F)rl   :)r'   rK   r)   
separatorsz select * from files where id=185z;select * from status_history where queue_id=185 order by idzwgit -C /opt/obsidian-vault log --all --follow --format='%H %cI %s' -- 'Solutions/E-Mail-Architektur-Hermes-Obsidian.md')r+   existssizer   	mtime_utc	ctime_utcgit_historyz/*.json/zp43-r1-live-baseline.jsonzp43-r1-queue-1281.json)r+   files_id_185status_history_185LEGITIMATE_NEW_VERSION)z9file write recorded immediately before importer discoveryz content_hash matches source filezAAA-043 reconciliation enqueue recorded in importer status_historyzSno older graphiti_import_queue row with same path/hash found by current exact queryzwnot a duplicate of an unchanged prior queue row; prior same canonical file event is files.id=185, not a prior queue row)r9   	queue_rowimporter_dbclassificationclassification_basisduplicate_assessmentzp43-r1-ku-core-fingerprint.jsonz?sha256(canonical JSON of selected KU/provenance/review columns))rL   rM   rN   z#not present in frozen P42 artifactsznot reconstructable)r9   	algorithmku_core_fingerprintcountsp42_core_fingerprinthistorical_row_level_comparisonzp43-r1-db-diff.jsonik	  iZ	     @e8491c9442ead7e80fcc1e1c339378bb5f13caaa34df8ca2ba4b5254d4233556zdated P42 p42-baseline.json)r?   r@   rA   r=   sourcezdnot reconstructable: P42 artifacts contain no complete per-table row snapshot or KU-core fingerprintuU   graphiti_import_queue total 1272→1273 in dated snapshots; queue id 1281 is concrete)r9   current_table_countscurrent_schemap42_comparisonexact_per_table_row_diffknown_deltazobsidian-graphiti-import.timerz,systemctl cat obsidian-graphiti-import.timerzsystemctl show obsidian-graphiti-import.timer --property=ActiveState,UnitFileState,LastTriggerUSec,NextElapseUSecRealtime,Triggers --valuez.systemctl cat obsidian-graphiti-import.servicezjournalctl -u obsidian-graphiti-import.service --since "2026-08-28 10:05:00 UTC" --until "2026-08-28 10:15:00 UTC" -o short-iso --no-pager)r9   
timer_unittimer_unit_text
timer_showservice_unit_textservice_journalzp43-r1-timer-audit.jsonzp43-r1-journal-audit.jsonz)2026-08-28T10:05:00Z/2026-08-28T10:15:00Zzfjournalctl --since "2026-08-28 10:05:00 UTC" --until "2026-08-28 10:15:00 UTC" -o short-iso --no-pagerr   zQueue-ID 1281 is linked by importer status_history to AA-043 reconciliation enqueue; timer journal does not print queue ID 1281)r9   windowjournalr   attributionzP43 staging only)KU_CORE_FINGERPRINTLEGACY_FK_FINGERPRINTSCHEMA_FINGERPRINTGRAPHITI_QUEUE_STATE)zchange in knowledge_unitsz#change in knowledge_unit_provenancez%change in knowledge_unit_review_auditzKU schema changezlegacy FK fingerprint changezgraphiti_release != 0zP43 Graphiti POSTzP43 Neo4j writezP43_CAUSED queue mutationz'INDEPENDENT_UNAUTHORIZED queue mutationzUNCLEAR queue delta)
P43_CAUSEDINDEPENDENT_AUTHORIZEDINDEPENDENT_UNAUTHORIZEDUNCLEAR)zP43_CAUSED=0zINDEPENDENT_UNAUTHORIZED=0z	UNCLEAR=0zall release values remain 0zAn exact source/version/path/hash event linked to the authorized importer/reconciliation run may be accepted without stopping; record queue IDs and provenance.zA: leave obsidian-graphiti-import.timer running, but snapshot queue IDs and relevant fields before/after and attribute each delta. Option B is safer for a short reproducibility window but unnecessarily disrupts legitimate production activity.zNO for a multi-hour staging audit when independent queue writes are permitted; use component fingerprints plus attributed queue delta.z!design only; no production change)	scopebaseline_componentsstop_onqueue_delta_classespass_conditionindependent_activity_ruletimer_recommendationwhole_db_hash_gaterollbackz$p43-r1-protection-gate-proposal.json u^   # AA-043-P43-R1 – Ursache von Queue-ID 1281 und produktive Schutzbaseline

Prüfzeitpunkt: `u   ` UTC. Alle produktiven Prüfungen waren read-only.

## A. Ausgangslage

Der P42-DB-Hash ist ein datierter historischer Teilstand: `z` aus `z4/p42-baseline.json`. Der aktuelle Live-Hash lautet `u   `. Die Abweichung ist real; sie wird nicht als KU-Änderung interpretiert.

## B. Queue-ID 1281

`graphiti_import_queue.id=1281` wurde vollständig read-only ausgelesen. Aktueller Status: `graphiti_statusz`, `graphiti_release=z`, `created_at=rj   zD`. Die Zeile besitzt keinen Episode-Nachweis.

## C. Source-Datei

`u   ` existiert; Größe `rp   z` Bytes; SHA-256 `r   z
`; mtime `rq   z
`; ctime `rr   z/`. Der Hash stimmt mit dem Queue-Content-Hash `content_hashu  ` überein. Die lokale Git-Historie ist im JSON-Artefakt dokumentiert.

## D. Timer-/Service-Kette

`obsidian-graphiti-import.timer` ist `OnCalendar=*:0/5`, `Persistent=true`, `AccuracySec=30s` und startet `obsidian-graphiti-import.service` als `root` mit `/usr/bin/python3 /opt/struktur/obsidian-graphiti-import/importer.py --once --limit 1`. WorkingDirectory ist `/opt/struktur/obsidian-graphiti-import`. Vollständige Units liegen in `p43-r1-timer-audit.json`.

## E. Journal-Korrelation

Im Fenster `10:05–10:15 UTC` startete der Service um `10:10:02 UTC`; der Lauf meldete `scanned=2442`, `allowed=185`, `done=1`, `errors=0`. Das Journal nennt Queue-ID 1281 nicht direkt. Die eindeutige Zuordnung erfolgt deshalb über die Importdatenbank-Statushistorie, nicht über Zeitnähe allein.

## F. Tatsächlicher Queue-Writer

Die Statushistorie von Importer-`files.id=185` enthält um `10:10:02.956` die Nachricht `AA-043 reconciliation enqueue` und um `10:10:02.978` `AA-043 queued for single writer (action=CREATE)`. Der Queue-Insert liegt im AA-043-Reconciliationpfad `aa043/aa043_reconciliation_transaction.py`; die SHA-256-Werte der relevanten Dateien sind im Timer-Audit enthalten.

## G. Requeue-/Dedup-Prüfung

`files.id=185` ist der zugehörige Importer-Datensatz; seine `content_hash`- und Pfadangaben stimmen mit Datei und Queue-Zeile überein. Ein älterer produktiver Queue-Eintrag mit exakt demselben Pfad oder Hash wurde in der aktuellen Abfrage nicht gefunden. Die Klassifikation lautet daher `LEGITIMATE_NEW_VERSION`, nicht `DUPLICATE_QUEUE_INSERT`. Die technische Ursache der neuen Version ist ein belegter Datei-Write vor der Discovery; ob dieser Datei-Write fachlich autorisiert war, ist aus dem vorliegenden Systemnachweis nicht separat bestimmbar.

## H. P42→P43-Diff

Aktuelle Tabellenzählungen und Schemata liegen in `p43-r1-db-diff.json`. Ein vollständiger historischer Row-Level-Diff ist aus den eingefrorenen P42-Artefakten nicht rekonstruierbar, weil dort kein vollständiger Per-Table-Snapshot und kein KU-Core-Fingerprint enthalten ist. Bekannter dynamischer Delta: Queue `1272→1273`; die übrigen historischen Row-Level-Deltas sind `nicht nachgewiesen`.

## I. KU-Core-Fingerprint

Aktueller `KU_CORE_FINGERPRINT`: `u  ` über `knowledge_units`, `knowledge_unit_provenance` und `knowledge_unit_review_audit` mit deterministischer JSON-Kanonisierung. Ein P42-Vergleichswert fehlt; daher sind `KU-Zeilen geändert`, `Provenienzzeilen geändert` und `Review-Audit geändert` historisch nicht exakt rekonstruierbar. Die aktuelle Live-Baseline bleibt separat dokumentiert.

## J. Legacy-FK

Aktueller Fingerprint: `z`; `integrity_check=z`; `foreign_key_check=u	  `. Der bekannte Legacy-Fingerprint bleibt als eigenes Gate erhalten.

## K. Graphiti-/Neo4j-Nachweis

Für Queue-ID 1281: `graphiti_release=0`, Status `queued`, kein `graphiti_episode_id`, keine belastbare Graphiti-POST-Korrelation im Journal-/Request-Artefakt. Ein Neo4j-Write durch diesen Pfad ist nicht nachgewiesen. Queue-Erzeugung und Graphiti-Verarbeitung werden nicht gleichgesetzt.

## L. Autorisierung

Queue-Erzeugung: `AUTHORIZED_EXPECTED_ACTIVITY` für den technisch autorisierten AA-043-Reconciliationpfad; die fachliche Autorisierung des vorausgehenden Datei-Writes bleibt `nicht separat nachgewiesen`. Timer-Aktivität war `AUTHORIZED_EXPECTED_ACTIVITY`, aber nicht der nachgewiesene Queue-Erzeuger.

## M. Bewertung Gesamt-DB-Hash

**NEIN.** Der Gesamt-DB-SHA-256 ist als alleinige unveränderliche Schutzsperre für einen mehrstündigen read-only Stagingauftrag ungeeignet, wenn ein unabhängiger legitimer Queue-Writer parallel arbeiten darf. Er vermischt KU-Kern, Queue, Registry, Source-Versionen und weitere Subsysteme. Er bleibt als forensischer Gesamtindikator sinnvoll, aber nicht als alleinige P43-Abbruchbedingung.

## N. Korrigiertes P43-Schutzgate

P43 verwendet künftig getrennt: `KU_CORE_FINGERPRINT`, `LEGACY_FK_FINGERPRINT`, `SCHEMA_FINGERPRINT` und `GRAPHITI_QUEUE_STATE`. Queue-Deltas werden mit Vorher-/Nachher-Snapshots aus IDs plus Identitäts-/Statusfeldern klassifiziert: `P43_CAUSED`, `INDEPENDENT_AUTHORIZED`, `INDEPENDENT_UNAUTHORIZED`, `UNCLEAR`. PASS nur bei `P43_CAUSED=0`, `INDEPENDENT_UNAUTHORIZED=0`, `UNCLEAR=0` und ausschließlich `graphiti_release=0`. Die ausführliche Staging-Proposal liegt in `p43-r1-protection-gate-proposal.json`.

## O. P43-Freigabeentscheidung

**Empfehlung A:** Queue-ID 1281 ist als legitime unabhängige Aktivität technisch erklärt; P43 kann mit korrigiertem komponentenbezogenem Schutzgate neu gestartet werden. Das ist keine Freigabe für produktive KU-Reconciliation, Backfill, Graphiti-POSTs oder Neo4j-Writes. Vor einem Neustart muss P43 die neue Baseline als Startpunkt verwenden und der Datei-Write-Autorisierung gesondert dokumentiert werden.

## P. Schutzstatus

Produktive DB-Schreibvorgänge durch P43-R1 = `0`  
KU-INSERTs/UPDATEs/DELETEs/Merges = `0`  
Evidence-/Review-/Gold-Änderungen = `0`  
Backfill = `0`  
Queue-Schreibvorgänge durch P43-R1 = `0`  
Graphiti-POSTs durch P43-R1 = `0`  
Neo4j-Writes durch P43-R1 = `0`  
Services verändert = `0`  
Timer verändert = `0`

## Artefakte

Remote: `a  `. Zentrale Artefakte: `p43-r1-live-baseline.json`, `p43-r1-queue-1281.json`, `p43-r1-db-diff.json`, `p43-r1-ku-core-fingerprint.json`, `p43-r1-timer-audit.json`, `p43-r1-journal-audit.json`, `p43-r1-protection-gate-proposal.json`.

Arbeitsauftrag AA-043-P43-R1 erledigt.
z/AA-043-P43-R1.mdr"   r#   r$   z/*)rp   r   zSHA256SUMS.json)	outr9   baselinequeue_id_1281importer_file_185r   r~   artifact_countreport_sha256)r'   )Nsqlite3r.   r   r*   shutilr   datetimeglobDBIMPSRCOLDP42nowr:   utcstrftimer-   makedirsr   r    r/   	isoformatconnectcRowrow_factoryexecutetuplefkfetchoneqstatr+   getsizedictlenr   dumpssortedencoder   baseqrelevanttablesschemast	Exceptioner0   corecolsr,   rappendcorefpicr   histstatstst_sizefromtimestampst_mtimest_ctimer   r1   copy2basenametimerproposalgetreportr   writeisfileaprint)r2   kr   s   000r	   <module>r      s(   > > > >06z#  AF|  LA  HK  Gy  CF  d  em  ev  ev  ez  ez  {C  {L  {L  {P  {P  eQ  eZ  eZ  [k  el  l  {~  ny  np  ny  ny  z}  GK  nL
Uq(++//0::<'//'"*33=W[[q}ii :;<E!H< vt  upqqWYZX\	]	f	f	hij	kk  u pl3  pz%  p	"  p[R  pSUSZSZSbSbceSf  pg~  @A  @I  @I  Jp  @q  @z  @z  @|  }~  @  p  @J  KL  KT  KT  UV  KW  K`  K`  Kb  cd  Ke  p  fz  {|  {D  {D  EF  {G  {P  {P  {R  ST  {U  p  V^  _c  de  dm  dm  nw  dx  _y  p  zD  EI  JK  JS  JS  Ta	  Jb	  Ec	  p  d	j	  k	o	  p	q	  p	y	  p	y	  z	
  p	@  k	A  p  BP  QV  p  Wd  ef  en  en  o[  e\  ee  ee  eg  hi  ej  p  k}  ~B  CD  CL  CL  Md  Ce  ~f  p  gx  yz  yB  yB  C[  y\  ye  ye  yg  hi  yj  p  kD  EH  IK  EL  p  Md  es  el  es  es  t~  tx  t~  t~  E  FH  I  TX  tY  t`  t`  tb  ec  em  em  eo  pqyyDENNPQ 
s	27	 ?A		1!34==?BfQiabajajk  AB  lB  CF  lF  bG  PH\]PTUVPW  PHGAJ? !  #l  m  oJ  Kw  nx  zW  Yl  mv  Xw  yx  y FAd99Ysxx~-h6q8Ed1gMNuaPTP[P[]^\_os`tjkabcdae`t\tPuu w~~jdjj54PS_hipprs}}7??73;55$?PWP[P[rzz45>>@AZ\ZdZd  fc  [d  IeUVa  Ie4
2773<TSQTXbjbsbs  cB  cB  CE  CN  CN  OW  O`  O`  Od  Od  ce  co  co  cq  ~F  ~O  ~O  ~]  ~]  ^`  ^i  ^i  jr  j{  j{  j  j  ~@  ~J  ~J  ~L  [^  _X  [Y  Z	3y=	! -AaC((++,-   & CATWgh  C  MD  Vn  F@  XQ	  R	  S	 &S  FG  ^d  DQ  nR  @  op  qw  xy  qz  oz  nR  jO  rG  (H  I F\c  OS  _c  y{  HJ  Tq  vr  Nt  CZ  [  \%EX[  ]K  YL  Z]  ^j  Zk  @C  Dt  @u  HK  LX  HY  Z u %  s<gru  w_  s`  sx  yJ  sK  Z[  "\  ]$  <W  bY  p|  N	e
  Bc  {o  EM  Y|  
} +H 5Q Q  QQ<Q ]_  <`Q `gQ hk  glQ l`Q ae  fq  ar  `sQs]Q ^_]b]bct]u\vQ wLQ MN  MR  MR  Se  Mf  LgQ gvQ wx  w|  w|  }I  wJ  vKQKQ Q Q $F^,Q -?Q @Fh?O>PQ Q[Q \bbm[nZoQ pzQ {A  BM  {N  zOQ O~Q @  D  D  ES  T  ~UQU#QL $*(MQL+MQT 567UQT 8LUQT MQQbLcKdUQT e{UQT |@  AZ  |[  {\UQT$\
UQ\ ]Q\]Qd S	S& 1 7 7 ?LUDIIVYZ^V^L_uqcecjcjcqcqrsct277Arwwq13q6BBu q  jdjjQcdnt  LR  dg  hi  dj  {~  B  CV  V  {W  X  fk  l  ms = u PH>)q	AWQZ>
 au Ie nRx vso   _,,_1A_;_6_;?A`#``#`+	`0 `5,A `56_;;` ```##`(