TgWitness / दस्तावेज़ीकरण

क्या परीक्षण किया गया है →

संदर्भ / संग्रह और एकीकरण

Telegram · केस बोर्ड संदर्भ

बुकमार्क, सटीक हाइलाइट्स, एक्शन स्लाइस, चर्चाएँ, स्कोप्ड एक्सेस और केस बोर्ड द्वारा उपयोग की जाने वाली हस्ताक्षरित एनोटेशन इतिहास।

टीजीविटनेस / दस्तावेज़ीकरण · जांच

जांच

केस बोर्ड एक जांच टीम को सहेजी गई सामग्री का एक साझा कार्यशील दृश्य प्रदान करता है। किसी अवलोकन को बुकमार्क करें, एक सटीक अंश को हाइलाइट करें, क्रियाओं की एक श्रृंखला सहेजें, और अपने सहकर्मियों के साथ चर्चा करें। कार्ड अपने स्रोत संदर्भों और हस्ताक्षरित संशोधन इतिहास को बनाए रखते हैं। टीम की टिप्पणियाँ कार्यक्षेत्र में रहती हैं, जो मूल टेलीग्राम अवलोकनों से अलग पहचान योग्य होती हैं।

साक्ष्य मॉडल · पहुँच · रिपोर्टें

कृत्रिम जांच फ़ीड

इस पृष्ठ पर

एक मामले के साथ काम करें#

जांच → केस बोर्ड को मानक या विशेषज्ञ मोड में खोलें। भाषा पैनल के अनुसार होती है। किसी जर्नल रिकॉर्ड या सहेजे गए चैट संदेश के बगल में 'To board' का उपयोग करें, या उस पर ध्यान केंद्रित करें और B दबाएँ। बुकमार्क एक ही क्लिक में इनबॉक्स में जुड़ जाता है। इसके शीर्षक, लेबल और नोट को संपादित करें, या इसे किसी संग्रह में ले जाएँ। एक बदला हुआ कार्ड एक हस्ताक्षरित संशोधन जोड़ता है; इसे हटाने से इतिहास सुरक्षित रहता है।

पहले मामले के लिए, एक संग्रह चुनें और उन रिकॉर्ड्स को जोड़ें जो एक प्रश्न का उत्तर देते हैं। व्याख्या की समीक्षा के लिए टिप्पणियों का उपयोग करें, फिर कार्ड और स्रोत संदर्भ को देखने के लिए प्रस्तुति का उपयोग करें। डिलीवेरेबल तैयार करते समय रिपोर्ट स्टूडियो में केस बोर्ड सामग्री को अलग से चुनें। एक स्लाइस को सेव करने से रिपोर्ट के डेटा फ़िल्टर स्वचालित रूप से कॉन्फ़िगर नहीं होते हैं।

हाइलाइट → बोर्ड दिखाने के लिए सहेजे गए चैट संदेश के अंदर टेक्स्ट चुनें। इसका रंग चुनें और एक नोट जोड़ें। सर्वर सटीक उद्धरण और सहेजे गए संस्करण की जाँच करता है, जिसमें इमोजी, आरटीएल टेक्स्ट और संयोजन चिह्न शामिल हैं। इंटरफ़ेस मास्क्ड या रूपांतरित टेक्स्ट के माध्यम से चयन को मैप नहीं करता है।

एक चैट में दो रिकॉर्ड्स को शिफ्ट-क्लिक करके बीच में स्लाइस करें, समय के अनुसार स्लाइस का उपयोग करें, या जर्नल के वर्तमान चैट, अवधि और इवेंट-प्रकार फ़िल्टर सहेजें। एक सहेजे गए स्लाइस का अपना आधिकारिक प्रेडिकेट होता है: इसे जर्नल में खोलने पर कई चैट, संदेश-संख्या सीमाएं और एक्टर फ़िल्टर भी लागू होते हैं। बुकमार्क के बाद जोड़े गए रिकॉर्ड दिखाएँ विकल्प बाद के परिवर्धन को अलग करता है। जर्नल फ़िल्टर बदलने से स्लाइस समाप्त हो जाता है। लोगों से, 'इस व्यक्ति की क्रियाओं को स्लाइस करें' रिकॉर्ड की गई एक्टर आईडी का उपयोग करता है; यह यह मानकर नहीं चलता कि संदेश के लेखक ने किसी संदेश को संपादित, हटाया या उस पर प्रतिक्रिया दी है।

