tiparhitekturalna_odluka
verzija1.0
kontekstARK (Autonomous Routing Kernel) — distribuirani identitet svake transakcije na svim čvorovima Bršljan mreže (EU/MAR/DE/ES/NEW/SHR). Problem: pusi_dokument slao cijeli .dok.json u gossip stream, uključujući OIB, ime klijenta, ZKI/JIR, resonance_proof, lat/lon. To je GDPR kršenje i sigurnosni propust.
odluke{
"§4_PII_opcija3": {
"status": "IMPLEMENTIRANO",
"opis": "PII polja NIKAD ne napuštaju matični čvor kroz Bršljan gossip. Whitelist pristup — samo JEZGRA polja ulaze u distributed truth. Sve ostalo ostaje lokalno.",
"implementacija": "services/ark_pii_filter.py — filtriraj_bytes(tip, podaci_bytes)",
"wire": "brsljani.py pusi_dokument(weise3_id, podaci, tip='') — filtrira PRIJE gossipa",
"strippano_archive_doc": [
"company_id",
"uploaded_by",
"ocr_text",
tipovi{
"archive_doc": {
"jezgra": [
"weise3_id",
"bunker_seal_id",
"krunica_hash",
"created_at",
"cross_hash",
"category",
"doc_number",
"doc_date",
"doc_amount"
],
"ephemeral": [],
"node_specific": [
"company_id",
"uploaded_by"
],
"adapter": [
"filename",
"file_size",
"content_type",
"ocr_text",
"ai_extracted",
"resonance_proof",
"layer1_sha256",
"layer2_phash",
otvoreno{
"gps_kanal": "lat/lon → nova tablica KanalGPSPing (TTL=15min), ne replicira se. TODO: migracija KanalPoruka.lat/lon → null + nova tablica.",
"p5_endpoint_spec": "GET /api/v1/brsljani/index mora vratiti krunica_hash u svakom indexu. Pull endpoint mora razlikovati jezgru u payload-u. Sprint zasebno.",
"pii_jurisdikcija": "Opcija 3 implementirana (PII nikad ne napušta čvor). Ako budemo trebali 'EU čvor svjedok HR fakture' → opcija 1 (country field routing). Za sada nije potrebno."
}
fajlovi{
"novi": [
"/var/www/genesis/services/ark_pii_filter.py"
],
"patchirani": [
"/var/www/genesis/services/brsljani.py — pusi_dokument() + tip parametar"
],
"deploy": [
"EU",
"MAR",
"DE"
]
}
zakoni[
"ZAKON_ARK_§4",
"ZAKON_ARK_§1",
"ZAKON_17",
"ZAKON_26",
"ZAKON_43"
]
verifikacijassh genesis-eu && cd /var/www/genesis && .venv/bin/python3 -c "from services.ark_pii_filter import filtriraj_i_potpisi; r=filtriraj_i_potpisi('archive_doc', {'weise3_id': 'a'*64, 'krunica_hash': 'K', 'client_oib': 'PII', 'cross_hash': 'C'}); assert 'client_oib' not in r; assert 'ark_potpis' in r; pr