
HiddenSteps — एक स्थानीय-प्रथम व्यक्तिगत कार्यप्रवाह खुफिया प्लेटफ़ॉर्म
यह docs/design/02-system-architecture.md के लक्षित मॉड्यूल मानचित्र का ईमानदार, वर्तमान-स्थिति पूरक है। यह बताता है कि वास्तव में क्या बनाया गया है, क्या वास्तविक बैकएंड के विरुद्ध सत्यापित किया गया है बनाम मॉक के विरुद्ध, और अभी भी वास्तव में क्या गायब है — न कि क्या योजनाबद्ध है (वह docs/roadmap/01-implementation-roadmap.md में है)।
रिपॉजिटरी रूट से cargo build --workspace && cargo test --workspace && cargo clippy --workspace --all-targets -- -D warnings चलाएँ। इस लेखन के समय: 12 क्रेट्स, 193 पासिंग टेस्ट, शून्य क्लिप्पी चेतावनियाँ, cargo fmt --check क्लीन — 183 उन 11 क्रेट्स में जिन्हें किसी डिस्प्ले या बाहरी सेवा की आवश्यकता नहीं है, साथ ही hiddensteps-observation में 10 जिन्हें लाइव X11 डिस्प्ले की आवश्यकता है (सत्यापित जहाँ एक मौजूद है; वह पंक्ति देखें)। चार टेस्ट डिज़ाइन द्वारा #[ignore] किए गए हैं (नीचे देखें) और उन्हें विफलताओं या 193 के भाग के रूप में नहीं गिना जाता है।
| क्रेट | कार्यान्वित करता है | कैसे सत्यापित किया गया |
|---|---|---|
hiddensteps-domain | कोर प्रकार: PrivacyLevel/PrivacyState, EventSummary/SignalType, Pattern, Recommendation, AuditEntry, और CapturedSignal — एक प्रकार जो संरचनात्मक रूप से पर्सिस्ट नहीं किया जा सकता (कोई Serialize नहीं), ADR-0006 के रॉ-डेटा नियम को प्रकार स्तर पर लागू करता है | यूनिट टेस्ट: स्तर राउंड-ट्रिपिंग/ऑर्डरिंग, डीप-मोड TTL गेटिंग |
hiddensteps-security | SecretStore (ADR-0008): वास्तविक OS-वॉल्ट (KeyringSecretStore) + इन-मेमोरी (टेस्ट) कार्यान्वयन; CSPRNG मास्टर-की जनरेशन (एक zeroize::Zeroizing रैपर में लौटाया गया ताकि की ड्रॉप पर मिट जाए न कि मुक्त मेमोरी में बनी रहे); पोर्टेबल मोड के लिए Argon2id पासफ्रेज़ व्युत्पत्ति (PassphraseKey अपनी व्युत्पन्न की को ड्रॉप पर शून्य करता है, गैर-गोपनीय नमक रखता है)। hiddensteps-event-store इसी तरह की-युक्त PRAGMA key/rekey SQL टेक्स्ट को Zeroizing में रखता है | इन-मेमोरी स्टोर और KDF के विरुद्ध यूनिट टेस्ट; वास्तविक-वॉल्ट राउंड ट्रिप #[ignore] है (नीचे देखें) |
hiddensteps-event-store | SqlCipherEventStore (ADR-0003): docs/design/07-database-schema.md से पूर्ण स्कीमा, गोपनीयता स्थिति, घटनाओं, ऑडिट लॉग, पैटर्न, पैटर्न↔घटना लिंक, पैटर्न एम्बेडिंग (नीचे नोट देखें), सिफारिशों, LLM प्रदाता कॉन्फ़िगरेशन, और सामान्य सेटिंग्स के लिए CRUD, साथ ही delete_all_data (लेन-देन संबंधी; रीलॉन्च से बचने वाले "सब कुछ हटाएँ" के लिए rekey भी करता है)/export_data/count_rows (डायग्नोस्टिक्स)/delete_expired_events (डीप-मोड TTL स्वीप, apps/desktop/src-tauri के आवधिक सिफारिश लूप से कहा जाता है — ttl_expires_at v0.1.0 से पर्सिस्ट किया गया था लेकिन इससे पहले किसी ने इसके पार की पंक्ति को हटाया नहीं था); विदेशी-कुंजी प्रवर्तन (PRAGMA foreign_keys = ON) ताकि schema.sql का ON DELETE CASCADE पैटर्न↔घटना लिंक पर वास्तव में चले | एक वास्तविक SQLCipher फ़ाइल के विरुद्ध 33 टेस्ट: गलत कुंजी खोलने में विफल होती है, समान कुंजी सही ढंग से फिर से खोलती है, डिलीट-ऑल हर तालिका को साफ़ करता है जिसमें नवीनतम भी शामिल हैं, रीकी राउंड-ट्रिप करता है, TTL स्वीप गैर-समाप्त घटनाओं को अकेला छोड़ देता है, कैस्केड डिलीट कोई अनाथ पैटर्न↔घटना लिंक नहीं छोड़ता |
hiddensteps-redaction | रिडक्शन इंजन (docs/design/05-privacy-model.md §4): API कुंजियों/टोकन/PEM कुंजियों/ईमेल/SSN/क्रेडिट कार्ड के लिए regex+Luhn डिटेक्टर, एक एन्ट्रॉपी-आधारित अस्पष्ट-गोपनीय डिटेक्टर, और अनिश्चितता-पर-ड्रॉप नीति | 30 टेस्ट, जिनमें जानबूझकर प्रतिकूल इनपुट शामिल हैं (गद्य में एम्बेडेड गोपनीयताएँ, निकट-मिस गैर-गोपनीयताएँ जैसे git SHA, डैशलेस/स्पेस्ड SSN, अंक-पैडेड कार्ड नंबर, सभी-एक-केस उच्च-एन्ट्रॉपी टोकन) |
hiddensteps-pipeline | इवेंट पाइपलाइन (ADR-0006): वर्गीकृत → रिडक्ट → सारांशित, प्रति सिग्नल प्रकार गोपनीयता-स्तर गेटिंग, डीप-मोड TTL असाइनमेंट | 8 टेस्ट जो रिडक्शन-ट्रिगर्ड ड्रॉप्स, स्तर-गेटिंग ड्रॉप्स, और सफल सारांशीकरण को कवर करते हैं |
hiddensteps-observation | ObservationSource (ADR-0005) + लिनक्स: ActiveWindowSource (X11 GetInputFocus), FileOperationSource (inotify via notify), ClipboardMetadataSource (X11 चयन, मेटाडेटा-केवल), GlobalShortcutSource (X11 XGrabKey)। साथ ही macOS/Windows स्रोत फ़ाइलें (नीचे देखें) | इस वातावरण में 11 में से 10 टेस्ट वास्तविक बैकएंड के विरुद्ध चलते हैं — एक लाइव X11 डिस्प्ले (WSLg का DISPLAY=:0) और वास्तविक inotify, मॉक नहीं। 1 टेस्ट (GlobalShortcutSource का वास्तविक ग्रैब) डिज़ाइन द्वारा #[ignore] है |
hiddensteps-llm-provider | LlmProvider (ADR-0004): Ollama क्लाइंट (हाइब्रिड-रीज़निंग मॉडल के लिए think: Option<bool> अनुरोध फ़ील्ड के साथ), एक OpenAI-वायर-संगत क्लाइंट (OpenAI/Azure/OpenRouter/Together/Groq/DeepSeek/LocalAI को कवर करता है), एक Anthropic Messages क्लाइंट, और स्थानीय-रनटाइम ऑटो-डिटेक्शन। हर क्लाइंट एक अनुरोध टाइमआउट सेट करता है (build_http_client) ताकि एक लटका हुआ रिमोट कॉल को हमेशा के लिए ब्लॉक न कर सके; Ollama max_tokens को अपने नेस्टेड options.num_predict के रूप में अग्रेषित करता है | wiremock मॉक सर्वर के विरुद्ध 19 टेस्ट (एक वास्तविक टाइमआउट-फायर चेक और यह कि Ollama वास्तव में num_predict भेजता है सहित), साथ ही 2 वास्तविक-Ollama एकीकरण टेस्ट (tests/ollama_live.rs, #[ignore] — नीचे देखें) जिन्होंने एक वास्तविक समस्या पाई और ठीक की: समान प्रॉम्प्ट ने think को उसके डिफ़ॉल्ट पर छोड़े जाने पर एक वास्तविक स्थानीय हाइब्रिड-थिंकिंग मॉडल के विरुद्ध दो मिनट से अधिक लिया, और think: Some(false) के साथ कुछ सेकंड |
hiddensteps-patterns | पैटर्न डिटेक्शन (स्लाइडिंग-विंडो n-gram अनुक्रम मिलान) + वर्कफ़्लो ग्राफ़ (किनारे भार के साथ संक्रमण ग्राफ़) — ADR-0010 की परत 1 | 16 टेस्ट, जिनमें PROMPT.md के अपने "31 बार देखा गया" उदाहरण का प्रत्यक्ष अनुरूप और एक प्रतिगमन टेस्ट शामिल है कि निरंतर दोहराव पर ओवरलैपिंग विंडो दोगुनी नहीं गिनी जाती हैं |
hiddensteps-recommendations | सिफारिश इंजन की परत 2 (ADR-0010): संरचित-JSON प्रॉम्प्ट अनुबंध के साथ LLM संश्लेषण, एक कथा-विरोधाभास वैलिडेटर, और एक पुनःप्रयास लूप — महत्वपूर्ण रूप से, संख्यात्मक फ़ील्ड (estimated_time_saved_minutes) LLM के आउटपुट से कभी पार्स नहीं किए जाते, केवल परत 1 से गणना किए जाते हैं | 23 टेस्ट, जिनमें विकृत-JSON पुनःप्रयास, कथा-विरोधाभास पुनःप्रयास (वर्तनी-आउट संख्याओं और हर LLM-नियंत्रित फ़ील्ड को कवर करते हुए, केवल why नहीं), और स्ट्रिंग-जागरूक JSON निष्कर्षण, एक स्क्रिप्टेड टेस्ट प्रदाता के विरुद्ध शामिल हैं |
hiddensteps-privacy-engine | क्लाउड-डिस्पैच गेट (docs/design/03-data-flow-diagrams.md §5) और सहमति संस्करण (docs/design/05-privacy-model.md §5); PrivacyGatedProvider किसी भी LlmProvider को लपेटता है ताकि गेट को सामान्य कॉल पथ से बायपास न किया जा सके | 13 टेस्ट, जिनमें यह भी शामिल है कि स्तर-4 सामग्री हर सहमति दिए जाने पर भी अवरुद्ध है |
hiddensteps-plugin-host | WASM प्लगइन होस्ट (ADR-0009): बंद क्षमता गणना, मैनिफेस्ट सत्यापन, एक wasmtime-समर्थित सैंडबॉक्स जो केवल अनुदत्त क्षमताओं के होस्ट फ़ंक्शन को लिंक करता है, साथ ही ईंधन मीटरिंग और एक मेमोरी ResourceLimiter जो प्लगइन इंस्टेंस के CPU/मेमोरी को सीमित करता है चाहे उसके पास कौन सी क्षमताएँ हों — वे दो अक्ष जिन्हें docs/research/06-threat-model.md का डेनियल-ऑफ-सर्विस अनुभाग नाम देता है जिन्हें अकेले क्षमता प्रवर्तन संबोधित नहीं कर सकता (एक क्षमता-मुक्त मॉड्यूल अभी भी हमेशा के लिए लूप या मेमोरी बढ़ा सकता है)। instantiate_from_manifest सुरक्षित प्रवेश बिंदु है: यह मैनिफेस्ट सत्यापन को बाध्य करता है (स्क्रीनशॉट के लिए स्तर-4-आवश्यक नियम) और मैनिफेस्ट द्वारा घोषित नहीं की गई किसी भी चीज़ को अनुदान देने से अस्वीकार करता है, किसी भी क्षमता के लिंकर तक पहुँचने से पहले — सादे instantiate क्षमता स्लाइस का मैनिफेस्ट से कोई संबंध नहीं है | 20 टेस्ट, जिनमें वास्तविक क्षमता-पलायन प्रयास शामिल हैं: टेस्ट समय पर संकलित हाथ-लिखित WAT मॉड्यूल, यह साबित करते हुए कि एक अनुदत्त-नहीं क्षमता का आयात वास्तव में अनसुलझा है (इंस्टेंटिएशन विफल होता है), केवल अप्रयुक्त नहीं; साथ ही एक वास्तविक अनंत-लूप मॉड्यूल और एक असीमित-memory.grow मॉड्यूल जो लटकने/मेमोरी समाप्त करने के बजाय ट्रैप करते हैं |