स्लाइस डायलॉग बनाने की अनुमति देने से पहले गिनती का पूर्वावलोकन दिखाता है। all में हर रिकॉर्ड की गई श्रेणी शामिल है, जिसमें स्नैपशॉट, संपादन, हटाना, प्रतिक्रियाएं, सदस्यता/सेवा अपडेट, अपने स्वयं के कार्य, बटन, मीडिया परिणाम, पुनर्प्राप्त संदेश और भविष्य की घटनाओं की श्रेणियां शामिल हैं। चयन सहेजे गए अवलोकनों का वर्णन करता है। अज्ञात-चैट हटाने की सूचनाएं एक अलग संदर्भ हैं, जो केवल पूरे वर्कस्पेस तक पहुंच रखने वालों के लिए उपलब्ध हैं, और कभी भी चुने गए चैट में से किसी एक से नहीं जोड़ी जातीं।

संग्रहों का एक घोषित चैट दायरा होता है। एक खाली दायरा का अर्थ है पूरा कार्यक्षेत्र। एक संग्रह में अपने दायरे के बाहर के कार्ड नहीं हो सकते; एक चैट-सीमित प्रतिभागी एक व्यापक संग्रह को नहीं पढ़ सकता। इनबॉक्स अनसाइन किए गए कार्डों के लिए एक आभासी संग्रह है। खोज और फ़िल्टर केवल दिखाई देने वाले कार्ड को कवर करते हैं; थ्रेड और उल्लेख मूल कार्ड की पहुंच को विरासत में प्राप्त करते हैं। हटाई गई टिप्पणियों का चर्चा में एक टॉम्बस्टोन होता है। कोई दर्शक इतिहास दर्ज नहीं किया जाता है।

प्रस्तुतीकरण चुने हुए संग्रह में सभी कार्ड खोलता है, जिसमें कार्ड, स्रोत संदर्भ और टीम टिप्पणियों के दृश्य और कीबोर्ड के पिछले/अगले नियंत्रण होते हैं। इसमें कोई संपादन नियंत्रण नहीं होते हैं। सामान्य फ़ीड को पन्नों में विभाजित किया गया है; प्रस्तुतीकरण इसकी सूची को पन्नों में लोड करता है और एक समय में एक कार्ड का विवरण प्राप्त करता है।

अनुमतियाँ#

सभी संचालनों के लिए view, कार्यक्षेत्र/चैट दायरा और board.read की आवश्यकता होती है। board.write कार्ड, टिप्पणियाँ, मूव और खुला/समीक्षा स्थिति जोड़ता है। board.manage संग्रह प्रबंधन, पुष्टि/अस्वीकृत स्थिति, किसी और के कार्ड में संशोधन/हटाने की अनुमति देता है। एक स्थिति एक टीम का निर्णय है, न कि क्रिप्टोग्राफिक सत्यापन का परिणाम।

एक्सेस फॉर्म प्रीसेट: समीक्षक = पढ़ें; विश्लेषक = पढ़ें/लिखें; ऑपरेटर = पढ़ें/लिखें/प्रबंधित करें, उनकी मौजूदा अनुमतियों के अतिरिक्त। मौजूदा अनुदान चुपचाप नए अधिकार प्राप्त नहीं करते हैं। मुख्य प्रशासक के पास सभी अधिकार हैं, और वह मुख्य प्रशासक के रूप में पोस्ट करता है। श्रेय देने के लिए नामित अनुदानों का उपयोग करें। उल्लेख सूची में केवल वर्तमान पहुंच वाले लोग शामिल होते हैं जो पूरा मूल कार्ड पढ़ने में सक्षम हैं।

