diff --git a/README.md b/README.md index f166e88..ce5b845 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,6 @@

- Interactive Demo • The Problem • Capabilities • Architecture • @@ -26,14 +25,6 @@ --- -## 🎬 Ephemeral Protocol in Action - -

- Passli Ephemeral Share Pass Protocol in Action -

- ---- - ## 🔒 The Problem Passli Solves When sharing sensitive records with doctors, employers, financial institutions, or rental agencies, users are traditionally forced to: @@ -48,18 +39,8 @@ When sharing sensitive records with doctors, employers, financial institutions, ## ✨ Core Platform Capabilities ### 🗄️ 1. Personal Document Vault - -

- Passli Personal Vault Dashboard & Document Manager UI -

- - **Domain Taxonomy**: Organize records into structured categories (`Medical`, `Education`, `Vehicle`, `Personal & Identity`, `Professional`, `Other`). - **Encrypted Document Browser**: Filterable vault with instant search and cryptographic SHA-256 integrity inspection. - -

- Passli Encrypted Document Vault & Category Filter -

- - **Storage Migration CLI**: Includes `python manage.py encrypt_vault_storage` for seamless batch migration of legacy storage records. ### 🔑 2. Cryptographic Share Passes & Ephemeral QR Protocol @@ -113,10 +94,6 @@ When sharing sensitive records with doctors, employers, financial institutions, ## 🔐 Cryptographic Architecture Flow -

- Passli Cryptographic Pipeline Architecture: AES-256-GCM AEAD Ingestion & In-Memory Streaming -

- ```mermaid flowchart TD subgraph Ingestion["Document Upload & Storage"] diff --git a/tests/unit/test_repo_visual_identity.py b/tests/unit/test_repo_visual_identity.py index 4ff409a..528c70f 100644 --- a/tests/unit/test_repo_visual_identity.py +++ b/tests/unit/test_repo_visual_identity.py @@ -80,21 +80,39 @@ def test_vault_documents_asset(self): self.assertEqual(im.size, (1376, 768)) def test_readme_references_assets(self): - """README.md must reference the visual identity assets via valid relative paths.""" + """README.md must reference only the primary unique identification banner.""" + import re + self.assertTrue(self.readme_path.exists(), "README.md must exist") content = self.readme_path.read_text(encoding="utf-8") - required_assets = [ - ".github/assets/passli-repo-banner.png", + # Primary unique identification hero banner must be referenced and exist + primary_banner = ".github/assets/passli-repo-banner.png" + self.assertIn(primary_banner, content, f"README.md must contain relative link to {primary_banner}") + self.assertTrue((self.base_dir / primary_banner).exists(), f"Asset {primary_banner} must exist on disk") + + # Extract all image tags (HTML and Markdown ![...](...)) + html_imgs = re.findall(r']*src=[\x22\x27]([^\x22\x27]+)[\x22\x27]', content) + md_imgs = re.findall(r'!\[[^\]]*\]\(([^)]+)\)', content) + all_imgs = html_imgs + md_imgs + + # Local asset images embedded in README must ONLY consist of the primary banner + local_asset_imgs = [img for img in all_imgs if ".github/assets" in img or not img.startswith("http")] + self.assertEqual( + local_asset_imgs, + [primary_banner], + f"README.md must contain only the primary banner as embedded local asset, found: {local_asset_imgs}", + ) + + # Secondary visual embeds must not be embedded anywhere in README.md + secondary_assets = [ ".github/assets/passli-ephemeral-workflow.gif", ".github/assets/passli-dashboard-preview.png", ".github/assets/passli-vault-documents.png", ".github/assets/passli-cryptographic-pipeline.png", ] - for asset in required_assets: - self.assertIn(asset, content, f"README.md must contain relative link to {asset}") - target_file = self.base_dir / asset - self.assertTrue(target_file.exists(), f"Asset {asset} referenced in README.md must exist") + for asset in secondary_assets: + self.assertNotIn(asset, content, f"README.md should not embed secondary asset {asset}") def test_architecture_doc_references_assets(self): """docs/ARCHITECTURE.md must reference architecture and workflow assets.""" @@ -114,6 +132,7 @@ def test_branding_doc_exists_and_references_assets(self): self.assertIn("passli-repo-banner.png", content) self.assertIn("passli-ephemeral-workflow.gif", content) self.assertIn("passli-dashboard-preview.png", content) + self.assertIn("passli-vault-documents.png", content) self.assertIn("passli-cryptographic-pipeline.png", content) def test_asset_catalog_doc_references_all_assets(self): @@ -125,14 +144,17 @@ def test_asset_catalog_doc_references_all_assets(self): "passli-repo-banner.png", "passli-ephemeral-workflow.gif", "passli-dashboard-preview.png", + "passli-vault-documents.png", "passli-cryptographic-pipeline.png", ]: self.assertIn(asset_filename, content) self.assertTrue((self.assets_dir / asset_filename).exists()) def test_generator_scripts_exist(self): - """Scripts to generate GIF and dashboard preview must exist and be accessible.""" + """Scripts to generate GIF, dashboard preview, and official banner must exist and be accessible.""" gif_script = self.base_dir / "scripts" / "generate_ephemeral_flow_gif.py" dash_script = self.base_dir / "scripts" / "generate_dashboard_preview.py" + official_script = self.base_dir / "scripts" / "generate_official_repo_assets.py" self.assertTrue(gif_script.exists(), "generate_ephemeral_flow_gif.py must exist") self.assertTrue(dash_script.exists(), "generate_dashboard_preview.py must exist") + self.assertTrue(official_script.exists(), "generate_official_repo_assets.py must exist")