चैट A के लिए एक ग्रांट, A+B के लिए एक कार्ड या स्लाइस प्राप्त नहीं कर सकता, भले ही वह इसका आईडी अनुमान लगाकर या एक गलत target.chat_id प्रदान करके ऐसा करे। टारगेट मेटाडेटा सर्वर पर साइन किए गए इवेंट हैश से हल किया जाता है। प्रतिक्रिया से पहले संग्रह, चर्चा की गिनती, संबंधित कार्ड और लाइव सूचनाएं फ़िल्टर की जाती हैं। एक्सपोर्ट के लिए export के साथ-साथ board.read की भी आवश्यकता होती है; बोर्ड एक्सेस के बिना एक मौजूदा एक्सपोर्टर को टीम नोट्स के बिना साधारण एविडेंस आर्काइव मिलता है। SSE प्रत्येक बैच से पहले मौजूदा ग्रांट्स की पुनः जाँच करता है।

संग्रहीत अनुबंध#

अवलोकनों की तरह, वर्णनात्मक टिप्पणियाँ कार्यक्षेत्र में एक केवल-संलग्न (append-only) SQLite तालिका में लेन-देन के रूप में लिखी जाती हैं।annotations.jsonl उसी रीड स्नैपशॉट से इसका सटीक मानक निर्यात है, जैसे किevents.jsonl। कोई दूसरा प्रतिस्पर्धी टिप्पणी भंडार नहीं है और कोईboard.activity जर्नल इवेंट नहीं है।

प्रत्येक पंक्ति में ठीक-ठीक:

{
  "seq": 1,
  "at": "2026-11-02T14:00:00.000+00:00",
  "access_id": "admin",
  "access_label": "Main administrator",
  "kind": "board.bookmark",
  "payload": {"id": "32 lowercase hex digits", "target": {"event_hash": "64 lowercase hex digits"}},
  "previous_hash": "64 zeroes for the first record",
  "hash": "SHA-256 described below",
  "signature": "base64 Ed25519 signature"
}

ऊपर दिया गया संक्षिप्त उदाहरण लिफाफे (envelope) को दर्शाता है; वास्तविक पेलोड में उनके मॉडल डिफ़ॉल्ट और सर्वर-समाधान किए गए लक्ष्य फ़ील्ड शामिल होते हैं। एपीआई अनुरोध स्कीमा tgwitness/schemas के अंतर्गत हैं, जो रनटाइम Pydantic मॉडल से python tools/build_board_schemas.py द्वारा उत्पन्न होते हैं। अतिरिक्त अनुरोध फ़ील्ड अस्वीकार कर दिए जाते हैं। जब आईडी छोड़ी जाती हैं, तो वे सर्वर-साइड पर उत्पन्न की जाती हैं। लेखकता, समय, स्नैपशॉट और हस्ताक्षर कॉलर द्वारा प्रदान नहीं किए जा सकते। नामित ग्रांट आईडी एक्सेस के मौजूदा 16-हेक्स प्रारूप का पालन करते हैं; कार्ड आईडी 32 हेक्स की होती हैं।

कैनोनिकल JSON, UTF-8, क्रमबद्ध ऑब्जेक्ट कुंजियाँ, टोकन के बीच कोई रिक्त स्थान नहीं, अनएस्केपड यूनिकोड, और कोई NaN/अनंतताएँ नहीं होता है। एनोटेशन हैश, कैनोनिकल ऑब्जेक्ट का SHA-256 है जिसमें format: "tgwitness-annotations-v1" और previous_hash तक के सभी सात लिफाफा फ़ील्ड शामिल हैं। यह फ़ॉर्मेट टैग अपने हैश डोमेन को अवलोकनों से अलग करता है। हस्ताक्षर 32 कच्चे हैश बाइट्स पर Ed25519 है। अनुक्रम 1 से शुरू होता है। संशोधन कार्ड आईडी को बरकरार रखते हैं और पिछले एनोटेशन हैश को supersedes में नाम देते हैं; वे चैट स्कोप नहीं बदल सकते। मूव्स, स्टेटस और रिमूवल अलग-अलग रिकॉर्ड हैं। SQLite तालिका UPDATE और DELETE को अस्वीकार करती है।

case-board.json में {statement, signature} होता है। मानक कथन को वर्कस्पेस कुंजी द्वारा हस्ताक्षरित किया जाता है और इसमें format: "tgwitness-case-board-v1", public_key, created_at, journal_head, meaning, और state होता है। स्थिति निर्धारकीय रीप्ले है: annotations_head, एक क्रमबद्ध items ऐरे (संग्रह, कार्ड, टिप्पणियाँ जिसमें टॉम्बस्टोन शामिल हैं), और status_history। आइटम संशोधनों के पार अपनी अंतिम एनोटेशन हैश, अनुक्रम, लेखक और समय, साथ ही मूल निर्माता और निर्माण समय को बनाए रखते हैं। रीप्ले संशोधनों, पेरेंट्स, संग्रह संदर्भों और डुप्लिकेट एक्शन आईडी की जांच करता है।manifest.json और नए चेकपॉइंट भी annotations_head को बांधते हैं। एक कॉपी की गई साइनिंग कुंजी के साथ ट्रंकेशन या पुनर्लेखन का पता लगाने के लिए स्वतंत्र रूप से एक चेकपॉइंट बनाए रखें।

टेक्स्ट संस्करण#

range.start एक शून्य-आधारित यूनिकोड कोड-पॉइंट ऑफ़सेट है, length एक सकारात्मक कोड-पॉइंट काउंट है, और quote को लक्ष्य इवेंट पर payload.text या payload.caption की सटीक सबस्ट्रिंग के बराबर होना चाहिए। कोई NFC/NFKC, केस फोल्डिंग या ग्रैफ़ीम नॉर्मलाइज़ेशन लागू नहीं किया जाता है। पाइथन स्ट्रिंग स्लाइस और जावास्क्रिप्ट Array.from(text) समान इंडेक्सिंग को लागू करते हैं। मार्क्स और ZWJ इमोजी को मिलाने से कई कोड पॉइंट्स घेरे जा सकते हैं। range.version टारगेट इवेंट हैश है, न कि वर्तमान संदेश संस्करण या टेलीग्राम का UTF-16 एंटिटी ऑफ़सेट। बाद में किए गए संपादन कभी भी हाइलाइट को स्वचालित रूप से नहीं स्थानांतरित करते हैं।

पहचान और समय को स्लाइस करें#

query ठीक एक chat_id या गैर-खाली chat_ids स्वीकार करता है, वैकल्पिक समावेशी from/to, समावेशी संदेश-आईडी सीमाएँ (केवल एक चैट), kinds: "all" या सटीक/प्रिफिक्स वाइल्डकार्ड किस्में, स्पष्ट actors, search, hide_system, और include_unscoped। जर्नल किस्म समूह अपने सटीक प्रागकथनों में विस्तार करते हैं। खोज, हस्ताक्षरित स्रोत पाठ को बदले बिना जर्नल की NFC/केस-फोल्डेड पेलोड खोज का उपयोग करती है। दिनांकों के लिए एक टाइमज़ोन की आवश्यकता होती है और वे UTC में सामान्यीकृत हो जाती हैं। तारीखें observed_at को फ़िल्टर करती हैं। टेलीग्राम का source_at अलग से प्रदर्शित होता है। स्रोत टाइमस्टैम्प के बिना किसी हटाने की कोई काल्पनिक हटाने का समय नहीं होता है। किसी समय अंतराल के बाहर देखा गया कोई देर से रिकॉर्ड उसमें शामिल नहीं होता है; एक मैसेज-आईडी स्लाइस में उन मैसेज आईडी के लिए एक बाद का हटाना शामिल हो सकता है।

snapshot निर्माण समय, जर्नल अनुक्रम/हैश सीमा, मिलान की संख्या, पहला/अंतिम अनुक्रम और result_hash को ठीक करता है। बाद वाला, मिलान वाले इवेंट हैशों की UTF-8 मानक JSON सरणी का SHA-256 है, जिसे शब्दकोशीय रूप से क्रमबद्ध किया गया है, जिसमें खाली स्लाइस के लिए [] भी शामिल है। इसमें सटीक किस्मों की गिनती और अवलोकन-समय का 24-बिन मिनिएचर भी होता है। एक स्लाइस एक क्वेरी संग्रहीत करता है, न कि डुप्लिकेट स्रोत रिकॉर्ड। एक्सपोर्ट पर, board/slices/<id>.json वर्तमान हैश और जोड़े गए/हटाए गए अनुक्रमों की सूची देता है। सत्यापनकर्ता निर्माण सीमा पर मूल परिणाम को फिर से बनाता है, और उसके बाद वर्तमान परिणाम को। जोड़े गए रिकॉर्ड को एक परिवर्तन तथ्य के रूप में रिपोर्ट किया जाता है। किसी मूल घटना को हटाने से अपरिवर्तनीय साक्ष्य श्रृंखला टूट जाती है; इसे स्लाइस से एक साधारण हटाने के रूप में चुपचाप स्वीकार नहीं किया जाता है।

प्रतिक्रिया स्नैपशॉट में हाल के-एक्टर्स की अधूरी सूचियाँ होती हैं। एक्सप्लोरर एक ही चैट/संदेश के आसन्न स्नैपशॉट की तुलना करता है, जिसमें स्लाइस के बाहर का एक पूर्ववर्ती भी शामिल है, और अवलोकनों के बीच कुल गिनती में हुए बदलावों की रिपोर्ट करता है। यह दावा नहीं किया जाता कि हाल के एक्टर्स के गायब होने से कोई प्रतिक्रिया हटा दी गई है। पहली स्नैपशॉट का कोई अनुमानित पिछला राज्य नहीं होता है। एक्टर अवलोकन उस स्नैपशॉट से जुड़े रहते हैं जिसमें वे प्रदान किए गए थे, न कि किसी काल्पनिक क्रिया समय से।

एपीआई और एक्सपोर्ट्स#

GET /api/board संग्रह/चैट/लेखक/लेबल/स्थिति/से/को/q/प्रकार/टिप्पणियाँ, ऑफ़सेट/सीमा और नवीनतम/सबसे पुराना क्रम स्वीकार करता है। GET /api/board/card/{id} एक कार्ड, स्रोत पूर्वावलोकन, थ्रेड, स्थिति इतिहास और संबंधित कार्ड लौटाता है। प्रतिभागी सबरूट योग्य उल्लेख विकल्प लौटाता है। POST /api/board/{bookmark|highlight|slice|collection|comment|status|move|remove} एक रिकॉर्ड जोड़ता है। POST /api/board/slice-preview एक क्वेरी की गणना करता है। स्लाइस रिकॉर्ड्स को GET /api/board/slice/{id}/records पर पेज किया जाता है; पुनर्गणना हमेशा वर्तमान स्थिर रीड स्नैपशॉट का उपयोग करती है। लाइव /api/stream जर्नल कर्सर्स से अलग, पेयलोड-मुक्त board सूचनाएं उत्सर्जित करता है।

GET /api/board/export एक हस्ताक्षरित दस्तावेज़ लौटाता है। चैट-सीमित पहुँच को एक स्पष्ट रूप से लेबल किया गया हस्ताक्षरित प्रकटीकरण प्राप्त होता है, कभी भी किसी अन्य चैट की टिप्पणियाँ या पूरी श्रृंखला नहीं। पूर्ण साक्ष्य ज़िप्स में annotations.jsonl, हस्ताक्षरित case-board.json और स्लाइस JSON परिशिष्ट होते हैं। HTML/PDF/JSON रिपोर्ट सेटिंग्स में कोई बोर्ड नहीं, चर्चा के बिना बुकमार्क/स्लाइस, या टिप्पणियों वाले कार्ड चुनने का विकल्प होता है। यह अनुभाग स्पष्ट रूप से टीम की राय को अवलोकनों से अलग करता है। रिपोर्ट डेटा फ़िल्टर पठनीय नोट्स को भी सीमित करते हैं; सबूत वाले ZIP में पूरी तरह से हस्ताक्षरित स्रोत फ़ाइलें पूरी तरह से बरकरार रहती हैं।

GET /api/board/slice/{id}/export एक हस्ताक्षरित tgwitness-board-selection-v1 JSON अंश उत्पन्न करता है; ?format=csv एक सुविधाजनक तालिका उत्पन्न करता है जिसमें कोई स्वतंत्र हस्ताक्षर नहीं होता। JSON और ZIP को रखें:

python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_KEY_SHA256 --board
python -m tgwitness.verify board-slice.json --evidence evidence.zip --fingerprint TRUSTED_KEY_SHA256
python -m tgwitness.verify case-board.json --evidence evidence.zip --fingerprint TRUSTED_KEY_SHA256

चयन जांच हस्ताक्षरित बयान, सटीक स्रोत रिकॉर्ड और निर्दिष्ट सीमा पर इसकी क्वेरी की पूर्णता को प्रमाणित करती है। साक्ष्य ज़िप (ZIP) नया हो सकता है लेकिन उसमें वह उपसर्ग होना चाहिए। एक डैंगलिंग टारगेट (dangling target) को स्पष्ट रूप से रिपोर्ट किया जाता है। एक अलग मूल स्लाइस स्नैपशॉट, बदली हुई एनोटेशन, मेल न खाने वाली रिप्ले स्थिति या बदला हुआ स्रोत विफल हो जाता है। अनुलेखन के बिना पुराने पुरालेख अपने मौजूदा सत्यापन व्यवहार को बनाए रखते हैं।

हैंडओवर डिफ़ॉल्ट रूप से 'शामिल न करें' होता है। स्पष्ट समावेशन पहले से ही संक्षिप्त किए गए रिकॉर्ड्स के माध्यम से कार्ड प्रदर्शित करता है, अस्वीचे/छूटे हुए लक्ष्यों को छोड़ देता है, उन हाइलाइट्स को रोकता है जिनका स्रोत पाठ संक्षिप्त किया गया था, टीम के पाठ को समान उल्लेख/संपर्क नियमों के साथ साफ करता है, और वैकल्पिक रूप से मेटाडेटा में और नोट्स में ज्ञात घटनाओं में अन्वेषक लेबलों को R01, R02… से बदल देता है। कोई मूल annotations.jsonl प्रकट नहीं किया जाता है। हस्ताक्षरित tgwitness-case-board-handover-v1 साइडकार और रिपोर्ट में वही संक्षिप्त सामग्री होती है। स्लाइस काउंट केवल प्रकट किए गए रिकॉर्ड का वर्णन करते हैं, जिसमें मूल स्नैपशॉट/क्वेरी एक्टर का विवरण छिपाया गया होता है। मिनिमाइज़र को ज्ञात न होने वाले मुक्त-पाठ नामों की समीक्षा की आवश्यकता होती है, जैसा कि साधारण हैंडओवर में होती है। यह व्युत्पन्न संस्करण रेडैक्शन के बाद मूल एनोटेशन हस्ताक्षरों को संरक्षित करने का दावा नहीं करता है।

संचालन सीमाएँ#

पैरामीटर में 10,000 कार्ड और 50,000 टिप्पणियों की सॉफ्ट सीमाएं, 5,000 रिकॉर्ड तक का एक स्लाइस पेज, और मीडिया-प्रीव्यू नियंत्रण शामिल हैं। सॉफ्ट सीमाएं इतिहास को हटाए बिना चेतावनी देती हैं। फीड पेज अधिकतम 200 कार्ड के होते हैं। स्टैंडअलोन JSON स्लाइस अंश 64 MiB तक सीमित हैं; क्वेरी को संकीर्ण करें या बड़ी सामग्री के लिए हस्ताक्षरित ZIP का उपयोग करें। स्टैंडअलोन वेरिफायर 256 MiB पर एनोटेशन प्लेबैक को सीमित करता है। केस बोर्ड द्वारा कोई बाहरी टिप्पणी सूचनाएं सक्षम या लागू नहीं की गई हैं।

इस फ़ीचर की स्वचालित स्वीकृति, भंडारण, पहुँच, रेंडरिंग और निर्यात की जाँच करने के लिए काल्पनिक डेटा और एक सिम्युलेटेड टेलीग्राम ट्रांसपोर्ट का उपयोग करती है। साक्ष्य जाँच के दायरे के लिए सत्यापन दायरा देखें।